--repo CaspianG/wavemind --dir state/production-evidence-downloads",
"ingest_command": "wavemind ingest-production-evidence --artifact-dir state/production-evidence-downloads --refresh",
"strict_validation_command": "python benchmarks/production_evidence_gate.py --output benchmarks/production_evidence_results.json --markdown-output benchmarks/PRODUCTION_EVIDENCE.md --strict",
"post_ingest_refresh_command": "python benchmarks/strict_evidence_readiness_report.py --output benchmarks/strict_evidence_readiness_results.json --markdown-output benchmarks/STRICT_EVIDENCE_READINESS.md",
- "ready_for_safe_dispatch": false,
- "can_auto_run_now": false,
- "next_action": "Provision the listed environment, run the command, then promote the result artifact through the ingest gate.",
- "blocker_category": "missing_env"
+ "ready_for_safe_dispatch": true,
+ "can_auto_run_now": true,
+ "next_action": "Run the safe dispatch command now, download the resulting artifact, ingest it, then rerun strict validation.",
+ "blocker_category": "missing_artifact"
},
{
"id": "faiss_ivfpq_50m",
diff --git a/benchmarks/structured_memory_results.json b/benchmarks/structured_memory_results.json
index b7eadb9..ba40769 100644
--- a/benchmarks/structured_memory_results.json
+++ b/benchmarks/structured_memory_results.json
@@ -1,7 +1,7 @@
{
"schema": "wavemind.structured_memory_report.v1",
"generated_at": "2026-07-09T22:45:10Z",
- "source_ref": "c4f786e131c8",
+ "source_ref": "d0e3446be447",
"source_file": "benchmarks/scale_readiness_results.json",
"claim_boundary": "Structured-memory rows come from the checked-in scale-readiness artifact. They prove typed payload routing, provenance, persistence, temporal recall, and graph traversal on the deterministic fixture; they do not claim full production multimodal model quality.",
"summary": {
diff --git a/deploy/cluster/production-evidence.env.example b/deploy/cluster/production-evidence.env.example
index 866b310..9bbb1d3 100644
--- a/deploy/cluster/production-evidence.env.example
+++ b/deploy/cluster/production-evidence.env.example
@@ -23,8 +23,8 @@ WAVEMIND_FAISS_IVFPQ_FREE_GB=8
# Persisted FAISS IVF-PQ index path for the 50M streaming profile.
WAVEMIND_FAISS_IVFPQ_PATH=/mnt/wavemind/faiss/wavemind-ivfpq-50m.faiss
-# PostgreSQL/pgvector DSN for 10M pgvector service streaming load.
-WAVEMIND_PGVECTOR_DSN=postgresql://USER:PASSWORD@pgvector.staging.example.com:5432/wavemind
+# Comma-separated PostgreSQL/pgvector service DSNs for the namespace-sharded 10M streaming load.
+WAVEMIND_PGVECTOR_DSNS=postgresql://USER:PASSWORD@pgvector-a.staging.example.com:5432/wavemind,postgresql://USER:PASSWORD@pgvector-b.staging.example.com:5432/wavemind
# Optional Qdrant API key for the single-service Qdrant production load job.
WAVEMIND_QDRANT_API_KEY=REDACTED_QDRANT_API_KEY
diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md
index 407af4d..8be74c4 100644
--- a/docs/ROADMAP.md
+++ b/docs/ROADMAP.md
@@ -746,7 +746,10 @@ Enterprise requirements:
runner for Qdrant/pgvector 10M service-backed profiles so large-N profiles do
not hold the full vector corpus or exact-neighbor matrix in RAM. The
pgvector 10M service-backed profile now has a checked preflight contract;
- the next step is producing `production_streaming_load_pgvector_10m_results.json`
+ its runner now supports bounded `COPY` ingest, `halfvec` storage, exact remote
+ row-count validation, HNSW/IVFFlat index checks, explicit `pg_prewarm` evidence,
+ and constant-time complete resume.
+ The next step is producing `production_streaming_load_pgvector_10m_results.json`
from a real sized PostgreSQL service.
- Harden the new Postgres source-of-truth backend with migration tooling,
service-mode benchmarks, and operational docs.
diff --git a/docs/benchmark-dashboard.html b/docs/benchmark-dashboard.html
index d05de81..4e4dc1d 100644
--- a/docs/benchmark-dashboard.html
+++ b/docs/benchmark-dashboard.html
@@ -68,9 +68,9 @@ WaveMind Living Benchmark Dashboard
-
Readiness
pass39/39 criteria pass
+
Readiness
fail38/39 criteria pass
Implemented
373 runner-ready and 6 planned public proof paths
-
Refresh
2026-07-11T05:56:44Zsource c4f786e131c8
+
Refresh
2026-07-11T19:56:03Zsource d0e3446be447
@@ -78,7 +78,7 @@ Visual Summary
- Publication Contract
The leaderboard is generated from artifacts, freshness-checked, published to GitHub Pages, and claim-limited until strict production evidence passes.
| Status | pass |
|---|
| Weekly schedule | 17 4 * * 1 |
|---|
| Refresh profile | local |
|---|
| Pages URL | https://caspiang.github.io/wavemind/ |
|---|
| Source ref | c4f786e131c8 |
|---|
| Workflow run | local or manual artifact |
|---|
weekly schedule: truemanual dispatch: truegithub pages upload: truegithub pages deploy: truereview artifact uploaded: trueno scheduled bot commit to main: truestrict freshness gate: truemachine status published: true
+ Publication Contract
The leaderboard is generated from artifacts, freshness-checked, published to GitHub Pages, and claim-limited until strict production evidence passes.
| Status | pass |
|---|
| Weekly schedule | 17 4 * * 1 |
|---|
| Refresh profile | local |
|---|
| Pages URL | https://caspiang.github.io/wavemind/ |
|---|
| Source ref | d0e3446be447 |
|---|
| Workflow run | local or manual artifact |
|---|
weekly schedule: truemanual dispatch: truegithub pages upload: truegithub pages deploy: truereview artifact uploaded: trueno scheduled bot commit to main: truestrict freshness gate: truemachine status published: true
Agent Impact
Behavioral evidence: task success, stale-fact suppression, context savings, long-memory retrieval, and checked-in answer-quality smoke results.
| Status | pass |
|---|
| Benchmarks | 6 |
|---|
| WaveMind wins | 6 |
|---|
| Average lift | 0.37 |
|---|
| Context saved | 0.719 |
|---|
| Stale safety | 1 |
|---|
| Best profile | agent-coherence-and-token-savings-wavemind |
|---|
Read the agent impact report
@@ -90,7 +90,7 @@ Visual Summary
Cluster Autoscale
Cluster evidence: shard placement, autoscale planning, Kubernetes operator reconciliation, rebalance safety, active-active convergence, CRDT field state, and the deterministic 100M capacity envelope.
| Status | pass |
|---|
| Gate checks | 62/62 |
|---|
| Simulated memories | 1000000 |
|---|
| Namespaces | 4096 |
|---|
| Autoscale target | 10000000 |
|---|
| Required nodes | 50 |
|---|
| Operator replicas | 34 |
|---|
| 100M capacity nodes | 128 |
|---|
| 100M capacity zones | 8 |
|---|
| Recommended max replicas | 192 |
|---|
Read the cluster autoscale report
- Strict Evidence Readiness
Operator runbook for the remaining remote, 10M, 50M, and 100M evidence gaps: safe dispatch commands, missing environment, promotion steps, strict validation, and locked claims.
Blockers: complete: 4, missing_env: 4
| Report status | pass |
|---|
| Readiness | action_required |
|---|
| Claim status | claims_limited |
|---|
| Requirements | 8 |
|---|
| Action required | 4 |
|---|
| Safe dispatch ready | 0 |
|---|
| Can auto-run now | 0 |
|---|
| Planned target memories | 180000000 |
|---|
Read the strict evidence readiness runbook
+ Strict Evidence Readiness
Operator runbook for the remaining remote, 10M, 50M, and 100M evidence gaps: safe dispatch commands, missing environment, promotion steps, strict validation, and locked claims.
Blockers: complete: 4, missing_artifact: 1, missing_env: 3
| Report status | pass |
|---|
| Readiness | action_required |
|---|
| Claim status | claims_limited |
|---|
| Requirements | 8 |
|---|
| Action required | 4 |
|---|
| Safe dispatch ready | 1 |
|---|
| Can auto-run now | 1 |
|---|
| Planned target memories | 180000000 |
|---|
Read the strict evidence readiness runbook
Benchmark Leaderboard
@@ -259,7 +259,7 @@
Benchmark Leaderboard
Production readiness gate |
production-scale |
readiness score |
-WaveMind production readiness: 1 / - |
+WaveMind production readiness: 0.974 / - |
- |
WaveMind-only check |
@@ -293,8 +293,8 @@ Evidence Source Status
| Artifact freshness |
-local matrix refresh at 2026-07-11T05:56:44Z |
-source c4f786e131c8; audit gate enforced by validate_benchmark_artifacts.py |
+local matrix refresh at 2026-07-11T19:56:03Z |
+source d0e3446be447; audit gate enforced by validate_benchmark_artifacts.py |
Keep weekly refresh green before public claims. |
@@ -366,7 +366,7 @@ Evidence Source Status
| Production readiness gate |
checked-in benchmark artifacts |
-pass; 39/39 pass |
+fail; 38/39 pass |
Keep the gate at readiness_score 1.0 while repeating larger service-backed runs and moving external competitor evidence into the separate adapter profile. |
diff --git a/docs/data/leaderboard-status.json b/docs/data/leaderboard-status.json
index acee7a4..9c6ef70 100644
--- a/docs/data/leaderboard-status.json
+++ b/docs/data/leaderboard-status.json
@@ -1,7 +1,7 @@
{
"schema": "wavemind.leaderboard_status.v1",
- "generated_at": "2026-07-11T05:56:54Z",
- "source_ref": "c4f786e131c8",
+ "generated_at": "2026-07-11T20:56:13Z",
+ "source_ref": "d0e3446be447",
"workflow_run_id": null,
"refresh_profile": "local",
"public_url": "https://caspiang.github.io/wavemind/",
@@ -14,7 +14,7 @@
"timezone": "UTC",
"public_url": "https://caspiang.github.io/wavemind/",
"publishing_status": "publishable_with_claim_limits",
- "source_ref": "c4f786e131c8",
+ "source_ref": "d0e3446be447",
"workflow_run_id": null,
"refresh_profile": "local",
"expected_scheduled_refresh_profile": "weekly-fast",
@@ -39,7 +39,7 @@
"freshness_gate": {
"schema": "wavemind.leaderboard_freshness.v1",
"status": "pass",
- "checked_at": "2026-07-11T05:56:54Z",
+ "checked_at": "2026-07-11T20:56:13Z",
"max_age_days": 8.0,
"source_count": 32,
"fresh_count": 32,
@@ -55,15 +55,15 @@
"path": "benchmarks/benchmark_matrix_results.json",
"schema": "wavemind.benchmark_matrix.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:44Z",
- "age_days": 0.00011574074074074075,
+ "timestamp": "2026-07-11T19:56:03Z",
+ "age_days": 0.04178240740740741,
"status": "pass"
},
{
"path": "benchmarks/benchmark_artifact_audit.json",
"schema": "wavemind.benchmark_artifact_audit.v1",
"timestamp_key": "checked_at",
- "timestamp": "2026-07-11T05:56:54Z",
+ "timestamp": "2026-07-11T20:56:13Z",
"age_days": 0.0,
"status": "pass"
},
@@ -71,63 +71,63 @@
"path": "benchmarks/production_readiness_results.json",
"schema": "wavemind.production_readiness.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:48Z",
- "age_days": 6.944444444444444e-05,
+ "timestamp": "2026-07-11T20:18:10Z",
+ "age_days": 0.02642361111111111,
"status": "pass"
},
{
"path": "benchmarks/production_evidence_results.json",
"schema": "wavemind.production_evidence.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:49Z",
- "age_days": 5.787037037037037e-05,
+ "timestamp": "2026-07-11T19:56:06Z",
+ "age_days": 0.041747685185185186,
"status": "pass"
},
{
"path": "benchmarks/production_evidence_preflight_results.json",
"schema": "wavemind.production_evidence_preflight.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:50Z",
- "age_days": 4.6296296296296294e-05,
+ "timestamp": "2026-07-11T20:54:43Z",
+ "age_days": 0.0010416666666666667,
"status": "pass"
},
{
"path": "benchmarks/production_evidence_env_contract.json",
"schema": "wavemind.production_evidence_env_contract.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-10T05:23:37Z",
- "age_days": 1.023113425925926,
+ "timestamp": "2026-07-11T19:47:54Z",
+ "age_days": 0.04744212962962963,
"status": "pass"
},
{
"path": "benchmarks/production_evidence_bundle_results.json",
"schema": "wavemind.production_evidence_bundle.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:51Z",
- "age_days": 3.472222222222222e-05,
+ "timestamp": "2026-07-11T20:56:03Z",
+ "age_days": 0.00011574074074074075,
"status": "pass"
},
{
"path": "benchmarks/release_claims_results.json",
"schema": "wavemind.release_claims.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:52Z",
- "age_days": 2.3148148148148147e-05,
+ "timestamp": "2026-07-11T19:56:09Z",
+ "age_days": 0.041712962962962966,
"status": "pass"
},
{
"path": "benchmarks/scale_gap_results.json",
"schema": "wavemind.scale_gap.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:53Z",
- "age_days": 1.1574074074074073e-05,
+ "timestamp": "2026-07-11T19:56:10Z",
+ "age_days": 0.04170138888888889,
"status": "pass"
},
{
"path": "benchmarks/strict_evidence_readiness_results.json",
"schema": "wavemind.strict_evidence_readiness.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:54Z",
+ "timestamp": "2026-07-11T20:57:54Z",
"age_days": 0.0,
"status": "pass"
},
@@ -135,8 +135,8 @@
"path": "benchmarks/cluster_admission_results.json",
"schema": "wavemind.cluster_admission.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-10T05:23:44Z",
- "age_days": 1.0230324074074073,
+ "timestamp": "2026-07-11T20:01:43Z",
+ "age_days": 0.03784722222222222,
"status": "pass"
},
{
@@ -144,7 +144,7 @@
"schema": "wavemind.active_active_admission.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T10:20:56Z",
- "age_days": 1.8166435185185186,
+ "age_days": 2.4411689814814816,
"status": "pass"
},
{
@@ -152,7 +152,7 @@
"schema": "wavemind.serverless_admission.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T10:20:56Z",
- "age_days": 1.8166435185185186,
+ "age_days": 2.4411689814814816,
"status": "pass"
},
{
@@ -160,7 +160,7 @@
"schema": "wavemind.multimodal_admission.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T12:56:09Z",
- "age_days": 1.7088541666666666,
+ "age_days": 2.3333796296296296,
"status": "pass"
},
{
@@ -168,7 +168,7 @@
"schema": "wavemind.memory_os_admission.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T00:40:28Z",
- "age_days": 2.2197453703703705,
+ "age_days": 2.8442708333333333,
"status": "pass"
},
{
@@ -176,7 +176,7 @@
"schema": "wavemind.memory_os_canary.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T01:06:28Z",
- "age_days": 2.2016898148148147,
+ "age_days": 2.8262152777777776,
"status": "pass"
},
{
@@ -184,7 +184,7 @@
"schema": "wavemind.memory_os_policy_evolution.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T13:44:41Z",
- "age_days": 1.675150462962963,
+ "age_days": 2.299675925925926,
"status": "pass"
},
{
@@ -192,23 +192,23 @@
"schema": "wavemind.memory_os_policy_bundle.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T19:29:13Z",
- "age_days": 1.4358912037037037,
+ "age_days": 2.060416666666667,
"status": "pass"
},
{
"path": "benchmarks/production_evidence_dispatch_results.json",
"schema": "wavemind.production_evidence_dispatch.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:51Z",
- "age_days": 3.472222222222222e-05,
+ "timestamp": "2026-07-11T20:56:02Z",
+ "age_days": 0.0001273148148148148,
"status": "pass"
},
{
"path": "benchmarks/production_scale_run_plan.json",
"schema": "wavemind.production_scale_run_plan.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-10T04:17:18Z",
- "age_days": 1.0691666666666666,
+ "timestamp": "2026-07-11T19:47:53Z",
+ "age_days": 0.047453703703703706,
"status": "pass"
},
{
@@ -216,15 +216,15 @@
"schema": "wavemind.agent_coherence_benchmark.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-08T17:24:13Z",
- "age_days": 2.5226967592592593,
+ "age_days": 3.147222222222222,
"status": "pass"
},
{
"path": "benchmarks/agent_impact_results.json",
"schema": "wavemind.agent_impact_leaderboard.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:44Z",
- "age_days": 0.00011574074074074075,
+ "timestamp": "2026-07-11T19:56:03Z",
+ "age_days": 0.04178240740740741,
"status": "pass"
},
{
@@ -232,7 +232,7 @@
"schema": "wavemind.structured_memory_report.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T22:45:10Z",
- "age_days": 1.2998148148148148,
+ "age_days": 1.9243402777777778,
"status": "pass"
},
{
@@ -240,7 +240,7 @@
"schema": "wavemind.memory_os_intelligence_report.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T22:45:10Z",
- "age_days": 1.2998148148148148,
+ "age_days": 1.9243402777777778,
"status": "pass"
},
{
@@ -248,47 +248,47 @@
"schema": "wavemind.cluster_autoscale_report.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T22:45:10Z",
- "age_days": 1.2998148148148148,
+ "age_days": 1.9243402777777778,
"status": "pass"
},
{
"path": "benchmarks/kubernetes_operator_smoke_results.json",
"schema": "wavemind.kubernetes_operator_smoke.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-09T23:28:34.759347Z",
- "age_days": 1.2696671371875,
+ "timestamp": "2026-07-11T19:49:12.785845Z",
+ "age_days": 0.04653025642361111,
"status": "pass"
},
{
"path": "benchmarks/kubernetes_cluster_network_smoke_results.json",
"schema": "wavemind.kubernetes_cluster_network_smoke.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-10T05:13:44.475824+00:00",
- "age_days": 1.0299713446296297,
+ "timestamp": "2026-07-11T19:49:34.107653+00:00",
+ "age_days": 0.04628347623842593,
"status": "pass"
},
{
"path": "benchmarks/kubernetes_active_active_region_smoke_results.json",
"schema": "wavemind.kubernetes_active_active_region_smoke.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-09T23:55:54.133679+00:00",
- "age_days": 1.2506928972337963,
+ "timestamp": "2026-07-11T19:50:19.980112+00:00",
+ "age_days": 0.045752545,
"status": "pass"
},
{
"path": "benchmarks/kubernetes_serverless_lifecycle_smoke_results.json",
"schema": "wavemind.kubernetes_serverless_lifecycle_smoke.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-10T02:42:30.318307+00:00",
- "age_days": 1.1349963158912038,
+ "timestamp": "2026-07-11T19:52:02.978556+00:00",
+ "age_days": 0.04456043337962963,
"status": "pass"
},
{
"path": "benchmarks/kubernetes_postgres_qdrant_dr_smoke_results.json",
"schema": "wavemind.kubernetes_postgres_qdrant_dr_smoke.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-10T02:42:53.084317+00:00",
- "age_days": 1.1347328204050926,
+ "timestamp": "2026-07-11T19:52:28.621094+00:00",
+ "age_days": 0.04426364474537037,
"status": "pass"
},
{
@@ -296,22 +296,22 @@
"schema": "wavemind.scale_readiness_benchmark.v1",
"timestamp_key": "generated_at",
"timestamp": "2026-07-09T22:45:10Z",
- "age_days": 1.2998148148148148,
+ "age_days": 1.9243402777777778,
"status": "pass"
},
{
"path": "benchmarks/cost_efficiency_results.json",
"schema": "wavemind.cost_efficiency_leaderboard.v1",
"timestamp_key": "generated_at",
- "timestamp": "2026-07-11T05:56:44Z",
- "age_days": 0.00011574074074074075,
+ "timestamp": "2026-07-11T19:56:03Z",
+ "age_days": 0.04178240740740741,
"status": "pass"
}
]
},
"benchmark_matrix": {
"schema": "wavemind.benchmark_matrix.v1",
- "generated_at": "2026-07-11T05:56:44Z",
+ "generated_at": "2026-07-11T19:56:03Z",
"implemented_count": 37,
"runner_ready_count": 3,
"planned_count": 6,
@@ -340,8 +340,8 @@
"artifact_audit": {
"schema": "wavemind.benchmark_artifact_audit.v1",
"status": "pass",
- "checked_at": "2026-07-11T05:56:54Z",
- "age_days": 0.00012261520833333332,
+ "checked_at": "2026-07-11T20:56:13Z",
+ "age_days": 0.04178398337962963,
"max_age_days": 8.0,
"errors": []
},
@@ -683,9 +683,9 @@
"status": "pass",
"environment": "kind-multinode-ci",
"evidence_source": "github-actions-kind",
- "source_ref": "9956e3112dc575d0f12ff99ec59326dd8e035f70",
- "workflow_run_id": "29057247023",
- "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29057247023",
+ "source_ref": "29f84dc226c5fd11ae9696d04fa48ffb1ae371e3",
+ "workflow_run_id": "29165761261",
+ "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29165761261",
"passed_checks": 14,
"check_count": 14,
"node_count": 4,
@@ -693,8 +693,8 @@
"operator_node_count": 2,
"lease_transitions_after": 1,
"ready_replicas_after_scale": 4,
- "cluster_status_holder": "wavemind-operator-78944944b8-bx88m",
- "next_holder": "wavemind-operator-78944944b8-bx88m",
+ "cluster_status_holder": "wavemind-operator-78944944b8-jllkt",
+ "next_holder": "wavemind-operator-78944944b8-jllkt",
"data_pod_uid_changed": true,
"api_healthy_after_recovery": true,
"topology_spread_constraint_count": 2,
@@ -711,17 +711,17 @@
"status": "pass",
"environment": "kind-multinode-network-ci",
"evidence_source": "github-actions-kind-physical-node-pause",
- "source_ref": "3d40e894b493253a7d263fa2bf6d67bbc8f4019a",
- "workflow_run_id": "29070578441",
- "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29070578441",
+ "source_ref": "29f84dc226c5fd11ae9696d04fa48ffb1ae371e3",
+ "workflow_run_id": "29165761261",
+ "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29165761261",
"passed_checks": 13,
"check_count": 13,
"service_node_count": 4,
"zone_count": 3,
"failure_method": "docker-pause-kind-worker",
- "target_worker": "wavemind-ci-worker",
- "target_zone": "zone-a",
- "outage_duration_ms": 8911.648,
+ "target_worker": "wavemind-ci-worker2",
+ "target_zone": "zone-b",
+ "outage_duration_ms": 9431.139,
"outage_hit_rate": 1.0,
"failed_nodes_during_outage": [
"wavemind-ci-2"
@@ -736,9 +736,9 @@
"status": "pass",
"environment": "kind-multizone-active-active-ci",
"evidence_source": "github-actions-kind-physical-region-worker-pause",
- "source_ref": "b6392353668203196007e1cac695e178752d34d1",
- "workflow_run_id": "29058433643",
- "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29058433643",
+ "source_ref": "29f84dc226c5fd11ae9696d04fa48ffb1ae371e3",
+ "workflow_run_id": "29165761261",
+ "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29165761261",
"passed_checks": 17,
"check_count": 17,
"region_count": 3,
@@ -746,7 +746,7 @@
"all_regions_use_pvc": true,
"failure_method": "docker-pause-kind-worker",
"target_region": "region-b",
- "outage_duration_ms": 9900.072,
+ "outage_duration_ms": 9658.868,
"seed_writes": 48,
"outage_unavailable_regions": [
"region-b"
@@ -766,22 +766,22 @@
"status": "pass",
"environment": "kind-multizone-serverless-lifecycle-ci",
"evidence_source": "github-actions-kind-external-state-manual-scale-lifecycle",
- "source_ref": "880cafdf5ce5f7c9da878bd8e82ada39ca2d02cc",
- "workflow_run_id": "29064934749",
- "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29064934749",
+ "source_ref": "29f84dc226c5fd11ae9696d04fa48ffb1ae371e3",
+ "workflow_run_id": "29165761261",
+ "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29165761261",
"passed_checks": 13,
"check_count": 13,
"persistent_volume_claims": 3,
- "cold_start_ms": 5086.153,
+ "cold_start_ms": 5055.034,
"restored_after_zero_rate": 1.0,
"ready_replicas": 3,
"zone_count": 3,
"visible_replicas": 3,
"suppressed_replicas": 3,
- "write_propagation_ms": 1130.6929430000991,
- "delete_propagation_ms": 915.0309450000123,
- "burst_requests_per_second": 41.39356985869663,
- "burst_p99_ms": 1461.4564480000354,
+ "write_propagation_ms": 1136.9370459999573,
+ "delete_propagation_ms": 884.7577889999911,
+ "burst_requests_per_second": 40.74436448541339,
+ "burst_p99_ms": 1891.9401950000747,
"final_restore_rate": 1.0,
"claim_boundary": "Ephemeral non-loopback Kubernetes lifecycle evidence with external durable state. It proves scale-to-zero state safety and multi-replica behavior, but does not unlock remote managed Knative/KEDA production admission.",
"source": "benchmarks/kubernetes_serverless_lifecycle_smoke_results.json"
@@ -791,13 +791,13 @@
"status": "pass",
"environment": "kind-independent-namespace-postgres-qdrant-dr-ci",
"evidence_source": "github-actions-kind-pg-dump-independent-restore",
- "source_ref": "880cafdf5ce5f7c9da878bd8e82ada39ca2d02cc",
- "workflow_run_id": "29064934749",
- "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29064934749",
+ "source_ref": "29f84dc226c5fd11ae9696d04fa48ffb1ae371e3",
+ "workflow_run_id": "29165761261",
+ "workflow_run_url": "https://github.com/CaspianG/wavemind/actions/runs/29165761261",
"passed_checks": 10,
"check_count": 10,
"backup_format": "pg_dump-custom",
- "backup_bytes": 1016635,
+ "backup_bytes": 1016642,
"source_state_stopped": true,
"recovery_pvcs": 3,
"restored_rate": 1.0,
@@ -805,7 +805,7 @@
"index_expected_records": 24,
"index_vector_records": 24,
"restored_after_api_replacement_rate": 1.0,
- "restore_elapsed_ms": 20449.092,
+ "restore_elapsed_ms": 23338.114,
"claim_boundary": "Ephemeral non-loopback Kubernetes disaster-recovery evidence. It proves logical PostgreSQL backup/restore and Qdrant rebuild in an independent namespace, not managed-cloud PITR or multi-region DR.",
"source": "benchmarks/kubernetes_postgres_qdrant_dr_smoke_results.json"
},
@@ -939,7 +939,7 @@
"strict_pass_count": 4,
"strict_total_requirements": 8,
"preflight_overall_status": "action_required",
- "preflight_ready_count": 0,
+ "preflight_ready_count": 1,
"preflight_total_checks": 8,
"production_readiness_status": "pass",
"production_readiness_score": 1.0,
@@ -1001,13 +1001,13 @@
"target_memories": 10000000,
"output_artifact": "benchmarks/production_streaming_load_pgvector_10m_results.json",
"required_env": [
- "WAVEMIND_PGVECTOR_DSN"
+ "WAVEMIND_PGVECTOR_DSNS"
],
"missing_env": [
- "WAVEMIND_PGVECTOR_DSN"
+ "WAVEMIND_PGVECTOR_DSNS"
],
"blockers": [
- "missing_env:WAVEMIND_PGVECTOR_DSN",
+ "missing_env:WAVEMIND_PGVECTOR_DSNS",
"insufficient_local_disk_for_index_and_transient_batches"
]
},
@@ -1025,6 +1025,7 @@
],
"blockers": [
"missing_env:WAVEMIND_FAISS_IVFPQ_PATH",
+ "missing_module:faiss",
"insufficient_local_disk_for_index_and_transient_batches"
]
},
@@ -1117,8 +1118,8 @@
"overall_status": "action_required",
"summary": {
"overall_status": "action_required",
- "ready_count": 0,
- "action_required_count": 8,
+ "ready_count": 1,
+ "action_required_count": 7,
"total_checks": 8
}
},
@@ -1143,7 +1144,7 @@
"WAVEMIND_CLUSTER_NODES",
"WAVEMIND_CLUSTER_NODES_MANIFEST_JSON",
"WAVEMIND_FAISS_IVFPQ_PATH",
- "WAVEMIND_PGVECTOR_DSN",
+ "WAVEMIND_PGVECTOR_DSNS",
"WAVEMIND_QDRANT_URL",
"WAVEMIND_QDRANT_URLS",
"WAVEMIND_SERVERLESS_NODES"
@@ -1163,8 +1164,8 @@
"summary": {
"overall_status": "action_required",
"total_jobs": 8,
- "ready_to_dispatch_count": 0,
- "blocked_by_preflight_count": 4,
+ "ready_to_dispatch_count": 1,
+ "blocked_by_preflight_count": 3,
"complete_count": 4,
"commit_results_default": false,
"runner_label": "self-hosted-large",
@@ -1175,8 +1176,9 @@
"service-scale-10m": 3
},
"status_counts": {
- "blocked_by_preflight": 4,
- "complete": 4
+ "blocked_by_preflight": 3,
+ "complete": 4,
+ "ready_to_dispatch": 1
}
},
"jobs": [
@@ -1432,11 +1434,11 @@
{
"id": "pgvector_10m_service",
"title": "10M pgvector service load",
- "status": "blocked_by_preflight",
+ "status": "ready_to_dispatch",
"dispatch_required": true,
- "ready": false,
+ "ready": true,
"strict_status": "action_required",
- "preflight_status": "action_required",
+ "preflight_status": "ready",
"wave": "service-scale-10m",
"workflow": "production-streaming-load.yml",
"artifact": "benchmarks/production_streaming_load_pgvector_10m_results.json",
@@ -1454,27 +1456,24 @@
"replicas": "3",
"autoscaling_max_replicas": "24",
"capacity_headroom": "0.7",
- "runner_label": "self-hosted-large",
+ "runner_label": "ubuntu-latest",
"runner_storage_root": "state/production-runs",
"commit_results": false,
- "pgvector_dsn": "$WAVEMIND_PGVECTOR_DSN"
- },
- "input_bindings": {
- "pgvector_dsn": "$WAVEMIND_PGVECTOR_DSN"
+ "provision_pgvector_shards": true,
+ "pgvector_shard_count": "4"
},
- "required_env": [
- "WAVEMIND_PGVECTOR_DSN"
- ],
- "missing_env": [
- "WAVEMIND_PGVECTOR_DSN"
- ],
+ "input_bindings": {},
+ "required_env": [],
+ "missing_env": [],
"required_secrets": [],
"issues": [
- "set WAVEMIND_PGVECTOR_DSN"
+ "missing artifact"
],
- "warnings": [],
- "safe_launch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"self-hosted-large\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"false\" -f pgvector_dsn=\"$WAVEMIND_PGVECTOR_DSN\"",
- "publish_launch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"self-hosted-large\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"true\" -f pgvector_dsn=\"$WAVEMIND_PGVECTOR_DSN\"",
+ "warnings": [
+ "Ephemeral isolated service processes prove the 10M candidate-index SLO, not PostgreSQL HA or independent-node failure tolerance."
+ ],
+ "safe_launch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"ubuntu-latest\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"false\" -f provision_pgvector_shards=\"true\" -f pgvector_shard_count=\"4\"",
+ "publish_launch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"ubuntu-latest\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"true\" -f provision_pgvector_shards=\"true\" -f pgvector_shard_count=\"4\"",
"download_command": "gh run download --repo CaspianG/wavemind --dir state/production-evidence-downloads",
"ingest_command": "wavemind ingest-production-evidence --artifact-dir state/production-evidence-downloads --refresh"
},
@@ -1734,10 +1733,10 @@
"output_artifact_exists": false,
"checkpoint_path": "state/production-runs/pgvector-service-10000000.checkpoint.json",
"missing_env": [
- "WAVEMIND_PGVECTOR_DSN"
+ "WAVEMIND_PGVECTOR_DSNS"
],
"blockers": [
- "missing_env:WAVEMIND_PGVECTOR_DSN",
+ "missing_env:WAVEMIND_PGVECTOR_DSNS",
"insufficient_local_disk_for_index_and_transient_batches"
],
"command": "python benchmarks/production_streaming_load_benchmark.py --sizes 10000000 --dim 128 --queries 2000 --top-k 10 --batch-size 5000 --engines pgvector-service --target-recall 0.95 --target-p99-ms 100.0 --target-qps 100.0 --replicas 3 --autoscaling-max-replicas 24 --capacity-headroom 0.7 --memory-payload-kb 2.0 --vector-dtype-bytes 4 --output benchmarks/production_streaming_load_pgvector_10m_results.json --checkpoint-path state/production-runs/pgvector-service-10000000.checkpoint.json",
@@ -1777,6 +1776,7 @@
],
"blockers": [
"missing_env:WAVEMIND_FAISS_IVFPQ_PATH",
+ "missing_module:faiss",
"insufficient_local_disk_for_index_and_transient_batches"
],
"command": "python benchmarks/production_streaming_load_benchmark.py --sizes 50000000 --dim 128 --queries 2000 --top-k 10 --batch-size 1000000 --engines faiss-ivfpq-persisted --target-recall 0.95 --target-p99-ms 100.0 --target-qps 100.0 --replicas 3 --autoscaling-max-replicas 24 --capacity-headroom 0.7 --memory-payload-kb 2.0 --vector-dtype-bytes 4 --output benchmarks/production_streaming_load_ivfpq_50m_results.json --checkpoint-path state/production-runs/faiss-ivfpq-persisted-50000000.checkpoint.json",
@@ -1849,19 +1849,21 @@
"total_requirements": 8,
"action_required_count": 4,
"complete_count": 4,
- "ready_for_safe_dispatch_count": 0,
- "can_auto_run_now_count": 0,
+ "ready_for_safe_dispatch_count": 1,
+ "can_auto_run_now_count": 1,
"target_memories_total": 180000000,
"check_counts": {
"pass": 8
},
"dispatch_status_counts": {
- "blocked_by_preflight": 4,
- "complete": 4
+ "blocked_by_preflight": 3,
+ "complete": 4,
+ "ready_to_dispatch": 1
},
"blocker_counts": {
"complete": 4,
- "missing_env": 4
+ "missing_artifact": 1,
+ "missing_env": 3
}
},
"checks": [
@@ -2139,8 +2141,8 @@
"id": "pgvector_10m_service",
"title": "10M pgvector service load",
"strict_status": "action_required",
- "preflight_status": "action_required",
- "dispatch_status": "blocked_by_preflight",
+ "preflight_status": "ready",
+ "dispatch_status": "ready_to_dispatch",
"scale_gap_status": "blocked_by_env",
"workflow": "production-streaming-load.yml",
"wave": "service-scale-10m",
@@ -2153,28 +2155,26 @@
"target_recall_at_k": 0.95,
"target_p99_ms": 100.0,
"target_qps": 100.0,
- "required_env": [
- "WAVEMIND_PGVECTOR_DSN"
- ],
- "missing_env": [
- "WAVEMIND_PGVECTOR_DSN"
- ],
+ "required_env": [],
+ "missing_env": [],
"required_secrets": [],
"issues": [
- "set WAVEMIND_PGVECTOR_DSN"
+ "missing artifact"
+ ],
+ "warnings": [
+ "Ephemeral isolated service processes prove the 10M candidate-index SLO, not PostgreSQL HA or independent-node failure tolerance."
],
- "warnings": [],
"local_profile_command": "python benchmarks/production_streaming_load_benchmark.py --sizes 10000000 --dim 128 --queries 2000 --top-k 10 --batch-size 5000 --engines pgvector-service --target-recall 0.95 --target-p99-ms 100.0 --target-qps 100.0 --replicas 3 --autoscaling-max-replicas 24 --capacity-headroom 0.7 --memory-payload-kb 2.0 --vector-dtype-bytes 4 --output benchmarks/production_streaming_load_pgvector_10m_results.json --checkpoint-path state/production-runs/pgvector-service-10000000.checkpoint.json",
- "safe_dispatch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"self-hosted-large\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"false\" -f pgvector_dsn=\"$WAVEMIND_PGVECTOR_DSN\"",
- "publish_dispatch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"self-hosted-large\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"true\" -f pgvector_dsn=\"$WAVEMIND_PGVECTOR_DSN\"",
+ "safe_dispatch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"ubuntu-latest\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"false\" -f provision_pgvector_shards=\"true\" -f pgvector_shard_count=\"4\"",
+ "publish_dispatch_command": "gh workflow run production-streaming-load.yml -f engine=\"pgvector-service\" -f size=\"10000000\" -f dim=\"128\" -f queries=\"2000\" -f top_k=\"10\" -f batch_size=\"5000\" -f target_recall=\"0.95\" -f target_p99_ms=\"100.0\" -f target_qps=\"100.0\" -f replicas=\"3\" -f autoscaling_max_replicas=\"24\" -f capacity_headroom=\"0.7\" -f runner_label=\"ubuntu-latest\" -f runner_storage_root=\"state/production-runs\" -f commit_results=\"true\" -f provision_pgvector_shards=\"true\" -f pgvector_shard_count=\"4\"",
"download_command": "gh run download --repo CaspianG/wavemind --dir state/production-evidence-downloads",
"ingest_command": "wavemind ingest-production-evidence --artifact-dir state/production-evidence-downloads --refresh",
"strict_validation_command": "python benchmarks/production_evidence_gate.py --output benchmarks/production_evidence_results.json --markdown-output benchmarks/PRODUCTION_EVIDENCE.md --strict",
"post_ingest_refresh_command": "python benchmarks/strict_evidence_readiness_report.py --output benchmarks/strict_evidence_readiness_results.json --markdown-output benchmarks/STRICT_EVIDENCE_READINESS.md",
- "ready_for_safe_dispatch": false,
- "can_auto_run_now": false,
- "next_action": "Provision the listed environment, run the command, then promote the result artifact through the ingest gate.",
- "blocker_category": "missing_env"
+ "ready_for_safe_dispatch": true,
+ "can_auto_run_now": true,
+ "next_action": "Run the safe dispatch command now, download the resulting artifact, ingest it, then rerun strict validation.",
+ "blocker_category": "missing_artifact"
},
{
"id": "faiss_ivfpq_50m",
@@ -2287,7 +2287,7 @@
"title": "Non-loopback Kubernetes or external HTTP service-node load",
"status": "pass",
"artifact": "benchmarks/http_cluster_load_results.json",
- "evidence": "nodes 4, deployment github-actions-29070578441-wavemind-ci-wavemind-system, environment kubernetes-kind-non-loopback-ci, source kubernetes-pod-dns-physical-node-drill, namespaces 32, success 1.0, failover 1.0, query p99 84.79942335998312 ms, lifecycle batch p99 6694.75712100001 ms, batch query True, batch HTTP 24 -> 1, batch p99 148.8199839999993 ms",
+ "evidence": "nodes 4, deployment github-actions-29165761261-wavemind-ci-wavemind-system, environment kubernetes-kind-non-loopback-ci, source kubernetes-pod-dns-physical-node-drill, namespaces 32, success 1.0, failover 1.0, query p99 79.44286219996737 ms, lifecycle batch p99 8351.044338999998 ms, batch query True, batch HTTP 24 -> 1, batch p99 186.78031600001077 ms",
"issues": [],
"command": "gh workflow run external-http-cluster-load.yml -f nodes=\"node-a=https://wm-a.example.com,node-b=https://wm-b.example.com,node-c=https://wm-c.example.com,node-d=https://wm-d.example.com\" -f replication_factor=3 -f read_quorum=1 -f read_fanout=1 -f batch_query_size=24 -f fail_on_slo=true -f commit_results=true",
"claim_unlocked": "Non-loopback Kubernetes service-node cluster load SLO."
@@ -2295,7 +2295,7 @@
"requested_evidence": {
"status": "pass",
"artifact": "benchmarks/http_cluster_load_results.json",
- "evidence": "nodes 4, deployment github-actions-29070578441-wavemind-ci-wavemind-system, environment kubernetes-kind-non-loopback-ci, source kubernetes-pod-dns-physical-node-drill, namespaces 32, success 1.0, failover 1.0, query p99 84.79942335998312 ms, lifecycle batch p99 6694.75712100001 ms, batch query True, batch HTTP 24 -> 1, batch p99 148.8199839999993 ms",
+ "evidence": "nodes 4, deployment github-actions-29165761261-wavemind-ci-wavemind-system, environment kubernetes-kind-non-loopback-ci, source kubernetes-pod-dns-physical-node-drill, namespaces 32, success 1.0, failover 1.0, query p99 79.44286219996737 ms, lifecycle batch p99 8351.044338999998 ms, batch query True, batch HTTP 24 -> 1, batch p99 186.78031600001077 ms",
"issues": [],
"min_nodes": 4,
"namespace_count": 32,
diff --git a/tests/test_benchmark_registry.py b/tests/test_benchmark_registry.py
index 66036ef..b98cb0e 100644
--- a/tests/test_benchmark_registry.py
+++ b/tests/test_benchmark_registry.py
@@ -5,6 +5,12 @@
from pathlib import Path
+def _assert_github_actions_run_url(value: str) -> None:
+ prefix = "https://github.com/CaspianG/wavemind/actions/runs/"
+ assert value.startswith(prefix)
+ assert value.removeprefix(prefix).isdigit()
+
+
def test_benchmark_matrix_contains_implemented_and_public_benchmarks():
from benchmarks.benchmark_registry import build_benchmark_matrix
@@ -166,7 +172,7 @@ def test_benchmark_matrix_contains_implemented_and_public_benchmarks():
]
assert pgvector_plan["status"] == "action_required"
assert pgvector_plan["estimated_index_gb"] == 0.0
- assert "WAVEMIND_PGVECTOR_DSN" in pgvector_plan["missing_env"]
+ assert "WAVEMIND_PGVECTOR_DSNS" in pgvector_plan["missing_env"]
assert "100M" in entries["production_streaming_load_runner"]["dataset"]
assert "production-streaming-load.yml" in entries["production_streaming_load_runner"]["next_step"]
assert entries["postgres_pitr_plan"]["status"] == "implemented"
@@ -222,7 +228,7 @@ def test_benchmark_matrix_contains_implemented_and_public_benchmarks():
assert kubernetes_current["rolling_upgrade_replaced_pods"] == 4
assert kubernetes_current["api_healthy_after_upgrade"] is True
assert kubernetes_current["passed_checks"] == kubernetes_current["check_count"] == 14
- assert kubernetes_current["workflow_run_url"].endswith("/29057247023")
+ _assert_github_actions_run_url(kubernetes_current["workflow_run_url"])
assert "does not unlock remote production" in kubernetes_current["claim_boundary"]
network_smoke = entries["kubernetes_cluster_network_failure_smoke"]
assert network_smoke["status"] == "implemented"
@@ -243,6 +249,7 @@ def test_benchmark_matrix_contains_implemented_and_public_benchmarks():
assert network_current["failed_nodes_after_recovery"] == []
assert network_current["passed_checks"] == network_current["check_count"] == 13
assert network_current["workflow_run_id"].isdigit()
+ _assert_github_actions_run_url(network_current["workflow_run_url"])
assert network_current["workflow_run_url"].endswith(
f"/{network_current['workflow_run_id']}"
)
@@ -269,7 +276,7 @@ def test_benchmark_matrix_contains_implemented_and_public_benchmarks():
assert region_current["final_noop_records_imported"] == 0
assert region_current["final_noop_tombstones_imported"] == 0
assert region_current["passed_checks"] == region_current["check_count"] == 17
- assert region_current["workflow_run_url"].endswith("/29058433643")
+ _assert_github_actions_run_url(region_current["workflow_run_url"])
assert "not remote multi-region" in region_current["claim_boundary"]
serverless_lifecycle = entries["kubernetes_serverless_lifecycle_smoke"]["current"][
"WaveMind Kubernetes serverless lifecycle"
@@ -286,7 +293,7 @@ def test_benchmark_matrix_contains_implemented_and_public_benchmarks():
assert serverless_lifecycle["delete_propagation_ms"] <= 2000.0
assert serverless_lifecycle["burst_p99_ms"] <= 2000.0
assert serverless_lifecycle["final_restore_rate"] == 1.0
- assert serverless_lifecycle["workflow_run_url"].endswith("/29064934749")
+ _assert_github_actions_run_url(serverless_lifecycle["workflow_run_url"])
assert "does not unlock remote managed" in serverless_lifecycle["claim_boundary"]
kubernetes_dr = entries["kubernetes_postgres_qdrant_dr_smoke"]["current"][
"WaveMind Kubernetes PostgreSQL/Qdrant DR"
@@ -302,7 +309,7 @@ def test_benchmark_matrix_contains_implemented_and_public_benchmarks():
assert kubernetes_dr["index_vector_records"] == kubernetes_dr["index_expected_records"] == 24
assert kubernetes_dr["restored_after_api_replacement_rate"] == 1.0
assert kubernetes_dr["restore_elapsed_ms"] <= 180000.0
- assert kubernetes_dr["workflow_run_url"].endswith("/29064934749")
+ _assert_github_actions_run_url(kubernetes_dr["workflow_run_url"])
assert "not managed-cloud PITR" in kubernetes_dr["claim_boundary"]
external_active_active_loopback = entries["external_http_active_active_loopback"]["current"][
"WaveMind real HTTP active-active service-region sync"
diff --git a/tests/test_benchmark_workflow.py b/tests/test_benchmark_workflow.py
index e2d9bd9..0e1d4d2 100644
--- a/tests/test_benchmark_workflow.py
+++ b/tests/test_benchmark_workflow.py
@@ -243,6 +243,23 @@ def test_production_streaming_load_workflow_runs_checkpointed_large_n_profiles()
assert "WAVEMIND_QDRANT_URL" in workflow
assert "WAVEMIND_QDRANT_URLS" in workflow
assert "WAVEMIND_PGVECTOR_DSN" in workflow
+ assert "WAVEMIND_PGVECTOR_DSNS" in workflow
+ assert "pgvector_dsns" in workflow
+ assert "provision_pgvector_shards" in workflow
+ assert "pgvector_shard_count" in workflow
+ assert "Provision isolated pgvector services" in workflow
+ assert '"pgvector/pgvector:pg16"' in workflow
+ assert "--shm-size 1g" in workflow
+ assert "WAVEMIND_PGVECTOR_INDEX_BUILD_WORKERS" in workflow
+ assert "max_wal_size=4GB" in workflow
+ assert "pg_isready --username postgres --dbname wavemind" in workflow
+ assert "pgvector-managed-dsns.txt" in workflow
+ assert "github-hosted-isolated-service-processes" in workflow
+ assert "pgvector shard row counts do not prove an exact balanced layout" in workflow
+ assert "managed pgvector evidence must use namespace routing" in workflow
+ assert "build independent shard indexes in parallel" in workflow
+ assert "isolated-service topology attestation" in workflow
+ assert "Capture pgvector service diagnostics" in workflow
assert "WAVEMIND_FAISS_IVFPQ_PATH" in workflow
assert 'WAVEMIND_FAISS_IVFPQ_NPROBE: "1024"' in workflow
assert 'WAVEMIND_FAISS_IVFPQ_NPROBE_SWEEP: "64,128,256,512,1024"' in workflow
diff --git a/tests/test_leaderboard_status.py b/tests/test_leaderboard_status.py
index 0e3c2d4..fbb60a6 100644
--- a/tests/test_leaderboard_status.py
+++ b/tests/test_leaderboard_status.py
@@ -343,7 +343,7 @@ def test_leaderboard_status_renderer_writes_public_contract(tmp_path):
assert payload["strict_evidence_readiness"]["summary"]["target_memories_total"] == (
180_000_000
)
- assert payload["strict_evidence_readiness"]["summary"]["can_auto_run_now_count"] == 0
+ assert payload["strict_evidence_readiness"]["summary"]["can_auto_run_now_count"] == 1
assert payload["strict_evidence_readiness"]["summary"]["check_counts"] == {"pass": 8}
assert any(
row["id"] == "hundred_million_remote_load"
diff --git a/tests/test_production_evidence_bundle.py b/tests/test_production_evidence_bundle.py
index 263d54c..2ff5e9a 100644
--- a/tests/test_production_evidence_bundle.py
+++ b/tests/test_production_evidence_bundle.py
@@ -34,7 +34,10 @@ def _ready_env(tmp_path):
"WAVEMIND_SERVERLESS_NODES": "https://wm-a.staging.internal,https://wm-b.staging.internal",
"WAVEMIND_QDRANT_URL": "http://qdrant.staging.internal:6333",
"WAVEMIND_QDRANT_URLS": "http://qdrant-a.staging.internal:6333,http://qdrant-b.staging.internal:6333",
- "WAVEMIND_PGVECTOR_DSN": "postgresql://user:pass@postgres.staging.internal:5432/wavemind",
+ "WAVEMIND_PGVECTOR_DSNS": ",".join(
+ f"postgresql://user:pass@postgres-{index}.staging.internal:5432/wavemind"
+ for index in range(4)
+ ),
"WAVEMIND_FAISS_IVFPQ_PATH": str(tmp_path / "wavemind-faiss-ivfpq-50m.faiss"),
"WAVEMIND_FAISS_IVFPQ_FREE_GB": "8",
"WAVEMIND_API_KEY": "test-key",
diff --git a/tests/test_production_evidence_dispatch.py b/tests/test_production_evidence_dispatch.py
index d9b49e2..3210212 100644
--- a/tests/test_production_evidence_dispatch.py
+++ b/tests/test_production_evidence_dispatch.py
@@ -35,8 +35,9 @@ def _ready_env(tmp_path):
"http://qdrant-a.staging.internal:6333,"
"http://qdrant-b.staging.internal:6333"
),
- "WAVEMIND_PGVECTOR_DSN": (
- "postgresql://user:pass@postgres.staging.internal:5432/wavemind"
+ "WAVEMIND_PGVECTOR_DSNS": ",".join(
+ f"postgresql://user:pass@postgres-{index}.staging.internal:5432/wavemind"
+ for index in range(4)
),
"WAVEMIND_FAISS_IVFPQ_PATH": str(tmp_path / "wavemind-faiss-ivfpq-50m.faiss"),
"WAVEMIND_FAISS_IVFPQ_FREE_GB": "8",
@@ -51,8 +52,8 @@ def test_dispatch_plan_reports_blocked_jobs_without_remote_prerequisites():
assert payload["schema"] == "wavemind.production_evidence_dispatch.v1"
assert payload["overall_status"] == "action_required"
assert payload["summary"]["total_jobs"] == 8
- assert payload["summary"]["blocked_by_preflight_count"] == 4
- assert payload["summary"]["ready_to_dispatch_count"] == 0
+ assert payload["summary"]["blocked_by_preflight_count"] == 3
+ assert payload["summary"]["ready_to_dispatch_count"] == 1
assert payload["summary"]["complete_count"] == 4
by_id = {row["id"]: row for row in payload["jobs"]}
@@ -71,6 +72,7 @@ def test_dispatch_plan_reports_blocked_jobs_without_remote_prerequisites():
assert by_id["hundred_million_remote_load"]["workflow"] == (
"production-streaming-load.yml"
)
+ assert by_id["pgvector_10m_service"]["status"] == "ready_to_dispatch"
def test_dispatch_plan_becomes_ready_with_prerequisites_without_leaking_secret_values(
@@ -102,6 +104,12 @@ def test_dispatch_plan_becomes_ready_with_prerequisites_without_leaking_secret_v
assert qdrant["inputs"]["runner_storage_root"] == "state/production-runs"
assert qdrant["input_bindings"]["qdrant_url"] == "$WAVEMIND_QDRANT_URL"
assert qdrant["required_secrets"] == ["WAVEMIND_QDRANT_API_KEY"]
+ pgvector = by_id["pgvector_10m_service"]
+ assert pgvector["inputs"]["provision_pgvector_shards"] is True
+ assert pgvector["inputs"]["pgvector_shard_count"] == "4"
+ assert pgvector["inputs"]["runner_label"] == "ubuntu-latest"
+ assert "pgvector_dsns" not in pgvector["input_bindings"]
+ assert "pgvector_dsn" not in pgvector["inputs"]
def test_dispatch_markdown_lists_launch_and_promotion_commands(tmp_path):
diff --git a/tests/test_production_evidence_env.py b/tests/test_production_evidence_env.py
index 5b351e0..26c225c 100644
--- a/tests/test_production_evidence_env.py
+++ b/tests/test_production_evidence_env.py
@@ -32,7 +32,10 @@ def _ready_env(tmp_path):
"WAVEMIND_SERVERLESS_NODES": "https://wm-a.staging.internal,https://wm-b.staging.internal",
"WAVEMIND_QDRANT_URL": "http://qdrant.staging.internal:6333",
"WAVEMIND_QDRANT_URLS": "http://qdrant-a.staging.internal:6333,http://qdrant-b.staging.internal:6333",
- "WAVEMIND_PGVECTOR_DSN": "postgresql://user:pass@postgres.staging.internal:5432/wavemind",
+ "WAVEMIND_PGVECTOR_DSNS": ",".join(
+ f"postgresql://user:pass@postgres-{index}.staging.internal:5432/wavemind"
+ for index in range(4)
+ ),
"WAVEMIND_FAISS_IVFPQ_PATH": str(tmp_path / "wavemind-faiss-ivfpq-50m.faiss"),
"WAVEMIND_FAISS_IVFPQ_FREE_GB": "8",
"WAVEMIND_API_KEY": "test-key",
@@ -56,6 +59,7 @@ def test_production_evidence_env_contract_maps_missing_variables():
assert "external-http-cluster-load.yml" in cluster_nodes["workflows"]
assert "benchmarks/http_cluster_load_results.json" in cluster_nodes["artifacts"]
assert "gh secret set WAVEMIND_CLUSTER_NODES" in cluster_nodes["github_secret_command"]
+ assert by_name["WAVEMIND_PGVECTOR_DSNS"]["kind"] == "postgres-dsn-list"
assert all(check["pass"] for check in payload["checks"])
@@ -68,7 +72,7 @@ def test_production_evidence_env_contract_ready_does_not_serialize_secret_values
assert payload["summary"]["missing_required_env"] == []
serialized = json.dumps(payload, ensure_ascii=False)
- assert "postgres.staging.internal" not in serialized
+ assert "postgres-0.staging.internal" not in serialized
assert "qdrant.staging.internal" not in serialized
assert "wm-a.staging.internal" not in serialized
assert "test-key" not in serialized
diff --git a/tests/test_production_evidence_gate.py b/tests/test_production_evidence_gate.py
index aabcb65..e0ec1ea 100644
--- a/tests/test_production_evidence_gate.py
+++ b/tests/test_production_evidence_gate.py
@@ -51,6 +51,11 @@ def _write_100m_streaming_artifact(root: Path, *, engine: str) -> Path:
def test_production_evidence_gate_tracks_strict_external_claims():
root = Path(__file__).resolve().parents[1]
payload = evaluate_production_evidence(root)
+ cluster_load = json.loads(
+ (root / "benchmarks" / "http_cluster_load_results.json").read_text(
+ encoding="utf-8"
+ )
+ )
assert payload["schema"] == "wavemind.production_evidence.v1"
assert payload["overall_status"] == "action_required"
@@ -60,8 +65,10 @@ def test_production_evidence_gate_tracks_strict_external_claims():
by_id = {row["id"]: row for row in payload["requirements"]}
assert by_id["external_http_cluster"]["status"] == "pass"
assert by_id["external_http_cluster"]["issues"] == []
- assert "query p99 84.799" in by_id["external_http_cluster"]["evidence"]
- assert "lifecycle batch p99 6694.757" in by_id["external_http_cluster"]["evidence"]
+ evidence = by_id["external_http_cluster"]["evidence"]
+ metrics = cluster_load["results"][0]
+ assert f"query p99 {metrics['query_p99_ms']}" in evidence
+ assert f"lifecycle batch p99 {metrics['lifecycle_batch_p99_ms']}" in evidence
assert "-f batch_query_size=24" in by_id["external_http_cluster"]["command"]
assert by_id["external_http_active_active"]["artifact"] == (
"benchmarks/external_http_active_active_results.json"
diff --git a/tests/test_production_evidence_preflight.py b/tests/test_production_evidence_preflight.py
index 3a18f89..3404fae 100644
--- a/tests/test_production_evidence_preflight.py
+++ b/tests/test_production_evidence_preflight.py
@@ -30,7 +30,10 @@ def _ready_env(tmp_path):
"WAVEMIND_SERVERLESS_NODES": "https://wm-a.staging.internal,https://wm-b.staging.internal",
"WAVEMIND_QDRANT_URL": "http://qdrant.staging.internal:6333",
"WAVEMIND_QDRANT_URLS": "http://qdrant-a.staging.internal:6333,http://qdrant-b.staging.internal:6333",
- "WAVEMIND_PGVECTOR_DSN": "postgresql://user:pass@postgres.staging.internal:5432/wavemind",
+ "WAVEMIND_PGVECTOR_DSNS": ",".join(
+ f"postgresql://user:pass@postgres-{index}.staging.internal:5432/wavemind"
+ for index in range(4)
+ ),
"WAVEMIND_FAISS_IVFPQ_PATH": str(tmp_path / "wavemind-faiss-ivfpq-50m.faiss"),
"WAVEMIND_FAISS_IVFPQ_FREE_GB": "8",
"WAVEMIND_API_KEY": "test-key",
@@ -50,6 +53,9 @@ def test_production_evidence_preflight_reports_missing_env():
assert by_id["external_http_cluster"]["status"] == "action_required"
assert "WAVEMIND_CLUSTER_NODES" in by_id["external_http_cluster"]["missing_env"]
assert by_id["qdrant_10m_service"]["missing_env"] == ["WAVEMIND_QDRANT_URL"]
+ assert by_id["pgvector_10m_service"]["status"] == "ready"
+ assert by_id["pgvector_10m_service"]["missing_env"] == []
+ assert "provision_pgvector_shards=true" in by_id["pgvector_10m_service"]["command"]
assert by_id["faiss_ivfpq_50m"]["missing_env"] == ["WAVEMIND_FAISS_IVFPQ_PATH"]
@@ -63,6 +69,8 @@ def test_production_evidence_preflight_can_be_ready_with_real_prerequisites(tmp_
by_id = {row["id"]: row for row in payload["checks"]}
assert by_id["external_http_active_active"]["missing_env"] == []
+ assert by_id["pgvector_10m_service"]["missing_env"] == []
+ assert "four-service pgvector topology" in by_id["pgvector_10m_service"]["evidence"]
assert "-f batch_query_size=24" in by_id["external_http_cluster"]["command"]
assert by_id["hundred_million_remote_load"]["ready"] is True
assert "production_streaming_load_qdrant_sharded_100m_results.json" in by_id[
diff --git a/tests/test_production_readiness_gate.py b/tests/test_production_readiness_gate.py
index b6e9c1d..fe41ad0 100644
--- a/tests/test_production_readiness_gate.py
+++ b/tests/test_production_readiness_gate.py
@@ -4,6 +4,12 @@
from pathlib import Path
+def _artifact_workflow_url(filename: str) -> str:
+ root = Path(__file__).resolve().parents[1]
+ payload = json.loads((root / "benchmarks" / filename).read_text(encoding="utf-8"))
+ return str(payload["workflow_run_url"])
+
+
def test_production_readiness_gate_reports_current_blockers():
from benchmarks.production_readiness_gate import evaluate_production_readiness
@@ -54,7 +60,9 @@ def test_production_readiness_gate_reports_current_blockers():
assert "failure drill pass" in criteria["operator_autoscaling_repair"]["evidence"]
assert "Lease transitions 1" in criteria["operator_autoscaling_repair"]["evidence"]
assert "recovered API True" in criteria["operator_autoscaling_repair"]["evidence"]
- assert "actions/runs/29057247023" in criteria["operator_autoscaling_repair"]["evidence"]
+ assert _artifact_workflow_url("kubernetes_operator_smoke_results.json") in criteria[
+ "operator_autoscaling_repair"
+ ]["evidence"]
assert "PDB min available 3" in criteria["operator_autoscaling_repair"]["evidence"]
assert "topology constraints 2" in criteria["operator_autoscaling_repair"]["evidence"]
assert "rolling pods replaced 4" in criteria["operator_autoscaling_repair"]["evidence"]
@@ -93,7 +101,9 @@ def test_production_readiness_gate_reports_current_blockers():
assert "non-loopback multi-zone Kubernetes lifecycle" in criteria["serverless_externalized_state"]["requirement"]
assert "kind lifecycle pass 13/13" in criteria["serverless_externalized_state"]["evidence"]
assert "coherence 3/3" in criteria["serverless_externalized_state"]["evidence"]
- assert "actions/runs/29064934749" in criteria["serverless_externalized_state"]["evidence"]
+ assert _artifact_workflow_url(
+ "kubernetes_serverless_lifecycle_smoke_results.json"
+ ) in criteria["serverless_externalized_state"]["evidence"]
assert criteria["memory_os_worker"]["status"] == "pass"
assert "predictive prewarm" in criteria["memory_os_worker"]["requirement"]
assert "usage-pattern priority boosts" in criteria["memory_os_worker"]["requirement"]
@@ -176,7 +186,9 @@ def test_production_readiness_gate_reports_current_blockers():
assert "outage delete suppression 1.0" in criteria["active_active_field_crdt"]["evidence"]
assert "recovery convergence 1.0" in criteria["active_active_field_crdt"]["evidence"]
assert "recovery delete suppression 1.0" in criteria["active_active_field_crdt"]["evidence"]
- assert "actions/runs/29058433643" in criteria["active_active_field_crdt"]["evidence"]
+ assert _artifact_workflow_url(
+ "kubernetes_active_active_region_smoke_results.json"
+ ) in criteria["active_active_field_crdt"]["evidence"]
assert "actor watermarks" in criteria["active_active_field_crdt"]["requirement"]
assert "replication lag" in criteria["active_active_field_crdt"]["requirement"]
assert "watermarks 3" in criteria["active_active_field_crdt"]["evidence"]
@@ -197,7 +209,9 @@ def test_production_readiness_gate_reports_current_blockers():
assert "restore recall 1.0" in criteria["backup_restore_dr"]["evidence"]
assert "Qdrant 24/24" in criteria["backup_restore_dr"]["evidence"]
assert "replacement recall 1.0" in criteria["backup_restore_dr"]["evidence"]
- assert "actions/runs/29064934749" in criteria["backup_restore_dr"]["evidence"]
+ assert _artifact_workflow_url(
+ "kubernetes_postgres_qdrant_dr_smoke_results.json"
+ ) in criteria["backup_restore_dr"]["evidence"]
assert criteria["structured_multimodal_payloads"]["status"] == "pass"
assert "3D assets" in criteria["structured_multimodal_payloads"]["requirement"]
assert "shared cross-modal embedding space" in criteria["structured_multimodal_payloads"]["requirement"]
diff --git a/tests/test_production_streaming_load_benchmark.py b/tests/test_production_streaming_load_benchmark.py
index 63ed104..886e977 100644
--- a/tests/test_production_streaming_load_benchmark.py
+++ b/tests/test_production_streaming_load_benchmark.py
@@ -1125,14 +1125,193 @@ def test_streaming_load_plan_only_supports_pgvector_service(monkeypatch):
assert row["engine"] == "WaveMind pgvector streaming"
assert row["vectors"] == 10_000_000
assert row["estimated_index_gb"] == 0.0
- assert row["index_mode"].startswith("remote PostgreSQL/pgvector")
- assert "WAVEMIND_PGVECTOR_DSN" in row["required_env"]
- assert "missing_env:WAVEMIND_PGVECTOR_DSN" in row["blockers"]
+ assert row["index_mode"].startswith("modulo-sharded PostgreSQL/pgvector")
+ assert "WAVEMIND_PGVECTOR_DSNS" in row["required_env"]
+ assert "missing_env:WAVEMIND_PGVECTOR_DSNS" in row["blockers"]
assert row["command_env"]["WAVEMIND_PGVECTOR_CREATE_HNSW"] == "1"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_STORAGE_TYPE"] == "halfvec"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_INSERT_MODE"] == "copy"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_INDEX_TYPE"] == "hnsw"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_HNSW_M"] == "16"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_HNSW_EF_CONSTRUCTION"] == "256"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_EF_SEARCH"] == "800"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_QUERY_ROUTING"] == "namespace"
+ assert row["command_env"]["WAVEMIND_PGVECTOR_PREWARM_INDEX"] == "1"
assert "--engines pgvector-service" in row["command"]
assert "production_streaming_load_pgvector_10m_results.json" in row["command"]
+def test_pgvector_config_validates_storage_and_insert_modes(monkeypatch):
+ from benchmarks.production_streaming_load_benchmark import _pgvector_config_from_env
+
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_STORAGE_TYPE", "halfvec")
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_INSERT_MODE", "copy")
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_INDEX_TYPE", "hnsw-binary")
+ config = _pgvector_config_from_env()
+ assert config["storage_type"] == "halfvec"
+ assert config["insert_mode"] == "copy"
+ assert config["index_type"] == "hnsw-binary"
+
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_QUERY_ROUTING", "namespace")
+ config = _pgvector_config_from_env()
+ assert config["query_routing"] == "namespace"
+
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_QUERY_ROUTING", "broadcast")
+ with pytest.raises(ValueError, match="must be fanout or namespace"):
+ _pgvector_config_from_env()
+
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_QUERY_ROUTING", "fanout")
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_STORAGE_TYPE", "binary")
+ with pytest.raises(ValueError, match="must be vector or halfvec"):
+ _pgvector_config_from_env()
+
+
+def test_pgvector_copy_batch_replaces_only_uncheckpointed_range():
+ from benchmarks.production_streaming_load_benchmark import _pgvector_insert_batch
+
+ class FakeCopy:
+ def __init__(self):
+ self.rows = []
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc, traceback):
+ return False
+
+ def write_row(self, row):
+ self.rows.append(row)
+
+ class FakeCursor:
+ def __init__(self):
+ self.executed = []
+ self.copy_sql = None
+ self.copy_stream = FakeCopy()
+
+ def execute(self, sql, params):
+ self.executed.append((sql, params))
+
+ def copy(self, sql):
+ self.copy_sql = sql
+ return self.copy_stream
+
+ cursor = FakeCursor()
+ ids = np.asarray([101, 102], dtype=np.int64)
+ vectors = np.asarray([[1.0, 0.0], [0.0, 1.0]], dtype=np.float32)
+ _pgvector_insert_batch(
+ cursor,
+ table="wavemind_vectors",
+ collection="run-1",
+ ids=ids,
+ vectors=vectors,
+ storage_type="halfvec",
+ insert_mode="copy",
+ )
+
+ assert cursor.executed == [
+ (
+ "DELETE FROM wavemind_vectors WHERE collection = %s AND memory_id BETWEEN %s AND %s",
+ ("run-1", 101, 102),
+ )
+ ]
+ assert cursor.copy_sql == (
+ "COPY wavemind_vectors (collection, memory_id, embedding) FROM STDIN"
+ )
+ assert [row[:2] for row in cursor.copy_stream.rows] == [
+ ("run-1", 101),
+ ("run-1", 102),
+ ]
+
+
+def test_pgvector_checkpoint_migrates_only_index_specific_signature(tmp_path):
+ from benchmarks.production_streaming_load_benchmark import (
+ _checkpoint_signature,
+ _load_pgvector_checkpoint,
+ _new_checkpoint,
+ )
+
+ current = _checkpoint_signature(
+ engine="WaveMind pgvector streaming",
+ count=100,
+ dim=8,
+ query_count=4,
+ top_k=2,
+ seed=42,
+ noise=0.08,
+ batch_size=10,
+ extra={
+ "table": "vectors",
+ "storage_type": "halfvec",
+ "insert_mode": "copy",
+ },
+ )
+ legacy = json.loads(json.dumps(current))
+ legacy["extra"].update(
+ {
+ "create_hnsw": True,
+ "hnsw_m": 8,
+ "hnsw_ef_construction": 64,
+ "exact": False,
+ "iterative_scan": None,
+ }
+ )
+ checkpoint = _new_checkpoint(legacy)
+ path = tmp_path / "pgvector-checkpoint.json"
+ path.write_text(json.dumps(checkpoint), encoding="utf-8")
+
+ migrated = _load_pgvector_checkpoint(path, current)
+
+ assert migrated["signature"] == current
+ assert set(migrated["metadata"]["signature_migrated_index_keys"]) == {
+ "create_hnsw",
+ "hnsw_m",
+ "hnsw_ef_construction",
+ "exact",
+ "iterative_scan",
+ }
+
+
+def test_pgvector_shard_counts_cover_every_id_exactly():
+ from benchmarks.production_streaming_load_benchmark import (
+ _pgvector_benchmark_namespace_shard,
+ _pgvector_shard_expected_count,
+ )
+
+ assert [
+ _pgvector_shard_expected_count(10, 4, index) for index in range(4)
+ ] == [3, 3, 2, 2]
+ assert sum(
+ _pgvector_shard_expected_count(10_000_003, 4, index)
+ for index in range(4)
+ ) == 10_000_003
+ assert [
+ _pgvector_benchmark_namespace_shard(source_id, 4)
+ for source_id in range(1, 9)
+ ] == [0, 1, 2, 3, 0, 1, 2, 3]
+ with pytest.raises(ValueError, match="source_id must be positive"):
+ _pgvector_benchmark_namespace_shard(0, 4)
+
+
+def test_pgvector_sharded_mode_requires_multiple_services(monkeypatch):
+ from benchmarks.production_streaming_load_benchmark import run_pgvector_streaming
+
+ monkeypatch.delenv("WAVEMIND_PGVECTOR_DSN", raising=False)
+ monkeypatch.setenv("WAVEMIND_PGVECTOR_DSNS", "postgresql://only-one")
+
+ row = run_pgvector_streaming(
+ count=10,
+ dim=4,
+ query_count=2,
+ top_k=1,
+ seed=42,
+ noise=0.01,
+ batch_size=5,
+ )
+
+ assert row["skipped"] is True
+ assert "at least two service DSNs" in row["reason"]
+
+
def test_streaming_load_plan_only_supports_qdrant_service(monkeypatch):
from benchmarks.production_streaming_load_benchmark import plan_streaming_load
diff --git a/tests/test_scale_plan.py b/tests/test_scale_plan.py
index 7b8aca5..2b7fa43 100644
--- a/tests/test_scale_plan.py
+++ b/tests/test_scale_plan.py
@@ -313,7 +313,11 @@ def test_production_scale_run_plan_can_mark_profile_ready(monkeypatch):
payload = build_production_scale_run_plan(
profiles=["pgvector-10m"],
- env={"WAVEMIND_PGVECTOR_DSN": "postgresql://example/wavemind"},
+ env={
+ "WAVEMIND_PGVECTOR_DSNS": (
+ "postgresql://example-a/wavemind,postgresql://example-b/wavemind"
+ )
+ },
disk_free_gb=1000.0,
)
row = payload["profiles"][0]
@@ -322,6 +326,7 @@ def test_production_scale_run_plan_can_mark_profile_ready(monkeypatch):
assert row["status"] == "ready"
assert row["missing_env"] == ()
assert row["blockers"] == ()
+ assert row["command_env"]["WAVEMIND_PGVECTOR_QUERY_ROUTING"] == "namespace"
assert row["slo_capacity_envelope"]["status"] in {"pass", "scale_required"}
assert row["slo_capacity_envelope"]["required_replicas"] <= row["autoscaling_max_replicas"]
assert row["cost_envelope"]["memory_count"] == 10_000_000
diff --git a/tests/test_strict_evidence_readiness_report.py b/tests/test_strict_evidence_readiness_report.py
index 56757d2..82be6d8 100644
--- a/tests/test_strict_evidence_readiness_report.py
+++ b/tests/test_strict_evidence_readiness_report.py
@@ -22,8 +22,9 @@ def test_strict_evidence_readiness_joins_all_strict_requirements():
assert payload["summary"]["complete_count"] == 4
assert payload["summary"]["target_memories_total"] == 180_000_000
assert payload["summary"]["check_counts"] == {"pass": 8}
- assert payload["summary"]["can_auto_run_now_count"] == 0
- assert payload["summary"]["blocker_counts"]["missing_env"] == 4
+ assert payload["summary"]["can_auto_run_now_count"] == 1
+ assert payload["summary"]["blocker_counts"]["missing_env"] == 3
+ assert payload["summary"]["blocker_counts"]["missing_artifact"] == 1
assert payload["summary"]["blocker_counts"]["complete"] == 4
by_id = {row["id"]: row for row in payload["requirements"]}
@@ -60,6 +61,10 @@ def test_strict_evidence_readiness_joins_all_strict_requirements():
assert qdrant_100m["locked_claim"] == "10M-100M service-backed production scale"
assert '-f size="100000000"' in qdrant_100m["safe_dispatch_command"]
assert qdrant_100m["can_auto_run_now"] is False
+ pgvector_10m = by_id["pgvector_10m_service"]
+ assert pgvector_10m["can_auto_run_now"] is True
+ assert pgvector_10m["missing_env"] == []
+ assert "Run the safe dispatch command now" in pgvector_10m["next_action"]
serialized = json.dumps(payload, sort_keys=True)
assert "ghp_" not in serialized
diff --git a/wavemind/production_evidence.py b/wavemind/production_evidence.py
index 59537ce..f78d5e4 100644
--- a/wavemind/production_evidence.py
+++ b/wavemind/production_evidence.py
@@ -1157,6 +1157,16 @@ def _large_run_preflight(
dsn = _env_value(env, "WAVEMIND_PGVECTOR_DSN")
if not dsn.startswith(("postgresql://", "postgres://")):
issues.append("WAVEMIND_PGVECTOR_DSN must start with postgresql:// or postgres://")
+ if "WAVEMIND_PGVECTOR_DSNS" in required_env and _env_value(env, "WAVEMIND_PGVECTOR_DSNS"):
+ dsns = _split_env_list(_env_value(env, "WAVEMIND_PGVECTOR_DSNS"))
+ if len(dsns) < 2:
+ issues.append("WAVEMIND_PGVECTOR_DSNS must contain at least two service DSNs")
+ for index, dsn in enumerate(dsns):
+ if not dsn.startswith(("postgresql://", "postgres://")):
+ issues.append(
+ f"WAVEMIND_PGVECTOR_DSNS item {index + 1} must start with "
+ "postgresql:// or postgres://"
+ )
for name in ("WAVEMIND_FAISS_PATH", "WAVEMIND_FAISS_IVFPQ_PATH"):
if name in required_env and _env_value(env, name):
required_free = float(plan.get("required_local_free_gb", 0.0) or 0.0)
@@ -1198,6 +1208,55 @@ def _large_run_preflight(
)
+def _managed_pgvector_preflight(root: Path) -> EvidencePreflightCheck:
+ plan_artifact = "benchmarks/production_streaming_load_pgvector_10m_plan.json"
+ output_artifact = "benchmarks/production_streaming_load_pgvector_10m_results.json"
+ workflow_path = root / ".github" / "workflows" / "production-streaming-load.yml"
+ plan = _first_plan(root, plan_artifact)
+ workflow = workflow_path.read_text(encoding="utf-8") if workflow_path.exists() else ""
+ issues: list[str] = []
+ if not plan:
+ issues.append(f"missing plan artifact {plan_artifact}")
+ for token in (
+ "provision_pgvector_shards",
+ "pgvector_shard_count",
+ "github-hosted-isolated-service-processes",
+ "pgvector/pgvector:pg16",
+ ):
+ if token not in workflow:
+ issues.append(f"production streaming workflow is missing {token}")
+
+ command = (
+ "gh workflow run production-streaming-load.yml --ref main "
+ "-f engine=pgvector-service -f size=10000000 -f dim=128 "
+ "-f queries=2000 -f top_k=10 -f batch_size=5000 "
+ "-f target_recall=0.95 -f target_p99_ms=100 -f target_qps=100 "
+ "-f replicas=3 -f autoscaling_max_replicas=24 "
+ "-f capacity_headroom=0.7 -f runner_label=ubuntu-latest "
+ "-f provision_pgvector_shards=true -f pgvector_shard_count=4 "
+ "-f runner_storage_root=state -f commit_results=true"
+ )
+ return EvidencePreflightCheck(
+ id="pgvector_10m_service",
+ title="10M pgvector service load preflight",
+ status=_preflight_status(issues),
+ ready=not issues,
+ evidence=(
+ "workflow-provisioned four-service pgvector topology; external DSNs optional; "
+ f"plan {plan_artifact}"
+ ),
+ required_env=(),
+ missing_env=(),
+ command=command,
+ output_artifact=output_artifact,
+ issues=tuple(dict.fromkeys(issues)),
+ warnings=(
+ "Ephemeral isolated service processes prove the 10M candidate-index SLO, "
+ "not PostgreSQL HA or independent-node failure tolerance.",
+ ),
+ )
+
+
def evaluate_production_evidence_preflight(
root: Path = PROJECT_ROOT,
*,
@@ -1253,14 +1312,7 @@ def evaluate_production_evidence_preflight(
output_artifact="benchmarks/production_streaming_load_qdrant_sharded_10m_results.json",
env=environment,
),
- _large_run_preflight(
- root,
- check_id="pgvector_10m_service",
- title="10M pgvector service load preflight",
- plan_artifact="benchmarks/production_streaming_load_pgvector_10m_plan.json",
- output_artifact="benchmarks/production_streaming_load_pgvector_10m_results.json",
- env=environment,
- ),
+ _managed_pgvector_preflight(root),
_large_run_preflight(
root,
check_id="faiss_ivfpq_50m",
@@ -1532,19 +1584,23 @@ def _dispatch_config(
"required_secrets": ["WAVEMIND_QDRANT_API_KEYS"],
}
if requirement_id == "pgvector_10m_service":
+ inputs = _streaming_dispatch_inputs(
+ root,
+ plan_artifact="benchmarks/production_streaming_load_pgvector_10m_plan.json",
+ engine="pgvector-service",
+ size=10_000_000,
+ credential_input="pgvector_dsns",
+ credential_placeholder="$WAVEMIND_PGVECTOR_DSNS",
+ runner_label="ubuntu-latest",
+ commit_results=commit_results,
+ )
+ inputs.pop("pgvector_dsns", None)
+ inputs["provision_pgvector_shards"] = True
+ inputs["pgvector_shard_count"] = "4"
return {
"workflow": "production-streaming-load.yml",
"wave": "service-scale-10m",
- "inputs": _streaming_dispatch_inputs(
- root,
- plan_artifact="benchmarks/production_streaming_load_pgvector_10m_plan.json",
- engine="pgvector-service",
- size=10_000_000,
- credential_input="pgvector_dsn",
- credential_placeholder="$WAVEMIND_PGVECTOR_DSN",
- runner_label=runner_label,
- commit_results=commit_results,
- ),
+ "inputs": inputs,
"required_secrets": [],
}
if requirement_id == "faiss_ivfpq_50m":
diff --git a/wavemind/production_evidence_env.py b/wavemind/production_evidence_env.py
index 31fbd58..28fae9c 100644
--- a/wavemind/production_evidence_env.py
+++ b/wavemind/production_evidence_env.py
@@ -63,10 +63,16 @@
"example": "REDACTED_QDRANT_API_KEY_A,REDACTED_QDRANT_API_KEY_B",
"description": "Optional comma-separated Qdrant API keys for sharded Qdrant production load jobs.",
},
- "WAVEMIND_PGVECTOR_DSN": {
- "kind": "postgres-dsn",
- "example": "postgresql://USER:PASSWORD@pgvector.staging.example.com:5432/wavemind",
- "description": "PostgreSQL/pgvector DSN for 10M pgvector service streaming load.",
+ "WAVEMIND_PGVECTOR_DSNS": {
+ "kind": "postgres-dsn-list",
+ "example": (
+ "postgresql://USER:PASSWORD@pgvector-a.staging.example.com:5432/wavemind,"
+ "postgresql://USER:PASSWORD@pgvector-b.staging.example.com:5432/wavemind"
+ ),
+ "description": (
+ "Comma-separated PostgreSQL/pgvector service DSNs for the namespace-sharded "
+ "10M streaming load."
+ ),
},
"WAVEMIND_FAISS_IVFPQ_PATH": {
"kind": "filesystem-path",
diff --git a/wavemind/scale.py b/wavemind/scale.py
index 1fb845f..9d292d7 100644
--- a/wavemind/scale.py
+++ b/wavemind/scale.py
@@ -380,15 +380,25 @@ def checkpoint(name: str) -> str:
safety_factor=1.25,
output_artifact=output("production_streaming_load_pgvector_10m_results.json"),
checkpoint_path=checkpoint("pgvector-service-10000000"),
- required_env=("WAVEMIND_PGVECTOR_DSN",),
+ required_env=("WAVEMIND_PGVECTOR_DSNS",),
command_env={
- "WAVEMIND_PGVECTOR_DSN": "postgresql://user:password@postgres.example:5432/wavemind",
+ "WAVEMIND_PGVECTOR_DSNS": ",".join(
+ f"postgresql://user:password@postgres-{index}.example:5432/wavemind"
+ for index in range(4)
+ ),
"WAVEMIND_PGVECTOR_CREATE_HNSW": "1",
- "WAVEMIND_PGVECTOR_EF_SEARCH": "1000",
+ "WAVEMIND_PGVECTOR_STORAGE_TYPE": "halfvec",
+ "WAVEMIND_PGVECTOR_INSERT_MODE": "copy",
+ "WAVEMIND_PGVECTOR_INDEX_TYPE": "hnsw",
+ "WAVEMIND_PGVECTOR_HNSW_M": "16",
+ "WAVEMIND_PGVECTOR_HNSW_EF_CONSTRUCTION": "256",
+ "WAVEMIND_PGVECTOR_EF_SEARCH": "800",
+ "WAVEMIND_PGVECTOR_QUERY_ROUTING": "namespace",
+ "WAVEMIND_PGVECTOR_PREWARM_INDEX": "1",
"WAVEMIND_PGVECTOR_WARMUP_QUERIES": "100",
},
module_requirements=("psycopg",),
- index_mode="remote PostgreSQL/pgvector HNSW service",
+ index_mode="remote namespace-sharded PostgreSQL/pgvector HNSW services",
monthly_budget_usd=2_000.0,
max_cost_per_1m_memories_usd=200.0,
max_compute_cost_per_1m_queries_usd=10.0,