# Task 13 Implementation Report ## Status DONE_WITH_CONCERNS ## Changes - Updated stale harness/backend/frontend tests and fixtures to the Task 13 internal Qdrant/Ollama contract. - Made `deploy/workspaces/psd.yaml.example` generic while preserving schema-v3 Qdrant/Ollama shape. - Fixed `scripts/workspace-registry-smoke.sh` to pass the required legacy migration `--collection` and prove exact Docker cleanup, including its smoke image. - Updated `PROJECT_STATE.md` with only evidence observed in this run. Changed files: - `PROJECT_STATE.md` - `backend/test/routes-workspaces.test.ts` - `backend/test/workspace-runtime-handoff.test.ts` - `backend/test/workspaces-contracts.test.ts` - `backend/test/workspaces-git-repository.test.ts` - `deploy/workspaces/psd.yaml.example` - `frontend/src/shell/NewSessionDialog.test.tsx` - `harness/tests/test_adapter_command_regressions.py` - `harness/tests/test_workspace.py` - `scripts/task13-runtime-fixture-check.ts` - `scripts/test-verify-workspace-install-docs.sh` - `scripts/workspace-registry-smoke.sh` ## Verification Deterministic gates: - `cd harness && .venv/bin/pytest -q && .venv/bin/ruff check .` - Initial red: 2 harness pytest failures. - After fixture fixes: harness pytest passed `819 passed, 4 deselected, 74 warnings in 27.73s`. - Ruff still failed with `Found 220 errors`; treated as existing unrelated debt. - Touched harness files verified clean with `cd harness && .venv/bin/ruff check tests/test_adapter_command_regressions.py tests/test_workspace.py && .venv/bin/pytest -q tests/test_adapter_command_regressions.py::test_solved_index_writes_through_writer_only_factory_store tests/test_workspace.py::test_load_workspace_expands_env_vars`: `All checks passed!` and `2 passed, 2 warnings in 0.14s`. - `cd backend && npx vitest run && npx tsc --noEmit -p . && npm run build` - Initial red: 4 backend Vitest failures. - After fixes: `Test Files 39 passed (39)`, `Tests 464 passed (464)`, TypeScript passed, build passed. - `cd frontend && npx vitest run && npx tsc -b && npm run build` - Initial red: 1 frontend Vitest failure. - After fix: frontend Vitest passed `374/374`, TypeScript passed, build passed with Vite `built in 6.55s`. - `git diff --check` - Passed with no output. Focused reruns: - `cd backend && npx vitest run test/workspaces-migrate-legacy.test.ts test/workspaces-contracts.test.ts test/routes-workspaces.test.ts test/workspace-runtime-handoff.test.ts test/workspaces-git-repository.test.ts && cd .. && ./scripts/test-no-deployment-coupling.sh && ./scripts/verify-workspace-install-docs.sh --fixtures-only && git diff --check` - `Test Files 5 passed (5)`, `Tests 35 passed (35)`. - Coupling guard passed: `no active retired deployment or external semantic coupling found.` - Install docs fixtures passed through `relative secret-source fixture rejected passed`. Deployment contracts: - `./scripts/test-default-compose.sh && ./scripts/test-unified-compose.sh && ./scripts/test-internal-semantic-compose.sh && ./scripts/test-no-deployment-coupling.sh && ./scripts/test-compose-secret-policy.sh && ./scripts/verify-workspace-install-docs.sh --fixtures-only` - Passed. Output included: - `default Compose contract passed.` - `unified Compose contract passed.` - `internal semantic Compose/script contracts passed.` - `no active retired deployment or external semantic coupling found.` - `Compose secret policy passed.` - install-doc fixture checks through `relative secret-source fixture rejected passed`. Docker smokes: - `/usr/bin/time -p ./scripts/internal-semantic-smoke.sh` - Passed: `Task 13 internal semantic smoke passed.` - Cleanup proof: `no labeled containers, volumes, networks, or images remain for 20260808200245-83368-17823.` - Duration: `real 217.34`. - `/usr/bin/time -p ./scripts/workspace-registry-smoke.sh` - Initial red: `usage: migrate-legacy --input --output --collection [--id ]`. - After fix: `workspace registry smoke passed`. - Cleanup proof: `no compose containers, volumes, networks, or image remain for thoth-workspace-registry-smoke-89671.` - Duration: `real 9.93`. - `/usr/bin/time -p ./scripts/unified-deployment-smoke.sh` - Passed: `Task 13 full deployment smoke passed.` - Cleanup proof: `no labeled containers, volumes, networks, or images remain for 20260808200706-85638-13391.` - Duration: `real 125.57`. - `/usr/bin/time -p ./scripts/thothctl-update-smoke.sh` - Passed: `Task 13 update deployment smoke passed.` - Cleanup proof: `no labeled containers, volumes, networks, or images remain for 20260808200918-87340-10404.` - Duration: `real 85.40`. - `/usr/bin/time -p ./scripts/server-deployment-smoke.sh` - Passed: `Task 13 Linux server deployment smoke passed.` - Cleanup proof: `no labeled containers, volumes, networks, or images remain for 20260808201047-88645-20675.` - Duration: `real 55.99`. Final audit: - `rg -n "pgvector|local-vector|THT_VECTOR_|EMBEDDING_BASE_URL|openai_compatible|ollama_compatible" . --glob '!docs/plans/**' --glob '!docs/superpowers/**' --glob '!**/node_modules/**' --glob '!**/.venv/**' --glob '!**/.git/**'` - Returned matches in legacy schema-v1/v2 support, migration tests, negative guards, historical notes, and older harness docs/code. - This remains a concern: the audit is not clean under the brief's strict expected outcome. - `git status --short` - Before report/commit, contained only intentional Task 13 changes. ## Image and Host Evidence - Host CPU: `Apple M4 Pro`. - Host OS: `Darwin MacProM4-di-Marco.local 25.5.0 Darwin Kernel Version 25.5.0: Tue Jun 9 22:28:34 PDT 2026; root:xnu-12377.121.10~1/RELEASE_ARM64_T6041 arm64`. - Docker server: `29.6.2 linux/arm64`. - Verified pinned images: - `qdrant/qdrant:v1.18.2@sha256:75eab8c4ba42096724fdcfde8b4de0b5713d529dde32f285a1f86fdcb2c9e50c`. - `ollama/ollama:0.32.0@sha256:57f573b47f1f71ebb445789f279fe3e596a8beab182f7cf486db9205bad87c5a`. - Workspace registry smoke ephemeral image: - Manifest list: `sha256:4d056bf2cb38d0e8ede91fbf121df1f9f18caee0d401581618ccef9ed8a55e73`. - Config: `sha256:613f8fb28c0517adee4085f41bc447f2c3813b0fdbb7b26624bfb4cb192b6fd8`. - Removed during cleanup. ## Manual Gates - GPU exposure gate (`THOTH_ENABLE_EMBEDDING_GPU=1` on Linux): not executed in this run. - Windows Docker Desktop startup/manual job: not executed in this run. ## Commits - `4e810af` (`test: align qdrant ollama verification fixtures`) - `7c09b98` (`docs: record qdrant ollama verification`) ## Known Limitations - Broad harness Ruff remains existing unrelated debt: `Found 220 errors`. - Final active-reference audit is not clean; it still finds legacy/negative-guard references outside explicit migration fixture files. - Ephemeral Task 13 core/frontend image IDs from `internal-semantic-smoke.sh`, `unified-deployment-smoke.sh`, `thothctl-update-smoke.sh`, and `server-deployment-smoke.sh` were removed by exact cleanup and were not emitted in stdout; pinned Qdrant/Ollama digests and the workspace-registry smoke image digest were captured. ## Fix Round 1 — reviewer findings Status: DONE Changes: - `scripts/workspace-registry-smoke.sh` now derives the smoke image reference from the already unique Compose project instead of using the global tag `thothii-workspace-registry-smoke:local`. - The workspace-registry cleanup helpers remove and verify only the exact per-run image reference, plus Compose resources labeled with the exact project. - Added deterministic self-test coverage in `backend/test/workspaces-migrate-legacy.test.ts` via `WORKSPACE_REGISTRY_SMOKE_SELF_TEST=image-cleanup-identity`; it stubs Docker and fails if cleanup touches same-repository foreign tags such as `:local` or another project tag. - Updated active harness/testing/PRD docs and Python comments that still described the current semantic store as pgvector/vectordb. Preserved schema-v1/v2 and harness legacy compatibility fixtures. - Updated `PROJECT_STATE.md` with fix-round smoke evidence and a precise, non-overclaiming audit limitation. Focused verification: - `cd backend && npx vitest run test/workspaces-migrate-legacy.test.ts` - Passed: `7 passed`. - `cd harness && .venv/bin/pytest -q tests/test_memory_save_one.py tests/test_adapter_command_regressions.py tests/test_solved_search_cli.py tests/test_search_pack.py` - Passed: `22 passed, 14 warnings`. - `cd harness && .venv/bin/ruff check tht/memory.py tht/search/__init__.py tht/workspace.py tht/vectorstore/store.py tests/test_memory_save_one.py tests/test_adapter_command_regressions.py tests/test_solved_search_cli.py` - Passed: `All checks passed!` - `bash -n scripts/workspace-registry-smoke.sh && WORKSPACE_REGISTRY_SMOKE_SELF_TEST=image-cleanup-identity bash scripts/workspace-registry-smoke.sh` - Passed: `workspace registry smoke image cleanup identity self-test passed`. - `./scripts/test-no-deployment-coupling.sh` - Passed: `no active retired deployment or external semantic coupling found.` - `./scripts/verify-workspace-install-docs.sh --fixtures-only` - Passed through `relative secret-source fixture rejected passed`. - `cd backend && npx tsc --noEmit -p .` - Passed with no output. - `/usr/bin/time -p ./scripts/workspace-registry-smoke.sh` - Passed: `workspace registry smoke passed`. - Built exact per-run tag: `thothii-workspace-registry-smoke:thoth-workspace-registry-smoke-thoth-workspace-registry-smoke-10vi3a-19157`. - Manifest list: `sha256:715b943057929418cad4aa71806d9edbaf823555d19bda6b875297617463fd4a`. - Config: `sha256:a566521981e08958aae9a12bfc7803bb5f3f835536b4bb8c39df8fcf26063161`. - Cleanup proof: `no compose containers, volumes, networks, or image remain for thoth-workspace-registry-smoke-thoth-workspace-registry-smoke-10vi3a-19157.` - Duration: `real 42.06`. Fix-round audit command: - `rg -n "pgvector|local-vector|THT_VECTOR_|EMBEDDING_BASE_URL|openai_compatible|ollama_compatible" . --glob '!docs/plans/**' --glob '!docs/superpowers/**' --glob '!**/node_modules/**' --glob '!**/.venv/**' --glob '!**/.git/**'` Categorized remaining hits: - Backend legacy parser/migration compatibility, kept deliberately non-operational for schema-v1/v2 descriptors: `backend/src/workspaces/schema.ts`, `types.ts`, `migrate-legacy.ts`, `runtime-renderer.ts`, `bindings.ts`, `contracts.ts`, `diagnostics.ts`. - Backend negative guards and legacy fixture tests: `backend/test/workspaces-schema.test.ts`, `workspaces-migrate-v2-qdrant.test.ts`, `workspace-registry.test.ts`, `workspace-runtime-renderer.test.ts`, `workspaces-bindings.test.ts`, `workspaces-contracts.test.ts`, `workspaces-diagnostics.test.ts`, `workspaces-git-repository.test.ts`, `routes-workspaces.test.ts`, `routes-sessions.test.ts`, `provider-credentials.test.ts`. - Secret/env scrub guards for retired variables: `backend/src/config.ts`, `backend/src/config/secret-bundle.ts`, `backend/src/pi/provider-credentials.ts`, `scripts/compose-with-preflight.sh`, `scripts/test-external-compose-lifecycle.sh`. - Deployment negative guards and fixture-scope tests: `scripts/test-no-deployment-coupling.sh`, `scripts/test-no-deployment-coupling-scope.sh`, `scripts/test-preprocess-compose-config.sh`, `scripts/test-verify-workspace-install-docs.sh`, `scripts/verify-workspace-install-docs.sh`, `scripts/vector-rotate-bootstrap-password.sh`. - Harness legacy config compatibility and fixtures: `harness/tht/config.py`, `harness/tht/config_compat.py`, `harness/tests/test_config_resources.py`, `harness/tests/l2/test_session_ablazione.py`, `harness/workspaces/tht.example.yaml`, `harness/workspaces/tht-test.yaml`. - Retained off-repository migration SQL fixtures: `harness/scripts/create_vector_reader_rpc.sql`, `harness/scripts/create_vector_writer_rpc.sql`. - Historical/reference notes, not active operator contracts: `brain/codebase/datamart-builder-deployment-gotchas.md`, `PROJECT_STATE.md`. - Gitignored task report self-reference: `.superpowers/sdd/2026-08-08-internal-qdrant-ollama/task-13-implementation.md`.