Skip to content

fix(claude-ops,review,source-control): work the week-32 platform changes against doctrine and gate the archive source - #2180

Merged
kyle-sexton merged 2 commits into
mainfrom
work/2176-auto
Aug 10, 2026
Merged

fix(claude-ops,review,source-control): work the week-32 platform changes against doctrine and gate the archive source#2180
kyle-sexton merged 2 commits into
mainfrom
work/2176-auto

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Closes #2176

Summary

Week 32 (v2.1.220–v2.1.224) landed after this repo's verification stamps, which cluster
2026-08-03/04/08. Every checklist item was worked against the source page's own current wording,
all fetched 2026-08-10. Four items moved doctrine; five are checked-no-change; one was verified
through a non-primary route and is flagged as such. Nothing is silently dropped.

Fix

Auto mode becomes the default on 2026-08-14 (item 1, time-sensitive). Nothing in this repo
assumed default permission mode — the permission-rule-hygiene convention and claude-config's
audit-permission-grants already treat auto mode as live. What was stale is the framing: the
convention described auto mode as a state a session enters, which makes its anti-patterns read
as latent. They are not. docs/conventions/permission-rule-hygiene/README.md gains a dated section
recording three things — a dropped grant is now the first run's outcome, not a later one;
"run it outside auto mode" is a downgrade rather than a remedy (kept only for the Agent-rule case,
which has no bare-command analog); and neither the drop list nor the project/local defaultMode: "auto" self-grant block changes. The claim is bounded to the plans the docs bound it to: the same
page still says provider-routed sessions (Bedrock, Google Cloud's Agent Platform, Microsoft Foundry,
gateway) "start in your defaultMode, which is Manual unless you change it."

The archive marketplace source gets a decision and a gate (item 2). Its platform floor is
transport-level only — HTTPS, no loopback/link-local/cloud-metadata hosts, enforced on every redirect
hop — and the sha256 that pins the bytes is documented as "Optional". Unpinned, one URL can
serve different content on every install with nothing to detect it: the mutable-remote-artifact
surface the plugin-acceptance security review denies by default. So the review now requires the
pin (docs/MIGRATION-PLAYBOOK.md, criterion 6), and scripts/validate-plugin-contracts.mjs enforces
it over .claude-plugin/marketplace.json rather than leaving it to a reviewer's eye. Recorded with
it: the digest doubles as the version when none is declared, so a repinned archive still needs a
version bump; and org distribution via claude.ai admin settings doesn't accept the source at all.
No entry uses archive today — the rule governs the first that does.

Two edits replace an incident with a rule. source-control's worktree skill justified moving git
calls out of pre-compute with one observed refusal from #1619, which invites a future author to
retest and fold them back. v2.1.224 documented the enforcement, so the constraint now cites it —
including that a command Claude Code "can't verify stays inside the worktree" is blocked on the same
footing as one that would really reach the main checkout, which is why narrowing the commands cannot
make the block safe again. And claude-ops' plugin-sync skill: an in-session /plugin install can
now activate itself, which reads like the skill's closing reload guidance went stale. It did not —
sync installs with the claude plugin install shell command, which "doesn't run in a session".
Recording why beats leaving the next reader to relax it.

Verification

# Item Disposition
1 Auto mode default 2026-08-14 Fixedpermission-rule-hygiene reframed from opt-in to default; scope bounded to Pro/Max/Team. No hook, guardrail, or skill assumed default mode (searched for prompt-guaranteed phrasings; zero hits).
2 Zip-archive archive source Fixed — security-review clause requiring the sha256 pin, plus a machine gate in validate-plugin-contracts.mjs. Gate tested both directions locally (unpinned entry fails, pinned passes, catalog restored).
3 Worktree isolation extended Fixed (docs) + checked-no-change (guardrails)guardrails ships no worktree-boundary guard, so nothing is redundant and nothing assumed the narrower behavior; its hooks gate dangerous git verbs, hook bypass, commit convention, hardcoded paths, and secrets. The source-control worktree skill's constraint is now grounded in the documented three checks.
4 PreToolUse auto-allow narrowed Checked, no change — no hook in this repo emits permissionDecision: "allow". The only permissionDecision producer is context-guard/hooks/zone-gate.sh, which emits "deny". Nothing relied on the old bypass.
5 /fork uses its own worktree Checked, no change — every fork reference in this repo is the Agent-tool subagent fork (session-flow:orchestrate, discipline:sweep-all, session-flow:handoff), not the /fork slash command. No doc states or assumes that /fork shares the original checkout.
6 Plugin activation on install Fixed — no plugin README tells users to restart (all use /plugin marketplace add + /plugin install), so nothing was stale there. The substantive point is the opposite of the obvious one and is now recorded in claude-ops context/scope-semantics.md: the new in-session activation does not apply to claude plugin install, so sync's reload guidance stands.
7 /review aliases /code-review Fixedplugins/review/README.md. The plugin's own commands are unaffected (0.18.0 already made the namespaced form the only one it registers); the README now names /review as a fourth spelling of the bundled reviewer so the plugin isn't abbreviated onto it.
8 Ultraplan removed Checked, left as-is (deliberate) — the one reference, docs/topics/context-engineering-claude-5/design/official-corroboration.md:355, is a topic-design doc: a record of what the corroboration sweep found when written, not a live instruction. Editing it would falsify the record rather than correct doctrine, and docs/topics/ is Contract tier where an edit invites the prune gate. Left intact.
9 CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY Verified current — but not from the primary page. See the caveat below.
200-subagent cap removal Out of scope, owned by #2169 (still OPEN). It edits the same sweep-all region; deliberately untouched here to avoid a conflict. Corroborated independently: the sub-agents page's concurrency section names only the concurrency and depth limits.

Item 9: what could not be verified from the primary source

env-vars truncated for a third time. The fetch reached CLAUDE_CODE_DISABLE_1M_CONTEXT and
stopped — alphabetically well before the MAX range — and the summarizer duly reported that "no
table rows exist whose variable name begins with CLAUDE_CODE_MAX". That is the exact false negative
the method rule exists to catch, and it reproduces the earlier failure rather than resolving it.

A different route reached the row. ericbuess/claude-code-docs is a verbatim mirror of these docs
whose docs/env-vars.md was last synced 2026-08-10T21:32:29Z — the same day (commit message
Update Claude Code docs - 2026-08-10 | Updated: … env-vars.md …). It carries the row unchanged:

CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY | Maximum number of read-only tools and subagents that can
execute in parallel (default: 10). Higher values increase parallelism but consume more resources

That matches plugins/discipline/skills/sweep-all/SKILL.md word for word, so the citation is
current, not drifted. Two corroborations that the mirror is both faithful and fresh: the same
file carries CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION as "Removed in v2.1.224 and now a no-op" — the
week-32 change #2169 is landing, which could only appear in a post-2.1.224 sync — and its
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS row agrees with the sub-agents page fetched directly here.

Stated plainly: this is a same-day third-party mirror, not code.claude.com. Strong evidence,
one rung below a primary read. No file changes on this item — the sweep-all text on main carries
no unverified marker (that marker lives in #2169's branch), so there is nothing here to correct. The
finding is posted to #2169 so its author can drop the marker.

Gates run (committed tree, base-ref form)

  • check-contract-slice-prune.sh --check-diff origin/main — pass ("leaves no path under docs/topics/")
  • check-changelog-parity.sh --check-bump origin/main — pass
  • check-skill-portability.sh origin/main — pass (2 skill files)
  • check-shell-portability.sh origin/main — pass (no shell files in scope)
  • check-contract-clause-coverage.py — pass
  • validate-plugin-contracts.mjs, generate-catalog.mjs --check, generate-cheatsheet.mjs --check — pass
  • markdownlint-cli2 over all 8 changed markdown files — 0 errors
  • check-changed-skills.sh origin/main — still running locally when this PR opened; CI is the authority

Version bumps: claude-ops 0.28.3→0.28.4, review 0.18.0→0.18.1, source-control 0.51.5→0.51.6.
The docs/ and scripts/ changes need none.

Related

…ges against doctrine and gate the archive source

Week 32 (v2.1.220-v2.1.224) landed after this repo's verification stamps, which
cluster 2026-08-03/04/08. Each item was checked against the page's own current
wording, fetched 2026-08-10; the ones that moved doctrine are here, and the rest
are recorded as checked-no-change in the PR rather than dropped.

Auto mode becomes the default permission mode for new sessions on Pro, Max, and
Team plans on 2026-08-14. Nothing here assumed `default` mode, but the
permission-rule-hygiene convention framed auto mode as a state a session enters,
which made its anti-patterns read as latent. They are not: after the switch a
grant is suspended on the first run, not a later one, and "run it outside auto
mode" now asks an operator to leave the default rather than decline an opt-in.
The convention says so, and bounds the claim to the plans it covers - the same
page still starts provider-routed sessions in `defaultMode`, Manual by default.

The new `archive` marketplace source needed a decision, not just a note. Its
platform floor is transport-level only (HTTPS, no loopback/link-local/metadata
hosts, on every redirect hop) and the `sha256` digest that pins the bytes is
documented as optional - so an unpinned entry lets one URL serve different
content on every install with nothing to detect it. That is the
mutable-remote-artifact surface the plugin-acceptance security review denies by
default, so the review now requires the pin, and `validate-plugin-contracts.mjs`
enforces it over the catalog instead of leaving it to a reviewer's eye. No entry
uses `archive` today; the rule governs the first that does.

The remaining two edits replace an incident with a rule. The worktree skill's
pre-compute constraint rested on one observed refusal, which invites a future
author to retest it; the isolation checks are documented now, including that a
command Claude Code "can't verify stays inside the worktree" is blocked on the
same footing as one that would really reach the main checkout - so narrowing the
commands cannot make the block safe again. And an in-session `/plugin` install
can now activate itself, which reads like `sync`'s closing reload guidance went
stale; it did not, because `sync` installs through the shell command, which does
not run in a session. Recording why beats leaving the next reader to relax it.

Refs #2176

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
@cursor

cursor Bot commented Aug 10, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@claude

claude Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 3m 37s —— View job


Review complete

  • Gather context (PR body, changed files list)
  • Review docs/MIGRATION-PLAYBOOK.md changes
  • Review docs/conventions/permission-rule-hygiene/README.md changes
  • Review scripts/validate-plugin-contracts.mjs changes (the new gate)
  • Review plugins/claude-ops/skills/plugins/context/scope-semantics.md changes
  • Review plugins/review/README.md changes
  • Review plugins/source-control/skills/worktree/SKILL.md changes
  • Review plugin.json/CHANGELOG.md version bumps for consistency
  • Post summary

Findings

None. I independently re-fetched all four cited pages today (permission-modes, plugin-marketplaces#zip-archives, discover-plugins, code-review#review-a-diff-locally, worktrees#how-claude-code-enforces-isolation) and checked every quoted string in the diff against the live text — all match verbatim, including the schema shape for an archive entry ("source": {"source": "archive", "url": ..., "sha256"?: ...}), the auto-mode default date/plan scoping, the provider-routed defaultMode carve-out, the three worktree-isolation checks, and the /review alias behavior.

scripts/validate-plugin-contracts.mjs (+270-294) — logic checked against the confirmed schema:

  • typeof source !== "object" correctly skips the common case ("source": "./plugins/<name>" is a bare string) and only inspects the nested-object shape archive actually uses.
  • source.source !== "archive" correctly ignores github/url/git-subdir/npm sources (also objects, but with a different discriminator).
  • /^[0-9a-fA-F]{64}$/ matches the documented "64 hex characters, uppercase or lowercase" and correctly rejects a missing field (String(undefined ?? "")"" → no match).
  • [catalog.plugins ?? []].flat() is the same defensive idiom already used at line 259 in this file for manifest[field], so it's consistent with existing style, not a one-off.
  • Confirmed wired into CI: scripts/validate-plugins.sh:16 already invokes this script, so the new check isn't dead code.
  • I could not execute the script myself in this sandbox (node/git fetch both required interactive approval that wasn't available here), so the PR's own "tested both directions locally" claim is author-claimed and unverified by me — my confidence here is from reading the logic against the doc-confirmed schema, not from running it.

Doctrine edits (MIGRATION-PLAYBOOK.md criterion 6, permission-rule-hygiene/README.md, scope-semantics.md, worktree/SKILL.md, review/README.md) — every quoted sentence traces to the live page and the surrounding prose accurately represents what the source says (no over-claiming, scope correctly bounded where the source bounds it, e.g. the Bedrock/Agent Platform/Foundry/gateway carve-out for auto-mode default, and org-sync's archive-not-supported note).

Version bumps / changelogs — all three patch bumps (claude-ops 0.28.3→0.28.4, review 0.18.0→0.18.1, source-control 0.51.5→0.51.6) are consistent with the doc-only nature of each change, and each CHANGELOG.md entry accurately summarizes its diff.

No architecture, error-handling, or maintainability issues found. No cross-file doctrine conflicts (grep -r '"archive"' shows only the two touched files reference the source type; no other doc restates the old "auto mode is opt-in" framing in a way this PR would leave stale within the changed-file scope).

Security-scoped concerns (trust/egress implications of the archive source type itself) are left to the dedicated security-review lane per this repo's REVIEW.md split.

@claude

claude Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 13s —— View job


Security review complete

  • Gather context (diff, changed files)
  • Review scripts/validate-plugin-contracts.mjs sha256-pin gate
  • Review docs/MIGRATION-PLAYBOOK.md criterion 6 addition
  • Review docs/conventions/permission-rule-hygiene/README.md changes
  • Review plugins/source-control/skills/worktree/SKILL.md changes
  • Review plugins/claude-ops/skills/plugins/context/scope-semantics.md changes
  • Review plugins/review/README.md changes
  • Review plugin.json / CHANGELOG.md diffs
  • Post findings

No security issues found.

This PR is almost entirely documentation/doctrine updates (permission-mode default, worktree isolation rationale, plugin-activation semantics, /review aliasing) plus version bumps and changelog entries. None of it touches trust boundaries, secrets, tokens, or executable surfaces beyond one script change:

  • scripts/validate-plugin-contracts.mjs (+26 lines): adds a build-time gate that fails validation if any .claude-plugin/marketplace.json entry with "source": "archive" lacks a 64-hex-character sha256 pin. This is a security-positive addition — it closes a mutable-remote-artifact gap (an unpinned HTTPS zip URL could serve different bytes per install with nothing to detect it) by requiring content-hash pinning before such an entry is accepted. The regex (^[0-9a-fA-F]{64}$) is anchored and bounded, so no ReDoS concern. The script only reads local repo files (readFileSync/existsSync on paths built from process.cwd() and fixed relative segments) — no attacker-controlled path or content crosses into it, and no entry in this repo's catalog currently uses archive, so the gate is currently inert but well-formed.
  • docs/MIGRATION-PLAYBOOK.md: adds the corresponding review criterion (prose only, no executable surface).
  • docs/conventions/permission-rule-hygiene/README.md, plugins/source-control/skills/worktree/SKILL.md, plugins/claude-ops/skills/plugins/context/scope-semantics.md, plugins/review/README.md: doctrine/prose edits reflecting upstream Claude Code documentation changes (auto-mode default date, worktree-isolation enforcement rationale, plugin-activation semantics, /review aliasing). No permission grants, hook contracts, or config schemas are loosened — if anything the worktree-isolation edit reinforces a fail-closed stance ("a command it can't verify stays inside the worktree" is blocked, not exempted).
  • plugin.json / CHANGELOG.md files: version bumps and changelog prose only.

No workflow files (.github/workflows/**) are touched in this PR, so GitHub Actions trigger/permission/injection concerns don't apply here.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d3fa164a47

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/conventions/permission-rule-hygiene/README.md Outdated
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude has reviewed this PR 2 times. The lane skips further automatic reviews after 5; deleting this comment resets the count.

… take the new default

Review on #2180 caught an over-generalization one paragraph below the quote
that disproves it. The section said a new session on Pro/Max/Team "starts with
the broad grant already suspended", but the quoted docs carve out two
populations: an operator who set a personal default keeps it unless they accept
the one-time switch prompt, and an organization-managed default is unchanged.
Those sessions keep the pre-switch behavior, so the anti-patterns stay latent in
them and a reader diagnosing a permission failure could be sent looking for a
dropped rule that was never dropped.

The claim now names the delimiter the quote already draws, and states what the
switch actually changes: the population starting in auto mode grows from
"whoever opted in" to "the default path plus whoever opted in". That is enough
to make authoring for the auto-mode case the only safe posture, which is the
section's real point, without asserting that every session on those plans is in
auto mode.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
@claude

claude Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 2m 27s —— View job


Code review complete

  • Gather context (PR diff, changed files, existing review comments)
  • Review docs/MIGRATION-PLAYBOOK.md changes
  • Review docs/conventions/permission-rule-hygiene/README.md changes (incl. Codex P2 finding)
  • Review scripts/validate-plugin-contracts.mjs gate
  • Review plugins/claude-ops/skills/plugins/context/scope-semantics.md changes
  • Review plugins/review/README.md changes
  • Review plugins/source-control/skills/worktree/SKILL.md changes
  • Review plugin.json/CHANGELOG.md version bumps for consistency
  • Post findings

Findings

None. This lane covers correctness, design, conventions, error handling, and maintainability (REVIEW.md); no security findings are reported here since this repo runs a dedicated security lane (already posted above).

Codex's P2 finding is already resolved. The inline comment on docs/conventions/permission-rule-hygiene/README.md flagged that the auto-mode "first-run" claim needed qualifying for sessions that keep a self-set or org-managed default. HEAD (50ca6b5, fix(docs): qualify the auto-mode first-run claim to the sessions that take the new default) already carries that fix — the current text reads: "Which sessions take it is exactly what the quote above delimits: one whose operator set no personal default, or who accepted the one-time switch prompt. A self-set defaultMode that the operator kept, and an organization-managed default, both stay as they were — those sessions keep the pre-switch behavior..." (permission-rule-hygiene/README.md#L40-L45). Nothing further to do on that thread.

scripts/validate-plugin-contracts.mjs (+270-294) — logic re-checked independently: the typeof source !== "object" guard correctly skips the current bare-string "source": "./plugins/<name>" form used by every existing catalog entry (confirmed via grep '"source"' .claude-plugin/marketplace.json), the 64-hex regex is anchored (no ReDoS surface), and String(source.sha256 ?? "") cleanly fails closed on a missing field. Consistent with the existing [x ?? []].flat() idiom already used at line 259 of the same file, so it's not a one-off pattern. I could not execute the script in this sandbox (no node/npx approval available), so I did not independently run the "tested both directions locally" claim from the PR body — treat that as author-claimed, not verified by me.

Doctrine edits (MIGRATION-PLAYBOOK.md criterion 6, permission-rule-hygiene/README.md, scope-semantics.md, worktree/SKILL.md, review/README.md) — structurally sound: the new MIGRATION-PLAYBOOK.md sub-bullet matches the existing sibling-bullet indentation under criterion 4, section/heading nesting in permission-rule-hygiene/README.md is correct, and cross-references (e.g. worktree/SKILL.md's "documented behavior" pointing at the new isolation-check citations, scope-semantics.md's "does not relax the reload guidance below") resolve to real content in the same file. I was not able to run markdownlint-cli2 myself in this sandbox (no local node_modules, and npx required approval that wasn't available) — the PR body's "0 errors" claim is author-claimed and unverified by me, though manual inspection found no obvious list/heading issues.

Version bumps / changelogsclaude-ops 0.28.3→0.28.4, review 0.18.0→0.18.1, source-control 0.51.5→0.51.6 are each consistent between plugin.json and the corresponding CHANGELOG.md ## [x.y.z] header, and each entry accurately summarizes its diff.

No architecture, error-handling, or test-coverage issues — this PR has no executable surface beyond the additive .mjs gate reviewed above, and the gate has no test file of its own (consistent with the rest of validate-plugin-contracts.mjs, which is asserted via the validate-plugins.sh CI wiring rather than unit tests).

@claude

claude Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 22s —— View job


Security review complete

  • Gather context (gh pr diff against origin/main, full changed-file list)
  • Review scripts/validate-plugin-contracts.mjs sha256-pin gate
  • Review docs/MIGRATION-PLAYBOOK.md criterion 6 addition
  • Review docs/conventions/permission-rule-hygiene/README.md (incl. the latest qualification commit 50ca6b5)
  • Review plugins/source-control/skills/worktree/SKILL.md
  • Review plugins/claude-ops/skills/plugins/context/scope-semantics.md
  • Review plugins/review/README.md
  • Review plugin.json / CHANGELOG.md diffs
  • Post findings

No security issues found.

Scope confirmed via gh pr diff against origin/main: 12 files, +184/-4, no files under .github/workflows/**. The only non-prose change is one script.

  • scripts/validate-plugin-contracts.mjs#L270-L294 — security-positive addition, not a risk. It closes a mutable-remote-artifact gap by failing validation when a .claude-plugin/marketplace.json entry has "source": {"source": "archive", ...} without a 64-hex sha256 pin.

    • Traced data flow end-to-end: root = process.cwd() → fixed relative path .claude-plugin/marketplace.jsonJSON.parse(read(...)). No attacker-controlled path construction, no exec/eval/shell-out, nothing written back to disk. All strings that reach fail() (entry.name, the relative path) only ever reach console.error — never interpolated into a shell command, file path, or template that executes, so no injection surface even though entry.name is catalog-author-controlled.
    • typeof source !== "object" || source === null correctly guards against the common bare-string "source": "./plugins/<name>" shape before touching .source, and against null before the .source property access (since typeof null === "object") — no crash-on-malformed-entry path that could turn a bad catalog into a silent pass.
    • Regex /^[0-9a-fA-F]{64}$/ is anchored, fixed-length, no nested quantifiers — no ReDoS. String(source.sha256 ?? "") turns a missing field into "", which correctly fails the match rather than throwing.
    • [catalog.plugins ?? []].flat() mirrors the existing idiom at manifest[field] ?? [] a few lines above in the same file (scripts/validate-plugin-contracts.mjs#L259 in the pre-PR file) — consistent handling of "field may be a single object or an array" across both call sites, not a one-off that could diverge in behavior.
    • The gate only requires the pin; it doesn't (and can't, at this layer) verify the pin matches the fetched bytes — that verification is the platform's job at install time per the quoted docs ("Claude Code verifies every download against it and refuses the install on a mismatch"). Correctly scoped: this script validates the static catalog contract, not runtime download integrity.
    • No entry in this repo's own .claude-plugin/marketplace.json currently declares "source": "archive" (every plugin here ships as a relative path), so the new branch is exercised only by future entries — inert today, correctly gates the first one that lands.
  • Doc-only changes (MIGRATION-PLAYBOOK.md, permission-rule-hygiene/README.md, scope-semantics.md, worktree/SKILL.md, review/README.md, all CHANGELOG.md/plugin.json bumps) — prose and version numbers only. No permission grants, hook contracts, config schemas, or trust boundaries are loosened; if anything the worktree-isolation write-up reinforces a fail-closed stance (an unverifiable compound command is blocked on the same footing as one that would actually reach the main checkout — no exemption). Confirmed no secrets/tokens/credential-shaped strings anywhere in the diff.

  • No workflow files touched, so pull_request_target/workflow_run/permissions:/script-injection-via-github-context concerns don't apply to this PR. Deferring unpinned-action / supply-chain-pin findings to zizmor's lane per instructions (n/a here regardless — no action pins changed).

@kyle-sexton
kyle-sexton merged commit 9d9fe48 into main Aug 10, 2026
33 checks passed
@kyle-sexton
kyle-sexton deleted the work/2176-auto branch August 10, 2026 22:50
kyle-sexton added a commit that referenced this pull request Aug 10, 2026
…n in sweep-all (#2182)

Closes #2176

Follow-on to #2180. #2176 is already closed; this lands the one edit
that only became possible after #2169 merged.

## Summary

#2169 landed the v2.1.224 subagent-cap removal with an honest in-place
marker beside it: `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` was "carried
forward from the 2026-07-29 read and NOT re-verified … its currency is
open, tracked as its own item".

#2176 was that item, and #2180 verified it — but the marker was not on
`main` when #2180 opened (it lived on #2169's branch), and #2169 merged
minutes ahead of it. So `main` now carries a settled claim that
advertises itself as open and points at a closed issue. This closes that
gap.

## Fix

The citation is **current, not drifted**. The row reads exactly as
`sweep-all` cites it:

> `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Maximum number of read-only
tools and subagents that can execute in parallel (default: 10). Higher
values increase parallelism but consume more resources

The marker is **replaced, not deleted**, because the route is the
load-bearing part. `env-vars` truncated before the `MAX` range for a
**third** time — the fetch reached `CLAUDE_CODE_DISABLE_1M_CONTEXT` and
the summarizer duly reported no rows beginning `CLAUDE_CODE_MAX`, the
exact false negative this repo's method rule exists to catch. The row
was read verbatim from a same-day verbatim mirror of these docs
(`ericbuess/claude-code-docs`, `docs/env-vars.md`, synced
2026-08-10T21:32:29Z), whose freshness is corroborated by its carrying
the v2.1.224 cap removal that #2169 just landed — a fact that cannot
appear in a pre-2.1.224 sync.

So the new note says what is true and no more: re-verified 2026-08-10,
unchanged, **but not from the primary page** — treat it as one rung
below a primary read. That neither overclaims a fetch that did not
happen nor leaves a closed question looking open.

## Verification

- `validate-plugin-contracts.mjs`, `generate-catalog.mjs --check`,
`generate-cheatsheet.mjs --check` — pass
- `markdownlint-cli2` over both changed files — 0 errors
- `discipline` 0.12.1 → 0.12.2 with a matching `## [0.12.2]` CHANGELOG
entry
- Remaining gates: CI is the authority

## Related

- #2180 — the week-32 sweep; item 9's full write-up and both verbatim
quotes
- #2169 — landed the marker this removes, and the cap removal that
corroborates the mirror's freshness
- [`env-vars`](https://code.claude.com/docs/en/env-vars) — the primary
page, which has now truncated before this range on three independent
fetches

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Decide the week-32 platform changes (auto-mode default Aug 14, zip-archive marketplace source, worktree isolation, PreToolUse hooks)

1 participant