You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR Harden direct Dokploy rollback break-glass #1074 hardened the manual direct Dokploy rollback path: blank rollback image/reason now fail before mutation, and the operator reason is passed into the reviewable break-glass evidence JSON.
PR Bound local operator product-config grant scopes #1075 removed the deploy-time seed catalog fallback for routine local-operator product-config grant scopes. Deploy now skips local-operator product-config grant reconciliation when LAUNCHPLANE_LOCAL_OPERATOR_PRODUCT_CONFIG_SCOPES_JSON is unset or empty, fails malformed explicit JSON, and keeps seed catalogs as explicit import material rather than deploy-time authority.
PR Narrow product onboarding apply authority #1076 narrowed product onboarding seed import authority. /v1/product-onboarding/apply now requires dedicated product_onboarding.apply authority, the seed-import workflow is granted that action instead of broad launchplane_service_deploy.execute, and tests reject self-deploy authority on the onboarding route.
PR Remove runtime key-safety deploy fallback #1077 removed the runtime key-safety policy apply compatibility fallback to launchplane_service_deploy.execute. /v1/runtime-key-safety/policies/apply now requires dedicated runtime_key_safety.write authority, and tests reject self-deploy authority on the route.
PR Narrow merge train policy import authority #1078 narrowed merge-train policy import authority. /v1/merge-train/policies/import now requires dedicated merge_train.policy_import authority, the import workflow is granted that action instead of broad launchplane_service_deploy.execute, and tests reject self-deploy authority on the route.
PR Seed authz policy grant authority #1079 staged dedicated authz policy grant authority. The deploy grant script now reconciles authz_policy_grant.write for deploy-launchplane.yml on both manual dispatch and automatic CI-success deploy entrypoints; Deploy Launchplane succeeded at 1fab8bae, so the staged grant is present in the live DB.
PR Narrow authz grant maintenance authority #1080 narrowed authz policy grant maintenance authority. The five /v1/authz-policies/*/grants routes now require authz_policy_grant.write, /v1/drivers/launchplane/self-deploy remains on launchplane_service_deploy.execute, and tests reject self-deploy authority on policy-grant maintenance.
PR Add GitHub Actions authz rule removals #1081 added a service-backed exact GitHub Actions authz rule removal route and CLI client. The route requires authz_policy_grant.write, supports dry-run/apply, writes audited active policy records only on apply, and rejects self-deploy authority.
PR Remove stale import workflow authz rules #1082 used the already-authorized deploy workflow identity to remove stale broad launchplane_service_deploy.execute rules for merge-train-policy-import.yml and launchplane-seed-import.yml. Deploy Launchplane run 26765763919 succeeded on 8c2f6acb; each removal matched 1 and removed 1, dropping active GitHub Actions authz rules from 145 to 143.
PR Remove one-shot authz cleanup #1083 removed the one-shot deploy cleanup code after successful application, leaving a regression assertion that the stale broad import workflow rules and temporary removal calls are not restored. Post-merge CI, Security, CodeQL, and Deploy Launchplane succeeded on f400caea.
Targeted local unit tests for authz removal service helpers, service routes, CLI request shape, deploy-script cleanup request shape, and post-cleanup regression behavior passed.
shellcheck -x scripts/deploy/ensure-authz-grants.sh passed where shell changes were made.
uv run --extra dev ruff check passed for changed Python tests.
npx --no-install markdownlint-cli2 docs/operations.md docs/service-boundary.md passed for docs slices.
git diff --check passed.
JetBrains changed-file inspection was clean for each PR.
Verify whether any remaining launchplane_service_deploy.execute grant outside the actual self-deploy route is still persisted and reachable. If any remain, use the service-backed removals route rather than adding a fallback.
Local worktree cleanup remains separate from product behavior; several preserved auto-review worktrees are intentionally not blocking.
Acceptance Criteria
Direct provider fallback paths are removed or emit equivalent service-backed audit/evidence.
Reusable workflows do not hard-code real tenant/product/domain/operator defaults except in approved fixtures/import material.
Authz grant seeding is data-driven or backed by typed helpers instead of large shell manifests with embedded real values.
Compatibility paths have explicit retirement criteria and tests preventing quiet reintroduction.
Target Areas
.github/workflows/deploy-launchplane.yml
.github/workflows/reusable-*.yml
scripts/deploy/ensure-authz-grants.sh
docs/compatibility-retirement.md
coding-standards guard tests
Finish Line
Emergency provider mutations, operator-specific workflow defaults, and seed manifests are explicit, auditable, and removable instead of quiet alternate authorities.
Current Status
Current focus: bounded compatibility paths in small, reviewable slices.
Done:
LAUNCHPLANE_LOCAL_OPERATOR_PRODUCT_CONFIG_SCOPES_JSONis unset or empty, fails malformed explicit JSON, and keeps seed catalogs as explicit import material rather than deploy-time authority./v1/product-onboarding/applynow requires dedicatedproduct_onboarding.applyauthority, the seed-import workflow is granted that action instead of broadlaunchplane_service_deploy.execute, and tests reject self-deploy authority on the onboarding route.launchplane_service_deploy.execute./v1/runtime-key-safety/policies/applynow requires dedicatedruntime_key_safety.writeauthority, and tests reject self-deploy authority on the route./v1/merge-train/policies/importnow requires dedicatedmerge_train.policy_importauthority, the import workflow is granted that action instead of broadlaunchplane_service_deploy.execute, and tests reject self-deploy authority on the route.authz_policy_grant.writefordeploy-launchplane.ymlon both manual dispatch and automatic CI-success deploy entrypoints; Deploy Launchplane succeeded at1fab8bae, so the staged grant is present in the live DB./v1/authz-policies/*/grantsroutes now requireauthz_policy_grant.write,/v1/drivers/launchplane/self-deployremains onlaunchplane_service_deploy.execute, and tests reject self-deploy authority on policy-grant maintenance.authz_policy_grant.write, supports dry-run/apply, writes audited active policy records only on apply, and rejects self-deploy authority.launchplane_service_deploy.executerules formerge-train-policy-import.ymlandlaunchplane-seed-import.yml. Deploy Launchplane run26765763919succeeded on8c2f6acb; each removal matched 1 and removed 1, dropping active GitHub Actions authz rules from 145 to 143.f400caea.Validation for #1081-#1083:
shellcheck -x scripts/deploy/ensure-authz-grants.shpassed where shell changes were made.uv run --extra dev ruff checkpassed for changed Python tests.npx --no-install markdownlint-cli2 docs/operations.md docs/service-boundary.mdpassed for docs slices.git diff --checkpassed.Next candidate slices:
launchplane_service_deploy.executegrant outside the actual self-deploy route is still persisted and reachable. If any remain, use the service-backed removals route rather than adding a fallback.Notes:
Acceptance Criteria
Target Areas
.github/workflows/deploy-launchplane.yml.github/workflows/reusable-*.ymlscripts/deploy/ensure-authz-grants.shdocs/compatibility-retirement.mdFinish Line
Emergency provider mutations, operator-specific workflow defaults, and seed manifests are explicit, auditable, and removable instead of quiet alternate authorities.