2eb3227ad0ec57fb259d12f754a183dfafb94de2
7
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ab2c567ea4 |
fix(robot): classify gate on BOTH update paths (conflict-first + behind-base) — code-path touch always waits for fresh CI; docs-only carries. Closes the #208 slip (merge on stale required-checks)
CI Pipeline / canary (push) Successful in 30s
CI Pipeline / best-practices (push) Successful in 3s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / gitea-offline (push) Successful in 14s
CI Pipeline / unit-tests (push) Successful in 54s
CI Pipeline / lint (push) Successful in 30s
CI Pipeline / type-check (push) Successful in 24s
CI Pipeline / required-checks (push) Successful in 1s
Auto-label / priority-gate (pull_request) Skipped
CI Pipeline / best-practices (pull_request) Successful in 3s
Auto-label / auto-label (pull_request) Successful in 3s
CI Pipeline / documentation (pull_request) Successful in 2s
CI Pipeline / canary (pull_request) Successful in 26s
CI Pipeline / lint (pull_request) Successful in 30s
CI Pipeline / type-check (pull_request) Successful in 26s
Spec gate (headless) / spec-gate (pull_request) Successful in 6s
CI Pipeline / gitea-offline (pull_request) Successful in 13s
CI Pipeline / unit-tests (pull_request) Successful in 47s
CI Pipeline / required-checks (pull_request) Successful in 1s
Auto-version and Release / release (pull_request) Failing after 10s
|
||
|
|
61f1ca63e8 |
feat(robot): conflict-first policy — staleness resolved immediately on mergeable=False (before any wait), 409 conflicts skip with reason; carry-forward race closed by re-verifying mergeable post-update (Nick policy: merges resolve in ~1min, then sleep)
CI Pipeline / best-practices (push) Successful in 4s
CI Pipeline / documentation (push) Successful in 2s
CI Pipeline / canary (push) Successful in 29s
CI Pipeline / lint (push) Successful in 33s
CI Pipeline / type-check (push) Successful in 25s
CI Pipeline / gitea-offline (push) Successful in 13s
CI Pipeline / unit-tests (push) Successful in 50s
CI Pipeline / required-checks (push) Successful in 1s
|
||
|
|
540f30b553 |
feat(pipeline): streamline — direct-commit version bumps, robot transient retry, extension guide (Nick policy, 2026-09-08)
## Bumps are bookkeeping, not reviewable code auto-version now commits the 5 version surfaces DIRECTLY to master via the contents API — no bump branch, no bump PR, no bump CI wave, no staleness cascade, no concurrent-bump race (230/231 proved it). In-memory gate: all 5 surfaces must agree on the new version BEFORE any commit (TUI footer renders rune.__version__ at call time — the displayed version IS __init__.py). Commit messages carry the provenance link to the earning PR. ## Robot: transient 405 'Please try again later' retried (3x backoff) Forge mergeability recompute was failing the robot on every merge burst — transient is 'not ready', not a refusal. Fail-loud applies to refusals and to exhausted retries (both paths tested). ## Future-proofing: docs/pipeline-extension-guide.md Placement decision tree (merge-deciding → required-checks; work → narrowest event; bookkeeping → direct commit), event-delivery quirk table (every entry learned by a live failure), per-type checklists, the three invariants. Registry links it. Any future agent reads the guide BEFORE adding a process. |
||
|
|
229bad13bd |
feat(robot): carry-forward policy — checks re-run only on contributed-code change (Nick's policy, 2026-09-08)
CI Pipeline / best-practices (push) Successful in 4s
CI Pipeline / documentation (push) Successful in 2s
Auto-label / priority-gate (pull_request) Skipped
Auto-label / auto-label (pull_request) Successful in 1s
CI Pipeline / canary (push) Successful in 28s
CI Pipeline / lint (push) Successful in 31s
CI Pipeline / unit-tests (push) Successful in 37s
CI Pipeline / type-check (push) Successful in 25s
CI Pipeline / gitea-offline (push) Successful in 13s
CI Pipeline / required-checks (push) Skipped
CI Pipeline / best-practices (pull_request) Successful in 2s
CI Pipeline / documentation (pull_request) Successful in 2s
CI Pipeline / lint (pull_request) Successful in 28s
CI Pipeline / canary (pull_request) Successful in 24s
Spec gate (headless) / spec-gate (pull_request) Successful in 6s
CI Pipeline / type-check (pull_request) Successful in 23s
CI Pipeline / gitea-offline (pull_request) Successful in 14s
CI Pipeline / unit-tests (pull_request) Successful in 36s
CI Pipeline / required-checks (pull_request) Successful in 0s
Behind-base self-heal previously forced a full CI re-run even when the update's tree diff touched no code path — redundant by construction (identical code-path trees cannot produce different test outcomes). - merge_robot emits UPDATED protocol line after self-heal - scripts/carry_forward_check.py classifies the tested-head→new-head tree diff: CARRY_FORWARD (docs-only) vs RERUN_REQUIRED (any code-path touch) - workflow consumes it: CARRY_FORWARD republishes the required-checks aggregate citing tree identity; RERUN_REQUIRED waits for CI as today - policy recorded: first pass = full pipeline; base movement with unchanged code paths = carry; bugs/mistakes = new commits = full re-run Red-first: 2 new tests (classification + companion script contract). |
||
|
|
e637b676b3 |
fix(robot): self-heal behind-base PRs — update via API and retry merge; 409 conflict skips with reason (red-first)
CI Pipeline / best-practices (push) Successful in 2s
CI Pipeline / documentation (push) Successful in 2s
CI Pipeline / lint (push) Successful in 29s
CI Pipeline / canary (push) Successful in 24s
CI Pipeline / type-check (push) Successful in 24s
CI Pipeline / unit-tests (push) Successful in 35s
CI Pipeline / gitea-offline (push) Successful in 14s
CI Pipeline / required-checks (push) Skipped
THE INEFFICIENCY (Nick): every master movement staled every other open PR;
the robot SKIPPED them; a human worktree dance updated branches by hand; CI
re-ran; the next auto-bump staled everything again. Loop documented across
the whole session (round-1/round-2 'behind-base update' commits).
Fix: the robot performs POST /pulls/{n}/update itself on 405-behind, then
retries the merge. Skips only genuine conflicts (409). The forge heals its
own staleness — no agent, no human.
- test_behind_base_pr_is_updated_then_rechecked (new contract)
- test_update_conflict_409_skips_not_fails
- test_behind_base_405_self_heals_then_merges (supersedes old skip contract)
- suite: 13 robot tests green
|
||
|
|
61485e2fdc |
fix(pipeline): merge-robot identity check hits instance root /user, handles non-JSON error bodies
CI Pipeline / best-practices (push) Successful in 3s
CI Pipeline / documentation (push) Successful in 2s
CI Pipeline / lint (push) Successful in 26s
CI Pipeline / canary (push) Successful in 29s
CI Pipeline / type-check (push) Successful in 22s
CI Pipeline / unit-tests (push) Successful in 35s
CI Pipeline / gitea-offline (push) Successful in 13s
CI Pipeline / required-checks (push) Skipped
Auto-label / priority-gate (pull_request) Skipped
Auto-label / auto-label (pull_request) Successful in 2s
CI Pipeline / best-practices (pull_request) Successful in 4s
CI Pipeline / documentation (pull_request) Successful in 2s
CI Pipeline / lint (pull_request) Successful in 27s
CI Pipeline / canary (pull_request) Successful in 30s
CI Pipeline / type-check (pull_request) Successful in 22s
CI Pipeline / unit-tests (pull_request) Successful in 35s
CI Pipeline / gitea-offline (pull_request) Successful in 14s
CI Pipeline / required-checks (pull_request) Successful in 1s
Red-first discharge (#214 follow-up): verify_identity built a repo-scoped URL (.../repos/o/r/user -> 404 plain-text body) which crashed json.loads before MergeRefused could fire — the robot never ran successfully since #211. Three stacked defects: missing checkout (#214), reserved-secret auth (#213), and repo-scoped identity URL (this commit). - verify_identity now derives the instance root itself (defense in depth: never trust caller scope) - _api converts non-JSON error bodies into MergeRefused instead of an unhandled JSONDecodeError - 2 red tests added first, frozen green; suite 615+84 |
||
|
|
7402a68095 |
fix(pipeline): merge-robot fails loudly on refusals, verifies token identity, extracted testable script — red-first discharge of the silent no-op (bug-fix contract) (#147)
Auto-label / priority-gate (pull_request) Skipped
Auto-label / auto-label (pull_request) Successful in 2s
CI Pipeline / lint (push) Successful in 24s
CI Pipeline / unit-tests (push) Successful in 32s
CI Pipeline / canary (push) Successful in 26s
CI Pipeline / best-practices (push) Successful in 2s
CI Pipeline / documentation (push) Successful in 2s
CI Pipeline / type-check (push) Successful in 22s
CI Pipeline / gitea-offline (push) Successful in 13s
CI Pipeline / required-checks (push) Skipped
CI Pipeline / lint (pull_request) Successful in 23s
CI Pipeline / unit-tests (pull_request) Successful in 31s
CI Pipeline / canary (pull_request) Successful in 30s
CI Pipeline / best-practices (pull_request) Successful in 3s
CI Pipeline / documentation (pull_request) Successful in 2s
CI Pipeline / type-check (pull_request) Successful in 21s
CI Pipeline / gitea-offline (pull_request) Successful in 13s
CI Pipeline / required-checks (pull_request) Successful in 0s
|