T22 Workspace Reconciliation Validation
T22 Workspace Reconciliation Validation
Scope
- Task: T22 — Implement sync and Workspace reconciliation
- Requirements: VES-WSP-006, VES-BST-004…005, VES-INT-004…005, and VES-MEM-003
- Commit target:
feat(workspace): implement sync and reconcile - Focused evidence: 38 cases — 35 integration and 3 e2e
- Spec deviations: none
T22 introduces an application-level, backend-neutral reconciliation service. Canonical Project registrations carry stable identity and explicit lineage; the service never derives identity from a path. SQLite migration 004_sync_state stores the local generation snapshot, Project registry, projection mappings, ingestion-manifest references, and rebuild source policy. Concrete scanner, placement, effect, and Connector implementations remain behind their existing boundaries.
Deterministic gates
| Command | Result |
|---|---|
node --test tests/integration/workspace-reconcile.test.mjs tests/e2e/workspace-reconcile-e2e.test.mjs |
PASS — 38 passed, 0 failed/skipped |
node scripts/gate.mjs full |
PASS — canonical gate:full implementation; format, lint, typecheck, 1,208 unit, 41 contract, 135 integration, 10 e2e, and 32 fault cases |
node --test tests/architecture/*.test.mjs |
PASS — 10 passed, 0 failed/skipped |
Check A — sufficient, spec-anchored coverage
| Criterion / requirement | Exact assertion evidence | Spec-defined outcome | Covered |
|---|---|---|---|
| VES-BST-004: repeated unchanged sync converges | tests/integration/workspace-reconcile.test.mjs:33; tests/e2e/workspace-reconcile-e2e.test.mjs:22 |
Same state digest, zero operations/effects/rebuilds/writes, including after SQLite restart | Yes |
| VES-BST-005: incompatibility fails before mutation | tests/integration/workspace-reconcile.test.mjs:58 |
Unsupported schema or minimum CLI reports the minimum compatible release before load or save | Yes |
| VES-WSP-006: move preserves stable identity | tests/integration/workspace-reconcile.test.mjs:83, :99 |
Same Project ID, explicit old/new paths, no persistence until accept |
Yes |
| VES-WSP-006: missing and retired Projects are destructive | tests/integration/workspace-reconcile.test.mjs:108, :116, :130, :139 |
Both require direction; accepted retirement retains the registry identity | Yes |
| VES-WSP-006: split and merge require declared lineage | tests/integration/workspace-reconcile.test.mjs:146, :161, :174, :183 |
Split/merge are recognized only from predecessor IDs and preserve that lineage | Yes |
| Multiple unresolved changes are all-or-nothing | tests/integration/workspace-reconcile.test.mjs:288 |
No partial canonical persistence while any destructive direction is missing | Yes |
| VES-INT-004: managed remote projection drift is explicit | tests/integration/workspace-reconcile.test.mjs:212, :227 |
No effect without direction; exact canonical-to-remote or remote-to-canonical effect after direction | Yes |
| VES-INT-005: acknowledgement loss reconciles before retry | tests/integration/workspace-reconcile.test.mjs:241; tests/e2e/workspace-reconcile-e2e.test.mjs:64 |
Recovery effect carries Connector, correlation marker, input digest, and retryProhibited: true |
Yes |
| VES-MEM-003: local state is rebuildable | tests/integration/workspace-reconcile.test.mjs:24, :268, :277 |
Generation/manifest/topology changes produce a canonical-source-and-ingestion-manifest rebuild requirement, never a tracked SQLite/vector file | Yes |
| Persistence is restart-safe and atomic | tests/e2e/workspace-reconcile-e2e.test.mjs:22, :39, :62 |
Normalized SQLite records survive restart; authorized multi-change reconciliation commits atomically | Yes |
| Stored-state integrity fails closed | tests/integration/workspace-reconcile.test.mjs:304 |
Content not matching its recorded digest is rejected before reconciliation | Yes |
| Minimum test floor | Focused runner: 38 passed | At least 30 integration/e2e cases | Yes |
No T22-owned precision gap remains. The service emits effect descriptions but does not bypass the T15/T16 Effect Broker; later CLI composition must durably plan those effects before dispatch.
Check B — non-shallow litmus
- Identity tests change paths while asserting the exact stable Project ID; a path-derived identity implementation fails.
- Split and merge tests use explicit predecessor IDs and include a single-successor counterexample that must not be guessed as a split.
- Direction tests assert the prior store write count and digest, so an implementation that mutates and later reports a warning fails.
- Restart tests close and reopen the real SQLite database and compare both semantic and runtime digests.
- Projection tests distinguish two opposite authorized directions and verify the expected remote version.
- A tampered persisted snapshot is rejected by recomputing its content digest, not merely trusting the database column.
Check C — necessary reverse mapping
| Test evidence | Requirement / criterion | Keep |
|---|---|---|
workspace-reconcile.test.mjs:24,33,268,277 |
VES-BST-004 and VES-MEM-003 generation/rebuild convergence | Yes |
workspace-reconcile.test.mjs:58,304 |
VES-BST-005 compatibility and local-state integrity | Yes |
workspace-reconcile.test.mjs:83,99,108,116,130,139 |
VES-WSP-006 move/missing/retired identity and direction | Yes |
workspace-reconcile.test.mjs:146,161,174,183 |
VES-WSP-006 explicit split/merge lineage | Yes |
workspace-reconcile.test.mjs:212,227 |
VES-INT-004 projection drift direction | Yes |
workspace-reconcile.test.mjs:241 |
VES-INT-005 reconciliation before retry | Yes |
workspace-reconcile-e2e.test.mjs:22,39,64 |
Persistent no-op, atomic topology, and restart-safe integration effects | Yes |
All 38 cases map to a named requirement or T22 done-when criterion. No speculative test remains.
Check D — guideline conformance
- Followed
.specs/features/verchestra-1.0/tasks.md: integration and e2e layers exceed the mandated floor andgate:fullpasses. - Followed AD-013/026: reconciliation and ports live in
application; Node digest and SQLite implementations live inplatform-node; architecture remains green. - Followed AD-032: uncertain remote outcomes produce reconciliation work with stable marker/input digest and prohibit blind retry.
- Followed AD-034/035: Project identity is stable and independent from scanner paths; reconciliation does not perform filesystem placement or writes.
- Followed AD-037: compatibility is checked before local persistence and local machine state remains outside canonical Git.
Adequacy verdict
PASS. Every T22-owned criterion has discriminating assertion evidence, all 38 focused cases are necessary and traceable, the complete full gate is green, and the adapter boundaries remain intact.