Skip to content

Disposition carrier slice-2: ratchet disposition_redundancy lens over the post-wall data:String marker fleet — migrate each region (bytes_seam, anthropic closure rows, budget-tree leaves, #5605 consumed_input_closure rows, unit_must_run_staged_note) from prose data:String to typed Disposition fields - #5631

Merged
briansrls merged 18 commits into
mainfrom
session/calm-otter-582
Jun 24, 2026

Conversation

@briansrls

@briansrls briansrls commented Jun 23, 2026 •

Copy link
Copy Markdown
Contributor

Disposition carrier slice-2: migrates the post-wall data:String marker fleet to typed Disposition fields and wires all regions into the disposition_redundancy lens test.

What changed

Five regions migrated from `data:String` prose to `data:Disposition` (Terminal or Scaffold):

Region 1 — bytes_seam (`dsl/std/bytes.dag`, `dsl/std/encoding.dag`)

  • `bytes_seam_host_realization_marker: Disposition = Scaffold{bind: std.bytes.builtin_function_registry}`
  • `utf8_decode_bytes_host_realization_marker: Disposition = Scaffold{bind: std.bytes.builtin_function_registry}`
  • `base64_group_fill_carrier_debt_marker: Disposition = Terminal{debt paid: closed-sum enums already declared}`

Region 2 — anthropic closure rows (`dsl/extdeps/llm/anthropic.dag`)

  • 4 `List` rows → `List`: two residual/coverage-gap lists, one serde receipt (all Terminal), one file-image beta list

Region 3 — budget-tree leaves (`dsl/gunbc/ci_floor_measurement.dag`)

  • 3 new `data:Disposition` rows added (these had dissolution-trigger comments deleted in Parser-wall: remove DAG comment trivia rules (fail-closed by construction) #5579 and were never re-added as String rows):
    • `gunbc_ci_floor_measured_peak_disposition` → Scaffold binding `gunbc_ci_job_peaks` (EXISTS, fires correctly — live redundancy signal)
    • `gunbc_ci_host_fixed_overhead_disposition` → Scaffold binding planned `gunbc_ci_per_service_overhead` (silent)
    • `gunbc_ci_concurrent_runs_conservative_high_disposition` → Scaffold binding `runner_deployment_plan` (EXISTS in gunbc.ci_runner_placement, fires correctly)

Region 4 & 5 — #5605 consumed_input_closure + unit_must_run (`dsl/tools/rust_stage0_gates.dag`)

  • 6 `data:String` rows → `data:Disposition`: 3 Terminal (permanent §5 invariants) + 3 Scaffold (planned successors that don't yet exist → lens stays silent until they land)

Test wiring (`src/v2/lens/disposition_redundancy_test.dag`, `src/v1/tests/src/disposition_redundancy_lens_test.rs`)

  • Each region adds: nonempty probe (red-on-revert) + green-against-nonmatching + discriminating fire probe
  • Rust harness extended with by-execution assertions for all new regions

Why

Closes out the post-#5579 data:String backlog: `//` comments were banned as a parse error in #5579, so prose dissolution triggers became untyped String rows. Slice-2 promotes them to `Disposition`, making the Terminal/Scaffold distinction structural and lens-checkable.

Faithfulness note (for review)

`structural_coverage_gap_anthropic_messages_200_residual` item 5 (the AnthropicBetaContentBlock Scaffold) collapses 9 specific pending variant names from the original prose:
`variant_pending: web_fetch_tool_result | code_execution_tool_result | bash_code_execution_tool_result | text_editor_code_execution_tool_result | tool_search_tool_result | advisor_tool_result | mcp_tool_use | mcp_tool_result | container_upload`

The collapsed Scaffold binds to `AnthropicBetaContentBlock` (doesn't exist yet). The dropped enumeration is recoverable from the Anthropic spec (case a from the parent coordination message) — these are precisely the block type names from the Anthropic beta API, no internal provenance. When `AnthropicBetaContentBlock` is declared, the variant modeling belongs in its own modeling TODO, not here.

Bind target corrections vs previous commits: items 2 and 3 in `structural_coverage_gap_anthropic_messages_200_residual` were originally bound to `AnthropicToolDefinition` and `AnthropicServerToolName` (both EXISTING types — lens correctly fired). Fixed to:

  • Item 2: `MessagesToolUseBlock.NamedField{caller_payload}` — dissolves when `caller: Json?` is typed
  • Item 3: `AnthropicServerToolUseSurface` — dissolves when a coproduct keyed by `AnthropicServerToolName` is declared

Ordering note

This PR lands BEFORE slice-3 (#5632, cool-carp). Slice-3 does a tree-wide `DeclLocator → std.decl_ref.DeclarationRef` sweep that covers the new bind targets added here. Do NOT switch to `DeclarationRef` in this PR — the type doesn't exist yet; cool-carp rebases over this merged PR and sweeps.

Test plan

```
ctrl-build -- cargo test -p v1-compiler-tests disposition_redundancy --lib
```

Result: `test disposition_redundancy_lens_test::disposition_redundancy_lens_discriminates_by_execution ... ok` (1 passed)

No pre-existing test failures introduced; `rust_stage0_gates_witness_test.dag` only imports the functions (unchanged), not the converted data rows.

Brian Searls and others added 3 commits June 23, 2026 15:16
…egions

Adds slice-2 region assertions to disposition_redundancy_lens_discriminates_by_execution:
- region2 anthropic residual marks nonempty + fire on AnthropicToolDefinition
- serde receipt all Terminal never fires (complementary green)
- bytes/encoding markers nonempty + two Scaffolds fire on synthetic builtin_function_registry present
- budget-tree markers nonempty + fire on job_peaks locator
- rust_stage0_gates markers nonempty + fire on synthetic consumed_input convergence target

Each region adds a nonempty probe (red-on-revert wiring check) plus a discriminating fire probe.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review June 23, 2026 15:31
Brian Searls and others added 3 commits June 23, 2026 15:37
…re tests

Items 2 and 3 in structural_coverage_gap_anthropic_messages_200_residual
previously bound to existing types (AnthropicToolDefinition, AnthropicServerToolName),
causing the lens to correctly fire RED when those names are in the present set —
but they should bind to FUTURE carriers, not existing ones.

Fixed:
- Item 2: bind → MessagesToolUseBlock.NamedField{caller_payload} (field doesn't exist)
- Item 3: bind → AnthropicServerToolUseSurface (type doesn't exist)

Updated fire test to use AnthropicContainerResponse locator (item 1 bind, doesn't exist);
renamed test fn to _fires_on_container_response. All 14 by-execution assertions green.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brian Searls and others added 3 commits June 23, 2026 17:57
…erageClosureEntry migration

The 4 anthropic.dag rows that slice-2 migrated to List<Disposition>
(structural_coverage_gap_anthropic_messages_200_residual,
rest_request_wire_serde_alignment_receipt, etc.) were superseded in the
merge-commit by #5644 which gave them the richer List<CoverageClosureEntry>
type. Remove the now-type-mismatched region-2 imports, data rows, and test
fns from disposition_redundancy_test.dag, and the corresponding 3 Rust
assertions from disposition_redundancy_lens_test.rs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

All 6 CI failures are pre-existing on main, not introduced by this PR.

Root cause: PR #5647 ("Converge construction_justification onto std.disposition", merged to main) added import std.disposition { SingleAuthority } to multiple src/v2/lens/*.dag files (affected_set.dag, application.dag, affected_set_examples.dag, common/construction_justification.dag, and others). The witness_option_bridge_test and several lens tests use a source-root that only includes src/v2, not dsl, so they cannot resolve std.disposition (which lives at dsl/std/disposition.dag).

Verification: All 6 failing tests reproduce identically on the current main HEAD (no diff from this branch):

  • witness_option_bridge_test::mark_excluded_no_longer_pattern_match_fails → same unresolved import: module 'std.disposition' not found error
  • fact_cardinality_lens_test, extdeps_shape_transport_policy_lens_test, languages_consumer_census_lens_test → same failure
  • pipeline::github_token_* and pipeline::github_create_review_* → same failure

This PR adds only dsl/std/disposition.dag (the carrier), dsl/std/bytes.dag + dsl/std/encoding.dag + dsl/gunbc/ci_floor_measurement.dag + dsl/tools/rust_stage0_gates.dag typed rows, and src/v2/lens/disposition_redundancy*.dag/rs test coverage. None of those touch the source-root configuration for witness_option_bridge_test or the affected lens tests. The pre-existing break is owned by the #5647 lane.

— sent from calm-otter-582

Brian Searls and others added 6 commits June 23, 2026 19:40
generated_artifact_drift_gate_passes failed: dsl-v2-defork-audit.md
had 48 lines of hand-appended content beyond what its .dag authority
generates. Regenerated via main_wet on dsl/tools/generated_artifact_gate.dag.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
d240b33 incorrectly deleted 48 lines of real content (§2A: the
2026-06-23 Q2 census post-#5652) via main_wet. The drift gate red is an
inherited main-red owned by silent-crab-350's forward fix; not ours to
touch. Restoring docs/plans/dsl-v2-defork-audit.md to origin/main exactly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

The conflict markers finding was valid at the prior head (the 1ef1f6669 merge had committed unresolved markers). Fixed in fc3eee910:

Verifications on the current head:

  • (a) git grep -nE '^(<<<<<<<|=======|>>>>>>>)' dsl/gunbc/ci_floor_measurement.dag → ZERO
  • (b) gunbc compile --source-root dsl --source-root src/v2 → 518 files, 0 diagnostics
  • (c) git diff origin/main...HEAD --stat → 6 disposition-only files

CI is now queued on fc3eee910 (run 28056820415).

— sent from calm-otter-582

Brian Searls and others added 3 commits June 23, 2026 23:18
…hor in extdeps.ctrl.jobserver

extdeps_external_authority_live_clean_tree_holds() scans for a declaration
named specifically `extdeps_external_authority_anchor`; `ctrl_jobserver_authority`
was invisible to it, causing the corpus clean-tree test to fail.

Bug was introduced in #5663 (on main); CI on main was stalled (queued) so it
was not caught there. Verified green locally before push.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@briansrls
briansrls merged commit 0f681b0 into main Jun 24, 2026
2 checks passed
@briansrls
briansrls deleted the session/calm-otter-582 branch June 24, 2026 02:52
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