Repository navigation
Add DAG progress visualization with glyph system and terminal renderer - #25
Merged
Merged
Conversation
Three-layer architecture for replacing verbose shell log output with a live DAG visualization showing "power flow" through nodes: - Layer 1: ProgressObserver trait (hooks into execute_flat loop) - Layer 2: DagProgress state machine (renderer-agnostic model) - Layer 3: Terminal renderer (ANSI-based, no heavy TUI deps) Includes state transition design for SimCity-style edge flow animation, layout algorithm sketch, and phased implementation plan. https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
…ndering Major revisions to the progress display design: - Add Layer 1: Glyph system in core/ir — DAG-modeled visual vocabulary shared across the entire codebase (GlyphId, Glyph, GlyphSet, Tier, SemanticColor). Follows TypeId/TypeRegistry pattern. Three encoding tiers: Emoji (default), Unicode, ASCII. - Replace TUI framework approach with carriage-return + ANSI cursor-up rendering. Zero dependencies, rewrites display in-place between node executions. Falls back to progressive output when piped. - Add visual mockups for all three tiers (emoji, unicode, ascii) showing the SimCity power-flow effect during execution. - Expand architecture from 3 layers to 4: Glyph System → ProgressObserver → DagProgress → Renderers https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Three major additions to the progress display design: 1. Rename glyph → symbols throughout. Module becomes core/ir/src/symbols.rs with SymbolId, Symbol, SymbolSet, SymbolOp. 2. Compositional SubDag model for symbols — follows the same pattern as build_html_subdag() in the language module: - Encoding groups (emoji/unicode/ascii) as SubDags with fallback edges - Individual symbols as SubDags: config + encoding atoms + resolve - Composite symbols via SubDag composition (boundary + state) - Animation sequences as SubDags with cycle edges - SymbolOp enum paralleling LanguageOp 3. Dynamic ASCII art render mode — cellular automaton effects: - Edge flow wavefront propagation (═══ advancing along path) - Node state morph sequences (○ → ◔ → ◑ → ◐ per tier) - Ambient 1D cellular automaton (Rule 110) on idle edges - Graceful degradation when execution outpaces animation 4. Integration with existing rendering infrastructure: - Renderable trait overlap (shared vocabulary, not replacement) - Language module SubDag pattern reuse - CI provider integration via CiProgressObserver - dag-viz extension for web renderer - SemanticColor → ANSI/CSS/Mermaid/CI annotation mapping table https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
…mplify - Delete dag-viz (failed experiment): remove binary, Cargo.toml entry, and generated HTML - Rewrite design doc from 1300→441 lines with appendices for examples - Add game-engine style frame loop (FrameLoop trait, FramePolicy enum) with Latest/Sequential/Adaptive scheduling policies - Consolidate types: reuse Edge directly, build from detect_boundaries(), extract print_log_entry() logic for OutputSummary - Remove all dag-viz references; web renderer section deferred https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
- Diamond/parallel branch layout: compute_levels() from topo order, side-by-side rendering with ConnectorTee fan-out/fan-in - Unified Animation struct for ALL animation types (spinners, wavefronts, node morphs, cellular automaton) — same frame-cycling primitive with AnimationMode variants (Cycle, Once, Propagate) - Diamond mockups in Appendix B (2-branch CI, 3-branch wide pipeline) https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
New Layer 4 between DagProgress and Renderers: - Viewport: bounded rendering region (width × height × unit). Terminal queries size + handles SIGWINCH, CI uses unbounded height, web uses container dimensions. - DagLayout: spatial mapping from DAG topology → (row, col) positions. Derived from Dag<T> + Viewport constraints. Recomputed on resize. - OverflowStrategy: Collapse (hide completed, show running/failed), Truncate (level cutoff + footer), Scroll (focus on active node). - Concrete scenarios for too-many-parallel-nodes, deep pipelines, terminal resize, and CI/pipe output. - Diamond layout is now properly part of DagLayout (level computation), not embedded in the renderer section. Architecture is now 5 layers: Symbol → Observer → Progress → Layout → Render https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Replace vague "implementation phases" with detailed per-phase plan showing: - Exact files to create/modify with code sketches - How execute_flat() gets wired (additive signature change) - How testgen generates ~48 tests across 6 DAGs for free: event sequence, state transitions, edge flow, layout bounds, diamond parallel levels, rendered frame snapshots - What existing infrastructure maps directly: SimConfig timeline → replay tests, MockSpec + DryRun → deterministic snapshots, execute_flat() CI hooks → ProgressObserver shape - CLI integration path (bootstrap first, then CI binary) https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Full implementation of the DAG progress visualization system: - Symbol system (core/ir/src/symbols.rs): Tier/SemanticColor/SymbolId/SymbolSet with 34 symbols across Emoji/Unicode/ASCII tiers, SymbolOp SubDag model, build_symbol_subdag/build_spinner_subdag, STANDARD static set - ProgressObserver + DagProgress (core/exec/src/progress.rs): Observer trait formalizing CiContext pattern, DagSnapshot, OutputSummary with FieldKind semantic categorization, NodeState/EdgeState/DagPhase state machine with power-flow edge transitions, RecordingObserver for testing - execute_flat() wiring (core/exec/src/execute.rs): ProgressObserver parameter threaded through execution loop, on_dag_start/on_node_start/on_node_complete/ on_node_failed/on_node_skipped/on_node_intercepted/on_dag_complete callbacks, execute_with_progress/execute_with_progress_and_mode/execute_with_all APIs - Viewport + DagLayout (core/ir/src/layout.rs): Viewport (terminal/CI/web), compute_levels from topo order, compute_layout with node/edge positioning, OverflowStrategy (Collapse/Truncate/Scroll), diamond/parallel detection - Frame loop + terminal renderer (core/exec/src/render.rs): FrameLoop trait, Animation with Cycle/Once/Propagate modes, TerminalRenderer<W: Write> with Standard/Dynamic/Compact render modes, ANSI color support, cursor-up for TTY live update - Bootstrap CLI integration (gunbc-dag/src/bin/bootstrap.rs): --progress/ --no-progress flags, auto-detect TTY, viewport from terminal size, tier detection, progress display on execution completion 35 new tests across all modules, 708 total tests passing. https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Replace the vertical top-to-bottom DAG visualization with horizontal
left-to-right flow that reads naturally through time:
✅ scan → 🔮 exec → ❌ parse ─┬─ ⏳ gitignore → ⏳ prep → ⏳ write
└─ ⏳ makefile → ⏳ prep → ⏳ write
Key changes:
- Track assignment: nodes mapped to rows, levels to columns
- Fan-out connectors: ─┬─/├─/└─ with vertical pass-through │
- Label truncation: strips verb prefixes, truncates with ~ to fit viewport
- Tier-aware connectors: Unicode box-drawing for Unicode/Emoji, ASCII fallbacks
- Removed unused vertical layout methods (render_level_nodes, render_level_edges)
- Removed unused edge_symbol_id, node_color, EdgeState/EdgeOrientation imports
- Added 3 new tests: horizontal linear, fan-out tracks, label truncation
https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
- Wrap node labels in brackets: [sym label] instead of bare sym label - Color horizontal connectors based on edge state (Idle=dim, Flowing=cyan, Done=green, Dead=dim) using ANSI escape codes - Random animal emoji for successful DAG completion (Emoji tier), polite red X (❌) for failures instead of explosion (💥) - 16 animal emojis selected pseudo-randomly from elapsed time https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
… types
The dry-run mocks were referencing non-existent nodes ("write_makefile",
"write_gitignore") and missing the critical "execute_scan_workspace" mock.
The parse_scan_result node requires a Value::Response(TransportResponse)
but was receiving Value::Str from the default mock, causing
"missing or invalid 'response' input" error.
Fixed by matching the mock setup in graph_mock.rs:
- execute_scan_workspace: returns ShellResponse with mock dir listing
- execute_makefile_transport: proper response + path + content mocks
- execute_gitignore_transport: proper response + path + content mocks
https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
- Replace truncated labels with single letters (A, B, C...) in DAG boxes for compact, uniform display - Add legend section below DAG mapping letters to full node names - Use Unicode tier symbols for nodes (✓ not ✅) for cleaner appearance - Remove max_label_width and gate short_label behind #[cfg(test)] - Update tests for new letter-box format and legend assertions https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
- Remove symbols from inside DAG boxes: [A] instead of [✓ A] - Color entire box by node state: bold green (done), bold red (failed), bold white (running), dim (pending) - Legend uses ✔/✘/◐/○ symbols with colored text for full node names - Remove unused node_symbol_id, colored_node_symbol, symbol_display_width - Cleaner, less cluttered DAG visualization https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Animation: After instant execution, replay state transitions visually over ~1 second. Each node gets a start frame (Running) and complete frame, with ~55ms delay between frames (9 nodes = 18 frames ≈ 1s). Flowing edge colors (cyan) are now visible during the replay as edges transition Idle → Flowing → Done between frames. Legend: Only show currently running and failed nodes (up to 3) instead of listing every node. During animation, the legend updates to show which node is currently executing. On completion, legend disappears since the footer summary is sufficient. https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
- Create build module: ops.rs (pure prepare/parse/summary), graph.rs (build → test + clippy parallel → summary DAG), binary entrypoint - Fix TTY rendering artifact: clear lines with \x1b[2K before overwrite, clear leftover lines when frame shrinks - Animate parallel branches by level instead of serial topo order - Pipeline: cargo build → (cargo test + cargo clippy) → summary - Dry-run support with proper TransportResponse mocks - 164 tests passing across gunbc-dag, 44 across gunbc-exec https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
- Deduplicate child_tracks in horizontal_connector to fix I→J merge: multi-port edges to the same child (e.g. clippy_success + clippy_stderr to summary) produced duplicate track entries, triggering the fan-out code path (─┬─) instead of merge-up (─┘) - Add merge connector types: ─┴─ (merge-top), ─┘ (merge-up), └─ (merge-branch) for proper diamond DAG rendering where parallel branches rejoin - Build parents_of adjacency alongside children_of for merge detection - Fix legend jitter by reserving a fixed 3-line area: pad with blank lines when fewer than 3 nodes are running/failed, keeping frame height constant across animation frames https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Legend now shows the 3 most relevant tasks instead of going empty: - Running/failed tasks have priority (shown first) - Remaining slots filled with most recently completed tasks (reverse topo) - Each entry shows elapsed time: ◐ B: execute_build [142ms] Animation timing: explicitly document that execution runs at full speed and the visual replay is purely cosmetic with a 1s minimum floor. https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Add gunbc-build to the makegen registry as "build-all" to avoid conflicting with the core "build" Make target (cargo build --all-targets). The tool runs the full build+test+clippy pipeline with DAG progress display. - Register in makegen registry (like ci) with custom short_name "build-all" while keeping the binary as gunbc-build via CargoInvocation::composed - Add note in codegen registry explaining why build is not registered there - Regenerate Makefile: adds build-all and build-all-dry targets - Update generated test and mock spec for tool_count 7→8 New targets: make build-all → cargo run -p gunbc-dag --bin gunbc-build make build-all-dry → cargo run -p gunbc-dag --bin gunbc-build -- --dry-run https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Replace duplicated terminal detection code in build.rs and bootstrap.rs with a centralized TerminalProfile model in core/exec/src/terminal.rs. The profile detects shell type, TTY status, CI environment, Unicode tier, and viewport dimensions to automatically decide whether to show animated progress. Removes --progress/--no-progress CLI flags — the system now owns this decision based on environment detection. https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
The renderer now enforces a clear two-tier model: either we are confident the terminal supports progress display (Unicode+, TTY, not CI) and render with full capabilities, or we output plain text. No middle ground. Changes: - Remove all Tier::Ascii match arms from connector methods (dead code since Ascii tier gates out at supports_progress check) - Add debug_assert in TerminalRenderer::new that tier != Ascii - Move is_tty into constructor parameter (was a set_tty() hack) - Remove unused FramePolicy enum - Simplify merge_branch_str (had duplicate identical branches) - Restrict TerminalProfile::plain() to #[cfg(test)] - Clean up "fallback" language in docs — base is serial, not degraded https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
…tity Replace heuristic-based detection with proper system calls and model all terminal properties explicitly: Terminal detection: - TTY: std::io::IsTerminal (real isatty(2)) instead of $TERM env var - Viewport: ioctl(TIOCGWINSZ) on Unix for actual terminal size, falls back to $COLUMNS/$LINES then 80x24 - TERM=dumb: detected and blocks both progress and color - NO_COLOR: new supports_color field respects https://no-color.org - All ANSI color output gated through color()/reset()/bold() helpers that respect the color_enabled flag Display width: - New display_width()/char_width() functions with proper Unicode width rules (CJK=2, combining=0, ASCII=1) - Replaces byte-length alignment (letter.len()) in node box rendering - pad_connector() also uses display_width for correct column math Edge identity: - Document that (NodeId, NodeId) keying is intentional: multiple port-level edges between the same node pair collapse into one visual edge for progress display - Use entry().or_insert() instead of .collect() to make the dedup explicit rather than relying on HashMap last-write-wins Animation: - tick() uses while loop to catch up on long dt values instead of advancing only one frame per call https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
…ess logic Create core/exec/src/display.rs with a single generic execute_and_display<T>() function that encapsulates the progress-or-classic branching. All CLI tools (handwritten and code-generated) now call this instead of duplicating the progress display logic. - bootstrap.rs: ~180 lines removed (run_classic, run_with_progress, print_value) - build.rs: ~190 lines removed (same) - codegen template: uses execute_and_display + TerminalProfile::detect() - All generated tools (gist, deps, buck2, review, etc.) get progress display https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
Three correctness fixes from review: 1. Progress-mode exit semantics: success_port (e.g. overall_success=false) was accepted but never checked in run_with_progress. Now inspects the execution log with the same policy as the classic path. 2. UTF-8 safe truncation: &s[..60] can panic mid-codepoint on multi-byte strings. Both display.rs and progress.rs now use char_indices() to find safe cut points. 3. Skip ordering: execute_flat emitted on_node_start before checking guards, so skipped nodes briefly appeared as "running" to observers. Now evaluates should_skip_node first, and only emits on_node_start for nodes that will actually execute. https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i
briansrls
force-pushed
the
claude/shell-progress-indicator-2Q5tR
branch
from
February 4, 2026 20:17
c86441a to
45069df
Compare
This was referenced May 7, 2026
This was referenced May 9, 2026
briansrls
added a commit
that referenced
this pull request
May 9, 2026
…om cluster-analysis audit + today's merges (#2399) Addresses PR #2358 §8 meta-finding (closure-claims-vs-HEAD drift) via explicit Status refresh on §1.8 rows. Cluster-analysis audit on main (PR #2300 / docs/audit/r3-cluster-analysis-2026-05-09.md §1) identified 9 gates likely-promotable from DECLARED → CONSUMER_LANDED + named specific PRs as evidence. Today's session adds 1 more (#92 via PR #2340). Per cluster-analysis audit §1 closing note: "PM surface, not authoring: ledger refresh is Mgr-owned per docs/r3-program-plan.md §10 cadence. This list is input to next refresh cycle." PM (deep-wolf-155) interpretation: Mgr-cadence-discipline holds, but the cluster-analysis was published 2026-05-09T03:25Z + at least 9 gates are mechanically derivable from PR-history. Authoring this sweep as PM-tier signal-into-next-refresh; lane Mgrs review their lane's rows in this PR before merge. **Updates** (10 candidates): | Gate | From | To | Evidence | |---|---|---|---| | #25 omni_openapi_backend_emission_demo | DECLARED | CONSUMER_LANDED | PR #2251 (Shape B OpenAPI) | | #29 anthropic_wire_typed_serde_alignment | DECLARED | CONSUMER_LANDED | PR #2208 + #2164 | | #30 anthropic_unit_enum_role_serialization_correct | DECLARED | CONSUMER_LANDED | PR #2208 | | #53 workflow_substrate_carriers_landed | DECLARED | CONSUMER_LANDED (partial) | PR #2160 WorkflowSecret + CronExpression β-ratified | | #54 timing_lens_carrier_landed | DECLARED | CONSUMER_LANDED | PR #2360 (post-T-LBP COMPLETE) | | #76 e_p_per_call_descent_evidence_full_coverage | DECLARED | CONSUMER_LANDED | PR #2147 carrier + #2190 consumer | | #77 e_p_call_pattern_lookup_authoritative | DECLARED | DECLARED + verify-pending note | T-E-P P1 slices 1-7; Mgr review needed | | #78 e_p_sub_value_relation_per_call_landed | DECLARED | CONSUMER_LANDED | T-E-P P1 slices 1-7 | | #92 complexity_violation_compile_error_demonstrated | RECEIPT (ambiguous) | CONSUMER_LANDED + PASSING | PR #2340 | | #96 value_body_substrate_mirror_isomorphism_executable | DECLARED | CONSUMER_LANDED | PR #2288 (CI-visible integration) | Each cite includes PR# + brief evidence summary. #77 retained as DECLARED with verify-pending note (cluster-analysis audit said "verify"; Mgr review recommended before promotion). **Verification**: R4-carve dissolution discipline ratchet still passes (32 citations, all properly annotated). No new drift introduced. **Mgr review path**: Substrate Mgr (warm-wolf-698) reviews #29/#30/#53/ #54/#76/#77/#78/#96 lane rows. Verification Mgr (wise-bear-525) reviews #92/#96 lane rows. Grounding Mgr (sunny-koi-893) reviews #25 lane row. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 9, 2026
briansrls
added a commit
that referenced
this pull request
May 9, 2026
…nding Mgr dispatched backend half) Discovered after Grounding Mgr (sunny-koi-893) dispatched sleek-eagle-557 under #2405 with PR #2410 "[codex] add openapi backend emission demo" — PR body says "Adds the backend half of the R3 omni_openapi_backend_emission_demo receipt." So my PR #2399 claim "CONSUMER_LANDED via PR #2251" was wrong: gate #25 needs BOTH halves (OpenAPI projection + backend emission); PR #2251 only landed the OpenAPI half. Cluster-analysis audit §1 at sha 8729178 named only PR #2251 as evidence for gate #25 promotion — that was incomplete; backend emission half wasn't tracked. Per PR #2410 body, the integration receipt "compiles the generated backend with rustc, exercises declared routes including path parameters, and checks OpenAPI routes against the emitted backend route listing" — the receipt requires the backend half. Fix: row #25 corrected to DECLARED — partial. OpenAPI projection half cited as landed via PR #2251; backend emission half cited as in-flight via sleek-eagle-557 PR #2410. Gate fires CONSUMER_LANDED when both halves land + integration receipt passes. Validates the meta-finding from PR #2358 §8 (closure-claims-vs-HEAD drift): even careful PR-history-derived claims can drift if the evidence is incomplete relative to the gate's actual Pass condition. PM should grep-verify the gate's Pass-condition body against the candidate evidence before authoring promotion claims. The other 9 candidates in PR #2399 unchanged — none have similar "backend half pending" pattern visible at audit time. Lane Mgrs review their lane's rows during PR review to catch any other premature claims. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 10, 2026
briansrls
added a commit
that referenced
this pull request
May 10, 2026
briansrls
added a commit
that referenced
this pull request
May 10, 2026
…2583) * docs(r3): §3 lane-status weekly compile (2026-05-11 Monday cadence) PM-derived compile per §9.1 weekly cadence. Updates Status / Current dispatch / Blocker / ETA-to-close columns based on observable PR merge data + worker session activity + silent-ram-834 status report at gunbc#828 c#4414611117. Lanes with substantial movement this cycle: - T-LensProducer-Retirement: gate #5 lens_apply.rs in flight (valiant-otter-715) - T-Numeric-Construction: u128 mirror sync MERGED #2526; gates #17 + #20 active - T-Free-Consequences-Demonstration: 6 gates merged (#10/#33/#37/#40/#43/#72) - T-Bridge-Retirement: 2/5 sub-bridges retired (PR #2459 + #2449) - T-Lens-Behavioral-Parity: #73 + #78 active under Substrate Mgr - T-Debt-Paydown (standing): Mgr re-spawn (gentle-newt-665 → silent-ram-834); Phase 3 fleet 8/10 closed/absorbed; orphan PR #2503 closed - T-Omni-Shape-B: gate #25 salvage path under PB Mgr; #26/#27 mis-parented Lanes with no observable change this cycle: - T-V-L4, T-V-L5-Corpus, T-FixedPoint, T-Anthropic-Wire, T-V2-Retirement, T-Tests-As-Data-Completeness — substrate work continues but no clear gate-level deltas surfaced Mgr canvas refreshes remain formal authority per §3 framing; lane-owning Mgrs may correct/override any PM-derived cell. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): address codex BLOCKING findings on PR #2583 §3 compile 3 valid findings from codex review: 1. T-Lens-Behavioral-Parity status was "RED→YELLOW (PM-derived; Mgr ratification welcome)" — created parallel-representation hedge in a single-authority cell (INVARIANTS P2 violation; per feedback_parallel_representation_debt). Resolved: commit fully to YELLOW as the PM-compiled value (the §3 disclaimer note covers Mgr override authority). The hedge in the cell was worst-of-both-worlds. 2. PM compile note said T-Tests-As-Data-Completeness had "no observable change this cycle" but the table cell records PR #2287 (Verification V1 TC1 first slice) MERGED 2026-05-10. Self-contradicting. Resolved: moved T-Tests-As-Data-Completeness to "lanes with substantial movement" list. Also added T-Anthropic-Wire (PR #2506), T-V2-Retirement (PR #2334), T-V-L7 (gate #10 / PR #2394), T-Tier3-Dissolution (clever-bear-180 active), T-Lens-Application-Surface (crisp-raven-202 active) to the movement list — all had cell-level deltas in the table that the compile note had missed. 3. PR #2394 merge date inconsistency: T-V-L7 cell said "2026-05-09", T-Free-Consequences cell said "2026-05-10". Verified merge timestamp 2026-05-10T00:26:42Z UTC; corrected T-V-L7 cell to 2026-05-10. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): fix T-LensProducer-Retirement blocker (codex BLOCKING #2 on PR #2583) Pre-existing error in §3 cell that prior PM compile preserved instead of correcting. The original cell named "T-FixedPoint + R2-Evaluator" as T-LensProducer-Retirement's blocker, but per the canonical sequence: - r3-structure.md:357: critical path is `R2-Evaluator → T-LensProducer- Retirement → T-FixedPoint → T-V2-Retirement` - r3-program-plan.md:360-363: "T-LensProducer-Retirement comes BEFORE T-FixedPoint, not after; T-FixedPoint depends on SG-0 zero from T-LensProducer" T-LensProducer-Retirement coming AFTER T-FixedPoint creates a circular dependency in the weekly snapshot. Corrected to use the canonical R2-close-dependency from r3-structure.md §"Lane structure": R2-Evaluator (interpreter-as-data; LANDED) + PB-1 generated bin-shim pattern + R2-T-Ground-Lifetime-Analyzer a/b/c basic cases. Also added warm-crab-600's gate #7 work-in-flight signal (regen_lens.rs retirement; the 3rd sub-gate of T-LensProducer-Retirement) per latest subtree status digest. All 3 sub-gates now in flight: #5 valiant-otter- 715, #6 same-cascade, #7 warm-crab-600. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): address codex BLOCKING #2/#3/#4 — single-authority reconciliation per §1.8 Three valid cell-level findings from codex schedule review on sha 1d95e61. All caught the same root issue: §3 cells didn't reconcile against §1.8 ledger + r3-structure.md canonical authority before landing. #2 — T-Numeric-Construction blocker (line 424): Cell said "Float migration + Real/base-carrier convention HELD on proud-raven-495 G2 Phase 2 Substrate S8 ApproximateField<F>" but §1.8 #18 + #24 explicitly say "CONSUMER_LANDED + PASSING for Grounding G2 primitive rows (2026-05-10, PR #2570 squash b96a51a)" — the work landed. Updated cell to: PR #2570 closes the prior HELD; remaining blocker is broader Real<N> emission demonstrations under S9/Shape-A follow-ons per §1.8 #18 close-criterion. #3 — T-Bridge-Retirement count (line 427): Cell said 3 remaining sub-bridges including mark_bootstrap_secret_ nominal_opacity, but §1.8 #32 PASSING + §2.3 explicitly says that bridge is closed. Corrected count: 3/5 sub-bridges retired (gate #32 prior-cycle Secret nominal-opacity + gate #33 this cycle canonical lens + include_str this cycle), 2 remaining (SourceSpan.file participation + patch_lower_helpers residual). #4 — T-Free-Consequences-Demonstration over-attribution (line 430): Cell credited gates #10/#33/#37/#40/#72 to T-Free, but §1.8 assigns those to other lanes: - #10 → T-V-L4-L7-Direct - #33 → T-Bridge-Retirement - #37 + #40 → T-CostLens-Composition - #72 → T-E-P-Producer-Broadening T-Free's canonical demo gate range is #43-#52. Only #43 (auto_parallelism_independent_binds_emit_parallel) MERGED this cycle for T-Free. Updated cell + compile-note to credit each landing only to its canonical-lane row. Compile-note also reconciled per the same §1.8 single-authority pass: T-CostLens-Composition + T-E-P-Producer-Broadening now credited their own gates instead of attributing them to T-Free. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): address codex BLOCKING #5/#6 — PR-merge evidence ≠ gate-PASSING Two valid findings from codex schedule review on sha f6a3a13 (review id 4259176210): #5 — T-Bridge-Retirement count conflated PR-merge with gate-PASSING: Cell said "3/5 retired" but §1.8 truth: #32 PASSING, #33 DECLARED, #34 DECLARED, #35 PASSING. PR #2449 + PR #2459 ARE merged but the gates haven't been promoted from DECLARED → PASSING (separate status drift sweep step, e.g., per PR #2399 cadence). Reframed cell to distinguish PR-merge evidence from canonical §1.8 status: 2/5 gate-PASSING (#32 + #35), 2/5 PR-merged-pending-promotion (#33 + #34), plus SourceSpan.file participation (Substrate-owned hand-Rust audit sites; not in numbered §1.8) + residual semantic patching (`bridge_exact_string_semantic_patching_residual` Open per #35 close-criterion). #6 — T-Free-Consequences over-claim on PR-merge: Cell said "gate #43 MERGED" but §1.8 #43 still DECLARED (PR #2495 is evidence toward promotion, not the promotion event). Same fix: reframe as PR-merge evidence accruing toward §1.8 gate promotion; canonical status authoritative. Compile-note also reframed: explicitly distinguishes PR-merge evidence from §1.8 gate-PASSING promotion. PR-merge events are listed as evidence accruing toward promotion; canonical gate status varies per §1.8. Common root: future Monday compiles must mechanically reconcile each "landed/retired" claim against §1.8 status, NOT PR-merge events. Discipline recorded in feedback_pm_compile_audits_pre_existing_errors (updated to include PR-merge-vs-gate-promotion distinction). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
May 10, 2026
briansrls
added a commit
that referenced
this pull request
May 10, 2026
* Add omni OpenAPI backend emission demo * Tighten omni backend path parameter matching * Document omni backend bridge dissolution * Preserve omni backend path boundaries * WIP: R3 gate #25: omni openapi backend emission demo * Tighten omni bridge P5 receipt * WIP: R3 gate #25: omni openapi backend emission demo
This was referenced May 10, 2026
briansrls
added a commit
that referenced
this pull request
May 10, 2026
…sync (#2656) Sync §1.8 rows for Grounding-lane work that merged 2026-05-10: - #25 omni_openapi_backend_emission_demo: CONSUMER_LANDED → CONSUMER_LANDED + PASSING; cite PR #2587 (77678c0) backend emission demo extension; orphan PR #2410 closed as superseded - #26 omni_documentation_drift_lock_demo: DECLARED → CONSUMER_LANDED + PASSING; cite PR #2596 - #68 anthropic_wire_demonstration: DECLARED → PASSING; cite PR #2506 Per Director ratification on §1.8 #68 status-drift coordination (gunbc#828 c#4415868260) and post-merge ledger-receipt sync as Mgr-tier closing step. Refs: - gunbc#828 issuecomment-4415868260 (Director audit) - gunbc#2080 (Debt-Paydown Mgr ledger-sync check) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 tasks done
briansrls
added a commit
that referenced
this pull request
May 13, 2026
…tor msg_428b032e pre-stage disposition) Per Director msg_428b032e pre-stage disposition on operator directive 2026-05-13 (full-stack-from-one-.dag program + path (a)+(b) ratified): stub adds §3.4 as pointer-only forward-pointer; substantive Q-dispositions land post-canvas-ratification. Structural cash cited (Director-verified 2026-05-13 §1.8 audit): - Gates #25/#26/#27/#28 all CONSUMER_LANDED + PASSING - Path (a) Director-direct demo work-item adhoc-e9bb6ef1-b4d - Path (b) Substrate-Mgr R4 canvas at docs/design-r4-full-stack-omni-emission-canvas.md Stub framing per Director guidance: "no Q-claims; current entry is forward-pointer for thesis-coherence visibility per operator directive 2026-05-13". Probes are deferred placeholders (clearly labeled); substantive answers land when path (a) demo PR + path (b) canvas PR surface. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 13, 2026
Merged
briansrls
added a commit
that referenced
this pull request
May 13, 2026
…rward-pointer per operator directive 2026-05-13 Operator question: "are we bringing mixed/omni emission into R3 now - if so, what would the interrogation be? stringing together programs across a network - how would that be modeled?" PM scoping read + operator approval (option a + c): - Existing R3 omni-emission: single-program multi-target (Rust + Python + Go + OpenAPI + Markdown + SQL DDL from one .dag per gate #28) - NOT in R3: multi-program coordination across network boundaries from one .dag source. This is R4 territory. Added §3.8 as forward-pointer STUB (parallel to §3.4): - Status STUB; substantive Q-dispositions land via separate R4 canvas - Distinct from path (b) full-stack canvas (PR #2847 = single-program-multi- target; §3.8 = multi-program-coordination) - Cites existing R3 substrate as structural cash: gate #25 OpenAPI, #28 omni- layers-share-one-node-tree, #29 Anthropic wire-serde - 7 deferred probe areas: - Multi-program shape (lens dimension vs substrate carrier) - Wire derivation extension (gate #28 cross-deployment) - Coordination semantics (6th L1 behavior would trigger C1 stop-signal; OR Bind+Effect composition sufficient) - Failure-at-boundary modeling - Idempotency at endpoint (composes with idempotency lens) - Cross-endpoint dimension propagation (extends §2.5.F affected-set) - End-to-end 2-endpoint demonstration falsification probe Open R4 canvas questions enumerated for downstream authoring: - 6th behavior (Coordinate) vs Bind+Effect composition (C1 stop-signal) - Endpoint addressing: substrate carrier vs lens dimension - Failure-recovery composition with fail-closed C-8 discipline PM read: multi-program coordination is the natural completion of omni-emission (N projections × M programs from gate #28's N projections × 1 program). Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
May 13, 2026
…_service.dag (TODO Item/List/User + mutations) → exercise the existing 4 emitters (Rust backend, SQL DDL, OpenAPI yaml, Markdown docs per src/v3/compiler/src/omni_shape_b_openapi.rs gates #25-#28 CONSUMER_LANDED+PASSING) → emit 4 a (#2848) * WIP: Path (a) full-stack omni-emission visceral demo: write dsl/demos/todo_se * chore: apply cargo fmt (todo_service omni test) Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Path (a) full-stack omni-emission visceral demo: write dsl/demos/todo_se * test(omni): use counted compile helper for todo_service demo (parity with gate #28) Co-authored-by: Cursor <cursoragent@cursor.com> * demo(todo_service): add example data rows so domain types are inhabited Co-authored-by: Cursor <cursoragent@cursor.com> * test(omni): rustc+probe todo_service backend against canonical routes Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Path (a) full-stack omni-emission visceral demo: write dsl/demos/todo_se --------- Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls
added a commit
that referenced
this pull request
May 13, 2026
…5.4 + 9 thesis gap-fills (#2849) * docs(r3): §3.4 — full-stack-from-one-.dag forward-pointer stub (Director msg_428b032e pre-stage disposition) Per Director msg_428b032e pre-stage disposition on operator directive 2026-05-13 (full-stack-from-one-.dag program + path (a)+(b) ratified): stub adds §3.4 as pointer-only forward-pointer; substantive Q-dispositions land post-canvas-ratification. Structural cash cited (Director-verified 2026-05-13 §1.8 audit): - Gates #25/#26/#27/#28 all CONSUMER_LANDED + PASSING - Path (a) Director-direct demo work-item adhoc-e9bb6ef1-b4d - Path (b) Substrate-Mgr R4 canvas at docs/design-r4-full-stack-omni-emission-canvas.md Stub framing per Director guidance: "no Q-claims; current entry is forward-pointer for thesis-coherence visibility per operator directive 2026-05-13". Probes are deferred placeholders (clearly labeled); substantive answers land when path (a) demo PR + path (b) canvas PR surface. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): §2.5.F + §5.4 — affected-set lens + compiler-as-data residual interrogation per operator directive 2026-05-13 Two new interrogation sections per operator follow-up 2026-05-13: §2.5.F Cross-module subtle-dependency detection via affected-set lens - Frames affected-set lens as the structural mechanism catching diff-driven cross-module subtle deps (complement to static lens reads in §2.5.E) - Cites gate #103 ci_uses_affected_set_selection DECLARED + Slice 7 T-WAD - Cites docs/design-affected-set-lens.md substrate-shape ratification - 5 probe groups: CI integration site + SHA-diff input + dimension-only catch example + cardinality-vs-transitive-downstream + 4 falsification probes - PM read: affected-set is THE structural cash for cross-module subtle deps; static + diff lens reads compose to give omni-correctness story §5.4 Compiler-as-data residual — operator-explicit probe set - Strong-form probes for "compiler is pure data yet?" operator framing - Cites operator 2026-05-09 verbatim ("0 hand-Rust including tests AND stage0") - Cites SELF_HOSTING.md §1 bootstrap-seed framing as weak-reading anchor - 5 sub-areas: stage0 edits / hand-Rust count / non-Rust hand-maintained / pure-data thesis-state / R3-close honest framing - Strong vs weak reading distinction explicit; reconciling is itself an R3-close question - Anti-pattern: silently shipping with weak reading while citing strong Both sections are probes-only (no decided framing); R3 close ratification will land via Director + operator review. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): thesis-coverage sweep — 9 new interrogation sections per operator audit 2026-05-13 Operator coverage audit identified 9 thesis-claim gaps in interrogation doc. This commit fills all 9: §1.6 Tier 1 mechanics (THESIS.md:168-173) - Coercion = emission / Ownership / Grounding completeness probes - Grounding-completeness is highest-load-bearing (structural homomorphism vs name-keyed table; fail-closed on ungrounded) §1.7 Tier 2 runtime safety (THESIS.md:175-176) - Division-by-zero / OOB / force-unwrap / partial-functions probes - Per-class: proven safe or made total — no handwaving §2.6 Substrate-shape specifics (THESIS.md:198-203) - 6 connectives (Atom/Conj/Disj/Arrow/Cardinality/Instantiation) - 5 behaviors (Value/Transform/Branch/Loop/Bind) - C1-class stop-signal protocol probes §2.7 Modeling discipline (THESIS.md:415-419 + :359) - Every type has a structural consumer - Typed enums not String/Bool proxies at boundaries - No fabrication sentinels (__BUG_* / __EMIT_BUG_*) - No duplicate record shapes (one type per concept) - Rust-tests are a language smell (SG-0 EXPECTED_HAND_AUTHORED_TEST probe) §3.5 L6 every-form-every-target (THESIS.md:181) - Distinct from L5 cross-target consistency - Density of (structural-form × target) emit-matrix; per-target gaps §3.6 L7 algebraic-laws (THESIS.md:182) - Operations obey declared algebraic laws - Per-algebra-carrier law coverage probes; cross-target consistency §4.3 Concept unifications (THESIS.md:184-188) - Coercion cost = complexity (parallel-authority check) - Coercion = emission (refs §1.6) - Target lang spec = transport spec = interpreter runtime - Idempotency + cancellation + redundancy = algebraic simplification §5.5 Free consequences (THESIS.md:205-210) - Auto-memoization from purity + cost - Incremental cross-run execution (composes with §2.5.F affected-set) - Cross-language optimization from shared cost algebra §6 reorganized as "The user-experience / adoption promises" umbrella: - §6.1 Show the correct code (existing content) - §6.2 Audience duality / opt-in depth (THESIS.md:307-321) - Core-language approachability + opt-in advanced surface - Per-audience demo fixtures (fixture_compiler_nerd_canonical + fixture_integration_canonical) - §6.3 Adoption model — economics, not enforcement (THESIS.md:323-346) - Every program gets guarantees (no opt-out syntax) - Leaving the stack (in-language namespacing vs outside-language) - LOC overhead vs alternatives + percentage-all-green metric Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): §3.7 verification-machinery interrogation (testgen / integration / mocks / dry-run) per operator audit 2026-05-13 Operator follow-up after thesis-coverage sweep: testgen interrogation surface. Added §3.7 "The verification-machinery promises" with 5 sub-areas: §3.7.a Testgen — structural coverage derived from code (THESIS.md:356-358) - Where testgen lives + .dag vs hand-Rust - Per-type inhabitant + coercion test generation (SELF_HOSTING.md §2 L1.5) - Coverage monotonic with declared structure - Spot-check vs exhaustive (TESTING.md:343 reshape directive) §3.7.b Integration testing (TESTING.md:128 + :118) - compile_to_dag(fixture) standard form - Heavy integration tests as exception - Mock-over-compile anti-pattern probe (TESTING.md:84) - Cross-target coverage (Rust + Python + Go) §3.7.c Mocks / dependency injection by construction (THESIS.md:367) - Effects as explicit parameters; substituting fake parameter IS the mock - No mock-framework / test-double-DSL / monkey-patching - No-flaky-tests probe (CI history audit) - Ambient-capability falsification probe §3.7.d Dry-run / structural execution traces - dag run --dry-run vs IntrospectApplication lens vs implicit-via-purity - Effect-shape preview + cost-preview composition with §1.2 - Affected-set composition (per §2.5.F) - Simulated-inputs vs actual-execution distinction - HTTP-POST falsification probe (does request happen) §3.7.e Verification-machinery composition - Unified question: do the 4 surfaces share one substrate-read? - Falsification: per-bug-class which surface catches; gap-class identification R3-close framing: 4 surfaces should be lens-compositions over same substrate, not parallel pipelines. R3 close demonstrates adding new verification dimension is one lens, not separate pipeline. Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): §2.5.F.1 — affected-set minimality definition + 35-scenario comprehensive examples table per operator audit 2026-05-13 Operator request: "i would think of normal code changes and make the table/questions comprehensive." Added §2.5.F.1 with: 1. Formal minimality definition (`docs/design-affected-set-lens.md:44` cited verbatim): "Strictly smaller than transitive-downstream — but only relative to the structural dimensions whose values actually changed." - Minimal = minimal among soundly-derivable; NOT theoretically-optimal - Soundness + completeness definitions explicit - Fail-closed posture: lens fails OVER-inclusive (safe), never UNDER-inclusive 2. 35-scenario comprehensive examples table spanning: - Format-only / comment-only / identity-only changes (1-4) - Value / algorithm / effect changes (5-9) - Type signature changes — required arg / optional arg / removal (10-12) - Field add / remove / rename / type-change (13-16) - Refactor: extract / inline (17-18) - Add new code / delete unused / delete with consumers (19-22) - Parallelism shape (23) - Test-only / doc-only (24-25) — including test-doesn't-propagate-forward - CI / build / cross-module imports (26-27) - Dependency bump / generated regen (28-29) - Fail-closed: opaque ExecuteCommand / PB-Runtime kernel (30-31) - Compile-time-only / lens additions / algebra-law / substrate-extension (32-35) 3. Falsification-probe pattern per-scenario: - Soundness probe: ∅-expected should produce ∅ - Completeness probe: flagged-consumers should match expected set - Provability-boundary probe: fail-closed scenarios should not UNDER-include 4. Honest framing on theoretical-vs-observable minimum + R3-vs-R4 trajectory. Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): §5.4.d/e tighten — interrogate against committed 0-floor target, not negotiate between readings (codex BLOCKING on PR #2849) Codex finding (review 10874) verbatim: > "§5.4 currently reopens the zero-hand-Rust target instead of interrogating > against it. Tighten that section so the weak/bootstrap-seed framing is > treated only as contrary evidence to explain, not as an alternative > acceptable close criterion." Finding is structurally correct. design-pure-bootstrap-zero.md is unambiguous authority on the committed target: - :41 "Goal: zero hand-authored files in v3's source tree. Better than v2's 1-residual." - :43 ≤5-floor retracted; 0-floor is the live shape - :210 hand-authored-vs-generated boundary: trampolines are 0 if generated; hand-authored bootstrap-seed is NOT acceptable Rewrite §5.4.d: - Title changed to "interrogate against the committed 0-floor target" - Cites design-pure-bootstrap-zero.md:41 + :210 verbatim as authority - SELF_HOSTING.md "bootstrap seed" framing reconciled as describing POST-0-floor functional shape, NOT alternative R3-close criterion - Bootstrap-seed Rust acceptable IFF machine-emitted from .dag (per :210) - Removed "strong vs weak reading" negotiation framing - Probes now interrogate against single committed target: - PB-0 census count at HEAD (target: 0) - Per-survivor named-retirement-schedule - Bootstrap-seed claims verified as machine-emitted, not hand-authored - design-pure-bootstrap-zero.md:191 STOP-condition probe (N=0 resolution outside src/v3/) Rewrite §5.4.e: - Removed "R3 close MAY claim..." alternative-reading framing - Hand-authored survivors with named-retirement-schedule are acknowledged R3 debt against the 0-floor target, NOT acceptable close criterion - Anti-pattern reframed: bootstrap-seed Rust acceptable IFF generated; otherwise 0-floor debt; R3 close framing must cite census + per-survivor disposition (machine-emitted OR named-retirement) Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): §2.5.F.1 — rename Soundness/Completeness → No-spurious-inclusion/No-missed-inclusion (cursor exploratory observation on PR #2849) Cursor review 10892 flagged terminology ambiguity (non-blocking, exploratory): > "the pair labeled 'Soundness' / 'Completeness' is easy to misread against > usual static-analysis vocabulary (where 'sound' often means 'no false > negatives' for may-analysis). The substance matches the fail-closed > over-approximation story in docs/design-affected-set-lens.md (lines 44-92 > in the current tree); renaming for less ambiguity would be polish only, > not a merge blocker." Rename for clarity: - Soundness → No-spurious-inclusion (the "exclusion-correctness" direction) - Completeness → No-missed-inclusion (the "coverage" direction) Plus explicit note: standard static-analysis conventions for sound/complete invert under fail-closed over-approximation, so the lens correctness target is "No-missed-inclusion (strict)" + "No-spurious-inclusion (relative to provability)" — over-inclusion on UNKNOWN delta is intentional and safe. Falsification probe labels updated correspondingly. Audit-document terminology clarity warranted even though non-blocking. Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): §3.8 stub — multi-program / network-coordinated emission forward-pointer per operator directive 2026-05-13 Operator question: "are we bringing mixed/omni emission into R3 now - if so, what would the interrogation be? stringing together programs across a network - how would that be modeled?" PM scoping read + operator approval (option a + c): - Existing R3 omni-emission: single-program multi-target (Rust + Python + Go + OpenAPI + Markdown + SQL DDL from one .dag per gate #28) - NOT in R3: multi-program coordination across network boundaries from one .dag source. This is R4 territory. Added §3.8 as forward-pointer STUB (parallel to §3.4): - Status STUB; substantive Q-dispositions land via separate R4 canvas - Distinct from path (b) full-stack canvas (PR #2847 = single-program-multi- target; §3.8 = multi-program-coordination) - Cites existing R3 substrate as structural cash: gate #25 OpenAPI, #28 omni- layers-share-one-node-tree, #29 Anthropic wire-serde - 7 deferred probe areas: - Multi-program shape (lens dimension vs substrate carrier) - Wire derivation extension (gate #28 cross-deployment) - Coordination semantics (6th L1 behavior would trigger C1 stop-signal; OR Bind+Effect composition sufficient) - Failure-at-boundary modeling - Idempotency at endpoint (composes with idempotency lens) - Cross-endpoint dimension propagation (extends §2.5.F affected-set) - End-to-end 2-endpoint demonstration falsification probe Open R4 canvas questions enumerated for downstream authoring: - 6th behavior (Coordinate) vs Bind+Effect composition (C1 stop-signal) - Endpoint addressing: substrate carrier vs lens dimension - Failure-recovery composition with fail-closed C-8 discipline PM read: multi-program coordination is the natural completion of omni-emission (N projections × M programs from gate #28's N projections × 1 program). Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): §2.5.F — fix design-doc authority cite (operator BLOCKING on PR #2849:352) Operator BLOCKING finding (verbatim): > "The changed status says docs/design-affected-set-lens.md is 'substrate- > shape ratified,' but that design doc explicitly says it is not a substrate- > shape ratification or §1.8 gate addition, so the close audit would rest on > a false authority (INVARIANTS P1/P2)." Finding verified against design-affected-set-lens.md:7 verbatim: > "Scope: design framing + 5 worked examples. Not a substrate-shape > ratification; not a §1.8 gate addition. Prototype lives under gunbc#2699 > worker scope." §2.5.F text rewritten to accurately reflect the design doc's actual status: - Was: "substrate-shape ratified; consumer pattern is CLI / agent / IDE..." - Now: "design framing + 5 worked examples; NOT a substrate-shape ratification, NOT a §1.8 gate addition (per design doc §Scope line 7 verbatim). Substrate-shape ratification + §1.8 gate landing pending. Consumer-pattern sketch: ... Prototype scope at gunbc#2699." Preserves INVARIANTS P1/P2 (single authority; no false ratification claim). Holding for operator review/approval per directive 2026-05-13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR introduces a comprehensive progress visualization system for DAG execution, replacing verbose line-dump shell output with a live, animated display that shows nodes and data flow in real-time — inspired by SimCity's power grid visualization.
The implementation follows a four-layer architecture:
Key Changes
Layer 1: Glyph System (core/ir/src/glyph.rs)
Tierenum: Emoji (default), Unicode, ASCII for environment-aware renderingSemanticColorenum: Meaning-based colors (Success, Error, Warning, etc.) that renderers map to actual colorsGlyphIdenum: 40+ semantic identifiers covering node states, edge states, DAG phases, structural elements, and data summariesGlyphstruct: Multi-tier visual representation with color metadataGlyphSetstruct: Themed collection of glyphs with lookup and rendering methodsSTANDARDstatic GlyphSet: Default visual vocabulary (e.g., ✅/●/[x] for completion, ⚡/═/= for data flow)Why in core/ir? It's a foundational vocabulary like the language module's format-specific concerns. Any display code across the codebase can reference semantic GlyphIds without hardcoding emoji strings.
Layer 2: Progress Observer (core/exec/src/progress.rs)
ProgressObservertrait: Plugs into execute_flat() with callbacks for dag_start, node_start, node_complete, node_failed, node_skipped, node_intercepted, dag_completeDagSnapshotstruct: Captures DAG topology (nodes, edges, topo order) for layout computationOutputSummarystruct: Compact representation of node outputs with field kinds (Scalar, List, Map, Secret, Url, etc.) and truncated previewsLayer 3: DagProgress State Machine (core/exec/src/progress.rs)
DagProgressstruct: Renderer-agnostic state tracking nodes, edges, phases, and elapsed timeNodeStateenum: Pending, Running, Completed, Failed, Skipped, InterceptedEdgeStateenum: Idle, Flowing, Done, DeadDagPhaseenum: NotStarted, Running, Completed, FailedKey insight: The Flowing state is the visual moment where data travels along edges — renderers show this with animated glyphs (⚡ emoji, ═ unicode, = ASCII).
Layer 4: Terminal Renderer (design documented)
\rand ANSI cursor-up (\x1b[{N}A) to rewrite the same screen areaImplementation Details
Design Decisions
Glyph System Pattern: Mirrors TypeId/TypeRegistry — GlyphId is semantic identity, Glyph is concrete definition, GlyphSet is collection + lookup. This
https://claude.ai/code/session_01FsBvUwjfkbNrvStq6p4t3i