Repository navigation
Owned CI control plane v0: poll-first queue, executor, Checks projection - #7957
gunbai-bot[bot] wants to merge 26 commits into
Conversation
Response to review 49764 (cursor/composer-2.5)1. Hard-coded 2. Modeled 3. 4. Executor ignoring 5. Missing scaffold marker — fixed (b97d26b). — sent from quick-bear-899 |
Response to review 49792 (commit
|
Response to review 49838 (commit
|
Response to review 49852 (commit
|
Response to review 49870 (commit pending push)Finding 1 — Finding 2 — Finding 3 — dead
— sent from quick-bear-899 |
Response to review 50025 (cursor/composer-2.5)Verified against Fixed in code
— sent from quick-bear-899 |
Response to review 50045 (cursor/composer-2.5)Verified on Fixed in code
Mirror polling, ledger keys, PR filtering, and modeled identity now share one branch fact. review 50042 (claude-opus-4-7, APPROVE)No blocking items in the verdict artifact; no code change required from that review. — sent from quick-bear-899 |
Response to review 50059 (cursor/composer-2.5)Fixed in code
— sent from quick-bear-899 |
…jection. Introduces medium-neutral CiExecutionPlan carriers from ci_spec (not ci.yml), a poll-first ci_control_plane daemon with durable queue and lease reclaim, GitHub Checks create/update, and /ci serve routes for run receipts. Co-authored-by: Cursor <cursoragent@cursor.com>
…old marker. Load repo/stages/floor plan from gunbc.owned_ci_seed via eval; persist ledger before check create; mark CheckPublicationPending on API failure without duplicate enqueue; document seed REST transport as dissolve-on scaffold. Co-authored-by: Cursor <cursoragent@cursor.com>
…nesty. Ground lease duration on std.measure.Second and queue expiry on NumericDate; load state root and lease seconds from gunbc.owned_ci_seed in the Rust bin; fix unpublished-completed conclusion mapping and UpdateRun wire encoding; dissolve ci_subject_is_fork_refused Bool predicate into direct coproduct match. Co-authored-by: Cursor <cursoragent@cursor.com>
Drop dead failed/completed ternary on queue move (always completed dir); remove tautological Rust unit tests — decision procedure stays in .dag witnesses. Co-authored-by: Cursor <cursoragent@cursor.com>
Propagate system-clock errors from now_unix instead of fabricating 0; persist fork PR refusals to index/run ledger so the /ci UI can observe them. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace Bool lease expiry with typed reclaim/validity decisions that carry LeaseClockRefused for fractional NumericDate arms; witness the refusal. Co-authored-by: Cursor <cursoragent@cursor.com>
Delete undocumented OWNED_CI_POLL_MAIN_ONLY escape hatch; model PR poll GitHub-read admission in owned_ci.dag with witness_poll_without_github_read_refuses; route Rust refusal strings through owned_ci_seed. Co-authored-by: Cursor <cursoragent@cursor.com>
ci_subject_head_sha returns CommitSha? with Absent for ForkPullRequestRefused instead of empty-string sentinel; witness enrolled in bundle. Co-authored-by: Cursor <cursoragent@cursor.com>
Skip claim/lease in --dry-run (peek-only log); route publication success through check_conclusion_is_success; delete unused CiRunStage* types. Co-authored-by: Cursor <cursoragent@cursor.com>
Seed-retained intrinsic was missing from frontier and stage0 crate layout, so regen_verify stripped pub mod ci_control_plane from lib.rs and CI regen failed. Alphabetical ci_control_plane before cli_run matches rustfmt and frontier order. Co-authored-by: Cursor <cursoragent@cursor.com>
…causes. Follow GitHub Link rel=next with per_page=100 and refuse when pagination cannot complete; pass through actual check-update errors at completion instead of a canned API-unavailable string. Co-authored-by: Cursor <cursoragent@cursor.com>
…yloads. Missing or empty GITHUB_TOKEN refuses PR discovery only; main mirror subjects still reconcile. Malformed open-PR API rows fail closed with a typed cause recorded in the subject ledger instead of silent continue. Co-authored-by: Cursor <cursoragent@cursor.com>
Model owned_ci_run_id_admits in .dag (path_segment_is_safe plus {unix}-{8hex}
grammar), gate serve_ci_run_detail_response, mirror validation in the seed
reader, and harden write_json_atomic with pid-scoped tmp files plus parent fsync.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove dead page_render_refusal_body import from roadmap_static_site and stop importing gunbc.roadmap_serve (cycle through roadmap_serve_witness). Inline owned_ci_serve_text/page_response helpers locally instead. Co-authored-by: Cursor <cursoragent@cursor.com>
Poll path compares GitHub base.ref to gunbc_default_branch_name from seed authority; non-main same-repo PRs are ledger-recorded refusals (not enqueued). Adds ci_pull_request_targets_merge_branch, witness, and Rust unit tests. Co-authored-by: Cursor <cursoragent@cursor.com>
ci_subject_identity_key, mirror fetch, and push-subject discovery use gunbc_default_branch_name via seed authority instead of hardcoded "main". Co-authored-by: Cursor <cursoragent@cursor.com>
Prior run 31155607568: v1-compiler compiled; v1-compiler-tests failed spawning rustc via sccache (os error 11). No code change. Co-authored-by: Cursor <cursoragent@cursor.com>
dry_run skips GitHub REST PR poll (mirror-only discovery); --enqueue-rerun-sha realizes v0 OperatorRerun with rerun:<sha> keys. Witnesses and design doc updated. Co-authored-by: Cursor <cursoragent@cursor.com>
owned_ci_classify_filesystem_text uses Filesystem.Read success vs empty content instead of conflating missing and empty into Optional Absent. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace curly-brace grammar placeholders in prose with angle brackets so compile-clean does not treat run_id/unix_seconds as undefined bindings. Co-authored-by: Cursor <cursoragent@cursor.com>
Malformed pull payloads refuse at poll boundary instead of defaulting to empty and mislabeling as fork refusal; unit test added. Co-authored-by: Cursor <cursoragent@cursor.com>
update_index_row and move_queue_file return typed errors when the expected row or queue file is absent instead of succeeding unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
Extend owned_ci_control_plane_seed_note to name JSON↔.dag coproduct unification and key-grammar eval alongside the REST bridge; register poll_interval Rust-only debt. Co-authored-by: Cursor <cursoragent@cursor.com>
Add QueueRefused to CiRunQueueState with witness; key target summary receipts by run_id under target/owned-ci-run-receipts/. Co-authored-by: Cursor <cursoragent@cursor.com>
The v0 design note was added on this branch without a HandAuthoredDocBind, so doc_reachability flagged it as an orphan on the discovery-corpus floor. Co-authored-by: Cursor <cursoragent@cursor.com>
1d242e3 to
635aa78
Compare
|
Closing: this lane is consolidated into #8016 ( #7939's carriers are the one unresolved item — they conflict — sent from deep-badger-594 |
Summary
build → regen → floorin a single exact-SHA worktree, append-only receipts, GitHub Checks projection).CiExecutionPlanfromgunbc.ci_spec/ floor plan — notci.ymlparsing.extdeps.github.checksCreateRun / UpdateRun;/ci,/ci/runs.json,/ci/run/{id}on gunbc-served surface.ci_control_planewith explicit §7 scaffold markers (OWNED_CI_CONTROL_PLANE_SEED_SCAFFOLD_MARKER,gunbc.owned_ci_seed).What this PR does NOT do (v0 boundary)
ureqfor Checks/pulls REST; Rust JSON carriers parallel to.dagcoproducts;validate_run_idvsowned_ci_run_id_admitseval; subject-keyformat!vsci_subject_identity_key.Policy highlights
GITHUB_TOKEN; missing token or API failure refuses the poll and records cause in the ledger — does not infer zero PR subjects (witness_poll_without_github_read_refuses).queue/pending(witnessed).CheckPublicationPending(never fabricated published success).dry_run: skips GitHub REST and executor; queue stays pending.Design
docs/plans/owned-ci-control-plane-design.md(registered ingunbc.doc_graph_roots).Test plan
cargo test -p v1-compiler --lib ci_control_plane::testsowned_ci_witness_test.dagbundle + doc reachability (GitHub Actions run on PR)