Compare commits

...
+26 -3
View File
@@ -159,9 +159,9 @@ No partial milestones are closed here; this is a reconciliation snapshot.
## Proposed next delivery order ## Proposed next delivery order
1. Complete issue/evidence reconciliation without closing partial milestones. 1. Complete issue/evidence reconciliation without closing partial milestones.
2. Design a bounded #28 catalog contract with explicit grouping/reassignment and 2. **COMPLETED: Design bounded #28 catalog contract with explicit grouping/reassignment and
stable model/file identities; retain PHP/PDO/Phinx and the existing repositories. stable model/file identities** — see `MeshVaultSharedContracts/docs/superpowers/specs/2026-10-14-catalog-explicit-grouping-contract.md`
3. Extend #18/#20 with immutable, confirmed manifests and safe source selection. 3. Implement explicit confirmed grouping with `ExplicitImportGroupingAdapter` and persisted decisions.
4. Resolve #24/#25 publication recovery before calling imports restart-safe. 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 5. Add progress and retry contracts (#26/#27), then M4 CRUD/removal/downloads and
serialized folder/model moves. Complete schema prerequisites as their contracts 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 M5 metadata, M6 browse/search, M7 lifecycle/duplicate review and M8 hardening/release
remain ahead. No production readiness or percentage-complete claim is implied. 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.