diff --git a/ORGANISM.md b/ORGANISM.md index 2d17e8ad..73ae0d32 100644 --- a/ORGANISM.md +++ b/ORGANISM.md @@ -99,8 +99,7 @@ human types); let faculties multiply behind them. ## Growth rule: no new organs by default New capability grows as a **faculty** (cheap: one directory, one doc, one -script), not as a repo. A new organ costs an `AGENTS.md`, a `CLAUDE.md` stub, -install wiring, a body-map row and boundary prose — it must earn that by +script), not as a repo. A new organ costs an `AGENTS.md`, install wiring, a body-map row and boundary prose — it must earn that by owning state or effects no existing organ can. Five capabilities have earned organ status that way. Configuration/signalling is the **Nerves** (PyAutoNerves), the base config/serialization layer every library imports — new diff --git a/agents/conductors/build/BUILD_CAPABILITIES.md b/agents/conductors/build/BUILD_CAPABILITIES.md index cc459377..fa94c0df 100644 --- a/agents/conductors/build/BUILD_CAPABILITIES.md +++ b/agents/conductors/build/BUILD_CAPABILITIES.md @@ -3,7 +3,7 @@ This audit records the execution surface the PyAutoBrain Build Agent reasons over and **calls**. The agent must treat every item here as a PyAutoHands capability, not as logic to reimplement inside Brain. Source of truth: the `autohands` -dispatcher (`PyAutoHands/bin/autohands`) and `PyAutoHands/CLAUDE.md`. +dispatcher (`PyAutoHands/bin/autohands`) and `PyAutoHands/AGENTS.md`. ## Execution capabilities (the Build Agent calls these) @@ -51,8 +51,8 @@ per-workspace `config/build/{no_run,profile_smoke,visualise_notebooks}.yaml`. ## Boundary audit — execution vs. health PyAutoHands is meant to be a **pure executor**: it runs no readiness checks of -its own. Confirmed against `PyAutoHands/CLAUDE.md` ("PyAutoHands is the executor -… it runs **no** release-readiness checks of its own"). +its own. Confirmed against `PyAutoHands/AGENTS.md` ("PyAutoHands is the **executor** +… It runs no release-readiness checks of its own"). It does, however, still expose **health-shim commands** that delegate to the health authority (PyAutoHeart): diff --git a/agents/conductors/clone/_clone.py b/agents/conductors/clone/_clone.py index 7f67bf16..a2bdbde6 100644 --- a/agents/conductors/clone/_clone.py +++ b/agents/conductors/clone/_clone.py @@ -72,7 +72,7 @@ # Framework/infrastructure shared by every assistant, regardless of domain. _SHARED_GENERIC = [ - "AGENTS.md", "CLAUDE.md", "LICENSE", ".gitignore", ".gitattributes", + "AGENTS.md", "LICENSE", ".gitignore", ".gitattributes", "Makefile", "__init__.py", "activate.sh", "version.txt", "AI_POLICY.md", "CITATIONS.md", "CODE_OF_CONDUCT.md", "CONTRIBUTING.md", # (No chat-mode counterpart of AGENTS.md and no generated chat bundles: the @@ -93,7 +93,11 @@ # but the file and its schema are framework ".github/*", # wiki-currency / citation workflows "wiki/README.md", "wiki/project/*", # project wiki rules + profile template - "scripts/AGENTS.md", "scripts/CLAUDE.md", "scripts/README.md", + "scripts/AGENTS.md", "scripts/README.md", + # Legacy per-tool pointer files, still present in older references until + # they are retired (harnesses now read AGENTS.md natively). Matched only + # when present, so their absence is harmless. + "CLAUDE.md", "scripts/CLAUDE.md", # Harness mirrors of the generic machinery (.claude/, .codex/, .gemini/): ".claude/hooks/*", ".claude/settings.json", ".codex/hooks.json", ".gemini/*", ".claude/skills/_*", ".claude/skills/start-new-project*", diff --git a/agents/faculties/memory/_memory.py b/agents/faculties/memory/_memory.py index 38e71556..10a5778f 100755 --- a/agents/faculties/memory/_memory.py +++ b/agents/faculties/memory/_memory.py @@ -41,9 +41,8 @@ def surfaces(memory: Path | None, assistant: Path | None, mind: Path | None): # queue, the bibliography workflow, and the wiki schema. Without # these the front door PyAutoMemory/AGENTS.md points every agent at # ("index first") was invisible to this faculty (PyAutoBrain#239). - schema = "wiki/AGENTS.md" if (memory / "wiki/AGENTS.md").is_file() else "wiki/CLAUDE.md" for rel in ("index.md", "reading-queue.md", - "bibliography/README.md", schema): + "bibliography/README.md", "wiki/AGENTS.md"): f = memory / rel if f.is_file(): yield "PyAutoMemory/root", memory, f diff --git a/agents/faculties/vitals/HEART_CAPABILITIES.md b/agents/faculties/vitals/HEART_CAPABILITIES.md index 40a3d5cf..1c3bd1f9 100644 --- a/agents/faculties/vitals/HEART_CAPABILITIES.md +++ b/agents/faculties/vitals/HEART_CAPABILITIES.md @@ -95,7 +95,7 @@ reimplement inside Brain. `worktree_drift.sh`, `script_timing.py`, `test_run.py`, `version_skew.py`. - Config: `config/repos.yaml`, including thresholds and `noise_globs`. - Tests: `tests/`, expected to run quickly with stdlib + PyYAML only. -- Docs / agent guidance: `README.md`, `AGENTS.md`, `CLAUDE.md`. +- Docs / agent guidance: `README.md`, `AGENTS.md`. ## PyAutoHands delegation audit diff --git a/bin/install.sh b/bin/install.sh index b9afe202..61d2e856 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -39,6 +39,11 @@ # bash PyAutoBrain/bin/install.sh --write-workspace-policy # refresh root AGENTS.md delegation block # bash PyAutoBrain/bin/install.sh --check-workspace-policy # drift-check that block # +# The workspace-policy block (policy/workspace_model_delegation.md) is the one +# versioned home for workspace-wide delegation and slash-command notes; every +# harness reads the root AGENTS.md natively, so no per-tool instruction file +# carries a copy. +# # The command-surface modes are the agent-agnostic half of command discovery: # per-tool symlinks (above) are absent in cloud/web sessions, which load only # committed repo files — so the verb → purpose → `bin/pyauto-brain ` index diff --git a/bin/regroup_workspace.py b/bin/regroup_workspace.py index 2cd91fcf..d43cfef5 100644 --- a/bin/regroup_workspace.py +++ b/bin/regroup_workspace.py @@ -135,7 +135,8 @@ def plan(root, state, bundles_root=None, manifest_root=None): # These are local, workspace-owned paths, not versioned source or shell RCs. config_paths = list((root / '.idea').glob('*.xml')) + list((root / '.idea').glob('*.iml')) config_paths += [root / '.claude/settings.json', root / '.codex/hooks.json', - root / 'AGENTS.md', root / 'CLAUDE.md'] + root / 'AGENTS.md', + root / 'CLAUDE.md'] # legacy pointer; skipped when absent for path in config_paths: if not path.is_file() or path.is_symlink(): continue diff --git a/docs/agent_harness_smoke.md b/docs/agent_harness_smoke.md index 8c61f9f9..83021eb9 100644 --- a/docs/agent_harness_smoke.md +++ b/docs/agent_harness_smoke.md @@ -6,8 +6,8 @@ of every scientific workflow or every agent product. ## Shared instructions and adapters -`AGENTS.md` holds shared policy, including nested folder instructions. -`CLAUDE.md` imports the sibling file. Public assistant skills retain their flat +`AGENTS.md` holds shared policy, including nested folder instructions, and +every supported harness reads it natively. Public assistant skills retain their flat canonical Markdown; workspace skills live at `skills//SKILL.md`. Generated Claude links and Codex adapters refer to these same bodies. Canonical instructions retain the full skill description when the discovery description @@ -74,8 +74,8 @@ read the shared workflow instructions and ran `bin/pyauto-brain help` successful and compatibility with older checkouts. - Memory board suite: 62 tests passed with `PYAUTO_BRAIN` unset for its isolated workspace-resolution fixture; structure and wikilink validation passed. -- Eight nested instruction migrations preserve their original bodies except - references updated from `CLAUDE.md` to `AGENTS.md`. +- Eight nested instruction migrations preserve their original bodies, moved + into `AGENTS.md`. The hook fixtures exercise the shared scripts and adapter generation; they do not prove that a user's installed session has trusted or invoked project hooks. diff --git a/policy/workspace_model_delegation.md b/policy/workspace_model_delegation.md index bb983111..a86df838 100644 --- a/policy/workspace_model_delegation.md +++ b/policy/workspace_model_delegation.md @@ -1,10 +1,17 @@ -- **Choose delegation by provider.** Anthropic preserves its execution-tier - policy: Fable → Opus, Opus → Opus, with Sonnet only for the documented - mechanical floor. OpenAI executes routine sequential work directly and uses - Sol workers selectively for independent parallel work, substantial noisy work - needing separate context, or independent review. Duration alone is not a - reason to spawn. Brain roles are not automatic LLM spawns. State the - session model before the first delegation decision. Full policy: - `skills/MODEL_DELEGATION.md` in the resolved Brain checkout. +- **Choose delegation by provider — every task, not only start_dev.** State + the session model in the opening line. Anthropic sessions keep judgment + in-session and delegate execution: Fable is the architect and sends all + edits, tests, prose and ship phases to Opus; Opus → Opus; Sonnet only for + the fixed ship_* step 4 / pre_build step 2 recipes (unsure → Opus). + Delegate beyond a few lines of edits or a couple of file reads; stay + in-session for loaded-context answers, few-line edits in files already read + and user conversations. Long delegations write a progress file the main + session monitors. OpenAI executes routine sequential work directly; Sol + workers only for independent parallel work, substantial noisy work or + independent review. Duration alone is not a reason to spawn; Brain roles + are not automatic LLM spawns. Workflow steps are installed skills + (`/start_dev`, `/ship_library`…, via `bin/install.sh`). Full policy and + heartbeat: "Bounded worker contract" in `skills/MODEL_DELEGATION.md` of the + resolved Brain checkout. diff --git a/skills/MODEL_DELEGATION.md b/skills/MODEL_DELEGATION.md index 62e75a9a..f7f73c6f 100644 --- a/skills/MODEL_DELEGATION.md +++ b/skills/MODEL_DELEGATION.md @@ -65,15 +65,16 @@ The receiving environment resumes the existing branch; it does not create a second task or lifecycle. The orchestrator consumes the returned evidence and continues the same Brain → review/vitals → Heart → PR flow. -**Independent review is a separate capability.** A conversation that authored -the branch cannot satisfy the independent-review leg by rereading its own diff. -If no independent worker/reviewer is available in the current surface, hand off -only the review phase or require human review. - -**No OpenAI API fallback.** An ordinary ChatGPT orchestration route must never -turn a missing worker/runtime into an OpenAI SDK, Responses API, -`OPENAI_API_KEY`, browser/session automation or other separately billed API -call. Use an explicitly chosen supported execution surface or stop at the +**Independent review is a separate capability** — when it is required and how +to supply it: [`WORKFLOW.md`](WORKFLOW.md) (execution-environment section). + +**No OpenAI API fallback.** An ordinary ChatGPT orchestration route has no API +billing path: never turn a missing worker/runtime into an OpenAI SDK, +Responses API, API Platform key, `OPENAI_API_KEY`, browser/session credential +reuse, a local Brain process that programmatically starts a ChatGPT +conversation, or any other separately billed call — regardless of the user's +API billing settings. Use an explicitly chosen supported execution surface +(existing GitHub Actions, Codex/Work, local shell or HPC) or stop at the missing phase. ## Bounded worker contract diff --git a/skills/WORKFLOW.md b/skills/WORKFLOW.md index 0c282557..96465e7f 100644 --- a/skills/WORKFLOW.md +++ b/skills/WORKFLOW.md @@ -76,8 +76,8 @@ cannot self-certify the review faculty's independence. That requirement is path-specific — notably the review-faculty leg of the `--auto` autonomous-ship gate and the independent-adversary cases defined by `AUTONOMY.md` — not a universal prerequisite for an ordinary human-approved -merge. Delegate only the review phase when the active path actually requires -it. +merge. When the active path actually requires it, delegate only the review +phase, or require human review if no independent reviewer is available. **Heart remains separate from CI.** Exact-head CI can satisfy applicable test or smoke evidence; it never substitutes for the authoritative Heart verdict. If the @@ -89,29 +89,11 @@ for a task that genuinely needs local data/output/SSH resources. It is not the name of the orchestrating product and must not grow a `chatgpt`, `codex` or `claude` value. -### No OpenAI API fallback - -The ordinary-Chat route has **no API billing path**. Never use an OpenAI SDK, -Responses API, API Platform key, `OPENAI_API_KEY`, browser/session credential -reuse, or a local Brain process that programmatically starts a ChatGPT -conversation as a fallback. If the current Chat lacks a capability, use only an -explicitly selected supported execution surface (for example existing GitHub -Actions, Codex/Work, local shell or HPC) or stop at that phase. This invariant -does not depend on the user's API billing settings. +**No OpenAI API fallback** — see [`MODEL_DELEGATION.md`](MODEL_DELEGATION.md). ## Model delegation -Provider policies are intentionally asymmetric. Anthropic retains mandatory -execution delegation: Fable → Opus and Opus → Opus, with Sonnet only for the -documented mechanical floor. OpenAI performs routine sequential edits, tests, -and git steps inline; use Sol workers selectively for independent parallel -work, substantial noisy execution or independent progress, and independent -review. Wall-clock duration alone does not force a worker. A Brain role or faculty -consultation does not itself require a new LLM worker. - -Read [`MODEL_DELEGATION.md`](MODEL_DELEGATION.md) before assigning a worker. It -contains the preserved Anthropic heartbeat, mechanical, tutorial, bundle, and -Cortex rules plus the bounded worker contract. +Read [`MODEL_DELEGATION.md`](MODEL_DELEGATION.md) before assigning a worker. ## Memory and planning diff --git a/skills/batch/SKILL.md b/skills/batch/SKILL.md index f16c4e88..8ed73140 100644 --- a/skills/batch/SKILL.md +++ b/skills/batch/SKILL.md @@ -1,6 +1,6 @@ --- name: batch -description: Compose the next unattended batch through the PyAutoBrain Batch Agent — the BatchDecision, planned against the slot's review-minute budget rather than a task count, with backpressure, lane detection and the one-member-per-library-repo rule. Use when picking what to run in a shift, or asking what fits in a review slot. It proposes; approving it in the slot is what launches a batch. +description: Compose the next unattended batch via the Batch Agent — a BatchDecision planned against the slot's review-minute budget, with backpressure and lane rules. Use when picking what to run in a shift or what fits in a review slot. It only proposes. --- # Batch diff --git a/skills/board/SKILL.md b/skills/board/SKILL.md index 6f0cb26f..f6dce824 100644 --- a/skills/board/SKILL.md +++ b/skills/board/SKILL.md @@ -1,6 +1,6 @@ --- name: board -description: Read the PyAutoBrain operational board — the organism's morning surface (overnight runs, readiness, community, resume, upkeep). Links the published Pages board or relays `pyauto-brain board`'s live digest; read-only — every action routes through the door the board's chips name. Use for a morning status glance or when asked what needs attention. +description: Read the PyAutoBrain operational board — the morning surface (overnight runs, readiness, community, resume, upkeep) — via the Pages board or `pyauto-brain board`; read-only. Use for a morning status glance or when asked what needs attention. --- # Board diff --git a/skills/ci_speedup/SKILL.md b/skills/ci_speedup/SKILL.md index 49c0e501..f6af3559 100644 --- a/skills/ci_speedup/SKILL.md +++ b/skills/ci_speedup/SKILL.md @@ -1,6 +1,6 @@ --- name: ci-speedup -description: Pick the slowest parts of CI off the PyAutoHeart board — smoke scripts, unit tests, workflow gates — name why each is slow, and drive the speed-up through the dev flow (a smoke-profile override, an in-script reduction, a cache or CI change), re-timing under the smoke profile before it ships. Use for "why is CI slow", "speed up the smoke tests", or the periodic CI-cost sweep; never for modelling speed (that is /profiling). +description: Find the slowest CI parts on the PyAutoHeart board (smoke scripts, unit tests, workflow gates), and drive speed-ups through the dev flow. Use for "why is CI slow", "speed up the smoke tests", or the CI-cost sweep; never modelling speed (/profiling). --- # CI speed-up diff --git a/skills/community/SKILL.md b/skills/community/SKILL.md index e4212ebe..b2d50481 100644 --- a/skills/community/SKILL.md +++ b/skills/community/SKILL.md @@ -1,6 +1,6 @@ --- name: community -description: Hear and answer the PyAuto community through the PyAutoBrain Community Agent — scan the Discussions hub and every repo for user threads awaiting a response, triage one discussion or issue's context sufficiency, then draft human-approved replies and route actionable work via start_dev_for_user. Use when responding to external users' GitHub discussions or issues, or checking what the community is waiting on. +description: Hear and answer the PyAuto community via the Community Agent — scan Discussions and all repos for threads awaiting a reply, triage, draft human-approved replies, route work via start_dev_for_user. Use for external users' GitHub discussions or issues. --- # Community diff --git a/skills/cortex/SKILL.md b/skills/cortex/SKILL.md index ba6ef06a..9a78a60a 100644 --- a/skills/cortex/SKILL.md +++ b/skills/cortex/SKILL.md @@ -1,6 +1,6 @@ --- name: cortex -description: Check in on the science — run the PyAutoBrain Cortex Agent's two doors ('cortex pull' on the laptop, which pulls every active project through its own sync CLI and shows where each run stands; 'cortex checkin' anywhere, which stamps, re-renders and pushes the board) and read each project's ledger back to the human — Now, the runs, the last entries — then record what they say with the Cortex's own cortex.py verbs. Use for science runs and project ledgers; never for development tasks, which are the Mind's. +description: Check in on the science via the Cortex Agent — 'cortex pull' on the laptop (pull each project's runs) and 'cortex checkin' anywhere (stamp, re-render, push the board) — and read ledgers back. Use for science runs and ledgers; never dev tasks. --- # Cortex diff --git a/skills/eyes/SKILL.md b/skills/eyes/SKILL.md index 5ff93a87..b6fe3aa4 100644 --- a/skills/eyes/SKILL.md +++ b/skills/eyes/SKILL.md @@ -1,6 +1,6 @@ --- name: eyes -description: Run the visualization review loop through the PyAutoBrain Eyes Agent — survey a visualization workspace's figure surface, render via its gallery harness, review figures with the human, and route accepted critiques to intake/start_dev. Use when the user wants to look at, judge, or update the organism's plots and figures. +description: Run the visualization review loop via the Eyes Agent — survey a figure surface, render via its gallery harness, review figures with the human, route critiques to intake/start_dev. Use to look at, judge or update the organism's plots and figures. --- # Eyes diff --git a/skills/feedback/SKILL.md b/skills/feedback/SKILL.md index 6c0acffa..84562e09 100644 --- a/skills/feedback/SKILL.md +++ b/skills/feedback/SKILL.md @@ -1,6 +1,6 @@ --- name: feedback -description: Draft user-reviewed feedback about using PyAutoLabs software and assistants, including goals, successes, friction and evidence. Use when a user asks to share feedback, summarize their experience for maintainers, or prepare an agent-assisted retrospective. Produces a draft for the existing Discussions hub; never posts it. +description: Draft user-reviewed feedback on using PyAutoLabs software and assistants (goals, successes, friction, evidence). Use to share feedback, summarize experience for maintainers, or prepare an agent-assisted retrospective. Drafts only; never posts. --- # Feedback diff --git a/skills/hygiene/SKILL.md b/skills/hygiene/SKILL.md index cac86f9b..ec1bc6ec 100644 --- a/skills/hygiene/SKILL.md +++ b/skills/hygiene/SKILL.md @@ -1,6 +1,6 @@ --- name: hygiene -description: Audit and prioritise the organism's code-quality upkeep — slow tests/scripts/imports, CLI noise, dependency-cap drift, stale API docs, adjacent workspace documentation blocks, git debris, and generated packaging debris — through the PyAutoBrain Hygiene Agent, which reasons and delegates fixes without editing source itself. +description: Audit and prioritise code-quality upkeep — slow tests/scripts/imports, CLI noise, dependency-cap drift, stale API docs, workspace doc blocks, git and packaging debris — via the Hygiene Agent, which delegates fixes and edits no source itself. --- # Hygiene diff --git a/skills/intake/SKILL.md b/skills/intake/SKILL.md index 525d4fe2..936122d9 100644 --- a/skills/intake/SKILL.md +++ b/skills/intake/SKILL.md @@ -1,6 +1,6 @@ --- name: intake -description: Turn raw PyAutoLabs ideas, bug reports, or loose requirements into classified and sized PyAutoMind prompt files through the PyAutoBrain Intake Agent, regenerating the Mind dashboard in the same commit. Also the door for flagging already-shipped work for human review (Type: human review), which is only ever filed when explicitly asked for. Use before start-dev when intent is not yet formalized. +description: Turn raw PyAutoLabs ideas, bug reports or loose requirements into classified, sized PyAutoMind prompt files via the Intake Agent; also files a human review of shipped work, only when asked. Use before start-dev when intent is not formalized. --- # Intake diff --git a/skills/issue_cleanup/SKILL.md b/skills/issue_cleanup/SKILL.md index 5051c901..c607701a 100644 --- a/skills/issue_cleanup/SKILL.md +++ b/skills/issue_cleanup/SKILL.md @@ -1,6 +1,6 @@ --- name: issue-cleanup -description: Reconcile the PyAuto GitHub issue trackers — audit every open issue against the PyAutoMind completion records and merged PRs, bucket them (shipped / weak evidence / deliberately open / in flight / external / unreconciled), then close only what a human confirms. Use for tracker drift, stale issue backlogs, or "are any of these already done?". +description: Reconcile the PyAuto GitHub issue trackers — audit open issues against Mind completion records and merged PRs, bucket them, close only what a human confirms. Use for tracker drift, stale issue backlogs, or "are any of these already done?". --- # Issue Cleanup diff --git a/skills/repo_cleanup/SKILL.md b/skills/repo_cleanup/SKILL.md index ab49625d..6180a002 100644 --- a/skills/repo_cleanup/SKILL.md +++ b/skills/repo_cleanup/SKILL.md @@ -32,7 +32,7 @@ execution-environment model: [`../WORKFLOW.md`](../WORKFLOW.md). > the recommendation; run this skill to act on it. **Distinct from:** `/health worktrees` (Heart read-only diagnostic — consulted here, -but this also mutates); post-merge cleanup in `CLAUDE.md` (once per shipped task — +but this also mutates); post-merge cleanup in the ship skill / prm close-out (once per shipped task — this covers residue when that flow is skipped); the start_dev branch survey (task start — this is between-tasks hygiene). diff --git a/skills/sampler_pipeline/SKILL.md b/skills/sampler_pipeline/SKILL.md index 1b0cfb53..eaabb4d8 100644 --- a/skills/sampler_pipeline/SKILL.md +++ b/skills/sampler_pipeline/SKILL.md @@ -1,6 +1,6 @@ --- name: sampler-pipeline -description: Trial a new non-linear sampler through the ingest → prototype → profile → promote pipeline — point it at a sampler's GitHub repo, get it running on the standard problem and on a likelihood the user owns (MLTracker diagnostics, benchmark comparison), then (if warranted) the full PyAutoFit implementation. Use when the user wants to try, benchmark, or promote a sampler / search / MCMC / nested-sampling / HMC method, or gives a sampler repo URL. +description: Trial a new non-linear sampler via ingest → prototype → profile → promote, up to a full PyAutoFit implementation. Use to try, benchmark or promote a sampler / search / MCMC / nested-sampling / HMC method, or given a sampler repo URL. --- # Sampler Pipeline: Prototype → Profile → Promote diff --git a/tests/test_memory_surfaces.py b/tests/test_memory_surfaces.py index 121f6c26..f7d7c672 100644 --- a/tests/test_memory_surfaces.py +++ b/tests/test_memory_surfaces.py @@ -2,7 +2,7 @@ First regression net for `agents/faculties/memory/_memory.py`. What matters: the root entry surfaces (index.md, reading-queue.md, bibliography/README.md, -wiki/CLAUDE.md) are part of the corpus — they were invisible before #239 even +wiki/AGENTS.md) are part of the corpus — they were invisible before #239 even though PyAutoMemory/AGENTS.md tells every agent to index them first; surface labels stay repo-name-first (digest()'s exit-4 logic splits on '/'); ranking and the no-hits path behave; and the conductors' printed PyAutoMemory pointers @@ -27,7 +27,7 @@ def _memory_repo(tmp_path: Path) -> Path: (m / "index.md").write_text("# Index\nthe entry surface mentions quasars\n") (m / "reading-queue.md").write_text("# Reading queue\n\nquasar paper one\n") (m / "bibliography" / "README.md").write_text("# Bib\nadding a quasar paper\n") - (m / "wiki" / "CLAUDE.md").write_text("# Schema\nstatus flags\n") + (m / "wiki" / "AGENTS.md").write_text("# Schema\nstatus flags\n") (m / "wiki" / "demo" / "concepts" / "quasars.md").write_text( "---\nstatus: drafted\n---\nquasars lens light\n") return m @@ -37,7 +37,7 @@ def test_root_entry_surfaces_are_in_the_corpus(tmp_path): m = _memory_repo(tmp_path) triples = list(_memory.surfaces(m, None, None)) root_files = {f.name for name, _, f in triples if name == "PyAutoMemory/root"} - assert root_files == {"index.md", "reading-queue.md", "README.md", "CLAUDE.md"} + assert root_files == {"index.md", "reading-queue.md", "README.md", "AGENTS.md"} # the wiki pages still arrive under their sub-wiki label assert any(name == "PyAutoMemory/demo" for name, _, _ in triples) @@ -113,6 +113,7 @@ def test_seed_pages_are_not_a_recall_surface(tmp_path): def test_canonical_schema_is_recalled_instead_of_claude_adapter(tmp_path): m = _memory_repo(tmp_path) (m / "wiki/AGENTS.md").write_text("# Shared schema\ncanonical-schema-marker\n") + # A leftover per-tool pointer file must never displace the shared schema. (m / "wiki/CLAUDE.md").write_text("@AGENTS.md\n") digest = _memory.digest("canonical-schema-marker", m, None, None, limit=8) assert [p["page"] for p in digest["pages"]] == ["wiki/AGENTS.md"]