Uh oh!
There was an error while loading. Please reload this page.
test(rest): judge every authored page that teaches the meta state route, not a hand-kept list of two - #14769
Merged
os-trump merged 4 commits intoSep 3, 2026
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Preserved from the previous agent's uncommitted working tree after a container restart. Kept or reverted together with the ci.yml change it pins — justification is the next step, not settled by this commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
…aching-sites-discovered-population
… base Two corrections, both re-measured on this tree rather than inherited: - The cited base was 4d0d944 and the tree is now 7a17f3b; the population is re-derived there (721-file corpus, three files on the REST wire path). - The header read the triaged "six files" as if the file's own net produced it. It does not: that count comes from a LINE-scoped sweep, and the three extra files name a DIFFERENT `/meta/object/...` route on a line that also contains the word "state", with no `/state/<field>` tail. That is exactly the sixth PREDICATE_CASES entry, so the distinction is already pinned. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
os-trump
marked this pull request as ready for review
September 3, 2026 00:24
os-trump
enabled auto-merge
September 3, 2026 00:24
Uh oh!
There was an error while loading. Please reload this page.
os-trump
deleted the
claude/issue-14561-teaching-sites-discovered-population
branch
September 3, 2026 02:29
This was referenced Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#14561
TEACHING_SITESinpackages/rest/src/meta-state-route-doc-spelling.test.tswas a hand-maintained two-file list standing in for a fact already on disk — the same defect class the test itself exists to catch, and it had already gone stale. The population is now discovered: the test asks git for the authored-prose corpus and judges every file that mentions this route on the REST wire path.Per triage's ruling (comment 5514084399), this implements conditional presence over a discovered population and deliberately does not build the negative plural scan — that half is settled by design, because the runtime's
/metadispatcher still matches both literals, so the plural is refused by a REST-fronted deployment and still answered whereverdispatch()is the front door (maintainer re-weigh, 2026-08-17 item 3, with its own pin suite).The gap was live, and this proves it rather than asserting it
Measured on the merged base
7a17f3bf, over a 721-file corpus: three files carry this route on the REST wire path. Two were the hand-kept list. The third —docs/qa/platform-checklist/areas/api-backend.json— carries the wire path three times with concrete values, and spells it canonically by luck, not enforcement.The rollback arm below is the demonstration: with that page rewritten to the retired plural, the pre-change test passes (4 passed). The new one reds, naming file and line.
Scope: four non-test files, each justified or reverted
The dispatch asked for a named forcing mechanism per file, or a revert. All four are kept; none is kept merely because a previous agent touched it.
scripts/cross-package-test-inputs.mjsturbo.jsoncheck:cross-package-test-inputs(Layer B).github/workflows/ci.ymlcheck:ci-filter-parity(Layer C)scripts/check-ci-filter-parity.mjs--self-testpingot 16Each was reverted to
origin/mainindividually, with the revert proved on disk by blob identity and restored under atrap … EXIT INT TERMon absolute paths; the tree ended with an emptygit diff HEAD.Quoted verdict lines:
The declaration itself is the interesting one: reverting it leaves the gate GREEN (exit 0). The detector cannot see this read — the corpus is composed by spreading a
constarray into agit ls-filesargv, which is not one of the spellings AGENTS.md publishes. That is the documented "unseen read ... which means no declaration, silently". So the declaration is not gate-forced; it is forced by the rule and by the mechanism, measured directly:Undeclared,
@objectstack/rest#testhashes 208 inputs, adocs/edit does not move its hash, and the cache replays a green over the very corpus the test now judges — #7802's shape, one layer up.packages/types/src/driver-error-classification.callers.test.ts:79states the same chain independently: "for a NEW top-level root, a matching entry in ci.yml'scrosspkg:filter —check-ci-filter-parity.mjsis the gate that says so."The widening is real, and it is stated rather than smuggled
content/**,docs/**andskills/**are declared as this package's cross-package input radius.content/**andskills/**were alreadycrosspkgmembers;docs/**is a genuinely new top-level root — the first declaration to reach pastdocs/audits/..., which the WIDTH note inci.ymlhad recorded as declined precisely because no declaration reached it. Price, charged to every docs PR: a diff under those roots now schedules Test Core and re-runs this package's suite (its own package set, not the workspace).I did not widen further, and the radius is deliberately the roots rather than today's matching files: re-narrowing to the matches would be a second hand-kept list wearing the radius' clothes, and the next page to teach the route would land outside it.
Independence
Deriving the population from the same regex that judges it costs the pin the second opinion a hand-written list gave for free. Two mechanical answers, both in-file:
PREDICATE_CASES(whole tiny inputs whose verdict is known by construction — three spellings the net must catch, four shapes it must not claim, including the dispatcher spelling that marks the population boundary), and a requirement that the discovered population still contain both named sites, so a net that goes blind reds.Verification
api-backend.jsonrewritten to the retired plural, proved on disk (canonical-spelling lines 4 to 0, plural lines 0 to 4): 1 failed, namingdocs/qa/platform-checklist/areas/api-backend.json:668twice and:734. (3) same plural corpus, test rolled back toorigin/main: 4 passed — the gap, demonstrated. Both mutations restored by blob identity under a trap;git diff HEADempty.content/docs/protocol/objectql/state-machine.mdx,docs/qa/platform-checklist/areas/api-backend.json,skills/objectstack-automation/SKILL.md), all canonical.packages/rest— dependency closure built first;typecheckexit 0, and itscheck:test-typecheckleg compiles the test layer under the siblingtsconfig.test.json; the edited file is confirmed present in that program via--listFiles(1 hit / 672 files — it is absent from the default project, which is the documented sibling-tsconfig pattern, not a hole). Full suite: 173 files, 2884 tests passed.773f0d0d99(dispatch-gates --commands, exits captured before any pipe): 56 gates, 53 green, 0 red, 3 NOT MEASURED —check-test-completeness,check:dual-build-cjs-loadsandcheck:type-check-debtall exit 3 = PREREQUISITE NOT MET (they need a full repo build or a savedturbo run testlog). Quoted: "⛔ This is NOT a pass: nothing was measured."pnpm lint— exit 0, no findings. Not narrowed.scripts/pm/os-verify-lock.sh. The turbo dry runs executed no task and were run unlocked — declared.No changeset: this publishes nothing from any package (a test file, two CI-internal scripts,
turbo.json,ci.yml), which is theskip-changesetcaselint.ymlnames in its own prose.Attribution footer conflict is filed as #14663 and is not re-filed here.
🤖 Generated with Claude Code
https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Generated by Claude Code