spec.md is the source of truth. Ticket 01 provides the local Postgres sandbox
and deterministic fictional sources. Ticket 02 adds the pinned business ontology,
versioned proposed mappings, operator approval gate and canonical ingestion.
See services/README.md for application use, audit interfaces,
read-only source guarantees and sandbox limitations. Ticket 03 adds governed
queries; ticket 04 adds proof manifests and local Markdown/XLSX/PPTX artifacts.
See services/QUERY_API.md for their contracts and
issues/04-validation.md for validation evidence.
- Linux with Docker Engine and Docker Compose (
--waitsupport), accessible to your user. - Python 3.11,
uv, and GNU Make. No application service or cloud credentials needed. - Local TCP port 55432 available. The Compose project name
stillroom-labis reserved for this disposable lab; do not reuse it for real data.
make seedThis installs locked Python dependencies in .venv and replaces only
sources/generated/. Python package caches and temporary files stay inside the
checkout. Faker uses the fixed seed 20260906 and the en_AU locale; dates and IDs
are fixed, money is serialized as decimal strings. uv.lock pins dependencies.
No Postgres connection is needed to seed the five file-based sources:
sources/generated/crm.sqlite— customers and opportunitiessources/generated/invoices.csvandpayments.csvsources/generated/support.jsonsources/generated/emails/*.txtsources/generated/policies/*.md— mock Obsidian vault, frontmatter + wiki-links
See sources/MESSINESS.md for every deliberate trap and source record pointer.
Generated data is ignored by Git and rebuilt rather than manually maintained.
Do not run seed and fixture tests concurrently: they rebuild the same sandbox.
docker compose up -d
docker compose exec -T postgres pg_isready -U lab -d lab
docker compose down -vOnly Postgres 15 runs. Host endpoint: 127.0.0.1:55432; database/user lab,
password lab-scratch-only (public mock credential, never reuse for real data).
No extensions or additional service containers are installed. Ticket-02 tables
are initialized in a separate schema when Store() is constructed.
The stock postgres:15 tag tracks PostgreSQL 15 maintenance releases; source
fixture determinism does not depend on the Postgres image.
stillroom-lab_pgdata is a dedicated 256 MiB RAM-backed scratch volume. Data may
be lost on container stop or host reboot, not just down -v. Docker maintains its
own image/container/volume metadata in the daemon's storage; application source
and tooling files live in this checkout. Do not use this environment for durable
or private data. down -v affects this Compose project only, not Honcho.
make typecheck
uv run --frozen pytest tests/test_seed.py
uv run --frozen pytest tests/test_policies.py
uv run --frozen pytest tests/test_messiness.py
uv run --frozen pytest tests/test_environment.py
# Final gate:
make testThe Docker test starts real Postgres, checks runtime loopback binding, writes a
probe table, destroys the volume, starts again and verifies the table is gone.
It stops and removes the scratch volume in cleanup. The full suite resets this
lab database and requires Docker; it does not silently skip unavailable Docker.
Seed tests use an isolated repository-local seed-script/Makefile copy, compare
its generated bytes over consecutive runs and verify old files are removed.
They never rebuild the actual sources/generated/ ingestion inputs. Policy tests parse YAML and resolve wiki-links; fixture tests
read actual SQLite/CSV/JSON/text records and check documented traps.
The suite covers permission enforcement, governed queries and proof-carrying artifacts, the typed agent, and read-only Streamlit UI. The ticket-06 benchmark remains separate; no live-model quality or comparative benchmark claim is made. See agent/README.md for explicit inference opt-in and ui/README.md for local startup and the read-only boundary.