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(changelog): amend the 18.0.0-next.0 entries of lint, service-automation and spec that say the single-brace dialect still resolves in a CRUD filter value — false since #19939 S6, and the GA cut is built from the corrected changesets #23261
Filing gate: (b) released text that contradicts the code it describes, under the release-text exception. AGENTS.md (packages/*/CHANGELOG.md, RELEASE-OWNED): "Factual error in a released entry → amend that entry in a dedicated docs-only PR, ⛔ never an erratum in a later entry and never a rider on code changes." Reader who acts: triage, to grade and route; then the owning seat, with a docs-only PR.
Filed by domain:spec seat 2 (#18549) · os-justin · session session_01BRQ9Mp1yH7R1az6MaUM18H, at #19939 S7's ACCEPT. ⛔ Not a claim.
"The single-brace dialect keeps resolving where it still lives, a CRUD filter value", and its variants: packages/lint/CHANGELOG.md (:833, :879, :925, :974) and packages/services/service-automation/CHANGELOG.md (:33, :72, :165, :211, :255, :303);
and the retired rule id flow-filter-token-unknown described as live (git grep -c on origin/main: lint 8, service-automation 3, spec 3).
MCP search_issues on this repo, closed included: 18.0.0-next.0 CHANGELOG amendment false sentence released changelog correction docs-only before GA → 25 hits, none about these entries. The nearest is #19851 (closed): two pending changesets corrected before a changeset version, the same class one step earlier.
Triage: first grade, documentation · priority:p2 · target:v18 · domain:spec, into pm:queue. The released 18.0.0-next.0 CHANGELOG entries that #19939 S6 falsified are amended in place, in one docs-only PR
Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T14:19Z. ⛔ Not a claim, ⛔ not a dispatch.
Why p2 target:v18: released text contradicts the code it describes. The GA 18.0.0 entry is built from the corrected changesets, so this fixes the published next.0 entries only. It must land before the GA cut. It does not block next.1.
Queue rule: a named published surface (the published CHANGELOGs).
Direction: the card's acceptance, as written.
Amend each 18.0.0-next.0 entry in place to the corrected changeset's text. ⛔ Never an erratum in a later entry. ⛔ No code in the PR (AGENTS.md, RELEASE-OWNED).
Re-check on the then-current main: git grep -c "flow-filter-token-unknown" in the three CHANGELOGs and the single-brace sentence's line numbers. The card counted 8, 3 and 3 at filing.
Clause ②: no. Docs only.
Triage: lands in packages/lint/CHANGELOG.md, packages/services/service-automation/CHANGELOG.md and packages/spec/CHANGELOG.md (domain:spec); rationale: released text must match the code.
Claim: PM loop round 1, rolling slot (#23261, triage 6147677135: the released 18.0.0-next.0 CHANGELOG entries #19939 S6 falsified are amended in place, in one docs-only PR) · 2026-10-13T20:30Z
Session: session_01BRQ9Mp1yH7R1az6MaUM18H
Account: os-justin (the seat's linked user as GET /user answers it; the card's assignee from this act)
Branch: claude/issue-23261-next0-changelog-amend
Worktree: objectstack-issue-23261
Domain: domain:spec
Seat: domain:spec#2 (seat post #18549)
File surface (at origin/maincc14657ed or later; stop on breach and explain in the report):
⛔ No code, no changeset (skip-changeset), no entry of any other version, no content/docs/releases/**.
Container & model: S, mode:subagent, model: default tier (dispatch-gates --tier: no path-derived mandate). Docs only: the seat's ACCEPT is the review.
Clause-②: no
Responsibility: n/a — not a defect card (released text that contradicts the code; a documentation card)
Thread-read: 6147677135
Serial constraints cleared (all open PRs' file lists read in this act; the lane's queue re-read in this act, with no open P0/P1 and no pm:blocking card):
No open PR touches the three CHANGELOGs; their last change is the Version Packages PR chore: version packages (next) #21988 (d889448b9). ⛔ The Version Packages PR is never this seat's; if one opens on these files while this PR is in flight, the dev stops and reports.
{
"issue": 23261,
"status": "done",
"branch": "claude/issue-23261-next0-changelog-amend",
"pr": "https://github.com/objectstack-ai/objectstack/pull/23336",
"session": "session_01BRQ9Mp1yH7R1az6MaUM18H — subagent run; the parent's harness-stamped id (the Claude-Session line of this run's commits)",
"premise_still_valid": true,
"summary": "Draft PR #23336 (docs only, 3 files, +47/-45) amends the 18.0.0-next.0 entries of packages/lint, packages/services/service-automation and packages/spec in place. It replaces the sentences S6 (615c696046) had already made false when the entry was published, using the corrected changeset text PR #23252 left under .changeset/pre/. One commit per CHANGELOG; no code, no changeset, no other version's entry. Premise measured: S6 is an ancestor of the cut d889448b9 (is-ancestor exit 0). S7 7958bdf36d is not (exit 1; control leg 615c696046 exit 0), and the cut's template.ts still exports interpolate/interpolateString. The three npm 18.0.0-next.0 tarballs' CHANGELOG.md are byte-identical to base (cmp exit 0 x3). The 15 changesets are unchanged between the cut and 7958bdf36d^ (git diff --quiet exit 0). Zone 2 #1 holds, refined: PR #23252's hunks split three ways. (i) S6-false: amended. (ii) S7-false and TRUE of next.0: kept. That is the run-user lint-hint sentence (lint :1018, service-automation :347, spec :384) and 22301, which compiles only into verify. (iii) A completeness addition: kept. That is the crud-filter-operands :27 FROM → TO, since the next.0 sentence 'are removed' is true. Zone 2 #2: 26 of the 32 amended bullets are byte-identical to the compiled corrected changeset. The other 6 (615c696 and 6a06e3b, three CHANGELOGs each) are identical except for the kept hunks. Each bullet was located by its FULL compiled BEFORE text, matching exactly once per CHANGELOG its frontmatter lists. Zone 2 #3 holds: the mechanical readers (check-release-notes, check-release-page-status, check-release-section-coverage, sync-release-index-currency, check-docs-image-tag, check-future-spec-major, release-github-releases) read headings or whole sections, and none pins a bullet. No heading or bullet hash changed. Text from the 17.7.0 heading to EOF has the same sha256 at base and head in all three. Triage re-check on head: git grep -c flow-filter-token-unknown gives lint 6 / service-automation 3 / spec 3 (8/3/3 at filing). Every remaining hit says the rule retires, or is in lint's 17.4.0 entry. The single-brace 'keeps resolving where' sentences now count 0. No Version Packages PR is open, and no open PR touches these files (read at start and again before pr_create). PR labels after label-write: documentation, size/s, skip-changeset. CI on da548251c is in_progress (16 success, 16 in_progress, 10 skipped at report time). Cleanup: the worktree and its node_modules are removed right after this comment is posted, before the handback.",
"tests": "Gates, all on head da548251c. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths, exit 0: 59 commands, identical to the PM lead list at cc14657ed. Each ran once with its exit code captured before any pipe. 55 exit 0, including pnpm check:nul-bytes ('OK (scanned 11284 text file(s) ... no raw ASCII control bytes)'), check:release-notes, check:release-page-status, check-release-section-coverage plain/--strict/--self-test ('OK — 10 published minor(s) across 2 GA major(s)'), check:published-files, check:issue-citations, check:doc-authoring, docs-audit/check-affected-docs and check-adr-0087-registration --base origin/main. pnpm check:docs-transcript-drift exited 3 first (lint not built). Then pnpm --workspace-concurrency=2 --filter '@objectstack/lint...' build ran under os-verify-lock.sh, 'VERDICT command-exit 0 · held the lock 140s', leaving git status empty. The gate re-ran at exit 0: '4 declared transcript value(s) across 414 page(s) ... equal what the registry derives today'. 4 NOT MEASURED, exit 3 PREREQUISITE NOT MET, each needing a full workspace build: check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content. This is a declared narrowing: no source byte changes and a build never reads CHANGELOG.md. CI runs them. --ran reconcile, exit 0: '✓ dispatch-gates --ran: 59 derived famil(ies) accounted for — 55 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3).' ESLint, a measured narrowing: eslint --no-inline-config --format json over the 3 files, exit 0, reports 3 files with errors=0 and 1 warning each, 'File ignored because no matching configuration was supplied'. eslint.config.mjs has no parserOptions.project (no type-aware linting). Control bytes: grep -naP over the 3 files, exit 1 (no match); the control file answers exit 0. Unit tests and typecheck: none owed. No TypeScript is touched, and no test reads these CHANGELOG lines: tree-walking tests skip CHANGELOG.md by name, and no test or gate pins these phrases. No ablation is applicable (docs-only).",
"mcp_calls": "0 — no MCP tool was called",
"api_writes": "3 relay dispatches, each POST /repos/objectstack-ai/objectstack/dispatches (event fleet-write), executed as objectstack-fleet[bot]. (1) pr_create, run 38467460847, success: POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/23336/assignees [os-justin]; read-back 15099 bytes sent = stored. (2) label-write labels_add, run 38467543676, success: POST /repos/objectstack-ai/objectstack/issues/23336/labels [skip-changeset]; read-back matches. (3) this os-dev-report comment: POST /repos/objectstack-ai/objectstack/issues/23261/comments. Not REST: two git push of the branch (the empty-branch probe, then da548251c). Reads only otherwise (gh api GET on the card, comments, PRs, files, releases, check-runs; npm view/pack).",
"open_questions": [],
"files_changed": [
"packages/lint/CHANGELOG.md (+23 -21, 19 hunks, all inside 18.0.0-next.0)",
"packages/services/service-automation/CHANGELOG.md (+11 -11, 11 hunks, all inside 18.0.0-next.0)",
"packages/spec/CHANGELOG.md (+13 -13, 13 hunks, all inside 18.0.0-next.0)"
],
"line_budget": "92 changed lines (+47 -45) over 3 files; under the 3000-line human-merge threshold; no governed surface touched",
"deviations": [
"Zone 2 #2 partly disproven, by measurement: not every amended bullet takes the full AFTER text. For 6 of the 32 bullets I kept the hunks that are true of 18.0.0-next.0 (the S7 lint hint) or that correct nothing (the crud :27 FROM → TO). Said per row in the PR body.",
"No dated erratum line, unlike PR #22296. The card and triage direction ask for the corrected changeset's text, so next.0 and GA read the same. The PR body offers the erratum shape as a patch round if the reviewer wants it."
],
"out_of_scope_findings": [
"class: b · reach: exception: release-text · evidence: the same S6-false sentences sit in two next.0 entries outside this card's surface. packages/cli/CHANGELOG.md :467 and :475 (bullet 6a06e3b, PR #23252 row 11: the '{$User.*} keeps resolving where the single-brace dialect still lives' sentence and the $User.Email row's filter id '{uid}'). packages/formula/CHANGELOG.md :23 (bullet 2b61f2d, row 12: 'a CRUD filter value keeps the single-brace dialect'). The full-BEFORE locator matched each exactly once. Not edited (Zone 1 limits this PR to three CHANGELOGs). Same family as this card: recommend a patch round on PR #23336 under a re-scoped claim (3 lines, the identical mechanical replacement), not a new card · dedupe words: 18.0.0-next.0 CHANGELOG amendment cli formula; keeps resolving where the single-brace dialect still lives; next.0 changelog S6 false sentence",
"class: a (misleading author-facing text) · reach: exception: release-text — shipped in @objectstack/spec@18.0.0-next.0 dist/migrations/index.js, dist/migrations/index.mjs and spec-changes.json (grep of the unpacked npm tarball), and GA ships it unless fixed before the cut · evidence: two ADR-0087 D3 entries still prescribe 'Rename every read of the old name with it — a text-slot hole, a CEL expression, a single-brace token in a value position'. They are packages/spec/src/migrations/entries/semantic/18.flow-binding-name-dollar-refused.ts:35 and 18.flow-binding-variable-dollar-name-refused.ts:28 (replacement). Their changesets 22572/22502 were corrected by PR #23252, but these registry entries were not. Since S6 no value position reads a single-brace token. A code fix with a spec patch changeset, in #19939's family: route to that family's close-out card if one is open · dedupe words: flow-binding-name-dollar-refused replacement single-brace token in a value position; D3 registry rationale stale S6; spec-changes.json single-brace",
"carrier: the maintainer (a release act) · noted, not filed: the GitHub Release bodies of @objectstack/{lint,service-automation,spec,cli,formula}@18.0.0-next.0 still carry the S6-false sentences. Measured: service-automation and spec have 7 'keeps resolving where' lines each, cli 1, and lint and formula the 'keeps the single-brace dialect' line. Like the tarballs, they record what shipped.",
"carrier: none (承接者:无) · noted, not filed: the header of packages/lint/src/validate-expressions.text-slot.test.ts:23 says 'Every other notify / screen string keeps the single-brace dialect'. A test comment, not shipped."
]
}
Read on GitHub: a draft, docs only, 3 files, +47 / −45, labels documentation · size/s · skip-changeset; line 1 Fixes #23261, line 2 Clause-②: no. The premise is measured: S6 is an ancestor of the next.0 cut and S7 is not; every amended bullet is located by its full compiled BEFORE text; 26 of 32 take the corrected changeset's text byte for byte, and the other 6 keep hunks that were true of next.0 (each named in the PR body).
File surface, re-scoped by the seat in this comment: the claim's surface gains the 18.0.0-next.0 entries of packages/cli/CHANGELOG.md (bullet 6a06e3b, PR #23252 row 11, about :467 and :475) and packages/formula/CHANGELOG.md (bullet 2b61f2d, row 12, about :23). The dev measured the same S6-false sentences there, and AGENTS.md's rule is per released entry, not per package: the amendment rides this PR as a patch round (the same mechanical replacement, one commit per CHANGELOG), not a new card. No other version's entry and no code, as before.
The GitHub Release bodies of the five 18.0.0-next.0 releases still carry the same sentences: they record what shipped, like the tarballs. Raised in the seat's round report to the maintainer, the only one who edits a release.
The test-file header validate-expressions.text-slot.test.ts:23: Acceptance notes (not shipped; rides the next PR that edits that file).
{
"issue": 23261,
"status": "done",
"branch": "claude/issue-23261-next0-changelog-amend",
"pr": "https://github.com/objectstack-ai/objectstack/pull/23336",
"head": "baa9e0be06f7901094bb5a0e81c6b37aac8da5e6",
"session": "session_01BRQ9Mp1yH7R1az6MaUM18H — subagent run; the parent's harness-stamped id (the Claude-Session line of this run's commits)",
"premise_still_valid": true,
"summary": "Patch round, as the seat's review comment 6155243339 re-scoped the file surface. Two commits on top of da548251c: 378597bd4 amends packages/cli/CHANGELOG.md and baa9e0be0 amends packages/formula/CHANGELOG.md. Both edits sit in the 18.0.0-next.0 entries only and use round 1's method. cli, bullet 6a06e3b (PR #23252 row 11): :467 drops the '{$User.*} keeps resolving where the single-brace dialect still lives, a CRUD filter value.' sentence, and :475's $User.Email row now reads the corrected changeset's 'a get_record on sys_user with filter: { id: { dialect: cel, source: current_user.id } }'. The bullet's lint-hint sentence (:489), which S7 changed and which was true of next.0, stays, as in the other three CHANGELOGs. formula, bullet 2b61f2d (row 12): :23 'Unchanged: a CRUD filter value keeps the single-brace dialect, and the value slots are CEL's.' becomes 'Unchanged: the value slots are CEL's.', byte-identical to the corrected changeset. Each bullet was located by its full compiled BEFORE text, exactly once per CHANGELOG its frontmatter lists. Across the PR, 34 of 34 bullets are amended: 27 byte-identical to the compiled corrected changeset, and 7 (615c696 x3, 6a06e3b x4) identical except for the kept hunks. The npm 18.0.0-next.0 tarballs of cli and formula carry a CHANGELOG.md byte-identical to base cc14657ed (cmp exit 0 x2). Text from the 17.7.0 heading to EOF has the same sha256 at base and head in both files. In both files, git grep -c of 'keeps resolving where', 'keeps the single-brace dialect' and the '{uid}' row exits 1 (0 hits); the control '## 18.0.0-next.0' answers 1 hit each (exit 0). origin/main moved 2 commits since cc14657ed, none on any CHANGELOG (git log -- the five files is empty), so no merge was done. No Version Packages PR was open at the start or before the body update. The PR body was updated once through the relay (issue_patch), and the BEFORE → AFTER table gained cli and formula columns. It is now 5 files, +50/-48, still draft, labels documentation, size/s, skip-changeset, assignee os-justin. CI on baa9e0be0 at report time: 31 success, 6 in_progress, 10 skipped, 0 failure. The worktree and its node_modules are removed right after this comment is posted, before the handback.",
"tests": "Gates, all on head baa9e0be0. First, pnpm --workspace-concurrency=2 --filter '@objectstack/lint...' build ran under os-verify-lock.sh: 'VERDICT command-exit 0 · held the lock 184s (3m04s)', leaving git status empty. Then node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths, exit 0, gave 59 commands, byte-identical to round 1's list (diff exit 0). Each ran once with its exit code captured before any pipe. 57 exit 0, including check:nul-bytes ('OK (scanned 11284 text file(s) ... no raw ASCII control bytes)'), check:release-notes, check:release-page-status, check-release-section-coverage plain/--strict/--self-test ('OK — 10 published minor(s) across 2 GA major(s)'), check:published-files, check:issue-citations, check:doc-authoring, docs-audit/check-affected-docs, check-adr-0087-registration --base origin/main and check:docs-transcript-drift ('4 declared transcript value(s) across 414 page(s) ... equal what the registry derives today'). Two of the 57 are partial: check:dts-closure ('4 built package(s) swept - 46/46 declared declaration file(s) present') and check:sourcemap-no-sources-content ('4 built package(s) swept - 58 map(s), none embed source text'). Each is exit 0 over the 4-package lint closure, not the workspace. 2 NOT MEASURED, exit 3 PREREQUISITE NOT MET, both needing a full workspace build: check:dual-build-cjs-loads and check:lean-entry-closure. This is a declared narrowing: no source byte changes, and a build never reads CHANGELOG.md. --ran reconcile, exit 0: '✓ dispatch-gates --ran: 59 derived famil(ies) accounted for — 57 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3).' ESLint: eslint --no-inline-config --format json over the 5 changed files, exit 0, reports 5 files with errors=0 and 1 warning each, 'File ignored because no matching configuration was supplied'. There is no parserOptions.project. Control bytes: grep -naP over the 5 files, exit 1 (0 lines); the control file answers exit 0. Unit tests and typecheck: none owed (no TypeScript; no test reads these CHANGELOG lines).",
"mcp_calls": "0 — no MCP tool was called",
"api_writes": "2 relay dispatches this round, each POST /repos/objectstack-ai/objectstack/dispatches (event fleet-write), executed as objectstack-fleet[bot]. (1) issue_patch, run 38471819467, success: PATCH /repos/objectstack-ai/objectstack/issues/23336 (body only); read-back 15582 bytes sent = 15582 stored, and my own GET agrees byte for byte. (2) this os-dev-report comment: POST /repos/objectstack-ai/objectstack/issues/23261/comments. Not REST: one git push of the branch (da548251c..baa9e0be0). No label write. Reads only otherwise (gh api GET on the review comment, PR, PR files, open PRs, check-runs; npm pack of cli and formula).",
"open_questions": [],
"files_changed": [
"packages/cli/CHANGELOG.md (+2 -2, 2 hunks at base :467 and :475, inside 18.0.0-next.0) — this round, commit 378597bd4",
"packages/formula/CHANGELOG.md (+1 -1, 1 hunk at base :23, inside 18.0.0-next.0) — this round, commit baa9e0be0",
"packages/lint/CHANGELOG.md (+23 -21), packages/services/service-automation/CHANGELOG.md (+11 -11), packages/spec/CHANGELOG.md (+13 -13) — round 1, unchanged this round"
],
"line_budget": "PR total 98 changed lines (+50 -48) over 5 files, this round +3 -3; under the 3000-line human-merge threshold; no governed surface touched",
"deviations": [
"PR body footer: I sent the body with no footer, following the edit-side prescription in platform-readings (bare REST PATCH /issues on a PR appends a 58-byte bare footer). Through the relay's issue_patch the platform appended NOTHING: 15582 bytes sent, 15582 stored, cmp identical, 0 'Generated by' lines. The stored PR body therefore carries no footer. Attribution is in body prose (line 4: the seat dispatch, session_01BRQ9Mp1yH7R1az6MaUM18H). Not re-sent: the round's budget is one body write. This is a new reading for platform-readings: a relay (App-token) issue_patch of a PR body synthesises no footer.",
"check:dts-closure and check:sourcemap-no-sources-content read exit 0 this round (exit 3 in round 1, when they ran before the lint-closure build). Each swept only the 4 built packages of the lint closure. That is recorded as a partial population, not a workspace pass.",
"Zone 2 #2 carry-over: in cli the 6a06e3b bullet keeps the S7-changed lint-hint sentence (:489), true of next.0, as round 1 did in lint, service-automation and spec. The PR body says so."
],
"out_of_scope_findings": []
}
✅ ACCEPT, and armed: PR #23336 at baa9e0be0 (Fixes #23261), docs only, is ready with auto-merge
domain:spec seat 2 (#18549) · os-justin · session session_01BRQ9Mp1yH7R1az6MaUM18H · 2026-10-13T21:49Z · holder of claim 6154611004. Reports: 6155190381 (round 1) and 6155739644 (the patch round). Thread-read: the patch round's report.
Read on GitHub: 5 files (packages/{cli,formula,lint,spec}/CHANGELOG.md and packages/services/service-automation/CHANGELOG.md), +50 / −48, labels documentation · size/s · skip-changeset; line 1 Fixes #23261, line 2 Clause-②: no. Every hunk sits inside an 18.0.0-next.0 heading: the text from the 17.7.0 heading to the end of each file has the same sha256 at base and head. 34 of 34 bullets are amended, 27 byte-identical to the compiled corrected changeset and 7 keeping only hunks that were true of next.0 (each named in the PR body). The false sentences now count 0 in all five files.
Evidence accepted: gates: 59 derived, 57 run, all exit 0, 2 NOT MEASURED (check:dual-build-cjs-loads, check:lean-entry-closure, exit 3, a full workspace build absent; no source byte changes), reconciled by --ran. The published 18.0.0-next.0 tarballs' CHANGELOGs are byte-identical to the base, so nothing shipped moves. Docs only: the seat's ACCEPT is the review.
Deviation accepted: the PR body was re-sent through the relay's issue_patch with no footer, and the platform added none; attribution stays in the body's prose.
Pre-queue checks on baa9e0be0: every check success or skipped, every skip on the expected-skips roster (Check Changeset skips on the skip-changeset label); mergeable_state clean; check-governed-merges --pr 23336: not governed, 98 changed lines. Landed through the relay in this act:pr_ready + automerge_enable.
Next: confirm MERGED and the landing record. The five 18.0.0-next.0 GitHub Release bodies still carry the same sentences; that is the maintainer's to edit, and it goes in the seat's round report.
Landed: through the merge queue at 22:22:29Z as 828fe1d5a, an ancestor of origin/main. 5 files, +50 / −48, not governed.
What it ships: the 18.0.0-next.0 entries of the cli, formula, lint, service-automation and spec CHANGELOGs no longer say the single-brace dialect keeps resolving in a CRUD filter, nor describe flow-filter-token-unknown as live: 34 bullets, amended in place to the corrected changesets' text, so the next.0 entries and GA read the same. No other version's entry moved.
Mis-close scan: the body's one closing keyword is Fixes #23261, and the only issue closed in the merge window is this card (completed). pm:dispatched is removed in this act.
Activity
objectstack-fleet commentedon Oct 13, 2026
Triage: first grade,
documentation·priority:p2·target:v18·domain:spec, intopm:queue. The released 18.0.0-next.0 CHANGELOG entries that #19939 S6 falsified are amended in place, in one docs-only PRTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-13T14:19Z. ⛔ Not a claim, ⛔ not a dispatch.7958bdf36d, and [v18] retire the{var}template dialect in flow assignment slots: refuse at registration with per-spelling remedies (the C half of #11182 ruling D, on the v18 train) #19939 is closed. So the corrected changesets' wording is onmain, and the amendment can copy it.target:v18: released text contradicts the code it describes. The GA18.0.0entry is built from the corrected changesets, so this fixes the published next.0 entries only. It must land before the GA cut. It does not blocknext.1.{var}template dialect in flow assignment slots: refuse at registration with per-spelling remedies (the C half of #11182 ruling D, on the v18 train) #19939's family, which the spec lane drove, and the BEFORE → AFTER text is in PR feat(service-automation,lint,spec,verify)!: the single-brace resolver and the legacy condition path are deleted — every condition is CEL, a value-slot literal is handed on as written (#19939 pass 4, S7) #23252's body. Sodomain:specowns it, across thelint,service-automationandspecCHANGELOGs.main:git grep -c "flow-filter-token-unknown"in the three CHANGELOGs and the single-brace sentence's line numbers. The card counted 8, 3 and 3 at filing.packages/lint/CHANGELOG.md,packages/services/service-automation/CHANGELOG.mdandpackages/spec/CHANGELOG.md(domain:spec); rationale: released text must match the code.objectstack-fleet commentedon Oct 13, 2026
Claim: PM loop round 1, rolling slot (#23261, triage
6147677135: the released 18.0.0-next.0 CHANGELOG entries #19939 S6 falsified are amended in place, in one docs-only PR) · 2026-10-13T20:30ZSession:
session_01BRQ9Mp1yH7R1az6MaUM18HAccount:
os-justin(the seat's linked user asGET /useranswers it; the card's assignee from this act)Branch:
claude/issue-23261-next0-changelog-amendWorktree:
objectstack-issue-23261Domain:
domain:specSeat:
domain:spec#2(seat post #18549)File surface (at
origin/maincc14657edor later; stop on breach and explain in the report):packages/lint/CHANGELOG.md,packages/services/service-automation/CHANGELOG.mdandpackages/spec/CHANGELOG.md: only their18.0.0-next.0entries, and only the sentences S6 falsified, amended in place to the corrected changesets' text (PR feat(service-automation,lint,spec,verify)!: the single-brace resolver and the legacy condition path are deleted — every condition is CEL, a value-slot literal is handed on as written (#19939 pass 4, S7) #23252's BEFORE → AFTER).skip-changeset), no entry of any other version, nocontent/docs/releases/**.Container & model:
S,mode:subagent,model: default tier(dispatch-gates --tier: no path-derived mandate). Docs only: the seat's ACCEPT is the review.Clause-②: no
Responsibility: n/a — not a defect card (released text that contradicts the code; a documentation card)
Thread-read: 6147677135
Serial constraints cleared (all open PRs' file lists read in this act; the lane's queue re-read in this act, with no open P0/P1 and no
pm:blockingcard):d889448b9). ⛔ The Version Packages PR is never this seat's; if one opens on these files while this PR is in flight, the dev stops and reports.builtinValueJudged/carriesInterpolationToken) outlived every interpolation — a built-in config value carrying a{token}registers past its type, then fails every run #23260) editspackages/spec/src/automation/**and a changeset, not a CHANGELOG.This act moves the card
pm:queue→pm:dispatchedand assignsos-justin. The PR carriesFixes #23261.Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
os-dev-report
{ "issue": 23261, "status": "done", "branch": "claude/issue-23261-next0-changelog-amend", "pr": "https://github.com/objectstack-ai/objectstack/pull/23336", "session": "session_01BRQ9Mp1yH7R1az6MaUM18H — subagent run; the parent's harness-stamped id (the Claude-Session line of this run's commits)", "premise_still_valid": true, "summary": "Draft PR #23336 (docs only, 3 files, +47/-45) amends the 18.0.0-next.0 entries of packages/lint, packages/services/service-automation and packages/spec in place. It replaces the sentences S6 (615c696046) had already made false when the entry was published, using the corrected changeset text PR #23252 left under .changeset/pre/. One commit per CHANGELOG; no code, no changeset, no other version's entry. Premise measured: S6 is an ancestor of the cut d889448b9 (is-ancestor exit 0). S7 7958bdf36d is not (exit 1; control leg 615c696046 exit 0), and the cut's template.ts still exports interpolate/interpolateString. The three npm 18.0.0-next.0 tarballs' CHANGELOG.md are byte-identical to base (cmp exit 0 x3). The 15 changesets are unchanged between the cut and 7958bdf36d^ (git diff --quiet exit 0). Zone 2 #1 holds, refined: PR #23252's hunks split three ways. (i) S6-false: amended. (ii) S7-false and TRUE of next.0: kept. That is the run-user lint-hint sentence (lint :1018, service-automation :347, spec :384) and 22301, which compiles only into verify. (iii) A completeness addition: kept. That is the crud-filter-operands :27 FROM → TO, since the next.0 sentence 'are removed' is true. Zone 2 #2: 26 of the 32 amended bullets are byte-identical to the compiled corrected changeset. The other 6 (615c696 and 6a06e3b, three CHANGELOGs each) are identical except for the kept hunks. Each bullet was located by its FULL compiled BEFORE text, matching exactly once per CHANGELOG its frontmatter lists. Zone 2 #3 holds: the mechanical readers (check-release-notes, check-release-page-status, check-release-section-coverage, sync-release-index-currency, check-docs-image-tag, check-future-spec-major, release-github-releases) read headings or whole sections, and none pins a bullet. No heading or bullet hash changed. Text from the 17.7.0 heading to EOF has the same sha256 at base and head in all three. Triage re-check on head: git grep -c flow-filter-token-unknown gives lint 6 / service-automation 3 / spec 3 (8/3/3 at filing). Every remaining hit says the rule retires, or is in lint's 17.4.0 entry. The single-brace 'keeps resolving where' sentences now count 0. No Version Packages PR is open, and no open PR touches these files (read at start and again before pr_create). PR labels after label-write: documentation, size/s, skip-changeset. CI on da548251c is in_progress (16 success, 16 in_progress, 10 skipped at report time). Cleanup: the worktree and its node_modules are removed right after this comment is posted, before the handback.", "tests": "Gates, all on head da548251c. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths, exit 0: 59 commands, identical to the PM lead list at cc14657ed. Each ran once with its exit code captured before any pipe. 55 exit 0, including pnpm check:nul-bytes ('OK (scanned 11284 text file(s) ... no raw ASCII control bytes)'), check:release-notes, check:release-page-status, check-release-section-coverage plain/--strict/--self-test ('OK — 10 published minor(s) across 2 GA major(s)'), check:published-files, check:issue-citations, check:doc-authoring, docs-audit/check-affected-docs and check-adr-0087-registration --base origin/main. pnpm check:docs-transcript-drift exited 3 first (lint not built). Then pnpm --workspace-concurrency=2 --filter '@objectstack/lint...' build ran under os-verify-lock.sh, 'VERDICT command-exit 0 · held the lock 140s', leaving git status empty. The gate re-ran at exit 0: '4 declared transcript value(s) across 414 page(s) ... equal what the registry derives today'. 4 NOT MEASURED, exit 3 PREREQUISITE NOT MET, each needing a full workspace build: check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content. This is a declared narrowing: no source byte changes and a build never reads CHANGELOG.md. CI runs them. --ran reconcile, exit 0: '✓ dispatch-gates --ran: 59 derived famil(ies) accounted for — 55 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3).' ESLint, a measured narrowing: eslint --no-inline-config --format json over the 3 files, exit 0, reports 3 files with errors=0 and 1 warning each, 'File ignored because no matching configuration was supplied'. eslint.config.mjs has no parserOptions.project (no type-aware linting). Control bytes: grep -naP over the 3 files, exit 1 (no match); the control file answers exit 0. Unit tests and typecheck: none owed. No TypeScript is touched, and no test reads these CHANGELOG lines: tree-walking tests skip CHANGELOG.md by name, and no test or gate pins these phrases. No ablation is applicable (docs-only).", "mcp_calls": "0 — no MCP tool was called", "api_writes": "3 relay dispatches, each POST /repos/objectstack-ai/objectstack/dispatches (event fleet-write), executed as objectstack-fleet[bot]. (1) pr_create, run 38467460847, success: POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/23336/assignees [os-justin]; read-back 15099 bytes sent = stored. (2) label-write labels_add, run 38467543676, success: POST /repos/objectstack-ai/objectstack/issues/23336/labels [skip-changeset]; read-back matches. (3) this os-dev-report comment: POST /repos/objectstack-ai/objectstack/issues/23261/comments. Not REST: two git push of the branch (the empty-branch probe, then da548251c). Reads only otherwise (gh api GET on the card, comments, PRs, files, releases, check-runs; npm view/pack).", "open_questions": [], "files_changed": [ "packages/lint/CHANGELOG.md (+23 -21, 19 hunks, all inside 18.0.0-next.0)", "packages/services/service-automation/CHANGELOG.md (+11 -11, 11 hunks, all inside 18.0.0-next.0)", "packages/spec/CHANGELOG.md (+13 -13, 13 hunks, all inside 18.0.0-next.0)" ], "line_budget": "92 changed lines (+47 -45) over 3 files; under the 3000-line human-merge threshold; no governed surface touched", "deviations": [ "Zone 2 #2 partly disproven, by measurement: not every amended bullet takes the full AFTER text. For 6 of the 32 bullets I kept the hunks that are true of 18.0.0-next.0 (the S7 lint hint) or that correct nothing (the crud :27 FROM → TO). Said per row in the PR body.", "No dated erratum line, unlike PR #22296. The card and triage direction ask for the corrected changeset's text, so next.0 and GA read the same. The PR body offers the erratum shape as a patch round if the reviewer wants it." ], "out_of_scope_findings": [ "class: b · reach: exception: release-text · evidence: the same S6-false sentences sit in two next.0 entries outside this card's surface. packages/cli/CHANGELOG.md :467 and :475 (bullet 6a06e3b, PR #23252 row 11: the '{$User.*} keeps resolving where the single-brace dialect still lives' sentence and the $User.Email row's filter id '{uid}'). packages/formula/CHANGELOG.md :23 (bullet 2b61f2d, row 12: 'a CRUD filter value keeps the single-brace dialect'). The full-BEFORE locator matched each exactly once. Not edited (Zone 1 limits this PR to three CHANGELOGs). Same family as this card: recommend a patch round on PR #23336 under a re-scoped claim (3 lines, the identical mechanical replacement), not a new card · dedupe words: 18.0.0-next.0 CHANGELOG amendment cli formula; keeps resolving where the single-brace dialect still lives; next.0 changelog S6 false sentence", "class: a (misleading author-facing text) · reach: exception: release-text — shipped in @objectstack/spec@18.0.0-next.0 dist/migrations/index.js, dist/migrations/index.mjs and spec-changes.json (grep of the unpacked npm tarball), and GA ships it unless fixed before the cut · evidence: two ADR-0087 D3 entries still prescribe 'Rename every read of the old name with it — a text-slot hole, a CEL expression, a single-brace token in a value position'. They are packages/spec/src/migrations/entries/semantic/18.flow-binding-name-dollar-refused.ts:35 and 18.flow-binding-variable-dollar-name-refused.ts:28 (replacement). Their changesets 22572/22502 were corrected by PR #23252, but these registry entries were not. Since S6 no value position reads a single-brace token. A code fix with a spec patch changeset, in #19939's family: route to that family's close-out card if one is open · dedupe words: flow-binding-name-dollar-refused replacement single-brace token in a value position; D3 registry rationale stale S6; spec-changes.json single-brace", "carrier: the maintainer (a release act) · noted, not filed: the GitHub Release bodies of @objectstack/{lint,service-automation,spec,cli,formula}@18.0.0-next.0 still carry the S6-false sentences. Measured: service-automation and spec have 7 'keeps resolving where' lines each, cli 1, and lint and formula the 'keeps the single-brace dialect' line. Like the tarballs, they record what shipped.", "carrier: none (承接者:无) · noted, not filed: the header of packages/lint/src/validate-expressions.text-slot.test.ts:23 says 'Every other notify / screen string keeps the single-brace dialect'. A test comment, not shipped." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Review of PR #23336 at
da548251c: a patch round adds the two CHANGELOGs the same sentences also sit in, then the ACCEPTdomain:specseat 2 (#18549) ·os-justin· sessionsession_01BRQ9Mp1yH7R1az6MaUM18H· 2026-10-13T21:08Z · holder of claim6154611004. Report:6155190381. Thread-read: the report.Read on GitHub: a draft, docs only, 3 files, +47 / −45, labels
documentation·size/s·skip-changeset; line 1Fixes #23261, line 2Clause-②: no. The premise is measured: S6 is an ancestor of the next.0 cut and S7 is not; every amended bullet is located by its full compiled BEFORE text; 26 of 32 take the corrected changeset's text byte for byte, and the other 6 keep hunks that were true of next.0 (each named in the PR body).File surface, re-scoped by the seat in this comment: the claim's surface gains the
18.0.0-next.0entries ofpackages/cli/CHANGELOG.md(bullet6a06e3b, PR #23252 row 11, about:467and:475) andpackages/formula/CHANGELOG.md(bullet2b61f2d, row 12, about:23). The dev measured the same S6-false sentences there, and AGENTS.md's rule is per released entry, not per package: the amendment rides this PR as a patch round (the same mechanical replacement, one commit per CHANGELOG), not a new card. No other version's entry and no code, as before.The report's other items:
@objectstack/spec'sdistandspec-changes.json): filed spec(migrations): two step-18 D3 entries still tell authors to rename "a single-brace token in a value position" — no value position reads one since #19939 S6, and the text ships in the upgrade guide andspec-changes.json#23338. A code change with a changeset, so not in this docs-only PR.18.0.0-next.0releases still carry the same sentences: they record what shipped, like the tarballs. Raised in the seat's round report to the maintainer, the only one who edits a release.validate-expressions.text-slot.test.ts:23: Acceptance notes (not shipped; rides the next PR that edits that file).Next: the patch round, then the ACCEPT and the queue (docs only: no contract review owed).
Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
os-dev-report
{ "issue": 23261, "status": "done", "branch": "claude/issue-23261-next0-changelog-amend", "pr": "https://github.com/objectstack-ai/objectstack/pull/23336", "head": "baa9e0be06f7901094bb5a0e81c6b37aac8da5e6", "session": "session_01BRQ9Mp1yH7R1az6MaUM18H — subagent run; the parent's harness-stamped id (the Claude-Session line of this run's commits)", "premise_still_valid": true, "summary": "Patch round, as the seat's review comment 6155243339 re-scoped the file surface. Two commits on top of da548251c: 378597bd4 amends packages/cli/CHANGELOG.md and baa9e0be0 amends packages/formula/CHANGELOG.md. Both edits sit in the 18.0.0-next.0 entries only and use round 1's method. cli, bullet 6a06e3b (PR #23252 row 11): :467 drops the '{$User.*} keeps resolving where the single-brace dialect still lives, a CRUD filter value.' sentence, and :475's $User.Email row now reads the corrected changeset's 'a get_record on sys_user with filter: { id: { dialect: cel, source: current_user.id } }'. The bullet's lint-hint sentence (:489), which S7 changed and which was true of next.0, stays, as in the other three CHANGELOGs. formula, bullet 2b61f2d (row 12): :23 'Unchanged: a CRUD filter value keeps the single-brace dialect, and the value slots are CEL's.' becomes 'Unchanged: the value slots are CEL's.', byte-identical to the corrected changeset. Each bullet was located by its full compiled BEFORE text, exactly once per CHANGELOG its frontmatter lists. Across the PR, 34 of 34 bullets are amended: 27 byte-identical to the compiled corrected changeset, and 7 (615c696 x3, 6a06e3b x4) identical except for the kept hunks. The npm 18.0.0-next.0 tarballs of cli and formula carry a CHANGELOG.md byte-identical to base cc14657ed (cmp exit 0 x2). Text from the 17.7.0 heading to EOF has the same sha256 at base and head in both files. In both files, git grep -c of 'keeps resolving where', 'keeps the single-brace dialect' and the '{uid}' row exits 1 (0 hits); the control '## 18.0.0-next.0' answers 1 hit each (exit 0). origin/main moved 2 commits since cc14657ed, none on any CHANGELOG (git log -- the five files is empty), so no merge was done. No Version Packages PR was open at the start or before the body update. The PR body was updated once through the relay (issue_patch), and the BEFORE → AFTER table gained cli and formula columns. It is now 5 files, +50/-48, still draft, labels documentation, size/s, skip-changeset, assignee os-justin. CI on baa9e0be0 at report time: 31 success, 6 in_progress, 10 skipped, 0 failure. The worktree and its node_modules are removed right after this comment is posted, before the handback.", "tests": "Gates, all on head baa9e0be0. First, pnpm --workspace-concurrency=2 --filter '@objectstack/lint...' build ran under os-verify-lock.sh: 'VERDICT command-exit 0 · held the lock 184s (3m04s)', leaving git status empty. Then node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths, exit 0, gave 59 commands, byte-identical to round 1's list (diff exit 0). Each ran once with its exit code captured before any pipe. 57 exit 0, including check:nul-bytes ('OK (scanned 11284 text file(s) ... no raw ASCII control bytes)'), check:release-notes, check:release-page-status, check-release-section-coverage plain/--strict/--self-test ('OK — 10 published minor(s) across 2 GA major(s)'), check:published-files, check:issue-citations, check:doc-authoring, docs-audit/check-affected-docs, check-adr-0087-registration --base origin/main and check:docs-transcript-drift ('4 declared transcript value(s) across 414 page(s) ... equal what the registry derives today'). Two of the 57 are partial: check:dts-closure ('4 built package(s) swept - 46/46 declared declaration file(s) present') and check:sourcemap-no-sources-content ('4 built package(s) swept - 58 map(s), none embed source text'). Each is exit 0 over the 4-package lint closure, not the workspace. 2 NOT MEASURED, exit 3 PREREQUISITE NOT MET, both needing a full workspace build: check:dual-build-cjs-loads and check:lean-entry-closure. This is a declared narrowing: no source byte changes, and a build never reads CHANGELOG.md. --ran reconcile, exit 0: '✓ dispatch-gates --ran: 59 derived famil(ies) accounted for — 57 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3).' ESLint: eslint --no-inline-config --format json over the 5 changed files, exit 0, reports 5 files with errors=0 and 1 warning each, 'File ignored because no matching configuration was supplied'. There is no parserOptions.project. Control bytes: grep -naP over the 5 files, exit 1 (0 lines); the control file answers exit 0. Unit tests and typecheck: none owed (no TypeScript; no test reads these CHANGELOG lines).", "mcp_calls": "0 — no MCP tool was called", "api_writes": "2 relay dispatches this round, each POST /repos/objectstack-ai/objectstack/dispatches (event fleet-write), executed as objectstack-fleet[bot]. (1) issue_patch, run 38471819467, success: PATCH /repos/objectstack-ai/objectstack/issues/23336 (body only); read-back 15582 bytes sent = 15582 stored, and my own GET agrees byte for byte. (2) this os-dev-report comment: POST /repos/objectstack-ai/objectstack/issues/23261/comments. Not REST: one git push of the branch (da548251c..baa9e0be0). No label write. Reads only otherwise (gh api GET on the review comment, PR, PR files, open PRs, check-runs; npm pack of cli and formula).", "open_questions": [], "files_changed": [ "packages/cli/CHANGELOG.md (+2 -2, 2 hunks at base :467 and :475, inside 18.0.0-next.0) — this round, commit 378597bd4", "packages/formula/CHANGELOG.md (+1 -1, 1 hunk at base :23, inside 18.0.0-next.0) — this round, commit baa9e0be0", "packages/lint/CHANGELOG.md (+23 -21), packages/services/service-automation/CHANGELOG.md (+11 -11), packages/spec/CHANGELOG.md (+13 -13) — round 1, unchanged this round" ], "line_budget": "PR total 98 changed lines (+50 -48) over 5 files, this round +3 -3; under the 3000-line human-merge threshold; no governed surface touched", "deviations": [ "PR body footer: I sent the body with no footer, following the edit-side prescription in platform-readings (bare REST PATCH /issues on a PR appends a 58-byte bare footer). Through the relay's issue_patch the platform appended NOTHING: 15582 bytes sent, 15582 stored, cmp identical, 0 'Generated by' lines. The stored PR body therefore carries no footer. Attribution is in body prose (line 4: the seat dispatch, session_01BRQ9Mp1yH7R1az6MaUM18H). Not re-sent: the round's budget is one body write. This is a new reading for platform-readings: a relay (App-token) issue_patch of a PR body synthesises no footer.", "check:dts-closure and check:sourcemap-no-sources-content read exit 0 this round (exit 3 in round 1, when they ran before the lint-closure build). Each swept only the 4 built packages of the lint closure. That is recorded as a partial population, not a workspace pass.", "Zone 2 #2 carry-over: in cli the 6a06e3b bullet keeps the S7-changed lint-hint sentence (:489), true of next.0, as round 1 did in lint, service-automation and spec. The PR body says so." ], "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
✅ ACCEPT, and armed: PR #23336 at
baa9e0be0(Fixes #23261), docs only, is ready with auto-mergedomain:specseat 2 (#18549) ·os-justin· sessionsession_01BRQ9Mp1yH7R1az6MaUM18H· 2026-10-13T21:49Z · holder of claim6154611004. Reports:6155190381(round 1) and6155739644(the patch round). Thread-read: the patch round's report.Read on GitHub: 5 files (
packages/{cli,formula,lint,spec}/CHANGELOG.mdandpackages/services/service-automation/CHANGELOG.md), +50 / −48, labelsdocumentation·size/s·skip-changeset; line 1Fixes #23261, line 2Clause-②: no. Every hunk sits inside an18.0.0-next.0heading: the text from the17.7.0heading to the end of each file has the same sha256 at base and head. 34 of 34 bullets are amended, 27 byte-identical to the compiled corrected changeset and 7 keeping only hunks that were true of next.0 (each named in the PR body). The false sentences now count 0 in all five files.Evidence accepted: gates: 59 derived, 57 run, all exit 0, 2 NOT MEASURED (
check:dual-build-cjs-loads,check:lean-entry-closure, exit 3, a full workspace build absent; no source byte changes), reconciled by--ran. The published 18.0.0-next.0 tarballs' CHANGELOGs are byte-identical to the base, so nothing shipped moves. Docs only: the seat's ACCEPT is the review.Deviation accepted: the PR body was re-sent through the relay's
issue_patchwith no footer, and the platform added none; attribution stays in the body's prose.Pre-queue checks on
baa9e0be0: every check success or skipped, every skip on the expected-skips roster (Check Changesetskips on theskip-changesetlabel);mergeable_stateclean;check-governed-merges --pr 23336: not governed, 98 changed lines. Landed through the relay in this act:pr_ready+automerge_enable.Next: confirm MERGED and the landing record. The five
18.0.0-next.0GitHub Release bodies still carry the same sentences; that is the maintainer's to edit, and it goes in the seat's round report.Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Landed: PR #23336 →
828fe1d5a(Fixes #23261), docs only. The card closedcompletedon the mergedomain:specseat 2 (#18549) ·os-justin· sessionsession_01BRQ9Mp1yH7R1az6MaUM18H· 2026-10-13T22:22Z · holder of claim6154611004. Thread-read:6155929615.828fe1d5a, an ancestor oforigin/main. 5 files, +50 / −48, not governed.18.0.0-next.0entries of thecli,formula,lint,service-automationandspecCHANGELOGs no longer say the single-brace dialect keeps resolving in a CRUDfilter, nor describeflow-filter-token-unknownas live: 34 bullets, amended in place to the corrected changesets' text, so the next.0 entries and GA read the same. No other version's entry moved.Fixes #23261, and the only issue closed in the merge window is this card (completed).pm:dispatchedis removed in this act.spec-changes.json#23338 (two step-18 D3 entries still name a single-brace token in a value position; it ships inspec-changes.json). The five18.0.0-next.0GitHub Release bodies still carry the old sentences; they record what shipped, and only the maintainer edits a release: it is in the seat's round report.Generated by Claude Code