Metadata diff: cover categories, category-meta, and publishing preferences #83

Closed
opened 2026-07-20 19:44:01 +00:00 by hugo · 2 comments
Owner

Source: Audit section 2.14.

Spec: specs/metadata_diff.allium RepairMetadataDiffItem dispatches entity types project | categories | category_meta | publishing to project metadata sync/flush.

bDS2: ../bDS2/lib/bds/maintenance/diff_reports.ex (~lines 60-92) emits diff reports with entity_type "categories" (list diff), "category_meta" (per-category settings), "publishing" (ssh_host/ssh_user/ssh_remote_path/ssh_mode fields), comparing DB-held metadata state against meta/*.json. bDS2 keeps a DB copy of metadata via settings rows (../bDS2/lib/bds/metadata.ex persist_setting).

Current behaviour (RuDS): crates/bds-core/src/engine/metadata_diff.rs emits only entity_type "project"; repair returns "unsupported metadata diff entity type" for categories/category_meta/publishing. RuDS has no DB copy of these (meta/*.json is the single source — engine/meta.rs), so there is currently nothing to diff.

Task: Decide the approach with the maintainer: (a) mirror bDS2 by persisting metadata state in the settings table (schema.allium Setting exists) and diffing it against the files, or (b) declare file-only as intentional and update specs/metadata_diff.allium + remove the dispatch entries. If (a): add settings persistence in engine/meta.rs mutations, diff reports, both repair directions, and the metadata diff UI (bds-ui/src/views/metadata_diff.rs) so the three-way sync rule (metadata ↔ diff tool ↔ rebuild, per AGENTS.md) holds.

Acceptance: Either bDS2-equivalent diff coverage with tests, or spec updated + validated with allium and dispatch table cleaned.

**Source:** Audit section 2.14. **Spec:** `specs/metadata_diff.allium` RepairMetadataDiffItem dispatches entity types `project | categories | category_meta | publishing` to project metadata sync/flush. **bDS2:** `../bDS2/lib/bds/maintenance/diff_reports.ex` (~lines 60-92) emits diff reports with entity_type "categories" (list diff), "category_meta" (per-category settings), "publishing" (ssh_host/ssh_user/ssh_remote_path/ssh_mode fields), comparing DB-held metadata state against meta/*.json. bDS2 keeps a DB copy of metadata via settings rows (`../bDS2/lib/bds/metadata.ex` `persist_setting`). **Current behaviour (RuDS):** `crates/bds-core/src/engine/metadata_diff.rs` emits only entity_type "project"; repair returns "unsupported metadata diff entity type" for categories/category_meta/publishing. RuDS has no DB copy of these (meta/*.json is the single source — `engine/meta.rs`), so there is currently nothing to diff. **Task:** Decide the approach with the maintainer: (a) mirror bDS2 by persisting metadata state in the settings table (schema.allium Setting exists) and diffing it against the files, or (b) declare file-only as intentional and update `specs/metadata_diff.allium` + remove the dispatch entries. If (a): add settings persistence in engine/meta.rs mutations, diff reports, both repair directions, and the metadata diff UI (`bds-ui/src/views/metadata_diff.rs`) so the three-way sync rule (metadata ↔ diff tool ↔ rebuild, per AGENTS.md) holds. **Acceptance:** Either bDS2-equivalent diff coverage with tests, or spec updated + validated with `allium` and dispatch table cleaned.
hugo added the bug label 2026-07-20 19:44:01 +00:00
Author
Owner

decision by maintainer: follow bDS2 behaviour and update code and spec to reflect that.

decision by maintainer: follow bDS2 behaviour and update code and spec to reflect that.
Author
Owner

Implemented in 2fc683d. RuDS now stores project-scoped database snapshots for project.json, categories.json, category-meta.json, and publishing.json; reports categories, category_meta, and publishing field drift; and supports both repair directions with the same all-metadata synchronization semantics as bDS2. All desktop, TUI, remote-server, Lua, WordPress import, project-open/create, deletion, and rebuild mutation/lifecycle paths keep snapshots and portable files aligned. Internal snapshots are hidden from user settings, rebuilt from filesystem metadata, and removed with the project. The existing metadata diff UI renders and repairs the new entity types. README and metadata_diff.allium were updated. Neutral review against the issue, bDS2 repair/settings behavior, and Allium found a legacy server/TUI initialization gap, which was fixed and regression-tested. Verification: allium check specs; allium analyse specs; cargo fmt --all -- --check; cargo check --workspace; cargo machete --with-metadata; cargo build --workspace; cargo test --workspace; git diff --check.

Implemented in 2fc683d. RuDS now stores project-scoped database snapshots for project.json, categories.json, category-meta.json, and publishing.json; reports categories, category_meta, and publishing field drift; and supports both repair directions with the same all-metadata synchronization semantics as bDS2. All desktop, TUI, remote-server, Lua, WordPress import, project-open/create, deletion, and rebuild mutation/lifecycle paths keep snapshots and portable files aligned. Internal snapshots are hidden from user settings, rebuilt from filesystem metadata, and removed with the project. The existing metadata diff UI renders and repairs the new entity types. README and metadata_diff.allium were updated. Neutral review against the issue, bDS2 repair/settings behavior, and Allium found a legacy server/TUI initialization gap, which was fixed and regression-tested. Verification: allium check specs; allium analyse specs; cargo fmt --all -- --check; cargo check --workspace; cargo machete --with-metadata; cargo build --workspace; cargo test --workspace; git diff --check.
hugo closed this issue 2026-07-21 21:54:59 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: hugo/RuDS#83