Skip to content

Production discovery ClickPipe validation — 2026-09-20

The missing-table blocker is resolved. The existing yumina-admin-analytics ClickPipe is Running with 19 mappings. Its original 17 mappings and unrelated configuration were preserved. A bounded synthetic check through the production Postgres → ClickPipe → raw ClickHouse → archive path passed, including explicit erasure. Recommendation, measurement and analytics-readiness flags remain off.

Configuration change

SourceDestinationSorting keyColumns
public.discovery_eventsyumina_raw.discovery_eventsidAll 17
public.discovery_erased_actorsyumina_raw.discovery_erased_actorsactor_idBoth

Both raw tables use SharedReplacingMergeTree, have no partition expression, and include _peerdb_version and _peerdb_is_deleted. Read-only preflight confirmed publication membership, all column grants and snapshot ctid access; the existing source publication and grants required no changes.

The separately supplied Cloud API credential could manage this exact pipe, although the installed Cloud MCP connector only exposes reads. The credential was passed through hidden process input, kept in memory and cleared afterward. Connector credentials and permission settings were not changed. All temporary credential processes were terminated. No subscription or additional service was needed.

The controller journaled each mutation before sending it and checked hashes of the original mappings and unrelated configuration. The additive PATCH contained only source.postgres.tableMappingsToAdd. The pipe reached Paused before the update, and the API returned it to Running after adding the tables; no additional restart was needed. An independent MCP list confirmed Running / 19 mappings.

One preliminary pause request used action from ClickHouse's blog example and received HTTP 400 without changing the pipe. The current official API model uses command. The corrected command: stop request and the additive table update both returned HTTP 200. No uncertain mutation was blindly repeated.

Live pipeline check

Run 4d79ce098b5d66aff083c007 passed all ten checkpoints. It used one explicitly synthetic pipeline_canary event, a synthetic actor and world, and the unchanged candidate importer. It did not create a real user, story, recommendation or model call. The source and discovery archive were empty at preflight.

AssertionObserved result
Source insert reaches raw ClickHouseOne matching live event
Candidate importer archives the eventOne archive row and one consumer-visible row
Repeated importZero new events; still one archive row
Source retention-style deletion reaches rawMatching CDC tombstone
Import after source deletionArchive and consumer view retain the event
Explicit erasure reaches rawMatching live actor marker
Import after explicit erasureMarker archived; consumer-visible event count becomes zero
Final read-only auditSource event absent, raw tombstone present, archive row retained, erasure marker present, consumer view excludes event

The test event has been removed from Postgres. Its synthetic raw tombstone, archived event and permanent synthetic erasure marker intentionally remain as the bounded audit fixture; recommendation consumers cannot see the event through source_discovery_events. Nothing belonging to a real user was modified.

The final audit independently confirmed all four application flags off, ANALYTICS_DISCOVERY_READY off on the worker, and the dedicated discovery Redis still unwired. Every importer observation retained sourceComplete=false and observationComplete=false; a drained queue does not prove complete collection.

Evidence and limits

Application source remains the previously tested candidate. Importer SHA-256: c177ca016f46cc953866af38f7751440d38589b5af35d31d909892c4c931fa19. The existing application CI and deployment tests were not rerun for this infrastructure change; the new checks exercised the actual CDC route.

Ignored local receipts:

ReceiptSHA-256
clickpipe-discovery-preflight-v1.json69b698598f5937bc1d12bdd4a4dd63b2d881e794858c532228b76d792909ddb4
clickpipe-add-discovery-journal-v1.json265abe9c0f8c52007411dd7c0e57e91847f93e85a7212520c52ba69b813bdfa3
clickpipe-discovery-verify-v1.jsonbcdf09b6d30371d50ddbed35597be080ecd6140d8dc4b1c039b1ef031fe32869
clickpipe-independent-confirmation-v1.json66645cbb3c2b200144810ef57abb835a54e515cef56797c9c6e4f2fee7353371
clickpipe-live-discovery-canary-v1.jsond845a932e1c12909399ae554666b64d1c252a2ca3e2853311dbd371e76d4c513
clickpipe-final-audit-v1.jsonb7fde156600ff7087b1240197819885308560faf437d77cb329aa248ea500b7c

This proves one real replication, archive, idempotency and erasure sequence. The importer ran explicitly from the reviewed candidate using existing worker credentials; this is not evidence that the production worker deployment has adopted that candidate or runs the importer on schedule. The final audit measured the operator machine about 22.5 seconds ahead of Postgres, so client timestamps and importer lag fields must not be used as calibrated end-to-end latency measurements. This run does not establish sustained throughput, complete capture, long-outage recovery, production concurrent capacity, a full visit-TTL cycle or reader-outcome improvement. These remaining gates still prevent broad feature activation. Experimental semantic ranking remains disabled after its failed quality evaluation.