Repository navigation
Slice A: GitHub Checks + merge-state extdeps shapes (dashboard shadow lane) - #5629
Conversation
…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>
…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>
…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>
|
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 |
|
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 |
…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>
…ntract placement rule Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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/`:
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:
CI floor: `claim_executor --source-root src/v2 --source-root dsl ...`
Lane plan: `docs/plans/dashboard-shadow-plan.md`