[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-tilegym-converting-cutile-triton-to-cutile-rs":3,"mdc--3efcxj-key":34,"related-repo-nvidia-tilegym-converting-cutile-triton-to-cutile-rs":1600,"related-org-nvidia-tilegym-converting-cutile-triton-to-cutile-rs":1609},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"tilegym-converting-cutile-triton-to-cutile-rs","port GPU kernels from Triton to Rust","Use this skill to convert, port, or translate Triton-TileIR (nvtriton) or cuTile-Python GPU kernels to cutile-rs (Rust). The orchestrator runs scripts\u002Fpreflight.sh, then drives a bounded Agent A -> B -> D -> E pipeline (Agent C is diagnostic, Agent F optional), delegating all kernel\u002Fhost\u002Fcorrectness\u002Fperf work to sub-agents and routing by each stage's single-line VERDICT.\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,20],{"name":13,"slug":14,"type":15},"Performance","performance","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Engineering","engineering",{"name":21,"slug":22,"type":15},"Rust","rust",770,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FTileGym","2026-07-14T05:33:14.807388","CC-BY-4.0 AND Apache-2.0",79,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Helpful kernel tutorials, examples and SKILLs for tile-based GPU programming","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FTileGym\u002Ftree\u002FHEAD\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs","---\nname: tilegym-converting-cutile-triton-to-cutile-rs\ndescription: |\n  Use this skill to convert, port, or translate Triton-TileIR (nvtriton) or cuTile-Python GPU kernels to cutile-rs (Rust). The orchestrator runs scripts\u002Fpreflight.sh, then drives a bounded Agent A -> B -> D -> E pipeline (Agent C is diagnostic, Agent F optional), delegating all kernel\u002Fhost\u002Fcorrectness\u002Fperf work to sub-agents and routing by each stage's single-line VERDICT.\nlicense: CC-BY-4.0 AND Apache-2.0\nmetadata:\n  author: \"TileGym Team \u003CTileGym@nvidia.com>\"\n---\n\n# Converting Triton-TileIR (nvtriton) \u002F cuTile-Python to cutile-rs\n\n## Instructions\n\nHard safety rule for every participant: never emit a Bash command containing the destructive recursive-delete token spelled as `r` + `m` + space + dash-r-f. Use `mkdir -p X && find X -mindepth 1 -delete 2>\u002Fdev\u002Fnull` for cleanup.\n\nUse this skill when a user asks to add a `cutile-rs` backend to a tilegym kernel or to port a Triton-TileIR\u002FcuTile-Python kernel to cutile-rs. The orchestrator is a router, not a worker: it delegates all kernel writing, compiling, correctness, perf, and IR diff work to sub-agents.\n\n## First Tool Calls\n\nCopy this checklist into TodoWrite immediately:\n\n```\n[ ] 1. Bash: cd \"$TILEGYM_PATH\" && bash .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fscripts\u002Fpreflight.sh\n[ ] 2. Agent: spawn Agent A with the minimal-pointer template below\n[ ] 3. Check Agent A's \u003CVALIDATOR_OUTPUT> block and final VERDICT line\n[ ] 4. Route by the table in this file\n[ ] 5. Continue happy path B -> D -> E; spawn C ONLY after D **FAIL** or E **INVESTIGATE\u002FBLOCKED**. **E `DONE` is terminal → PIPELINE_COMPLETE; never spawn C\u002FD(2)\u002FF after E DONE** (geomean ≤ 1.05 is the authoritative gate — do NOT reinterpret \"≤ baseline\" \u002F a (1.0,1.05] geomean \u002F an info-only slow row as a reason to diagnose). For D **BLOCKED**, route by `block_class` in correctness.md **exactly as the Routing Table below**: `host` (wiring \u002F ffi.rs \u002F .so \u002F wrapper \u002F backend registration) -> Agent D(2) (D owns registration; C and B cannot fix it), `kernel` -> Agent C, `env` -> STOP\n[ ] 6. Run scripts\u002Fvalidate_kernel.sh {kernel_name} only after the pipeline has produced A\u002FB\u002FC-if-run\u002FD\u002FE artifacts\n```\n\nThe orchestrator does not read `agents\u002Fagent_*.md`. It copies the stage-specific Step 0 file set below into the sub-agent prompt and passes concrete prior artifact paths. Do not add a generic common reference preload: Agent B needs conversion docs; Agent D\u002FE usually do not.\n\n## Agent Step 0 File Sets\n\n**Path convention:** all skill-internal paths in this skill are written relative\nto the tilegym root (`$TILEGYM_PATH`, e.g. `\u002Fworkspace\u002Ftilegym`), which is the\nassumed current working directory for every agent. So `.agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002F...`\nresolves from `$TILEGYM_PATH`. Read\u002Fcite skill files with these relative paths.\nAny bash snippet that invokes a skill `scripts\u002F*.sh` is prefixed with\n`cd \"$TILEGYM_PATH\" &&` so it runs from the root even if a prior step changed the\ndirectory (e.g. a cargo build in the kernel-out dir).\n\nUse exactly the relevant set when filling `{agent_step0_files}` in the spawn template. These lists are intentionally different by stage.\n\nAgent A reads only dump\u002Fenvironment guidance:\n\n```text\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_a.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fenv-block.md\n```\n\nAgent B reads conversion references, examples, and A's concrete reference artifacts:\n\n```text\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_b.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fop-mapping.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Fstrided-view-to-partition-view.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Ftranspose-support.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Ftensor-vs-pointer-pattern.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fwalkthrough.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fkernel.rs\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fsoftmax_pipeline.rs\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freference\u002Fanalysis.json\n- the concrete structural reference IR paths from Agent A: either reference\u002Freference.mlir or each top-level reference\u002Freference_{variant}.mlir named in prior_artifact_paths\n- optional dtype-only supplements under reference\u002Fsupplements\u002F only when analysis.json names them\n```\n\nAgent C reads IR-diff references plus B outputs. If the route came from D\u002FE, include the relevant failure\u002Fperf report paths too.\n\n```text\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_c.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fir-diff-checklist.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fop-mapping.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Fstrided-view-to-partition-view.md\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freference\u002Fanalysis.json\n- the concrete reference\u002Fgenerated canonical IR pair(s) from prior_artifact_paths\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Fkernel.rs\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Fffi.rs\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freports\u002Fagent_b.md\n```\n\nAgent D reads only the concrete templates it needs:\n\n```text\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_d.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fffi.rs       (raw-pointer launch template)\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fbmm\u002Fffi.rs           (TILED-output template — read-only &Tensor output + partition_full_mut; NO &mut Tensor)\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fwrapper.py   (wrapper + argtypes + autotune)\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Fkernel.rs                  (B's kernel — entry sigs to launch)\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freference\u002Fanalysis.json    (autotune configs for wrapper)\n- $TILEGYM_PATH\u002Fsrc\u002Ftilegym\u002Fops\u002Fcutile_rs\u002F__init__.py + $TILEGYM_PATH\u002Fsrc\u002Ftilegym\u002Fbackend\u002Fselector.py   (backend-reg files D edits)\n```\nOn-demand only (not batched): references\u002Fcoding-rules.md (if a SKIP needs a citation),\ntests\u002Fops\u002Ftest_{kernel_name}.py (when adding the cutile-rs parametrization).\n\nAgent E reads benchmark instructions only:\n\n```text\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_e.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fperformance-checklist.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n```\n\nAgent F reads residual-perf diagnostics:\n\n```text\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_f.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fperformance-checklist.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n```\n\n## Minimal Agent Spawn Template\n\nUse this shape for every sub-agent. Do not paste the full agent file into the prompt, and do not paste B conversion references into non-B stages.\n\n```text\nAgent(\n  description=\"Agent {X} - {short title} for {kernel_name}\",\n  subagent_type=\"general-purpose\",\n  prompt=\"\"\"You are Agent {X}. Execute the {X}-stage of the cutile-rs conversion pipeline for kernel `{kernel_name}`.\n\nSTEP 0 (MANDATORY first tool call): Read these files in ONE batch Read call:\n{agent_step0_files}\n\nThen follow agent_{x}.md's procedure for `{kernel_name}`. If agent_{x}.md asks for an additional report because this is a failure\u002Fperf route, read only the concrete report path named below or in prior_artifact_paths.\n\nPrior-stage artifacts already on disk:\n{prior_artifact_paths}\n\nOUTPUT PROTOCOL:\n1. Write the stage report to $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freports\u002Fagent_{x}.md.\n2. Write the stage artifacts required by agent_{x}.md.\n3. Run only this stage's validators from agent_{x}.md's closing contract and capture stdout\u002Fstderr.\n   - Agent B runs validate_agent_b.sh and its compile\u002Fcanonicalization checks.\n   - Agent B does NOT run validate_kernel.sh; that is the final aggregate gate after D\u002FE.\n4. Return only a literal \u003CVALIDATOR_OUTPUT>...\u003C\u002FVALIDATOR_OUTPUT> block followed immediately by `VERDICT: X`.\n\nIf you cannot complete the stage, write SKILL_METHODOLOGY_BLOCKED.txt with the reason and return `VERDICT: BLOCKED`.\"\"\"\n)\n```\n\n## Routing Table\n\nThe orchestrator checks the validator block first, then applies this table. It does not infer fixes from prose.\n\nDevice\u002Fhost split (this is why the fork exists; the rows below are the single\nsource of truth for where each verdict routes): Agent B writes the DEVICE kernel\nonly (kernel.rs + passing in-Rust pipeline test); Agent D owns the entire HOST\nboundary — ffi.rs (C-ABI launcher), the cdylib .so build, the Python wrapper +\nbackend wiring, AND correctness. Agents D and C emit the `fail_class:` \u002F\n`block_class:` (D) or `owner:` (C) line that selects the matching row.\n\n```text\nStage              VERDICT                      Action\n-----              -------                      ------\nAgent A            PASS                         spawn Agent B\nAgent A            FAIL_FIXABLE | BLOCKED       STOP\n\nAgent B(1)         COMPILED                     spawn Agent D\nAgent B(1)         FAIL_COMPILE | FAIL_FIXABLE | BLOCKED\n                                                STOP\n\nAgent D(1)         ALL_PASS                     spawn Agent E\nAgent D(1)         FAIL (fail_class: host)      spawn Agent D(2) — D owns ffi.rs\u002F.so\u002Fwrapper\u002Flaunch fix.\n                                                Read `host_fix:` in correctness.md.\nAgent D(1)         FAIL (fail_class: kernel)    spawn Agent C — device-math fault; C diagnoses → B(2).\n                                                Read `agent_b_followup:` in correctness.md.\nAgent D(1)         BLOCKED (block_class: host)\n                                                spawn Agent D(2) — D's own wiring (0 tests collected,\n                                                import error, argtype\u002FCUDA-700). NOT a C\u002FB problem.\nAgent D(1)         BLOCKED (block_class: kernel)\n                                                spawn Agent C (in-kernel panic \u002F missing .so \u002F FFI gap)\nAgent D(1)         BLOCKED (block_class: env)\n                                                STOP — external cause (missing toolchain \u002F GPU \u002F\n                                                driver); not fixable by C, B, or D.\n\nAgent E(1)         DONE                         PIPELINE_COMPLETE\nAgent E(1)         INVESTIGATE | BLOCKED        spawn Agent C to diagnose the perf root cause,\n                                                if C has not run; otherwise PIPELINE_COMPLETE\n\nAgent C            FAIL_FIXABLE (owner: host)    spawn Agent D(2) if D has not been respawned — the fix is\n                                                host\u002FPython-side (autotune config, grid budget,\n                                                num_cta_in_cga\u002Foccupancy VALUE, layout). otherwise PIPELINE_COMPLETE\nAgent C            FAIL_FIXABLE (owner: kernel)  spawn Agent B(2) if B has not been respawned — the fix is\n                                                kernel.rs device math\u002FIR. otherwise PIPELINE_COMPLETE\nAgent C            PASS | PASS_WITH_NOTES        PIPELINE_COMPLETE\nAgent C            FAIL_COMPILER_BUG | BLOCKED   PIPELINE_COMPLETE\n\nAgent B(2)         COMPILED                     spawn Agent D(2)\nAgent B(2)         FAIL_COMPILE | FAIL_FIXABLE | BLOCKED\n                                                STOP\n\nAgent D(2)         ALL_PASS                     spawn Agent E(2)\nAgent D(2)         FAIL | BLOCKED               PIPELINE_COMPLETE\n\nAgent E(2)         DONE | INVESTIGATE | BLOCKED PIPELINE_COMPLETE\n\nAgent F            FIXABLE | ALIGNED | BLOCKED  PIPELINE_COMPLETE\n```\n\nIf a `fail_class:` \u002F `block_class:` (from D) or `owner:` (from C) line is absent,\nfall back to the kernel route (C \u002F B) — but the agents are required to emit it,\nand host faults misrouted to B waste a full stage.\n\nMeaning of Agent C verdicts:\n\n- `FAIL_FIXABLE` means \"a concrete next edit is owned now.\" C MUST tag the owner in `generated\u002Fdiff_report.md` with an `owner: host` or `owner: kernel` line, where `host` = ffi.rs launcher \u002F output-partition ABI \u002F launch grid \u002F autotune value \u002F wrapper, and `kernel` = kernel.rs device math \u002F IR. The orchestrator routes that owner strictly per the Routing Table above — do not restate the target agent here. Action items go in `generated\u002Fdiff_report.md`.\n- `PASS` means the IR\u002Fperf\u002Fcorrectness diagnostic found no fixable owner.\n- `PASS_WITH_NOTES` means the remaining differences are known gaps, INFO-only deltas, accepted semantic equivalents, or residual perf notes. Do not respawn for this verdict.\n- `FAIL_COMPILER_BUG` and `BLOCKED` stop the in-run loop; reflection mines the reports.\n\n## Spawn Caps\n\nHard caps per pipeline run:\n\n| Agent | Max semantic runs |\n|---|---:|\n| A | 1 |\n| B | 2 |\n| C | 1 |\n| D | 2 |\n| E | 2 |\n| F | 1 |\n\nA same-agent validator-block repair is also capped at one per letter. Validator repair never cascades to another agent letter.\n\n## Mechanical Validator Acceptance Gate\n\nAfter every sub-agent return:\n\n1. Extract the first enumerated `VERDICT:` line.\n2. Look for a literal `\u003CVALIDATOR_OUTPUT>` ... `\u003C\u002FVALIDATOR_OUTPUT>` block.\n3. If the block exists and every parseable `exit=\u003Cn>` \u002F `exit_code=\u003Cn>` is zero, accept the return and route by verdict.\n4. If the block is missing but the final verdict is a clean success marker (`PASS`, `COMPILED`, `ALL_PASS`, `DONE`) and the return contains no failure marker (`FAIL`, `ERROR`, `Traceback`, `panic`, `exit=1`, `exit_code=1`, `nonzero`, or `timeout`), accept the verdict, record `SOFT_VALIDATOR_MISSING`, and do not respawn for formatting alone.\n5. If a block exists with a non-zero exit, or no clean fallback applies, respawn only the same agent letter once for validator repair. The repair prompt tells it to reuse existing artifacts and return the same semantic verdict plus a valid validator block.\n6. If the repair still fails, proceed with `SOFT_VALIDATOR_FAILED` unless the semantic verdict itself blocks. Never cascade validator repair across agents.\n\nThis gate is mechanical. It does not authorize the orchestrator to run cargo, pytest, benchmarks, IR diffs, or source edits inline.\n\n## Final Aggregate Gate\n\nRun this only after the route has reached `PIPELINE_COMPLETE`:\n\n```bash\ncd \"$TILEGYM_PATH\" && bash .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fscripts\u002Fvalidate_kernel.sh {kernel_name}\n```\n\n`validate_kernel.sh` is a 17-file end-to-end checklist across A\u002FB\u002FC-if-run\u002FD\u002FE outputs. It is not an Agent B validator because B runs before correctness and performance artifacts exist.\n\nIf final validation fails, record the output in the orchestrator summary. Do not repair by running cargo, pytest, benchmarks, or editing files inline; if another agent is needed, it must follow the routing table and spawn caps.\n\n## Pipeline Order\n\n1. Run `scripts\u002Fpreflight.sh` first. It checks required env vars and toolchain paths.\n2. Spawn Agent A. Agent A writes reference IR, analysis.json, tolerance, and baseline perf logs.\n3. Spawn Agent B. Agent B writes the device kernel.rs, kernel-only Cargo project, generated IR, and a build log, and proves the kernel with a passing in-Rust pipeline test + a host_launch_contract for D. B does NOT write ffi.rs, build the .so, write the Python wrapper, or register the backend.\n4. Spawn Agent D. Agent D writes ffi.rs (C-ABI launcher) + builds the cdylib .so, then the Python wrapper + backend wiring (ops\u002Fcutile_rs\u002F\u003Cname>.py, ops\u002F__init__, selector.py, test parametrization), then runs tilegym correctness.\n5. Spawn Agent E. Agent E runs CUPTI-backed performance comparison.\n6. Spawn Agent C only when D\u002FE produce a non-DONE semantic result. C diagnoses, tags `owner: host|kernel`, and writes `generated\u002Fdiff_report.md`.\n7. On a fixable result, respawn the owner that C's `owner:` line (or D's `fail_class:`) names, exactly as the Routing Table maps it — do not re-derive the target here. ffi.rs is D-owned, never B's, so a host fault never routes to B; D self-routes its own FAIL via `fail_class:`.\n8. Stop after E(2) or any cap exhaustion. Reflection handles multi-iteration learning.\n\n## Available Scripts\n\n| Script | Purpose | Arguments |\n|---|---|---|\n| `preflight.sh` | Verify env vars and toolchain paths | none |\n| `validate_analysis.sh` | Validate Agent A analysis.json | `{kernel_name}` |\n| `validate_ir.sh` | Validate a reference\u002Fgenerated MLIR file | `{path\u002Fto\u002F.mlir} {kernel_name}` |\n| `validate_agent_b.sh` | Validate B-stage kernel\u002Fbuild\u002Fwrapper artifacts | `{kernel_name}` |\n| `validate_agent_d.sh` | Validate D correctness report | `{kernel_name}` |\n| `validate_agent_e.sh` | Validate E performance report | `{kernel_name}` |\n| `validate_agent_f.sh` | Validate F residual investigation report | `{kernel_name}` |\n| `validate_diff_report.sh` | Validate Agent C diff_report.md | `{kernel_name}` |\n| `validate_perf_log.sh` | Validate CUPTI perf log records | `{path\u002Fto\u002Fperf_log.txt} {label}` |\n| `validate_kernel.sh` | Final aggregate output contract | `{kernel_name}` |\n| `diff_ir.sh` | Side-by-side IR op\u002Fattribute diff | `{ref.mlir} {gen.mlir}` |\n\n## Examples\n\nTwo fully worked conversions ship under `examples\u002F` as read-only templates the\nsub-agents cite (per the Agent Step 0 File Sets) — never copied blindly:\n\n- `examples\u002Fsoftmax\u002F` — **raw-pointer launch** (`kernel.rs`, `ffi.rs`,\n  `wrapper.py`, `softmax_pipeline.rs`, `walkthrough.md`). The pattern for\n  elementwise \u002F reduction ops that launch over raw device pointers.\n- `examples\u002Fbmm\u002F` — **tiled-output launch** (`kernel.rs`, `ffi.rs`,\n  `wrapper.py`, `walkthrough.md`). The template for matmul-class ops:\n  read-only `&Tensor` output + `partition_full_mut` (never `&mut Tensor`).\n\n## STOP List\n\nThe orchestrator must not:\n\n- Paste an agent file into a spawn prompt.\n- Add common conversion references to every agent prompt.\n- Summarize or reinterpret agent instructions when spawning.\n- Respawn an agent beyond the caps above.\n- Spawn B(2) after C `PASS` or `PASS_WITH_NOTES`.\n- Run `validate_kernel.sh` from Agent B's validator block.\n- Edit `kernel.rs`, `ffi.rs`, `wrapper.py`, tests, Cargo.toml, or generated IR. (This bans the **orchestrator** from editing. Sub-agents edit their own artifacts per their agent files — Agent D writes ffi.rs \u002F wrapper \u002F test parametrization; Agent E may make the one narrow `test_perf` backend-parametrize wiring described in its Step 0.5. Neither is an orchestrator edit.)\n- Run cargo, pytest, benchmarks, nsys, ncu, or IR diff inline.\n- Parse sub-agent return text beyond validator-block mechanics and final verdict.\n- Use final aggregate validation as a reason to bypass the routing table.\n\nFor detailed rationale, retry policy, and critical conversion rules, read `references\u002Fpipeline.md`.\n",{"data":35,"body":38},{"name":4,"description":6,"license":26,"metadata":36},{"author":37},"TileGym Team \u003CTileGym@nvidia.com>",{"type":39,"children":40},"root",[41,50,57,88,101,107,112,124,137,143,201,214,219,228,233,242,247,256,261,270,275,280,289,294,303,309,314,323,329,334,363,372,398,403,507,513,518,621,626,632,637,813,818,824,837,896,907,912,918,1016,1022,1324,1330,1343,1466,1472,1477,1582,1594],{"type":42,"tag":43,"props":44,"children":46},"element","h1",{"id":45},"converting-triton-tileir-nvtriton-cutile-python-to-cutile-rs",[47],{"type":48,"value":49},"text","Converting Triton-TileIR (nvtriton) \u002F cuTile-Python to cutile-rs",{"type":42,"tag":51,"props":52,"children":54},"h2",{"id":53},"instructions",[55],{"type":48,"value":56},"Instructions",{"type":42,"tag":58,"props":59,"children":60},"p",{},[61,63,70,72,78,80,86],{"type":48,"value":62},"Hard safety rule for every participant: never emit a Bash command containing the destructive recursive-delete token spelled as ",{"type":42,"tag":64,"props":65,"children":67},"code",{"className":66},[],[68],{"type":48,"value":69},"r",{"type":48,"value":71}," + ",{"type":42,"tag":64,"props":73,"children":75},{"className":74},[],[76],{"type":48,"value":77},"m",{"type":48,"value":79}," + space + dash-r-f. Use ",{"type":42,"tag":64,"props":81,"children":83},{"className":82},[],[84],{"type":48,"value":85},"mkdir -p X && find X -mindepth 1 -delete 2>\u002Fdev\u002Fnull",{"type":48,"value":87}," for cleanup.",{"type":42,"tag":58,"props":89,"children":90},{},[91,93,99],{"type":48,"value":92},"Use this skill when a user asks to add a ",{"type":42,"tag":64,"props":94,"children":96},{"className":95},[],[97],{"type":48,"value":98},"cutile-rs",{"type":48,"value":100}," backend to a tilegym kernel or to port a Triton-TileIR\u002FcuTile-Python kernel to cutile-rs. The orchestrator is a router, not a worker: it delegates all kernel writing, compiling, correctness, perf, and IR diff work to sub-agents.",{"type":42,"tag":51,"props":102,"children":104},{"id":103},"first-tool-calls",[105],{"type":48,"value":106},"First Tool Calls",{"type":42,"tag":58,"props":108,"children":109},{},[110],{"type":48,"value":111},"Copy this checklist into TodoWrite immediately:",{"type":42,"tag":113,"props":114,"children":118},"pre",{"className":115,"code":117,"language":48},[116],"language-text","[ ] 1. Bash: cd \"$TILEGYM_PATH\" && bash .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fscripts\u002Fpreflight.sh\n[ ] 2. Agent: spawn Agent A with the minimal-pointer template below\n[ ] 3. Check Agent A's \u003CVALIDATOR_OUTPUT> block and final VERDICT line\n[ ] 4. Route by the table in this file\n[ ] 5. Continue happy path B -> D -> E; spawn C ONLY after D **FAIL** or E **INVESTIGATE\u002FBLOCKED**. **E `DONE` is terminal → PIPELINE_COMPLETE; never spawn C\u002FD(2)\u002FF after E DONE** (geomean ≤ 1.05 is the authoritative gate — do NOT reinterpret \"≤ baseline\" \u002F a (1.0,1.05] geomean \u002F an info-only slow row as a reason to diagnose). For D **BLOCKED**, route by `block_class` in correctness.md **exactly as the Routing Table below**: `host` (wiring \u002F ffi.rs \u002F .so \u002F wrapper \u002F backend registration) -> Agent D(2) (D owns registration; C and B cannot fix it), `kernel` -> Agent C, `env` -> STOP\n[ ] 6. Run scripts\u002Fvalidate_kernel.sh {kernel_name} only after the pipeline has produced A\u002FB\u002FC-if-run\u002FD\u002FE artifacts\n",[119],{"type":42,"tag":64,"props":120,"children":122},{"__ignoreMap":121},"",[123],{"type":48,"value":117},{"type":42,"tag":58,"props":125,"children":126},{},[127,129,135],{"type":48,"value":128},"The orchestrator does not read ",{"type":42,"tag":64,"props":130,"children":132},{"className":131},[],[133],{"type":48,"value":134},"agents\u002Fagent_*.md",{"type":48,"value":136},". It copies the stage-specific Step 0 file set below into the sub-agent prompt and passes concrete prior artifact paths. Do not add a generic common reference preload: Agent B needs conversion docs; Agent D\u002FE usually do not.",{"type":42,"tag":51,"props":138,"children":140},{"id":139},"agent-step-0-file-sets",[141],{"type":48,"value":142},"Agent Step 0 File Sets",{"type":42,"tag":58,"props":144,"children":145},{},[146,152,154,160,162,168,170,176,178,183,185,191,193,199],{"type":42,"tag":147,"props":148,"children":149},"strong",{},[150],{"type":48,"value":151},"Path convention:",{"type":48,"value":153}," all skill-internal paths in this skill are written relative\nto the tilegym root (",{"type":42,"tag":64,"props":155,"children":157},{"className":156},[],[158],{"type":48,"value":159},"$TILEGYM_PATH",{"type":48,"value":161},", e.g. ",{"type":42,"tag":64,"props":163,"children":165},{"className":164},[],[166],{"type":48,"value":167},"\u002Fworkspace\u002Ftilegym",{"type":48,"value":169},"), which is the\nassumed current working directory for every agent. So ",{"type":42,"tag":64,"props":171,"children":173},{"className":172},[],[174],{"type":48,"value":175},".agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002F...",{"type":48,"value":177},"\nresolves from ",{"type":42,"tag":64,"props":179,"children":181},{"className":180},[],[182],{"type":48,"value":159},{"type":48,"value":184},". Read\u002Fcite skill files with these relative paths.\nAny bash snippet that invokes a skill ",{"type":42,"tag":64,"props":186,"children":188},{"className":187},[],[189],{"type":48,"value":190},"scripts\u002F*.sh",{"type":48,"value":192}," is prefixed with\n",{"type":42,"tag":64,"props":194,"children":196},{"className":195},[],[197],{"type":48,"value":198},"cd \"$TILEGYM_PATH\" &&",{"type":48,"value":200}," so it runs from the root even if a prior step changed the\ndirectory (e.g. a cargo build in the kernel-out dir).",{"type":42,"tag":58,"props":202,"children":203},{},[204,206,212],{"type":48,"value":205},"Use exactly the relevant set when filling ",{"type":42,"tag":64,"props":207,"children":209},{"className":208},[],[210],{"type":48,"value":211},"{agent_step0_files}",{"type":48,"value":213}," in the spawn template. These lists are intentionally different by stage.",{"type":42,"tag":58,"props":215,"children":216},{},[217],{"type":48,"value":218},"Agent A reads only dump\u002Fenvironment guidance:",{"type":42,"tag":113,"props":220,"children":223},{"className":221,"code":222,"language":48,"meta":121},[116],"- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_a.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fenv-block.md\n",[224],{"type":42,"tag":64,"props":225,"children":226},{"__ignoreMap":121},[227],{"type":48,"value":222},{"type":42,"tag":58,"props":229,"children":230},{},[231],{"type":48,"value":232},"Agent B reads conversion references, examples, and A's concrete reference artifacts:",{"type":42,"tag":113,"props":234,"children":237},{"className":235,"code":236,"language":48,"meta":121},[116],"- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_b.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fop-mapping.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Fstrided-view-to-partition-view.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Ftranspose-support.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Ftensor-vs-pointer-pattern.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fwalkthrough.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fkernel.rs\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fsoftmax_pipeline.rs\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freference\u002Fanalysis.json\n- the concrete structural reference IR paths from Agent A: either reference\u002Freference.mlir or each top-level reference\u002Freference_{variant}.mlir named in prior_artifact_paths\n- optional dtype-only supplements under reference\u002Fsupplements\u002F only when analysis.json names them\n",[238],{"type":42,"tag":64,"props":239,"children":240},{"__ignoreMap":121},[241],{"type":48,"value":236},{"type":42,"tag":58,"props":243,"children":244},{},[245],{"type":48,"value":246},"Agent C reads IR-diff references plus B outputs. If the route came from D\u002FE, include the relevant failure\u002Fperf report paths too.",{"type":42,"tag":113,"props":248,"children":251},{"className":249,"code":250,"language":48,"meta":121},[116],"- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_c.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fir-diff-checklist.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fop-mapping.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fconcepts\u002Fstrided-view-to-partition-view.md\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freference\u002Fanalysis.json\n- the concrete reference\u002Fgenerated canonical IR pair(s) from prior_artifact_paths\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Fkernel.rs\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Fffi.rs\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freports\u002Fagent_b.md\n",[252],{"type":42,"tag":64,"props":253,"children":254},{"__ignoreMap":121},[255],{"type":48,"value":250},{"type":42,"tag":58,"props":257,"children":258},{},[259],{"type":48,"value":260},"Agent D reads only the concrete templates it needs:",{"type":42,"tag":113,"props":262,"children":265},{"className":263,"code":264,"language":48,"meta":121},[116],"- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_d.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fffi.rs       (raw-pointer launch template)\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fbmm\u002Fffi.rs           (TILED-output template — read-only &Tensor output + partition_full_mut; NO &mut Tensor)\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fexamples\u002Fsoftmax\u002Fwrapper.py   (wrapper + argtypes + autotune)\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Fkernel.rs                  (B's kernel — entry sigs to launch)\n- $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freference\u002Fanalysis.json    (autotune configs for wrapper)\n- $TILEGYM_PATH\u002Fsrc\u002Ftilegym\u002Fops\u002Fcutile_rs\u002F__init__.py + $TILEGYM_PATH\u002Fsrc\u002Ftilegym\u002Fbackend\u002Fselector.py   (backend-reg files D edits)\n",[266],{"type":42,"tag":64,"props":267,"children":268},{"__ignoreMap":121},[269],{"type":48,"value":264},{"type":42,"tag":58,"props":271,"children":272},{},[273],{"type":48,"value":274},"On-demand only (not batched): references\u002Fcoding-rules.md (if a SKIP needs a citation),\ntests\u002Fops\u002Ftest_.py (when adding the cutile-rs parametrization).",{"type":42,"tag":58,"props":276,"children":277},{},[278],{"type":48,"value":279},"Agent E reads benchmark instructions only:",{"type":42,"tag":113,"props":281,"children":284},{"className":282,"code":283,"language":48,"meta":121},[116],"- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_e.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fperformance-checklist.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n",[285],{"type":42,"tag":64,"props":286,"children":287},{"__ignoreMap":121},[288],{"type":48,"value":283},{"type":42,"tag":58,"props":290,"children":291},{},[292],{"type":48,"value":293},"Agent F reads residual-perf diagnostics:",{"type":42,"tag":113,"props":295,"children":298},{"className":296,"code":297,"language":48,"meta":121},[116],"- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fagents\u002Fagent_f.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fperformance-checklist.md\n- .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Freferences\u002Fcoding-rules.md\n",[299],{"type":42,"tag":64,"props":300,"children":301},{"__ignoreMap":121},[302],{"type":48,"value":297},{"type":42,"tag":51,"props":304,"children":306},{"id":305},"minimal-agent-spawn-template",[307],{"type":48,"value":308},"Minimal Agent Spawn Template",{"type":42,"tag":58,"props":310,"children":311},{},[312],{"type":48,"value":313},"Use this shape for every sub-agent. Do not paste the full agent file into the prompt, and do not paste B conversion references into non-B stages.",{"type":42,"tag":113,"props":315,"children":318},{"className":316,"code":317,"language":48,"meta":121},[116],"Agent(\n  description=\"Agent {X} - {short title} for {kernel_name}\",\n  subagent_type=\"general-purpose\",\n  prompt=\"\"\"You are Agent {X}. Execute the {X}-stage of the cutile-rs conversion pipeline for kernel `{kernel_name}`.\n\nSTEP 0 (MANDATORY first tool call): Read these files in ONE batch Read call:\n{agent_step0_files}\n\nThen follow agent_{x}.md's procedure for `{kernel_name}`. If agent_{x}.md asks for an additional report because this is a failure\u002Fperf route, read only the concrete report path named below or in prior_artifact_paths.\n\nPrior-stage artifacts already on disk:\n{prior_artifact_paths}\n\nOUTPUT PROTOCOL:\n1. Write the stage report to $CUTILE_KERNEL_OUT_ROOT\u002F{kernel_name}\u002Freports\u002Fagent_{x}.md.\n2. Write the stage artifacts required by agent_{x}.md.\n3. Run only this stage's validators from agent_{x}.md's closing contract and capture stdout\u002Fstderr.\n   - Agent B runs validate_agent_b.sh and its compile\u002Fcanonicalization checks.\n   - Agent B does NOT run validate_kernel.sh; that is the final aggregate gate after D\u002FE.\n4. Return only a literal \u003CVALIDATOR_OUTPUT>...\u003C\u002FVALIDATOR_OUTPUT> block followed immediately by `VERDICT: X`.\n\nIf you cannot complete the stage, write SKILL_METHODOLOGY_BLOCKED.txt with the reason and return `VERDICT: BLOCKED`.\"\"\"\n)\n",[319],{"type":42,"tag":64,"props":320,"children":321},{"__ignoreMap":121},[322],{"type":48,"value":317},{"type":42,"tag":51,"props":324,"children":326},{"id":325},"routing-table",[327],{"type":48,"value":328},"Routing Table",{"type":42,"tag":58,"props":330,"children":331},{},[332],{"type":48,"value":333},"The orchestrator checks the validator block first, then applies this table. It does not infer fixes from prose.",{"type":42,"tag":58,"props":335,"children":336},{},[337,339,345,347,353,355,361],{"type":48,"value":338},"Device\u002Fhost split (this is why the fork exists; the rows below are the single\nsource of truth for where each verdict routes): Agent B writes the DEVICE kernel\nonly (kernel.rs + passing in-Rust pipeline test); Agent D owns the entire HOST\nboundary — ffi.rs (C-ABI launcher), the cdylib .so build, the Python wrapper +\nbackend wiring, AND correctness. Agents D and C emit the ",{"type":42,"tag":64,"props":340,"children":342},{"className":341},[],[343],{"type":48,"value":344},"fail_class:",{"type":48,"value":346}," \u002F\n",{"type":42,"tag":64,"props":348,"children":350},{"className":349},[],[351],{"type":48,"value":352},"block_class:",{"type":48,"value":354}," (D) or ",{"type":42,"tag":64,"props":356,"children":358},{"className":357},[],[359],{"type":48,"value":360},"owner:",{"type":48,"value":362}," (C) line that selects the matching row.",{"type":42,"tag":113,"props":364,"children":367},{"className":365,"code":366,"language":48,"meta":121},[116],"Stage              VERDICT                      Action\n-----              -------                      ------\nAgent A            PASS                         spawn Agent B\nAgent A            FAIL_FIXABLE | BLOCKED       STOP\n\nAgent B(1)         COMPILED                     spawn Agent D\nAgent B(1)         FAIL_COMPILE | FAIL_FIXABLE | BLOCKED\n                                                STOP\n\nAgent D(1)         ALL_PASS                     spawn Agent E\nAgent D(1)         FAIL (fail_class: host)      spawn Agent D(2) — D owns ffi.rs\u002F.so\u002Fwrapper\u002Flaunch fix.\n                                                Read `host_fix:` in correctness.md.\nAgent D(1)         FAIL (fail_class: kernel)    spawn Agent C — device-math fault; C diagnoses → B(2).\n                                                Read `agent_b_followup:` in correctness.md.\nAgent D(1)         BLOCKED (block_class: host)\n                                                spawn Agent D(2) — D's own wiring (0 tests collected,\n                                                import error, argtype\u002FCUDA-700). NOT a C\u002FB problem.\nAgent D(1)         BLOCKED (block_class: kernel)\n                                                spawn Agent C (in-kernel panic \u002F missing .so \u002F FFI gap)\nAgent D(1)         BLOCKED (block_class: env)\n                                                STOP — external cause (missing toolchain \u002F GPU \u002F\n                                                driver); not fixable by C, B, or D.\n\nAgent E(1)         DONE                         PIPELINE_COMPLETE\nAgent E(1)         INVESTIGATE | BLOCKED        spawn Agent C to diagnose the perf root cause,\n                                                if C has not run; otherwise PIPELINE_COMPLETE\n\nAgent C            FAIL_FIXABLE (owner: host)    spawn Agent D(2) if D has not been respawned — the fix is\n                                                host\u002FPython-side (autotune config, grid budget,\n                                                num_cta_in_cga\u002Foccupancy VALUE, layout). otherwise PIPELINE_COMPLETE\nAgent C            FAIL_FIXABLE (owner: kernel)  spawn Agent B(2) if B has not been respawned — the fix is\n                                                kernel.rs device math\u002FIR. otherwise PIPELINE_COMPLETE\nAgent C            PASS | PASS_WITH_NOTES        PIPELINE_COMPLETE\nAgent C            FAIL_COMPILER_BUG | BLOCKED   PIPELINE_COMPLETE\n\nAgent B(2)         COMPILED                     spawn Agent D(2)\nAgent B(2)         FAIL_COMPILE | FAIL_FIXABLE | BLOCKED\n                                                STOP\n\nAgent D(2)         ALL_PASS                     spawn Agent E(2)\nAgent D(2)         FAIL | BLOCKED               PIPELINE_COMPLETE\n\nAgent E(2)         DONE | INVESTIGATE | BLOCKED PIPELINE_COMPLETE\n\nAgent F            FIXABLE | ALIGNED | BLOCKED  PIPELINE_COMPLETE\n",[368],{"type":42,"tag":64,"props":369,"children":370},{"__ignoreMap":121},[371],{"type":48,"value":366},{"type":42,"tag":58,"props":373,"children":374},{},[375,377,382,384,389,391,396],{"type":48,"value":376},"If a ",{"type":42,"tag":64,"props":378,"children":380},{"className":379},[],[381],{"type":48,"value":344},{"type":48,"value":383}," \u002F ",{"type":42,"tag":64,"props":385,"children":387},{"className":386},[],[388],{"type":48,"value":352},{"type":48,"value":390}," (from D) or ",{"type":42,"tag":64,"props":392,"children":394},{"className":393},[],[395],{"type":48,"value":360},{"type":48,"value":397}," (from C) line is absent,\nfall back to the kernel route (C \u002F B) — but the agents are required to emit it,\nand host faults misrouted to B waste a full stage.",{"type":42,"tag":58,"props":399,"children":400},{},[401],{"type":48,"value":402},"Meaning of Agent C verdicts:",{"type":42,"tag":404,"props":405,"children":406},"ul",{},[407,466,477,488],{"type":42,"tag":408,"props":409,"children":410},"li",{},[411,417,419,425,427,433,435,441,443,449,451,457,459,464],{"type":42,"tag":64,"props":412,"children":414},{"className":413},[],[415],{"type":48,"value":416},"FAIL_FIXABLE",{"type":48,"value":418}," means \"a concrete next edit is owned now.\" C MUST tag the owner in ",{"type":42,"tag":64,"props":420,"children":422},{"className":421},[],[423],{"type":48,"value":424},"generated\u002Fdiff_report.md",{"type":48,"value":426}," with an ",{"type":42,"tag":64,"props":428,"children":430},{"className":429},[],[431],{"type":48,"value":432},"owner: host",{"type":48,"value":434}," or ",{"type":42,"tag":64,"props":436,"children":438},{"className":437},[],[439],{"type":48,"value":440},"owner: kernel",{"type":48,"value":442}," line, where ",{"type":42,"tag":64,"props":444,"children":446},{"className":445},[],[447],{"type":48,"value":448},"host",{"type":48,"value":450}," = ffi.rs launcher \u002F output-partition ABI \u002F launch grid \u002F autotune value \u002F wrapper, and ",{"type":42,"tag":64,"props":452,"children":454},{"className":453},[],[455],{"type":48,"value":456},"kernel",{"type":48,"value":458}," = kernel.rs device math \u002F IR. The orchestrator routes that owner strictly per the Routing Table above — do not restate the target agent here. Action items go in ",{"type":42,"tag":64,"props":460,"children":462},{"className":461},[],[463],{"type":48,"value":424},{"type":48,"value":465},".",{"type":42,"tag":408,"props":467,"children":468},{},[469,475],{"type":42,"tag":64,"props":470,"children":472},{"className":471},[],[473],{"type":48,"value":474},"PASS",{"type":48,"value":476}," means the IR\u002Fperf\u002Fcorrectness diagnostic found no fixable owner.",{"type":42,"tag":408,"props":478,"children":479},{},[480,486],{"type":42,"tag":64,"props":481,"children":483},{"className":482},[],[484],{"type":48,"value":485},"PASS_WITH_NOTES",{"type":48,"value":487}," means the remaining differences are known gaps, INFO-only deltas, accepted semantic equivalents, or residual perf notes. Do not respawn for this verdict.",{"type":42,"tag":408,"props":489,"children":490},{},[491,497,499,505],{"type":42,"tag":64,"props":492,"children":494},{"className":493},[],[495],{"type":48,"value":496},"FAIL_COMPILER_BUG",{"type":48,"value":498}," and ",{"type":42,"tag":64,"props":500,"children":502},{"className":501},[],[503],{"type":48,"value":504},"BLOCKED",{"type":48,"value":506}," stop the in-run loop; reflection mines the reports.",{"type":42,"tag":51,"props":508,"children":510},{"id":509},"spawn-caps",[511],{"type":48,"value":512},"Spawn Caps",{"type":42,"tag":58,"props":514,"children":515},{},[516],{"type":48,"value":517},"Hard caps per pipeline run:",{"type":42,"tag":519,"props":520,"children":521},"table",{},[522,542],{"type":42,"tag":523,"props":524,"children":525},"thead",{},[526],{"type":42,"tag":527,"props":528,"children":529},"tr",{},[530,536],{"type":42,"tag":531,"props":532,"children":533},"th",{},[534],{"type":48,"value":535},"Agent",{"type":42,"tag":531,"props":537,"children":539},{"align":538},"right",[540],{"type":48,"value":541},"Max semantic runs",{"type":42,"tag":543,"props":544,"children":545},"tbody",{},[546,560,573,585,597,609],{"type":42,"tag":527,"props":547,"children":548},{},[549,555],{"type":42,"tag":550,"props":551,"children":552},"td",{},[553],{"type":48,"value":554},"A",{"type":42,"tag":550,"props":556,"children":557},{"align":538},[558],{"type":48,"value":559},"1",{"type":42,"tag":527,"props":561,"children":562},{},[563,568],{"type":42,"tag":550,"props":564,"children":565},{},[566],{"type":48,"value":567},"B",{"type":42,"tag":550,"props":569,"children":570},{"align":538},[571],{"type":48,"value":572},"2",{"type":42,"tag":527,"props":574,"children":575},{},[576,581],{"type":42,"tag":550,"props":577,"children":578},{},[579],{"type":48,"value":580},"C",{"type":42,"tag":550,"props":582,"children":583},{"align":538},[584],{"type":48,"value":559},{"type":42,"tag":527,"props":586,"children":587},{},[588,593],{"type":42,"tag":550,"props":589,"children":590},{},[591],{"type":48,"value":592},"D",{"type":42,"tag":550,"props":594,"children":595},{"align":538},[596],{"type":48,"value":572},{"type":42,"tag":527,"props":598,"children":599},{},[600,605],{"type":42,"tag":550,"props":601,"children":602},{},[603],{"type":48,"value":604},"E",{"type":42,"tag":550,"props":606,"children":607},{"align":538},[608],{"type":48,"value":572},{"type":42,"tag":527,"props":610,"children":611},{},[612,617],{"type":42,"tag":550,"props":613,"children":614},{},[615],{"type":48,"value":616},"F",{"type":42,"tag":550,"props":618,"children":619},{"align":538},[620],{"type":48,"value":559},{"type":42,"tag":58,"props":622,"children":623},{},[624],{"type":48,"value":625},"A same-agent validator-block repair is also capped at one per letter. Validator repair never cascades to another agent letter.",{"type":42,"tag":51,"props":627,"children":629},{"id":628},"mechanical-validator-acceptance-gate",[630],{"type":48,"value":631},"Mechanical Validator Acceptance Gate",{"type":42,"tag":58,"props":633,"children":634},{},[635],{"type":48,"value":636},"After every sub-agent return:",{"type":42,"tag":638,"props":639,"children":640},"ol",{},[641,654,675,695,795,800],{"type":42,"tag":408,"props":642,"children":643},{},[644,646,652],{"type":48,"value":645},"Extract the first enumerated ",{"type":42,"tag":64,"props":647,"children":649},{"className":648},[],[650],{"type":48,"value":651},"VERDICT:",{"type":48,"value":653}," line.",{"type":42,"tag":408,"props":655,"children":656},{},[657,659,665,667,673],{"type":48,"value":658},"Look for a literal ",{"type":42,"tag":64,"props":660,"children":662},{"className":661},[],[663],{"type":48,"value":664},"\u003CVALIDATOR_OUTPUT>",{"type":48,"value":666}," ... ",{"type":42,"tag":64,"props":668,"children":670},{"className":669},[],[671],{"type":48,"value":672},"\u003C\u002FVALIDATOR_OUTPUT>",{"type":48,"value":674}," block.",{"type":42,"tag":408,"props":676,"children":677},{},[678,680,686,687,693],{"type":48,"value":679},"If the block exists and every parseable ",{"type":42,"tag":64,"props":681,"children":683},{"className":682},[],[684],{"type":48,"value":685},"exit=\u003Cn>",{"type":48,"value":383},{"type":42,"tag":64,"props":688,"children":690},{"className":689},[],[691],{"type":48,"value":692},"exit_code=\u003Cn>",{"type":48,"value":694}," is zero, accept the return and route by verdict.",{"type":42,"tag":408,"props":696,"children":697},{},[698,700,705,707,713,714,720,721,727,729,735,736,742,743,749,750,756,757,763,764,770,771,777,779,785,787,793],{"type":48,"value":699},"If the block is missing but the final verdict is a clean success marker (",{"type":42,"tag":64,"props":701,"children":703},{"className":702},[],[704],{"type":48,"value":474},{"type":48,"value":706},", ",{"type":42,"tag":64,"props":708,"children":710},{"className":709},[],[711],{"type":48,"value":712},"COMPILED",{"type":48,"value":706},{"type":42,"tag":64,"props":715,"children":717},{"className":716},[],[718],{"type":48,"value":719},"ALL_PASS",{"type":48,"value":706},{"type":42,"tag":64,"props":722,"children":724},{"className":723},[],[725],{"type":48,"value":726},"DONE",{"type":48,"value":728},") and the return contains no failure marker (",{"type":42,"tag":64,"props":730,"children":732},{"className":731},[],[733],{"type":48,"value":734},"FAIL",{"type":48,"value":706},{"type":42,"tag":64,"props":737,"children":739},{"className":738},[],[740],{"type":48,"value":741},"ERROR",{"type":48,"value":706},{"type":42,"tag":64,"props":744,"children":746},{"className":745},[],[747],{"type":48,"value":748},"Traceback",{"type":48,"value":706},{"type":42,"tag":64,"props":751,"children":753},{"className":752},[],[754],{"type":48,"value":755},"panic",{"type":48,"value":706},{"type":42,"tag":64,"props":758,"children":760},{"className":759},[],[761],{"type":48,"value":762},"exit=1",{"type":48,"value":706},{"type":42,"tag":64,"props":765,"children":767},{"className":766},[],[768],{"type":48,"value":769},"exit_code=1",{"type":48,"value":706},{"type":42,"tag":64,"props":772,"children":774},{"className":773},[],[775],{"type":48,"value":776},"nonzero",{"type":48,"value":778},", or ",{"type":42,"tag":64,"props":780,"children":782},{"className":781},[],[783],{"type":48,"value":784},"timeout",{"type":48,"value":786},"), accept the verdict, record ",{"type":42,"tag":64,"props":788,"children":790},{"className":789},[],[791],{"type":48,"value":792},"SOFT_VALIDATOR_MISSING",{"type":48,"value":794},", and do not respawn for formatting alone.",{"type":42,"tag":408,"props":796,"children":797},{},[798],{"type":48,"value":799},"If a block exists with a non-zero exit, or no clean fallback applies, respawn only the same agent letter once for validator repair. The repair prompt tells it to reuse existing artifacts and return the same semantic verdict plus a valid validator block.",{"type":42,"tag":408,"props":801,"children":802},{},[803,805,811],{"type":48,"value":804},"If the repair still fails, proceed with ",{"type":42,"tag":64,"props":806,"children":808},{"className":807},[],[809],{"type":48,"value":810},"SOFT_VALIDATOR_FAILED",{"type":48,"value":812}," unless the semantic verdict itself blocks. Never cascade validator repair across agents.",{"type":42,"tag":58,"props":814,"children":815},{},[816],{"type":48,"value":817},"This gate is mechanical. It does not authorize the orchestrator to run cargo, pytest, benchmarks, IR diffs, or source edits inline.",{"type":42,"tag":51,"props":819,"children":821},{"id":820},"final-aggregate-gate",[822],{"type":48,"value":823},"Final Aggregate Gate",{"type":42,"tag":58,"props":825,"children":826},{},[827,829,835],{"type":48,"value":828},"Run this only after the route has reached ",{"type":42,"tag":64,"props":830,"children":832},{"className":831},[],[833],{"type":48,"value":834},"PIPELINE_COMPLETE",{"type":48,"value":836},":",{"type":42,"tag":113,"props":838,"children":842},{"className":839,"code":840,"language":841,"meta":121,"style":121},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd \"$TILEGYM_PATH\" && bash .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fscripts\u002Fvalidate_kernel.sh {kernel_name}\n","bash",[843],{"type":42,"tag":64,"props":844,"children":845},{"__ignoreMap":121},[846],{"type":42,"tag":847,"props":848,"children":851},"span",{"class":849,"line":850},"line",1,[852,858,864,869,874,879,885,891],{"type":42,"tag":847,"props":853,"children":855},{"style":854},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[856],{"type":48,"value":857},"cd",{"type":42,"tag":847,"props":859,"children":861},{"style":860},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[862],{"type":48,"value":863}," \"",{"type":42,"tag":847,"props":865,"children":867},{"style":866},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[868],{"type":48,"value":159},{"type":42,"tag":847,"props":870,"children":871},{"style":860},[872],{"type":48,"value":873},"\"",{"type":42,"tag":847,"props":875,"children":876},{"style":860},[877],{"type":48,"value":878}," &&",{"type":42,"tag":847,"props":880,"children":882},{"style":881},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[883],{"type":48,"value":884}," bash",{"type":42,"tag":847,"props":886,"children":888},{"style":887},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[889],{"type":48,"value":890}," .agents\u002Fskills\u002Ftilegym-converting-cutile-triton-to-cutile-rs\u002Fscripts\u002Fvalidate_kernel.sh",{"type":42,"tag":847,"props":892,"children":893},{"style":887},[894],{"type":48,"value":895}," {kernel_name}\n",{"type":42,"tag":58,"props":897,"children":898},{},[899,905],{"type":42,"tag":64,"props":900,"children":902},{"className":901},[],[903],{"type":48,"value":904},"validate_kernel.sh",{"type":48,"value":906}," is a 17-file end-to-end checklist across A\u002FB\u002FC-if-run\u002FD\u002FE outputs. It is not an Agent B validator because B runs before correctness and performance artifacts exist.",{"type":42,"tag":58,"props":908,"children":909},{},[910],{"type":48,"value":911},"If final validation fails, record the output in the orchestrator summary. Do not repair by running cargo, pytest, benchmarks, or editing files inline; if another agent is needed, it must follow the routing table and spawn caps.",{"type":42,"tag":51,"props":913,"children":915},{"id":914},"pipeline-order",[916],{"type":48,"value":917},"Pipeline Order",{"type":42,"tag":638,"props":919,"children":920},{},[921,934,939,944,962,967,986,1011],{"type":42,"tag":408,"props":922,"children":923},{},[924,926,932],{"type":48,"value":925},"Run ",{"type":42,"tag":64,"props":927,"children":929},{"className":928},[],[930],{"type":48,"value":931},"scripts\u002Fpreflight.sh",{"type":48,"value":933}," first. It checks required env vars and toolchain paths.",{"type":42,"tag":408,"props":935,"children":936},{},[937],{"type":48,"value":938},"Spawn Agent A. Agent A writes reference IR, analysis.json, tolerance, and baseline perf logs.",{"type":42,"tag":408,"props":940,"children":941},{},[942],{"type":48,"value":943},"Spawn Agent B. Agent B writes the device kernel.rs, kernel-only Cargo project, generated IR, and a build log, and proves the kernel with a passing in-Rust pipeline test + a host_launch_contract for D. B does NOT write ffi.rs, build the .so, write the Python wrapper, or register the backend.",{"type":42,"tag":408,"props":945,"children":946},{},[947,949],{"type":48,"value":948},"Spawn Agent D. Agent D writes ffi.rs (C-ABI launcher) + builds the cdylib .so, then the Python wrapper + backend wiring (ops\u002Fcutile_rs\u002F",{"type":42,"tag":950,"props":951,"children":952},"name",{},[953,955,960],{"type":48,"value":954},".py, ops\u002F",{"type":42,"tag":147,"props":956,"children":957},{},[958],{"type":48,"value":959},"init",{"type":48,"value":961},", selector.py, test parametrization), then runs tilegym correctness.",{"type":42,"tag":408,"props":963,"children":964},{},[965],{"type":48,"value":966},"Spawn Agent E. Agent E runs CUPTI-backed performance comparison.",{"type":42,"tag":408,"props":968,"children":969},{},[970,972,978,980,985],{"type":48,"value":971},"Spawn Agent C only when D\u002FE produce a non-DONE semantic result. C diagnoses, tags ",{"type":42,"tag":64,"props":973,"children":975},{"className":974},[],[976],{"type":48,"value":977},"owner: host|kernel",{"type":48,"value":979},", and writes ",{"type":42,"tag":64,"props":981,"children":983},{"className":982},[],[984],{"type":48,"value":424},{"type":48,"value":465},{"type":42,"tag":408,"props":987,"children":988},{},[989,991,996,998,1003,1005,1010],{"type":48,"value":990},"On a fixable result, respawn the owner that C's ",{"type":42,"tag":64,"props":992,"children":994},{"className":993},[],[995],{"type":48,"value":360},{"type":48,"value":997}," line (or D's ",{"type":42,"tag":64,"props":999,"children":1001},{"className":1000},[],[1002],{"type":48,"value":344},{"type":48,"value":1004},") names, exactly as the Routing Table maps it — do not re-derive the target here. ffi.rs is D-owned, never B's, so a host fault never routes to B; D self-routes its own FAIL via ",{"type":42,"tag":64,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":48,"value":344},{"type":48,"value":465},{"type":42,"tag":408,"props":1012,"children":1013},{},[1014],{"type":48,"value":1015},"Stop after E(2) or any cap exhaustion. Reflection handles multi-iteration learning.",{"type":42,"tag":51,"props":1017,"children":1019},{"id":1018},"available-scripts",[1020],{"type":48,"value":1021},"Available Scripts",{"type":42,"tag":519,"props":1023,"children":1024},{},[1025,1046],{"type":42,"tag":523,"props":1026,"children":1027},{},[1028],{"type":42,"tag":527,"props":1029,"children":1030},{},[1031,1036,1041],{"type":42,"tag":531,"props":1032,"children":1033},{},[1034],{"type":48,"value":1035},"Script",{"type":42,"tag":531,"props":1037,"children":1038},{},[1039],{"type":48,"value":1040},"Purpose",{"type":42,"tag":531,"props":1042,"children":1043},{},[1044],{"type":48,"value":1045},"Arguments",{"type":42,"tag":543,"props":1047,"children":1048},{},[1049,1071,1097,1123,1148,1173,1198,1223,1248,1274,1298],{"type":42,"tag":527,"props":1050,"children":1051},{},[1052,1061,1066],{"type":42,"tag":550,"props":1053,"children":1054},{},[1055],{"type":42,"tag":64,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":48,"value":1060},"preflight.sh",{"type":42,"tag":550,"props":1062,"children":1063},{},[1064],{"type":48,"value":1065},"Verify env vars and toolchain paths",{"type":42,"tag":550,"props":1067,"children":1068},{},[1069],{"type":48,"value":1070},"none",{"type":42,"tag":527,"props":1072,"children":1073},{},[1074,1083,1088],{"type":42,"tag":550,"props":1075,"children":1076},{},[1077],{"type":42,"tag":64,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":48,"value":1082},"validate_analysis.sh",{"type":42,"tag":550,"props":1084,"children":1085},{},[1086],{"type":48,"value":1087},"Validate Agent A analysis.json",{"type":42,"tag":550,"props":1089,"children":1090},{},[1091],{"type":42,"tag":64,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":48,"value":1096},"{kernel_name}",{"type":42,"tag":527,"props":1098,"children":1099},{},[1100,1109,1114],{"type":42,"tag":550,"props":1101,"children":1102},{},[1103],{"type":42,"tag":64,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":48,"value":1108},"validate_ir.sh",{"type":42,"tag":550,"props":1110,"children":1111},{},[1112],{"type":48,"value":1113},"Validate a reference\u002Fgenerated MLIR file",{"type":42,"tag":550,"props":1115,"children":1116},{},[1117],{"type":42,"tag":64,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":48,"value":1122},"{path\u002Fto\u002F.mlir} {kernel_name}",{"type":42,"tag":527,"props":1124,"children":1125},{},[1126,1135,1140],{"type":42,"tag":550,"props":1127,"children":1128},{},[1129],{"type":42,"tag":64,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":48,"value":1134},"validate_agent_b.sh",{"type":42,"tag":550,"props":1136,"children":1137},{},[1138],{"type":48,"value":1139},"Validate B-stage kernel\u002Fbuild\u002Fwrapper artifacts",{"type":42,"tag":550,"props":1141,"children":1142},{},[1143],{"type":42,"tag":64,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":48,"value":1096},{"type":42,"tag":527,"props":1149,"children":1150},{},[1151,1160,1165],{"type":42,"tag":550,"props":1152,"children":1153},{},[1154],{"type":42,"tag":64,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":48,"value":1159},"validate_agent_d.sh",{"type":42,"tag":550,"props":1161,"children":1162},{},[1163],{"type":48,"value":1164},"Validate D correctness report",{"type":42,"tag":550,"props":1166,"children":1167},{},[1168],{"type":42,"tag":64,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":48,"value":1096},{"type":42,"tag":527,"props":1174,"children":1175},{},[1176,1185,1190],{"type":42,"tag":550,"props":1177,"children":1178},{},[1179],{"type":42,"tag":64,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":48,"value":1184},"validate_agent_e.sh",{"type":42,"tag":550,"props":1186,"children":1187},{},[1188],{"type":48,"value":1189},"Validate E performance report",{"type":42,"tag":550,"props":1191,"children":1192},{},[1193],{"type":42,"tag":64,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":48,"value":1096},{"type":42,"tag":527,"props":1199,"children":1200},{},[1201,1210,1215],{"type":42,"tag":550,"props":1202,"children":1203},{},[1204],{"type":42,"tag":64,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":48,"value":1209},"validate_agent_f.sh",{"type":42,"tag":550,"props":1211,"children":1212},{},[1213],{"type":48,"value":1214},"Validate F residual investigation report",{"type":42,"tag":550,"props":1216,"children":1217},{},[1218],{"type":42,"tag":64,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":48,"value":1096},{"type":42,"tag":527,"props":1224,"children":1225},{},[1226,1235,1240],{"type":42,"tag":550,"props":1227,"children":1228},{},[1229],{"type":42,"tag":64,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":48,"value":1234},"validate_diff_report.sh",{"type":42,"tag":550,"props":1236,"children":1237},{},[1238],{"type":48,"value":1239},"Validate Agent C diff_report.md",{"type":42,"tag":550,"props":1241,"children":1242},{},[1243],{"type":42,"tag":64,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":48,"value":1096},{"type":42,"tag":527,"props":1249,"children":1250},{},[1251,1260,1265],{"type":42,"tag":550,"props":1252,"children":1253},{},[1254],{"type":42,"tag":64,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":48,"value":1259},"validate_perf_log.sh",{"type":42,"tag":550,"props":1261,"children":1262},{},[1263],{"type":48,"value":1264},"Validate CUPTI perf log records",{"type":42,"tag":550,"props":1266,"children":1267},{},[1268],{"type":42,"tag":64,"props":1269,"children":1271},{"className":1270},[],[1272],{"type":48,"value":1273},"{path\u002Fto\u002Fperf_log.txt} {label}",{"type":42,"tag":527,"props":1275,"children":1276},{},[1277,1285,1290],{"type":42,"tag":550,"props":1278,"children":1279},{},[1280],{"type":42,"tag":64,"props":1281,"children":1283},{"className":1282},[],[1284],{"type":48,"value":904},{"type":42,"tag":550,"props":1286,"children":1287},{},[1288],{"type":48,"value":1289},"Final aggregate output contract",{"type":42,"tag":550,"props":1291,"children":1292},{},[1293],{"type":42,"tag":64,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":48,"value":1096},{"type":42,"tag":527,"props":1299,"children":1300},{},[1301,1310,1315],{"type":42,"tag":550,"props":1302,"children":1303},{},[1304],{"type":42,"tag":64,"props":1305,"children":1307},{"className":1306},[],[1308],{"type":48,"value":1309},"diff_ir.sh",{"type":42,"tag":550,"props":1311,"children":1312},{},[1313],{"type":48,"value":1314},"Side-by-side IR op\u002Fattribute diff",{"type":42,"tag":550,"props":1316,"children":1317},{},[1318],{"type":42,"tag":64,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":48,"value":1323},"{ref.mlir} {gen.mlir}",{"type":42,"tag":51,"props":1325,"children":1327},{"id":1326},"examples",[1328],{"type":48,"value":1329},"Examples",{"type":42,"tag":58,"props":1331,"children":1332},{},[1333,1335,1341],{"type":48,"value":1334},"Two fully worked conversions ship under ",{"type":42,"tag":64,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":48,"value":1340},"examples\u002F",{"type":48,"value":1342}," as read-only templates the\nsub-agents cite (per the Agent Step 0 File Sets) — never copied blindly:",{"type":42,"tag":404,"props":1344,"children":1345},{},[1346,1401],{"type":42,"tag":408,"props":1347,"children":1348},{},[1349,1355,1357,1362,1364,1370,1371,1377,1379,1385,1386,1392,1393,1399],{"type":42,"tag":64,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":48,"value":1354},"examples\u002Fsoftmax\u002F",{"type":48,"value":1356}," — ",{"type":42,"tag":147,"props":1358,"children":1359},{},[1360],{"type":48,"value":1361},"raw-pointer launch",{"type":48,"value":1363}," (",{"type":42,"tag":64,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":48,"value":1369},"kernel.rs",{"type":48,"value":706},{"type":42,"tag":64,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":48,"value":1376},"ffi.rs",{"type":48,"value":1378},",\n",{"type":42,"tag":64,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":48,"value":1384},"wrapper.py",{"type":48,"value":706},{"type":42,"tag":64,"props":1387,"children":1389},{"className":1388},[],[1390],{"type":48,"value":1391},"softmax_pipeline.rs",{"type":48,"value":706},{"type":42,"tag":64,"props":1394,"children":1396},{"className":1395},[],[1397],{"type":48,"value":1398},"walkthrough.md",{"type":48,"value":1400},"). The pattern for\nelementwise \u002F reduction ops that launch over raw device pointers.",{"type":42,"tag":408,"props":1402,"children":1403},{},[1404,1410,1411,1416,1417,1422,1423,1428,1429,1434,1435,1440,1442,1448,1450,1456,1458,1464],{"type":42,"tag":64,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":48,"value":1409},"examples\u002Fbmm\u002F",{"type":48,"value":1356},{"type":42,"tag":147,"props":1412,"children":1413},{},[1414],{"type":48,"value":1415},"tiled-output launch",{"type":48,"value":1363},{"type":42,"tag":64,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":48,"value":1369},{"type":48,"value":706},{"type":42,"tag":64,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":48,"value":1376},{"type":48,"value":1378},{"type":42,"tag":64,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":48,"value":1384},{"type":48,"value":706},{"type":42,"tag":64,"props":1436,"children":1438},{"className":1437},[],[1439],{"type":48,"value":1398},{"type":48,"value":1441},"). The template for matmul-class ops:\nread-only ",{"type":42,"tag":64,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":48,"value":1447},"&Tensor",{"type":48,"value":1449}," output + ",{"type":42,"tag":64,"props":1451,"children":1453},{"className":1452},[],[1454],{"type":48,"value":1455},"partition_full_mut",{"type":48,"value":1457}," (never ",{"type":42,"tag":64,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":48,"value":1463},"&mut Tensor",{"type":48,"value":1465},").",{"type":42,"tag":51,"props":1467,"children":1469},{"id":1468},"stop-list",[1470],{"type":48,"value":1471},"STOP List",{"type":42,"tag":58,"props":1473,"children":1474},{},[1475],{"type":48,"value":1476},"The orchestrator must not:",{"type":42,"tag":404,"props":1478,"children":1479},{},[1480,1485,1490,1495,1500,1517,1528,1567,1572,1577],{"type":42,"tag":408,"props":1481,"children":1482},{},[1483],{"type":48,"value":1484},"Paste an agent file into a spawn prompt.",{"type":42,"tag":408,"props":1486,"children":1487},{},[1488],{"type":48,"value":1489},"Add common conversion references to every agent prompt.",{"type":42,"tag":408,"props":1491,"children":1492},{},[1493],{"type":48,"value":1494},"Summarize or reinterpret agent instructions when spawning.",{"type":42,"tag":408,"props":1496,"children":1497},{},[1498],{"type":48,"value":1499},"Respawn an agent beyond the caps above.",{"type":42,"tag":408,"props":1501,"children":1502},{},[1503,1505,1510,1511,1516],{"type":48,"value":1504},"Spawn B(2) after C ",{"type":42,"tag":64,"props":1506,"children":1508},{"className":1507},[],[1509],{"type":48,"value":474},{"type":48,"value":434},{"type":42,"tag":64,"props":1512,"children":1514},{"className":1513},[],[1515],{"type":48,"value":485},{"type":48,"value":465},{"type":42,"tag":408,"props":1518,"children":1519},{},[1520,1521,1526],{"type":48,"value":925},{"type":42,"tag":64,"props":1522,"children":1524},{"className":1523},[],[1525],{"type":48,"value":904},{"type":48,"value":1527}," from Agent B's validator block.",{"type":42,"tag":408,"props":1529,"children":1530},{},[1531,1533,1538,1539,1544,1545,1550,1552,1557,1559,1565],{"type":48,"value":1532},"Edit ",{"type":42,"tag":64,"props":1534,"children":1536},{"className":1535},[],[1537],{"type":48,"value":1369},{"type":48,"value":706},{"type":42,"tag":64,"props":1540,"children":1542},{"className":1541},[],[1543],{"type":48,"value":1376},{"type":48,"value":706},{"type":42,"tag":64,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":48,"value":1384},{"type":48,"value":1551},", tests, Cargo.toml, or generated IR. (This bans the ",{"type":42,"tag":147,"props":1553,"children":1554},{},[1555],{"type":48,"value":1556},"orchestrator",{"type":48,"value":1558}," from editing. Sub-agents edit their own artifacts per their agent files — Agent D writes ffi.rs \u002F wrapper \u002F test parametrization; Agent E may make the one narrow ",{"type":42,"tag":64,"props":1560,"children":1562},{"className":1561},[],[1563],{"type":48,"value":1564},"test_perf",{"type":48,"value":1566}," backend-parametrize wiring described in its Step 0.5. Neither is an orchestrator edit.)",{"type":42,"tag":408,"props":1568,"children":1569},{},[1570],{"type":48,"value":1571},"Run cargo, pytest, benchmarks, nsys, ncu, or IR diff inline.",{"type":42,"tag":408,"props":1573,"children":1574},{},[1575],{"type":48,"value":1576},"Parse sub-agent return text beyond validator-block mechanics and final verdict.",{"type":42,"tag":408,"props":1578,"children":1579},{},[1580],{"type":48,"value":1581},"Use final aggregate validation as a reason to bypass the routing table.",{"type":42,"tag":58,"props":1583,"children":1584},{},[1585,1587,1593],{"type":48,"value":1586},"For detailed rationale, retry policy, and critical conversion rules, read ",{"type":42,"tag":64,"props":1588,"children":1590},{"className":1589},[],[1591],{"type":48,"value":1592},"references\u002Fpipeline.md",{"type":48,"value":465},{"type":42,"tag":1595,"props":1596,"children":1597},"style",{},[1598],{"type":48,"value":1599},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1601,"total":850},[1602],{"slug":4,"name":4,"fn":5,"description":6,"org":1603,"tags":1604,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1605,1606,1607,1608],{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"items":1610,"total":1769},[1611,1629,1647,1658,1670,1684,1697,1711,1724,1735,1749,1758],{"slug":1612,"name":1612,"fn":1613,"description":1614,"org":1615,"tags":1616,"stars":1626,"repoUrl":1627,"updatedAt":1628},"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},[1617,1620,1623],{"name":1618,"slug":1619,"type":15},"Documentation","documentation",{"name":1621,"slug":1622,"type":15},"MCP","mcp",{"name":1624,"slug":1625,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":1630,"name":1630,"fn":1631,"description":1632,"org":1633,"tags":1634,"stars":1644,"repoUrl":1645,"updatedAt":1646},"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},[1635,1638,1641],{"name":1636,"slug":1637,"type":15},"Containers","containers",{"name":1639,"slug":1640,"type":15},"Deployment","deployment",{"name":1642,"slug":1643,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":1648,"name":1648,"fn":1649,"description":1650,"org":1651,"tags":1652,"stars":1644,"repoUrl":1645,"updatedAt":1657},"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},[1653,1656],{"name":1654,"slug":1655,"type":15},"CI\u002FCD","ci-cd",{"name":1639,"slug":1640,"type":15},"2026-07-14T05:25:59.97109",{"slug":1659,"name":1659,"fn":1660,"description":1661,"org":1662,"tags":1663,"stars":1644,"repoUrl":1645,"updatedAt":1669},"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},[1664,1665,1666],{"name":1654,"slug":1655,"type":15},{"name":1639,"slug":1640,"type":15},{"name":1667,"slug":1668,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":1671,"name":1671,"fn":1672,"description":1673,"org":1674,"tags":1675,"stars":1644,"repoUrl":1645,"updatedAt":1683},"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},[1676,1679,1680],{"name":1677,"slug":1678,"type":15},"Debugging","debugging",{"name":1667,"slug":1668,"type":15},{"name":1681,"slug":1682,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":1685,"name":1685,"fn":1686,"description":1687,"org":1688,"tags":1689,"stars":1644,"repoUrl":1645,"updatedAt":1696},"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},[1690,1693],{"name":1691,"slug":1692,"type":15},"Best Practices","best-practices",{"name":1694,"slug":1695,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":1698,"name":1698,"fn":1699,"description":1700,"org":1701,"tags":1702,"stars":1644,"repoUrl":1645,"updatedAt":1710},"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},[1703,1706,1709],{"name":1704,"slug":1705,"type":15},"Machine Learning","machine-learning",{"name":1707,"slug":1708,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":1712,"name":1712,"fn":1713,"description":1714,"org":1715,"tags":1716,"stars":1644,"repoUrl":1645,"updatedAt":1723},"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},[1717,1720],{"name":1718,"slug":1719,"type":15},"QA","qa",{"name":1721,"slug":1722,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":1725,"name":1725,"fn":1726,"description":1727,"org":1728,"tags":1729,"stars":1644,"repoUrl":1645,"updatedAt":1734},"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},[1730,1731],{"name":1639,"slug":1640,"type":15},{"name":1732,"slug":1733,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":1736,"name":1736,"fn":1737,"description":1738,"org":1739,"tags":1740,"stars":1644,"repoUrl":1645,"updatedAt":1748},"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},[1741,1744,1745],{"name":1742,"slug":1743,"type":15},"Code Review","code-review",{"name":1667,"slug":1668,"type":15},{"name":1746,"slug":1747,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":1750,"name":1750,"fn":1751,"description":1752,"org":1753,"tags":1754,"stars":1644,"repoUrl":1645,"updatedAt":1757},"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},[1755,1756],{"name":1718,"slug":1719,"type":15},{"name":1721,"slug":1722,"type":15},"2026-07-14T05:25:54.928983",{"slug":1759,"name":1759,"fn":1760,"description":1761,"org":1762,"tags":1763,"stars":1644,"repoUrl":1645,"updatedAt":1768},"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},[1764,1767],{"name":1765,"slug":1766,"type":15},"Automation","automation",{"name":1654,"slug":1655,"type":15},"2026-07-30T05:29:03.275638",496]