Complete workflow for verifying and committing Brane SDK changes. Run after implementing fixes/features to verify impact, test affected modules, and prepare for commit.
This skill orchestrates the complete verification-to-commit workflow for Brane SDK changes.
Related Skills:
/brane-impact - Detailed impact analysis and test discovery (invoked automatically in Step 2)After implementing a fix or feature, invoke /brane-ship to:
brane-impact skill logic)First, identify what changed using git:
git status
git diff --name-only HEAD~1 | grep '\.java$'
Determine the primary module(s) affected and severity:
| Module | Impact | Downstream |
|---|---|---|
brane-primitives |
HIGH | ALL modules |
brane-core |
HIGH | rpc, contract |
brane-rpc |
MEDIUM | contract |
brane-contract |
LOW | none |
Run the impact analysis script (leverages brane-impact skill knowledge):
./.claude/scripts/verify_change.sh
This shows:
ALL THREE TEST LAYERS ARE MANDATORY. NEVER SKIP ANY.
Run tests in topological order based on the affected module:
| If Changed | Run Tests |
|---|---|
brane-primitives |
./gradlew :brane-primitives:test :brane-core:test :brane-rpc:test :brane-contract:test |
brane-core |
./gradlew :brane-core:test :brane-rpc:test :brane-contract:test |
brane-rpc |
./gradlew :brane-rpc:test :brane-contract:test |
brane-contract |
./gradlew :brane-contract:test |
Start Anvil (no permission needed) and run integration tests:
# Start Anvil in background (if not already running)
anvil &
# Run integration tests
./scripts/test_integration.sh
Run full E2E smoke tests:
./scripts/test_smoke.sh
Rule: If ANY test fails at ANY layer, STOP. Fix the issue before proceeding.
Run the pre-commit verification:
./.claude/scripts/pre_commit_check.sh
This ensures all affected modules compile and tests pass.
If all checks pass, create the commit:
git add -A
git commit -m "type(scope): description [TICKET-ID]"
git push
Follow conventional commit format:
fix(rpc): - Bug fix in rpc modulefeat(core): - New feature in core modulerefactor(contract): - Refactoring in contract moduledocs(*) - Documentation changestest(*) - Test additions/fixesbrane-primitives (no deps)
|
v
brane-core (BouncyCastle, Jackson)
|
v
brane-rpc (Netty, Disruptor)
|
v
brane-contract
|
v
brane-examples / brane-smoke
When module X changes, all modules below X in the graph must be tested.
# Full workflow (analyze + test + check)
./.claude/scripts/verify_change.sh --run
# Quick (compile only, skip tests)
./.claude/scripts/pre_commit_check.sh --quick
# Single module test
./gradlew :brane-rpc:test
# Specific test class
./gradlew :brane-rpc:test --tests "sh.brane.rpc.BraneTest"
# Integration tests (requires Anvil)
./scripts/test_integration.sh
When /brane-ship is invoked, follow these steps:
git status to see staged/unstaged changesgit diff --name-only to identify changed files./.claude/scripts/verify_change.shanvil &./gradlew :{module}:test for affected + downstream modules./scripts/test_integration.sh./scripts/test_smoke.shCRITICAL: Never skip integration or smoke tests. All three layers are equally important.
./.claude/scripts/pre_commit_check.shgit diff --stat summary/brane-docs firstgit add -A && git commit -m "..." && git push| Failure Type | Action |
|---|---|
| Compilation error | Show error, suggest fix, do not proceed |
| Test failure | Show failed test, do not proceed to commit |
| Pre-commit check fails | Show which module failed, do not commit |
Never skip failing tests. Never use --no-verify unless explicitly requested.
After implementing a fix:
User: I fixed the logIndex null issue in LogParser
User: /brane-ship
Claude: [Runs full workflow, tests brane-rpc + brane-contract, commits]
Quick verify without commit:
User: /brane-ship --no-commit
Claude: [Runs analysis and tests only, skips commit step]
Specify module explicitly:
User: /brane-ship brane-core
Claude: [Tests brane-core and all downstream modules]