Then → Now → Next
Three sources of truth, no vibes: the original spec is
MASTER-MASTER-PROMPT.m4a (the voice memo that started the grove) plus the pristine
upstream import recorded in PROVENANCE.md. The now is what ships and
runs, with build-log evidence. The next is the live bead tracker
(bd) — 8 closed, 7 tracked, counted tonight.
Then — the spec we started from
Upstream baseline: mpfaffenberger/code_puppy (MIT), synced
0-behind at merge d819ae4e, imported pristine as commit #1, then audited rebrand
passes. The memo asked for five things:
1 · The harness, wearing our grove
“Take all of the core mechanics and internals and the harness that is CodePuppy … make me a classy, elegant, badass Spruce Grove OS.”
Granlund Grove design system; the bootloader is the design system.
2 · The default local instance
“When I do UVX, it needs to be UVX spruce grove … boot to the new ethos … indicate that it is backed by the Leather Apron Club, AKA Junto.”
One command from anywhere; the club in the boot banner.
3 · Voice-first
“This voice, this ability to transcribe and talk through situations and articulate what you need.”
Speak the need; the harness iterates.
4 · The cohort is the point
“Bentonville Barber Company, use case one … the creatives … the squiggle cutters … the drone pilot.”
NWA small businesses as plugin-shaped problems.
5 · Trained on the town
“Train that model, that core, against the things that these small businesses are going to need.”
Process, traceability, accountability — blame the cog, not the person.
Now — what exists tonight evidence-linked
Ladder state, each rung with its proof. Percentages match phases.html, the official ladder board.
Grove identity, ethos boot, Junto backing
doneFull namespace rebrand (spruce_grove modules, spruce-grove/grove CLI, Cedar the guide, ~/.spruce_grove data dir) with a compatibility shim so upstream contracts keep working. The TUI boots the figlet banner and literally renders “Backed by the Leather Apron Club (Junto)” — memo ask #2, verbatim.
Three-tier plugin architecture + trust gate
doneBuiltin (code_puppy_core_plugins 0.0.48) → user (~/.spruce_grove/plugins) → project (.spruce_grove/plugins, SHA-256 trust ceremony), 30+ hooks, golden rule: plugins over core. Tonight's /rec feature shipped with zero core edits.
Five shipped, shared core, all versioned
done/junto credo plaque · barber scaffold (5al.3) · /backoffice sourced checklist (5al.4) · /creative-scaffold FPV + artisans over grove_site_core (5al.5) — and as of tonight all of them live in-repo as the canonical copy (user-plugins/, build-log 28).
Mockingbird /rec — spoken prompt → agent run
done · tonightThe memo's ask #3, realized: mic → whisper-cli (local, Metal) → review/edit/re-record → sent as the prompt. Dogfooded live in the TUI tonight: whisper heard “Thank you.”, Cedar answered on GLM-5.3-Flash, tokens counting. Model auth is keyring-backed (service code-puppy) — the 401 era is over.
Zero-tolerance merge discipline
doneLast four grandfathered legacy imports rerouted; the guard ratchet's list is empty and prints green (5al.8 closed, twelfth-pass verified).
Dictation, ACP streaming, look-in, steering, resume -- shipped
one smoke clickThe whole chain landed: dictation (mic → local whisper → editable prompt), ACP structured streaming (message deltas, thinking blocks, tool cards with status chips, per-turn token usage), the Live Look-in panel (browser screenshots stream in as the agent works), mid-run steering by text or voice (cancel + redirect in the same session, race-hardened), and relaunch durability (session/load proven across process death -- marker recalled verbatim). Remaining: one human smoke click in the packaged app closes 5al.6.
Standalone fork, publish pipeline wired
one secret awayuvx spruce-grove boots standalone (memo ask #2's mechanism), installed to PATH. publish.yml publishes on push-to-main; wheel + sdist pass twine check; PyPI names still 404 — claim runbook in docs/PYPI-CLAIM.md, gated only on Tyler's PyPI account.
Next — the live queue from bd, tonight
8 of 15 lifetime beads closed. What remains, cheapest-first:
Open the rebuilt app: pill flips to ACP · syn:large:text, send a streamed prompt, click record and speak a steer. Closes 5al.6 and with it the whole execution ladder minus the parked north star.
1.0.1 and 1.0.2 published via OIDC trusted publishing (zero tokens, nothing to rotate). uv tool install spruce-grove proven from the public index — 111 packages, executables on PATH. The pipeline releases on every main push.
Bought at Porkbun; DNS driven in end to end (4x Pages A-records + www CNAME, parking records evicted). Announcement page is the site root; hub at /hub.html. HTTPS cert provisioning, then enforced.
Keep feeding real NWA people into plugin-shaped problems. Also queued: add syn:small:vision (Qwen3.8-27B, 262k) to extra_models so screenshot-reading work is priced right.
Stays parked until the desktop app has real users asking for it.
Stays parked until the desktop app has real users asking for it. The name made literal, later.
“The harness is borrowed. The grove is ours. Leave it better than we found it.”