Repository navigation
Belt B: roadmap serve, component model, and sandbox (P0–P4) - #7113
Conversation
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
3bf4aa2 to
16bf165
Compare
…wire authority) + token scales The component concept as a design-register sibling of the surface archetype: a component = element structure x role/material bindings x interaction STATES x wire-contract binding, held as one row (gunbc.design.component). Totality is cross-checked BOTH directions against the wire vocabulary — a wire label with no state row and a state fabricating a label the wire never sends each red. DispatchButton is the first instantiation (gunbc.roadmap_component), living one layer above the register because it binds the belt vocabulary: its terminal states are DERIVED from belt_dispatch_all_status_labels (a new authority grounded in belt_dispatch_status_label via one exemplar per variant), so the button's state set cannot drift from what belt B answers. Role split follows the ok-label authority: ok -> figure, refusal -> boundary; idle -> text, requested -> text-dim. Token axes added to gunbc.design.scale: spacing scale, type scale, font stack, plus the dimension companion so 'no raw px' can be total (consumed in P2). The :root block is the one home of length/font literals, excluded from the P2 census by scope exactly as the theme var block is excluded from the color census. Keystone green by execution (component_dispatch_button_keystone_holds): totality green, dropped-state RED locates the missing label, role split proven derived. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…ternal (no inline JS string) Rebuilds dispatch_client_js as ONE modeled TsProgram (gunbc.roadmap_component. dispatch_client_program) over extdeps.languages.typescript.program — never a hand-concatenated JS string (the dispatch-button incident's root class, §5). The ok-predicate is a ts_binop `||` chain DERIVED from belt_dispatch_ok_status_labels, so the retired belt-A ok/node read cannot return. Per operator steer (inline <script> is a hack): the script is EMITTED as an external asset and referenced by <script src>, the moodboard reframe_watcher pattern — not inlined. Belt B (roadmap_serve) serves it at roadmap_dispatch_asset_path with a new text/javascript content type (extdeps.http.server.TextJavascriptUtf8). belt_dispatch_path_prefix moved to the wire-vocabulary home (belt_actuate) to break the page<->component cycle. WALL (P1): page_script_census walks the served page tree and refuses two shapes fail-closed — an inline <script> with hand JS text, and a <script src> to an unknown asset. Green over the real page; both REDs (resurrected inline string; rogue src) locate their violation. #7096's j.ok RED preserved, now against the served asset (witness_dispatch_asset_reads_belt_b_status_contract). Deleted: the string dispatch_client_js + its scaffold disposition row. Belt A's retired node_http roadmap emit inherits the <script src> ref but does not serve the asset; it is dead (not deployed, only witnessed) and P5 deletes it — its witnesses assert page structure + server routes, not the client script, so green. Green by execution: roadmap_page, roadmap_serve, component, register walls, roadmap_dashboard_emit, typescript serializer, static_site, live_deploy emit, node_http, gunbhub, http_serve_route — all pass; emitted JS verified well-formed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…sign.scale tokens Every raw px / font-family literal in roadmap_instance_rules now routes through a gunbc.design.scale token var (spacing / type / font stack + the dimension companion), with scale_root_css() emitted in :root beside the theme vars. The scale :root block is the single home of the literals — the analog of the theme var block the unthemed-color census excludes by scope. WALL (P2): untokened_length_decls (gunbc.design.theme_transition, the length/font sibling of unthemed_color_decls) refuses any rule value carrying a raw px or a quoted font family. Green over roadmap_instance_rules(); RED control (witness_local_px_literal_refused) locates an injected 14px; witness_scale_block_ is_the_px_home proves the literal lives only in the token block. The existing walls (unthemed-color, brass-never-text, reduced-motion, archetype demand) stay green — the visual-regression net. Proven visually-neutral by execution: resolving every var(--scale-token) back to its value reproduces the pre-P2 CSS byte-for-byte. The lift-parity drift digest for roadmap_css is re-pinned accordingly (bde723955c44b23c), with the rationale recorded on the carrier. Residue named: gunbc.site.moodboard.figure_rules (imported into roadmap_rules) still carries raw border/radius px; its dimension-token lift is moodboard's own follow-on (sibling of the color lift), so the length census scopes to this module's authored rules. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…thority, chip materials, located fields Reserved width is a PROJECTION of the wire vocabulary, not a hand pixel: .dispatch-btn min-width = the longest belt_dispatch_all_status_labels label (in ch) + a fixed gutter, so a text swap (dispatch -> dispatching... -> already_done_signed_off) never reflows the row — the layout jump dies as a class. Add a longer wire arm and the width grows by derivation (RED control proves it). Chip material per state: the client script flips a modifier class per terminal (dispatch-ok / dispatch-refused / dispatch-requested — one class authority shared by JS, CSS, and the P4 gallery), and each class paints the P0 state's role (ok -> figure, refusal -> boundary, requested -> text-dim). The witness cross- checks the shipped css rule against the state role EXACTLY, so a role drift reds. BoundaryRole added to the dashboard archetype's role demand (refusal chips use var(--boundary)); the archetype demand cross-check stays green. Located fields surface, not console-only: on a terminal the button sets its title to step+detail (spawn_failed) or reason/status, visible on hover — the retired console-only path is gone (console.log kept as a debug companion). Digest re-pinned for the intentional P3 styling (d429082785865b86). Residue named (AcceptedWithResidue within P3): separators stay the tokened per-child margins (which separate correctly post-P2), not a flex-container "by construction" refactor — that changes the node head's title-wrap behavior, an unverifiable visual change without a browser, so it is deferred rather than shipped blind (§5). The reserved width already kills the button reflow, the brief's flagged layout jump. Green by execution: dispatch_presentation, register (walls + archetype demand), page, lift parity. Emitted JS verified well-formed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…llery + live echo GET /sandbox renders the register at every depth (roles under both themes as paired swatches, scales) plus the dispatch button in EVERY state as a static gallery (which doubles as the visual witness), plus one live instance per wire arm. All derived from the same authorities the live surfaces use, so the sandbox cannot drift from production. Gallery totality is the wire vocabulary re-witnessed as coverage: one static instance per belt_dispatch_status_label variant; drop a state -> RED (located). POST /sandbox/echo?status=LABEL answers ANY wire arm on demand with the SAME belt_dispatch_result_json_value production sends, so every state is pressable without spawning a session. The live instances reuse the EXACT dispatch client program (dispatch_client_program_for — one behavior, two bindings; the sandbox only swaps the fetch URL), so they render identically to the real button. Echo is fail-closed: an unknown/missing status refuses 400 naming the valid set. New: extdeps.uri_path.uri_query_param (query parsing, the URI concern's home); belt_dispatch_result_for_label (label -> exemplar, grounded in the roster); three serve routes (GET /sandbox, GET /assets/sandbox.js, POST /sandbox/echo). Local execution receipt (gunbc serve, scratch port): GET / , /roadmap, /sandbox all 200 text/html; /assets/*.js 200 text/javascript; POST /sandbox/echo for all six arms returns the belt JSON (spawn_failed carries step+detail for the title); bogus -> 400. Green by execution: roadmap_sandbox, roadmap_serve (10 routes), plus all prior keystones (no regression). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…mit + dispatch exec route node_http_server_emit was the belt-A server, retired from deploy membership (belt B / gunbc serve replaced it — live_deploy is `gunbc serve`, not an emitted server.js). This PR proved belt B end-to-end by execution. So the dead belt-A ROADMAP emit is DELETED, not merely marked: every roadmap_dashboard_* emitter, the roadmap static route table, and the belt-A smuggled-exec dispatch route (BeltDispatchRouteConfig + the execFile-gunbc handler + the env-var channel — the exact shell-out belt B dissolves to an in-process call). The generic spec's dispatch field is gone with it. The module SURVIVES only for the gunbhub static-server emit (gunbhub_node_http_server_source, the sole live consumer via dag/tools/emit_host_transport.dag) — a static server with no dispatch. An explicit disposition note names that remaining consumer and its own dissolution trigger (gunbhub -> belt B, the named follow-on; gunbhub_serve is out of scope). No silent zombie: removed, not marked. Witnesses: deleted roadmap_dashboard_emit_witness_test (all belt-A roadmap emit; gunbhub coverage stays in node_http_server_emit_test); trimmed the belt-A node-server witnesses from roadmap_static_site (the "static site is served" property now lives on belt B, covered by roadmap_serve_witness) and live_deploy/emit_test. Green by execution: node_http_server_emit_test (gunbhub emit intact), gunbhub_serve, roadmap_static_site, live_deploy_emit; emit_host_transport gunbhub emit resolves; no dangling references to the deleted symbols. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
Adds the sheet row recording this PR's verdict fields — all five phases shipped, green by execution, with named within-phase residues (P3 flex-separator refactor deferred as unverifiable without a browser; P2 moodboard dimension-px is moodboard's own lift; P5 gunbhub node_http emit remains) — awaiting the review verdict (NeedsRework is a normal outcome; the review moves the row). Filed in the work-intake lane beside ts-dispatch-elevate. ROADMAP.md regenerated from the authority via main_wet (drift gate clean; only ROADMAP.md drifted — the other committed artifacts rewrote identically). Roadmap witnesses green (roadmap_gate, roadmap_authority, roadmap_page). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…mplar roster
Pure re-grounding of the anemic seams the P0-P5 UI consumers exposed (operator
+ audit review 2026-07-23). Emitted bytes and wire strings are unchanged; each
item carries its receipt.
D1 MediaType (dag/extdeps/http/server.dag): the fused HttpContentType enum hid
media-type x charset inside variant names and hand-composed the wire strings.
Modeled as RFC 9110 8.3.1 says it — MediaType { top_level: closed RFC 6838
registry enum, subtype: String, parameters: List<MediaTypeParameter> } with
charset a cited parameter row (IANA charset registry, utf-8 per RFC 3629).
http_content_type_wire_label -> media_type_wire_label serializes over the
structure; ApplicationOctetStream is an empty parameter list, not a special
variant. The fused enum is deleted; the five presets are grounded MediaType
rows; four consumers (roadmap_serve, roadmap_static_site, node_http_server_emit,
gunbhub_serve) + five witnesses migrated. New media_type_witness pins all wire
strings byte-exact with RED controls (perturbed parameter/subtype).
D2 typed HTTP status (same file): belt_dispatch_status and serve_text_response
re-grounded on HttpStatus (the typed carrier, RFC 9110 status registry); the
bare Int now appears only at the ServeWireResponse wire seam. Per-variant codes
(200/200/404/409/503/502) pinned unchanged.
D3 CssLength (new dag/extdeps/languages/css/values.dag, cited CSS Values &
Units + CSS Fonts 4): ScaleToken.value: String -> typed ScaleValue (CssLength
magnitude x unit | CssFontStack list-of-families). The value-encoded token name
is DERIVED from the magnitude by length_token (space-4 from px 4), so the
name/value fork is unwritable by construction. dispatch_reserved_width's
join-with-"ch" migrates to css_ch/CssLength. roadmap_css() emission is
byte-identical (verified); lift-parity digest holds.
D4 exemplar roster (roadmap_belt_actuate + gunbc.roster_registry):
belt_dispatch_result_exemplars is a hand variant enumeration; enrolled as a
DeclaredFrontier row (reason + dissolve_on). Reconciliation witness pins the
exemplar-derived label set against the independent wire-contract pin, with a
RED control (a missing-variant list reds).
Verified by execution: media_type, extdeps_round2, http_serve_route,
roadmap_serve, roadmap_static_site, gunbhub_serve, design_register_lift_parity,
component, presentation, sandbox, register, roadmap_belt_actuate, roster_registry.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…ubjects) The last stringly medium in the served stack: CSS selectors and property names were raw strings inside otherwise-typed BuildRule/CssDecl rows. Landed the BOUNDED grain, byte-identical emission (the acceptance oracle). New authority extdeps/languages/css: - properties.dag: CssPropertyName enumerates EXACTLY the register's emitted properties (upstream spellings, cited W3C property index); CustomProperty for --author-defined vars (token/theme); RawProperty a COUNTED escape for a non-standard name (the single accent-study 'code-spacing'). - selectors.dag: SelectorSubject = ClassSelector | ElementSelector | PseudoSuffix | RawSelector (cited Selectors 4). RawSelector is the COUNTED frontier for descendant/compound/functional-pseudo selectors, carrying exact text so emission is byte-identical; raw_selector_count is the honest residue number. - values.dag (from D3) rounds out the grain. Re-grounded shared machinery: material.CssDecl.prop -> CssPropertyName, BuildRule StaticRule.selector / ResponseRule.subject -> SelectorSubject; decl, transition_decl, serialize_decls, response selectors, css_block callers, and the theme_transition census all serialize via css_property_wire / selector_subject_wire. Consumers migrated mechanically: theme (role_decl signature + custom-property + color-scheme), scale (custom-property), roadmap_style, roadmap_sandbox, roadmap_interaction, site/moodboard, site/accent_study, and the register/ presentation/site witnesses. Cursor imported explicitly where used (collides with review_verdict.Cursor); every other arm resolves globally. Residue (honest, counted): RawSelector in the production register + RawProperty for code-spacing — both dissolve when the combinator grammar / larger property set lands (named in the module notes). Acceptance: roadmap_css() byte-identical (sha unchanged); lift-parity digest + site/roadmap register witnesses green (site emissions byte-identical); whole-tree dag compile has zero hard errors and zero silent-picks from the grain. New css_grain_witness pins the serializers with RED controls + a RawSelector census. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…P.md regen Record the anemia-dissolution follow-up (D1-D5) on the ts-ui-model sheet row: the pure re-groundings that landed (typed MediaType wire vocabulary, typed HttpStatus, typed CssLength/FontStack with the derive-name fork wall, exemplar roster enrollment, typed CSS property/selector grain), the counted residue (RawSelector 18, RawProperty 1, and the named arcs), and the local serve receipt. ROADMAP.md regenerated to the fixed point. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
Anemia dissolution follow-up (D1–D5)Rebased onto current D1 — MediaType (
D2 — typed HTTP status (same file).
D3 — CssLength (new
D4 — exemplar roster (
D5 — typed CSS grain (new
Local serve receipt (
Green by execution: page, serve, sandbox, register (roadmap + site + lift-parity), component, presentation, belt (incl. D4), static-site, gunbhub, http-serve-route, media-type, css-grain, roster-registry, wcag/palette/accent, live-deploy (apply/emit/intent/service-ready). Whole-tree Generated by Claude Code |
16bf165 to
5bcea73
Compare
|
Review against the P0–P5 brief + the D1–D5 dissolution addendum (operator-requested; this is the verdict that moves the row, per ts-dispatch-lifecycle). 1 · Delivery vs brief — all five D-items delivered, verified by executionI ran the new suites independently at head
2 · Modeling auditNothing anemic introduced; the two structural risks I was watching for did not materialize (no second wire vocabulary, no re-minted length concept — 3 · Planning / dispositionAccepted-with-residue: merge on a green floor. Residue is already carried on carriers (RawSelector count, forward read, inhabitance enumeration) — no new sheet rows owed. The workflow-shape lane (#7118) references this branch as the owner of the presentation half; on merge that seam note stays accurate as written. 🤖 Generated with Claude Code Generated by Claude Code |
P4 added uri_query_string / uri_query_param / uri_query_param_note to extdeps/uri_path.dag (the /sandbox/echo?status= query parsing) but did not regenerate the committed emitted Rust seed, so the RegenVerifyGate (self-host fixed-point) was red on the floor. regen_stage0 re-emits the whole stage0 seed; only extdeps_uri_path.rs changed (the other 98 files re-emit byte-identically). The new functions are pub (exported lib API, not dead_code under -D warnings). regen_stage0 --verify: regen_divergence_count=0 (committed stage0 matches fresh self-compile); crate rebuilds clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med
…nd-layer-o0mhyn # Conflicts: # dag/gunbc/roster_registry.dag
…nd-layer-o0mhyn # Conflicts: # dag/gunbc/roadmap_page.dag # dag/gunbc/roadmap_style.dag # dag/test/claim/design_register_lift_parity_witness_test.dag
…sing leg rows (#7127) Root cause: the batch-3 floor panicked in `witness_execution_leg_label` (cli_run.rs:8508) — "no census TSV row for entry dag/test/claim/ci_heal_job_witness_test.dag (refuse — regenerate ...)". This is the correct fail-closed refusal (§5): the leg loader has no row for a witness entry the floor is about to run. The census TSV (docs/probes/witness_entry_eligibility_census.tsv) is a generated artifact regenerated only by hand via scripts/witness_entry_eligibility_census.sh (the witness_entry_eligibility_census_emit transport, which delegates every classification column to the v2.compiler.self_host.witness_entry_eligibility_census authority). Its committed bytes carried an 08:16-EDT snapshot (stamp 12:16Z) that predated a burst of PRs which added/relocated witness *_test.dag files under witness_layer_roots (ci_heal #7112, Belt B #7113, Lane D relocation #7098, host-convergence #7121, ...). Because the Rust sync test that checks census/roster freshness was removed from CI on 2026-07-11, the drift merged to main undetected and only surfaced as the floor panic on the first uncovered entry. The roster drifted by +10/-3 vs the census (857 -> 864): 10 entries added (ci_heal_job, component_dispatch_button, css_grain, dispatch_presentation, floor_discovery_hand_rust_equivalence, floor_discovery_roster_fixture, host_axis_caps, media_type, roadmap_sandbox, long/orchestration_while_emit) and 3 removed (fleet_converge_emit, roadmap_dashboard_emit_witness, the old workflow/orchestration_while_emit location). Fix (regenerate the artifact from its authority — no hand-forked classification): - regenerate census.tsv + histogram.txt via witness_entry_eligibility_census_emit (864 entries; every current roster entry now has a non-empty execution_leg) - bump witness_entry_eligibility_census_entry_count 857 -> 864 and the census_test `== 857` assertion to `== 864` - refresh the decorative stamp constant and the two prose "857" references Proof by execution: witness_entry_eligibility_census_tsv_sync_tests:: tsv_data_row_count_matches_declared_authority passes from the repo root (declared authority count 864 == committed TSV data rows 864). Claude-Session: https://claude.ai/code/session_014qyDtPF6EM5hvRiUDUG5fe Co-authored-by: Claude <noreply@anthropic.com>
…ive sized rows reconciled against in-flight UI-model branch + srv4 receipts on the host-state lane (#7118) Group 3c lands the machine for the group-3 lifecycle discipline (operator directive 2026-07-23), gated prose-wise on the first live dispatch round-trip: - ts-wf-shape: lane anchor with the reconciliation seams — presentation half owned by claude/ui-modeling-hand-layer-o0mhyn (#7113 + D1-D5 addendum), stage-0 dependency ts-dispatch-redispatch, terminal absorption into enforcement-intent, verdict capture via md-to-dag delta. - ts-wf-node-schema (i:med v:med): decompose the node prose blob into typed fields incl. authored-at/last-verified; freshness at dispatch (priced by the stale 5-regen-cutover dispatch). - ts-wf-stage-artifacts (i:high v:med): ModelArtifact -> Brief -> Attempt -> Verdict chain; the verdict is the only status mover; done derived. - ts-wf-belt-refusals (i:med v:small): dispatch-time walls (no model artifact, stale receipts, rework = fresh session with payload); edges on stage-artifacts + redispatch. - ts-wf-lens-walls (i:med v:small): floor lenses done-has-verdict / residue-counted / dispatched-has-model-artifact, each with RED control, declared dissolution into StandingIntent. - ts-wf-progress (i:low v:small): completion as pure projection (verdict bits, Volume weights, RoadmapEdge fan-in), rendered through the UI branch's register machinery. Also: ts-dispatch-lifecycle gains the operator sharpening (MODEL stage unskippable and first, citation bar per the ed25519 precedent); ts-host-state gains the srv4 incident receipts (not-a-member + no-live-actuator diagnosis, interim hand-fix table, the 0-to-3 brief, derived-interference ruling). ROADMAP.md regenerated (main_wet, ExitSuccess); roadmap_authority_witnesses true and roadmap_frontier_witnesses PASS by execution. Claude-Session: https://claude.ai/code/session_016fdkaGGLUKpLRwwqxp5sLg Co-authored-by: Claude <noreply@anthropic.com>
…-append: keep #7113's belt_dispatch_result_exemplars row + this PR's stage0_partition_crate_rows row) roster_registry witnesses 5/5 green post-merge. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016fdkaGGLUKpLRwwqxp5sLg
…(tranche 1: dispatch-lifecycle cluster) (#7240) * W2-bulk tranche 1: the dispatch-lifecycle cluster migrates onto the ticket contract (6 rows, 161 -> 155 legacy) First tranche of the bulk migration (task queued behind the composition session; the five exemplars are the contract, operator-signed on the rendered archetype). Rows: ts-dispatch-lifecycle, ts-dispatch-verdict, ts-dispatch-rework (ticket_row — unsized discipline rows), ts-wf-shape (ticket_row), ts-wf-belt-refusals, ts-wf-progress (ticket_wi — sized, sizing preserved). Honesty rules applied, and they are the tranche's real content: - fields carry ONLY what the prose stated; a field the prose never filled is an honest empty (the renderer omits it), never a fabrication; - dates come from the prose itself (authored_on only where the row named one; last_verified_on stays empty — migration is not verification); - history moves to the updates axis WITH its dates (ts-wf-shape's #7113 reconciliation-seam note preserved as a dated update, marked since-landed, rather than deleted or left masquerading as current); - Accept lines map to their honest fields (belt-refusals' became red_control; progress's became first_slice), each marked in the migration update; - ambiguous rows stay on the counted legacy frontier rather than guessed — none in this cluster needed it. ROADMAP.md regenerated through the generated-artifact gate (main_wet); the md projects headline — brief per the signed W2 contract (full fields render on the served page; the authority carries everything). Receipts by execution: roadmap_page_keystone (including the 100-word brief-budget census over the six new briefs), roadmap_emit, roadmap_authority all green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 2: the loop cluster (4 rows, 155 -> 151 legacy); receipt shape declared Migrated: ts-loop-pattern (the named loop + the ask), ts-loop-selfheal (the structural exit — both operator rulings preserved VERBATIM as dated updates, mechanism notes preserved with the #7121 guard), ts-loop-buildretry (the widening-arm masking row), ts-loop-falsifier (the 29-red narrative with its exit condition as first_slice). Shape ruling applied (operator-signed this session for ts-pr-*; extended here by the same rule): one-fact receipt rows do NOT migrate — a ticket around a narrative one-liner is nine empty fields of costume. Stays prose by declared shape: ts-loop-fmt/docsonly/prepush/stale-roster (closed incident receipts), ts-loop-deploy (pointer receipt). The parent ticket's update row declares this so the frontier count reads honestly. ROADMAP.md regenerated (main_wet); page keystone (brief budget over the new briefs), emit, authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 3: the observation family (6 rows, 151 -> 145 legacy) ts-obs-anchor (the five laws; reference implementation studied by execution), ts-obs-model (P0 carriers), ts-obs-ci-renderer (P1, the pain point), ts-obs-tty (P2), ts-obs-census-wall (P3), ts-observation-contract (the equivalence bar). Accept lines and REDs mapped to red_control / first_slice, marked per row. The family's branch state recorded honestly: each row carries a dated update — verified this session — that the lane's implementation lives on #7216's unmerged branch (supersedes #7162) and lands at its merge; last_verified_on set only on those rows, because that verification actually happened. The composition PR's altitude convergence row already watches the same merge. The brief-budget census fired mid-tranche (ts-obs-anchor=101, located node + count exactly as designed) and the brief was trimmed one word — the wall working, recorded because a census that never fires is the one to distrust. ROADMAP.md regenerated; page keystone, emit, authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk: the re-sweep hold becomes a typed, counted state (management sharpening 1) The 13 ts-pr-* children move from a prose flag to w2_bulk_resweep_held — typed rows, counted, with ts-pr-audit's sweep as the declared dissolve-on — so the legacy frontier decomposes honestly into not-yet-migrated vs held-for-disposition, and the operator's re-sweep has a mechanical worklist. ts-pr-audit itself migrates to a ticket (its sweep instruction is the first_slice; the sweep is the handback — each child's disposition is the operator's call). The lighter one-fact row species is deliberately NOT minted (management sharpening 2, second-consumer discipline): the sweep will disposition most of these away, and the hold makes deferring that call cheap. Witnesses by execution: every held id resolves to a live AuthoredLine (a held id whose row was migrated, superseded, or deleted reds carrying the id — the hold outlived its state); planted REDs on a nonexistent id AND on an already-migrated ticket id. ROADMAP.md regenerated; page/emit/authority green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 4: the lens family (6 rows, 145 -> 139 legacy) ts-lens-endgame (the v2-door dependency named precisely, milestones preserved), ts-lens-door (M-L1; the Accept T2->T5 block became red_control, the three-compile-sites scope review became current_state), ts-lens-treewide (M-L2; the W3 typed-module-store convergence preserved), ts-lens- contract-truth (M-L3; the twice-verified counted state — 55 ids / 46 contracts / 9 missing including live Determinism — lands as current_state with its verification date as last_verified_on, the one tranche row where that field is honestly non-empty from the prose itself), ts-lens- complexity-scope (M-L4; the red-by-design blockers and the space-complexity re-home rider preserved), ts-lens-terminal (the 2c fan-in node). ROADMAP.md regenerated; page keystone (brief budget over six new briefs), emit, authority, and the re-sweep hold witness green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 5: the group-taxonomy family (5 rows, 139 -> 134 legacy) ts-group-u (the membership taxonomy — positional/derived/frontier/nickname with the mint->frontier->query pipeline), ts-group-family (the #7069 re-key; the 744-rows-Derived sequencing fact preserved as an update), ts-group-census (the swept roster ledger; landed items in the brief, storage-grain residue as current_state), ts-group-dissolve-typed (the OnRoadmapNode coupling; its lens became red_control), ts-group- partition-drift (the incident receipt; both drift incidents in the brief, the regen two-generation side receipt preserved dated). ROADMAP.md regenerated; page/emit/authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 6: the host-state family (5 rows, 134 -> 129 legacy) ts-host-state (the parent gap — both 2026-07-22 tail incidents as displaced_cost, the srv4 live-fire receipts as current_state, the 0-to-3 dispatch brief as first_slice with the operator's claims-intersection ruling, TakeoverRuling as red_control), ts-host-frontier (the Derived|OwnedMember|ForeignWithContract classification), ts-host-antientropy (the host falsifier), ts-host-cdtransport (deploy from content, not the runner workspace), ts-host-genlease (StaleDesiredState + subtree lease; the 21:49 overlap receipt as displaced_cost). ROADMAP.md regenerated; page/emit/authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 7: the native family (5 rows, 129 -> 124 legacy) ts-native-bulk (the arc; operator re-pricing + sizing preserved dated), ts-native-census (derived-denominator discipline made structural: stale-on-arrival counts kept ONLY as dated snapshots in current_state, the deleted-drifting-copies history preserved), ts-native-seams (the measurement-settled crate grain), ts-native-flip (the three-section PR), ts-native-flip-revert (the working-as-designed receipt; the twice-corrected re-flip gate as current_state; the one-authority rule — the carrier's dissolve_on strings, never a roadmap paraphrase — lands as handback, which is exactly what that clause is). ROADMAP.md regenerated; page/emit/authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 8: the ci + access clusters (7 rows, 124 -> 117 legacy) ts-ci-definition (the three-clause functionality bar; today's failures as current_state), ts-ci-claimed (the do-not-re-plan ledger; sequencing rule preserved — a fast CI that lies is worse than a slow one), ts-ci-ergonomics (the priced touchpoints; the inventory as first_slice), ts-ci-options (the three merge-gate options; the pick is the operator's — handback), ts-access-model (the transport-accident gap; grants shape), ts-access- orgtailnet (operator-owned creation — handback), ts-access-dispatch-auth (go-live precondition; do-NOT-drop-the-front as handback). ROADMAP.md regenerated; page/emit/authority green by execution. Rider: #7239 (the flips PR) merged on its green floor this tranche — the gutter split and signed PROVISIONAL marks are on main. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 9: misc batch A (5 rows, 117 -> 112 legacy) ts-authority-converge (the sprint entry point; the parity-window carrier contradiction as current_state, the option-b gating ruling dated), ts-concat-class (the 2,798-site census with its atom-never-composition ruling), ts-deploy-tail (the DONE incident — its four dated receipt waves, including the credential-leak find and #7086's construction fix, become the updates thread the blob never had), ts-doc-anchor (carrier-anchored sessions), ts-effects-providers (the conflated-counts honesty catch as current_state; the boundary-enforcement clause as red_control). ts-branches stays: a closed all-dispositioned receipt, not a blob. ROADMAP.md regenerated; page/emit/authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 10: misc batch B — the interpreter-endgame cluster (6 rows, 112 -> 106 legacy) ts-evaluator-complete (the two-typed-exits bar; refusal-never-fallback), ts-executor-seams (critical slice, hollowing fenced to out_of_scope with its stale-on-arrival count rule), ts-falsifier-nfr (DONE — root-cause and landed rows as the updates thread; the NEW-find clause as red_control), ts-floor-memory (the ceiling pin; confirm-caps as first_slice), ts-interp-delete (the delete bar; the missing interpreter-file-only milestone note as current_state), ts-interp-endgame (the three finish lines named apart; the counted-fourth-role enrollment as first_slice). ts-intake-discipline stays: a one-sentence standing rule, not a blob. ROADMAP.md regenerated; page/emit/authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 11: misc batch C (5 rows, 106 -> 101 legacy) ts-lying-stamp (the recurrence class; the 5th occurrence dated; the decide-once as first_slice AND handback — it is a ruling), ts-material-ci (the kernel row; the corrected sequencing as current_state; the different-denominators watch-flag as red_control — land the fresh receipt BEFORE repricing), ts-merge-gate (the re-evidence), ts-quarantine (the link-grain dress rehearsal; the deletion-receipt clause as red_control), ts-queue (ops hygiene; the zombie cancel as first_slice). Stay by shape: ts-modeling-pass (a per-PR checklist rule), ts-overnight (done accounting receipt). ROADMAP.md regenerated; page/emit/authority green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 12: the final ts batch (11 rows, 101 -> 90 legacy) — the ts-* sheet is done ts-review-sweep (the operator checklist; falsifier-dark prioritization as first_slice), ts-seed-interim (the 8-percent-in-33h receipt as displaced_cost, counts dated by the wave snapshot), ts-seed-ratchet (SeedGrowthJustification as the frontier pattern on the seed itself), ts-seed-data-out (the landed roster move; the live dual-representation mirror as current_state), ts-seed-intake (the thin-transport policy), ts-standing-intent (the ask-once row — with the state-response census recorded as its third idling consumer), ts-store-econ (the ForciblySerial narrow point: three lanes converge, said out loud in displaced_cost; the review-hardened RED battery preserved whole), ts-unconsumed (the sweep), ts-wave-reds (DONE — the three-collision heal chain as dated updates, including the opposite-way drift lesson), ts-wf-lens-walls (the roadmap lens trio), ts-zero-hand (the terminal ruling; the third carrier contradiction as current_state, the never-delay sequencing as out_of_scope). Stay by shape: ts-roadmap-drift (done receipt), ts-sustainable-close (one-sentence rule). With this tranche every ts-* row is dispositioned: migrated, typed-held, or declared by shape. ROADMAP.md regenerated; page/emit/authority + the hold witness green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 13: lane 1 — the CI-floor lane (16 rows) + carrier-preserving constructors New constructors first, because the wall fired before the work: ticket_doc / ticket_pp — the exact siblings authored_doc/authored_pp are to authored(). Without them, migrating a pointer-carrying row through ticket_row would silently DROP its carriers (the doc-graph's inbound links) — content loss the migration's own rules forbid. The doc-graph orphan witness runs green over the migrated lane as the executing proof the pointers survived. Migrated: 1-nightly (done, audit-dated) · 1-double-resolve · 1-sccache-falsegreens (the cache-lies live-repro residue as current_state) · 1-wallclock-measured (void profile numbers said so, dated) · 1-placement-authority · 1-sched-resource-aware (the re-base ruling; tracker link preserved inline) · 1-affected-set-defork(doc) · 1-budget-tree(pp, both pointers kept) · 1-builtin-registry(pp) · 1-floor-right-things(doc) · 1-g1-placement(doc) · 1-g2-runner (the modeled-envelope Accept as red_control) · 1-g3-caps · 1-g4-dispatch(pp) · 1-g5-rust-selection(doc) · 1-resolver-pathology-b(wi, sizing preserved). NEW SHAPE RULE, applied and declared: an operator-SIGNED row does not get edited under its signature — 1-bics-design and 1-resolver-pathology-a stay as attested receipts (the signoff attests the node as signed; migrating the line under it would change what was signed). ROADMAP.md regenerated; page/emit/authority + doc-graph green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 14: lane 3 — the audit lane (5 rows) 3-audit-affected-set (done; the three-clause discharge with its live discrimination receipt), 3-audit-artifact-freshness (green-on-branch is not green-on-main; the operator ask preserved verbatim in the migration update), 3-audit-cache-honesty, 3-enforcement-intent (the landed inventory re-based; the state-response census recorded as its third idling consumer, closing the loop management asked to watch), 3-cost-risk-benefit (the 2026-07-12 working-session capture — the argmax framing, the deferred-and-detected invariant, the wet-is-sacred inversion, the missing-pieces list highlighted not papered over; carriers preserved via ticket_pp). 3-audit-gate-inventory stays: operator-signed attested receipt. ROADMAP.md regenerated; page/emit/authority + doc-graph green by execution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Fix the authority witness's stale headline pin (the tranche-14 red, caught and owned) roadmap_authority_witnesses redded on tranche 14 — witness_audit_lane_present pinned the affected-set headline WITH its inline audit date, which the migration moved to a dated update per the convention every tranche has applied. The pin moves with the authority (the slice-2 shape: the witness reds on the change by design, then re-attests). The red was committed before it was seen — the battery ran in the same chained command as the commit; this fix commit is the stopped-line analysis, and the chain is split from here on so a red blocks the commit it belongs to. Forward note for lane 2: witness_fabric_design_rule pins lane-2 row strings ("stateless frontend MVP on fabric" et al) — those pins update alongside their rows' migration, deliberately, not as surprises. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 15: lanes 5 and 6 (12 rows) Lane 5: 5-cargo-green-continuous (done — resolved-by-construction, the unwritable failure mode stated), 5-regen-cutover (done — same discharge class, migrated for consistency with 1-nightly/3-audit-affected-set), 5-defork (the shadowed-shell.Which incident as displaced_cost), 5-dissolve- patches (the 7→25 regrowth re-measure dated), 5-emitted-crate-partition, 5-root-b, 5-seed-honesty (the fail-open-by-construction confession preserved whole; FLAGs A–D as handback), 5-test-migration (wi; the operator's scrutinize-first ruling as handback; the typed-retirement-path as first_slice), 5-v1coupled (one-liner, migrated for its deferral field). Lane 6: 6-shell-emission(doc), 6-shell-intent-phase1(doc — sign-off PENDING as current_state, the flip instruction as handback), 6-shell-slice2(doc — same pattern, the FLAG discharge dates kept). Stay signed: 6-shell-slice0, 6-shell-slice1 (operator-signed attested). ROADMAP.md regenerated; page/emit/authority + doc-graph green by execution BEFORE this commit (chain split per the tranche-14 lesson). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Record the write-interface assessment (operator question, mid-bulk) The migration is not the interface's right first consumer (editorial half irreducible; mechanical half already execution-verified per tranche). The recurring consumer is typed TicketUpdate APPEND — belt verdicts, session write-backs, dissolution firings — with the updates axis as the first API. Assessment as a data row beside the constructors so it is not re-derived. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 16: lane 2 batch 1 — floor-throughput + fabric-allocation (9 rows) 2-compile-clean-serial (lever a landed, the 37.6x receipt kept; lever c residue as current_state), 2-compile-clean-shard-a (done, the OWNED wrapper preserved — owner string survives migration), 2-compile-clean-shard-b (the full Accept checklist as red_control with its planted RED), 2-admission- model (the operator's 1-core-3GiB directive dated; derive-never-hand-set as red_control), 2-cap-deconflation (three facts in three mechanisms; the no-conflated-survivor receipt as first_slice), 2-burstlease (non-death before utilization), 2-strictlease (four nouns no scheduler; the read-back-never-asserted Accept), 2-provider-offer (the dormant design-break probe with its four witnesses), 2-shape-labels (runs-on as projection; the later-architecture fence as out_of_scope). ROADMAP.md regenerated; battery green BEFORE commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 17: lane 2 batch 2 — merge-admission + converge spine (9 rows) 2-merge-admission(pp — HELD as current_state, the green-on-branch evidence as displaced_cost), 2-cd-transport (done, owned wrapper preserved — the placement-is-not-proof premise), 2-converge-reland (the landed inventory in the brief, the full T4 accept as red_control, the ReadAbsent bind note as current_state), 2-fleet-hardening (the ungated-return debt), 2-host-admission (two modes; the post-patch-values RED and the counters-did-NOT-increase receipt), 2-live-read-seam (the no-mutation fence; first-slice-does-not-close preserved), 2-live-read-runner-memory (done, owned; stop-and-return as handback), 2-periodic-actuation (a timer existing is not acceptance), 2-privilege-model (done, owned; typed refusal BEFORE mutation). ROADMAP.md regenerated; battery green BEFORE commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 18: lane 2 batch 3 — the SCM cluster + fabric services (10 rows) The scm family (infra-econ with its cited GitLab 10-K carriers · node-merge's keyed-diff-over-identity core · publication-ladder with the pick-two churn-blinding fence as out_of_scope · remote-realization's protection-IS-billing · visibility-stage0, your 2026-07-25 plan, its T3 Accept as red_control), 2-stateless-frontend (milestone A landed, B + the unmergedPages cutover as current_state), 2-emit-partition (owned; the four leftovers a-d; the atom-never-composition wall as red_control), 2-p3, 2-session-slice (the humming apply-rule), 2-service-receipt (the T4 read-back Accept with its three NotConverged REDs). with_plan and owned wrappers preserved throughout. ROADMAP.md regenerated; battery green BEFORE commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 19: lane 2 complete — placement, host-effect, srv3/os-install (15 rows) 2-ci-two-tier-placement(doc — the 5-second rule; fail-closed admission), 2-test-decomposition-wcf (with_plan; the W/C/F cut with attribute-before- decompose), 2-host-effect-phases(doc), 2-keyed-delta-fold (accepts a+b met; the (c) proof-by-consumption fork as first_slice — re-point or wire, deliberately), 2-oom-consumer(doc — never EAGAIN-shaped), 2-runner- allocation-v0 (the operational milestone; its full T4 Accept and RED battery; not-complete-while-any-hand-edit preserved), 2-temporal-effect- spine-a (done, owned), 2-resource-namespace-upsert-a (done), 2-os-install-deduction-a (done, owned), 2-srv3-install-reconcile-a (done), 2-srv3-osinstalled(doc), 2-install-media-generic-layer, 2-nbd-serve-held- session-lease (done; the do-not-mint-a-parallel-lease-vocabulary rule), 2-srv3-boot-action-diagnostic, 2-os-install-generic-naming. Near-miss, owned: the deduction-a owner string was fabricated from the sibling's pattern where my read had truncated it — caught before commit by diffing the removed lines, restored to the true value (zesty-bat-588, the same dispatch batch). The rule stands: a field the source states is copied, never patterned. ROADMAP.md regenerated; battery green BEFORE commit (incl. hold witness). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * W2-bulk tranche 20: ts-ui-model — the sheet's largest blob, and the migratable frontier CLOSES The 6,223-char verdict specimen decomposed: the five phases + D1-D5 as the brief (budget census fired at 123 words pre-commit — the split chain working — trimmed under the bar), the candidate AcceptedWithResidue verdict as current_state with MERGE IS NOT DONE preserved, the full receipt battery as red_control, the named residues and arcs as out_of_scope, the verdict itself as handback (the operator's three questions set the status). One honest time-axis correction, dated rather than silently rewritten: the P3 flex-container residue ("deferred, unverifiable without a browser") has since been DISCHARGED — the remodel round-5 head line and #7234's RoadmapRow archetype are its discharge, with the operator as the browser. With this row every AuthoredLine on the sheet is dispositioned: MIGRATED (the ticket corpus), TYPED-HELD (13, the re-sweep worklist, witnessed), DECLARED BY SHAPE (closed receipts + one-sentence rules), or OPERATOR-SIGNED (5, never edited under a signature). ROADMAP.md regenerated; full battery green BEFORE commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Brian <briansrls@MacBook-Pro.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
This PR lands belt B (gunbc serve) end-to-end, replacing belt A's interim Node server emit with an in-process HTTP service. It introduces the component concept (dispatch button as the second consumer), the design-register scale axis, and the /sandbox surface as the visual witness. The belt-A roadmap dashboard emit is deleted; gunbhub remains on belt A (out of scope).
Key Changes
Belt B service (gunbc serve)
roadmap_serve.dag: New in-process HTTP handler for GET / (daily), /roadmap, /sandbox; POST /dispatch (in-process, no shell-out); POST /sandbox/echo (echo any wire label)node_http_server_emit.dag: Removed belt-A smuggled-exec dispatch route (BeltDispatchRouteConfig, execFile-gunbc handler, env-var channel); roadmap static route table and all roadmap_dashboard_* emitters deleted; module survives only for gunbhub static-server emit (sole live consumer)Component concept (P0)
design/component.dag(new): Generic component model — element structure × role/material bindings × interaction states (idle | requested | terminal-per-wire-arm) × wire-contract binding; component_wire_total cross-checks terminal set against wire vocabulary both directionsroadmap_component.dag(new): Dispatch button instance; terminal states DERIVED from belt_dispatch_all_status_labels (grounded label set, never hand enum); role binding follows ok/refusal split (figure for ok, boundary for refusal); idle reads text, requested reads text-dim; reserved width is longest label + gutter (grows by derivation if a longer arm lands)Client behavior (P1)
roadmap_component.dag: dispatch_client_js_source() emits ONE TsProgram (native .dag, never hand-concatenated JS string); served as external asset /assets/roadmap-dispatch.js (external emission avoids EscapeHtml hazard on arrows); ok-predicate is ts_binop||chain DERIVED from belt_dispatch_ok_status_labelsroadmap_serve.dag: DispatchAssetHandler serves dispatch_client_js_source() as TextJavascriptUtf8Presentation (P3)
roadmap_style.dag: Dispatch button styling integrated; dispatch_reserved_width, dispatch_class_* (requested/ok/refused) imported and used; single authority for state's CSS modifier class (consumed by client script, stylesheet, P4 gallery)dispatch_presentation_witness_test.dag(new): Reserved width is label projection; each chip's material is the state's role; located fields (step/detail) surface into title attributeSandbox surface (P4)
roadmap_sandbox.dag(new): /sandbox design surface — register at every depth plus every component in every state, all DERIVED from same authorities live surfaces use; role swatches under both themes (literal material paints inline); component gallery renders dispatch_button_component's states one-for-one; live section is one pressable instance per wire arm that POSTs /sandbox/echo?status=LABELroadmap_serve.dag: SandboxPageHandler (GET /sandbox), SandboxAssetHandler (GET /assets/sandbox.js), SandboxEchoHandler (POST /sandbox/echo?status=LABEL)roadmap_sandbox_witness_test.dag(new): Gallery totality is wire vocabulary re-witnessed as coverage; echo answers ANY wire arm with same belt JSON shape production sends; live instances driven by shared client programDesign register scale axis (P2)
design/scale.dag(new): Spacing, type, font stack, dimension tokens (radius, border width, measure, fixed element extents); value-named (space-8 == 8px, text-14 == 14px) for mechanical P2 migration and review-checkability; scale_var, scale_decl, scale_pair, scale_triple, scale_border helpers; untokened-length census (gunbc.design.theme_transition) excludes :root blockroadmap_style.dag:https://claude.ai/code/session_019SfKm4AxRS3e6nX2kA8med