Epic: strict-omission destruction model - no madtea surface carries a work-destroying override #206
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#206
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?
Safe by design, not by hoping an agent's incantations stay on the blessed path.
Auditing the destructive-operation surfaces turned up three coexisting safety models, grown case by case with no ADR pinning any of them:
git branch -Din the user's own shell. Hooks then steer agents off raw git. Two independent layers, neither depending on the other behaving.Model 3 already leaked twice:
Decision: model 1 is the house rule. A madtea surface (MCP tool or CLI command) never carries an operation that can destroy unrecoverable work or data. Destruction is offered only when madtea can machine-prove nothing is lost (model 2). Where a user genuinely needs the irreversible op, refusals name the tool the user already holds - raw git in their own shell, or the forge web UI - as guidance for the user, never as a runnable madtea flag an agent can grab.
Exit criterion: ADR 0029 accepted; no MCP tool or CLI command can discard uncommitted work or irreversibly delete forge data; every refusal message points users at non-madtea tools; the elicitation-as-destruction-guard pattern is retired.
All three children merged and the exit criterion is met. ADR 0029 accepted (PR #211). Worktree force-discard removed from both surfaces (#208, PR #233). madt_delete tool + the destructive domain + all five CLI delete operations converted to omission/web-UI refusals (#209, PR #234). The elicitation-as-destruction-guard pattern is fully retired - with both consumers gone, the elicitation seam itself was removed. No MCP tool or CLI command can now discard uncommitted work or irreversibly delete forge data, and every refusal points at the user's own tools (raw git, forge web UI) rather than a runnable madtea flag. The recoverable-but-wrong-workflow tier that this audit surfaced as adjacent got its own record in ADR 0031 (#222).