--- status: resolved claimed-by: "019fba91-eabf-76ae-b086-a37ac061d6e8" claimed-at: "2026-08-01T14:36:01-04:00" completed-at: "2026-08-01T14:44:11-04:00" parent: "[[027-pi-subagents-implementation-spec-task]]" blocked-by: - "[[046-pi-subagents-minimal-tracer-bullet-task]]" tags: - ticket/task/afk --- # Add durable status milestones and optional Pi-native status UI ## Question Connect the public status model to durable milestone entries and an optional Pi-native status UI without making the UI required for status or result retrieval. ## What to build Add the presentation layer around the existing status data model. The extension should append durable lifecycle milestones, show a collapsed live summary by default, offer an expanded inspector, and keep the UI replaceable by another extension. Disabling the bundled UI should not disable status records, status events, or tools. ## Acceptance criteria - [x] Spawn accepted, completed, failed, cancelled, and timed-out milestones are appended as durable entries. - [x] Milestone entries do not inject child transcripts into normal LLM context. - [x] The collapsed UI summary shows live counts. - [x] The expanded inspector shows child id, label, context, state, elapsed time, model, tools, last event, and result availability. - [x] Disabling `ui` hides bundled UI components but leaves list, status, result, and cancel tools working. ## Implementation Notes Use the status data model as the source of truth. Do not stream every child event into the parent transcript. Resolved in branch `pi-subagents-tracer-bullet`, commit `e7a700f`. Added durable `subagent_milestone` custom entries for accepted, completed, failed, cancelled, and timed-out states, a replaceable widget-based collapsed summary, and `/subagent-ui` expanded inspector toggle. The widget is gated by config `ui.enabled`, while tools remain available regardless. Verified milestone entries in live Pi RPC batch/fork smoke, command registration, tests, and `nix flake check`.