feat(update): support extended-stable package updates#99811
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 4, 2026, 2:15 AM ET / 06:15 UTC. Summary PR surface: Source +404, Tests +707, Docs +64, Generated 0, Other -3. Total +1172 across 36 files. Reproducibility: not applicable. this is a feature/config-channel PR rather than a broken existing behavior report. Current main lacks the channel, and the PR body plus live-output proof define the new fail-closed and loopback-positive behavior. Review metrics: 2 noteworthy metrics.
Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land only after maintainers accept the new persisted package-only channel contract and either publish the public dist-tag or explicitly approve the temporary fail-closed behavior. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a feature/config-channel PR rather than a broken existing behavior report. Current main lacks the channel, and the PR body plus live-output proof define the new fail-closed and loopback-positive behavior. Is this the best way to solve the issue? Likely yes as an implementation shape: a dedicated package-only channel preserves the shipped AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against d71a24f3a4b7. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +404, Tests +707, Docs +64, Generated 0, Other -3. Total +1172 across 36 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1ba963e519
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
3c34c5a to
bd68ef6
Compare
* feat(update): add extended-stable channel contract * feat(update): implement extended-stable package flow * docs(update): document extended-stable behavior * fix(update): preserve extended-stable preflight guarantees * fix(update): reject extended-stable Git repair * fix(update): support loopback extended-stable canaries * fix(update): preserve scoped package roots
* feat(update): add extended-stable channel contract * feat(update): implement extended-stable package flow * docs(update): document extended-stable behavior * fix(update): preserve extended-stable preflight guarantees * fix(update): reject extended-stable Git repair * fix(update): support loopback extended-stable canaries * fix(update): preserve scoped package roots (cherry picked from commit d214622)
Closes #99808
Related: #99352
What Problem This Solves
Operators need a supported way to install, persist, and inspect the trailing supported-month npm release without changing the existing
stablechannel, which already maps to npmlatest. Before this change, the CLI had no canonical channel contract for that release line, no fail-closed exact resolution, and no safe Gateway or status behavior for it.Why This Change Was Made
This adds
extended-stableas a net-new package-only channel across config, CLI, status, Gateway handoff, and Package Acceptance. Foreground updates resolve the public npm selector, verify the selected exact package, reuse the existing downgrade and post-core commit boundaries, reject Git checkouts and tag overrides before mutation, and skip startup/background auto-update. Post-core plugin convergence temporarily targets the existing stable/latest plugin line; plugin publication remains out of scope.The change is AI-assisted. I reviewed the implementation, its transaction boundaries, and the verification results.
User Impact
Package-install users can run
openclaw update --channel extended-stable, persist that selection, use bare foreground updates afterward, and inspect availability withopenclaw update status. Existingstable,beta, anddevdefaults and mappings remain unchanged. Git users receive a structured non-mutating error, and missing or inconsistent public npm metadata never falls back to another release line.Evidence
openclaw@extended-stablepassed.--tagoverrides are rejected; managed handoff sentinel errors retain the exact selector reason.openclaw@extended-stable, so the positive live-package run remains blocked until the publication workflow in feat(release): add monthly npm extended-stable publication #99352 ships the dist-tag. The implemented path and tests prove the required fail-closedselector_missingbehavior for this state.src/config/io.tsandsrc/secrets/config-io.ts; the worktree's private@openclaw/crablinebootstrap is also unavailable. Broad Testbox proof is delegated to PR CI because local Azure Crabbox auth returned 401 and the Blacksmith CLI is not installed.Live fail-closed proof
On current head
7485b3573e, I ran the real CLI entrypoint from a package-style archive with no.git, an isolated HOME/state/config path, and public npm registry access:This is the current public-registry 404 path. The structured
selector_missingresult, empty mutation-step list, nonzero exit, and unchanged absent config prove the CLI fails before config or package mutation. Positive live update/status proof remains gated on #99352 publishing theextended-stabledist-tag; maintainers can either sequence the PRs or explicitly accept this fail-closed launch window.Live local install and update proof
Revalidated on PR head
3c34c5af20using loopback Verdaccio and combined canary source1ac14c2823(the PR head plus the fork-only publication harness). The harness published@kevins8/[email protected]and.34, then movedextended-stablefrom.33to.34. Its safety record reportshostBinding: 127.0.0.1:4873andofficialNpmPublishAttempted: false.Clean install passed:
Real foreground update from the existing stable base passed:
The update proof includes the staged npm install, scoped-package swap, mandatory
openclaw doctor --non-interactive --fixwith exit 0, and plugin convergence. Production behavior remains pinned to public npm; the alternate package/registry path activates only whenOPENCLAW_UPDATE_PACKAGE_SPECexactly matches the installed package and the configured registry is loopback.