Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
665637d
D0 retention-truth close-out: unpin compile-clean memo, register all-…
claude Jul 24, 2026
14682ee
D3 mechanism: two-tier CI placement axis (PrTier | Gauntlet) with fai…
claude Jul 24, 2026
488d982
D5 DiffBaseline: dissolve the origin/main literal into a typed single…
claude Jul 24, 2026
bf94e5f
Progress/observation P0: the event model, five laws, one glyph authority
Jul 24, 2026
8cbf49c
Review 42157: collapse the duplicate display tables into one authority
Jul 24, 2026
d26d5e0
Review 42166: ground PSI avg10 on std.measure.BasisPoint
Jul 24, 2026
d1987c6
Piece 3: derived per-batch floor clamp — delete the static wall-budge…
claude Jul 24, 2026
f5c29ad
Merge origin/main into #7162: adopt #7146's landed DiffBaseline, drop…
claude Jul 24, 2026
0a23ed6
Finish #7146 adoption: regen ci.yml from merged authority, drop orpha…
claude Jul 24, 2026
f682d33
P1: the CI-log renderer, with the captured crawl window as its accept…
Jul 24, 2026
122aaec
Merge remote-tracking branch 'origin/main' into claude/ci-executor-ev…
claude Jul 24, 2026
12e1cff
Merge remote-tracking branch 'origin/main' into session/sleek-ibex-634
Jul 24, 2026
6a4c9d1
P2: the interactive TTY renderer, a sibling projection of the same ca…
Jul 24, 2026
f42e0ba
P3: the emit-site census wall
Jul 24, 2026
8255133
Piece 3: name the clamp coefficient's measurement basis (operator add…
claude Jul 24, 2026
faf64ee
Probe (①/②): emit a per-gate warm-cost TSV from the floor's existing …
claude Jul 24, 2026
9eb01da
Flagship replay as a green witness — the before/after made executable
Jul 24, 2026
47e581b
Merge remote-tracking branch 'origin/session/sleek-ibex-634' into cla…
claude Jul 24, 2026
70e6447
Wiring flip (1/n): install the output policy BEFORE the naming walk —…
claude Jul 24, 2026
ba28f21
Wiring flip (2/n): render floor phase marks through the observation a…
claude Jul 24, 2026
d05c078
Witness fix: roster the observation stack's one wildcard site (non_fo…
claude Jul 24, 2026
d658526
Wiring flip (4a/n): the floor-memory heartbeat's seed oracle + golden…
claude Jul 24, 2026
b35a4b3
File finding: shell.Env.Get realized as a printenv subprocess (transp…
claude Jul 24, 2026
60a4496
Wiring flip (5/n): shell-echo §5 split — routine Ambient, failure Ano…
claude Jul 24, 2026
d595163
Revert "Wiring flip (5/n): shell-echo §5 split" — approach was wrong,…
claude Jul 25, 2026
7e77b92
Wiring flip (4b/n): floor-memory heartbeat via render_heartbeat_line_…
cursoragent Jul 25, 2026
ef702c5
Merge origin/main into #7162: keep D0 Ephemeral share + main's compil…
cursoragent Jul 25, 2026
9cb5077
cargo fmt: claim_executor + cli_run after floor-memory 4b / main merge
cursoragent Jul 25, 2026
d11f584
Wiring flip: [gantt] → Begin/Concluded PhaseSegment observation proje…
cursoragent Jul 25, 2026
d4b1bed
Wiring flip: [governor] → ci_hold_cause_text / StatusBlocked observat…
cursoragent Jul 25, 2026
5c47842
cargo fmt: claim_executor after governor hold oracle RED
cursoragent Jul 25, 2026
650f33d
Fix runtime_rust.dag: escape Rust format braces for daglang parse
cursoragent Jul 25, 2026
3d2d342
Wiring flip: [typecheck-attribution] → ModuleSegment+PhaseSegment obs…
cursoragent Jul 25, 2026
fc75cc3
Wiring flip: [measurement] + shell-echo → ObservationEvents (one pass)
cursoragent Jul 25, 2026
60a3d3c
Fix GeneratedArtifact name collision in observation_model witnesses
cursoragent Jul 25, 2026
b613b3f
Observation aesthetics: named-intent shell, glyph discipline, census …
cursoragent Jul 25, 2026
d52e6b5
WIP: Floor #6848: memoize the per-entry bare-reference fixpoint so po…
briansrls Jul 25, 2026
4cb92a3
WIP: Floor #6848: memoize the per-entry bare-reference fixpoint so po…
briansrls Jul 25, 2026
3082752
WIP: Floor #6848: memoize the per-entry bare-reference fixpoint so po…
briansrls Jul 25, 2026
86318c1
WIP: Floor #6848: memoize the per-entry bare-reference fixpoint so po…
briansrls Jul 25, 2026
7c2b01c
Merge origin/main into CI observation lane
cursoragent Jul 25, 2026
7783c48
Merge #7205: memoize per-module exported type-name sets for resolve r…
cursoragent Jul 25, 2026
7f208f0
WIP: Floor #6848: memoize the per-entry bare-reference fixpoint so po…
briansrls Jul 25, 2026
2bf2297
Silence Ambient shell on gunbc run; roster #7205 resolve/assembly spl…
cursoragent Jul 25, 2026
0b8bb67
WIP: Floor #6848: memoize the per-entry bare-reference fixpoint so po…
briansrls Jul 25, 2026
0b28aca
Re-merge #7205 tip: further bare-reference / rewire resolve cost fixes
cursoragent Jul 25, 2026
4a4fcc0
Re-merge #7205 tip + native shell.Env.Get (kill printenv Anomaly clut…
cursoragent Jul 25, 2026
82184ae
Merge origin/main: resolve #7205 conflicts
cursoragent Jul 25, 2026
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
2 changes: 1 addition & 1 deletion DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,4 @@ hollow alias (minimality ≠ grounding) · state-space conflation (an `Option`/`

- `cargo test --workspace` · `cargo clippy --all-targets -- -D warnings` · `cargo fmt --all --check`
- one-time: `git config core.hooksPath .githooks` (pre-push runs `cargo fmt`)
- CI (`gunbc ci` generates `.github/workflows/ci.yml`; all `v1-compiler` seed bins, no shell gate): **one** composed floor pass — `claim_executor --source-root src/v2 --source-root dag --plan-entry src/v2/workflow/ci_floor_plan.dag --plan-function gunbc_ci_floor_batches`. The v2 scheduler decides the batches from the single-authority spec (`gunbc.ci_spec`); the only structural fact the plan adds is *compile-clean gates the rest* (batch-1 `dag_compile_clean_gate` → batch-2 everything else, a dependency edge). Witness enrollment: **discovery shrunk by the affected set** (operator acceptance 2026-07-09, firing the 2026-07-04 opt-in inversion's dissolve-on — see `gunbc.ci_spec` `ci_spec_discovery_flip_note`): the corpus batch scans `CiSpec.discovery_scan_dirs` (plus the source-root `*_test.dag` walk) with `SelectionApplied`, so a PR runs the tree-wide witness corpus (~1,721 rows at flip time) shrunk to the diff's affected set; selection is fail-closed (a provenance gap refuses, never widens; host-scaffold/live-tree rows never predict-skip) and the scheduled `affected-set-falsifier` (every 4 hours) runs the corpus cold with predictions recorded, so a missing selection edge surfaces as a counted divergence within one cadence window. `CiSpec.witness_entries` (`CommitWitnessClaim` rows on the `GithubActionsCiJob` surface, projected by `project_ci_floor_witness_entries`) remains the explicit-entry roster — execution-kind rows with their own resource profile, and any row that must run as declared. Empty entries AND empty discovery dirs = zero witness-corpus nodes (the regen spec's shape). Naming hygiene stays fail-closed (a `test fn` outside `*_test.dag` is still a violation — the executor runs the zero-enrollment naming walk when no discovery batch is scheduled), and tree-wide unselected discovery remains the **local** path (`claim_batch --roster-from-discovery --source-root dag --source-root src/v2 --scan-dir dag/test/claim --scan-dir src/v2/test/claim/manual`). Batch-2 also carries the effectful gates: the rust fmt gate (when a `.rs` changes; nextest was removed from CI 2026-07-11 — operator ruling recorded in `gunbc.commit_workflow` `rust_tests_removed_disposition`, the suite runs locally only; clippy removed from CI 2026-07-08 — crate-wide `#![allow(clippy::all)]` made it zero-signal over ~44m/run, still available as a local dev check), emit-host MVP smokes, layering-imports scan + perturb receipts, source-root-ingest, and the `ci.yml` drift+parse gate (ci.yml == `gunbc ci` output). The compile-clean gate is `--target dag`, and its per-PR scope is the same import-closure authority (2026-07-16, channel 2 of the 2026-07-10 grain fork): an all-`.dag`/docs diff compiles only the affected shard-entry closures (`tools.dag_compile_clean_scope`, host fast path `entry_file_touched_via_import_closure`); any non-selectable touched path (`.rs`, workflow yml, manifests), any non-docs departed path, or any selection refusal keeps the whole-tree baseline, loudly; the falsifier cadence carries the deterministic whole-tree cold control (`GUNBC_CI_COMPILE_CLEAN_COLD_CONTROL=1`, widen-only). The regen step (self-host fixed-point) is scoped the same way at its own closure (#6732 + this change's departed-path guard): `regen_floor_skip_witness` skips the pull_request step only when a non-empty merge-base diff is provably disjoint from the regen input set (`cli_run::regen_input_sources` — the SAME closure authority `regen_stage0` compiles — plus the src/v1/** prefix and Cargo/toolchain config); empty diffs, departed non-docs paths, and every failure arm run regen, and the skip is shell-gated to pull_request events so main pushes stay the unconditional cold control. Parse is grammar-owned: `ingest_yaml_source` (`dag/extdeps/languages/yaml/ingest.dag`), no shell/host parser.
- CI (`gunbc ci` generates `.github/workflows/ci.yml`; all `v1-compiler` seed bins, no shell gate): **one** composed floor pass — `claim_executor --source-root src/v2 --source-root dag --plan-entry src/v2/workflow/ci_floor_plan.dag --plan-function gunbc_ci_floor_batches`. The v2 scheduler decides the batches from the single-authority spec (`gunbc.ci_spec`); the only structural fact the plan adds is *compile-clean gates the rest* (batch-1 `dag_compile_clean_gate` → batch-2 everything else, a dependency edge). Witness enrollment: **discovery shrunk by the affected set** (operator acceptance 2026-07-09, firing the 2026-07-04 opt-in inversion's dissolve-on — see `gunbc.ci_spec` `ci_spec_discovery_flip_note`): the corpus batch scans `CiSpec.discovery_scan_dirs` (plus the source-root `*_test.dag` walk) with `SelectionApplied`, so a PR runs the tree-wide witness corpus (~1,721 rows at flip time) shrunk to the diff's affected set; selection is fail-closed (a provenance gap refuses, never widens; host-scaffold/live-tree rows never predict-skip) and the scheduled `affected-set-falsifier` (every 4 hours) runs the corpus cold with predictions recorded, so a missing selection edge surfaces as a counted divergence within one cadence window. `CiSpec.witness_entries` (`CommitWitnessClaim` rows on the `GithubActionsCiJob` surface, projected by `project_ci_floor_witness_entries`) remains the explicit-entry roster — execution-kind rows with their own resource profile, and any row that must run as declared. Empty entries AND empty discovery dirs = zero witness-corpus nodes (the regen spec's shape). Naming hygiene stays fail-closed (a `test fn` outside `*_test.dag` is still a violation — the executor runs the zero-enrollment naming walk when no discovery batch is scheduled), and tree-wide unselected discovery remains the **local** path (`claim_batch --roster-from-discovery --source-root dag --source-root src/v2 --scan-dir dag/test/claim --scan-dir src/v2/test/claim/manual`). Batch-2 also carries the effectful gates: the rust fmt gate (when a `.rs` changes; nextest was removed from CI 2026-07-11 — operator ruling recorded in `gunbc.commit_workflow` `commit_gate_rust_suite_removed_disposition`, the suite runs locally only; clippy removed from CI 2026-07-08 — crate-wide `#![allow(clippy::all)]` made it zero-signal over ~44m/run, still available as a local dev check), emit-host MVP smokes, layering-imports scan + perturb receipts, source-root-ingest, and the `ci.yml` drift+parse gate (ci.yml == `gunbc ci` output). The compile-clean gate is `--target dag`, and its per-PR scope is the same import-closure authority (2026-07-16, channel 2 of the 2026-07-10 grain fork): an all-`.dag`/docs diff compiles only the affected shard-entry closures (`tools.dag_compile_clean_scope`, host fast path `entry_file_touched_via_import_closure`); any non-selectable touched path (`.rs`, workflow yml, manifests), any non-docs departed path, or any selection refusal keeps the whole-tree baseline, loudly; the falsifier cadence carries the deterministic whole-tree cold control (`GUNBC_CI_COMPILE_CLEAN_COLD_CONTROL=1`, widen-only). The regen step (self-host fixed-point) is scoped the same way at its own closure (#6732 + this change's departed-path guard): `regen_floor_skip_witness` skips the pull_request step only when a non-empty merge-base diff is provably disjoint from the regen input set (`cli_run::regen_input_sources` — the SAME closure authority `regen_stage0` compiles — plus the src/v1/** prefix and Cargo/toolchain config); empty diffs, departed non-docs paths, and every failure arm run regen, and the skip is shell-gated to pull_request events so main pushes stay the unconditional cold control. Parse is grammar-owned: `ingest_yaml_source` (`dag/extdeps/languages/yaml/ingest.dag`), no shell/host parser.
51 changes: 50 additions & 1 deletion dag/extdeps/render/glyphs.dag
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ data standard_symbols: List<SymbolEntry> = [
{ id: NodeRunning, glyphs: glyphs_for_tiers(emoji: glyph(text: "🔄"), unicode: glyph(text: "◐"), ascii: glyph(text: "[~]")), color: Active },
{ id: NodeCompleted, glyphs: glyphs_for_tiers(emoji: glyph(text: "✅"), unicode: glyph(text: "✓"), ascii: glyph(text: "[x]")), color: Success },
{ id: NodeFailed, glyphs: glyphs_for_tiers(emoji: glyph(text: "❌"), unicode: glyph(text: "✗"), ascii: glyph(text: "[!]")), color: Error },
{ id: NodeSkipped, glyphs: glyphs_for_tiers(emoji: glyph(text: "⏩"), unicode: glyph(text: "⊘"), ascii: glyph(text: "[-]")), color: Dim },
{ id: NodeSkipped, glyphs: glyphs_for_tiers(emoji: glyph(text: "⏭️"), unicode: glyph(text: "⊘"), ascii: glyph(text: "[-]")), color: Dim },
{ id: NodeIntercepted, glyphs: glyphs_for_tiers(emoji: glyph(text: "🔍"), unicode: glyph(text: "◆"), ascii: glyph(text: "[m]")), color: Info },

{ id: EdgeIdle, glyphs: glyphs_for_tiers(emoji: glyph(text: "┄"), unicode: glyph(text: "┄"), ascii: glyph(text: "-")), color: Dim },
Expand Down Expand Up @@ -56,6 +56,17 @@ data standard_symbols: List<SymbolEntry> = [
{ id: StatusWarning, glyphs: glyphs_for_tiers(emoji: glyph(text: "⚠"), unicode: glyph(text: "⚠"), ascii: glyph(text: "WARN")), color: Warning },
{ id: StatusInfo, glyphs: glyphs_for_tiers(emoji: glyph(text: "💡"), unicode: glyph(text: "ℹ"), ascii: glyph(text: "INFO")), color: Info },

{ id: StatusRefused, glyphs: glyphs_for_tiers(emoji: glyph(text: "🚫"), unicode: glyph(text: "⛔"), ascii: glyph(text: "REFUSED")), color: Error },
{ id: StatusBlocked, glyphs: glyphs_for_tiers(emoji: glyph(text: "⏳"), unicode: glyph(text: "◷"), ascii: glyph(text: "BLOCKED")), color: Warning },
{ id: StatusTimedOut, glyphs: glyphs_for_tiers(emoji: glyph(text: "⌛"), unicode: glyph(text: "⏱"), ascii: glyph(text: "TIMEOUT")), color: Error },
{ id: StatusDwell, glyphs: glyphs_for_tiers(emoji: glyph(text: "⏱"), unicode: glyph(text: "◴"), ascii: glyph(text: "DWELL")), color: Warning },
{ id: StatusFinal, glyphs: glyphs_for_tiers(emoji: glyph(text: "✦"), unicode: glyph(text: "✦"), ascii: glyph(text: "DONE")), color: Success },
{ id: StatusPulse, glyphs: glyphs_for_tiers(emoji: glyph(text: "🕐"), unicode: glyph(text: "◷"), ascii: glyph(text: "STATUS")), color: Dim },

{ id: ChangeAdded, glyphs: glyphs_for_tiers(emoji: glyph(text: "+"), unicode: glyph(text: "+"), ascii: glyph(text: "+")), color: Success },
{ id: ChangeModified, glyphs: glyphs_for_tiers(emoji: glyph(text: "~"), unicode: glyph(text: "~"), ascii: glyph(text: "~")), color: Warning },
{ id: ChangeRemoved, glyphs: glyphs_for_tiers(emoji: glyph(text: "-"), unicode: glyph(text: "-"), ascii: glyph(text: "-")), color: Error },

{ id: DataList, glyphs: glyphs_for_tiers(emoji: glyph(text: "☰"), unicode: glyph(text: "☰"), ascii: glyph(text: "[L]")), color: Default },
{ id: DataMap, glyphs: glyphs_for_tiers(emoji: glyph(text: "⊞"), unicode: glyph(text: "⊞"), ascii: glyph(text: "[M]")), color: Default },
{ id: DataSecret, glyphs: glyphs_for_tiers(emoji: glyph(text: "🔒"), unicode: glyph(text: "✱"), ascii: glyph(text: "[*]")), color: Warning },
Expand Down Expand Up @@ -105,3 +116,41 @@ fn symbol_color(id: SymbolId) -> SemanticColor? {
Absent => none
}
}

data reward_animal_note: String = "The reward animal shown on a terminal success lands as ROWS in the one glyph authority, never as a hardcoded function in a renderer — the reference implementation studied for this lane keeps its emoji table mirrored by hand between Go and shell, which is the maintained dual representation we are here to not have. Selection is DETERMINISTIC: the index is derived from the run's own identity, so replaying a captured run reproduces its animal exactly and the event stream stays replayable by construction. A random draw would make the stream unreplayable and would be a non-determinism root of precisely the kind the determinism gate walls."

data reward_animals: List<TierGlyphs> = [
glyphs_for_tiers(emoji: glyph(text: "🦦"), unicode: glyph(text: "✦"), ascii: glyph(text: "otter")),
glyphs_for_tiers(emoji: glyph(text: "🦊"), unicode: glyph(text: "✦"), ascii: glyph(text: "fox")),
glyphs_for_tiers(emoji: glyph(text: "🦉"), unicode: glyph(text: "✦"), ascii: glyph(text: "owl")),
glyphs_for_tiers(emoji: glyph(text: "🐢"), unicode: glyph(text: "✦"), ascii: glyph(text: "turtle")),
glyphs_for_tiers(emoji: glyph(text: "🦫"), unicode: glyph(text: "✦"), ascii: glyph(text: "beaver")),
glyphs_for_tiers(emoji: glyph(text: "🐋"), unicode: glyph(text: "✦"), ascii: glyph(text: "whale"))
]

type RewardPick {
idx: Int
found: TierGlyphs?
}

fn reward_animal_at(index: Int, tier: Tier) -> String? {
let n = count(reward_animals)
if n == 0 {
none
} else {
let target = index % n
let picked = fold(reward_animals,
init: RewardPick { idx: 0, found: none },
f: (acc, g) =>
if acc.idx == target {
RewardPick { idx: acc.idx + 1, found: Present { value: g } }
} else {
RewardPick { idx: acc.idx + 1, found: acc.found }
}
)
match picked.found {
Present { value: g } => Present { value: glyph_at(glyphs: g, tier: tier) }
Absent => none
}
}
}
2 changes: 1 addition & 1 deletion dag/gunbc/ci_layer_roots.dag
Original file line number Diff line number Diff line change
Expand Up @@ -738,7 +738,7 @@ data bin_witness_wet_entries: List<ScheduleWitnessEntry> = [

data bin_witness_wet_per_row_wall_budget_seconds: Int = 60

data bin_witness_wet_per_row_budget_note: String = "Short/quick-witness discipline for the per-PR wet batch (CI floor endgame D6, operator ruling 2026-07-23): per-PR CI is short/quick witnesses, and a bin-execution row's subprocess wall is invisible to the fast-lane 5-second EVAL deadline by construction (the deadline counts interpreter CPU; child-process wall is host-effect time), so the bin lane carries its own per-row wall budget — this datum. A row whose MEASURED wall exceeds it re-homes to the falsifier wet cadence as a typed frontier row (falsifier_rehomed_bin_wet_rows below, reason + dissolve_on per row), keeping the remaining rows as the per-PR smoke subset so plumbing-diff PRs retain a discriminating signal. Classification basis: run 30009199696's per-row cost table (the 54-row pool's 561s eval was 94 percent three rows: floor_skip_discovery 289s, cross_shard_seam live-tree 183s, dag_compile_clean_perturb 53s — the third is under budget and stays). Enforcement layering: this datum is the classification rule applied at review; the EXECUTABLE wall against silent regrowth is the batch-wall budget (gunbc.ci_spec gunbc_ci_floor_batch_wall_budget_seconds — a new heavy row blows the wet batch's budget and reds with a typed refusal), so an over-budget enrollment cannot ride silently even if review misses it."
data bin_witness_wet_per_row_budget_note: String = "Short/quick-witness discipline for the per-PR wet batch (CI floor endgame D6, operator ruling 2026-07-23): per-PR CI is short/quick witnesses, and a bin-execution row's subprocess wall is invisible to the fast-lane 5-second EVAL deadline by construction (the deadline counts interpreter CPU; child-process wall is host-effect time), so the bin lane carries its own per-row wall budget — this datum. A row whose MEASURED wall exceeds it re-homes to the falsifier wet cadence as a typed frontier row (falsifier_rehomed_bin_wet_rows below, reason + dissolve_on per row), keeping the remaining rows as the per-PR smoke subset so plumbing-diff PRs retain a discriminating signal. Classification basis: run 30009199696's per-row cost table (the 54-row pool's 561s eval was 94 percent three rows: floor_skip_discovery 289s, cross_shard_seam live-tree 183s, dag_compile_clean_perturb 53s — the third is under budget and stays). Enforcement layering: this datum is the classification rule applied at review; the EXECUTABLE wall against silent regrowth is the batch clamp (gunbc.ci_spec gunbc_ci_floor_batch_clamp_params — a new heavy row grows the wet batch's unit count and can blow its derived clamp, reding with a typed refusal), so an over-budget enrollment cannot ride silently even if review misses it."

type RehomedBinWetRow {
entry: String
Expand Down
Loading
Loading