Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
bed2762
feat(skills): add git-worktree-tidy and test-ping skills
adeubank Mar 12, 2026
8f7ce69
chore(skills): remove test-ping leftover
adeubank Mar 12, 2026
bcc0c89
feat(skills): replace tmux skill with zmx
adeubank Mar 16, 2026
cbd30e0
feat(statusline): show zmx session name
adeubank Mar 16, 2026
2dc1fbb
refactor(skills): align zmx/tilt/tiltup with prompting best practices
adeubank Mar 16, 2026
c9cba20
feat(statusline): show idle timestamp when agent stops
adeubank Mar 17, 2026
66b1293
feat(plugins): double default iteration and review cycle limits
adeubank Mar 17, 2026
664ccd8
feat(codex-reviewer): increase default max review cycles from 20 to 30
adeubank Mar 20, 2026
cb5b9c9
feat(plugins): add version consistency check script and update docs
adeubank Mar 20, 2026
48db25a
feat(guidelines): add test realism section to global CLAUDE.md
adeubank Mar 21, 2026
0b6d327
feat(ralph-reviewed)!: v2.0.0 — rl CLI, state migration, rl done comp…
adeubank Mar 21, 2026
5f1fcf0
feat(statusline): parse ralph state from .rl/state.json (JSON)
adeubank Mar 21, 2026
484f472
test(ralph-reviewed): add QA checklist and automated test harness
adeubank Mar 21, 2026
b8a65cc
feat(hooks): add direnv BASH_ENV loader for Claude Code
adeubank Mar 21, 2026
054b333
feat: migrate to standalone rl CLI (@0xbigboss/rl)
adeubank Mar 21, 2026
e717aa3
fix: rl discovery, reject prompt, version bump
adeubank Mar 21, 2026
7ffafd5
docs: update QA install instructions for GitHub Packages registry
adeubank Mar 21, 2026
5cff664
feat: auto-install rl CLI from source on first use
adeubank Mar 22, 2026
c92db1c
docs(guidelines): add liberal intent-commenting directive
adeubank Mar 22, 2026
00f93cf
refactor: move handoffs from ~/.claude/handoffs to ~/.handoffs
adeubank Mar 24, 2026
98341aa
fix: remove accidental self-referencing submodule entry
alleneubank Mar 24, 2026
307f17f
feat(skills): add rl CLI skill definitions
alleneubank Mar 24, 2026
f4a05e4
feat(skills): add /improve skill for structured improvement analysis
alleneubank Mar 24, 2026
8ac1366
chore: remove deprecated /ralph and /ralphoff commands
alleneubank Mar 24, 2026
4d831ae
refactor(guidelines): condense CLAUDE.md from 188 to 118 lines
alleneubank Mar 29, 2026
aba3779
chore(skills): remove deprecated and unused skills
alleneubank Mar 29, 2026
de9a3f4
refactor(skills): condense skills and fix descriptions per Anthropic …
alleneubank Mar 29, 2026
45c987f
ci: add plugin manifest linting
internet-dot Apr 5, 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
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"name": "ralph-reviewed",
"source": "./plugins/ralph-reviewed",
"description": "Iterative Ralph loops with Codex CLI review gates at completion",
"version": "1.8.8",
"version": "2.0.0",
"author": {
"name": "Allen",
"email": "bigboss@metalrodeo.xyz"
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/axe-ios-simulator/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: axe-ios-simulator
description: iOS Simulator automation using AXe CLI for touch gestures, text input, hardware buttons, screenshots, video recording, and accessibility inspection. Use when automating iOS Simulator interactions, writing UI tests, capturing screenshots/video, or inspecting accessibility elements. Triggers on iOS Simulator automation, AXe CLI usage, simulator tap/swipe/gesture commands, or accessibility testing tasks.
description: Use when automating iOS Simulator interactions, capturing screenshots/video, or inspecting accessibility via AXe CLI.
---

# AXe iOS Simulator Automation
Expand Down
311 changes: 50 additions & 261 deletions .claude/skills/canton-network-repos/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,306 +1,95 @@
---
name: canton-network-repos
description: Canton Network, DAML, and Splice repository knowledge. Use when working with Canton participants, DAML smart contracts, Splice applications, LF version compatibility, or package ID mismatches. Triggers on Canton, DAML, Splice, decentralized-canton-sync, or LF version queries.
description: Use when working with Canton Network participants, DAML smart contracts, Splice applications, or debugging LF version and package ID issues.
---

# Canton Network Open-Source Repositories

This skill provides comprehensive knowledge about the Canton Network open-source ecosystem, repository relationships, and build processes.

## Activation

Use this skill when:
- Working with Canton Network, DAML, or Splice repositories
- Investigating version compatibility issues
- Understanding enterprise vs community differences
- Debugging LF version or package ID mismatches
- Building Canton participants or Splice applications
# Canton Network Repositories

## Repository Hierarchy

```
┌─────────────────────────────────────────────────────────────────┐
│ Splice Version (e.g., 0.5.4) │
│ github.com/digital-asset/decentralized-canton-sync │
│ Applications: Validator, SV, Wallet, Scan, Amulet (CC) │
└─────────────────────────┬───────────────────────────────────────┘
│ depends on
┌─────────────────────────────────────────────────────────────────┐
│ Canton Version (e.g., 3.4.9) │
│ github.com/digital-asset/canton │
│ Runtime: Participant, Sequencer, Mediator, Admin API │
└─────────────────────────┬───────────────────────────────────────┘
│ depends on
┌─────────────────────────────────────────────────────────────────┐
│ DAML SDK (e.g., 3.4.9) │
│ github.com/digital-asset/daml │
│ Compiler: damlc, LF Engine, Ledger API, stdlib, protobuf │
└─────────────────────────────────────────────────────────────────┘
Splice (e.g., 0.5.4) github.com/digital-asset/decentralized-canton-sync
└─ depends on
Canton (e.g., 3.4.9) github.com/digital-asset/canton
└─ depends on
DAML SDK (e.g., 3.4.9) github.com/digital-asset/daml
```

## Repository Details

### 1. DAML SDK (`github.com/digital-asset/daml`)

**Purpose**: Smart contract language, compiler, and runtime libraries.

**Key Directories**:
```
daml/
├── sdk/
│ ├── compiler/damlc/ # Haskell compiler source
│ │ └── lib/DA/Cli/Options.hs # --target version validation
│ ├── daml-lf/
│ │ ├── language/ # LF version definitions (Scala)
│ │ ├── engine/ # LF execution engine
│ │ └── archive/ # DALF protobuf format
│ └── canton/ # Canton runtime (submodule)
├── ledger-api/ # gRPC API definitions
└── VERSION # SDK version string
```
## Version Mapping

**LF Version Definitions** (`LanguageVersion.scala` at v3.4.9):
```scala
// V2 versions defined
val List(v2_1, v2_2, v2_dev) = AllV2 // Line 51 - v2_2 IS defined
| Splice | Canton | DAML SDK | Protocol | LF Default | LF Available |
|--------|--------|----------|----------|------------|--------------|
| 0.5.4 | 3.4.9 | 3.4.9 | PV34 | 2.1* | 2.2 (verified) |
| 0.5.3 | 3.4.8 | 3.4.8 | PV34 | 2.1* | 2.2 |
| 0.4.x | 3.3.x | 3.3.x | PV33 | 2.1 | 2.1 |

// Version ranges
case Major.V2 => VersionRange(v2_1, v2_2) // Line 171 - StableVersions includes v2_2
def AllVersions = VersionRange(v2_1, v2_dev)
*Open-source Splice 0.5.4 ships with SDK snapshot `3.3.0-snapshot.20250502` (pre-dates LF 2.2). LF 2.2 was added to the SDK on 2025-10-03. Updating to SDK 3.4.9 enables LF 2.2 builds.

// Features at v2_2:
val flatArchive = v2_2
val kindInterning = flatArchive
val exprInterning = flatArchive
val explicitPkgImports = v2_2
val unsafeFromInterfaceRemoved = v2_2
```
## Key Configuration Files

**Note**: v2_2 IS in SDK v3.4.9 source. Older snapshots may not include it.
| Purpose | Repo | File |
|---------|------|------|
| LF version definitions | daml | `sdk/daml-lf/language/.../LanguageVersion.scala` |
| damlc target validation | daml | `sdk/compiler/damlc/lib/DA/Cli/Options.hs` |
| Canton version | canton | `VERSION` |
| Built-in DARs | canton | `community/common/src/main/daml/` |
| Splice LF config | splice | `project/CantonDependencies.scala` |
| Package targets | splice | `daml/*/daml.yaml` |
| Docker builds | splice | `cluster/images/*/Dockerfile` |

**damlc Target Validation** (`Options.hs`):
```haskell
lfVersionOpt :: Parser LF.Version
-- Validates against LF.supportedOutputVersions
-- Error: "Unknown Daml-LF version: X" if not in list
**Splice LF config** (`project/CantonDependencies.scala`):
```scala
val daml_language_versions = Seq("2.1") // ← LF target; change to "2.2" for upgrade
val daml_compiler_version = sys.env("DAML_COMPILER_VERSION")
```

### 2. Canton (`github.com/digital-asset/canton`)
## Package ID Derivation

**Purpose**: Distributed ledger runtime implementing the Canton Protocol.
Package IDs are cryptographic hashes of: source content + LF version (`--target`) + SDK/stdlib version + dependency package IDs.

**Key Directories**:
```
canton/
├── community/ # Open-source Canton
│ ├── app/ # CantonCommunityApp entry point
│ ├── participant/ # Participant node implementation
│ ├── domain/ # Embedded domain (sequencer/mediator)
│ └── common/src/main/daml/ # Built-in DAML packages
│ └── AdminWorkflows/ # Ping, party replication DARs
├── daml/ # DAML SDK submodule
├── daml_dependencies.json # LF library versions
├── VERSION # Canton version
└── version.sbt # SBT version config
```
**Changing LF version = different package IDs = incompatible packages.** Canton validates that upgraded packages use equal or newer LF version; mixing LF versions on the same ledger causes validation failures.

**Built-in DARs** (embedded in JAR):
- `canton-builtin-admin-workflow-ping.dar`
- `canton-builtin-admin-workflow-party-replication-alpha.dar`
- `CantonExamples.dar`
## Enterprise vs Community Canton

**Enterprise vs Community**:
| Feature | Enterprise | Community |
|---------|------------|-----------|
| Main class | CantonEnterpriseApp | CantonCommunityApp |
| Transaction processing | Parallel | Sequential |
| Pruning | Available | Limited |
| Database | PostgreSQL, Oracle | PostgreSQL only |
| HA Domain | Supported | Embedded only |
| Pruning | Full | Limited |

### 3. Splice (`github.com/digital-asset/decentralized-canton-sync`)

**Purpose**: Decentralized synchronizer governance, Amulet (Canton Coin), and network applications.

**Key Directories**:
```
decentralized-canton-sync/
├── project/
│ ├── CantonDependencies.scala # Version config, LF versions
│ └── DamlPlugin.scala # DAR build logic
├── daml/
│ ├── splice-amulet/ # Canton Coin token contracts
│ ├── splice-wallet/ # Wallet contracts
│ ├── splice-dso-governance/ # DSO governance
│ └── */daml.yaml # Package configs with --target
├── apps/
│ ├── sv/ # Super Validator app
│ ├── validator/ # Validator app
│ ├── wallet/ # Wallet backend
│ └── scan/ # Payment scan service
├── cluster/images/ # Docker image builds
│ └── canton-community/ # Community participant image
└── daml-compiler-sources.json # Compiler version reference
```

**Critical Configuration** (`CantonDependencies.scala`):
```scala
object CantonDependencies {
val version: String = "3.4.9"
val daml_language_versions = Seq("2.1") // ← LF target version
val daml_libraries_version = version
val daml_compiler_version = sys.env("DAML_COMPILER_VERSION")
}
```

**Package Target** (`daml/splice-amulet/daml.yaml`):
```yaml
sdk-version: 3.3.0-snapshot.20250502.13767.0.v2fc6c7e2
build-options:
- --target=2.1 # Explicit LF 2.1 target
```

## Version Mapping

| Splice | Canton | DAML SDK | Protocol | LF (Default) | LF (With SDK 3.4.9) |
|--------|--------|----------|----------|--------------|---------------------|
| 0.5.4 | 3.4.9 | 3.4.9 | PV34 | 2.1* | 2.2 (verified) |
| 0.5.3 | 3.4.8 | 3.4.8 | PV34 | 2.1* | 2.2 |
| 0.4.x | 3.3.x | 3.3.x | PV33 | 2.1 | 2.1 |

*Open-source Splice 0.5.4 ships with SDK snapshot `3.3.0-snapshot.20250502` which predates LF 2.2.

**Root Cause (Verified)**: The public Splice release uses an SDK snapshot from **May 2, 2025**, but LF 2.2 was added to the SDK on **October 3, 2025**. Updating to SDK 3.4.9 enables LF 2.2 builds.
## Build Commands

**Key insight**: LF 2.2 is fully available in open-source SDK v3.4.9. The Splice project simply needs to be updated to use the newer SDK.

## LF Version Implications

### Package ID Derivation
Package IDs are cryptographic hashes derived from:
1. Package source content
2. **LF version used** (`--target`)
3. SDK/stdlib versions
4. Dependency package IDs

**Changing LF version = Different package IDs = Incompatible packages**

### Upgrade Validation
Canton validates package upgrades:
- Upgraded packages must use equal or newer LF version
- LF 2.1 package cannot "upgrade" to LF 2.2 package (different IDs)
- Mixing LF versions on same ledger causes validation failures

## Building from Open-Source

### Community Canton Participant
```bash
cd canton
sbt "community/app/assembly"
# Community Canton participant
cd canton && sbt "community/app/assembly"
# Output: community/app/target/scala-2.13/canton-community.jar
```

### Splice Applications
```bash
cd decentralized-canton-sync
sbt compile # Requires DAML_COMPILER_VERSION env var
# Splice applications (requires DAML_COMPILER_VERSION env var)
cd decentralized-canton-sync && sbt compile
```

### Building with LF 2.2 (Verified Working)

LF 2.2 is available in SDK v3.4.9. The following steps have been **verified to work**:

1. Edit `project/CantonDependencies.scala`:
```scala
val daml_language_versions = Seq("2.2")
```

2. Update `nix/daml-compiler-sources.json`:
```json
{ "version": "3.4.9" }
```

3. Update all `daml/*/daml.yaml` files:
```yaml
sdk-version: 3.4.9
build-options:
- --target=2.2
```

4. Remove invalid warning flags (not present in SDK 3.4.9):
```bash
# Remove -Wno-ledger-time-is-alpha from all daml.yaml files
```

5. Build packages:
```bash
cd decentralized-canton-sync
nix-shell -p daml-sdk --run "daml build -p daml/splice-util"
nix-shell -p daml-sdk --run "daml build -p daml/splice-amulet"
```

**Verified**: splice-util and splice-amulet build successfully with LF 2.2 and SDK 3.4.9.

## Fully Open-Source LF 2.2 Build (Verified)
## Upgrading to LF 2.2 (Verified with SDK 3.4.9)

Both Splice and Canton can be built with LF 2.2 from entirely open-source code:
1. `project/CantonDependencies.scala`: `val daml_language_versions = Seq("2.2")`
2. `nix/daml-compiler-sources.json`: `{ "version": "3.4.9" }`
3. All `daml/*/daml.yaml`: set `sdk-version: 3.4.9` and `--target=2.2`
4. Remove `-Wno-ledger-time-is-alpha` from all `daml.yaml` files (not in SDK 3.4.9)
5. Build: `daml build -p daml/splice-util && daml build -p daml/splice-amulet`

### Canton Built-in DARs

Update Canton's daml.yaml files:
```bash
cd canton/community
# Update all daml.yaml files to sdk-version: 3.4.9 and --target=2.2
perl -pi -e 's/sdk-version: 3\.3\.0-snapshot\.[^\n]*/sdk-version: 3.4.9/g' **/daml.yaml
perl -pi -e 's/--target=2\.1/--target=2.2/g' **/daml.yaml
```

Rebuild Canton:
```bash
sbt "canton-community-app/assembly"
```

### Verified Results (2025-12-24)

Community-built DARs have **identical package IDs** to enterprise:
- `canton-builtin-admin-workflow-ping-3.4.9-fbeb863dab36da66d99...`

This confirms full compatibility with enterprise deployments.

## Key Files Reference

| Purpose | Repository | File |
|---------|------------|------|
| LF versions (Scala) | daml | `sdk/daml-lf/language/.../LanguageVersion.scala` |
| damlc validation | daml | `sdk/compiler/damlc/lib/DA/Cli/Options.hs` |
| Canton version | canton | `VERSION` |
| Canton DARs | canton | `community/common/src/main/daml/` |
| Splice LF config | splice | `project/CantonDependencies.scala` |
| Package targets | splice | `daml/*/daml.yaml` |
| Docker builds | splice | `cluster/images/*/Dockerfile` |
Community-built DARs have identical package IDs to enterprise at the same LF version (verified 2025-12-24).

## Troubleshooting

### "Unknown Daml-LF version: 2.2"
- **Cause**: damlc binary doesn't support 2.2 in `supportedOutputVersions`
- **Check**: `daml damlc --help` for supported targets
- **Fix**: Use SDK version that includes 2.2, or use 2.1
**"Unknown Daml-LF version: 2.2"**: damlc binary doesn't support 2.2. Check `daml damlc --help` for supported targets; upgrade to SDK 3.4.9.

### Package ID Mismatch
- **Cause**: Different LF versions between builds
- **Check**: `unzip -p package.dar META-INF/MANIFEST.MF | grep Sdk-Version`
- **Fix**: Ensure consistent `--target` across all builds
**Package ID mismatch**: different `--target` values between builds. Check: `unzip -p package.dar META-INF/MANIFEST.MF | grep Sdk-Version`

### Upgrade Validation Failed
- **Cause**: Trying to swap enterprise (LF 2.2) with community (LF 2.1) packages
- **Fix**: Use DAR injection to maintain LF 2.2 compatibility
**Upgrade validation failed**: swapping enterprise (LF 2.2) with community (LF 2.1) packages. Use DAR injection to maintain LF 2.2 compatibility.

## External References
## References

- [DAML SDK Releases](https://github.com/digital-asset/daml/releases)
- [Canton Releases](https://github.com/digital-asset/canton/releases)
- [Splice Documentation](https://docs.dev.sync.global/)
- [Splice Docs](https://docs.dev.sync.global/)
- [DAML-LF Governance](https://github.com/digital-asset/daml/blob/main/daml-lf/governance.rst)
- [Canton Network Docs](https://docs.digitalasset.com/)
Loading