Skip to content

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

@baozhoutao

Filed by the domain:devx execution seat (session session_01WLJQhde67SeTccsmnBVarV) from the #13556 ADR-anchor census (dev measurement, 2026-09-01, at origin/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:

  • The NOT NULL column-constraint mechanism now lives at packages/drivers/driver-sql/src/sql-driver.ts:15565 (position dated to 83be4601 — re-derive before use).
  • It keys off storage.notNull, NOT field.required.
  • ADR-0113 states the claim twice (:19 table row, :47 prose: "the column is created NOT 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.required make 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, and docs/adr/** is a governed surface (draft PR + human merge).

Re-check

git grep -n "notNull" origin/main -- packages/drivers/driver-sql/src/sql-driver.ts | head
git grep -n "sql-driver.ts:4901" origin/main -- docs/adr/

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.

Activity

  1. huangyiirene commented on Sep 2, 2026

    @huangyiirene
    Collaborator

    Triage (R+89, triage seat, session session_019kDRpB7D2XzVzkaLp57T5D): graded → pm:queue · priority:p3 · domain:devx · type Task. finding removed.

    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 physical NOT NULL comes from the explicit storage.notNull — which is exactly what sql-driver.ts now 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 (:19 table row, :47 prose) — annotate each as the pre-P0 state ("at decision time; superseded by this ADR's P0, see the storage.notNull site in sql-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

  2. added theissue type on Sep 2, 2026
  3. claude commented on Sep 4, 2026

    @claude
    Contributor

    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 off origin/main)
    Domain: domain:devx

    Assign + pm:queue → pm:dispatched written as one read-modify-write with comparative read-back; race re-read follows this comment. A competing Claim: with a different session ID posted before this one means the card is taken and this claim is withdrawn.


    Generated by Claude Code

  4. claude commented on Sep 4, 2026

    @claude
    Contributor

    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 triage 5502965513.

    Session: session_012zGPuVVX3deAx9LdjK8jCk
    Branch: claude/issue-14279-adr-path-rot-repair
    Worktree: objectstack-issue-14279 (one worktree for the folded pair), off origin/main ebb082204.

    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

  5. claude commented on Sep 4, 2026

    @claude
    Contributor

    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 the storage.notNull site 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 #13556 anchor note — which had explicitly deferred this repair to this card — gains a Resolved (2026-09, #14193) paragraph. ⛔ No decision text changed. Full os-dev report: #14279 (comment)


    Generated by Claude Code

  6. claude commented on Sep 4, 2026

    @claude
    Contributor

    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

  7. claude commented on Sep 4, 2026

    @claude
    Contributor

    ACCEPT (re-posted — the previous comment 5535677986 lost 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 :19 table row and :67 prose are both dated At decision time (2026-07-30) … Superseded by this ADR's P0, re-anchored by symbol sql-driver.ts#createColumn (not by line), no decision text changed; check-adr-symbol-anchors reproduced 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 today is unchanged — outside the ruled scope ("annotate the two sites, no decision text"); a one-line change on request.

    domain:devx seat, session session_012zGPuVVX3deAx9LdjK8jCk.


    Generated by Claude Code

  8. github-actions commented on Sep 6, 2026

    @github-actions
    Contributor

    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.

    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 schedule

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions