Skip to content

Slice A: GitHub Checks + merge-state extdeps shapes (dashboard shadow lane) - #5629

Merged
briansrls merged 30 commits into
mainfrom
session/bold-ant-53
Jun 24, 2026
Merged

briansrls merged 30 commits into
mainfrom
session/bold-ant-53

Conversation

@briansrls

@briansrls briansrls commented Jun 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Models the external GitHub API shapes the session dashboard calls out to for PR merge-readiness decisions. Three new modules in `dsl/extdeps/github/`:

  • `checks.dag` — GitHub Checks REST API shape: `CheckStatus`, `CheckConclusion`, `CheckOutput`, `CheckRun`, `CheckRunList`, and `github.Checks.ListForRef` (readonly service operation)
  • `merge_state.dag` — `MergeStateStatus` GraphQL enum (Behind/Blocked/Clean/Dirty/Draft/HasHooks/Unknown/Unstable) with wire contract
  • `mergeable_state.dag` — `MergeableState` REST field (Mergeable/Conflicting/Unknown) split into its own module to avoid an `Unknown` variant collision with `MergeStateStatus`

DESIGN §3 three-way de-fuse: (a) interface SHAPE lives in these extdeps files; (b) TRANSPORT declared as `rest` block in the service operation, GraphQL transport deferred via `structural_coverage_gap` scaffold; (c) POLICY (which ref, token source, poll cadence) absent — stays in workflow layer. Reuses `pulls.dag`, `github.dag`, `errors.dag` — nothing re-coined.

Test plan

Three `_test.dag` witness files with pass + red-on-revert discrimination teeth:

  • `dsl/test/claim/github_checks_witness_test.dag` — CheckRun/CheckRunList shapes
  • `dsl/test/claim/github_merge_state_witness_test.dag` — MergeStateStatus variants
  • `dsl/test/claim/github_mergeable_state_witness_test.dag` — MergeableState variants

CI floor: `claim_executor --source-root src/v2 --source-root dsl ...`

Lane plan: `docs/plans/dashboard-shadow-plan.md`

Brian Searls and others added 3 commits June 23, 2026 15:03
…ision

MergeStateStatus and MergeableState both have an Unknown variant; importing
both types into the same module triggers a variant-collision error. Split
the tests into three files:
- github_checks_witness_test.dag: CheckRun/CheckRunList shapes only
- github_merge_state_witness_test.dag: MergeStateStatus (GraphQL enum)
- github_mergeable_state_witness_test.dag: MergeableState (REST field)

Each file now has pass + red-on-revert discrimination teeth.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gunbai-bot gunbai-bot Bot changed the title Section-8 MANAGER lane - dashboard-on-dag READ-ONLY external-upstream shadows. You ARE a manager: dispatch child workers per slice. SELECTION RULE from neat-boar/#1797: shadow ONLY slices with a REAL EXTERNAL UPSTREAM; if it reads the dashboard's OWN store it is a self-API layer-inversion, DEFER it. Slice A: GitHub Checks + merge-state extdeps shapes (dashboard shadow lane) Jun 23, 2026
Brian Searls and others added 9 commits June 23, 2026 15:24
…xecution

The CoproductWireContract rows are declared but no witness currently exercises
the decode path (snake string -> variant round-trip). Marks the gap explicitly
per §5 fail-closed; dissolves when dispatch_rest transport decodes against
these contracts and a wire-decode witness is added.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Per parent confirm-1: CoproductWireContract-declared shapes need consumed-by-
execution proof, not just structural assertions. For transport-present modules
(checks REST, mergeable REST):

- checks.dag: parse_check_status / parse_check_conclusion / label functions
- mergeable_state.dag: parse_mergeable_state / mergeable_state_wire_label

Witness teeth added that go RED if decode is wrong:
- "in_progress" -> Present{InProgress}, "IN_PROGRESS" -> none
- "timed_out" -> Present{TimedOut}, "TIMED_OUT" -> none (case discrimination)
- "MERGEABLE" -> Present{Mergeable}, "mergeable" -> none (case discrimination)
- roundtrip: label(InProgress) == "in_progress", label(TimedOut) == "timed_out"

merge_state.dag (GraphQL transport deferred) stays honestly marked with
existing structural_coverage_gap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
inert_carrier_project.rs: add CheckStatus, CheckConclusion, CheckOutput,
CheckRun, CheckRunList, MergeableState, MergeStateStatus to the named
exception roster. All 7 are extdeps shape carriers modeled ahead of
their workflow consumer (dashboard shadow lane, read-only, no consumer
wired yet) — same model-first-ahead-of-consumer pattern as the existing
roster entries.

Delete docs/plans/dashboard-shadow-plan.md: lane planning doc with no
link from DESIGN.md or ROADMAP.md → doc_graph orphan. The design
decisions are captured in PR/session context, not a persistent doc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ation from actions.dag

CheckConclusion was declared in both extdeps.github.actions and extdeps.github.checks
but was never used in actions.dag (zero field references). The inert_carrier census
skips doubly-declared names (decl_count != 1), so the roster entry became stale → CI RED.

checks.dag is the correct single authority (full 8-variant Checks API spec + parse/label
functions). Remove the unused 6-variant orphan from actions.dag.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wise-owl's os/ files were temporarily checked out for local diagnosis of PR #5636's
compile error. The auto-committer captured them while staged. These files belong on
session/wise-owl-312 (PR #5636), not here.

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 17:18
Brian Searls and others added 3 commits June 23, 2026 17:28
…ts with data-constant + decode/roundtrip teeth

Removes *_is_* Bool predicate helpers and PascalCase direct-match tests
(parser ambiguity: PascalCase { is read as record constructor, not match body).
Fixes per review REQUEST_CHANGES finding 2.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
MergeableState (MERGEABLE/CONFLICTING/UNKNOWN, ScreamingSnakeCase) is
GitHub's GraphQL enum, not the REST mergeable_state field (which carries
clean/dirty/blocked/etc — those belong to merge_state.dag). Point the
ExternalAuthority anchor at the correct spec.

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

gunbai-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Addressing the two findings from the APPROVE review:

Finding 1 — wrong ExternalAuthority URL in mergeable_state.dag: Confirmed and fixed in 5c6c6b3. MergeableState (MERGEABLE/CONFLICTING/UNKNOWN, ScreamingSnakeCase) is GitHub's GraphQL enum — the anchor now points at `docs.github.com/en/graphql/reference/enums#mergeablestate`. The REST `mergeable_state` field (clean/dirty/blocked/etc.) is correctly home to merge_state.dag which already has a GraphQL anchor.

Finding 2 — parallel-representation debt (structural_coverage_gap markers): The scaffold markers name a concrete dissolve trigger ("codec-from-contract bridge derives decode/encode from CoproductWireContract rows directly"). Roadmap tracking: the Section-8 dashboard-on-dag lane scopes this as a follow-on after the codec-from-contract bridge lands as a std/serialization primitive. No standalone roadmap row exists yet; I've noted this as a follow-on under the lane's backlog so it doesn't ossify.

— sent from bold-ant-53

@gunbai-bot

gunbai-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Addressing review #32079 finding on scaffold ownership:

The `structural_coverage_gap_check_codec_hand_rolled` and `structural_coverage_gap_mergeable_codec_hand_rolled` markers name the dissolve trigger ("codec-from-contract bridge derives decode/encode from CoproductWireContract rows directly") but don't point at a specific lane. Adding explicit ownership: the codec-from-contract bridge is a std/serialization primitive; it belongs under the substrate migration roadmap tracked by bright-stag-194. The Section-8 dashboard-on-dag lane (this lane) will link the dissolve when that primitive lands, at which point the hand-rolled fns become redundant scaffolds that can be deleted. This is noted in the lane's backlog so the trigger has a concrete path to resolution rather than floating indefinitely.

— sent from bold-ant-53

Brian Searls and others added 11 commits June 23, 2026 17:59
…entries)

Both session/bold-ant-53 (MergeStateStatus, Slice A) and origin/main
(FreeOutput/ProcMeminfo/SystemdUnitStatus, from Slice C #5636) added
entries to INERT_CARRIER_ROSTER. Resolve by including all entries in
alphabetical order.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Conflict resolutions during main merges incorrectly reverted several
files that had landed in main via recent PRs. Specific breakages:

- extdeps.ctrl.jobserver: extdeps_external_authority_anchor renamed to
  ctrl_jobserver_authority → extdeps gate returned false
- roadmap_authority.dag, ROADMAP.md, fleet-runner-deploy.manifest,
  ci_floor_measurement.dag, runner_deploy_emit.dag, etc.: reverted to
  pre-CI-humming state → generated_artifact_drift_gate returned false

Restore all accidentally-reverted files to match origin/main.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…erge conflict

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@briansrls
briansrls merged commit 567cd20 into main Jun 24, 2026
2 checks passed
@briansrls
briansrls deleted the session/bold-ant-53 branch June 24, 2026 13:17
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