dig-clvm 0.1.1

DIG L2 CLVM consensus engine — validates spend bundles, computes coin additions and removals
Documentation
<!-- gitnexus:start -->
# GitNexus — Code Intelligence

This project is indexed by GitNexus as **dig-clvm** (1636 symbols, 2801 relationships, 35 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.

> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first.

## Always Do

- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows.
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`.

## When Debugging

1. `gitnexus_query({query: "<error or symptom>"})` — find execution flows related to the issue
2. `gitnexus_context({name: "<suspect function>"})` — see all callers, callees, and process participation
3. `READ gitnexus://repo/dig-clvm/process/{processName}` — trace the full execution flow step by step
4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed

## When Refactoring

- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`.
- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code.
- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed.

## Never Do

- NEVER edit a function, class, or method without first running `gitnexus_impact` on it.
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph.
- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope.

## Tools Quick Reference

| Tool | When to use | Command |
|------|-------------|---------|
| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` |
| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` |
| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` |
| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` |
| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` |
| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` |

## Impact Risk Levels

| Depth | Meaning | Action |
|-------|---------|--------|
| d=1 | WILL BREAK — direct callers/importers | MUST update these |
| d=2 | LIKELY AFFECTED — indirect deps | Should test |
| d=3 | MAY NEED TESTING — transitive | Test if critical path |

## Resources

| Resource | Use for |
|----------|---------|
| `gitnexus://repo/dig-clvm/context` | Codebase overview, check index freshness |
| `gitnexus://repo/dig-clvm/clusters` | All functional areas |
| `gitnexus://repo/dig-clvm/processes` | All execution flows |
| `gitnexus://repo/dig-clvm/process/{name}` | Step-by-step execution trace |

## Self-Check Before Finishing

Before completing any code modification task, verify:
1. `gitnexus_impact` was run for all modified symbols
2. No HIGH/CRITICAL risk warnings were ignored
3. `gitnexus_detect_changes()` confirms changes match expected scope
4. All d=1 (WILL BREAK) dependents were updated

## Keeping the Index Fresh

After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it:

```bash
npx gitnexus analyze
```

If the index previously included embeddings, preserve them by adding `--embeddings`:

```bash
npx gitnexus analyze --embeddings
```

To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.**

> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`.

## CLI

| Task | Read this skill file |
|------|---------------------|
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |

<!-- gitnexus:end -->

---

# dig-clvm — Project Context

## What This Is

`dig-clvm` is a standalone Rust crate used by DIG validators to validate spend bundles and compute coin additions/removals. It is a thin orchestration layer on top of the Chia crate ecosystem — it never reimplements what `chia-consensus`, `chia-sdk-types`, `chia-sdk-driver`, `clvmr`, `clvm-utils`, or `chia-bls` already provide.

## Key Documents

| Document | Path | Purpose |
|----------|------|---------|
| Master Spec | `docs/resources/SPEC.md` | Complete specification |
| Prompt System | `docs/prompt/start.md` | Workflow entry point |
| Requirements | `docs/requirements/README.md` | 55 requirements across 6 domains |
| Implementation Order | `docs/requirements/IMPLEMENTATION_ORDER.md` | Phased checklist |
| Network Constants | `../dig-constants/src/lib.rs` | DIG_MAINNET / DIG_TESTNET |

## Hard Rules

1. **Use chia crates first** — never reimplement upstream functionality
2. **No custom CLVM execution** — delegate to `run_spendbundle()` / `run_block_generator2()`
3. **No async/IO/storage** — pure computation, all state passed via parameters
4. **Re-export, don't redefine**`Coin`, `CoinSpend`, `SpendBundle`, `Condition<T>` from upstream
5. **Tests use `chia-sdk-test::Simulator`** — same validation path as Chia L1
6. **One requirement per commit**
7. **SocratiCode before file reads** — search semantically first
8. **Repomix before implementation** — pack context for LLM
9. **GitNexus before refactoring** — check dependency impact

## Tool Usage

| Tool | When | Command |
|------|------|---------|
| SocratiCode | Before reading files | `codebase_search { query: "..." }` |
| GitNexus | Before refactoring | `gitnexus_impact({target: "symbol"})` |
| Repomix | Before implementing | `npx repomix@latest src/consensus -o .repomix/pack-consensus.xml` |

## Architecture

```
src/
  lib.rs              — Re-exports only
  consensus/
    validate.rs       — validate_spend_bundle()
    block.rs          — build_block_generator(), validate_block()
    context.rs        — ValidationContext
    config.rs         — ValidationConfig, cost constants
    result.rs         — SpendResult, BlockGeneratorResult
    cache.rs          — BlsCache integration
    error.rs          — ValidationError
```

## Requirement Domains

| Domain | Prefix | Count |
|--------|--------|-------|
| Spend Validation | VAL | 15 |
| Block Generator | BLK | 9 |
| BLS Cache | BLS | 5 |
| Chia L1 Parity | PAR | 11 |
| Crate API | API | 8 |
| Network Constants | CON | 7 |