Found while authoring the codemode skill (see skills/codemode PR).
validateGraph only requires analyzes.over ids to be nodes (graph.ts:355 requireNode), but analysts run on settled workers matched by profile name — and the root never settles as a worker. So over: ['<root-id>'] validates cleanly and produces zero traversals forever: a silent-zero, the exact failure class the graph layer's fail-loud posture exists to prevent (an empty directive is refused; an unknown handle throws; this validates and does nothing).
Proposal: validateGraph refuses an analyzes edge whose over includes the root, with the same style of message as the existing refusals — e.g. "analysts observe settled workers; the root never settles as one — list delegates-target nodes only."
Until then the codemode skill carries it as pothole #1, but a rule in prose is strictly weaker than a refusal at validation time — same argument as the empty-directive case already enforced.
Found while authoring the codemode skill (see skills/codemode PR).
validateGraphonly requiresanalyzes.overids to be nodes (graph.ts:355requireNode), but analysts run on settled workers matched by profile name — and the root never settles as a worker. Soover: ['<root-id>']validates cleanly and produces zero traversals forever: a silent-zero, the exact failure class the graph layer's fail-loud posture exists to prevent (an empty directive is refused; an unknown handle throws; this validates and does nothing).Proposal:
validateGraphrefuses ananalyzesedge whoseoverincludes the root, with the same style of message as the existing refusals — e.g. "analysts observe settled workers; the root never settles as one — list delegates-target nodes only."Until then the codemode skill carries it as pothole #1, but a rule in prose is strictly weaker than a refusal at validation time — same argument as the empty-directive case already enforced.