tune(graph): de-noise the live materializer

Verified materializePodGraph against real demo-pod data (joins all connect:
21/21 interventions->collisions, learned_from produced). Tuning:
- engineer nodes are case-insensitive (merges Shakthi/shakthi)
- git (engineer_states) now only CONFIRMS editing on files vision/collisions
  already surfaced, instead of adding the whole repo diff (killed a 29-file
  node explosion from a watcher running against the full podman repo)

Cut demo-pod from 110 -> 77 nodes; git file-edges 39 -> 6.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
sb-iam
2026-06-27 21:03:57 -07:00
parent 85ab8da598
commit 412d3f7df6
+21 -20
View File
@@ -60,7 +60,7 @@ function upsertNode(
key: string,
patch: Partial<Omit<PodGraphNode, 'id' | 'kind' | 'x' | 'y'>>,
): string {
const id = nodeKey(kind, key);
const id = nodeKey(kind, kind === 'engineer' ? key.toLowerCase() : key);
const cur = b.nodes.get(id);
if (!cur) {
b.nodes.set(id, {
@@ -158,24 +158,7 @@ export async function materializePodGraph(podId: string): Promise<PodGraph | nul
upsertNode(b, 'engineer', name, { label: name });
}
// 2. Git truth (engineer_states): unpushed work + edited files.
for (const [name, git] of gitStates) {
const files = git.changedFiles.map(parseGitStatusPath).filter(Boolean);
const eng = upsertNode(b, 'engineer', name, {
label: name,
status: files.length > 0 ? 'risk' : 'active',
summary: files.length
? `${files.length} changed file(s) on ${git.branch ?? 'detached'}`
: `on ${git.branch ?? 'detached'}`,
weight: 0.7,
});
for (const file of files) {
const f = upsertNode(b, 'file', file, { label: file, status: 'risk' });
upsertEdge(b, eng, f, 'editing', 'edits', 0.6);
}
}
// 3. Vision (observations): who is active and on which file, with confidence.
// 2. Vision (observations): who is active and on which file, with confidence.
for (const o of observations) {
if (!o.engineerId) continue;
const recent = o.observedAt && now - new Date(o.observedAt).getTime() < ACTIVE_WINDOW_MS;
@@ -190,7 +173,7 @@ export async function materializePodGraph(podId: string): Promise<PodGraph | nul
}
}
// 4. Collisions: the detected overlaps (fused git + vision).
// 3. Collisions: the detected overlaps (fused git + vision).
const collisionById = new Map<string, (typeof collisionDocs)[number]>();
for (const col of collisionDocs) {
collisionById.set(col.id, col);
@@ -211,6 +194,24 @@ export async function materializePodGraph(podId: string): Promise<PodGraph | nul
}
}
// 4. Git truth (engineer_states): mark unpushed work and confirm editing on
// files vision/collisions already surfaced — not the whole repo diff.
for (const [name, git] of gitStates) {
const files = git.changedFiles.map(parseGitStatusPath).filter(Boolean);
const eng = upsertNode(b, 'engineer', name, {
label: name,
status: files.length > 0 ? 'risk' : 'active',
summary: files.length
? `${files.length} changed file(s) on ${git.branch ?? 'detached'}`
: `on ${git.branch ?? 'detached'}`,
weight: 0.7,
});
for (const file of files) {
const fid = nodeKey('file', file);
if (b.nodes.has(fid)) upsertEdge(b, eng, fid, 'editing', 'edits', 0.6);
}
}
// 5. Interventions: what PodMan offered for each collision.
const interventionById = new Map<string, (typeof interventionDocs)[number]>();
for (const iv of interventionDocs) {