Skip to content

docs(spec): the 17.4.0 entry no longer records the paid packages/rest follow-up as owed - #21014

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-18858-spec-changelog-paid-followup
Oct 1, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-18858-spec-changelog-paid-followup

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #18858

Clause-②: no

What

packages/spec/CHANGELOG.md, inside the released @objectstack/spec 17.4.0 entry for 094b8fd, closed its batch.maxBatchSize note with "it is owed to a follow-up in packages/rest" and anchored the quoted docblock at packages/rest/src/rest-server.ts:2071. Both are false today, and the first was already false when it was published:

  • ec5db7b (PR docs(rest): the batch cap is embedder policy, not deployment policy #16942) paid that follow-up. It rewrote enforceBatchSize's docblock to call the cap embedder policy. It landed 2026-09-08T18:05Z, eleven hours after 094b8fd (06:54Z), and shipped in @objectstack/rest 17.4.0, the same release as the note. The npm registry's time field shows spec 17.4.0 published at 2026-09-09T03:57:51Z and rest 17.4.0 at 03:58:13Z.
  • :2071 was correct at 094b8fd and has drifted since. At a5bce4088 that line is JSDoc on resolveRequestEnvironmentId.

This PR amends that one entry in place. It uses the shape this file's own errata already use (*Erratum, DATE — … (Corrected after publication, #N.)*, six instances in this file). The closest is the 2026-09-18 batch-cap erratum on the same subject, which puts the line at the end of the entry and says how many passages above it were corrected in place:

  1. The passage now anchors the quotation by symbol (the enforceBatchSize docblock of packages/rest/src/rest-server.ts) instead of by line number. Its last clause names ec5db7b as the follow-up that was paid.
  2. One dated erratum line closes the entry and quotes both old phrasings.

No other sentence in the entry is touched. This PR has no changeset. The packages/*/CHANGELOG.md row of the AGENTS.md Documentation Guardrails says a factual error in a released entry is amended in place in a docs-only PR. A changeset would compile the correction into a new release note, which is the erratum-in-a-later-entry shape that row rules out. The amended text reaches npm with the next @objectstack/spec tarball.

Evidence (measured on a5bce4088, this branch's base)

Reading Result
grep -c "deployment policy" packages/rest/src/rest-server.ts 0. Positive control grep -c maxBatchSize on the same file: 6. The docblock now reads "⛔ It is NOT deployment policy", but a line break splits that phrase, so the single-line grep cannot match it. Its text was read directly as well.
packages/rest/CHANGELOG.md ec5db7b occurs once, under ## 17.4.0 / ### Patch Changes
npm tarballs @objectstack/spec 17.4.0 and 17.5.0 the "owed to a follow-up" sentence is in each package/CHANGELOG.md once, under ## 17.4.0
npm tarballs @objectstack/rest 17.4.0 and 17.5.0 the ec5db7b entry is in each once, under ## 17.4.0
git show 094b8fd:packages/rest/src/rest-server.ts, line 2071 "The cap is deployment policy — …", so the anchor was correct when it was written

Gates (on efea2a386e, the final commit)

node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands derived 55 commands for this one path. 51 ran and exited 0. They include pnpm check:nul-bytes, pnpm check:issue-citations, pnpm check:published-files, pnpm check:release-notes, pnpm check:release-page-status and node scripts/check-release-section-coverage.mjs --strict. The --ran reconciliation reads: 55 accounted for, 51 run, 4 NOT-MEASURED, 0 UNRUN.

NOT MEASURED (4): check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure and check:sourcemap-no-sources-content. Each exited 3 with PREREQUISITE NOT MET. They read the dist/ of every workspace package, and this worktree has no workspace build. A CHANGELOG prose edit changes no build input, and CI runs these gates over a fresh build.

check:issue-citations passes, but **/CHANGELOG.md is one of its declared deferred surfaces, so it did not judge the new #18858 citation. That citation was checked by hand: REST GET /issues/18858 answers 200, and the item is an issue, not a pull request.

Acceptance notes

  • The entry's bold lead ("really does describe itself as deployment policy") and its "it exists verbatim in the REST server" are in the present tense. They describe the tree 094b8fd landed on. Following the card's scope, they stay as written, and the erratum line records that the docblock was rewritten in the same release.
  • The card cites the passage at :3581, read at 631dcbd4b. At a5bce4088 it is at :18471, because later release sections were added above it.

Generated by Claude Code

… follow-up as owed

The 094b8fd entry in @objectstack/spec 17.4.0 closed its batch.maxBatchSize
note with "it is owed to a follow-up in packages/rest" and anchored the
quoted docblock at packages/rest/src/rest-server.ts:2071. ec5db7b paid that
follow-up eleven hours later and shipped in @objectstack/rest 17.4.0, the
same release, so the note was false as published and the line anchor has
since drifted onto unrelated JSDoc.

Amended in place, the way this file's earlier errata were: the clause and the
anchor are corrected in the passage, and one dated erratum line at the end of
the entry quotes the old words. No changeset: a changeset would compile the
correction into a new release note, the erratum-in-a-later-entry shape the
CHANGELOG guardrail forbids.

Claude-Session: https://claude.ai/code/session_01JAhu8u8QfBvRjVZDox7CP9
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 1, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Oct 1, 2026
@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 1 changed file(s) yielded no anchor (packages/spec/CHANGELOG.md), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/spec/CHANGELOG.md) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 137 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json f8178ffeceba053667353f86ec193f2152ad557c → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: efea2a386ebdf342b72b82bbdc5693e20998aaee
Local-runs: none

Face: CHANGELOG prose (packages/spec/CHANGELOG.md, the released @objectstack/spec 17.4.0 entry for 094b8fd). Read: the net diff against origin/main @ 9b0de7de7 (one hunk, +3/−1, one file, one commit), card #18858 and its three served comments, the PR body and its one bot comment, the 39 check-runs on this head, and git/npm where a claim needed settling. Not read: the dispatch order or the ACCEPT comment's conclusions, which were re-derived here. Hidden card comments: the API's comments count (3) equals the served count (3); any earlier comment the API does not serve is treated as absent, and no judgment below rests on one — the card body alone carries the finding, its readings and the rule.

① Derived judgments

Accept set and public surface: none moves. The diff touches no schema, export, default, bound or refusal; it rewrites one prose paragraph and appends one italic paragraph inside one already-published CHANGELOG entry. The only thing that changes for a consumer is the text of CHANGELOG.md in the next @objectstack/spec tarball — the surface this text exists to correct. Clause-②: no is right.

Every factual claim the amended passage and the appended erratum make, checked against git and the published releases (not the PR body):

  1. "at rest-server.ts:2071 when the entry was written" — right. The changeset that 094b8fd (2026-09-08 06:54:22Z, PR docs(spec): RestServerConfig's crud / metadata / batch keys are embedder-only, and the schema now says so #16775) carried spells the :2071 anchor and the "owed to a follow-up" clause verbatim. At 094b8fd, packages/rest/src/rest-server.ts:2071 is the line "The cap is deployment policy — RestServerConfig.batch.maxBatchSize" (wrapped onto :2072 "(1..1000, default 200)"), and it sits inside the docblock of private enforceBatchSize(...) at :2076. So the relocation from a line number to the symbol names the same docblock the sentence actually lived in, and "the sentence was true when written" holds for both the anchor and the "owed" clause (no fix existed yet).
  2. "ec5db7b rewrote enforceBatchSize's docblock to call the cap embedder policy" — right. ec5db7b = "docs(rest): the batch cap is embedder policy, not deployment policy (docs(rest): the batch cap is embedder policy, not deployment policy #16942)", landed 2026-09-08 18:05:22Z, touching exactly packages/rest/src/rest-server.ts and .changeset/rest-batch-cap-embedder-only-prose.md. Its diff deletes "The cap is deployment policy — … the place that knows the deployment's configured value" and writes, quoted: "Reachability: EMBEDDER-ONLY ([finding] No shipped boot path authors RestServerConfig at all — os serve fixes it and the dev plugin passes none, so every live crud / metadata / batch key is embedder-only #15543, [finding] rest-server.ts#enforceBatchSize calls the batch cap "deployment policy", but no shipped boot path can set it — the same defect #15543 just closed in packages/spec, one package over #16801). ⛔ It is NOT deployment policy — this docblock said exactly that until [finding] rest-server.ts#enforceBatchSize calls the batch cap "deployment policy", but no shipped boot path can set it — the same defect #15543 just closed in packages/spec, one package over #16801, and no shipped boot path makes it true." The amended passage's "the follow-up in packages/rest is ec5db7b" is also consistent with the card (issue [finding] rest-server.ts#enforceBatchSize calls the batch cap "deployment policy", but no shipped boot path can set it — the same defect #15543 just closed in packages/spec, one package over #16801, landed as commit ec5db7b via PR docs(rest): the batch cap is embedder policy, not deployment policy #16942).
  3. "eleven hours after this change" — right. Committer dates: 094b8fd 06:54:22Z, ec5db7b 18:05:22Z, delta 11h 11m. "This change" in an entry headed - 094b8fd: is unambiguous. For the record, the entry was compiled by 7e6337007f "chore: version packages (chore: version packages #15334)" at 2026-09-09 03:18:39Z — 9h 13m after ec5db7b — so the "owed" sentence was already stale when changeset version published it, which is exactly what the erratum says ("paid before this entry was published") without overclaiming that it was true at compile time.
  4. "shipped in @objectstack/rest 17.4.0" and "the same release as this entry" — right. @objectstack/rest@17.4.0 and @objectstack/spec@17.4.0 both tag 7e6337007f; ec5db7b and 094b8fd are both ancestors of that commit and neither is an ancestor of the 17.3.0 tags (published 2026-09-04, before either landed). That same commit deletes ec5db7b's changeset file, adds the - ec5db7b: entry under ## 17.4.0 in packages/rest/CHANGELOG.md (:2612 on origin/main, section header :2264) and adds the 094b8fd entry under ## 17.4.0 / ### Patch Changes in packages/spec/CHANGELOG.md (:14893 / :17905 / entry :18459 on origin/main). npm time: spec 17.4.0 published 2026-09-09T03:57:51Z, rest 17.4.0 at 03:58:13Z. The dev's and the PR body's readings match.
  5. "The phrase does not occur in packages/spec/src/api/rest-server.zod.ts" (unchanged clause) — still right: zero hits at 094b8fd and at origin/main.
  6. "One passage above is corrected in place; the finding it records and everything else this entry published are unchanged" — right, byte-checked. The diff is one hunk. With the 094b8fd entry (:18459 up to the next - aedbaef: entry) cut out of both files, origin/main and the head are byte-identical. Inside the entry, exactly one line (the batch-cap passage) is replaced and two lines are appended at the end of the entry, before - aedbaef: — a two-space blank continuation line and the erratum paragraph, both at the entry's own continuation indent. The two-space blank line is the file's compiled convention (the entry's existing blank lines carry it too); git diff --check flags it as trailing whitespace, no gate does, and Lint & Repo Gates is green.
  7. The new anchor resolves on origin/main — right. enforceBatchSize is at packages/rest/src/rest-server.ts:2457 with its docblock directly above it, still carrying "⛔ It is NOT deployment policy — this docblock said exactly that until [finding] rest-server.ts#enforceBatchSize calls the batch cap "deployment policy", but no shipped boot path can set it — the same defect #15543 just closed in packages/spec, one package over #16801". The retired :2071 on origin/main is JSDoc on resolveRequestEnvironmentId, as the card and PR body say. A symbol anchor cannot drift the way the line number did.
  8. Shape against the guardrail — satisfies it. AGENTS.md § Documentation Guardrails, packages/*/CHANGELOG.md row: "amend that entry in a dedicated docs-only PR, ⛔ never an erratum in a later entry and never a rider on code changes." The correction is inside the 17.4.0 entry for 094b8fd itself — the passage a reader greps deployment policy into is the passage that is corrected, and the dated note sits in that same entry, not in a later one. It is a dedicated docs-only PR: one file, one commit, docs(spec): title, labels documentation + skip-changeset + size/xs, no .changeset/ file, no code. The wording reuses this file's own precedent rather than inventing a sixth: origin/main carries six *Erratum, YYYY-MM-DD — …* lines (four in this same 17.4.0 section, one each in 17.0.0 and 17.0.0-rc.1), five of them closing with (Corrected after publication, #N.); the two 2026-09-18 batch-cap errata (same subject, [finding] the 17.0.0 CHANGELOG entries in packages/rest and packages/spec tell deployments to "raise batch.maxBatchSize (up to 1000)" — the falsified cap claim in its strongest form, published to npm, on the release-owned tree #18740) end their entries and say how many passages above were corrected in place, which is the placement used here; "The sentence was true when written" is the 2026-09-12 erratum's own phrase. The card ruled only the "owed" clause and the :2071 anchor falsified and said not to delete the note; the diff does exactly that and nothing more.
  9. One residual, judged acceptable, named so it is on record: the amended passage keeps the entry's present tense — "it exists verbatim in the REST server: '…' in the enforceBatchSize docblock". On origin/main that docblock no longer contains the quoted sentence. The card scoped the entry's other sentences as not wrong (they record the tree 094b8fd landed on), the passage's own last clause says ec5db7b "rewrote that docblock", and the erratum repeats it. A reader who greps deployment policy in the tarball lands here and is told in the same paragraph that the sentence was rewritten in the same release — the misleading claim about outstanding work, which is what the card filed, is gone. Not a defect in this diff.
  10. Citations: the amended passage cites the correcting commit by sha (ec5db7b), the record's preferred provenance; the erratum's #18858 matches the five precedent errata's #N suffix and names the filed card. check:issue-citations defers **/CHANGELOG.md by declaration, so this citation was not machine-judged; the card exists and is an issue.

Check-runs on this head: 39, all completed, none failure. The seven required contexts are success: Lint & Repo Gates, TypeScript Type Check, Test Core, Dogfood Regression Gate, Build Core, Temporal Conformance (live PG + MySQL), Governed Surface Queue Guard. Check Changeset appears twice (one skipped on the labeled event, one success on the opened run) — the governing conclusion is success. The bot's Docs Drift Check comment is advisory and says only that a CHANGELOG path yields no doc anchor, which is expected for this face. Not a governed surface.

② Semver level

No changeset owed; skip-changeset is the correct declaration. The diff publishes no code from any released package — it hand-amends a compiled CHANGELOG, which ships only when @objectstack/spec next publishes (17.5.0 is current on npm; the corrected text reaches consumers with the release after it). A changeset here would be wrong in kind, not merely unnecessary: changeset version would compile it into a new entry under a later version, which is precisely the "erratum in a later entry" the guardrail forbids, and the card's own remedy says "⛔ no changeset". The label is on the PR, no .changeset/*.md is added, and Check Changeset concluded success. The PR body's Clause-②: no line is present as the second line of the body and is correct — no accept set widens or narrows. ADR-0087 registration is not engaged (no breaking changeset).

③ Boundary flags

open_questions: empty. out_of_scope_findings: empty. deviations (six), each answered:

  1. Hidden card comments. Confirmed as absent to this review too; the API serves three comments (Claim, os-dev-report, ACCEPT) and its count field reads three. The dev verified the newest Claim: names its branch and posted no second claim — correct. Nothing in this verdict depends on an unserved comment.
  2. Attribution. The commit efea2a386e ends with the model-free trailer pair AGENTS.md prescribes — the session trailer carrying https://claude.ai/code/session_01JAhu8u8QfBvRjVZDox7CP9 and the bare Co-authored-by: Claude co-author trailer — and the PR body closes with the session-URL footer. AGENTS.md outranks the harness reminder here. Correct.
  3. Shallow-clone ancestry reading discarded. Settled here instead: in this checkout git merge-base --is-ancestor answers yes for both ec5db7b and 094b8fd against the @objectstack/rest@17.4.0 and @objectstack/spec@17.4.0 tags (one commit, 7e6337007f), and that commit consumes ec5db7b's changeset file. The dev's choice to rest the claim on the rest CHANGELOG section and the npm tarballs was sound, and ancestry now agrees with it.
  4. Four dist-reading gates NOT MEASURED locally. Answered by the head's check-runs: Lint & Repo Gates and TypeScript Type Check are success on efea2a386e, and a CHANGELOG edit moves no build input. Closed.
  5. Worktree cleanup. Process note; no bearing on the diff. Acknowledged.
  6. PR-body wording slip ("six instances"). Measured on origin/main: six *Erratum* lines, five carrying the (Corrected after publication, #N.) suffix (seven occurrences of the suffix in the file in all, the other two being inline amendments in 17.3.0). The dev's own count is right and the body's phrasing is the slip. The PR body is not a shipped surface and the diff does not depend on it; cosmetic, left to the dispatching seat. Not escalated.

The dev's acceptance note on the entry's retained present tense is judged in ① item 9. Nothing is escalated to the maintainer.

Implemented-by: claude/issue-18858-spec-changelog-paid-followup
Reviewed-by: session_01JAhu8u8QfBvRjVZDox7CP9

VERDICT: PASS

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

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants