Temporal conformance, performance gates and audit workflows

RE-E4 exits here. The supported temporal/profile matrix is explicit, every supported combination verifies independently, and the when/why workflows below say exactly which mode to reach for. Anything outside the matrix rematerializes explicitly — failure never yields a partial interval result.

Supported combinations

  • Positive typed rules + interval validity: full range closure, segment memoization, DRed-style maintenance over change segments, per-interval evidence, pinned catalogs and staged generations. Verified by verify_closure (independent re-segmentation, per-segment point evaluation, derivation and coverage checks).

  • Stratified negation / aggregates / closed scopes: point evaluation only, via explicit per-point stratified runs. Range evaluation rejects these fragments; there is no range-negation mode.

  • Equality: per-segment canonicalization with per-segment scopes. No global merges across segments or horizons.

  • Storage backends: historical readback and orphan recovery run where the backend capability exists and skip otherwise; pure-core behavior never depends on a backend.

verify_closure is the conformance gate: supported paths verify, and any drift — stale segments, missing supports, uncovered validity — fails closed demanding rematerialization.

Measured gates

benchmarks/reasoning_temporal.py freezes the evidence in benchmarks/results/reasoning-re22-temporal.json (fragmented 20/60-edge chains, 3 repeats): extraction is sub-millisecond (pure cut-point sweep), inference ~3.5ms/11.6ms, single-validity updates ~0.9ms/5.7ms against ~3.4ms/12ms full rebuilds with 38/1 and 118/1 reuse ratios. Peak RSS stays under 55MB. Limit breaches raise before publishing anything: failed runs return no closure, no generation and no index.

When/why workflows

  • When did this hold? Point-query closure.at(t) for instants; answers(fact) for the exact validity union with per-interval evidence from evidence(fact).

  • Why did this change? update_range reports added/removed facts plus reuse diagnostics; every removal traces to changed premises.

  • Is this generation trustworthy? verify_closure re-derives the segmentation, re-evaluates every segment and checks every derivation; pin the generation with RuleCatalog/PinnedGeneration and staged compare-and-publish at the storage boundary.

  • What broke the build? Re-run the failing mode with incremental=False: agreement implicates the memoization path, disagreement implicates the inputs.