Repository navigation
Conversation
|
Batch compatibility receipt (2026-08-24) Built the inspectable synthetic branch
No manual merge resolution was required, including the shared Combined validation:
The stale Browserslist notice and authentication-dependent Phase C skips are unchanged environmental disclosures. #2903 remains draft because synthetic compatibility does not replace its declared live host-agent lifecycle gate and independent human review. |
|
Thanks for this contribution. We're closing outside-contributor pull requests that have had no activity for 14 days or more, so the queue reflects work that can still land. This isn't a judgment on the change itself. If it's still needed, please rebase onto |
Ready for independent review (2026-09-15). Candidate
829dd48f53619f881b037ee93bf647ca2838eedbhas a successful GitHub check rollup and no base-branch conflict at this review snapshot. This supersedes earlier draft-status wording only. All validation gaps, migration requirements, live gates and independent human review requirements below remain in force; this is not a merge-ready approval.Why this matters
Extension lifecycle actions previously jumped from a static sentence in the dashboard to filesystem and container mutations. Operators could not see affected Compose services, dependency activation, dependent breakage, data retention, or failed preconditions before confirming the action.
This PR now carries the contract end to end: an authenticated backend plan remains side-effect free, and the dashboard fetches and renders that authoritative plan before install, enable, disable, or uninstall. A blocked plan cannot reach the mutation endpoint.
Overlap check
Searched open and closed upstream PRs for
extension change plan,preview extension, lifecycle confirmation, and the changed production files. PR #2626 previews ODS mode switches, not extension lifecycle operations. PR #2716 hardens service-id validation in another router region. PR #3065 touches the same dashboard page only to serialize progress polling; this PR owns pre-mutation planning/confirmation and has no logical dependency on it. Both heads were merged in that order on the inspectable synthetic branchtang-vu:validation/batch-20260824-architecture; the combined dashboard and API suites pass at integration SHA2c82aaec.Production contract and state machine
GET /api/extensions/{id}/plan?action=...through the existing authenticated dashboard proxy.auto_enable_deps=truechoice.Regression coverage
Concrete pre-change evidence: clicking Install opened only a static message and never requested
/plan; the new dashboard regression failed becauseDeployment planand the plan request were absent.Validation
python -m pytest -q tests/test_extensions.py tests/test_extension_change_plan.py— 259 passed, 5 skipped.pm test -- --run src/pages/Extensions.test.jsx` — 12 passed.
pm test -- --run` — 28 files, 260 tests passed.
pm run lint` — passed.
pm run build` — passed; only the pre-existing stale Browserslist notice was emitted.
git diff --check— passed.2c82aaec— Dashboard 28 files / 262 tests, lint, and build passed; combined API scope 350 passed, 5 skipped.Tradeoffs, limitations, and rollback
Install, enable, disable, and uninstall use the authoritative plan. Update, rollback, and destructive data purge keep their existing dedicated confirmations because the backend plan contract does not yet model those different transactions; the UI does not pretend otherwise. Plans are previews, not reservation tokens: backend mutation validation remains the final authority if state changes between preview and confirmation.
No live host-agent lifecycle mutation was performed locally. Synthetic compatibility with #3065 is complete. This PR is Ready for review but still requires a live host-agent lifecycle gate and independent human review of the user-visible mutation state machine before merge. A normal revert restores static confirmations without changing persisted extension state or formats.