Render a real Flow Graph and recover diagnostics sample routes - #347
Conversation
|
Current head Cursor (@cursor) review Copilot review Eli Pinkerton (@wallstop) Human review requested for the hand-built Flow Graph canvas, parallel-route geometry, viewport-state preservation, Unity 2021.3 portability, and reload-disabled sample recovery. |
Performance NumbersMeasured commit: Benchmark methodology is unchanged; the historical Standalone comparison is diagnostic regression smoke. Historical Standalone deltaDelta direction: + is better; - is worse.
Current TargetMap evidenceThese raw rows are current-run diagnostics. Use fresh bracketed controls before accepting a micro-optimization. |
|
Corrective head Cursor (@cursor) review Copilot review Eli Pinkerton (@wallstop) Human re-review requested for the headless teardown correction and the complete hand-built Flow Graph canvas. |
|
Correction: the exact current head is Cursor (@cursor) review Copilot review Eli Pinkerton (@wallstop) Human re-review requested. |
|
Readability-overhaul head The canvas now relies on arrow direction instead of FROM/AT labels, applies crossing-aware layered ordering and ordered ports, shows named/filter-scoped node metrics without Fresh validation: Flow Graph 150/150; full Editor assembly 594/594; script suite 406/406; strict docs, validate:all, pre-commit, and final adversarial audit all green. Cursor (@cursor) review Copilot review Eli Pinkerton (@wallstop) Human final review requested for readability, accessibility, evidence attribution, and the current exact head. |
|
CI correction head Cursor (@cursor) review Copilot review Eli Pinkerton (@wallstop) Human final re-review requested for this exact head. |
|
Cursor (@cursor) review Final review requested for f02fce6. The destroyed-context finding is fixed across the class: Flow Graph capture now uses Unity fake-null semantics and preserves the stable instance ID; ReflexiveMessage hierarchy delivery skips destroyed GameObject/Component references while normal targeted bus handlers still continue. Regressions cover exact route retention and both destroyed target shapes. Final adversarial audit: zero actionable findings. |
|
Eli Pinkerton (@wallstop) Human final re-review requested for f02fce6. The readability overhaul and destroyed-context correction are ready: Flow Graph 151/151, full Editor 595/595, destroyed-target Runtime regression 2/2 before the extended handler-continuation assertion, 406/406 Node tests, 441/441 docs tests, validate:all, spelling, and all hooks green. |
|
Cursor (@cursor) review Final re-review requested for ba29b17. This minimal follow-up fixes the Unity 2021.3 NUnit compatibility failure by comparing the declared IReadOnlyList Edges.Count directly instead of using Has.Count reflection. The exact-one-route contract is unchanged; focused hooks and final adversarial review are clean. |
|
Eli Pinkerton (@wallstop) Human final re-review requested for ba29b17. CI artifact RCA: production capture did not fail; Unity 2021.3's older NUnit could not reflect Has.Count from the runtime array. The assertion now reads the declared IReadOnlyList.Count directly. Final adversarial audit: zero findings. |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
1 issue from previous review remains unresolved.
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit ba29b17. Configure here.
|
Final review-correction head Cursor (@cursor) review Copilot review Eli Pinkerton (@wallstop) Human final review requested for this exact head. |
|
Correction: the exact final review-correction head is Cursor (@cursor) review Copilot review Eli Pinkerton (@wallstop) Human final review requested for this exact head. |

Summary
Root cause
The Flow Graph presented topology as dense rows and analytics, so it did not render the visual graph its name promised. The revised primary surface is an actual graph: all filtered messages occupy the left column, receivers occupy the right column, and every route is drawn between them. Parallel registration kinds receive separate geometry and selectable markers rather than painting over one another.
The sample had a separate reload-disabled lifecycle gap: the bus could reset while a persisted token still reported
Enabled, so trusting that flag left receivers detached. Startup now deliberately replaces cached registration state and activation remains idempotent.Validation
GameObjectandComponentcontexts; the extended handler-continuation assertion is covered by the PR Runtime matrix+Nsummariesnpm run validate:all, all pre-commit hooks, CSharpier, Prettier, markdownlint, spelling, andgit diff --check: passedCloses #345
Supports #346 without closing its broader sample-demo scope.
Note
Medium Risk
Large editor UI refactor plus a small runtime messaging path change; sample lifecycle is sample-scoped; core bus behavior for valid targets is unchanged.
Overview
The Flow Graph window now leads with a live route canvas: message nodes on the left, receiver nodes on the right, colored curved edges with arrowheads, pan/zoom, auto-framing, and selectable nodes/connections. Dense route maps, trace lanes, topology lists, and overflow routes move into a collapsed Analysis and Raw Data section; empty states explain how to restore live routes when nothing is captured.
Capture and UI semantics improve alongside the canvas: global accept-all registrations appear as
ANY MESSAGEobservers; destroyed Unity contexts fall back to stable instance IDs instead of failing capture; edges include context and registration-exact recent emission sites; selection opens responsive route/activity/emission/trace cards with technical diagnostics collapsed by default. Export schema bumps to v6 with message kinds, contexts, and emission sites.Runtime: reflexive dispatch to a destroyed
GameObject/Componentskips hierarchy delivery instead of throwingMissingReferenceException; normal targeted handlers still run.Diagnostics Tooling Exerciser: runner and receivers rebuild tokens and restart deterministic emissions on each play activation via
RuntimeInitializeOnLoadand idempotentOnEnable, fixing lost registrations when Enter Play Mode disables domain/scene reload.Reviewed by Cursor Bugbot for commit 61e07e1. Bugbot is set up for automated code reviews on this repo. Configure here.