{"content": "message 11110 file Screenshot 2026-09-25 at 16.39.56.png needs tags \u2014 inspect the attachment, then journal message tag 11110 \"Screenshot 2026-09-25 at 16.39.56.png\" \"<a few words describing what it shows>\"; message 11143 file Screenshot 2026-09-25 at 17.28.18.png needs tags \u2014 inspect the attachment, then journal message tag 11143 \"Screenshot 2026-09-25 at 17.28.18.png\" \"<a few words describing what it shows>\"; message 11143 file Screenshot 2026-09-25 at 17.28.31.png needs tags \u2014 inspect the attachment, then journal message tag 11143 \"Screenshot 2026-09-25 at 17.28.31.png\" \"<a few words describing what it shows>\"", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).", "meta": {"from": "journal"}}
{"content": "request GET /api/main/agent/34/edits is slower than its budget \u2014 1123ms last (89ms of it working, 8ms collecting garbage), against a budget of 50ms. Seen 12 times.", "meta": {"from": "journal"}}
{"content": "1 new message 11332 - answer by opening your turn with [!reply:11332]", "meta": {"from": "journal"}}
{"content": "rule 49 \u2014 A dialog whose content grows keeps one fixed height, and its content\u2026 \u2014 Message 5361, after asking more than once: a dialog that shows output as it arrives (install, update, logs) opens at its final height and never jumps; only its content scrolls.", "meta": {"from": "journal"}}
{"content": "the todo tag does this in one step \u2014 [!todo=\"the title\"] files it with the turn as its brief; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "1 new message 11333 - answer by opening your turn with [!reply:11333]", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 149ms last (57ms of it working), against a budget of 50ms. Seen 190 times.", "meta": {"from": "journal"}}
{"content": "rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "your command ran 35s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "1 new message 11337 - answer by opening your turn with [!reply:11337]", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; the hook hit an error \u2014 journal: the hook hit an error and kept going; the last of it is below and the whole of it is in .journal/runtime/engine.log. Fix it, then say so. the hook got no answer from the server 1 times (codes 000); 1 new message 11338 - answer by opening your turn with [!reply:11338]", "meta": {"from": "journal"}}
{"content": "1 new message 11339 - answer by opening your turn with [!reply:11339]", "meta": {"from": "journal"}}
{"content": "1 new message 11340 - answer by opening your turn with [!reply:11340]", "meta": {"from": "journal"}}
{"content": "1 new message 11342 - answer by opening your turn with [!reply:11342]", "meta": {"from": "journal"}}
{"content": "fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.", "meta": {"from": "journal"}}
{"content": "the await tag on did not run \u2014 ! nothing is open: journal work start \"<the work>\" first - add what is missing to the tag itself", "meta": {"from": "journal"}}
{"content": "todo 1895 next", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "your wait for the suite on the New work lines, and Saul's proposal is over\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.", "meta": {"from": "journal"}}
{"content": "your wait for Saul's round-2 proposal and the 2.190.0 installs is over\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "rule 44 \u2014 Release only when the user says so, never after every change \u2014 Message 5929 (2026-09-23): stop releasing constantly. Work is committed on a branch and released only when the user says so. For now nothing is released until every Code Commandments sin is fixed. This replaces message 1067's order to push and tag every update at once.; rule 46 \u2014 Only commit and push once the whole journal is proven to boot \u2014 Messages 2178 and 2179. A release that has not been started for real can crash every project that installs it, as 2.78.3 did for Codex and 2.84.0 did to project records. Before every commit and push: the full suite passes, including tests/test_it_boots.py, which installs a packed copy into a fresh project, launches Claude and Codex from it, writes a project record, upgrades again and checks the record survives. When a change touches launching, installing or upgrading, also start a real journal in a scratch project and close it properly afterwards, leaving no process behind.", "meta": {"from": "journal"}}
{"content": "1 new message 11359 - answer by opening your turn with [!reply:11359]", "meta": {"from": "journal"}}
{"content": "check Saul's clickable prototype of the New work redesign now - you have\u2026 \u2014 look at the thing itself: the background shell's output, the process, the run's status. If it is still going, say journal work await \"<what you wait for>\" again and wait. If it finished or failed, journal work log what came of it and take the next step. Never wait for something you can do without.", "meta": {"from": "journal"}}
{"content": "question 153 completed", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "1 new message 11365 - answer by opening your turn with [!reply:11365]", "meta": {"from": "journal"}}
{"content": "1 new message 11367 - answer by opening your turn with [!reply:11367]", "meta": {"from": "journal"}}
{"content": "1 new message 11368 - answer by opening your turn with [!reply:11368]", "meta": {"from": "journal"}}
{"content": "your wait for Saul's clickable prototype of the New work redesign is over\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "auto mode is on and work 1602 stands still while todo 1898 is ready \u2014 if work 1602 waits on the user, decide it yourself when you can; otherwise put the question on its row with journal todo ask, end or park the work, and start todo 1898. Stop only when nothing ready is left.; work 1602 is still open \u2014 end it or park it before you stop: journal work end 1602 --how \"<what landed>\", or journal work park 1602 \"<why it waits>\"", "meta": {"from": "journal"}}
{"content": "1 new message 11373 - answer by opening your turn with [!reply:11373]", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).", "meta": {"from": "journal"}}
{"content": "1 new message 11374 - answer by opening your turn with [!reply:11374]", "meta": {"from": "journal"}}
{"content": "question 154 completed", "meta": {"from": "journal"}}
{"content": "your wait for the suite on the auto-update change is over, because you are\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "law L1 \u2014 Every subagent dispatch names its model and chooses the least\u2026 \u2014 Use a fast, economical model for mechanical work with a known answer, a capable general model for careful implementation, and the strongest model only when the task turns on difficult judgement. Inheriting the orchestrator's model is not a model choice. If the dispatch API cannot accept a model, that operation is exempt.; law L2 \u2014 Every subagent is bound to a concrete job; never dispatch a generic\u2026 \u2014 Use the most specific available agent type whose declared purpose matches the assignment. On providers without agent types, give the dispatch a concrete task name and bounded prompt. If no suitable specialization exists, keep the work in the main agent instead of manufacturing an unscoped helper.; law L4 \u2014 Follow-up work goes back to the subagent that did the first part\u2026 \u2014 A subagent that drew a design, wrote the code or ran the research keeps what it learned. When the user asks for a change to its work, continue that subagent with a message rather than dispatching a new one that has to rediscover everything; start fresh only when the earlier one is gone or the new work is unrelated.; law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "1 new message 11377 - answer by opening your turn with [!reply:11377]", "meta": {"from": "journal"}}
{"content": "your wait for the suite on the auto-update change, and Saul's live prototype\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "the await tag does this in one step \u2014 [!await] makes the rest of the turn what you wait for; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "1 new message 11379 - answer by opening your turn with [!reply:11379]", "meta": {"from": "journal"}}
{"content": "1 new message 11382 - answer by opening your turn with [!reply:11382]", "meta": {"from": "journal"}}
{"content": "1 new message 11383 - answer by opening your turn with [!reply:11383]", "meta": {"from": "journal"}}
{"content": "your wait for 2.191.0's installs and Saul's live prototype is over, because\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "rule 35 \u2014 Write clean code - one funnel per kind of operation, never the same\u2026 \u2014 Every kind of operation has one funnel: one method that creates, one that saves, one that refuses, one that formats. A second method that does the same thing under another name splits the behaviour, and the two drift apart. Before writing a method, search for the one that already does it and extend that. scripts/checks/funnels.py finds bodies written twice.", "meta": {"from": "journal"}}
{"content": "answer message 11383 before you write anything \u2014 answer by opening your turn with [!reply:11383]. a reply, a reaction, or journal message processed <n>", "meta": {"from": "journal"}}
{"content": "1 new message 11385 - answer by opening your turn with [!reply:11385]", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.", "meta": {"from": "journal"}}
{"content": "fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.", "meta": {"from": "journal"}}
{"content": "your wait for the suite on the orchestrator fix is over, because you are\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; sequence 9, Writing a document, step 1 of 6 - Lay out the chapters \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:64. Put every chapter you plan on the document before writing any of them: journal doc section 64 \"<chapter>\" \"Being written.\" for each, in order. Put the document's reference on a line of its own in the chat, like `doc 41`, so the user can open it and watch. Then journal sequence next 9 --about doc:64.; commit 5da7d8e6b closed to-do 1903 and ended work 1603 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 2 of 6 - Write each chapter \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:64. Write the chapters one at a time and in order with journal doc section 64 \"<chapter>\" \"<body>\"; the user sees each one appear where you are. Cut a chapter that turned out empty with journal doc cut 64 \"<chapter>\". Then journal sequence next 9 --about doc:64.", "meta": {"from": "journal"}}
{"content": "fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.; rule 45 \u2014 No prose words as names in code - said, says, heard, spoke, told\u2026 \u2014 Messages 1360 and 1698. The user has said more than once that code must not read like prose: a variable, attribute, property or function is named for what it holds or does (text, command, labels, lines), never with a verb from a story. 'says' on the Design type (1360) and 'said = call.said.lower()' in features/recital.py (1698) are the examples. Rule 27 states the naming rule; this one carries the words, so writing one of them whispers it. Before writing a name, ask whether a reader who has never seen the code would know what it holds.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 3 of 6 - Put it in a collection \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:64. If a collection the user keeps fits what you wrote, add it: journal collection add <collection n> doc:64. Look with journal collection all first; skip this when none fits, and never make a collection just for it. Then journal sequence next 9 --about doc:64.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 4 of 6 - Link what it relates to \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:64. Link the rows it answers or was built on, such as the to-dos, plans, documents, reports or messages it is about, with journal doc link 64 \"<row>\" for each. Leave out rows it only mentions in passing. Then journal sequence next 9 --about doc:64.; sequence 9, Writing a document, step 5 of 6 - Offer the next step \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:64. If it asks the user to decide or approve something, give it buttons: journal doc update 64 --set buttons='[{\"label\": \"Accept this proposal\", \"say\": \"I accept this proposal\", \"choice\": \"answer\"}, {\"label\": \"Change it first\", \"say\": \"I want changes first\", \"choice\": \"answer\"}]'. A button with say sends those words to you as the user's message; one naming a type, n and action runs that command. Buttons of one decision share a choice, so the others go once one is pressed. Skip this when nothing waits on the user. Then journal sequence next 9 --about doc:64.; sequence 9, Writing a document, step 6 of 6 - Answer with it \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:64. Say in one or two plain lines what it concludes, then its reference on a line of its own, like `doc 41` or `report 98`. Finish with journal sequence next 9 --about doc:64.", "meta": {"from": "journal"}}
{"content": "todo 1901 next", "meta": {"from": "journal"}}
{"content": "1 new message 11403 - answer by opening your turn with [!reply:11403]", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 70ms last (67ms of it working), against a budget of 50ms. Seen 223 times.; doc 64 updated", "meta": {"from": "journal"}}
{"content": "rule 44 \u2014 Release only when the user says so, never after every change \u2014 Message 5929 (2026-09-23): stop releasing constantly. Work is committed on a branch and released only when the user says so. For now nothing is released until every Code Commandments sin is fixed. This replaces message 1067's order to push and tag every update at once.; rule 46 \u2014 Only commit and push once the whole journal is proven to boot \u2014 Messages 2178 and 2179. A release that has not been started for real can crash every project that installs it, as 2.78.3 did for Codex and 2.84.0 did to project records. Before every commit and push: the full suite passes, including tests/test_it_boots.py, which installs a packed copy into a fresh project, launches Claude and Codex from it, writes a project record, upgrades again and checks the record survives. When a change touches launching, installing or upgrading, also start a real journal in a scratch project and close it properly afterwards, leaving no process behind.", "meta": {"from": "journal"}}
{"content": "rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.; rule 50 \u2014 Everything the user does is doable in the viewer \u2014 Message 6710 (2026-09-23): the user never uses the CLI, only the UI; everything should be doable from the viewer. The journal commands are for agents; any action meant for the user (making boards, confirming, accepting, hosting, watching an agent) needs its place in the viewer.; rule 52 \u2014 A chat mark for something the user did sits on the user's side \u2014 Message 10960 (2026-09-25): marks for the user's own actions, such as answering a question, are right-aligned like the user's messages. A mark is put there by giving its card side=user.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1901, New work runs on a dedicated fast subagent, its model set in\u2026 \u2014 journal todo start 1901 when it is next; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "sequence 2, Building a plan, step 1 of 4 - Name the goal \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 2 --about plan:20. Settle with the user what is true when the plan is done, and set it as the plan's goal. When it is done: journal sequence next 2 --about plan:20.", "meta": {"from": "journal"}}
{"content": "plan 20 is building - add its phases \u2014 journal plan phase 20 \"<title>\" --when \"<complete when>\" for each phase, --checkpoint where the user should look; then journal plan stage 20 todos", "meta": {"from": "journal"}}
{"content": "sequence 2, Building a plan, step 2 of 4 - Add the phases \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 2 --about plan:20. Add every phase in order with journal plan phase 20 \"<title>\" --when \"<complete when>\", and --checkpoint where the user should look before it goes on. When it is done: journal sequence next 2 --about plan:20.", "meta": {"from": "journal"}}
{"content": "plan 20 is at its to-dos \u2014 file each phase's rows and put them under it with journal plan todos 20 <phase> <rows...>; when every phase has rows, journal plan ready 20", "meta": {"from": "journal"}}
{"content": "every phase of plan 20 has its to-dos \u2014 journal plan ready 20 hands it to the user, who approves it", "meta": {"from": "journal"}}
{"content": "sequence 2, Building a plan, step 3 of 4 - File the rows \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 2 --about plan:20. journal plan stage 20 todos, then file the to-dos and put each under its phase with journal plan todos 20 <phase> <rows>. When it is done: journal sequence next 2 --about plan:20.; sequence 2, Building a plan, step 4 of 4 - Hand it over \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 2 --about plan:20. When every phase has rows, journal plan ready 20. Only the user approves it; you start it when they have. When it is done: journal sequence next 2 --about plan:20.", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat; work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.", "meta": {"from": "journal"}}
{"content": "your wait for the suite on the step-hold fix is over, because you are working\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "the await tag does this in one step \u2014 [!await] makes the rest of the turn what you wait for; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit 7e7fc5386 closed to-do 1904 and ended work 1605 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "the user approved plan 20, The board's sequences - start it \u2014 journal plan start 20 makes it active and parks a plan that runs; then work its first phase's rows in order; plan 20 updated; 1 new message 11412 - answer by opening your turn with [!reply:11412]", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 247ms last (126ms of it working), against a budget of 50ms. Seen 227 times.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "rule 51 \u2014 Every finished feature is committed, pushed and released with a new\u2026 \u2014 Message 9207 (2026-09-24): when a new feature is ready, commit, push and publish a new tag. This is the user's standing word for releasing, so rule 44's only-when-the-user-says is met by it for finished features; fixes in between wait for the next feature or a patch the user asks for.", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).; fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.", "meta": {"from": "journal"}}
{"content": "your command ran 33s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "1 new message 11420 - answer by opening your turn with [!reply:11420]", "meta": {"from": "journal"}}
{"content": "Carry on with what you were doing; the model or effort change you were interrupted for is done.", "meta": {"from": "journal"}}
{"content": "1 new message 11426 - answer by opening your turn with [!reply:11426]", "meta": {"from": "journal"}}
{"content": "your wait for the phase 2 tests of plan 20 is over, because you are working\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting; work 1607 in hand \u2014 The journal ships four custom agent types \u2014 if this is not what you are doing, end it or park it and start the work you are in", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "fact 18 \u2014 cProfile inflates the slow-request profiles about tenfold \u2014 The faults feature writes a profile when a request passes its budget, and the profile is taken with cProfile, which adds per-call overhead. On 2026-09-22 /api/summary profiled at 58ms with 48ms inside Resource.fork's deep copy; with the profiler off the same call ran in 2 to 7ms. Read the profile for where the time goes in relative terms, then time the call with curl before changing anything.; rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.", "meta": {"from": "journal"}}
{"content": "shipped.py names 2 files in the project \u2014 write the path so the chat can link it: src/features/sequences/shipped.py, src/features/templates/shipped.py", "meta": {"from": "journal"}}
{"content": "rule 40 \u2014 A feature is named for what it is, never for its machinery \u2014 Messages 599, 600 and 703. A feature is a capability the user would name and would think of switching off. File tracking, a write gate, a phrase bank, a tree diff are services used inside a feature, not features of their own: they live in the feature they serve. Before adding a directory under features/, say what the user would call it; if the answer names a mechanism, it belongs inside something else. Report 16 holds the grouping this implies.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "rule 39 \u2014 Use only registered exclamation response tags \u2014 A tag like [!reply:12] runs a command, and only the tags in the tags.runs setting are registered. An invented tag does nothing and shows as raw text in the chat. Use the registered ones (reply, log, end, todo, fact, rule) and nothing else.; rule 49 \u2014 A dialog whose content grows keeps one fixed height, and its content\u2026 \u2014 Message 5361, after asking more than once: a dialog that shows output as it arrives (install, update, logs) opens at its final height and never jumps; only its content scrolls.", "meta": {"from": "journal"}}
{"content": "fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.; fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 212ms last (51ms of it working), against a budget of 50ms. Seen 230 times.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.", "meta": {"from": "journal"}}
{"content": "rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.; rule 52 \u2014 A chat mark for something the user did sits on the user's side \u2014 Message 10960 (2026-09-25): marks for the user's own actions, such as answering a question, are right-aligned like the user's messages. A mark is put there by giving its card side=user.", "meta": {"from": "journal"}}
{"content": "work 1612 in hand \u2014 The added line offers Play and names uncovered clauses \u2014 if this is not what you are doing, end it or park it and start the work you are in", "meta": {"from": "journal"}}
{"content": "rule 50 \u2014 Everything the user does is doable in the viewer \u2014 Message 6710 (2026-09-23): the user never uses the CLI, only the UI; everything should be doable from the viewer. The journal commands are for agents; any action meant for the user (making boards, confirming, accepting, hosting, watching an agent) needs its place in the viewer.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; rule 37 \u2014 Close every to-do explicitly with todo done or a Journal commit\u2026 \u2014 Ending work does not close its row. A to-do is closed by journal todo done <n> --how, or by a commit whose message carries Journal: todos done <n> at column 0, several numbers separated by commas. A row left open after its work landed misleads the next session and auto mode.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "rule 38 \u2014 Never change the git branch until the user says so, by name \u2014 The work happens on the branch the user named. That was main until message 5929 and question 80 (2026-09-23), which moved the sins work to the branch sins. Do not create, switch to or merge any other branch unless the user names it in their own words.", "meta": {"from": "journal"}}
{"content": "fact 20 \u2014 A slim supervisor holds the agent and a worker reloads on every build \u2014 Since 2.118.0 (2026-09-23). src/supervisor.py is standard library only and never reloads: journal claude hands its process over to it (os.execv), and it owns the pty and the agent process, relays the terminal, writes the printed and screen captures, listens on the typist socket, restarts the agent in the same session from a relaunch command written to its runtime folder while a restart is pending, and stops it with escalation while draining the pty (an agent cannot finish exiting on macOS while its output is unread). It starts engine/worker.py and starts it again whenever it exits: RELOAD on a new build, RELAUNCH to restart the agent, STOP to end, HEAL or a quick crash to roll back a build through journal heal. The worker holds everything else: seating the session, the start-up confirm typed through the typist, services, viewer, update check, check-in, and the one-time relaunch of sessions launched before engine/terminal.py LAUNCH. engine/terminal.py holds only journal-side helpers. The server (serve.py) still runs the engines and re-execs itself on a .py change. When the agent exits, the supervisor runs journal ended, which puts set-aside hooks back and stops the server when no session is left.; rule 35 \u2014 Write clean code - one funnel per kind of operation, never the same\u2026 \u2014 Every kind of operation has one funnel: one method that creates, one that saves, one that refuses, one that formats. A second method that does the same thing under another name splits the behaviour, and the two drift apart. Before writing a method, search for the one that already does it and extend that. scripts/checks/funnels.py finds bodies written twice.; rule 45 \u2014 No prose words as names in code - said, says, heard, spoke, told\u2026 \u2014 Messages 1360 and 1698. The user has said more than once that code must not read like prose: a variable, attribute, property or function is named for what it holds or does (text, command, labels, lines), never with a verb from a story. 'says' on the Design type (1360) and 'said = call.said.lower()' in features/recital.py (1698) are the examples. Rule 27 states the naming rule; this one carries the words, so writing one of them whispers it. Before writing a name, ask whether a reader who has never seen the code would know what it holds.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 103ms last (57ms of it working), against a budget of 50ms. Seen 232 times.", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).; rule 47 \u2014 The journal sets itself up once, when the server starts, never per\u2026 \u2014 Messages 2220 and 2224. Discovering features and their handlers, seating the feature rows and the rename sweep happen once, at server boot, and again only when a feature is switched on or off, a plugin changes or an environment is added: features.load keeps a set-up generation per journal (SEATED) and redoes the work only when that generation moves. A command, a request or a hook uses what is already there; nothing in their path may rediscover handlers or rescan folders. A cost that repeats per call is a bug to fix, not a budget to raise.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "waiting: 5 unread sequences 21, 22, 23, 24, 25", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit 0e4d85f26 closed to-do 1931 and ended work 1616 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "todo 1932 next", "meta": {"from": "journal"}}
{"content": "you committed work - if a meaningful piece landed, write an update \u2014 journal report changes, then journal report recap \"<one or two sentences>\"; it is pinned at the bottom of the chat. Skip it when the work is small.", "meta": {"from": "journal"}}
{"content": "fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.; law L1 \u2014 Every subagent dispatch names its model and chooses the least\u2026 \u2014 Use a fast, economical model for mechanical work with a known answer, a capable general model for careful implementation, and the strongest model only when the task turns on difficult judgement. Inheriting the orchestrator's model is not a model choice. If the dispatch API cannot accept a model, that operation is exempt.; law L2 \u2014 Every subagent is bound to a concrete job; never dispatch a generic\u2026 \u2014 Use the most specific available agent type whose declared purpose matches the assignment. On providers without agent types, give the dispatch a concrete task name and bounded prompt. If no suitable specialization exists, keep the work in the main agent instead of manufacturing an unscoped helper.; law L4 \u2014 Follow-up work goes back to the subagent that did the first part\u2026 \u2014 A subagent that drew a design, wrote the code or ran the research keeps what it learned. When the user asks for a change to its work, continue that subagent with a message rather than dispatching a new one that has to rediscover everything; start fresh only when the earlier one is gone or the new work is unrelated.; law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "command message create is slower than its budget \u2014 59ms last (51ms of it working), against a budget of 50ms. Seen 1 time.; request POST /api/run is slower than its budget \u2014 70ms last (60ms of it working), against a budget of 50ms. Seen 45 times.", "meta": {"from": "journal"}}
{"content": "rule 48 \u2014 The viewer is built from its component library, and pages only\u2026 \u2014 Message 4258. Every visual piece the viewer shows more than once, or that a user would recognise as the same kind of thing (a dialog, a side panel or inspector, a dropdown, a list row, a switch, a button), is one component in web/src/kit, extracted aggressively, and every page composes those components instead of building its own copy. Before writing markup or styles in a page, look for the kit component that already does it and extend it with a prop; a second hand-built version is a bug. The side panel that animated in but not out, while a separate skill panel did both, is the example.", "meta": {"from": "journal"}}
{"content": "work 1617 in hand \u2014 Changing Claude's effort applies at once, without waiting\u2026 \u2014 if this is not what you are doing, end it or park it and start the work you are in; rule 40 \u2014 A feature is named for what it is, never for its machinery \u2014 Messages 599, 600 and 703. A feature is a capability the user would name and would think of switching off. File tracking, a write gate, a phrase bank, a tree diff are services used inside a feature, not features of their own: they live in the feature they serve. Before adding a directory under features/, say what the user would call it; if the answer names a mechanism, it belongs inside something else. Report 16 holds the grouping this implies.", "meta": {"from": "journal"}}
{"content": "rule 36 \u2014 Clean, DRY, idiomatic before it is committed, never after it is\u2026 \u2014 The user should never be the one who finds duplication, dead code, a clumsy name or a pattern the codebase does not use. Read the diff before every commit as a reviewer would, and fix what is not clean then, not in a follow-up after a complaint.", "meta": {"from": "journal"}}
{"content": "your command ran 31s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "work 1617 is still open \u2014 end it or park it before you stop: journal work end 1617 --how \"<what landed>\", or journal work park 1617 \"<why it waits>\"", "meta": {"from": "journal"}}
{"content": "check The whole suite is running on the effort change for to-do 1932, and the\u2026 \u2014 look at the thing itself: the background shell's output, the process, the run's status. If it is still going, say journal work await \"<what you wait for>\" again and wait. If it finished or failed, journal work log what came of it and take the next step. Never wait for something you can do without.", "meta": {"from": "journal"}}
{"content": "the log tag does this in one step \u2014 [!log:N] makes the turn itself the log entry; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "check The whole suite is running on the effort change for to-do 1932, and the\u2026 \u2014 look at the thing itself: the background shell's output, the process, the run's status. If it is still going, say journal work await \"<what you wait for>\" again and wait. If it finished or failed, journal work log what came of it and take the next step. Never wait for something you can do without.", "meta": {"from": "journal"}}
{"content": "the log tag does this in one step \u2014 [!log:N] makes the turn itself the log entry; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "sequence 8, Writing an update, step 1 of 3 - See what changed \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 8 --about message:11473. journal report changes lists what happened since the user last opened an update, under need, done, doing, plans, commits and also. Read any row you do not remember before you sum it up. Then journal sequence next 8 --about message:11473.; 1 new message 11473 - answer by opening your turn with [!reply:11473]", "meta": {"from": "journal"}}
{"content": "sequence 8, Writing an update, step 2 of 3 - Write the update \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 8 --about message:11473. journal report recap \"<one or two plain sentences: what got done, what is under way, what waits on the user>\" writes the report with those rows in that order. Give every row under need and doing a short note of what it waits on or what is being done now: journal report note <report n> <row> \"<line>\". Add a row the list missed with journal report item <report n> <section> <row> \"<title>\", and take out one that is only noise with journal report drop <report n> <row>. Then journal sequence next 8 --about message:11473.", "meta": {"from": "journal"}}
{"content": "sequence 8, Writing an update, step 3 of 3 - Answer with it \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 8 --about message:11473. Reply in one short line that says the update is pinned at the bottom of the chat, like \"Here's the update; I pinned it at the bottom of the chat.\", then the report's reference on a line of its own, like `report 98`, so the chat shows it as a card the user opens. Finish with journal sequence next 8 --about message:11473.", "meta": {"from": "journal"}}
{"content": "your message 11475 names 309 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11475 \"<the text>\"", "meta": {"from": "journal"}}
{"content": "the reply tag does this in one step \u2014 [!reply:N] makes the turn itself the reply; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit 6633fc325 closed to-do 1932 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.; rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.", "meta": {"from": "journal"}}
{"content": "your message 11479 names 309 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11479 \"<the text>\"", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "rule 39 \u2014 Use only registered exclamation response tags \u2014 A tag like [!reply:12] runs a command, and only the tags in the tags.runs setting are registered. An invented tag does nothing and shows as raw text in the chat. Use the registered ones (reply, log, end, todo, fact, rule) and nothing else.", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit c17d37b66 closed to-do 1934 \u2014 The rows and the work are done; take the next one.; fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.", "meta": {"from": "journal"}}
{"content": "rule 38 \u2014 Never change the git branch until the user says so, by name \u2014 The work happens on the branch the user named. That was main until message 5929 and question 80 (2026-09-23), which moved the sins work to the branch sins. Do not create, switch to or merge any other branch unless the user names it in their own words.", "meta": {"from": "journal"}}
{"content": "request POST /api/main/message is slower than its budget \u2014 101ms last (81ms of it working), against a budget of 50ms. Seen 31 times.; 1 new message 11482 - answer by opening your turn with [!reply:11482]", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "fact 18 \u2014 cProfile inflates the slow-request profiles about tenfold \u2014 The faults feature writes a profile when a request passes its budget, and the profile is taken with cProfile, which adds per-call overhead. On 2026-09-22 /api/summary profiled at 58ms with 48ms inside Resource.fork's deep copy; with the profiler off the same call ran in 2 to 7ms. Read the profile for where the time goes in relative terms, then time the call with curl before changing anything.; rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.; rule 52 \u2014 A chat mark for something the user did sits on the user's side \u2014 Message 10960 (2026-09-25): marks for the user's own actions, such as answering a question, are right-aligned like the user's messages. A mark is put there by giving its card side=user.", "meta": {"from": "journal"}}
{"content": "your command ran 33s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "rule 46 \u2014 Only commit and push once the whole journal is proven to boot \u2014 Messages 2178 and 2179. A release that has not been started for real can crash every project that installs it, as 2.78.3 did for Codex and 2.84.0 did to project records. Before every commit and push: the full suite passes, including tests/test_it_boots.py, which installs a packed copy into a fresh project, launches Claude and Codex from it, writes a project record, upgrades again and checks the record survives. When a change touches launching, installing or upgrading, also start a real journal in a scratch project and close it properly afterwards, leaving no process behind.; request GET /api/main/dashboard is slower than its budget \u2014 328ms last (52ms of it working), against a budget of 50ms. Seen 237 times.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit d7572892c closed to-do 1935 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "rule 44 \u2014 Release only when the user says so, never after every change \u2014 Message 5929 (2026-09-23): stop releasing constantly. Work is committed on a branch and released only when the user says so. For now nothing is released until every Code Commandments sin is fixed. This replaces message 1067's order to push and tag every update at once.; rule 51 \u2014 Every finished feature is committed, pushed and released with a new\u2026 \u2014 Message 9207 (2026-09-24): when a new feature is ready, commit, push and publish a new tag. This is the user's standing word for releasing, so rule 44's only-when-the-user-says is met by it for finished features; fixes in between wait for the next feature or a patch the user asks for.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/agent is slower than its budget \u2014 121ms last (55ms of it working), against a budget of 50ms. Seen 1 time.", "meta": {"from": "journal"}}
{"content": "fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.; law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "fact 20 \u2014 A slim supervisor holds the agent and a worker reloads on every build \u2014 Since 2.118.0 (2026-09-23). src/supervisor.py is standard library only and never reloads: journal claude hands its process over to it (os.execv), and it owns the pty and the agent process, relays the terminal, writes the printed and screen captures, listens on the typist socket, restarts the agent in the same session from a relaunch command written to its runtime folder while a restart is pending, and stops it with escalation while draining the pty (an agent cannot finish exiting on macOS while its output is unread). It starts engine/worker.py and starts it again whenever it exits: RELOAD on a new build, RELAUNCH to restart the agent, STOP to end, HEAL or a quick crash to roll back a build through journal heal. The worker holds everything else: seating the session, the start-up confirm typed through the typist, services, viewer, update check, check-in, and the one-time relaunch of sessions launched before engine/terminal.py LAUNCH. engine/terminal.py holds only journal-side helpers. The server (serve.py) still runs the engines and re-execs itself on a .py change. When the agent exits, the supervisor runs journal ended, which puts set-aside hooks back and stops the server when no session is left.; rule 47 \u2014 The journal sets itself up once, when the server starts, never per\u2026 \u2014 Messages 2220 and 2224. Discovering features and their handlers, seating the feature rows and the rename sweep happen once, at server boot, and again only when a feature is switched on or off, a plugin changes or an environment is added: features.load keeps a set-up generation per journal (SEATED) and redoes the work only when that generation moves. A command, a request or a hook uses what is already there; nothing in their path may rediscover handlers or rescan folders. A cost that repeats per call is a bug to fix, not a budget to raise.", "meta": {"from": "journal"}}
{"content": "check Waiting for the next slow message post or dashboard load to write its\u2026 \u2014 look at the thing itself: the background shell's output, the process, the run's status. If it is still going, say journal work await \"<what you wait for>\" again and wait. If it finished or failed, journal work log what came of it and take the next step. Never wait for something you can do without.", "meta": {"from": "journal"}}
{"content": "your wait for Waiting for the next slow message post or dashboard load to\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 97ms last (60ms of it working), against a budget of 50ms. Seen 242 times.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit b07ad19f0 closed to-do 1936, to-do 1937 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "you committed work - if a meaningful piece landed, write an update \u2014 journal report changes, then journal report recap \"<one or two sentences>\"; it is pinned at the bottom of the chat. Skip it when the work is small.", "meta": {"from": "journal"}}
{"content": "the todo tag does this in one step \u2014 [!todo=\"the title\"] files it with the turn as its brief; it runs only when it opens the last text of your turn; law L1 \u2014 Every subagent dispatch names its model and chooses the least\u2026 \u2014 Use a fast, economical model for mechanical work with a known answer, a capable general model for careful implementation, and the strongest model only when the task turns on difficult judgement. Inheriting the orchestrator's model is not a model choice. If the dispatch API cannot accept a model, that operation is exempt.; law L2 \u2014 Every subagent is bound to a concrete job; never dispatch a generic\u2026 \u2014 Use the most specific available agent type whose declared purpose matches the assignment. On providers without agent types, give the dispatch a concrete task name and bounded prompt. If no suitable specialization exists, keep the work in the main agent instead of manufacturing an unscoped helper.; law L4 \u2014 Follow-up work goes back to the subagent that did the first part\u2026 \u2014 A subagent that drew a design, wrote the code or ran the research keeps what it learned. When the user asks for a change to its work, continue that subagent with a message rather than dispatching a new one that has to rediscover everything; start fresh only when the earlier one is gone or the new work is unrelated.", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).", "meta": {"from": "journal"}}
{"content": "fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.; fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit a46fc4e04 closed to-do 1938 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "rule 45 \u2014 No prose words as names in code - said, says, heard, spoke, told\u2026 \u2014 Messages 1360 and 1698. The user has said more than once that code must not read like prose: a variable, attribute, property or function is named for what it holds or does (text, command, labels, lines), never with a verb from a story. 'says' on the Design type (1360) and 'said = call.said.lower()' in features/recital.py (1698) are the examples. Rule 27 states the naming rule; this one carries the words, so writing one of them whispers it. Before writing a name, ask whether a reader who has never seen the code would know what it holds.", "meta": {"from": "journal"}}
{"content": "board 12 waits for the board-filler (a new request) - dispatch it now \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 12 for message:11501. Your steps are sequence 14, Exploring a request: read them with journal sequence show 14. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11501, do it, then journal --agent board-filler sequence next 14 --about message:11501, and go on the same way; when the drafting sequence starts after the rating of 5, find it with journal sequence all and follow it too. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; 1 new message 11501 - answer by opening your turn with [!reply:11501]; message 11501 requested", "meta": {"from": "journal"}}
{"content": "board 12 waits for the board-filler (answer 156) - dispatch it now \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 12 for message:11501. Your steps are sequence 14, Exploring a request: read them with journal sequence show 14. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11501, do it, then journal --agent board-filler sequence next 14 --about message:11501, and go on the same way; when the drafting sequence starts after the rating of 5, find it with journal sequence all and follow it too. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; question 156 completed", "meta": {"from": "journal"}}
{"content": "sequence 14 updated", "meta": {"from": "journal"}}
{"content": "request POST /api/main/message is slower than its budget \u2014 289ms last (110ms of it working), against a budget of 50ms. Seen 32 times.; message 11503 file Screenshot 2026-09-25 at 23.45.04.png needs tags \u2014 inspect the attachment, then journal message tag 11503 \"Screenshot 2026-09-25 at 23.45.04.png\" \"<a few words describing what it shows>\"; request GET /api/main/dashboard is slower than its budget \u2014 350ms last (151ms of it working), against a budget of 50ms. Seen 245 times.; 1 new message 11503 - answer by opening your turn with [!reply:11503]; message 11503 updated", "meta": {"from": "journal"}}
{"content": "rule 48 \u2014 The viewer is built from its component library, and pages only\u2026 \u2014 Message 4258. Every visual piece the viewer shows more than once, or that a user would recognise as the same kind of thing (a dialog, a side panel or inspector, a dropdown, a list row, a switch, a button), is one component in web/src/kit, extracted aggressively, and every page composes those components instead of building its own copy. Before writing markup or styles in a page, look for the kit component that already does it and extend it with a prop; a second hand-built version is a bug. The side panel that animated in but not out, while a separate skill panel did both, is the example.", "meta": {"from": "journal"}}
{"content": "1 new message 11505 - answer by opening your turn with [!reply:11505]", "meta": {"from": "journal"}}
{"content": "rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.", "meta": {"from": "journal"}}
{"content": "1 new message 11510 - answer by opening your turn with [!reply:11510]", "meta": {"from": "journal"}}
{"content": "fact 18 \u2014 cProfile inflates the slow-request profiles about tenfold \u2014 The faults feature writes a profile when a request passes its budget, and the profile is taken with cProfile, which adds per-call overhead. On 2026-09-22 /api/summary profiled at 58ms with 48ms inside Resource.fork's deep copy; with the profiler off the same call ran in 2 to 7ms. Read the profile for where the time goes in relative terms, then time the call with curl before changing anything.; fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.; rule 52 \u2014 A chat mark for something the user did sits on the user's side \u2014 Message 10960 (2026-09-25): marks for the user's own actions, such as answering a question, are right-aligned like the user's messages. A mark is put there by giving its card side=user.", "meta": {"from": "journal"}}
{"content": "your command ran 33s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "the user put \u2764\ufe0f on comment 2355 - act on it if it asks for something, such as a go-ahead. It needs no reply, and the chat never mentions it", "meta": {"from": "journal"}}
{"content": "your message 11511 names 309 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11511 \"<the text>\"", "meta": {"from": "journal"}}
{"content": "your wait for The whole suite is running on the New work panel styling (to-do\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "board 13 waits for the board-filler (a new request) - dispatch it now \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 13 for message:11512. The request: 'Let people share a document with someone outside the journal through a link'. Now: a new request. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11512, do it, then journal --agent board-filler sequence next 14 --about message:11512, and go on the same way; when the drafting sequence starts after the rating of 5, find it with journal sequence all and follow it too. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; command board request is slower than its budget \u2014 413ms last (292ms of it working), against a budget of 50ms. Seen 1 time.; 1 new message 11512 - answer by opening your turn with [!reply:11512]; message 11512 requested", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 75ms last (55ms of it working), against a budget of 50ms. Seen 249 times.", "meta": {"from": "journal"}}
{"content": "command board score is slower than its budget \u2014 110ms last (59ms of it working), against a budget of 50ms. Seen 1 time.", "meta": {"from": "journal"}}
{"content": "command board ask is slower than its budget \u2014 193ms last (169ms of it working), against a budget of 50ms. Seen 1 time.", "meta": {"from": "journal"}}
{"content": "fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.; law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "there are new messages in your inbox \u2014 journal message unread, then journal message read <n> for each", "meta": {"from": "journal"}}
{"content": "1 new message 11523 - answer by opening your turn with [!reply:11523]", "meta": {"from": "journal"}}
{"content": "your message 11524 names 309 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11524 \"<the text>\"", "meta": {"from": "journal"}}
{"content": "your wait for The whole suite is running on the speed fixes. The board-filler\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 120ms last (79ms of it working), against a budget of 50ms. Seen 250 times.", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).", "meta": {"from": "journal"}}
{"content": "your message 11527 names 309 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11527 \"<the text>\"", "meta": {"from": "journal"}}
{"content": "your wait for The whole suite is running on the board-filler profile with its\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "board 13 waits for the board-filler (a new request) - dispatch it now \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 13 for message:11528. The request: 'Let people share a document with someone outside the journal through a link'. Now: a new request. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11528, do it, then journal --agent board-filler sequence next 14 --about message:11528, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; command board request is slower than its budget \u2014 256ms last (210ms of it working), against a budget of 50ms. Seen 2 times.; question 157 completed; sequence 14 updated; 1 new message 11528 - answer by opening your turn with [!reply:11528]; message 11528 requested", "meta": {"from": "journal"}}
{"content": "board 13 waits for the board-filler (a new request) - dispatch it now \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 13 for message:11528. The request: 'Let people share a document with someone outside the journal through a link'. Now: a new request. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11528, do it, then journal --agent board-filler sequence next 14 --about message:11528, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; command board cancel is slower than its budget \u2014 82ms last (55ms of it working), against a budget of 50ms. Seen 1 time.; sequence 14 updated; message 11528 requested", "meta": {"from": "journal"}}
{"content": "fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.", "meta": {"from": "journal"}}
{"content": "auto mode is on and work 1622 stands still while todo 1940 is ready \u2014 if work 1622 waits on the user, decide it yourself when you can; otherwise put the question on its row with journal todo ask, end or park the work, and start todo 1940. Stop only when nothing ready is left.; work 1622 is still open \u2014 end it or park it before you stop: journal work end 1622 --how \"<what landed>\", or journal work park 1622 \"<why it waits>\"", "meta": {"from": "journal"}}
{"content": "1 new message 11531 - answer by opening your turn with [!reply:11531]", "meta": {"from": "journal"}}
{"content": "1 new message 11532 - answer by opening your turn with [!reply:11532]", "meta": {"from": "journal"}}
{"content": "1 new message 11533 - answer by opening your turn with [!reply:11533]", "meta": {"from": "journal"}}
{"content": "message 11533 updated", "meta": {"from": "journal"}}
{"content": "1 new message 11535 - answer by opening your turn with [!reply:11535]", "meta": {"from": "journal"}}
{"content": "your wait for Trial run 2 of the board-filler is running on board 13. is over\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "1 new message 11536 - answer by opening your turn with [!reply:11536]", "meta": {"from": "journal"}}
{"content": "your command ran 34s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself; your wait for The whole suite is running on the cuts for trial run 3. is over\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "your message 11538 names 309 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11538 \"<the text>\"", "meta": {"from": "journal"}}
{"content": "board 13 waits for the board-filler (a new request) - dispatch it now \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 13 for message:11539. The request: 'make it nicer on phones'. Now: a new request. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11539, do it, then journal --agent board-filler sequence next 14 --about message:11539, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; your wait for The whole suite is running again after the list fix, before\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting; 1 new message 11539 - answer by opening your turn with [!reply:11539]; message 11539 requested", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "your chat talked about the journal's workings - \"to-do 1939 is done\" \u2014 the user sees replies, reactions, pills and reads themselves; say what the work is instead", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; board 13 waits for the board-filler (question 158 answered - Everything fits\u2026 \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 13 for message:11539. The request: 'make it nicer on phones'. Now: question 158 answered: Everything fits and reads well. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11539, do it, then journal --agent board-filler sequence next 14 --about message:11539, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; question 158 completed", "meta": {"from": "journal"}}
{"content": "board 13 waits for the board-filler (question 159 answered - The main board\u2026 \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 13 for message:11539. The request: 'make it nicer on phones'. Now: question 159 answered: The main board and ticket views, Navigation and the top bar. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11539, do it, then journal --agent board-filler sequence next 14 --about message:11539, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; question 159 completed", "meta": {"from": "journal"}}
{"content": "board 13 waits for the board-filler (question 160 answered - Boards read as a\u2026 \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 13 for message:11539. The request: 'make it nicer on phones'. Now: question 160 answered: Boards read as a single column, No sideways scrolling anywhere, The top bar and menus collapse. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11539, do it, then journal --agent board-filler sequence next 14 --about message:11539, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; question 160 completed", "meta": {"from": "journal"}}
{"content": "1 new message 11547 - answer by opening your turn with [!reply:11547]", "meta": {"from": "journal"}}
{"content": "your wait for Trial run 3 of the board-filler is drafting. The form-of-address\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "the log tag does this in one step \u2014 [!log:N] makes the turn itself the log entry; it runs only when it opens the last text of your turn; fact 18 \u2014 cProfile inflates the slow-request profiles about tenfold \u2014 The faults feature writes a profile when a request passes its budget, and the profile is taken with cProfile, which adds per-call overhead. On 2026-09-22 /api/summary profiled at 58ms with 48ms inside Resource.fork's deep copy; with the profiler off the same call ran in 2 to 7ms. Read the profile for where the time goes in relative terms, then time the call with curl before changing anything.; rule 35 \u2014 Write clean code - one funnel per kind of operation, never the same\u2026 \u2014 Every kind of operation has one funnel: one method that creates, one that saves, one that refuses, one that formats. A second method that does the same thing under another name splits the behaviour, and the two drift apart. Before writing a method, search for the one that already does it and extend that. scripts/checks/funnels.py finds bodies written twice.; rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.", "meta": {"from": "journal"}}
{"content": "auto mode is on and work 1623 stands still while todo 1941 is ready \u2014 if work 1623 waits on the user, decide it yourself when you can; otherwise put the question on its row with journal todo ask, end or park the work, and start todo 1941. Stop only when nothing ready is left.; work 1623 is still open \u2014 end it or park it before you stop: journal work end 1623 --how \"<what landed>\", or journal work park 1623 \"<why it waits>\"", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit 6fb165a51 closed to-do 1940 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.", "meta": {"from": "journal"}}
{"content": "rule 47 \u2014 The journal sets itself up once, when the server starts, never per\u2026 \u2014 Messages 2220 and 2224. Discovering features and their handlers, seating the feature rows and the rename sweep happen once, at server boot, and again only when a feature is switched on or off, a plugin changes or an environment is added: features.load keeps a set-up generation per journal (SEATED) and redoes the work only when that generation moves. A command, a request or a hook uses what is already there; nothing in their path may rediscover handlers or rescan folders. A cost that repeats per call is a bug to fix, not a budget to raise.", "meta": {"from": "journal"}}
{"content": "law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "auto mode is on and work 1625 stands still while todo 1942 is ready \u2014 if work 1625 waits on the user, decide it yourself when you can; otherwise put the question on its row with journal todo ask, end or park the work, and start todo 1942. Stop only when nothing ready is left.; fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.; rule 44 \u2014 Release only when the user says so, never after every change \u2014 Message 5929 (2026-09-23): stop releasing constantly. Work is committed on a branch and released only when the user says so. For now nothing is released until every Code Commandments sin is fixed. This replaces message 1067's order to push and tag every update at once.; rule 45 \u2014 No prose words as names in code - said, says, heard, spoke, told\u2026 \u2014 Messages 1360 and 1698. The user has said more than once that code must not read like prose: a variable, attribute, property or function is named for what it holds or does (text, command, labels, lines), never with a verb from a story. 'says' on the Design type (1360) and 'said = call.said.lower()' in features/recital.py (1698) are the examples. Rule 27 states the naming rule; this one carries the words, so writing one of them whispers it. Before writing a name, ask whether a reader who has never seen the code would know what it holds.; work 1625 is still open, with nothing logged \u2014 journal work log 1625 \"<what was decided or done, and why>\" \u2014 then journal work end 1625 --how \"<what landed>\", or journal work park 1625 \"<why it waits>\"", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit e4ee6d549 closed to-do 1944 \u2014 The rows and the work are done; take the next one.; fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.", "meta": {"from": "journal"}}
{"content": "law L1 \u2014 Every subagent dispatch names its model and chooses the least\u2026 \u2014 Use a fast, economical model for mechanical work with a known answer, a capable general model for careful implementation, and the strongest model only when the task turns on difficult judgement. Inheriting the orchestrator's model is not a model choice. If the dispatch API cannot accept a model, that operation is exempt.; law L2 \u2014 Every subagent is bound to a concrete job; never dispatch a generic\u2026 \u2014 Use the most specific available agent type whose declared purpose matches the assignment. On providers without agent types, give the dispatch a concrete task name and bounded prompt. If no suitable specialization exists, keep the work in the main agent instead of manufacturing an unscoped helper.; law L4 \u2014 Follow-up work goes back to the subagent that did the first part\u2026 \u2014 A subagent that drew a design, wrote the code or ran the research keeps what it learned. When the user asks for a change to its work, continue that subagent with a message rather than dispatching a new one that has to rediscover everything; start fresh only when the earlier one is gone or the new work is unrelated.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit b6dd77c01 closed to-do 1942 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "the await tag on did not run \u2014 ! nothing is open: journal work start \"<the work>\" first - add what is missing to the tag itself; todo 1945 next", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit 68b52d206 closed to-do 1945 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "1 new message 11561 - answer by opening your turn with [!reply:11561]", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat; there are new messages in your inbox \u2014 journal message unread, then journal message read <n> for each", "meta": {"from": "journal"}}
{"content": "1 new message 11563 - answer by opening your turn with [!reply:11563]", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 103ms last (54ms of it working), against a budget of 50ms. Seen 255 times.", "meta": {"from": "journal"}}
{"content": "1 new message 11564 - answer by opening your turn with [!reply:11564]", "meta": {"from": "journal"}}
{"content": "rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.", "meta": {"from": "journal"}}
{"content": "rule 48 \u2014 The viewer is built from its component library, and pages only\u2026 \u2014 Message 4258. Every visual piece the viewer shows more than once, or that a user would recognise as the same kind of thing (a dialog, a side panel or inspector, a dropdown, a list row, a switch, a button), is one component in web/src/kit, extracted aggressively, and every page composes those components instead of building its own copy. Before writing markup or styles in a page, look for the kit component that already does it and extend it with a prop; a second hand-built version is a bug. The side panel that animated in but not out, while a separate skill panel did both, is the example.", "meta": {"from": "journal"}}
{"content": "rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.", "meta": {"from": "journal"}}
{"content": "2 new messages 11566, 11567 - answer each by opening a turn with [!reply:<n>]", "meta": {"from": "journal"}}
{"content": "1 new message 11568 - answer by opening your turn with [!reply:11568]", "meta": {"from": "journal"}}
{"content": "your wait for Waiting for the whole suite to finish before swapping in the\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit 3a924d7d5 closed to-do 1946 \u2014 The rows and the work are done; take the next one.; journal-form-of-address changed since you loaded them \u2014 load one again when you next need it; only the every-start skills are held for", "meta": {"from": "journal"}}
{"content": "1 new message 11571 - answer by opening your turn with [!reply:11571]", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 148ms last (127ms of it working), against a budget of 50ms. Seen 256 times.", "meta": {"from": "journal"}}
{"content": "fact 20 \u2014 A slim supervisor holds the agent and a worker reloads on every build \u2014 Since 2.118.0 (2026-09-23). src/supervisor.py is standard library only and never reloads: journal claude hands its process over to it (os.execv), and it owns the pty and the agent process, relays the terminal, writes the printed and screen captures, listens on the typist socket, restarts the agent in the same session from a relaunch command written to its runtime folder while a restart is pending, and stops it with escalation while draining the pty (an agent cannot finish exiting on macOS while its output is unread). It starts engine/worker.py and starts it again whenever it exits: RELOAD on a new build, RELAUNCH to restart the agent, STOP to end, HEAL or a quick crash to roll back a build through journal heal. The worker holds everything else: seating the session, the start-up confirm typed through the typist, services, viewer, update check, check-in, and the one-time relaunch of sessions launched before engine/terminal.py LAUNCH. engine/terminal.py holds only journal-side helpers. The server (serve.py) still runs the engines and re-execs itself on a .py change. When the agent exits, the supervisor runs journal ended, which puts set-aside hooks back and stops the server when no session is left.", "meta": {"from": "journal"}}
{"content": "rule 40 \u2014 A feature is named for what it is, never for its machinery \u2014 Messages 599, 600 and 703. A feature is a capability the user would name and would think of switching off. File tracking, a write gate, a phrase bank, a tree diff are services used inside a feature, not features of their own: they live in the feature they serve. Before adding a directory under features/, say what the user would call it; if the answer names a mechanism, it belongs inside something else. Report 16 holds the grouping this implies.", "meta": {"from": "journal"}}
{"content": "fact 18 \u2014 cProfile inflates the slow-request profiles about tenfold \u2014 The faults feature writes a profile when a request passes its budget, and the profile is taken with cProfile, which adds per-call overhead. On 2026-09-22 /api/summary profiled at 58ms with 48ms inside Resource.fork's deep copy; with the profiler off the same call ran in 2 to 7ms. Read the profile for where the time goes in relative terms, then time the call with curl before changing anything.", "meta": {"from": "journal"}}
{"content": "rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.", "meta": {"from": "journal"}}
{"content": "your command ran 373s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "journal: you have been quiet for 16 minutes with work still open. Are you still working? Say where it stands, or carry on.", "meta": {"from": "journal"}}
{"content": "journal: you have been quiet for 17 minutes with work still open. Are you still working? Say where it stands, or carry on.", "meta": {"from": "journal"}}
{"content": "journal: you have been quiet for 16 minutes with work still open. Are you still working? Say where it stands, or carry on.", "meta": {"from": "journal"}}
{"content": "1 new message 11574 - answer by opening your turn with [!reply:11574]", "meta": {"from": "journal"}}
{"content": "the reply tag does this in one step \u2014 [!reply:N] makes the turn itself the reply; it runs only when it opens the last text of your turn; fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.", "meta": {"from": "journal"}}
{"content": "rule 50 \u2014 Everything the user does is doable in the viewer \u2014 Message 6710 (2026-09-23): the user never uses the CLI, only the UI; everything should be doable from the viewer. The journal commands are for agents; any action meant for the user (making boards, confirming, accepting, hosting, watching an agent) needs its place in the viewer.", "meta": {"from": "journal"}}
{"content": "rule 38 \u2014 Never change the git branch until the user says so, by name \u2014 The work happens on the branch the user named. That was main until message 5929 and question 80 (2026-09-23), which moved the sins work to the branch sins. Do not create, switch to or merge any other branch unless the user names it in their own words.; you committed work - if a meaningful piece landed, write an update \u2014 journal report changes, then journal report recap \"<one or two sentences>\"; it is pinned at the bottom of the chat. Skip it when the work is small.", "meta": {"from": "journal"}}
{"content": "the viewer threw Failed to fetch \u2014 Failed to fetch / TypeError: Failed to fetch at Rf.send (http://127.0.0.1:8421/assets/tokens-v1DcNB_5.js:18:19462) at http://127.0.0.1:8421/assets/tokens-v1DcNB_5.js:18:20028 Seen 1 time.", "meta": {"from": "journal"}}
{"content": "request POST /api/main/message is slower than its budget \u2014 80ms last (51ms of it working), against a budget of 50ms. Seen 34 times.; 1 new message 11577 - answer by opening your turn with [!reply:11577]", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.; rule 46 \u2014 Only commit and push once the whole journal is proven to boot \u2014 Messages 2178 and 2179. A release that has not been started for real can crash every project that installs it, as 2.78.3 did for Codex and 2.84.0 did to project records. Before every commit and push: the full suite passes, including tests/test_it_boots.py, which installs a packed copy into a fresh project, launches Claude and Codex from it, writes a project record, upgrades again and checks the record survives. When a change touches launching, installing or upgrading, also start a real journal in a scratch project and close it properly afterwards, leaving no process behind.; rule 51 \u2014 Every finished feature is committed, pushed and released with a new\u2026 \u2014 Message 9207 (2026-09-24): when a new feature is ready, commit, push and publish a new tag. This is the user's standing word for releasing, so rule 44's only-when-the-user-says is met by it for finished features; fixes in between wait for the next feature or a patch the user asks for.", "meta": {"from": "journal"}}
{"content": "board 12 waits for the board-filler (a new request) - dispatch it now \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 12 for message:11578. The request: 'I want to be able to host a journal on any web server and users can connct to it using a url and secret'. Now: a new request. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11578, do it, then journal --agent board-filler sequence next 14 --about message:11578, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; 1 new message 11578 - answer by opening your turn with [!reply:11578]; message 11578 requested", "meta": {"from": "journal"}}
{"content": "there are new messages in your inbox \u2014 journal message unread, then journal message read <n> for each", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 93ms last (71ms of it working), against a budget of 50ms. Seen 260 times.", "meta": {"from": "journal"}}
{"content": "the await tag on did not run \u2014 ! nothing is open: journal work start \"<the work>\" first - add what is missing to the tag itself; todo 1948 next", "meta": {"from": "journal"}}
{"content": "rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "command board ask is slower than its budget \u2014 365ms last (118ms of it working), against a budget of 50ms. Seen 5 times.", "meta": {"from": "journal"}}
{"content": "board 12 waits for the board-filler (question 161 answered - One shared secret\u2026 \u2014 dispatch it and carry on with your own work: the Agent tool with subagent_type \"board-filler\", model \"sonnet\", a description that starts with a name, and this prompt: \"You fill board 12 for message:11578. The request: 'I want to be able to host a journal on any web server and users can connct to it using a url and secret'. Now: question 161 answered: One shared secret for the whole server. Your steps are sequence 14, Exploring a request. Take up the step in hand with journal --agent board-filler sequence follow 14 --about message:11578, do it, then journal --agent board-filler sequence next 14 --about message:11578, and that answers with the next step, already taken up, as journal board score does: do it at once. After a 5 the step is the drafting sequence's, whose number it names: go on with that number. The steps are in your profile. Run every journal command with --agent board-filler. When you have asked the user a question, stop and answer with the question: you are dispatched again with the answer.\"; question 161 completed", "meta": {"from": "journal"}}
