Repository navigation
docs(qa-checklist): two items' knownGaps prose still says the validator does not resolve provisioning.use — it now does #10809
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Aug 21, 2026 huangyiirene commented
on Aug 21, 2026 CollaboratorMore actionsTriage:
pm:queue+documentation, type Task (checklist area files → devx). Sequencing note for the devx seat, from the card's own analysis: if #10593's gap-2 ruling (cross-area recipe reuse) is imminent, dispatch this after it to pay one edit instead of two; if that decision lingers, dispatch standalone — the "unresolved by the validator either way" clause is actively false today and reads as permission for an edit the gate now rejects. Both touched items owe arevisionbump +historyentry per the checklist README (enforced bycheck:platform-checklist).
Generated by Claude Code
claude commented
on Aug 21, 2026 claudeboton Aug 21, 2026 – with ClaudeContributorAuthorMore actionsClaim:
/pm-dispatchdomain:devx execution seat.
Session:session_01DdCnBGcHeufjrq7drTD3wt· Branch:claude/issue-10809-knowngaps-provisioning-prose· Worktree:objectstack-issue-10809
Container & model:S,mode:subagent,model: opus
File surface:docs/qa/platform-checklist/areas/records-forms.jsonand the sibling item the card names.Sequencing question — answered, so you do not have to wait
Triage said: dispatch after #10593's gap-2 ruling if that ruling is imminent, otherwise standalone. It is not imminent — gap 2 has been with the maintainer for hours with no movement, and it is a convention decision with no deadline.
⇒ Dispatch standalone. The deciding reason is the card's own: the clause "unresolved by the validator either way" is actively false today, and it reads as permission for an edit the gate now rejects. A stale permission is worse than a stale fact.
Standing constraints
- ⛔ Governed, human-merge-only:
docs/adr/**,.claude/**,skills/**,AGENTS.md,CLAUDE.md— propose wording in the report. - ⛔ Never edit
content/docs/releases/**. ⛔ Nevergit stash—refs/stashis shared by every worktree of the repo. ⚠️ A pipe swallows the exit code. Capture ascmd > log 2>&1; ec=$?.⚠️ ⭐ [finding]pnpm --filter <typo>exits 0 with "No projects matched the filters" — a whole verification round can be fictitious and read as green #10853:pnpm --filter <name>that names no package printsNo projects matched the filtersand EXITS 0. Verify your filter matched — a negative control (--filter @objectstack/definitely-not-a-package) is the cheap way; two agents used it successfully today.⚠️ The shared checkout at/home/user/objectstackis STALE. Measure againstorigin/mainor your own worktree.⚠️ dispatch-gatesis blind to bothscripts/**gates — runcheck:entry-guardandcheck:parse-guardby hand.⚠️ Apply labels additively, never a whole-set PUT, and read back after the size labeler runs.⚠️ mainhasConsole Pin Gatered for a known unrelated cross-repo reason (p0: main is RED — #10695 retired six spec/ui theme schemas that the PINNED objectui still imports, so Console Pin Gate cannot build the SPA #10856) — non-blocking, ⛔ not yours.- ⭐ State the predicted number of reddened cases before running an ablation, and treat a mismatch as a defect in your test, not noise — an agent found a vacuous self-test case that way today.
Report back to me; I review against GitHub and land it.
Generated by Claude Code
- ⛔ Governed, human-merge-only:
claude commented
on Aug 21, 2026 claudeboton Aug 21, 2026 – with ClaudeContributorAuthorMore actions{ "issue": 10809, "status": "done", "branch": "claude/issue-10809-knowngaps-provisioning-prose", "pr": "https://github.com/objectstack-ai/objectstack/pull/10883", "premise_still_valid": true, "summary": "Both stale clauses corrected to what is true today: a same-area `provisioning.use` resolves, a cross-area one fails check:platform-checklist. Each keeps its still-true first half (the mechanism is AREA-SCOPED) and drops the dead #7716/#7720 deferral; the cross-area SPELLING is deliberately not predicted, since that is the open half of #10593 and a guess would create the next stale permission. ONE CORRECTION TO THE CARD: the sibling clause is not on item search.rls-both-personas as the card's table states -- it is on the AREA-LEVEL recipe qa-contributor-bound-member in areas/search.json. Area recipes carry no revision/history (the lifecycle check in scripts/check-platform-checklist.mjs is item-scoped, and none of the four recipes in the tree has either field), so the 'both items owe a revision bump' obligation was re-derived rather than applied literally: records-forms.crud-roundtrip 5->6 for its own knownGaps edit, and search.rls-both-personas 4->5 because it `use`s the edited recipe, making its revision the only pin a run record can hold that text against. Its own steps/clauses/fixtures/provisioning are unchanged and its history entry says so, so no run verdict is invalidated. That judgment call is the one thing worth a reviewer's eye.", "tests": "All gates run at final commit af2e9ee9b4 (clean tree; changeset re-derived at that commit = the same 2 paths). HAND-RUN HALVES (not CI-wired), both before and after the edit, identical verdicts: `✓ checklist-select self-test: 17 cases pass.` / `✓ check-platform-checklist --self-test: 36 assertions -- ... `fixtures.provisioning.use` resolves against its own area and fires on a dangling one.` / `check-platform-checklist: OK -- 15 areas, 205 items (205 active); ... provisioning: 4 area recipes, 6 item references resolved (self-checks: 22 trap-vocabulary + 14 provisioning-resolve assertions).` Invariants match the pre-edit baseline exactly. EDIT PROOF: every one of the 5 anchors asserted to hit exactly once before writing -- the assert caught a real hazard (`\"revision\": 5,` occurs twice in the item span, as the field AND as history entry 5) and aborted with no partial write; re-anchored on the 6-space indent. Edits then proven by LOADING THE JSON and testing fields (22 assertions incl. revision==6, last-history-revision==6, stale text absent, area-scoped half preserved, provisioning.use unchanged), not by grep. A tree-walk confirmed zero stale clauses remain in live text; the only 'either way' hits left are inside the two history/change fields I wrote, which quote the old wording on purpose. ABLATION (predicted before running: exactly 1 reddened case naming the item): reverted crud-roundtrip to revision 5 with history's last entry at 6; mutation proven on disk (target anchor 1->0, replacement +1, parsed field read back as revision=5/last-history=6) -- gate exited 1 with exactly 1 error line: `✗ records-forms.json · records-forms.crud-roundtrip: \"revision\" (5) must equal the last history entry's revision (6) -- a semantic edit bumps both`. Matched the prediction. My parenthetical guesses at how many OTHER items carry revision 5 were mis-stated arithmetic on my part (line 11 had already become 6); the load-bearing counts were correct. RESTORE LEG run and proven: byte-identical to the commit (`git diff --quiet` clean) and all three halves green again. No build/dist is involved -- this validator reads the JSON from the worktree at runtime. DERIVED GATES (scripts/pm/dispatch-gates.mjs, no paths passed, 2 paths from merge-base 03d0dec47): `✓ doc authoring guard: 389 files clean -- no bare metadata literals.` and `✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 416 files / 1444 TS blocks judged clean by @objectstack/formula.` (this one first failed ERR_MODULE_NOT_FOUND because I skipped pnpm install in the new worktree, then needed `pnpm --filter '@objectstack/lint^...' build` -- both run through scripts/pm/os-verify-lock.sh, VERDICT command-exit 0, held 6s and 133s). HAND-RUN scripts/** pair the claim comment flagged dispatch-gates is blind to: `✓ check:entry-guard: 129 scripts/ file(s)` and `✓ check:parse-guard: 128 scripts/ file(s)`, plus `check-nul-bytes: OK (scanned 6295 text file(s); no raw ASCII control bytes)`. #10853 negative control run: `--filter @objectstack/definitely-not-a-package` printed `No projects matched the filters` and EXITED 0, while my real filter echoed `@objectstack/lint@17.1.0` + the script name, so the match is confirmed rather than assumed. CI at report time (single non-blocking snapshot, no polling): Check Changeset SUCCESS (skip-changeset applied), duplicate-claim guards SUCCESS, Console Pin Gate skipped; Lint & Repo Gates and the four Type Check jobs still in_progress -- per the dispatch, CI convergence is the PM's to review.", "open_questions": [], "out_of_scope_findings": [ "filed as #10885 (finding + tooling + domain:devx, unassigned, no pm:queue): area-level fixtures recipes carry no revision/history, so a semantic edit to a recipe's executable sequence silently re-validates the run records of all 6 items that consume one -- the exact failure the item-level revision mechanism exists to prevent, reachable through a door it does not cover. Hit directly here: there was no recipe revision to bump, which is why the consuming item had to be re-pinned instead. Adjacent to #10593 rather than inside it (that card is about the reference SPELLING; this is about versioning recipe CONTENT), and noted there that a shared _fixtures.json answer to gap 2 would change its shape." ] }
Generated by Claude Code
Follow-on from the gap-1 work on #10593 (the
provisioning.useresolve check). Filed unassigned; recording the drift, not claiming the work.What is now false
Two checklist items carry
knownGapsprose stating that the validator does not resolveprovisioning.usein either direction. As of the gap-1 check that is no longer true — a same-areauseis resolved, and a cross-area one fails.docs/qa/platform-checklist/areas/records-forms.jsonrecords-forms.crud-roundtripdocs/qa/platform-checklist/areas/search.jsonsearch.rls-both-personasprovisioning.usemust name a key in the item's OWN area fixtures block (README.md), and the validator does not resolve it either way (deferred at #7716, tracked #7720)"The first half of each sentence — the mechanism is area-scoped — stays true and is now load-bearing. It is the "either way" half that inverted.
Why it matters more than a stale footnote
It reads as permission. A future author following that prose is told the validator will not mind if they point
useat the other area's recipe key — and that spelling now failscheck:platform-checklist, naming the item. The prose invites exactly the edit the gate rejects.Why it was not folded into the gap-1 PR
Editing an item's
knownGapsis a semantic edit: it needs arevisionbump plus ahistoryentry perdocs/qa/platform-checklist/README.md, and the revision is what run records pin their verdicts to. Two items across two area files, each re-pinning its run history, is not a rider on a gate-tooling PR — and the dispatch for #10593 fenced area-file reshaping out of scope.Note on sequencing
Both sentences will be rewritten again by whatever answers gap 2 of #10593 (cross-area recipe reuse: a qualified
use, a sharedareas/_fixtures.json, or a ruling that recipes stay area-local). Doing this correction after that decision costs one edit instead of two. If gap 2 stays undecided for a while, do it standalone — a false statement in the ledger should not wait on a convention.Generated by Claude Code