guard: enable the forge-client guard - tag the recoverable deletes, add the completeness test, flip the install on #780
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sixfold-space/madtea#780
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-up to #660 (sequenced per the atomic-PR split). #660 lands the
forge-client guard plumbing - the Guard interface, the service adapter, the
path-to-template matcher, operation tagging on the write ops - but the
production InstallWriteGuard stays GATED OFF, and the per-handler out-of-scope
checks stay in place. So #660 enforces nothing new on its own.
This issue ENABLES it, in one coherent change:
comment, reaction, attachment, hook, deploy-key, release-asset, secret,
variable, runner, team, package, push-mirror, and the org/user/admin
variants) with its canonical Recoverable operation key, so the fail-closed
client guard does not refuse a legitimate recoverable delete.
s.client.Delete* call site lacks a guard.WithOperation tag, so a new delete op
without a tag can never be a silent production regression.
tools_branches_crud.go); the client now runs that rule on every surface.
Acceptance:
sync_fork, merge_upstream, branch rename) refuse a default-branch write on CLI
and MCP, now that the install is on.
no per-handler check left.
completeness test proves none is untagged.
This is what fulfils ADR 0046 "one guard on every surface" for the forge client.
Needs #660. Part of #670.
Folded into #660. The forge-client guard enablement was already built, so I'm
landing it fully enabled in #660 as one PR rather than reverting and rebuilding
it here. #660 tags the recoverable deletes, adds the completeness test, refuses
the two gated unprovable destroys (packages/delete, admin/unadopted-delete) per
ADR 0046, and turns the install on - all in one change.
Folded into #660; see the note above.