[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-nvflare-convert-lightning":3,"mdc-l3evba-key":41,"related-repo-nvidia-nvflare-convert-lightning":870,"related-org-nvidia-nvflare-convert-lightning":959},{"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":36,"sourceUrl":39,"mdContent":40},"nvflare-convert-lightning","convert PyTorch Lightning code to NVFLARE","Convert existing PyTorch Lightning training code into an NVFLARE federated job using the Lightning Client API patch, local validation, and job export; do not use for plain PyTorch, other frameworks, deployment, POC\u002Fproduction lifecycle, or experiment workflows.",{"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,19,20],{"name":13,"slug":14,"type":15},"Data Pipeline","data-pipeline","tag",{"name":17,"slug":18,"type":15},"PyTorch","pytorch",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Engineering","engineering",947,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNVFlare","2026-07-30T05:26:15.761027","Apache-2.0",266,[29,30,31,32,33,34,35],"decentralized","federated-analytics","federated-computing","federated-learning","pet","privacy-protection","python",{"repoUrl":24,"stars":23,"forks":27,"topics":37,"description":38},[29,30,31,32,33,34,35],"NVIDIA Federated Learning Application Runtime Environment","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNVFlare\u002Ftree\u002FHEAD\u002Fskills\u002Fnvflare-convert-lightning","---\nname: nvflare-convert-lightning\ndescription: \"Convert existing PyTorch Lightning training code into an NVFLARE federated job using the Lightning Client API patch, local validation, and job export; do not use for plain PyTorch, other frameworks, deployment, POC\u002Fproduction lifecycle, or experiment workflows.\"\nlicense: Apache-2.0\nmetadata:\n  author: \"NVIDIA FLARE Team \u003Cfederatedlearning@nvidia.com>\"\n  min_flare_version: \"2.9.0\"\n  blast_radius: runs_simulator\n  category: Conversion\n  version: \"0.1.0\"\n  tags: \"nvflare, federated-learning, pytorch-lightning, conversion\"\n  languages: \"python\"\n  frameworks: \"pytorch-lightning, pytorch, nvflare\"\n  domain: ml\n---\n\n# NVFLARE Convert PyTorch Lightning\n\n## Use When\n\nUse when the user asks to convert PyTorch Lightning code into an NVFLARE\nfederated training job: a `LightningModule`, `LightningDataModule`, a `Trainer`\nfit\u002Fvalidate\u002Ftest loop, Lightning callbacks, checkpointing, or loggers.\nSupported: the PyTorch recipe family with `flare.patch(trainer)` as the model\nexchange integration, Lightning-native evaluation, custom aggregation through\nthe same recipe `aggregator=` hook, and local validation and export.\n\n## Do Not Use When\n\nDo not use for plain `torch.nn.Module` manual training loops without Lightning\n(route to `nvflare-convert-pytorch`), Hugging Face Trainer (route to `nvflare-convert-huggingface`), TensorFlow,\nXGBoost, scikit-learn, a failed job (route to `nvflare-diagnose-job`),\nfederated statistics without training (route to `nvflare-fed-stats`), or\ngeneric Lightning debugging without FLARE intent; when the inspected project\nactively contains both Lightning and Hugging Face Trainer entrypoints, route to\n`nvflare-orient`. Out of conversion scope: production deployment, Kubernetes,\nPOC lifecycle, deployment privacy\u002Fsecurity policy design, custom distributed\nlaunch policies not expressible by product APIs, experiment tracking redesign,\nand experiment search across recipes. Privacy-protection requests — homomorphic encryption (HE) \u002F\nencrypted aggregation, differential privacy, and privacy filters — are not\nsupported: they require provisioning or deployment policy beyond conversion\nscope, so report such a request as unsupported and route it to\nprovisioning\u002Fdeployment, never substituting an unprotected recipe or disclaimer.\nIf a request combines federated statistics and model-training conversion,\ntreat it as two independent jobs and workflows: do not merge or automatically\nchain them, do not route the combination to `nvflare-orient`, and ask which\nworkflow to run first before generating or running either job. Recommend\n`nvflare-fed-stats` first only when the user's purpose is to understand data\ndistribution; handle conversion later as a separate request.\n\n## Workflow\n\n1. Load `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md` and apply it for the\n   whole conversion; this SKILL.md states only the framework-specific deltas.\n   Load `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-workflow.md` only for a non-standard\n   case that needs its detailed rerun, data-location, authorization, or\n   missing-semantics guidance.\n2. Inspect before editing with `nvflare agent inspect \u003Cpath> --format json`\n   plus direct reading; fact extraction is static. Use\n   `references\u002Flightning-detection.md` to confirm Lightning versus plain\n   PyTorch and hand off to `nvflare-convert-pytorch` when no Lightning evidence\n   exists. If inspection recommends `nvflare-orient` for active Lightning and\n   Hugging Face Trainer owners, stop and hand off before editing.\n3. Apply the dependency-install ordering rule in `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md` before\n   any Python command imports user, Lightning, NVFLARE, or declared dependency\n   modules.\n4. Identify the existing `LightningModule`, `LightningDataModule`, trainer\n   construction, callbacks, checkpointing, `validation_step`\u002F`test_step` and\n   dataloaders, metrics, logger usage, source partition evidence, distributed\n   process-spawning evidence, custom aggregation intent, and the concrete model\n   constructor values that server and clients must share.\n5. Reuse the PyTorch recipe family; Lightning is not a separate recipe family.\n   For the standard case — the user explicitly requests FedAvg and inspection\n   identifies Lightning — run `nvflare recipe show fedavg-pt --format json`\n   directly and construct it. Use the returned module, class, and parameters;\n   for `fedavg-pt`, import `FedAvgRecipe` from\n   `nvflare.app_opt.pt.recipes.fedavg`, never from `nvflare.recipe`. Load\n   `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-selection.md` (discovery,\n   algorithm guide, catalog-based selection, HE-not-supported rule; FedAvg,\n   FedOpt, FedProx, SCAFFOLD, Cyclic, Swarm, FedEval) only for ambiguous or\n   non-FedAvg algorithms, reserving `nvflare recipe list` for those cases. Use\n   FedEval for evaluation-only. After every `recipe show`, load\n   `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md` and\n   derive the recipe's construction capabilities.\n6. Convert the training entry point to the Lightning Client API: build the\n   `Trainer`, call `flare.patch(trainer)`, and let the patched trainer own\n   model exchange. Keep evaluation inside Lightning per\n   `references\u002Flightning-conversion.md`: validate before fit and use `self.log`.\n   When server metrics are required, follow that reference to preserve scalar\n   results under `MetaKey.INITIAL_METRICS`; calling `trainer.validate(...)`\n   alone does not prove delivery. Ask or fail closed when validation semantics\n   are missing. Partition site data per the \"Site Data Partitioning\" rule in\n   `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md`.\n7. Add or update `job.py` with explicit model config\n   `{\"class_path\": ..., \"args\": ...}` (never a live `LightningModule`),\n   requested `aggregator=` wiring, and the metric, tensor-transport, server\n   offload, and execution settings derived from the shared PyTorch-family\n   construction profile.\n8. Validate in a ladder per `..\u002Fnvflare-shared\u002Freferences\u002Fvalidation-evidence.md`:\n   compile checks, recipe construction, one final full-run path chosen by the\n   artifact being validated, and export inspection; then use\n   `references\u002Flightning-validation.md` for Lightning-specific checks before\n   calling the conversion complete. Use the environment and permission\n   mechanisms supplied by the agent host; do not inspect or enforce its security\n   boundary. Report the recipe, changed files, validation status, metrics, and\n   exact artifact paths. Load\n   `..\u002Fnvflare-shared\u002Freferences\u002Fmetrics-and-artifact-reporting.md` only when\n   normal metric artifacts are absent or inconsistent.\n\n## Requirements\n\n- Must integrate through `flare.patch(trainer)` and let the patched trainer own\n  model exchange. Must not generate a manual `FLModel` send\u002Freceive path as the\n  default Lightning exchange, and must not pass the received `input_model` into\n  the `Trainer`. Load `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md`\n  and `references\u002Flightning-conversion.md` for the patch pattern.\n- Must treat `flare.receive()` inside the patched loop as optional metadata or\n  task-progression access only, not as a second model-load path.\n- Must keep evaluation inside Lightning (`trainer.validate`\u002F`trainer.test`,\n  `validation_step`, `self.log`); must not generate a raw PyTorch\n  `model.eval()` loop for ordinary Lightning conversion.\n- When training promises server metrics, must preserve finite scalar pre-fit\n  validation results through `model.__fl_meta__[MetaKey.INITIAL_METRICS]` per\n  `references\u002Flightning-conversion.md` and `assets\u002Flightning_client.py`; this is\n  patched-exchange metadata, not a second manual `flare.send(...)`.\n- Must audit model constructor arguments before writing `job.py` by reading the\n  `LightningModule.__init__` signature and the selected recipe's `model`\n  parameter from `nvflare recipe show \u003Crecipe-name> --format json`, not by\n  reading NVFLARE library source. Emit explicit recipe model config with\n  `class_path` and `args` only when the values are statically clear from literal\n  source, configuration, or supplied metadata; otherwise ask one semantic\n  question when an answer channel exists or fail closed on that missing value.\n- Must use the PyTorch recipe family; must not invent a Lightning-only recipe.\n- Must apply\n  `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md` after\n  `recipe show`; it is the canonical policy for optional recipe parameters,\n  model selection, tensor transport, server disk offload, and execution mode.\n  For Lightning DDP details see\n  `references\u002Flightning-ddp-and-tracking.md`.\n- Must preserve local-only callbacks and logger behavior where safe. Existing\n  network-connected tracking, upload callbacks, and custom\u002Funknown loggers are\n  evidence, not a user request: keep them disabled during validation unless\n  explicitly requested, and do not ask solely to enable them. This narrows\n  `references\u002Flightning-conversion.md`.\n- Must not make non-PyTorch-family skills load\n  `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md`.\n- Site partitioning, custom aggregation, the Source Of Truth Boundary, and user\n  input\u002Fauthorization follow `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md`.\n\nAlways read this converter SKILL.md together with\n`..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md`. Load detailed references\nonly at their named phase:\n`..\u002Fnvflare-shared\u002Freferences\u002Fconversion-workflow.md` for non-standard cases;\n`..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-selection.md` only for ambiguous or non-FedAvg algorithms;\n`..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md` after every `recipe show`;\n`..\u002Fnvflare-shared\u002Freferences\u002Fdependency-install.md` only when an install is needed;\n`..\u002Fnvflare-shared\u002Freferences\u002Fruntime-output-guidance.md` only for read-only source roots or chosen outputs;\n`..\u002Fnvflare-shared\u002Freferences\u002Fmetrics-and-artifact-reporting.md` only when metrics are absent or inconsistent;\n`..\u002Fnvflare-shared\u002Freferences\u002Fvalidation-evidence.md` before validation;\n`..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md` for PyTorch-family exchange.\nFor Lightning work load `references\u002Flightning-detection.md`, `references\u002Flightning-conversion.md`,\n`references\u002Flightning-validation.md`, or `references\u002Flightning-ddp-and-tracking.md` only as needed.\nDo not depend on NVFLARE repository examples being present.\n",{"data":42,"body":52},{"name":4,"description":6,"license":26,"metadata":43},{"author":44,"min_flare_version":45,"blast_radius":46,"category":47,"version":48,"tags":49,"languages":35,"frameworks":50,"domain":51},"NVIDIA FLARE Team \u003Cfederatedlearning@nvidia.com>","2.9.0","runs_simulator","Conversion","0.1.0","nvflare, federated-learning, pytorch-lightning, conversion","pytorch-lightning, pytorch, nvflare","ml",{"type":53,"children":54},"root",[55,64,71,118,124,191,197,503,509,767],{"type":56,"tag":57,"props":58,"children":60},"element","h1",{"id":59},"nvflare-convert-pytorch-lightning",[61],{"type":62,"value":63},"text","NVFLARE Convert PyTorch Lightning",{"type":56,"tag":65,"props":66,"children":68},"h2",{"id":67},"use-when",[69],{"type":62,"value":70},"Use When",{"type":56,"tag":72,"props":73,"children":74},"p",{},[75,77,84,86,92,94,100,102,108,110,116],{"type":62,"value":76},"Use when the user asks to convert PyTorch Lightning code into an NVFLARE\nfederated training job: a ",{"type":56,"tag":78,"props":79,"children":81},"code",{"className":80},[],[82],{"type":62,"value":83},"LightningModule",{"type":62,"value":85},", ",{"type":56,"tag":78,"props":87,"children":89},{"className":88},[],[90],{"type":62,"value":91},"LightningDataModule",{"type":62,"value":93},", a ",{"type":56,"tag":78,"props":95,"children":97},{"className":96},[],[98],{"type":62,"value":99},"Trainer",{"type":62,"value":101},"\nfit\u002Fvalidate\u002Ftest loop, Lightning callbacks, checkpointing, or loggers.\nSupported: the PyTorch recipe family with ",{"type":56,"tag":78,"props":103,"children":105},{"className":104},[],[106],{"type":62,"value":107},"flare.patch(trainer)",{"type":62,"value":109}," as the model\nexchange integration, Lightning-native evaluation, custom aggregation through\nthe same recipe ",{"type":56,"tag":78,"props":111,"children":113},{"className":112},[],[114],{"type":62,"value":115},"aggregator=",{"type":62,"value":117}," hook, and local validation and export.",{"type":56,"tag":65,"props":119,"children":121},{"id":120},"do-not-use-when",[122],{"type":62,"value":123},"Do Not Use When",{"type":56,"tag":72,"props":125,"children":126},{},[127,129,135,137,143,145,151,153,159,161,167,169,175,177,182,184,189],{"type":62,"value":128},"Do not use for plain ",{"type":56,"tag":78,"props":130,"children":132},{"className":131},[],[133],{"type":62,"value":134},"torch.nn.Module",{"type":62,"value":136}," manual training loops without Lightning\n(route to ",{"type":56,"tag":78,"props":138,"children":140},{"className":139},[],[141],{"type":62,"value":142},"nvflare-convert-pytorch",{"type":62,"value":144},"), Hugging Face Trainer (route to ",{"type":56,"tag":78,"props":146,"children":148},{"className":147},[],[149],{"type":62,"value":150},"nvflare-convert-huggingface",{"type":62,"value":152},"), TensorFlow,\nXGBoost, scikit-learn, a failed job (route to ",{"type":56,"tag":78,"props":154,"children":156},{"className":155},[],[157],{"type":62,"value":158},"nvflare-diagnose-job",{"type":62,"value":160},"),\nfederated statistics without training (route to ",{"type":56,"tag":78,"props":162,"children":164},{"className":163},[],[165],{"type":62,"value":166},"nvflare-fed-stats",{"type":62,"value":168},"), or\ngeneric Lightning debugging without FLARE intent; when the inspected project\nactively contains both Lightning and Hugging Face Trainer entrypoints, route to\n",{"type":56,"tag":78,"props":170,"children":172},{"className":171},[],[173],{"type":62,"value":174},"nvflare-orient",{"type":62,"value":176},". Out of conversion scope: production deployment, Kubernetes,\nPOC lifecycle, deployment privacy\u002Fsecurity policy design, custom distributed\nlaunch policies not expressible by product APIs, experiment tracking redesign,\nand experiment search across recipes. Privacy-protection requests — homomorphic encryption (HE) \u002F\nencrypted aggregation, differential privacy, and privacy filters — are not\nsupported: they require provisioning or deployment policy beyond conversion\nscope, so report such a request as unsupported and route it to\nprovisioning\u002Fdeployment, never substituting an unprotected recipe or disclaimer.\nIf a request combines federated statistics and model-training conversion,\ntreat it as two independent jobs and workflows: do not merge or automatically\nchain them, do not route the combination to ",{"type":56,"tag":78,"props":178,"children":180},{"className":179},[],[181],{"type":62,"value":174},{"type":62,"value":183},", and ask which\nworkflow to run first before generating or running either job. Recommend\n",{"type":56,"tag":78,"props":185,"children":187},{"className":186},[],[188],{"type":62,"value":166},{"type":62,"value":190}," first only when the user's purpose is to understand data\ndistribution; handle conversion later as a separate request.",{"type":56,"tag":65,"props":192,"children":194},{"id":193},"workflow",[195],{"type":62,"value":196},"Workflow",{"type":56,"tag":198,"props":199,"children":200},"ol",{},[201,223,258,270,304,381,439,474],{"type":56,"tag":202,"props":203,"children":204},"li",{},[205,207,213,215,221],{"type":62,"value":206},"Load ",{"type":56,"tag":78,"props":208,"children":210},{"className":209},[],[211],{"type":62,"value":212},"..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md",{"type":62,"value":214}," and apply it for the\nwhole conversion; this SKILL.md states only the framework-specific deltas.\nLoad ",{"type":56,"tag":78,"props":216,"children":218},{"className":217},[],[219],{"type":62,"value":220},"..\u002Fnvflare-shared\u002Freferences\u002Fconversion-workflow.md",{"type":62,"value":222}," only for a non-standard\ncase that needs its detailed rerun, data-location, authorization, or\nmissing-semantics guidance.",{"type":56,"tag":202,"props":224,"children":225},{},[226,228,234,236,242,244,249,251,256],{"type":62,"value":227},"Inspect before editing with ",{"type":56,"tag":78,"props":229,"children":231},{"className":230},[],[232],{"type":62,"value":233},"nvflare agent inspect \u003Cpath> --format json",{"type":62,"value":235},"\nplus direct reading; fact extraction is static. Use\n",{"type":56,"tag":78,"props":237,"children":239},{"className":238},[],[240],{"type":62,"value":241},"references\u002Flightning-detection.md",{"type":62,"value":243}," to confirm Lightning versus plain\nPyTorch and hand off to ",{"type":56,"tag":78,"props":245,"children":247},{"className":246},[],[248],{"type":62,"value":142},{"type":62,"value":250}," when no Lightning evidence\nexists. If inspection recommends ",{"type":56,"tag":78,"props":252,"children":254},{"className":253},[],[255],{"type":62,"value":174},{"type":62,"value":257}," for active Lightning and\nHugging Face Trainer owners, stop and hand off before editing.",{"type":56,"tag":202,"props":259,"children":260},{},[261,263,268],{"type":62,"value":262},"Apply the dependency-install ordering rule in ",{"type":56,"tag":78,"props":264,"children":266},{"className":265},[],[267],{"type":62,"value":212},{"type":62,"value":269}," before\nany Python command imports user, Lightning, NVFLARE, or declared dependency\nmodules.",{"type":56,"tag":202,"props":271,"children":272},{},[273,275,280,281,286,288,294,296,302],{"type":62,"value":274},"Identify the existing ",{"type":56,"tag":78,"props":276,"children":278},{"className":277},[],[279],{"type":62,"value":83},{"type":62,"value":85},{"type":56,"tag":78,"props":282,"children":284},{"className":283},[],[285],{"type":62,"value":91},{"type":62,"value":287},", trainer\nconstruction, callbacks, checkpointing, ",{"type":56,"tag":78,"props":289,"children":291},{"className":290},[],[292],{"type":62,"value":293},"validation_step",{"type":62,"value":295},"\u002F",{"type":56,"tag":78,"props":297,"children":299},{"className":298},[],[300],{"type":62,"value":301},"test_step",{"type":62,"value":303}," and\ndataloaders, metrics, logger usage, source partition evidence, distributed\nprocess-spawning evidence, custom aggregation intent, and the concrete model\nconstructor values that server and clients must share.",{"type":56,"tag":202,"props":305,"children":306},{},[307,309,315,317,323,325,331,333,339,341,347,349,355,357,363,365,371,373,379],{"type":62,"value":308},"Reuse the PyTorch recipe family; Lightning is not a separate recipe family.\nFor the standard case — the user explicitly requests FedAvg and inspection\nidentifies Lightning — run ",{"type":56,"tag":78,"props":310,"children":312},{"className":311},[],[313],{"type":62,"value":314},"nvflare recipe show fedavg-pt --format json",{"type":62,"value":316},"\ndirectly and construct it. Use the returned module, class, and parameters;\nfor ",{"type":56,"tag":78,"props":318,"children":320},{"className":319},[],[321],{"type":62,"value":322},"fedavg-pt",{"type":62,"value":324},", import ",{"type":56,"tag":78,"props":326,"children":328},{"className":327},[],[329],{"type":62,"value":330},"FedAvgRecipe",{"type":62,"value":332}," from\n",{"type":56,"tag":78,"props":334,"children":336},{"className":335},[],[337],{"type":62,"value":338},"nvflare.app_opt.pt.recipes.fedavg",{"type":62,"value":340},", never from ",{"type":56,"tag":78,"props":342,"children":344},{"className":343},[],[345],{"type":62,"value":346},"nvflare.recipe",{"type":62,"value":348},". Load\n",{"type":56,"tag":78,"props":350,"children":352},{"className":351},[],[353],{"type":62,"value":354},"..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-selection.md",{"type":62,"value":356}," (discovery,\nalgorithm guide, catalog-based selection, HE-not-supported rule; FedAvg,\nFedOpt, FedProx, SCAFFOLD, Cyclic, Swarm, FedEval) only for ambiguous or\nnon-FedAvg algorithms, reserving ",{"type":56,"tag":78,"props":358,"children":360},{"className":359},[],[361],{"type":62,"value":362},"nvflare recipe list",{"type":62,"value":364}," for those cases. Use\nFedEval for evaluation-only. After every ",{"type":56,"tag":78,"props":366,"children":368},{"className":367},[],[369],{"type":62,"value":370},"recipe show",{"type":62,"value":372},", load\n",{"type":56,"tag":78,"props":374,"children":376},{"className":375},[],[377],{"type":62,"value":378},"..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md",{"type":62,"value":380}," and\nderive the recipe's construction capabilities.",{"type":56,"tag":202,"props":382,"children":383},{},[384,386,391,393,398,400,406,408,414,416,422,424,430,432,437],{"type":62,"value":385},"Convert the training entry point to the Lightning Client API: build the\n",{"type":56,"tag":78,"props":387,"children":389},{"className":388},[],[390],{"type":62,"value":99},{"type":62,"value":392},", call ",{"type":56,"tag":78,"props":394,"children":396},{"className":395},[],[397],{"type":62,"value":107},{"type":62,"value":399},", and let the patched trainer own\nmodel exchange. Keep evaluation inside Lightning per\n",{"type":56,"tag":78,"props":401,"children":403},{"className":402},[],[404],{"type":62,"value":405},"references\u002Flightning-conversion.md",{"type":62,"value":407},": validate before fit and use ",{"type":56,"tag":78,"props":409,"children":411},{"className":410},[],[412],{"type":62,"value":413},"self.log",{"type":62,"value":415},".\nWhen server metrics are required, follow that reference to preserve scalar\nresults under ",{"type":56,"tag":78,"props":417,"children":419},{"className":418},[],[420],{"type":62,"value":421},"MetaKey.INITIAL_METRICS",{"type":62,"value":423},"; calling ",{"type":56,"tag":78,"props":425,"children":427},{"className":426},[],[428],{"type":62,"value":429},"trainer.validate(...)",{"type":62,"value":431},"\nalone does not prove delivery. Ask or fail closed when validation semantics\nare missing. Partition site data per the \"Site Data Partitioning\" rule in\n",{"type":56,"tag":78,"props":433,"children":435},{"className":434},[],[436],{"type":62,"value":212},{"type":62,"value":438},".",{"type":56,"tag":202,"props":440,"children":441},{},[442,444,450,452,458,460,465,467,472],{"type":62,"value":443},"Add or update ",{"type":56,"tag":78,"props":445,"children":447},{"className":446},[],[448],{"type":62,"value":449},"job.py",{"type":62,"value":451}," with explicit model config\n",{"type":56,"tag":78,"props":453,"children":455},{"className":454},[],[456],{"type":62,"value":457},"{\"class_path\": ..., \"args\": ...}",{"type":62,"value":459}," (never a live ",{"type":56,"tag":78,"props":461,"children":463},{"className":462},[],[464],{"type":62,"value":83},{"type":62,"value":466},"),\nrequested ",{"type":56,"tag":78,"props":468,"children":470},{"className":469},[],[471],{"type":62,"value":115},{"type":62,"value":473}," wiring, and the metric, tensor-transport, server\noffload, and execution settings derived from the shared PyTorch-family\nconstruction profile.",{"type":56,"tag":202,"props":475,"children":476},{},[477,479,485,487,493,495,501],{"type":62,"value":478},"Validate in a ladder per ",{"type":56,"tag":78,"props":480,"children":482},{"className":481},[],[483],{"type":62,"value":484},"..\u002Fnvflare-shared\u002Freferences\u002Fvalidation-evidence.md",{"type":62,"value":486},":\ncompile checks, recipe construction, one final full-run path chosen by the\nartifact being validated, and export inspection; then use\n",{"type":56,"tag":78,"props":488,"children":490},{"className":489},[],[491],{"type":62,"value":492},"references\u002Flightning-validation.md",{"type":62,"value":494}," for Lightning-specific checks before\ncalling the conversion complete. Use the environment and permission\nmechanisms supplied by the agent host; do not inspect or enforce its security\nboundary. Report the recipe, changed files, validation status, metrics, and\nexact artifact paths. Load\n",{"type":56,"tag":78,"props":496,"children":498},{"className":497},[],[499],{"type":62,"value":500},"..\u002Fnvflare-shared\u002Freferences\u002Fmetrics-and-artifact-reporting.md",{"type":62,"value":502}," only when\nnormal metric artifacts are absent or inconsistent.",{"type":56,"tag":65,"props":504,"children":506},{"id":505},"requirements",[507],{"type":62,"value":508},"Requirements",{"type":56,"tag":510,"props":511,"children":512},"ul",{},[513,563,576,617,652,703,708,734,745,756],{"type":56,"tag":202,"props":514,"children":515},{},[516,518,523,525,531,533,539,541,546,548,554,556,561],{"type":62,"value":517},"Must integrate through ",{"type":56,"tag":78,"props":519,"children":521},{"className":520},[],[522],{"type":62,"value":107},{"type":62,"value":524}," and let the patched trainer own\nmodel exchange. Must not generate a manual ",{"type":56,"tag":78,"props":526,"children":528},{"className":527},[],[529],{"type":62,"value":530},"FLModel",{"type":62,"value":532}," send\u002Freceive path as the\ndefault Lightning exchange, and must not pass the received ",{"type":56,"tag":78,"props":534,"children":536},{"className":535},[],[537],{"type":62,"value":538},"input_model",{"type":62,"value":540}," into\nthe ",{"type":56,"tag":78,"props":542,"children":544},{"className":543},[],[545],{"type":62,"value":99},{"type":62,"value":547},". Load ",{"type":56,"tag":78,"props":549,"children":551},{"className":550},[],[552],{"type":62,"value":553},"..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md",{"type":62,"value":555},"\nand ",{"type":56,"tag":78,"props":557,"children":559},{"className":558},[],[560],{"type":62,"value":405},{"type":62,"value":562}," for the patch pattern.",{"type":56,"tag":202,"props":564,"children":565},{},[566,568,574],{"type":62,"value":567},"Must treat ",{"type":56,"tag":78,"props":569,"children":571},{"className":570},[],[572],{"type":62,"value":573},"flare.receive()",{"type":62,"value":575}," inside the patched loop as optional metadata or\ntask-progression access only, not as a second model-load path.",{"type":56,"tag":202,"props":577,"children":578},{},[579,581,587,588,594,596,601,602,607,609,615],{"type":62,"value":580},"Must keep evaluation inside Lightning (",{"type":56,"tag":78,"props":582,"children":584},{"className":583},[],[585],{"type":62,"value":586},"trainer.validate",{"type":62,"value":295},{"type":56,"tag":78,"props":589,"children":591},{"className":590},[],[592],{"type":62,"value":593},"trainer.test",{"type":62,"value":595},",\n",{"type":56,"tag":78,"props":597,"children":599},{"className":598},[],[600],{"type":62,"value":293},{"type":62,"value":85},{"type":56,"tag":78,"props":603,"children":605},{"className":604},[],[606],{"type":62,"value":413},{"type":62,"value":608},"); must not generate a raw PyTorch\n",{"type":56,"tag":78,"props":610,"children":612},{"className":611},[],[613],{"type":62,"value":614},"model.eval()",{"type":62,"value":616}," loop for ordinary Lightning conversion.",{"type":56,"tag":202,"props":618,"children":619},{},[620,622,628,630,635,637,643,645,651],{"type":62,"value":621},"When training promises server metrics, must preserve finite scalar pre-fit\nvalidation results through ",{"type":56,"tag":78,"props":623,"children":625},{"className":624},[],[626],{"type":62,"value":627},"model.__fl_meta__[MetaKey.INITIAL_METRICS]",{"type":62,"value":629}," per\n",{"type":56,"tag":78,"props":631,"children":633},{"className":632},[],[634],{"type":62,"value":405},{"type":62,"value":636}," and ",{"type":56,"tag":78,"props":638,"children":640},{"className":639},[],[641],{"type":62,"value":642},"assets\u002Flightning_client.py",{"type":62,"value":644},"; this is\npatched-exchange metadata, not a second manual ",{"type":56,"tag":78,"props":646,"children":648},{"className":647},[],[649],{"type":62,"value":650},"flare.send(...)",{"type":62,"value":438},{"type":56,"tag":202,"props":653,"children":654},{},[655,657,662,664,670,672,678,680,686,688,694,695,701],{"type":62,"value":656},"Must audit model constructor arguments before writing ",{"type":56,"tag":78,"props":658,"children":660},{"className":659},[],[661],{"type":62,"value":449},{"type":62,"value":663}," by reading the\n",{"type":56,"tag":78,"props":665,"children":667},{"className":666},[],[668],{"type":62,"value":669},"LightningModule.__init__",{"type":62,"value":671}," signature and the selected recipe's ",{"type":56,"tag":78,"props":673,"children":675},{"className":674},[],[676],{"type":62,"value":677},"model",{"type":62,"value":679},"\nparameter from ",{"type":56,"tag":78,"props":681,"children":683},{"className":682},[],[684],{"type":62,"value":685},"nvflare recipe show \u003Crecipe-name> --format json",{"type":62,"value":687},", not by\nreading NVFLARE library source. Emit explicit recipe model config with\n",{"type":56,"tag":78,"props":689,"children":691},{"className":690},[],[692],{"type":62,"value":693},"class_path",{"type":62,"value":636},{"type":56,"tag":78,"props":696,"children":698},{"className":697},[],[699],{"type":62,"value":700},"args",{"type":62,"value":702}," only when the values are statically clear from literal\nsource, configuration, or supplied metadata; otherwise ask one semantic\nquestion when an answer channel exists or fail closed on that missing value.",{"type":56,"tag":202,"props":704,"children":705},{},[706],{"type":62,"value":707},"Must use the PyTorch recipe family; must not invent a Lightning-only recipe.",{"type":56,"tag":202,"props":709,"children":710},{},[711,713,718,720,725,727,733],{"type":62,"value":712},"Must apply\n",{"type":56,"tag":78,"props":714,"children":716},{"className":715},[],[717],{"type":62,"value":378},{"type":62,"value":719}," after\n",{"type":56,"tag":78,"props":721,"children":723},{"className":722},[],[724],{"type":62,"value":370},{"type":62,"value":726},"; it is the canonical policy for optional recipe parameters,\nmodel selection, tensor transport, server disk offload, and execution mode.\nFor Lightning DDP details see\n",{"type":56,"tag":78,"props":728,"children":730},{"className":729},[],[731],{"type":62,"value":732},"references\u002Flightning-ddp-and-tracking.md",{"type":62,"value":438},{"type":56,"tag":202,"props":735,"children":736},{},[737,739,744],{"type":62,"value":738},"Must preserve local-only callbacks and logger behavior where safe. Existing\nnetwork-connected tracking, upload callbacks, and custom\u002Funknown loggers are\nevidence, not a user request: keep them disabled during validation unless\nexplicitly requested, and do not ask solely to enable them. This narrows\n",{"type":56,"tag":78,"props":740,"children":742},{"className":741},[],[743],{"type":62,"value":405},{"type":62,"value":438},{"type":56,"tag":202,"props":746,"children":747},{},[748,750,755],{"type":62,"value":749},"Must not make non-PyTorch-family skills load\n",{"type":56,"tag":78,"props":751,"children":753},{"className":752},[],[754],{"type":62,"value":553},{"type":62,"value":438},{"type":56,"tag":202,"props":757,"children":758},{},[759,761,766],{"type":62,"value":760},"Site partitioning, custom aggregation, the Source Of Truth Boundary, and user\ninput\u002Fauthorization follow ",{"type":56,"tag":78,"props":762,"children":764},{"className":763},[],[765],{"type":62,"value":212},{"type":62,"value":438},{"type":56,"tag":72,"props":768,"children":769},{},[770,772,777,779,784,786,791,793,798,800,805,807,813,815,821,823,828,830,835,837,842,844,849,850,855,856,861,863,868],{"type":62,"value":771},"Always read this converter SKILL.md together with\n",{"type":56,"tag":78,"props":773,"children":775},{"className":774},[],[776],{"type":62,"value":212},{"type":62,"value":778},". Load detailed references\nonly at their named phase:\n",{"type":56,"tag":78,"props":780,"children":782},{"className":781},[],[783],{"type":62,"value":220},{"type":62,"value":785}," for non-standard cases;\n",{"type":56,"tag":78,"props":787,"children":789},{"className":788},[],[790],{"type":62,"value":354},{"type":62,"value":792}," only for ambiguous or non-FedAvg algorithms;\n",{"type":56,"tag":78,"props":794,"children":796},{"className":795},[],[797],{"type":62,"value":378},{"type":62,"value":799}," after every ",{"type":56,"tag":78,"props":801,"children":803},{"className":802},[],[804],{"type":62,"value":370},{"type":62,"value":806},";\n",{"type":56,"tag":78,"props":808,"children":810},{"className":809},[],[811],{"type":62,"value":812},"..\u002Fnvflare-shared\u002Freferences\u002Fdependency-install.md",{"type":62,"value":814}," only when an install is needed;\n",{"type":56,"tag":78,"props":816,"children":818},{"className":817},[],[819],{"type":62,"value":820},"..\u002Fnvflare-shared\u002Freferences\u002Fruntime-output-guidance.md",{"type":62,"value":822}," only for read-only source roots or chosen outputs;\n",{"type":56,"tag":78,"props":824,"children":826},{"className":825},[],[827],{"type":62,"value":500},{"type":62,"value":829}," only when metrics are absent or inconsistent;\n",{"type":56,"tag":78,"props":831,"children":833},{"className":832},[],[834],{"type":62,"value":484},{"type":62,"value":836}," before validation;\n",{"type":56,"tag":78,"props":838,"children":840},{"className":839},[],[841],{"type":62,"value":553},{"type":62,"value":843}," for PyTorch-family exchange.\nFor Lightning work load ",{"type":56,"tag":78,"props":845,"children":847},{"className":846},[],[848],{"type":62,"value":241},{"type":62,"value":85},{"type":56,"tag":78,"props":851,"children":853},{"className":852},[],[854],{"type":62,"value":405},{"type":62,"value":595},{"type":56,"tag":78,"props":857,"children":859},{"className":858},[],[860],{"type":62,"value":492},{"type":62,"value":862},", or ",{"type":56,"tag":78,"props":864,"children":866},{"className":865},[],[867],{"type":62,"value":732},{"type":62,"value":869}," only as needed.\nDo not depend on NVFLARE repository examples being present.",{"items":871,"total":958},[872,887,900,914,927,934,944],{"slug":873,"name":873,"fn":874,"description":875,"org":876,"tags":877,"stars":23,"repoUrl":24,"updatedAt":886},"autofl-nvflare","develop NVFlare Auto-FL experiments","Help coding agents work on an NVFlare-based Auto-FL harness that follows an autoresearch-style loop. Use when the user wants to create, edit, debug, or extend program.md, task folders such as tasks\u002Fcifar10\u002F and tasks\u002Fvlm_med\u002F, task-local job.py, client.py, model.py, shared custom_aggregators.py, mutation policies, results.tsv logging, or coding-agent prompts for a bounded federated-learning research loop. This skill is specifically for NVFlare harness work where the Client API loop, DIFF upload contract, and NUM_STEPS_CURRENT_ROUND metadata must stay intact unless the user explicitly asks for a protocol upgrade.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[878,881,884,885],{"name":879,"slug":880,"type":15},"Agents","agents",{"name":882,"slug":883,"type":15},"Automation","automation",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:36:01.532575",{"slug":888,"name":888,"fn":889,"description":890,"org":891,"tags":892,"stars":23,"repoUrl":24,"updatedAt":899},"autofl-nvflare-report","generate NVFlare experiment reports","Generate and commit a markdown report after an Auto-FL NVFlare autoresearch experiment has been manually stopped. Use when the user asks to summarize a stopped campaign, report achieved improvements, explain implemented literature-derived ideas and sources, refresh progress plots, capture pasted agent model\u002Feffort\u002Fcost context when available, or commit the final report and progress plot to the current experiment branch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[893,894,895,896],{"name":882,"slug":883,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":897,"slug":898,"type":15},"Reporting","reporting","2026-07-14T05:36:00.281416",{"slug":901,"name":901,"fn":902,"description":903,"org":904,"tags":905,"stars":23,"repoUrl":24,"updatedAt":913},"nvflare-autofl","optimize NVFLARE training jobs","Use for agent-assisted Auto-FL optimization of an existing NVFLARE job in simulation, POC, or production. Do not use for code conversion, diagnosis-only work, or deployment setup.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[906,909,910],{"name":907,"slug":908,"type":15},"Machine Learning","machine-learning",{"name":9,"slug":8,"type":15},{"name":911,"slug":912,"type":15},"Optimization","optimization","2026-07-30T05:26:21.697612",{"slug":915,"name":915,"fn":916,"description":917,"org":918,"tags":919,"stars":23,"repoUrl":24,"updatedAt":926},"nvflare-autofl-report","generate NVFLARE Auto-FL campaign reports","Generate a reproducible final report, literature-outcome synthesis, JSON summary, and refreshed progress plot for a stopped or interrupted NVFLARE Auto-FL campaign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[920,921,922,923],{"name":907,"slug":908,"type":15},{"name":9,"slug":8,"type":15},{"name":897,"slug":898,"type":15},{"name":924,"slug":925,"type":15},"Simulation","simulation","2026-07-30T05:26:14.661827",{"slug":4,"name":4,"fn":5,"description":6,"org":928,"tags":929,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[930,931,932,933],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":142,"name":142,"fn":935,"description":936,"org":937,"tags":938,"stars":23,"repoUrl":24,"updatedAt":943},"convert PyTorch code to NVFLARE","Convert existing PyTorch training code into an NVFLARE federated job using Client API model exchange, local validation, and job export; do not use for other frameworks, deployment, POC\u002Fproduction lifecycle, or experiment workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[939,940,941,942],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-07-30T05:26:20.645495",{"slug":158,"name":158,"fn":945,"description":946,"org":947,"tags":948,"stars":23,"repoUrl":24,"updatedAt":957},"diagnose failed NVFLARE jobs","Use when the user asks why a reported NVFLARE job failure signal occurred: the job failed, stalled, timed out, lost clients, ended with EXECUTION_EXCEPTION, or produced suspicious errors. Diagnose in simulation, POC, or production by collecting bounded evidence and mapping failure patterns to recovery actions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[949,952,953,954],{"name":950,"slug":951,"type":15},"Debugging","debugging",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":955,"slug":956,"type":15},"Observability","observability","2026-07-30T05:26:17.665774",10,{"items":960,"total":1112},[961,979,996,1007,1019,1031,1044,1056,1069,1080,1094,1103],{"slug":962,"name":962,"fn":963,"description":964,"org":965,"tags":966,"stars":976,"repoUrl":977,"updatedAt":978},"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},[967,970,973],{"name":968,"slug":969,"type":15},"Documentation","documentation",{"name":971,"slug":972,"type":15},"MCP","mcp",{"name":974,"slug":975,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":980,"name":980,"fn":981,"description":982,"org":983,"tags":984,"stars":993,"repoUrl":994,"updatedAt":995},"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},[985,988,991],{"name":986,"slug":987,"type":15},"Containers","containers",{"name":989,"slug":990,"type":15},"Deployment","deployment",{"name":992,"slug":35,"type":15},"Python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":997,"name":997,"fn":998,"description":999,"org":1000,"tags":1001,"stars":993,"repoUrl":994,"updatedAt":1006},"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},[1002,1005],{"name":1003,"slug":1004,"type":15},"CI\u002FCD","ci-cd",{"name":989,"slug":990,"type":15},"2026-07-14T05:25:59.97109",{"slug":1008,"name":1008,"fn":1009,"description":1010,"org":1011,"tags":1012,"stars":993,"repoUrl":994,"updatedAt":1018},"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},[1013,1014,1015],{"name":1003,"slug":1004,"type":15},{"name":989,"slug":990,"type":15},{"name":1016,"slug":1017,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":1020,"name":1020,"fn":1021,"description":1022,"org":1023,"tags":1024,"stars":993,"repoUrl":994,"updatedAt":1030},"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},[1025,1026,1027],{"name":950,"slug":951,"type":15},{"name":1016,"slug":1017,"type":15},{"name":1028,"slug":1029,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":1032,"name":1032,"fn":1033,"description":1034,"org":1035,"tags":1036,"stars":993,"repoUrl":994,"updatedAt":1043},"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},[1037,1040],{"name":1038,"slug":1039,"type":15},"Best Practices","best-practices",{"name":1041,"slug":1042,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":1045,"name":1045,"fn":1046,"description":1047,"org":1048,"tags":1049,"stars":993,"repoUrl":994,"updatedAt":1055},"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},[1050,1051,1054],{"name":907,"slug":908,"type":15},{"name":1052,"slug":1053,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":1057,"name":1057,"fn":1058,"description":1059,"org":1060,"tags":1061,"stars":993,"repoUrl":994,"updatedAt":1068},"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},[1062,1065],{"name":1063,"slug":1064,"type":15},"QA","qa",{"name":1066,"slug":1067,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":1070,"name":1070,"fn":1071,"description":1072,"org":1073,"tags":1074,"stars":993,"repoUrl":994,"updatedAt":1079},"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},[1075,1076],{"name":989,"slug":990,"type":15},{"name":1077,"slug":1078,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":1081,"name":1081,"fn":1082,"description":1083,"org":1084,"tags":1085,"stars":993,"repoUrl":994,"updatedAt":1093},"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},[1086,1089,1090],{"name":1087,"slug":1088,"type":15},"Code Review","code-review",{"name":1016,"slug":1017,"type":15},{"name":1091,"slug":1092,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":1095,"name":1095,"fn":1096,"description":1097,"org":1098,"tags":1099,"stars":993,"repoUrl":994,"updatedAt":1102},"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},[1100,1101],{"name":1063,"slug":1064,"type":15},{"name":1066,"slug":1067,"type":15},"2026-07-14T05:25:54.928983",{"slug":1104,"name":1104,"fn":1105,"description":1106,"org":1107,"tags":1108,"stars":993,"repoUrl":994,"updatedAt":1111},"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},[1109,1110],{"name":882,"slug":883,"type":15},{"name":1003,"slug":1004,"type":15},"2026-07-30T05:29:03.275638",496]