Skip to content

docs(metadata-protocol,objectql,cli): correct six comments describing the standalone stamp as proj_local - #17295

Merged
os-sam merged 2 commits into
mainfrom
claude/issue-15202-proj-local-stale-comments
Sep 10, 2026
Merged

os-sam merged 2 commits into
mainfrom
claude/issue-15202-proj-local-stale-comments

Conversation

@claude

@claude claude Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Fixes #15202

Clause-②: no

(Declared by the claiming seat, not by the implementer — check-clause2-carriers.mjs forbids anyone else supplying it: ⛔ do not fill the line in on the claiming seat's behalf, the declaration IS the judgement. It matches the Clause-②: no on this card's claim comment. This PR corrects comment text describing a stamp; it adds no export, no schema key, no closed-set member and no registry entry, so the C5 widening-tell limb has nothing to collide with.)

⚠️ Added after Check Changeset refused on the LEVEL AXIS — 「the PR body carries no Clause-②: line」 — which the gate clears from the body on the next edited event with no push and no re-run. ⛔ The grade was NOT touched: the gate itself says the remedy is the declaration, never a regrade. The patch on all three packages is correct and stays — these packages ship their comments.

#13366 completed the v5.0 project to environment rename at the two stamps it had not reached — packages/runtime/src/standalone-stack.ts and packages/metadata/src/plugin.ts — and both now stamp env_local. Six comments in three other packages still described that stamp as 'proj_local', naming a value the tree no longer produces.

Comments only. 21 of 21 changed source lines begin with // or *; nothing renamed, no behaviour, no export, no assertion reads either literal.

Premise re-confirmed before the first edit

The card opens Blocked-by: #13366 and warns the work is not yet valid. Re-measured on this branch's base ebf9a4891, not taken on the card's word:

packages/runtime/src/standalone-stack.ts    env_local 3 hits  ·  proj_local 0 hits
control: the file exists at this base       1
reverse control (the card's own re-check):
  git grep -c environmentId over the three card packages -> 62 files
  => the counts above are not a mis-scoped-pathspec artifact

Per-site judgement: five corrected, one preserved as history

The six are not the same edit. Each was judged on one question: read on today's tree, does the sentence assert something false, and is its job to describe the tree or to narrate the historical deduction?

site verb describing the stamp disposition
metadata-protocol/src/protocol.ts:4758 present (bind), enumerating today's topology corrected to env_local; the two clauses now name one shared value instead of repeating a literal twice
metadata-protocol/src/plugin.ts:133 present (stamps), with a pointer to standalone-stack.ts inviting the reader to look corrected to env_local
metadata-protocol/src/plugin.ts:279 present (stamps), past-tense consequence corrected to env_local
objectql/src/plugin.ts:144 present (stamps), past-tense consequence corrected to env_local
cli/src/utils/schema-migrate.ts:299 the literal is the grammatical object of deduced ... from literal kept; its present-tense relative clause moved into the past, with today's spelling named beside it
cli/src/utils/platform-migrations-arming.integration.test.ts:15 present (stamps), with a file pointer corrected to env_local

Sites 2, 3 and 4 all state the same fact about the same stack; grading two of them present and one historical would have left a reader looking at two contradicting sentences in one file.

The one preserved site is preserved deliberately: it names 'proj_local' as the value the historical arming deduction consumed, so rewriting it to env_local would have falsified the record in the other direction — the failure mode the card names.

The causal claim is preserved at all six. It is about presence, not spelling: the retired gate read environmentId === undefined, so it would have misfired identically under either literal. No sentence was corrected into implying the spelling was the cause.

Census by claim, not by spelling

Swept for sentences describing the standalone stamp however worded, not for the token:

S2  stamp-verb within 120 chars of either local env-id literal, CHANGELOGs excluded  -> 7 hits
S3  "standalone" within 80 chars of environmentId / "env id", no literal required    -> 1 hit
S4  "per-project kernel" / "cloud per-project" prose                                 -> 20 hits
S1  proj_local repo-wide                                                             -> 56 hits
zero-hit probe: "proj-local" (hyphenated) over packages/  -> exit 1 (zero)
POSITIVE CONTROL in the same pass, same pathspec: env_local -> FIRED (many files)

Count reconciled against the card's six: the six are exactly right, and the sweep found three more sentences that are already correct plus one excluded by an earlier ruling.

Region fence: re-derived by symbol at edit time, not trusted from the card

The card's protocol.ts site was filed at :4747-4748 and re-measured by triage at :4707. Measured again immediately before editing: :4758-4759.

Open PR #17252 holds the same file; its current lowest hunk is @@ -4827. 68 lines of clearance. The edit was written to replace three comment lines with three, so no line below it moved, and the fence is untouched. Nothing was relocated to dodge it.

Grade: a patch changeset, not skip-changeset — and this is the one place the diff diverges from the dispatch's expectation

The dispatch expected skip-changeset. Measured against what the packages actually ship, that grade does not hold, so a patch changeset is included instead.

skip-changeset is for a diff that publishes nothing from any released package. Built the three packages and grepped the paths their files[] actually ships, with a positive control:

@objectstack/metadata-protocol  dist/index.d.ts, dist/index.d.cts     HIT
@objectstack/objectql           dist/index.d.ts, dist/index.d.mts     HIT
@objectstack/cli                dist/utils/schema-migrate.js          HIT
positive control runPlatformMigrations / bootSchemaStack              HIT
old spelling in dist after the build                                  0

Two of the six sites are TSDoc on exported interface members (AssembleMetadataProtocolOptions.runPlatformMigrations, ObjectQLPluginOptions.runPlatformMigrations), so they land in the shipped declaration files; the CLI site lands in shipped JS because that package builds with removeComments unset. All three packages are public and ship dist. The corrected text is what an author reads on hover after upgrading, so it publishes.

Verification

All figures below were taken at 74bec1b00f, the final commit on this branch.

Gate reconciliation — every derived family run, none deferred:

node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran RECORD_FILE
  Run reconciliation — 66 derived, 66 run, 0 NOT-MEASURED, 0 UNRUN.
  dispatch-gates --ran: 66 derived famil(ies) accounted for — 66 run, 0 NOT-MEASURED.
  exit 0

Included check:nul-bytes, check:doc-authoring, check-comment-mask-adoption, check-comment-mask-corpus, check-keyed-text-bounds, check-closing-keyword-parity, the four changeset families (check-empty-changeset, check-changeset-no-major, check-adr-0087-registration, check:objectui-changeset), check:published-files, check:dts-closure, check:tier-file-adoption, check:test-source-alias and check:cross-package-test-inputs.

check:type-check-debt first returned exit 3 = PREREQUISITE NOT MET (its re-measure leg needs a built tree). Re-run after the build: exit 0. Recorded as NOT MEASURED until it was actually measured, never as a pass.

Build, tests and types (heavy runs serialized through scripts/pm/os-verify-lock.sh; each verdict below is the wrapper's own VERDICT command-exit line, never a bare $?):

turbo build, closure of cli + metadata-protocol + objectql   57/57 tasks   VERDICT command-exit 0
typecheck, all three affected packages                                     VERDICT command-exit 0
  (each package's script name echoed: metadata-protocol / objectql / cli)
@objectstack/objectql          291 files / 4877 tests passed               VERDICT command-exit 0
@objectstack/metadata-protocol 172 passed + 2 skipped / 2473 passed        VERDICT command-exit 0
@objectstack/cli --project unit        190 files / 2644 tests passed       VERDICT command-exit 0
@objectstack/cli --project integration, the touched file
  platform-migrations-arming.integration.test.ts   1 file / 6 tests        VERDICT command-exit 0
@objectstack/cli test/vitest-tiers-partition.test.ts  1 file / 22 tests    VERDICT command-exit 0

The CLI integration tier was run because the diff touches an integration-tier file — its header comment — rather than being declared to CI.

Lint — the full repository scan, so no narrowing needs proving:

pnpm exec eslint . --no-inline-config --format json
  population selected by eslint's own config: 6466 files
  0 errors, 0 warnings, exit 0

Type-aware linting is not enabled anywhere in eslint.config.mjs (no parserOptions.project, no projectService, no typed rules), which the config states itself with its own recorded positive control — so a comment-only diff cannot move any other file's verdict either way.

Byte hygiene: grep -naP for control characters over the five touched files plus the changeset — clean; check:nul-bytes exit 0.

Acceptance notes

Noted, not filed:

  • docs/audits/2026-06-handwritten-docs-accuracy-followups.md:260 records, in the present tense, that createStandaloneStack defaults environmentId to 'proj_local' while the CLI defaults to 'env_local', and closes "Reported for awareness only; no doc change warranted". [finding] the default/local-dev environment id has three spellings — proj_local, env_local and default — and one consumer deliberately accepts two of them #13366 resolved exactly that mismatch, so the entry is a dated audit note whose subject is now settled. It is outside this card (which enumerates three packages, not docs/audits/), and a dated audit log going stale is a property of a dated audit log, not a defect. Successor: the next docs-accuracy-audit round, which owns that tree.
  • packages/rest/src/rest.test.ts and packages/cloud-connection/src/cloud-connection-plugin.ts hold proj_local as a real value, not prose — a test fixture id and a live sentinel arm that deliberately accepts both spellings. Correctly untouched under this card's comments-only ruling; neither is a finding.

Generated by Claude Code

… the standalone stamp as `proj_local`

#13366 completed the v5.0 `project` to `environment` rename at the two stamps
it had not reached (`runtime/src/standalone-stack.ts`, `metadata/src/plugin.ts`);
both now stamp `env_local`. Six comments in three other packages still described
the old value.

Judged per site rather than search-and-replaced:

- Five sites whose verb describing the stamp is present indicative — they
  describe today's tree, and two of them point the reader at
  `standalone-stack.ts` to go look — take the current spelling `env_local`.
- `cli/src/utils/schema-migrate.ts` names `'proj_local'` as the value the
  historical #9380 deduction consumed, so the literal stays and its
  present-tense relative clause moves into the past, with today's spelling
  named beside it.

The causal claim at every site is about PRESENCE, not spelling: the retired
gate read `environmentId === undefined`, so it would have misfired identically
under either literal. That reading is preserved at all six.

Comments only: 21 of 21 changed lines are comment lines. No behaviour, no
export, no assertion reads either literal.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XTBcV7zZHmokdyQgXjbyEU
…the corrected comments

Graded by measurement rather than by the "comments only" shape. Built the three
packages and grepped the paths their `files[]` actually ships, with a positive
control:

  @objectstack/metadata-protocol  dist/index.d.ts, dist/index.d.cts   HIT
  @objectstack/objectql           dist/index.d.ts, dist/index.d.mts   HIT
  @objectstack/cli                dist/utils/schema-migrate.js        HIT
  positive control `runPlatformMigrations` / `bootSchemaStack`        HIT
  old spelling `standalone stack stamps `'proj_local'`` in dist       0

Two of the six sites are TSDoc on exported interface members, so they land in
the shipped declaration files; the CLI site lands in shipped JS because that
package builds with `removeComments` unset. All three packages are public and
ship `dist`, so `skip-changeset` — which is for a diff that publishes nothing
from any released package — does not describe this diff.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XTBcV7zZHmokdyQgXjbyEU
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tests tooling labels Sep 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 3 package(s): @objectstack/cli, @objectstack/metadata-protocol, @objectstack/objectql, touching 7 documentable anchor(s).

5 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/data-modeling/drivers.mdx (via env_local (literal, a string literal in AssembleMetadataProtocolOptions; a string literal in ObjectQLPluginOptions; a string literal in assembleMetadataProtocol; a string literal in bootSchemaStack))
  • content/docs/deployment/cli.mdx (via env_local (literal, a string literal in AssembleMetadataProtocolOptions; a string literal in ObjectQLPluginOptions; a string literal in assembleMetadataProtocol; a string literal in bootSchemaStack))
  • content/docs/deployment/seed-tenancy-repair.mdx (via proj_local (literal, a string literal in AssembleMetadataProtocolOptions; a string literal in ObjectQLPluginOptions; a string literal in assembleMetadataProtocol))
  • content/docs/deployment/single-project-mode.mdx (via env_local (literal, a string literal in AssembleMetadataProtocolOptions; a string literal in ObjectQLPluginOptions; a string literal in assembleMetadataProtocol; a string literal in bootSchemaStack))
  • content/docs/kernel/services-checklist.mdx (via assembleMetadataProtocol (symbol, a top-level function))
What this run could not see
  • the SDK route bridge reached 60 of 215 client-bound route-ledger rows — the other 155 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 155: 0 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 55 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 100 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

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

Which tree this was computed on

This run read content/docs from 743cdd284c17611932aa342afb66b5ce5b3aa813 — the merge of head 74bec1b00f86d90d27554aa375be7a578d01bcfa into base ab450f49a154859630dee81aeb1ba86d9665100f, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 743cdd284c17611932aa342afb66b5ce5b3aa813 && git checkout 743cdd284c17611932aa342afb66b5ce5b3aa813
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin ab450f49a154859630dee81aeb1ba86d9665100f 74bec1b00f86d90d27554aa375be7a578d01bcfa && git checkout -B drift-repro ab450f49a154859630dee81aeb1ba86d9665100f && git merge --no-ff 74bec1b00f86d90d27554aa375be7a578d01bcfa

node scripts/docs-audit/affected-docs.mjs --json ab450f49a154859630dee81aeb1ba86d9665100f

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs ab450f49a154859630dee81aeb1ba86d9665100f → pass the list as
args.docs, on the commit named under Which tree this was computed on.

@os-sam
os-sam marked this pull request as ready for review September 10, 2026 04:44
@os-sam
os-sam enabled auto-merge September 10, 2026 04:45
@os-sam
os-sam added this pull request to the merge queue Sep 10, 2026
Merged via the queue into main with commit 8c9bd8f Sep 10, 2026
40 of 41 checks passed
@os-sam
os-sam deleted the claude/issue-15202-proj-local-stale-comments branch September 10, 2026 05:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] six comments in three packages describe the standalone stamp as proj_local after the #13366 rename lands

2 participants