Gate review for the re-baseline cycle (ADR-019..025): contradiction + gap + staleness pass, all findings dispositioned 2026-10-20. - C-1: ADR-013's pre-substrate ingestion + CAS composition annotated (superseded composition kept as the decision record; §7 CAS home is the substrate row transaction per ADR-019 §2) - C-2: ADR-018's storage_root rationale superseded (record carries no path; impls key on repo_id), Invalid doc de-staled - W-1: ADR-017 §2 construction shape annotated per ADR-023 §2 - W-2 pinned: pin-custody across the frozen trait seam (composition- internal pending-pin registry, content-addressed correlation, post-CAS guard commits, GC-decreed recovery) — substrate.md - W-3 decided: put_repo seeds HEAD -> refs/heads/main in the record transaction (git init parity; v1 replication limitation stated in ADR-023 §4; the unborn-HEAD OQ-19 fixture falls out of it) - W-4 fixed: substrate freeze-inventory member list completed (the five trait impls public; receive-pack composition internal) - W-5/S-1..S-5: disk-odb staleness annotations (ADR-004/014), naming fix (session substrate types), deferred(scope) taxonomy covers booked work items, ADR-020 typo, ADR-009 peek-field note, OQ-20 tracker task added - OQ-19 reclassified open -> deferred(scope) (blocked on the booked wave item); OQ-21 blocked-on wording aligned - Specs (6) + README + open-questions flipped draft -> reviewed; AGENTS.md lifecycle updated Verification: taskgraph validate (10 tasks), cargo test, clippy -D warnings, fmt --check, cargo doc --no-deps
1.4 KiB
id, name, status, scope, risk, impact, level, tags
| id | name | status | scope | risk | impact | level | tags | |||
|---|---|---|---|---|---|---|---|---|---|---|
| architecture/oq-20-lfs-row-pruning | OQ-20 tracker — per-oid pruning of stale LFS reference rows | pending | narrow | low | component | research |
|
OQ-20 tracker: per-oid LFS row pruning (demand-triggered deferral)
Tracker for OQ-20 (deferred(scope), lfs.md's pointer-lifecycle
scoping note): the v1 LFS row store scopes rows to the repo's lifetime;
rows whose oids are no longer referenced by any live ref (history
rewritten, branch deleted) linger until repo deletion. Per-oid pruning
— dropping rows whose pointers are unreachable, via the ref-graph walk
the substrate already runs for object liveness — is the future
pointer-lifecycle shape that reclaims them sooner.
Blocked on (do not act before this fires)
A concrete row-volume need, or the first LFS-heavy deployment. The repo-lifetime scoping is correct v1 behavior — rows are tiny and the sweep-window semantics bound the cost of not having pruning (media may be re-protected while any row remains). This task exists so the deferral is visible in the task graph, not so anyone builds it now.
When it fires
Investigate the per-oid pruning shape (the ref-graph walk joined against the LFS rows; sweep-window interplay) through the OQ/ADR path — an ADR if the row-reclamation op becomes wire surface, a spec amendment if it stays composition-internal.