Skip to content

Landscape sweep: Opus judgment workers without WebFetch (context-mode fetches, skills kept); repository check ignores Codex's empty .git mount targets - #398

Merged
seathatflowsinourveins merged 8 commits into
mainfrom
claude/sweep-worker-agent-20260927
Sep 27, 2026
Merged

seathatflowsinourveins merged 8 commits into
mainfrom
claude/sweep-worker-agent-20260927

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

What

Smoke 2 of the landscape sweep (wf_e4dee61f-e66) passed every harness check. The token lane's per-agent tool count, which the user flagged, showed two practice gaps.

  • Fetch routing: all 15 Claude page fetches used WebFetch and none used context-mode's ctx_fetch_and_index, even with the token-lanes guidance injected. WebFetch hands the page to a smaller model and returns its answer, so a quoted command could be a paraphrase.
  • Model rule: the facts refuter, a verification role, ran on Sonnet. The user's rule keeps Sonnet for command wrappers and mechanical extraction.

The fix:

  • New agent type adoption/agents/claude/landscape-sweep-worker.md: Opus, effort max, disallowedTools: WebFetch, with no tools list. It inherits Skill and the ctx_* tools (the disallowedTools field and tool inheritance are per code.claude.com/docs/en/sub-agents).
    • stack-researcher also excludes WebFetch, but it has no Skill tool, so the templates' pinned skills would be lost.
    • A probe agent of the new type reports Bash, Skill, ToolSearch, WebSearch, ctx_fetch_and_index and ctx_search, and no WebFetch.
  • sweep.js:
    • discover (both rounds), refute-facts, refute-fit and the critic run as that type, and refute-facts moves to Opus;
    • the worker prompts say to fetch pages with ctx_fetch_and_index and read them with ctx_search, and none mentions WebFetch;
    • the GPT-6 wrappers keep the default type and Sonnet, since they only run commands and return the raw result. Smoke 2 proved them under the hook.
  • convert.py: the alias for refute-facts is now opus.
  • README: the model roles, the rationale, and the agent install prerequisite. The facts role is not moved to GPT-6 here. That would change a vote's family, which the survival rule and copy check key on, so it needs its own comparison first; it is the follow-up for fuller GPT-6 use.

Robustness fix, found while testing.

  • The cause: Codex's Linux sandbox creates empty .git, .agents and .codex mount targets under its writable roots, /tmp included, while a sandboxed command runs, and removes them afterwards (codex-rs/linux-sandbox/src/bwrap.rs at rust-v0.157.1, SyntheticMountTarget).
  • The symptom: other sessions' workspace-write Codex jobs made /tmp/.git appear several times a minute (observed directly), and inside_repository() then refused work directories under /tmp at random. That hit the sweep's own work directory and the tests' temp directories.
  • The change: sweep_common.py and the standalone codex_job.py now take a repository marker to be a .git directory holding HEAD, or a non-empty .git file.

Verification

  • Failing controls:
    • the new sweep-script assertions (agent type per role, no WebFetch in prompts, Opus facts) fail on the base;
    • the new repository test fails against the old check, which counted an empty dir and an empty file as repositories.
  • Tests: test_install_claude_profile (eleven shipped agents), test_token_lanes_subagent_start, test_adoption_docs_consistency, test_verdict_lane_vendoring, test_saturation_ledger and test_landscape_sweep_harness give 279 run, OK (7 skipped), with CONTEXT_MODE_SECURITY_JS set. The suite also passed twice while /tmp/.git was flickering.
  • validate.py and build_ecosystem.py --check passed.
  • Integration: smoke 3 (wf_c7bc3ee8-c16, harness bf4c3ae, the type installed on this host) is running. The token lane will count per-agent tools on it: WebFetch should be 0 and ctx_fetch_and_index above 0. The result and the GPT-6 review are posted here before merge.

SOTA sources

  • Claude Code subagents: code.claude.com/docs/en/sub-agents. The agent type rests on four points there:

    • the frontmatter fields, including disallowedTools, model and effort;
    • subagents inherit the main conversation's built-in and MCP tools, minus disallowedTools;
    • the Skill tool stays available unless omitted or disallowed;
    • ~/.claude/agents/ is watched for new files.

    The GPT-6 review confirmed with installed Claude Code 2.1.283 that the Workflow resolves agentType through the same registry and applies explicit model/effort.

  • context-mode 1.0.169 (installed plugin): ctx_fetch_and_index and ctx_search. These are the fetch-and-read tools the token practice routes pages through (docs/token-session-handbook.md, token-lanes block).

  • Codex rust-v0.157.1:

    • codex-rs/linux-sandbox/src/bwrap.rs: SyntheticMountTarget, protected .git/.agents/.codex under writable roots, mount construction at L1219-1235;
    • codex-rs/linux-sandbox/src/linux_run_main.rs L1105-1123: removal after bwrap.
  • git v2.43.0 path.c validate_headref (L667-684): HEAD may be a symlink to an unborn branch. It is the source for the repair round's marker rule.

  • Model rule: the user's global CLAUDE.md, "Opus 5.5 at effort max for ... research, review, verification and synthesis; Sonnet or Haiku only for pure command wrappers, mechanical extraction and probes".

🤖 Generated with Claude Code

https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5

Scout and others added 6 commits September 27, 2026 04:29
…oots

The OmniRoute smoke (wf_6576675c-0d6) passed every harness check except one.
Both GPT-6 workers reported skills_used: []. Each tried to load its pinned
skills (search-first, iterative-retrieval, verification-before-completion,
supply-chain-risk-auditor, fp-check) with context-mode's ctx_execute_file.
context-mode 1.0.169 refuses paths outside its project directory, here the
runner's <work-dir>/empty, unless a Read(...) allow rule in
<project>/.claude/settings.json names them (build/security.js
evaluateProjectContainment and readToolPermissionPatterns, issue #852). The
native lane's GPT-6 had reported them used.

build_args.py now writes <work-dir>/empty/.claude/settings.json for the
gateway lane. It allows Read on Codex's user skill roots only,
$CODEX_HOME/skills and $HOME/.agents/skills
(codex-rs/ext/skills/src/host_roots.rs at rust-v0.157.1), as absolute globs,
since context-mode matches literally. staged.json records the roots
symbolically. A native restage removes the file. Codex reads no .claude/
files, so no Codex project layer is added.

The README records the rule and the 2026-09-27 web-search measurement:
- /v1/alpha/search is 404 at a58000c7;
- upstream PR #13788 answers from OmniRoute's search registry
  (duckduckgo-free when keyless), not OpenAI's hosted search.
The stale note about the default worker profile goes, since #389 put it on
main.

The failing control: the new test errors against main's build_args.py
(no settings file).
Tests: tests.test_saturation_ledger + tests.test_landscape_sweep_harness,
167 run, OK (3 skipped). validate.py and build_ecosystem.py --check passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
… model shells

The GPT-6 review of ec9f071 returned needs_changes with one medium finding.
context-mode 1.0.169 matches an allow rule against the raw path as well as
the resolved one (security.js evaluateFilePath), so the <root>/** rules also
admitted <root>/../elsewhere, sibling paths under the root and outward
symlinks. The claim of "there and nowhere else" did not hold, and the test
only checked serialization.
- The lane now gets one exact Read(...) rule per file under
  $HOME/.agents/skills. That is where install_skills.py puts the pinned
  skills; the lane's $CODEX_HOME/skills holds only Codex's .system cache.
  Symlinked directories are followed, each real directory is listed once,
  and a path containing * or ? is left out. context-mode escapes and anchors
  every other character, so an exact rule matches only its path.
- staged.json records the symbolic root and the file count.
- New behavioral test: test_context_mode_reads_only_the_listed_skill_files
  runs context-mode's own readToolPermissionPatterns and
  evaluateProjectContainment on the staged file (set CONTEXT_MODE_SECURITY_JS
  to an installed build/security.js). Listed files pass; a sibling, an
  outside file and two .. traversals do not. Its control shows a <root>/**
  rule admitting the traversal. The first revision fails it (sibling and
  traversal allowed).

Also, a residual the gateway owner found while reviewing their Codex
templates: Codex 0.157.1 applies its default *KEY*/*SECRET*/*TOKEN* excludes
only when ignore_default_excludes is false, and that defaults to true
(codex-rs/config/src/shell_environment_policy.rs:136). A real gateway key
would therefore reach model-run commands. The lane config now sets
[shell_environment_policy.filters] OMNIROUTE_API_KEY = "exclude"
(codex-rs/protocol/src/config_types.rs:222-230).

Live probe on a lane staged from this revision, with a synthetic
non-placeholder key through the keyless gateway:
- GPT-6's shell reported the variable absent;
- ctx_execute_file read fp-check/SKILL.md;
- ctx_execute_file refused ~/.agents/skills/../../code/.../README.md.

Tests: 168 run, OK (3 skipped), with CONTEXT_MODE_SECURITY_JS set.
validate.py and build_ecosystem.py --check passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…_execute's reach

The GPT-6 re-check of 45a9d77 confirmed the exact rules reject traversal,
sibling and outside paths. It admits listed files, references and symlinked
skill directories. The key filter removes the variable from model commands
while env_key still reaches the provider.

One case stays open, and it is upstream matcher behavior. context-mode
1.0.169 turns backslashes into slashes before matching (security.js
evaluateFilePath) but its executor opens the literal Linux name. A planted
symlink named <home>/.agents\skills\demo\SKILL.md therefore passed and read
an outside file. No rule can exclude it, since deny matching normalizes the
same way. Per the bounded review loop this is recorded as a residual, not
fixed:
- no such file exists;
- creating one takes write access that ctx_execute already has.
The README and comments also state the wider fact the review surfaced: the
#852 boundary limits ctx_execute_file only, while ctx_execute (left enabled
by the stack-worker profile) runs code with the user's own file access
outside Codex's read-only sandbox.

Tests: 168 run, OK (3 skipped), with CONTEXT_MODE_SECURITY_JS set.
validate.py and build_ecosystem.py --check passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…heck ignores Codex's empty .git targets

Smoke 2 (wf_e4dee61f-e66) passed every harness check. The token lane's
per-agent tool count, which the user flagged, found two gaps:
- All 15 Claude page fetches used WebFetch and none used context-mode's
  ctx_fetch_and_index, even with the token-lanes guidance injected. WebFetch
  hands the page to a smaller model and returns its answer, so a quoted
  command could be a paraphrase.
- The facts refuter, a verification role, ran on Sonnet. The user's model
  rule reserves Sonnet for command wrappers and mechanical extraction.

Changes:
- New agent type adoption/agents/claude/landscape-sweep-worker.md: Opus,
  effort max, disallowedTools: WebFetch, and no tools list, so it inherits
  Skill and the ctx_* tools (disallowedTools and inheritance per
  code.claude.com/docs/en/sub-agents). stack-researcher also lacks WebFetch
  but has no Skill tool, so the templates' pinned skills would be lost.
- sweep.js runs discover (both rounds), refute-facts, refute-fit and the
  critic as that type. refute-facts moves to Opus. The worker prompts say:
  find pages with WebSearch, fetch with ctx_fetch_and_index, read with
  ctx_search. None mentions WebFetch. The GPT-6 wrappers keep the default
  type and Sonnet: they only run commands and return the raw result.
- convert.py's alias for refute-facts is now opus.
- README: the model roles, the rationale, and the agent install
  prerequisite. The facts role is not moved to GPT-6: that changes a vote's
  family, which the survival rule and copy check key on, so it needs its
  own comparison first.

Also a robustness fix found while testing. Codex's Linux sandbox creates
empty .git/.agents/.codex mount targets under its writable roots, /tmp
included, while a sandboxed command runs, and removes them afterwards
(codex-rs/linux-sandbox/src/bwrap.rs at rust-v0.157.1,
SyntheticMountTarget). Other sessions' workspace-write Codex jobs made
/tmp/.git appear several times a minute, and inside_repository() then
refused work directories under /tmp at random: the sweep's own, and the
tests' temp directories. sweep_common.py and the standalone codex_job.py
now take a repository marker to be a .git directory holding HEAD, or a
non-empty .git file. The failing control: the new test fails against the
old check (empty dir and empty file counted as repositories).

tests/test_install_claude_profile.py counts eleven shipped agents.
Tests: test_install_claude_profile, test_token_lanes_subagent_start,
test_adoption_docs_consistency, test_verdict_lane_vendoring,
test_saturation_ledger and test_landscape_sweep_harness give 279 run, OK
(7 skipped), with CONTEXT_MODE_SECURITY_JS set. validate.py and
build_ecosystem.py --check passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
…gent-20260927

# Conflicts:
#	manifests/evidence.json
@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 27, 2026
…ry; skills_used only where the schema has it

The GPT-6 cross-family review of bf4c3ae returned needs_changes.
- medium: git allows .git/HEAD to be a symlink to a branch with no commit
  yet (git v2.43.0 path.c validate_headref). A dangling HEAD fails
  is_file(), so both marker functions returned None for a real repository
  that the old check refused. They now also accept HEAD as a symlink. A new
  test case covers it; the first revision fails it, and git reports such a
  layout as inside a work tree.
- low: the worker body told every role to report skills_used, but the
  critic's schema has no such field (additionalProperties false). The body
  now says to list skills only when the return schema has skills_used.
Tests: 279 run, OK (7 skipped), with CONTEXT_MODE_SECURITY_JS set.
validate.py and build_ecosystem.py --check passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

GPT-6 cross-family review of bf4c3ae (gpt-6-astra, effort max, read-only): needs_changes, with one medium and one low finding. Both are fixed in 8c03324.

Finding Fix
Medium: git allows .git/HEAD to be a symlink to an unborn branch (git v2.43.0 path.c validate_headref). The dangling link fails is_file(), so the new check accepted a work directory inside such a repository, which the old check refused. The reviewer reproduced it with git. Both marker functions also accept HEAD as a symlink. A new test case unborn-head-symlink fails on bf4c3ae and passes now; git rev-parse --is-inside-work-tree reports true for that layout.
Low: the worker body told every role to report skills_used, but schemas/critic.json has no such field (additionalProperties: false). The same inconsistency already exists in templates.common. The body now lists skills only "when the return schema has skills_used".

The review also confirmed:

  • The docs and installed Claude Code 2.1.283 behave as the change assumes: the Workflow resolves agentType through the Agent registry, user-level agents included, and applies the explicit model and effort with schema composition. The type inherits Skill and the MCP tools while removing WebFetch.
  • Every Claude judgment stage, follow-ups included, uses the type on Opus/max. The GPT-6 wrappers keep the default type on Sonnet/max. No generated prompt mentions WebFetch.
  • The convert.py aliases and method text agree, and the usage and ledger code is unaffected.
  • The Codex synthetic-target explanation holds, per bwrap.rs L1219-1235 and the cleanup at linux_run_main.rs L1105-1123. The two marker implementations are identical.
  • The red control reproduced.

Tests at 8c03324: 279 run, OK (7 skipped). validate.py and build_ecosystem.py --check passed.

Smoke 3 (wf_c7bc3ee8-c16) runs at bf4c3ae. Neither repair touches the first round it exercises: the critic isn't in a smoke, and the repository check is the same for its /tmp work directory. The updated agent body will be installed after smoke 3, so its agents don't switch definitions mid-run.

🤖 Generated with Claude Code

https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Integration: smoke 3 passes, and the fetch-routing gap is closed.

  • Run: wf_c7bc3ee8-c16, harness bf4c3ae. The type definition active then was bf4c3ae's body. 8c03324 changes only the skills sentence of that body and the repository check.
  • Gateway: OmniRoute BUILD_SHA dd6e9607e. The SubagentStart token-lanes hook was active.

Per-agent tool counts from the transcripts:

Agent Type Model WebFetch WebSearch ctx_fetch_and_index ctx_search ctx_execute Skill
discover:mcp-surfaces landscape-sweep-worker opus 0 3 1 6 14 4
refute-facts:mcp-surfaces landscape-sweep-worker opus 0 0 1 7 20 3
refute-fit:mcp-surfaces landscape-sweep-worker opus 0 0 1 7 18 2
gpt6-discover / gpt6-refute-fit default sonnet 0 0 0 0 0 0

For comparison, smoke 2 (before this PR) had 15 WebFetch calls and 0 ctx_fetch_and_index calls across the Claude agents, and its facts refuter ran on Sonnet. ctx_fetch_and_index takes several URLs per call, which is why the workers self-report web_fetch 5 against 3 calls.

usage_record.py: complete, no effort mismatches.

convert.py:

  • lost [], degraded_discovery [], effort_deviations [], retained_failures {}, reopened_layers [];
  • gpt6_by_status ok 2, gpt6_copy_check match 2;
  • skills_usage covers every role: discover_claude, discover_gpt6, facts, fit_claude and fit_gpt6;
  • 7 proposals, 4 survivors.

Attempt history:

  • The first launch of smoke 3 (wf_c4a31643-257) was stopped at launch. The type had been installed mid-turn, and the session registered it only at its next turn boundary, so discover failed with "not found".
  • It is retained with its cause.
  • The step-4 probe passed before each launch.

🤖 Generated with Claude Code

https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5

manifests/evidence.json follows the hot-file protocol: main's copy, with
this branch's files re-registered. #402 made .claude/agents/ a byte-for-byte
project-scope copy of adoption/agents/claude/ (test_project_scope_agents_are_
the_installed_definitions), so landscape-sweep-worker.md gets its project
copy. It is force-added and not hash-listed, like the other ten.
Tests: test_install_claude_profile, test_token_lanes_subagent_start,
test_adoption_docs_consistency, test_verdict_lane_vendoring,
test_saturation_ledger, test_landscape_sweep_harness: 287 run, OK
(7 skipped). validate.py passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
@seathatflowsinourveins
seathatflowsinourveins merged commit 5483412 into main Sep 27, 2026
24 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/sweep-worker-agent-20260927 branch September 27, 2026 14:27
seathatflowsinourveins pushed a commit that referenced this pull request Sep 27, 2026
…_search at its default limit

The token lane counted smoke 3's tool results (wf_c7bc3ee8-c16). Fetch
routing was fixed by #398 (3 of 3 through ctx_fetch_and_index), but
containment was not: 45 of 134 results were over 5 KB, carrying 79.6% of
result bytes. ctx_execute had 27 of 52 over 5 KB and ctx_search 11 of 20.
The likely causes are ctx_execute without `intent` and high ctx_search
limits. The #381 targets are M3 at no more than 1 non-exception result
over 5 KB per child with no more than 20% of bytes, and M5 at no more than
10% of ctx results over 5 KB.

The fix uses context-mode's own contract. The ctx_execute and
ctx_batch_execute `intent` parameter: "When provided and output is large
(>5KB), indexes output into knowledge base and returns section titles +
previews — not full content". ctx_search's default limit is 3. The worker
body (adoption/agents/claude/landscape-sweep-worker.md and its
byte-identical .claude/agents copy) now requires an intent on every
ctx_execute or ctx_batch_execute call, ctx_search at its default limit
with specific queries, and derived answers only.

The token lane owns the host token-lanes block (the same rule) and the
enforcement fallback: a PreToolUse refusal of ctx_execute without intent,
used only if the next one-layer smoke shows prose alone does not move
M3/M5.
Tests: test_install_claude_profile + test_landscape_sweep_harness OK.
validate.py passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5
seathatflowsinourveins added a commit that referenced this pull request Sep 27, 2026
…_search at its default limit (#403)

The token lane counted smoke 3's tool results (wf_c7bc3ee8-c16). Fetch
routing was fixed by #398 (3 of 3 through ctx_fetch_and_index), but
containment was not: 45 of 134 results were over 5 KB, carrying 79.6% of
result bytes. ctx_execute had 27 of 52 over 5 KB and ctx_search 11 of 20.
The likely causes are ctx_execute without `intent` and high ctx_search
limits. The #381 targets are M3 at no more than 1 non-exception result
over 5 KB per child with no more than 20% of bytes, and M5 at no more than
10% of ctx results over 5 KB.

The fix uses context-mode's own contract. The ctx_execute and
ctx_batch_execute `intent` parameter: "When provided and output is large
(>5KB), indexes output into knowledge base and returns section titles +
previews — not full content". ctx_search's default limit is 3. The worker
body (adoption/agents/claude/landscape-sweep-worker.md and its
byte-identical .claude/agents copy) now requires an intent on every
ctx_execute or ctx_batch_execute call, ctx_search at its default limit
with specific queries, and derived answers only.

The token lane owns the host token-lanes block (the same rule) and the
enforcement fallback: a PreToolUse refusal of ctx_execute without intent,
used only if the next one-layer smoke shows prose alone does not move
M3/M5.
Tests: test_install_claude_profile + test_landscape_sweep_harness OK.
validate.py passed.


Claude-Session: https://claude.ai/code/session_012qwXNtFyUhY5x2dtrm7tG5

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins pushed a commit that referenced this pull request Sep 28, 2026
…erturn variables

Repair round for the verification-line addendum and the skills-trial
carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6,
R-F7, GAP-3, GAP-6, GAP-7).

Skills-trial addendum:
- The review no longer "replaces" the count-based prune rule. It adds a
  with/without comparison that varies the builder's preload for the
  skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json
  L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and
  Codex enablement stays under that rule. A disagreement is written into
  the manifest update the trial window end already requires.
- Other sources and role changes: the landscape-sweep templates name both
  skills from 1b0e459 (templates.json common; build_args.py L59
  TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0
  baseline counts (child-lane baseline README L128-130) match that list
  without proving cause; #398 (5483412) and #402 (d022295) change the
  sweep workers' type and model and the builder's model inside C1.
- Boundaries: the installer writes no install record (shutil.copy2 at
  install_claude_profile.py L113, L143 keeps the source mtime), and #381
  step 2 freezes hashes, not install times.

Verification-line addendum:
- The builder runs model: opus, which is Opus 5.5 on this host since
  September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice
  reaches it through the 5.5 guide's L9; before #402 it ran sonnet.
- #381 records hashes, not an install time; a Supersedes note corrects
  the qmd addendum's L389 wording the same way.
- Overturn names what each comparison varies: default-block line 13, a
  non-Opus child set, the builder line with the preload held on, or a
  prompting-guide reversal.
- Line 13's quote, the local file:line policy, the re-read of every
  documentation quote at its cited line (2026-09-28 08:55Z), the
  installed SKILL.md hash check and the control's own returned lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins pushed a commit that referenced this pull request Sep 28, 2026
…erturn variables

Repair round for the verification-line addendum and the skills-trial
carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6,
R-F7, GAP-3, GAP-6, GAP-7).

Skills-trial addendum:
- The review no longer "replaces" the count-based prune rule. It adds a
  with/without comparison that varies the builder's preload for the
  skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json
  L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and
  Codex enablement stays under that rule. A disagreement is written into
  the manifest update the trial window end already requires.
- Other sources and role changes: the landscape-sweep templates name both
  skills from 1b0e459 (templates.json common; build_args.py L59
  TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0
  baseline counts (child-lane baseline README L128-130) match that list
  without proving cause; #398 (5483412) and #402 (d022295) change the
  sweep workers' type and model and the builder's model inside C1.
- Boundaries: the installer writes no install record (shutil.copy2 at
  install_claude_profile.py L113, L143 keeps the source mtime), and #381
  step 2 freezes hashes, not install times.

Verification-line addendum:
- The builder runs model: opus, which is Opus 5.5 on this host since
  September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice
  reaches it through the 5.5 guide's L9; before #402 it ran sonnet.
- #381 records hashes, not an install time; a Supersedes note corrects
  the qmd addendum's L389 wording the same way.
- Overturn names what each comparison varies: default-block line 13, a
  non-Opus child set, the builder line with the preload held on, or a
  prompting-guide reversal.
- Line 13's quote, the local file:line policy, the re-read of every
  documentation quote at its cited line (2026-09-28 08:55Z), the
  installed SKILL.md hash check and the control's own returned lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins pushed a commit that referenced this pull request Sep 28, 2026
…erturn variables

Repair round for the verification-line addendum and the skills-trial
carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6,
R-F7, GAP-3, GAP-6, GAP-7).

Skills-trial addendum:
- The review no longer "replaces" the count-based prune rule. It adds a
  with/without comparison that varies the builder's preload for the
  skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json
  L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and
  Codex enablement stays under that rule. A disagreement is written into
  the manifest update the trial window end already requires.
- Other sources and role changes: the landscape-sweep templates name both
  skills from 1b0e459 (templates.json common; build_args.py L59
  TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0
  baseline counts (child-lane baseline README L128-130) match that list
  without proving cause; #398 (5483412) and #402 (d022295) change the
  sweep workers' type and model and the builder's model inside C1.
- Boundaries: the installer writes no install record (shutil.copy2 at
  install_claude_profile.py L113, L143 keeps the source mtime), and #381
  step 2 freezes hashes, not install times.

Verification-line addendum:
- The builder runs model: opus, which is Opus 5.5 on this host since
  September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice
  reaches it through the 5.5 guide's L9; before #402 it ran sonnet.
- #381 records hashes, not an install time; a Supersedes note corrects
  the qmd addendum's L389 wording the same way.
- Overturn names what each comparison varies: default-block line 13, a
  non-Opus child set, the builder line with the preload held on, or a
  prompting-guide reversal.
- Line 13's quote, the local file:line policy, the re-read of every
  documentation quote at its cited line (2026-09-28 08:55Z), the
  installed SKILL.md hash check and the control's own returned lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins pushed a commit that referenced this pull request Sep 28, 2026
…erturn variables

Repair round for the verification-line addendum and the skills-trial
carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6,
R-F7, GAP-3, GAP-6, GAP-7).

Skills-trial addendum:
- The review no longer "replaces" the count-based prune rule. It adds a
  with/without comparison that varies the builder's preload for the
  skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json
  L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and
  Codex enablement stays under that rule. A disagreement is written into
  the manifest update the trial window end already requires.
- Other sources and role changes: the landscape-sweep templates name both
  skills from 1b0e459 (templates.json common; build_args.py L59
  TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0
  baseline counts (child-lane baseline README L128-130) match that list
  without proving cause; #398 (5483412) and #402 (d022295) change the
  sweep workers' type and model and the builder's model inside C1.
- Boundaries: the installer writes no install record (shutil.copy2 at
  install_claude_profile.py L113, L143 keeps the source mtime), and #381
  step 2 freezes hashes, not install times.

Verification-line addendum:
- The builder runs model: opus, which is Opus 5.5 on this host since
  September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice
  reaches it through the 5.5 guide's L9; before #402 it ran sonnet.
- #381 records hashes, not an install time; a Supersedes note corrects
  the qmd addendum's L389 wording the same way.
- Overturn names what each comparison varies: default-block line 13, a
  non-Opus child set, the builder line with the preload held on, or a
  prompting-guide reversal.
- Line 13's quote, the local file:line policy, the re-read of every
  documentation quote at its cited line (2026-09-28 08:55Z), the
  installed SKILL.md hash check and the control's own returned lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 28, 2026
…l line (AN-15, after #447) (#456)

* Token-lanes carrier: evidence line replaces the verification-skill instruction

Default block line 13 now asks for evidence (the command and what it
returned, or the file:line read) and keeps the search-first sentence:
4,094 -> 4,088 bytes against the unchanged 4,100-byte bound (AN-15).
The builder block drops its verification sentence (2,883 -> 2,747
bytes): isolated-builder.md:7-9 preloads the skill and :12 names it.

Sources: code.claude.com/docs/en/best-practices.md L52 (show evidence);
platform.claude.com prompting-claude-opus-5.md L61, L81 (remove explicit
verification instructions), prompting-claude-opus-5-5.md L9 (carried
forward), claude-prompting-best-practices.md L780 (Opus 5 exception).

Handbook mirror: carrier line, its sources paragraph naming only
search-first, and the builder table row and variant. Tests: the default
key phrase becomes "Show evidence before a success claim", the builder
drops the skill phrase, and no block may name the withdrawn skill.
SHA256SUMS refreshed for both blocks. No installer run.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Decision records: verification-line addendum and skills-trial carrier conditions

Token-lanes decision, addendum 2026-09-28: why the default carrier line
now asks only for evidence (Opus 5 guide L61, L81; Opus 5.5 guide L9;
prompting best practices L780; Claude Code best practices L52), why the
builder line is removed on its own merits (isolated-builder.md L5, L7-9,
L12; sub-agents reference L600), sizes, the failing-first control, the
non-Opus boundary, alternatives, #381 freeze and overturn.

Skills-trial record, addendum 2026-09-28: condition log C0-C3 (#378,
2026-10-25 review rule for verification-before-completion: a
with/without comparison on frozen builder tasks through an upstream
harness named with its pin (tokens, elapsed time, review-found defects).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Decision records: date the builder preload boundary; drop an unretained count

Skills-trial condition log: isolated-builder's verification-before-completion
preload and the body line that names it came from #376 (623d34f,
2026-09-27T03:38:47Z per TZ=UTC git log -S on
adoption/agents/claude/isolated-builder.md), a boundary inside C0, not a
constant across every condition. The one recorded install time is
attributed as measured-gaps.md reports it (the coordinator's local
measurement), without naming a host. Token-lanes addendum: the community
alternative keeps superpowers as the verifiable example and drops a survey
count that is not retained in the repository.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Token-lanes carrier: tag the evidence sentence's upstream item; narrow the no-verification claim

Repair round for the verification-line change (review findings R-F2, R-F7).

- token-lanes-block.md line 13 moves "(code.claude.com best practices)" to
  follow "the command and what it returned", the item Claude Code best
  practices L52 names (https://code.claude.com/docs/en/best-practices.md,
  re-read 2026-09-28). The file:line alternative is local policy, not in
  L52. Zero-byte reorder: the block stays 4,088 bytes and line 13 295.
- SHA256SUMS lists the new block hash; `sha256sum -c SHA256SUMS` passes.
- Handbook: the mirrored line follows, and the sources paragraph records
  the file:line alternative as local policy. It now says the carrier gives
  no instruction to verify finished work and names no verification skill,
  since the codebase-memory line still checks caller lists (handbook L264).
- Test comment: WITHDRAWN_PHRASES is a literal skill-name check, not a
  check for every verification wording.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Decision records: keep the manifest prune rule, name confounds and overturn variables

Repair round for the verification-line addendum and the skills-trial
carrier-condition addendum (findings V-F1, R-F1, R-F3, R-F4, R-F5, R-F6,
R-F7, GAP-3, GAP-6, GAP-7).

Skills-trial addendum:
- The review no longer "replaces" the count-based prune rule. It adds a
  with/without comparison that varies the builder's preload for the
  skill's Claude listing; trial.prune_rule (adoption/skills/manifest.json
  L30) and tools/skill-usage/skill_usage.py L516-538 still apply, and
  Codex enablement stays under that rule. A disagreement is written into
  the manifest update the trial window end already requires.
- Other sources and role changes: the landscape-sweep templates name both
  skills from 1b0e459 (templates.json common; build_args.py L59
  TEMPLATE_SKILLS), for the Claude workers and the GPT-6 lane; the C0
  baseline counts (child-lane baseline README L128-130) match that list
  without proving cause; #398 (5483412) and #402 (d022295) change the
  sweep workers' type and model and the builder's model inside C1.
- Boundaries: the installer writes no install record (shutil.copy2 at
  install_claude_profile.py L113, L143 keeps the source mtime), and #381
  step 2 freezes hashes, not install times.

Verification-line addendum:
- The builder runs model: opus, which is Opus 5.5 on this host since
  September 22 (grand-catalog-handbook.md L242-244), so the Opus 5 advice
  reaches it through the 5.5 guide's L9; before #402 it ran sonnet.
- #381 records hashes, not an install time; a Supersedes note corrects
  the qmd addendum's L389 wording the same way.
- Overturn names what each comparison varies: default-block line 13, a
  non-Opus child set, the builder line with the preload held on, or a
  prompting-guide reversal.
- Line 13's quote, the local file:line policy, the re-read of every
  documentation quote at its cited line (2026-09-28 08:55Z), the
  installed SKILL.md hash check and the control's own returned lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Token-lanes record: the no-command-output case needs neither Bash nor ctx_execute

security-reviewer has no Bash but runs commands through Context Mode's
ctx_execute (Codex review), so the rationale is qualified to children with no
command runner.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Evidence manifest: re-register this change's files

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant