Files
0pt/docs/07-dependencies.md
T
Claude Opus 5 4bc79c25d3
CI (SIAX Cloud) / integration (push) Successful in 36s
CI (SIAX Cloud) / quality (push) Successful in 1m3s
CI (SIAX Cloud) / security (push) Successful in 23s
Security Scan (SIAX Cloud) / security (push) Successful in 31s
CI (SIAX Cloud) / integration (pull_request) Successful in 32s
CI (SIAX Cloud) / security (pull_request) Successful in 29s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 27s
CI (SIAX Cloud) / quality (pull_request) Successful in 55s
docs: withdraw the "Superset / OpenMetadata are OUT" rows — both are canonical
`docs/02-architecture.md` was written when 0pt was planned as a standalone SaaS
product. Its "Stack decisions — OUT (do not add)" table rejects Apache Superset
("Metabase already covers BI") and DataHub/OpenMetadata ("enterprise-heavy"),
and the "IN" table names Metabase as the BI choice.

Under the SIAX Cloud analytics decision, 0pt is the canonical
Analytics/Data/Semantic owner — there is no BI0/Analytics0 repo and no separate
Superset platform. Superset is the canonical BI engine (Apache-2.0, official
embed SDK + guest tokens) and OpenMetadata the canonical catalog, default ahead
of DataHub. Metabase, DataHub, Lightdash, Rill and Grafana are optional App
Catalog apps, never the platform default.

This repository had already shipped both of the "rejected" tools, which is what
makes the old rows self-contradicting rather than merely stale:

  * src/metadata/openmetadata-adapter.ts + tests/contracts/metadata-features.contract.test.ts
    (STATUS.md classifies the OpenMetadata projection IMPLEMENTED)
  * services/infra/docker-compose.data-stack.yml defines a `superset` service
    (apache/superset:latest), and docs/compliance/OSS-INVENTORY.md line 74
    already inventories `superset | Apache-2.0 | services/infra/data-stack`

Falsifiable check used (asserts the OUT table no longer rejects either tool and
that the IN table's BI row names Superset):

  origin/main            -> FAIL (4 findings)
  this branch            -> PASS
  mutation: BI row back to Metabase        -> FAIL
  mutation: OUT rows un-struck             -> FAIL

Docs only. No workflow files, no .gitignore, no source. `node scripts/siax-doctor.mjs`
gives 39/40 on this branch and 39/40 on main — the one failure (P1-15 CODEOWNERS
missing) is pre-existing and is what PR #19 supplies.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 09:46:35 +02:00

12 KiB

07 · Dependencies & repos to import

Curated. Each entry: what it is, where it slots in, how to install. Do not import on reputation/star-count — several items in earlier brainstorming were unverified or hallucinated (see Exclusions). Verify each repo exists and is maintained before adopting.

This is a plan, not a status report. Every table below lists what should be imported for the target architecture in docs/06-data-engine.md. A Status column has been added to each table (verified this pass against services/api/requirements.txt and root package.json — the actual, current dependency manifests, read in full). Read the status column before assuming a package is already wired in; most of the data-engine tier (OCR, NER, quality checks, orchestration) is still not installed.

Frontend (Next.js on Vercel)

Package Purpose Install Status
next, react, typescript App Router base npx create-next-app@latest --ts Installed — next@16.0.10, react@19.2.0, typescript@^5 in package.json
tailwindcss styling (mono tokens) per Next setup Installed — tailwindcss@^4.1.9
shadcn/ui base components npx shadcn@latest init Installed via copy-in, not as a runtime dep — no shadcn package in package.json (expected: the shadcn CLI copies component source into components/ui/); the underlying @radix-ui/react-* primitives it generates against are installed individually and present
@tanstack/react-table or ag-grid-react data tables / catalog grid npm i @tanstack/react-table Not installed — neither package present
@uppy/core @uppy/react @uppy/dashboard @uppy/aws-s3 file upload → R2 (presigned) npm i @uppy/core @uppy/react @uppy/dashboard @uppy/aws-s3 Not installed
next-auth (Auth.js) + @auth/pg-adapter single auth, Postgres-backed npm i next-auth @auth/pg-adapter Not installed. Matches a broader, confirmed gap: there is no auth/session system anywhere in this repo yet (app/api/orders/route.ts's own GET handler has the literal comment "org scoping added with auth" — i.e. not yet). Several app/api/0pt/* routes currently read tenant_id/project_id straight from the request body as a result — a real, open security gap, not a deliberate design; see docs/09-build-plan.md Phase 3 for the planned fix (not built anywhere yet, Simon's call on design).
stripe / @stripe/stripe-js checkout + portal npm i stripe @stripe/stripe-js Partially installed — stripe@^22.2.3 (server SDK) is present; @stripe/stripe-js (client SDK) is not
resend / react-email transactional email npm i resend @react-email/components Not installed
lenis (optional) smooth scroll (keeps all effects) npm i lenis Not installed
recharts (only if needed) charts inside DataArtifact/dashboards npm i recharts Installed — recharts@2.15.4

Catalog/search in v1 = Postgres full-text. Add Meilisearch later only past a few thousand rows.

Backend / workers (Python, FastAPI — existing)

services/api/requirements.txt currently pins exactly 9 packages. Everything else in this table is still to be added — this is the single biggest gap between this doc's plan and the running code (see docs/06-data-engine.md's "Pipeline stages" section for what that means stage-by-stage: only official-API sourcing and rapidfuzz-based dedup are real today; extraction/OCR, NER, and quality-checking have no code at all).

Package Purpose Install Status
fastapi, uvicorn, pydantic API (existing) pip install fastapi uvicorn pydantic Installed — fastapi==0.115.6, uvicorn[standard]==0.34.0, pydantic==2.10.4
httpx polite HTTP fetch (identifies itself, obeys rate limits) pip install httpx Installed and actively used — httpx==0.28.1, every connector in sources/connectors.py and sources/financials.py goes through it
pyyaml parse sources.yaml pip install pyyaml Installed and used — pyyaml==6.0.2, loaded once in orchestrator/main.py
rapidfuzz dedup / fuzzy matching pip install rapidfuzz Installed and used — rapidfuzz==3.11.0, the only matching engine in workers/resolve.py
python-dotenv, tenacity env loading, retry helper — Installed, python-dotenv==1.0.1 / tenacity==9.0.0 — present in requirements.txt but not yet visibly imported in the worker/orchestrator/sources files read this pass; not confirmed wired up
sqlalchemy / asyncpg Postgres access (align db.py) pip install sqlalchemy asyncpg asyncpg==0.30.0 is installed but unused. No file in services/api imports it or issues a query — confirmed by grep. orchestrator/main.py reads DATABASE_URL once, only to report a boolean in /health. Orders/jobs live in in-memory dicts that reset on restart. sqlalchemy is not installed at all. There is also no db.py anywhere in this repo — an older doc reference to src/workers/db.py is stale; that path does not exist.
alembic migrations pip install alembic Not installed. Migrations currently ship as plain numbered SQL files in sql/ (001_init.sql, 004_iceberg_write_boundary.sql), applied ad hoc, not via Alembic.
celery + redis or existing adaptive_router/queue job queue/concurrency pip install celery redis Neither Celery nor a Python Redis client is installed. workers/queue.py is a small in-process asyncio.Queue wrapper (single-worker dev only, by its own docstring). infra/docker-compose.yml does run a redis container, but nothing in services/api currently talks to it.
scrapy or crawlee orchestrate authorized fetches pip install scrapy Not installed. No HTML-scraping library of any kind (also no bs4/lxml) exists in this codebase — confirmed by grep. Tier-2 "authorized public web" sourcing (docs/06) has no code path yet; only tier-1 official-API connectors exist.
playwright public JS-rendered pages, politely pip install playwright && playwright install chromium Not installed. No browser_worker.py file exists anywhere in this repo either — an older doc reference to reconciling a FlareSolverr stage inside it is moot; there's nothing to reconcile in the current Python engine (see docs/06-data-engine.md's Known Issue callout for where a bypass stack did briefly exist, on a different git remote).
unstructured parse PDF/HTML/DOCX/images → elements pip install "unstructured[all-docs]" Not installed.
paddleocr / pytesseract OCR cascade pip install paddleocr pytesseract (+ tesseract bin) Not installed. No OCR code or ocr_worker module exists anywhere in this repo.
spacy (+ models) / transformers NER, entity resolution (multilingual) pip install spacy transformers Not installed. workers/resolve.py's entity resolution is rapidfuzz string-similarity only — no NER, no multilingual normalization.
polars fast tabular processing pip install polars Not installed.
great-expectations data quality checks in pipeline pip install great-expectations Not installed, and nothing equivalent exists either. The entire QA stage in workers/pipeline.py is a single confidence-threshold filter (r["confidence"] >= threshold) — no validity/completeness/freshness/uniqueness checks, no quality report emitted or stored. This is a real, currently-open gap, not a doc typo: a broader, confirmed finding this session is that 0pt's data-quality/QA layer, once described elsewhere in this doc corpus as already built and tested (src/services/quality-check-service.ts etc.), does not exist in code at all — zero commits in this repo's history, any branch, for any of those files. Every doc that used to make that claim (docs/ICEBERG_WRITE_BOUNDARY.md, docs/11-lakehouse-write-plan.md, docs/P0_QUERY_SOURCE_FLOW.md) has since been corrected. The Python engine independently confirms the same absence.
dbt-postgres (optional) transform layer pip install dbt-postgres Not installed.
pgvector (Postgres ext) embeddings/matching CREATE EXTENSION vector; The pgvector/pgvector:pg16 image is used in infra/docker-compose.yml, so the extension is available in the container, but no code in services/api runs a vector query — not exercised by any of the files read this pass
boto3 (or aioboto3) R2 (S3-compatible) pip install boto3 Not installed. No R2/S3 upload code found in services/api this pass.
stripe (python) webhook handling pip install stripe Not installed in services/api/requirements.txt (the JS stripe package in root package.json is separate and unrelated to this table)

Self-hosted services (docker-compose on the VPS)

Service Purpose Image Status
NocoDB Airtable-style views over existing Postgres tables; embedded "Min data" nocodb/nocodb Wired in infra/docker-compose.yml (nocodb/nocodb:latest, points at the same postgres service) — not independently verified running/reachable this pass
Metabase customer-facing dashboards; embedded metabase/metabase Wired in infra/docker-compose.yml (metabase/metabase:latest, same Postgres backend) — not independently verified running/reachable this pass
Postgres (or Neon managed) backbone (+ pgvector) pgvector/pgvector:pg16 Wired in infra/docker-compose.yml — but see the backend table above: the FastAPI service that should write to it currently does not (in-memory only)
Redis (if Celery) queue redis Container is wired in infra/docker-compose.yml, but no Python code in services/api currently connects to it (no Celery, no redis client installed)
Meilisearch (later) catalog search at scale getmeili/meilisearch Not in infra/docker-compose.yml yet — consistent with this doc's own "later" framing, not a gap

External managed (free/cheap tiers)

  • Vercel — Next.js hosting.
  • Cloudflare R2 — object storage (presigned URLs). No R2 client code found in this pass (boto3 not installed; no @uppy/aws-s3 in package.json) — treat as not yet wired regardless of account status.
  • Stripe — payments (test mode first). Server SDK (stripe npm package) is installed; whether a live/test key is actually configured was not verified this pass (no secret material read).
  • Resend — email. Not installed (see frontend table).
  • Neon (optional) — managed Postgres. infra/docker-compose.yml runs its own Postgres container instead; no evidence either way of a Neon instance actually in use.

EXCLUSIONS — do not import

  • Bypass/stealth/evasion: FlareSolverr, "CloakBrowser", undetected-chromedriver/undetected-playwright (as bypass), proxy/fingerprint-rotation engines, any "WAF bypass" repo. Prohibited by CLAUDE.md §1 — they destroy the honest-accuracy positioning and create legal exposure. This is not hypothetical: a real WAF-bypass/proxy-rotation/fake-identity scraper stack (services/scrapers/*) briefly existed on this repo's Gitea remote (git.siax.io/sax3l/0pt, three commits dated 2026-07-13) and has since been removed there via PR #1. It never touched origin (github.com/sax3l/0pt), which this doc corpus was verified against. See docs/06-data-engine.md's Known Issue callout for the full, unresolved detail — which remote is canonical is Simon's call, not decided this pass.
  • Fake-account automation on Apollo/Cognism/etc.
  • Unverified / likely-hallucinated from earlier brainstorming: "CloakBrowser/CloakHQ", "Rota proxy engine", "OpenClaw". Do not adopt unless you confirm a real, maintained project — and even then, not if it falls in the bypass category.
  • Overlapping tools already decided against (Baserow/Teable, Trigger.dev, Delta Sharing in v1) — see docs/02-architecture.md. Corrected 2026-09-06: Superset and OpenMetadata were previously listed here as rejected. They are canonical (BI engine and catalog respectively) — see the correction note under "Stack decisions — OUT" in docs/02-architecture.md.

Note on real-but-overhyped tools (Firecrawl, browser-use, etc.): they exist, but ignore inflated star-counts and only adopt if they fit a compliant role and don't duplicate the stack.