Skip to content

2-compile-clean-shard-b — floor consumes the shards (TOP CI priority: dsl_compile_clean_gate is ~47min of the ~50min floor, width-immune). Shard A (#6118) landed partition+algebra+exemplar; B enrolls shard RUNNABLES in ci_floor_plan batches. Acceptance (8): no single serial compile-clean dominator; - #6127

Merged
briansrls merged 17 commits into
mainfrom
session/bright-ram-30
Jul 2, 2026

Conversation

@briansrls

@briansrls briansrls commented Jul 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Shard B wires compile-clean sharding into the CI floor plan: batch-1 runs a parallel RunnableCompileCleanShardBatch over the live module roster (replacing the serial dsl_compile_clean_gate monolith), with fail-closed verdict composition, coverage witnesses, and GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE rollback to the whole-tree gate.

Builds on Shard A (#6118): partition boundary, verdict algebra, exemplar transport.

Review fixes (76a2d890f)

  1. Plan-coverage witnesses (non-tautological): witness_floor_shard_roster_coverage_in_plan and witness_floor_dropped_shard_red_control now destructure batch-0 RunnableCompileCleanShardBatch.entry_paths from gunbc_ci_floor_batches() via floor_batch_zero_compile_clean_shard_entry_paths() and compare against the roster — not compile_clean_shard_entry_paths() twice. gunbc_ci_floor_compile_clean_shard_count() likewise reads the plan, not the roster.
  2. Rollback disposition: compile_clean_whole_tree_rollback_disposition (Scaffold + compile_clean_whole_tree_rollback_dissolution_trigger) on compile_clean_sharding_enabled.

Wall-clock receipt (acceptance #6 — partial, CI in flight)

Metric Before (main monolith) After (sharded, this PR)
Batch-1 compile-clean wall ~47 min serial dsl_compile_clean_gate (width-immune single node) pending — CI run on 76a2d890f in progress; executor emits [measurement] compile-clean shard batch: N module shard(s), width=W, wall Xms
Shard count 1 (whole-tree) 1605 module shards (plan == roster, witnessed)
Spawn width 1 (monolith) budget-tree derived (srv1 cap)
Total floor wall ~50 min pending CI
Peak RSS monolith whole-tree resolve pending — [measurement] floor peak RSS + [calibration] max-per-shard-peak-rss lines from claim_executor

"CI useful again" claim deferred until sharded batch-1 wall-clock receipt lands green on CI.

Test plan

  • gunbc run --source-root dsl --source-root src/v2 --entry src/v2/test/claim/ci_floor_plan_witness_test.dag --function ci_floor_plan_witnesses --claim-run → true
  • gunbc run --source-root dsl --source-root src/v2 --entry dsl/test/claim/dsl_compile_clean_shard_b_witness_test.dag --function compile_clean_shard_b_floor_plan_enrollment --claim-run → true
  • gunbc run --source-root dsl --source-root src/v2 --entry dsl/test/claim/dsl_compile_clean_shard_b_witness_test.dag --function compile_clean_shard_b_roster_and_coverage_red --claim-run → true
  • claim_executor --source-root dsl --source-root src/v2 --plan-entry src/v2/workflow/ci_floor_plan.dag --plan-function gunbc_ci_floor_batches — plan eval passes hermetic mode (shell.Env.Get mock for rollback env)
  • CI floor green on 76a2d890f

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review July 2, 2026 06:06
@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Addressed both blocking review items in 76a2d890f:

1. Tautological plan-coverage witnesses — Valid finding. witness_floor_shard_roster_coverage_in_plan / witness_floor_dropped_shard_red_control were comparing the roster to itself. Fixed by extracting batch-0 RunnableCompileCleanShardBatch.entry_paths from gunbc_ci_floor_batches() (floor_batch_zero_compile_clean_shard_entry_paths → schedule_batch_compile_clean_shard_entry_paths) and comparing that to compile_clean_shard_entry_paths(). gunbc_ci_floor_compile_clean_shard_count() now reads the plan shard count (1605), not the roster helper — so witness_plan_shard_count_matches_roster is also non-tautological.

2. Rollback scaffold disposition — Valid. Added compile_clean_whole_tree_rollback_disposition (Scaffold bound to compile_clean_sharding_enabled) plus compile_clean_whole_tree_rollback_dissolution_trigger; witnessed in compile_clean_whole_tree_rollback_env_is_named.

PR body updated with the wall-clock receipt table (shard count + measurement hooks cited; full sharded batch-1 wall pending CI on this commit).

— sent from bright-ram-30

Brian Searls and others added 2 commits July 2, 2026 06:33
…atch

When batch-0 leads with RunnableCompileCleanShardBatch, plant a broken
staged module entry instead of requiring a SingleClaim gating node.
Preserves monolith-path SingleClaim planting for rollback plans.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

composer-2.5 --perturb-check finding — Valid (non-blocking in review, fixed anyway in latest commit).

With sharding on, batch-0's first runnable is CompileCleanShardBatch, so the old path that required a plantable SingleClaim gating node exited early. Fixed: --perturb-check now detects CompileCleanShardBatch as the gating plant target and writes a broken staged module (_perturb_compile_clean_shard_red.dag, same skew as existing perturb receipts) into the temp tree, then remaps the shard batch to compile only that entry. Monolith/rollback plans still use the existing SingleClaim plant path. Unit tests: perturb_plant_target_prefers_shard_batch_when_first, perturb_plant_target_uses_single_claim_for_monolith_batch.

— sent from bright-ram-30

@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

claude-opus-4-7 per-thread resolve note — Valid observation, intentionally deferred (no commit).

run_compile_clean_shard_batch_node resolves COMPILE_CLEAN_SHARD_TRANSPORT once per worker thread because InterpContext is not Send (Rc internals — same reason run_memo_shared_claims documents "Runs on the main thread so InterpContext never crosses thread boundaries"). Parallelism here is at the shell-compile layer (run_shard_compile → shell.Exec.Run), not shared eval-context reuse. Width-folded duplicate resolves are real cost but bounded by spawn_width_cap; memoizing a Send-safe transport handle across threads is follow-on work, not a Shard B blocker.

— sent from bright-ram-30

Brian Searls and others added 2 commits July 2, 2026 06:46
--perturb-check no longer hard-codes PERTURB_SHARD_BROKEN_MODULE; it
evaluates broken_shard_module_source from the resolved shard transport
graph (alias of perturb_module_source in dsl_compile_clean_transport).

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

claude-opus-4-7 PERTURB_SHARD_BROKEN_MODULE duplication — Valid; fixed in latest commit.

Removed the hand-Rust literal. --perturb-check now resolves dsl/tools/dsl_compile_clean_shard_transport.dag and evaluates broken_shard_module_source (.dag alias of perturb_module_source) via eval_data_item_value — same authority chain as witness_broken_staged_shard_compile_red. Unit test: perturb_shard_broken_module_source_reads_dag_authority.

— sent from bright-ram-30

@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

composer-2.5 re-review — Verified: no findings, no code change required. Approval noted.

— sent from bright-ram-30

@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

claude-opus-4-7 re-review — Verified: no findings, no code change required. Approval noted.

— sent from bright-ram-30

Brian Searls and others added 5 commits July 2, 2026 07:06
Regenerate std_realization_schedule.rs from realization_schedule.dag
(RunnableCompileCleanShardBatch, sharded schedule lens). Make
run_compile_clean_shard_batch_node reject empty entry_paths instead of
greening with zero work.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

composer-2.5 REQUEST_CHANGES — Both findings valid; addressed in 2e7fdb87a + latest commit.

  1. Stage0 emit drift — Ran regen_stage0; std_realization_schedule.rs now includes RunnableCompileCleanShardBatch, compile_clean_sharded lens param, and CompileGateMonolithPresent / CompileCleanShardsInsufficient. regen_stage0 --verify green.

  2. Empty shard batch fail-open — run_compile_clean_shard_batch_node now returns ok: false when entry_paths is empty (compile-clean-shard:empty entry_paths — fail-closed). Witness: compile_clean_shard_batch_empty_entry_paths_fails_closed.

— sent from bright-ram-30

@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

composer-2.5 re-review (post-fix) — Verified: no findings, no code change required. APPROVE noted after e82f77f96 (regen + empty-shard fail-closed).

— sent from bright-ram-30

@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

claude-opus-4-7 re-review — Verified both notes; no commit (explicitly non-blocking).

  1. compile_clean_sharded bool vs plan introspection — Agree this is a parallel discriminator today: every call site derives it from compile_clean_sharding_enabled() (rollback env), which matches batch-0 shape while rollback exists. Dissolution trigger is already named on the rollback Scaffold; follow-up is to derive sharded-vs-monolith from batch-0 contents (compile_clean_shard_batch_label / RunnableCompileCleanShardBatch) and drop the third parameter when GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE retires — tracked, not merge-blocking.

  2. path_param_value fold sentinel — Confirmed in regen output (std_http_path.rs); collateral from regen_stage0 sync, not shard-B logic. Noted for a separate regen/HTTP-path fix; out of scope here.

— sent from bright-ram-30

@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

composer-2.5 re-review (post env-fix) — Verified: no findings, no code change required. APPROVE noted on d02d57599.

— sent from bright-ram-30

@gunbai-bot

gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

claude-opus-4-7 re-review (post env-fix) — Verified all notes; no commit (explicitly non-blocking APPROVE).

  1. Lens compile_clean_sharded fork — Agree; monolith branch is Scaffold-guarded with named dissolution trigger; sharded branch is canonical path.

  2. eval_plan Wet for rollback env — Confirmed at claim_executor.rs:1041. Deliberate scaffold trade: plan shape depends on process env only while GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE exists; dissolves with rollback retirement. Will not widen env-gated rollbacks without an outer wrapper if more levers land.

  3. spawn_width_cap silent 0 fallback — Confirmed; clamped to width≥1 downstream, consistent with RunnableDiscoveryBatch decode.

— sent from bright-ram-30

@briansrls
briansrls merged commit 7541a5e into main Jul 2, 2026
1 of 2 checks passed
@briansrls
briansrls deleted the session/bright-ram-30 branch July 2, 2026 15:08
briansrls added a commit that referenced this pull request Jul 2, 2026
…egression)

#6127 (merged 15:08 today) sharded compile-clean into ~1,605 per-module gunbc-compile
subprocesses, each re-resolving its full import closure (sum-of-closures ~30.9x the
monolith CPU), scheduled at WIDTH 1 because the width fold priced each single-module
shard against a stale whole-corpus 4.24GiB RSS sample vs the 8GiB cap. Live regression:
8h57m wall / 8h07m CPU per job on an 87%-idle 128-core box. Pre-regression monolith
green runs were 28-96min.

Sets the modeled rollback valve GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE=1 on the ci job (env),
restoring the whole-tree monolith compile-clean. Authority = the matching v2.workflow
valve; rationale on ci_compile_clean_rollback_dissolution_trigger; Scaffold disposition
bound, dissolves with the v2 authority once the in-process shard resolve pool lands.

ci.yml regenerated via generated_artifact_gate main_wet; drift gate PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 2, 2026
The GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE valve does NOT cleanly restore a green
monolith floor: under the valve, gunbc_ci_floor_schedule_lens_holds() FAILs and
batch-0 carries neither shards nor the monolith gate label (verified by execution
with claim_batch --wet under GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE=1). The valve looks
like a half-exercised scaffold from #6127. Flipping it and patching witnesses to
match an unverified plan path would violate DESIGN §5 (ship only what runs green),
so this PR keeps only the sound, approved part:

- gunbc_ci_job_timeout_policy_minutes = 30 (workflow-layer; GitHub 360 default stays modeled)
- disposition text reconciled: 30min is deliberately BELOW today's 28-96min floor — a
  fail-fast smoke alarm until the resolver single-thread fix lands (verification local meanwhile)

The #6127 regression is better addressed by a clean revert of #6127 or a proper fix
to the plan's rollback branch (load-bearing floor-plan work) — surfaced to the operator.

ci.yml regenerated (timeout-only, no rollback env); drift gate PASS; both shard-b
floor witnesses PASS at origin/main state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 2, 2026
…led GitHub default) (#6154)

* WIP: fable

* WIP: fable

* WIP: fable

* WIP: fable

* Roadmap: fold in operator directives + 2026-07-01 live findings

- §2 posture: required CI back on the fleet (#6111 revert; Ubicloud detour
  bought no wall-clock — serial compile-clean wall dominates); milestones
  updated; fleet-return group becomes fleet-hardening (the return happened
  ungated, the gates are now owed).
- New: 2-compile-clean-serial (the ~47min width-immune dominant cost +
  its three levers), 2-runner-shape (operator 1:3 core:GiB + swap slot
  contract), cap-deconflation corrected (width=9 was live by construction;
  the deferred item was only the concept rename), CD-transport reframed
  post-revert, G4 gains the dup-run + lingering in_progress evidence.
- §3 audit: 3-audit-artifact-freshness (operator freshness-gate ask; the
  .gitignore landed-drift incident as the RED receipt, closes via the
  merge-admission freshness block) and 3-audit-gate-disagreement
  (compile-clean green while discovery red on the same tree — the
  extdeps.shell collision; one tree, one verdict).
- §1 5-defork gains the live evidence line (the shell fork kept main red).

Witnesses re-targeted in lockstep; verified by execution: main_wet regen,
drift gate, roadmap_authority_witnesses, doc-graph orphans+dangling all PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* Roadmap: operator review + fabric dispatch design + stateless-frontend MVP

Applies the operator's three directives in one lockstep batch:

1. Roadmap-review blockers:
   - Ubicloud tone: detour was the diagnostic + emergency valve, not a
     failure; stays the break-glass/burst option.
   - CD transport reframed as target-host proof (LocalShell valid only
     when runner identity proves host=srv1), not Ubicloud-specific.
   - v1-collapse dependency edges now REAL: roadmap_spawner readiness is
     all-parents (node_dep_done folds every edge, not the first), with a
     RED/GREEN multi-parent witness; 5-collapse-v1 gains edges from
     dissolve-patches, test-migration, seed-honesty, defork.
   - workload-class admission model + cap/admission de-conflation (three
     facts, one knob today) + sound host admission (Guaranteed vs Burst
     with Σ-accounting receipts) + live host read seam as first-class
     nodes; G1 stale "dormant on Ubicloud" conditional fixed (cursor
     review finding on #6110).
   - Floor group renamed: throughput — reduce work, then schedule it.
   - Shelf: privacy/isolation model + structural correctness walls.

2. Fabric dispatch design (operator-signed): core design rule prose
   (ProviderOffer adapter / RunShape→Allocation→Receipt / strict default /
   oversubscription earned by receipts), StrictLease Policy 0, CI shape
   labels (runs-on as a projection; runner availability is backpressure),
   ProviderOffer rows + dormant-Ubicloud design-break probe, BurstLease
   Policy 1; TERMINAL reworded to "required CI runs on the compute
   fabric"; converge re-land gains the narrow srv2 first-acceptance case;
   ordering prose ①–⑩.

3. Stateless frontend MVP on fabric: first non-CI product-shaped
   consumer (SiteArtifact/WebServiceShape/DomainRoute/ServiceAllocation,
   manual DNS, digest-proving receipt, milestones A/B), service
   allocation receipt under control plane, fabric-hostable rule prose,
   shelf HTML line scoped.

Verified by execution: main_wet regen, drift gate, roadmap_authority
witnesses (new fabric pins + updated interleaving neighbor), spawner
witnesses (incl. new all-parents RED control), doc-graph orphans +
dangling links — all PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* WIP: fable

* Roadmap dispatch utility + first-receipt splits + converge edge-direction fix

Operator ask: a small utility returning the active/needed work items to
dispatch from the roadmap (frontend/visualization seam, useful now).

- gunbc.roadmap_spawner gains roadmap_dispatch_json (single authority
  for spawn semantics): {ready (full node rows), upcoming (node +
  unmet_parents), done}. node_json also emits parent_node_ids (all
  parents — folds in claude's non-blocking #6110 finding; single
  parent_node_id kept for bridge back-compat). json_escape now escapes
  newlines (latent invalid-JSON bug, witnessed).
- dsl/tools/roadmap_dispatch.dag: `claim_batch --source-root dsl
  --entry dsl/tools/roadmap_dispatch.dag --function main --wet` writes
  target/roadmap-dispatch.json (schema roadmap-dispatch-file/v1, embeds
  the M0-M3 worker-brief template).
- First-receipt splits per operator dispatch review:
  1-resolver-pathology → -a (profile receipt only) / -b (fix one
  confirmed pathology, edge b←a); 2-live-read-runner-memory as the
  first slice of the read seam (seam gated on it); 2-privilege-model
  sized with RED/green acceptance.
- Edge-direction fix (operator structural concern): 2-converge-reland
  now DEPENDS ON 2-live-read-seam + 2-privilege-model (was inverted:
  privilege as converge's child); umbrella g2-runner edge removed so it
  cannot gate; periodic-actuation ← converge kept.

Verified by execution: spawner witnesses (new dispatch-partition +
newline-escape RED controls), authority witnesses, main_wet regen,
drift gate, doc-graph — PASS; utility run produces valid JSON with 11
ready / 4 gated, gates matching the signed ordering.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* Roadmap: dispatch compile-clean shard A (first-receipt split) + mark owned

Operator go-ahead post-merge of #6110/#6111/#6112. 2-compile-clean-shard-a
(partition boundary + ONE shard + compose proof, no scheduler enrollment)
dispatched as adhoc-3e95c046-279 and marked owned; 2-compile-clean-shard-b
(floor-plan enrollment + before/after batch-1 wall receipt) gated on A.
Verified: regen, drift gate, authority + spawner witnesses PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roadmap: mark 3-audit-gate-inventory done (#6116 merged)

#6116 (gate-inventory audit + pilot red-control) merged without flipping
its node, unlike #6120 which self-marked. Set done: true to parity with
the resolver node — both now render "⏳ awaiting sign-off" (the [x]
checkbox is gated on operator sign-off by design, not merge alone).

Verified: main_wet regen, drift gate, roadmap_authority_witnesses PASS;
dispatch file moves 3-audit-gate-inventory to the done partition.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Roadmap #6122: drop #6120 duplicate resolver node + heal doc-graph orphan

Addresses cursor REQUEST_CHANGES on #6122:
- Finding 3 (real): removed 1-resolver-pathology-receipt, a #6120-introduced
  near-verbatim duplicate of 1-resolver-pathology-a (§2 parallel representation).
- Findings 1/2 (drift-heal, not regression): done:true renders
  "[ ] — ⏳ awaiting sign-off" by design (box = signoff_accepts, not merge);
  #6120 had committed ROADMAP.md with resolver-A as [x] with no sign-off —
  that was drift, and the regen heals it to the honest awaiting-sign-off state.
- Also heals a pre-existing doc-graph orphan: mechanism-inventory-red-controls.md
  (#6116) was link-unreachable; attached it to the 3-audit-gate-inventory node
  via a new with_plan helper (keeps the node sized).

Verified: main_wet, drift gate, roadmap_authority_witnesses, doc-graph
orphans + dangling links all PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* Roadmap #6122: keep PR scoped — move hostname-converge demo off this branch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roadmap #6122: sync main (#6113/#6115/#6118) + mark those 3 merged nodes done

The three verification-target PRs merged without self-marking their nodes;
central-marker flips 2-cd-transport, 2-live-read-runner-memory, and
2-compile-clean-shard-a to done: true (render 'awaiting sign-off' — operator
sign-off stays separate). Drift gate, roadmap witnesses, doc-graph all green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Roadmap: derive 2-debash-orchestration (#6106) + 5-dual-rep-lens (#6104) done; flip 2-privilege-model (#6114); mark 2-emit-partition dispatched

- authored_merged_prs += 6104, 6106 (operator merged both)
- 2-privilege-model done: #6114 merged, live receipts on #6123/#6130 wet runs
- 2-emit-partition now un-gated and dispatched (adhoc-2040cdfe-46b)
- regen ROADMAP.md via generated_artifact_gate main_wet; drift gate + roadmap witnesses PASS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Revert throwaway deploy-principal edits (restore live_deploy/apply + ci_deploy_access to main)

The manual-deploy investigation surfaced two real bugs (dash/pipefail + principal
fiction) but the fix belongs in the modeled grounded-principal lane, not anemic
stopgap strings. Restoring these two files to origin/main clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* CI policy: 30-minute job timeout (workflow layer; GitHub 360min default stays modeled)

Operator directive 2026-07-02: a healthy floor is ~9min solo — a job past 30min is
pathological and must fail fast + release its runner slot instead of squatting toward
the platform ceiling (observed: 6h-timeout jobs holding all 25 fleet slots in a
self-sustaining queue deadlock, ~9h single-core claim_executor runs).

- gunbc_ci_job_timeout_policy_minutes: Int = 30 (+ Terminal disposition carrying the rationale)
- extdeps default_job_timeout_minutes = 360 deliberately unchanged (§3: it faithfully
  models GitHub's real platform default; policy lives in the workflow layer)
- ci.yml regenerated via generated_artifact_gate main_wet; drift gate PASS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* CI emergency: roll back #6127 width-1 compile-clean sharding (30.9x regression)

#6127 (merged 15:08 today) sharded compile-clean into ~1,605 per-module gunbc-compile
subprocesses, each re-resolving its full import closure (sum-of-closures ~30.9x the
monolith CPU), scheduled at WIDTH 1 because the width fold priced each single-module
shard against a stale whole-corpus 4.24GiB RSS sample vs the 8GiB cap. Live regression:
8h57m wall / 8h07m CPU per job on an 87%-idle 128-core box. Pre-regression monolith
green runs were 28-96min.

Sets the modeled rollback valve GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE=1 on the ci job (env),
restoring the whole-tree monolith compile-clean. Authority = the matching v2.workflow
valve; rationale on ci_compile_clean_rollback_dissolution_trigger; Scaffold disposition
bound, dissolves with the v2 authority once the in-process shard resolve pool lands.

ci.yml regenerated via generated_artifact_gate main_wet; drift gate PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Back out #6127 rollback valve-flip; keep only the 30min timeout policy

The GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE valve does NOT cleanly restore a green
monolith floor: under the valve, gunbc_ci_floor_schedule_lens_holds() FAILs and
batch-0 carries neither shards nor the monolith gate label (verified by execution
with claim_batch --wet under GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE=1). The valve looks
like a half-exercised scaffold from #6127. Flipping it and patching witnesses to
match an unverified plan path would violate DESIGN §5 (ship only what runs green),
so this PR keeps only the sound, approved part:

- gunbc_ci_job_timeout_policy_minutes = 30 (workflow-layer; GitHub 360 default stays modeled)
- disposition text reconciled: 30min is deliberately BELOW today's 28-96min floor — a
  fail-fast smoke alarm until the resolver single-thread fix lands (verification local meanwhile)

The #6127 regression is better addressed by a clean revert of #6127 or a proper fix
to the plan's rollback branch (load-bearing floor-plan work) — surfaced to the operator.

ci.yml regenerated (timeout-only, no rollback env); drift gate PASS; both shard-b
floor witnesses PASS at origin/main state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 2, 2026
…riority: dsl_compile_clean_gate is ~47min of the ~50min floor, width-immune). Shard A (#6118) landed partition+algebra+exemplar; B enrolls shard RUNNABLES in ci_floor_plan batches. Acceptance (8): no single serial compile-clean dominator; (#6127)" (#6156)

This reverts commit 7541a5e.

Co-authored-by: Brian Searls <briansrls@gunb.ai>
briansrls added a commit that referenced this pull request Jul 2, 2026
…#6164)

* WIP: fable

* WIP: fable

* WIP: fable

* WIP: fable

* Roadmap: fold in operator directives + 2026-07-01 live findings

- §2 posture: required CI back on the fleet (#6111 revert; Ubicloud detour
  bought no wall-clock — serial compile-clean wall dominates); milestones
  updated; fleet-return group becomes fleet-hardening (the return happened
  ungated, the gates are now owed).
- New: 2-compile-clean-serial (the ~47min width-immune dominant cost +
  its three levers), 2-runner-shape (operator 1:3 core:GiB + swap slot
  contract), cap-deconflation corrected (width=9 was live by construction;
  the deferred item was only the concept rename), CD-transport reframed
  post-revert, G4 gains the dup-run + lingering in_progress evidence.
- §3 audit: 3-audit-artifact-freshness (operator freshness-gate ask; the
  .gitignore landed-drift incident as the RED receipt, closes via the
  merge-admission freshness block) and 3-audit-gate-disagreement
  (compile-clean green while discovery red on the same tree — the
  extdeps.shell collision; one tree, one verdict).
- §1 5-defork gains the live evidence line (the shell fork kept main red).

Witnesses re-targeted in lockstep; verified by execution: main_wet regen,
drift gate, roadmap_authority_witnesses, doc-graph orphans+dangling all PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* Roadmap: operator review + fabric dispatch design + stateless-frontend MVP

Applies the operator's three directives in one lockstep batch:

1. Roadmap-review blockers:
   - Ubicloud tone: detour was the diagnostic + emergency valve, not a
     failure; stays the break-glass/burst option.
   - CD transport reframed as target-host proof (LocalShell valid only
     when runner identity proves host=srv1), not Ubicloud-specific.
   - v1-collapse dependency edges now REAL: roadmap_spawner readiness is
     all-parents (node_dep_done folds every edge, not the first), with a
     RED/GREEN multi-parent witness; 5-collapse-v1 gains edges from
     dissolve-patches, test-migration, seed-honesty, defork.
   - workload-class admission model + cap/admission de-conflation (three
     facts, one knob today) + sound host admission (Guaranteed vs Burst
     with Σ-accounting receipts) + live host read seam as first-class
     nodes; G1 stale "dormant on Ubicloud" conditional fixed (cursor
     review finding on #6110).
   - Floor group renamed: throughput — reduce work, then schedule it.
   - Shelf: privacy/isolation model + structural correctness walls.

2. Fabric dispatch design (operator-signed): core design rule prose
   (ProviderOffer adapter / RunShape→Allocation→Receipt / strict default /
   oversubscription earned by receipts), StrictLease Policy 0, CI shape
   labels (runs-on as a projection; runner availability is backpressure),
   ProviderOffer rows + dormant-Ubicloud design-break probe, BurstLease
   Policy 1; TERMINAL reworded to "required CI runs on the compute
   fabric"; converge re-land gains the narrow srv2 first-acceptance case;
   ordering prose ①–⑩.

3. Stateless frontend MVP on fabric: first non-CI product-shaped
   consumer (SiteArtifact/WebServiceShape/DomainRoute/ServiceAllocation,
   manual DNS, digest-proving receipt, milestones A/B), service
   allocation receipt under control plane, fabric-hostable rule prose,
   shelf HTML line scoped.

Verified by execution: main_wet regen, drift gate, roadmap_authority
witnesses (new fabric pins + updated interleaving neighbor), spawner
witnesses (incl. new all-parents RED control), doc-graph orphans +
dangling links — all PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* WIP: fable

* Roadmap dispatch utility + first-receipt splits + converge edge-direction fix

Operator ask: a small utility returning the active/needed work items to
dispatch from the roadmap (frontend/visualization seam, useful now).

- gunbc.roadmap_spawner gains roadmap_dispatch_json (single authority
  for spawn semantics): {ready (full node rows), upcoming (node +
  unmet_parents), done}. node_json also emits parent_node_ids (all
  parents — folds in claude's non-blocking #6110 finding; single
  parent_node_id kept for bridge back-compat). json_escape now escapes
  newlines (latent invalid-JSON bug, witnessed).
- dsl/tools/roadmap_dispatch.dag: `claim_batch --source-root dsl
  --entry dsl/tools/roadmap_dispatch.dag --function main --wet` writes
  target/roadmap-dispatch.json (schema roadmap-dispatch-file/v1, embeds
  the M0-M3 worker-brief template).
- First-receipt splits per operator dispatch review:
  1-resolver-pathology → -a (profile receipt only) / -b (fix one
  confirmed pathology, edge b←a); 2-live-read-runner-memory as the
  first slice of the read seam (seam gated on it); 2-privilege-model
  sized with RED/green acceptance.
- Edge-direction fix (operator structural concern): 2-converge-reland
  now DEPENDS ON 2-live-read-seam + 2-privilege-model (was inverted:
  privilege as converge's child); umbrella g2-runner edge removed so it
  cannot gate; periodic-actuation ← converge kept.

Verified by execution: spawner witnesses (new dispatch-partition +
newline-escape RED controls), authority witnesses, main_wet regen,
drift gate, doc-graph — PASS; utility run produces valid JSON with 11
ready / 4 gated, gates matching the signed ordering.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* Roadmap: dispatch compile-clean shard A (first-receipt split) + mark owned

Operator go-ahead post-merge of #6110/#6111/#6112. 2-compile-clean-shard-a
(partition boundary + ONE shard + compose proof, no scheduler enrollment)
dispatched as adhoc-3e95c046-279 and marked owned; 2-compile-clean-shard-b
(floor-plan enrollment + before/after batch-1 wall receipt) gated on A.
Verified: regen, drift gate, authority + spawner witnesses PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roadmap: mark 3-audit-gate-inventory done (#6116 merged)

#6116 (gate-inventory audit + pilot red-control) merged without flipping
its node, unlike #6120 which self-marked. Set done: true to parity with
the resolver node — both now render "⏳ awaiting sign-off" (the [x]
checkbox is gated on operator sign-off by design, not merge alone).

Verified: main_wet regen, drift gate, roadmap_authority_witnesses PASS;
dispatch file moves 3-audit-gate-inventory to the done partition.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Roadmap #6122: drop #6120 duplicate resolver node + heal doc-graph orphan

Addresses cursor REQUEST_CHANGES on #6122:
- Finding 3 (real): removed 1-resolver-pathology-receipt, a #6120-introduced
  near-verbatim duplicate of 1-resolver-pathology-a (§2 parallel representation).
- Findings 1/2 (drift-heal, not regression): done:true renders
  "[ ] — ⏳ awaiting sign-off" by design (box = signoff_accepts, not merge);
  #6120 had committed ROADMAP.md with resolver-A as [x] with no sign-off —
  that was drift, and the regen heals it to the honest awaiting-sign-off state.
- Also heals a pre-existing doc-graph orphan: mechanism-inventory-red-controls.md
  (#6116) was link-unreachable; attached it to the 3-audit-gate-inventory node
  via a new with_plan helper (keeps the node sized).

Verified: main_wet, drift gate, roadmap_authority_witnesses, doc-graph
orphans + dangling links all PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* WIP: fable

* Roadmap #6122: keep PR scoped — move hostname-converge demo off this branch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roadmap #6122: sync main (#6113/#6115/#6118) + mark those 3 merged nodes done

The three verification-target PRs merged without self-marking their nodes;
central-marker flips 2-cd-transport, 2-live-read-runner-memory, and
2-compile-clean-shard-a to done: true (render 'awaiting sign-off' — operator
sign-off stays separate). Drift gate, roadmap witnesses, doc-graph all green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Roadmap: derive 2-debash-orchestration (#6106) + 5-dual-rep-lens (#6104) done; flip 2-privilege-model (#6114); mark 2-emit-partition dispatched

- authored_merged_prs += 6104, 6106 (operator merged both)
- 2-privilege-model done: #6114 merged, live receipts on #6123/#6130 wet runs
- 2-emit-partition now un-gated and dispatched (adhoc-2040cdfe-46b)
- regen ROADMAP.md via generated_artifact_gate main_wet; drift gate + roadmap witnesses PASS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Revert throwaway deploy-principal edits (restore live_deploy/apply + ci_deploy_access to main)

The manual-deploy investigation surfaced two real bugs (dash/pipefail + principal
fiction) but the fix belongs in the modeled grounded-principal lane, not anemic
stopgap strings. Restoring these two files to origin/main clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* CI policy: 30-minute job timeout (workflow layer; GitHub 360min default stays modeled)

Operator directive 2026-07-02: a healthy floor is ~9min solo — a job past 30min is
pathological and must fail fast + release its runner slot instead of squatting toward
the platform ceiling (observed: 6h-timeout jobs holding all 25 fleet slots in a
self-sustaining queue deadlock, ~9h single-core claim_executor runs).

- gunbc_ci_job_timeout_policy_minutes: Int = 30 (+ Terminal disposition carrying the rationale)
- extdeps default_job_timeout_minutes = 360 deliberately unchanged (§3: it faithfully
  models GitHub's real platform default; policy lives in the workflow layer)
- ci.yml regenerated via generated_artifact_gate main_wet; drift gate PASS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* CI emergency: roll back #6127 width-1 compile-clean sharding (30.9x regression)

#6127 (merged 15:08 today) sharded compile-clean into ~1,605 per-module gunbc-compile
subprocesses, each re-resolving its full import closure (sum-of-closures ~30.9x the
monolith CPU), scheduled at WIDTH 1 because the width fold priced each single-module
shard against a stale whole-corpus 4.24GiB RSS sample vs the 8GiB cap. Live regression:
8h57m wall / 8h07m CPU per job on an 87%-idle 128-core box. Pre-regression monolith
green runs were 28-96min.

Sets the modeled rollback valve GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE=1 on the ci job (env),
restoring the whole-tree monolith compile-clean. Authority = the matching v2.workflow
valve; rationale on ci_compile_clean_rollback_dissolution_trigger; Scaffold disposition
bound, dissolves with the v2 authority once the in-process shard resolve pool lands.

ci.yml regenerated via generated_artifact_gate main_wet; drift gate PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* Back out #6127 rollback valve-flip; keep only the 30min timeout policy

The GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE valve does NOT cleanly restore a green
monolith floor: under the valve, gunbc_ci_floor_schedule_lens_holds() FAILs and
batch-0 carries neither shards nor the monolith gate label (verified by execution
with claim_batch --wet under GUNBC_CI_COMPILE_CLEAN_WHOLE_TREE=1). The valve looks
like a half-exercised scaffold from #6127. Flipping it and patching witnesses to
match an unverified plan path would violate DESIGN §5 (ship only what runs green),
so this PR keeps only the sound, approved part:

- gunbc_ci_job_timeout_policy_minutes = 30 (workflow-layer; GitHub 360 default stays modeled)
- disposition text reconciled: 30min is deliberately BELOW today's 28-96min floor — a
  fail-fast smoke alarm until the resolver single-thread fix lands (verification local meanwhile)

The #6127 regression is better addressed by a clean revert of #6127 or a proper fix
to the plan's rollback branch (load-bearing floor-plan work) — surfaced to the operator.

ci.yml regenerated (timeout-only, no rollback env); drift gate PASS; both shard-b
floor witnesses PASS at origin/main state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* docs: land enforcement-intent governance model (DESIGN thread + ROADMAP §3 node + sketch)

Model the operator's recurring standing directives (complexity repo-wide,
lenses-must-be-live, self-application, no dual-representation/anemia) as durable
StandingIntent rows, gated fail-closed against LensContract + coverage receipts
-- "ask once, compile forever". One new authority (StandingIntent); everything
else extends existing machinery (LensRegistryEntryV0 -> LensContract; reuse
ConstructionJustification / subject_roster; consume intent_linearity /
self_applying_lenses for the fractal/self-application layer). Un-shelves the
lens-meta-wall lane into ROADMAP §3 with displaced-cost justification (the
operator's repeated manual what-is-enforced-by-what-lens-over-what-corpus join).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* docs: enforcement-intent review refinements (consumer/mode/receipt/exemption types + roadmap A-E split)

Operator design-review deltas before the model becomes load-bearing:
- ConsumerKind / ConsumerRequirement replace the hardwired FloorGate — merge-admission,
  pre-push, periodic-actuator, deploy-readback are valid consumers (gate leg 4 = consumer_satisfies).
- EnforcementMode order (Advisory < AuditOnly < Blocking) modeled with enforcement_mode_satisfies;
  no overloaded >=.
- CoverageReceipt shape added; the gate reads receipts, never self-declared contract claims
  (a red_control:Present whose receipt is RedControlFailedToFlip still reds).
- ScopeSatisfaction / NarrowingReason type the whole-corpus-narrowing path (BootstrapBlocked /
  TypeReflectionUnavailable / ExternalRuntimeOnly / ExplicitOperatorExemption) — not a stringly hatch.
- StandingIntent admission rule (recurring + displaced cost + scoped + mechanism class + receiptable)
  keeps the carrier from becoming a preference dump.
- ROADMAP node split into parent + children A-E with explicit A->B->C-before-object-rules dependency.

DESIGN.md entry unchanged (its "mechanism claiming enforcement" wording was already the refinement).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* WIP: fable

* docs: fix #6164 review — edit .dag AUTHORITIES not generated artifacts; de-nickname PropertyClass

Addresses cursor REQUEST_CHANGES (all three findings valid):
- DESIGN.md / ROADMAP.md are EMITTED from gunbc.design_document / gunbc.roadmap_authority.
  My hand-edits to the generated artifacts were drift (a §3 parallel-representation of the
  authority, and would fail the generated-artifact drift gate). Moved the enforcement-intent
  content INTO the authorities (open_threads_blocks li + section_3 node + un-shelve prose) and
  regenerated (claim_batch main_wet). Drift gate now PASSES: committed == emitted.
- Removed the PropertyClass nickname (git-grep empty; a fork of the existing LensIdV0
  lens-property coproduct at src/v2/lens/registry.dag:10) — the exact §3 sin this PR argues
  against. StandingIntent.property now reuses LensIdV0.

Fitting that a single-authority PR forked its own authority; caught by review, fixed at the source.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Jul 2, 2026
…solver-B #6155) (#6170)

#6105 (runtime provenance ingest) was closed as not-landable: a floor-repair
scout measured it as work-neutral theater — pruning INCREASES resolve+typecheck
(PRESENT 6/28/3885ms vs run-all 1/27/2042ms) and only saves the witness EVAL,
because the node-frontier skip fires AFTER the witness-entry closure is resolved
and floor_runner resolves its closure twice. Previously this fence lived only in
a closed-PR comment + a dangling branch (fragile).

This records it in the affected-set plan as a discoverable dispatchable item:
- Why #6105 was closed (the measured counts).
- Acceptance (c) strengthened: scheduling changes need a before/after resolve+
  typecheck-COUNT receipt (PRESENT strictly fewer than run-all), per the operator
  standing rule — wall-clock/skip-count alone hid #6127's 30.9x regression.
- The two-part REAL fix: (1) move skip BEFORE witness-entry resolve; (2) share the
  2x duplicate floor_runner closure resolves (M1 walk_memo is the precedent).
- Fence: behind resolver-B #6155 (landing pruning on the current quadratic resolve
  would multiply the work #6155 is deleting). Branch session/quick-carp-343
  preserved as harvest.

Doc-only.

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant