feat(plugins): coordinate managed product updates - #72930
Closed
totalolage wants to merge 2 commits into
Closed
Conversation
totalolage
force-pushed
the
fix/managed-t3code-product-update
branch
from
July 27, 2026 22:44
d742bcf to
78a2409
Compare
Contributor
|
Thanks for the thorough fail-closed staging, rollback, and multi-host test work. This automated hermes-sweeper review is closing this under the standing third-party integration policy.
Closed as not-planned per standing maintainer policy ( |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the Hermes-core half of T3 Code's coherent managed Update contract, including the legacy unmanaged-to-managed bootstrap identified in follow-up review.
update.mode: managed,contract, andentrypointgit pull --ff-onlybehaviorLegacy bootstrap
The original draft dispatched only from the installed
plugin.yaml. An older T3 checkout therefore took the generic Git path on its first update, producing a source-only state while its mounted backend remained old.Hermes now fetches without changing the live worktree, requires clean fast-forward ancestry and matching plugin identity, validates the managed manifest and regular-file entrypoint from the exact fetched commit, and extracts staged code privately. The host then gates and drains the old route prefix before the staged worker receives the actual installed root. A legacy plugin-owned
POST /api/plugins/<name>/updatewith no plugin-specific FastAPI dependencies enters the same transaction; dependency-bearing routes retain and execute their original dependencies.The bootstrap authorization binds the prior commit, validated candidate history, installed root, and contract. Rollback is restricted to the prior commit. Complete accepts only a supported managed release commit within that validated fast-forward history, then derives attestation from the code and state actually mounted by every live host.
Multi-host completion failure rolls every host back before gates are released. Successful completion uses a verify-all, idempotent finalize phase so a partial gate-release failure can be retried without rolling back a coherent product.
Required T3 follow-up
T3 PR #42 was merged at
76830f00b2c30f48787702cc6971d9050a1cd0c0. Its v1 method shapes remain sufficient, but safe legacy bootstrap requires an explicit worker-operation correction now tracked in draft T3 PR #43:migrateoperation for a staged candidate;plugin_rootas the installed mutation target;product_source_commit/product_version, restore the running service, and request host rollback attestation for that prior version.Until that T3 follow-up lands, Hermes fails the legacy bootstrap transaction without a source-only cutover.
Validation
git diff --check: passedIndependent review rechecked multi-host recovery/finalize, release-vs-tip ancestry, exact unmanaged SHA cutover, plugin dependencies, no-state legacy rollback, and rollback binding, and found no remaining Hermes blocker.