The guide learns the thread it was silent on, and grows a vendor-neutral twin
CLAUDE.md bumps to v14: a new Comments section teaches the comments/ mechanics (chronology-as-ordering, author vs modified-by, .draft/.trash as the app's, retract-by-follow-up), and a new "Use the thread: journal your work" section teaches conduct the guide never had — body is the spec, thread is the journal, post a plan cold-reader-ready on start, decisions as they're made, questions as comments, re-read before resuming, close with verification. comments/ leaves the reserved-tracker-keys list; the Layout diagram gains comments/ and AGENTS.md. The app now writes a byte-identical twin at AGENTS.md, the vendor-neutral name most non-Claude tools read — same lifecycle as CLAUDE.md, decided and healed independently per claimed name, both funneling a markerless foreign file to the single shared CLAUDE.user.md rescue. AgentGuide.install now returns [Displacement]; IntegrityRules.claimedRootNames and BoardStore.refreshAgentGuide cover both names; ChangeNarrator's guide-commit path check widens to both. DESIGN/08-agent-integration.md amends: the agent-guide section gains the Comments and Use-the-thread bullets and an AGENTS.md twin paragraph. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -842,6 +842,23 @@ struct BoardWriterCreateBoardTests {
|
||||
#expect(guideText == AgentGuide.content, "the exact shipped guide, not a hand-rolled write")
|
||||
#expect(!fixture.exists("MyBoard.kanban/\(AgentGuide.userFilename)"), "nothing existed to rescue at a brand-new root")
|
||||
}
|
||||
|
||||
/// **The twin** (ruled 2026-08-09, card dc1314bb): `createBoard` writes `AGENTS.md` alongside
|
||||
/// `CLAUDE.md`, byte-identical — a fresh board never lives even a moment with only one of the two
|
||||
/// claimed guide names.
|
||||
@Test("createBoard installs the AGENTS.md twin too, byte-identical to CLAUDE.md")
|
||||
func createBoardInstallsTheAgentsMdTwin() throws {
|
||||
let fixture = try WriterFixture()
|
||||
defer { fixture.tearDown() }
|
||||
let root = fixture.url("MyBoard.kanban")
|
||||
|
||||
try BoardWriter.createBoard(at: root, title: "My Board")
|
||||
|
||||
let claudeText = try fixture.data("MyBoard.kanban/\(AgentGuide.filename)")
|
||||
let agentsText = try fixture.data("MyBoard.kanban/\(AgentGuide.agentsFilename)")
|
||||
#expect(agentsText == claudeText, "byte-identical, not merely equal-content")
|
||||
#expect(agentsText == Data(AgentGuide.content.utf8))
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Create lane / card
|
||||
|
||||
Reference in New Issue
Block a user