Repository navigation
Conversation
The contract for the opt-in --api mode: the API map input, the view, diff and ratchet JSON, which changesets count, the read-only base-commit rule, flags, the ./api library subpath and exit codes, with a worked example per output on a three-subpath package. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpn7jXU5Fmne1e9uLwewKC
Records the founder ruling on #612 in MAINTAINING.md's semver section: an added name owes at least a minor on stable and battery subpaths, any bump on experimental, and no separate changelog callout on any tier. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpn7jXU5Fmne1e9uLwewKC
…bpath (#609) A new opt-in mode, `code-graph <package> --api <map>` and `readPublishedApi` from the new `@demlik/code-graph/api` subpath. It emits the package's declarations with the pinned tsgo into a temp folder outside the checkout, reads each map entry's module symbol through resolve.ts's one file-to-module-symbol step (now `moduleSymbolOf`), and prints, per subpath, every published name with its emitted declaration text and the text of the unpublished declarations it references. Without --api nothing else changes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpn7jXU5Fmne1e9uLwewKC
…a base commit (#610) `code-graph <package> --api <map> --api-base <rev>` and `diffPublishedApi` from `@demlik/code-graph/api` list, per export subpath, the names added, removed and changed since <rev>, with before/after text and the subpath's tier. The base commit's tree is written from git's objects (`git archive`) into a temp folder outside the checkout, with the checkout's installed node_modules linked in, and the same view runs there; the after side is the working tree as it is. The checkout's files, index, branch and stash are never written. A rev that names no commit exits 2 before anything runs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpn7jXU5Fmne1e9uLwewKC
…sets (#611) `code-graph <pkg> --api <map> --api-base <rev> --api-policy <file>` checks every added, removed and changed name against the changesets added since the base, by the caller's bump policy: per tier and change kind, the least bump and whether a callout is owed. It exits 0 on a pass, 1 on a miss and 2 on a tier the policy gives no row. `readChangesetsSince`, `ratchetApiDiff` and `BumpPolicySchema` ship from `@demlik/code-graph/api`. The command line's entry to the mode moves into `api/cli.ts`, which brings `index.ts` back under the self-gate's 400-line limit. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…asks for (#613) A vitest check in packages/tea/src/api-ratchet diffs every name tea publishes against a base commit through @demlik/code-graph/api and fails, naming the name, subpath, tier and before/after text, when a change lacks the changeset MAINTAINING.md's semver policy asks for. The API map is read, not written: subpaths from package.json exports, each source entry from tsup.config.ts, each tier through the reference generator's tier-table reader. build.yaml runs it on pull requests against the merge's first parent, the PR's base commit. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…hat moved (#613) A published name folds in every type it reaches, so dropping one NoInfer from expectCmdEmitted printed about 250 lines of unchanged types on each side. A miss now shows the declaration text and the used types whose text differs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
governance: PASS @ 608e337 content:9a14abcdafb5 — no contradiction, no weakening Epic tail of issue 604, judged at head 608e337 against base f6339b0. The diff derives governance through one governed root: Corpus halfNo decision record is in the diff, so there was nothing to sweep. This is a hand read. The questions the change decides, each read against the live records:
Gate half
No existing step is removed, reordered, made conditional or given In reach but outside the governed root: No gate invariant in this diff's reach is removed or softened. |
|
review-code: PASS @ 608e337 content:9a14abcdafb5 — all six epic criteria met; the tea cases reproduced at the head Epic tail for issue 604, head 608e337 against base f6339b0. 83 files: 76 code, 7 doc. Graded set: 6 body criteria on the epic, 0 rulings, 0 unmarked owner comments. CI at this head is green on the one required context, I read the whole diff, and the Criteria1. The three realistic tea changes each get the policy's verdict, twice, byte-identical. PASS.
Then what a user would try next. Four edits at once (remove The diff side: 2. The view matches tea-fabrika's
So the row as written is not met against the reader as it stands today, and the gap is the reader's defect. Matching it would mean dropping 12 published names. The builder disclosed this on issue 609 and that child's review accepted it. I accept it too, and I am saying it here in plain words because the criterion text still reads as an exact match. One number in the builder's note is softer than it reads: "932 of 932 texts" holds only with the looser normalization above. 3. A change to a non-exported type shows on the published name that uses it. PASS. 4. Without the new mode, output is byte-identical. PASS. 5. A diff run leaves the checkout as it was. PASS. 6. One module-export step, one tier reader, no Evidence for marked criteriaThree child rows mark evidence outside the diff, and all three name the same source: the PR body's "tea run" section. I read that section on this pull request. It links one build note per child, and I read each note.
Standing checks
Follow-ups, not blocking
DeviationsThe PR body says Verdict-written: 2026-10-11T00:35:03Z |
|
review-doc: PASS @ 608e337 content:9a14abcdafb5 — docs match the code and sit on the right surfaces Epic tail for issue 604, head 608e337. Doc class: 7 files. Three changesets, CriteriaThe six epic criteria are about behaviour and are graded in the
Hygiene
Evidence for marked criteriaThree child rows mark evidence outside the diff. I read the PR body's "tea run" section on this pull request and the three build notes it links. No doc-class judgement here rests on them: they are graded in the
One finding, not blockingSPEC §13 says a little less than the code does in five small places: computed member keys in the reference walk, the Deviations
Verdict-written: 2026-10-11T00:35:56Z |
|
ship: AWAITING-CP-APPROVAL — PR #617 @ 608e337 → human This pull request changes owner-protected files, and no owner approval is on it at head 608e337 (0 reviews read). Nothing was queued or merged. Merge intent was not armed (checked at site refuse). Needed: an owner's approval at this head. The branch must not be rebased or force-pushed after that approval, or it has to be given again. |
About this epic
Fixes #604
Fixes #608
Fixes #612
Fixes #609
Fixes #610
Fixes #611
Fixes #613
tea run
A child opens no pull request, so each tea run is in that child build note:
🤖 Generated with Claude Code
https://claude.ai/code/session_01Lpn7jXU5Fmne1e9uLwewKC
Deviations
None.