P0: background-server lifecycle + ownership records (#199), honest cancel labels (#728), 8 KB skill cap (#730), #729 tests - #732
Merged
Merged
Conversation
The catalog read used readFileAlloc(.limited(head_cap)), which fails with StreamTooLong past the cap instead of truncating, so every playbook over 8 KB was silently dropped and `skill <name>` could not load it. Read the head with a truncating readFile; the named load still reads the whole file.
…'s (#728) Every esc_cancel setter goes through cancel_source.cancel(source). Mainloop labels a turn cancelled with no recorded source as ended early by the harness instead of "[response interrupted by user]", and notes the source in the trace either way. The raw stdin scanner swallows OSC replies (a terminal's colour or title answer) instead of reading their ESC as a keypress. ADR 0063.
) A background job silent and unread for 30m gets one notice; after 2h its process group is stopped and the job stays listed with its command, and /jobs restart reruns it. /jobs keep pins a job: no idle stop, and at session end it is retained (pipes handed to a detached drainer) instead of killed. Every job writes ~/.codegraff/jobs/<pid>.json with the leader's pid and start identity; graff servers lists them with age, owner, and listening ports, and stops one only while that identity still matches. GRAFF_JOB_IDLE_WARN_MINS / GRAFF_JOB_IDLE_STOP_MINS tune the policy. The graff worktree commands moved to worktree_cmd.zig (file cap). ADR 0062.
#729) The reported target could not be reproduced on the shipped GUI paths; these DOM-level tests pin the rendered anchor text, href, and open-link argument for a bold-wrapped URL. Adds @happy-dom/global-registrator as a dev dependency for DOM tests.
justrach
added a commit
that referenced
this pull request
Sep 3, 2026
…Streamdown and prompt recall Both sides rewrote the native harness after the 285 tag: origin landed follow-tail scrolling, the prompt queue, frame-rate ACP paint and the ChatBubbles/ChatEmpty split; this branch landed the Streamdown renderer and ArrowUp prompt recall. Resolution keeps origin's harness and scroll model, the Streamdown Markdown.tsx (its remark pipeline supersedes the hand parser's ordered-list and caret fixes), and threads the recall history through the composer and the empty state.
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.
Closes #199, closes #730, addresses #728, adds the regression tests requested in #729.
#199 — background servers get an idle lifecycle, a pin, an ownership record, and a CLI (ADR 0062)
idle-stopwith its command kept./jobs restart <id>reruns it in the same cwd.GRAFF_JOB_IDLE_WARN_MINS/GRAFF_JOB_IDLE_STOP_MINStune it (0 = off)./jobs keep <id>pins a job: exempt from the idle stop, and retained at session end (its pipes go to a detached drainer so the server never sees EPIPE) instead of killed./jobs stop,/jobs unkeeptoo.~/.codegraff/jobs/<pid>.json(leader pid + start identity, owner session, command, cwd, start time).graff serverslists them with state, age, owner alive/gone, listening ports (livelsofby process group), command;graff servers stop <pid>signals a group only while the leader's start identity still matches;graff servers prunedrops dead records. Nothing graff did not start appears there./jobsshows age, pid, ports, pinned/idle-stop state. An idle stop is a step-boundary notice, not an idle-TUI auto-turn wake.graff worktree …moved fromjobs.zigtoworktree_cmd.zig(file cap); callers unchanged.#728 — a cancel with no recorded source is the harness's, not the user's (ADR 0063)
[response ended early: cancelled by the harness, not the user]in the transcript, chrome, and--jsonerror, and the trace notesinterrupted source=…either way.#730 — SKILL.md over 8 KB stays in the catalog
#729 — rendered-anchor regression tests
@happy-dom/global-registratoras a gui dev dependency.Tests: unit suite 1932 pass / 1 skip; tier 1 green; zig 0.16 + CI-pinned 0.17 + Linux and Windows cross-builds clean; gui
bun test208 pass.