Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
145 commits
Select commit Hold shift + click to select a range
202693c
fix: harden verification and automate evidence-first Canton delivery
Saidur-droid Sep 29, 2026
c0deb14
docs: lock HackCanton S3 competition-ready design
Saidur-droid Sep 29, 2026
cff4559
docs: add competition-ready delivery plan
Saidur-droid Sep 29, 2026
68c2159
feat: add fail-closed competition readiness engine
Saidur-droid Sep 29, 2026
ffad055
test: cover competition readiness gates
Saidur-droid Sep 29, 2026
7af636e
feat: add competition readiness CLI
Saidur-droid Sep 29, 2026
4be69a8
chore: wire competition readiness command
Saidur-droid Sep 29, 2026
8887ddb
docs: add Track 1 business brief
Saidur-droid Sep 29, 2026
3f26f08
docs: add Track 1 pilot plan
Saidur-droid Sep 29, 2026
083b6f4
docs: disclose AI-assisted development
Saidur-droid Sep 29, 2026
615a9a2
docs: add hackathon work disclosure
Saidur-droid Sep 29, 2026
f5c2174
docs: align submission draft with Season 3 rules
Saidur-droid Sep 29, 2026
20b2830
docs: align final checklist with Season 3 gates
Saidur-droid Sep 29, 2026
caa98fc
feat: align judge UI with HackCanton scoring
Saidur-droid Sep 29, 2026
b569523
test: lock judge UI competition evidence
Saidur-droid Sep 29, 2026
3c42016
style: add readiness and criteria panels
Saidur-droid Sep 29, 2026
2545840
docs: update evidence-based delivery status
Saidur-droid Sep 29, 2026
8b16f41
docs: update evidence manifest for S3 delivery
Saidur-droid Sep 29, 2026
51aaca6
feat: add top-tier evidence summary rail
Saidur-droid Sep 29, 2026
e7fb926
style: sharpen judge cockpit hierarchy
Saidur-droid Sep 29, 2026
51295b8
test: lock proof summary rail
Saidur-droid Sep 29, 2026
d6e2313
docs: record UI UX benchmark synthesis
Saidur-droid Sep 29, 2026
2a9623e
build: add cloud proof devcontainer
Saidur-droid Sep 29, 2026
a27d869
build: add Codespaces bootstrap
Saidur-droid Sep 29, 2026
2d6326b
docs: document PC-free proof paths
Saidur-droid Sep 29, 2026
541592f
docs: add Track 1 pitch
Saidur-droid Sep 29, 2026
de09e46
docs: lock <=5 minute evidence demo
Saidur-droid Sep 29, 2026
8ebdf7c
fix: wait for Canton synchronizer readiness before party allocation
Saidur-droid Sep 29, 2026
4dd838e
test: guard Canton sandbox readiness ordering
Saidur-droid Sep 29, 2026
3b2fa49
fix: retry only transient synchronizer party allocation
Saidur-droid Sep 29, 2026
591a1a6
fix: bind verification to exact source commit
Saidur-droid Sep 29, 2026
d07e691
fix: reject mixed-commit evidence bundles
Saidur-droid Sep 29, 2026
2567022
test: cover one-command sandbox lifecycle hardening
Saidur-droid Sep 29, 2026
64bfe3e
test: require DPM 3.5.12 compatible dynamic sandbox startup
Saidur-droid Sep 29, 2026
d9d8b33
fix: make Canton proof startup collision-free on DPM 3.5.12
Saidur-droid Sep 29, 2026
83fb746
fix: retry transient synchronizer party allocation
Saidur-droid Sep 29, 2026
b89012b
fix: bind verification to exact source commit
Saidur-droid Sep 29, 2026
5ed43bd
fix: reject mixed-commit evidence bundles
Saidur-droid Sep 29, 2026
3af8b3c
test: lock transient party allocation retry
Saidur-droid Sep 29, 2026
32ff7a8
test: lock exact-commit evidence coherence
Saidur-droid Sep 29, 2026
54d3a36
fix: force proof source commit to checked-out HEAD
Saidur-droid Sep 29, 2026
e2992a3
fix: verify exact checked-out commit
Saidur-droid Sep 29, 2026
83f88ae
fix: bind proof to current HEAD
Saidur-droid Sep 29, 2026
ca54431
fix: verify the checked-out source commit
Saidur-droid Sep 29, 2026
5cc4602
test: prevent stale source commit labels
Saidur-droid Sep 29, 2026
17a199b
docs: make proof runner one-command and collision-free
Saidur-droid Sep 29, 2026
002f876
test: match actual dynamic port allocator
Saidur-droid Sep 29, 2026
5de0601
test: require string encoding for Daml Int values
Saidur-droid Sep 29, 2026
f5234d7
fix: encode Daml Int values as JSON strings
Saidur-droid Sep 29, 2026
544b4c7
build: add one-command proof reporter
Saidur-droid Sep 29, 2026
c2f7578
build: add explicit verification stage markers
Saidur-droid Sep 29, 2026
bf0cdaa
test: lock one-command proof diagnostics
Saidur-droid Sep 29, 2026
539c0c0
fix: encode active contract offset as string
Saidur-droid Sep 29, 2026
2bb7be7
test: require string active-contract offsets
Saidur-droid Sep 29, 2026
cc6fc91
build: trace verification failures
Saidur-droid Sep 29, 2026
0cbb779
build: trace proof-runner failures
Saidur-droid Sep 29, 2026
b7d8b75
fix: atomically apply Canton v2 wire-format hardening
Saidur-droid Sep 29, 2026
fcff04a
test: require explicit verification command statuses
Saidur-droid Sep 29, 2026
5ec734c
fix: make verification stage progression explicit
Saidur-droid Sep 29, 2026
cf3d58d
fix: preserve DPM path in verification subshells
Saidur-droid Sep 29, 2026
4d8f385
test: lock explicit proof status handling
Saidur-droid Sep 29, 2026
34af679
fix: make proof wrapper immune to inherited errexit
Saidur-droid Sep 29, 2026
75ae2ee
fix: make proof wrapper immune to inherited errexit
Saidur-droid Sep 29, 2026
6d20c06
fix: use explicit verification command status flow
Saidur-droid Sep 29, 2026
f7fc27d
test: require explicit stage status runner
Saidur-droid Sep 29, 2026
ce1fa87
fix: make verification stages explicit and shell-agnostic
Saidur-droid Sep 29, 2026
bebc419
chore: normalize proof wrapper shell options
Saidur-droid Sep 29, 2026
51e4ddd
chore: sync delivery branch with main
Saidur-droid Sep 30, 2026
7a2d971
docs: refresh verified delivery status for final candidate
Saidur-droid Sep 30, 2026
38f41bf
test: distinguish errexit from pipefail options
Saidur-droid Sep 30, 2026
87cd3e1
fix: send Canton active-contract offset as int64
Saidur-droid Sep 30, 2026
5a99500
test: match Canton v2 activeAtOffset wire type
Saidur-droid Sep 30, 2026
91ba0da
fix: normalize nested Daml numeric values at JSON boundary
Saidur-droid Sep 30, 2026
8533dc3
test: lock Daml numeric wire encoding regression
Saidur-droid Sep 30, 2026
1db7c66
fix: make verification compatible with strict no-errexit guard
Saidur-droid Sep 30, 2026
7163d05
fix: make verification stage progression deterministic
Saidur-droid Sep 30, 2026
1cca521
test: verify proof stages by behavior not helper name
Saidur-droid Sep 30, 2026
5a71963
fix: block stale checkout proof runs
Saidur-droid Sep 30, 2026
9949283
fix: use Canton 3.5 package-name template identifiers
Saidur-droid Sep 30, 2026
42a70bb
fix: pin package selection while matching package-name identifiers
Saidur-droid Sep 30, 2026
0bc276c
fix: separate Canton package name from DAR package id
Saidur-droid Sep 30, 2026
0ae03cc
fix: inherit exact DAR package selection on every submission
Saidur-droid Sep 30, 2026
31d1211
fix: preserve DAR id and package name in proof metadata
Saidur-droid Sep 30, 2026
8947fea
fix: export Canton package name for local proof
Saidur-droid Sep 30, 2026
d1964ae
test: use Canton 3.5 package-name template references
Saidur-droid Sep 30, 2026
8517d29
test: cover Canton package-name refs and DAR pinning
Saidur-droid Sep 30, 2026
fcdf2c7
fix: derive Daml package name for Canton proof
Saidur-droid Sep 30, 2026
1ce3801
fix: eliminate inherited errexit from verification pipeline
Saidur-droid Sep 30, 2026
9c787e9
test: assert explicit non-errexit verification flow
Saidur-droid Sep 30, 2026
8076486
fix: consume created contracts from submit transaction response
Saidur-droid Sep 30, 2026
8f56e87
fix: chain proof directly from committed transaction events
Saidur-droid Sep 30, 2026
befa6b8
test: mirror Canton submit-and-wait transaction responses
Saidur-droid Sep 30, 2026
5155df6
test: cover Canton transaction created-event decoding
Saidur-droid Sep 30, 2026
bf5ac23
test: lock default Daml package name in runtime config
Saidur-droid Sep 30, 2026
a7177d9
fix: validate package identity in final evidence bundle
Saidur-droid Sep 30, 2026
0a52f80
fix: expose deterministic Canton proof stage failures
Saidur-droid Sep 30, 2026
4e68521
fix: keep transaction visibility payload minimal
Saidur-droid Sep 30, 2026
0e23dd1
fix: replace shell verification with deterministic Node runner
Saidur-droid Sep 30, 2026
0ae4655
fix: run proof verification through Node process runner
Saidur-droid Sep 30, 2026
6504101
fix: reduce shell verifier to Node compatibility wrapper
Saidur-droid Sep 30, 2026
9a477ab
test: lock Node-owned verification architecture
Saidur-droid Sep 30, 2026
5a88ed8
test: bind evidence coherence to Node verifier
Saidur-droid Sep 30, 2026
4eee0c7
fix: resolve repository root correctly in Node verifier
Saidur-droid Sep 30, 2026
cbad67c
fix: decode Canton 3.5 wrapped transaction responses
Saidur-droid Sep 30, 2026
8e7b583
fix: read transaction metadata from Canton JSON wrapper
Saidur-droid Sep 30, 2026
ae374c4
test: mirror Canton wrapped transaction JSON
Saidur-droid Sep 30, 2026
db85d00
test: lock Canton 3.5 transaction wrapper shape
Saidur-droid Sep 30, 2026
1ca1503
fix: prefer official direct Canton JSON transaction shape
Saidur-droid Sep 30, 2026
4d2e484
fix: accept official Canton JSON transaction response
Saidur-droid Sep 30, 2026
ba9bddc
test: mirror official direct Canton JSON transaction
Saidur-droid Sep 30, 2026
7af4f32
test: lock official Canton JSON transaction response shape
Saidur-droid Sep 30, 2026
76bdfa9
fix: capture final proof stage failures under shell errexit
Saidur-droid Sep 30, 2026
c94efb5
test: align verifier assertions with generic process runner
Saidur-droid Sep 30, 2026
1343c48
fix: use async verifier with process trace diagnostics
Saidur-droid Sep 30, 2026
bf942d4
test: align static assertions with async verifier
Saidur-droid Sep 30, 2026
999df59
fix: surface verifier process trace in proof diagnostics
Saidur-droid Sep 30, 2026
dd8cd76
test: align evidence coherence with async git resolver
Saidur-droid Sep 30, 2026
db19032
fix: bypass npm lifecycle in proof verification
Saidur-droid Sep 30, 2026
ce60b52
test: lock direct Node test execution in proof verifier
Saidur-droid Sep 30, 2026
355ef47
chore: add Render proof build entrypoint
Saidur-droid Sep 30, 2026
424fd10
fix: restore pristine commit before Render proof
Saidur-droid Sep 30, 2026
86842e1
fix: bootstrap Temurin JRE for Render Daml tests
Saidur-droid Sep 30, 2026
3c45b1a
fix: extract DAR package id via damlc inspect-dar
Saidur-droid Sep 30, 2026
19515e6
fix: persist DAR package id for Canton bootstrap
Saidur-droid Sep 30, 2026
8ff8e11
fix: use one validated source for Canton package id
Saidur-droid Sep 30, 2026
2d5a590
fix: remove duplicate package id env propagation
Saidur-droid Sep 30, 2026
f83b1ad
fix: normalize Canton 3.5 unhandled exception envelope
Saidur-droid Sep 30, 2026
2a02995
fix: support trusted Render public host binding
Saidur-droid Sep 30, 2026
aa7117a
test: cover Render forwarded host and origin
Saidur-droid Sep 30, 2026
722df9f
fix: test Render forwarded host with raw HTTP
Saidur-droid Sep 30, 2026
87fc148
docs: record verified Render proof and submission handoff
Saidur-droid Sep 30, 2026
0b67ff2
docs: mark proven technical gates and remaining submission work
Saidur-droid Sep 30, 2026
604718d
docs: add no-repeat next-session handoff
Saidur-droid Sep 30, 2026
26bd992
fix: surface verified deployment proof in judge UI
Saidur-droid Sep 30, 2026
f83aa82
docs: retarget CommitLedger to Colosseum and Ideathon
Saidur-droid Oct 1, 2026
c1705e8
docs: refresh README.md for Oct 7 dual submission sprint
Saidur-droid Oct 7, 2026
cbcf895
docs: refresh docs/COMPETITION_TARGETS.md for Oct 7 dual submission s…
Saidur-droid Oct 7, 2026
b63b19b
docs: refresh docs/FINAL_CHECKLIST.md for Oct 7 dual submission sprint
Saidur-droid Oct 7, 2026
21669c0
docs: refresh docs/NEXT_SESSION_HANDOFF.md for Oct 7 dual submission …
Saidur-droid Oct 7, 2026
2d29e21
docs: refresh docs/DELIVERY_STATUS.md for Oct 7 dual submission sprint
Saidur-droid Oct 7, 2026
2309cd7
docs: refresh docs/SUBMISSION_DRAFT.md for Oct 7 dual submission sprint
Saidur-droid Oct 7, 2026
96eee9f
docs: add docs/RULES_RECHECK_20261007.md for Oct 7 submission sprint
Saidur-droid Oct 7, 2026
601bc9b
docs: add docs/SUBMISSION_STATUS_20261007.md for Oct 7 submission sprint
Saidur-droid Oct 7, 2026
359483e
docs: add docs/COLOSSEUM_PITCH_SCRIPT.md for Oct 7 submission sprint
Saidur-droid Oct 7, 2026
d582f3a
docs: add docs/COLOSSEUM_DEMO_SCRIPT.md for Oct 7 submission sprint
Saidur-droid Oct 7, 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
32 changes: 32 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "CommitLedger Canton Proof",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "22"
},
"ghcr.io/devcontainers/features/java:1": {
"version": "21"
},
"ghcr.io/devcontainers/features/python:1": {
"version": "3.12"
}
},
"postCreateCommand": "bash scripts/bootstrap-codespace.sh",
"forwardPorts": [4173, 3975],
"portsAttributes": {
"4173": {
"label": "CommitLedger judge UI",
"onAutoForward": "notify"
},
"3975": {
"label": "Canton JSON Ledger API",
"onAutoForward": "silent"
}
},
"customizations": {
"vscode": {
"extensions": []
}
}
}
23 changes: 7 additions & 16 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,27 +1,18 @@
# Canton JSON Ledger API.
CANTON_JSON_API_URL=http://localhost:3975
# Secrets stay in your shell or an ignored local .env file, never in Git.
GITHUB_TOKEN=
CANTON_JSON_API_URL=http://127.0.0.1:3975
CANTON_PACKAGE_ID=

# Three distinct Canton parties are required for the full competition proof.
CANTON_MAINTAINER_PARTY=
CANTON_CONTRIBUTOR_PARTY=
CANTON_VERIFIER_PARTY=

# LocalNet may use one token with rights for all demo parties.
CANTON_TOKEN=

# Or provide role-specific tokens for stronger separation.
CANTON_MAINTAINER_TOKEN=
CANTON_CONTRIBUTOR_TOKEN=
CANTON_VERIFIER_TOKEN=

# Optional GitHub token. Required while this repository is private.
GITHUB_TOKEN=

# Optional full-demo overrides.
CANTON_USER_ID=
# Explicit local sandbox only. Never enable for a remote/production service.
CANTON_INSECURE_LOCAL=false
COMMITLEDGER_ISSUE_URL=https://github.com/Saidur-droid/CommitLedger/issues/5
COMMITLEDGER_PR_NUMBER=6
COMMITLEDGER_CONTRIBUTOR_GITHUB=Saidur-droid
COMMITLEDGER_REWARD_AMOUNT=100
COMMITLEDGER_BASE_BRANCH=main
COMMITLEDGER_EVIDENCE_FILE=
COMMITLEDGER_EVIDENCE_FILE=./evidence/canton-proof.json
88 changes: 55 additions & 33 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,54 +1,76 @@
name: Manual Verification

name: Verified Delivery
on:
push:
branches: [main, 'fix/**']
pull_request:
workflow_dispatch:

permissions:
contents: read

issues: read
pull-requests: read
concurrency:
group: verification-${{ github.ref }}
cancel-in-progress: true
jobs:
node-verifier:
node:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22"
- run: npm test

daml:
node-version: '22'
- name: Run every Node test
run: |
mkdir -p evidence
set -o pipefail
npm test 2>&1 | tee evidence/node-tests.log
- uses: actions/upload-artifact@v4
if: always()
with:
name: node-evidence-${{ github.sha }}
path: evidence/node-tests.log
canton-proof:
# Untrusted fork PRs never receive a private-repository read token.
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- name: Install DPM SDK 3.5.12
run: |
curl -sSL https://get.digitalasset.com/install/install.sh | DPM_EDITION=open-source bash -s 3.5.12
echo "$HOME/.dpm/bin" >> "$GITHUB_PATH"
- name: Build Daml
working-directory: daml
run: DPM_SDK_VERSION=3.5.12 dpm build --all
- name: Test Daml
working-directory: daml
run: DPM_SDK_VERSION=3.5.12 dpm test

- uses: actions/setup-node@v4
with:
node-version: '22'
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
- name: Install pinned open-source DPM
run: bash scripts/bootstrap-dpm.sh
- name: Build, test, deploy and capture a real local Canton lifecycle
env:
GITHUB_TOKEN: ${{ github.token }}
run: bash scripts/run-local-proof.sh
- uses: actions/upload-artifact@v4
if: always()
with:
name: canton-evidence-${{ github.sha }}
path: |
evidence/*.log
evidence/*.json
if-no-files-found: warn
retention-days: 30
repository-gates:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- name: Required competition files exist
- name: Required files and constraints
run: |
test -f LOCKED_DECISIONS.md
test -f docs/COMPETITION_COMPLIANCE.md
test -f docs/WINNING_STANDARD.md
test -f docs/RULES_SNAPSHOT.md
test -f docs/EVIDENCE_MANIFEST.md
test -f docs/DEMO_SCRIPT.md
test -f docs/SUBMISSION_DRAFT.md
test -f daml/daml/CommitLedger.daml
test -f daml/daml/Test.daml
test -f src/github-verifier.mjs
test -f src/canton-json-api.mjs
test -f web/index.html
- name: No forbidden runtime dependencies
run: |
! grep -RniE 'vercel|supabase' package.json src web scripts daml || {
echo "Forbidden runtime dependency reference detected"
exit 1
}
! grep -RniE 'vercel|supabase' package.json src web scripts daml
! git ls-files | grep -E '(^|/)\.env(\.local)?$'
16 changes: 8 additions & 8 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
.DS_Store
.env
.env.*
!.env.example
node_modules/
coverage/
dist/
.env
.env.local
.env.*.local
daml/.daml/
*.dar
*.log
evidence/*.log
evidence/*.json
!evidence/.gitkeep
*.webm
*.mp4
124 changes: 75 additions & 49 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,75 @@

**Canton-native settlement infrastructure for verified open-source work.**

CommitLedger binds a real GitHub bounty issue and merged pull request to role-separated Daml authorization and an auditable Canton settlement receipt.
CommitLedger binds canonical contribution evidence to role-separated authorization and an auditable settlement receipt.

## Competition thesis
## Active competition targets — 7 October 2026

This sprint has exactly two active submission targets:

1. **HackCanton Season 3**
- Submission deadline: **9 Oct 2026, 23:59 UTC**
- Bangladesh time: **10 Oct 2026, 05:59**
2. **Crypto World's Fair — Colosseum**
- Contest/submission cutoff: **12 Oct 2026, 23:59 PT**
- Bangladesh time: **13 Oct 2026, 12:59**

The 1 October plan that retired HackCanton is superseded by the owner's 7 October instruction to submit CommitLedger to both programs.

See [Competition Targets](docs/COMPETITION_TARGETS.md), [Submission Status](docs/SUBMISSION_STATUS_20261007.md), [Final Checklist](docs/FINAL_CHECKLIST.md), and [Submission Draft](docs/SUBMISSION_DRAFT.md).

## Product thesis

`GitHub Issue -> Bounty -> Claim -> Pull Request -> Merge Evidence -> Canton Settlement -> SettlementReceipt`

Canton is the trust and settlement layer, not a cosmetic integration. Removing Canton removes the product's authorization, provenance, replay protection and final settlement record.
Canton/Daml is the authorization and workflow-state layer, not a cosmetic integration. GitHub remains the canonical external work-evidence source.

## Core guarantees

- **Maintainer** creates the bounty, accepts the claim and settles verified work.
- **Contributor** creates the claim and submits the exact PR.
- **Verifier** can attest only canonical GitHub merge evidence.
- Merge evidence includes the **exact bounty issue number**.
- Wrong issue, wrong SHA, unmerged work and unauthorized actions are rejected.
- Settlement consumes the verified contract, blocking duplicate settlement.
- **Contributor** claims work and submits the exact PR.
- **Verifier** attests canonical merge evidence.
- Merge evidence is bound to the exact issue and PR metadata.
- Wrong evidence, unauthorized actions and replay/duplicate settlement are rejected.
- Settlement consumes the verified contract and creates an auditable `SettlementReceipt`.
- `DEMO_CREDIT` is explicitly non-production test value.

## Real GitHub fixture
## Frozen technical proof

The last fully executed, source-bound technical proof is:

`26bd992787401f6458f6685d2ab76aacd05eab4e`

Verified at that exact code commit:

- Node tests: **86/86 PASS**
- DPM **3.5.12** PASS
- Daml build PASS
- Daml Script tests PASS
- fresh Canton sandbox PASS
- six ledger transitions PASS
- `SettlementReceipt` generated
- wrong-evidence rejection captured
- unauthorized-settlement rejection captured
- duplicate/replay rejection captured

External GitHub evidence fixture:

- Repository: `Saidur-droid/MergeEarn`
- Open issue: `#69`
- Merged PR: `#73`

**MergeEarn is only the external proof fixture. CommitLedger is the product being submitted.**

The reproducible competition fixture is:
Canonical proof service:

- Open issue: `#5`
- Merged PR: `#6`
- PR #6 references issue #5 without closing it.
https://commitledger-proof-final.onrender.com

This lets a judge repeatedly prove the issue -> merged PR trust boundary without fake users or fake traction.
Proof JSON:

https://commitledger-proof-final.onrender.com/api/proof

Planning/documentation commits after the frozen proof do not become runtime-proven automatically. If executable code changes, rerun the complete proof on the exact new commit.

## Run locally

Expand All @@ -41,51 +83,35 @@ npm start

Open `http://127.0.0.1:4173`.

Because this repository is currently private, set `GITHUB_TOKEN` with read access before using the canonical GitHub verifier.

## Run the full Canton proof

Configure `.env.example` values for:
- Canton JSON Ledger API URL;
- package ID;
- three distinct parties;
- one LocalNet token with rights to all demo parties, or role-specific tokens.

Then:
Configure the documented Canton environment values, then run:

```bash
npm run demo:full
bash scripts/run-local-proof.sh
```

The runner automatically captures each Canton `updateId`, `completionOffset` and active `contractId`, executes negative authorization/replay checks, and finishes at the active `SettlementReceipt`.

See [Judge Runbook](docs/JUDGE_RUNBOOK.md) for the exact operator path.

## Canton / Daml
The proof path reruns tests, builds/tests Daml, starts a fresh Canton sandbox, captures each ledger transition, executes negative authorization/replay checks, validates one coherent evidence bundle, and finishes at `SettlementReceipt`.

The Daml project is under `daml/` and is pinned to the stable open-source DPM SDK bundle **3.5.12**.
## Submission assets

Verification commands:

```bash
bash scripts/bootstrap-dpm.sh
bash scripts/verify-all.sh
```

## Competition governance

- [Locked decisions](LOCKED_DECISIONS.md)
- [Competition compliance](docs/COMPETITION_COMPLIANCE.md)
- [Winning standard](docs/WINNING_STANDARD.md)
- [Rules snapshot](docs/RULES_SNAPSHOT.md)
- [Architecture](docs/ARCHITECTURE.md)
- [Threat model](docs/THREAT_MODEL.md)
- [Judge runbook](docs/JUDGE_RUNBOOK.md)
- [Evidence manifest](docs/EVIDENCE_MANIFEST.md)
- [Build status](docs/BUILD_STATUS.md)
- [Rules recheck — 7 Oct](docs/RULES_RECHECK_20261007.md)
- [Submission status — 7 Oct](docs/SUBMISSION_STATUS_20261007.md)
- [Competition targets](docs/COMPETITION_TARGETS.md)
- [Final checklist](docs/FINAL_CHECKLIST.md)
- [Submission master draft](docs/SUBMISSION_DRAFT.md)
- [HackCanton pitch](docs/PITCH.md)
- [HackCanton demo script](docs/DEMO_SCRIPT.md)
- [Colosseum pitch script](docs/COLOSSEUM_PITCH_SCRIPT.md)
- [Colosseum demo script](docs/COLOSSEUM_DEMO_SCRIPT.md)
- [Hackathon work disclosure](docs/HACKATHON_WORK_DISCLOSURE.md)
- [AI assistance disclosure](docs/AI_DISCLOSURE.md)
- [Delivery status](docs/DELIVERY_STATUS.md)

## Integrity

CommitLedger does not claim Canton Coin transfer, fiat settlement, external adoption, mainnet usage, green CI, or runtime Canton success unless that evidence has actually been produced.
CommitLedger does not claim Canton Coin transfer, fiat settlement, external adoption, MainNet usage, revenue, paying customers, or production custody without evidence.

`DEMO_CREDIT` is test value only.

Canton is a registered trademark of Digital Asset (Switzerland) GmbH. CommitLedger is an independent project and is not sponsored or endorsed by Digital Asset.
6 changes: 6 additions & 0 deletions daml/daml/CommitLedger.daml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
module CommitLedger where

import qualified DA.Text as Text

-- CommitLedger intentionally models a demo/test settlement asset.
-- It does not claim to transfer fiat, Canton Coin, or production funds.

Expand All @@ -19,6 +21,7 @@ data MergeEvidence = MergeEvidence
prNumber : Int
prUrl : Text
headSha : Text
mergeCommitSha : Text
baseBranch : Text
merged : Bool
mergedAt : Text
Expand Down Expand Up @@ -175,6 +178,7 @@ template SubmittedBounty
assertMsg "evidence URL mismatch" (evidence.prUrl == pullRequest.prUrl)
assertMsg "evidence head SHA mismatch" (evidence.headSha == pullRequest.headSha)
assertMsg "evidence base branch mismatch" (evidence.baseBranch == pullRequest.baseBranch)
assertMsg "merge commit SHA must have 40 characters" (Text.length evidence.mergeCommitSha == 40)
assertMsg "merge timestamp is required" (evidence.mergedAt /= "")
assertMsg "evidence hash is required" (evidence.evidenceHash /= "")
create VerifiedBounty with
Expand Down Expand Up @@ -229,6 +233,7 @@ template VerifiedBounty
pullRequest
rewardAmount
rewardUnit
mergeCommitSha = evidence.mergeCommitSha
evidenceHash = evidence.evidenceHash
settledAt
settlementRef
Expand All @@ -245,6 +250,7 @@ template SettlementReceipt
pullRequest : GitHubPullRequestRef
rewardAmount : Decimal
rewardUnit : Text
mergeCommitSha : Text
evidenceHash : Text
settledAt : Time
settlementRef : Text
Expand Down
Loading
Loading