Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions dag/gunbc/plans/v2_self_hosting.dag
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ fn v2_self_hosting_body() -> List<MarkdownBlock> {
h3(text: "Wave 1 — emit-surface + naming foundation (IN FLIGHT)"),
p(text: "The old 2-wave plan collapsed here: \"Wave 2 = the sweep\" hid the emit-surface keystone. Exit gate — **all** must be green-by-execution before Wave 2 opens:"),
ol(items: [
li(text: "**General body producer emits REAL ingested fn bodies** — forward reader over grammar rows ([general-body-producer-design.md](general-body-producer-design.md)), not fixture-bound MVP productions. Stage A landed (#6443); Stages B/C/D in flight (#6459). Builds on [body-lowering-design.md](body-lowering-design.md)."),
li(text: "**Namespace SymbolIndex / tree-resolution lands** — B1 merged + fill ([namespace-resolution-design.md](namespace-resolution-design.md)); unblocks roster rows whose `SeedRetained.migration_trigger` is `^migrate_when_namespace_only_resolution_lands` on `frontier.dag` (e.g. `03_name_resolve`, `03_resolve`). Resolution works while `import` grammar still exists."),
li(text: "**FLAG D binder identity grounded** — DerivedBy producer-minting; position-qualified canonical binders (no parallel binder-identity scheme in the body producer)."),
li(text: "**Weak self-host behavioral receipt green** — `std/logic` (or equivalent): emit -> compile -> run -> equals seed on discriminating corpus ([s2-v2-self-emit-direction.md](s2-v2-self-emit-direction.md) §11)."),
li(text: "**General body producer emits REAL ingested fn bodies** — RECEIPT LANDED (#6558 body producer + #6526/#6523 fast+long witnesses). Residual explicitly NOT proven by those witnesses: Stage D MVP subsumption, FLAG D binding-key re-grounding, frontier probe per-module receipts, FLAG E body_lowering_fold dissolution."),
li(text: "**Namespace SymbolIndex / tree-resolution lands** — RECEIPT LANDED (#6523 gate-2 witnesses + #6538 scaling receipt). Residual: 03_name_resolve/03_resolve end-to-end ingest wire + frontier probe blocker_class rows."),
li(text: "**FLAG D binder identity grounded** — OPEN. Conform-now protocol live; `bind_eval_occurrence_identity_defect` witness documents occurrence-distinct binder/ref miss until EnvironmentBindingKey re-grounding lands ([general-body-producer-design.md](general-body-producer-design.md) §9)."),
li(text: "**Weak self-host behavioral receipt green** — OPEN. Partial: `std/logic` Bool enum type-decl self-emit (#6401) + fn-level emit-host equals-eval receipts; whole-module emit→compile→run→compare not green (#6429 closed without merge)."),
]),
p(text: "**NO v1 deleted in Wave 1.**"),
h3(text: "Wave 2 — first real flips"),
Expand All @@ -46,8 +46,8 @@ fn v2_self_hosting_body() -> List<MarkdownBlock> {
ul(items: [
li(text: "**FIRM:** 0/27 self-emitted (`compiler_frontier_self_emitted_baseline`, census witnesses on `frontier.dag`)."),
li(text: "**FIRM (qualitative):** emit surface is the dominant blocker class across the roster."),
li(text: "**Carrier-held (do not transcribe counts in this doc):** per-module gap classification lives on `src/v2/compiler/self_host/frontier.dag` today as the 27-row roster's `SeedRetained { reason, migration_trigger }` dispositions plus `compiler_frontier_census_attribution: KnowledgeAttributed` — **the carrier holds the numbers; this doc points at the carrier** (DESIGN §2/§6: no parallel-ledger doc). #6464 IN FLIGHT will add execution-measured `blocker_class_distribution` and `frontier_probe.dag`; until then, do not cite those symbols as present-tense authority."),
li(text: "**IN FLIGHT mechanism (#6464):** execution-measured per-module emit probe + `frontier_probe.dag` will dissolve hand-refreshed gap clustering when the ingest-manifest fold binds live probe receipts — not landed in tree yet."),
li(text: "**Carrier-held (do not transcribe counts in this doc):** per-module gap classification lives on `src/v2/compiler/self_host/frontier.dag` as the 27-row roster's `SeedRetained { reason, migration_trigger }` dispositions plus `compiler_frontier_census_attribution: ExecutionMeasured` — **the carrier holds the numbers; this doc points at the carrier** (DESIGN §2/§6: no parallel-ledger doc)."),
li(text: "**LANDED mechanism (#6464):** structural census + fail-closed classifier on `frontier.dag`; per-module `frontier_probe_emit_from_ingest` execution receipts bind via `frontier_probe_survey` host transport — overlay manifest must not append trailing imports post-namespace-wave (header-only import rule)."),
]),
h2(text: "3. Import-deletion ladder (parallel track — NOT a wave gate)"),
p(text: "Namespace resolution and import deletion are **separate timelines**. Tree-resolution can work while imports still exist."),
Expand Down
12 changes: 6 additions & 6 deletions docs/plans/v2-self-hosting.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ Operator-signed 2026-07-11. Each wave is a **dependency-gated exit** (green-by-e

The old 2-wave plan collapsed here: "Wave 2 = the sweep" hid the emit-surface keystone. Exit gate — **all** must be green-by-execution before Wave 2 opens:

1. **General body producer emits REAL ingested fn bodies** — forward reader over grammar rows ([general-body-producer-design.md](general-body-producer-design.md)), not fixture-bound MVP productions. Stage A landed (#6443); Stages B/C/D in flight (#6459). Builds on [body-lowering-design.md](body-lowering-design.md).
2. **Namespace SymbolIndex / tree-resolution lands** — B1 merged + fill ([namespace-resolution-design.md](namespace-resolution-design.md)); unblocks roster rows whose `SeedRetained.migration_trigger` is `^migrate_when_namespace_only_resolution_lands` on `frontier.dag` (e.g. `03_name_resolve`, `03_resolve`). Resolution works while `import` grammar still exists.
3. **FLAG D binder identity grounded** — DerivedBy producer-minting; position-qualified canonical binders (no parallel binder-identity scheme in the body producer).
4. **Weak self-host behavioral receipt green** — `std/logic` (or equivalent): emit -> compile -> run -> equals seed on discriminating corpus ([s2-v2-self-emit-direction.md](s2-v2-self-emit-direction.md) §11).
1. **General body producer emits REAL ingested fn bodies** — RECEIPT LANDED (#6558 body producer + #6526/#6523 fast+long witnesses). Residual explicitly NOT proven by those witnesses: Stage D MVP subsumption, FLAG D binding-key re-grounding, frontier probe per-module receipts, FLAG E body_lowering_fold dissolution.
2. **Namespace SymbolIndex / tree-resolution lands** — RECEIPT LANDED (#6523 gate-2 witnesses + #6538 scaling receipt). Residual: 03_name_resolve/03_resolve end-to-end ingest wire + frontier probe blocker_class rows.
3. **FLAG D binder identity grounded** — OPEN. Conform-now protocol live; `bind_eval_occurrence_identity_defect` witness documents occurrence-distinct binder/ref miss until EnvironmentBindingKey re-grounding lands ([general-body-producer-design.md](general-body-producer-design.md) §9).
4. **Weak self-host behavioral receipt green** — OPEN. Partial: `std/logic` Bool enum type-decl self-emit (#6401) + fn-level emit-host equals-eval receipts; whole-module emit→compile→run→compare not green (#6429 closed without merge).

**NO v1 deleted in Wave 1.**

Expand All @@ -50,8 +50,8 @@ Remaining ~13 roster modules flip to self-emitted **or** are declared **pinned-k

- **FIRM:** 0/27 self-emitted (`compiler_frontier_self_emitted_baseline`, census witnesses on `frontier.dag`).
- **FIRM (qualitative):** emit surface is the dominant blocker class across the roster.
- **Carrier-held (do not transcribe counts in this doc):** per-module gap classification lives on `src/v2/compiler/self_host/frontier.dag` today as the 27-row roster's `SeedRetained { reason, migration_trigger }` dispositions plus `compiler_frontier_census_attribution: KnowledgeAttributed` — **the carrier holds the numbers; this doc points at the carrier** (DESIGN §2/§6: no parallel-ledger doc). #6464 IN FLIGHT will add execution-measured `blocker_class_distribution` and `frontier_probe.dag`; until then, do not cite those symbols as present-tense authority.
- **IN FLIGHT mechanism (#6464):** execution-measured per-module emit probe + `frontier_probe.dag` will dissolve hand-refreshed gap clustering when the ingest-manifest fold binds live probe receipts — not landed in tree yet.
- **Carrier-held (do not transcribe counts in this doc):** per-module gap classification lives on `src/v2/compiler/self_host/frontier.dag` as the 27-row roster's `SeedRetained { reason, migration_trigger }` dispositions plus `compiler_frontier_census_attribution: ExecutionMeasured` — **the carrier holds the numbers; this doc points at the carrier** (DESIGN §2/§6: no parallel-ledger doc).
- **LANDED mechanism (#6464):** structural census + fail-closed classifier on `frontier.dag`; per-module `frontier_probe_emit_from_ingest` execution receipts bind via `frontier_probe_survey` host transport — overlay manifest must not append trailing imports post-namespace-wave (header-only import rule).

## 3. Import-deletion ladder (parallel track — NOT a wave gate)

Expand Down
9 changes: 6 additions & 3 deletions src/v1/stage0/src/bin/frontier_probe_survey.rs
Original file line number Diff line number Diff line change
Expand Up @@ -236,9 +236,12 @@ fn unknown_probe_row(module_path: &str, cause: &str) -> ProbeReceiptRow {

fn write_probe_overlay_manifest(module_path: &str, ingest_manifest: &Path) -> Result<(), String> {
let escaped = module_path.replace('\\', "/");
let append = format!(
"\nimport v2.std.text {{ String }}\n\ndata frontier_probe_entry_module_path: String = \"{escaped}\"\n"
);
// The emitted ingest manifest already imports `String` in its header block
// (`host_source_root_ingest_content_hash: String`), and post-namespace-wave the
// grammar accepts imports ONLY in the header — a trailing `import` at EOF is now a
// parse error ("expected item declaration"). Append the `data` decl alone; String
// is already in scope.
let append = format!("\ndata frontier_probe_entry_module_path: String = \"{escaped}\"\n");
let mut body =
fs::read_to_string(ingest_manifest).map_err(|e| format!("read ingest manifest: {e}"))?;
if body.contains("frontier_probe_entry_module_path") {
Expand Down
Loading