Complete forced template deletion

This commit is contained in:
2026-07-22 19:26:59 +02:00
parent fc039d813a
commit 0753b290ad
2 changed files with 242 additions and 24 deletions

View File

@@ -42,6 +42,7 @@ surface TemplateManagementSurface {
UpdateTemplateRequested(template, changes)
PublishTemplateRequested(template)
DeleteTemplateRequested(template)
ForceDeleteTemplateRequested(template)
RebuildTemplatesFromFilesRequested(project)
}
@@ -171,6 +172,24 @@ rule DeleteTemplate {
ensures: TemplateFileDeleted(template)
}
rule ForceDeleteTemplate {
when: ForceDeleteTemplateRequested(template)
-- Force deletion clears every project-scoped post and tag reference before
-- removing the template. A same-slug template in another project is unrelated.
for post in template.referencing_posts:
ensures: post.template_slug = null
ensures: post.updated_at = now
if post.status = published:
ensures: PublishedPostFrontmatterRewritten(post)
-- Published files drop templateSlug while retaining their body.
for tag in template.referencing_tags:
ensures: tag.post_template_slug = null
ensures: tag.updated_at = now
ensures: TagsMetadataWritten(template.project_id)
ensures: not exists template
ensures: TemplateFileDeleted(template)
}
rule CascadeSlugUpdate {
when: template: Template.slug transitions_to new_slug
-- When a template slug changes, update all references