Skip to content

v2.8.24: AGENTS.md is the one instruction file on the host and in every project; doctor's sandbox-off row and Claude Code version row; pytest skips scratch dirs; init update plan line; canary no-break space; cli bare demo - #799

Merged
AIOSAI merged 14 commits into
mainfrom
dev
Oct 21, 2026

Conversation

@AIOSAI

@AIOSAI AIOSAI commented Oct 21, 2026

Copy link
Copy Markdown
Owner

No description provided.

AIOSAI and others added 14 commits October 21, 2026 01:05
… stays in the name

The leaderboard reader used str.split(), which also splits on U+00A0 and other Unicode whitespace, so a name holding a no-break space was refused as a three-field row. The split now uses the same separator align uses, a run of spaces or tabs. Pinned by test_a_no_break_space_is_part_of_the_name_not_a_separator; docs/top_module.md no longer says any whitespace. Side effect, accepted: form feed and vertical tab no longer separate a row either, which matches align since it was built. @canary's rounds 2026-10-20, DPLAN-0340 pad item B2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
The changelog is updated as work lands, not at the merge train; the canary fix committed in 5a18cb8 gets its Fixed entry now so the next release stamp finds it in place.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
Both display and templates claimed the bare demo verb, so drone @cli demo
showed whichever module discovery found first. templates now answers only
its own name (templates demo keeps its demo) and display owns the bare verb,
as the help page already said. A parametrized integration test routes demo
in both discovery orders and was red under templates-first before the fix;
the two templates tests that pinned the double claim now pin the refusal.
Suite 196 passed. @cli's rounds, 2026-10-21.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
… retired on the host

Claude Code reads AGENTS.md natively since v2.1.277 whenever no CLAUDE.md sits in the working directory or above it (code.claude.com/docs/en/memory), and every other coding agent reads the same file, so the repo keeps one instruction file instead of two. The root CLAUDE.md moves into AGENTS.md byte for byte: the AGENTS.md that was there had been written for Codex and drifted (it still sent agents to README.md at startup, which DPLAN-0347 removed). The culture file moves to .claude/AGENTS.md, which Claude Code also loads at session start. The stale src/aipass/backup/CLAUDE.md, a revive-template leftover carrying a raw git status line and 'purpose TBD', is retired in the same commit: under AGENTS.md-only a CLAUDE.md in the working directory silences the host AGENTS.md, so it would have been the only file @backup read.

The retired files stay in place as CLAUDE(disabled).md on the owner's word (rename for now, delete later). Proved with a fresh headless session from src/aipass/backup: both AGENTS.md paths loaded, no CLAUDE.md, the README-stays-out rule quoted, the culture present.

DPLAN-0418 wave 1. Still to land: the install side mints AGENTS.md alone and the nested-project fence names the host AGENTS.md (@aipass), the watch and exempt lists at @prax and @seedgo, each project repo's own switch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
…8 wave 3)

Claude Code reads AGENTS.md natively and the host switched in ed50270; three lists still named only CLAUDE.md. Prax's monitoring filters watch AGENTS.md and rank a change to it critical, as they do CLAUDE.md, since it carries the same instructions. Seedgo's name ratchet exempts .claude/AGENTS.md exactly as it exempted .claude/CLAUDE.md (the culture file names the owner by design), and the module docstring names the new exemption because the ratchet's own pin refuses an exemption the doc does not state. Spawn's two pins that proved a citizen template and a spawned branch carry no CLAUDE.md now prove the same for AGENTS.md: the project root covers both.

Edited from the devpulse seat in three branches as small fixes; each owner is mailed the file list. 301 passed across the three test files, ruff clean.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
…es it; doctor shows the Claude Code version

DPLAN-0418 wave 2, built by @aipass, host files by devpulse. Claude Code reads AGENTS.md natively from v2.1.277 and the host switched in ed50270; the install side still minted a CLAUDE.md beside every AGENTS.md and the nested-project fence named only the CLAUDE.md pair, so a project that retired its CLAUDE.md would have inherited the host's AGENTS.md through the ancestor walk.

One seed now: AGENTS.md, from .aipass/project_AGENTS.md with the name filled, else the host root AGENTS.md, else scaffold_content.agents_md, which matches the template word for word (the generated text had dropped the python -m clause). init, update, new and adopt share agents_md_seed in project_home. The fence carries four entries; the CLAUDE.md pair stays because a host clone may still hold one and the entries cost nothing. A project fenced with the old pair alone counts as fenceless and init update merges the AGENTS.md pair in once (pinned). Doctor's fence rows read 'instruction fence' and a new System row reports the installed Claude Code version: PASS from 2.1.277, WARN below naming claude update, since the ruling is no bridge CLAUDE.md for old installs. An existing project CLAUDE.md is left alone; its owner retires it in wave 4.

Host side: project_AGENTS.md takes project_CLAUDE.md's text (the one-line python -m difference), project_CLAUDE.md is retired as project_CLAUDE(disabled).md and leaves the .aipass allowlist, the .aipass README and the host README name one seed. Suite 1297 to 1311, ruff clean, re-run from the devpulse seat before this commit. @aipass's doctor run from the host: claude code 2.1.306 PASS; instruction fence WARN on aipass-site, baud, earmark, finch until wave 4 re-fences them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
…(DPLAN-0418 w4+5)

Why: the four project switches landed in their own repos (baud bab9b95, finch 6656946, earmark 92b2abd, aipass-site 1d74b73), which the host changelog cannot show by diff, so the Unreleased entry records them beside the host waves. It also records the wave 5 result: the host and branch .aipass prompts carried no CLAUDE.md mention, so nothing was edited there and what remains names the fence by design.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
… leave the index

Why: Patrick ruled the retired file's name is CLAUDE.md(disabled), the suffix after the extension, which is the shape the repo's *(disabled) ignore pattern catches. The wave 1 spelling CLAUDE(disabled).md slipped past that pattern, so three retired files sat tracked. They are untracked here (git rm --cached) and renamed in place on disk; the ignore pattern keeps them out from now on. The changelog entries name the new shape.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
…e adds

Why: the plan line was the fixed string 'merge adds AIPASS_HOME' whatever the merge did. Every project manager read it today while the merge added only the two host AGENTS.md fence entries, and one held on it. The reason now comes from existing versus merged: env keys added, env keys changed (a moved home), and claudeMdExcludes entries added, named relative to the home. Four pins in the existing test file, one per shape. Built by @aipass on dispatch; suite 1314 green, ruff clean, audit 100.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
Why: the doctor's 'pytest collect: collection issues' row was nine snapshot test files kept under seedgo's and spawn's docs.local scratch dirs, copies that import nothing on the path. The same dirs also collected 7,600 phantom duplicates of real tests. Both dirs are untracked scratch and inbound relays by definition, never a suite, so they join norecursedirs. Collection: 34,418 with 9 errors to 26,850 with none.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
…is off

With AIPASS_SANDBOX_ENABLED unset the group listed five prerequisites
(bwrap, node, srt, rg, broker) as WARN rows with an inert suffix: noise on
every host that runs on the hook gates, which is the default. Off now
returns one row and runs no prerequisite check on any OS; a value that is
set but not true is named in the row. On is unchanged: each prerequisite a
row, a missing one a FAIL, Linux only. Two tests rewritten in place pin the
single row, zero WARN rows and that no check was called; suite 1314 green,
four mutants red. @aipass, dc4d2a4c.
Bump and changelog date ride ahead of the PR so CI runs once on the final
state instead of a second time after green (the owner's call, 2026-10-21).
Both release-tied versions move together: pyproject.toml and
src/aipass/__init__.py.
…d for the train

The local audit gate read canary at 99 (test_top.py Modified: 2026-10-20 behind
its 2026-10-21 commit) and seedgo at 99 (three line-level bypass lists in
.seedgo/bypass.json pinned to test_checkers_batch10.py lines that moved +2 when
wave 3 of DPLAN-0418 added two AGENTS.md pins above them). Both re-audited 100.
pip-audit on PR 799 found certifi 2026.6.17 in its own hash-pinned tree
(.github/requirements/audit.txt, via requests), advisory PYSEC-2026-4320,
fixed in 2026.10.19 published two days ago. Zero code change on our side; the
pin moves with the wheel and sdist sha256 from PyPI, the same two-hash shape
pip-compile emits.
@AIOSAI
AIOSAI merged commit 47c8be3 into main Oct 21, 2026
21 of 23 checks passed
AIOSAI added a commit that referenced this pull request Oct 22, 2026
…behind PR #799

The fake upload in TestADriveRunStops checked len(sent) == 60 unlocked across
upload_batch's three threads. When two appends landed before either thread read
the length, no thread saw 60, SIGTERM never fired, all 120 uploads went and the
run exited 0 instead of 130: the CI line on PR #799 run 2, Python 3.12 lane.
@backup reproduced it with sys.setswitchinterval(1e-6), 7 of 15 red, and cured
the test alone: the count and the SIGTERM under one threading.Lock, a real
threading.local on the fake client (a MagicMock grew children unlocked across
threads and broke its __bool__), the exit code asserted after the 60..62 seam so
a missed patch fails by name, and the worker asserted dead after the join.
Probe 0 of 60 red; a stop-ignoring mutant red; product untouched. 21 green from
devpulse's seat. CHANGELOG Fixed line under Unreleased.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118phkGE4tVYEdYtE44cUsa
AIOSAI added a commit that referenced this pull request Oct 23, 2026
Backup Drive truth, spawn retire-project with receipts, drone caller stamp for in-process modules; 15 commits since #799
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.

1 participant