DOCA Erasure Coding
Where to start: This skill assumes DOCA is already installed and
the user is doing hands-on erasure-coding work on a BlueField /
ConnectX / host with DOCA. Open TASKS.md if the user
wants to do something (configure / build / modify / run / test /
debug); open CAPABILITIES.md when the question
is what can DOCA Erasure Coding express on this version. If the
user has not installed DOCA yet, route to
doca-setup first. If the user is
asking "should I even use erasure coding here, or just replicate
the data?", the path-selection rule in
CAPABILITIES.md ## Capabilities and modes
is the first stop — erasure coding is a storage-resilience
primitive (RAID-6 / distributed file system parity / object-storage
erasure-coded buckets), not a network primitive and not a
replication substitute.
Example questions this skill answers well
The CLASSES of DOCA Erasure Coding questions this skill is built
to answer, each with one worked example. The agent should treat
the class as the load-bearing piece — the worked example is a
single instance.
- "Should I offload this erasure coding to DOCA, or do it on the
CPU — or just replicate the data instead?" — worked example:
"I am writing a distributed object store that wants RAID-6-like
resilience across 12 disks; is doca-erasure-coding the right
primitive, or should I just keep three copies?". Answered by
the path-selection table in
CAPABILITIES.md ## Capabilities and modes
- the "when NOT to use doca-erasure-coding" bullets in
CAPABILITIES.md ## Safety policy.
- "Does my device support the EC task type, block size, N+K
layout, and matrix type I want?" — worked example: "is
doca_ec_task_create on this BlueField, what is the maximum
block size, what is the cap on N+K, and does the device
advertise a Vandermonde Reed-Solomon matrix?". Answered by
the per-task + matrix + size capability-query rule
(doca_ec_cap_task_create_is_supported,
_task_recover_is_supported, _task_update_is_supported,
_task_galois_mul_is_supported — the 4th public task on the
EC accelerator, doca_ec_cap_get_max_block_size,
doca_ec_cap_get_max_buf_list_len, and per-variant
doca_ec_matrix_create() constructor success — the public
header does NOT ship a doca_ec_cap_get_matrix_* family) in
CAPABILITIES.md ## Capabilities and modes
- the discovery step in
TASKS.md ## configure.
- "One source block changed — do I have to recompute all the
parity from scratch?" — worked example: "I have 8 data + 4
parity blocks on disk; one data block was just rewritten. How
do I express the parity update without re-running the full
encode?". Answered by the
doca_ec_task_update row in the
task-type table in
CAPABILITIES.md ## Capabilities and modes
- the update-vs-re-encode rule in
CAPABILITIES.md ## Safety policy
- the modify-from-sample slot for switching between create and
update tasks in
TASKS.md ## modify.
- "K of my N+K blocks went missing — how do I reconstruct
them?" — worked example: "a disk failed; the 8 data blocks
are intact but 2 of the 4 parity blocks are gone; can DOCA
recover them?". Answered by the
doca_ec_task_recover row in the task-type table in
CAPABILITIES.md ## Capabilities and modes
- the recover smoke (encode → drop a block → recover → bit-compare)
in
TASKS.md ## test.
- "What permissions does the source / destination mmap need?" —
worked example: "my
doca_ec_task_create returns
DOCA_ERROR_NOT_PERMITTED". Answered by the permission matrix
in CAPABILITIES.md ## Safety policy
- the mmap-set-permissions checklist in
TASKS.md ## test.
- "Is this DOCA Erasure Coding API available on my installed
DOCA version?" — worked example: "is
doca_ec_task_update in
the DOCA I have installed, or do I have to recompute parity from
scratch?". Answered by the version-compatibility overlay in
CAPABILITIES.md ## Version compatibility,
which cross-links the canonical detection chain in
doca-version and adds the
EC-specific "discover per-task support + matrix type via cap
query" bullets.
- "What does this
DOCA_ERROR_* from an EC call mean and which
layer caused it?" — worked example: "DOCA_ERROR_INVALID_VALUE
on doca_ec_task_create_allocate_init with block_size = 4 MiB".
Answered by the EC overlay on the cross-library taxonomy in
CAPABILITIES.md ## Error taxonomy
- the layered ladder in
TASKS.md ## debug that escalates to
doca-debug.
Audience
This skill serves external developers building applications that
consume the DOCA Erasure Coding library — i.e., users whose code
calls doca_ec_* (directly in C/C++, or through FFI/bindings from
another language) to offload Reed-Solomon erasure coding onto a
BlueField DPU or ConnectX accelerator. It is not for NVIDIA
developers contributing to DOCA Erasure Coding itself.
The canonical fit is distributed storage: RAID-6-style block
layouts, distributed file system parity, object-storage
erasure-coded buckets, and any data-durability workload where the
N data + K redundancy block model lets the system tolerate K
simultaneous block losses without data loss. The skill keeps the
agent oriented to that domain: erasure coding is operationally
distinct from pure replication (which keeps M whole copies) and
from RAID-6 the disk layout (which is one specific instance of
the N=k, K=2 case); confusing them produces wrong recommendations.
Language scope. DOCA Erasure Coding ships as a C library with
pkg-config module name doca-erasure-coding. The shipped samples
are written in C. C and C++ consumers are the canonical case and
the worked examples in TASKS.md assume that path. Other-language
consumers (Rust, Go, Python, …) consume the same *.so through
FFI or language-specific bindings; the skill's contribution in
that case is to keep the lifecycle, capability-discovery,
permission, error-taxonomy, and create-vs-recover-vs-update
guidance language-neutral, and to route the agent to the public C
ABI as the authoritative surface that any wrapper will eventually
call.
When to load this skill
Load this skill when the user is doing hands-on DOCA Erasure
Coding work, in any language. Concretely:
- Initializing a
doca_ec context on a doca_dev and configuring
at least one task type (doca_ec_task_create,
doca_ec_task_recover, and/or doca_ec_task_update) before
doca_ctx_start().
- Choosing between the create task (encode N data blocks into
K redundancy blocks), the recover task (reconstruct up to K
missing blocks given the surviving subset), and the update
task (incrementally update redundancy blocks when one source
block changes — much cheaper than re-encoding from scratch).
- Picking the coding parameters: matrix type / coding scheme
(typically Vandermonde or Cauchy for Reed-Solomon), N (number
of data blocks), K (number of redundancy blocks), and block
size (all blocks the same size).
- Setting permissions on
doca_mmap correctly for the source
buffers — data blocks for create, data + parity for recover —
(DOCA_ACCESS_FLAG_LOCAL_READ_ONLY at minimum) and the
destination buffers — redundancy blocks for create, recovered
blocks for recover, updated parity for update —
(DOCA_ACCESS_FLAG_LOCAL_READ_WRITE).
- Sizing blocks against
doca_ec_cap_get_max_block_size(devinfo) and N+K against
doca_ec_cap_get_max_buf_list_len(devinfo, &max_buf_list_len).
- Checking which task types and matrix schemes this device's
accelerator advertises via the
doca_ec_cap_task_*_is_supported (including the 4th task
_task_galois_mul_is_supported) and per-variant
doca_ec_matrix_create() constructor success — the public
header does NOT ship a doca_ec_cap_get_matrix_*
families against the active doca_devinfo.
- Validating against a known-vector recover smoke (encode a small
N + K layout, simulate one block loss, recover, bit-compare
against the original block) before pushing bulk storage data
through the accelerator.
- Recognising when update is the right task (single source
block changed in an existing N + K layout —
doca_ec_task_update
is far cheaper than recomputing all K parity blocks via a fresh
doca_ec_task_create).
- Debugging a
DOCA_ERROR_* returned from an EC call (lifecycle
vs. block-size vs. N+K vs. matrix-type vs. permission vs.
queue pressure) and the task-completion event on the progress
engine.
- Designing or extending non-C bindings (Rust, Go, Python, …)
that wrap the EC C ABI — for the lifecycle, permission,
capability, and create-vs-recover-vs-update rules the wrapper
must honor.
Do not load this skill for general DOCA orientation, install
of DOCA itself, non-Reed-Solomon erasure codes (fountain codes,
LDPC — those belong on a CPU library, not the DOCA accelerator),
pure replication / mirroring designs (erasure coding is the wrong
primitive when one extra copy is the right answer), or other
DOCA libraries. For those, use
doca-public-knowledge-map.
What this skill provides
This is a thin loader. The body keeps only the orientation
needed to pick the right next file. The substantive
EC-specific material lives in two companion files:
CAPABILITIES.md — what DOCA Erasure Coding can express on
this version: the three task types (create / recover / update,
each independently capability-gated), the matrix-type + N + K +
block-size configuration surface, the capability-query family
(doca_ec_cap_* for task support, max block size, max N+K,
supported matrix types), the EC error taxonomy (mapped onto
the cross-library DOCA_ERROR_* set), the observability
surface (per-task completion events on the progress engine),
the safety policy that gates source / destination mmap
permission decisions, and the path-selection rule (when to use
doca-erasure-coding versus a CPU EC library versus pure
replication versus RAID-6 on disk).
TASKS.md — step-by-step workflows for the six in-scope EC
verbs: configure, build, modify, run, test, debug.
Plus a Deferred task verbs block that points out-of-scope
questions at the right next skill.
The skill assumes a host or BlueField where DOCA is already
installed at the standard location and the user has the
privileges their public install profile expects. It does not
cover installing DOCA — that path goes through
doca-setup.
What this skill deliberately does not ship
This skill is agent guidance, not a samples or templates
bundle. To keep the boundary clean, it deliberately does not
contain — and pull requests should not add:
- Pre-written DOCA EC application source code, in any
language. The verified EC source code is the shipped C
samples at
/opt/mellanox/doca/samples/doca_erasure_coding/.
The agent's job is to route the user to those files and
prescribe a minimum-diff modification on them via the universal
modify-a-sample workflow in
doca-programming-guide,
layered with the EC-specific overrides in
TASKS.md ## modify.
- Pre-computed parity tables for arbitrary N + K layouts.
The skill tells the agent to use a known-vector smoke
(encode a tiny N + K layout from a fixed input, simulate
losing one block, recover, bit-compare against the original)
as the smoke before bulk; it does not ship a vector bank of
its own.
- Standalone build manifests (
meson.build,
CMakeLists.txt, Cargo.toml, …) parked inside the skill.
The agent constructs the build manifest in the user's
project directory against the user's installed DOCA, where
pkg-config --modversion doca-erasure-coding is the source of
truth.
- A
samples/, bindings/, or reference/ subtree of any
kind. A mock or incomplete artifact in this skill's tree, even
one labeled "reference", is misleading: users will read it as
buildable.
Loading order
- Read this
SKILL.md first to confirm the user's question is in
scope (storage-domain resilience — N data + K redundancy
blocks — and not a network or replication question
misclassified as erasure coding).
- For the EC capability matrix, the three task types
(create / recover / update), the matrix-type + N + K +
block-size configuration surface, the capability-query rules,
permission matrix, error taxonomy, observability, and safety /
path-selection policy, see CAPABILITIES.md.
- For step-by-step workflows — configure, build, modify, run,
test, debug — see TASKS.md.
Both companion files cross-link to each other,
doca-version for the canonical
version-handling rules, and
doca-public-knowledge-map
whenever the right answer is "look it up in the public docs or
the installed package layout" rather than "EC-specific guidance".
Related skills
doca-public-knowledge-map —
the routing table for every public DOCA documentation source
and the on-disk layout of an installed DOCA package. The DOCA
Erasure Coding page lives at
https://docs.nvidia.com/doca/sdk/DOCA-Erasure-Coding/index.html;
the install-tree layout (samples directory, header location)
belongs to the public knowledge map, not to this skill.
doca-setup — env preparation,
install verification, and the I have no install yet path
with the public NGC DOCA container. This skill assumes its
preconditions are satisfied.
doca-version — canonical DOCA
version-handling rules. This skill's
## Version compatibility
cross-links the four-way match rule and adds only the
EC-specific "discover per-task support + supported matrix
types + max block size + max N+K via cap query" overlay.
doca-structured-tools-contract —
the bundle's structured-tools precedence rule (detect / prefer
/ fall back / report). The Command appendix in
TASKS.md honors this contract.
doca-programming-guide —
general DOCA programming patterns shared by every library: the
canonical pkg-config + meson build pattern, the universal
modify-a-shipped-sample first-app workflow, the universal
lifecycle, the cross-library DOCA_ERROR_* taxonomy, and the
program-side debug order. This skill layers EC specifics on
top.
doca-debug — the cross-cutting
debug ladder (install / version / build / link / runtime /
program / driver). EC-specific debug (task-not-supported,
matrix-type-unsupported, block-size-over-max, N+K-over-max,
recover-with-too-many-missing) overlays on top of that ladder.
1---2name: doca-erasure-coding3description: Use this skill when the user is doing hands-on DOCA Erasure Coding programming on a BlueField DPU, ConnectX NIC, or host — bringing up a doca_ec context, picking among the create / recover / update tasks, choosing matrix type / N / K / block size, querying doca_ec_cap_* before sizing, setting doca_mmap src/dst permissions, or debugging DOCA_ERROR_* returns from doca_ec_task_*. Trigger even when the user does not name "DOCA Erasure Coding" or "Reed-Solomon" — typical implicit phrasings include "one data block changed, how do I refresh parity without re-encoding", "a disk failed and 2 parity blocks are gone, can I rebuild", "RAID-6 resilience across 12 disks", "my doca_ec_task_create returns NOT_PERMITTED", or "is this N+K layout still recoverable". Refuse and route elsewhere for non-Reed-Solomon codes (fountain / LDPC / raptor), pure-replication designs, network FEC, or other DOCA accelerator libraries (SHA / Compress / AES-GCM / DMA) — those belong to other skills.4license: Apache-2.05---67# DOCA Erasure Coding89**Where to start:** This skill assumes DOCA is already installed and10the user is doing **hands-on erasure-coding work** on a BlueField /11ConnectX / host with DOCA. Open [`TASKS.md`](TASKS.md) if the user12wants to *do* something (configure / build / modify / run / test /13debug); open [`CAPABILITIES.md`](CAPABILITIES.md) when the question14is *what can DOCA Erasure Coding express* on this version. If the15user has not installed DOCA yet, route to16[`doca-setup`](../../doca-setup/SKILL.md) first. If the user is17asking *"should I even use erasure coding here, or just replicate18the data?"*, the path-selection rule in19[`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)20is the first stop — erasure coding is a **storage-resilience**21primitive (RAID-6 / distributed file system parity / object-storage22erasure-coded buckets), not a network primitive and not a23replication substitute.2425## Example questions this skill answers well2627The CLASSES of DOCA Erasure Coding questions this skill is built28to answer, each with one worked example. The agent should treat29the *class* as the load-bearing piece — the worked example is a30single instance.3132- **"Should I offload this erasure coding to DOCA, or do it on the33 CPU — or just replicate the data instead?"** — worked example:34 *"I am writing a distributed object store that wants RAID-6-like35 resilience across 12 disks; is doca-erasure-coding the right36 primitive, or should I just keep three copies?"*. Answered by37 the path-selection table in38 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)39 + the *"when NOT to use doca-erasure-coding"* bullets in40 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy).41- **"Does my device support the EC task type, block size, N+K42 layout, and matrix type I want?"** — worked example: *"is43 `doca_ec_task_create` on this BlueField, what is the maximum44 block size, what is the cap on N+K, and does the device45 advertise a Vandermonde Reed-Solomon matrix?"*. Answered by46 the per-task + matrix + size capability-query rule47 (`doca_ec_cap_task_create_is_supported`,48 `_task_recover_is_supported`, `_task_update_is_supported`,49 `_task_galois_mul_is_supported` — the 4th public task on the50 EC accelerator, `doca_ec_cap_get_max_block_size`,51 `doca_ec_cap_get_max_buf_list_len`, and per-variant52 `doca_ec_matrix_create()` constructor success — the public53 header does NOT ship a `doca_ec_cap_get_matrix_*` family) in54 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)55 + the discovery step in56 [`TASKS.md ## configure`](TASKS.md#configure).57- **"One source block changed — do I have to recompute all the58 parity from scratch?"** — worked example: *"I have 8 data + 459 parity blocks on disk; one data block was just rewritten. How60 do I express the parity update without re-running the full61 encode?"*. Answered by the `doca_ec_task_update` row in the62 task-type table in63 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)64 + the update-vs-re-encode rule in65 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)66 + the modify-from-sample slot for switching between create and67 update tasks in68 [`TASKS.md ## modify`](TASKS.md#modify).69- **"K of my N+K blocks went missing — how do I reconstruct70 them?"** — worked example: *"a disk failed; the 8 data blocks71 are intact but 2 of the 4 parity blocks are gone; can DOCA72 recover them?"*. Answered by the73 `doca_ec_task_recover` row in the task-type table in74 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)75 + the recover smoke (encode → drop a block → recover → bit-compare)76 in [`TASKS.md ## test`](TASKS.md#test).77- **"What permissions does the source / destination mmap need?"** —78 worked example: *"my `doca_ec_task_create` returns79 `DOCA_ERROR_NOT_PERMITTED`"*. Answered by the permission matrix80 in [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)81 + the mmap-set-permissions checklist in82 [`TASKS.md ## test`](TASKS.md#test).83- **"Is this DOCA Erasure Coding API available on my installed84 DOCA version?"** — worked example: *"is `doca_ec_task_update` in85 the DOCA I have installed, or do I have to recompute parity from86 scratch?"*. Answered by the version-compatibility overlay in87 [`CAPABILITIES.md ## Version compatibility`](CAPABILITIES.md#version-compatibility),88 which cross-links the canonical detection chain in89 [`doca-version`](../../doca-version/SKILL.md) and adds the90 EC-specific *"discover per-task support + matrix type via cap91 query"* bullets.92- **"What does this `DOCA_ERROR_*` from an EC call mean and which93 layer caused it?"** — worked example: *"`DOCA_ERROR_INVALID_VALUE`94 on `doca_ec_task_create_allocate_init` with block_size = 4 MiB"*.95 Answered by the EC overlay on the cross-library taxonomy in96 [`CAPABILITIES.md ## Error taxonomy`](CAPABILITIES.md#error-taxonomy)97 + the layered ladder in98 [`TASKS.md ## debug`](TASKS.md#debug) that escalates to99 [`doca-debug`](../../doca-debug/SKILL.md).100101## Audience102103This skill serves **external developers building applications that104consume the DOCA Erasure Coding library** — i.e., users whose code105calls `doca_ec_*` (directly in C/C++, or through FFI/bindings from106another language) to offload Reed-Solomon erasure coding onto a107BlueField DPU or ConnectX accelerator. It is *not* for NVIDIA108developers contributing to DOCA Erasure Coding itself.109110The canonical fit is **distributed storage**: RAID-6-style block111layouts, distributed file system parity, object-storage112erasure-coded buckets, and any data-durability workload where the113N data + K redundancy block model lets the system tolerate K114simultaneous block losses without data loss. The skill keeps the115agent oriented to that domain: erasure coding is operationally116distinct from pure replication (which keeps M whole copies) and117from RAID-6 the disk layout (which is one specific instance of118the N=k, K=2 case); confusing them produces wrong recommendations.119120**Language scope.** DOCA Erasure Coding ships as a C library with121`pkg-config` module name `doca-erasure-coding`. The shipped samples122are written in C. C and C++ consumers are the canonical case and123the worked examples in `TASKS.md` assume that path. Other-language124consumers (Rust, Go, Python, …) consume the same `*.so` through125FFI or language-specific bindings; the skill's contribution in126that case is to keep the lifecycle, capability-discovery,127permission, error-taxonomy, and create-vs-recover-vs-update128guidance language-neutral, and to route the agent to the public C129ABI as the authoritative surface that any wrapper will eventually130call.131132## When to load this skill133134Load this skill when the user is doing hands-on DOCA Erasure135Coding work, in any language. Concretely:136137- Initializing a `doca_ec` context on a `doca_dev` and configuring138 at least one task type (`doca_ec_task_create`,139 `doca_ec_task_recover`, and/or `doca_ec_task_update`) before140 `doca_ctx_start()`.141- Choosing between the **create** task (encode N data blocks into142 K redundancy blocks), the **recover** task (reconstruct up to K143 missing blocks given the surviving subset), and the **update**144 task (incrementally update redundancy blocks when one source145 block changes — much cheaper than re-encoding from scratch).146- Picking the coding parameters: matrix type / coding scheme147 (typically Vandermonde or Cauchy for Reed-Solomon), N (number148 of data blocks), K (number of redundancy blocks), and block149 size (all blocks the same size).150- Setting permissions on `doca_mmap` correctly for the source151 buffers — data blocks for create, data + parity for recover —152 (`DOCA_ACCESS_FLAG_LOCAL_READ_ONLY` at minimum) and the153 destination buffers — redundancy blocks for create, recovered154 blocks for recover, updated parity for update —155 (`DOCA_ACCESS_FLAG_LOCAL_READ_WRITE`).156- Sizing blocks against157 `doca_ec_cap_get_max_block_size(devinfo)` and N+K against158 `doca_ec_cap_get_max_buf_list_len(devinfo, &max_buf_list_len)`.159- Checking which task types and matrix schemes this device's160 accelerator advertises via the161 `doca_ec_cap_task_*_is_supported` (including the 4th task162 `_task_galois_mul_is_supported`) and per-variant163 `doca_ec_matrix_create()` constructor success — the public164 header does NOT ship a `doca_ec_cap_get_matrix_*`165 families against the active `doca_devinfo`.166- Validating against a known-vector recover smoke (encode a small167 N + K layout, simulate one block loss, recover, bit-compare168 against the original block) before pushing bulk storage data169 through the accelerator.170- Recognising when **update** is the right task (single source171 block changed in an existing N + K layout — `doca_ec_task_update`172 is far cheaper than recomputing all K parity blocks via a fresh173 `doca_ec_task_create`).174- Debugging a `DOCA_ERROR_*` returned from an EC call (lifecycle175 vs. block-size vs. N+K vs. matrix-type vs. permission vs.176 queue pressure) and the task-completion event on the progress177 engine.178- Designing or extending non-C bindings (Rust, Go, Python, …)179 that wrap the EC C ABI — for the lifecycle, permission,180 capability, and create-vs-recover-vs-update rules the wrapper181 must honor.182183Do **not** load this skill for general DOCA orientation, install184of DOCA itself, non-Reed-Solomon erasure codes (fountain codes,185LDPC — those belong on a CPU library, not the DOCA accelerator),186pure replication / mirroring designs (erasure coding is the wrong187primitive when one extra copy is the right answer), or other188DOCA libraries. For those, use189[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md).190191## What this skill provides192193This is a **thin loader**. The body keeps only the orientation194needed to pick the right next file. The substantive195EC-specific material lives in two companion files:196197- `CAPABILITIES.md` — what DOCA Erasure Coding can express on198 this version: the three task types (create / recover / update,199 each independently capability-gated), the matrix-type + N + K +200 block-size configuration surface, the capability-query family201 (`doca_ec_cap_*` for task support, max block size, max N+K,202 supported matrix types), the EC error taxonomy (mapped onto203 the cross-library `DOCA_ERROR_*` set), the observability204 surface (per-task completion events on the progress engine),205 the safety policy that gates source / destination mmap206 permission decisions, and the path-selection rule (when to use207 doca-erasure-coding versus a CPU EC library versus pure208 replication versus RAID-6 on disk).209- `TASKS.md` — step-by-step workflows for the six in-scope EC210 verbs: `configure`, `build`, `modify`, `run`, `test`, `debug`.211 Plus a `Deferred task verbs` block that points out-of-scope212 questions at the right next skill.213214The skill assumes a host or BlueField where DOCA is already215installed at the standard location and the user has the216privileges their public install profile expects. It does not217cover installing DOCA — that path goes through218[`doca-setup`](../../doca-setup/SKILL.md).219220## What this skill deliberately does not ship221222This skill is **agent guidance**, not a samples or templates223bundle. To keep the boundary clean, it deliberately does not224contain — and pull requests should not add:225226- **Pre-written DOCA EC application source code, in any227 language.** The verified EC source code is the shipped C228 samples at `/opt/mellanox/doca/samples/doca_erasure_coding/`.229 The agent's job is to route the user to those files and230 prescribe a minimum-diff modification on them via the universal231 modify-a-sample workflow in232 [`doca-programming-guide`](../../doca-programming-guide/SKILL.md),233 layered with the EC-specific overrides in234 [`TASKS.md ## modify`](TASKS.md#modify).235- **Pre-computed parity tables for arbitrary N + K layouts.**236 The skill tells the agent to use a *known-vector* smoke237 (encode a tiny N + K layout from a fixed input, simulate238 losing one block, recover, bit-compare against the original)239 as the smoke before bulk; it does not ship a vector bank of240 its own.241- **Standalone build manifests** (`meson.build`,242 `CMakeLists.txt`, `Cargo.toml`, …) parked inside the skill.243 The agent constructs the build manifest *in the user's244 project directory* against the user's installed DOCA, where245 `pkg-config --modversion doca-erasure-coding` is the source of246 truth.247- **A `samples/`, `bindings/`, or `reference/` subtree** of any248 kind. A mock or incomplete artifact in this skill's tree, even249 one labeled "reference", is misleading: users will read it as250 buildable.251252## Loading order2532541. Read this `SKILL.md` first to confirm the user's question is in255 scope (storage-domain resilience — N data + K redundancy256 blocks — and not a network or replication question257 misclassified as erasure coding).2582. **For the EC capability matrix, the three task types259 (create / recover / update), the matrix-type + N + K +260 block-size configuration surface, the capability-query rules,261 permission matrix, error taxonomy, observability, and safety /262 path-selection policy, see [CAPABILITIES.md](CAPABILITIES.md).**2633. **For step-by-step workflows — configure, build, modify, run,264 test, debug — see [TASKS.md](TASKS.md).**265266Both companion files cross-link to each other,267[`doca-version`](../../doca-version/SKILL.md) for the canonical268version-handling rules, and269[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)270whenever the right answer is "look it up in the public docs or271the installed package layout" rather than "EC-specific guidance".272273## Related skills274275- [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md) —276 the routing table for every public DOCA documentation source277 and the on-disk layout of an installed DOCA package. The DOCA278 Erasure Coding page lives at279 <https://docs.nvidia.com/doca/sdk/DOCA-Erasure-Coding/index.html>;280 the install-tree layout (samples directory, header location)281 belongs to the public knowledge map, not to this skill.282- [`doca-setup`](../../doca-setup/SKILL.md) — env preparation,283 install verification, and the *I have no install yet* path284 with the public NGC DOCA container. This skill assumes its285 preconditions are satisfied.286- [`doca-version`](../../doca-version/SKILL.md) — canonical DOCA287 version-handling rules. This skill's288 [`## Version compatibility`](CAPABILITIES.md#version-compatibility)289 cross-links the four-way match rule and adds only the290 EC-specific *"discover per-task support + supported matrix291 types + max block size + max N+K via cap query"* overlay.292- [`doca-structured-tools-contract`](../../doca-structured-tools-contract/SKILL.md) —293 the bundle's structured-tools precedence rule (detect / prefer294 / fall back / report). The Command appendix in295 [TASKS.md](TASKS.md) honors this contract.296- [`doca-programming-guide`](../../doca-programming-guide/SKILL.md) —297 general DOCA programming patterns shared by every library: the298 canonical `pkg-config` + meson build pattern, the universal299 modify-a-shipped-sample first-app workflow, the universal300 lifecycle, the cross-library `DOCA_ERROR_*` taxonomy, and the301 program-side debug order. This skill layers EC specifics on302 top.303- [`doca-debug`](../../doca-debug/SKILL.md) — the cross-cutting304 debug ladder (install / version / build / link / runtime /305 program / driver). EC-specific debug (task-not-supported,306 matrix-type-unsupported, block-size-over-max, N+K-over-max,307 recover-with-too-many-missing) overlays on top of that ladder.