fix: better database rebuild

This commit is contained in:
2026-07-18 20:46:27 +02:00
parent 638202b96c
commit b438a99999
6 changed files with 694 additions and 64 deletions

View File

@@ -13,6 +13,7 @@ surface MetadataMaintenanceSurface {
provides:
MetadataDiffRequested(project)
RebuildDatabaseRequested(project)
RebuildFromFilesystemRequested(project, entity_type)
RepairMetadataDiffItemRequested(project, direction, item)
}
@@ -39,7 +40,8 @@ rule RunMetadataDiff {
when: MetadataDiffRequested(project)
-- Runs as background task via TaskManager
-- Compares DB records against filesystem files for:
-- posts, translations, media, scripts, templates
-- project metadata (including a missing description), posts,
-- translations, media, Lua scripts, templates
-- Detected fields: tags, categories, title, excerpt, author,
-- language, status, templateSlug, dates
for post in project.posts:
@@ -74,6 +76,22 @@ rule RunMetadataDiff {
-- content to detect vectors that need recomputation.
}
rule RebuildDatabase {
when: RebuildDatabaseRequested(project)
-- The filesystem is the complete source of truth for portable project data.
-- Existing project-scoped content and relationship rows are removed before
-- project.json, posts, translations, media sidecars and links, tags,
-- templates, and Lua scripts are imported. Python files in scripts/ are ignored.
ensures: ProjectMetadataImported(project, "meta/project.json")
ensures: post/RebuildPostsFromFiles(project)
ensures: media/RebuildMediaFromFiles(project)
ensures: script/RebuildScriptsFromFiles(project)
ensures: template/RebuildTemplatesFromFiles(project)
@guidance
-- Rebuilding media trusts persisted sidecar size, dimensions, and metadata.
-- Thumbnail regeneration remains a separate maintenance operation.
}
rule RepairMetadataDiffItem {
when: RepairMetadataDiffItemRequested(project, direction, item)
-- Resolves a single diff in one direction.