db/migrations/draft/ is untracked, so a reviewed Class-A digest is one in-place edit from unrecoverable
Measured 2026-10-06 during the TERRA-277/enamel_082 incident. db/migrations/draft/ is NOT git-ignored - there is no ignore rule - it was simply never added, and it holds exactly one copy of each draft which every lane edits in place. Within one hour 082 went 7283f5b2 -> 68d8d79a -> 0aca758b -> 4a471558 -> ecc18311 -> back to 7283f5b2. ecc18311 survives only as a manual gdrive copy; 68d8d79a, which carried an audit source PASS AND a completed whole-file rollback rehearsal, exists nowhere on disk and no checkout recovers it. An exact-digest verdict is worth nothing once the bytes are unreachable, which is the real cost: the review model assumes a durable artifact it does not have. PROPOSAL, deliberately NOT executed tonight: track db/migrations/draft/ so every reviewed digest is recoverable by SHA. Two drafts present now - enamel_082 4415b holding the applied bytes, enamel_083 5201b. WHY DEFERRED rather than done, stated so it is a decision and not a silent drop: committing these files mid-incident puts an in-flight draft into git history where it reads as more official than it is, and a surprise commit of the 082 file by the coder lane while the db lane holds it and pmmaster is sequencing the rebuild is the same crossing shape that caused tonight's incident. It lands after the rebuild does. OPEN QUESTION for whoever takes it: tracking the directory means a superseded draft stays in history forever, which is a feature for provenance and a hazard if a reader mistakes a committed draft for an approved one. The mitigation is a path convention plus the gates-required header form already adopted on 082, not leaving drafts untracked.
Activity
-
Duplicate of ENAMEL-80, which pmmaster opened for the same untracked-digest class fleet-wide. The deferral reasoning on this row is superseded by events: pmmaster ordered reviewed bytes committed, and I committed enamel_084 at 4f36896/cfbed56 under that order, so the coder-lane half is already done rather than pending. Keeping both rows would split one decision across two.