Skip to content

scientific(analysis): exclude future-only cross-snapshot rows before provenance admission #595

Open

Description

@seonghobae

Scientific / temporal finding

longitudinal_cwc_v1 checked every LongitudinalClusterScore.snapshot_id before applying historical AvailableTime <= knowledge_cutoff admission. A row that did not exist at the requested cutoff could therefore change an earlier replay from a successful CWC result into AnalysisEngineError::SnapshotMismatch solely because that future-only row named another snapshot.

That conflicts with surviving Analysis Run vehicle #416's leakage invariant: evidence with AvailableTime > knowledge_cutoff must not enter historical scientific census, duplicate/domain admission, counts, artifacts, or terminal scientific results. #592/#593 already establish the same cutoff-before-identity/output rule for longitudinal CWC. Snapshot provenance remains mandatory for rows that are actually cutoff-visible.

#372 has been non-destructively retargeted to #416 for consolidation. Current exact child head after this repair lineage is c9a99ff5116c1b974535498d98d6731066b371ac.

Ordinary-forward RED / repair

  • Public RED 0ea8f6573d8519762e3ef9038ec4c4892c8e3a8b keeps a cutoff-visible foreign-snapshot row fail-closed, and requires a future-unavailable foreign-snapshot row to leave baseline artifact and terminal result exactly unchanged.
  • Causal repair 07360220cf8e7018107b271dc8e6e2c2f49b0c58 moves availability admission ahead of snapshot provenance and evidence-identity checks. Raw MAX_EVIDENCE_UNITS admission remains before filtering.
  • ADR 0033 currentization b4edede35ef26e7445fce94883de918b46c962f2 and doctoring c9a99ff5116c1b974535498d98d6731066b371ac record the decision and retain scientific: establish longitudinal CWC recovery acceptance evidence #501 as the scientific recovery-acceptance owner.

Acceptance boundary

The repair must survive #416 or a verified successor together with #592/#593 identity/output semantics. Shared docs/TRACEABILITY.md, ADR index and product-gap currentization remain #435-owned and must preserve unrelated history during fold. Fresh exact-head Rust/documentation/security/CodeQL, authored line/branch/edge evidence and qualifying independent review are required after the surviving head is formed.

Keep this issue open until verified successor inheritance is complete; branch-local source repair is not protected-main or release evidence. No force push, destructive rebase, skip/xfail, denominator manipulation, scanner suppression, or predecessor-evidence transfer.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions