Trellis Session Insight
mindfold-ai/Trellis
Reach into past AI conversation history through the trellis mem CLI.
Systematic workflow for debugging Cardano ledger epoch pots mismatches in Dolos.
$ npx skills add txpipe/dolos --skill debug-epoch-mismatch -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install txpipe/dolos debug-epoch-mismatch --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/txpipe/dolos.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/debug-epoch-mismatch .claude/skills/debug-epoch-mismatch && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "debug-epoch-mismatch" agent skill from https://github.com/txpipe/dolos/tree/main/skills/debug-epoch-mismatch into .claude/skills/debug-epoch-mismatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-epoch-mismatch", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/txpipe/dolos/tree/main/skills/debug-epoch-mismatchType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add txpipe/dolos --skill debug-epoch-mismatch -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install txpipe/dolos debug-epoch-mismatch --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/txpipe/dolos.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/debug-epoch-mismatch .agents/skills/debug-epoch-mismatch && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "debug-epoch-mismatch" agent skill from https://github.com/txpipe/dolos/tree/main/skills/debug-epoch-mismatch into .agents/skills/debug-epoch-mismatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-epoch-mismatch", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add txpipe/dolos --skill debug-epoch-mismatch -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install txpipe/dolos debug-epoch-mismatch --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/txpipe/dolos.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/debug-epoch-mismatch .cursor/skills/debug-epoch-mismatch && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "debug-epoch-mismatch" agent skill from https://github.com/txpipe/dolos/tree/main/skills/debug-epoch-mismatch into .cursor/skills/debug-epoch-mismatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-epoch-mismatch", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/txpipe/dolos.git --path skills/debug-epoch-mismatch--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add txpipe/dolos --skill debug-epoch-mismatch -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install txpipe/dolos debug-epoch-mismatch --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/txpipe/dolos.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/debug-epoch-mismatch .gemini/skills/debug-epoch-mismatch && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "debug-epoch-mismatch" agent skill from https://github.com/txpipe/dolos/tree/main/skills/debug-epoch-mismatch into .gemini/skills/debug-epoch-mismatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-epoch-mismatch", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install txpipe/dolos debug-epoch-mismatchInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add txpipe/dolos --skill debug-epoch-mismatch -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/txpipe/dolos.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/debug-epoch-mismatch .github/skills/debug-epoch-mismatch && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "debug-epoch-mismatch" agent skill from https://github.com/txpipe/dolos/tree/main/skills/debug-epoch-mismatch into .github/skills/debug-epoch-mismatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-epoch-mismatch", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add txpipe/dolos --skill debug-epoch-mismatch -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install txpipe/dolos debug-epoch-mismatch --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/txpipe/dolos.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/debug-epoch-mismatch .opencode/skills/debug-epoch-mismatch && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "debug-epoch-mismatch" agent skill from https://github.com/txpipe/dolos/tree/main/skills/debug-epoch-mismatch into .opencode/skills/debug-epoch-mismatch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-epoch-mismatch", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
debug-epoch-mismatchSystematic workflow for debugging Cardano ledger epoch pots mismatches in Dolos.
Debug Epoch Mismatch is an agent skill from txpipe/dolos. Systematic workflow for debugging Cardano ledger epoch pots mismatches in Dolos. Use when an epoch test fails or treasury/reserves/rewards diverge from DBSync.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Debugging. The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7e973ea. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
cargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Debug Epoch Mismatch loads about 2.6k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 990 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from txpipe/dolos at commit 7e973ea, republished under its Apache-2.0 licence (© txpipe). 990 words, ~2,559 tokens.
.claude/skills/debug-epoch-mismatch/SKILL.md (or your agent's skills folder).Always fix epochs in order. Start from the last known-good epoch. Do not jump ahead -- fixes to earlier epochs often resolve later ones.
These terms have precise meanings in the test harness and codebase:
| Term | Definition | Example (subject=250) |
|---|---|---|
subject_epoch | The epoch whose pots are compared | 250 |
stop_epoch | subject + 1, where harness stops | 251 |
rupd_epoch | subject - 1, when rewards are computed | 249 |
performance_epoch | subject - 2, where pool performance is measured | 248 |
snapshot_epoch | Same as performance_epoch, used in fixture filenames | 248 |
Run the specific failing test:
DOLOS_SEED_DIR=/path/to/seeds cargo test --test epoch_pots test_mainnet_250 --release -- --nocaptureSet EPOCH_POTS_KEEP_DIR=1 to preserve the temp directory for inspection.
If you don't know where the mismatch starts:
/add-epoch-testThis isolates when the mismatch class first appears. Different epoch ranges often reveal different bug classes.
The test compares 6 datasets. The failure pattern reveals the root cause:
| Pattern | Likely Cause | Work Unit |
|---|---|---|
Only epochs differs (treasury/reserves off) | Pot calculation -- unspendable routing, incentive formula, or delta field | EWRAP/ESTART |
| Equal and opposite delta between rewards and treasury | Unspendable reward routing issue | EWRAP shards |
| Rewards match but pots don't | Pot aggregation or unspendable handling | EWRAP/ESTART |
delegation + stake + rewards + epochs all differ | Single stake discrepancy cascading | ROLL/ESTART |
| Thousands of small reward diffs (±1 lovelace) | One pool's total stake is wrong, rounding cascade | ROLL/ESTART |
rewards has extra/missing rows | RUPD pre-filtering or EWRAP-time registration check | RUPD/EWRAP shards |
delegation off by exactly 500,000,000 | Pool deposit refund timing | ROLL (POOLREAP) |
delegation off by exactly 2,000,000 | Key deposit timing | ROLL |
| Only subset of pools/accounts affected | Registration/retirement window or pool param update | ROLL |
| MIR / treasury-reserves transfer mismatch | MIR application or routing in boundary close | EWRAP finalize |
When delegation or stake has differences:
stake diff first -- it shows the exact account and amountSELECT sa.view, es.epoch_no, es.amount::text
FROM epoch_stake es
JOIN stake_address sa ON sa.id = es.addr_id
WHERE sa.view = '<stake_address>'
AND es.epoch_no BETWEEN <N-3> AND <N+3>
ORDER BY es.epoch_no;-- Is this account a pool reward account?
SELECT ph.view AS pool, pu.active_epoch_no
FROM pool_update pu
JOIN pool_hash ph ON ph.id = pu.hash_id
JOIN stake_address sa ON sa.id = pu.reward_addr_id
WHERE sa.view = '<stake_address>'
ORDER BY pu.active_epoch_no;
-- Did any of those pools retire?
SELECT ph.view, pr.retiring_epoch, b.epoch_no AS announced_epoch
FROM pool_retire pr
JOIN pool_hash ph ON ph.id = pr.hash_id
JOIN tx t ON t.id = pr.announced_tx_id
JOIN block b ON b.id = t.block_id
WHERE ph.view = '<pool_bech32>'
ORDER BY pr.retiring_epoch;-- Find deregistrations near RUPD boundary
SELECT sa.view, b.slot_no, b.epoch_no, t.block_index
FROM stake_deregistration sd
JOIN tx t ON t.id = sd.tx_id
JOIN block b ON b.id = t.block_id
JOIN stake_address sa ON sa.id = sd.addr_id
WHERE b.epoch_no = <subject_epoch - 1>
AND b.slot_no > <epoch_start + stability_window>
ORDER BY b.slot_no;Each boundary runs EWRAP at the end of the closing epoch and ESTART at the start of the next. Both are sharded work units: their per-shard leg (load → compute → commit, repeated total_shards() times) handles per-account effects, and their finalize() does the global / once-per-boundary work. RUPD is also sharded with the same shape.
| Dolos | Haskell | What it does |
|---|---|---|
ROLL | Block processing | Applies transactions, certificates, updates pool/account state |
RUPD | Reward calculation at stability window | Sharded: per-shard reward computation against the mark snapshot, finalize emits incentives and clears rupd_progress |
EWRAP shards | applyRUpd (per-account) + reward filtering | Per-account: applies pending rewards to registered accounts, filters/routes unspendable rewards (treasury vs reserves), accumulates contributions into EpochState.end via EWrapProgress |
EWRAP finalize | applyMIR + boundary close | Global once-per-boundary: applies MIRs, processes pool/proposal refunds, classifies retiring/expiring entities, finalizes EndStats, rotates pparams/rolling snapshots forward (emits EpochWrapUpV2) |
ESTART shards | NEWEPOCH per-account snapshot rotation | Per-account: rotates each AccountState's EpochValue snapshots forward via AccountTransition |
ESTART finalize | NEWEPOCH global transition | Rotates remaining (pool/drep/proposal) snapshots, computes initial pots, advances epoch number (emits EpochTransitionV2), runs era transition if applicable |
| Area | Path |
|---|---|
| Pots & incentives | crates/cardano/src/pots.rs |
| Model types (EpochValue, etc.) | crates/cardano/src/model/ |
| Shard partitioning (per-credential prefix ranges) | crates/cardano/src/shard.rs |
| EWRAP per-shard reward application & unspendable routing | crates/cardano/src/ewrap/rewards.rs |
| EWRAP shard loading & commit | crates/cardano/src/ewrap/{loading,commit}.rs |
| EWRAP finalize: MIR / refunds / wrap-up | crates/cardano/src/ewrap/{enactment,refunds,wrapup}.rs |
| EWRAP work-unit lifecycle (initialize / shards / finalize) | crates/cardano/src/ewrap/work_unit.rs |
| ESTART per-shard snapshot rotation & global transition | crates/cardano/src/estart/reset.rs |
| ESTART work-unit lifecycle | crates/cardano/src/estart/work_unit.rs |
| RUPD / reward calculation | crates/cardano/src/rupd/loading.rs |
| RUPD work-unit lifecycle | crates/cardano/src/rupd/work_unit.rs |
| ROLL / certificate processing | crates/cardano/src/roll/accounts.rs |
| ROLL / batch delta application | crates/cardano/src/roll/batch.rs |
| Hardcoded hacks | crates/cardano/src/hacks.rs |
| Reward definition | crates/cardano/src/rewards/mod.rs |
Source of truth for rules: ~/Code/IntersectMBO/cardano-ledger
Focus areas:
cardano-ledger-shelley/src/Cardano/Ledger/Shelley/Rewards.hscardano-ledger-shelley/src/Cardano/Ledger/Shelley/LedgerState/PulsingReward.hscardano-ledger-shelley/src/Cardano/Ledger/Shelley/Rules/NewEpoch.hscardano-ledger-shelley/src/Cardano/Ledger/Shelley/AdaPots.hscardano-ledger-core/src/Cardano/Ledger/Rewards.hsWhen Dolos matches every epoch except a specific range, assume a pool or account-specific edge case rather than a systemic error.
Use targeted, temporary logs that point to a single hypothesis:
| Hypothesis | Where to instrument |
|---|---|
| Missing/wrong block attribution | Pool header data in ROLL visitor |
| Wrong pool block count | Pool block counts in RUPD loading |
| Wrong reward amounts | Reward map entries in EWRAP per-shard rewards visitor (ewrap/rewards.rs) before commit |
| Wrong unspendable routing (treasury vs reserves) | EWRAP per-shard rewards visitor + EWrapProgress deltas |
| Wrong MIR amount or routing | EWRAP finalize: enactment / wrap-up (ewrap/enactment.rs, ewrap/wrapup.rs) |
| Wrong pool / proposal refund | EWRAP finalize refunds visitor (ewrap/refunds.rs) |
| Wrong pot delta | apply_delta() inputs in ESTART |
| Registration boundary issue | Account registration checks at RUPD entry and EWRAP per-shard reward-application time |
Guidelines:
eprintln! for focused logsAfter applying a fix:
DOLOS_SEED_DIR=/path/to/seeds cargo test --test epoch_pots --release -- --nocaptureWhen investigating a failing epoch, check these in DBSync:
Connection strings are in xtask.toml under [dbsync]. Use psql directly or cargo xtask ground-truth query.
© txpipe, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/debug-epoch-mismatch of txpipe/dolos.
Open the folder on GitHubat commit 7e973ea
Debug Epoch Mismatch next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Debug Epoch Mismatch this skilltxpipe/dolos | 138 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Trellis Session Insightmindfold-ai/Trellis | 15k | 4 repos | ~1.7k | Automated safety check: Pass | AGPL-3.0 | |
| Native Data FetchingCherryHQ/cherry-studio-app | 4k | 6 repos | ~2.9k | Automated safety check: Notes | MIT | |
| Debugging Executionsn8n-io/n8n | 207k | — | ~2.6k | Automated safety check: Pass | Custom licence | |
| Aoti Debugpytorch/pytorch | 104k | 1 repos | ~1.7k | Automated safety check: Pass | Custom licence | |
| Herdr Throwaway Reproductionherdrdev/herdr | 43k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 |
mindfold-ai/Trellis
Reach into past AI conversation history through the trellis mem CLI.
CherryHQ/cherry-studio-app
A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.
n8n-io/n8n
Debug failed or wrong-output workflow executions using executions tools.
pytorch/pytorch
Debug AOTInductor (AOTI) errors and crashes. An agent skill from pytorch/pytorch.
herdrdev/herdr
Runs a disposable, uniquely named Herdr session inside an existing one so runtime, pane, terminal or API bugs can be reproduced without touching the main session.
ultralisp/ultralisp
A skill your agent uses when encountering any bug, test failure, or unexpected behavior, before proposing fixes
txpipe/dolos
Reconcile the user-facing documentation under docs/content/ with the current source-of-truth in the codebase.
txpipe/dolos
Set up a new epochpots integration test with ground truth fixtures from DBSync
txpipe/dolos
Add a missing pointer address mapping to hacks.rs by looking up the stake credential in DBSync
txpipe/dolos
Architecture of the Dolos processing pipeline — WorkUnit lifecycle, executor modes, CardanoWorkUnit variants, WorkBuffer state machine, and sequencing.
txpipe/dolos
Reference of non-obvious Cardano ledger behaviors that have caused bugs in Dolos.
txpipe/dolos
Update hardcoded Conway governance proposal mappings in hacks.rs by querying DBSync
Categories
Systematic workflow for debugging Cardano ledger epoch pots mismatches in Dolos. Debug Epoch Mismatch is an agent skill from txpipe/dolos. Systematic workflow for debugging Cardano ledger epoch pots mismatches in Dolos.
Debug Epoch Mismatch fits situations like: an epoch test fails; treasury/reserves/rewards diverge from DBSync.
Run `npx skills add txpipe/dolos --skill debug-epoch-mismatch -a claude-code`. Or copy the skill folder (skills/debug-epoch-mismatch in txpipe/dolos) into .claude/skills/debug-epoch-mismatch in your project. Claude Code loads it when a task matches its description.
Run `npx skills add txpipe/dolos --skill debug-epoch-mismatch -a codex`. Or copy the skill folder (skills/debug-epoch-mismatch in txpipe/dolos) into .agents/skills/debug-epoch-mismatch in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add txpipe/dolos --skill debug-epoch-mismatch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-epoch-mismatch, .gemini/skills/debug-epoch-mismatch, .github/skills/debug-epoch-mismatch and .opencode/skills/debug-epoch-mismatch in your project.
Going by SKILL.md and its folder, Debug Epoch Mismatch needs the command-line tools its instructions call (cargo).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Debug Epoch Mismatch is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Debug Epoch Mismatch: Trellis Session Insight (mindfold-ai/Trellis, 15k stars), Native Data Fetching (CherryHQ/cherry-studio-app, 4k stars), Debugging Executions (n8n-io/n8n, 207k stars) and Aoti Debug (pytorch/pytorch, 104k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
txpipe (a GitHub organization) maintains it in txpipe/dolos, which has 138 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 8, 2026.
Source: txpipe/dolos on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.