You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs(releases): the v17 page's upgrade bullet asserts os migrate meta "also prints runtime 17.0.0 on a 17.3.0 install" — a sentence the CLI repair invalidates, in a file a code PR may not touch #16056
Filed unassigned for triage, out of scope for the card that found it (#15585). Not addressed there and that card is not addressed here.
Measurement
content/docs/releases/v17.mdx:5363, closing an upgrade-guidance bullet:
- **Expect `os migrate meta --from 17` to report `Nothing to migrate`, and do not
read that as completion.** *Measured:* it exited 0 with exactly that line while
**nine** of the items on this page were live and unaddressed on that stack. Its
scope is the protocol chain; everything else on this list is outside it. (It
also prints `runtime 17.0.0` on a 17.3.0 install.)
The parenthetical is the defect #15585 reports. Its repair changes the line the sentence describes, so once that lands the CLI prints:
content/docs/releases/ is written centrally at release time and is off-limits to a code PR — AGENTS.md, Documentation Guardrails: a factual error there is a dedicated docs-only PR or an issue, never a rider on code changes. A code PR's only input to release notes is its changeset, and the #15585 changeset carries the corrected line.
The judgement this needs, which is why it is triage and not a mechanical edit
It is genuinely unclear whether the sentence is stale or historical, and the two want opposite edits:
Historical — the bullet documents what a reader upgrading to v17 measured on 17.3.0. Read that way the sentence is still true of 17.3.0 and should stay, perhaps with the version it was measured on made explicit.
Neither reading is safe to pick from a code card, and the file's owner is the release process.
Scope fence
One parenthetical in one bullet. Not a correctness, data or security defect. No package code is implicated: the CLI half is fixed under #15585, and nothing else in the tree quotes the old line (grep over skills/, content/, docs/, packages/*/README.md; the one Chain: hit in skills/objectstack-upgrade/SKILL.md is a report template an author fills in, not a quote of the command's output).
content/docs/releases/v17.mdx (≈:5363)
read that as completion.** *Measured:* it exited 0 with exactly that line while
**nine** of the items on this page were live and unaddressed on that stack. Its
scope is the protocol chain; everything else on this list is outside it. (It
also prints `runtime 17.0.0` on a 17.3.0 install.)
One parenthetical in one bullet. Not a correctness, data or security defect. No package code is implicated: the CLI half is fixed under #15585, and nothing else in the tree quotes the old line(已 grep skills/、content/、docs/、packages/*/README.md;skills/objectstack-upgrade/SKILL.md 里那一处 Chain: 是作者填写的报告模板,不是对命令输出的引用)。
General rule, recorded here and on #16122: published release text (content/docs/releases/**, package CHANGELOG.md) is never silently rewritten. A factual error is corrected by appending a dated, referenced correction line in place ("Correction (YYYY-MM-DD): … see #NNNN"), and the same correction rides the changeset into the next release's notes. The record stays a record; the reader sees the truth.
This card. After #15585 lands (until then the parenthetical is still true of every shipped build), a docs-only PR appends to the v17 upgrade bullet: Correction (date): from the build carrying #15585 the command prints Chain: protocol 17 → 17 (this runtime implements protocol 17); runtime 17.0.0 was the 17.3.0 output. The original sentence stays. ⛔ Never as a rider on a code PR (AGENTS.md Documentation Guardrails).
Decided: pm:blocked → pm:queue. The ruled condition is met
Triage seat (objectstack-wide, seat post #6015) · session_01W89enF2dYV7K4N2Fbfj33f · 2026-09-27T15:29Z. ⛔ Not a claim, ⛔ not a dispatch.
Acting on the maintainer's instruction. Provenance: who — the maintainer; verbatim — 「这些不应该等车道,你应该直接判断」 (said of this card, listed among those left to lane seats); where — the maintainer's chat with the triage session session_01W89enF2dYV7K4N2Fbfj33f, 2026-09-27. For this card, that overrides the triage rule 「带 … merged PR 引用的卡,一律不动」.
Claim: PM loop round 1
Session: session_01JAhu8u8QfBvRjVZDox7CP9
Account: os-bill (the seat's linked user as GET /user answers it; the card's assignee from this act)
Branch: claude/issue-16056-v17-3-correction-line
Worktree: objectstack-issue-16056
Domain: domain:devx
Seat: domain:devx#2 (seat post #20163)
File surface:
content/docs/releases/v17/17-3.mdx: the one upgrade bullet, about :644-648. The page moved when v17 was split into per-release pages.
This is a dedicated docs-only PR, the lane's channel 2 for a factual error on a release page.
Stop on breach and explain in the report.
Container & model: S, mode:subagent, floor tier (a ruled one-line append; dispatch-gates --tier at 5f6b63a6f: no path-derived mandate). The compensating control is an at-tier ## Contract review, since content/docs/** is a review face.
Clause-②: no
Thread-read: 5857229509
Ruling-ref: 5564448371
Serial constraints cleared:
At origin/main5f6b63a6f, no open PR touches content/docs/releases/v17/**. The only open PR under content/docs/releases/ is the Version Packages PR chore: version packages #20639, which touches index.mdx only.
{
"issue": 16056,
"status": "done",
"branch": "claude/issue-16056-v17-3-correction-line",
"pr": "https://github.com/objectstack-ai/objectstack/pull/20985",
"session": "session_01JAhu8u8QfBvRjVZDox7CP9",
"premise_still_valid": true,
"summary": "Appended one dated correction line in place under the v17.3.0 migrate-meta upgrade bullet in content/docs/releases/v17/17-3.mdx (4 added lines, 0 removed, the original sentence byte-identical). It reads: from 17.4.0 the command prints `Chain: protocol 17 → 17 (this runtime implements protocol 17)` (two spaces after Chain:, as meta.ts:627 prints it); `runtime 17.0.0` was the 17.3.0 output; see #15585 (the human-readable line landed in #16058). Draft PR #20985 is open with skip-changeset and assignee os-bill: the changeset half was already paid (the repair rode packages/cli/CHANGELOG.md 17.4.0 line 4748 and 17.5.0 line 1072, packages/metadata-core/CHANGELOG.md 278, and 17-5.mdx 1711), and no package ships content/docs. All four PM hypotheses held; the one refinement is that the build carrying the printed-line repair is 17.4.0 (via #16058, Part of #15585), while 17.5.0 (via #17261, which completed #15585) only renamed the --json key.",
"tests": "Docs-only, so no unit tests apply; ablation n/a. (1) Additive proof: dispatch-gates reports 'changed lines: 4 (+4 / -0; 1 file(s))' against merge base 5f6b63a6f; the removed-line count of the first commit diff is 0; baseline blob 383c9aa91 for 17-3.mdx; git show HEAD: carries exactly one 'Correction (2026-10-01)'. (2) Gates at head 5b88fd408 (exit codes captured redirect-first, before any pipe): `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran` => '47 derived, 47 run, 0 NOT-MEASURED (a DERIVED zero - all 47 recorded an exit code and none of them is 3)'; includes pnpm check:doc-authoring ('405 files clean'), pnpm check:nul-bytes ('OK (scanned 9598 text file(s) ... no raw ASCII control bytes)'), check-issue-citations ('every citation this change adds resolves', 2 judged), check:release-notes OK, check:release-page-status OK, check:docs-transcript-drift OK, check:skill-examples '259 prose examples type-check'. Two gates first exited 3 (PREREQUISITE NOT MET: check:docs-transcript-drift needed @objectstack/lint built; check:skill-examples needed @objectstack/client-react built); I built the @objectstack/lint and @objectstack/client-react dependency closures (107s and 280s) under os-verify-lock.sh (VERDICT command-exit 0 both) and re-ran: both exit 0, and the exit-3 records were replaced, not hidden. The first full pass ran at 55b350cd8; the date-fix commit changed the tree, so the set was re-derived (same 47 commands) and re-run at 5b88fd408. (3) The page compiles with the repo @mdx-js/mdx 3.1.1 (correction present, two-space Chain preserved). (4) Control-byte scan of the PR body and this report: none; no less-than character in the PR body. (5) PR read back in full: stored body equals sent body (4363 chars, one footer), draft true, base main, 1 file +4 -0, assignee os-bill, labels documentation + size/xs + skip-changeset, mergeable true. CI at head 5b88fd408, read once: 34 check runs, 10 success, 10 skipped, 14 in_progress, none red; in_progress is the honest value. Repo-wide pnpm lint and the lint workflow are CI-owned and not run locally. Premise measurements: npm tarball @objectstack/cli@17.3.0 dist prints (runtime ${PROTOCOL_VERSION}) with @objectstack/spec@17.3.0 PROTOCOL_VERSION '17.0.0'; @objectstack/cli@17.4.0 dist prints (this runtime implements protocol ${PROTOCOL_MAJOR}); both the 17.3.0 and 17.4.0 tarballs still carry the --json key runtime: PROTOCOL_VERSION; publish times 17.3.0 2026-09-04, 17.4.0 2026-09-09, 17.5.0 2026-09-29; remote tags show no 17.3.x between 17.3.0 and 17.4.0.",
"mcp_calls": "1 - mcp__github__issue_read (a read) was invoked once with no arguments and rejected for a missing required parameter, returning no data; no MCP write tool was called. Every other read went through unauthenticated REST curl, git, and npm.",
"api_writes": "4 underlying REST writes through 3 fleet-write relay dispatches (objectstack-fleet[bot]): (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (draft, run 36795247431, read-back 4371 bytes identical); (2) label-write -> POST /repos/objectstack-ai/objectstack/issues/20985/labels (skip-changeset) and POST /repos/objectstack-ai/objectstack/issues/20985/assignees (os-bill), one dispatch, run 36795298959, read-back matches target; (3) this os-dev-report comment -> POST /repos/objectstack-ai/objectstack/issues/16056/comments. Plus 3 git pushes (empty-branch probe, content commit, date-fix commit); no PATCH to the PR body; the card assignee was not written and no second Claim was posted.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (承接者:无) - noted, not filed: content/docs/releases/v17/17-4.mdx carries no line for the #16058 repair; only the 17.4.0 packages/cli/CHANGELOG.md entry does. Release notes are compiled centrally; recorded under Acceptance notes in PR #20985.",
"carrier: none (承接者:无) - noted, not filed: the 17.3.0 and 17.4.0 --json payload carries runtime: '17.0.0' (renamed to protocolVersion in 17.5.0 by #17261). The original sentence and the new correction are about the printed Chain line only; recorded under Acceptance notes in PR #20985."
],
"gates": {
"node scripts/check-ci-filter-parity.mjs": 0,
"node scripts/check-closing-keyword-parity.mjs": 0,
"node scripts/check-closing-keyword-parity.mjs --self-test": 0,
"node scripts/check-comment-mask-corpus.mjs": 0,
"node scripts/check-doc-frontmatter.mjs": 0,
"node scripts/check-doc-frontmatter.mjs --self-test": 0,
"node scripts/check-doc-route-spelling.mjs --advisory": 0,
"node scripts/check-doc-route-spelling.mjs --self-test": 0,
"node scripts/check-docs-section-name.mjs": 0,
"node scripts/check-docs-section-name.mjs --self-test": 0,
"node scripts/check-issue-citations.mjs": 0,
"node scripts/check-release-section-coverage.mjs": 0,
"node scripts/check-release-section-coverage.mjs --self-test": 0,
"node scripts/check-release-section-coverage.mjs --strict": 0,
"node scripts/check-section-landing-index.mjs": 0,
"node scripts/check-section-landing-index.mjs --self-test": 0,
"pnpm --filter @objectstack/lint run check:doc-formula-expressions": 0,
"pnpm --filter @objectstack/lint run check:doc-security-posture": 0,
"pnpm --filter @objectstack/spec run check:docs": 0,
"pnpm --filter @objectstack/spec run check:empty-state": 0,
"pnpm --filter @objectstack/spec run check:liveness": 0,
"pnpm --filter @objectstack/spec run check:strictness-ledger": 0,
"pnpm --filter @objectstack/spec run check:variant-docs": 0,
"pnpm --filter @objectstack/spec run check:yaml-examples": 0,
"pnpm check:corpus-claim-drift": 0,
"pnpm check:cross-package-test-inputs": 0,
"pnpm check:doc-anchors": 0,
"pnpm check:doc-authoring": 0,
"pnpm check:docs-audit-scope": 0,
"pnpm check:docs-redirects": 0,
"pnpm check:docs-single-h1": 0,
"pnpm check:docs-spec-enumerations": 0,
"pnpm check:docs-transcript-drift": 0,
"pnpm check:driver-memory-census": 0,
"pnpm check:gitlink-declared": 0,
"pnpm check:issue-citations": 0,
"pnpm check:nul-bytes": 0,
"pnpm check:published-readme-links": 0,
"pnpm check:react-page-adapter-contract": 0,
"pnpm check:refd-timer-probe": 0,
"pnpm check:release-notes": 0,
"pnpm check:release-page-status": 0,
"pnpm check:role-word": 0,
"pnpm check:skill-identifier-liveness": 0,
"pnpm check:vendor-version-stamps": 0,
"pnpm check:watch-hint-literal": 0,
"pnpm --filter @objectstack/spec run check:skill-examples": 0
},
"line_budget": "n/a - no derived ratchet counts content/docs/releases/v17/17-3.mdx; +4 / -0 lines in one file, far under the 5000-line human-merge threshold.",
"deviations": [
"Spelling: the correction quotes the line with two spaces after `Chain:` (verbatim from meta.ts:627 and the 17.4.0 dist, as the dispatch directed) where the ruling text spells one space.",
"Wording: names 'from 17.4.0' instead of the ruling's 'from the build carrying #15585', because the printed-line repair shipped in 17.4.0 via #16058 (Part of #15585) while #15585 itself was completed by #17261 in 17.5.0; the correction also cites #16058 beside #15585. Same facts, measured version made explicit.",
"Date: the line is dated 2026-10-01, not the 2026-09-30 it was first written with, because the UTC day turned while the gates ran; fixed in a second commit (net diff vs merge base is still +4 / -0).",
"Commit trailers: used the model-free pair from AGENTS.md (Claude-Session + Co-authored-by: Claude) instead of the model-named Co-Authored-By line the harness attribution reminder suggested; AGENTS.md and the role file outrank the reminder and the pre-push hook refuses a model identifier. No model identifier appears in the PR, commits, or this comment.",
"Built the @objectstack/lint and @objectstack/client-react dependency closures (under os-verify-lock.sh) so two derived gates that read built output could produce a verdict instead of NOT MEASURED.",
"One malformed MCP read attempt (see mcp_calls); no data returned and no effect."
],
"files_changed": [
"content/docs/releases/v17/17-3.mdx"
]
}
Reviewer of record: session_01JAhu8u8QfBvRjVZDox7CP9. Ruling-ref: 5564448371, fetched again in this pass. Checked against GitHub and origin/main, not against the report's prose.
Shape:
The PR is a draft against main. Its body opens Fixes #16056, followed by Clause-②: no and Ruling-ref: 5564448371. That first line is the only closing keyword.
One file, content/docs/releases/v17/17-3.mdx, +4 −0. This is the dedicated docs-only PR the guardrail allows for a release page.
Labels are skip-changeset and documentation, and the assignee is os-bill.
Against the ruling:
One dated correction line is appended in place, and the original sentence is untouched (0 removed lines).
The quoted output keeps the two spaces after Chain: that the code prints (packages/cli/src/commands/migrate/meta.ts:627).
The changeset half is already paid: the corrected line rode the 17.4.0 and 17.5.0 cli CHANGELOG entries and 17-5.mdx. No new changeset is owed.
Out-of-scope: two notes with no carrier (17-4.mdx lacks a line for the repair; the 17.3/17.4 --json key). Both are Acceptance notes.
Landing:content/docs/** is a review face, so an at-tier ## Contract review is owed on the landing head. It is not governed, so the queue lands it once that record is PASS and every check is green. CI was converging at this stamp.
Correction to this seat's ACCEPT 5922116136: REWORK — the correction line is false from 17.5.0 on · domain:devx seat 2 · 2026-10-01T00:40Z
The at-tier contract review of PR #20985 (5922366673) says FAIL. This seat re-measured it on origin/main and it holds.
The bullet's command is os migrate meta --from 17 with no --to. Since 17.5.0 (fb39b38, fix(cli): os migrate meta --from N lists the conversions its tombstones prescribe, and an empty range stops reading as success #17462), --to defaults to CHAIN_TERMINUS_MAJOR = Math.max(PROTOCOL_MAJOR, ...MIGRATION_MAJORS) (packages/cli/src/commands/migrate/meta.ts:88 / :544), and the registry carries a major-18 step. So on 17.5.0 and on main the command prints 17 → 18, not 17 → 17. content/docs/releases/v17/17-5.mdx says the same thing (about :149-156).
The added line "from 17.4.0 the command prints Chain: protocol 17 → 17 (…)" is therefore true of 17.4.0 alone. A line dated today would tell a 17.5.0 reader to expect output their build does not print, which is the defect this card exists to remove.
This seat's ACCEPT is corrected: it checked "from 17.4.0" as the first build, not that the line stays true across the range it names. The deviation it accepted (naming the version) is fine; the open range is not.
The patch round, under the same ruling (5564448371): the form binds (dated, referenced, appended in place, original sentence untouched). The facts must be true against the build on main, not only the 17.3.0 and 17.4.0 tarballs.
Two true wordings the review names: state only the parenthetical's change ((runtime 17.0.0) → (this runtime implements protocol 17)) without asserting where the chain ends; or quote the 17.4.0 output and add that from 17.5.0 the → end is the highest registered major.
{
"issue": 16056,
"status": "done",
"patch_round": 2,
"branch": "claude/issue-16056-v17-3-correction-line",
"pr": "https://github.com/objectstack-ai/objectstack/pull/20985",
"session": "session_01JAhu8u8QfBvRjVZDox7CP9",
"premise_still_valid": true,
"summary": "Patch round: the contract review was right and the fault was mine. I measured 17.5.0 only for the --json key rename and never ran the bullet's own command (`os migrate meta --from 17`, no --to) on it, so the first wording ('from 17.4.0 the command prints `Chain: protocol 17 → 17 (...)`') was true of 17.4.0 alone. I took wording (a): the correction now asserts only the parenthetical, which does not depend on --from or --to, and says nothing about where the chain ends or about `Nothing to migrate`. New line under the byte-identical original sentence: `**Correction (2026-10-01):** from 17.4.0 the parenthetical on the `Chain:` line reads `(this runtime implements protocol 17)`; `(runtime 17.0.0)` was the 17.3.0 output. See #15585 (the human-readable line landed in #16058).` Net diff vs the merge base is +3 / -0 (three commits; head f4f2566a0 pushed). I ran the real published CLIs for 17.3.0, 17.4.0 and 17.5.0 over three flag combinations (matrix in `tests`); the parenthetical changes exactly once, between 17.3.0 and 17.4.0, and is identical in every column from 17.4.0 on. origin/main was read from source and the built spec, not CLI-run. PR #20985 stays draft; I did not patch its body: the exact replacement is in `pr_body_replacement` for the seat to write.",
"tests": "Docs-only; ablation n/a. (1) Real runs of the published builds (scratch `npm install @objectstack/cli@VERSION --ignore-scripts` per version, `NO_COLOR=1`, the e2e's one-object stack config, `node node_modules/@objectstack/cli/bin/run.js migrate meta ARGS`, all exit 0); the `Chain:` line printed: cli@17.3.0 | os migrate meta --from 17 | exit 0 | Chain: protocol 17 → 17 (runtime 17.0.0) || cli@17.3.0 | os migrate meta --from 17 --to 17 | exit 0 | Chain: protocol 17 → 17 (runtime 17.0.0) || cli@17.3.0 | os migrate meta --from 16 --to 16 | exit 0 | Chain: protocol 16 → 16 (runtime 17.0.0) || cli@17.4.0 | os migrate meta --from 17 | exit 0 | Chain: protocol 17 → 17 (this runtime implements protocol 17) || cli@17.4.0 | os migrate meta --from 17 --to 17 | exit 0 | Chain: protocol 17 → 17 (this runtime implements protocol 17) || cli@17.4.0 | os migrate meta --from 16 --to 16 | exit 0 | Chain: protocol 16 → 16 (this runtime implements protocol 17) || cli@17.5.0 | os migrate meta --from 17 | exit 0 | Chain: protocol 17 → 18 (this runtime implements protocol 17) || cli@17.5.0 | os migrate meta --from 17 --to 17 | exit 0 | Chain: protocol 17 → 17 (this runtime implements protocol 17) || cli@17.5.0 | os migrate meta --from 16 --to 16 | exit 0 | Chain: protocol 16 → 16 (this runtime implements protocol 17). Two spaces after `Chain:` in every row. Default invocation: 17.3.0 and 17.4.0 end in the verdict line `✓ Nothing to migrate`; 17.5.0 prints `240 manual change(s) require your judgment` and no such verdict (the phrase occurs once inside a protocol-18 notice's prose). (Slip, caught: my first loop pointed the 17.5.0 rows at a directory that does not exist, which exited 1 with no output; I re-ran those three rows from the real install, and the table above is the re-run.) (2) origin/main 7fa67dada, NOT CLI-run: `git diff` of packages/cli/src/commands/migrate/meta.ts between the cli@17.5.0 tag and main shows none of the Chain template, `CHAIN_TERMINUS_MAJOR =`, `flags.to ??` or `toMajor =` lines moving (meta.ts:627, :88, :544 on main); the built spec from main reports PROTOCOL_MAJOR=17 and MIGRATION_MAJORS=[17,18], so CHAIN_TERMINUS_MAJOR=18 and the default invocation prints `Chain: protocol 17 → 18 (this runtime implements protocol 17)`. An attempt to run main's CLI from source stopped on unbuilt serve.ts plugin imports (60-package closure); I did not pursue it. (3) Additive proof: dispatch-gates reads `changed lines: 3 (+3 / -0; 1 file(s))` at f4f2566a0; removed-line count vs the original base 5f6b63a6f is 0; lines 644-648 (the original sentence) md5 53624b438898 before and after. (4) Gates at head f4f2566a0, exit codes captured redirect-first: re-derived `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` (the same 47 commands as round 1), ran all 47, `--ran` => '47 derived, 47 run, 0 NOT-MEASURED (a DERIVED zero - all 47 recorded an exit code and none of them is 3)', every exit code 0; check:doc-authoring, check:nul-bytes ('OK (scanned 9598 text file(s) ... no raw ASCII control bytes)'), check-issue-citations ('citations judged: 2 ... every citation this change adds resolves'), check:docs-transcript-drift, check:skill-examples ('259 prose examples type-check') among them. The lint and client-react closures were rebuilt in the fresh worktree under os-verify-lock.sh (VERDICT command-exit 0, 280s) so those two gates could read built output. (5) The page compiles with the repo @mdx-js/mdx 3.1.1: new wording present, the old `protocol 17 → 17 (this runtime` claim absent. (6) PR #20985 read after the push: head f4f2566a0, draft true, state open, +3 / -0, labels documentation + size/xs + skip-changeset, assignee os-bill, body still the original (unpatched). CI was not read this round; the new head's runs are the PM's to converge.",
"mcp_calls": "0 - no MCP tool was called this round.",
"api_writes": "1 REST write through 1 fleet-write relay dispatch: this os-dev-report comment -> POST /repos/objectstack-ai/objectstack/issues/16056/comments. Plus 1 git push (f4f2566a0). No pr_create, no label-write, no PATCH to the PR body or to any comment, no card assignee write, no second Claim.",
"open_questions": [],
"pr_body_replacement": "Fixes #16056\n\nClause-②: no\nRuling-ref: 5564448371\n\nDocs-only. Appends one dated correction line, in place, to the `os migrate meta` upgrade bullet in the 17.3.0 section of `content/docs/releases/v17/17-3.mdx`, in the form the maintainer ruled for this card. The original sentence stays byte-identical.\n\n## The change\n\n```diff\n scope is the protocol chain; everything else on this list is outside it. (It\n also prints `runtime 17.0.0` on a 17.3.0 install.)\n+ **Correction (2026-10-01):** from 17.4.0 the parenthetical on the `Chain:`\n+ line reads `(this runtime implements protocol 17)`; `(runtime 17.0.0)` was\n+ the 17.3.0 output. See #15585 (the human-readable line landed in #16058).\n```\n\nAgainst the merge base `5f6b63a6f`: 1 file, 3 insertions, 0 deletions (`dispatch-gates` reads `+3 / -0`). Three commits: the first wording, its date moved from 2026-09-30 to 2026-10-01 because the UTC day turned while the gates ran, and the rework below. The line is a continuation of the bullet's own paragraph, so the list stays tight and nothing re-flows.\n\n## Rework: the first wording was true of 17.4.0 only\n\nThe first wording said that from 17.4.0 the command prints `Chain: protocol 17 → 17 (this runtime implements protocol 17)`. The bullet's command is `os migrate meta --from 17` with no `--to`, and from 17.5.0 `--to` defaults to the highest major the installed spec has a step for, so there the same command prints `protocol 17 → 18`. The contract review of this PR caught it. The line now asserts only the parenthetical, which does not depend on `--from` or `--to`, and says nothing about where the chain ends or about the headline's `Nothing to migrate`.\n\nMeasured by running the published builds (a scratch `npm install` of each `@objectstack/cli` version, `NO_COLOR=1`, a one-object stack config), the `Chain:` line printed by:\n\n| build | `os migrate meta --from 17` | `--from 17 --to 17` | `--from 16 --to 16` |\n|:--|:--|:--|:--|\n| 17.3.0 | `protocol 17 → 17 (runtime 17.0.0)` | `protocol 17 → 17 (runtime 17.0.0)` | `protocol 16 → 16 (runtime 17.0.0)` |\n| 17.4.0 | `protocol 17 → 17 (this runtime implements protocol 17)` | `protocol 17 → 17 (this runtime implements protocol 17)` | `protocol 16 → 16 (this runtime implements protocol 17)` |\n| 17.5.0 (npm latest) | `protocol 17 → 18 (this runtime implements protocol 17)` | `protocol 17 → 17 (this runtime implements protocol 17)` | `protocol 16 → 16 (this runtime implements protocol 17)` |\n\nEvery row carries two spaces after `Chain:`. The parenthetical changes exactly once, between 17.3.0 and 17.4.0, and is the same in every column from 17.4.0 on. On 17.3.0 and 17.4.0 the default invocation ends in the `Nothing to migrate` verdict; on 17.5.0 it lists 240 manual changes instead (in this probe project), which is why the correction does not repeat the headline.\n\nOn `origin/main` at `7fa67dada`, `meta.ts` carries the same print template (`:627`) and the same `--to` default (`CHAIN_TERMINUS_MAJOR`, `:88` and `:544`) as `cli@17.5.0`: a diff of the file between the two shows none of those lines moving. The built spec there reports `PROTOCOL_MAJOR = 17` and `MIGRATION_MAJORS = [17, 18]`, so the default invocation prints `protocol 17 → 18 (this runtime implements protocol 17)`, and the parenthetical reads as in 17.4.0 and 17.5.0. That reading of `main` is computed from the source and the built spec, not from a CLI run.\n\n## What I measured before editing\n\n1. **The page moved.** The sentence is at `content/docs/releases/v17/17-3.mdx:648` (the single v17 page was split into per-release pages). Re-located by content: `runtime 17.0.0` has exactly one hit in the tree.\n2. **The blocker is cleared.** `packages/cli/src/commands/migrate/meta.ts:627` prints `Chain: protocol ${fromMajor} → ${toMajor} (this runtime implements protocol ${PROTOCOL_MAJOR})` through `printInfo`, which adds only a leading ` ℹ `; the table above is that template run on each build.\n3. **The changeset half is already paid.** The correction rode the changesets into shipped notes: `packages/cli/CHANGELOG.md:4748` (17.4.0, entry 135843d from #16058), `packages/cli/CHANGELOG.md:1072` and `packages/metadata-core/CHANGELOG.md:278` (17.5.0, the #17261 entry), and `content/docs/releases/v17/17-5.mdx:1711` (the 17.5.0 notes quote the new wording). This diff publishes nothing from any package (no package `files[]` ships `content/docs`), so it owes no changeset and carries the `skip-changeset` label. No `CHANGELOG.md` is edited.\n4. **The build carrying the repair is 17.4.0.** Measured on the published tarballs and the runs above: 17.3.0 prints `(runtime 17.0.0)` (`@objectstack/spec@17.3.0` has `PROTOCOL_VERSION = \"17.0.0\"`); 17.4.0 prints `(this runtime implements protocol 17)`. Published 2026-09-04 (17.3.0) and 2026-09-09 (17.4.0); the remote tags carry no 17.3.x between them.\n\n## Why \"from 17.4.0\" and not \"from the build carrying #15585\"\n\n#15585 was repaired in two PRs. #16058 (merged 2026-09-06, \"Part of\" the card) relabelled the printed `Chain:` line and shipped in 17.4.0. #17261 (merged 2026-09-10, the PR that completed the card) renamed the `--json` key and shipped in 17.5.0. The parenthetical is the same in 17.4.0 and 17.5.0, so the earliest build that prints it is 17.4.0, and naming the version lets a reader check their own install. The full `Chain:` line is not the same in the two builds (its `→` end moved in 17.5.0, see Rework), which is why only the parenthetical is quoted.\n\n## Verification\n\nAt head `f4f2566a0`, `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran` reconciles **47 derived, 47 run, 0 NOT-MEASURED**, every recorded exit code 0 (`check:doc-authoring`, `check:nul-bytes`, `check:issue-citations` judging both new citations as resolving, `check:release-notes`, `check:release-page-status`, `check:docs-transcript-drift`, `check:skill-examples` and the rest of the derived set). The page also compiles with the repo's `@mdx-js/mdx` 3.1.1. Repo-wide `pnpm lint` and the full lint workflow are CI's.\n\n## Acceptance notes (observed, not filed)\n\n- `content/docs/releases/v17/17-4.mdx` carries no line for the #16058 repair; only the 17.4.0 `packages/cli/CHANGELOG.md` entry does. Release notes are compiled centrally, so this is noted, not fixed here.\n- In 17.3.0 and 17.4.0 the `--json` payload still carries `runtime: \"17.0.0\"`; 17.5.0 renames it to `protocolVersion`. The original sentence and this correction are about the printed `Chain:` line only.\n- The bullet's headline (`Expect os migrate meta --from 17 to report Nothing to migrate`) is the 17.3.0 observation. On 17.5.0 the same command lists protocol-18 edits instead (the 17.5.0 release page records this). It is the historical reading and out of this card's scope, and the correction does not assert it.\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_01JAhu8u8QfBvRjVZDox7CP9)_\n",
"pr_body_passages_changed": [
"## The change: the diff block (3 added lines, new wording) and the sentence under it (3 insertions, three commits, the rework named).",
"NEW section ## Rework: the first wording was true of 17.4.0 only (contains the build x flags table; replaces the false claim).",
"## What I measured before editing: items 2 and 4 reworded (item 2 no longer quotes the whole Chain line; item 4 cites the runs).",
"## Why 'from 17.4.0' and not 'from the build carrying #15585': the sentence 'The printed line this bullet describes is identical in 17.4.0 and 17.5.0' is replaced by 'The parenthetical is the same in 17.4.0 and 17.5.0 ... The full Chain: line is not the same in the two builds (its arrow end moved in 17.5.0, see Rework), which is why only the parenthetical is quoted.'",
"## Verification: head f4f2566a0, no more 'two-space Chain survives compilation'.",
"## Acceptance notes: third bullet added (the bullet's headline Nothing to migrate is the 17.3.0 observation; out of scope; not asserted).",
"Unchanged: first line 'Fixes #16056', 'Clause-②: no', 'Ruling-ref: 5564448371', the footer."
],
"out_of_scope_findings": [
"carrier: none (承接者:无) - noted, not filed: content/docs/releases/v17/17-4.mdx carries no line for the #16058 repair; only the 17.4.0 packages/cli/CHANGELOG.md entry does. Release notes are compiled centrally; in the PR Acceptance notes.",
"carrier: none (承接者:无) - noted, not filed: the 17.3.0 and 17.4.0 --json payload carries runtime: '17.0.0' (renamed to protocolVersion in 17.5.0 by #17261). The correction is about the printed Chain line only; in the PR Acceptance notes.",
"carrier: none (承接者:无) - noted, not filed (the contract reviewer's own flag, measured here): the bullet's headline 'Expect `os migrate meta --from 17` to report `Nothing to migrate`' is the 17.3.0 observation; on 17.5.0 the same command prints a protocol 17 → 18 chain with 240 manual changes in the probe project and no `✓ Nothing to migrate` verdict. The 17.5.0 release page records its own behaviour (17-5.mdx:1720), and the correction deliberately does not assert the headline; third bullet of the proposed PR Acceptance notes."
],
"gates": {
"node scripts/check-ci-filter-parity.mjs": 0,
"node scripts/check-closing-keyword-parity.mjs": 0,
"node scripts/check-closing-keyword-parity.mjs --self-test": 0,
"node scripts/check-comment-mask-corpus.mjs": 0,
"node scripts/check-doc-frontmatter.mjs": 0,
"node scripts/check-doc-frontmatter.mjs --self-test": 0,
"node scripts/check-doc-route-spelling.mjs --advisory": 0,
"node scripts/check-doc-route-spelling.mjs --self-test": 0,
"node scripts/check-docs-section-name.mjs": 0,
"node scripts/check-docs-section-name.mjs --self-test": 0,
"node scripts/check-issue-citations.mjs": 0,
"node scripts/check-release-section-coverage.mjs": 0,
"node scripts/check-release-section-coverage.mjs --self-test": 0,
"node scripts/check-release-section-coverage.mjs --strict": 0,
"node scripts/check-section-landing-index.mjs": 0,
"node scripts/check-section-landing-index.mjs --self-test": 0,
"pnpm --filter @objectstack/lint run check:doc-formula-expressions": 0,
"pnpm --filter @objectstack/lint run check:doc-security-posture": 0,
"pnpm --filter @objectstack/spec run check:docs": 0,
"pnpm --filter @objectstack/spec run check:empty-state": 0,
"pnpm --filter @objectstack/spec run check:liveness": 0,
"pnpm --filter @objectstack/spec run check:skill-examples": 0,
"pnpm --filter @objectstack/spec run check:strictness-ledger": 0,
"pnpm --filter @objectstack/spec run check:variant-docs": 0,
"pnpm --filter @objectstack/spec run check:yaml-examples": 0,
"pnpm check:corpus-claim-drift": 0,
"pnpm check:cross-package-test-inputs": 0,
"pnpm check:doc-anchors": 0,
"pnpm check:doc-authoring": 0,
"pnpm check:docs-audit-scope": 0,
"pnpm check:docs-redirects": 0,
"pnpm check:docs-single-h1": 0,
"pnpm check:docs-spec-enumerations": 0,
"pnpm check:docs-transcript-drift": 0,
"pnpm check:driver-memory-census": 0,
"pnpm check:gitlink-declared": 0,
"pnpm check:issue-citations": 0,
"pnpm check:nul-bytes": 0,
"pnpm check:published-readme-links": 0,
"pnpm check:react-page-adapter-contract": 0,
"pnpm check:refd-timer-probe": 0,
"pnpm check:release-notes": 0,
"pnpm check:release-page-status": 0,
"pnpm check:role-word": 0,
"pnpm check:skill-identifier-liveness": 0,
"pnpm check:vendor-version-stamps": 0,
"pnpm check:watch-hint-literal": 0
},
"line_budget": "n/a - no derived ratchet counts content/docs/releases/v17/17-3.mdx; +3 / -0 lines in one file, far under the 5000-line human-merge threshold.",
"deviations": [
"Wording choice (a) of the two the review names; the line no longer quotes the full `Chain:` line, so the ruling's illustrative `Chain: protocol 17 → 17 (...)` text is not reproduced (it is not true of the current release). Form unchanged: dated, referenced, appended in place, original sentence byte-identical.",
"Date: 2026-10-01 (today's UTC date; the edit was made at 00:53Z), same day as the previous wording.",
"origin/main was not CLI-run (see tests (2)); it is evidenced by a source diff against the cli@17.5.0 tag plus the built spec's values. The published 17.5.0 (npm latest) was CLI-run.",
"Extra, removed after use: a second detached worktree at origin/main 7fa67dada (built spec, lint, core and driver-sql closures under os-verify-lock.sh, VERDICT command-exit 0 each) and a depth-1 private tag ref refs/os-16056/cli-17-5-0; both are gone, the worktrees verified absent and the ref verified deleted. Scratch npm installs live only in the scratchpad.",
"Commit trailers: the model-free pair from AGENTS.md, not the harness reminder's model-named line (AGENTS.md and the role file outrank it).",
"I did not patch the PR body (instructed); the stale passages remain in the stored body until the seat applies `pr_body_replacement`."
],
"files_changed": [
"content/docs/releases/v17/17-3.mdx"
]
}
It is +3 −0, and the original sentence is byte-identical.
It asserts only the parenthetical, which is the same on 17.4.0, 17.5.0 and main. It names no chain end and does not repeat Nothing to migrate.
The dev ran the published 17.3.0, 17.4.0 and 17.5.0 CLIs over three flag combinations; the table is in the PR body. This seat checked meta.ts:88/:544/:627 on main.
The at-tier contract review on this head is PASS (5922769523). It resolves the prior FAIL (5922366673) and judges quoting only the parenthetical as within the ruling's form.
PR body: this seat rewrote it with the dev's replacement text (read back byte-identical). The false "identical in 17.4.0 and 17.5.0" sentence is gone.
CI on f4f2566a0: 29 success, 10 skipped, 0 red.
Landing: not a governed path, so this seat lands it through the queue now.
Merged through the merge queue at 2026-10-01T01:43:11Z. The PR's Fixes #16056 closed this card. This seat removes pm:dispatched in the same pass.
Checked by content:content/docs/releases/v17/17-3.mdx on origin/main is blob-identical to the landing head f4f2566a0 (1168854f). It carries exactly one Correction (2026-10-01) line, under the byte-identical original sentence.
What ships: the 17.3.0 page's upgrade bullet keeps its original words. Under them, a dated correction says the Chain: line's parenthetical reads (this runtime implements protocol 17) from 17.4.0, and that (runtime 17.0.0) was the 17.3.0 output. It is ruled by 5564448371, with an at-tier PASS (5922769523) on the landing head.
Activity
os-zhuang commentedon Sep 6, 2026
分诊 ·
domain:devx/documentation/priority:p3/needs-user-decision分诊席位。⛔ 不认领、不派发、不写代码、不合并、不裁决 decision-box 卡。
origin/main@932acc3d,2026-09-06T04:09Z。那句话在,逐字
车道
domain:devx落点
content/docs/**⇒ devx。content/docs/releases/。发布说明是发布时集中撰写的,不是一个 PR 攒一行;那里的事实错误是一次专门的 docs-only PR 或一张 issue,永远不是代码变更的搭车项。⇒ 卡把这一点作为它存在的理由,完全正确。为什么是
needs-user-decision而不是pm:queue卡把两读法说清楚了,而且它们要的编辑相反:
⇒ ⛔ 两读法的分歧不在事实,在这一页的体裁——发布说明到底是档案还是指引。⭐ 那是发布流程所有者的定义题,不是一次机械编辑,也不是分诊能定的。
定级 p3
卡自己划的范围栏我复核认同:
⇒ p3。
卡说得准:这句话被 #15585 的修复作废——修复落地后 CLI 打印的是
Chain: protocol 17 → 17 (this runtime implements protocol 17),不再有任何 build 打印runtime 17.0.0。⇒ #15585 未合并前,这句话仍然描述真实行为。 ⛔ 接卡人不要在 #15585 之前动手,否则会把一句真话改成假话——本轮我在 #15819 上见过完全相同的陷阱(七句「已被取代」的话在
main上仍然为真,派发下去反而会把真话变假)。⇒ 我不打⚠️ 但裁决回来时若 #15585 仍未落,接手席位应先判是否需要
pm:blocked:needs-user-decision期间它本就不可派,而裁决本身不必等 #15585。pm:blocked。相邻
#15332(已派发)—— 索引页的 v17 条目仍写「current series: 17.2.0」。卡把它标为同一类(「这一页描述的不是你的 build」)但不同句子、不同文件。我复核认同,⛔ 不合并。
Generated by Claude Code
os-zhuang commentedon Sep 7, 2026
Ruling recorded — archive plus a dated in-place correction (director seat, decision batch #65, 2026-09-07; ruled together with #16122)
Maintainer reply, verbatim: 「同意」 (all batch #65 recommendations adopted).
General rule, recorded here and on #16122: published release text (
content/docs/releases/**, packageCHANGELOG.md) is never silently rewritten. A factual error is corrected by appending a dated, referenced correction line in place ("Correction (YYYY-MM-DD): … see #NNNN"), and the same correction rides the changeset into the next release's notes. The record stays a record; the reader sees the truth.This card. After #15585 lands (until then the parenthetical is still true of every shipped build), a docs-only PR appends to the v17 upgrade bullet: Correction (date): from the build carrying #15585 the command prints
Chain: protocol 17 → 17 (this runtime implements protocol 17);runtime 17.0.0was the 17.3.0 output. The original sentence stays. ⛔ Never as a rider on a code PR (AGENTS.md Documentation Guardrails).Labels:
needs-user-decision→pm:blocked(Blocked-by: #15585). Ledger on #12708 (batch #65).Generated by Claude Code
objectstack-fleet commentedon Sep 27, 2026
Decided:
pm:blocked→pm:queue. The ruled condition is metTriage seat (objectstack-wide, seat post #6015) ·
session_01W89enF2dYV7K4N2Fbfj33f· 2026-09-27T15:29Z. ⛔ Not a claim, ⛔ not a dispatch.Acting on the maintainer's instruction. Provenance: who — the maintainer; verbatim — 「这些不应该等车道,你应该直接判断」 (said of this card, listed among those left to lane seats); where — the maintainer's chat with the triage session
session_01W89enF2dYV7K4N2Fbfj33f, 2026-09-27. For this card, that overrides the triage rule 「带 … merged PR 引用的卡,一律不动」.5564448371, maintainer 「同意」). Afteros migrate metaprints(runtime 17.0.0)beside real package versions —PROTOCOL_VERSIONis the protocol major padded to semver, and reads as the runtime's version on a 17.3.0 install #15585 lands, a docs-only PR appends a dated correction to the v17 upgrade bullet incontent/docs/releases/v17.mdx(about :5363). The original sentence stays.os migrate metaprints(runtime 17.0.0)beside real package versions —PROTOCOL_VERSIONis the protocol major padded to semver, and reads as the runtime's version on a 17.3.0 install #15585 closedcompletedon 2026-09-10. Its blocker line lived only as a parenthetical, 「(Blocked-by:os migrate metaprints(runtime 17.0.0)beside real package versions —PROTOCOL_VERSIONis the protocol major padded to semver, and reads as the runtime's version on a 17.3.0 install #15585)」, so no scan could see it clear.Execution notes (the ruling's own words).
os migrate metaprints(runtime 17.0.0)beside real package versions —PROTOCOL_VERSIONis the protocol major padded to semver, and reads as the runtime's version on a 17.3.0 install #15585 the command printsChain: protocol 17 → 17 (this runtime implements protocol 17);runtime 17.0.0was the 17.3.0 output」.objectstack-fleet commentedon Sep 30, 2026
Claim: PM loop round 1
Session:
session_01JAhu8u8QfBvRjVZDox7CP9Account:
os-bill(the seat's linked user asGET /useranswers it; the card's assignee from this act)Branch:
claude/issue-16056-v17-3-correction-lineWorktree:
objectstack-issue-16056Domain:
domain:devxSeat:
domain:devx#2(seat post #20163)File surface:
content/docs/releases/v17/17-3.mdx: the one upgrade bullet, about:644-648. The page moved when v17 was split into per-release pages.Container & model:
S,mode:subagent, floor tier (a ruled one-line append;dispatch-gates --tierat5f6b63a6f: no path-derived mandate). The compensating control is an at-tier## Contract review, sincecontent/docs/**is a review face.Clause-②: no
Thread-read: 5857229509
Ruling-ref: 5564448371
Serial constraints cleared:
origin/main5f6b63a6f, no open PR touchescontent/docs/releases/v17/**. The only open PR undercontent/docs/releases/is the Version Packages PR chore: version packages #20639, which touchesindex.mdxonly.os-verify-lock.sh --status: free.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
os-dev-report
{ "issue": 16056, "status": "done", "branch": "claude/issue-16056-v17-3-correction-line", "pr": "https://github.com/objectstack-ai/objectstack/pull/20985", "session": "session_01JAhu8u8QfBvRjVZDox7CP9", "premise_still_valid": true, "summary": "Appended one dated correction line in place under the v17.3.0 migrate-meta upgrade bullet in content/docs/releases/v17/17-3.mdx (4 added lines, 0 removed, the original sentence byte-identical). It reads: from 17.4.0 the command prints `Chain: protocol 17 → 17 (this runtime implements protocol 17)` (two spaces after Chain:, as meta.ts:627 prints it); `runtime 17.0.0` was the 17.3.0 output; see #15585 (the human-readable line landed in #16058). Draft PR #20985 is open with skip-changeset and assignee os-bill: the changeset half was already paid (the repair rode packages/cli/CHANGELOG.md 17.4.0 line 4748 and 17.5.0 line 1072, packages/metadata-core/CHANGELOG.md 278, and 17-5.mdx 1711), and no package ships content/docs. All four PM hypotheses held; the one refinement is that the build carrying the printed-line repair is 17.4.0 (via #16058, Part of #15585), while 17.5.0 (via #17261, which completed #15585) only renamed the --json key.", "tests": "Docs-only, so no unit tests apply; ablation n/a. (1) Additive proof: dispatch-gates reports 'changed lines: 4 (+4 / -0; 1 file(s))' against merge base 5f6b63a6f; the removed-line count of the first commit diff is 0; baseline blob 383c9aa91 for 17-3.mdx; git show HEAD: carries exactly one 'Correction (2026-10-01)'. (2) Gates at head 5b88fd408 (exit codes captured redirect-first, before any pipe): `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran` => '47 derived, 47 run, 0 NOT-MEASURED (a DERIVED zero - all 47 recorded an exit code and none of them is 3)'; includes pnpm check:doc-authoring ('405 files clean'), pnpm check:nul-bytes ('OK (scanned 9598 text file(s) ... no raw ASCII control bytes)'), check-issue-citations ('every citation this change adds resolves', 2 judged), check:release-notes OK, check:release-page-status OK, check:docs-transcript-drift OK, check:skill-examples '259 prose examples type-check'. Two gates first exited 3 (PREREQUISITE NOT MET: check:docs-transcript-drift needed @objectstack/lint built; check:skill-examples needed @objectstack/client-react built); I built the @objectstack/lint and @objectstack/client-react dependency closures (107s and 280s) under os-verify-lock.sh (VERDICT command-exit 0 both) and re-ran: both exit 0, and the exit-3 records were replaced, not hidden. The first full pass ran at 55b350cd8; the date-fix commit changed the tree, so the set was re-derived (same 47 commands) and re-run at 5b88fd408. (3) The page compiles with the repo @mdx-js/mdx 3.1.1 (correction present, two-space Chain preserved). (4) Control-byte scan of the PR body and this report: none; no less-than character in the PR body. (5) PR read back in full: stored body equals sent body (4363 chars, one footer), draft true, base main, 1 file +4 -0, assignee os-bill, labels documentation + size/xs + skip-changeset, mergeable true. CI at head 5b88fd408, read once: 34 check runs, 10 success, 10 skipped, 14 in_progress, none red; in_progress is the honest value. Repo-wide pnpm lint and the lint workflow are CI-owned and not run locally. Premise measurements: npm tarball @objectstack/cli@17.3.0 dist prints (runtime ${PROTOCOL_VERSION}) with @objectstack/spec@17.3.0 PROTOCOL_VERSION '17.0.0'; @objectstack/cli@17.4.0 dist prints (this runtime implements protocol ${PROTOCOL_MAJOR}); both the 17.3.0 and 17.4.0 tarballs still carry the --json key runtime: PROTOCOL_VERSION; publish times 17.3.0 2026-09-04, 17.4.0 2026-09-09, 17.5.0 2026-09-29; remote tags show no 17.3.x between 17.3.0 and 17.4.0.", "mcp_calls": "1 - mcp__github__issue_read (a read) was invoked once with no arguments and rejected for a missing required parameter, returning no data; no MCP write tool was called. Every other read went through unauthenticated REST curl, git, and npm.", "api_writes": "4 underlying REST writes through 3 fleet-write relay dispatches (objectstack-fleet[bot]): (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (draft, run 36795247431, read-back 4371 bytes identical); (2) label-write -> POST /repos/objectstack-ai/objectstack/issues/20985/labels (skip-changeset) and POST /repos/objectstack-ai/objectstack/issues/20985/assignees (os-bill), one dispatch, run 36795298959, read-back matches target; (3) this os-dev-report comment -> POST /repos/objectstack-ai/objectstack/issues/16056/comments. Plus 3 git pushes (empty-branch probe, content commit, date-fix commit); no PATCH to the PR body; the card assignee was not written and no second Claim was posted.", "open_questions": [], "out_of_scope_findings": [ "carrier: none (承接者:无) - noted, not filed: content/docs/releases/v17/17-4.mdx carries no line for the #16058 repair; only the 17.4.0 packages/cli/CHANGELOG.md entry does. Release notes are compiled centrally; recorded under Acceptance notes in PR #20985.", "carrier: none (承接者:无) - noted, not filed: the 17.3.0 and 17.4.0 --json payload carries runtime: '17.0.0' (renamed to protocolVersion in 17.5.0 by #17261). The original sentence and the new correction are about the printed Chain line only; recorded under Acceptance notes in PR #20985." ], "gates": { "node scripts/check-ci-filter-parity.mjs": 0, "node scripts/check-closing-keyword-parity.mjs": 0, "node scripts/check-closing-keyword-parity.mjs --self-test": 0, "node scripts/check-comment-mask-corpus.mjs": 0, "node scripts/check-doc-frontmatter.mjs": 0, "node scripts/check-doc-frontmatter.mjs --self-test": 0, "node scripts/check-doc-route-spelling.mjs --advisory": 0, "node scripts/check-doc-route-spelling.mjs --self-test": 0, "node scripts/check-docs-section-name.mjs": 0, "node scripts/check-docs-section-name.mjs --self-test": 0, "node scripts/check-issue-citations.mjs": 0, "node scripts/check-release-section-coverage.mjs": 0, "node scripts/check-release-section-coverage.mjs --self-test": 0, "node scripts/check-release-section-coverage.mjs --strict": 0, "node scripts/check-section-landing-index.mjs": 0, "node scripts/check-section-landing-index.mjs --self-test": 0, "pnpm --filter @objectstack/lint run check:doc-formula-expressions": 0, "pnpm --filter @objectstack/lint run check:doc-security-posture": 0, "pnpm --filter @objectstack/spec run check:docs": 0, "pnpm --filter @objectstack/spec run check:empty-state": 0, "pnpm --filter @objectstack/spec run check:liveness": 0, "pnpm --filter @objectstack/spec run check:strictness-ledger": 0, "pnpm --filter @objectstack/spec run check:variant-docs": 0, "pnpm --filter @objectstack/spec run check:yaml-examples": 0, "pnpm check:corpus-claim-drift": 0, "pnpm check:cross-package-test-inputs": 0, "pnpm check:doc-anchors": 0, "pnpm check:doc-authoring": 0, "pnpm check:docs-audit-scope": 0, "pnpm check:docs-redirects": 0, "pnpm check:docs-single-h1": 0, "pnpm check:docs-spec-enumerations": 0, "pnpm check:docs-transcript-drift": 0, "pnpm check:driver-memory-census": 0, "pnpm check:gitlink-declared": 0, "pnpm check:issue-citations": 0, "pnpm check:nul-bytes": 0, "pnpm check:published-readme-links": 0, "pnpm check:react-page-adapter-contract": 0, "pnpm check:refd-timer-probe": 0, "pnpm check:release-notes": 0, "pnpm check:release-page-status": 0, "pnpm check:role-word": 0, "pnpm check:skill-identifier-liveness": 0, "pnpm check:vendor-version-stamps": 0, "pnpm check:watch-hint-literal": 0, "pnpm --filter @objectstack/spec run check:skill-examples": 0 }, "line_budget": "n/a - no derived ratchet counts content/docs/releases/v17/17-3.mdx; +4 / -0 lines in one file, far under the 5000-line human-merge threshold.", "deviations": [ "Spelling: the correction quotes the line with two spaces after `Chain:` (verbatim from meta.ts:627 and the 17.4.0 dist, as the dispatch directed) where the ruling text spells one space.", "Wording: names 'from 17.4.0' instead of the ruling's 'from the build carrying #15585', because the printed-line repair shipped in 17.4.0 via #16058 (Part of #15585) while #15585 itself was completed by #17261 in 17.5.0; the correction also cites #16058 beside #15585. Same facts, measured version made explicit.", "Date: the line is dated 2026-10-01, not the 2026-09-30 it was first written with, because the UTC day turned while the gates ran; fixed in a second commit (net diff vs merge base is still +4 / -0).", "Commit trailers: used the model-free pair from AGENTS.md (Claude-Session + Co-authored-by: Claude) instead of the model-named Co-Authored-By line the harness attribution reminder suggested; AGENTS.md and the role file outrank the reminder and the pre-push hook refuses a model identifier. No model identifier appears in the PR, commits, or this comment.", "Built the @objectstack/lint and @objectstack/client-react dependency closures (under os-verify-lock.sh) so two derived gates that read built output could produce a verdict instead of NOT MEASURED.", "One malformed MCP read attempt (see mcp_calls); no data returned and no effect." ], "files_changed": [ "content/docs/releases/v17/17-3.mdx" ] }objectstack-fleet commentedon Oct 1, 2026
ACCEPT — PR #20985 @
5b88fd408·domain:devxseat 2, R1 · 2026-10-01T00:19ZReviewer of record:
session_01JAhu8u8QfBvRjVZDox7CP9.Ruling-ref: 5564448371, fetched again in this pass. Checked against GitHub andorigin/main, not against the report's prose.main. Its body opensFixes #16056, followed byClause-②: noandRuling-ref: 5564448371. That first line is the only closing keyword.content/docs/releases/v17/17-3.mdx, +4 −0. This is the dedicated docs-only PR the guardrail allows for a release page.skip-changesetanddocumentation, and the assignee isos-bill.Chain:that the code prints (packages/cli/src/commands/migrate/meta.ts:627).os migrate metaprints(runtime 17.0.0)beside real package versions —PROTOCOL_VERSIONis the protocol major padded to semver, and reads as the runtime's version on a 17.3.0 install #15585". This seat checked it:packages/cli/CHANGELOG.mdonorigin/mainfirst carriesChain: protocol 17 → 17 (this runtime implements protocol 17)under## 17.4.0(:4748). The dev's npm tarball reads agree (17.3.0 printsruntime ${PROTOCOL_VERSION}; 17.4.0 prints the protocol line). Same fact, with the version made explicit.17-5.mdx. No new changeset is owed.17-4.mdxlacks a line for the repair; the 17.3/17.4--jsonkey). Both are Acceptance notes.content/docs/**is a review face, so an at-tier## Contract reviewis owed on the landing head. It is not governed, so the queue lands it once that record is PASS and every check is green. CI was converging at this stamp.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
Correction to this seat's ACCEPT
5922116136: REWORK — the correction line is false from 17.5.0 on ·domain:devxseat 2 · 2026-10-01T00:40ZThe at-tier contract review of PR #20985 (
5922366673) says FAIL. This seat re-measured it onorigin/mainand it holds.os migrate meta --from 17with no--to. Since 17.5.0 (fb39b38, fix(cli):os migrate meta --from Nlists the conversions its tombstones prescribe, and an empty range stops reading as success #17462),--todefaults toCHAIN_TERMINUS_MAJOR = Math.max(PROTOCOL_MAJOR, ...MIGRATION_MAJORS)(packages/cli/src/commands/migrate/meta.ts:88/:544), and the registry carries a major-18 step. So on 17.5.0 and onmainthe command prints17 → 18, not17 → 17.content/docs/releases/v17/17-5.mdxsays the same thing (about:149-156).Chain: protocol 17 → 17 (…)" is therefore true of 17.4.0 alone. A line dated today would tell a 17.5.0 reader to expect output their build does not print, which is the defect this card exists to remove.The patch round, under the same ruling (
5564448371): the form binds (dated, referenced, appended in place, original sentence untouched). The facts must be true against the build onmain, not only the 17.3.0 and 17.4.0 tarballs.(runtime 17.0.0)→(this runtime implements protocol 17)) without asserting where the chain ends; or quote the 17.4.0 output and add that from 17.5.0 the→end is the highest registered major.Nothing to migrateeither, for the same fix(cli):os migrate meta --from Nlists the conversions its tombstones prescribe, and an empty range stops reading as success #17462 reason.The PR stays draft. Same claim, same branch; it goes back to the original dev.
Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
os-dev-report
{ "issue": 16056, "status": "done", "patch_round": 2, "branch": "claude/issue-16056-v17-3-correction-line", "pr": "https://github.com/objectstack-ai/objectstack/pull/20985", "session": "session_01JAhu8u8QfBvRjVZDox7CP9", "premise_still_valid": true, "summary": "Patch round: the contract review was right and the fault was mine. I measured 17.5.0 only for the --json key rename and never ran the bullet's own command (`os migrate meta --from 17`, no --to) on it, so the first wording ('from 17.4.0 the command prints `Chain: protocol 17 → 17 (...)`') was true of 17.4.0 alone. I took wording (a): the correction now asserts only the parenthetical, which does not depend on --from or --to, and says nothing about where the chain ends or about `Nothing to migrate`. New line under the byte-identical original sentence: `**Correction (2026-10-01):** from 17.4.0 the parenthetical on the `Chain:` line reads `(this runtime implements protocol 17)`; `(runtime 17.0.0)` was the 17.3.0 output. See #15585 (the human-readable line landed in #16058).` Net diff vs the merge base is +3 / -0 (three commits; head f4f2566a0 pushed). I ran the real published CLIs for 17.3.0, 17.4.0 and 17.5.0 over three flag combinations (matrix in `tests`); the parenthetical changes exactly once, between 17.3.0 and 17.4.0, and is identical in every column from 17.4.0 on. origin/main was read from source and the built spec, not CLI-run. PR #20985 stays draft; I did not patch its body: the exact replacement is in `pr_body_replacement` for the seat to write.", "tests": "Docs-only; ablation n/a. (1) Real runs of the published builds (scratch `npm install @objectstack/cli@VERSION --ignore-scripts` per version, `NO_COLOR=1`, the e2e's one-object stack config, `node node_modules/@objectstack/cli/bin/run.js migrate meta ARGS`, all exit 0); the `Chain:` line printed: cli@17.3.0 | os migrate meta --from 17 | exit 0 | Chain: protocol 17 → 17 (runtime 17.0.0) || cli@17.3.0 | os migrate meta --from 17 --to 17 | exit 0 | Chain: protocol 17 → 17 (runtime 17.0.0) || cli@17.3.0 | os migrate meta --from 16 --to 16 | exit 0 | Chain: protocol 16 → 16 (runtime 17.0.0) || cli@17.4.0 | os migrate meta --from 17 | exit 0 | Chain: protocol 17 → 17 (this runtime implements protocol 17) || cli@17.4.0 | os migrate meta --from 17 --to 17 | exit 0 | Chain: protocol 17 → 17 (this runtime implements protocol 17) || cli@17.4.0 | os migrate meta --from 16 --to 16 | exit 0 | Chain: protocol 16 → 16 (this runtime implements protocol 17) || cli@17.5.0 | os migrate meta --from 17 | exit 0 | Chain: protocol 17 → 18 (this runtime implements protocol 17) || cli@17.5.0 | os migrate meta --from 17 --to 17 | exit 0 | Chain: protocol 17 → 17 (this runtime implements protocol 17) || cli@17.5.0 | os migrate meta --from 16 --to 16 | exit 0 | Chain: protocol 16 → 16 (this runtime implements protocol 17). Two spaces after `Chain:` in every row. Default invocation: 17.3.0 and 17.4.0 end in the verdict line `✓ Nothing to migrate`; 17.5.0 prints `240 manual change(s) require your judgment` and no such verdict (the phrase occurs once inside a protocol-18 notice's prose). (Slip, caught: my first loop pointed the 17.5.0 rows at a directory that does not exist, which exited 1 with no output; I re-ran those three rows from the real install, and the table above is the re-run.) (2) origin/main 7fa67dada, NOT CLI-run: `git diff` of packages/cli/src/commands/migrate/meta.ts between the cli@17.5.0 tag and main shows none of the Chain template, `CHAIN_TERMINUS_MAJOR =`, `flags.to ??` or `toMajor =` lines moving (meta.ts:627, :88, :544 on main); the built spec from main reports PROTOCOL_MAJOR=17 and MIGRATION_MAJORS=[17,18], so CHAIN_TERMINUS_MAJOR=18 and the default invocation prints `Chain: protocol 17 → 18 (this runtime implements protocol 17)`. An attempt to run main's CLI from source stopped on unbuilt serve.ts plugin imports (60-package closure); I did not pursue it. (3) Additive proof: dispatch-gates reads `changed lines: 3 (+3 / -0; 1 file(s))` at f4f2566a0; removed-line count vs the original base 5f6b63a6f is 0; lines 644-648 (the original sentence) md5 53624b438898 before and after. (4) Gates at head f4f2566a0, exit codes captured redirect-first: re-derived `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` (the same 47 commands as round 1), ran all 47, `--ran` => '47 derived, 47 run, 0 NOT-MEASURED (a DERIVED zero - all 47 recorded an exit code and none of them is 3)', every exit code 0; check:doc-authoring, check:nul-bytes ('OK (scanned 9598 text file(s) ... no raw ASCII control bytes)'), check-issue-citations ('citations judged: 2 ... every citation this change adds resolves'), check:docs-transcript-drift, check:skill-examples ('259 prose examples type-check') among them. The lint and client-react closures were rebuilt in the fresh worktree under os-verify-lock.sh (VERDICT command-exit 0, 280s) so those two gates could read built output. (5) The page compiles with the repo @mdx-js/mdx 3.1.1: new wording present, the old `protocol 17 → 17 (this runtime` claim absent. (6) PR #20985 read after the push: head f4f2566a0, draft true, state open, +3 / -0, labels documentation + size/xs + skip-changeset, assignee os-bill, body still the original (unpatched). CI was not read this round; the new head's runs are the PM's to converge.", "mcp_calls": "0 - no MCP tool was called this round.", "api_writes": "1 REST write through 1 fleet-write relay dispatch: this os-dev-report comment -> POST /repos/objectstack-ai/objectstack/issues/16056/comments. Plus 1 git push (f4f2566a0). No pr_create, no label-write, no PATCH to the PR body or to any comment, no card assignee write, no second Claim.", "open_questions": [], "pr_body_replacement": "Fixes #16056\n\nClause-②: no\nRuling-ref: 5564448371\n\nDocs-only. Appends one dated correction line, in place, to the `os migrate meta` upgrade bullet in the 17.3.0 section of `content/docs/releases/v17/17-3.mdx`, in the form the maintainer ruled for this card. The original sentence stays byte-identical.\n\n## The change\n\n```diff\n scope is the protocol chain; everything else on this list is outside it. (It\n also prints `runtime 17.0.0` on a 17.3.0 install.)\n+ **Correction (2026-10-01):** from 17.4.0 the parenthetical on the `Chain:`\n+ line reads `(this runtime implements protocol 17)`; `(runtime 17.0.0)` was\n+ the 17.3.0 output. See #15585 (the human-readable line landed in #16058).\n```\n\nAgainst the merge base `5f6b63a6f`: 1 file, 3 insertions, 0 deletions (`dispatch-gates` reads `+3 / -0`). Three commits: the first wording, its date moved from 2026-09-30 to 2026-10-01 because the UTC day turned while the gates ran, and the rework below. The line is a continuation of the bullet's own paragraph, so the list stays tight and nothing re-flows.\n\n## Rework: the first wording was true of 17.4.0 only\n\nThe first wording said that from 17.4.0 the command prints `Chain: protocol 17 → 17 (this runtime implements protocol 17)`. The bullet's command is `os migrate meta --from 17` with no `--to`, and from 17.5.0 `--to` defaults to the highest major the installed spec has a step for, so there the same command prints `protocol 17 → 18`. The contract review of this PR caught it. The line now asserts only the parenthetical, which does not depend on `--from` or `--to`, and says nothing about where the chain ends or about the headline's `Nothing to migrate`.\n\nMeasured by running the published builds (a scratch `npm install` of each `@objectstack/cli` version, `NO_COLOR=1`, a one-object stack config), the `Chain:` line printed by:\n\n| build | `os migrate meta --from 17` | `--from 17 --to 17` | `--from 16 --to 16` |\n|:--|:--|:--|:--|\n| 17.3.0 | `protocol 17 → 17 (runtime 17.0.0)` | `protocol 17 → 17 (runtime 17.0.0)` | `protocol 16 → 16 (runtime 17.0.0)` |\n| 17.4.0 | `protocol 17 → 17 (this runtime implements protocol 17)` | `protocol 17 → 17 (this runtime implements protocol 17)` | `protocol 16 → 16 (this runtime implements protocol 17)` |\n| 17.5.0 (npm latest) | `protocol 17 → 18 (this runtime implements protocol 17)` | `protocol 17 → 17 (this runtime implements protocol 17)` | `protocol 16 → 16 (this runtime implements protocol 17)` |\n\nEvery row carries two spaces after `Chain:`. The parenthetical changes exactly once, between 17.3.0 and 17.4.0, and is the same in every column from 17.4.0 on. On 17.3.0 and 17.4.0 the default invocation ends in the `Nothing to migrate` verdict; on 17.5.0 it lists 240 manual changes instead (in this probe project), which is why the correction does not repeat the headline.\n\nOn `origin/main` at `7fa67dada`, `meta.ts` carries the same print template (`:627`) and the same `--to` default (`CHAIN_TERMINUS_MAJOR`, `:88` and `:544`) as `cli@17.5.0`: a diff of the file between the two shows none of those lines moving. The built spec there reports `PROTOCOL_MAJOR = 17` and `MIGRATION_MAJORS = [17, 18]`, so the default invocation prints `protocol 17 → 18 (this runtime implements protocol 17)`, and the parenthetical reads as in 17.4.0 and 17.5.0. That reading of `main` is computed from the source and the built spec, not from a CLI run.\n\n## What I measured before editing\n\n1. **The page moved.** The sentence is at `content/docs/releases/v17/17-3.mdx:648` (the single v17 page was split into per-release pages). Re-located by content: `runtime 17.0.0` has exactly one hit in the tree.\n2. **The blocker is cleared.** `packages/cli/src/commands/migrate/meta.ts:627` prints `Chain: protocol ${fromMajor} → ${toMajor} (this runtime implements protocol ${PROTOCOL_MAJOR})` through `printInfo`, which adds only a leading ` ℹ `; the table above is that template run on each build.\n3. **The changeset half is already paid.** The correction rode the changesets into shipped notes: `packages/cli/CHANGELOG.md:4748` (17.4.0, entry 135843d from #16058), `packages/cli/CHANGELOG.md:1072` and `packages/metadata-core/CHANGELOG.md:278` (17.5.0, the #17261 entry), and `content/docs/releases/v17/17-5.mdx:1711` (the 17.5.0 notes quote the new wording). This diff publishes nothing from any package (no package `files[]` ships `content/docs`), so it owes no changeset and carries the `skip-changeset` label. No `CHANGELOG.md` is edited.\n4. **The build carrying the repair is 17.4.0.** Measured on the published tarballs and the runs above: 17.3.0 prints `(runtime 17.0.0)` (`@objectstack/spec@17.3.0` has `PROTOCOL_VERSION = \"17.0.0\"`); 17.4.0 prints `(this runtime implements protocol 17)`. Published 2026-09-04 (17.3.0) and 2026-09-09 (17.4.0); the remote tags carry no 17.3.x between them.\n\n## Why \"from 17.4.0\" and not \"from the build carrying #15585\"\n\n#15585 was repaired in two PRs. #16058 (merged 2026-09-06, \"Part of\" the card) relabelled the printed `Chain:` line and shipped in 17.4.0. #17261 (merged 2026-09-10, the PR that completed the card) renamed the `--json` key and shipped in 17.5.0. The parenthetical is the same in 17.4.0 and 17.5.0, so the earliest build that prints it is 17.4.0, and naming the version lets a reader check their own install. The full `Chain:` line is not the same in the two builds (its `→` end moved in 17.5.0, see Rework), which is why only the parenthetical is quoted.\n\n## Verification\n\nAt head `f4f2566a0`, `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran` reconciles **47 derived, 47 run, 0 NOT-MEASURED**, every recorded exit code 0 (`check:doc-authoring`, `check:nul-bytes`, `check:issue-citations` judging both new citations as resolving, `check:release-notes`, `check:release-page-status`, `check:docs-transcript-drift`, `check:skill-examples` and the rest of the derived set). The page also compiles with the repo's `@mdx-js/mdx` 3.1.1. Repo-wide `pnpm lint` and the full lint workflow are CI's.\n\n## Acceptance notes (observed, not filed)\n\n- `content/docs/releases/v17/17-4.mdx` carries no line for the #16058 repair; only the 17.4.0 `packages/cli/CHANGELOG.md` entry does. Release notes are compiled centrally, so this is noted, not fixed here.\n- In 17.3.0 and 17.4.0 the `--json` payload still carries `runtime: \"17.0.0\"`; 17.5.0 renames it to `protocolVersion`. The original sentence and this correction are about the printed `Chain:` line only.\n- The bullet's headline (`Expect os migrate meta --from 17 to report Nothing to migrate`) is the 17.3.0 observation. On 17.5.0 the same command lists protocol-18 edits instead (the 17.5.0 release page records this). It is the historical reading and out of this card's scope, and the correction does not assert it.\n\n---\n_Generated by [Claude Code](https://claude.ai/code/session_01JAhu8u8QfBvRjVZDox7CP9)_\n", "pr_body_passages_changed": [ "## The change: the diff block (3 added lines, new wording) and the sentence under it (3 insertions, three commits, the rework named).", "NEW section ## Rework: the first wording was true of 17.4.0 only (contains the build x flags table; replaces the false claim).", "## What I measured before editing: items 2 and 4 reworded (item 2 no longer quotes the whole Chain line; item 4 cites the runs).", "## Why 'from 17.4.0' and not 'from the build carrying #15585': the sentence 'The printed line this bullet describes is identical in 17.4.0 and 17.5.0' is replaced by 'The parenthetical is the same in 17.4.0 and 17.5.0 ... The full Chain: line is not the same in the two builds (its arrow end moved in 17.5.0, see Rework), which is why only the parenthetical is quoted.'", "## Verification: head f4f2566a0, no more 'two-space Chain survives compilation'.", "## Acceptance notes: third bullet added (the bullet's headline Nothing to migrate is the 17.3.0 observation; out of scope; not asserted).", "Unchanged: first line 'Fixes #16056', 'Clause-②: no', 'Ruling-ref: 5564448371', the footer." ], "out_of_scope_findings": [ "carrier: none (承接者:无) - noted, not filed: content/docs/releases/v17/17-4.mdx carries no line for the #16058 repair; only the 17.4.0 packages/cli/CHANGELOG.md entry does. Release notes are compiled centrally; in the PR Acceptance notes.", "carrier: none (承接者:无) - noted, not filed: the 17.3.0 and 17.4.0 --json payload carries runtime: '17.0.0' (renamed to protocolVersion in 17.5.0 by #17261). The correction is about the printed Chain line only; in the PR Acceptance notes.", "carrier: none (承接者:无) - noted, not filed (the contract reviewer's own flag, measured here): the bullet's headline 'Expect `os migrate meta --from 17` to report `Nothing to migrate`' is the 17.3.0 observation; on 17.5.0 the same command prints a protocol 17 → 18 chain with 240 manual changes in the probe project and no `✓ Nothing to migrate` verdict. The 17.5.0 release page records its own behaviour (17-5.mdx:1720), and the correction deliberately does not assert the headline; third bullet of the proposed PR Acceptance notes." ], "gates": { "node scripts/check-ci-filter-parity.mjs": 0, "node scripts/check-closing-keyword-parity.mjs": 0, "node scripts/check-closing-keyword-parity.mjs --self-test": 0, "node scripts/check-comment-mask-corpus.mjs": 0, "node scripts/check-doc-frontmatter.mjs": 0, "node scripts/check-doc-frontmatter.mjs --self-test": 0, "node scripts/check-doc-route-spelling.mjs --advisory": 0, "node scripts/check-doc-route-spelling.mjs --self-test": 0, "node scripts/check-docs-section-name.mjs": 0, "node scripts/check-docs-section-name.mjs --self-test": 0, "node scripts/check-issue-citations.mjs": 0, "node scripts/check-release-section-coverage.mjs": 0, "node scripts/check-release-section-coverage.mjs --self-test": 0, "node scripts/check-release-section-coverage.mjs --strict": 0, "node scripts/check-section-landing-index.mjs": 0, "node scripts/check-section-landing-index.mjs --self-test": 0, "pnpm --filter @objectstack/lint run check:doc-formula-expressions": 0, "pnpm --filter @objectstack/lint run check:doc-security-posture": 0, "pnpm --filter @objectstack/spec run check:docs": 0, "pnpm --filter @objectstack/spec run check:empty-state": 0, "pnpm --filter @objectstack/spec run check:liveness": 0, "pnpm --filter @objectstack/spec run check:skill-examples": 0, "pnpm --filter @objectstack/spec run check:strictness-ledger": 0, "pnpm --filter @objectstack/spec run check:variant-docs": 0, "pnpm --filter @objectstack/spec run check:yaml-examples": 0, "pnpm check:corpus-claim-drift": 0, "pnpm check:cross-package-test-inputs": 0, "pnpm check:doc-anchors": 0, "pnpm check:doc-authoring": 0, "pnpm check:docs-audit-scope": 0, "pnpm check:docs-redirects": 0, "pnpm check:docs-single-h1": 0, "pnpm check:docs-spec-enumerations": 0, "pnpm check:docs-transcript-drift": 0, "pnpm check:driver-memory-census": 0, "pnpm check:gitlink-declared": 0, "pnpm check:issue-citations": 0, "pnpm check:nul-bytes": 0, "pnpm check:published-readme-links": 0, "pnpm check:react-page-adapter-contract": 0, "pnpm check:refd-timer-probe": 0, "pnpm check:release-notes": 0, "pnpm check:release-page-status": 0, "pnpm check:role-word": 0, "pnpm check:skill-identifier-liveness": 0, "pnpm check:vendor-version-stamps": 0, "pnpm check:watch-hint-literal": 0 }, "line_budget": "n/a - no derived ratchet counts content/docs/releases/v17/17-3.mdx; +3 / -0 lines in one file, far under the 5000-line human-merge threshold.", "deviations": [ "Wording choice (a) of the two the review names; the line no longer quotes the full `Chain:` line, so the ruling's illustrative `Chain: protocol 17 → 17 (...)` text is not reproduced (it is not true of the current release). Form unchanged: dated, referenced, appended in place, original sentence byte-identical.", "Date: 2026-10-01 (today's UTC date; the edit was made at 00:53Z), same day as the previous wording.", "origin/main was not CLI-run (see tests (2)); it is evidenced by a source diff against the cli@17.5.0 tag plus the built spec's values. The published 17.5.0 (npm latest) was CLI-run.", "Extra, removed after use: a second detached worktree at origin/main 7fa67dada (built spec, lint, core and driver-sql closures under os-verify-lock.sh, VERDICT command-exit 0 each) and a depth-1 private tag ref refs/os-16056/cli-17-5-0; both are gone, the worktrees verified absent and the ref verified deleted. Scratch npm installs live only in the scratchpad.", "Commit trailers: the model-free pair from AGENTS.md, not the harness reminder's model-named line (AGENTS.md and the role file outrank it).", "I did not patch the PR body (instructed); the stale passages remain in the stored body until the seat applies `pr_body_replacement`." ], "files_changed": [ "content/docs/releases/v17/17-3.mdx" ] }objectstack-fleet commentedon Oct 1, 2026
ACCEPT (patch round) — PR #20985 @
f4f2566a0·domain:devxseat 2 · 2026-10-01T01:18ZReviewer of record:
session_01JAhu8u8QfBvRjVZDox7CP9.Ruling-ref: 5564448371. This supersedes the REWORK in5922373963.Chain:line reads(this runtime implements protocol 17);(runtime 17.0.0)was the 17.3.0 output. Seeos migrate metaprints(runtime 17.0.0)beside real package versions —PROTOCOL_VERSIONis the protocol major padded to semver, and reads as the runtime's version on a 17.3.0 install #15585 (the human-readable line landed in fix(cli):os migrate metanames the protocol, not a package version #16058)."main. It names no chain end and does not repeatNothing to migrate.meta.ts:88/:544/:627onmain.5922769523). It resolves the prior FAIL (5922366673) and judges quoting only the parenthetical as within the ruling's form.f4f2566a0: 29 success, 10 skipped, 0 red.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
Landed: PR #20985 merged as
8055ff2279; card closedcompleteddomain:devxseat 2 ·session_01JAhu8u8QfBvRjVZDox7CP9· 2026-10-01T01:43ZFixes #16056closed this card. This seat removespm:dispatchedin the same pass.content/docs/releases/v17/17-3.mdxonorigin/mainis blob-identical to the landing headf4f2566a0(1168854f). It carries exactly oneCorrection (2026-10-01)line, under the byte-identical original sentence.Chain:line's parenthetical reads(this runtime implements protocol 17)from 17.4.0, and that(runtime 17.0.0)was the 17.3.0 output. It is ruled by5564448371, with an at-tier PASS (5922769523) on the landing head.Generated by Claude Code
docs(releases): append a dated correction to the 17.3.0 migrate-meta …