plan plans, go goes — live SVG dashboard, guided first hour, reliable local-model planning - #90
Merged
Merged
Conversation
One day's worth of making the product mean what it says: - The live view is a designed SVG dashboard (no CDN, packaged frontend): per-node status/tokens/cost, goal in the header, violet proposed nodes, approval banner, replay scrubber; goal and approve-command ride the trace. - plan/go split: `plan` proposes + admits + saves plan.json and STOPS; `go` executes the newest saved plan (re-admitted on the way in); `plan --go` is the one-shot. Registry chain: flag/config > ./registry.py > built-ins, with `--default` forcing the built-ins. - No silent scripts in real commands: a model is required; `--scripted` is the explicit, labeled rehearsal. - Local-model planning made reliable: <think>-block-safe JSON extraction, slim proposal schema for Ollama's grammar decoder, retry notes carrying the offending reply + a diamond worked example (so 8B models fan out independent work instead of chaining it), --model-arg/--workspace/ --max-planning-failures, and a registry-keyed generated-policy cache (a stale policy could silently unlock the mutating kind). - Onboarding: bare `grapharc` orients, `help` works, `start` explains every term in plain words, `init` scaffolds a registry whose first free run demonstrates refuse-then-admit and whose gather does real work. - Traces default under .grapharc/runs; serve writes a discovery marker; plan/go always print a probed `watch :` URL. Public site under docs/site with a Pages workflow; README repositioned around the admission gate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
What this is
One PR carrying today's end-to-end product work. Full suite: 1,984 passed, ruff clean; verified against real local models (qwen3:8b, llama3.1 — 6/6 goal_met on the reliability bar) and a real delegated Claude run.
The verbs now mean what they say
grapharc planproposes, the gate admits, the plan is saved toplan.json— and nothing executes (stopped: planned, exit 0). Looking at it and typinggois the approval.grapharc goexecutes the newest saved plan (go <run-dir>for a specific one), replaying the stored proposal through the full loop so admission judges it again — an edited plan.json is a new proposal, never a pre-approved one.go "a goal"/plan --go= one shot../registry.py(yours wins) → built-in kinds;--defaultforces the built-ins.--scriptedis the explicit, labeled free rehearsal.Live view (no CDN, packaged frontend)
Designed SVG dashboard: per-node status/tokens/cost/duration, the goal in the header, violet proposed nodes with a copyable
grapharc approvebanner while parked, amber running / green done, replay scrubber, planning panel. Server-side deterministic layout (cycle-safe), structuredGraphSnapshotin every SSE frame, shared status resolver across Mermaid/Slack/SVG. Slack links point at the operator's own run page first.Local-model planning made reliable
<think>-block-safe JSON extraction (a draft inside reasoning can never beat the visible answer; think-tags inside JSON strings survive), every fence tried, trailing-comma repair only on already-failed candidates.Subgraphschema).collect_context → investigate_repo ∥ investigate_help ∥ investigate_docs → summarize).--model-arg KEY=VALUE,--workspace,--max-planning-failures.apply_change(proof test included).First hour
Bare
grapharcorients (exit 0);grapharc helpworks;startexplains every term in plain words;initscaffolds a commentedregistry.pywhose first free run demonstrates refuse-then-admit and whosegatherdoes real work. Traces default under.grapharc/runs/;serve --live-rootwrites a discovery marker;plan/goalways print a probedwatch :URL.Also
Public site under
docs/site/(animated governed-run hero, Pages workflow — needs the one-time Settings → Pages → Source: "GitHub Actions" toggle), README repositioned around the admission gate with an honest comparison table, CHANGELOG entries in house style.🤖 Generated with Claude Code