feat(pitot): make the SDKs ready for outside builders - #262
Merged
Conversation
Building on Pitot means writing a Controller or Consumer in a language binding, so the bindings had to become something an outsider can pick up and trust. This closes the gaps between "the SDK exists" and "the SDK is safe to build on" — all feature-preserving. - CI-enforce the cross-language conformance suite (Python/TS/Go/Rust) as a dedicated sdk-conformance job; it lived outside the discovered test path, so the parity guarantee was written but never gated. Enabling it caught a real defect it had hidden: the Rust consumer fixture used a field (type_field) that does not exist — the wire field is event_type. - Build and test the Rust SDK in isolation in that job (first time in CI). - Label Java and C# as types-only previews (README in each dir) and add a lockstep-gate test that fails the moment a preview gains a build manifest without being version-locked and conformance-tested. - Document and cover the Go binding version (scaffold constant pitotPackageVersion) in the version-lockstep gate. - Add per-SDK quickstart READMEs (TypeScript, Python, Rust): build your first Controller and Consumer, install via the CLI front door. - Stop Rust build-artifact churn: build_pitot skips target/ and Cargo.lock, with a matching sdk/rust/.gitignore, so a local cargo build can never perturb the projected public surface. - Align a stale sample kind in request_test.go (interlock.decide -> interlock.effect) with the now-canonical request kind; assertions unchanged. Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
Pitot coding-agent E2EIntelligence Flow is the verification source; Pitot's public README carries the latest
Runtime capabilities
Source commit: |
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.
What & why
Stacked companion to the Interlock interface/readiness PR (#261). Building on Interlock means transporting decisions over Pitot, so the Pitot SDKs are part of the "ready for people to start building/testing" surface. This PR closes the gap between the SDK exists and the SDK is safe to build on — every change is feature-preserving.
Changes
pitot-distribution/sdk/tests/test_runners.py) drives Python/TypeScript/Go/Rust runners through identical fixture cases (controller stream order, malformed-skip, deny, consumer stdout-cleanliness) but lived outside the discovered test path — the parity guarantee was written, never gated. It's now a dedicatedsdk-conformancejob. Enabling it caught a real defect it had hidden: the Rust consumer fixture referencedevent.type_field, which doesn't exist — the wire field isevent_type(#[serde(rename = "type")]). Fixed.pitotPackageVersion— the one Go-side string that can drift).build_pitot.pyskipstarget/andCargo.lock, with a matchingsdk/rust/.gitignore, so a localcargo buildcan't perturb the projected public surface.request_test.go(interlock.decide→interlock.effect); assertions unchanged.Verification (all green locally)
go build ./... && go test ./...(full Pitot module)test_runners.py) — pass (Rust skips locally where toolchain absent; CI installs it)build_pitot.py --check(projection/golden drift gate) — matches after regenpitot_adapter_supervisor.py check— passLocus scope
The interface between Pitot and Interlock was Locus-certified in the companion PR (adapter-collapse
reachable:false; broker-authoritycontrollable:true). The frontier here was engineering readiness, not correctness — this PR is the readiness half. All verdicts model-scoped/advisory per the recorded obligations.Release note:
labs/15-pitot/pitot-distribution/release-notes/2026-07-31-sdk-readiness-for-external-builders.md.