# FULL BACKLOG โ€” 2026-04-18 **Purpose:** Single surface of every open item across the polish sprint, consolidated backlog, PDF triage deferred items, Marko-side non-coding work, strategic decisions, and the newly identified GEPA wiring gaps. Merges `POLISH-SPRINT-2026-04-18.md`, `BACKLOG-CONSOLIDATED-2026-04-17.md`, and `PDF-E2E-ISSUES-2026-04-17.md`. **State at write-time:** main @ `1c304cd`, tree clean, 200 commits ahead of origin. Phase A of the polish sprint is 5/6 done; QW-3 remains. **Legend:** - โœ… DONE - ๐ŸŸข PENDING (doable now) - ๐ŸŸ  DEFERRED (needs design / bigger chunk) - ๐Ÿ”ด BLOCKED (external โ€” Stripe / cert / Marko) - โณ MARKO ACTION (non-engineering) --- ## 1. Polish Sprint 2026-04-18 โ€” phased plan (this week) ### Phase A โ€” Quick Wins | # | Item | Status | Commit | |---|---|---|---| | QW-1 | Prefill chat after onboarding | โœ… | `9d1c858` | | QW-2 | Memory tab labels | โœ… | `bb6ab50` | | QW-3 | Skip boot on return visits (verify `BOOT_KEY` in `Index.tsx:16`) | ๐ŸŸข | โ€” | | QW-4 | Back button onboarding 2-6 | โœ… | `47539ac` | | QW-5 | Dock tier rename + billing clarity | โœ… | `70c8d84` | | CR-7 | CLAUDE.md ยง10 refresh | โœ… | `1c304cd` | ### Phase B โ€” Core bugs + light mode finish (~1 day) | # | Item | Status | |---|---|---| | P35 | Spawn-agent "no models available" โ€” wire `SpawnAgentPanel` to live provider list (13 green) | ๐ŸŸข | | P36 | Dock spawn-agent icon click โ€” verify, wire TaskCreate | ๐ŸŸข | | P40 | BootScreen logo/animation renders in light mode | ๐ŸŸข | | P41 | "Waggle AI" header text restyled for light theme | ๐ŸŸข | | CR-2 | Remaining `hive-950` โ†’ semantic token sweep | ๐ŸŸข | ### Phase C โ€” OW-6 PersonaSwitcher two-tier (0.5 day) | # | Item | Status | |---|---|---| | OW-6 | UNIVERSAL MODES (8) + WORKSPACE SPECIALISTS split; hover tooltip with tagline / bestFor / wontDo. File: `apps/web/src/components/os/overlays/PersonaSwitcher.tsx`. Requires `AgentPersona` interface extensions per CLAUDE.md ยง5 (already shipped in `personas.ts`). | ๐ŸŸข | ### Phase D โ€” Feature polish (~10 days) **Compliance UX (3.5d) โ€” Block 3b** | # | Task | |---|---| | 3b.1 | POST /api/compliance/export-pdf โ†’ pdfmake buffer download | | 3b.2 | Template system (sections, logo, branding, footer as JSON) | | 3b.3 | Full-page ComplianceReport viewer + date picker + PDF button | | 3b.4 | Custom branding (logo upload, org name, risk class override) | | 3b.5 | KVARK template (IAM audit, data residency, department breakdown) | **Harvest UX (5d) โ€” Block 4** | # | Task | Status | |---|---|---| | 3.1 | Privacy headline | โœ… | | 3.2 | Dedup summary | โœ… | | 3.3 | SSE live progress streaming | ๐ŸŸข | | 3.4 | Resumable harvests (checkpoint every 100 frames) | ๐ŸŸข | | 3.5 | Identity auto-populate screen | ๐ŸŸข | | 3.6 | Harvest-first onboarding tile | ๐ŸŸข | **Wiki v2 (5d) โ€” Block 3** | # | Task | Status | |---|---|---| | 2.1 | Markdown export | โœ… | | 2.2 | Incremental recompile after harvest | ๐ŸŸข | | 2.3 | Obsidian vault adapter | ๐ŸŸข | | 2.4 | Notion structured export adapter | ๐ŸŸข | | 2.5 | Wiki health report dashboard UI | ๐ŸŸข | **Medium UX fixes (1-4h each)** | # | Fix | Status | |---|---|---| | UX-1 | Reduce onboarding decisions (default Blank + General Purpose โ†’ Ready) | ๐ŸŸข | | UX-3 | Memory tab bar labels | โœ… (QW-2) | | UX-4 | Dock text labels first 7d / 20 sessions | ๐ŸŸข | | UX-5 | Hide token/cost behind dev mode | ๐ŸŸข | | UX-6 | Chat header overflow menu | ๐ŸŸข | | UX-7 | Tier-step copy clarify dock tier โ‰  billing | โœ… (QW-5) | **Engagement features (half-day each)** | # | Feature | |---|---| | ENG-1 | "I just remembered" toast after 5th message | | ENG-2 | WorkspaceBriefing collapsible sidebar | | ENG-3 | Progressive dock unlock nudge at 10/50 sessions | | ENG-4 | LoginBriefing on every launch (per-session + don't-show-again) | | ENG-5 | Harvest-first onboarding โ€” move import pitch to step 2 | | ENG-6 | Memory Score / Brain Health metric | | ENG-7 | Suggested next actions after assistant response | **Responsive gaps** | # | Component | Issue | |---|---|---| | R-1 | Dock | Power tier (14 items) overflows < 768px | | R-2 | StatusBar | 10+ items โ€” hide non-essential < 900px | | R-3 | ChatApp | Session sidebar 192px โ€” collapse narrow | | R-4 | OnboardingWizard | Template grid responsive columns | | R-5 | AppWindow | Default sizes exceed mobile viewport | ### Phase E โ€” Infra polish (~6 days) | # | Item | |---|---| | CR-8 | Tauri binary verification on clean Windows VM | | INST-1 | Ollama bundled installer (Install Ollama + pull Gemma 4) | | INST-2 | Hardware scan (RAM/GPU โ†’ model fit recommendation) | | INST-3 | Ollama daemon auto-start (Windows service / macOS launchd) | | CR-6 | hive-mind actual source extraction (scaffold exists, copy TODO) | | CR-1 | MS Graph OAuth connector โ€” email / calendar / files harvest | ### Phase F โ€” Content polish (~1 day) | # | Item | |---|---| | CR-4 | Demo video script (90s + 5min) | | CR-5 | LinkedIn launch posts (3-post sequence) | | โ€” | Peer-reviewer outreach email (agent drafts, Marko sends) | --- ## 2. Marko โ€” non-coding items | # | Action | Status | Blocks | |---|---|---|---| | M1 | ChatGPT export (OpenAI email) | โณ chase | Phase 1 harvest | | M2 | Claude / Anthropic export | โœ… | โ€” | | M3 | Google / Gemini export | โœ… | โ€” | | M4 | Perplexity threads โ€” manual-only, skipped | โ€” | โ€” | | M5 | API credit top-ups | โœ… | โ€” | | M6 | Judge-model list revision (after w4/w25 proofs) | โณ later | Phase 5 | | M7 | Stripe products (Pro $19, Teams $49/seat) | โณ today | Phase 7 | | M8 | Windows EV code signing cert ($300-500/yr) | โณ Monday | Phase 7 | | M9 | Apple Dev + Mac notarization | โณ Monday | Phase 7 | | M10 | Greenlight launch date | โณ after proofs | Launch | ### Strategic decisions pending | # | Decision | Unlocks | |---|---|---| | C1 | hive-mind OSS timing โ€” ship-with or ship-before Waggle? | Launch sequence | | C5 | Harvest-first onboarding โ€” replace step 2 vs parallel opt-in? | UX-1 / ENG-5 | | C8 | Warm list 5-10 names to pre-email T-72h | Launch credibility | | C9 | Papers โ€” single-author or dual-author? | Paper attribution | | C11 | Marketplace model โ€” free / freemium / enterprise? | Skills monetization | | ES | EvolveSchema attribution โ€” Mikhail vs ACE (Zhang et al.) | Paper 2 framing | --- ## 3. P0 Launch Blockers (beyond polish) ### Block 2 โ€” Phase 1 Harvest Marko's real data (๐Ÿ”ด blocked on M1) | # | Task | |---|---| | 1.1 | Import ChatGPT conversations โ†’ harvest | | 1.2 | Import Claude conversations โ†’ harvest | | 1.3 | Re-harvest Claude Code (fresh, all sessions) | | 1.4 | Import Gemini conversations โ†’ harvest | | 1.5 | Import Perplexity threads โ†’ harvest | | 1.6 | Build Cursor adapter (0.5-1 day) | | 1.7 | Post-harvest cognify on imported frames | | 1.8 | Identity auto-populate from harvest | | 1.9 | Wiki compile from real data | | **GATE** | 10K-50K frames, dedup verified, KG populated | | Budget ~$50. ### Block 5-8 โ€” proofs + papers | Block | Name | Time | Budget | |---|---|---|---| | 5 | Phase 4 Memory Proof (`MEMORY-HARVEST-TEST-PLAN.docx`) | 10d | $300-500 | | 6 | Phase 5 GEPA Full-System Proof (`GEPA-EVOLUTION-TEST-PLAN.docx`) | 18d | $1.5-2.5k | | 7 | Phase 5b Combined Effect (`COMBINED-EFFECT-TEST-PLAN.docx`) | 6d | ~$500 | | 8 | Phase 6 Write papers (2 arXiv) + Marko peer review | 5d | โ€” | ### Block 9 โ€” Launch Prep | # | Task | Status | |---|---|---| | 9.1 | Stripe dashboard + smoke test | ๐Ÿ”ด M7 | | 9.2 | Code signing cert + updater keypair | ๐Ÿ”ด M8 | | 9.3 | hive-mind source extraction (Apache 2.0) | ๐ŸŸข (scaffold done) | | 9.4 | Binary build + clean Windows VM smoke | ๐ŸŸข | | 9.5 | Clerk auth integration | ๐Ÿ”ด after 9.1 | | 9.6 | Onboarding finalized (harvest-first) | ๐ŸŸข needs Block 4 | | 9.7 | Mac notarization | โณ M9 | | 9.8 | Landing page final polish | ๐ŸŸข | ### Block 10 โ€” Launch Day ๐Ÿ”ด (gated) Simultaneous: Waggle binary ยท hive-mind OSS ยท 2 arXiv papers ยท LinkedIn sequence ยท Pro/Teams live. --- ## 4. PDF E2E โ€” deferred 21 items (๐ŸŸ ) Source: `docs/plans/PDF-E2E-ISSUES-2026-04-17.md`. | # | Item | Effort | |---|---|---| | P4 | Permissions โ†’ Mutation Gates merge with 3-level tool approval | ๐ŸŸ  big UX | | P6 | Room feature โ€” verify 2 parallel agents visualization | ๐ŸŸ  | | P8 | Agents vs Personas unify naming | ๐ŸŸก partial | | P10 | Bee-style per-agent icons (dark + light) | ๐ŸŸ  design-heavy | | P14 | Local browser only drive D โ€” multi-drive (C: required) | ๐ŸŸ  | | P15 | Create Template modal overlaps Dashboard โ€” can't drag | ๐ŸŸ  | | P16 | Files app local-folder create + explorer-style browse | ๐ŸŸ  big | | P17 | App-wide tooltips on badges/options | ๐ŸŸ  broad | | P18 | Waggle Dance โ€” display real discovery/handoff signals | ๐ŸŸ  | | P21 | Timeline always empty โ€” wire to event stream | ๐ŸŸ  | | P25 | Scheduled Jobs toggle stays off after trigger | ๐ŸŸ  | | P26 | New scheduled-job creation unclear | ๐ŸŸ  | | P28 | Marketplace empty | โœ… (fixed, 10 E2E green, 148 pkgs) | | P29 | Skills & Apps cards not clickable โ€” no detail card | ๐ŸŸ  | | P30 | MCP install CLI flow unclear | ๐ŸŸ  | | P34 | Approvals app โ€” move to Ops or delete | ๐ŸŸ  | | P35 | Spawn Agent "no models available" | ๐ŸŸ  โ€” Phase B above | | P36 | Dock spawn-agent icon wiring | ๐ŸŸ  โ€” Phase B above | | P39 | Status bar left shows static โ€” should be dynamic | ๐ŸŸก | | P40 | Light-mode boot screen | ๐ŸŸ  โ€” Phase B above | | P41 | Light-mode "Waggle AI" header text | ๐ŸŸ  โ€” Phase B above | --- ## 5. GEPA Wiring Closure โ€” NEW (4 items) Context: Self-evolution library code is 100% present (357 evolution tests, full orchestrator, deploy callbacks, gates, compose, trace store, eval-dataset builder, makeRunningJudge, etc.). But four wiring gaps explain why a published evolution run hasn't produced a real agent-behavior improvement to date. Each is small but load-bearing. ### G1 โ€” No autonomous evolution service / scheduler ๐ŸŸข **Claim:** The server has `optimizer-service.ts` (the one-shot `@waggle/optimizer` wrapper) but no `evolution-service.ts`. There is no route that instantiates `EvolutionOrchestrator` on a schedule, no cron job that calls `runOnce()`, no daemon that mines traces into eval datasets. The full closed loop exists as library code that nothing automatically calls. **Evidence:** - `packages/server/src/local/services/` โ€” contains `optimizer-service.ts`, no `evolution-service.ts`. - `packages/server/src/local/routes/evolution.ts` โ€” has `/api/evolution/run` (manual POST) that instantiates the orchestrator with a base judge + running judge, but it is only triggered by HTTP. The only cron reference is a comment on line 439: `"backwards compat for tests + cron"` โ€” no code. - `cron-service.ts` exists in services but has no evolution-run registration. **Fix:** 1. Create `packages/server/src/local/services/evolution-service.ts` that owns a daemon loop and an auto-trigger policy. 2. Register an evolution cron in `cron-service.ts` (configurable cadence, default daily at low-traffic hour) that calls `runOnce()` with baseline auto-detection from the trace store. 3. Add a minimum-dataset gate so the scheduler skips runs when the trace table has fewer than N eligible examples (avoids burning API spend on no-op runs). 4. Wire an on-demand trigger in the UI (Evolution tab โ†’ Run now button already exists from Phase 8.5 โ€” ensure it reuses the same service). **Effort:** 0.5-1 day. ### G2 โ€” `loadSystemPrompt` ignores overrides ๐ŸŸข **Claim:** `prompt-loader.ts` is a static file reader that reads `{waggleDir}/system-prompt.md` only. It does not integrate with `loadBehavioralSpecOverrides` or `loadCustomPersonas`. A deployed evolution writes overrides correctly via `evolution-deploy.ts`, but any consumer that reads the disk system prompt directly would not see those overrides. **Evidence:** - `packages/agent/src/prompt-loader.ts` โ€” 26 lines total, only `readFileSync` of `system-prompt.md`. No override imports. - Override loaders live in `behavioral-spec.ts` + `custom-personas.ts`, called by `server.activeBehavioralSpec` decorator (Phase 7.5) โ€” that chat path does work. - Gap: any other consumer (CLI, tests, future runtime integrations) that reads via `loadSystemPrompt` receives the raw file without overrides. **Fix:** 1. Add `loadSystemPromptWithOverrides(waggleDir)` that composes: base spec โ†’ behavioral-spec overrides (via `buildActiveBehavioralSpec`) โ†’ persona system prompt (via `getPersona` + custom persona overrides) โ†’ disk system-prompt.md append. 2. Migrate any remaining callers of `loadSystemPrompt` to the override-aware loader. 3. Deprecate the bare `loadSystemPrompt` (keep export for test isolation only). 4. Add an assertion in agent-loop startup that logs a warning if overrides exist on disk but the active spec doesn't include them (catches wiring regressions). **Effort:** 2-4 hours. ### G3 โ€” Running judge not end-to-end on all eval paths ๐ŸŸข **Claim:** Without `makeRunningJudge`, the judge compares prompt TEXT to expected output, turning GEPA into a prompt-text-similarity optimizer โ€” a meaningless gradient. The wrapper exists in `evolution-llm-wiring.ts` but not every runtime path assembles it. **Evidence:** - `/api/evolution/run` (evolution.ts:377) โ€” CORRECTLY wraps `baseJudge` with `makeRunningJudge` for GEPA instruction stage. This path is fine. - `iterative-optimizer.ts` โ€” no matches for `makeRunningJudge` or `runningJudge` inside the file. If anything uses this optimizer directly (not via the /run endpoint), it scores text similarity. - `scripts/evolution-hypothesis.mjs` โ€” referenced in the grep as another consumer; needs audit. **Fix:** 1. Audit every consumer of `IterativeGEPA.run()` (grep `IterativeGEPA`, inspect each caller). 2. For any caller that passes a bare judge for instruction evolution, wrap with `makeRunningJudge(base, llm)`. 3. Add a type guard / runtime check in `IterativeGEPA.run()` that rejects judges which haven't been marked as running-capable (add a brand/phantom property to `makeRunningJudge`'s return so `IterativeGEPA` can assert it). 4. Update `evolution-hypothesis.mjs` + any other standalone harnesses to use the running judge. **Effort:** 2-4 hours including audit. ### G4 โ€” Traces rarely finalized with `success`/`verified`/`corrected` ๐ŸŸข **Claim:** `EvalDatasetBuilder` mines examples from `execution_traces`. If outcomes aren't consistently set to a terminal success value, `buildExamplesFromTraces` returns zero examples and the orchestrator skips with "no eligible traces". GEPA doesn't fail โ€” it just never runs. **Evidence:** - `packages/server/src/local/routes/chat.ts:1146` โ€” `traceRecorder.start()` is called correctly at the start of each chat turn. - `packages/server/src/local/routes/chat.ts:1231` โ€” `traceRecorder.finalize(traceHandle, {...})` is called. Need to verify the outcome argument always resolves to `'success'` / `'verified'` / `'corrected'` for turns that should be eligible, and audit what happens on tool-error / abort paths. - `harness-trace-bridge.ts:123` โ€” only explicit `'verified' | 'abandoned'` literal found in agent src. Outcome coverage is thin in production code paths. **Fix:** 1. Audit `chat.ts` finalize paths โ€” what outcome do we emit on (a) successful final assistant message, (b) tool error mid-turn, (c) user abort / SSE disconnect, (d) rate-limit failure, (e) inner monologue / empty text? Document the matrix. 2. Ensure `'success'` is emitted for turns that produced a valid final assistant message without fatal errors. 3. Backfill outcome on traces that have a valid final message but no explicit outcome (one-time migration script). 4. Add a health metric in the Evolution dashboard: "Eligible traces available for next run: N" โ€” so the user sees the dataset pool size before kicking off a run. 5. When `EvalDatasetBuilder` returns fewer than `minExamples`, emit a structured error to the /run response body explaining WHY (current wording "no eligible traces to form dataset" is opaque to end users). **Effort:** 0.5 day. ### GEPA closure totals **4 items, ~2 engineering days, all unblocked.** Ship order: G4 (makes runs possible) โ†’ G2 (makes deploys consumable) โ†’ G3 (audits correctness) โ†’ G1 (autonomy). After closure, the claim "Waggle self-evolves its agent behavior in production" becomes defensible โ€” today it is defensible only for library-level tests. --- ## 6. hive-mind OSS Integration ๐ŸŸข (7 days) From `docs/HIVE-MIND-INTEGRATION-DESIGN.md`. 8 items across MCP resources, CLI, hooks, installer. Blocks C1 decision. --- ## 7. Accessibility (๐ŸŸข 1 day, post-launch OK) | # | Fix | WCAG | |---|---|---| | A11Y-1 | Boot screen: screen-reader skip announce | 2.1.1 | | A11Y-2 | Dock: 44x44px touch targets | 2.5.8 | | A11Y-3 | Window title bar: icons on min/max buttons | 1.4.1 | | A11Y-4 | PersonaSwitcher: aria-disabled on locked cards | 4.1.2 | | A11Y-5 | Settings: role="switch" + aria-checked on toggles | 4.1.2 | | A11Y-6 | Dashboard: health-dot shape differentiation | 1.4.1 | | A11Y-7 | Chat feedback dropdown: focus trap + arrow keys | 2.1.1 | | A11Y-8 | Global Search: role="dialog" | 1.3.1 | | A11Y-9 | Memory: aria-label on importance slider | 1.3.1 | --- ## 8. Totals | Category | Items | Eng days | Budget | |---|---|---|---| | Polish sprint Phases A-F | ~35 | ~20 | โ€” | | P0 launch blockers (tests, papers, launch prep) | 50 | 50 | $2.65-4k | | P1 ship quality (QW, OW-6, CR-*, 3b, INST) | ~25 | 6.5 | โ€” | | P2 polish (Medium UX, ENG, wiki v2, harvest UX, responsive) | ~30 | 22 | โ€” | | P3 future (A11Y, notarization, LinkedIn) | ~15 | 6.5 | โ€” | | PDF deferred | 21 | ~7 | โ€” | | **GEPA wiring closure (NEW)** | **4** | **~2** | **โ€”** | | **Total everything** | **~150** | **~94** | **~$3-4k** | Calendar with parallelism: ~7-8 weeks to launch. --- ## 9. Critical path ``` Marko exports (M1) โ”€โ”€โ–บ Phase 1 Harvest (3d) โ”€โ”€โ–บ Phase 4 Memory Proof (10d) โ”€โ”€โ–บ Paper 1 โ””โ”€ parallel โ”€โ–บ Phase 2 Wiki v2 (7d) โ†“ โ””โ”€ parallel โ”€โ–บ Phase 3 Harvest UX (7d) Phase 5b Combined (7d) โ”€โ”€โ–บ Paper 2 โ†‘ API credits (M5) โ”€โ”€โ–บ Phase 5 GEPA Proof (21d) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ†‘ GEPA wiring closure (G1-G4, 2d) โ€” must ship before Phase 5 Stripe (M7) + Signing (M8) โ”€โ”€โ–บ Phase 7 Launch Prep โ”€โ”€โ–บ LAUNCH DAY hive-mind extraction (CR-6) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ LAUNCH DAY ``` **GEPA closure (G1-G4) is now on the critical path for the Phase 5 GEPA proof** โ€” without it, the proof would measure text similarity instead of real agent behavior. --- ## 10. Related docs - `docs/plans/POLISH-SPRINT-2026-04-18.md` โ€” phased polish plan - `docs/plans/BACKLOG-CONSOLIDATED-2026-04-17.md` โ€” prior consolidated backlog (pre-GEPA-wiring audit) - `docs/plans/PDF-E2E-ISSUES-2026-04-17.md` โ€” PDF triage - `docs/HIVE-MIND-INTEGRATION-DESIGN.md` โ€” OSS package design - `docs/UX-ASSESSMENT-2026-04-16.md` โ€” UX findings source - `docs/test-plans/*.docx` โ€” Phase 4/5/7 protocols - `docs/REMAINING-BACKLOG-2026-04-16.md` โ€” 2026-04-16 master snapshot - `docs/TOTAL-WORK-ESTIMATE.md` โ€” effort breakdown