personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

test(docs): align agent guide expectations

+34 -74
+5 -1
apps/sol/maint/003_seed_agents_md.py
··· 42 42 claude_path = journal / "CLAUDE.md" 43 43 gemini_path = journal / "GEMINI.md" 44 44 45 - if agents_path.exists() and _symlink_points_to_agents(claude_path) and _symlink_points_to_agents(gemini_path): 45 + if ( 46 + agents_path.exists() 47 + and _symlink_points_to_agents(claude_path) 48 + and _symlink_points_to_agents(gemini_path) 49 + ): 46 50 print("all journal agent files already present") 47 51 return 0 48 52
+6 -6
talent/coder.md
··· 40 40 ### Phase 3: Implement 41 41 42 42 - **Purpose**: Execute the plan — write code and verify it works. 43 - - **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. 43 + - **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. 44 44 - **Tool access**: Full tool access: Read, Edit, Write, Bash, Glob, Grep. 45 45 - **Expected output**: Summary of all changes made, test results, and any deviations from the plan. 46 46 ··· 70 70 71 71 ## Development Context 72 72 73 - Sub-agents have access to the **coding** skill for solstone development 74 - guidelines, project structure, coding standards, testing, and environment. 75 - The implement and audit sub-agents will load it automatically when working 76 - with code. Do not inline development guidelines here — the coding skill 77 - is the single source of truth. 73 + Sub-agents should use the repo-root `AGENTS.md` developer guide plus the 74 + linked `docs/project-structure.md`, `docs/coding-standards.md`, 75 + `docs/testing.md`, and `docs/environment.md` references for solstone 76 + development guidance. Do not inline development guidelines here — those 77 + docs are the single source of truth.
+9 -12
tests/test_cogitate_coder.py
··· 209 209 assert "description" in post.metadata 210 210 211 211 def test_coder_references_coding_skill(self): 212 - """coder.md must reference the coding skill instead of inlining guidelines.""" 212 + """coder.md must reference the developer docs instead of inlining guidelines.""" 213 213 from pathlib import Path 214 214 215 215 coder_path = Path(__file__).parent.parent / "talent" / "coder.md" 216 216 content = coder_path.read_text(encoding="utf-8") 217 217 218 - # Should reference the coding skill, not inline dev guidelines 219 - assert "coding" in content.lower() 218 + # Should reference the developer guide/docs, not inline dev guidelines 219 + assert "AGENTS.md" in content 220 + assert "docs/project-structure.md" in content 220 221 assert "single source of truth" in content 221 222 222 - # The coding skill must exist with reference files 223 - coding_skill = Path(__file__).parent.parent / "talent" / "coding" / "SKILL.md" 224 - assert coding_skill.exists(), "talent/coding/SKILL.md not found" 225 - 226 - coding_refs = Path(__file__).parent.parent / "talent" / "coding" / "reference" 227 - assert (coding_refs / "coding-standards.md").exists() 228 - assert (coding_refs / "project-structure.md").exists() 229 - assert (coding_refs / "testing.md").exists() 230 - assert (coding_refs / "environment.md").exists() 223 + docs_dir = Path(__file__).parent.parent / "docs" 224 + assert (docs_dir / "coding-standards.md").exists() 225 + assert (docs_dir / "project-structure.md").exists() 226 + assert (docs_dir / "testing.md").exists() 227 + assert (docs_dir / "environment.md").exists()
+13 -55
tests/test_generate_agents.py
··· 1 1 # SPDX-License-Identifier: AGPL-3.0-only 2 2 # Copyright (c) 2026 sol pbc 3 3 4 - from __future__ import annotations 5 - 6 - import os 7 - import subprocess 8 - import sys 9 4 from pathlib import Path 10 5 11 6 12 - def test_generate_agents_md_uses_fixture_journal(monkeypatch): 7 + def test_root_agents_md_is_hand_maintained(): 13 8 project_root = Path(__file__).resolve().parent.parent 14 9 agents_path = project_root / "AGENTS.md" 15 - original_content = agents_path.read_text(encoding="utf-8") 16 - 17 - monkeypatch.setenv("_SOLSTONE_JOURNAL_OVERRIDE", "tests/fixtures/journal") 18 - 19 - try: 20 - subprocess.run( 21 - [sys.executable, "scripts/generate_agents_md.py"], 22 - cwd=project_root, 23 - check=True, 24 - env=os.environ.copy(), 25 - capture_output=True, 26 - text=True, 27 - ) 10 + content = agents_path.read_text(encoding="utf-8") 28 11 29 - generated = agents_path.read_text(encoding="utf-8") 30 - assert generated.startswith( 31 - "<!-- generated from sol/identity.md — do not edit directly -->" 32 - ) 33 - assert "Sol" in generated 34 - assert "Test User" in generated 35 - assert "$Agent_name" not in generated 36 - assert "$name" not in generated 37 - finally: 38 - agents_path.write_text(original_content, encoding="utf-8") 12 + assert content.startswith("# solstone Developer Guide") 13 + assert "generated from sol/identity.md" not in content 14 + assert "docs/project-structure.md" in content 15 + assert "003_seed_agents_md.py" in content 39 16 40 17 41 - def test_generate_agents_md_no_config(monkeypatch, tmp_path): 18 + def test_root_agent_symlinks_point_to_agents(): 42 19 project_root = Path(__file__).resolve().parent.parent 43 - agents_path = project_root / "AGENTS.md" 44 - original_content = agents_path.read_text(encoding="utf-8") 45 - 46 - monkeypatch.setenv("_SOLSTONE_JOURNAL_OVERRIDE", str(tmp_path)) 47 - 48 - try: 49 - subprocess.run( 50 - [sys.executable, "scripts/generate_agents_md.py"], 51 - cwd=project_root, 52 - check=True, 53 - env=os.environ.copy(), 54 - capture_output=True, 55 - text=True, 56 - ) 20 + claude_path = project_root / "CLAUDE.md" 21 + gemini_path = project_root / "GEMINI.md" 57 22 58 - generated = agents_path.read_text(encoding="utf-8") 59 - assert generated.startswith( 60 - "<!-- generated from sol/identity.md — do not edit directly -->" 61 - ) 62 - assert "your journal owner" in generated 63 - assert "Sol" in generated 64 - assert "$Agent_name" not in generated 65 - assert "$name" not in generated 66 - assert "$pronouns_subject" not in generated 67 - finally: 68 - agents_path.write_text(original_content, encoding="utf-8") 23 + assert claude_path.is_symlink() 24 + assert gemini_path.is_symlink() 25 + assert claude_path.readlink() == Path("AGENTS.md") 26 + assert gemini_path.readlink() == Path("AGENTS.md")
+1
tests/test_journal_seeding_maint.py
··· 9 9 10 10 import pytest 11 11 12 + 12 13 @pytest.fixture 13 14 def journal_path(tmp_path, monkeypatch): 14 15 monkeypatch.setenv("_SOLSTONE_JOURNAL_OVERRIDE", str(tmp_path))