Conversation UX & Architecture Baseline.
The "main-branch last direct-push release": hardens structure, rendering correctness, and interaction UX so that v0.0.3+ can be developed entirely via feature PRs onto stable boundaries.
Architecture (structural boundary hardening)
- AppController owns all orchestration. extension.ts stays as pure wiring.
- ConversationModel replaces flat SessionModel. Events project into conversation-semantic ConversationItem[].
- Workspace creation split into findHarnessWorkspace() and ensureHarnessWorkspace().
- View split: provider.ts joined by styles.ts, html.ts, client.ts, toolPresentation.ts.
UX fixes
- Lazy workspace + session on first Send — no confirmation modals.
- Tool cards merged: tool/call + tool/result → single ToolItem with collapsed header.
- System messages are their own item kind (SystemItem, not UserItem.system).
- Assistant Markdown rendering via markdown-it inside the webview.
- Streaming text always re-renders via monotonic renderVersion.
Test coverage
- Integration test upgraded to exercise ConversationModel.
- renderVersion strictly increases (1 → 19).
- No tool-call/tool-result kinds leak into ConversationItem.
- systemMessageCount tracked separately.
Discipline
- NOT in v0.0.2: Diff review, approval/respond, inline completion, context injection, filesystem provider, terminal integration, LSP/ACP/SDK abstractions. All start as feature branches/PRs from v0.0.3.