Indexer Core Skill
CRITICAL RULES
- Read reference files first. When the user's request matches a topic in the table below, read those files before writing code, proposing architecture, or answering behavioral questions.
- Treat mode selection as a correctness decision.
LogsIndexer and BlockIndexer are not interchangeable. Do not present them as equivalent options with different performance profiles.
- Default to
IndexerFactory. For normal library usage, indexers should be configured and built with IndexerFactory, not by manually wiring implementation classes.
- Treat startup rollback as intentional. It is part of the data-integrity model and reorg recovery workflow, not a bug.
- Prefer bundled references over ad hoc code spelunking. If you are working inside the
indexer-core repository, align with the local repo docs and AGENTS.md. Use source code mainly to confirm implementation details or debug discrepancies.
Scope
Use this skill for indexer-core tasks such as:
- integrating the library into another service
- choosing between
LogsIndexer and BlockIndexer
- configuring
IndexerFactory, IndexerProcessor, and IndexerRunner
- designing ABI-event, VET-transfer, or business-event indexing setups
- debugging dependency ordering, fast sync, rollback, and reorg behavior
- changing the library itself while preserving documented behavior
- answering migration questions for 7.x to 8.x consumers
Operating Procedure
1. Classify the task
Decide whether the user needs:
- consumer guidance for integrating or configuring the library
- library maintenance for changing
indexer-core itself
For consumer guidance, optimize for correct mode selection and integration advice before discussing internals.
For library maintenance, preserve the documented contract unless the task explicitly changes that contract.
2. Read the matching references
Use the table below and load only the files needed for the current request.
3. Clarify the high-risk choices before implementing
Ask before building when any of these are unclear:
- whether the user needs full block access or only decoded events
- whether one indexer must finish a block before another processes it
- whether downstream consumers want raw ABI events or higher-level business events
- whether the task is a behavior change, a docs change, or a debugging task
4. Implement with indexer-core correctness
- build normal indexers through
IndexerFactory
- assume repo docs are the authoritative description of public behavior
- keep rollback and reorg semantics intact unless the task explicitly changes them
- do not infer public contracts from a single implementation detail or type signature
5. Verify and deliver
A task is not complete until all applicable gates pass:
- Targeted verification for the touched behavior
- Broader tests with
./gradlew test when the change is cross-cutting
- Formatting with
./gradlew spotlessCheck or ./gradlew spotlessApply when Kotlin code changed
- Docs consistency when public behavior or examples changed
Reference Files
Read the matching files before doing anything else.
| Topic |
File |
Read when user mentions... |
| Runtime model, lifecycle, rollback, dependencies |
references/runtime-model.md |
IndexerProcessor, IndexerRunner, lifecycle, status, rollback, reorg, dependency ordering |
LogsIndexer vs BlockIndexer and factory choices |
references/mode-selection.md |
LogsIndexer, BlockIndexer, includeFullBlock, dependsOn, fast sync, full block access |
| ABI events, business events, VET transfers, filtering |
references/event-pipeline.md |
ABI, business events, VET_TRANSFER, event criteria, transfer criteria, classpath JSON |
| Repo maintenance and migration |
references/maintenance-and-migration.md |
tests, formatting, docs authority, 7.x vs 8.x migration, IndexingResult renames |
1---2name: indexer-core3description: VeChain indexer-core library — IndexerFactory, IndexerRunner, LogsIndexer vs BlockIndexer mode selection, ABI and business events, rollback semantics, and integration guidance.4license: MIT5---67# Indexer Core Skill89## CRITICAL RULES10111. **Read reference files first.** When the user's request matches a topic in the table below, read those files before writing code, proposing architecture, or answering behavioral questions.122. **Treat mode selection as a correctness decision.** `LogsIndexer` and `BlockIndexer` are not interchangeable. Do not present them as equivalent options with different performance profiles.133. **Default to `IndexerFactory`.** For normal library usage, indexers should be configured and built with `IndexerFactory`, not by manually wiring implementation classes.144. **Treat startup rollback as intentional.** It is part of the data-integrity model and reorg recovery workflow, not a bug.155. **Prefer bundled references over ad hoc code spelunking.** If you are working inside the `indexer-core` repository, align with the local repo docs and `AGENTS.md`. Use source code mainly to confirm implementation details or debug discrepancies.1617## Scope1819Use this skill for `indexer-core` tasks such as:2021- integrating the library into another service22- choosing between `LogsIndexer` and `BlockIndexer`23- configuring `IndexerFactory`, `IndexerProcessor`, and `IndexerRunner`24- designing ABI-event, VET-transfer, or business-event indexing setups25- debugging dependency ordering, fast sync, rollback, and reorg behavior26- changing the library itself while preserving documented behavior27- answering migration questions for 7.x to 8.x consumers2829## Operating Procedure3031### 1. Classify the task3233Decide whether the user needs:3435- **consumer guidance** for integrating or configuring the library36- **library maintenance** for changing `indexer-core` itself3738For consumer guidance, optimize for correct mode selection and integration advice before discussing internals.3940For library maintenance, preserve the documented contract unless the task explicitly changes that contract.4142### 2. Read the matching references4344Use the table below and load only the files needed for the current request.4546### 3. Clarify the high-risk choices before implementing4748Ask before building when any of these are unclear:4950- whether the user needs full block access or only decoded events51- whether one indexer must finish a block before another processes it52- whether downstream consumers want raw ABI events or higher-level business events53- whether the task is a behavior change, a docs change, or a debugging task5455### 4. Implement with indexer-core correctness5657- build normal indexers through `IndexerFactory`58- assume repo docs are the authoritative description of public behavior59- keep rollback and reorg semantics intact unless the task explicitly changes them60- do not infer public contracts from a single implementation detail or type signature6162### 5. Verify and deliver6364A task is not complete until all applicable gates pass:65661. **Targeted verification** for the touched behavior672. **Broader tests** with `./gradlew test` when the change is cross-cutting683. **Formatting** with `./gradlew spotlessCheck` or `./gradlew spotlessApply` when Kotlin code changed694. **Docs consistency** when public behavior or examples changed7071## Reference Files7273Read the matching files before doing anything else.7475| Topic | File | Read when user mentions... |76|-------|------|---------------------------|77| Runtime model, lifecycle, rollback, dependencies | [references/runtime-model.md](references/runtime-model.md) | `IndexerProcessor`, `IndexerRunner`, lifecycle, status, rollback, reorg, dependency ordering |78| `LogsIndexer` vs `BlockIndexer` and factory choices | [references/mode-selection.md](references/mode-selection.md) | `LogsIndexer`, `BlockIndexer`, `includeFullBlock`, `dependsOn`, fast sync, full block access |79| ABI events, business events, VET transfers, filtering | [references/event-pipeline.md](references/event-pipeline.md) | ABI, business events, `VET_TRANSFER`, event criteria, transfer criteria, classpath JSON |80| Repo maintenance and migration | [references/maintenance-and-migration.md](references/maintenance-and-migration.md) | tests, formatting, docs authority, 7.x vs 8.x migration, `IndexingResult` renames |