Commit graph

43 commits

Author SHA1 Message Date
Peter Steinberger
9c29902212
fix(pr): review-init fails with a client credential custody error on pre-cutover PR registries (#179173)
* fix(pr): migrate pre-cutover PR registries from extracted wrapper sources

scripts/pr review-init failed in [pr-worktree-provision] with "Client
credentials require backed-up migration custody" when the private PR
registry (<canonical>/.local/pr-state) predated the client-credential
cutover.

The trusted-anchor wrapper extracts only scripts/pr, scripts/pr-lib and
wrapper-components.txt. The state preflight forks
src/state/openclaw-agent-schema-inspection.worker.ts, which was not
listed, so the child exited 1 and the preflight reported the registry as
indeterminate. preparePrStateSchema only consulted pendingMigrations,
returned early, and the allocation lease's ordinary open then ran the
v28->v29 cutover without maintenance custody or a backup capture.

- List the forked runtime children wrapper code can launch. The
  PostgreSQL bridge stays out: wrapper processes never install a
  PostgreSQL engine selection and pg is not a pinned wrapper dependency.
- Make the PR wrapper inventory check follow
  resolveRuntimeProcessEntrypointUrl references.
- Send an indeterminate state preflight through the existing guarded
  doctor-preparation instead of treating the store as current.
- Regression: run the real provisioner from extracted wrapper sources
  with the inspection child removed; the v28 registry must migrate.

* test: collect forked entrypoint names without map spread

* fix(pr): drop wrapper inventory entry deleted on main
2026-10-22 18:34:00 -07:00
Peter Steinberger
bbcb1bac9d
fix(scripts): compare orphaned PR clones with their seed (#181041)
Template caches refresh in place, so their current index is not the failed clone baseline. Check the retained PR seed through a private refreshed index, keeping dirty or untracked content and refusing missing seed metadata.
2026-10-22 15:58:20 -07:00
Peter Steinberger
6893519fbd
fix(scripts): recover failed PR template clones (#181022)
Remove a settled newly-created clone when its PR registration is lost, preserving the caller seed and checking rollback authority. Recover older proven template clones through native entry and scoped gc, while preserving local edits, review artifacts, live checkouts, and ambiguous metadata.
2026-10-22 22:22:19 +00:00
Vincent Koc
17416f83ec
fix(tooling): run line-cap hooks in code-only worktrees (#180859) 2026-10-22 15:12:40 -07:00
Peter Steinberger
3a4c80c4c5
fix(scripts): PR wrapper leaks materialized trust-anchor dirs in TMPDIR on failures and interrupts (#180848)
* fix(scripts): retire materialized PR anchors on every exit path

Materialized wrappers were retired only after fully clean supervised exits,
leaking code and dependency links on failures, signals, bootstrap exits,
unsupervised commands, and failed execs.

Keep creator ownership across the Bash and supervisor exec chain. Share
FD/path/PID identity checks, retire drained operations independently of PR
lock decisions, and restore cleanup after Bash 3.2 failed execs. Retain code
for undrained operations and sweep at most four old owned anchors at startup
using creator PIDs in new names.

PID reuse conservatively delays sweeping. Legacy names have no liveness
record and may be reclaimed after 24 hours even during a long operation.
Drained cleanup accepts the same fd-closing escapee residual as clean exits;
missing runtime or ownership evidence remains retain-only.

Cover lifecycle exits, crash-retained recovery fixtures, dependency pinning,
and bounded stale sweeping without changing lock recovery semantics.

* docs(scripts): name the stale-anchor sweep residual

A dead creator PID is the sweep's only evidence that an operation ended. Descendants that outlive a crashed or undrained supervisor by more than 24 hours can lose their anchor; their PR lock stays retained. Also replace the busy loop in the forwarded-SIGTERM supervisor test with sleep.
2026-10-22 11:15:59 -07:00
Peter Steinberger
69716f2c5b
fix: reconcile completed CI security reviews (#180808)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-10-22 10:30:38 -07:00
Vyctor H. Brzezowski
6cc6258446
fix(pr): recover rejected admin merges with current tooling (#179545) 2026-10-21 14:14:47 +00:00
Peter Steinberger
b62002ee1b
fix(pr): admin landings stall after Security Review workflow updates (#179392)
* fix(pr): admit current security publishers after main advances

* fix(pr): qualify owner sources before local materialization
2026-10-21 04:11:13 -07:00
Jason (Json)
649f269e44
fix: allow native PR landing without classic-policy visibility (#178594)
* fix: allow native PR landing without classic-policy visibility

* test(pr): align merge fixtures with applicable rules
2026-10-20 11:30:42 -07:00
RoboClaw
50520de188
fix: preserve coauthor credit during PR baseline refresh (#177774)
Reuse Git trailer formatting for source coauthor credit in both native signed candidates and signing requests. Keep binding, signature and live authority validation unchanged.

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
2026-10-19 22:40:20 +00:00
Vincent Koc
c82110895d
fix(pr): keep the reviewed workflow stable between maintainer commands (#167350)
* fix(pr): retain the admitted workflow across maintainer commands

* fix: refresh the reviewed correction baseline

Baseline-Refresh: a89bd166b79d54b343b93ad374f8ebfa4f3d1163

* fix(pr): preserve cold workflow admission and repository identity

* chore(pr): integrate canonical main CI repair

* commit '08e32fdb4d': (52 commits)
  test(gateway): restore local probe deferred import
  fix(agents): release prompt diagnostics for retired sessions (#177614)
  fix(release): tag restart plugin cohorts consistently (#177725)
  refactor(ui): inline single-caller detail requests (#177705)
  chore(i18n): refresh native locales (#177721)
  refactor(codex): drop unread private runtime reports (#177689)
  refactor(ui): consolidate static artwork registries (#177692)
  refactor(ui): derive settings schema analysis in the view (#177624)
  refactor(media): consolidate capability defaults and compression grids (#177665)
  refactor(auth): bind OAuth managers to native provider operations (#177676)
  refactor(ui): remove redundant component rendering layers (#177607)
  fix(ios): model sign-in is a permanent row under the composer instead of an item in the model menu (#166082)
  fix(agents): report failed secret input prompt delivery (#177688)
  refactor(ui): share chat message render contracts (#177668)
  fix(ui): settle model status after overlapping publication (#177667)
  refactor(gateway): reuse native workspace and lifecycle facts (#177670)
  refactor(runtime): rely on canonical async lifecycle owners (#177635)
  refactor: fold private operation helpers into their callers (#177655)
  refactor(ui): remove unused chat leaf element adapters (#177582)
  perf(talk): use published authority for foreign voice writes (#177533)
  ...

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-10-20 06:31:56 +08:00
Jason (Json)
47bc52e909
fix: honor maintainer-directed landing with unrelated CI failures (#177767) 2026-10-19 15:17:25 -07:00
Vincent Koc
69a7f23fc5
fix(pr): recover published corrections after baseline refreshes (#177070) 2026-10-19 15:20:26 +08:00
Vincent Koc
f10f35290f
fix(pr): recover retained tooling dependency pins (#176047)
* fix(pr): recover retained tooling dependency pins

* test(pr): capture native Node runtime under Bun
2026-10-18 04:04:46 +00:00
Vincent Koc
0f2545d81d
fix(pr): recover clean replacement heads after admin intents (#175573) 2026-10-17 21:55:06 +08:00
Vincent Koc
6598d8b24a
fix(pr): hash captured snapshots through read-only stdin (#173899)
* fix(pr): hash captured snapshots through read-only stdin

* fix(ui): remove unused LitContent import
2026-10-16 14:52:37 +08:00
Peter Steinberger
4f3e79a3c1
fix(pr): poll mergeability without repeating full inventories (#173442)
* fix(pr): poll mergeability without repeating full inventories

Wait on projection hints between complete observations while preserving exact-head, policy, main-composition, and final live-authority checks. Keep the existing settlement and authority deadlines.

* fix(pr): preserve GraphQL polling and REST fixture boundaries

* test(pr): schedule initial REST settlement independently
2026-10-15 15:09:09 -07:00
Peter Steinberger
0ee67b8da3
fix(pr): observe requalification before carried deadline
Prior-CI requalification could discard a freshly qualified REST projection
before consuming it when the carried UNKNOWN clock had expired. While
landing #173401 this claimed UNKNOWN after zero observations despite the
REST diagnostic reporting mergeable=true and blocked.

Consume the first projection of each round before the pre-read deadline
check. Keep the independent post-read 60-second expiry, local Git proof
accounting from #173283, and the 900-second/32-round authority ceiling.
An expired remote budget still refuses admission after the observation;
there is no deadline reset or change to live authority or dispatch.

Extend the existing 197-second local-proof / 61-second remote-read case
with the exact one-observation diagnostic. It reproduced the zero-read
refusal before this fix; all original no-dispatch assertions remain.

Validation: 121 tests pass across the complete merge-outcome and prior-CI
main-drift suites; the six delayed-proof controls also pass. Targeted
tooling types, typed lint, Bash syntax, ShellCheck and formatting pass.
Independent P2 review is clean.
2026-10-15 13:53:55 -07:00
Peter Steinberger
8155335ba3
fix(pr): preserve mergeability budget through local proof (#173283)
* fix(pr): preserve mergeability budget through local proof

* test(pr): bind settlement assertions to elapsed waits
2026-10-15 12:17:34 -07:00
Vincent Koc
08337ee121
fix(pr): allow baseline integration from reviewed incoming heads (#172905)
* fix(pr): allow baseline integration from reviewed incoming heads

* fix(pr): share incoming review validation without an import cycle
2026-10-15 08:09:02 +00:00
Dallin Romney
aade2f8dfe
fix: distinguish workflow approval and exception capabilities (#172661) 2026-10-14 18:07:10 -07:00
Peter Steinberger
a10ae12e01
fix(pr): accept committed renamed conflict resolutions (#172435)
Bind retained conflict stages to their immutable merge or rebase resolution and accept an exact mode/blob match through a Git-detected rename source. Preserve the committed index check and refuse unowned stages without mutating the index.
2026-10-14 17:58:54 -07:00
Peter Steinberger
d866ef3baf
fix: avoid redundant PR head fetching during preparation (#172554) 2026-10-14 16:00:27 -07:00
Peter Steinberger
12fe41e221
fix: honor Crabbox lease lifetimes and require 0.77.0 (#172442)
* fix: require confirmed cleanup for Crabbox PR gates

* fix: require Crabbox 0.77 at managed entry points

* fix: honor effective Crabbox lease lifetime during capture

* fix: correct Crabbox lease troubleshooting commands

* docs: explain bounded Crabbox worker lifetimes

* test: align Crabbox lifecycle fixtures with lease policy
2026-10-14 14:05:53 -07:00
Peter Steinberger
be067e9edd
fix(pr): keep admin landing live on a busy main (#172069)
* fix(pr): keep admin landing live on a busy main

* fix(pr): bound failed reads and refresh admission fixtures

* fix(pr): revalidate review and security after final observation

* fix(pr): keep final inventory fresh and timeout retries usable

* fix(pr): start admission settling at the first unknown result

* fix(pr): recheck effective policy after security qualification

Restore the final policy read after awaited security work so a delegated CI-only grant cannot bypass newly tightened requirements. Cover the allowed pinned dispatch and policy-tightening refusal through the native admission owner.

* docs(pr): align admin admission retry limits
2026-10-14 10:35:08 -07:00
RoboClaw
dca28bccbb
fix: prevent PR landing stalls on empty check suites (#171720)
Prove unrepresented suites from complete batched check-run evidence and a stable full suite inventory, retaining the 1,000-suite limit and final authority checks.

Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
2026-10-14 04:42:14 +00:00
Peter Steinberger
35ba90be5a
fix(pr): stream tooling-root refresh output so far-behind roots refresh (#171628)
The tooling-root refresh ran `git fetch` and `git merge --ff-only`
through the capturing Git helper (execFileSync, 1 MiB default buffer).
A root ~4,200 commits behind fast-forwarded, then its diffstat overflowed
the buffer (spawnSync git ENOBUFS), aborting before
`pnpm install --frozen-lockfile`.

Stream both mutating steps to stderr and skip the merge diffstat. The
clean-main rechecks, single-refresh rule, and canonical-checkout refusal
are unchanged. Regression: a post-merge hook emits 1.2 MB during the
fast-forward; the old wrapper fails with the incident's ENOBUFS.
2026-10-13 21:37:56 -07:00
Peter Steinberger
e5f45c0acd
fix: recover immediate merge failures after GitHub checks pass (#171238)
* fix: allow confirmed recovery after immediate merge failure

Permit an unaccepted same-head immediate attempt to reuse its exact-head GitHub preparation only after required checks pass and CLEAN admission. Preserve review, evidence, outcome, and capture bindings.

* fix: preserve pending gate diagnostic wording
2026-10-13 12:00:16 -07:00
Vincent Koc
584074cab6
fix(pr): exclude admitted baseline history from signature checks (#171184) 2026-10-14 01:28:41 +08:00
Peter Steinberger
8aee8ad90f
fix(pr): admit superseded-only UNSTABLE heads under merge-run --auto-merge (#171192)
GitHub's statusCheckRollup and mergeStateStatus keep cancelled runs that a
newer run of the same workflow/event/job name superseded on the same head
(pull_request_target lanes such as ClawSweeper Dispatch draft `opened` runs
after `ready_for_review`, and Labeler). After openclaw/ci-gate passes, those
PRs are MERGEABLE/UNSTABLE and --auto-merge admission refused them.

--auto-merge now selects the immediate squash route for MERGEABLE/UNSTABLE
only after one fresh scripts/watch-pr-ci.mjs --completion rollup --once pass
at the exact prepared head exits GREEN. The watcher's classifyRollup stays
the single supersession owner and the pass also requires the attached ci.yml
run to succeed; any unsuperseded failure, hidden or paginated context, missing
run identity, pending check, moved head, or watcher error keeps refusing.

The watcher gains an opt-in --once flag: one attach and one watch observation
without waiting, with --timeout bounding only that pass's evidence reads.

This is a one-shot admission predicate, not a pinned snapshot fact: required
checks stay server-enforced at dispatch, the exact-head mutation pins the
head, and the final stability reread pins the UNSTABLE projection. Pinning
rollup contexts would extend the Octopool-allowlisted landing snapshot and
the retained-outcome schema. Accepted edge case, documented in
merge-admission.md: a new non-required failure on the same head between the
pass and dispatch is not rechecked.

Measured 2026-10-13: 8 of 80 recently merged final heads (e.g. #170738,
#170733, #170675, #170627) had only superseded same-lane cancellations;
classifyRollup classifies all four examples GREEN.
2026-10-13 10:22:06 -07:00
Vincent Koc
767549b2ec
fix(pr): allow baseline refreshes after publication (#171100) 2026-10-13 14:57:56 +00:00
Peter Steinberger
a372ae280d
fix(ci): report all selected failures in one PR run (#170642)
* fix(ci): report all selected failures in one PR run

Finish independent checks after diagnostic failures on upstream, forks, and retries. Preserve producer, cleanup, cancellation, and watchdog dependencies; failing runs intentionally use more runner time.

* test(ci): align workflow fixtures with failure collection

Update synthetic harnesses and condition contexts to retain real producer prerequisites while asserting that all admitted checks finish after ordinary failures. Correct the old early-stop expectations exposed by PR CI run 38347327272.

* test(ci): isolate runner fixture modes from the host environment

Use one shared fixture environment builder to remove inherited CI,
GITHUB_ACTIONS, and the retired continuation switch. Cases that exercise
CI scheduling opt in explicitly. Keep main's incomplete-report
infrastructure exit 2, and prove complete failed CI reports retain exit 1.

Reuse the existing suite-level prepared compiler for bounded reader
fixtures while preserving the original CLI, runtime and AI build admission,
reader receipts, generation ownership, cleanup, and unchanged deadlines.

Validate only the touched fixture files in both plain and CI environments.
Production code is unchanged.

* test(ci): correct native failure expectation and touched-file lint

* fix(ci): drain explicit local failed-test reruns

* fix(ci): preserve sparse runner imports and terminal test contracts
2026-10-13 05:18:36 -07:00
Vincent Koc
7c72968482
fix(scripts): preserve local fixes after correction publication (#171017)
* fix(scripts): continue corrections after native publication

* test(scripts): complete continuation publication fixture
2026-10-13 12:12:54 +00:00
Vincent Koc
7a45c8a7d6
fix(pr): support baseline signing on another host (#170991) 2026-10-13 11:43:36 +00:00
Peter Steinberger
aea10c9d20
fix: preserve diagnostics for unresponsive state lease heartbeats (#170835)
Record phase, request counters and remaining budgets before failure overwrites shared status. Preserve timeout, authority and recovery behavior so a repeated provisioning failure can be diagnosed without weakening lease checks.
2026-10-13 08:49:58 +00:00
Vincent Koc
0348a2526c
fix(ci): preserve remote proof failures without forced local checks (#170733)
* fix: keep remote proof failures from forcing local checks

* fix(ci): defer unqualified Testbox runner tiers
2026-10-13 06:55:27 +00:00
Peter Steinberger
71b5563397
fix(ci): use PR CI for broad proof and replay failed tests locally (#170628)
* ci: use PR CI for broad proof and replay failed tests locally

* fix(ci): make failed-test diagnostics safe and concurrent
2026-10-12 22:50:36 -07:00
Vincent Koc
076d84e4b1
fix(pr): retire absent auto-merge after a head change (#170402)
* fix(pr): retire absent auto-merge after a head change

* test(pr): type cached auto-recovery fixture variants
2026-10-13 08:28:44 +08:00
Dallin Romney
a939a9dfda
fix(pr): scripts/pr keeps a lock after a failed command that fully drained (#169595)
* fix(pr): release drained failed-operation locks instead of requiring manual recovery

* test(pr): drop unused lock owner initializer

* docs(pr): drop obsolete blanket failure-retention claim
2026-10-12 15:52:58 -07:00
Vincent Koc
8bfda3d905
fix(pr): preserve reviewed work across repeated baseline updates (#166986)
* fix(pr): admit reviewed baseline successors

Preserve signed predecessor bindings and proof while explicitly admitting a new reviewed source. Revalidate installation and final preparation CAS without weakening the initial-refresh or wrapper trust contracts.

* fix(pr): revalidate baseline transition authority after replay
2026-10-12 18:01:22 +08:00
Peter Steinberger
7c4ff5ae0a
ci: let PR checks finish and classify inherited failures (#169647)
* ci: finish PR jobs and classify failures against main

* ci: distinguish signature and job-name failure attribution

* test(ci): avoid object spread in failure fixtures

* ci: classify differing validation scopes as unknown
2026-10-12 01:46:23 -07:00
Peter Steinberger
c2d1513203
fix(pr): stop waiting for advisory ClawSweeper reviews (#169739) 2026-10-12 01:13:06 -07:00
Peter Steinberger
a5710f0560
docs: slim scripts agent guide into on-demand references
Keep the common-path ownership map, execution gotchas, and safety boundaries in the scripts guide. Move detailed preparation, transport, remote-gate, admission, and recovery contracts into seven navigable references. Preserve the execution-gotchas anchor and align proof guidance with focused local checks and broad PR CI.

Validation: docs formatting, Markdown lint, internal links, scoped path/anchor checks, and independent preservation autoreview passed.
2026-10-11 22:31:06 -07:00