describe loop and its fences: within-run abort, actionKey read gate, quoted {page} (Session B: DB-1..DB-4, plugin 0.39.0) - #19
Merged
Conversation
…quoted {page} (DB-1..DB-4; F-456, F-458, #10, #13; plugin 0.39.0)
DB-1 (#10): every capture.mjs --paginate fence quotes its --out value —
Windows PowerShell 5.1 consumes an unquoted {page} (measured: argv arrives
as `…-`). The setup canon states why beside the fence; capture's refusal for
a missing placeholder names the shell cause; check-doc-drift check 14 holds
the quoting (mutant 14j). Closes #10.
DB-2 (F-456): the describe-shape read predicate is one exported doc-lib
function, isDescribeRead(verb, cmd) — a describe-shaped catalog actionKey
admits on its own merits, the trailing word admits as before, a trimmed
catalog decides on the word. describe-batch and capture both compose it:
`cn chain` (describe-job-chain) and the unlisted sibling `re r execution`
(describe-execution) are describable and capturable. A committed sweep over
the shipped catalog pins the admitted set (25 at 1.0.9).
DB-3 (#13) + DB-4 (F-458): describe-batch aborts a domain after five
consecutive failed marks (marks stand), and aborts on the FIRST failed spawn
carrying the CLI's re-login sentence (doc-lib isAuthDeath, version-stamped
as a stale-facts tripwire) with nothing marked — the in-flight entry keeps
its status, a designer composite keeps its item pending. One additive summary
field, aborted: { reason: "consecutive-failures" | "auth", after, lastError };
budgetExhausted / moreRemaining / failures unchanged (contract). Setup Phase
5 names the within-run limit and both reasons, and sizes batches against the
nearer deadline and the slow end of observed rates. Closes #13.
Rulings (Bradley, 2026-09-14): first-sighting auth abort with no mark; one
aborted object with a reason enum; failed spawn AND phrase; all four re-login
literals via the shared sentence; the limit a constant of 5.
Review round (medium): 8 findings fixed — the auth prose overstated "nothing
marked"; domainProgress re-read at an abort; the designer per-entry abort
counter dropped; the designer-lane reference and MAINTAINERS' row updated;
a header splice; the auth classifier moved to doc-lib; the fake CLI's
controls refuse to run without their counter.
Bus: F-456 and F-458 FIXED with Fix/Class/Judge/Sibling sweep lines; the two
live arms banked in dev/VALIDATION.md for Session B-V.
BradleyDB
added a commit
that referenced
this pull request
Sep 15, 2026
…456/F-458 FIXED on the branch @ hb-20260914-01 [skip ci]
…on B VALIDATION sections CLEARED, walk + guard wiring recorded [skip ci]
BradleyDB
added a commit
that referenced
this pull request
Sep 15, 2026
…, F-458 VERIFIED on round-b-describe-loop @ hb-20260914-01) [skip ci]
…/ 3221226505) beside the shell-displayed codes (tester side observation, Session B-V)
This was referenced Sep 15, 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 free
to 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.
What
Session B of the September rounds (handoff plan items DB-1..DB-4): the describe loop and its fences. Plugin 0.39.0.
capture.mjs --paginatefence in the skills quotes its--outvalue (nine fences, five skills; the one--page-flag nonefence quoted for uniformity). The setup canon states the reason beside the fence;capture.mjs's refusal for a missing{page}now names the shell cause;check-doc-driftcheck 14 holds every paginate fence's{page}--outquoted (mutant 14j). Closes capture.mjs --paginate fences spell {page} unquoted — PowerShell eats it #10.doc-lib isDescribeRead(verb, cmd): a describe-shaped catalogactionKeyadmits on its own merits, the path's trailing word admits as before (describe shape orREAD_VERB_EXACT), a hand-trimmed catalog decides on the word alone.describe-batch.mjsandcapture.mjsboth compose it, socn chain(describe-job-chain) and the sibling the finding did not list,re r execution(describe-execution), are describable and capturable through both sanctioned routes. A committed sweep over the shipped catalog pins the admitted set at the pin (25 commands) so a future refusal is named at adoption time.describe-batch.mjsaborts a domain after five consecutivefailedmarks (a constant, not a flag), leaving every mark exactly as written. Closes describe-batch: abort a domain after 5 consecutive retryable failures #13.dist/core/auth/index.jsat 1.0.9 end with it;doc-lib isAuthDeath, version-stamped as a stale-facts tripwire) aborts on the first sighting with nothing marked: the in-flight entry keeps its status, a designer entry keeps its composite with the item pending, and the next invocation resumes as after a budget cut.aborted: { reason: "consecutive-failures" | "auth", after, lastError }, absent on a run that did not stop early;budgetExhausted,moreRemainingandfailureskeep their shapes and meanings (the setup skill branches on them — contract). Setup Phase 5's stop rule names the within-run limit and both reasons; batch sizing names the nearer of the shell timeout and the token's usable life and says to size against the slow end of observed rates; the manual per-asset path and the designer-lane reference carry the same auth exception.Why
Purpose and value per item (from the handoff plan, ranked by new-user deterrence):
{page}(measured: argv arrives as…-). Rank 1;good first issuecapture.mjs --paginate fences spell {page} unquoted — PowerShell eats it #10.describeCommandspawned through the whole asset list, and a deadline-ended batch wrotefailedonto healthy assets (17 on one live run, the auth error as their reason). Rank 2; routine for any ingest longer than a token's usable life.Design rulings (Bradley, 2026-09-14, recorded in the bus Fix notes): auth aborts on first sighting with no mark; one
abortedobject with a reason enum; failed-spawn AND phrase (a successful describe is never reclassified by its stderr); all four re-login literals via the shared sentence; the limit a constant of 5.Review notes
Fixtures landed before the fix and were red on the unfixed scripts (the designer auth arm reproduced F-458 exactly: the entry marked
failedwith the re-login literal).test/describe-batch.mjs(+29 arms: gate, catalog sweep, every-describe-fails stops at exactly 5 spawns counted from the fake's own log, F F F F S runs to completion, F F F F F S stops at 5, resume after abort, auth after two successes, the three sibling literals, four failures then auth, exit-0-with-phrase stays a success, designer per-entry counting, drilldown and template-spawn auth deaths,--upgradeprogress freshness),test/capture.mjs(+2),test/doc-lib-fixtures.mjs(+16 predicate arms),build/test-check-doc-drift.mjs(+14j),build/test-check-stale-facts.mjs(carrier stub).The PowerShell 5.1 judge for DB-1 was run for real on this machine: the unquoted audit fence is refused by capture ("needs a literal {page} placeholder"), the quoted fence writes three page files and reconciles.
/code-reviewmedium: 8 findings, all fixed (the prose overstatement of "nothing marked", a staledomainProgresssnapshot at an abort, an inconsistent designer per-entry counter, the designer-lane reference, MAINTAINERS' row, a header splice, the auth classifier's home, the fake's silent no-op). Dismissed with reasons in the F-458 Fix note.Verbatim battery from
validate-plugin.ymlanddocs-drift.yml: 0 failures locally; bothclaude plugin validate … --strictpass;npm run buildreproduces the committed output.Banked live arms (dev/VALIDATION.md, Session B, for the tester round on the minted token): (1) F-456 — deep-ingest of the connectors-chains lane through the RECORDED describe with no
--command, no manual fallback, no--normalize, plus one chain through the capture helper; (2) F-458 / describe-batch: abort a domain after 5 consecutive retryable failures #13 — one describe-batch run PAST the token half-life from a terminal, readingaborted.reason: "auth"withfailures: []in the summary and zero auth-failed entries in the manifest, then a resume aftergs-admin login; optionally describe-batch: abort a domain after 5 consecutive retryable failures #13 live on a small domain with a mismatched describe (stops after exactly 5 spawns).Version collision to watch: draft PR change-request: a Before-building read, and the admin's job in the operating model (plugin 0.39.0) #17 also stages 0.39.0; whichever merges second rebases its bump and CHANGELOG entry.
Plugin version bumped in
.claude-plugin/plugin.jsonwith a CHANGELOG entry (user-visible plugin change).Safety boundary: this PR does not touch
hooks/gs-admin-guard.mjsor ask-rules generation. The read-only gate's admit set widened by exactly two catalog describe actions, both non-mutating GET reads; the endpoint gate is unchanged and pinned independent of the admit.Skill edits: cross-document consistency checked (operating model, managed CLAUDE.md block, cheatsheet renderer — none states the batch summary or the fence quoting; setup, its two references, MAINTAINERS and the CHANGELOG agree), and the changed skills are walked in the tester round (Session B-V): setup (slash-only, the user types it); the fence-only edits in audit, deprecate, email-report, refresh. Session / verdict: B-V, pending.
No test or dev step touched real gs-admin state (
~/.gs-admin/, live tenants) — fixtures only; the PowerShell judge ran a scratch fake CLI.No tenant/instance/org-specific data in commit messages or this PR body.