Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
1135b6f
feat(proto)!: add Universal Licensing Core — LicenseTerm, restriction…
KonstantinMirin Jun 12, 2026
ea3cfec
docs(website): collapse changelog to flat list, remove version refere…
KonstantinMirin Jun 12, 2026
671ae43
feat(proto)!: remove AccessRestrictions; LicenseTerm is the sole rest…
KonstantinMirin Jun 12, 2026
34808eb
feat(proto)!: Pricing required on every LicenseTerm regardless of sem…
KonstantinMirin Jun 12, 2026
829e9b2
feat(proto): REFERENCE_ONLY term must carry a non-empty License uri
KonstantinMirin Jun 12, 2026
8c67fae
docs(proto,website): align LicenseTerm comment+docs with Pricing-requ…
KonstantinMirin Jun 12, 2026
6e047b6
feat(proto)!: faithful ADR-014 — License{id,name,immutable}, LicenseT…
KonstantinMirin Jun 12, 2026
92e34bf
chore(vocab): consolidate vocabulary registry onto the licensing PR
KonstantinMirin Jun 12, 2026
ff6b41e
feat(proto,vocab)!: PricingModel = charging structure; metering basis…
KonstantinMirin Jun 12, 2026
a92c9d9
feat(proto): buf-native vocabulary mechanism for Pricing.unit
KonstantinMirin Jun 13, 2026
86c7962
feat(proto,vocab)!: roll out (ramp.v1.vocab) to all axes; delete voca…
KonstantinMirin Jun 13, 2026
02f1b6c
fix(licensing): address PR review — finish proto-native vocab, harden…
KonstantinMirin Jun 15, 2026
81c9403
docs(buf): note PricingMetering.ONLINE=0 as the RAMP-native ENUM_ZERO…
KonstantinMirin Jun 15, 2026
7fcb4f1
fix(licensing): allow uppercase vendor namespace in vocab regex; docu…
KonstantinMirin Jun 15, 2026
7f137f7
fix(rampvocab): harden plugin — error on unmapped axes, ident collisi…
KonstantinMirin Jun 15, 2026
f33280d
fix(licensing): re-review pass — reconcile self-select model, sign ex…
KonstantinMirin Jun 16, 2026
af48f00
feat(licensing)!: drop ext/ext_critical from Pricing — uniformly clos…
KonstantinMirin Jun 16, 2026
ce224b7
docs(proto): strip decision-history commentary — wire contract reads …
KonstantinMirin Jun 16, 2026
40e372a
refactor(proto)!: split Requester (identity) from the ask; unify rest…
KonstantinMirin Jun 16, 2026
057fbc1
fix(proto,docs): resolve consistency-review findings on the reshape
KonstantinMirin Jun 16, 2026
904ac60
refactor(proto,docs)!: request & forwarding signatures live in HTTP h…
KonstantinMirin Jun 16, 2026
fe28765
docs: CoMP Package → Offer.title + ramp-comp-v1 comp.* ext; fix Deleg…
KonstantinMirin Jun 16, 2026
b9c0735
docs: final consistency-review fixes — mirror gaps + request-signatur…
KonstantinMirin Jun 16, 2026
ea1733b
chore(proto,docs): Biscuit v2 → v3; make biscuit-v3 the default token…
KonstantinMirin Jun 16, 2026
0169a88
refactor(proto,docs)!: rename Requester.license_id → billing_ref; rec…
KonstantinMirin Jun 16, 2026
a649d0c
refactor(proto,docs)!: consolidate DenialReason — BILLING_REF_INACTIV…
KonstantinMirin Jun 16, 2026
19fcf04
fix(proto,docs): resolve round-3 review (R3-1…R3-12) — doc/comment le…
KonstantinMirin Jun 16, 2026
1669c60
feat(proto,docs): specify hierarchical scope-matching semantics (M9)
KonstantinMirin Jun 16, 2026
30faea6
docs(proto,auth): delegation-claims profile — registered vocabulary, …
KonstantinMirin Jun 16, 2026
5e4eca5
chore: weed "Bloomberg" from examples; add doc-conformance CI gate (+…
KonstantinMirin Jun 16, 2026
7e0f3c0
docs(security): reconcile round-4 review — operationalize holder bind…
KonstantinMirin Jun 17, 2026
5ba4319
docs: explain why revenue share stays off-protocol; map CoMP revshare…
KonstantinMirin Jun 17, 2026
505b7be
feat(proto,docs)!: JWT (holder-of-key) is the default delegation toke…
KonstantinMirin Jun 17, 2026
8fa6bb8
docs: round-5 cleanup — propagate holder binding to verify-flow docs,…
KonstantinMirin Jun 17, 2026
a185f46
test(conformance): add validation harness; fix the example/vocab drif…
KonstantinMirin Jun 17, 2026
b17ddc6
feat(proto): protovalidate CEL for license-term presence invariants (…
KonstantinMirin Jun 17, 2026
d332353
feat(proto): protovalidate CEL for license-term coherence rules (6z1v3)
KonstantinMirin Jun 17, 2026
3b0d9e8
feat(proto)!: Obligation.scope_license is a License (inherits uri⇒uri…
KonstantinMirin Jun 17, 2026
e961ec4
feat(proto): reject UNSPECIFIED discriminator enums; bound consumed_unit
KonstantinMirin Jun 18, 2026
498514a
test(conformance): context-aware algorithm-name + all-fence term checks
KonstantinMirin Jun 18, 2026
b5302f5
docs: round-6 reconciliation — alg names, pricing-required, JWT-defau…
KonstantinMirin Jun 18, 2026
90c73f0
feat(proto): complete required-enum coverage + derive-from-proto guard
KonstantinMirin Jun 18, 2026
d499101
docs: reconcile mirror + changelog with the completed enum-discrimina…
KonstantinMirin Jun 18, 2026
871d8ca
chore: add scripts/ci-local.sh mirroring proto-ci gating steps
KonstantinMirin Jun 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions .github/workflows/proto-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: proto-ci

# Guards the protocol wire contract and the generated SDKs:
# - buf lint
# - regenerate `gen/` and assert the committed tree matches (no drift)
# - go build / vet / test the generated packages + tooling (incl. the
# conformance suite: protovalidate CEL evaluation + doc-example validation)
# The regenerate-and-diff step is the load-bearing one: it fails the build if
# committed `gen/` (Go + TS SDKs and the rampvocab constant packages) does not
# match a clean `buf generate` from the proto + plugin — i.e. someone changed
# the proto/plugin without committing regenerated output, or hand-edited `gen/`.

on:
push:
branches: [main]
pull_request:

jobs:
proto:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version-file: go.mod

- uses: bufbuild/buf-setup-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}

- name: buf lint
working-directory: proto
run: buf lint

# Regenerate the SDKs + vocab constant packages. `buf generate` runs the
# remote Go/TS plugins and the local `go run ...protoc-gen-rampvocab`
# plugin (Go is provided by setup-go above).
- name: buf generate
working-directory: proto
run: buf generate

- name: assert no generated drift
run: |
# Stage everything first so NEW (untracked) generated files — e.g. a
# newly added vocab axis whose gen/.../<axis>/ was generated but never
# committed — are caught too. A plain `git diff` only sees tracked
# files and would let that pass green (the exact C1 class this gate
# exists to seal).
git add -A
if ! git diff --cached --exit-code; then
echo "::error::Generated code is out of sync with the proto/plugin (including new untracked files). Run 'cd proto && buf generate' and commit the result."
exit 1
fi

- name: go build, vet & test
run: |
go build ./...
go vet ./...
# Includes the conformance suite (conformance/): it evaluates the
# protovalidate CEL constraints and validates the doc example payloads
# (registered units, signature_algorithm, LicenseTerm.semantics) —
# value/semantic checks the denylist gate structurally cannot perform.
go test ./...

# Doc-conformance: fail if a removed/renamed wire identifier reappears in
# the docs. The prose counterpart to the gen-drift gate above.
- name: doc conformance
run: ./scripts/check-doc-conformance.sh

# buf breaking is intentionally NOT a hard gate pre-v1: the licensing
# rollout includes accepted breaking changes (no shipped consumers yet).
# Enable this once the wire format is frozen and tagged at v1.
- name: buf breaking (informational, pre-v1)
working-directory: proto
continue-on-error: true
run: |
buf breaking \
--against 'https://github.com/RAMP-Protocol/protocol.git#branch=main,subdir=proto' || true
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ dist/
*.local
review-*.md
research-*.md

# Local agent/review scratch — never ship AI-review artifacts in the protocol repo
.claude/
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ gen/ Generated SDKs
go/ Go types + Connect-Go client/server
ts/ TypeScript types (@bufbuild/protobuf + @connectrpc/connect)

cmd/ Build tooling (Go) — protoc-gen-rampvocab (vocabulary codegen plugin)
website/ Documentation site (Astro Starlight)
amplify.yml AWS Amplify build configuration for the website
```
Expand Down Expand Up @@ -51,4 +52,4 @@ import { ExchangeService } from "@postindustria-tech/ramp-protocol";

## License

Code (everything under `proto/` and `gen/`) is licensed under the [Apache License 2.0](LICENSE). Documentation (the website source under `website/` and the rendered spec) is licensed under [Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)](https://creativecommons.org/licenses/by-nd/4.0/) — that license is declared in the website footer.
Code (everything under `proto/`, `gen/`, and `cmd/`) is licensed under the [Apache License 2.0](LICENSE). Documentation (the website source under `website/` and the rendered spec) is licensed under [Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)](https://creativecommons.org/licenses/by-nd/4.0/) — that license is declared in the website footer.
Loading
Loading