Skip to content
Closed
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
4 changes: 0 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ jobs:
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1.16.0
with:
toolchain: "1.93.0"
components: rustfmt
cache: false
rustflags: ""
Expand Down Expand Up @@ -108,7 +107,6 @@ jobs:
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1.16.0
with:
toolchain: "1.93.0"
components: rustfmt
cache: false
rustflags: ""
Expand Down Expand Up @@ -145,7 +143,6 @@ jobs:
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1.16.0
with:
toolchain: "1.93.0"
# Integration snapshot tests (`regen_parse` path, lane2d cost lens, …) shell out to `rustfmt`.
components: rustfmt, clippy
cache: false
Expand Down Expand Up @@ -332,7 +329,6 @@ jobs:
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1.16.0
with:
toolchain: "1.93.0"
cache: false
rustflags: ""

Expand Down
6 changes: 5 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ Tracked debt not dispatched with the 2026-04-21 lane wave (Lane 1e P3.0, SG-2c-4
- **Lane E-I — port `SubValueRelation` + inductive fields + cost algebra (M)**: port Tier 1 (structural) + Tier 2 (lattice) + Tier 3 (`CostBound` + master theorem). Requires E-T, E-C. Pre-flight: verify v3 lowers `CostBound`'s self-referential-through-`List` shape. Acceptance: carrier types ported with round-trip tests; no lens row moves on E-I alone because consumer-visible facts still wait for E-P producer/consumer wiring.
- **Lane E-P — per-call descent-evidence provenance (M)**: first P-c side-table producer slice has landed as `v3_compiler::dag::per_call_descent_evidence` (recursive self-call / arithmetic descent; unproven edges fail closed; `TransformNode` stays unwidened). v2 stores this class of fact on `ExprCall.descent_evidence` (`src/v2/00_core.dag:199`); v3 derives it off-substrate for now. Requires E-T, E-C, E-I. Remaining acceptance: cost/complexity lenses consume the side table, plus a v2-oracle-vs-v3 cementing test against `expr_call_descent_evidence`; carrier parity for `cost.dag` / `complexity.dag` on the non-method-dispatch slice closes there.
- **Lane E-M — `MethodSemantics` port-or-subsume (S–M)**: **closed via M-b structural subsumption.** Transitive facts (`CollectionSizeEffect` / `CostShape` / `AlgebraFieldTemplate`) remain algebra-declaration facts; v3 method-like calls dispatch through `TransformTarget::{Callable, FieldProject, Operator}` and typed declaration/effect metadata. No `src/v3/std/method_semantics.dag`, no Rust mirror, and no `ExprMethodCall` attachment point.
- **CI ratchet architecture — PARTIAL (T-Receipts W1 second bundle)**: surfaced during the 2026-04-21 reflective analysis (`53b3110..ae8825a` range). Commits `37cd6128`, `4898983e`, `f84ed355` hardened the ratchet against CI-log instability, but `2d8396df` widened the exemption list. `scripts/slow-test-exemptions.txt` currently has **39** active non-comment exemptions; `scripts/check-test-timeout.sh` meta-ratchet default `TEST_TIMEOUT_MAX_EXEMPTIONS` matches that count. **Landed partial:** classification audit [docs/debt/ci-ratchet-exemption-audit-2026-04-24.md](docs/debt/ci-ratchet-exemption-audit-2026-04-24.md) (2026-04-24 baseline) plus follow-up routing audit [docs/debt/ci-ratchet-exemption-audit-2026-05-02.md](docs/debt/ci-ratchet-exemption-audit-2026-05-02.md) (bounded scope — not a completed Phase 1 per-test timing pass). **Still open:** fresh CI-shaped per-test timing audit, stale exemption deletion if any entries measure under 2s, and per-exempt duration budgets once fresh timings exist. Dispatch brief: `docs/briefs/ci-ratchet-architecture-audit.md`.
- **CI ratchet architecture — PARTIAL (T-Receipts W1 second bundle)**: surfaced during the 2026-04-21 reflective analysis (`53b3110..ae8825a` range). Commits `37cd6128`, `4898983e`, `f84ed355` hardened the ratchet against CI-log instability, but `2d8396df` widened the exemption list. `scripts/slow-test-exemptions.txt` currently has **40** active non-comment exemptions; `scripts/check-test-timeout.sh` meta-ratchet default `TEST_TIMEOUT_MAX_EXEMPTIONS` matches that count (floor **39→40** on 2026-05-05: T-Demo runner-visibility exemption on gunbc#1798). **Landed partial:** classification audit [docs/debt/ci-ratchet-exemption-audit-2026-04-24.md](docs/debt/ci-ratchet-exemption-audit-2026-04-24.md) (2026-04-24 baseline) plus follow-up routing audit [docs/debt/ci-ratchet-exemption-audit-2026-05-02.md](docs/debt/ci-ratchet-exemption-audit-2026-05-02.md) (bounded scope — not a completed Phase 1 per-test timing pass). **Still open:** fresh CI-shaped per-test timing audit, stale exemption deletion if any entries measure under 2s, and per-exempt duration budgets once fresh timings exist. Dispatch brief: `docs/briefs/ci-ratchet-architecture-audit.md`.
- **`IntegrationRsScan` / `integration_rs_active_line_contains` in `src/v3/compiler/tests/integration/common/mod.rs` is a latent source of byte-constant workarounds in downstream tests** (T-Receipts, surfaced by T-Demo #686). The scanner is "deliberately narrow" and does not model Rust character literals, so any test author touching a file in its scan path cannot write `b'\\'` / `b'"'` directly and must substitute numeric byte constants (e.g., `92` / `34`) instead. Historical evidence: #686's text-slicing helper introduced `DAG_ESCAPE_BYTE` / `DAG_QUOTE_BYTE` constants for exactly this reason; #705 deleted the helper when `TestRunner::run_suite` obsoleted it, and the constants went with it — so there is **no surviving in-tree instance of the workaround today**. The scanner constraint itself remains, which means the next test author landing in the scan path will recreate the pattern. Dissolution: either widen the scanner to model Rust char literals, or replace its scan with a structural reader that doesn't need to exclude char-literal syntax. Small scope; cosmetic for now, but the constraint is a workaround attractor. Owner: unassigned; P2 Boundary Discipline / T-Receipts bundle.
- **Stale-receipt sweep in `docs/briefs/` — PARTIAL (T-Receipts W1).** The cited `DeclarationLookup` cleanup brief now carries a historical-receipt banner stating the lane is closed by SG-4b-1-fix and that `DeclarationLookup` / `find_declaration` are gone from `src/v3/lenses/variant_payload.dag`; its stale INVARIANTS refs were also updated to stable anchors. Remaining broad `docs/briefs/` sweep stays open for later post-wave stale claims. **Include:** `docs/design-pure-bootstrap.md`'s hand-maintained count ("78 hand-maintained .rs files") was stale vs. the SG-0 census — **CLOSED in this R1 PR**: all five occurrences (lines 7, 49, 82, 105, 242 of the design doc) now point at the live census, reframed as deltas against the illustrative 78-file baseline, or scoped to the non-test + TESTING residual framing. No frozen absolute count remains.
- **Compiler–`std/` consolidation program — specific migrations**: end-state defined in [docs/thesis/compiler-std-consolidation.md](docs/thesis/compiler-std-consolidation.md). Each of the migrations below is a standalone lane; together they collapse the compiler-specific type surface toward the positive definition (pipeline + regen + lens-specific return-type carriers + accessor). **Ratchet:** count of `type` declarations in `src/v3/compiler/*.dag` AND `src/v3/lenses/*.dag` that are NOT in the positive-def set AND NOT exempted → 0. Positive-def: pipeline/regen types + lens-API return carriers (`Origin`, `UnusedParameter`, `VariantPayloadShapeLookup` 3-variant, `TemplateArgumentBinding` semantic carrier, etc.). Exempted: `parse_tables.dag` (7 types, pending SG-2c-proper per-row classification). In-ratchet: **workaround-shaped infer-helper coproducts with named dissolution triggers (`TemplateArgumentsMatch`, `TemplateArgumentCursor`, `NormalizedInstantiationArgs`)** — Lookup-pattern carriers on lens surfaces import `v3.std.lookup::Lookup` (`complexity`, `cost`, `infer_helpers`). Primary count: 3. See thesis doc table for per-file disposition.
Expand Down Expand Up @@ -623,6 +623,10 @@ Five novel-finding rows surfaced by the 2026-05-04 Exploratory + Reflective inge

R3 Debt-Paydown ledger receipts and routing detail at [docs/debt/r3-debt-paydown-ledger-2026-05-02.md](docs/debt/r3-debt-paydown-ledger-2026-05-02.md).

### Post-merge debt (2026-05-05 R3 substrate — rust-toolchain channel authority)

- **`rust_toolchain_toml_codegen_from_rustup_dag`** *(literal duplicate **retired** 2026-05-05, #1798 / api-review)*: `dsl/extdeps/rustup.dag` previously carried `data ci_pinned_toolchain` parallel to `rust-toolchain.toml` — P2 dual-authority. **Resolution:** removed `ci_pinned_toolchain`; repo-root `rust-toolchain.toml` is the **sole** hand-maintained channel + components pin; `extdeps/rustup.dag` documents rustup’s role and points at that file only (no second string). **Optional follow-on** if `gunbc/ci.dag` / workflow-as-data later needs a typed `.dag` carrier for the pin: generate or parse-assert from `rust-toolchain.toml`, never a second hand-authored literal. Surfaced R3 Substrate Mgr + scheduled api-review on toolchain PR quartet ([PR #1789 review comment](https://github.com/gunb-ai/gunbc/pull/1789#issuecomment-4381694920)).

## What NOT to build yet

- Any fourth per-language emit file before Stage 1e consolidation finishes.
Expand Down
4 changes: 3 additions & 1 deletion dsl/extdeps/github/actions.dag
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,9 @@ data checkout_action: ActionRef = ActionRef {
}

data setup_rust_action: ActionRef = ActionRef {
owner: "dtolnay", repo: "rust-toolchain", ref: "stable"
owner: "actions-rust-lang",
repo: "setup-rust-toolchain",
ref: "v1.16.0"
}

data cache_action: ActionRef = ActionRef {
Expand Down
18 changes: 12 additions & 6 deletions dsl/extdeps/rustup.dag
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@
// What we actually depend on from rustup:
// - cargo binary, installed by default with the stable toolchain
// - rustc, installed by default
// - Pinned toolchain "1.93.0" in CI (.github/workflows/ci.yml)
// - Pinned toolchain channel in repo-root rust-toolchain.toml (read by CI
// `actions-rust-lang/setup-rust-toolchain` after checkout)
//
// What we do NOT currently depend on:
// - Custom components (clippy ships with stable, rustfmt ships with stable)
// - Cross-compilation targets (gunbc only builds for the host)
// - Multiple toolchains (no toolchain switching)
//
// The CI workflow uses dtolnay/rust-toolchain@v1 to provision
// rustup. Local dev uses whatever rustup ships as stable.
// CI uses actions-rust-lang/setup-rust-toolchain (see extdeps/github/actions.dag
// `setup_rust_action`). Local dev follows rust-toolchain.toml via rustup.
//
// Future:
// When we model toolchain switching, channels, components, or
Expand All @@ -44,9 +45,14 @@ data rustup_install_url: NonEmptyStr = "https://rustup.rs"
// Default channel we expect when "rustup default" is queried.
data default_channel: RustChannel = Stable

// The pinned toolchain version used in CI. Local dev usually tracks
// stable; CI pins for reproducibility.
data ci_pinned_toolchain: NonEmptyStr = "1.93.0"
// Pinned **channel** string for this repo lives only in repo-root
// `rust-toolchain.toml` `[toolchain].channel` (CI `setup-rust-toolchain` and
// local rustup read that file after checkout). `[toolchain].components` is
// also declared there, but `.github/workflows/ci.yml` may still pass
// per-job `components:` inputs; the action unions them — not a second channel
// authority. Do not add a second channel literal here; collapsing components
// to a single workflow projection is workflow-as-data / ROADMAP
// `rust_toolchain_toml_codegen_from_rustup_dag` follow-on.

// Rustup docs URL for reference.
data rustup_docs: NonEmptyStr = "https://rust-lang.github.io/rustup/"
5 changes: 3 additions & 2 deletions rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Generated by gunbc-codegen. Do not edit manually.
# Source of truth: dsl/config/toolchain.dag
# Channel and components for local rustup and GitHub Actions.
# `actions-rust-lang/setup-rust-toolchain` reads this file after checkout.
# Sole hand-maintained toolchain pin for this repo (see `dsl/extdeps/rustup.dag`).
[toolchain]
channel = "1.93.0"
components = ["clippy", "rustfmt"]
4 changes: 2 additions & 2 deletions scripts/check-test-timeout.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
# (default scripts/slow-test-exemptions.txt).
# TEST_TIMEOUT_MAX_EXEMPTIONS
# Ratchet floor for active exemption entries
# (default 39, captured 2026-04-25). Lower this
# (default 40, captured 2026-05-05). Lower this
# value in the same PR that removes exemptions.

set -euo pipefail
Expand All @@ -55,7 +55,7 @@ log_file_arg=${1:-}
budget_ms=${2:-${TEST_TIMEOUT_MS:-2000}}
pkg=${TEST_TIMEOUT_PACKAGE:-v3-compiler}
exempt_file=${TEST_TIMEOUT_EXEMPT:-scripts/slow-test-exemptions.txt}
max_exemptions=${TEST_TIMEOUT_MAX_EXEMPTIONS:-39}
max_exemptions=${TEST_TIMEOUT_MAX_EXEMPTIONS:-40}

script_dir=$(cd "$(dirname "$0")" && pwd)
repo_root=$(cd "$script_dir/.." && pwd)
Expand Down
2 changes: 2 additions & 0 deletions scripts/slow-test-exemptions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,6 @@ sg2_parse_authority_test::parse_surface_dag_compiles_cleanly_for_regen_parse #
sg2c1_parse_tables_authority_test::parse_tables_generated_module_matches_checked_in_snapshot # SG-2c-1 grammar-tables prototype snapshot: in-process authority compile (parse_tables.dag + tokenize.dag) + rustfmt stdout; same paydown class as SG-1 tokenize / SG-2 parse snapshot gates.
sg6_hand_authored_census_test::sg6_regen_lens_cli_smoke_regenerates_named_entry_without_drift # SG-6 regen CLI smoke intentionally shells out to regen path; CLI smoke cost is tracked in SG-6, not TM-0.

t_demo_fixture_test::t_demo_canonical_suites_are_runner_visible # ROADMAP R1 §T-Demo: `compile_to_dag` on `t_demo_fixtures.dag` + `TestRunner` over two canonical suites; cold GHA can exceed 2s wall (2565ms observed). Paydown: shared fixture compile / runner setup with adjacent T-Demo integration tests (TESTING.md §shared-setup), not TM-0.

thesis_validation_test::kf_1_structural_list_operation_ordering_holds # KF-1 thesis validation remains compile-heavy on CI runners; TESTING.md test-shape paydown owns future decomposition, not TM-0.
Loading