The app shipped light shadcn; GraphView shipped dark-Bauhaus and clashed.
Spec now calls for theme-aware shadcn tokens (var(--card)/--foreground/
--border/--chart-*) instead of the hardcoded dark .pm-* palette; functional
node-shape/color encoding unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address all 5 review findings:
- P1 supervised learning: outcome carries learnedOwner+file -> team_model.ownership
(authoritative); observation owner is only a low-confidence fallback.
- P1 changedFiles: parse git status --short lines (parseGitStatusPath) before
matching collision files.
- P2 ws bridge: GRAPH_DIRTY is in-process; agent opens a ws client to /api/events
for the nice-to-have instant COLLISION/VOICE push; poll is the floor.
- P2 demo metrics: PodGraph gains source:'live'|'demo'; demo/empty suppresses
the baked 5/2/86% so it never reads as live.
- P3: PR is spec-only; PLAN.md task lands with the implementation PR.
Adds an R1 revisions section; contract changes (messages.ts, graph.ts,
useInterventions.ts) listed in §7.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds docs/live-ui-spec.md — how to make the demo-backed graph REAL by
materializing it from the live Mongo collections the agent already writes
(pods, engineer_states, observations, collisions, interventions, outcomes).
Extends docs/graph.md; spec only, no implementation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Resolve App.tsx header conflict: keep main's "Privacy-limited" badge AND the
"Team memory" graph button (both in the header action group). server.ts and
backend/package.json auto-merged cleanly — main's closeMemory/shutdown and the
graph:seed script are both preserved.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Resolve conflicts:
- backend/src/server.ts: keep main's getPresence + closeRoom (room auto-cleanup)
and add the graph imports/routes (additive).
- frontend/src/App.tsx: take main's shadcn command-center UI and re-integrate
GraphView — import, graphPodId state, an early-return render branch, and a
shadcn "Team memory" button next to Refresh.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- reachFrom now returns the direct outbound edges PLUS the recursive
$graphLookup reaches, de-duped by edge id, with maxDepth to bound cycles.
It was dropping edges straight off the start node. [review P2]
- GraphView SVG nodes are keyboard-accessible: role/tabIndex/aria-label +
Enter/Space handler alongside onClick. [review P3]
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds the team_model graph layer (the "it learned" view) and its visualization,
per docs/graph.md. Demo-backed first; built on origin/main conventions.
- shared: PodGraph / node / edge / metric types + GraphNodeDoc / GraphEdgeDoc
- backend/src/graph: demo graph data; Mongo store (loadPodGraph w/ demo
fallback, seedGraph, reachFrom via $graphLookup); graph:seed script
- backend/src/server.ts: additive GET /api/pods/:id/graph + /graph/reach/:node
- frontend: dark-Bauhaus GraphView + fetch helper, reachable from a
"Team memory" toggle in App.tsx
- docs/graph.md: spec (data model, $graphLookup, API, demo-first plan)
Demo-backed: the route serves a grounded demo graph when team_model has no
graph yet; graph:seed writes team_model + graph_nodes/graph_edges so the
$graphLookup traversal is real. Swap loadPodGraph to live team_model later.
Known follow-ups before merge: branch is based on 65a0791; origin/main is now
at 1294b84, so this needs a rebase + App.tsx conflict resolution (teammate
rewrote App.tsx with live room view / one-click join).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>