Execution roadmap (multi-stream plan)

This document synthesizes parallel planning passes over the inauguration repo (SIL → hotreload, rust-driver / hybrid mirror, CI / in CLI, polyglot fronts). It does not replace architecture/future-work-roadmap.md; use both together—future-work stays the product narrative; this file is execution ordering, file pointers, and risk registers.

How to read this

StreamPrimary payoff
A — SIL & hotreloadSafer patch planning, fewer false hot patches, better metrics.
B — in CLI & CIin test matches contributor machines; Linux CI without Swift; clearer failures.
C — rust-driver & hybridSingle source of truth, timings, benches, artifact contracts.
D — Polyglot & Core IRParser routing → lowering → SIL parity across fronts.

Suggested program order: B0 (CI unblocks everyone) → C0 (parity guardrails) → A0–A1 (SIL signal quality) in parallel with D0 (one front deepened per milestone).


Stream A — SIL call graph → hotreload patch planning

Goals

Current state (verified)

StageLocationRole
Subset SILin-cli/src/native_swift_sil.rstry_emit_in_tree_sil, program_to_textual_silFast path; merged SIL with function_ref @helper wiring from @main.
Full Swift / swiftcin-cli/src/sil_emit.rsemit_textual_sil, compile_check_swift_pathswiftc -emit-sil when subset not used.
Graphin-cli/src/hybrid_sil.rsparse_textual_sil, remove_debug_insts, extract_call_graphSilAnalysisReport { call_edges: ... } + instruction_callers.
Daemonin-cli/src/hotreload/daemon_impl.rssil_subset_call_edge_count, plan_patch_with_sil_graph, emit_patch, RuntimeMetricToday: edge count only from subset path; None when subset emit fails (full Swift may still compile).
HeuristicsSame file — QueryGraph, infer_deps_for_path, symbols_for_pathNot SIL-driven today.

Important contract: subset stub graph Swift semantic call graph; main → all helpers inflates counts vs real control flow.

Phases

PhaseScopeKey files
A0Done: sil_subset_call_edges_detail + sil_graph=* tags on daemon reason (subset vs unavailable vs skipped compile, etc.). Double subset work unchanged for now.daemon_impl.rs
A1Pass capped SilAnalysisReport (or callee set) into plan_patch_with_sil_graph; rules e.g. downgrade only if callees intersect changed symbol names (needs name ↔ file mapping—may be stubbed first).daemon_impl.rs, hybrid_sil.rs
A2Optional swiftc SIL graph behind env + timing in metrics; unify input resolution with combined_swift_sources_for_path.sil_emit.rs, daemon_impl.rs
A3Multi-function SilArtifact stability; protocol optional fields for host tooling; mirror compiler/rust-driver/crates/sil.hybrid_sil.rs, shared/protocol/, rust-driver sil

Risks

Success metrics


Stream B — in CLI, in test, installer, CI

Goals

Current state

Phases

PhaseScope
B0Done in CI: jobs in-test-linux (IN_TEST_SKIP_SWIFT=1) + in-test-macos build in then run the configured in test gate; use --toolchain / --external-parity where CI wants broader implementation coverage.
B1in doctor: check bash, curl, swift, cargo versions; print whether remote in update would work.
B2Optional IN_TEST_SKIP_PROTOCOL=1 / staged modes if script deps are heavy for sandboxes.
B3Document “airgapped” path: no network → use checkout in update only.

Risks


Stream C — compiler/rust-driverin-cli hybrid mirror

Goals

Current state

Phases

PhaseScope
C0Partial: job hybrid-libs runs cargo test -p hybrid-pipeline -p hybrid-sil -p hybrid-core -p hybrid-scheduler on ubuntu. (Byte-diff parity still future.)
C1Align total_us semantics + document two clocks if both are kept (wave_us vs pipeline_us).
C2Criterion bench: parse_textual_sil + extract_call_graph on representative SIL blobs.
C3parse_frontend_artifact: unified schema / version field for Swift artifact + icore + nested pipeline bundle.

Stream D — Polyglot fronts, parser_registry, lowering

Goals

Current state (summary)

Phases

PhaseScope
D0Started: java_tree_front_lowers_to_textual_sil — Java file → tree_frontlower_unified_module → asserts sil @main. Extend with hybrid_sil graph pass when needed.
D1Deepen Rust/Go/V bodies toward CFG-aware lowering where tests demand it.
D2icoreVersion: conservative v1 + fixture-driven lowering tests for tool-generated IR.
D3rust-driver mirrors new ParserId / Core IR contracts as fronts stabilize (C0 dependency).

Consolidated priority backlog (suggested)

  1. B0 — CI in-test-linux / in-test-macos land in test.
  2. C0 (partial) — hybrid-libs job; still want byte/vector parity later.
  3. A0sil_graph=* reason tags from subset detail path.
  4. D0 (started) — Java tree → SIL test; add hybrid_sil hop next.
  5. A1 — Structured graph into plan_patch with conservative rules + tests.
  6. C2 + C1 — Benches + timing semantics.
  7. A2 / A3 — Optional swiftc graph + multi-fn SIL + protocol.

Mermaid — SIL → daemon metrics (today)

flowchart LR
  subgraph sources [Swift inputs]
    SS[swift_subset]
    SE[sil_emit combine]
  end
  subgraph emit [SIL text]
    NS[native_swift_sil try_emit_in_tree]
    SC[swiftc emit-sil optional]
  end
  subgraph graph [hybrid_sil]
    P[parse_textual_sil]
    R[remove_debug_insts]
    E[extract_call_graph]
  end
  subgraph daemon [hotreload]
    C[sil_subset_call_edge_count]
    PP[plan_patch_with_sil_graph]
    EM[emit_patch RuntimeMetric]
  end
  SS --> NS
  SE --> NS
  SE --> SC
  NS --> P
  SC --> P
  P --> R --> E --> C --> PP --> EM

Provenance

Last updated: 2026-05-09