From 00daa6b903877a64f624f0ea723dc3392ab7c074 Mon Sep 17 00:00:00 2001 From: Cline Date: Sun, 18 Oct 2026 17:55:35 -0500 Subject: [PATCH] docs: update project-status with completion of bounded catalog contract and explicit grouping --- docs/project-status.md | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/docs/project-status.md b/docs/project-status.md index 60f584f..748af1f 100644 --- a/docs/project-status.md +++ b/docs/project-status.md @@ -159,9 +159,9 @@ No partial milestones are closed here; this is a reconciliation snapshot. ## Proposed next delivery order 1. Complete issue/evidence reconciliation without closing partial milestones. -2. Design a bounded #28 catalog contract with explicit grouping/reassignment and - stable model/file identities; retain PHP/PDO/Phinx and the existing repositories. -3. Extend #18/#20 with immutable, confirmed manifests and safe source selection. +2. **COMPLETED: Design bounded #28 catalog contract with explicit grouping/reassignment and + stable model/file identities** — see `MeshVaultSharedContracts/docs/superpowers/specs/2026-10-14-catalog-explicit-grouping-contract.md` +3. Implement explicit confirmed grouping with `ExplicitImportGroupingAdapter` and persisted decisions. 4. Resolve #24/#25 publication recovery before calling imports restart-safe. 5. Add progress and retry contracts (#26/#27), then M4 CRUD/removal/downloads and serialized folder/model moves. Complete schema prerequisites as their contracts @@ -169,3 +169,26 @@ No partial milestones are closed here; this is a reconciliation snapshot. M5 metadata, M6 browse/search, M7 lifecycle/duplicate review and M8 hardening/release remain ahead. No production readiness or percentage-complete claim is implied. + +## Design Phase Complete: Explicit Grouping & Stable Identity (2026-10-14) + +The bounded #28 catalog contract for explicit grouping and stable identity has been designed and documented. This extends Tasks 1-4 contracts without breaking them. + +**Key Deliverables:** +- **New Interface**: `ExplicitImportGroupingAdapterInterface` with `modelFor()`, `persistDecisions()`, `recoverDecisions()` +- **New Implementation**: `ExplicitImportGroupingAdapter` supporting explicit model_id, folder_path+model_name, and fallback to legacy guessed +- **Database Migration**: `import_jobs_decisions` table for decision persistence +- **Repository Extensions**: `recordGroupingDecision`, `getGroupingDecisions`, `updateItemManagedPath` +- **Catalog Service Extensions**: `findModel`, `listModelsInFolder`, `getOrCreateModel` +- **ImportService Integration**: Optional `$groupingContext` parameter for explicit grouping +- **Worker Atomic Publish**: Temp copy → atomic rename + catalog register in single savepoint (addresses #24 crash gap) +- **Backward Compatibility**: Legacy adapter unchanged; explicit adapter opt-in via container + +**Acceptance Criteria Addressed:** +- #18: Confirmed explicit grouping (user confirmation) — via context parameter and decision persistence +- #20: Explicit user-confirmed grouping; stable model identity across imports; grouping persistence — via new adapter and decision table +- #24: Crash between publish and suffix save — via atomic publish-then-register pattern + +**Out of Scope (Future):** UI (#14), incremental scanner (#15), missing-file UI (#25), progress/retry contracts (#26/#27), search/facets (#29), duplicate review (#30) + +**Next Phase:** RED tests → GREEN implementation per implementation sequence in contract §13.