Repository navigation
feat(adapter): add the Adapter live translation facade - #2529
Merged
Merged
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c8aaee46d4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Serve a standard registry API over systems that already hold the data, translating each request and response live, with no record store and no decisions. Adds the registry-adapter, registry-adapter-core and registry-adapterctl crates, packs and offline fixtures, the refusal corpus, and the shared platform support they need (destination policy, OAuth client, resilience, rolling rate window, script additions, config conformance cases). Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
jeremi
force-pushed
the
jeremi/live-adapter
branch
from
October 31, 2026 20:26
6244336 to
b885e3e
Compare
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 31, 2026
…ify cannot race it Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
Summary
Adds the Adapter product: a live translation facade that serves a standard registry API over systems that already hold the data (DHIS2, FHIR servers, OpenCRVS, bespoke REST services) without changing their native APIs. It holds no records and decides nothing; it translates each request and response live.
The engine is a bounded Rust port of Apache Camel's core (Exchange and Message, routes in Camel's YAML DSL shape, enterprise integration patterns under their Camel names, the contract-first REST facade, error handling and redelivery), restricted for a minimum-disclosure stack. Source interpretation lives in reviewed pack scripts and artifacts, not in source-specific Rust.
What it serves at this checkpoint:
breg-recordsread surface (search, get, read-only POST reads) with OIDC, client admission, operation and record-type scopes, closed request and response schemas, bounded source access, profile-owned problems, opaque continuations, and a value-free PostgreSQL journal.New crates:
registry-adapter,registry-adapter-core,registry-adapterctl. Packs and examples for DHIS2 tracker, DHIS2 on GovStack, and OpenCRVS (offline fixtures only), five source-shape fixtures (FHIR R4 read and conditional create, GraphQL cursor paging, REST offset paging over mTLS, a second target profile), and a refusal corpus.products/adapter/README.mdis the entry point;CONCEPT.mdholds the contract and its decisions.Shared changes outside the Adapter:
registry-platform-httputil: destination policy and OAuth client support used by the Adapter.registry-platform-resilience(circuit breaker, redelivery) and a rolling window inregistry-platform-ratelimit.registry-platform-script: Rhai additions for pack scripts.registry-adapterdocset product that no docset publishes yet, and both binaries are listed as unreviewed and source-build-only. Nothing about the Adapter appears on the docs site until it has reviewed pages.This is a first checkpoint, not the full Adapter programme. What remains: the Idempotent Consumer and GraphQL port rows, asynchronous write modes (202 status link, bounded wait), multi-step write resume, a real OpenCRVS proof, and personal delegation and MCP writes, which stay behind their own contracts.
Evidence
Run locally after rebasing onto current
main:cargo fmt --check, workspacecargo checkandcargo clippy(all targets, warnings denied)products/adapter/scripts/check-contracts.shproducts/adapter/scripts/test-postgres.shregistry-mcp(Adapter goldens repinned to the in-tree producer)registry-adapter-core,registry-adapterctl(includingtls-testverify)check-corpus.py)cargo deny check--check-generated, conventions lint, gates inventorycheck.sh,--check-references)Not run locally: the full
cargo test --workspace, the ignorednative_adaptertests, the docs site build, client bindings, tutorials, other products' lanes, and the merge-queue assurance lanes. CI covers those.Live journeys run against one immutable build of this branch before the rebase:
These prove the named paths only, and they were not rerun after rebasing onto current
main.Notes
unique-list-sweepcells (evidence/bundle,coordinator/runtime) are recorded inexpected-failures.yaml. This branch adds the case, and those two readers report a duplicate set item as a domain diagnostic instead ofconfig.duplicate-item. No Adapter cell fails. Evidence and Coordinator readers report duplicate set items as config.duplicate-item #2530 covers the two readers.problems/registry-adapter/is reserved by oneplanned-resolutionexclusion until the inventory has titles, descriptions and a settled URI form; Publish the Adapter problem inventory in the identifier catalog #2531 covers it.oauth_served_route::token_acquisition_obeys_the_route_deadline_before_any_data_send(a 10 ms route deadline) failed twice in full local contract-gate runs on a loaded machine and passed 5 of 5 alone. Worth watching in CI; not changed here.rust/hard-coded-cryptographic-valuealerts inauth/material.rsare the HTTP Basic encoding test vectors inbasic_values_encode_and_refuse(test-only, same class as the Scheduling alerts dismissed as "used in tests"). The tworust/cleartext-loggingalerts inauth/token.rsare fixed by no longer echoing the renderedDebugoutput in assertion messages.adapter_journal_events; each migration commits in one transaction with its ledger row. Gates rerun on the combined tree: fmt, workspace and Adapter (postgres-test) clippy,check-contracts.sh,test-postgres.sh, all pass.main.DCO
Signed-off-bytrailer.