Twelve fixes the LOGIC.md pass turned up: three defects, four dead things, five stale claims - #1775
Merged
Conversation
useAction reported both a refusal and a success as `undefined`, so a caller could not tell them apart. Three call sites worked around it by mapping their void success to a stand-in `true`, and the confirm dialog, which had no such wrapper, would have sat open with no message after a successful confirm that resolved to nothing. `run` now answers whether the action succeeded and carries its value when it did. The three stand-ins go, the delete confirmation stops rejecting its own refusal to be heard, and the value keeps its type: the refusal branch is excluded from it, so a caller reads the success branch's fields directly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Escape over an open `/`, `<`, `@` or `#` menu was passed through untouched, so the menu stayed on screen after the keystroke that means "dismiss this" — and since an open menu is what makes Enter pick instead of send, the next Enter picked a suggestion the user thought they had dismissed. The first Escape now closes the menu and stops there, leaving the trigger armed but silent until a fresh one opens. With no menu showing, Escape is left alone and reaches the surface around the editor as before. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Typing `<await>` into the composer produced the `<AWAIT>` the agent expects, but loading a preset carrying the same text left it as prose, so it reached the agent lower-case. The two paths recognized different sets: typing accepted a tag in any letter case, loading accepted upper-case only. Loading now recognizes what typing recognizes, and a catalogued tag normalizes on both paths. Tests pin the rule, which the token catalogue had none of. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
The event vocabulary declared a generated app booted and serving, the terminal rendered it, and a test pinned that rendering — but nothing in the agent's lifecycle ever emitted one, and the serve config its doc hung on does not exist. A word no writer can say is not vocabulary. The dashboard's own project preview is a different thing and stays. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
A gate carried a delay after which the dashboard was to accept the recommended option, the panel took a prop saying whether that countdown may run here, two call sites turned it off, and a mouse-move listener stood by to cancel it. None of it did anything: nothing ever started a countdown, so the panel always asked, and the delay was read by no one. The scaffolding goes, and with it the pick author no surface could produce: a pick is now the user's or nobody's, the latter being an agent nobody is watching, which is the daemon's own auto-accept and still very much alive. Whether the dashboard should answer a gate for the user at all is a product question, and this leaves it open rather than half-built. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
The prompt editor's tokens declared a `reference` kind, and the stylesheet gave it a chip color, but no token has ever been one: a mention is a project or a file, and everything else is a macro or an action. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Every fold of the sidebar wrote a `sidebar_state` cookie "so it survives a reload", but nothing ever read it back: the sidebar starts from its default either way, and the cookie rode along on every request to the daemon for nothing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Twenty-odd comments named a budget cap as a way an agent ends — the usage event even said the agent stops itself once its cost reaches one. No cap exists: the flag that set it is gone, a test pins that it is gone, the meter only adds up, and MEMORY.md says an agent already running is never cut short over spending. Quota decides what may start, and that is a different thing. Each mention now names what really ends an agent there: the Stop button, Ctrl-C, or an answer the user marked stop. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Two claims had outlived their code. The turn-signal emitter's doc still counted the session name among what it emits, though the file's own header says the name is not a signal and the agent names its branch through the branches skill; the backlog loop and a test title repeated it. And both the routine rotation and the preset catalog said each triage prompt aborts when its branch already exists. The prompts pin a session name but abort on nothing: what keeps a rotation from triaging twice is the routine lock the daemon takes before starting one, which holds across machines. The rotation's note about which presets it skips now names them rather than a sibling that is not a triage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
- The quota source called itself separate from a per-agent guard that "exists to pause an agent"; nothing pauses an agent over quota, and MEMORY.md says so. - The multi-project read side said the daemon runs one agent at a time per project; it runs as many as the project's own concurrency allows. - The dashboard's queue reader pointed at a parser by a name that no longer exists: the drain reads the queue through the queue skill's own parser. - The design gallery's build said DesignSync uploads its output; nothing in this repository uploads anything. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Its module still explained itself as a hand-flattened copy that departs from a doc, from before the prompts became markdown compiled into the package; and the handoff pointed at an `--eco-auto-maintenance` flag that no longer exists, saying the renderer drops a section for it, which the renderer cannot do. A test named after settings the template stopped reading now says what it actually proves: the same session renders the same prompt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Both package READMEs and the design gallery's sample copy still called an agent a session and its checkout a worktree, and offered "Open TODOs" for what is the agent queue. The code and MEMORY.md settled that vocabulary a while ago; the prose that a reader meets first had not followed. The session name keeps its name: it is the name an agent gives its own work. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Contributor
Author
|
@suleimansh Good? I didn't review any of it (it's a list of issues Claude found while installing LDD). |
Contributor
|
Seems good to me. The fixes were checked by my agent, commit by commit, they are real. The full test suite passes on my machine on this branch (1378 + 870 tests, the reclaim test included). I didn't read all of the LOGIC files, I read only a few lines to check if they are easy to understand, and yes they are. Some files have very long texts, we can improve later. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Writing a
LOGIC.mdbeside every file meant reading every file, and reading every file turned up things that were wrong. Each is one commit.Defects
useActionreported a refusal and a void success alike asundefined. Three call sites worked around it by mapping their success to a stand-intrue; the confirm dialog, which had no such wrapper, would have sat open with no message after a successful delete.runnow says whether the action succeeded and carries its value, with the refusal branch excluded from that value's type./,<,@or#menu was passed through untouched, so the menu stayed on screen — and since an open menu is what makes Enter pick instead of send, the next Enter picked a suggestion the user thought they had dismissed.<await>produced the<AWAIT>the agent expects; loading a preset carrying the same text left it as prose and sent it lower-case. Both paths now recognize the same set. Tests pin it, which the token catalogue had none of.Things nothing could reach
referencetoken kind, which no token has ever been.sidebar_statecookie, written "so it survives a reload" and read by nothing.Claims that had outlived their code
MEMORY.mdsays a running agent is never cut short over spending.Checks
pnpm build,pnpm typecheckandpnpm testall run. One test fails in my sandbox and is not this branch's:reclaim.test.tsmakes a directory read-only and expects removal to fail, which root ignores — this container runs as root, and the branch touches no file in that package.Every
LOGIC.mddescribing changed behavior was updated in the same commit, and the coverage and vocabulary lint over all 683 of them reports nothing.🤖 Generated with Claude Code
https://claude.ai/code/session_01YcSwKgtQE6ndJYjdDitVFB
Generated by Claude Code