chore: initialize v1 version - #209
Draft
scarmuega wants to merge 2 commits into
Draft
Conversation
Branches the interface into a stable `v1` package, copied verbatim from `v1beta` (all seven modules, `handshake` included). Per the side-by-side policy in README.md, `v1alpha` and `v1beta` stay live and untouched. The accommodations mirror those added for `v1beta` in #183 and #186: - `buf.gen.dotnet.v1.yaml` plus a `Generate dotnet v1` step. The C# generators emit flat files named after the proto basename, so each version needs its own buf invocation and output dir or they collide on Query.cs, Sync.cs, etc. - `utxorpc-v1-*` features and a `pub mod v1` block in the Rust scaffold. - `utxorpc.v1.sync.sync_pb2` added to the python import smoke test. Also backfills `v1beta`, which was never wired into three hand-maintained scaffolds and so is not reachable from the published packages today: - `gen/node/src/index.ts` exported v1alpha only, using flat unversioned names that a second version would collide on. Split into per-version barrels; the root still re-exports v1alpha, so existing callers are unaffected. - `gen/haskell/utxorpc.cabal` listed only V1alpha modules, so `stack sdist` silently dropped the rest. It now covers all three versions. - `utxorpc-v1beta-handshake` has been absent from the Rust crate since #190. The `.gitignore` rule for `gen/node/src/` became `gen/node/src/*` so the new barrels can be re-included; git cannot re-include a file whose parent directory is excluded. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`pr-check.yml` has failed at startup on every pull request since #204 merged on 2026-05-19. The last run that actually executed was 2026-05-13. #204 added `permissions: id-token: write` to publish-all's `publish-node` job for npm trusted publishing. A reusable workflow cannot request more permission than its caller grants, and `pr-check.yml` caps the whole workflow at `contents: read`, so the call is rejected before any job starts. `release.yml` and `dry-run.yml` declare no top-level `permissions` block, so they inherit the repository default and were unaffected — which is why releases kept publishing while PR validation was silently dead. Granted on the calling job rather than workflow-wide, so the `codegen` job keeps the narrower `contents: read`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 8fbbfa5)
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.
Branches the interface into a stable
v1package, copied verbatim fromv1beta— all seven modules,handshakeincluded. Per the side-by-side policy inREADME.md,v1alphaandv1betastay live and untouched.Opened as a draft: no CI run has exercised this yet, and the stability posture of a
v1package is a committee call, not a maintainer one. Not for self-merge.The v1 copy
proto/utxorpc/v1/isproto/utxorpc/v1beta/withv1beta→v1(28 occurrences: 7packagelines, 4imports, 17 fully-qualified type refs). The protos carry nooptionstatements, so every language namespace derives from the protopackageand nothing else needed rewriting. Each file is byte-identical tosed 's/v1beta/v1/g'of its source.Accommodations, mirroring #183 and #186
buf.gen.dotnet.v1.yamlplus aGenerate dotnet v1step ingenerate.yml. The C# generators emit flat files named after the proto basename, so every version must get its own buf invocation and output dir or they collide onQuery.cs,Sync.cs, etc. — the problem fix(dotnet): separate codegen for v1alpha and v1beta #186 fixed for v1beta.utxorpc-v1-*features and apub mod v1block. Written by hand in prost-crate's exact output shape; CI's regeneration should be a no-op diff.utxorpc.v1.sync.sync_pb2added to the import smoke test.buf.gen.yaml's dotnet NOTE was stale — it said--path(the workflow uses--template) and named v1alpha/v1beta specifically. Rewritten to state the actual cause in version-agnostic terms.Backfilling v1beta
Three hand-maintained scaffolds were never updated when v1beta landed, so v1beta is not reachable from the published Node and Haskell packages today. Adding a third version without fixing these would have compounded the drift.
gen/node/src/index.tsexported v1alpha only, using flat unversioned names (export * as sync from ".../v1alpha/sync/sync_pb.js") that a second version collides on — which is likely why v1beta was never added. Split into per-version barrels with the root exportingv1/v1alpha/v1betanamespaces. The root still re-exports v1alpha, so existingspec.sync/spec.cardanocallers are unaffected.gen/haskell/utxorpc.caballisted onlyV1alphamodules (and omittedBitcoin). Anything absent fromexposed-modulesis silently dropped bystack sdist. Now covers all three versions — 40 entries, 14/12/14.utxorpc-v1beta-handshakehas been missing from the Rust crate since feat: handshake support #190 addedhandshake.protowithout regenerating the crate scaffold.The
.gitignorerule forgen/node/src/had to becomegen/node/src/*for the new barrels to be re-includable — git cannot re-include a file whose parent directory is excluded. Same shape as the existinggen/dotnet/*rule. Verified the generatedutxorpc/tree is still ignored.Verification
bufwas not run locally (the plugin chain needsprotoc, four prost/tonic plugins,proto-lens-protoc, the node plugins and a .NET SDK). Static checks that passed: verbatim proto copy per module, nov1betastragglers underv1/, every cabal entry maps to a real.proto,_connectbarrels exactly match the four protos declaring a service, and proto/feature/module counts agree per version (7/6/7).CI is the gate. Worth watching in the dry-run:
Generate dotnet v1— this is where apathsfilter that over-matchesv1alpha/v1betawould fail on duplicate output paths. If buf disagrees with component-wise matching, the fallback is enumerating the seven module dirs.publish-noderunstsup, which fails if a barrel names a file connect-es didn't emit.publish-haskellrunsstack build, which fails on anyexposed-modulesentry with no generated.hs.publish-dotnetrunsdotnet build— the real test that three flat C# trees coexist.Out of scope
v1beta.buf breakingCI. There is nobuf.yamlin the repo at all, so nothing mechanically enforces the no-breaking-changes guaranteeREADME.mdpromises for an unflagged version. Worth a separate issue now thatv1exists.🤖 Generated with Claude Code