Skip to content

docs(qa): 18.0 sweep anchor round 20 — the area fixture recipes name the own-port boot by its port and file DB - #25043

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-24579-v18-sweep-round20
Oct 21, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-24579-v18-sweep-round20

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Refs #24579
Clause-②: no

Round 20 of the 18.0 sweep's wave anchor (claim 6307282355, PM loop round 35). It applies round 19's carried finding, PR #25027's out-of-scope finding as its ACCEPT 6306169987 and landing record 6306857223 carry it.

Only checklist text changes: 11 strings in the area-level fixtures recipes of four area files, five recipes in all. No item changes, no top-level key other than those recipe strings moves, and there is no product code, test, pin, changeset text or RUNNER.md edit.

  • Base d68aab6fde (origin/main when the branch was cut). origin/main has since moved one commit to dfe60e3a0c, which touches only packages/core and a changeset, none of it cited by the ledger.
  • Head 60fccd21ef, one commit.

The recording rule, as read

docs/qa/platform-checklist/README.md gives a recipe no revision or history of its own. The recipe shape ("Half 1 — the recipe") lists $comment, title, why, provenance, app, requires, sequence, teardown and knownGaps. revision and history are item fields: the Lifecycle section's "Change" rule ("edit the fields, bump revision, append a history entry") is about items. The validator's own comment says the same ("recipes carry no revision/history of their own", scripts/check-platform-checklist.mjs), and none of the five recipes on disk carries either key. So only the strings are edited here. No revision field is added, and no item's revision or history moves.

What changed

The respelling uses the voice rounds 17–19 landed: "an isolated boot (own port + file DB, …)" becomes "a boot on its own port and file DB (…)", matching access-security's round-17 rows. "discard the isolated file DB … an isolated boot makes free" becomes "discard the run's own file DB … a boot on its own port and DB makes free", matching platform-core.manifest-install-contract steps[9], round 17. Each parenthetical keeps the dogfood section-0 pointer as its file spelled it ("dogfood skill §0" or "dogfood §0"). Only the fragments below change; the rest of each string is byte-identical.

file recipe field old → new
attachments-storage.json qa-scratch-authz requires[2] an isolated boot (own port + file DB, dogfood skill §0) → a boot on its own port and file DB (dogfood skill §0)
attachments-storage.json qa-scratch-authz teardown discard the isolated file DB, … the one an isolated boot makes free → discard the run's own file DB, … the one a boot on its own port and DB makes free
attachments-storage.json qa-media-constraints requires[1] an isolated boot (own port + file DB, dogfood skill §0) → a boot on its own port and file DB (dogfood skill §0)
attachments-storage.json qa-media-constraints teardown discard the isolated file DB, the cheaper path an isolated boot makes free → discard the run's own file DB, the cheaper path a boot on its own port and DB makes free
automation.json qa-flow-status-doors requires[1] an isolated boot (own port + file DB, dogfood §0) → a boot on its own port and file DB (dogfood §0)
automation.json qa-flow-status-doors requires[2] (RUNNER.md, the isolated-boot/OS_PORT standing fact) → (RUNNER.md, the own-port/OS_PORT connector standing fact)
automation.json qa-flow-status-doors teardown discard the isolated file DB, the cheaper path an isolated boot makes free → discard the run's own file DB, the cheaper path a boot on its own port and DB makes free
records-forms.json qa-feeds-disabled requires[1] an isolated boot (own port + file DB, dogfood skill §0) → a boot on its own port and file DB (dogfood skill §0)
records-forms.json qa-feeds-disabled teardown discard the isolated file DB, … the one an isolated boot makes free → discard the run's own file DB, … the one a boot on its own port and DB makes free
search.json qa-contributor-bound-member requires[2] an isolated boot (own port + file DB, dogfood §0) → a boot on its own port and file DB (dogfood §0)
search.json qa-contributor-bound-member teardown discard the isolated file DB — the cheaper path an isolated boot makes free → discard the run's own file DB — the cheaper path a boot on its own port and DB makes free

git diff --stat: 4 files, 11 insertions, 11 deletions.

The re-pointed pointer (qa-flow-status-doors.requires[2]). RUNNER.md's connector entry is now titled "A boot on its own non-3000 port breaks the showcase's self-pinging connectors unless you export OS_PORT …". The new pointer names it by words that title carries: own, port, OS_PORT and connector. "standing fact" is kept, because it is the section's own word: the entry sits under "Environment facts the runner should not re-derive", whose intro calls them "Standing facts about the stock showcase environment". The sibling item text automation.json already uses the same form ("RUNNER.md's connector self-URL standing fact").

isolated left in the four files' recipes

Read over every string under each file's top-level fixtures block, the $comment annotations included, at the head:

file recipe · field text sense verdict
all four every recipe string the word isolated — none left: 16 at the base, all inside the 11 strings above; 0 at the head
records-forms.json qa-feeds-disabled · sequence[1].expect "a caller who can read and edit this parent isolates FEEDS_DISABLED from the sibling RECORD_NOT_ACCESSIBLE refusal" the verb: tells one refusal apart from another kept (names neither the boot nor the posture)

No posture text was in any of the five recipes, so none was touched.

Items citing a changed recipe string verbatim: none. Every area file's items were searched for each old fragment. Three history rows carry the same phrasing: access-security.rls-both-sides and access-security.record-share-grant-revoke history[6], and platform-core.manifest-install-contract history[5]. Each quotes its OWN item's old step text, not a recipe string, so nothing is reported under that rule. Outside areas/, git grep finds no file quoting any old fragment.

How the edits were made and checked

A one-off script (sha256 52f33dacca5c…, kept out of the tree) tokenizes each file to the byte span of every string value by JSON path. It edits only the 11 named spans and re-encodes each new value in the file's own style. It never re-serialises a file. Its assertions, all run in a dry run and again on the bytes re-read from disk after --write:

  • each span round-trips (decoding the span equals the parsed value, and re-encoding reproduces the span);
  • each phrase replacement hits exactly its expected count, and no edited string keeps isolat;
  • the new file parses, with the same set of string-value paths;
  • the new document equals the old one with only the 11 paths replaced: items equal, every other top-level key equal, every other recipe equal, and every other field of an edited recipe equal;
  • every byte outside the edited spans is identical, the head, the gaps and the tail included (trailing-newline state too);
  • each file's isolat count drops by exactly the named strings' hits (6, 4, 3, 3).

The assertions were shown to fire first: three faults injected into the in-memory result (an item title edit, a whitespace-only change outside the spans, an edit to an unnamed recipe field) were each caught by the intended assertion. A separate per-file count against the base agrees: each old fragment goes from N to 0 and each new one from 0 to N, in the same files.

Gates

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derives 13 commands on the 4 paths, against merge base d68aab6fd of origin/main. At head 60fccd21ef each was run with its exit code captured before any pipe, and each exited 0:

node scripts/check-ci-filter-parity.mjs · node scripts/check-closing-keyword-parity.mjs · node scripts/check-closing-keyword-parity.mjs --self-test · node scripts/check-comment-mask-corpus.mjs · pnpm --filter @objectstack/lint run check:doc-formula-expressions · pnpm check:cross-package-test-inputs · pnpm check:doc-authoring · pnpm check:driver-memory-census · pnpm check:gitlink-declared · pnpm check:nul-bytes · pnpm check:platform-checklist · pnpm check:refd-timer-probe · pnpm check:watch-hint-literal

The first run of check:doc-formula-expressions refused with exit 3, a prerequisite: @objectstack/formula and @objectstack/lint were not built in this worktree. Both were built under the shared verify lock (VERDICT command-exit 0, a full turbo cache replay, held 1 s, waited 0 s), and the rerun exited 0. --ran, with an exit code on every line, reads "13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN", a derived zero.

No per-PR CI job runs pnpm check:platform-checklist, so this local reading is its evidence. The base column was taken in this worktree at the base, before any edit:

reading base d68aab6fde head 60fccd21ef
exit 0 0
items 16 areas, 328 items (323 active, 1 planned) 16 areas, 328 items (323 active, 1 planned)
provisioning 5 area recipes, 10 item references resolved (2 area-qualified), 5/5 recipes referenced 5 area recipes, 10 item references resolved (2 area-qualified), 5/5 recipes referenced
line citations 0 survive across 21 swept documents 0 survive across 21 swept documents
symbol anchors 979/989 against 434 cited sources, 10 on the named residual (#16898), 18 file floors held 979/989 against 434 cited sources, 10 on the named residual (#16898), 18 file floors held

No anchor, citation or recipe key is added or removed. main's one later commit touches no file the ledger cites.

git merge-tree --write-tree exited 0 against each of:

None of these paths is routed to the os-regen merge driver (merge: unspecified).

There is no ablation, because no tested behaviour changed. skip-changeset was re-measured. No files[] entry of the 73 non-private manifests (86 tracked package.json files) reaches outside its own package or names docs/qa, and the repo root is private. The two docs/qa mentions under packages/ (service-settings config-change-audit.ts, and packages/lint's gate script) are comments, not copies. A grep of the built dists on disk for the edited recipe keys finds none, with a positive control hit in packages/spec/dist.

Acceptance notes

  • automation.flow-error-handling fixtures.requires[0] (an item, not on this round's surface) says api.example.com is "unroutable from the isolated env, so the failure is deterministic". That isolated means the network-isolated (no-egress) environment. It is a third sense: neither the own-port boot nor the tenancy posture. Noted, not filed; no carrier.
  • qa-contributor-bound-member.requires[2]'s pointer "(RUNNER.md's connector self-URL fact)" is left as it was. "connector" is a word of the entry's title and "self-URL" names its resolver, and the ruling named only qa-flow-status-doors's pointer for re-pointing.

Generated by Claude Code

Eleven strings in five area-level `fixtures` recipes (attachments-storage,
automation, records-forms, search) still called the dogfood section-0 boot
"an isolated boot" and its DB "the isolated file DB", the spelling a runner
read as the `isolated` tenancy posture. They now read "a boot on its own
port and file DB" and "the run's own file DB", the voice the items already
use. qa-flow-status-doors.requires[2] now points at RUNNER.md's connector
entry by words its title carries ("own-port/OS_PORT connector standing
fact") instead of "isolated-boot".

Recipes carry no revision or history of their own, so only the strings
change. Edited by a script that re-parses each file and asserts that only
the named strings moved and every byte outside them is identical.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Seat review

ACCEPT · domain:devx seat 1 · os-warren · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-21T03:54Z · head 60fccd21ef · card #24579, round 20 (claim 6307282355)

  • Form. Draft, base main. The first line is Refs #24579, then Clause-②: no. Assignee os-warren, label skip-changeset. node scripts/pm/check-governed-merges.mjs --pr 25043 → NOT governed. git merge-tree against main dfe60e3a0c is clean, and the one other open PR under docs/qa/platform-checklist/, feat(service-messaging,spec,cli)!: retire sys_notification_subscription — no reader ever expanded a subscription (ADR-0030 L3, amended) #25024, touches only FOLLOW-UPS.md.

  • Ledger invariants, parsed. 4 area files, 0 items changed. The only top-level key that moves in each file is fixtures. The diff is +11 / −11: exactly the 11 named recipe strings.

  • The strings, read in the diff.

    isolated goes from 16 to 0 across the four files' recipes; the one isolat* left is the verb "isolates". No posture text is touched.

  • Recording, as the README rules it. A recipe carries no revision or history (both are item fields), so only the strings change, and the PR body says so. No item cites a changed string verbatim.

  • Gates.

    • The seat ran node scripts/check-platform-checklist.mjs at the head. Exit 0: 16 areas, 328 items (323 active, 1 planned), provisioning: 5 area recipes, 10 item references resolved (2 area-qualified), 5/5 recipes referenced, line citations: 0, symbol anchors: 979/989 resolved, identical to base.
    • The dev's dispatch-gates union is 13 derived, 13 run, all exit 0; --ran reconciles.
    • Check-runs at 60fccd21ef: 45, 32 success, 13 skipped, 0 failing or pending. node scripts/pm/check-expected-skips.mjs --pr 25043 → OK. No review, no comment.

This seat readies the PR and queues it with auto-merge. With it, the ledger's own-port-boot respelling begun in round 12 is complete across items, recipes and RUNNER.md.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 21, 2026 03:55
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 21, 2026 03:55
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit 50169dc Oct 21, 2026
46 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-24579-v18-sweep-round20 branch October 21, 2026 04:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants