delete domain: converge madt_delete to the strict ADR - irreversible deletes point at the web UI #209

Closed
opened 2026-07-17 15:29:03 +00:00 by hexajon · 1 comment
hexajon commented 2026-07-17 15:29:03 +00:00 (Migrated from codeberg.org)

Part of #206; implements ADR 0029 (#207) for the gated destructive domain.

madt_delete currently offers irreversible deletion of repo, issue, release, tag, and wiki page behind madt_enable(domains=["destructive"]) plus an elicitation confirm. Both gates are soft: madt_enable is agent-callable, and the elicitation confirm is skipped entirely on a client that does not support elicitation ("zero regression" fallback in issuesDelete) - so on those clients an agent deletes irreversibly with zero user consent. That fail-open gap is the demonstration case for the ADR.

Converge per the #207 classification table:

  • Operations classified "omit" lose their madt_delete path; the tool (or its refusal, if the tool retires whole) points at the forge web UI as the user-held path for irreversible forge deletions, and at raw git for tag refs if the table sends tags there.
  • Any operation the table classifies machine-proof keeps a surface only with the structural verification implemented.
  • ElicitDeleteConfirm retires with the paths it guarded.
  • Recoverable deletes (labels, milestones, comments, attachments, webhooks) stay on their everyday tools - explicitly out of scope.

Acceptance criteria:

  • No agent-reachable madtea call can irreversibly delete forge data without a machine proof of recoverability; the fail-open elicitation branch is gone.
  • Refusal/guidance text names the web UI (or raw git) path for the user; no runnable madtea incantation performs the destruction.
  • The destructive domain either retires from madt_enable's list or shrinks to whatever the table keeps; domain docs, tool descriptions, madt_help(topic="domains"), and docs/reference/destructive.md updated.
  • docs/COMPARISON.md and docs/COMPAT.md rows updated where commands change.
  • Full gate green.
Part of #206; implements ADR 0029 (#207) for the gated destructive domain. madt_delete currently offers irreversible deletion of repo, issue, release, tag, and wiki page behind madt_enable(domains=["destructive"]) plus an elicitation confirm. Both gates are soft: madt_enable is agent-callable, and the elicitation confirm is skipped entirely on a client that does not support elicitation ("zero regression" fallback in issuesDelete) - so on those clients an agent deletes irreversibly with zero user consent. That fail-open gap is the demonstration case for the ADR. Converge per the #207 classification table: - Operations classified "omit" lose their madt_delete path; the tool (or its refusal, if the tool retires whole) points at the forge web UI as the user-held path for irreversible forge deletions, and at raw git for tag refs if the table sends tags there. - Any operation the table classifies machine-proof keeps a surface only with the structural verification implemented. - ElicitDeleteConfirm retires with the paths it guarded. - Recoverable deletes (labels, milestones, comments, attachments, webhooks) stay on their everyday tools - explicitly out of scope. Acceptance criteria: - No agent-reachable madtea call can irreversibly delete forge data without a machine proof of recoverability; the fail-open elicitation branch is gone. - Refusal/guidance text names the web UI (or raw git) path for the user; no runnable madtea incantation performs the destruction. - The destructive domain either retires from madt_enable's list or shrinks to whatever the table keeps; domain docs, tool descriptions, madt_help(topic="domains"), and docs/reference/destructive.md updated. - docs/COMPARISON.md and docs/COMPAT.md rows updated where commands change. - Full gate green.
hexajon commented 2026-07-17 16:03:02 +00:00 (Migrated from codeberg.org)

Scope note from the ADR 0029 classification table (once #207 merges): the omit list covers BOTH surfaces per operation - not just madt_delete but also the CLI commands repo delete, issue delete, release delete (release_assets.go's release deleteCmd), tagapi delete, and wiki delete. All five convert to refusals naming the forge web UI (wiki refusals may also name the wiki git history). Recoverable deletes (assets, comments, attachments, labels, milestones, webhooks, avatar) stay untouched.

Scope note from the ADR 0029 classification table (once #207 merges): the omit list covers BOTH surfaces per operation - not just madt_delete but also the CLI commands `repo delete`, `issue delete`, `release delete` (release_assets.go's release deleteCmd), `tagapi delete`, and `wiki delete`. All five convert to refusals naming the forge web UI (wiki refusals may also name the wiki git history). Recoverable deletes (assets, comments, attachments, labels, milestones, webhooks, avatar) stay untouched.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sixfold-space/madtea#209
No description provided.