Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
e03e571
Start Milestone 2: canton-codegen scaffold (Phase A)
lbvf4 Jul 20, 2026
bfa8cff
M2 Phase A: variants, enums, templates + typed choices
lbvf4 Jul 21, 2026
c8aa54e
M2: canton-daml runtime + module generation (increment 1)
lbvf4 Jul 21, 2026
2d09923
M2: emit Value codecs on generated records (increment 2)
lbvf4 Jul 21, 2026
95ff426
M2: end-to-end compile+round-trip proof for generated code
lbvf4 Jul 21, 2026
2d09fcd
M2 Phase B start: canton-lf DAR container reader (increment 3)
lbvf4 Jul 21, 2026
9095070
M2: JSON (serde) codec on generated records (increment 4)
lbvf4 Jul 21, 2026
73281be
M2 Phase B: native Daml-LF 2.x decoder works on real DARs (increment 5)
lbvf4 Jul 21, 2026
f78b3f8
M2: fix nested-optional JSON + restore canton-lf lints (review pass)
lbvf4 Jul 21, 2026
dd95b1f
M2: AST→IR bridge — real DAR to typed Rust (records-first)
lbvf4 Jul 21, 2026
528a23b
M2: variant/enum/GenMap/generic codecs — generated code compiles (rev…
lbvf4 Jul 21, 2026
b558b67
M2: PackageMap + qualified naming (cross-package refs, no name collis…
lbvf4 Jul 21, 2026
dd221eb
M2: import-table package refs + whole-corpus compile test
lbvf4 Jul 22, 2026
0b039c9
M2: fix LF-JSON encoding of Unit / nullary variant constructors
lbvf4 Jul 22, 2026
56ec849
M2: lower templates, choices, and contract keys (+ LF 2.dev TApp)
lbvf4 Jul 22, 2026
dda2e6b
M2: create/exercise command builders on the typed template/choice model
lbvf4 Jul 22, 2026
3aa30ba
M2: typed contract keys — WithKey trait + exercise-by-key builder
lbvf4 Jul 22, 2026
6ca261a
M2: lower interfaces (view + choices), closing Phase C
lbvf4 Jul 22, 2026
b32c8ce
M2: dpm codegen-rust CLI — generate a typed crate from a DAR (Phase D)
lbvf4 Jul 22, 2026
419d71b
M2: first canton-splice-* bindings crate + reference app (Phase E)
lbvf4 Jul 22, 2026
55ef83c
M2: make the canton-splice-amulet drift guard formatting-independent
lbvf4 Jul 22, 2026
dcec87d
M2: reference app submits a typed command end to end on LocalNet
lbvf4 Jul 22, 2026
cf21818
M2: address review — full E2E sample, type-mapping doc, more splice c…
lbvf4 Jul 22, 2026
022336b
M2: fix Int64/Numeric JSON conformance + mark generated files (review…
lbvf4 Jul 22, 2026
cc1bc43
M2: sample JSON lane confirms its own contract, matching the gRPC lane
lbvf4 Jul 23, 2026
9f61525
M2: document the SCU mechanics + regenerate-on-version-bump runbook
lbvf4 Jul 23, 2026
69e6c70
M2: conformance oracle — native LF decoder vs the official daml-lf-ar…
lbvf4 Jul 25, 2026
5729efe
gitignore scala-cli build caches
lbvf4 Jul 25, 2026
07e9a01
M2: fix the two critical codegen defects found in the quality audit
lbvf4 Jul 25, 2026
c2e936e
M2: harden the codegen surface per the quality-audit findings
lbvf4 Jul 26, 2026
cc11f2f
M2: hash-prefix module names are character-based (hostile non-ASCII p…
lbvf4 Jul 26, 2026
75743da
Merge branch 'main' into milestone-2-codegen
lbvf4 Jul 26, 2026
fd7910e
M2: release preparation — fixture tests, publish metadata, changelog
lbvf4 Jul 26, 2026
5b847df
M2: codegen crates get a real library API before their first publish
lbvf4 Jul 31, 2026
ee857b9
Release 0.2.0: facade covers the runtime, crates ship licence text
lbvf4 Jul 31, 2026
5bc295d
M2: canton-daml gets the API it has to live with after publishing
lbvf4 Jul 31, 2026
f3b21a6
M2: close the errors-do-not-compose gap, and a data-loss bug in the CLI
lbvf4 Aug 1, 2026
c9430b4
Docs and generated-crate front pages tell the truth for a published user
lbvf4 Aug 1, 2026
c9888f8
Pre-tag: fix three semver-frozen defects in canton-daml, and the IR/r…
lbvf4 Aug 1, 2026
aa527b5
Lowering: a Daml name that is not representable is skipped, never merged
lbvf4 Aug 1, 2026
721d1f5
Lowering: a skipped type takes its dependents with it
lbvf4 Aug 1, 2026
5d663e2
Lowering: refuse a nested Optional that hides behind a type parameter
lbvf4 Aug 1, 2026
8e0e94d
CI: prove the packaging and the generator on every push
lbvf4 Aug 1, 2026
bfe100a
Lowering: wire both post-lowering passes into every declaration kind
lbvf4 Aug 1, 2026
3a57283
Generated crates read like something a person would want to import
lbvf4 Aug 1, 2026
42cf59f
The runtime crate's front page is the runtime API, not the emitter's …
lbvf4 Aug 1, 2026
1f540a0
Pin the two emitter rules that only a reader would notice were broken
lbvf4 Aug 1, 2026
bdcc3d5
Changelog states what the generated module paths actually are
lbvf4 Aug 1, 2026
430d89a
Four lowering guards that judged something other than what they guarded
lbvf4 Aug 2, 2026
3521bc7
CI runs the conformance oracle instead of the repo claiming it passes
lbvf4 Aug 2, 2026
0036b5b
Five places where the docs and the CLI told the user something untrue
lbvf4 Aug 2, 2026
9fc2d91
Three more guards that counted things the crate never emits, and one …
lbvf4 Aug 2, 2026
7073b9b
Merge main (0.1.4) into the codegen branch
lbvf4 Aug 5, 2026
7887c59
Errors say which contract they are about
lbvf4 Aug 7, 2026
6d09a14
A type mismatch no longer copies the contract into the error message
lbvf4 Aug 7, 2026
fb63c77
Refuse a Daml-LF minor this build was not compiled against
lbvf4 Aug 7, 2026
bf9812f
Credentials stop reaching logs: the mutual-TLS key, and userinfo in e…
lbvf4 Aug 9, 2026
f926ca5
Raise the gRPC decode limit off tonic's 4 MiB default
lbvf4 Aug 9, 2026
a9a8333
Check that a DAR's payload hashes to the package id it claims
lbvf4 Aug 9, 2026
6ad0fd1
Decode failures name the field they came from, and the LF gate stops …
lbvf4 Aug 9, 2026
a8d513d
Pin what a redacted error still gives you, and record the batch in th…
lbvf4 Aug 9, 2026
db1f632
Say which Daml-LF version is wrong, and say it about the right one
lbvf4 Aug 9, 2026
16d2eff
The WebSocket lane gets the size limit the gRPC lane already has
lbvf4 Aug 9, 2026
35eb012
Two more types were printing the credential the last fix redacted
lbvf4 Aug 9, 2026
f3e4274
Both transports now describe the same failure the same way
lbvf4 Aug 9, 2026
3a0ab7c
Pin the decode path against real generated bindings, not an imitation…
lbvf4 Aug 9, 2026
080af4b
The JSON lane waits forever; give it the bound the gRPC lane has had …
lbvf4 Aug 9, 2026
820cf1c
Read a local development network out of the environment
lbvf4 Aug 9, 2026
6e0184c
Bound a DAR in total, not only one entry at a time
lbvf4 Aug 9, 2026
d35168f
Pin every CI action to a commit, not a tag
lbvf4 Aug 9, 2026
860b2e5
The live suite stops requiring the one thing a LocalNet does not have
lbvf4 Aug 9, 2026
358a94d
The README names the fourth way to get a node, and stops promising a …
lbvf4 Aug 9, 2026
7a8a7a2
A type that resolves to itself no longer takes the process down with it
lbvf4 Aug 9, 2026
4cfe88d
The JSON lane reads a contract back as a type, the way the gRPC lane …
lbvf4 Aug 9, 2026
1a61396
A contract can be read back as a type on either transport
lbvf4 Aug 9, 2026
0daf18f
The drift guard runs where it matters, instead of only where the DARs…
lbvf4 Aug 9, 2026
e07cbc2
A DAR cannot write its own dependency into the manifest it generates
lbvf4 Aug 9, 2026
7587ab4
Two claims that nothing checked: the published bindings, and the fixture
lbvf4 Aug 9, 2026
f576610
A decode failure inside a list says which element, not just which field
lbvf4 Aug 9, 2026
06c39ae
Pin the two encoders a template carries to agree with each other
lbvf4 Aug 9, 2026
3751de3
The keyword escape list gains the one the 2024 edition added
lbvf4 Aug 9, 2026
3ff0c50
Three doc comments that describe a function other than the one they s…
lbvf4 Aug 9, 2026
9a78fac
The README stops recommending a codegen flow that cannot build
lbvf4 Aug 9, 2026
ca46d0f
A party id a caller types is checked; one the ledger issued is not
lbvf4 Aug 9, 2026
3022581
canton-proto carries the keywords and categories every other crate does
lbvf4 Aug 9, 2026
3bc31fa
The Splice bindings say which Splice release they came from
lbvf4 Aug 9, 2026
b533c10
Run the SCU version-bump verification the milestone asks for
lbvf4 Aug 9, 2026
d54bd20
Both fields that reach the manifest are checked the way Cargo checks …
lbvf4 Aug 13, 2026
a3add3e
Close the IR against field additions before the crate is published
lbvf4 Aug 13, 2026
e8cb631
A codec asks for a codec only from the parameters it encodes
lbvf4 Aug 13, 2026
14ebfbf
A name declared twice stops resolving to whichever came last
lbvf4 Aug 13, 2026
4634719
Two binding crates can name one type instead of each declaring its own
lbvf4 Aug 13, 2026
a27a9a1
A bearer token was one `{:?}` away from every log this SDK touches
lbvf4 Aug 19, 2026
9ecdd35
A retry hint the participant sends can no longer stop the process
lbvf4 Aug 19, 2026
b9b551d
The participant said where it was safe to restart, and we threw it away
lbvf4 Aug 19, 2026
91f7724
Two of the three advertised presets could not make their provider's r…
lbvf4 Aug 19, 2026
497c6c6
An ACS snapshot is not only active contracts, and ours said it was
lbvf4 Aug 19, 2026
14184be
A command whose id you never saw is a command you cannot ask about
lbvf4 Aug 19, 2026
6f8bf4d
The JSON lane could not do four things the gRPC lane had done since M1
lbvf4 Aug 19, 2026
989b24a
The JSON recovery future is as large as the handshake it holds, and s…
lbvf4 Aug 19, 2026
9487708
Telemetry watched the wrong half of a stream, and stopped at the trac…
lbvf4 Aug 19, 2026
259b3bd
Four things the participant would have refused, refused here instead
lbvf4 Aug 19, 2026
aa78d39
An admin read that comes back short now says so
lbvf4 Aug 19, 2026
58ea911
The topology test says expect, so it allows expect
lbvf4 Aug 19, 2026
b8df5ce
Two claims about versioning: one enforced, one corrected
lbvf4 Aug 19, 2026
443d2e3
The vendored schemas now say where they came from, and cannot be edit…
lbvf4 Aug 19, 2026
0d63074
A live test that skipped looked exactly like a live test that passed
lbvf4 Aug 19, 2026
39b15f2
The PoC believed the response to its own submit
lbvf4 Aug 19, 2026
ab85197
Two claimed target platforms nothing was building for
lbvf4 Aug 19, 2026
e511804
The README describes a client that can do what it now does
lbvf4 Aug 19, 2026
d2c72f7
A doc link that only resolved in my head
lbvf4 Aug 19, 2026
9c32262
The observability path is now verified where it leaves the process
lbvf4 Aug 19, 2026
dc15e97
The dependency audit had a finding, so the lockfile moves
lbvf4 Aug 20, 2026
177f045
Half the observability work was unreachable from `cargo add canton`
lbvf4 Aug 20, 2026
6deba7f
The two longest-lived streams in the SDK emitted no telemetry at all
lbvf4 Aug 20, 2026
c21e06a
The changelog said no signature changed, and two had
lbvf4 Aug 20, 2026
08e5dca
The WebSocket streams were still doing what the gRPC ones stopped doing
lbvf4 Aug 20, 2026
277a43d
The JSON half of command recovery had no test at all
lbvf4 Aug 20, 2026
67c4233
The README's newest example was the one nothing compiled
lbvf4 Aug 20, 2026
c683391
Running the reviewer's own tests found the half of finding 1 still open
lbvf4 Aug 23, 2026
beed7e2
The vendored protos hashed differently on Windows, and the tree was u…
lbvf4 Aug 24, 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
15 changes: 15 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# The bindings crates' src/lib.rs is checked-in generated output (from
# `dpm-codegen-rust`). Mark it generated so GitHub keeps it out of the language
# stats and collapses it in PR diffs.
crates/canton-splice-*/src/lib.rs linguist-generated=true
crates/canton-quickstart-*/src/lib.rs linguist-generated=true

# Vendored upstream schemas are verified byte-for-byte against SHA256SUMS, so
# they must not be line-ending-converted on checkout. Git on Windows defaults
# to `core.autocrlf=true`, which rewrites LF to CRLF and changes every hash —
# the tree looks unmodified and every checksum fails. `-text` pins the working
# copy to exactly what was vendored.
crates/canton-proto/proto/** -text

# The fixture DAR is a zip archive; never treat it as text.
testdata/*.dar binary
255 changes: 223 additions & 32 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,7 @@
# OS junk.
.DS_Store
Thumbs.db

# scala-cli build caches (tools/lf-oracle).
.bsp/
.scala-build/
500 changes: 500 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

11 changes: 10 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,16 @@ Guidelines:
[`docs/adr/`](docs/adr/README.md) — add a new numbered record rather than
editing an old one.
- **Versioning**: all `canton-*` crates release in lockstep with one shared
version ([ADR-0005](docs/adr/0005-lockstep-versioning.md)).
version ([ADR-0005](docs/adr/0005-lockstep-versioning.md)). Publishing has an
order and a checklist — [RELEASING.md](RELEASING.md); a crates.io version
cannot be taken back, and half a family published in the wrong order leaves
the rest unpublishable until the next version.
- **CI actions are pinned to a commit**, with the human-readable version in a
trailing comment (`actions/checkout@11d5960… # v4`). A tag is mutable: whoever
controls the action's repository can repoint `v4` at anything, and it would
run with our checkout and our secrets. To bump one, resolve the new tag
(`gh api repos/<owner>/<repo>/git/ref/tags/<tag> --jq .object.sha`) and update
both the SHA and the comment.

## Security issues

Expand Down
Loading
Loading