{ "report": "PRODUCTION_EVIDENCE.json", "companion_doc": "IMPLEMENTATION_REPORT.md", "generated_at": "2026-09-01T21:10:00+02:00", "repo": { "remote": "https://git.siax.io/sax3l/0pt.git", "canonical_remote_per_claude_md": "git.siax.io/sax3l/0pt", "note": "A second remote (github.com/sax3l/0pt) also claims to be this repo per CLAUDE.md; explicitly unresolved and left to Simon. This pass worked only against git.siax.io." }, "branch": { "name": "feat/p010-data-os-completion", "renamed_from": "feat/p010-source-registry-persistence", "base_branch": "main", "base_commit": "f8bb0d5ab9f35c652d09f7639d20458cfe849f56", "head_commit": "9740e20818a8ce0a90498bdb12c501bc74395ac", "commits_on_branch": [ { "sha": "07b13bd8331017462ead11b9b2ce8fa9188e520f", "summary": "feat(data-os): Source Registry Postgres persistence + full HTTP route surface" }, { "sha": "9740e20818a8ce0a90498bdb12c501bc74395ac", "summary": "feat(data-os): TS/Python quality bridge + provenance fields + fault-injection tests" } ], "pushed_to_origin_this_pass": true, "diffstat_vs_base": { "files_changed": 47, "insertions": 3119, "deletions": 201 } }, "pull_request": { "url": "https://git.siax.io/sax3l/0pt/pulls/28", "number": 28, "base": "main", "head": "feat/p010-data-os-completion", "state_at_report_time": "open", "opened_this_pass": true }, "verification_methodology": { "description": "All numbers below were produced by a from-scratch verification pass: a fresh `git clone` of the pushed branch into an isolated directory, a fresh `pnpm install --frozen-lockfile`, and a fresh Python venv built from requirements-dev.txt. This is deliberately NOT a rerun inside the original working tree that developed the branch, to avoid reporting stale or environment-contaminated results.", "clean_clone_path_used_for_verification": "isolated scratch directory, discarded after this pass", "original_working_tree": "/home/simon/siax-platforms-work/0pt" }, "checks": [ { "name": "pnpm install --frozen-lockfile", "result": "ok", "note": "lockfileVersion 9, no resolution drift from the committed pnpm-lock.yaml" }, { "name": "typecheck", "command": "pnpm run typecheck", "underlying": "tsc -p tsconfig.check.json (src/**/*.ts + tests/**/*.ts)", "ci_gate": "blocking", "result": "pass", "errors": 0, "note": "Zero errors on the pristine clone. The original dev working tree separately contains 5 untracked/uncommitted stray paths (src/fleet/, src/graph/, src/metrics/, src/projections/, src/features/feature-registry.ts) that were already present before this pass (flagged in BEFORE_STATE.md as unaudited) and are NOT part of any commit on this branch or on main -- confirmed via `git diff --stat origin/main..feat/p010-data-os-completion` touching none of them, and via their total absence from the fresh clone. Running the same command inside that non-clean working tree surfaces 14 TS errors from those 5 files; that is local litter CI will never see, not a defect in this PR." }, { "name": "unit/integration tests (TypeScript)", "command": "pnpm run test", "underlying": "vitest run", "ci_gate": "blocking", "result": "pass", "test_files_passed": 34, "test_files_skipped": 3, "tests_passed": 256, "tests_skipped": 18, "tests_new_this_branch": 7, "new_test_file": "tests/p0/quality-bridge.test.ts", "skip_reason": "pre-existing .realinfra/.integration suites self-skip honestly when no live ST0RE/OpenSearch/ClickHouse is reachable from the verification environment", "sample_skip_stderr": "[realinfra] ST0RE (https://api.st0re.siax.io) not reachable this run (ST0RE responded HTTP 401) -- skipping honestly, not fabricating success." }, { "name": "lint", "command": "pnpm run lint", "underlying": "eslint src tests", "ci_gate": "advisory (continue-on-error in both .gitea/workflows/ci.yml and .github/workflows/ci.yml)", "result": "pre-existing failures only, zero introduced by this branch", "errors": 12, "warnings": 4, "verification": [ "git diff --stat origin/main..feat/p010-data-os-completion on every flagged file returns no output -- byte-identical to main", "ran `pnpm lint` against a worktree checked out directly at origin/main and got the identical 12 errors / 4 warnings" ] }, { "name": "build", "command": "pnpm run build", "underlying": "next build", "ci_gate": "blocking in .gitea/workflows/ci.yml; not run by .github/workflows/ci.yml (needs runtime secrets Vercel owns)", "result": "pass", "note": "Route manifest confirms new surface is built: /api/0pt/quality/{bridge-run,issues,rules,rules/[ruleId],runs,runs/[runId]} and /api/0pt/sources/{route,[sourceId],[sourceId]/{freshness,health,provenance,rights}} all present as dynamic routes." }, { "name": "Python engine tests", "command": "python -m pytest -v", "cwd": "services/api", "environment": "fresh venv, python3.12, requirements-dev.txt", "ci_gate": "NOT WIRED INTO CI -- both .gitea/workflows/ci.yml and .github/workflows/ci.yml state the Python engine is gated separately if/when a Python workflow is added; this pass did not add that workflow", "result": "pass", "tests_passed": 28, "tests_skipped": 2, "skip_detail": [ { "test": "test_cdc_interruption_not_implementable_against_real_code", "reason": "no CDC pipeline exists anywhere in services/api" }, { "test": "test_true_backfill_idempotency_not_implementable_against_real_code", "reason": "no delivery/order persistence layer exists anywhere in services/api" } ], "new_test_files": [ "services/api/tests/test_connectors_provenance.py", "services/api/tests/test_known_gaps.py", "services/api/tests/test_pipeline_fault_injection.py", "services/api/tests/test_quality_bridge.py", "services/api/tests/test_resolve_determinism.py" ] } ], "net_ci_status": { "gitea_ci_blocking_gates": { "typecheck": "green", "test": "green", "build": "green" }, "github_ci_blocking_gates": { "typecheck": "green", "test": "green" }, "advisory_only_not_blocking": ["lint (both workflows)", "typecheck:app (github only)"], "unwired_gate_not_in_ci": ["python pytest (services/api) -- manually verified green, no automated workflow yet"] }, "production_feature_flags": { "OPT_QUALITY_BRIDGE_ENABLED": { "default_shipped_value": "unset (treated as false)", "changed_by_this_pr": false, "activated_in_production_by_this_pass": false, "behavior_when_off": "quality_bridge.py makes zero network calls, returns status=disabled immediately; pipeline.py's delivery decision is completely unaffected", "behavior_when_on_but_bridge_unreachable": "fails open -- status=unavailable, delivery decision unaffected, error never raised into run_job", "behavior_when_on_and_reachable": "advisory only -- stamps a quality field on delivered provenance and records a score; does NOT and, per the current ExpectationEngine contract, currently CANNOT change which rows pipeline.py's confidence-threshold filter keeps or drops", "decision_owner": "Simon", "readiness_checklist_before_enabling": [ "OPT_QUALITY_BRIDGE_URL / OPT_QUALITY_BRIDGE_EDGE_URL must point at a reachable, authenticated 0pt.app deployment (cross-service network dependency -- Python engine and Next.js edge are typically different deploy targets)", "accept that this remains advisory-only (no per-row gating) unless the ExpectationEngine contract is separately extended to return per-row results", "recommended: enable against one non-production tenant/order first and confirm bridge-run round-trips before any production enablement" ], "manual_live_verification_performed_this_pass": { "what": "real `next dev` server (AUTH_ENFORCE=false, local only) + real Python pipeline hitting real brreg.no + real bridge-run round-trip + real QualityService score returned", "when": "during development of commit 9740e20, 2026-09-01", "repeatable_automated_equivalent": "services/api/tests/test_quality_bridge.py (respx-mocked bridge responses, run as part of the 28/28 pytest total above)", "note": "the live run was a one-off manual verification during development, not a formal staging rollout step, and not itself part of the from-scratch CI-mirroring verification in this report" } } }, "residual_gaps": [ "Python engine tests (28/28) not wired into any CI workflow yet", "bridge_provenance as a single unified TS/Python construct still does not exist -- this pass narrows, does not close, the provenance-schema split", "per-row quality gating from TS into Python is not implementable against the current ExpectationEngine contract -- advisory-only is the ceiling of this pass, not a corner cut", "resolve.py's greedy merge remains genuinely order-sensitive for non-transitive-similarity triangles -- tested and documented, not fixed (algorithm change, out of scope)", "CDC-interruption and true delivery-store backfill-idempotency tests remain unimplementable -- no CDC pipeline or delivery persistence layer exists anywhere in services/api", "5 untracked/unaudited local paths (src/fleet/, src/graph/, src/metrics/, src/projections/, src/features/feature-registry.ts) left exactly as found -- not part of this diff, absent from a fresh clone", "services/scrapers/ (WAF-bypass stack) remains on main with its deletion PR still open -- unrelated to and untouched by this pass" ], "process_notes": { "pr_open_before_this_pass": false, "before_state_md_left_untouched": true, "gitignore_additions": [".venv/", ".pytest_cache/"], "leftover_processes_confirmed_stopped": true } }