Every program in flight, every phase in it, every open decision, every receipt.
Statuses are mirrored from the in-repo boards — SOVEREIGNTY-EXECUTION.md,
SOVEREIGNTY.md, DEPENDENCY-EXIT.md, VALIDATION-LADDER.md —
and this page is regenerated as work lands. Counts are computed, never claimed.
Each figure traces to a command run against the repo or a live API — the same “counts are computed” rule the whole project runs on.
The grove is one organism with six circulatory systems. Two are essentially done, three are mid-march, one is adopted-and-parked by design. Every section below is the verbose version of its program.
| program | state | |
|---|---|---|
| A · The harness exit | replace the inherited agent framework with grove-owned code, behind a seam | in-flight · phase 2 of 4 landed |
| B · The rails migration | off-GitHub: steward identity, domains, Forgejo, the approval wall | in-flight · 7 of 19 board items done |
| C · The council & the wall | governance: stewards, decisions waiting on the founder | open · 4 decisions + onboarding |
| D · The dependency exit | own or formally adopt every borrowed thing | doing · 6 rungs done with receipts · harness in-flight (34 files on the seam, 92 imports left) · 2 parked for council |
| E · The validation ladder | desktop onboarding, traceability matrices, the living directory | design · specs written |
| F · The wedges | small-business portfolio + family-lab (private, local-only) | in-flight · 2 studies complete |
58 modules under spruce_grove/ import pydantic-ai directly (76 reference it).
It owns the agent loop, streaming, tool calling, model resolution, and the retry/refresh
seams. A big-bang removal is a rewrite masquerading as a cleanup — so the exit is a
staged seam, one call site per landing, tests green each time. Source of truth:
SOVEREIGNTY.md.
| stage | status | |
|---|---|---|
| 1 · Inventory & freeze | every touchpoint mapped: pydantic_patches, model_factory, base_agent, event_stream_handler, round_robin_model, CLI bootstrap, MCP bridges | done |
| 2 · The seam | spruce_grove/harness/ live: grove-owned Harness protocol (zero external imports, structurally tested), delegating adapter (parity proven), soft-failing selector (SPRUCE_GROVE_HARNESS). First two call sites migrated: subagent_invocation, private_inference. | landed 2026-09-15 |
| 3 · Call-site migrations | In order: settings surface (load_config/make_model_settings) → the ToolContext tool vocabulary → the agent loop + streaming. Settings and the vocabulary are landed; 34 files now import the seam and 92 pydantic-ai imports remain (was 114). One landing at a time, parity tests each. | next: agent loop + streaming |
| 4 · The replacement | the grove's own loop behind the protocol: stdlib + httpx streaming, the tolerant OpenAI client we already carry, our own retry/token logic (http_retry.py, claude_oauth_transport.py, tolerant_openai.py exist as seeds). Gate: tried & true in production before the flag flips — the seam runs both side by side. | queued · seeds exist |
| 5 · The flip & the prune | flip per-model/per-agent behind config, then delete. Ends with pydantic-ai gone from pyproject and PROVENANCE.md updated. | awaits 3–4 |
Honesty note: the boot banner no longer advertises the framework (that was branding); the dependency itself is still real and still counts itself honestly here.
The project must survive its hosting. Every task has exactly one owner:
AUTO (a script, verified) or KEEPER (identity, payment,
ceremony, approval — things scripts must never do). Source of truth:
docs/SOVEREIGNTY-EXECUTION.md.
| phase | items | status | |
|---|---|---|---|
| A · Steward identity | A1–A5 | steward name, email, vault, hardware keys ×2, sealed recovery kit — nothing automatable | open · steward |
| B · Domains | B1–B4 | inventory done privacy ON, expires 2027 · steward registrar · transfer · DNSSEC | 1 of 4 done |
| C · Source & release rails | C1–C7 | GitHub inventory done · backup bundle done · site parity harness done · Forgejo stack done · stand-up + parity proof · clean-history export · push + GitHub freeze | 4 of 7 done |
| D · Deps & tooling | D1–D4 | node removed from CI done · pip-audit done · wheel index on the new rails · quarterly allowlist review | 2 of 4 done |
| W · The approval wall | W1–W5 | wall scripts done · train stewards · provision accounts · required reviewers on release · arm with --enforce-reviews 2 | 1 of 5 done · this week per council |
Three stewards, 2/3 and 3/3 thresholds, an emergency lane, and a rule for public
pages: never persons, never companies — only the ethos. The wall is
not armed yet; branch protection on main is still off (by choice, until the
stewards exist to enforce it with).
| decision / task | status | |
|---|---|---|
| Onboard the two incoming stewards | train on desktop + CLI (hands-on entrance exam), provision pseudonymous accounts, hardware keys, CODEOWNERS entries, release-environment reviewers, arm the wall | steward · by end of week |
| Approve/reject the compat-exit ledger | all eight inherited compatibility contracts have recreation plans — dual-load, exit on evidence. Nothing executes without sign-off. | awaiting approval |
| Approve/reject the off-GitHub runbook | the infrastructure migration runbook: steward identity → domain transfer → dual-home proof → tooling policy | awaiting approval |
| Manifesto naming | the founding document carries the founder's name (written before the anonymity pivot): keep the named original or publish the authorless variant | council decision |
| Personal domain posture | keep personal (never project infrastructure) or drop — it cannot be made anonymous | council decision |
Full census in docs/DEPENDENCY-EXIT.md (six tiers, verdicts computed by
import scans). The ladder in execution order — a rung flips to done only with its
receipt: tests green, hash proof, or a diff.
| # | rung | status |
|---|---|---|
| 1 | Pin CI actions by SHA — 5 tag-pinned actions (checkout, setup-python, pages artifacts, pypi-publish) → immutable refs | queued · one sweep |
| 2 | Drop typer — computed unused by grove source AND the plugin package (0 imports both) | queued · verdict computed |
| 3 | Self-host the site fonts — 10 pages load Fraunces/Inter/JetBrains Mono from a CDN | queued |
| 4 | Dedupe requests onto httpx — 3 call sites share a client that already exists | queued |
| 5 | Replace pyfiglet with the baked splash constants — 2 call sites; constants already exist in splash.py | queued |
| 6 | Extra-gate boto3 / azure-identity — plugin-consumed; move behind extras once lazy imports allow | parked |
| 7 | Adopt or vendor code-puppy-core-plugins — council decision after the compat contracts land | parked · council |
| 8 | The harness itself — the largest dependency of all; tracked as Program A above | in-flight · see program A |
Already computed and documented: httpx2 is load-bearing (codex/claude transports), termflow-md renders tool output, ripgrep powers the grep tool, agent-client-protocol backs the ACP agent surface, Docker images are the exit rails (pin digests at stand-up). npm/axios: absent everywhere.
Spec written 2026-09-16 in docs/VALIDATION-LADDER.md. These are the
product-shaped proofs that turn a tool into a home.
| validation | foundation already landed | status | |
|---|---|---|---|
| Desktop OS onboarding | persona-driven first run that configures agents, plugins, voice, telemetry, and model tier to the user's use case; the download → subscription → first successful run path in under five minutes; token economy and context utilization tuned from minute one | onboarding wizard skeleton, /add_model, keyring credentials, cohort plugins, desktop shell v0.1.0 (Tauri, separate repo) | design · ladder: persona survey → tuned defaults → subscription flow → time-to-first-success metric |
| Traceability program | matrices mapping every feature, button, command, flag, and history-view behavior to the test that proves it, the build-log entry that birthed it, and the observatory narrative that explains it — generated from the registries, never hand-kept | 7,873-test suite, pexpect TUI harness, build-log 32 entries, observatory pipeline | design · computed-from-registries approach agreed |
| The living directory | opening a folder loads it as an organism: pulses (what's hot, what changed), hooks (discovered extension points), telemetry + audit (what happened, how, why — observatory treatment), all voice-driven via mockingbird; the view small-business users will live in | browser tool suite, observability module, audit logging, mockingbird plugin, /rec voice loop | design · concept captured |
The grove's thesis is that voice-first agentic tools should serve the people the industry forgot: the trades, the small gyms, the family. These programs are run from a private, local-only lab — the public repo carries the product ideas, never the people or the businesses.
| wedge | next | |
|---|---|---|
| Small-business portfolio | two local-business studies complete using the proven playbook (brand, mission, ownership, franchising constraints, systems audit, digital presence, opportunity notes). Findings: one books jobs by mailto: with zero online booking; one runs a commercial gym portal with no public schedule and an expansion coming — both are exactly the gap the grove's small-business kit fills. | pick one → depth interview → systems audit → proposal |
| Family lab | voice-first computing for the smallest builders: a wiped-and-optimized Linux rig, a kid-safe voice loop, a school-communications portal that turns newsletters and portals into a weekly digest, and extracurricular micro-projects. Planned locally; private by design. | rig build this week · portal scaffold next |
| Cohort plugins | Junto, barber, backoffice, creative scaffold — the persona-shaped plugin seeds are versioned in-repo (user-plugins/) | shipped · grows with each wedge |
Thirteen days from fork to this page. Every date below is a real commit date.
First commit: Code Puppy imported from upstream (Michael Pfaffenberger's MIT project), synced and renamed — the seedling transplanted into the grove.
First PyPI release. The voice-first wedge is already the reason the fork exists.
MIT → Apache-2.0 with the upstream notice preserved verbatim; logos/ brand kit (Core Disc, Grove Marks, Ghost, Lockups); sprucegrove.io relaunched per-audience; the bootloader speaks only grove.
Auto-update closes the loop from version check to actuation. The sovereignty seam lands: grove-owned Harness protocol, delegating adapter, soft-failing selector — first two call sites migrated.
Council + approval wall + compat-exit ledger; the release observatory with provenance chips; the execution board + automation kit (wall, backups, parity, Forgejo stack); session handoff written; the dashboard and dependency census go public.
Three validations spec'd (desktop onboarding, traceability, living directory); two business studies complete; the release-notes pipeline automated; this page.
Published to PyPI by trusted publishing on every green merge. As of today the publish workflow creates the GitHub release with generated notes automatically — the rail can never go noteless again. The full narrative per landing lives in the Observatory.
| version | what landed | links |
|---|---|---|
| 1.0.53 | The validation ladder spec + the wedges; observatory regenerated with the ledger entries. | PyPI |
| 1.0.52 | Observatory refresh from the living ledger. | PyPI · notes |
| 1.0.51 | The rebrand completes: last dog-era copy leaves the CLI + all three locales; favicon consolidation; AGENTS.md back under cap. | PyPI · notes |
| 1.0.50 | Session handoff; observatory provenance on every entry + live upstream connector; parity build sealed. | PyPI · notes |
| 1.0.49 | Sovereignty execution: task board, automation kit, first supply-chain audits. | PyPI · notes |
| 1.0.48 | Governance: the council, the approval wall, the compatibility-exit ledger. | PyPI · notes |
| 1.0.47 | Harness seam Phase 2: grove-owned protocol, delegating adapter, first call sites migrated. | PyPI · notes |
| 1.0.46 | Manifesto, the Leather Apron Gate, bootloader rebrand. | PyPI · notes |
| 1.0.45 | Design system: Logo Pack complete; observatory nav QA. | PyPI · notes |
| 1.0.44 | The logo pack: Core Disc, Grove Marks, Ghost, Lockups. | PyPI · notes |
Full history: PyPI · 54 tags on GitHub.
When the core is grove-owned end to end and stdlib-lean, the long-horizon track opens:
a runtime small enough to wake on real hardware, agnostic across Linux/macOS/Windows
first, bare-metal eventually (tracked on the board, bead 5al.7). It is the
destination, not the next step — and it inherits every gate and every test the seam
lands along the way. Privacy-first telemetry (the r2j bead) rides the same
ladder.
“The harness is borrowed. The grove is ours.
Leave it better than we found it.”