Data Model: CI Pipeline Honesty — Actionable Fixes
This mission is CI tooling; the "entities" are the value objects the two extracted helpers compute over. No persistent storage.
#4360-B — shard completeness (reconcile_shards.py)
(37 total at base). Identity: (module, shard_index).
(all registry shards selected — legacy behaviour).
artifact produced by a component workflow.
shard absent from BOTH current and fallback ⇒ missing ⇒ complete = False (fatal).
fallback/backfill artifact does NOT satisfy a selected shard.
missing) if absent.
- RegistryShard:
module: str,shard_index: int— a row from the module-shard registry - SelectedSet: the shards the diff-scoped matrix chose for this run.
None⇒ full-mode - ShardArtifact:
module,shard_index,fresh: bool(present in the current run) — coverage - CompletenessResult (the load-bearing output):
complete: boolmissing: list[RegistryShard]- Rule: a shard is required iff it is in
SelectedSet(orSelectedSet is None). A required - Rule (must_be_fresh invariant): a SELECTED shard must be fresh in the current run; a
- Rule: an UNSELECTED shard is optional — backfilled from a prior run if available, ignored (never
Invariant (NFR-001): complete = True requires every SELECTED shard fresh. No relaxation may let a selected-but-absent shard read complete.
#4208 — blocking classification (router_gate.py)
action_required (jobs-API vocabulary; needs-context only ever yields the first five, never timed_out`).
timed_out-as-a-form-of-cancelled all block); only the reported label distinguishes timed_out from cancelled.
- JobConclusion: one of `success | failure | cancelled | timed_out | skipped | startup_failure |
- BlockingEntry:
job: str,conclusion: JobConclusion. - GateDecision:
blocking: dict[job, conclusion]— jobs whose conclusion ∈ blocking set.blocks: bool— True iffblockingnon-empty.- Rule: the blocking set membership is UNCHANGED from baseline (
failure,cancelled, and
Invariant (NFR-001): blocks is byte-identical to baseline for every {failure, cancelled} input distribution; classification adds labels, never changes the verdict.
#4454 / #4212 — no new value objects
Pure config: #4454 adds routing globs (matched by the existing select_modules parser); #4212 adds shell exit-code capture + a terminal gate step. Their behaviour is pinned by the existing workflow-lint / gate-selection authority tests, not by a new data type.