[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-doca-structured-tools-contract":3,"mdc-2hg9x-key":31,"related-org-nvidia-doca-structured-tools-contract":2983,"related-repo-nvidia-doca-structured-tools-contract":3142},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":29,"mdContent":30},"doca-structured-tools-contract","consolidate information using structured DOCA tools","Use this skill whenever another DOCA skill says \"prefer the structured tool per doca-structured-tools-contract\", or when the user wants a one-shot answer that consolidates info multiple manual commands would produce — DOCA env \u002F version \u002F devices \u002F capabilities \u002F validate \u002F host vs DPU state. Trigger even when the user does not explicitly mention \"structured tool\" or \"doca-env --json\" — typical implicit phrasings include \"is there one command that tells me everything about my DOCA install\", \"what version is X capability available since\", \"every PF\u002FVF\u002FSF visible on this BlueField with PCIe address\", \"will this pipe pass validate before commit\", \"diff host vs DPU state\", or \"why does the agent give a one-line answer on host A and five commands on host B\". Refuse and route elsewhere for general DOCA orientation, specific library API how-to, or install-from-scratch guidance — those belong to the per-library skill, doca-public-knowledge-map, or doca-setup.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,17],{"name":13,"slug":14,"type":15},"Automation","automation","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Engineering","engineering",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-30T05:28:41.458072","Apache-2.0 AND CC-BY-4.0",281,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":28},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fdoca-structured-tools-contract","---\nlicense: Apache-2.0 AND CC-BY-4.0\nname: doca-structured-tools-contract\ndescription: >\n  Use this skill whenever another DOCA skill says \"prefer the\n  structured tool per doca-structured-tools-contract\", or when the\n  user wants a one-shot answer that consolidates info multiple\n  manual commands would produce — DOCA env \u002F version \u002F devices \u002F\n  capabilities \u002F validate \u002F host vs DPU state. Trigger even when\n  the user does not explicitly mention \"structured tool\" or\n  \"doca-env --json\" — typical implicit phrasings include \"is there\n  one command that tells me everything about my DOCA install\",\n  \"what version is X capability available since\", \"every PF\u002FVF\u002FSF\n  visible on this BlueField with PCIe address\", \"will this pipe\n  pass validate before commit\", \"diff host vs DPU state\", or \"why\n  does the agent give a one-line answer on host A and five commands\n  on host B\". Refuse and route elsewhere for general DOCA\n  orientation, specific library API how-to, or install-from-scratch\n  guidance — those belong to the per-library skill,\n  doca-public-knowledge-map, or doca-setup.\nmetadata:\n  kind: knowledge\ncompatibility: >\n  No DOCA install required to read this skill (it is an overlay\n  loaded against any DOCA artifact skill); the validation steps\n  within DO require a live DOCA install at \u002Fopt\u002Fmellanox\u002Fdoca.\n---\n\n# DOCA structured-tools contract\n\n**Where to start:** Reach for this skill whenever a workflow in\nanother skill says *\"prefer the structured tool per\n`doca-structured-tools-contract`\"*. Read\n[`## The agent behavior contract`](#the-agent-behavior-contract)\nfirst; then drill into the matching schema in [`## Schemas`](#schemas).\nIf the host has the structured tool, prefer its output. If it does\nnot, fall back to the manual command chain in the same schema\nsection. **Always report which path was taken** so the user can fix\nthe gap (or so a future bundle update can detect that the structured\npath was never tried).\n\n## Example questions this skill answers well\n\nSee [`references\u002Fexamples.md`](references\u002Fexamples.md) for the five\nworked routing examples. Keep this loader focused on detection,\nfallback behavior, and the authoritative schemas below.\n\n## When to load this skill\n\nLoad this skill whenever another skill's workflow tells the agent to\n*prefer the structured tool*, OR whenever the user's question implies\nthey want a single one-shot answer that consolidates information\nmultiple manual commands would otherwise produce.\n\nConcretely:\n\n- A library \u002F service \u002F tool skill's Command appendix references\n  this skill in its first column.\n- The user asks \"is there one command that tells me X about my DOCA\n  install\" (env \u002F devices \u002F version \u002F capabilities \u002F hardware\n  topology).\n- The user asks \"how do I know X is valid before I commit\" for\n  any DOCA library that has a validate-before-commit call.\n- The agent has computed the manual fallback answer and wants to\n  *also* surface the equivalent structured-tool one-liner so the\n  user can adopt it next time.\n\nDo **not** load this skill for general DOCA orientation, for\nspecific library API questions, or for install-from-scratch\nguidance. For those, use the matching library skill +\n[`doca-public-knowledge-map`](..\u002Fdoca-public-knowledge-map\u002FSKILL.md)\n+ [`doca-setup`](..\u002Fdoca-setup\u002FSKILL.md).\n\nRunning probes and fallbacks requires shell access to the target host,\neither directly by the agent or through commands the user runs.\n\n## Ground rules for any agent using this skill\n\n1. **Detect first; never assume the tool is present.** Each schema\n   below names the *probe command* that decides whether the\n   structured tool is installed on this host. Run the probe before\n   reading the schema's output as authoritative.\n2. **Prefer structured when present; fall back to manual when not.**\n   When the probe succeeds and the output validates against the\n   selected schema, the structured JSON is the source of truth. When\n   the probe fails or the output is invalid, walk the manual command\n   chain in the same schema section and synthesize the equivalent\n   answer.\n3. **Report which path you took.** Always tell the user at the\n   start of the answer: *\"using structured `\u003Chelper>` (path:\n   `\u003Cpath>`)\"* OR *\"falling back to manual chain (structured\n   `\u003Chelper>` probe failed: `\u003Creason>`)\"*, substituting the helper\n   selected by the schema and the actual probe failure. Never report\n   a helper different from the one the schema selected.\n4. **Schemas are locked here; per-skill overlays are NOT.** A\n   library \u002F service \u002F tool skill MAY add a per-skill row to its\n   own Command appendix that *uses* a schema; it MUST NOT redefine\n   the schema. If a schema needs to grow, the change happens here\n   first and every Command appendix that consumes it inherits the\n   change automatically.\n5. **Never invent a JSON field that is not in the schema.** The\n   structured tool's output is exactly the shape this contract\n   says it is. If the user pastes JSON that contains a field not in\n   the schema, treat the extra field as advisory and quote the\n   official schema as the boundary.\n6. **Schemas describe contracts, not implementations.** The\n   executables that satisfy these contracts are deferred to a\n   subsequent PR on the maintainer roadmap. This skill exists so\n   every other skill in the bundle can be *infra-aware* before the\n   executables ship.\n7. **Privilege is never implicit.** A manual fallback command that\n   requires `sudo` is emitted for the user to run or executed only\n   through an already approved privileged channel. Never silently\n   elevate merely because the structured helper was absent. Do not\n   assume such a channel exists; if it does not, ask the user to run\n   the command or report the privileged-data gap.\n\n## The agent behavior contract\n\nThe contract is a four-step loop the agent runs every time a skill's\nCommand appendix references this contract:\n\n1. **Detect.** Run the probe command listed in the schema section\n   for the relevant tool. Examples: `command -v doca-env`,\n   `test -f \u002Fopt\u002Fmellanox\u002Fdoca\u002Fshare\u002Fversion-matrix.json`,\n   `command -v doca-capability-snapshot`. Probes are read-only and\n   safe to run on any host. The executable helpers are deferred to\n   PR2, so until they ship, failed command probes are expected and\n   the manual chains are the operative path unless a helper was\n   installed separately.\n2. **Prefer.** If the probe succeeds, invoke the structured tool\n   and parse its JSON per the schema in [`## Schemas`](#schemas).\n   It is authoritative only when parsing succeeds and every required\n   field has the documented type. Malformed JSON, missing fields, or\n   type mismatches make the structured path fail: report that exact\n   validation failure and use step 3. Ignore unexpected extra fields\n   as advisory per ground rule 5; do not expose them as contract\n   output. Do NOT run the manual chain merely \"to double check\" valid\n   structured output — valid structured output replaces the chain.\n3. **Fall back.** If the probe fails, walk the manual command\n   chain documented in the same schema section. Synthesize the\n   answer by combining the manual command outputs in the order the\n   chain lists them. If a manual command is unavailable on the\n   host, surface that as a gap and route the user to the matching\n   skill (typically [`doca-setup`](..\u002Fdoca-setup\u002FSKILL.md)). If that\n   route cannot resolve the gap, name the missing commands or\n   artifacts, state that the consolidated answer cannot be completed,\n   and stop rather than presenting partial data as complete.\n4. **Report.** Open the answer with one of:\n   - *\"Using structured `\u003Ctool>` (path: `\u003Cpath>`).\"* — when the\n     probe succeeded and its output validated.\n   - *\"Falling back to manual chain (structured `\u003Ctool>` probe\n     failed: `\u003Creason>`).\"* — when the probe failed. Include the\n     actual probe command and failure reason; for `command -v`, note\n     that failure means the helper was not found on `PATH`, not that\n     it is definitively absent. Plus a one-line note pointing the\n     user at how to install the helpers when they become available.\n   - *\"Falling back to manual chain (`\u003Ctool>` output failed schema\n     validation: `\u003Creason>`).\"* — when the helper exists but its\n     output is malformed, missing required fields, or has invalid\n     field types.\n\nThe report step proves the agent tried the helper before falling back.\n\n## Schemas\n\nSelect the schema from the question shape: environment\u002Finstall state\nuses `doca-env`; capability minimum-version lookup uses\n`version-matrix`; per-device library capabilities use\n`capability-snapshot`; spec validation uses\n`validate-before-commit`; and a host-versus-DPU state comparison uses\nthe two collect-state schemas. When a per-skill Command appendix names\na schema, use that schema directly.\n\nEach subsection below names ONE structured tool the bundle expects\nto interoperate with, gives its detection probe, names its top-level\nJSON shape, and lists the manual command chain the agent walks when\nthe probe fails.\n\n### doca-env --json schema\n\n**Detection probe:** `command -v doca-env`. The structured tool, if\ninstalled, lives at the same `$PATH` location as `doca_caps` (i.e.\nunder the DOCA install tree's `bin\u002F`).\n\n**Top-level shape (JSON object):**\n\n| Field | Type | Notes |\n| --- | --- | --- |\n| `version` | object | `pkg_config` \u002F `applications_version` \u002F `doca_caps` \u002F `bfb` (string \\| null) \u002F `consistent` (bool) |\n| `devices` | array of object | one entry per visible PCIe function: `pcie_address` (e.g. `0000:03:00.0`), `kind` (`PF` \\| `VF` \\| `SF`), `name`, `representor_of` (string \\| null), `state` (`active` \\| `down` \\| `unknown`), `mtu` (number) |\n| `libraries` | array of object | one entry per public DOCA library: `pkg_config_name`, `installed` (bool), `pc_path` (string \\| null) |\n| `sample_paths` | array of object | one entry per library: `library`, `path` (the on-disk samples root) |\n| `drivers` | object | `mlx5_core_loaded` (bool), `mlx5_ib_loaded` (bool), `kernel_version` (string) |\n| `hugepages` | object | `available_2m` (number), `available_1g` (number), `mount_point` (string \\| null) |\n| `host_kind` | string | one of `host` \\| `bluefield` \\| `unknown` |\n| `bf_mode` | string \\| null | one of `smartnic` \\| `dpu` \\| `switch` \\| `null` (when `host_kind != bluefield`) |\n\n**Manual fallback chain** (run in order; combine the outputs to\nsynthesize the same answer):\n\n1. `pkg-config --modversion doca-common` → `version.pkg_config`\n2. `cat \u002Fopt\u002Fmellanox\u002Fdoca\u002Fapplications\u002FVERSION` → `version.applications_version`\n3. `doca_caps --version` → `version.doca_caps`\n4. `doca_caps --list-devs` → `devices` array (parse PCIe address + kind + representor)\n5. Find `doca-common.pc` first. If `find \u002Fopt\u002Fmellanox\u002Fdoca -name doca-common.pc -print -quit` returns empty, stop this row, surface the partial-install gap, and route to `doca-setup`; do not expand an empty directory glob. Otherwise derive `PCDIR` from that result and run `for pc in \"$PCDIR\"\u002F*.pc; do pkg-config --exists \"$(basename \"$pc\" .pc)\" && echo \"$pc\"; done` → `libraries` array. If `PCDIR` is not a directory or no module resolves through `pkg-config --exists`, surface that gap and route to `doca-setup`. `PCDIR` is commonly `\u002Fopt\u002Fmellanox\u002Fdoca\u002Flib\u002F\u003Carch>-linux-gnu\u002Fpkgconfig` on DOCA 3.3+, or `\u002Fopt\u002Fmellanox\u002Fdoca\u002Finfrastructure\u002Flib\u002Fpkgconfig` on legacy \u002F split-profile installs.\n6. `ls \u002Fopt\u002Fmellanox\u002Fdoca\u002Fsamples\u002F` → `sample_paths` array\n7. `lsmod | grep -E '^mlx5_(core|ib)'` and `uname -r` → `drivers` object\n8. `cat \u002Fproc\u002Fmeminfo | grep -i Huge` → `hugepages` object\n9. `dmidecode -s system-product-name` (or `cat \u002Fproc\u002Fdevice-tree\u002Fmodel` on BlueField) → `host_kind`\n10. `mlxconfig -d \u003Cpcie> q INTERNAL_CPU_MODEL` → `bf_mode` (when `host_kind == bluefield`)\n\n### version-matrix.json schema\n\n**Detection probe:** `test -f \u002Fopt\u002Fmellanox\u002Fdoca\u002Fshare\u002Fversion-matrix.json`.\nIf absent, use the manual fallback; do not guess another install path.\n\n**Top-level shape (JSON object):**\n\n| Field | Type | Notes |\n| --- | --- | --- |\n| `schema_version` | string | semver of THIS contract; bumps on schema changes |\n| `generated_at` | string | ISO-8601 timestamp of when the matrix was generated |\n| `entries` | array of object | one row per (library, capability) pair |\n\n**Per-entry shape:**\n\n| Field | Type | Notes |\n| --- | --- | --- |\n| `library` | string | `pkg-config` module name (`doca-flow`, `doca-rdma`, `doca-comch`, …) |\n| `capability` | string | machine-readable cap name; the per-library skill's Command appendix lists which `doca_\u003Clib>_cap_*` query this maps to |\n| `display_name` | string | human-readable label; the agent quotes this when reporting |\n| `min_doca_version` | string | first DOCA release in which the capability was available (semver) |\n| `max_doca_version` | string \\| null | last DOCA release in which the capability was available (null = still available) |\n| `source_url` | string | the public docs URL the row was derived from |\n| `source_quote` | string | the exact prose from the public docs that established the row |\n\n**Manual fallback chain:**\n\n1. Identify the library + capability the user asked about (via the\n   matching library skill's CAPABILITIES.md ## Capabilities and modes\n   table).\n2. Fetch the matching per-library doc page via\n   [`doca-public-knowledge-map`](..\u002Fdoca-public-knowledge-map\u002FSKILL.md).\n3. Search the page for the capability name; extract the *\"available\n   since\"* prose; quote it verbatim.\n4. Cross-check against `pkg-config --modversion doca-\u003Clibrary>` on\n   the user's host; if the installed version is older than the\n   *\"available since\"* line, the capability is not on this install\n   regardless of what the public docs say.\n\n### capability-snapshot schema\n\n**Detection probe:** `command -v doca-capability-snapshot`. The\nstructured tool, if installed, lives at the same `$PATH` location as\n`doca_caps`.\n\n**Top-level shape (JSON object):**\n\n| Field | Type | Notes |\n| --- | --- | --- |\n| `snapshot_at` | string | ISO-8601 timestamp |\n| `doca_version` | string | `doca_caps --version` at snapshot time |\n| `host_kind` | string | `host` \\| `bluefield` |\n| `devices` | array of object | one entry per `doca_devinfo`: `pcie_address`, `library_capabilities` (map of library → list of capability flags) |\n\n**Manual fallback chain:**\n\n1. `doca_caps --list-devs` → device enumeration\n2. For each device + each library of interest: invoke the\n   library-specific `doca_\u003Clib>_cap_*` query family from a small\n   test program by following the library's own `## test` workflow\n   and modifying its named shipped sample. Do not invent test code.\n\n### validate-before-commit schema\n\n**Detection probe:** `command -v doca-validate`. If that command is\nabsent, the structured helper is absent and the agent uses the manual\nfallback below. A library-specific constructor-time validation\nsurface is not a detection probe and may mutate state. For example,\nthe public Flow header at this release does not ship a separate\n`doca_flow_pipe_validate` symbol: never invent one and never use\n`doca_flow_pipe_create` as a read-only probe. The structured tool\nwraps only library-specific validation calls that are safe for its\ncontract and returns a uniform JSON result.\n\n**Top-level shape (JSON object):**\n\n| Field | Type | Notes |\n| --- | --- | --- |\n| `library` | string | which DOCA library the spec is for |\n| `spec_path` | string | path on disk to the spec being validated |\n| `result` | string | `pass` \\| `fail` \\| `skip` |\n| `checks` | array of object | per-check breakdown: `name`, `status` (`pass` \\| `fail` \\| `skip`), `details` (string), `remediation` (string \\| null) |\n\n**Manual fallback chain:**\n\n1. Find the library-specific validate surface in the matching skill's\n   `## test` workflow. For some libs this is a dedicated `_validate`\n   call. Constructor-time checks embedded in a mutating `_create`\n   call are not read-only validators. In particular,\n   `doca_flow_pipe_create` belongs to `doca-flow TASKS.md ## test`\n   after that skill's snapshot\u002Fsafety preconditions; do not invoke it\n   as a pre-commit probe. If the caller requires read-only validation\n   and the installed API exposes no dedicated validator, report\n   `result: skip` and route to the per-library `## test` workflow.\n2. Invoke it before any commit \u002F create \u002F submit call.\n3. Map validation outcomes deliberately: `DOCA_ERROR_INVALID_VALUE`\n   and `DOCA_ERROR_NOT_SUPPORTED` are `result: fail`. Permission,\n   transport, unavailable-device, and other operational errors are\n   `result: skip`, with the exact `doca_error_get_descr()` text and\n   remediation in a `checks` entry. Never turn an inability to run\n   validation into a claim that the spec itself failed.\n\n### collect-host-state and collect-dpu-state schemas\n\nSelect the helper for the side where commands execute: host uses\n`doca-collect-host-state`; BlueField uses `doca-collect-dpu-state`.\nThe presence of both binaries does not imply cross-side access. For a\ndiff, collect independently on each side and then compare the outputs.\n\n**Detection probes:** `command -v doca-collect-host-state` (run on\nthe host side) and `command -v doca-collect-dpu-state` (run on the\nBlueField side).\n\n**Top-level shape (JSON object), shared by both:**\n\n| Field | Type | Notes |\n| --- | --- | --- |\n| `side` | string | `host` \\| `dpu` |\n| `doca_version` | string | `doca_caps --version` |\n| `firmware_version` | string | output of `flint -d \u003Cpcie> q` (sudo) |\n| `kernel_version` | string | `uname -r` |\n| `mlx5_modules` | array of string | which `mlx5_*` modules are loaded |\n| `bf_mode` | string \\| null | `smartnic` \\| `dpu` \\| `switch` \\| null |\n| `devices` | array of object | per-PCIe-function record: `pcie_address`, `kind` (`PF` \\| `VF` \\| `SF`), `state`, `mtu`, `representor_of` |\n\n**Manual fallback chain (per side):**\n\n1. `doca_caps --version` → `doca_version`\n2. `uname -r` → `kernel_version`\n3. `lsmod | grep mlx5` → `mlx5_modules`\n4. `devlink dev show` + `lspci | grep Mellanox` + `ip -j link` →\n   enumerate the `devices` array and its PCIe addresses\n5. For each discovered target PCIe address, `flint -d \u003Cpcie> q`\n   through the approved privileged channel → `firmware_version`\n6. On a discovered BlueField target, `mlxconfig -d \u003Cpcie> q\n   INTERNAL_CPU_MODEL` → `bf_mode`\n\nThe two sides are deliberately symmetric so the agent can diff them\ntrivially when diagnosing host ↔ BlueField mismatches.\n\n## Relationship to PR2 executables\n\nThe schemas above describe **contracts**. The implementations that\nsatisfy each contract are deferred to a subsequent PR on the\nmaintainer roadmap.\n\nThis skill ships first so other skills can reference the contract\nwithout later retrofit when PR2 executables land.\n\nConcrete consequence for contributors writing a new library skill:\nwhen you build the Command appendix, do not duplicate the manual\nfallback chain — link to this skill's matching schema section and\nadd only the *per-library overlay*. For Flow, the public header at\nthis release has no separate `doca_flow_pipe_validate` symbol: do not\ninvent one or use `doca_flow_pipe_create` as this contract's read-only\npre-commit probe. Report `result: skip` and route to `doca-flow\nTASKS.md ## test`, where constructor-time checks may run only after\nthat workflow's snapshot and safety preconditions. The fallback chain\nitself lives here.\n\n## URL audit\n\nThis skill references the following external URLs. All MUST be\npublic and MUST resolve. The lint runs the URL check in CI.\n\n| URL | Owner | Last verified | DOCA version | Notes |\n| --- | --- | --- | --- | --- |\n| (none — this skill is a contract, the substantive URLs are owned by `doca-public-knowledge-map` and the per-library skills) | n\u002Fa | 2026-05-17 | 3.3.0 | The agent reaches public docs via `doca-public-knowledge-map`; this skill stays vendor-neutral on URLs |\n",{"data":32,"body":36},{"license":23,"name":4,"description":6,"metadata":33,"compatibility":35},{"kind":34},"knowledge","No DOCA install required to read this skill (it is an overlay loaded against any DOCA artifact skill); the validation steps within DO require a live DOCA install at \u002Fopt\u002Fmellanox\u002Fdoca.\n",{"type":37,"children":38},"root",[39,47,107,114,130,136,148,153,185,207,225,230,236,383,389,394,570,575,581,618,623,630,671,679,1150,1160,1429,1435,1450,1457,1544,1552,1758,1766,1820,1826,1854,1861,2003,2010,2043,2049,2081,2088,2259,2266,2383,2389,2410,2435,2443,2706,2714,2826,2831,2837,2849,2854,2894,2900,2905],{"type":40,"tag":41,"props":42,"children":43},"element","h1",{"id":4},[44],{"type":45,"value":46},"text","DOCA structured-tools contract",{"type":40,"tag":48,"props":49,"children":50},"p",{},[51,57,59,73,75,86,88,98,100,105],{"type":40,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":45,"value":56},"Where to start:",{"type":45,"value":58}," Reach for this skill whenever a workflow in\nanother skill says ",{"type":40,"tag":60,"props":61,"children":62},"em",{},[63,65,71],{"type":45,"value":64},"\"prefer the structured tool per\n",{"type":40,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":45,"value":4},{"type":45,"value":72},"\"",{"type":45,"value":74},". Read\n",{"type":40,"tag":76,"props":77,"children":79},"a",{"href":78},"#the-agent-behavior-contract",[80],{"type":40,"tag":66,"props":81,"children":83},{"className":82},[],[84],{"type":45,"value":85},"## The agent behavior contract",{"type":45,"value":87},"\nfirst; then drill into the matching schema in ",{"type":40,"tag":76,"props":89,"children":91},{"href":90},"#schemas",[92],{"type":40,"tag":66,"props":93,"children":95},{"className":94},[],[96],{"type":45,"value":97},"## Schemas",{"type":45,"value":99},".\nIf the host has the structured tool, prefer its output. If it does\nnot, fall back to the manual command chain in the same schema\nsection. ",{"type":40,"tag":52,"props":101,"children":102},{},[103],{"type":45,"value":104},"Always report which path was taken",{"type":45,"value":106}," so the user can fix\nthe gap (or so a future bundle update can detect that the structured\npath was never tried).",{"type":40,"tag":108,"props":109,"children":111},"h2",{"id":110},"example-questions-this-skill-answers-well",[112],{"type":45,"value":113},"Example questions this skill answers well",{"type":40,"tag":48,"props":115,"children":116},{},[117,119,128],{"type":45,"value":118},"See ",{"type":40,"tag":76,"props":120,"children":122},{"href":121},"references\u002Fexamples.md",[123],{"type":40,"tag":66,"props":124,"children":126},{"className":125},[],[127],{"type":45,"value":121},{"type":45,"value":129}," for the five\nworked routing examples. Keep this loader focused on detection,\nfallback behavior, and the authoritative schemas below.",{"type":40,"tag":108,"props":131,"children":133},{"id":132},"when-to-load-this-skill",[134],{"type":45,"value":135},"When to load this skill",{"type":40,"tag":48,"props":137,"children":138},{},[139,141,146],{"type":45,"value":140},"Load this skill whenever another skill's workflow tells the agent to\n",{"type":40,"tag":60,"props":142,"children":143},{},[144],{"type":45,"value":145},"prefer the structured tool",{"type":45,"value":147},", OR whenever the user's question implies\nthey want a single one-shot answer that consolidates information\nmultiple manual commands would otherwise produce.",{"type":40,"tag":48,"props":149,"children":150},{},[151],{"type":45,"value":152},"Concretely:",{"type":40,"tag":154,"props":155,"children":156},"ul",{},[157,163,168,173],{"type":40,"tag":158,"props":159,"children":160},"li",{},[161],{"type":45,"value":162},"A library \u002F service \u002F tool skill's Command appendix references\nthis skill in its first column.",{"type":40,"tag":158,"props":164,"children":165},{},[166],{"type":45,"value":167},"The user asks \"is there one command that tells me X about my DOCA\ninstall\" (env \u002F devices \u002F version \u002F capabilities \u002F hardware\ntopology).",{"type":40,"tag":158,"props":169,"children":170},{},[171],{"type":45,"value":172},"The user asks \"how do I know X is valid before I commit\" for\nany DOCA library that has a validate-before-commit call.",{"type":40,"tag":158,"props":174,"children":175},{},[176,178,183],{"type":45,"value":177},"The agent has computed the manual fallback answer and wants to\n",{"type":40,"tag":60,"props":179,"children":180},{},[181],{"type":45,"value":182},"also",{"type":45,"value":184}," surface the equivalent structured-tool one-liner so the\nuser can adopt it next time.",{"type":40,"tag":48,"props":186,"children":187},{},[188,190,195,197],{"type":45,"value":189},"Do ",{"type":40,"tag":52,"props":191,"children":192},{},[193],{"type":45,"value":194},"not",{"type":45,"value":196}," load this skill for general DOCA orientation, for\nspecific library API questions, or for install-from-scratch\nguidance. For those, use the matching library skill +\n",{"type":40,"tag":76,"props":198,"children":200},{"href":199},"..\u002Fdoca-public-knowledge-map\u002FSKILL.md",[201],{"type":40,"tag":66,"props":202,"children":204},{"className":203},[],[205],{"type":45,"value":206},"doca-public-knowledge-map",{"type":40,"tag":154,"props":208,"children":209},{},[210],{"type":40,"tag":158,"props":211,"children":212},{},[213,223],{"type":40,"tag":76,"props":214,"children":216},{"href":215},"..\u002Fdoca-setup\u002FSKILL.md",[217],{"type":40,"tag":66,"props":218,"children":220},{"className":219},[],[221],{"type":45,"value":222},"doca-setup",{"type":45,"value":224},".",{"type":40,"tag":48,"props":226,"children":227},{},[228],{"type":45,"value":229},"Running probes and fallbacks requires shell access to the target host,\neither directly by the agent or through commands the user runs.",{"type":40,"tag":108,"props":231,"children":233},{"id":232},"ground-rules-for-any-agent-using-this-skill",[234],{"type":45,"value":235},"Ground rules for any agent using this skill",{"type":40,"tag":237,"props":238,"children":239},"ol",{},[240,257,267,321,338,348,365],{"type":40,"tag":158,"props":241,"children":242},{},[243,248,250,255],{"type":40,"tag":52,"props":244,"children":245},{},[246],{"type":45,"value":247},"Detect first; never assume the tool is present.",{"type":45,"value":249}," Each schema\nbelow names the ",{"type":40,"tag":60,"props":251,"children":252},{},[253],{"type":45,"value":254},"probe command",{"type":45,"value":256}," that decides whether the\nstructured tool is installed on this host. Run the probe before\nreading the schema's output as authoritative.",{"type":40,"tag":158,"props":258,"children":259},{},[260,265],{"type":40,"tag":52,"props":261,"children":262},{},[263],{"type":45,"value":264},"Prefer structured when present; fall back to manual when not.",{"type":45,"value":266},"\nWhen the probe succeeds and the output validates against the\nselected schema, the structured JSON is the source of truth. When\nthe probe fails or the output is invalid, walk the manual command\nchain in the same schema section and synthesize the equivalent\nanswer.",{"type":40,"tag":158,"props":268,"children":269},{},[270,275,277,298,300,319],{"type":40,"tag":52,"props":271,"children":272},{},[273],{"type":45,"value":274},"Report which path you took.",{"type":45,"value":276}," Always tell the user at the\nstart of the answer: ",{"type":40,"tag":60,"props":278,"children":279},{},[280,282,288,290,296],{"type":45,"value":281},"\"using structured ",{"type":40,"tag":66,"props":283,"children":285},{"className":284},[],[286],{"type":45,"value":287},"\u003Chelper>",{"type":45,"value":289}," (path:\n",{"type":40,"tag":66,"props":291,"children":293},{"className":292},[],[294],{"type":45,"value":295},"\u003Cpath>",{"type":45,"value":297},")\"",{"type":45,"value":299}," OR ",{"type":40,"tag":60,"props":301,"children":302},{},[303,305,310,312,318],{"type":45,"value":304},"\"falling back to manual chain (structured\n",{"type":40,"tag":66,"props":306,"children":308},{"className":307},[],[309],{"type":45,"value":287},{"type":45,"value":311}," probe failed: ",{"type":40,"tag":66,"props":313,"children":315},{"className":314},[],[316],{"type":45,"value":317},"\u003Creason>",{"type":45,"value":297},{"type":45,"value":320},", substituting the helper\nselected by the schema and the actual probe failure. Never report\na helper different from the one the schema selected.",{"type":40,"tag":158,"props":322,"children":323},{},[324,329,331,336],{"type":40,"tag":52,"props":325,"children":326},{},[327],{"type":45,"value":328},"Schemas are locked here; per-skill overlays are NOT.",{"type":45,"value":330}," A\nlibrary \u002F service \u002F tool skill MAY add a per-skill row to its\nown Command appendix that ",{"type":40,"tag":60,"props":332,"children":333},{},[334],{"type":45,"value":335},"uses",{"type":45,"value":337}," a schema; it MUST NOT redefine\nthe schema. If a schema needs to grow, the change happens here\nfirst and every Command appendix that consumes it inherits the\nchange automatically.",{"type":40,"tag":158,"props":339,"children":340},{},[341,346],{"type":40,"tag":52,"props":342,"children":343},{},[344],{"type":45,"value":345},"Never invent a JSON field that is not in the schema.",{"type":45,"value":347}," The\nstructured tool's output is exactly the shape this contract\nsays it is. If the user pastes JSON that contains a field not in\nthe schema, treat the extra field as advisory and quote the\nofficial schema as the boundary.",{"type":40,"tag":158,"props":349,"children":350},{},[351,356,358,363],{"type":40,"tag":52,"props":352,"children":353},{},[354],{"type":45,"value":355},"Schemas describe contracts, not implementations.",{"type":45,"value":357}," The\nexecutables that satisfy these contracts are deferred to a\nsubsequent PR on the maintainer roadmap. This skill exists so\nevery other skill in the bundle can be ",{"type":40,"tag":60,"props":359,"children":360},{},[361],{"type":45,"value":362},"infra-aware",{"type":45,"value":364}," before the\nexecutables ship.",{"type":40,"tag":158,"props":366,"children":367},{},[368,373,375,381],{"type":40,"tag":52,"props":369,"children":370},{},[371],{"type":45,"value":372},"Privilege is never implicit.",{"type":45,"value":374}," A manual fallback command that\nrequires ",{"type":40,"tag":66,"props":376,"children":378},{"className":377},[],[379],{"type":45,"value":380},"sudo",{"type":45,"value":382}," is emitted for the user to run or executed only\nthrough an already approved privileged channel. Never silently\nelevate merely because the structured helper was absent. Do not\nassume such a channel exists; if it does not, ask the user to run\nthe command or report the privileged-data gap.",{"type":40,"tag":108,"props":384,"children":386},{"id":385},"the-agent-behavior-contract",[387],{"type":45,"value":388},"The agent behavior contract",{"type":40,"tag":48,"props":390,"children":391},{},[392],{"type":45,"value":393},"The contract is a four-step loop the agent runs every time a skill's\nCommand appendix references this contract:",{"type":40,"tag":237,"props":395,"children":396},{},[397,430,450,470],{"type":40,"tag":158,"props":398,"children":399},{},[400,405,407,413,415,421,422,428],{"type":40,"tag":52,"props":401,"children":402},{},[403],{"type":45,"value":404},"Detect.",{"type":45,"value":406}," Run the probe command listed in the schema section\nfor the relevant tool. Examples: ",{"type":40,"tag":66,"props":408,"children":410},{"className":409},[],[411],{"type":45,"value":412},"command -v doca-env",{"type":45,"value":414},",\n",{"type":40,"tag":66,"props":416,"children":418},{"className":417},[],[419],{"type":45,"value":420},"test -f \u002Fopt\u002Fmellanox\u002Fdoca\u002Fshare\u002Fversion-matrix.json",{"type":45,"value":414},{"type":40,"tag":66,"props":423,"children":425},{"className":424},[],[426],{"type":45,"value":427},"command -v doca-capability-snapshot",{"type":45,"value":429},". Probes are read-only and\nsafe to run on any host. The executable helpers are deferred to\nPR2, so until they ship, failed command probes are expected and\nthe manual chains are the operative path unless a helper was\ninstalled separately.",{"type":40,"tag":158,"props":431,"children":432},{},[433,438,440,448],{"type":40,"tag":52,"props":434,"children":435},{},[436],{"type":45,"value":437},"Prefer.",{"type":45,"value":439}," If the probe succeeds, invoke the structured tool\nand parse its JSON per the schema in ",{"type":40,"tag":76,"props":441,"children":442},{"href":90},[443],{"type":40,"tag":66,"props":444,"children":446},{"className":445},[],[447],{"type":45,"value":97},{"type":45,"value":449},".\nIt is authoritative only when parsing succeeds and every required\nfield has the documented type. Malformed JSON, missing fields, or\ntype mismatches make the structured path fail: report that exact\nvalidation failure and use step 3. Ignore unexpected extra fields\nas advisory per ground rule 5; do not expose them as contract\noutput. Do NOT run the manual chain merely \"to double check\" valid\nstructured output — valid structured output replaces the chain.",{"type":40,"tag":158,"props":451,"children":452},{},[453,458,460,468],{"type":40,"tag":52,"props":454,"children":455},{},[456],{"type":45,"value":457},"Fall back.",{"type":45,"value":459}," If the probe fails, walk the manual command\nchain documented in the same schema section. Synthesize the\nanswer by combining the manual command outputs in the order the\nchain lists them. If a manual command is unavailable on the\nhost, surface that as a gap and route the user to the matching\nskill (typically ",{"type":40,"tag":76,"props":461,"children":462},{"href":215},[463],{"type":40,"tag":66,"props":464,"children":466},{"className":465},[],[467],{"type":45,"value":222},{"type":45,"value":469},"). If that\nroute cannot resolve the gap, name the missing commands or\nartifacts, state that the consolidated answer cannot be completed,\nand stop rather than presenting partial data as complete.",{"type":40,"tag":158,"props":471,"children":472},{},[473,478,480],{"type":40,"tag":52,"props":474,"children":475},{},[476],{"type":45,"value":477},"Report.",{"type":45,"value":479}," Open the answer with one of:\n",{"type":40,"tag":154,"props":481,"children":482},{},[483,508,547],{"type":40,"tag":158,"props":484,"children":485},{},[486,506],{"type":40,"tag":60,"props":487,"children":488},{},[489,491,497,499,504],{"type":45,"value":490},"\"Using structured ",{"type":40,"tag":66,"props":492,"children":494},{"className":493},[],[495],{"type":45,"value":496},"\u003Ctool>",{"type":45,"value":498}," (path: ",{"type":40,"tag":66,"props":500,"children":502},{"className":501},[],[503],{"type":45,"value":295},{"type":45,"value":505},").\"",{"type":45,"value":507}," — when the\nprobe succeeded and its output validated.",{"type":40,"tag":158,"props":509,"children":510},{},[511,529,531,537,539,545],{"type":40,"tag":60,"props":512,"children":513},{},[514,516,521,523,528],{"type":45,"value":515},"\"Falling back to manual chain (structured ",{"type":40,"tag":66,"props":517,"children":519},{"className":518},[],[520],{"type":45,"value":496},{"type":45,"value":522}," probe\nfailed: ",{"type":40,"tag":66,"props":524,"children":526},{"className":525},[],[527],{"type":45,"value":317},{"type":45,"value":505},{"type":45,"value":530}," — when the probe failed. Include the\nactual probe command and failure reason; for ",{"type":40,"tag":66,"props":532,"children":534},{"className":533},[],[535],{"type":45,"value":536},"command -v",{"type":45,"value":538},", note\nthat failure means the helper was not found on ",{"type":40,"tag":66,"props":540,"children":542},{"className":541},[],[543],{"type":45,"value":544},"PATH",{"type":45,"value":546},", not that\nit is definitively absent. Plus a one-line note pointing the\nuser at how to install the helpers when they become available.",{"type":40,"tag":158,"props":548,"children":549},{},[550,568],{"type":40,"tag":60,"props":551,"children":552},{},[553,555,560,562,567],{"type":45,"value":554},"\"Falling back to manual chain (",{"type":40,"tag":66,"props":556,"children":558},{"className":557},[],[559],{"type":45,"value":496},{"type":45,"value":561}," output failed schema\nvalidation: ",{"type":40,"tag":66,"props":563,"children":565},{"className":564},[],[566],{"type":45,"value":317},{"type":45,"value":505},{"type":45,"value":569}," — when the helper exists but its\noutput is malformed, missing required fields, or has invalid\nfield types.",{"type":40,"tag":48,"props":571,"children":572},{},[573],{"type":45,"value":574},"The report step proves the agent tried the helper before falling back.",{"type":40,"tag":108,"props":576,"children":578},{"id":577},"schemas",[579],{"type":45,"value":580},"Schemas",{"type":40,"tag":48,"props":582,"children":583},{},[584,586,592,594,600,602,608,610,616],{"type":45,"value":585},"Select the schema from the question shape: environment\u002Finstall state\nuses ",{"type":40,"tag":66,"props":587,"children":589},{"className":588},[],[590],{"type":45,"value":591},"doca-env",{"type":45,"value":593},"; capability minimum-version lookup uses\n",{"type":40,"tag":66,"props":595,"children":597},{"className":596},[],[598],{"type":45,"value":599},"version-matrix",{"type":45,"value":601},"; per-device library capabilities use\n",{"type":40,"tag":66,"props":603,"children":605},{"className":604},[],[606],{"type":45,"value":607},"capability-snapshot",{"type":45,"value":609},"; spec validation uses\n",{"type":40,"tag":66,"props":611,"children":613},{"className":612},[],[614],{"type":45,"value":615},"validate-before-commit",{"type":45,"value":617},"; and a host-versus-DPU state comparison uses\nthe two collect-state schemas. When a per-skill Command appendix names\na schema, use that schema directly.",{"type":40,"tag":48,"props":619,"children":620},{},[621],{"type":45,"value":622},"Each subsection below names ONE structured tool the bundle expects\nto interoperate with, gives its detection probe, names its top-level\nJSON shape, and lists the manual command chain the agent walks when\nthe probe fails.",{"type":40,"tag":624,"props":625,"children":627},"h3",{"id":626},"doca-env-json-schema",[628],{"type":45,"value":629},"doca-env --json schema",{"type":40,"tag":48,"props":631,"children":632},{},[633,638,640,645,647,653,655,661,663,669],{"type":40,"tag":52,"props":634,"children":635},{},[636],{"type":45,"value":637},"Detection probe:",{"type":45,"value":639}," ",{"type":40,"tag":66,"props":641,"children":643},{"className":642},[],[644],{"type":45,"value":412},{"type":45,"value":646},". The structured tool, if\ninstalled, lives at the same ",{"type":40,"tag":66,"props":648,"children":650},{"className":649},[],[651],{"type":45,"value":652},"$PATH",{"type":45,"value":654}," location as ",{"type":40,"tag":66,"props":656,"children":658},{"className":657},[],[659],{"type":45,"value":660},"doca_caps",{"type":45,"value":662}," (i.e.\nunder the DOCA install tree's ",{"type":40,"tag":66,"props":664,"children":666},{"className":665},[],[667],{"type":45,"value":668},"bin\u002F",{"type":45,"value":670},").",{"type":40,"tag":48,"props":672,"children":673},{},[674],{"type":40,"tag":52,"props":675,"children":676},{},[677],{"type":45,"value":678},"Top-level shape (JSON object):",{"type":40,"tag":680,"props":681,"children":682},"table",{},[683,707],{"type":40,"tag":684,"props":685,"children":686},"thead",{},[687],{"type":40,"tag":688,"props":689,"children":690},"tr",{},[691,697,702],{"type":40,"tag":692,"props":693,"children":694},"th",{},[695],{"type":45,"value":696},"Field",{"type":40,"tag":692,"props":698,"children":699},{},[700],{"type":45,"value":701},"Type",{"type":40,"tag":692,"props":703,"children":704},{},[705],{"type":45,"value":706},"Notes",{"type":40,"tag":708,"props":709,"children":710},"tbody",{},[711,769,889,933,969,1010,1051,1092],{"type":40,"tag":688,"props":712,"children":713},{},[714,724,729],{"type":40,"tag":715,"props":716,"children":717},"td",{},[718],{"type":40,"tag":66,"props":719,"children":721},{"className":720},[],[722],{"type":45,"value":723},"version",{"type":40,"tag":715,"props":725,"children":726},{},[727],{"type":45,"value":728},"object",{"type":40,"tag":715,"props":730,"children":731},{},[732,738,740,746,747,752,753,759,761,767],{"type":40,"tag":66,"props":733,"children":735},{"className":734},[],[736],{"type":45,"value":737},"pkg_config",{"type":45,"value":739}," \u002F ",{"type":40,"tag":66,"props":741,"children":743},{"className":742},[],[744],{"type":45,"value":745},"applications_version",{"type":45,"value":739},{"type":40,"tag":66,"props":748,"children":750},{"className":749},[],[751],{"type":45,"value":660},{"type":45,"value":739},{"type":40,"tag":66,"props":754,"children":756},{"className":755},[],[757],{"type":45,"value":758},"bfb",{"type":45,"value":760}," (string | null) \u002F ",{"type":40,"tag":66,"props":762,"children":764},{"className":763},[],[765],{"type":45,"value":766},"consistent",{"type":45,"value":768}," (bool)",{"type":40,"tag":688,"props":770,"children":771},{},[772,781,786],{"type":40,"tag":715,"props":773,"children":774},{},[775],{"type":40,"tag":66,"props":776,"children":778},{"className":777},[],[779],{"type":45,"value":780},"devices",{"type":40,"tag":715,"props":782,"children":783},{},[784],{"type":45,"value":785},"array of object",{"type":40,"tag":715,"props":787,"children":788},{},[789,791,797,799,805,807,813,815,821,823,829,830,836,837,843,845,851,853,859,860,866,867,873,874,880,881,887],{"type":45,"value":790},"one entry per visible PCIe function: ",{"type":40,"tag":66,"props":792,"children":794},{"className":793},[],[795],{"type":45,"value":796},"pcie_address",{"type":45,"value":798}," (e.g. ",{"type":40,"tag":66,"props":800,"children":802},{"className":801},[],[803],{"type":45,"value":804},"0000:03:00.0",{"type":45,"value":806},"), ",{"type":40,"tag":66,"props":808,"children":810},{"className":809},[],[811],{"type":45,"value":812},"kind",{"type":45,"value":814}," (",{"type":40,"tag":66,"props":816,"children":818},{"className":817},[],[819],{"type":45,"value":820},"PF",{"type":45,"value":822}," | ",{"type":40,"tag":66,"props":824,"children":826},{"className":825},[],[827],{"type":45,"value":828},"VF",{"type":45,"value":822},{"type":40,"tag":66,"props":831,"children":833},{"className":832},[],[834],{"type":45,"value":835},"SF",{"type":45,"value":806},{"type":40,"tag":66,"props":838,"children":840},{"className":839},[],[841],{"type":45,"value":842},"name",{"type":45,"value":844},", ",{"type":40,"tag":66,"props":846,"children":848},{"className":847},[],[849],{"type":45,"value":850},"representor_of",{"type":45,"value":852}," (string | null), ",{"type":40,"tag":66,"props":854,"children":856},{"className":855},[],[857],{"type":45,"value":858},"state",{"type":45,"value":814},{"type":40,"tag":66,"props":861,"children":863},{"className":862},[],[864],{"type":45,"value":865},"active",{"type":45,"value":822},{"type":40,"tag":66,"props":868,"children":870},{"className":869},[],[871],{"type":45,"value":872},"down",{"type":45,"value":822},{"type":40,"tag":66,"props":875,"children":877},{"className":876},[],[878],{"type":45,"value":879},"unknown",{"type":45,"value":806},{"type":40,"tag":66,"props":882,"children":884},{"className":883},[],[885],{"type":45,"value":886},"mtu",{"type":45,"value":888}," (number)",{"type":40,"tag":688,"props":890,"children":891},{},[892,901,905],{"type":40,"tag":715,"props":893,"children":894},{},[895],{"type":40,"tag":66,"props":896,"children":898},{"className":897},[],[899],{"type":45,"value":900},"libraries",{"type":40,"tag":715,"props":902,"children":903},{},[904],{"type":45,"value":785},{"type":40,"tag":715,"props":906,"children":907},{},[908,910,916,917,923,925,931],{"type":45,"value":909},"one entry per public DOCA library: ",{"type":40,"tag":66,"props":911,"children":913},{"className":912},[],[914],{"type":45,"value":915},"pkg_config_name",{"type":45,"value":844},{"type":40,"tag":66,"props":918,"children":920},{"className":919},[],[921],{"type":45,"value":922},"installed",{"type":45,"value":924}," (bool), ",{"type":40,"tag":66,"props":926,"children":928},{"className":927},[],[929],{"type":45,"value":930},"pc_path",{"type":45,"value":932}," (string | null)",{"type":40,"tag":688,"props":934,"children":935},{},[936,945,949],{"type":40,"tag":715,"props":937,"children":938},{},[939],{"type":40,"tag":66,"props":940,"children":942},{"className":941},[],[943],{"type":45,"value":944},"sample_paths",{"type":40,"tag":715,"props":946,"children":947},{},[948],{"type":45,"value":785},{"type":40,"tag":715,"props":950,"children":951},{},[952,954,960,961,967],{"type":45,"value":953},"one entry per library: ",{"type":40,"tag":66,"props":955,"children":957},{"className":956},[],[958],{"type":45,"value":959},"library",{"type":45,"value":844},{"type":40,"tag":66,"props":962,"children":964},{"className":963},[],[965],{"type":45,"value":966},"path",{"type":45,"value":968}," (the on-disk samples root)",{"type":40,"tag":688,"props":970,"children":971},{},[972,981,985],{"type":40,"tag":715,"props":973,"children":974},{},[975],{"type":40,"tag":66,"props":976,"children":978},{"className":977},[],[979],{"type":45,"value":980},"drivers",{"type":40,"tag":715,"props":982,"children":983},{},[984],{"type":45,"value":728},{"type":40,"tag":715,"props":986,"children":987},{},[988,994,995,1001,1002,1008],{"type":40,"tag":66,"props":989,"children":991},{"className":990},[],[992],{"type":45,"value":993},"mlx5_core_loaded",{"type":45,"value":924},{"type":40,"tag":66,"props":996,"children":998},{"className":997},[],[999],{"type":45,"value":1000},"mlx5_ib_loaded",{"type":45,"value":924},{"type":40,"tag":66,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":45,"value":1007},"kernel_version",{"type":45,"value":1009}," (string)",{"type":40,"tag":688,"props":1011,"children":1012},{},[1013,1022,1026],{"type":40,"tag":715,"props":1014,"children":1015},{},[1016],{"type":40,"tag":66,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":45,"value":1021},"hugepages",{"type":40,"tag":715,"props":1023,"children":1024},{},[1025],{"type":45,"value":728},{"type":40,"tag":715,"props":1027,"children":1028},{},[1029,1035,1037,1043,1044,1050],{"type":40,"tag":66,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":45,"value":1034},"available_2m",{"type":45,"value":1036}," (number), ",{"type":40,"tag":66,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":45,"value":1042},"available_1g",{"type":45,"value":1036},{"type":40,"tag":66,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":45,"value":1049},"mount_point",{"type":45,"value":932},{"type":40,"tag":688,"props":1052,"children":1053},{},[1054,1063,1068],{"type":40,"tag":715,"props":1055,"children":1056},{},[1057],{"type":40,"tag":66,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":45,"value":1062},"host_kind",{"type":40,"tag":715,"props":1064,"children":1065},{},[1066],{"type":45,"value":1067},"string",{"type":40,"tag":715,"props":1069,"children":1070},{},[1071,1073,1079,1080,1086,1087],{"type":45,"value":1072},"one of ",{"type":40,"tag":66,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":45,"value":1078},"host",{"type":45,"value":822},{"type":40,"tag":66,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":45,"value":1085},"bluefield",{"type":45,"value":822},{"type":40,"tag":66,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":45,"value":879},{"type":40,"tag":688,"props":1093,"children":1094},{},[1095,1104,1109],{"type":40,"tag":715,"props":1096,"children":1097},{},[1098],{"type":40,"tag":66,"props":1099,"children":1101},{"className":1100},[],[1102],{"type":45,"value":1103},"bf_mode",{"type":40,"tag":715,"props":1105,"children":1106},{},[1107],{"type":45,"value":1108},"string | null",{"type":40,"tag":715,"props":1110,"children":1111},{},[1112,1113,1119,1120,1126,1127,1133,1134,1140,1142,1148],{"type":45,"value":1072},{"type":40,"tag":66,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":45,"value":1118},"smartnic",{"type":45,"value":822},{"type":40,"tag":66,"props":1121,"children":1123},{"className":1122},[],[1124],{"type":45,"value":1125},"dpu",{"type":45,"value":822},{"type":40,"tag":66,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":45,"value":1132},"switch",{"type":45,"value":822},{"type":40,"tag":66,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":45,"value":1139},"null",{"type":45,"value":1141}," (when ",{"type":40,"tag":66,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":45,"value":1147},"host_kind != bluefield",{"type":45,"value":1149},")",{"type":40,"tag":48,"props":1151,"children":1152},{},[1153,1158],{"type":40,"tag":52,"props":1154,"children":1155},{},[1156],{"type":45,"value":1157},"Manual fallback chain",{"type":45,"value":1159}," (run in order; combine the outputs to\nsynthesize the same answer):",{"type":40,"tag":237,"props":1161,"children":1162},{},[1163,1180,1196,1212,1229,1324,1341,1366,1382,1406],{"type":40,"tag":158,"props":1164,"children":1165},{},[1166,1172,1174],{"type":40,"tag":66,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":45,"value":1171},"pkg-config --modversion doca-common",{"type":45,"value":1173}," → ",{"type":40,"tag":66,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":45,"value":1179},"version.pkg_config",{"type":40,"tag":158,"props":1181,"children":1182},{},[1183,1189,1190],{"type":40,"tag":66,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":45,"value":1188},"cat \u002Fopt\u002Fmellanox\u002Fdoca\u002Fapplications\u002FVERSION",{"type":45,"value":1173},{"type":40,"tag":66,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":45,"value":1195},"version.applications_version",{"type":40,"tag":158,"props":1197,"children":1198},{},[1199,1205,1206],{"type":40,"tag":66,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":45,"value":1204},"doca_caps --version",{"type":45,"value":1173},{"type":40,"tag":66,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":45,"value":1211},"version.doca_caps",{"type":40,"tag":158,"props":1213,"children":1214},{},[1215,1221,1222,1227],{"type":40,"tag":66,"props":1216,"children":1218},{"className":1217},[],[1219],{"type":45,"value":1220},"doca_caps --list-devs",{"type":45,"value":1173},{"type":40,"tag":66,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":45,"value":780},{"type":45,"value":1228}," array (parse PCIe address + kind + representor)",{"type":40,"tag":158,"props":1230,"children":1231},{},[1232,1234,1240,1242,1248,1250,1255,1257,1263,1265,1271,1272,1277,1279,1284,1286,1292,1294,1299,1301,1306,1308,1314,1316,1322],{"type":45,"value":1233},"Find ",{"type":40,"tag":66,"props":1235,"children":1237},{"className":1236},[],[1238],{"type":45,"value":1239},"doca-common.pc",{"type":45,"value":1241}," first. If ",{"type":40,"tag":66,"props":1243,"children":1245},{"className":1244},[],[1246],{"type":45,"value":1247},"find \u002Fopt\u002Fmellanox\u002Fdoca -name doca-common.pc -print -quit",{"type":45,"value":1249}," returns empty, stop this row, surface the partial-install gap, and route to ",{"type":40,"tag":66,"props":1251,"children":1253},{"className":1252},[],[1254],{"type":45,"value":222},{"type":45,"value":1256},"; do not expand an empty directory glob. Otherwise derive ",{"type":40,"tag":66,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":45,"value":1262},"PCDIR",{"type":45,"value":1264}," from that result and run ",{"type":40,"tag":66,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":45,"value":1270},"for pc in \"$PCDIR\"\u002F*.pc; do pkg-config --exists \"$(basename \"$pc\" .pc)\" && echo \"$pc\"; done",{"type":45,"value":1173},{"type":40,"tag":66,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":45,"value":900},{"type":45,"value":1278}," array. If ",{"type":40,"tag":66,"props":1280,"children":1282},{"className":1281},[],[1283],{"type":45,"value":1262},{"type":45,"value":1285}," is not a directory or no module resolves through ",{"type":40,"tag":66,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":45,"value":1291},"pkg-config --exists",{"type":45,"value":1293},", surface that gap and route to ",{"type":40,"tag":66,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":45,"value":222},{"type":45,"value":1300},". ",{"type":40,"tag":66,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":45,"value":1262},{"type":45,"value":1307}," is commonly ",{"type":40,"tag":66,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":45,"value":1313},"\u002Fopt\u002Fmellanox\u002Fdoca\u002Flib\u002F\u003Carch>-linux-gnu\u002Fpkgconfig",{"type":45,"value":1315}," on DOCA 3.3+, or ",{"type":40,"tag":66,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":45,"value":1321},"\u002Fopt\u002Fmellanox\u002Fdoca\u002Finfrastructure\u002Flib\u002Fpkgconfig",{"type":45,"value":1323}," on legacy \u002F split-profile installs.",{"type":40,"tag":158,"props":1325,"children":1326},{},[1327,1333,1334,1339],{"type":40,"tag":66,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":45,"value":1332},"ls \u002Fopt\u002Fmellanox\u002Fdoca\u002Fsamples\u002F",{"type":45,"value":1173},{"type":40,"tag":66,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":45,"value":944},{"type":45,"value":1340}," array",{"type":40,"tag":158,"props":1342,"children":1343},{},[1344,1350,1352,1358,1359,1364],{"type":40,"tag":66,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":45,"value":1349},"lsmod | grep -E '^mlx5_(core|ib)'",{"type":45,"value":1351}," and ",{"type":40,"tag":66,"props":1353,"children":1355},{"className":1354},[],[1356],{"type":45,"value":1357},"uname -r",{"type":45,"value":1173},{"type":40,"tag":66,"props":1360,"children":1362},{"className":1361},[],[1363],{"type":45,"value":980},{"type":45,"value":1365}," object",{"type":40,"tag":158,"props":1367,"children":1368},{},[1369,1375,1376,1381],{"type":40,"tag":66,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":45,"value":1374},"cat \u002Fproc\u002Fmeminfo | grep -i Huge",{"type":45,"value":1173},{"type":40,"tag":66,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":45,"value":1021},{"type":45,"value":1365},{"type":40,"tag":158,"props":1383,"children":1384},{},[1385,1391,1393,1399,1401],{"type":40,"tag":66,"props":1386,"children":1388},{"className":1387},[],[1389],{"type":45,"value":1390},"dmidecode -s system-product-name",{"type":45,"value":1392}," (or ",{"type":40,"tag":66,"props":1394,"children":1396},{"className":1395},[],[1397],{"type":45,"value":1398},"cat \u002Fproc\u002Fdevice-tree\u002Fmodel",{"type":45,"value":1400}," on BlueField) → ",{"type":40,"tag":66,"props":1402,"children":1404},{"className":1403},[],[1405],{"type":45,"value":1062},{"type":40,"tag":158,"props":1407,"children":1408},{},[1409,1415,1416,1421,1422,1428],{"type":40,"tag":66,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":45,"value":1414},"mlxconfig -d \u003Cpcie> q INTERNAL_CPU_MODEL",{"type":45,"value":1173},{"type":40,"tag":66,"props":1417,"children":1419},{"className":1418},[],[1420],{"type":45,"value":1103},{"type":45,"value":1141},{"type":40,"tag":66,"props":1423,"children":1425},{"className":1424},[],[1426],{"type":45,"value":1427},"host_kind == bluefield",{"type":45,"value":1149},{"type":40,"tag":624,"props":1430,"children":1432},{"id":1431},"version-matrixjson-schema",[1433],{"type":45,"value":1434},"version-matrix.json schema",{"type":40,"tag":48,"props":1436,"children":1437},{},[1438,1442,1443,1448],{"type":40,"tag":52,"props":1439,"children":1440},{},[1441],{"type":45,"value":637},{"type":45,"value":639},{"type":40,"tag":66,"props":1444,"children":1446},{"className":1445},[],[1447],{"type":45,"value":420},{"type":45,"value":1449},".\nIf absent, use the manual fallback; do not guess another install path.",{"type":40,"tag":48,"props":1451,"children":1452},{},[1453],{"type":40,"tag":52,"props":1454,"children":1455},{},[1456],{"type":45,"value":678},{"type":40,"tag":680,"props":1458,"children":1459},{},[1460,1478],{"type":40,"tag":684,"props":1461,"children":1462},{},[1463],{"type":40,"tag":688,"props":1464,"children":1465},{},[1466,1470,1474],{"type":40,"tag":692,"props":1467,"children":1468},{},[1469],{"type":45,"value":696},{"type":40,"tag":692,"props":1471,"children":1472},{},[1473],{"type":45,"value":701},{"type":40,"tag":692,"props":1475,"children":1476},{},[1477],{"type":45,"value":706},{"type":40,"tag":708,"props":1479,"children":1480},{},[1481,1502,1523],{"type":40,"tag":688,"props":1482,"children":1483},{},[1484,1493,1497],{"type":40,"tag":715,"props":1485,"children":1486},{},[1487],{"type":40,"tag":66,"props":1488,"children":1490},{"className":1489},[],[1491],{"type":45,"value":1492},"schema_version",{"type":40,"tag":715,"props":1494,"children":1495},{},[1496],{"type":45,"value":1067},{"type":40,"tag":715,"props":1498,"children":1499},{},[1500],{"type":45,"value":1501},"semver of THIS contract; bumps on schema changes",{"type":40,"tag":688,"props":1503,"children":1504},{},[1505,1514,1518],{"type":40,"tag":715,"props":1506,"children":1507},{},[1508],{"type":40,"tag":66,"props":1509,"children":1511},{"className":1510},[],[1512],{"type":45,"value":1513},"generated_at",{"type":40,"tag":715,"props":1515,"children":1516},{},[1517],{"type":45,"value":1067},{"type":40,"tag":715,"props":1519,"children":1520},{},[1521],{"type":45,"value":1522},"ISO-8601 timestamp of when the matrix was generated",{"type":40,"tag":688,"props":1524,"children":1525},{},[1526,1535,1539],{"type":40,"tag":715,"props":1527,"children":1528},{},[1529],{"type":40,"tag":66,"props":1530,"children":1532},{"className":1531},[],[1533],{"type":45,"value":1534},"entries",{"type":40,"tag":715,"props":1536,"children":1537},{},[1538],{"type":45,"value":785},{"type":40,"tag":715,"props":1540,"children":1541},{},[1542],{"type":45,"value":1543},"one row per (library, capability) pair",{"type":40,"tag":48,"props":1545,"children":1546},{},[1547],{"type":40,"tag":52,"props":1548,"children":1549},{},[1550],{"type":45,"value":1551},"Per-entry shape:",{"type":40,"tag":680,"props":1553,"children":1554},{},[1555,1573],{"type":40,"tag":684,"props":1556,"children":1557},{},[1558],{"type":40,"tag":688,"props":1559,"children":1560},{},[1561,1565,1569],{"type":40,"tag":692,"props":1562,"children":1563},{},[1564],{"type":45,"value":696},{"type":40,"tag":692,"props":1566,"children":1567},{},[1568],{"type":45,"value":701},{"type":40,"tag":692,"props":1570,"children":1571},{},[1572],{"type":45,"value":706},{"type":40,"tag":708,"props":1574,"children":1575},{},[1576,1624,1653,1674,1695,1716,1737],{"type":40,"tag":688,"props":1577,"children":1578},{},[1579,1587,1591],{"type":40,"tag":715,"props":1580,"children":1581},{},[1582],{"type":40,"tag":66,"props":1583,"children":1585},{"className":1584},[],[1586],{"type":45,"value":959},{"type":40,"tag":715,"props":1588,"children":1589},{},[1590],{"type":45,"value":1067},{"type":40,"tag":715,"props":1592,"children":1593},{},[1594,1600,1602,1608,1609,1615,1616,1622],{"type":40,"tag":66,"props":1595,"children":1597},{"className":1596},[],[1598],{"type":45,"value":1599},"pkg-config",{"type":45,"value":1601}," module name (",{"type":40,"tag":66,"props":1603,"children":1605},{"className":1604},[],[1606],{"type":45,"value":1607},"doca-flow",{"type":45,"value":844},{"type":40,"tag":66,"props":1610,"children":1612},{"className":1611},[],[1613],{"type":45,"value":1614},"doca-rdma",{"type":45,"value":844},{"type":40,"tag":66,"props":1617,"children":1619},{"className":1618},[],[1620],{"type":45,"value":1621},"doca-comch",{"type":45,"value":1623},", …)",{"type":40,"tag":688,"props":1625,"children":1626},{},[1627,1636,1640],{"type":40,"tag":715,"props":1628,"children":1629},{},[1630],{"type":40,"tag":66,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":45,"value":1635},"capability",{"type":40,"tag":715,"props":1637,"children":1638},{},[1639],{"type":45,"value":1067},{"type":40,"tag":715,"props":1641,"children":1642},{},[1643,1645,1651],{"type":45,"value":1644},"machine-readable cap name; the per-library skill's Command appendix lists which ",{"type":40,"tag":66,"props":1646,"children":1648},{"className":1647},[],[1649],{"type":45,"value":1650},"doca_\u003Clib>_cap_*",{"type":45,"value":1652}," query this maps to",{"type":40,"tag":688,"props":1654,"children":1655},{},[1656,1665,1669],{"type":40,"tag":715,"props":1657,"children":1658},{},[1659],{"type":40,"tag":66,"props":1660,"children":1662},{"className":1661},[],[1663],{"type":45,"value":1664},"display_name",{"type":40,"tag":715,"props":1666,"children":1667},{},[1668],{"type":45,"value":1067},{"type":40,"tag":715,"props":1670,"children":1671},{},[1672],{"type":45,"value":1673},"human-readable label; the agent quotes this when reporting",{"type":40,"tag":688,"props":1675,"children":1676},{},[1677,1686,1690],{"type":40,"tag":715,"props":1678,"children":1679},{},[1680],{"type":40,"tag":66,"props":1681,"children":1683},{"className":1682},[],[1684],{"type":45,"value":1685},"min_doca_version",{"type":40,"tag":715,"props":1687,"children":1688},{},[1689],{"type":45,"value":1067},{"type":40,"tag":715,"props":1691,"children":1692},{},[1693],{"type":45,"value":1694},"first DOCA release in which the capability was available (semver)",{"type":40,"tag":688,"props":1696,"children":1697},{},[1698,1707,1711],{"type":40,"tag":715,"props":1699,"children":1700},{},[1701],{"type":40,"tag":66,"props":1702,"children":1704},{"className":1703},[],[1705],{"type":45,"value":1706},"max_doca_version",{"type":40,"tag":715,"props":1708,"children":1709},{},[1710],{"type":45,"value":1108},{"type":40,"tag":715,"props":1712,"children":1713},{},[1714],{"type":45,"value":1715},"last DOCA release in which the capability was available (null = still available)",{"type":40,"tag":688,"props":1717,"children":1718},{},[1719,1728,1732],{"type":40,"tag":715,"props":1720,"children":1721},{},[1722],{"type":40,"tag":66,"props":1723,"children":1725},{"className":1724},[],[1726],{"type":45,"value":1727},"source_url",{"type":40,"tag":715,"props":1729,"children":1730},{},[1731],{"type":45,"value":1067},{"type":40,"tag":715,"props":1733,"children":1734},{},[1735],{"type":45,"value":1736},"the public docs URL the row was derived from",{"type":40,"tag":688,"props":1738,"children":1739},{},[1740,1749,1753],{"type":40,"tag":715,"props":1741,"children":1742},{},[1743],{"type":40,"tag":66,"props":1744,"children":1746},{"className":1745},[],[1747],{"type":45,"value":1748},"source_quote",{"type":40,"tag":715,"props":1750,"children":1751},{},[1752],{"type":45,"value":1067},{"type":40,"tag":715,"props":1754,"children":1755},{},[1756],{"type":45,"value":1757},"the exact prose from the public docs that established the row",{"type":40,"tag":48,"props":1759,"children":1760},{},[1761],{"type":40,"tag":52,"props":1762,"children":1763},{},[1764],{"type":45,"value":1765},"Manual fallback chain:",{"type":40,"tag":237,"props":1767,"children":1768},{},[1769,1774,1788,1800],{"type":40,"tag":158,"props":1770,"children":1771},{},[1772],{"type":45,"value":1773},"Identify the library + capability the user asked about (via the\nmatching library skill's CAPABILITIES.md ## Capabilities and modes\ntable).",{"type":40,"tag":158,"props":1775,"children":1776},{},[1777,1779,1787],{"type":45,"value":1778},"Fetch the matching per-library doc page via\n",{"type":40,"tag":76,"props":1780,"children":1781},{"href":199},[1782],{"type":40,"tag":66,"props":1783,"children":1785},{"className":1784},[],[1786],{"type":45,"value":206},{"type":45,"value":224},{"type":40,"tag":158,"props":1789,"children":1790},{},[1791,1793,1798],{"type":45,"value":1792},"Search the page for the capability name; extract the ",{"type":40,"tag":60,"props":1794,"children":1795},{},[1796],{"type":45,"value":1797},"\"available\nsince\"",{"type":45,"value":1799}," prose; quote it verbatim.",{"type":40,"tag":158,"props":1801,"children":1802},{},[1803,1805,1811,1813,1818],{"type":45,"value":1804},"Cross-check against ",{"type":40,"tag":66,"props":1806,"children":1808},{"className":1807},[],[1809],{"type":45,"value":1810},"pkg-config --modversion doca-\u003Clibrary>",{"type":45,"value":1812}," on\nthe user's host; if the installed version is older than the\n",{"type":40,"tag":60,"props":1814,"children":1815},{},[1816],{"type":45,"value":1817},"\"available since\"",{"type":45,"value":1819}," line, the capability is not on this install\nregardless of what the public docs say.",{"type":40,"tag":624,"props":1821,"children":1823},{"id":1822},"capability-snapshot-schema",[1824],{"type":45,"value":1825},"capability-snapshot schema",{"type":40,"tag":48,"props":1827,"children":1828},{},[1829,1833,1834,1839,1841,1846,1848,1853],{"type":40,"tag":52,"props":1830,"children":1831},{},[1832],{"type":45,"value":637},{"type":45,"value":639},{"type":40,"tag":66,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":45,"value":427},{"type":45,"value":1840},". The\nstructured tool, if installed, lives at the same ",{"type":40,"tag":66,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":45,"value":652},{"type":45,"value":1847}," location as\n",{"type":40,"tag":66,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":45,"value":660},{"type":45,"value":224},{"type":40,"tag":48,"props":1855,"children":1856},{},[1857],{"type":40,"tag":52,"props":1858,"children":1859},{},[1860],{"type":45,"value":678},{"type":40,"tag":680,"props":1862,"children":1863},{},[1864,1882],{"type":40,"tag":684,"props":1865,"children":1866},{},[1867],{"type":40,"tag":688,"props":1868,"children":1869},{},[1870,1874,1878],{"type":40,"tag":692,"props":1871,"children":1872},{},[1873],{"type":45,"value":696},{"type":40,"tag":692,"props":1875,"children":1876},{},[1877],{"type":45,"value":701},{"type":40,"tag":692,"props":1879,"children":1880},{},[1881],{"type":45,"value":706},{"type":40,"tag":708,"props":1883,"children":1884},{},[1885,1906,1932,1961],{"type":40,"tag":688,"props":1886,"children":1887},{},[1888,1897,1901],{"type":40,"tag":715,"props":1889,"children":1890},{},[1891],{"type":40,"tag":66,"props":1892,"children":1894},{"className":1893},[],[1895],{"type":45,"value":1896},"snapshot_at",{"type":40,"tag":715,"props":1898,"children":1899},{},[1900],{"type":45,"value":1067},{"type":40,"tag":715,"props":1902,"children":1903},{},[1904],{"type":45,"value":1905},"ISO-8601 timestamp",{"type":40,"tag":688,"props":1907,"children":1908},{},[1909,1918,1922],{"type":40,"tag":715,"props":1910,"children":1911},{},[1912],{"type":40,"tag":66,"props":1913,"children":1915},{"className":1914},[],[1916],{"type":45,"value":1917},"doca_version",{"type":40,"tag":715,"props":1919,"children":1920},{},[1921],{"type":45,"value":1067},{"type":40,"tag":715,"props":1923,"children":1924},{},[1925,1930],{"type":40,"tag":66,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":45,"value":1204},{"type":45,"value":1931}," at snapshot time",{"type":40,"tag":688,"props":1933,"children":1934},{},[1935,1943,1947],{"type":40,"tag":715,"props":1936,"children":1937},{},[1938],{"type":40,"tag":66,"props":1939,"children":1941},{"className":1940},[],[1942],{"type":45,"value":1062},{"type":40,"tag":715,"props":1944,"children":1945},{},[1946],{"type":45,"value":1067},{"type":40,"tag":715,"props":1948,"children":1949},{},[1950,1955,1956],{"type":40,"tag":66,"props":1951,"children":1953},{"className":1952},[],[1954],{"type":45,"value":1078},{"type":45,"value":822},{"type":40,"tag":66,"props":1957,"children":1959},{"className":1958},[],[1960],{"type":45,"value":1085},{"type":40,"tag":688,"props":1962,"children":1963},{},[1964,1972,1976],{"type":40,"tag":715,"props":1965,"children":1966},{},[1967],{"type":40,"tag":66,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":45,"value":780},{"type":40,"tag":715,"props":1973,"children":1974},{},[1975],{"type":45,"value":785},{"type":40,"tag":715,"props":1977,"children":1978},{},[1979,1981,1987,1989,1994,1995,2001],{"type":45,"value":1980},"one entry per ",{"type":40,"tag":66,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":45,"value":1986},"doca_devinfo",{"type":45,"value":1988},": ",{"type":40,"tag":66,"props":1990,"children":1992},{"className":1991},[],[1993],{"type":45,"value":796},{"type":45,"value":844},{"type":40,"tag":66,"props":1996,"children":1998},{"className":1997},[],[1999],{"type":45,"value":2000},"library_capabilities",{"type":45,"value":2002}," (map of library → list of capability flags)",{"type":40,"tag":48,"props":2004,"children":2005},{},[2006],{"type":40,"tag":52,"props":2007,"children":2008},{},[2009],{"type":45,"value":1765},{"type":40,"tag":237,"props":2011,"children":2012},{},[2013,2023],{"type":40,"tag":158,"props":2014,"children":2015},{},[2016,2021],{"type":40,"tag":66,"props":2017,"children":2019},{"className":2018},[],[2020],{"type":45,"value":1220},{"type":45,"value":2022}," → device enumeration",{"type":40,"tag":158,"props":2024,"children":2025},{},[2026,2028,2033,2035,2041],{"type":45,"value":2027},"For each device + each library of interest: invoke the\nlibrary-specific ",{"type":40,"tag":66,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":45,"value":1650},{"type":45,"value":2034}," query family from a small\ntest program by following the library's own ",{"type":40,"tag":66,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":45,"value":2040},"## test",{"type":45,"value":2042}," workflow\nand modifying its named shipped sample. Do not invent test code.",{"type":40,"tag":624,"props":2044,"children":2046},{"id":2045},"validate-before-commit-schema",[2047],{"type":45,"value":2048},"validate-before-commit schema",{"type":40,"tag":48,"props":2050,"children":2051},{},[2052,2056,2057,2063,2065,2071,2073,2079],{"type":40,"tag":52,"props":2053,"children":2054},{},[2055],{"type":45,"value":637},{"type":45,"value":639},{"type":40,"tag":66,"props":2058,"children":2060},{"className":2059},[],[2061],{"type":45,"value":2062},"command -v doca-validate",{"type":45,"value":2064},". If that command is\nabsent, the structured helper is absent and the agent uses the manual\nfallback below. A library-specific constructor-time validation\nsurface is not a detection probe and may mutate state. For example,\nthe public Flow header at this release does not ship a separate\n",{"type":40,"tag":66,"props":2066,"children":2068},{"className":2067},[],[2069],{"type":45,"value":2070},"doca_flow_pipe_validate",{"type":45,"value":2072}," symbol: never invent one and never use\n",{"type":40,"tag":66,"props":2074,"children":2076},{"className":2075},[],[2077],{"type":45,"value":2078},"doca_flow_pipe_create",{"type":45,"value":2080}," as a read-only probe. The structured tool\nwraps only library-specific validation calls that are safe for its\ncontract and returns a uniform JSON result.",{"type":40,"tag":48,"props":2082,"children":2083},{},[2084],{"type":40,"tag":52,"props":2085,"children":2086},{},[2087],{"type":45,"value":678},{"type":40,"tag":680,"props":2089,"children":2090},{},[2091,2109],{"type":40,"tag":684,"props":2092,"children":2093},{},[2094],{"type":40,"tag":688,"props":2095,"children":2096},{},[2097,2101,2105],{"type":40,"tag":692,"props":2098,"children":2099},{},[2100],{"type":45,"value":696},{"type":40,"tag":692,"props":2102,"children":2103},{},[2104],{"type":45,"value":701},{"type":40,"tag":692,"props":2106,"children":2107},{},[2108],{"type":45,"value":706},{"type":40,"tag":708,"props":2110,"children":2111},{},[2112,2132,2153,2192],{"type":40,"tag":688,"props":2113,"children":2114},{},[2115,2123,2127],{"type":40,"tag":715,"props":2116,"children":2117},{},[2118],{"type":40,"tag":66,"props":2119,"children":2121},{"className":2120},[],[2122],{"type":45,"value":959},{"type":40,"tag":715,"props":2124,"children":2125},{},[2126],{"type":45,"value":1067},{"type":40,"tag":715,"props":2128,"children":2129},{},[2130],{"type":45,"value":2131},"which DOCA library the spec is for",{"type":40,"tag":688,"props":2133,"children":2134},{},[2135,2144,2148],{"type":40,"tag":715,"props":2136,"children":2137},{},[2138],{"type":40,"tag":66,"props":2139,"children":2141},{"className":2140},[],[2142],{"type":45,"value":2143},"spec_path",{"type":40,"tag":715,"props":2145,"children":2146},{},[2147],{"type":45,"value":1067},{"type":40,"tag":715,"props":2149,"children":2150},{},[2151],{"type":45,"value":2152},"path on disk to the spec being validated",{"type":40,"tag":688,"props":2154,"children":2155},{},[2156,2165,2169],{"type":40,"tag":715,"props":2157,"children":2158},{},[2159],{"type":40,"tag":66,"props":2160,"children":2162},{"className":2161},[],[2163],{"type":45,"value":2164},"result",{"type":40,"tag":715,"props":2166,"children":2167},{},[2168],{"type":45,"value":1067},{"type":40,"tag":715,"props":2170,"children":2171},{},[2172,2178,2179,2185,2186],{"type":40,"tag":66,"props":2173,"children":2175},{"className":2174},[],[2176],{"type":45,"value":2177},"pass",{"type":45,"value":822},{"type":40,"tag":66,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":45,"value":2184},"fail",{"type":45,"value":822},{"type":40,"tag":66,"props":2187,"children":2189},{"className":2188},[],[2190],{"type":45,"value":2191},"skip",{"type":40,"tag":688,"props":2193,"children":2194},{},[2195,2204,2208],{"type":40,"tag":715,"props":2196,"children":2197},{},[2198],{"type":40,"tag":66,"props":2199,"children":2201},{"className":2200},[],[2202],{"type":45,"value":2203},"checks",{"type":40,"tag":715,"props":2205,"children":2206},{},[2207],{"type":45,"value":785},{"type":40,"tag":715,"props":2209,"children":2210},{},[2211,2213,2218,2219,2225,2226,2231,2232,2237,2238,2243,2244,2250,2252,2258],{"type":45,"value":2212},"per-check breakdown: ",{"type":40,"tag":66,"props":2214,"children":2216},{"className":2215},[],[2217],{"type":45,"value":842},{"type":45,"value":844},{"type":40,"tag":66,"props":2220,"children":2222},{"className":2221},[],[2223],{"type":45,"value":2224},"status",{"type":45,"value":814},{"type":40,"tag":66,"props":2227,"children":2229},{"className":2228},[],[2230],{"type":45,"value":2177},{"type":45,"value":822},{"type":40,"tag":66,"props":2233,"children":2235},{"className":2234},[],[2236],{"type":45,"value":2184},{"type":45,"value":822},{"type":40,"tag":66,"props":2239,"children":2241},{"className":2240},[],[2242],{"type":45,"value":2191},{"type":45,"value":806},{"type":40,"tag":66,"props":2245,"children":2247},{"className":2246},[],[2248],{"type":45,"value":2249},"details",{"type":45,"value":2251}," (string), ",{"type":40,"tag":66,"props":2253,"children":2255},{"className":2254},[],[2256],{"type":45,"value":2257},"remediation",{"type":45,"value":932},{"type":40,"tag":48,"props":2260,"children":2261},{},[2262],{"type":40,"tag":52,"props":2263,"children":2264},{},[2265],{"type":45,"value":1765},{"type":40,"tag":237,"props":2267,"children":2268},{},[2269,2327,2332],{"type":40,"tag":158,"props":2270,"children":2271},{},[2272,2274,2279,2281,2287,2289,2295,2297,2302,2304,2310,2312,2318,2320,2325],{"type":45,"value":2273},"Find the library-specific validate surface in the matching skill's\n",{"type":40,"tag":66,"props":2275,"children":2277},{"className":2276},[],[2278],{"type":45,"value":2040},{"type":45,"value":2280}," workflow. For some libs this is a dedicated ",{"type":40,"tag":66,"props":2282,"children":2284},{"className":2283},[],[2285],{"type":45,"value":2286},"_validate",{"type":45,"value":2288},"\ncall. Constructor-time checks embedded in a mutating ",{"type":40,"tag":66,"props":2290,"children":2292},{"className":2291},[],[2293],{"type":45,"value":2294},"_create",{"type":45,"value":2296},"\ncall are not read-only validators. In particular,\n",{"type":40,"tag":66,"props":2298,"children":2300},{"className":2299},[],[2301],{"type":45,"value":2078},{"type":45,"value":2303}," belongs to ",{"type":40,"tag":66,"props":2305,"children":2307},{"className":2306},[],[2308],{"type":45,"value":2309},"doca-flow TASKS.md ## test",{"type":45,"value":2311},"\nafter that skill's snapshot\u002Fsafety preconditions; do not invoke it\nas a pre-commit probe. If the caller requires read-only validation\nand the installed API exposes no dedicated validator, report\n",{"type":40,"tag":66,"props":2313,"children":2315},{"className":2314},[],[2316],{"type":45,"value":2317},"result: skip",{"type":45,"value":2319}," and route to the per-library ",{"type":40,"tag":66,"props":2321,"children":2323},{"className":2322},[],[2324],{"type":45,"value":2040},{"type":45,"value":2326}," workflow.",{"type":40,"tag":158,"props":2328,"children":2329},{},[2330],{"type":45,"value":2331},"Invoke it before any commit \u002F create \u002F submit call.",{"type":40,"tag":158,"props":2333,"children":2334},{},[2335,2337,2343,2345,2351,2353,2359,2361,2366,2368,2374,2376,2381],{"type":45,"value":2336},"Map validation outcomes deliberately: ",{"type":40,"tag":66,"props":2338,"children":2340},{"className":2339},[],[2341],{"type":45,"value":2342},"DOCA_ERROR_INVALID_VALUE",{"type":45,"value":2344},"\nand ",{"type":40,"tag":66,"props":2346,"children":2348},{"className":2347},[],[2349],{"type":45,"value":2350},"DOCA_ERROR_NOT_SUPPORTED",{"type":45,"value":2352}," are ",{"type":40,"tag":66,"props":2354,"children":2356},{"className":2355},[],[2357],{"type":45,"value":2358},"result: fail",{"type":45,"value":2360},". Permission,\ntransport, unavailable-device, and other operational errors are\n",{"type":40,"tag":66,"props":2362,"children":2364},{"className":2363},[],[2365],{"type":45,"value":2317},{"type":45,"value":2367},", with the exact ",{"type":40,"tag":66,"props":2369,"children":2371},{"className":2370},[],[2372],{"type":45,"value":2373},"doca_error_get_descr()",{"type":45,"value":2375}," text and\nremediation in a ",{"type":40,"tag":66,"props":2377,"children":2379},{"className":2378},[],[2380],{"type":45,"value":2203},{"type":45,"value":2382}," entry. Never turn an inability to run\nvalidation into a claim that the spec itself failed.",{"type":40,"tag":624,"props":2384,"children":2386},{"id":2385},"collect-host-state-and-collect-dpu-state-schemas",[2387],{"type":45,"value":2388},"collect-host-state and collect-dpu-state schemas",{"type":40,"tag":48,"props":2390,"children":2391},{},[2392,2394,2400,2402,2408],{"type":45,"value":2393},"Select the helper for the side where commands execute: host uses\n",{"type":40,"tag":66,"props":2395,"children":2397},{"className":2396},[],[2398],{"type":45,"value":2399},"doca-collect-host-state",{"type":45,"value":2401},"; BlueField uses ",{"type":40,"tag":66,"props":2403,"children":2405},{"className":2404},[],[2406],{"type":45,"value":2407},"doca-collect-dpu-state",{"type":45,"value":2409},".\nThe presence of both binaries does not imply cross-side access. For a\ndiff, collect independently on each side and then compare the outputs.",{"type":40,"tag":48,"props":2411,"children":2412},{},[2413,2418,2419,2425,2427,2433],{"type":40,"tag":52,"props":2414,"children":2415},{},[2416],{"type":45,"value":2417},"Detection probes:",{"type":45,"value":639},{"type":40,"tag":66,"props":2420,"children":2422},{"className":2421},[],[2423],{"type":45,"value":2424},"command -v doca-collect-host-state",{"type":45,"value":2426}," (run on\nthe host side) and ",{"type":40,"tag":66,"props":2428,"children":2430},{"className":2429},[],[2431],{"type":45,"value":2432},"command -v doca-collect-dpu-state",{"type":45,"value":2434}," (run on the\nBlueField side).",{"type":40,"tag":48,"props":2436,"children":2437},{},[2438],{"type":40,"tag":52,"props":2439,"children":2440},{},[2441],{"type":45,"value":2442},"Top-level shape (JSON object), shared by both:",{"type":40,"tag":680,"props":2444,"children":2445},{},[2446,2464],{"type":40,"tag":684,"props":2447,"children":2448},{},[2449],{"type":40,"tag":688,"props":2450,"children":2451},{},[2452,2456,2460],{"type":40,"tag":692,"props":2453,"children":2454},{},[2455],{"type":45,"value":696},{"type":40,"tag":692,"props":2457,"children":2458},{},[2459],{"type":45,"value":701},{"type":40,"tag":692,"props":2461,"children":2462},{},[2463],{"type":45,"value":706},{"type":40,"tag":708,"props":2465,"children":2466},{},[2467,2497,2520,2549,2572,2602,2639],{"type":40,"tag":688,"props":2468,"children":2469},{},[2470,2479,2483],{"type":40,"tag":715,"props":2471,"children":2472},{},[2473],{"type":40,"tag":66,"props":2474,"children":2476},{"className":2475},[],[2477],{"type":45,"value":2478},"side",{"type":40,"tag":715,"props":2480,"children":2481},{},[2482],{"type":45,"value":1067},{"type":40,"tag":715,"props":2484,"children":2485},{},[2486,2491,2492],{"type":40,"tag":66,"props":2487,"children":2489},{"className":2488},[],[2490],{"type":45,"value":1078},{"type":45,"value":822},{"type":40,"tag":66,"props":2493,"children":2495},{"className":2494},[],[2496],{"type":45,"value":1125},{"type":40,"tag":688,"props":2498,"children":2499},{},[2500,2508,2512],{"type":40,"tag":715,"props":2501,"children":2502},{},[2503],{"type":40,"tag":66,"props":2504,"children":2506},{"className":2505},[],[2507],{"type":45,"value":1917},{"type":40,"tag":715,"props":2509,"children":2510},{},[2511],{"type":45,"value":1067},{"type":40,"tag":715,"props":2513,"children":2514},{},[2515],{"type":40,"tag":66,"props":2516,"children":2518},{"className":2517},[],[2519],{"type":45,"value":1204},{"type":40,"tag":688,"props":2521,"children":2522},{},[2523,2532,2536],{"type":40,"tag":715,"props":2524,"children":2525},{},[2526],{"type":40,"tag":66,"props":2527,"children":2529},{"className":2528},[],[2530],{"type":45,"value":2531},"firmware_version",{"type":40,"tag":715,"props":2533,"children":2534},{},[2535],{"type":45,"value":1067},{"type":40,"tag":715,"props":2537,"children":2538},{},[2539,2541,2547],{"type":45,"value":2540},"output of ",{"type":40,"tag":66,"props":2542,"children":2544},{"className":2543},[],[2545],{"type":45,"value":2546},"flint -d \u003Cpcie> q",{"type":45,"value":2548}," (sudo)",{"type":40,"tag":688,"props":2550,"children":2551},{},[2552,2560,2564],{"type":40,"tag":715,"props":2553,"children":2554},{},[2555],{"type":40,"tag":66,"props":2556,"children":2558},{"className":2557},[],[2559],{"type":45,"value":1007},{"type":40,"tag":715,"props":2561,"children":2562},{},[2563],{"type":45,"value":1067},{"type":40,"tag":715,"props":2565,"children":2566},{},[2567],{"type":40,"tag":66,"props":2568,"children":2570},{"className":2569},[],[2571],{"type":45,"value":1357},{"type":40,"tag":688,"props":2573,"children":2574},{},[2575,2584,2589],{"type":40,"tag":715,"props":2576,"children":2577},{},[2578],{"type":40,"tag":66,"props":2579,"children":2581},{"className":2580},[],[2582],{"type":45,"value":2583},"mlx5_modules",{"type":40,"tag":715,"props":2585,"children":2586},{},[2587],{"type":45,"value":2588},"array of string",{"type":40,"tag":715,"props":2590,"children":2591},{},[2592,2594,2600],{"type":45,"value":2593},"which ",{"type":40,"tag":66,"props":2595,"children":2597},{"className":2596},[],[2598],{"type":45,"value":2599},"mlx5_*",{"type":45,"value":2601}," modules are loaded",{"type":40,"tag":688,"props":2603,"children":2604},{},[2605,2613,2617],{"type":40,"tag":715,"props":2606,"children":2607},{},[2608],{"type":40,"tag":66,"props":2609,"children":2611},{"className":2610},[],[2612],{"type":45,"value":1103},{"type":40,"tag":715,"props":2614,"children":2615},{},[2616],{"type":45,"value":1108},{"type":40,"tag":715,"props":2618,"children":2619},{},[2620,2625,2626,2631,2632,2637],{"type":40,"tag":66,"props":2621,"children":2623},{"className":2622},[],[2624],{"type":45,"value":1118},{"type":45,"value":822},{"type":40,"tag":66,"props":2627,"children":2629},{"className":2628},[],[2630],{"type":45,"value":1125},{"type":45,"value":822},{"type":40,"tag":66,"props":2633,"children":2635},{"className":2634},[],[2636],{"type":45,"value":1132},{"type":45,"value":2638}," | null",{"type":40,"tag":688,"props":2640,"children":2641},{},[2642,2650,2654],{"type":40,"tag":715,"props":2643,"children":2644},{},[2645],{"type":40,"tag":66,"props":2646,"children":2648},{"className":2647},[],[2649],{"type":45,"value":780},{"type":40,"tag":715,"props":2651,"children":2652},{},[2653],{"type":45,"value":785},{"type":40,"tag":715,"props":2655,"children":2656},{},[2657,2659,2664,2665,2670,2671,2676,2677,2682,2683,2688,2689,2694,2695,2700,2701],{"type":45,"value":2658},"per-PCIe-function record: ",{"type":40,"tag":66,"props":2660,"children":2662},{"className":2661},[],[2663],{"type":45,"value":796},{"type":45,"value":844},{"type":40,"tag":66,"props":2666,"children":2668},{"className":2667},[],[2669],{"type":45,"value":812},{"type":45,"value":814},{"type":40,"tag":66,"props":2672,"children":2674},{"className":2673},[],[2675],{"type":45,"value":820},{"type":45,"value":822},{"type":40,"tag":66,"props":2678,"children":2680},{"className":2679},[],[2681],{"type":45,"value":828},{"type":45,"value":822},{"type":40,"tag":66,"props":2684,"children":2686},{"className":2685},[],[2687],{"type":45,"value":835},{"type":45,"value":806},{"type":40,"tag":66,"props":2690,"children":2692},{"className":2691},[],[2693],{"type":45,"value":858},{"type":45,"value":844},{"type":40,"tag":66,"props":2696,"children":2698},{"className":2697},[],[2699],{"type":45,"value":886},{"type":45,"value":844},{"type":40,"tag":66,"props":2702,"children":2704},{"className":2703},[],[2705],{"type":45,"value":850},{"type":40,"tag":48,"props":2707,"children":2708},{},[2709],{"type":40,"tag":52,"props":2710,"children":2711},{},[2712],{"type":45,"value":2713},"Manual fallback chain (per side):",{"type":40,"tag":237,"props":2715,"children":2716},{},[2717,2731,2745,2760,2793,2810],{"type":40,"tag":158,"props":2718,"children":2719},{},[2720,2725,2726],{"type":40,"tag":66,"props":2721,"children":2723},{"className":2722},[],[2724],{"type":45,"value":1204},{"type":45,"value":1173},{"type":40,"tag":66,"props":2727,"children":2729},{"className":2728},[],[2730],{"type":45,"value":1917},{"type":40,"tag":158,"props":2732,"children":2733},{},[2734,2739,2740],{"type":40,"tag":66,"props":2735,"children":2737},{"className":2736},[],[2738],{"type":45,"value":1357},{"type":45,"value":1173},{"type":40,"tag":66,"props":2741,"children":2743},{"className":2742},[],[2744],{"type":45,"value":1007},{"type":40,"tag":158,"props":2746,"children":2747},{},[2748,2754,2755],{"type":40,"tag":66,"props":2749,"children":2751},{"className":2750},[],[2752],{"type":45,"value":2753},"lsmod | grep mlx5",{"type":45,"value":1173},{"type":40,"tag":66,"props":2756,"children":2758},{"className":2757},[],[2759],{"type":45,"value":2583},{"type":40,"tag":158,"props":2761,"children":2762},{},[2763,2769,2771,2777,2778,2784,2786,2791],{"type":40,"tag":66,"props":2764,"children":2766},{"className":2765},[],[2767],{"type":45,"value":2768},"devlink dev show",{"type":45,"value":2770}," + ",{"type":40,"tag":66,"props":2772,"children":2774},{"className":2773},[],[2775],{"type":45,"value":2776},"lspci | grep Mellanox",{"type":45,"value":2770},{"type":40,"tag":66,"props":2779,"children":2781},{"className":2780},[],[2782],{"type":45,"value":2783},"ip -j link",{"type":45,"value":2785}," →\nenumerate the ",{"type":40,"tag":66,"props":2787,"children":2789},{"className":2788},[],[2790],{"type":45,"value":780},{"type":45,"value":2792}," array and its PCIe addresses",{"type":40,"tag":158,"props":2794,"children":2795},{},[2796,2798,2803,2805],{"type":45,"value":2797},"For each discovered target PCIe address, ",{"type":40,"tag":66,"props":2799,"children":2801},{"className":2800},[],[2802],{"type":45,"value":2546},{"type":45,"value":2804},"\nthrough the approved privileged channel → ",{"type":40,"tag":66,"props":2806,"children":2808},{"className":2807},[],[2809],{"type":45,"value":2531},{"type":40,"tag":158,"props":2811,"children":2812},{},[2813,2815,2820,2821],{"type":45,"value":2814},"On a discovered BlueField target, ",{"type":40,"tag":66,"props":2816,"children":2818},{"className":2817},[],[2819],{"type":45,"value":1414},{"type":45,"value":1173},{"type":40,"tag":66,"props":2822,"children":2824},{"className":2823},[],[2825],{"type":45,"value":1103},{"type":40,"tag":48,"props":2827,"children":2828},{},[2829],{"type":45,"value":2830},"The two sides are deliberately symmetric so the agent can diff them\ntrivially when diagnosing host ↔ BlueField mismatches.",{"type":40,"tag":108,"props":2832,"children":2834},{"id":2833},"relationship-to-pr2-executables",[2835],{"type":45,"value":2836},"Relationship to PR2 executables",{"type":40,"tag":48,"props":2838,"children":2839},{},[2840,2842,2847],{"type":45,"value":2841},"The schemas above describe ",{"type":40,"tag":52,"props":2843,"children":2844},{},[2845],{"type":45,"value":2846},"contracts",{"type":45,"value":2848},". The implementations that\nsatisfy each contract are deferred to a subsequent PR on the\nmaintainer roadmap.",{"type":40,"tag":48,"props":2850,"children":2851},{},[2852],{"type":45,"value":2853},"This skill ships first so other skills can reference the contract\nwithout later retrofit when PR2 executables land.",{"type":40,"tag":48,"props":2855,"children":2856},{},[2857,2859,2864,2866,2871,2873,2878,2880,2885,2887,2892],{"type":45,"value":2858},"Concrete consequence for contributors writing a new library skill:\nwhen you build the Command appendix, do not duplicate the manual\nfallback chain — link to this skill's matching schema section and\nadd only the ",{"type":40,"tag":60,"props":2860,"children":2861},{},[2862],{"type":45,"value":2863},"per-library overlay",{"type":45,"value":2865},". For Flow, the public header at\nthis release has no separate ",{"type":40,"tag":66,"props":2867,"children":2869},{"className":2868},[],[2870],{"type":45,"value":2070},{"type":45,"value":2872}," symbol: do not\ninvent one or use ",{"type":40,"tag":66,"props":2874,"children":2876},{"className":2875},[],[2877],{"type":45,"value":2078},{"type":45,"value":2879}," as this contract's read-only\npre-commit probe. Report ",{"type":40,"tag":66,"props":2881,"children":2883},{"className":2882},[],[2884],{"type":45,"value":2317},{"type":45,"value":2886}," and route to ",{"type":40,"tag":66,"props":2888,"children":2890},{"className":2889},[],[2891],{"type":45,"value":2309},{"type":45,"value":2893},", where constructor-time checks may run only after\nthat workflow's snapshot and safety preconditions. The fallback chain\nitself lives here.",{"type":40,"tag":108,"props":2895,"children":2897},{"id":2896},"url-audit",[2898],{"type":45,"value":2899},"URL audit",{"type":40,"tag":48,"props":2901,"children":2902},{},[2903],{"type":45,"value":2904},"This skill references the following external URLs. All MUST be\npublic and MUST resolve. The lint runs the URL check in CI.",{"type":40,"tag":680,"props":2906,"children":2907},{},[2908,2938],{"type":40,"tag":684,"props":2909,"children":2910},{},[2911],{"type":40,"tag":688,"props":2912,"children":2913},{},[2914,2919,2924,2929,2934],{"type":40,"tag":692,"props":2915,"children":2916},{},[2917],{"type":45,"value":2918},"URL",{"type":40,"tag":692,"props":2920,"children":2921},{},[2922],{"type":45,"value":2923},"Owner",{"type":40,"tag":692,"props":2925,"children":2926},{},[2927],{"type":45,"value":2928},"Last verified",{"type":40,"tag":692,"props":2930,"children":2931},{},[2932],{"type":45,"value":2933},"DOCA version",{"type":40,"tag":692,"props":2935,"children":2936},{},[2937],{"type":45,"value":706},{"type":40,"tag":708,"props":2939,"children":2940},{},[2941],{"type":40,"tag":688,"props":2942,"children":2943},{},[2944,2956,2961,2966,2971],{"type":40,"tag":715,"props":2945,"children":2946},{},[2947,2949,2954],{"type":45,"value":2948},"(none — this skill is a contract, the substantive URLs are owned by ",{"type":40,"tag":66,"props":2950,"children":2952},{"className":2951},[],[2953],{"type":45,"value":206},{"type":45,"value":2955}," and the per-library skills)",{"type":40,"tag":715,"props":2957,"children":2958},{},[2959],{"type":45,"value":2960},"n\u002Fa",{"type":40,"tag":715,"props":2962,"children":2963},{},[2964],{"type":45,"value":2965},"2026-05-17",{"type":40,"tag":715,"props":2967,"children":2968},{},[2969],{"type":45,"value":2970},"3.3.0",{"type":40,"tag":715,"props":2972,"children":2973},{},[2974,2976,2981],{"type":45,"value":2975},"The agent reaches public docs via ",{"type":40,"tag":66,"props":2977,"children":2979},{"className":2978},[],[2980],{"type":45,"value":206},{"type":45,"value":2982},"; this skill stays vendor-neutral on URLs",{"items":2984,"total":3141},[2985,3003,3021,3032,3044,3058,3071,3085,3098,3109,3123,3132],{"slug":2986,"name":2986,"fn":2987,"description":2988,"org":2989,"tags":2990,"stars":3000,"repoUrl":3001,"updatedAt":3002},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2991,2994,2997],{"name":2992,"slug":2993,"type":15},"Documentation","documentation",{"name":2995,"slug":2996,"type":15},"MCP","mcp",{"name":2998,"slug":2999,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":3004,"name":3004,"fn":3005,"description":3006,"org":3007,"tags":3008,"stars":3018,"repoUrl":3019,"updatedAt":3020},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3009,3012,3015],{"name":3010,"slug":3011,"type":15},"Containers","containers",{"name":3013,"slug":3014,"type":15},"Deployment","deployment",{"name":3016,"slug":3017,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":3022,"name":3022,"fn":3023,"description":3024,"org":3025,"tags":3026,"stars":3018,"repoUrl":3019,"updatedAt":3031},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3027,3030],{"name":3028,"slug":3029,"type":15},"CI\u002FCD","ci-cd",{"name":3013,"slug":3014,"type":15},"2026-07-14T05:25:59.97109",{"slug":3033,"name":3033,"fn":3034,"description":3035,"org":3036,"tags":3037,"stars":3018,"repoUrl":3019,"updatedAt":3043},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3038,3039,3040],{"name":3028,"slug":3029,"type":15},{"name":3013,"slug":3014,"type":15},{"name":3041,"slug":3042,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":3045,"name":3045,"fn":3046,"description":3047,"org":3048,"tags":3049,"stars":3018,"repoUrl":3019,"updatedAt":3057},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3050,3053,3054],{"name":3051,"slug":3052,"type":15},"Debugging","debugging",{"name":3041,"slug":3042,"type":15},{"name":3055,"slug":3056,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":3059,"name":3059,"fn":3060,"description":3061,"org":3062,"tags":3063,"stars":3018,"repoUrl":3019,"updatedAt":3070},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3064,3067],{"name":3065,"slug":3066,"type":15},"Best Practices","best-practices",{"name":3068,"slug":3069,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":3072,"name":3072,"fn":3073,"description":3074,"org":3075,"tags":3076,"stars":3018,"repoUrl":3019,"updatedAt":3084},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3077,3080,3083],{"name":3078,"slug":3079,"type":15},"Machine Learning","machine-learning",{"name":3081,"slug":3082,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":3086,"name":3086,"fn":3087,"description":3088,"org":3089,"tags":3090,"stars":3018,"repoUrl":3019,"updatedAt":3097},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3091,3094],{"name":3092,"slug":3093,"type":15},"QA","qa",{"name":3095,"slug":3096,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":3099,"name":3099,"fn":3100,"description":3101,"org":3102,"tags":3103,"stars":3018,"repoUrl":3019,"updatedAt":3108},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3104,3105],{"name":3013,"slug":3014,"type":15},{"name":3106,"slug":3107,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":3110,"name":3110,"fn":3111,"description":3112,"org":3113,"tags":3114,"stars":3018,"repoUrl":3019,"updatedAt":3122},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3115,3118,3119],{"name":3116,"slug":3117,"type":15},"Code Review","code-review",{"name":3041,"slug":3042,"type":15},{"name":3120,"slug":3121,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":3124,"name":3124,"fn":3125,"description":3126,"org":3127,"tags":3128,"stars":3018,"repoUrl":3019,"updatedAt":3131},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3129,3130],{"name":3092,"slug":3093,"type":15},{"name":3095,"slug":3096,"type":15},"2026-07-14T05:25:54.928983",{"slug":3133,"name":3133,"fn":3134,"description":3135,"org":3136,"tags":3137,"stars":3018,"repoUrl":3019,"updatedAt":3140},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3138,3139],{"name":13,"slug":14,"type":15},{"name":3028,"slug":3029,"type":15},"2026-07-30T05:29:03.275638",496,{"items":3143,"total":3239},[3144,3161,3171,3185,3195,3210,3225],{"slug":3145,"name":3145,"fn":3146,"description":3147,"org":3148,"tags":3149,"stars":20,"repoUrl":21,"updatedAt":3160},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3150,3153,3156,3157],{"name":3151,"slug":3152,"type":15},"Data Analysis","data-analysis",{"name":3154,"slug":3155,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":3158,"slug":3159,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":3162,"name":3162,"fn":3163,"description":3164,"org":3165,"tags":3166,"stars":20,"repoUrl":21,"updatedAt":3170},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3167,3168,3169],{"name":3013,"slug":3014,"type":15},{"name":3106,"slug":3107,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":3172,"name":3172,"fn":3173,"description":3174,"org":3175,"tags":3176,"stars":20,"repoUrl":21,"updatedAt":3184},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3177,3180,3181],{"name":3178,"slug":3179,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":3182,"slug":3183,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":3186,"name":3186,"fn":3187,"description":3188,"org":3189,"tags":3190,"stars":20,"repoUrl":21,"updatedAt":3194},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3191,3192,3193],{"name":3151,"slug":3152,"type":15},{"name":9,"slug":8,"type":15},{"name":3095,"slug":3096,"type":15},"2026-07-17T05:29:03.913266",{"slug":3196,"name":3196,"fn":3197,"description":3198,"org":3199,"tags":3200,"stars":20,"repoUrl":21,"updatedAt":3209},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3201,3202,3205,3206],{"name":13,"slug":14,"type":15},{"name":3203,"slug":3204,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":3207,"slug":3208,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":3211,"name":3211,"fn":3212,"description":3213,"org":3214,"tags":3215,"stars":20,"repoUrl":21,"updatedAt":3224},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3216,3217,3220,3221],{"name":3013,"slug":3014,"type":15},{"name":3218,"slug":3219,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":3222,"slug":3223,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":3226,"name":3226,"fn":3227,"description":3228,"org":3229,"tags":3230,"stars":20,"repoUrl":21,"updatedAt":3238},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[3231,3232,3235],{"name":9,"slug":8,"type":15},{"name":3233,"slug":3234,"type":15},"Quantum Computing","quantum-computing",{"name":3236,"slug":3237,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305]