# PDF Triage Audit โ€” 2026-04-20 (M-33..48 status close-out) **Scope:** Verify each item in `PDF-E2E-ISSUES-2026-04-17.md` against current code as of `bf18e16` (head of `main`). The 2026-04-19 plan estimated M-33..48 at ~5 d "audit first, many likely shipped in S2/S3/S4." This audit confirms that estimate was conservative โ€” most items have shipped under M-XX commit numbers since S2. ## Method For each P-item still marked ๐ŸŸ  deferred or ๐ŸŸก partial in the source PDF doc: 1. `git log --since="2026-04-17"` for commits referencing the area 2. Grep current source files for the relevant component/handler 3. Cross-reference recent session handoffs (S2 / S3 / S4 / S1) 4. Classify: โœ… shipped / ๐ŸŸก needs verification / ๐ŸŸ  still open / ๐Ÿ”ด blocked ## Findings โ€” full P-item disposition | # | Item (one-liner) | Prior | Audit verdict | Evidence | |---|---|---|---|---| | P1 | Opens as General Purpose โ€” should be Researcher | ๐ŸŸก | ๐ŸŸก wired, needs LIVE test | OnboardingWizard.tsx:134 maps template โ†’ persona; handleFinish:275 saves `persona: selectedPersona`; useWindowManager.ts:230 reads `ws?.persona`; ChatWindowInstance.tsx:87 falls back to `'general-purpose'` if `initialPersona` undefined. Chain is correct in code; bug is either server-side persona save OR first-window-before-workspace-load timing | | P2 | Chat input too small | โœ… | โœ… shipped (S2 batch `1c6d9f2`) | confirmed at PDF source | | P3 | Tier-gated menu items | โœ… | โœ… shipped (S2 batch) | confirmed | | P4 | Mutation Gates / 3-level approval | ๐ŸŸ  | โœ… shipped S1 `07cbf25` + `575f2c9` | `defaultAutonomy` enum + radio + new-window inheritance | | P5 | Advanced Settings actionable | โœ… | โœ… shipped (S2 batch) | confirmed | | P6 | Room โ€” verify 2 parallel agents | ๐ŸŸ  | โœ… shipped (S4 verification) | per S4 handoff "PDF picks shipped (P14/P15/P6/P10)" | | P7a | `//` slash commands | โœ… | โœ… shipped (S2 batch) | confirmed | | P7b | "No tools assigned" | โœ… | โœ… shipped (S2 batch) | confirmed | | P8 | Agents vs Personas naming | ๐ŸŸก | โœ… shipped โ€” addressed by M-01 | `a8b6548` PersonaSwitcher two-tier + `02c029d` rich tooltip โ€” the redesign disambiguates personas as "modes" vs "specialists", removing the naming ambiguity | | P9 | AI-generate agent โ†’ Stripe link broken | ๐Ÿ”ด | ๐Ÿ”ด blocked (Stripe products) | external โ€” Marko's Stripe dashboard work; see `[M]-01` | | P10 | Bee-style persona icons (light + dark) | ๐ŸŸ  | โœ… shipped (S4 PDF picks) | per S4 handoff | | P11 | Group members shows only 3 | โœ… | โœ… shipped (S2 batch) | confirmed | | P12 | Workspace template Blank twice | โœ… | โœ… shipped (S2 batch) | confirmed | | P13 | Group filter Projects/Research | โœ… | โœ… shipped (S2 batch) | confirmed | | P14 | Virtual path truncated + Local D-drive only | ๐ŸŸ  | โœ… shipped S4 (option 1: home on C: + D:) | per PDF-DEFERRED-DECISIONS pick + S4 handoff | | P15 | Create Template modal overlap | ๐ŸŸ  | โœ… shipped S4 (option 2 / viewport check) | per S4 handoff | | P16 | Files app only Virtual storage | ๐ŸŸ  | โœ… shipped S1 `516090c` | 3-tab `` | | P17 | Tooltips missing app-wide | ๐ŸŸ  | โœ… shipped S1 (P17.1..5, ~80 sites) | `bf18e16` is the last commit; zero `title=""` remain in `components/os/` | | P18 | Waggle Dance signals | ๐ŸŸ  | โœ… shipped โ€” M-41 `9faaf78` | "Waggle Dance deterministic signal ordering" | | P19 | Cockpit System Health "Ok" red | โœ… | โœ… shipped (S2 batch) | confirmed | | P20 | AI Act warning explanation | โœ… | โœ… shipped (S2 batch) | confirmed | | P21 | Timeline always empty | ๐ŸŸ  | โœ… shipped โ€” M-42 `0b49a42` | "align Timeline vocabulary with server AuditEventType" | | P22 | Telemetry "Upgrade to unlock" | โœ… | โœ… shipped (S2 batch) | confirmed | | P23 | Backup & Restore doubled | โœ… | โœ… shipped (S2 batch) | confirmed | | P24 | Events Replay unclear | โœ… | โœ… shipped (S2 batch) | confirmed | | P25 | Scheduled Jobs toggle stays off | ๐ŸŸ  | โœ… shipped โ€” M-43 (per code comment) | ScheduledJobsApp.tsx:106-114 explicit "M-43 / P25" comment โ€” server auto-enables on trigger; client syncs from response | | P26 | New scheduled job creation unclear | ๐ŸŸ  | โœ… shipped โ€” improved UX | ScheduledJobsApp uses CRON_SCHEDULE_PRESETS + CRON_JOB_TYPES + describeCronExpr (plain-English schedule summary) โ€” far clearer than raw cron | | P27 | Skills & Apps Installed/Starter overlap | โœ… | โœ… shipped (S2 batch) | confirmed | | P28 | Marketplace empty โ€” sync from DB | ๐ŸŸ  | โœ… shipped โ€” `ac586f7` "fix(marketplace): correct monorepo seed path resolution" | combined with C4 dedupe (S1 `b8dab3d`) | | P29 | Skills & Apps cards not clickable | ๐ŸŸ  | โœ… shipped โ€” detail pane wired | CapabilitiesApp.tsx:160 `onClick={() => setSelectedPack(pack)}` opens overlay detail card at line 218+ | | P30 | MCP install flow unclear | ๐ŸŸ  | โœ… shipped (S3 PDF picks) | per S3 handoff "P30 MCP install clarity" | | P31 | Second Marketplace dock | โœ… | โœ… shipped (S2 batch) | confirmed | | P32 | Team Governance on Free | โœ… | โœ… shipped (S2 batch) | confirmed | | P33 | "API Keys" vs "Vault" naming | โœ… | โœ… shipped (S2 batch) | confirmed | | P34 | Approvals โ†’ Ops or delete | ๐ŸŸ  | โœ… shipped (S3) โ€” Approvals โ†’ Teams-tier | per S3 handoff | | P35 | Spawn Agent "no models available" | ๐ŸŸ  | โœ… shipped โ€” `8782cab` Phase A/B polish | SpawnAgentDialog.tsx:263-277 has actionable empty state: "Keys configured but no models returned โ€” the LiteLLM proxy may not be running." | | P36 | Dock spawn-agent click does nothing | ๐ŸŸ  | โœ… shipped โ€” fully wired | Dock.tsx:152 `onClick={onSpawnAgent}` โ† Desktop.tsx:398 `onSpawnAgent={() => ov.setShowSpawnAgent(true)}` | | P37 | Ctrl-K search hidden | โœ… | โœ… shipped (S2 batch) | confirmed | | P38 | Status bar WiFi badge / 24h | โœ… | โœ… shipped (S2 batch) | confirmed | | P39 | Status bar left static | ๐ŸŸก | โœ… shipped โ€” M-47 `bb9cae5` | "dynamic focused-window label in status bar" | | P40 | Light mode boot logo / animation | ๐ŸŸ  | โœ… shipped โ€” `cbe8924` H-04..06 + `8782cab` theme-aware logo | BootScreen.tsx:27-28 `useIsLightTheme` + `waggleLogoLight` / `waggleLogoDark`, full animation set still present | | P41 | Light mode "Waggle AI" text styling | ๐ŸŸ  | โœ… shipped โ€” H-04..06 polish close | text uses `text-foreground` (theme-aware token); `font-display font-bold` consistent across modes | ## Summary | Status | Count | Items | |---|---|---| | โœ… shipped | 38 | P2-P8, P10-P34, P35-P41 (all but P1 + P9) | | ๐ŸŸก wired but needs LIVE test | 1 | P1 โ€” onboarding persona โ†’ first chat window | | ๐Ÿ”ด blocked external | 1 | P9 โ€” Stripe products (Marko, post-benchmarks) | | ๐ŸŸ  still open | 0 | โ€” | **M-33..48 effective effort:** ~0 engineering hours of new build. ~1-2 hours for P1 Playwright E2E test (or live binary smoke). All other items are already on `main` under M-XX commits since S2. ## Recommendation 1. **P1 verification only** โ€” write a Playwright test that: - Onboards with `researcher-tools` template (auto-selects researcher persona) - Lands on Ready step โ†’ completes - Verifies the first chat window opens with `currentPersona === 'researcher'` - If green: close P1 โœ…. If red: 1-2 hr fix in handleFinish or ChatWindowInstance fallback. 2. **Skip remaining "exec" of M-33..48** โ€” there's nothing to execute. 3. **Move directly to `#2` M-07..10 Harvest UX polish** โ€” this was the next item in Marko's S2 sequence. ~2-3 d of genuine functional work. ## Why the gap: PDF triage doc rot The PDF source doc (`PDF-E2E-ISSUES-2026-04-17.md`) was last edited 2026-04-17, the day of the S2 sweep that closed 20 of 41 items. Every commit since has been numbered under the M-XX scheme (the "milestone backlog" at `BACKLOG-MASTER-2026-04-18.md`), so the cross-references back to the original P-numbers were buried in commit messages but never re-landed in the PDF status table. The 16 items presumed open under "M-33..48 = remaining PDF" were actually shipped one-by-one as M-41/M-42/M-43/M-47 etc. **Lesson for future planning surfaces:** When work splits across multiple backlog files (PDF triage + M-XX milestone + L-XX latency), the *source* should hold canonical status; commits should be tagged with both numbering schemes (`M-41 ยท P18` is the right pattern, used in some commits but not all). --- **Author:** Claude (audit per Marko's S2 directive โ€” sequence M-33..48 first)