Repository navigation
test(reporting): prove JS and Python chunks verify in one database and bucket - #1470
Conversation
…d bucket Adds the Stage 2 acceptance gate from adcontextprotocol/adcp#7996: the shipped @adcp/sdk row storage and this SDK write and read the same adcp_reporting_row_* tables and one filesystem bucket root, in both directions, for PostgreSQL-bound and object-bound revision and rows-only row sets. - tests/interop/reporting_row_storage_js_driver.cjs drives the JS readers and writers; the live test runs when ADCP_JS_SDK_DIR points at a built adcp-client. - The rows each SDK wrote are committed under tests/fixtures/reporting-row-storage-interop-v1/ and replayed here in a fresh database and bucket, so Python CI needs no Node. - Both SDKs resolve the same binding identity digest and namespace, and read each other's filesystem native versions. Part of #1457. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — test-only interop acceptance gate (Stage 2), no blocking findings.
This PR adds docs, two test modules, a JS driver, and two committed fixtures. No src/ or public-surface changes. The reviewer verified the replay path is correct (create_schema → ready_row_storage registers bindings before replay_state's row_sets inserts, satisfying the row_binding_id FK), native_versions are correctly regenerated on replay while bytes/digests remain the other SDK's, and the byte-level cross-SDK decompression check is genuine.
Decision trace: no critical/high findings (row 1 n/a); gated_paths is false (row 2 n/a); high_risk is false (rows 3/5 n/a); no medium findings (rows 4/8 n/a); no prior decision (row 6 n/a); no no-auto-approve team match (row 7 n/a). Falls through to row 9 → approve.
Note: review_decision is REVIEW_REQUIRED, but with gated_paths false that does not gate approval.
Nit (non-blocking): tests/conformance/reporting/_row_storage_interop.py:265 — dead namespace_key param + misleading re-root comment in replay_state. Operational note from reviewer: run_js timeout (240s) does not kill the node subprocess, but this path is gated behind ADCP_JS_SDK_DIR and does not run in standard CI — low impact.
… replay Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — test-only interop refactor, no blocking findings.
This PR is a test-only change: it refactors replay_state in tests/conformance/reporting/_row_storage_interop.py to drop the namespace_key parameter and the namespace re-rooting, storing each recorded object at its verbatim key. The reviewer confirmed the change is self-consistent: replay inserts the writer's object_key verbatim (L303), puts the object at the same key (L267), and python_verify resolves reads by the stored object_key column — so verbatim keys faithfully model the interop contract. The old re-rooting rewrote the namespace segment and masked the portability assertion. New fixtures and docs round out the change; no src/adcp/** surface is touched.
Checked against repo gates: no public-API/semver changes, no generated-code hand-edits, no forward-compat union changes, no import-layering violations, no disabled tests or blanket type-ignores. No findings at any severity.
Decision table: no critical/high findings (row 1 n/a); gated_paths false (row 2 n/a); high_risk false (rows 3/5 n/a); no medium findings (rows 4/8 n/a); prior decision was approve (row 6 n/a); no no-auto-approve team match (row 7 n/a). Falls through to row 9 — approve. Consistent with the prior approve on the preceding head.
|
This test is the right acceptance gate for shared row storage. JS-written chunks verify through Run the live test in CI
Make the replay tests fail, not skip, without fixtures
Fixture size
Smaller itemsFour smaller items remain:
|
Part of #1457 (Stage 2 of adcontextprotocol/adcp#7996). The acceptance gate for shared row storage; builds on the merged storage, providers and retention (#1464 to #1469).
Change
JS-written chunks must verify in Python and Python-written chunks in JS, against one database and one bucket. This PR adds that proof:
tests/interop/reporting_row_storage_js_driver.cjsdrives the shipped@adcp/sdkreaders and writers against the sameadcp_reporting_row_*tables and one filesystem bucket root, in both directions, for PostgreSQL-bound and object-bound revision and rows-only row sets. The live test runs whenADCP_JS_SDK_DIRpoints at a built adcp-client checkout.tests/fixtures/reporting-row-storage-interop-v1/and replayed here into a fresh database and bucket, so Python CI needs no Node.inode:birthtimeNs:mtimeNs:size).How to run the live JS interop test
Without
ADCP_JS_SDK_DIRthe test replays the committed fixtures only.docs/reporting-row-storage.mdgains the interop section.Merged by the repo owner's watcher without waiting for code-owner review; @rachitm022 is requested for visibility and will test the finished stack.
🤖 Generated with Claude Code