···4242 claude_path = journal / "CLAUDE.md"
4343 gemini_path = journal / "GEMINI.md"
44444545- if agents_path.exists() and _symlink_points_to_agents(claude_path) and _symlink_points_to_agents(gemini_path):
4545+ if (
4646+ agents_path.exists()
4747+ and _symlink_points_to_agents(claude_path)
4848+ and _symlink_points_to_agents(gemini_path)
4949+ ):
4650 print("all journal agent files already present")
4751 return 0
4852
+6-6
talent/coder.md
···4040### Phase 3: Implement
41414242- **Purpose**: Execute the plan — write code and verify it works.
4343-- **Sub-agent instructions**: Execute the design plan. Write clean, focused code following the project's conventions (the coding skill provides standards). Make minimum changes needed. Run `make test` after changes. Fix any test failures. Add tests for new behavior. Do not refactor surrounding code or add features beyond the plan.
4343+- **Sub-agent instructions**: Execute the design plan. Write clean, focused code following the project's conventions (the repo-root `AGENTS.md` and `docs/` references provide standards). Make minimum changes needed. Run `make test` after changes. Fix any test failures. Add tests for new behavior. Do not refactor surrounding code or add features beyond the plan.
4444- **Tool access**: Full tool access: Read, Edit, Write, Bash, Glob, Grep.
4545- **Expected output**: Summary of all changes made, test results, and any deviations from the plan.
4646···70707171## Development Context
72727373-Sub-agents have access to the **coding** skill for solstone development
7474-guidelines, project structure, coding standards, testing, and environment.
7575-The implement and audit sub-agents will load it automatically when working
7676-with code. Do not inline development guidelines here — the coding skill
7777-is the single source of truth.
7373+Sub-agents should use the repo-root `AGENTS.md` developer guide plus the
7474+linked `docs/project-structure.md`, `docs/coding-standards.md`,
7575+`docs/testing.md`, and `docs/environment.md` references for solstone
7676+development guidance. Do not inline development guidelines here — those
7777+docs are the single source of truth.
+9-12
tests/test_cogitate_coder.py
···209209 assert "description" in post.metadata
210210211211 def test_coder_references_coding_skill(self):
212212- """coder.md must reference the coding skill instead of inlining guidelines."""
212212+ """coder.md must reference the developer docs instead of inlining guidelines."""
213213 from pathlib import Path
214214215215 coder_path = Path(__file__).parent.parent / "talent" / "coder.md"
216216 content = coder_path.read_text(encoding="utf-8")
217217218218- # Should reference the coding skill, not inline dev guidelines
219219- assert "coding" in content.lower()
218218+ # Should reference the developer guide/docs, not inline dev guidelines
219219+ assert "AGENTS.md" in content
220220+ assert "docs/project-structure.md" in content
220221 assert "single source of truth" in content
221222222222- # The coding skill must exist with reference files
223223- coding_skill = Path(__file__).parent.parent / "talent" / "coding" / "SKILL.md"
224224- assert coding_skill.exists(), "talent/coding/SKILL.md not found"
225225-226226- coding_refs = Path(__file__).parent.parent / "talent" / "coding" / "reference"
227227- assert (coding_refs / "coding-standards.md").exists()
228228- assert (coding_refs / "project-structure.md").exists()
229229- assert (coding_refs / "testing.md").exists()
230230- assert (coding_refs / "environment.md").exists()
223223+ docs_dir = Path(__file__).parent.parent / "docs"
224224+ assert (docs_dir / "coding-standards.md").exists()
225225+ assert (docs_dir / "project-structure.md").exists()
226226+ assert (docs_dir / "testing.md").exists()
227227+ assert (docs_dir / "environment.md").exists()
+13-55
tests/test_generate_agents.py
···11# SPDX-License-Identifier: AGPL-3.0-only
22# Copyright (c) 2026 sol pbc
3344-from __future__ import annotations
55-66-import os
77-import subprocess
88-import sys
94from pathlib import Path
1051161212-def test_generate_agents_md_uses_fixture_journal(monkeypatch):
77+def test_root_agents_md_is_hand_maintained():
138 project_root = Path(__file__).resolve().parent.parent
149 agents_path = project_root / "AGENTS.md"
1515- original_content = agents_path.read_text(encoding="utf-8")
1616-1717- monkeypatch.setenv("_SOLSTONE_JOURNAL_OVERRIDE", "tests/fixtures/journal")
1818-1919- try:
2020- subprocess.run(
2121- [sys.executable, "scripts/generate_agents_md.py"],
2222- cwd=project_root,
2323- check=True,
2424- env=os.environ.copy(),
2525- capture_output=True,
2626- text=True,
2727- )
1010+ content = agents_path.read_text(encoding="utf-8")
28112929- generated = agents_path.read_text(encoding="utf-8")
3030- assert generated.startswith(
3131- "<!-- generated from sol/identity.md — do not edit directly -->"
3232- )
3333- assert "Sol" in generated
3434- assert "Test User" in generated
3535- assert "$Agent_name" not in generated
3636- assert "$name" not in generated
3737- finally:
3838- agents_path.write_text(original_content, encoding="utf-8")
1212+ assert content.startswith("# solstone Developer Guide")
1313+ assert "generated from sol/identity.md" not in content
1414+ assert "docs/project-structure.md" in content
1515+ assert "003_seed_agents_md.py" in content
391640174141-def test_generate_agents_md_no_config(monkeypatch, tmp_path):
1818+def test_root_agent_symlinks_point_to_agents():
4219 project_root = Path(__file__).resolve().parent.parent
4343- agents_path = project_root / "AGENTS.md"
4444- original_content = agents_path.read_text(encoding="utf-8")
4545-4646- monkeypatch.setenv("_SOLSTONE_JOURNAL_OVERRIDE", str(tmp_path))
4747-4848- try:
4949- subprocess.run(
5050- [sys.executable, "scripts/generate_agents_md.py"],
5151- cwd=project_root,
5252- check=True,
5353- env=os.environ.copy(),
5454- capture_output=True,
5555- text=True,
5656- )
2020+ claude_path = project_root / "CLAUDE.md"
2121+ gemini_path = project_root / "GEMINI.md"
57225858- generated = agents_path.read_text(encoding="utf-8")
5959- assert generated.startswith(
6060- "<!-- generated from sol/identity.md — do not edit directly -->"
6161- )
6262- assert "your journal owner" in generated
6363- assert "Sol" in generated
6464- assert "$Agent_name" not in generated
6565- assert "$name" not in generated
6666- assert "$pronouns_subject" not in generated
6767- finally:
6868- agents_path.write_text(original_content, encoding="utf-8")
2323+ assert claude_path.is_symlink()
2424+ assert gemini_path.is_symlink()
2525+ assert claude_path.readlink() == Path("AGENTS.md")
2626+ assert gemini_path.readlink() == Path("AGENTS.md")