Files
ThothII/.superpowers/sdd/2026-08-08-internal-qdrant-ollama/task-13-implementation.md
T

12 KiB

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 <legacy-workspace.yaml> --output <repository-root> --collection <qdrant-collection> [--id <workspace-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.