Files
ThothII/.superpowers/sdd/2026-08-08-internal-qdrant-ollama/task-5-report.md
T

3.1 KiB
Raw Blame History

Task 5 Report — Implement the Qdrant VectorStore adapter

Status

Implemented on 2026-08-08 in /Users/mp/projects/ThothII/.worktrees/git-workspace-registry.

RED evidence

Command:

cd harness
./.venv/bin/pytest tests/test_qdrant_vector_store.py tests/test_vector_port_contract.py -q

Observed before implementation:

  • exit code 2
  • collection failed during import because the adapter did not exist yet

Representative failures:

  • ModuleNotFoundError: No module named 'tht.adapters.vector.qdrant'

GREEN evidence

Focused behavior suite:

cd harness
./.venv/bin/pytest tests/test_qdrant_vector_store.py tests/test_vector_port_contract.py -q
  • exit code 0
  • 31 passed, 1 warning

Touched-file lint:

cd harness
./.venv/bin/ruff check tht/adapters/vector/qdrant.py tht/adapters/vector/__init__.py \
  tht/ports/vector.py tht/vectorstore/records.py tht/vectorstore/store.py \
  tests/test_qdrant_vector_store.py tests/test_vector_port_contract.py
  • exit code 0
  • All checks passed!

Patch hygiene:

git diff --check
  • exit code 0

What changed

  • added QdrantVectorStore with direct requests-based REST calls for:
    • GET /collections/{collection}
    • PUT /collections/{collection}
    • PUT /collections/{collection}/index
    • PUT /collections/{collection}/points?wait=true
    • POST /collections/{collection}/points/query
    • POST /collections/{collection}/points/scroll
    • POST /collections/{collection}/points/delete?wait=true
  • implemented idempotent collection provisioning for 1024 dimensions and Cosine distance
  • created deterministic UUIDv5 point IDs from workspace, semantic kind, and canonical record key
  • preserved canonical record identity and only upserted/deleted points matching the exact workspace and generation filters
  • added Qdrant payload helpers so stored payloads carry:
    • workspace_id
    • grouped semantic kind (schema, evidence, memory)
    • original record_kind
    • canonical record_key
    • content_hash
    • existing Thoth metadata fields
  • mapped Qdrant payloads back into existing VectorHit objects without losing the original Thoth kind
  • exported the new adapter from the public vector adapter package and added focused contract tests
  • sanitized timeout and malformed-response failures so CLI-facing callers do not leak raw endpoint details

Self-review

  • confirmed collection mismatch fails without any delete/recreate path
  • confirmed every query/scroll/delete operation includes a workspace filter
  • confirmed the adapter never deletes or rewrites unrelated Qdrant points
  • added keyword payload indexes for all filter-critical fields used here, including document_id for exact Evidence filtering

Concerns

  • the requested adversarial-review skill could not run its full external reviewer flow in this environment because the skill’s referenced brain/ files are missing at /Users/mp/.agents/skills/adversarial-review; I performed a manual adversarial self-review instead
  • the focused suite still emits one pre-existing warning from testcontainers.postgres