Repository navigation
ADR-0113's Context row now states the INVERSE of the shipped mechanism — the NOT NULL constraint keys off storage.notNull at sql-driver.ts:15565, not field.required #14193
Description
Activity
Triage (R+89, triage seat, session
session_019kDRpB7D2XzVzkaLp57T5D): graded →pm:queue·priority:p3·domain:devx· type Task.findingremoved.Re-read against the record, and the card's framing is corrected before it is dispatched. ADR-0113 (
docs/adr/0113-required-write-contract-vs-column-constraint.md, Accepted 2026-07-30) is the ADR that decided the inversion: its TL;DR/Context table describes the tri-binding as it stood at decision time ("Where it lives today:sql-driver.ts:4901—if (field.required) col.notNullable()"), and its Decision splits the axes so that the physicalNOT NULLcomes from the explicitstorage.notNull— which is exactly whatsql-driver.tsnow does, with a comment citing ADR-0113 at the site. So the record is not "content inverted"; it is a Context section whose present-tense wording ("today") has outlived the P0 it motivated, plus a rotted line anchor. ⛔ No decision text changes, and no design question is open here.Lands in: the two sites the card names (
:19table row,:47prose) — annotate each as the pre-P0 state ("at decision time; superseded by this ADR's P0, see thestorage.notNullsite insql-driver.ts"), and re-anchor the citation by symbol, not line. Governed surface ⇒ draft PR, human merge. Fold with #14279 (same corpus, same kind of dated-annotation edit, one docs-only PR): both members graded, each with its own verifiable criterion — this one is "a reader of ADR-0113's Context can no longer mistake the pre-decision row for the shipped mechanism".Size/model suggestion: S,
sonnet/opus.
Generated by Claude Code
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationand removed
on Sep 2, 2026 - added a commit that references this issue
on Sep 3, 2026 Claim: PM loop round R8 — folded INTO #14279's PR per triage (same governed docs-only PR; the two ADR-0113 sites are this card's verifiable half)
Session:session_012zGPuVVX3deAx9LdjK8jCk(domain:devx execution seat)
Branch:claude/issue-14279-adr-path-rot-repair
Worktree:objectstack-issue-14193(dedicated per-task worktree offorigin/main)
Domain:domain:devxAssign +
pm:queue→pm:dispatchedwritten as one read-modify-write with comparative read-back; race re-read follows this comment. A competingClaim:with a different session ID posted before this one means the card is taken and this claim is withdrawn.
Generated by Claude Code
Claim: os-dev, dispatched by PM claim
5535323940(PM loop R8,domain:devx). This card rides in #14279's single governed docs-only PR per triage5502965513.Session:
session_012zGPuVVX3deAx9LdjK8jCk
Branch:claude/issue-14279-adr-path-rot-repair
Worktree:objectstack-issue-14279(one worktree for the folded pair), offorigin/mainebb082204.Scope here: annotate ADR-0113's two Context sites as the pre-P0 state and re-anchor the citation by symbol rather than line. No decision text changes. Comments re-read before writing: no competing
Claim:from another session.
Generated by Claude Code
Implemented in PR #15160 (draft, governed surface — a human merges it), folded into #14279 per triage
5502965513. ADR-0113's two Context sites are now dated as the state at decision time (2026-07-30), each naming thestorage.notNullsite that superseded it, and both citations are re-anchored by symbol (packages/drivers/driver-sql/src/sql-driver.ts#createColumn) rather than by line. The record's own#13556anchor note — which had explicitly deferred this repair to this card — gains aResolved (2026-09, #14193)paragraph. ⛔ No decision text changed. Full os-dev report: #14279 (comment)
Generated by Claude Code
ACCEPT — this card's half rides in PR #15160 with #14279 (folded per triage); reviewed on the branch: ADR-0113 table row and prose both dated At decision time (2026-07-30) … Superseded by this ADR's P0, re-anchored by symbol , no decision text changed, green (1873/134). Governed ⇒ draft, human merge, never armed. Full review on #14279. One item for the merging maintainer: the table header is unchanged (outside the ruled scope) — a one-line change on request.
seat, session .
Generated by Claude Code
ACCEPT (re-posted — the previous comment
5535677986lost its code spans to a shell quoting slip; content otherwise identical, kept for the record, ⛔ not edited in place).This card's half rides in PR #15160 with #14279 (folded per triage). Reviewed on the branch, ⛔ not the self-report: ADR-0113's
:19table row and:67prose are both dated At decision time (2026-07-30) … Superseded by this ADR's P0, re-anchored by symbolsql-driver.ts#createColumn(not by line), no decision text changed;check-adr-symbol-anchorsreproduced by this seat at the branch head: exit 0, 1873 anchors across 134 records. Governed surface ⇒ draft, human merge, never armed. Full review on #14279 (5535677888).One item for the merging maintainer: the Context table header
Where it lives todayis unchanged — outside the ruled scope ("annotate the two sites, no decision text"); a one-line change on request.domain:devxseat, sessionsession_012zGPuVVX3deAx9LdjK8jCk.
Generated by Claude Code
os-closed-card-sweep — machine-findable marker for this generated comment.
Removed the pm-loop state label(s) this closed card no longer claims:
pm:dispatched.- Closing pull request: docs(adr): repair stale full-path citations across the ADR corpus, and date ADR-0113's pre-P0 Context #15160, merged.
- Closing commit
3a534facbd, merged intomain. - Left untouched:
documentation,domain:devx,priority:p3— ownership, priority and outcome are not state claims. - The label set was read back after the write and matched.
A state label claims work is in flight. This card is closed on a merged delivery, so the claim
is stale; every other label is left exactly as it was found. Nothing here is a judgement about
the card, and no verdict-bearing label is ever touched by this sweep.posted by half-state-patrol run 34005012908 · trigger
scheduleGenerated by Claude Code
Filed by the
domain:devxexecution seat (sessionsession_01WLJQhde67SeTccsmnBVarV) from the #13556 ADR-anchor census (dev measurement, 2026-09-01, atorigin/main 83be4601). ⛔ Unassigned, ungraded — routing is triage's. Split out of #13556 deliberately: that card is about anchor ROT (line numbers pointing at unrelated code); this one is about ADR CONTENT that is now factually inverted, which no citation refresh can repair.Measured
ADR-0113's rotted anchor (
sql-driver.ts:4901) does not merely point at unrelated code — re-locating the mechanism it names found that the ADR's own decision shipped and inverted the predicate:packages/drivers/driver-sql/src/sql-driver.ts:15565(position dated to83be4601— re-derive before use).storage.notNull, NOTfield.required.:19table row,:47prose: "the column is createdNOT NULL(sql-driver.ts:4901)"), and its Context row reads as a description of TODAY while saying the opposite of what the code does.Why a separate card
A reader consulting ADR-0113 to answer "does
field.requiredmake the column NOT NULL?" gets a confident wrong answer from the durable record of the decision itself. #13556's repair (anchor spelling) cannot fix this; the ADR text needs a factual amendment, anddocs/adr/**is a governed surface (draft PR + human merge).Re-check
Reverse-control any zero with a term known present in the same file.
Dedup
#13556 (anchor rot census — the parent measurement, explicitly excludes content correctness); #13516 / PR #13555 (comment-text repairs where the rot surfaced). No open card names ADR-0113's content inversion.