nexu-io/open-design · error
automation-template delete proposals are not supported yet
Error message
automation-template delete proposals are not supported yet
What it means
Thrown by applyAutomationTemplateProposal() when proposal.action === 'delete'. Automation-template delete support is intentionally unimplemented — the applier can upsert templates but cannot remove them. This is a deliberate capability gap, not a bug.
Source
Thrown at apps/daemon/src/automation-proposals.ts:267
async function applySkillProposal(dataDir: string, proposal: AutomationEvolutionProposal) {
const slug = targetSlugFor(proposal, 'skill');
const dir = path.join(dataDir, 'skills', slug);
const file = path.join(dir, 'SKILL.md');
if (proposal.action === 'delete') {
await fsp.rm(dir, { recursive: true, force: true });
return { skillSlug: slug, action: 'delete', path: `skills/${slug}/SKILL.md` };
}
await fsp.mkdir(dir, { recursive: true });
await fsp.writeFile(file, proposalAfterMarkdown(proposal), 'utf8');
return { skillSlug: slug, action: proposal.action, path: `skills/${slug}/SKILL.md` };
}
async function applyAutomationTemplateProposal(
dataDir: string,
proposal: AutomationEvolutionProposal,
) {
if (proposal.action === 'delete') {
throw new Error('automation-template delete proposals are not supported yet');
}
const patch = parseJsonPatchAfter(proposal);
const template = await upsertUserAutomationTemplate(dataDir, patch);
return {
automationTemplateId: template.id,
action: proposal.action,
path: `automation-templates/${template.id}.json`,
};
}
async function updateProposalStatus(
dataDir: string,
id: string,
status: AutomationProposalStatus,
metadataPatch: Record<string, unknown> = {},
): Promise<AutomationEvolutionProposal> {
const proposals = await listAutomationProposals(dataDir, { status: 'all' });
const index = proposals.findIndex((proposal) => proposal.id === id);View on GitHub (pinned to 5be4028344)
Solutions
- Do not route automation-template removals through the proposal applier — delete the template file directly under the daemon data root if you have a legitimate removal need.
- Reject the proposal with a note that template deletion is not yet supported.
- Track the request as a feature gap until delete is implemented in applyAutomationTemplateProposal.
Defensive patterns
Strategy: validation
Validate before calling
if (proposal.targetKind === 'automation-template' && proposal.action === 'delete') {
throw new Error('automation-template delete proposals are not supported yet');
} Type guard
function isSupportedTemplateAction(p: { targetKind: string; action: string }): boolean {
return !(p.targetKind === 'automation-template' && p.action === 'delete');
} Prevention
- Do not offer a delete action for automation-template proposals in the UI.
- Route template removal through direct file management, not the proposal applier.
- Reject template-delete proposals with a clear note to the user.
When it happens
Trigger: Applying an automation-template proposal with action 'delete'. The other actions (create/update via upsertUserAutomationTemplate) are supported and call parseJsonPatchAfter to build the template payload.
Common situations: Agent proposed removing an obsolete template; UI offered a delete action for templates before the backend supported it; migration script tried to clean up templates via the proposal flow.
Related errors
- proposal body is required
- proposal title is required
- proposal summary is required
- proposal patch is required
- proposal ${proposal.id} is ${proposal.status}, not reviewabl
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/f3f1cd5560ddd240.
Report an issue: GitHub.