CI (SIAX Cloud) / security (push) Successful in 23s
CI (SIAX Cloud) / integration (push) Successful in 30s
Security Scan (SIAX Cloud) / security (push) Successful in 30s
CI (SIAX Cloud) / quality (push) Successful in 53s
CI (SIAX Cloud) / security (pull_request) Successful in 20s
CI (SIAX Cloud) / quality (pull_request) Successful in 51s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 22s
CI (SIAX Cloud) / integration (pull_request) Successful in 32s
From-scratch verification (fresh clone, fresh installs) backing up the P010 completion pass: 256/256 vitest, 28/28 pytest, clean typecheck/build on the committed tree, pre-existing-only lint noise. Documents that OPT_QUALITY_BRIDGE_ENABLED ships off and stays off in this PR -- activating it in production is left as Simon's decision, with a readiness checklist. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
176 lines
10 KiB
JSON
176 lines
10 KiB
JSON
{
|
|
"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
|
|
}
|
|
}
|