Skip to content

chore(docs,scripts): system-context page states no census totals; the census gate keeps the register - #22950

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-22927-census-drop-counts
Oct 12, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-22927-census-drop-counts

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #22927
Clause-②: no

Executes ruling letter B on #22927 (comment 6117410296): the CI-checked statistics leave content/docs/permissions/system-context.mdx; "every elevation site is registered" (POPULATION) and "every anchor resolves" (RESOLUTION) stay enforced, unchanged, in the required Lint & Repo Gates.

What changed

File Change
content/docs/permissions/system-context.mdx The headline, the plugin-sharing sentence, the "no split" ruling's argument and the maintenance note are rewritten without exact numbers ("over a hundred sites across some twenty packages"; node scripts/isystem-census.mjs for a live count). The CI-checked figures leave the decomposition table, which is split into a dated raw-text snapshot (the six figures that were never compared, unchanged) and a numberless list of census steps. Every register row and every anchor is untouched. The "no split" decision is unchanged; only its wording moved.
scripts/check-system-context-census.mjs DECLARED_COUNTS, regenerateDeclaredCounts, carryOnwardRowCount, the two count helpers and the COUNTS check are deleted. --fix now refuses with exit 2 and says why (nothing on the page is generated) instead of rewriting numbers. POPULATION, RESOLUTION, CLASSIFICATION, the row-reference check and the dated-decomposition presence check are unchanged.
.gitattributes The page leaves merge=os-regen; the page's comment block is rewritten to say it is plain prose now and why.
package.json gen:system-context-census is deleted (callers below).
scripts/regen-artifacts.mjs The page's REGEN_ARTIFACTS row goes with its route (a short tombstone comment stays); the mixed docblock and the content/docs/permissions/** ledger entry stop saying the page is routed.
scripts/pm/os-regen-merge.sh The page's OS_REGEN_CLASSES row goes; the self-test drives its mixed limb on a synthetic pattern while no real pattern is mixed (details below).

Size: 6 files, +289 / -878 against the merge base (net -589). The card estimated -200 to -400.

Measurements behind the file list (dispatch hypotheses H1 to H5)

  • H1, same-day churn. Every count sentence was located by content at 1bd612bd6, then origin/main was merged once (e357a441c, two commits, neither touching these six files). Open PR fix(security)!: under a wall a catalog-carrying package is the platform operator's — install-local and the /packages delete refuse tenants (ADR-0131 D3) #22935 also edits the page; it had not landed when this was opened.
  • H2, importers. git grep at 1bd612bd6: DECLARED_COUNTS, regenerateDeclaredCounts and carryOnwardRowCount have no importer outside the gate (two prose mentions only: the page and a comment in scripts/regen-artifacts.mjs). The only symbol anchor into the gate from elsewhere is scripts/check-system-context-census.mjs#UNENFORCED_TEXT_COUNTS, cited twice by scripts/check-tenant-audit-census.mjs as the precedent for its own maintainer-ruled enforced/unenforced split; that export, its present-and-dated check and the quoted paragraph are kept, so the sibling is not touched. Self-test batteries: counts (6 cases) and CRITERION (2) tested only the counts and are deleted; the same criterion, behaviourally (3) is renamed the dated decomposition: present and dated, never compared with the same three cases; the POPULATION case under the contract still reds no longer asserts a headline count; the 8-case --fix regenerates battery is replaced by a 4-case --fix is retired battery that runs the flag as a child and asserts exit 2. The roster floor moves 18 to 16 for the two deleted batteries.
  • H3, what leaving the route requires. check:merge-driver (git-merge-regen.mjs --self-test) reconciles .gitattributes with REGEN_ARTIFACTS both ways and requires every gen:* script to have a disposition, so the page's row had to go with its route and gen:system-context-census had to go or gain a NOT_DRIVER_MANAGED entry. Separately, bash scripts/pm/os-regen-merge.sh --self-test (a step of the required Lint & Repo Gates job, not in the derived family list) holds OS_REGEN_CLASSES equal to .gitattributes and to the driver's mixed rows: measured red with the route removed (2 cases: the classification table and its control). The page was the only mixed row, and that self-test pinned at least one mixed pattern, so with none left it now drives the same fixture and the same two discriminating mutations on a synthetic pattern (docs/fixture/mixed-census.mdx), and the control's third leg injects that synthetic route so it still fires instead of comparing empty to empty. All cases pass after the change, the mutations included. git-merge-regen.mjs needed no edit: its mixed end-to-end case already reports "no mixed rows declared, nothing to prove", by design.
  • H4, callers of gen:system-context-census. package.json itself, the page's REGEN_ARTIFACTS row (gen field), the page's own prose, and comments in scripts/pm/os-regen-merge.sh and in the gate. No workflow, skill, AGENTS.md line or other script runs it. Deleted rather than turned into a live-count command: the live count already has a direct command (node scripts/isystem-census.mjs) and the gate's pass line prints it on every run, and a gen: name that writes nothing would still need a merge disposition for a script that generates nothing.
  • H5, size. The diff shrinks (net -589).

A consequence of removing the counts, measured

Probe at 1bd612bd6, driving the gate's evaluate() with the real page, census and sweep, plus or minus one read in a symbol the page already anchors (packages/objectql/src/engine.ts#insert, two reads):

before  +1 read in that symbol: 5 problem(s) [declared-count]  (headline-sites 130 vs 131, ...)
before  -1 read in that symbol: 5 problem(s) [declared-count]
after   +1 read in that symbol: 0 problem(s)
after   -1 read in that symbol: 0 problem(s)

So adding or deleting one of several reads inside an already-anchored symbol no longer reds anything. Before, it reddened only the counts, and the gate's own prescription for that red was the generator, which rewrote the numbers and required no row; POPULATION has always worked at symbol granularity. A read in a symbol no row anchors still reds, and a symbol whose last read is gone still reds through CLASSIFICATION. The page's precision callout and the "What CI holds" section now state this hole for additions as well as deletions, and the gate header records the probe. Closing it is the span-aware resolver the gate header already names as its own card.

One correction in a rewritten sentence

The plugin-sharing sentence said "The largest single consumer — 17 of the 130 sites"; only the numbers were checked. Measured at 1bd612bd6 (node scripts/isystem-census.mjs --json, reads per package): packages/runtime 26, packages/plugins/plugin-security 21, packages/plugins/plugin-sharing 17. It now reads "One of the largest consumers of the flag".

Deviations from the claimed file surface

  • Two files beyond the four claimed, scripts/regen-artifacts.mjs and scripts/pm/os-regen-merge.sh: both are required by the route removal the ruling orders (H3), each red without its edit.
  • Page edits beyond the four sentences and the maintenance note, each forced by the ruling's headline or made false by it: the info callout said every count is checked by CI; the precision callout said one deleted read "may not" red (it now does not, for additions too); the CI-checked figures in the decomposition table (the table is split, the six dated figures unchanged); "9 of the 59 anchored files" (a checked figure); "a site that vanishes takes the census total with it"; the Counts row of the checks table (replaced by a Dated snapshot row, since that check still runs); one sentence naming DECLARED_COUNTS; and the declarations paragraph, which described "the enforced declarations row".

Gates

Run on the final head 9354a731e, derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (the same 69 families as the dispatch's lead), plus bash scripts/pm/os-regen-merge.sh --self-test.

68 of 69 derived families exit 0 at 9354a731e; the record reconciles with node scripts/pm/dispatch-gates.mjs --ran: "69 derived, 68 run, 1 NOT-MEASURED, 0 UNRUN". bash scripts/pm/os-regen-merge.sh --self-test also exits 0 ("all cases pass"; before its edit, 2 cases failed: the classification table and its control).

  • NOT MEASURED: pnpm check:dual-build-cjs-loads. Reason: it loads every package's built dist/, and this worktree built only the @objectstack/lint and @objectstack/client-react closures (exit 3, the gate's own PREREQUISITE NOT MET). The diff touches no package source, manifest or build config.
  • Partial: pnpm check:dts-closure and pnpm check:sourcemap-no-sources-content passed over the 36 packages built here, not the whole workspace.
  • node scripts/check-system-context-census.mjs: "OK — 130 elevation read sites in 20 packages across 59 files, living in 110 symbol(s); the page cites 123 symbol(s) against 123 required, over 146 anchors and 7 file-level citation(s); 21 declared non-read; 9 file(s) hold more than one read in one symbol (the declared precision loss); 20 row reference(s) resolve to their keyed row, 0 declared unheld." Its --self-test: "all cases passed" (16 batteries). --fix: exit 2, "RETIRED".
  • pnpm check:merge-driver: "all 42 generator(s) across 82 manifest(s) have a recorded disposition", "0 mixed row(s) name a comparator that exists and discriminates", "merge driver wiring is consistent (37 path(s) deliberately excluded)".
  • pnpm --filter @objectstack/spec run check:docs: "226 generated files in sync". pnpm check:role-word caught a reserved word in the first draft of one new sentence; reworded, now exit 0.
  • ESLint, narrowed to the two changed .mjs files (the other changed files match no files glob in eslint.config.mjs): 2 files linted by the --format json count, 0 errors, 0 warnings. The config enables no type-aware linting (no parserOptions.project), so this diff cannot move a verdict on an untouched file. The repo-wide pnpm lint is CI's.
  • No package is touched, so no package test or typecheck is owed; the two builds ran only to give build-reading gates their input.

Acceptance notes

Observations, not defects; nothing filed.

  • scripts/git-merge-regen.mjs: the line-anchors comparator and its comments name this page as the generated case; no row uses it now. Kept on purpose (regen-artifacts.mjs keeps mixed for the next mixed artifact). Carrier: none.
  • Comments in scripts/doc-line-anchors.mjs, scripts/check-lockstep-package-count.mjs, scripts/check-regen-pending.mjs and docs/audits/gate-census-2026-09.md describe the page's generated anchors or counts. They are history or dated audits and are left as written. Carrier: none.
  • Line 23 of the page still says "in twenty packages": a round prose figure, never CI-checked, left alone.

Generated by Claude Code

The four count-carrying sentences, the maintenance-table note and the
CI-checked decomposition figures are rewritten without exact numbers; a live
count is `node scripts/isystem-census.mjs`. Every register row and anchor
stays. The plugin-sharing sentence no longer claims "largest": measured, it
is the third (runtime and plugin-security hold more reads).

Claude-Session: https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2
Co-authored-by: Claude <noreply@anthropic.com>
…ing --fix

The population, resolution and classification checks are unchanged; the
dated raw-text decomposition stays present-and-dated, never compared.
`--fix` now refuses with exit 2: nothing on the page is generated.

Claude-Session: https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2
Co-authored-by: Claude <noreply@anthropic.com>
Nothing on the page is generated any more, so its .gitattributes route,
its REGEN_ARTIFACTS row and its OS_REGEN_CLASSES row go, and so does
gen:system-context-census (its only callers were that row and the page).
The page was the one MIXED row; os-regen-merge's self-test now drives its
mixed limb on a synthetic pattern while no real pattern is mixed.

Claude-Session: https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/xl dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation labels Oct 12, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 12, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 12, 2026 05:34
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 12, 2026 05:34
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 12, 2026
Merged via the queue into main with commit 5f4e8a5 Oct 12, 2026
41 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-22927-census-drop-counts branch October 12, 2026 06:51
marchtian pushed a commit that referenced this pull request Oct 12, 2026
Resolve content/docs/permissions/system-context.mdx: main's count-free
prose (#22950), this branch's row 55b; no count lines.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015JgoXpZUGtNxnMDvRZsKzP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/xl skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants