[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-nightly-sync":3,"mdc-kjqkbf-key":33,"related-repo-nvidia-nightly-sync":7085,"related-org-nvidia-nightly-sync":7178},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":19,"repoUrl":20,"updatedAt":21,"license":22,"forks":23,"topics":24,"repo":28,"sourceUrl":31,"mdContent":32},"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},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16],{"name":13,"slug":14,"type":15},"Automation","automation","tag",{"name":17,"slug":18,"type":15},"CI\u002FCD","ci-cd",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-30T05:29:03.275638",null,4230,[25,26,27],"large-language-models","model-para","transformers",{"repoUrl":20,"stars":19,"forks":23,"topics":29,"description":30},[25,26,27],"Ongoing research training transformer models at scale","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM\u002Ftree\u002FHEAD\u002Fskills\u002Fnightly-sync","---\nname: nightly-sync\ndescription: Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.\nwhen_to_use: Working on the nightly sync PR; investigating a nightly sync failure; resolving merge conflicts between main and dev; 'nightly sync failed', 'main-to-dev merge', 'sync bot'.\n---\n\n# Nightly Sync: Main to Dev\n\nThis skill is read by the automated sync bot during the nightly-sync-main-to-dev\nworkflow. It contains all domain knowledge for merging main into dev, resolving\nconflicts, iterating on CI, and shipping the PR.\n\n---\n\n## Phase 1: Create the Sync Branch and Merge\n\n### Branch Setup\n\n1. Create branch `$BRANCH` from `origin\u002Fdev`\n2. Merge: `git merge origin\u002Fmain --no-edit`\n3. Resolve conflicts surgically. Do NOT use global `-X theirs`, and do NOT\n   blanket-checkout main's version of a shared file. Main's version may be\n   taken wholesale only for files in \"Files to Override from Main\" below, or\n   when you have identified a specific main commit that intentionally removes\n   the dev-only code. For all other conflicts, combine both sides so recent\n   dev-only additions remain present.\n\n### Preserving Dev-Only Additions\n\nDo NOT blanket-override all shared files with main's version. Dev has features\nnot yet in main (new classes, new modules, new tests). The merge preserves both\nsides' non-conflicting additions — only intervene where there is an actual\nconflict.\n\n### Squash-Merge Chain Detection\n\nDev often develops features as a chain of PRs (PR1 → PR2 → PR3) where each\nbuilds on the last. When PR1 is squash-merged to main, git sees main's squashed\nversion and dev's original commits as unrelated changes. A conflict resolution\nthat blindly picks main can silently discard PR2\u002FPR3's improvements on dev.\n\nAfter the merge, check for this pattern:\n\n1. For each conflicted file, run `git log --oneline origin\u002Fdev -- \u003Cfile>` to\n   see if dev has commits that came AFTER the code main is bringing in.\n2. If dev has follow-up commits (bug fixes, refactors, extensions), **favor\n   dev's version** for those sections.\n3. If the conflict is just main bringing in a clean copy of what dev already\n   has (no follow-ups), main's version is fine.\n\nPractical check: run `git diff origin\u002Fdev -- \u003Cfile>` on conflicted files. If\ndev's code was removed or reverted, investigate whether dev's version is the\nmore evolved one.\n\nReal examples from PR #4291:\n- `emerging_optimizers.py`: Main's version was MORE complete — it squash-merged\n  dev's PRs plus added more. Taking main for that section was correct.\n- `distrib_optimizer.py`: Main overwrote dev's `GroupedQuantizedTensor` support.\n  Had to restore `_is_distopt_quantized_param` and the expanded\n  `_expand_quantized_param_shard_for_cast` loop while keeping main's NVFP4\n  additions. This required a surgical merge combining sections from both.\n\nKey insight: squash-merge chains can go in EITHER direction. Sometimes main\nis ahead (it squash-merged dev's work + more), sometimes dev is ahead (it has\nfollow-up PRs). Always diff both ways before deciding which version to favor.\n\nReal example from PR #4882 \u002F PR #4318:\n- `transformer_engine.py`: main had unrelated `TEFusedMLP` refactors, while dev\n  had the new `TEFusedDenseMLP` class. The sync kept the config flag and test\n  but dropped the class and `gpt_layer_specs.py` selection. That is a merge\n  accident: restore the dev class and selection while preserving main's\n  `TEFusedMLP.as_mlp_submodule` refactor.\n\n### Files to Override from Main\n\nThese files have known semantic conflicts where dev's versions reference args\nor APIs that main removed or renamed. Take main's version with\n`git checkout origin\u002Fmain -- \u003Cfile>`:\n\n- `megatron\u002Ftraining\u002Ftraining.py` — references dev-only args\n- `megatron\u002Ftraining\u002Finitialize.py` — references dev-only args\n- `megatron\u002Ftraining\u002Futils.py` — references dev-only args\n- `megatron\u002Ftraining\u002Fdatasets\u002Fdata_samplers.py` — references dev-only args\n- `megatron\u002Fcore\u002Foptimizer\u002Flayer_wise_optimizer.py` — constructor signature\n\n**Caveat for ALL overrides:** After taking main's version of any file, you\nMUST run the API Mismatch Detection procedure (see below) on that file.\nTaking main's caller code while keeping dev's callee implementations is the\n#1 source of sync bugs.\n\n**IMPORTANT: Do NOT take main's `pyproject.toml`, `uv.lock`, or\n`docker\u002FDockerfile.ci.dev`.** These three files are a tightly coupled\ntriple — the Dockerfile's `uv sync` command must match the dependency\ngroups in `pyproject.toml`, and `uv.lock` must be consistent with both.\nMain's versions are missing dev-only dependencies (e.g.\n`fast-hadamard-transform`, correct TransformerEngine revision) and the\n`--group no_pypi_wheels` flag needed to install them. Keep dev's versions\nof all three files.\n\n**IMPORTANT: `.github\u002FCODEOWNERS` must NEVER be modified by the sync\nbot under any circumstances.** Dev's CODEOWNERS is intentionally\ndifferent from main's — do not take main's version, do not merge them,\ndo not touch the file. If the merge produces a conflict or a non-zero\ndiff against `origin\u002Fdev` on this path, restore dev's version verbatim:\n\n```\ngit checkout origin\u002Fdev -- .github\u002FCODEOWNERS\n```\n\nThen verify with `git diff origin\u002Fdev -- .github\u002FCODEOWNERS` — output\nmust be empty. Modifying CODEOWNERS triggers spurious reviewer\nrequests and conflicts with the dev team's governance; rolling back a\nCODEOWNERS change after the PR lands is painful.\n\n**NEVER manually edit `uv.lock`.** It is a machine-generated lockfile. If\nit needs to change, it must be regenerated with `uv lock` inside a CUDA\ncontainer (see `.claude\u002Fskills\u002Fbuild-and-test\u002FSKILL.md`).\n\n### Git Source Reconciliation (pyproject.toml)\n\nAfter keeping dev's `pyproject.toml`, check whether main has added NEW git\nsources to `[tool.uv.sources]` that don't exist in dev's version. Main's\nmerged code may import from packages only available at specific git revisions.\n\n1. Diff the `[tool.uv.sources]` sections:\n   `git show origin\u002Fmain:pyproject.toml` vs `git show origin\u002Fdev:pyproject.toml`\n2. For each git source in main but not dev, add it to dev's `pyproject.toml`\n3. For sources in both but at different revisions, check whether dev's revision\n   works. If dev's revision is broken (TOML parse errors, missing classes main's\n   code imports), take main's revision instead.\n\nReal examples from PR #4291:\n- `nvidia-resiliency-ext`: Main's `torch.py` imports `get_write_results_queue`\n  which only existed in main's pinned git revision, not on PyPI. Had to add\n  main's git source to dev's pyproject.toml.\n- `nemo-run`: Dev's pinned revision had a TOML parse error with uv 0.7.2.\n  Had to swap to main's revision.\n\nAfter any changes to `pyproject.toml`, regenerate `uv.lock` inside a CUDA\ncontainer:\n```bash\ndocker run --rm -v $(pwd):\u002Fworkspace nvcr.io\u002Fnvidia\u002Fpytorch:26.02-py3 \\\n  bash -c \"pip install uv==0.7.2 && cd \u002Fworkspace && \\\n  uv venv .venv --system-site-packages && uv sync --only-group build && uv lock\"\n# Clean up root-owned .venv:\ndocker run --rm -v $(pwd):\u002Fworkspace nvcr.io\u002Fnvidia\u002Fpytorch:26.02-py3 \\\n  bash -c \"rm -rf \u002Fworkspace\u002F.venv\"\n```\n\n### API Mismatch Detection (Post-Merge Audit)\n\nThe merge can create \"Frankenstein\" code where main's callers use dev's\nimplementations (or vice versa) with different method signatures. This\ncompiles fine but fails at runtime.\n\nAfter the merge, audit cross-boundary call sites:\n\n1. Identify files where main's version was taken (`-X theirs` or explicit\n   `git checkout origin\u002Fmain`)\n2. For each, find all external call sites: classes it instantiates, methods\n   it calls on imported objects, functions from other modules it invokes\n3. Verify method names, parameter counts, and signatures match between the\n   caller and the implementation in the merged tree\n4. Pay special attention to \"interface\" modules (files defining base classes)\n   — if main and dev evolved the interface differently, every caller and\n   implementer must agree\n\nReal examples from PR #4291:\n- `multi_latent_attention.py` (main) called `off_interface.group_commit()`\n  but dev's interface only had `group_offload()` — method renamed\n- `mamba_model.py` (main) called `init_chunk_handler(3 params)` but dev's\n  interface required 6 params — signature expanded on dev\n- `mamba_model.py` called `mark_not_offloadable()` but dev had\n  `mark_not_offload()` — method renamed\n- `bulk_offload()` did `.remove()` after `bulk_offload_group()` already\n  `.pop()`d the same item — double-removal from a list\n\nPractical detection:\n```bash\n# For each file taken from main, find what it imports and calls\ngrep -rn \"from \u003Cmodule> import\\|\u003Cmodule>\\.\" megatron\u002F\n# Cross-reference with the actual implementations in the merged tree\n```\n\n### File-Specific Merge Lessons\n\nThese lessons were learned from PR #4291. They may recur if the same files\ncontinue to diverge:\n\n- `gated_delta_net.py`: If the merge creates code calling non-existent helper\n  methods (e.g. `_resolve_cu_seqlens`), take dev's version wholesale.\n- `model_chunk_schedule_plan.py`: Watch for missing imports (e.g.\n  `CudaGraphScope`) silently dropped during conflict resolution.\n- `fine_grained_activation_offload.py`: Critical interface file used by many\n  callers. If main and dev have divergent method names\u002Fsignatures, prefer\n  dev's implementation and patch main-originated callers to match.\n- `distrib_optimizer.py`: Dev may have broader type abstractions (e.g.\n  `_is_distopt_quantized_param` covering both FP8 and GroupedQuantizedTensor).\n  Main may simplify to explicit type checks. Restore dev's abstractions.\n\n### Special Handling: data_schedule.py\n\nMain and dev have completely different classes in this file:\n- Main: `HybridCPDataLoaderWrapper` (imported by main's `training.py`)\n- Dev: `BasePackingScheduler`, `DpBalancedScheduler`,\n  `DefaultDynamicCPScheduler`, `wrap_data_iterator`,\n  `get_batch_on_this_rank_for_sequence_packing` (imported by `pretrain_gpt.py`\n  and tests)\n\n**Do NOT take either version wholesale.** Keep dev's file and append main's\n`HybridCPDataLoaderWrapper` class (plus any missing imports like\n`BalancedCPScheduler`, `Any`, `List`) at the end.\n\n### Restore Deleted Files\n\nCompare `git ls-tree` between `origin\u002Fmain` and HEAD to find files in main\nthat are missing from the merged tree. For each:\n- **Restore** if main's code imports\u002Freferences it and would break without it\n  (e.g. `hybrid_cp_schedule.py` if `data_schedule.py` imports from it)\n- **Do NOT restore** if dev intentionally deleted it — check\n  `git log origin\u002Fdev -- \u003Cfile>` for the deletion commit to understand intent\n- When in doubt, check whether any file in the merged tree imports from the\n  missing file. If nothing imports it, skip it.\n\n### Formatting\n\nRun on ALL changed Python files (relative to `origin\u002Fdev`), in this order:\n\n1. `black` (version 24, `--config pyproject.toml`)\n2. `isort`\n3. Order matters: black first, then isort — reverse order can undo isort's work\n4. `pylint` on changed `megatron\u002Fcore\u002F` files — fix missing-docstring and\n   line-too-long violations before pushing\n\n### Pre-push advisory checks\n\nBefore every `git push` in this workflow (the initial push in Phase 1\nAND every fix-push in Phase 3), run these bash checks as guidance. They\nmust never block the push. Review every finding: fix genuine merge accidents\nand document intentional main removals or formatting\u002Freordering false positives\nin the PR body.\n\n```bash\nset +e\n(\nset -euo pipefail\n\nMERGE_COMMIT=$(git rev-list --min-parents=2 --max-count=1 HEAD || true)\nif [ -n \"$MERGE_COMMIT\" ]; then\n  DEV_REF=\"${MERGE_COMMIT}^1\"\n  MAIN_REF=\"${MERGE_COMMIT}^2\"\nelse\n  DEV_REF=\"origin\u002Fdev\"\n  MAIN_REF=\"origin\u002Fmain\"\nfi\n\n# 1. CODEOWNERS must be identical to dev's.\nif ! git diff --quiet \"$DEV_REF\" HEAD -- .github\u002FCODEOWNERS; then\n  echo \"WARNING: .github\u002FCODEOWNERS differs from dev. Restore with:\"\n  echo \"  git checkout $DEV_REF -- .github\u002FCODEOWNERS\"\nfi\n\n# 2. Dependency-management triple must be identical to dev's.\nfor f in pyproject.toml uv.lock docker\u002FDockerfile.ci.dev; do\n  if ! git diff --quiet \"$DEV_REF\" HEAD -- \"$f\"; then\n    # pyproject.toml is allowed to differ ONLY for git source reconciliation\n    # (new [tool.uv.sources] entries from main). If you intentionally edited\n    # it for that reason, document the reconciliation in the PR body.\n    echo \"WARNING: $f differs from dev\"\n  fi\ndone\n\n# 3. Dev-feature preservation audit.\n#\n# The most common sync regression is silently dropping a dev-only feature\n# that main does not have yet. Pattern:\n#   T0: a feature lands on dev\n#   T1 > T0: the same feature lands on main (possibly reformatted)\n#   The sync runs between T0 and T1. Blindly resolving a conflict in\n#   main's favour drops dev's addition wherever main happened to touch a\n#   nearby line for an unrelated reason.\n#\n# For each file the sync touched (modulo skill-sanctioned overrides and\n# the dependency triple), find every line that satisfies ALL of:\n#   line is on origin\u002Fdev        (dev had it)\n#   line is NOT on origin\u002Fmain   (main never owned it)\n#   line is NOT in the merged tree  (the merge dropped it)\n# Filter out whitespace-only lines and bracket-only lines (they\n# frequently differ for cosmetic reasons).\n#\n# Files in the \"Files to Override from Main\" list (training.py,\n# initialize.py, utils.py, data_samplers.py, layer_wise_optimizer.py)\n# are exempt by skill convention — main may legitimately win there.\n# CODEOWNERS and the dep triple are checked above; skip them here.\n\nINTENTIONAL_OVERRIDE_REGEX='^(megatron\u002Ftraining\u002Ftraining\\.py|megatron\u002Ftraining\u002Finitialize\\.py|megatron\u002Ftraining\u002Futils\\.py|megatron\u002Ftraining\u002Fdatasets\u002Fdata_samplers\\.py|megatron\u002Fcore\u002Foptimizer\u002Flayer_wise_optimizer\\.py)$'\nSKIP_REGEX='^(pyproject\\.toml|uv\\.lock|docker\u002FDockerfile\\.ci\\.dev|\\.github\u002FCODEOWNERS)$'\n\nFINDINGS=0\nfor f in $(git diff --name-only \"$DEV_REF\"..HEAD \\\n            -- '*.py' '*.md' '*.yaml' '*.yml' '*.toml' \\\n               '*.sh' '*.cpp' '*.cu' '*.h' \\\n            | sort -u); do\n  [[ \"$f\" =~ $SKIP_REGEX ]] && continue\n  [[ \"$f\" =~ $INTENTIONAL_OVERRIDE_REGEX ]] && continue\n  git cat-file -e \"HEAD:$f\" 2>\u002Fdev\u002Fnull || continue\n\n  missing=$(comm -23 \\\n              \u003C(git show \"$DEV_REF:$f\"  2>\u002Fdev\u002Fnull | sort -u) \\\n              \u003C(git show \"$MAIN_REF:$f\" 2>\u002Fdev\u002Fnull | sort -u) \\\n            | comm -23 - \u003C(git show \"HEAD:$f\" 2>\u002Fdev\u002Fnull | sort -u) \\\n            | grep -E '[[:alnum:]_]' \\\n            || true)\n\n  if [ -n \"$missing\" ]; then\n    echo \"=== $f ===\"\n    printf '%s\\n' \"$missing\"\n    FINDINGS=$((FINDINGS + $(printf '%s\\n' \"$missing\" | grep -c .)))\n  fi\ndone\n\nif [ \"$FINDINGS\" -gt 0 ]; then\n  echo \"WARNING: $FINDINGS potential dev-only line removal(s) detected. For each:\"\n  echo \"  (a) MAIN INTENTIONALLY REMOVED — find the specific commit in\"\n  echo \"      'git log origin\u002Fmain -- \u003Cfile>' that removed it; document the\"\n  echo \"      SHA in the PR body, then the drop is acceptable.\"\n  echo \"  (b) MERGE ACCIDENT — main never explicitly touched that line.\"\n  echo \"      RESTORE the dev line (Edit\u002FWrite to put it back).\"\n  echo \"Default to (b); only declare (a) with a specific main commit as evidence.\"\n  echo \"This audit is advisory; continue the push after reviewing the findings.\"\nfi\n\necho \"nightly-sync pre-push guidance complete\"\n)\nGUIDANCE_STATUS=$?\nif [ \"$GUIDANCE_STATUS\" -ne 0 ]; then\n  echo \"WARNING: nightly-sync pre-push guidance failed with status $GUIDANCE_STATUS; allowing the push to continue.\"\nfi\nexit 0\n```\n\nAll pre-push findings are advisory. The hook must return success even when it\nfinds a CODEOWNERS difference, potential dev-feature removal, dependency-triple\ndifference, or an internal audit error. The underlying policies still apply:\nrestore accidental changes, preserve dev-only features, and document exact main\ncommits for intentional removals. A warning by itself is never a reason to stop\nthe workflow or request authorization to continue.\n\nRecent regressions the dev-feature audit would have flagged (all\n\"merge accident\" type from #4659 and #4716):\n\n- `transformer_layer.py` lost `_forward_mlp_router(input_ids=None)`\n- `token_dispatcher.py` lost the\n  `num_sms_preprocessing_api=...` kwarg on the `_HybridEPManager` call\n- `moe_layer.py` lost `self._maybe_record_overload_factor(...)`\n- `gpt_dynamic_inference_with_coordinator.py` lost\n  `from megatron.training.arguments import parse_and_validate_args`\n- `datasets\u002Freadme.md` lost the dev-only \"Packing Scheduler\" section\n- PR #4882 \u002F PR #4318 dropped the `TEFusedDenseMLP` implementation and\n  `gpt_layer_specs.py` selection while leaving the config flag and unit test\n- `data_samplers.py` \u002F `utils.py` \u002F `training.py` kept main's\n  `args.hybrid_context_parallel` instead of dev's\n  `args.dynamic_context_parallel` (counts as a MERGE ACCIDENT — dev's\n  reference is present, main's is the deprecated alias that's False\n  when callers pass `--dynamic-context-parallel`). These files are on\n  the override list so the audit treats them as \"advisory\", but you\n  should still rename `args.hybrid_context_parallel` →\n  `args.dynamic_context_parallel` on every reference after taking\n  main's version of these files.\n\n### Commit and Push\n\nPhase 1 produces a single commit on the sync branch. The merge itself\ncreates the merge commit; fold any post-merge work (formatting,\nconflict surgery, restored files, regenerated `uv.lock`) into it\nrather than stacking a second commit:\n\n```bash\ngit add -A\ngit commit --amend --no-edit  # rewrites the merge commit's tree;\n                              # parents are preserved.\ngit push -u origin \"$BRANCH\"  # only non-force push of the run.\n```\n\nOnce pushed, this commit is immutable for the rest of the run.\nPhase 3 fixes go into a separate rolling fix commit on top (see\nPhase 3 step 4 and the two-commit policy in Rules).\n\n---\n\n## Phase 2: Create the Draft PR\n\n- Title: `chore: nightly sync main into dev ($DATE)`\n- Create as **draft**: `gh pr create --draft`\n- Body should include:\n  1. Summary of what was synced (number of commits from main)\n  2. **Python-only line-change stats**, so reviewers can gauge the real\n     code surface (excluding golden-value JSON, uv.lock, etc.). Compute\n     with:\n\n     ```bash\n     git diff --numstat origin\u002Fdev...HEAD -- '*.py' \\\n       | awk 'BEGIN{a=0;d=0} {a+=$1; d+=$2} END{\n           printf \"Python lines: +%d \u002F -%d across %d files\\n\", a, d, NR\n         }'\n     ```\n\n     Include the exact line (e.g. `Python lines: +1234 \u002F -567 across 42 files`)\n     in the PR body so reviewers see it at a glance.\n  3. List of files where main's version was taken over the merge\n  4. List of files that were deleted in dev but restored (and why)\n  5. Disposition of every pre-push advisory finding, including CODEOWNERS or\n     dependency-triple differences and potential dev-feature removals. Record\n     whether each was corrected, intentional (with the exact commit or reason),\n     or a formatting\u002Freordering false positive. State explicitly if there were\n     no findings.\n  6. The remerge-diff output (`git show --remerge-diff HEAD` on the merge\n     commit) so reviewers can inspect ONLY the conflict resolutions. If the\n     output is very long, summarize conflicts by file and put the full diff\n     in a collapsed `\u003Cdetails>` block. If git is too old for `--remerge-diff`,\n     note the git version and describe the merge strategy used instead.\n- Save the PR number for later phases\n- **Add the `Run functional tests` and `Run MBridge tests` labels** to the\n  PR immediately after creation. The `Run functional tests` label ensures\n  `\u002Fok to test` triggers the full CI suite (unit tests + functional\u002F\n  integration tests with 100-step training and golden value comparison).\n  The `Run MBridge tests` label triggers the MBridge test suite. Without\n  these labels, only a lightweight subset runs.\n  ```bash\n  gh pr edit \u003CPR_NUMBER> --repo $REPO \\\n    --add-label \"Run functional tests\" \\\n    --add-label \"Run MBridge tests\"\n  ```\n\n---\n\n## Phase 3: CI Iteration\n\n### CI Architecture\n\n- **`Nemo_CICD_Test`** is a downstream gate job aggregating unit test,\n  integration test, and other results. If it fails, investigate the upstream\n  jobs it depends on — do NOT debug the gate itself.\n- **Integration tests** (H100, GB200) may be skipped for non-maintainer PRs.\n  This is expected; the `Nemo_CICD_Test` gate will fail as a result.\n- **`tests\u002Funit_tests\u002Fconftest.py`** imports from `megatron.training.training`,\n  so a broken import in `training.py` (or anything it transitively imports)\n  cascades to fail ALL test suites. If every test job fails with ImportError,\n  check the training.py import chain first.\n\n### Execution model: one step, no background\n\nYou run inside ONE GitHub Actions step. The moment you stop emitting\ntool calls, the step ends and the runner container is destroyed. Any\nbackground process you started dies with it. There is NO persistent\nsession and NO future wakeup. See the workflow prompt's \"NO background\ntasks\" block for the full ban list.\n\nPractical rule: every wait for CI to resolve is a SINGLE foreground Bash\ntool call that blocks inline until the wait is resolved.\n\n### The Fix-Then-Retrigger Loop\n\nTwo nested loops. Do NOT conflate them:\n\n- The **outer loop** is YOUR sequence of tool calls (each iteration: one\n  `\u002Fok to test`, one blocking poll, maybe one fix-and-push). It is NOT a\n  Bash loop. It advances because you make new tool calls.\n- The **inner loop** is a single blocking Bash tool call using\n  `while true; do ... sleep 120; done`. It runs during one iteration of\n  the outer loop and ends when CI reaches a terminal state for that\n  iteration.\n\nThe outer loop terminates ONLY when Phase 4's gate is satisfied.\n\n**Source of truth:** `gh pr view \u003CPR_NUMBER> --repo $REPO --json statusCheckRollup`.\nThis lists every required check, including external status contexts\n(GitLab CI, `copy-pr-bot`, etc.) that `gh api ...\u002Factions\u002Fruns\u002F...\u002Fjobs`\ndoes NOT show.\n\n**Outer-loop iteration (each iteration is a few tool calls):**\n\n1. `latest_sha=$(git rev-parse HEAD)` (one Bash call).\n2. Post `\u002Fok to test $latest_sha` on the PR:\n   `gh pr comment \u003CPR_NUMBER> --repo $REPO --body \"\u002Fok to test $latest_sha\"`\n3. ONE blocking Bash tool call. This is the inner loop. Copy this\n   template verbatim, only changing `REPO` and `PR`:\n\n   ```bash\n   REPO='NVIDIA\u002FMegatron-LM'\n   PR='\u003CPR_NUMBER>'\n   # Names matched case-insensitively, anchored to the START of the name.\n   EXEMPT='copy-pr-bot|is-not-external-contributor|greptile|coderabbit|codeowners|.*review|.*approval|codecov|coverage|build-docs|doc-build|readthedocs|sphinx'\n   # Sentinel check that tells us CI has fully run. Update this if the\n   # aggregate gate job is renamed.\n   SENTINEL='Nemo_CICD_Test'\n\n   while true; do\n     # Normalize both CheckRun (.status \u002F .conclusion) and StatusContext\n     # (.state) entries into the same {name, status, conclusion} shape.\n     rollup=$(gh pr view \"$PR\" --repo \"$REPO\" --json statusCheckRollup --jq '\n       .statusCheckRollup[] | [\n         (.name \u002F\u002F .context \u002F\u002F \"?\"),\n         (if .__typename == \"StatusContext\" then\n            (if (.state == \"PENDING\" or .state == \"EXPECTED\") then \"IN_PROGRESS\"\n             else \"COMPLETED\" end)\n          else (.status \u002F\u002F \"UNKNOWN\") end),\n         (if .__typename == \"StatusContext\" then\n            (if .state == \"SUCCESS\" then \"SUCCESS\"\n             elif (.state == \"FAILURE\" or .state == \"ERROR\") then \"FAILURE\"\n             else \"NEUTRAL\" end)\n          else (.conclusion \u002F\u002F \"UNKNOWN\") end)\n       ] | @tsv')\n\n     # Sentinel: do NOT declare green until the CI aggregate gate has\n     # reached a terminal state. Before \u002Fok to test triggers the run,\n     # the sentinel is absent; while CI is running, it's IN_PROGRESS.\n     sentinel_line=$(printf '%s\\n' \"$rollup\" | awk -F'\\t' -v s=\"$SENTINEL\" '$1 == s')\n     sentinel_status=$(printf '%s\\n' \"$sentinel_line\" | awk -F'\\t' 'NR==1 {print $2}')\n     if [ \"$sentinel_status\" != \"COMPLETED\" ]; then\n       echo \"=== $(date -u) waiting for $SENTINEL (status: ${sentinel_status:-absent}) ===\"\n       sleep 120\n       continue\n     fi\n\n     # Classify non-exempt checks (exempt list applied to the NAME only).\n     non_exempt=$(printf '%s\\n' \"$rollup\" | awk -F'\\t' -v p=\"^($EXEMPT)\" 'tolower($1) !~ tolower(p)')\n     failed=$(printf '%s\\n' \"$non_exempt\" | awk -F'\\t' '$2 == \"COMPLETED\" && $3 !~ \u002F^(SUCCESS|SKIPPED|NEUTRAL)$\u002F')\n     pending=$(printf '%s\\n' \"$non_exempt\" | awk -F'\\t' '$2 != \"COMPLETED\"')\n\n     if [ -n \"$failed\" ]; then\n       echo \"=== NON-EXEMPT FAILURES ===\"\n       printf '%s\\n' \"$failed\"\n       echo \"RESULT=FAILURE\"\n       exit 0\n     fi\n     if [ -n \"$pending\" ]; then\n       # Sentinel is COMPLETED but a non-exempt check is still pending —\n       # rare but possible. Keep waiting; do NOT ship.\n       echo \"=== $(date -u) sentinel done but non-exempt checks still pending ===\"\n       printf '%s\\n' \"$pending\"\n       sleep 120\n       continue\n     fi\n\n     echo \"=== ALL NON-EXEMPT CHECKS COMPLETED GREEN ===\"\n     printf '%s\\n' \"$non_exempt\"\n     echo \"RESULT=GREEN\"\n     exit 0\n   done\n   ```\n\n   This Bash call blocks for as long as CI takes (minutes to hours). Do\n   NOT split it into many short polls interleaved with other tool calls\n   — that wastes `--max-turns` and creates windows where you could lose\n   track of the loop state.\n\n4. Read the tool output:\n   - If `RESULT=FAILURE`: diagnose via\n     `gh api repos\u002F$REPO\u002Factions\u002Fjobs\u002F\u003CJOB_ID>\u002Flogs` (or the\n     external-context equivalent) and fix the code. The Phase 1\n     commit is immutable; fixes accumulate in a single rolling fix\n     commit on top of it:\n     ```bash\n     git add -A\n     if git rev-parse --verify HEAD^2 >\u002Fdev\u002Fnull 2>&1; then\n       # HEAD has two parents → still the Phase 1 merge commit.\n       # First failure of this run: create the fix commit.\n       git commit -m \"fix: post-CI corrections\"\n       git push origin \"$BRANCH\"\n     else\n       # HEAD is the existing fix commit → amend it.\n       git commit --amend --no-edit\n       git push --force-with-lease origin \"$BRANCH\"\n     fi\n     ```\n     `--force-with-lease` (not `--force`): if a human pushed onto the\n     branch since the bot last fetched, the lease aborts the push\n     instead of clobbering them — fetch and decide what to do.\n     Start a new outer-loop iteration at step 1 with the new HEAD SHA.\n   - If `RESULT=GREEN`: outer loop is done. Proceed to Phase 4.\n\n**Why not wait-for-run-to-register first?** `gh pr comment` with\n`\u002Fok to test \u003Csha>` is handled by `copy-pr-bot`, which takes a few\nseconds to trigger the CI run. The `statusCheckRollup` poll in step 3\nwill initially show checks in `PENDING` \u002F `QUEUED`; that's fine — the\ninner loop treats those as \"keep waiting\" and will see them advance as\nCI progresses. No separate registration poll needed.\n\n### Anti-Patterns (what went wrong on run 24800621116)\n\n- **Do NOT classify a queued\u002Fin-progress job as \"infrastructure-\n  blocked\" and ship.** A stuck queue drains eventually — wait. If the\n  job eventually passes, great; if it fails, go fix it.\n- **Do NOT mark ready while any required check is `PENDING` \u002F\n  `QUEUED` \u002F `IN_PROGRESS` on the HEAD SHA.** A push is not a pass;\n  only a `COMPLETED` + green status is.\n- **Do NOT declare an untested job \"pre-existing.\"** Pre-existing\n  means the test ran to completion and failed the same way on recent\n  dev CI. A job that never ran on your PR cannot be pre-existing.\n- **Do NOT use `gh api ...\u002Factions\u002Fruns\u002F...\u002Fjobs` alone** as the gate\n  signal. External status contexts (GitLab CI pipelines, copy-pr-bot\n  status, etc.) do NOT appear there. Use `statusCheckRollup`.\n- **Do NOT start any background process.** No `&`, no `nohup`, no\n  `run_in_background: true`, no `ScheduleWakeup`. The GitHub Actions\n  step owns your shell; when the step ends, every background process\n  is killed and cannot resume.\n- **Do NOT push directly to `pull-request\u002F\u003CPR_NUMBER>` branches.**\n  The community bot manages those branches when it processes\n  `\u002Fok to test`. Pushing to them directly breaks the CI trigger\n  mechanism. Always push to your own sync branch (e.g.\n  `main2dev\u002F\u003CDATE>`) instead.\n- **Do NOT forget the `Run functional tests` and `Run MBridge tests`\n  labels.** Without `Run functional tests`, the internal GitLab\n  functional tests do not run; without `Run MBridge tests`, the\n  MBridge test suite does not run.\n\n### Failure Investigation\n\n1. Fetch logs: `gh api repos\u002F$REPO\u002Factions\u002Fjobs\u002F\u003CJOB_ID>\u002Flogs`\n2. Grep for: `ImportError`, `ModuleNotFoundError`, `FAILED`,\n   `would reformat`, `line-too-long`, `Traceback`\n3. Read the error, understand root cause, fix the code\n\n### Common Issues\n\n- **ImportError for a class\u002Fmodule:** Dev test imports a class from a file\n  where we took main's version. Restore only the missing class\u002Ffunction —\n  not the entire file. If a file's classes are completely different between\n  main and dev, keep both sets of code.\n- **Formatting failures (black\u002Fpylint):** Run `black --config pyproject.toml`\n  on offending files. For pylint long-line or missing-docstring, edit directly.\n- **Circular imports:** `isort` can reorder imports in a way that introduces\n  circular dependencies (e.g. `megatron\u002Flegacy\u002Fmodel\u002F__init__.py`). Check\n  `git diff` on `__init__.py` files to see if import order changed.\n- **Dependency version mismatches:** Taking main's `pyproject.toml`\u002F`uv.lock`\n  can change library versions in the CI container. Dev-only code may depend on\n  newer versions (e.g. TransformerEngine's `single_grouped_weight`). If failures\n  trace to missing kwargs or changed APIs in third-party libs, this is the cause.\n- **API mismatch (AttributeError \u002F TypeError at runtime):** Main's callers\n  reference methods that don't exist (or have different signatures) in dev's\n  implementations. See \"API Mismatch Detection\" in Phase 1. Fix by adding\n  shims, renaming methods, or adjusting call signatures.\n- **Infrastructure \u002F network failures (apt-get, pip download):** Errors like\n  `archive.ubuntu.com unreachable` or `Connection timed out` during package\n  installation are transient CI infrastructure issues, not code problems.\n  Retry CI with the same SHA. Do not investigate as code failures.\n\n### Pre-Existing Failure Verification\n\n**You MUST empirically verify before classifying any failure as pre-existing.**\n\n1. `gh pr list --repo $REPO --base dev --state merged --limit 3`\n2. `gh pr checks \u003CPR_NUMBER> --repo $REPO` on a recently merged dev PR\n3. If the same test bucket **passes on recent dev CI** → the failure is\n   sync-caused. You must fix it.\n4. Only if the test **also fails on recent dev CI** can you classify it as\n   pre-existing. Document with the dev PR number and CI run as evidence.\n\n### Internal GitLab Functional Tests\n\nGitHub CI covers unit tests and some integration tests. Internal GitLab\n(`gitlab-master.nvidia.com`) runs additional functional tests on\nH100\u002FGB200 hardware that may reveal issues GitHub CI does not catch.\nThese surface in `statusCheckRollup` as external status contexts (the\nbash template already handles them via the `__typename == \"StatusContext\"`\nbranch).\n\n- Fine-grained activation offloading failures, for example, only showed\n  up in GitLab functional tests during PR #4291\n- If GitHub CI passes but a reviewer reports GitLab failures,\n  investigate with the same rigor as GitHub CI failures\n- The sync PR should ideally pass both GitHub and GitLab CI before\n  merge, but GitHub CI passing (i.e. the Phase 4 gate above) is the\n  minimum before `gh pr ready`\n\n---\n\n## Phase 4: Mark PR Ready — Strict Gate\n\nRun `gh pr ready` ONLY when every non-exempt required check on the latest\nCI run (against the current HEAD SHA) satisfies BOTH:\n\n1. `status == \"completed\"` — NOT `queued`, `in_progress`, `pending`,\n   `waiting`, or `requested`.\n2. `conclusion ∈ {\"success\", \"skipped\", \"neutral\"}`.\n\nIf a non-exempt check is pending\u002Fqueued\u002Fin-progress: keep polling; do not\nrun `gh pr ready`. If it fails: go back to Phase 3's loop.\n\nThe exempt list (approval\u002Fcoverage\u002Fdocs) is defined in Phase 3; only those\nchecks may be ignored.\n\nA pre-existing failure (same test failing identically on recent dev CI)\nmay be accepted, but ONLY after it has fully run, been empirically\nverified against dev, and documented in the PR body with evidence (dev PR\nnumber + CI run URL).\n\n```\ngh pr ready \u003CPR_NUMBER> --repo $REPO\n```\n\nThen comment on the PR confirming it is ready for human review. The\ncomment should include:\n- Which non-exempt checks passed (summary from the bash template's\n  final `ALL NON-EXEMPT CHECKS COMPLETED GREEN` output)\n- Any documented pre-existing failures with evidence (dev PR number +\n  CI run URL showing the same failure on recent dev CI)\n- Which files were taken from main vs. merged manually\n- Any API mismatches detected and fixed\n- Any `pyproject.toml` git source reconciliation performed\n- Links to the CI runs that validated the fixes\n\n---\n\n## Rules\n\n- Do not globally prioritize main over dev. Preserve recent dev-only additions\n  unless a specific main commit intentionally removed them. Main may win\n  wholesale only for the explicit override list above; otherwise resolve\n  conflicts by combining main's incoming changes with dev's still-unmerged\n  features.\n- **Two-commit policy:** the PR contains at most two bot-authored\n  commits — the Phase 1 merge commit (immutable once pushed) and a\n  single rolling fix commit on top. The fix commit is created on\n  the first Phase 3 failure (normal push) and amended on every\n  subsequent failure (`git commit --amend --no-edit` +\n  `git push --force-with-lease`). Never modify the Phase 1 commit\n  after pushing it; never let the fix-commit count exceed one.\n- CI triggers via comment: `\u002Fok to test \u003Csha>`\n- CI runs appear on branch `pull-request\u002F\u003CPR_NUMBER>`\n- Git committer identity: `svcnvidia-nemo-ci`\n- After editing imports, run `isort` on those files\n- **Push directly to NVIDIA\u002FMegatron-LM** (not a fork). The bot uses a PAT\n  with write access. CLAUDE.md says \"never push directly\" but that rule is\n  for human contributors — the sync bot is an exception.\n",{"data":34,"body":36},{"name":4,"description":6,"when_to_use":35},"Working on the nightly sync PR; investigating a nightly sync failure; resolving merge conflicts between main and dev; 'nightly sync failed', 'main-to-dev merge', 'sync bot'.",{"type":37,"children":38},"root",[39,48,54,58,65,72,121,127,132,138,143,148,182,195,200,250,255,260,306,312,325,380,390,462,487,499,512,544,550,570,614,618,659,678,870,876,881,886,923,927,1035,1040,1095,1101,1106,1175,1181,1186,1259,1298,1304,1325,1377,1383,1395,1449,1455,1468,3642,3647,3652,3825,3831,3843,3940,3945,3948,3954,4308,4311,4317,4323,4386,4392,4397,4402,4408,4413,4454,4459,4493,4501,6228,6283,6289,6484,6490,6554,6560,6699,6705,6713,6760,6766,6794,6818,6821,6827,6839,6899,6911,6916,6921,6930,6935,6983,6986,6992,7079],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"nightly-sync-main-to-dev",[45],{"type":46,"value":47},"text","Nightly Sync: Main to Dev",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"This skill is read by the automated sync bot during the nightly-sync-main-to-dev\nworkflow. It contains all domain knowledge for merging main into dev, resolving\nconflicts, iterating on CI, and shipping the PR.",{"type":40,"tag":55,"props":56,"children":57},"hr",{},[],{"type":40,"tag":59,"props":60,"children":62},"h2",{"id":61},"phase-1-create-the-sync-branch-and-merge",[63],{"type":46,"value":64},"Phase 1: Create the Sync Branch and Merge",{"type":40,"tag":66,"props":67,"children":69},"h3",{"id":68},"branch-setup",[70],{"type":46,"value":71},"Branch Setup",{"type":40,"tag":73,"props":74,"children":75},"ol",{},[76,97,108],{"type":40,"tag":77,"props":78,"children":79},"li",{},[80,82,89,91],{"type":46,"value":81},"Create branch ",{"type":40,"tag":83,"props":84,"children":86},"code",{"className":85},[],[87],{"type":46,"value":88},"$BRANCH",{"type":46,"value":90}," from ",{"type":40,"tag":83,"props":92,"children":94},{"className":93},[],[95],{"type":46,"value":96},"origin\u002Fdev",{"type":40,"tag":77,"props":98,"children":99},{},[100,102],{"type":46,"value":101},"Merge: ",{"type":40,"tag":83,"props":103,"children":105},{"className":104},[],[106],{"type":46,"value":107},"git merge origin\u002Fmain --no-edit",{"type":40,"tag":77,"props":109,"children":110},{},[111,113,119],{"type":46,"value":112},"Resolve conflicts surgically. Do NOT use global ",{"type":40,"tag":83,"props":114,"children":116},{"className":115},[],[117],{"type":46,"value":118},"-X theirs",{"type":46,"value":120},", and do NOT\nblanket-checkout main's version of a shared file. Main's version may be\ntaken wholesale only for files in \"Files to Override from Main\" below, or\nwhen you have identified a specific main commit that intentionally removes\nthe dev-only code. For all other conflicts, combine both sides so recent\ndev-only additions remain present.",{"type":40,"tag":66,"props":122,"children":124},{"id":123},"preserving-dev-only-additions",[125],{"type":46,"value":126},"Preserving Dev-Only Additions",{"type":40,"tag":49,"props":128,"children":129},{},[130],{"type":46,"value":131},"Do NOT blanket-override all shared files with main's version. Dev has features\nnot yet in main (new classes, new modules, new tests). The merge preserves both\nsides' non-conflicting additions — only intervene where there is an actual\nconflict.",{"type":40,"tag":66,"props":133,"children":135},{"id":134},"squash-merge-chain-detection",[136],{"type":46,"value":137},"Squash-Merge Chain Detection",{"type":40,"tag":49,"props":139,"children":140},{},[141],{"type":46,"value":142},"Dev often develops features as a chain of PRs (PR1 → PR2 → PR3) where each\nbuilds on the last. When PR1 is squash-merged to main, git sees main's squashed\nversion and dev's original commits as unrelated changes. A conflict resolution\nthat blindly picks main can silently discard PR2\u002FPR3's improvements on dev.",{"type":40,"tag":49,"props":144,"children":145},{},[146],{"type":46,"value":147},"After the merge, check for this pattern:",{"type":40,"tag":73,"props":149,"children":150},{},[151,164,177],{"type":40,"tag":77,"props":152,"children":153},{},[154,156,162],{"type":46,"value":155},"For each conflicted file, run ",{"type":40,"tag":83,"props":157,"children":159},{"className":158},[],[160],{"type":46,"value":161},"git log --oneline origin\u002Fdev -- \u003Cfile>",{"type":46,"value":163}," to\nsee if dev has commits that came AFTER the code main is bringing in.",{"type":40,"tag":77,"props":165,"children":166},{},[167,169,175],{"type":46,"value":168},"If dev has follow-up commits (bug fixes, refactors, extensions), ",{"type":40,"tag":170,"props":171,"children":172},"strong",{},[173],{"type":46,"value":174},"favor\ndev's version",{"type":46,"value":176}," for those sections.",{"type":40,"tag":77,"props":178,"children":179},{},[180],{"type":46,"value":181},"If the conflict is just main bringing in a clean copy of what dev already\nhas (no follow-ups), main's version is fine.",{"type":40,"tag":49,"props":183,"children":184},{},[185,187,193],{"type":46,"value":186},"Practical check: run ",{"type":40,"tag":83,"props":188,"children":190},{"className":189},[],[191],{"type":46,"value":192},"git diff origin\u002Fdev -- \u003Cfile>",{"type":46,"value":194}," on conflicted files. If\ndev's code was removed or reverted, investigate whether dev's version is the\nmore evolved one.",{"type":40,"tag":49,"props":196,"children":197},{},[198],{"type":46,"value":199},"Real examples from PR #4291:",{"type":40,"tag":201,"props":202,"children":203},"ul",{},[204,215],{"type":40,"tag":77,"props":205,"children":206},{},[207,213],{"type":40,"tag":83,"props":208,"children":210},{"className":209},[],[211],{"type":46,"value":212},"emerging_optimizers.py",{"type":46,"value":214},": Main's version was MORE complete — it squash-merged\ndev's PRs plus added more. Taking main for that section was correct.",{"type":40,"tag":77,"props":216,"children":217},{},[218,224,226,232,234,240,242,248],{"type":40,"tag":83,"props":219,"children":221},{"className":220},[],[222],{"type":46,"value":223},"distrib_optimizer.py",{"type":46,"value":225},": Main overwrote dev's ",{"type":40,"tag":83,"props":227,"children":229},{"className":228},[],[230],{"type":46,"value":231},"GroupedQuantizedTensor",{"type":46,"value":233}," support.\nHad to restore ",{"type":40,"tag":83,"props":235,"children":237},{"className":236},[],[238],{"type":46,"value":239},"_is_distopt_quantized_param",{"type":46,"value":241}," and the expanded\n",{"type":40,"tag":83,"props":243,"children":245},{"className":244},[],[246],{"type":46,"value":247},"_expand_quantized_param_shard_for_cast",{"type":46,"value":249}," loop while keeping main's NVFP4\nadditions. This required a surgical merge combining sections from both.",{"type":40,"tag":49,"props":251,"children":252},{},[253],{"type":46,"value":254},"Key insight: squash-merge chains can go in EITHER direction. Sometimes main\nis ahead (it squash-merged dev's work + more), sometimes dev is ahead (it has\nfollow-up PRs). Always diff both ways before deciding which version to favor.",{"type":40,"tag":49,"props":256,"children":257},{},[258],{"type":46,"value":259},"Real example from PR #4882 \u002F PR #4318:",{"type":40,"tag":201,"props":261,"children":262},{},[263],{"type":40,"tag":77,"props":264,"children":265},{},[266,272,274,280,282,288,290,296,298,304],{"type":40,"tag":83,"props":267,"children":269},{"className":268},[],[270],{"type":46,"value":271},"transformer_engine.py",{"type":46,"value":273},": main had unrelated ",{"type":40,"tag":83,"props":275,"children":277},{"className":276},[],[278],{"type":46,"value":279},"TEFusedMLP",{"type":46,"value":281}," refactors, while dev\nhad the new ",{"type":40,"tag":83,"props":283,"children":285},{"className":284},[],[286],{"type":46,"value":287},"TEFusedDenseMLP",{"type":46,"value":289}," class. The sync kept the config flag and test\nbut dropped the class and ",{"type":40,"tag":83,"props":291,"children":293},{"className":292},[],[294],{"type":46,"value":295},"gpt_layer_specs.py",{"type":46,"value":297}," selection. That is a merge\naccident: restore the dev class and selection while preserving main's\n",{"type":40,"tag":83,"props":299,"children":301},{"className":300},[],[302],{"type":46,"value":303},"TEFusedMLP.as_mlp_submodule",{"type":46,"value":305}," refactor.",{"type":40,"tag":66,"props":307,"children":309},{"id":308},"files-to-override-from-main",[310],{"type":46,"value":311},"Files to Override from Main",{"type":40,"tag":49,"props":313,"children":314},{},[315,317,323],{"type":46,"value":316},"These files have known semantic conflicts where dev's versions reference args\nor APIs that main removed or renamed. Take main's version with\n",{"type":40,"tag":83,"props":318,"children":320},{"className":319},[],[321],{"type":46,"value":322},"git checkout origin\u002Fmain -- \u003Cfile>",{"type":46,"value":324},":",{"type":40,"tag":201,"props":326,"children":327},{},[328,339,349,359,369],{"type":40,"tag":77,"props":329,"children":330},{},[331,337],{"type":40,"tag":83,"props":332,"children":334},{"className":333},[],[335],{"type":46,"value":336},"megatron\u002Ftraining\u002Ftraining.py",{"type":46,"value":338}," — references dev-only args",{"type":40,"tag":77,"props":340,"children":341},{},[342,348],{"type":40,"tag":83,"props":343,"children":345},{"className":344},[],[346],{"type":46,"value":347},"megatron\u002Ftraining\u002Finitialize.py",{"type":46,"value":338},{"type":40,"tag":77,"props":350,"children":351},{},[352,358],{"type":40,"tag":83,"props":353,"children":355},{"className":354},[],[356],{"type":46,"value":357},"megatron\u002Ftraining\u002Futils.py",{"type":46,"value":338},{"type":40,"tag":77,"props":360,"children":361},{},[362,368],{"type":40,"tag":83,"props":363,"children":365},{"className":364},[],[366],{"type":46,"value":367},"megatron\u002Ftraining\u002Fdatasets\u002Fdata_samplers.py",{"type":46,"value":338},{"type":40,"tag":77,"props":370,"children":371},{},[372,378],{"type":40,"tag":83,"props":373,"children":375},{"className":374},[],[376],{"type":46,"value":377},"megatron\u002Fcore\u002Foptimizer\u002Flayer_wise_optimizer.py",{"type":46,"value":379}," — constructor signature",{"type":40,"tag":49,"props":381,"children":382},{},[383,388],{"type":40,"tag":170,"props":384,"children":385},{},[386],{"type":46,"value":387},"Caveat for ALL overrides:",{"type":46,"value":389}," After taking main's version of any file, you\nMUST run the API Mismatch Detection procedure (see below) on that file.\nTaking main's caller code while keeping dev's callee implementations is the\n#1 source of sync bugs.",{"type":40,"tag":49,"props":391,"children":392},{},[393,422,424,430,432,437,439,444,446,452,454,460],{"type":40,"tag":170,"props":394,"children":395},{},[396,398,404,406,412,414,420],{"type":46,"value":397},"IMPORTANT: Do NOT take main's ",{"type":40,"tag":83,"props":399,"children":401},{"className":400},[],[402],{"type":46,"value":403},"pyproject.toml",{"type":46,"value":405},", ",{"type":40,"tag":83,"props":407,"children":409},{"className":408},[],[410],{"type":46,"value":411},"uv.lock",{"type":46,"value":413},", or\n",{"type":40,"tag":83,"props":415,"children":417},{"className":416},[],[418],{"type":46,"value":419},"docker\u002FDockerfile.ci.dev",{"type":46,"value":421},".",{"type":46,"value":423}," These three files are a tightly coupled\ntriple — the Dockerfile's ",{"type":40,"tag":83,"props":425,"children":427},{"className":426},[],[428],{"type":46,"value":429},"uv sync",{"type":46,"value":431}," command must match the dependency\ngroups in ",{"type":40,"tag":83,"props":433,"children":435},{"className":434},[],[436],{"type":46,"value":403},{"type":46,"value":438},", and ",{"type":40,"tag":83,"props":440,"children":442},{"className":441},[],[443],{"type":46,"value":411},{"type":46,"value":445}," must be consistent with both.\nMain's versions are missing dev-only dependencies (e.g.\n",{"type":40,"tag":83,"props":447,"children":449},{"className":448},[],[450],{"type":46,"value":451},"fast-hadamard-transform",{"type":46,"value":453},", correct TransformerEngine revision) and the\n",{"type":40,"tag":83,"props":455,"children":457},{"className":456},[],[458],{"type":46,"value":459},"--group no_pypi_wheels",{"type":46,"value":461}," flag needed to install them. Keep dev's versions\nof all three files.",{"type":40,"tag":49,"props":463,"children":464},{},[465,478,480,485],{"type":40,"tag":170,"props":466,"children":467},{},[468,470,476],{"type":46,"value":469},"IMPORTANT: ",{"type":40,"tag":83,"props":471,"children":473},{"className":472},[],[474],{"type":46,"value":475},".github\u002FCODEOWNERS",{"type":46,"value":477}," must NEVER be modified by the sync\nbot under any circumstances.",{"type":46,"value":479}," Dev's CODEOWNERS is intentionally\ndifferent from main's — do not take main's version, do not merge them,\ndo not touch the file. If the merge produces a conflict or a non-zero\ndiff against ",{"type":40,"tag":83,"props":481,"children":483},{"className":482},[],[484],{"type":46,"value":96},{"type":46,"value":486}," on this path, restore dev's version verbatim:",{"type":40,"tag":488,"props":489,"children":493},"pre",{"className":490,"code":492,"language":46},[491],"language-text","git checkout origin\u002Fdev -- .github\u002FCODEOWNERS\n",[494],{"type":40,"tag":83,"props":495,"children":497},{"__ignoreMap":496},"",[498],{"type":46,"value":492},{"type":40,"tag":49,"props":500,"children":501},{},[502,504,510],{"type":46,"value":503},"Then verify with ",{"type":40,"tag":83,"props":505,"children":507},{"className":506},[],[508],{"type":46,"value":509},"git diff origin\u002Fdev -- .github\u002FCODEOWNERS",{"type":46,"value":511}," — output\nmust be empty. Modifying CODEOWNERS triggers spurious reviewer\nrequests and conflicts with the dev team's governance; rolling back a\nCODEOWNERS change after the PR lands is painful.",{"type":40,"tag":49,"props":513,"children":514},{},[515,526,528,534,536,542],{"type":40,"tag":170,"props":516,"children":517},{},[518,520,525],{"type":46,"value":519},"NEVER manually edit ",{"type":40,"tag":83,"props":521,"children":523},{"className":522},[],[524],{"type":46,"value":411},{"type":46,"value":421},{"type":46,"value":527}," It is a machine-generated lockfile. If\nit needs to change, it must be regenerated with ",{"type":40,"tag":83,"props":529,"children":531},{"className":530},[],[532],{"type":46,"value":533},"uv lock",{"type":46,"value":535}," inside a CUDA\ncontainer (see ",{"type":40,"tag":83,"props":537,"children":539},{"className":538},[],[540],{"type":46,"value":541},".claude\u002Fskills\u002Fbuild-and-test\u002FSKILL.md",{"type":46,"value":543},").",{"type":40,"tag":66,"props":545,"children":547},{"id":546},"git-source-reconciliation-pyprojecttoml",[548],{"type":46,"value":549},"Git Source Reconciliation (pyproject.toml)",{"type":40,"tag":49,"props":551,"children":552},{},[553,555,560,562,568],{"type":46,"value":554},"After keeping dev's ",{"type":40,"tag":83,"props":556,"children":558},{"className":557},[],[559],{"type":46,"value":403},{"type":46,"value":561},", check whether main has added NEW git\nsources to ",{"type":40,"tag":83,"props":563,"children":565},{"className":564},[],[566],{"type":46,"value":567},"[tool.uv.sources]",{"type":46,"value":569}," that don't exist in dev's version. Main's\nmerged code may import from packages only available at specific git revisions.",{"type":40,"tag":73,"props":571,"children":572},{},[573,599,609],{"type":40,"tag":77,"props":574,"children":575},{},[576,578,583,585,591,593],{"type":46,"value":577},"Diff the ",{"type":40,"tag":83,"props":579,"children":581},{"className":580},[],[582],{"type":46,"value":567},{"type":46,"value":584}," sections:\n",{"type":40,"tag":83,"props":586,"children":588},{"className":587},[],[589],{"type":46,"value":590},"git show origin\u002Fmain:pyproject.toml",{"type":46,"value":592}," vs ",{"type":40,"tag":83,"props":594,"children":596},{"className":595},[],[597],{"type":46,"value":598},"git show origin\u002Fdev:pyproject.toml",{"type":40,"tag":77,"props":600,"children":601},{},[602,604],{"type":46,"value":603},"For each git source in main but not dev, add it to dev's ",{"type":40,"tag":83,"props":605,"children":607},{"className":606},[],[608],{"type":46,"value":403},{"type":40,"tag":77,"props":610,"children":611},{},[612],{"type":46,"value":613},"For sources in both but at different revisions, check whether dev's revision\nworks. If dev's revision is broken (TOML parse errors, missing classes main's\ncode imports), take main's revision instead.",{"type":40,"tag":49,"props":615,"children":616},{},[617],{"type":46,"value":199},{"type":40,"tag":201,"props":619,"children":620},{},[621,648],{"type":40,"tag":77,"props":622,"children":623},{},[624,630,632,638,640,646],{"type":40,"tag":83,"props":625,"children":627},{"className":626},[],[628],{"type":46,"value":629},"nvidia-resiliency-ext",{"type":46,"value":631},": Main's ",{"type":40,"tag":83,"props":633,"children":635},{"className":634},[],[636],{"type":46,"value":637},"torch.py",{"type":46,"value":639}," imports ",{"type":40,"tag":83,"props":641,"children":643},{"className":642},[],[644],{"type":46,"value":645},"get_write_results_queue",{"type":46,"value":647},"\nwhich only existed in main's pinned git revision, not on PyPI. Had to add\nmain's git source to dev's pyproject.toml.",{"type":40,"tag":77,"props":649,"children":650},{},[651,657],{"type":40,"tag":83,"props":652,"children":654},{"className":653},[],[655],{"type":46,"value":656},"nemo-run",{"type":46,"value":658},": Dev's pinned revision had a TOML parse error with uv 0.7.2.\nHad to swap to main's revision.",{"type":40,"tag":49,"props":660,"children":661},{},[662,664,669,671,676],{"type":46,"value":663},"After any changes to ",{"type":40,"tag":83,"props":665,"children":667},{"className":666},[],[668],{"type":46,"value":403},{"type":46,"value":670},", regenerate ",{"type":40,"tag":83,"props":672,"children":674},{"className":673},[],[675],{"type":46,"value":411},{"type":46,"value":677}," inside a CUDA\ncontainer:",{"type":40,"tag":488,"props":679,"children":683},{"className":680,"code":681,"language":682,"meta":496,"style":496},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker run --rm -v $(pwd):\u002Fworkspace nvcr.io\u002Fnvidia\u002Fpytorch:26.02-py3 \\\n  bash -c \"pip install uv==0.7.2 && cd \u002Fworkspace && \\\n  uv venv .venv --system-site-packages && uv sync --only-group build && uv lock\"\n# Clean up root-owned .venv:\ndocker run --rm -v $(pwd):\u002Fworkspace nvcr.io\u002Fnvidia\u002Fpytorch:26.02-py3 \\\n  bash -c \"rm -rf \u002Fworkspace\u002F.venv\"\n","bash",[684],{"type":40,"tag":83,"props":685,"children":686},{"__ignoreMap":496},[687,748,777,791,801,845],{"type":40,"tag":688,"props":689,"children":692},"span",{"class":690,"line":691},"line",1,[693,699,705,710,715,721,727,732,737,742],{"type":40,"tag":688,"props":694,"children":696},{"style":695},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[697],{"type":46,"value":698},"docker",{"type":40,"tag":688,"props":700,"children":702},{"style":701},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[703],{"type":46,"value":704}," run",{"type":40,"tag":688,"props":706,"children":707},{"style":701},[708],{"type":46,"value":709}," --rm",{"type":40,"tag":688,"props":711,"children":712},{"style":701},[713],{"type":46,"value":714}," -v",{"type":40,"tag":688,"props":716,"children":718},{"style":717},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[719],{"type":46,"value":720}," $(",{"type":40,"tag":688,"props":722,"children":724},{"style":723},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[725],{"type":46,"value":726},"pwd",{"type":40,"tag":688,"props":728,"children":729},{"style":717},[730],{"type":46,"value":731},")",{"type":40,"tag":688,"props":733,"children":734},{"style":701},[735],{"type":46,"value":736},":\u002Fworkspace",{"type":40,"tag":688,"props":738,"children":739},{"style":701},[740],{"type":46,"value":741}," nvcr.io\u002Fnvidia\u002Fpytorch:26.02-py3",{"type":40,"tag":688,"props":743,"children":745},{"style":744},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[746],{"type":46,"value":747}," \\\n",{"type":40,"tag":688,"props":749,"children":751},{"class":690,"line":750},2,[752,757,762,767,772],{"type":40,"tag":688,"props":753,"children":754},{"style":701},[755],{"type":46,"value":756},"  bash",{"type":40,"tag":688,"props":758,"children":759},{"style":701},[760],{"type":46,"value":761}," -c",{"type":40,"tag":688,"props":763,"children":764},{"style":717},[765],{"type":46,"value":766}," \"",{"type":40,"tag":688,"props":768,"children":769},{"style":701},[770],{"type":46,"value":771},"pip install uv==0.7.2 && cd \u002Fworkspace && ",{"type":40,"tag":688,"props":773,"children":774},{"style":744},[775],{"type":46,"value":776},"\\\n",{"type":40,"tag":688,"props":778,"children":780},{"class":690,"line":779},3,[781,786],{"type":40,"tag":688,"props":782,"children":783},{"style":701},[784],{"type":46,"value":785},"  uv venv .venv --system-site-packages && uv sync --only-group build && uv lock",{"type":40,"tag":688,"props":787,"children":788},{"style":717},[789],{"type":46,"value":790},"\"\n",{"type":40,"tag":688,"props":792,"children":794},{"class":690,"line":793},4,[795],{"type":40,"tag":688,"props":796,"children":798},{"style":797},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[799],{"type":46,"value":800},"# Clean up root-owned .venv:\n",{"type":40,"tag":688,"props":802,"children":804},{"class":690,"line":803},5,[805,809,813,817,821,825,829,833,837,841],{"type":40,"tag":688,"props":806,"children":807},{"style":695},[808],{"type":46,"value":698},{"type":40,"tag":688,"props":810,"children":811},{"style":701},[812],{"type":46,"value":704},{"type":40,"tag":688,"props":814,"children":815},{"style":701},[816],{"type":46,"value":709},{"type":40,"tag":688,"props":818,"children":819},{"style":701},[820],{"type":46,"value":714},{"type":40,"tag":688,"props":822,"children":823},{"style":717},[824],{"type":46,"value":720},{"type":40,"tag":688,"props":826,"children":827},{"style":723},[828],{"type":46,"value":726},{"type":40,"tag":688,"props":830,"children":831},{"style":717},[832],{"type":46,"value":731},{"type":40,"tag":688,"props":834,"children":835},{"style":701},[836],{"type":46,"value":736},{"type":40,"tag":688,"props":838,"children":839},{"style":701},[840],{"type":46,"value":741},{"type":40,"tag":688,"props":842,"children":843},{"style":744},[844],{"type":46,"value":747},{"type":40,"tag":688,"props":846,"children":848},{"class":690,"line":847},6,[849,853,857,861,866],{"type":40,"tag":688,"props":850,"children":851},{"style":701},[852],{"type":46,"value":756},{"type":40,"tag":688,"props":854,"children":855},{"style":701},[856],{"type":46,"value":761},{"type":40,"tag":688,"props":858,"children":859},{"style":717},[860],{"type":46,"value":766},{"type":40,"tag":688,"props":862,"children":863},{"style":701},[864],{"type":46,"value":865},"rm -rf \u002Fworkspace\u002F.venv",{"type":40,"tag":688,"props":867,"children":868},{"style":717},[869],{"type":46,"value":790},{"type":40,"tag":66,"props":871,"children":873},{"id":872},"api-mismatch-detection-post-merge-audit",[874],{"type":46,"value":875},"API Mismatch Detection (Post-Merge Audit)",{"type":40,"tag":49,"props":877,"children":878},{},[879],{"type":46,"value":880},"The merge can create \"Frankenstein\" code where main's callers use dev's\nimplementations (or vice versa) with different method signatures. This\ncompiles fine but fails at runtime.",{"type":40,"tag":49,"props":882,"children":883},{},[884],{"type":46,"value":885},"After the merge, audit cross-boundary call sites:",{"type":40,"tag":73,"props":887,"children":888},{},[889,908,913,918],{"type":40,"tag":77,"props":890,"children":891},{},[892,894,899,901,907],{"type":46,"value":893},"Identify files where main's version was taken (",{"type":40,"tag":83,"props":895,"children":897},{"className":896},[],[898],{"type":46,"value":118},{"type":46,"value":900}," or explicit\n",{"type":40,"tag":83,"props":902,"children":904},{"className":903},[],[905],{"type":46,"value":906},"git checkout origin\u002Fmain",{"type":46,"value":731},{"type":40,"tag":77,"props":909,"children":910},{},[911],{"type":46,"value":912},"For each, find all external call sites: classes it instantiates, methods\nit calls on imported objects, functions from other modules it invokes",{"type":40,"tag":77,"props":914,"children":915},{},[916],{"type":46,"value":917},"Verify method names, parameter counts, and signatures match between the\ncaller and the implementation in the merged tree",{"type":40,"tag":77,"props":919,"children":920},{},[921],{"type":46,"value":922},"Pay special attention to \"interface\" modules (files defining base classes)\n— if main and dev evolved the interface differently, every caller and\nimplementer must agree",{"type":40,"tag":49,"props":924,"children":925},{},[926],{"type":46,"value":199},{"type":40,"tag":201,"props":928,"children":929},{},[930,957,975,1000],{"type":40,"tag":77,"props":931,"children":932},{},[933,939,941,947,949,955],{"type":40,"tag":83,"props":934,"children":936},{"className":935},[],[937],{"type":46,"value":938},"multi_latent_attention.py",{"type":46,"value":940}," (main) called ",{"type":40,"tag":83,"props":942,"children":944},{"className":943},[],[945],{"type":46,"value":946},"off_interface.group_commit()",{"type":46,"value":948},"\nbut dev's interface only had ",{"type":40,"tag":83,"props":950,"children":952},{"className":951},[],[953],{"type":46,"value":954},"group_offload()",{"type":46,"value":956}," — method renamed",{"type":40,"tag":77,"props":958,"children":959},{},[960,966,967,973],{"type":40,"tag":83,"props":961,"children":963},{"className":962},[],[964],{"type":46,"value":965},"mamba_model.py",{"type":46,"value":940},{"type":40,"tag":83,"props":968,"children":970},{"className":969},[],[971],{"type":46,"value":972},"init_chunk_handler(3 params)",{"type":46,"value":974}," but dev's\ninterface required 6 params — signature expanded on dev",{"type":40,"tag":77,"props":976,"children":977},{},[978,983,985,991,993,999],{"type":40,"tag":83,"props":979,"children":981},{"className":980},[],[982],{"type":46,"value":965},{"type":46,"value":984}," called ",{"type":40,"tag":83,"props":986,"children":988},{"className":987},[],[989],{"type":46,"value":990},"mark_not_offloadable()",{"type":46,"value":992}," but dev had\n",{"type":40,"tag":83,"props":994,"children":996},{"className":995},[],[997],{"type":46,"value":998},"mark_not_offload()",{"type":46,"value":956},{"type":40,"tag":77,"props":1001,"children":1002},{},[1003,1009,1011,1017,1019,1025,1027,1033],{"type":40,"tag":83,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":46,"value":1008},"bulk_offload()",{"type":46,"value":1010}," did ",{"type":40,"tag":83,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":46,"value":1016},".remove()",{"type":46,"value":1018}," after ",{"type":40,"tag":83,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":46,"value":1024},"bulk_offload_group()",{"type":46,"value":1026}," already\n",{"type":40,"tag":83,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":46,"value":1032},".pop()",{"type":46,"value":1034},"d the same item — double-removal from a list",{"type":40,"tag":49,"props":1036,"children":1037},{},[1038],{"type":46,"value":1039},"Practical detection:",{"type":40,"tag":488,"props":1041,"children":1043},{"className":680,"code":1042,"language":682,"meta":496,"style":496},"# For each file taken from main, find what it imports and calls\ngrep -rn \"from \u003Cmodule> import\\|\u003Cmodule>\\.\" megatron\u002F\n# Cross-reference with the actual implementations in the merged tree\n",[1044],{"type":40,"tag":83,"props":1045,"children":1046},{"__ignoreMap":496},[1047,1055,1087],{"type":40,"tag":688,"props":1048,"children":1049},{"class":690,"line":691},[1050],{"type":40,"tag":688,"props":1051,"children":1052},{"style":797},[1053],{"type":46,"value":1054},"# For each file taken from main, find what it imports and calls\n",{"type":40,"tag":688,"props":1056,"children":1057},{"class":690,"line":750},[1058,1063,1068,1072,1077,1082],{"type":40,"tag":688,"props":1059,"children":1060},{"style":695},[1061],{"type":46,"value":1062},"grep",{"type":40,"tag":688,"props":1064,"children":1065},{"style":701},[1066],{"type":46,"value":1067}," -rn",{"type":40,"tag":688,"props":1069,"children":1070},{"style":717},[1071],{"type":46,"value":766},{"type":40,"tag":688,"props":1073,"children":1074},{"style":701},[1075],{"type":46,"value":1076},"from \u003Cmodule> import\\|\u003Cmodule>\\.",{"type":40,"tag":688,"props":1078,"children":1079},{"style":717},[1080],{"type":46,"value":1081},"\"",{"type":40,"tag":688,"props":1083,"children":1084},{"style":701},[1085],{"type":46,"value":1086}," megatron\u002F\n",{"type":40,"tag":688,"props":1088,"children":1089},{"class":690,"line":779},[1090],{"type":40,"tag":688,"props":1091,"children":1092},{"style":797},[1093],{"type":46,"value":1094},"# Cross-reference with the actual implementations in the merged tree\n",{"type":40,"tag":66,"props":1096,"children":1098},{"id":1097},"file-specific-merge-lessons",[1099],{"type":46,"value":1100},"File-Specific Merge Lessons",{"type":40,"tag":49,"props":1102,"children":1103},{},[1104],{"type":46,"value":1105},"These lessons were learned from PR #4291. They may recur if the same files\ncontinue to diverge:",{"type":40,"tag":201,"props":1107,"children":1108},{},[1109,1128,1147,1158],{"type":40,"tag":77,"props":1110,"children":1111},{},[1112,1118,1120,1126],{"type":40,"tag":83,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":46,"value":1117},"gated_delta_net.py",{"type":46,"value":1119},": If the merge creates code calling non-existent helper\nmethods (e.g. ",{"type":40,"tag":83,"props":1121,"children":1123},{"className":1122},[],[1124],{"type":46,"value":1125},"_resolve_cu_seqlens",{"type":46,"value":1127},"), take dev's version wholesale.",{"type":40,"tag":77,"props":1129,"children":1130},{},[1131,1137,1139,1145],{"type":40,"tag":83,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":46,"value":1136},"model_chunk_schedule_plan.py",{"type":46,"value":1138},": Watch for missing imports (e.g.\n",{"type":40,"tag":83,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":46,"value":1144},"CudaGraphScope",{"type":46,"value":1146},") silently dropped during conflict resolution.",{"type":40,"tag":77,"props":1148,"children":1149},{},[1150,1156],{"type":40,"tag":83,"props":1151,"children":1153},{"className":1152},[],[1154],{"type":46,"value":1155},"fine_grained_activation_offload.py",{"type":46,"value":1157},": Critical interface file used by many\ncallers. If main and dev have divergent method names\u002Fsignatures, prefer\ndev's implementation and patch main-originated callers to match.",{"type":40,"tag":77,"props":1159,"children":1160},{},[1161,1166,1168,1173],{"type":40,"tag":83,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":46,"value":223},{"type":46,"value":1167},": Dev may have broader type abstractions (e.g.\n",{"type":40,"tag":83,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":46,"value":239},{"type":46,"value":1174}," covering both FP8 and GroupedQuantizedTensor).\nMain may simplify to explicit type checks. Restore dev's abstractions.",{"type":40,"tag":66,"props":1176,"children":1178},{"id":1177},"special-handling-data_schedulepy",[1179],{"type":46,"value":1180},"Special Handling: data_schedule.py",{"type":40,"tag":49,"props":1182,"children":1183},{},[1184],{"type":46,"value":1185},"Main and dev have completely different classes in this file:",{"type":40,"tag":201,"props":1187,"children":1188},{},[1189,1209],{"type":40,"tag":77,"props":1190,"children":1191},{},[1192,1194,1200,1202,1208],{"type":46,"value":1193},"Main: ",{"type":40,"tag":83,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":46,"value":1199},"HybridCPDataLoaderWrapper",{"type":46,"value":1201}," (imported by main's ",{"type":40,"tag":83,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":46,"value":1207},"training.py",{"type":46,"value":731},{"type":40,"tag":77,"props":1210,"children":1211},{},[1212,1214,1220,1221,1227,1229,1235,1236,1242,1243,1249,1251,1257],{"type":46,"value":1213},"Dev: ",{"type":40,"tag":83,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":46,"value":1219},"BasePackingScheduler",{"type":46,"value":405},{"type":40,"tag":83,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":46,"value":1226},"DpBalancedScheduler",{"type":46,"value":1228},",\n",{"type":40,"tag":83,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":46,"value":1234},"DefaultDynamicCPScheduler",{"type":46,"value":405},{"type":40,"tag":83,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":46,"value":1241},"wrap_data_iterator",{"type":46,"value":1228},{"type":40,"tag":83,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":46,"value":1248},"get_batch_on_this_rank_for_sequence_packing",{"type":46,"value":1250}," (imported by ",{"type":40,"tag":83,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":46,"value":1256},"pretrain_gpt.py",{"type":46,"value":1258},"\nand tests)",{"type":40,"tag":49,"props":1260,"children":1261},{},[1262,1267,1269,1274,1276,1282,1283,1289,1290,1296],{"type":40,"tag":170,"props":1263,"children":1264},{},[1265],{"type":46,"value":1266},"Do NOT take either version wholesale.",{"type":46,"value":1268}," Keep dev's file and append main's\n",{"type":40,"tag":83,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":46,"value":1199},{"type":46,"value":1275}," class (plus any missing imports like\n",{"type":40,"tag":83,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":46,"value":1281},"BalancedCPScheduler",{"type":46,"value":405},{"type":40,"tag":83,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":46,"value":1288},"Any",{"type":46,"value":405},{"type":40,"tag":83,"props":1291,"children":1293},{"className":1292},[],[1294],{"type":46,"value":1295},"List",{"type":46,"value":1297},") at the end.",{"type":40,"tag":66,"props":1299,"children":1301},{"id":1300},"restore-deleted-files",[1302],{"type":46,"value":1303},"Restore Deleted Files",{"type":40,"tag":49,"props":1305,"children":1306},{},[1307,1309,1315,1317,1323],{"type":46,"value":1308},"Compare ",{"type":40,"tag":83,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":46,"value":1314},"git ls-tree",{"type":46,"value":1316}," between ",{"type":40,"tag":83,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":46,"value":1322},"origin\u002Fmain",{"type":46,"value":1324}," and HEAD to find files in main\nthat are missing from the merged tree. For each:",{"type":40,"tag":201,"props":1326,"children":1327},{},[1328,1354,1372],{"type":40,"tag":77,"props":1329,"children":1330},{},[1331,1336,1338,1344,1346,1352],{"type":40,"tag":170,"props":1332,"children":1333},{},[1334],{"type":46,"value":1335},"Restore",{"type":46,"value":1337}," if main's code imports\u002Freferences it and would break without it\n(e.g. ",{"type":40,"tag":83,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":46,"value":1343},"hybrid_cp_schedule.py",{"type":46,"value":1345}," if ",{"type":40,"tag":83,"props":1347,"children":1349},{"className":1348},[],[1350],{"type":46,"value":1351},"data_schedule.py",{"type":46,"value":1353}," imports from it)",{"type":40,"tag":77,"props":1355,"children":1356},{},[1357,1362,1364,1370],{"type":40,"tag":170,"props":1358,"children":1359},{},[1360],{"type":46,"value":1361},"Do NOT restore",{"type":46,"value":1363}," if dev intentionally deleted it — check\n",{"type":40,"tag":83,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":46,"value":1369},"git log origin\u002Fdev -- \u003Cfile>",{"type":46,"value":1371}," for the deletion commit to understand intent",{"type":40,"tag":77,"props":1373,"children":1374},{},[1375],{"type":46,"value":1376},"When in doubt, check whether any file in the merged tree imports from the\nmissing file. If nothing imports it, skip it.",{"type":40,"tag":66,"props":1378,"children":1380},{"id":1379},"formatting",[1381],{"type":46,"value":1382},"Formatting",{"type":40,"tag":49,"props":1384,"children":1385},{},[1386,1388,1393],{"type":46,"value":1387},"Run on ALL changed Python files (relative to ",{"type":40,"tag":83,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":46,"value":96},{"type":46,"value":1394},"), in this order:",{"type":40,"tag":73,"props":1396,"children":1397},{},[1398,1416,1425,1430],{"type":40,"tag":77,"props":1399,"children":1400},{},[1401,1407,1409,1415],{"type":40,"tag":83,"props":1402,"children":1404},{"className":1403},[],[1405],{"type":46,"value":1406},"black",{"type":46,"value":1408}," (version 24, ",{"type":40,"tag":83,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":46,"value":1414},"--config pyproject.toml",{"type":46,"value":731},{"type":40,"tag":77,"props":1417,"children":1418},{},[1419],{"type":40,"tag":83,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":46,"value":1424},"isort",{"type":40,"tag":77,"props":1426,"children":1427},{},[1428],{"type":46,"value":1429},"Order matters: black first, then isort — reverse order can undo isort's work",{"type":40,"tag":77,"props":1431,"children":1432},{},[1433,1439,1441,1447],{"type":40,"tag":83,"props":1434,"children":1436},{"className":1435},[],[1437],{"type":46,"value":1438},"pylint",{"type":46,"value":1440}," on changed ",{"type":40,"tag":83,"props":1442,"children":1444},{"className":1443},[],[1445],{"type":46,"value":1446},"megatron\u002Fcore\u002F",{"type":46,"value":1448}," files — fix missing-docstring and\nline-too-long violations before pushing",{"type":40,"tag":66,"props":1450,"children":1452},{"id":1451},"pre-push-advisory-checks",[1453],{"type":46,"value":1454},"Pre-push advisory checks",{"type":40,"tag":49,"props":1456,"children":1457},{},[1458,1460,1466],{"type":46,"value":1459},"Before every ",{"type":40,"tag":83,"props":1461,"children":1463},{"className":1462},[],[1464],{"type":46,"value":1465},"git push",{"type":46,"value":1467}," in this workflow (the initial push in Phase 1\nAND every fix-push in Phase 3), run these bash checks as guidance. They\nmust never block the push. Review every finding: fix genuine merge accidents\nand document intentional main removals or formatting\u002Freordering false positives\nin the PR body.",{"type":40,"tag":488,"props":1469,"children":1471},{"className":680,"code":1470,"language":682,"meta":496,"style":496},"set +e\n(\nset -euo pipefail\n\nMERGE_COMMIT=$(git rev-list --min-parents=2 --max-count=1 HEAD || true)\nif [ -n \"$MERGE_COMMIT\" ]; then\n  DEV_REF=\"${MERGE_COMMIT}^1\"\n  MAIN_REF=\"${MERGE_COMMIT}^2\"\nelse\n  DEV_REF=\"origin\u002Fdev\"\n  MAIN_REF=\"origin\u002Fmain\"\nfi\n\n# 1. CODEOWNERS must be identical to dev's.\nif ! git diff --quiet \"$DEV_REF\" HEAD -- .github\u002FCODEOWNERS; then\n  echo \"WARNING: .github\u002FCODEOWNERS differs from dev. Restore with:\"\n  echo \"  git checkout $DEV_REF -- .github\u002FCODEOWNERS\"\nfi\n\n# 2. Dependency-management triple must be identical to dev's.\nfor f in pyproject.toml uv.lock docker\u002FDockerfile.ci.dev; do\n  if ! git diff --quiet \"$DEV_REF\" HEAD -- \"$f\"; then\n    # pyproject.toml is allowed to differ ONLY for git source reconciliation\n    # (new [tool.uv.sources] entries from main). If you intentionally edited\n    # it for that reason, document the reconciliation in the PR body.\n    echo \"WARNING: $f differs from dev\"\n  fi\ndone\n\n# 3. Dev-feature preservation audit.\n#\n# The most common sync regression is silently dropping a dev-only feature\n# that main does not have yet. Pattern:\n#   T0: a feature lands on dev\n#   T1 > T0: the same feature lands on main (possibly reformatted)\n#   The sync runs between T0 and T1. Blindly resolving a conflict in\n#   main's favour drops dev's addition wherever main happened to touch a\n#   nearby line for an unrelated reason.\n#\n# For each file the sync touched (modulo skill-sanctioned overrides and\n# the dependency triple), find every line that satisfies ALL of:\n#   line is on origin\u002Fdev        (dev had it)\n#   line is NOT on origin\u002Fmain   (main never owned it)\n#   line is NOT in the merged tree  (the merge dropped it)\n# Filter out whitespace-only lines and bracket-only lines (they\n# frequently differ for cosmetic reasons).\n#\n# Files in the \"Files to Override from Main\" list (training.py,\n# initialize.py, utils.py, data_samplers.py, layer_wise_optimizer.py)\n# are exempt by skill convention — main may legitimately win there.\n# CODEOWNERS and the dep triple are checked above; skip them here.\n\nINTENTIONAL_OVERRIDE_REGEX='^(megatron\u002Ftraining\u002Ftraining\\.py|megatron\u002Ftraining\u002Finitialize\\.py|megatron\u002Ftraining\u002Futils\\.py|megatron\u002Ftraining\u002Fdatasets\u002Fdata_samplers\\.py|megatron\u002Fcore\u002Foptimizer\u002Flayer_wise_optimizer\\.py)$'\nSKIP_REGEX='^(pyproject\\.toml|uv\\.lock|docker\u002FDockerfile\\.ci\\.dev|\\.github\u002FCODEOWNERS)$'\n\nFINDINGS=0\nfor f in $(git diff --name-only \"$DEV_REF\"..HEAD \\\n            -- '*.py' '*.md' '*.yaml' '*.yml' '*.toml' \\\n               '*.sh' '*.cpp' '*.cu' '*.h' \\\n            | sort -u); do\n  [[ \"$f\" =~ $SKIP_REGEX ]] && continue\n  [[ \"$f\" =~ $INTENTIONAL_OVERRIDE_REGEX ]] && continue\n  git cat-file -e \"HEAD:$f\" 2>\u002Fdev\u002Fnull || continue\n\n  missing=$(comm -23 \\\n              \u003C(git show \"$DEV_REF:$f\"  2>\u002Fdev\u002Fnull | sort -u) \\\n              \u003C(git show \"$MAIN_REF:$f\" 2>\u002Fdev\u002Fnull | sort -u) \\\n            | comm -23 - \u003C(git show \"HEAD:$f\" 2>\u002Fdev\u002Fnull | sort -u) \\\n            | grep -E '[[:alnum:]_]' \\\n            || true)\n\n  if [ -n \"$missing\" ]; then\n    echo \"=== $f ===\"\n    printf '%s\\n' \"$missing\"\n    FINDINGS=$((FINDINGS + $(printf '%s\\n' \"$missing\" | grep -c .)))\n  fi\ndone\n\nif [ \"$FINDINGS\" -gt 0 ]; then\n  echo \"WARNING: $FINDINGS potential dev-only line removal(s) detected. For each:\"\n  echo \"  (a) MAIN INTENTIONALLY REMOVED — find the specific commit in\"\n  echo \"      'git log origin\u002Fmain -- \u003Cfile>' that removed it; document the\"\n  echo \"      SHA in the PR body, then the drop is acceptable.\"\n  echo \"  (b) MERGE ACCIDENT — main never explicitly touched that line.\"\n  echo \"      RESTORE the dev line (Edit\u002FWrite to put it back).\"\n  echo \"Default to (b); only declare (a) with a specific main commit as evidence.\"\n  echo \"This audit is advisory; continue the push after reviewing the findings.\"\nfi\n\necho \"nightly-sync pre-push guidance complete\"\n)\nGUIDANCE_STATUS=$?\nif [ \"$GUIDANCE_STATUS\" -ne 0 ]; then\n  echo \"WARNING: nightly-sync pre-push guidance failed with status $GUIDANCE_STATUS; allowing the push to continue.\"\nfi\nexit 0\n",[1472],{"type":40,"tag":83,"props":1473,"children":1474},{"__ignoreMap":496},[1475,1488,1496,1513,1522,1575,1617,1654,1688,1697,1721,1745,1754,1762,1771,1835,1857,1887,1895,1903,1912,1955,2021,2030,2039,2048,2079,2088,2097,2105,2114,2123,2132,2141,2150,2159,2168,2177,2186,2194,2203,2212,2221,2230,2239,2248,2257,2265,2274,2283,2292,2301,2309,2337,2363,2371,2389,2443,2522,2583,2611,2657,2698,2752,2760,2787,2856,2921,3000,3035,3052,3060,3097,3127,3161,3240,3248,3256,3264,3308,3337,3358,3379,3400,3421,3442,3463,3484,3492,3500,3522,3530,3548,3590,3620,3628],{"type":40,"tag":688,"props":1476,"children":1477},{"class":690,"line":691},[1478,1483],{"type":40,"tag":688,"props":1479,"children":1480},{"style":723},[1481],{"type":46,"value":1482},"set",{"type":40,"tag":688,"props":1484,"children":1485},{"style":701},[1486],{"type":46,"value":1487}," +e\n",{"type":40,"tag":688,"props":1489,"children":1490},{"class":690,"line":750},[1491],{"type":40,"tag":688,"props":1492,"children":1493},{"style":717},[1494],{"type":46,"value":1495},"(\n",{"type":40,"tag":688,"props":1497,"children":1498},{"class":690,"line":779},[1499,1503,1508],{"type":40,"tag":688,"props":1500,"children":1501},{"style":723},[1502],{"type":46,"value":1482},{"type":40,"tag":688,"props":1504,"children":1505},{"style":701},[1506],{"type":46,"value":1507}," -euo",{"type":40,"tag":688,"props":1509,"children":1510},{"style":701},[1511],{"type":46,"value":1512}," pipefail\n",{"type":40,"tag":688,"props":1514,"children":1515},{"class":690,"line":793},[1516],{"type":40,"tag":688,"props":1517,"children":1519},{"emptyLinePlaceholder":1518},true,[1520],{"type":46,"value":1521},"\n",{"type":40,"tag":688,"props":1523,"children":1524},{"class":690,"line":803},[1525,1530,1535,1540,1545,1550,1555,1560,1565,1570],{"type":40,"tag":688,"props":1526,"children":1527},{"style":744},[1528],{"type":46,"value":1529},"MERGE_COMMIT",{"type":40,"tag":688,"props":1531,"children":1532},{"style":717},[1533],{"type":46,"value":1534},"=$(",{"type":40,"tag":688,"props":1536,"children":1537},{"style":695},[1538],{"type":46,"value":1539},"git",{"type":40,"tag":688,"props":1541,"children":1542},{"style":701},[1543],{"type":46,"value":1544}," rev-list",{"type":40,"tag":688,"props":1546,"children":1547},{"style":701},[1548],{"type":46,"value":1549}," --min-parents=2",{"type":40,"tag":688,"props":1551,"children":1552},{"style":701},[1553],{"type":46,"value":1554}," --max-count=1",{"type":40,"tag":688,"props":1556,"children":1557},{"style":701},[1558],{"type":46,"value":1559}," HEAD",{"type":40,"tag":688,"props":1561,"children":1562},{"style":717},[1563],{"type":46,"value":1564}," ||",{"type":40,"tag":688,"props":1566,"children":1567},{"style":723},[1568],{"type":46,"value":1569}," true",{"type":40,"tag":688,"props":1571,"children":1572},{"style":717},[1573],{"type":46,"value":1574},")\n",{"type":40,"tag":688,"props":1576,"children":1577},{"class":690,"line":847},[1578,1584,1589,1594,1598,1603,1607,1612],{"type":40,"tag":688,"props":1579,"children":1581},{"style":1580},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1582],{"type":46,"value":1583},"if",{"type":40,"tag":688,"props":1585,"children":1586},{"style":717},[1587],{"type":46,"value":1588}," [",{"type":40,"tag":688,"props":1590,"children":1591},{"style":717},[1592],{"type":46,"value":1593}," -n",{"type":40,"tag":688,"props":1595,"children":1596},{"style":717},[1597],{"type":46,"value":766},{"type":40,"tag":688,"props":1599,"children":1600},{"style":744},[1601],{"type":46,"value":1602},"$MERGE_COMMIT",{"type":40,"tag":688,"props":1604,"children":1605},{"style":717},[1606],{"type":46,"value":1081},{"type":40,"tag":688,"props":1608,"children":1609},{"style":717},[1610],{"type":46,"value":1611}," ];",{"type":40,"tag":688,"props":1613,"children":1614},{"style":1580},[1615],{"type":46,"value":1616}," then\n",{"type":40,"tag":688,"props":1618,"children":1620},{"class":690,"line":1619},7,[1621,1626,1631,1636,1640,1645,1650],{"type":40,"tag":688,"props":1622,"children":1623},{"style":744},[1624],{"type":46,"value":1625},"  DEV_REF",{"type":40,"tag":688,"props":1627,"children":1628},{"style":717},[1629],{"type":46,"value":1630},"=",{"type":40,"tag":688,"props":1632,"children":1633},{"style":717},[1634],{"type":46,"value":1635},"\"${",{"type":40,"tag":688,"props":1637,"children":1638},{"style":744},[1639],{"type":46,"value":1529},{"type":40,"tag":688,"props":1641,"children":1642},{"style":717},[1643],{"type":46,"value":1644},"}",{"type":40,"tag":688,"props":1646,"children":1647},{"style":701},[1648],{"type":46,"value":1649},"^1",{"type":40,"tag":688,"props":1651,"children":1652},{"style":717},[1653],{"type":46,"value":790},{"type":40,"tag":688,"props":1655,"children":1657},{"class":690,"line":1656},8,[1658,1663,1667,1671,1675,1679,1684],{"type":40,"tag":688,"props":1659,"children":1660},{"style":744},[1661],{"type":46,"value":1662},"  MAIN_REF",{"type":40,"tag":688,"props":1664,"children":1665},{"style":717},[1666],{"type":46,"value":1630},{"type":40,"tag":688,"props":1668,"children":1669},{"style":717},[1670],{"type":46,"value":1635},{"type":40,"tag":688,"props":1672,"children":1673},{"style":744},[1674],{"type":46,"value":1529},{"type":40,"tag":688,"props":1676,"children":1677},{"style":717},[1678],{"type":46,"value":1644},{"type":40,"tag":688,"props":1680,"children":1681},{"style":701},[1682],{"type":46,"value":1683},"^2",{"type":40,"tag":688,"props":1685,"children":1686},{"style":717},[1687],{"type":46,"value":790},{"type":40,"tag":688,"props":1689,"children":1691},{"class":690,"line":1690},9,[1692],{"type":40,"tag":688,"props":1693,"children":1694},{"style":1580},[1695],{"type":46,"value":1696},"else\n",{"type":40,"tag":688,"props":1698,"children":1700},{"class":690,"line":1699},10,[1701,1705,1709,1713,1717],{"type":40,"tag":688,"props":1702,"children":1703},{"style":744},[1704],{"type":46,"value":1625},{"type":40,"tag":688,"props":1706,"children":1707},{"style":717},[1708],{"type":46,"value":1630},{"type":40,"tag":688,"props":1710,"children":1711},{"style":717},[1712],{"type":46,"value":1081},{"type":40,"tag":688,"props":1714,"children":1715},{"style":701},[1716],{"type":46,"value":96},{"type":40,"tag":688,"props":1718,"children":1719},{"style":717},[1720],{"type":46,"value":790},{"type":40,"tag":688,"props":1722,"children":1724},{"class":690,"line":1723},11,[1725,1729,1733,1737,1741],{"type":40,"tag":688,"props":1726,"children":1727},{"style":744},[1728],{"type":46,"value":1662},{"type":40,"tag":688,"props":1730,"children":1731},{"style":717},[1732],{"type":46,"value":1630},{"type":40,"tag":688,"props":1734,"children":1735},{"style":717},[1736],{"type":46,"value":1081},{"type":40,"tag":688,"props":1738,"children":1739},{"style":701},[1740],{"type":46,"value":1322},{"type":40,"tag":688,"props":1742,"children":1743},{"style":717},[1744],{"type":46,"value":790},{"type":40,"tag":688,"props":1746,"children":1748},{"class":690,"line":1747},12,[1749],{"type":40,"tag":688,"props":1750,"children":1751},{"style":1580},[1752],{"type":46,"value":1753},"fi\n",{"type":40,"tag":688,"props":1755,"children":1757},{"class":690,"line":1756},13,[1758],{"type":40,"tag":688,"props":1759,"children":1760},{"emptyLinePlaceholder":1518},[1761],{"type":46,"value":1521},{"type":40,"tag":688,"props":1763,"children":1765},{"class":690,"line":1764},14,[1766],{"type":40,"tag":688,"props":1767,"children":1768},{"style":797},[1769],{"type":46,"value":1770},"# 1. CODEOWNERS must be identical to dev's.\n",{"type":40,"tag":688,"props":1772,"children":1774},{"class":690,"line":1773},15,[1775,1779,1784,1789,1794,1799,1803,1808,1812,1816,1821,1826,1831],{"type":40,"tag":688,"props":1776,"children":1777},{"style":1580},[1778],{"type":46,"value":1583},{"type":40,"tag":688,"props":1780,"children":1781},{"style":717},[1782],{"type":46,"value":1783}," !",{"type":40,"tag":688,"props":1785,"children":1786},{"style":695},[1787],{"type":46,"value":1788}," git",{"type":40,"tag":688,"props":1790,"children":1791},{"style":701},[1792],{"type":46,"value":1793}," diff",{"type":40,"tag":688,"props":1795,"children":1796},{"style":701},[1797],{"type":46,"value":1798}," --quiet",{"type":40,"tag":688,"props":1800,"children":1801},{"style":717},[1802],{"type":46,"value":766},{"type":40,"tag":688,"props":1804,"children":1805},{"style":744},[1806],{"type":46,"value":1807},"$DEV_REF",{"type":40,"tag":688,"props":1809,"children":1810},{"style":717},[1811],{"type":46,"value":1081},{"type":40,"tag":688,"props":1813,"children":1814},{"style":701},[1815],{"type":46,"value":1559},{"type":40,"tag":688,"props":1817,"children":1818},{"style":701},[1819],{"type":46,"value":1820}," --",{"type":40,"tag":688,"props":1822,"children":1823},{"style":701},[1824],{"type":46,"value":1825}," .github\u002FCODEOWNERS",{"type":40,"tag":688,"props":1827,"children":1828},{"style":717},[1829],{"type":46,"value":1830},";",{"type":40,"tag":688,"props":1832,"children":1833},{"style":1580},[1834],{"type":46,"value":1616},{"type":40,"tag":688,"props":1836,"children":1838},{"class":690,"line":1837},16,[1839,1844,1848,1853],{"type":40,"tag":688,"props":1840,"children":1841},{"style":723},[1842],{"type":46,"value":1843},"  echo",{"type":40,"tag":688,"props":1845,"children":1846},{"style":717},[1847],{"type":46,"value":766},{"type":40,"tag":688,"props":1849,"children":1850},{"style":701},[1851],{"type":46,"value":1852},"WARNING: .github\u002FCODEOWNERS differs from dev. Restore with:",{"type":40,"tag":688,"props":1854,"children":1855},{"style":717},[1856],{"type":46,"value":790},{"type":40,"tag":688,"props":1858,"children":1860},{"class":690,"line":1859},17,[1861,1865,1869,1874,1878,1883],{"type":40,"tag":688,"props":1862,"children":1863},{"style":723},[1864],{"type":46,"value":1843},{"type":40,"tag":688,"props":1866,"children":1867},{"style":717},[1868],{"type":46,"value":766},{"type":40,"tag":688,"props":1870,"children":1871},{"style":701},[1872],{"type":46,"value":1873},"  git checkout ",{"type":40,"tag":688,"props":1875,"children":1876},{"style":744},[1877],{"type":46,"value":1807},{"type":40,"tag":688,"props":1879,"children":1880},{"style":701},[1881],{"type":46,"value":1882}," -- .github\u002FCODEOWNERS",{"type":40,"tag":688,"props":1884,"children":1885},{"style":717},[1886],{"type":46,"value":790},{"type":40,"tag":688,"props":1888,"children":1890},{"class":690,"line":1889},18,[1891],{"type":40,"tag":688,"props":1892,"children":1893},{"style":1580},[1894],{"type":46,"value":1753},{"type":40,"tag":688,"props":1896,"children":1898},{"class":690,"line":1897},19,[1899],{"type":40,"tag":688,"props":1900,"children":1901},{"emptyLinePlaceholder":1518},[1902],{"type":46,"value":1521},{"type":40,"tag":688,"props":1904,"children":1906},{"class":690,"line":1905},20,[1907],{"type":40,"tag":688,"props":1908,"children":1909},{"style":797},[1910],{"type":46,"value":1911},"# 2. Dependency-management triple must be identical to dev's.\n",{"type":40,"tag":688,"props":1913,"children":1915},{"class":690,"line":1914},21,[1916,1921,1926,1931,1936,1941,1946,1950],{"type":40,"tag":688,"props":1917,"children":1918},{"style":1580},[1919],{"type":46,"value":1920},"for",{"type":40,"tag":688,"props":1922,"children":1923},{"style":744},[1924],{"type":46,"value":1925}," f ",{"type":40,"tag":688,"props":1927,"children":1928},{"style":1580},[1929],{"type":46,"value":1930},"in",{"type":40,"tag":688,"props":1932,"children":1933},{"style":701},[1934],{"type":46,"value":1935}," pyproject.toml",{"type":40,"tag":688,"props":1937,"children":1938},{"style":701},[1939],{"type":46,"value":1940}," uv.lock",{"type":40,"tag":688,"props":1942,"children":1943},{"style":701},[1944],{"type":46,"value":1945}," docker\u002FDockerfile.ci.dev",{"type":40,"tag":688,"props":1947,"children":1948},{"style":717},[1949],{"type":46,"value":1830},{"type":40,"tag":688,"props":1951,"children":1952},{"style":1580},[1953],{"type":46,"value":1954}," do\n",{"type":40,"tag":688,"props":1956,"children":1958},{"class":690,"line":1957},22,[1959,1964,1968,1972,1976,1980,1984,1988,1992,1996,2000,2004,2009,2013,2017],{"type":40,"tag":688,"props":1960,"children":1961},{"style":1580},[1962],{"type":46,"value":1963},"  if",{"type":40,"tag":688,"props":1965,"children":1966},{"style":717},[1967],{"type":46,"value":1783},{"type":40,"tag":688,"props":1969,"children":1970},{"style":695},[1971],{"type":46,"value":1788},{"type":40,"tag":688,"props":1973,"children":1974},{"style":701},[1975],{"type":46,"value":1793},{"type":40,"tag":688,"props":1977,"children":1978},{"style":701},[1979],{"type":46,"value":1798},{"type":40,"tag":688,"props":1981,"children":1982},{"style":717},[1983],{"type":46,"value":766},{"type":40,"tag":688,"props":1985,"children":1986},{"style":744},[1987],{"type":46,"value":1807},{"type":40,"tag":688,"props":1989,"children":1990},{"style":717},[1991],{"type":46,"value":1081},{"type":40,"tag":688,"props":1993,"children":1994},{"style":701},[1995],{"type":46,"value":1559},{"type":40,"tag":688,"props":1997,"children":1998},{"style":701},[1999],{"type":46,"value":1820},{"type":40,"tag":688,"props":2001,"children":2002},{"style":717},[2003],{"type":46,"value":766},{"type":40,"tag":688,"props":2005,"children":2006},{"style":744},[2007],{"type":46,"value":2008},"$f",{"type":40,"tag":688,"props":2010,"children":2011},{"style":717},[2012],{"type":46,"value":1081},{"type":40,"tag":688,"props":2014,"children":2015},{"style":717},[2016],{"type":46,"value":1830},{"type":40,"tag":688,"props":2018,"children":2019},{"style":1580},[2020],{"type":46,"value":1616},{"type":40,"tag":688,"props":2022,"children":2024},{"class":690,"line":2023},23,[2025],{"type":40,"tag":688,"props":2026,"children":2027},{"style":797},[2028],{"type":46,"value":2029},"    # pyproject.toml is allowed to differ ONLY for git source reconciliation\n",{"type":40,"tag":688,"props":2031,"children":2033},{"class":690,"line":2032},24,[2034],{"type":40,"tag":688,"props":2035,"children":2036},{"style":797},[2037],{"type":46,"value":2038},"    # (new [tool.uv.sources] entries from main). If you intentionally edited\n",{"type":40,"tag":688,"props":2040,"children":2042},{"class":690,"line":2041},25,[2043],{"type":40,"tag":688,"props":2044,"children":2045},{"style":797},[2046],{"type":46,"value":2047},"    # it for that reason, document the reconciliation in the PR body.\n",{"type":40,"tag":688,"props":2049,"children":2051},{"class":690,"line":2050},26,[2052,2057,2061,2066,2070,2075],{"type":40,"tag":688,"props":2053,"children":2054},{"style":723},[2055],{"type":46,"value":2056},"    echo",{"type":40,"tag":688,"props":2058,"children":2059},{"style":717},[2060],{"type":46,"value":766},{"type":40,"tag":688,"props":2062,"children":2063},{"style":701},[2064],{"type":46,"value":2065},"WARNING: ",{"type":40,"tag":688,"props":2067,"children":2068},{"style":744},[2069],{"type":46,"value":2008},{"type":40,"tag":688,"props":2071,"children":2072},{"style":701},[2073],{"type":46,"value":2074}," differs from dev",{"type":40,"tag":688,"props":2076,"children":2077},{"style":717},[2078],{"type":46,"value":790},{"type":40,"tag":688,"props":2080,"children":2082},{"class":690,"line":2081},27,[2083],{"type":40,"tag":688,"props":2084,"children":2085},{"style":1580},[2086],{"type":46,"value":2087},"  fi\n",{"type":40,"tag":688,"props":2089,"children":2091},{"class":690,"line":2090},28,[2092],{"type":40,"tag":688,"props":2093,"children":2094},{"style":1580},[2095],{"type":46,"value":2096},"done\n",{"type":40,"tag":688,"props":2098,"children":2100},{"class":690,"line":2099},29,[2101],{"type":40,"tag":688,"props":2102,"children":2103},{"emptyLinePlaceholder":1518},[2104],{"type":46,"value":1521},{"type":40,"tag":688,"props":2106,"children":2108},{"class":690,"line":2107},30,[2109],{"type":40,"tag":688,"props":2110,"children":2111},{"style":797},[2112],{"type":46,"value":2113},"# 3. Dev-feature preservation audit.\n",{"type":40,"tag":688,"props":2115,"children":2117},{"class":690,"line":2116},31,[2118],{"type":40,"tag":688,"props":2119,"children":2120},{"style":797},[2121],{"type":46,"value":2122},"#\n",{"type":40,"tag":688,"props":2124,"children":2126},{"class":690,"line":2125},32,[2127],{"type":40,"tag":688,"props":2128,"children":2129},{"style":797},[2130],{"type":46,"value":2131},"# The most common sync regression is silently dropping a dev-only feature\n",{"type":40,"tag":688,"props":2133,"children":2135},{"class":690,"line":2134},33,[2136],{"type":40,"tag":688,"props":2137,"children":2138},{"style":797},[2139],{"type":46,"value":2140},"# that main does not have yet. Pattern:\n",{"type":40,"tag":688,"props":2142,"children":2144},{"class":690,"line":2143},34,[2145],{"type":40,"tag":688,"props":2146,"children":2147},{"style":797},[2148],{"type":46,"value":2149},"#   T0: a feature lands on dev\n",{"type":40,"tag":688,"props":2151,"children":2153},{"class":690,"line":2152},35,[2154],{"type":40,"tag":688,"props":2155,"children":2156},{"style":797},[2157],{"type":46,"value":2158},"#   T1 > T0: the same feature lands on main (possibly reformatted)\n",{"type":40,"tag":688,"props":2160,"children":2162},{"class":690,"line":2161},36,[2163],{"type":40,"tag":688,"props":2164,"children":2165},{"style":797},[2166],{"type":46,"value":2167},"#   The sync runs between T0 and T1. Blindly resolving a conflict in\n",{"type":40,"tag":688,"props":2169,"children":2171},{"class":690,"line":2170},37,[2172],{"type":40,"tag":688,"props":2173,"children":2174},{"style":797},[2175],{"type":46,"value":2176},"#   main's favour drops dev's addition wherever main happened to touch a\n",{"type":40,"tag":688,"props":2178,"children":2180},{"class":690,"line":2179},38,[2181],{"type":40,"tag":688,"props":2182,"children":2183},{"style":797},[2184],{"type":46,"value":2185},"#   nearby line for an unrelated reason.\n",{"type":40,"tag":688,"props":2187,"children":2189},{"class":690,"line":2188},39,[2190],{"type":40,"tag":688,"props":2191,"children":2192},{"style":797},[2193],{"type":46,"value":2122},{"type":40,"tag":688,"props":2195,"children":2197},{"class":690,"line":2196},40,[2198],{"type":40,"tag":688,"props":2199,"children":2200},{"style":797},[2201],{"type":46,"value":2202},"# For each file the sync touched (modulo skill-sanctioned overrides and\n",{"type":40,"tag":688,"props":2204,"children":2206},{"class":690,"line":2205},41,[2207],{"type":40,"tag":688,"props":2208,"children":2209},{"style":797},[2210],{"type":46,"value":2211},"# the dependency triple), find every line that satisfies ALL of:\n",{"type":40,"tag":688,"props":2213,"children":2215},{"class":690,"line":2214},42,[2216],{"type":40,"tag":688,"props":2217,"children":2218},{"style":797},[2219],{"type":46,"value":2220},"#   line is on origin\u002Fdev        (dev had it)\n",{"type":40,"tag":688,"props":2222,"children":2224},{"class":690,"line":2223},43,[2225],{"type":40,"tag":688,"props":2226,"children":2227},{"style":797},[2228],{"type":46,"value":2229},"#   line is NOT on origin\u002Fmain   (main never owned it)\n",{"type":40,"tag":688,"props":2231,"children":2233},{"class":690,"line":2232},44,[2234],{"type":40,"tag":688,"props":2235,"children":2236},{"style":797},[2237],{"type":46,"value":2238},"#   line is NOT in the merged tree  (the merge dropped it)\n",{"type":40,"tag":688,"props":2240,"children":2242},{"class":690,"line":2241},45,[2243],{"type":40,"tag":688,"props":2244,"children":2245},{"style":797},[2246],{"type":46,"value":2247},"# Filter out whitespace-only lines and bracket-only lines (they\n",{"type":40,"tag":688,"props":2249,"children":2251},{"class":690,"line":2250},46,[2252],{"type":40,"tag":688,"props":2253,"children":2254},{"style":797},[2255],{"type":46,"value":2256},"# frequently differ for cosmetic reasons).\n",{"type":40,"tag":688,"props":2258,"children":2260},{"class":690,"line":2259},47,[2261],{"type":40,"tag":688,"props":2262,"children":2263},{"style":797},[2264],{"type":46,"value":2122},{"type":40,"tag":688,"props":2266,"children":2268},{"class":690,"line":2267},48,[2269],{"type":40,"tag":688,"props":2270,"children":2271},{"style":797},[2272],{"type":46,"value":2273},"# Files in the \"Files to Override from Main\" list (training.py,\n",{"type":40,"tag":688,"props":2275,"children":2277},{"class":690,"line":2276},49,[2278],{"type":40,"tag":688,"props":2279,"children":2280},{"style":797},[2281],{"type":46,"value":2282},"# initialize.py, utils.py, data_samplers.py, layer_wise_optimizer.py)\n",{"type":40,"tag":688,"props":2284,"children":2286},{"class":690,"line":2285},50,[2287],{"type":40,"tag":688,"props":2288,"children":2289},{"style":797},[2290],{"type":46,"value":2291},"# are exempt by skill convention — main may legitimately win there.\n",{"type":40,"tag":688,"props":2293,"children":2295},{"class":690,"line":2294},51,[2296],{"type":40,"tag":688,"props":2297,"children":2298},{"style":797},[2299],{"type":46,"value":2300},"# CODEOWNERS and the dep triple are checked above; skip them here.\n",{"type":40,"tag":688,"props":2302,"children":2304},{"class":690,"line":2303},52,[2305],{"type":40,"tag":688,"props":2306,"children":2307},{"emptyLinePlaceholder":1518},[2308],{"type":46,"value":1521},{"type":40,"tag":688,"props":2310,"children":2312},{"class":690,"line":2311},53,[2313,2318,2322,2327,2332],{"type":40,"tag":688,"props":2314,"children":2315},{"style":744},[2316],{"type":46,"value":2317},"INTENTIONAL_OVERRIDE_REGEX",{"type":40,"tag":688,"props":2319,"children":2320},{"style":717},[2321],{"type":46,"value":1630},{"type":40,"tag":688,"props":2323,"children":2324},{"style":717},[2325],{"type":46,"value":2326},"'",{"type":40,"tag":688,"props":2328,"children":2329},{"style":701},[2330],{"type":46,"value":2331},"^(megatron\u002Ftraining\u002Ftraining\\.py|megatron\u002Ftraining\u002Finitialize\\.py|megatron\u002Ftraining\u002Futils\\.py|megatron\u002Ftraining\u002Fdatasets\u002Fdata_samplers\\.py|megatron\u002Fcore\u002Foptimizer\u002Flayer_wise_optimizer\\.py)$",{"type":40,"tag":688,"props":2333,"children":2334},{"style":717},[2335],{"type":46,"value":2336},"'\n",{"type":40,"tag":688,"props":2338,"children":2340},{"class":690,"line":2339},54,[2341,2346,2350,2354,2359],{"type":40,"tag":688,"props":2342,"children":2343},{"style":744},[2344],{"type":46,"value":2345},"SKIP_REGEX",{"type":40,"tag":688,"props":2347,"children":2348},{"style":717},[2349],{"type":46,"value":1630},{"type":40,"tag":688,"props":2351,"children":2352},{"style":717},[2353],{"type":46,"value":2326},{"type":40,"tag":688,"props":2355,"children":2356},{"style":701},[2357],{"type":46,"value":2358},"^(pyproject\\.toml|uv\\.lock|docker\u002FDockerfile\\.ci\\.dev|\\.github\u002FCODEOWNERS)$",{"type":40,"tag":688,"props":2360,"children":2361},{"style":717},[2362],{"type":46,"value":2336},{"type":40,"tag":688,"props":2364,"children":2366},{"class":690,"line":2365},55,[2367],{"type":40,"tag":688,"props":2368,"children":2369},{"emptyLinePlaceholder":1518},[2370],{"type":46,"value":1521},{"type":40,"tag":688,"props":2372,"children":2374},{"class":690,"line":2373},56,[2375,2380,2384],{"type":40,"tag":688,"props":2376,"children":2377},{"style":744},[2378],{"type":46,"value":2379},"FINDINGS",{"type":40,"tag":688,"props":2381,"children":2382},{"style":717},[2383],{"type":46,"value":1630},{"type":40,"tag":688,"props":2385,"children":2386},{"style":701},[2387],{"type":46,"value":2388},"0\n",{"type":40,"tag":688,"props":2390,"children":2392},{"class":690,"line":2391},57,[2393,2397,2401,2405,2409,2413,2417,2422,2426,2430,2434,2439],{"type":40,"tag":688,"props":2394,"children":2395},{"style":1580},[2396],{"type":46,"value":1920},{"type":40,"tag":688,"props":2398,"children":2399},{"style":744},[2400],{"type":46,"value":1925},{"type":40,"tag":688,"props":2402,"children":2403},{"style":1580},[2404],{"type":46,"value":1930},{"type":40,"tag":688,"props":2406,"children":2407},{"style":717},[2408],{"type":46,"value":720},{"type":40,"tag":688,"props":2410,"children":2411},{"style":695},[2412],{"type":46,"value":1539},{"type":40,"tag":688,"props":2414,"children":2415},{"style":701},[2416],{"type":46,"value":1793},{"type":40,"tag":688,"props":2418,"children":2419},{"style":701},[2420],{"type":46,"value":2421}," --name-only",{"type":40,"tag":688,"props":2423,"children":2424},{"style":717},[2425],{"type":46,"value":766},{"type":40,"tag":688,"props":2427,"children":2428},{"style":744},[2429],{"type":46,"value":1807},{"type":40,"tag":688,"props":2431,"children":2432},{"style":717},[2433],{"type":46,"value":1081},{"type":40,"tag":688,"props":2435,"children":2436},{"style":701},[2437],{"type":46,"value":2438},"..HEAD",{"type":40,"tag":688,"props":2440,"children":2441},{"style":744},[2442],{"type":46,"value":747},{"type":40,"tag":688,"props":2444,"children":2446},{"class":690,"line":2445},58,[2447,2452,2457,2462,2466,2470,2475,2479,2483,2488,2492,2496,2501,2505,2509,2514,2518],{"type":40,"tag":688,"props":2448,"children":2449},{"style":701},[2450],{"type":46,"value":2451},"            --",{"type":40,"tag":688,"props":2453,"children":2454},{"style":717},[2455],{"type":46,"value":2456}," '",{"type":40,"tag":688,"props":2458,"children":2459},{"style":701},[2460],{"type":46,"value":2461},"*.py",{"type":40,"tag":688,"props":2463,"children":2464},{"style":717},[2465],{"type":46,"value":2326},{"type":40,"tag":688,"props":2467,"children":2468},{"style":717},[2469],{"type":46,"value":2456},{"type":40,"tag":688,"props":2471,"children":2472},{"style":701},[2473],{"type":46,"value":2474},"*.md",{"type":40,"tag":688,"props":2476,"children":2477},{"style":717},[2478],{"type":46,"value":2326},{"type":40,"tag":688,"props":2480,"children":2481},{"style":717},[2482],{"type":46,"value":2456},{"type":40,"tag":688,"props":2484,"children":2485},{"style":701},[2486],{"type":46,"value":2487},"*.yaml",{"type":40,"tag":688,"props":2489,"children":2490},{"style":717},[2491],{"type":46,"value":2326},{"type":40,"tag":688,"props":2493,"children":2494},{"style":717},[2495],{"type":46,"value":2456},{"type":40,"tag":688,"props":2497,"children":2498},{"style":701},[2499],{"type":46,"value":2500},"*.yml",{"type":40,"tag":688,"props":2502,"children":2503},{"style":717},[2504],{"type":46,"value":2326},{"type":40,"tag":688,"props":2506,"children":2507},{"style":717},[2508],{"type":46,"value":2456},{"type":40,"tag":688,"props":2510,"children":2511},{"style":701},[2512],{"type":46,"value":2513},"*.toml",{"type":40,"tag":688,"props":2515,"children":2516},{"style":717},[2517],{"type":46,"value":2326},{"type":40,"tag":688,"props":2519,"children":2520},{"style":744},[2521],{"type":46,"value":747},{"type":40,"tag":688,"props":2523,"children":2525},{"class":690,"line":2524},59,[2526,2531,2536,2540,2544,2549,2553,2557,2562,2566,2570,2575,2579],{"type":40,"tag":688,"props":2527,"children":2528},{"style":717},[2529],{"type":46,"value":2530},"               '",{"type":40,"tag":688,"props":2532,"children":2533},{"style":701},[2534],{"type":46,"value":2535},"*.sh",{"type":40,"tag":688,"props":2537,"children":2538},{"style":717},[2539],{"type":46,"value":2326},{"type":40,"tag":688,"props":2541,"children":2542},{"style":717},[2543],{"type":46,"value":2456},{"type":40,"tag":688,"props":2545,"children":2546},{"style":701},[2547],{"type":46,"value":2548},"*.cpp",{"type":40,"tag":688,"props":2550,"children":2551},{"style":717},[2552],{"type":46,"value":2326},{"type":40,"tag":688,"props":2554,"children":2555},{"style":717},[2556],{"type":46,"value":2456},{"type":40,"tag":688,"props":2558,"children":2559},{"style":701},[2560],{"type":46,"value":2561},"*.cu",{"type":40,"tag":688,"props":2563,"children":2564},{"style":717},[2565],{"type":46,"value":2326},{"type":40,"tag":688,"props":2567,"children":2568},{"style":717},[2569],{"type":46,"value":2456},{"type":40,"tag":688,"props":2571,"children":2572},{"style":701},[2573],{"type":46,"value":2574},"*.h",{"type":40,"tag":688,"props":2576,"children":2577},{"style":717},[2578],{"type":46,"value":2326},{"type":40,"tag":688,"props":2580,"children":2581},{"style":744},[2582],{"type":46,"value":747},{"type":40,"tag":688,"props":2584,"children":2586},{"class":690,"line":2585},60,[2587,2592,2597,2602,2607],{"type":40,"tag":688,"props":2588,"children":2589},{"style":717},[2590],{"type":46,"value":2591},"            |",{"type":40,"tag":688,"props":2593,"children":2594},{"style":695},[2595],{"type":46,"value":2596}," sort",{"type":40,"tag":688,"props":2598,"children":2599},{"style":701},[2600],{"type":46,"value":2601}," -u",{"type":40,"tag":688,"props":2603,"children":2604},{"style":717},[2605],{"type":46,"value":2606},");",{"type":40,"tag":688,"props":2608,"children":2609},{"style":1580},[2610],{"type":46,"value":1954},{"type":40,"tag":688,"props":2612,"children":2614},{"class":690,"line":2613},61,[2615,2620,2624,2628,2632,2637,2642,2647,2652],{"type":40,"tag":688,"props":2616,"children":2617},{"style":717},[2618],{"type":46,"value":2619},"  [[",{"type":40,"tag":688,"props":2621,"children":2622},{"style":717},[2623],{"type":46,"value":766},{"type":40,"tag":688,"props":2625,"children":2626},{"style":744},[2627],{"type":46,"value":2008},{"type":40,"tag":688,"props":2629,"children":2630},{"style":717},[2631],{"type":46,"value":1081},{"type":40,"tag":688,"props":2633,"children":2634},{"style":717},[2635],{"type":46,"value":2636}," =~",{"type":40,"tag":688,"props":2638,"children":2639},{"style":744},[2640],{"type":46,"value":2641}," $SKIP_REGEX ",{"type":40,"tag":688,"props":2643,"children":2644},{"style":717},[2645],{"type":46,"value":2646},"]]",{"type":40,"tag":688,"props":2648,"children":2649},{"style":717},[2650],{"type":46,"value":2651}," &&",{"type":40,"tag":688,"props":2653,"children":2654},{"style":1580},[2655],{"type":46,"value":2656}," continue\n",{"type":40,"tag":688,"props":2658,"children":2660},{"class":690,"line":2659},62,[2661,2665,2669,2673,2677,2681,2686,2690,2694],{"type":40,"tag":688,"props":2662,"children":2663},{"style":717},[2664],{"type":46,"value":2619},{"type":40,"tag":688,"props":2666,"children":2667},{"style":717},[2668],{"type":46,"value":766},{"type":40,"tag":688,"props":2670,"children":2671},{"style":744},[2672],{"type":46,"value":2008},{"type":40,"tag":688,"props":2674,"children":2675},{"style":717},[2676],{"type":46,"value":1081},{"type":40,"tag":688,"props":2678,"children":2679},{"style":717},[2680],{"type":46,"value":2636},{"type":40,"tag":688,"props":2682,"children":2683},{"style":744},[2684],{"type":46,"value":2685}," $INTENTIONAL_OVERRIDE_REGEX ",{"type":40,"tag":688,"props":2687,"children":2688},{"style":717},[2689],{"type":46,"value":2646},{"type":40,"tag":688,"props":2691,"children":2692},{"style":717},[2693],{"type":46,"value":2651},{"type":40,"tag":688,"props":2695,"children":2696},{"style":1580},[2697],{"type":46,"value":2656},{"type":40,"tag":688,"props":2699,"children":2701},{"class":690,"line":2700},63,[2702,2707,2712,2717,2721,2726,2730,2734,2739,2744,2748],{"type":40,"tag":688,"props":2703,"children":2704},{"style":695},[2705],{"type":46,"value":2706},"  git",{"type":40,"tag":688,"props":2708,"children":2709},{"style":701},[2710],{"type":46,"value":2711}," cat-file",{"type":40,"tag":688,"props":2713,"children":2714},{"style":701},[2715],{"type":46,"value":2716}," -e",{"type":40,"tag":688,"props":2718,"children":2719},{"style":717},[2720],{"type":46,"value":766},{"type":40,"tag":688,"props":2722,"children":2723},{"style":701},[2724],{"type":46,"value":2725},"HEAD:",{"type":40,"tag":688,"props":2727,"children":2728},{"style":744},[2729],{"type":46,"value":2008},{"type":40,"tag":688,"props":2731,"children":2732},{"style":717},[2733],{"type":46,"value":1081},{"type":40,"tag":688,"props":2735,"children":2736},{"style":717},[2737],{"type":46,"value":2738}," 2>",{"type":40,"tag":688,"props":2740,"children":2741},{"style":701},[2742],{"type":46,"value":2743},"\u002Fdev\u002Fnull",{"type":40,"tag":688,"props":2745,"children":2746},{"style":717},[2747],{"type":46,"value":1564},{"type":40,"tag":688,"props":2749,"children":2750},{"style":1580},[2751],{"type":46,"value":2656},{"type":40,"tag":688,"props":2753,"children":2755},{"class":690,"line":2754},64,[2756],{"type":40,"tag":688,"props":2757,"children":2758},{"emptyLinePlaceholder":1518},[2759],{"type":46,"value":1521},{"type":40,"tag":688,"props":2761,"children":2763},{"class":690,"line":2762},65,[2764,2769,2773,2778,2783],{"type":40,"tag":688,"props":2765,"children":2766},{"style":744},[2767],{"type":46,"value":2768},"  missing",{"type":40,"tag":688,"props":2770,"children":2771},{"style":717},[2772],{"type":46,"value":1534},{"type":40,"tag":688,"props":2774,"children":2775},{"style":695},[2776],{"type":46,"value":2777},"comm",{"type":40,"tag":688,"props":2779,"children":2780},{"style":701},[2781],{"type":46,"value":2782}," -23",{"type":40,"tag":688,"props":2784,"children":2785},{"style":744},[2786],{"type":46,"value":747},{"type":40,"tag":688,"props":2788,"children":2790},{"class":690,"line":2789},66,[2791,2796,2800,2805,2809,2813,2817,2821,2825,2830,2835,2840,2844,2848,2852],{"type":40,"tag":688,"props":2792,"children":2793},{"style":717},[2794],{"type":46,"value":2795},"              \u003C(",{"type":40,"tag":688,"props":2797,"children":2798},{"style":695},[2799],{"type":46,"value":1539},{"type":40,"tag":688,"props":2801,"children":2802},{"style":701},[2803],{"type":46,"value":2804}," show ",{"type":40,"tag":688,"props":2806,"children":2807},{"style":717},[2808],{"type":46,"value":1081},{"type":40,"tag":688,"props":2810,"children":2811},{"style":744},[2812],{"type":46,"value":1807},{"type":40,"tag":688,"props":2814,"children":2815},{"style":701},[2816],{"type":46,"value":324},{"type":40,"tag":688,"props":2818,"children":2819},{"style":744},[2820],{"type":46,"value":2008},{"type":40,"tag":688,"props":2822,"children":2823},{"style":717},[2824],{"type":46,"value":1081},{"type":40,"tag":688,"props":2826,"children":2827},{"style":717},[2828],{"type":46,"value":2829},"  2>",{"type":40,"tag":688,"props":2831,"children":2832},{"style":701},[2833],{"type":46,"value":2834},"\u002Fdev\u002Fnull ",{"type":40,"tag":688,"props":2836,"children":2837},{"style":717},[2838],{"type":46,"value":2839},"|",{"type":40,"tag":688,"props":2841,"children":2842},{"style":695},[2843],{"type":46,"value":2596},{"type":40,"tag":688,"props":2845,"children":2846},{"style":701},[2847],{"type":46,"value":2601},{"type":40,"tag":688,"props":2849,"children":2850},{"style":717},[2851],{"type":46,"value":731},{"type":40,"tag":688,"props":2853,"children":2854},{"style":744},[2855],{"type":46,"value":747},{"type":40,"tag":688,"props":2857,"children":2859},{"class":690,"line":2858},67,[2860,2864,2868,2872,2876,2881,2885,2889,2893,2897,2901,2905,2909,2913,2917],{"type":40,"tag":688,"props":2861,"children":2862},{"style":717},[2863],{"type":46,"value":2795},{"type":40,"tag":688,"props":2865,"children":2866},{"style":695},[2867],{"type":46,"value":1539},{"type":40,"tag":688,"props":2869,"children":2870},{"style":701},[2871],{"type":46,"value":2804},{"type":40,"tag":688,"props":2873,"children":2874},{"style":717},[2875],{"type":46,"value":1081},{"type":40,"tag":688,"props":2877,"children":2878},{"style":744},[2879],{"type":46,"value":2880},"$MAIN_REF",{"type":40,"tag":688,"props":2882,"children":2883},{"style":701},[2884],{"type":46,"value":324},{"type":40,"tag":688,"props":2886,"children":2887},{"style":744},[2888],{"type":46,"value":2008},{"type":40,"tag":688,"props":2890,"children":2891},{"style":717},[2892],{"type":46,"value":1081},{"type":40,"tag":688,"props":2894,"children":2895},{"style":717},[2896],{"type":46,"value":2738},{"type":40,"tag":688,"props":2898,"children":2899},{"style":701},[2900],{"type":46,"value":2834},{"type":40,"tag":688,"props":2902,"children":2903},{"style":717},[2904],{"type":46,"value":2839},{"type":40,"tag":688,"props":2906,"children":2907},{"style":695},[2908],{"type":46,"value":2596},{"type":40,"tag":688,"props":2910,"children":2911},{"style":701},[2912],{"type":46,"value":2601},{"type":40,"tag":688,"props":2914,"children":2915},{"style":717},[2916],{"type":46,"value":731},{"type":40,"tag":688,"props":2918,"children":2919},{"style":744},[2920],{"type":46,"value":747},{"type":40,"tag":688,"props":2922,"children":2924},{"class":690,"line":2923},68,[2925,2929,2934,2938,2943,2948,2952,2956,2960,2964,2968,2972,2976,2980,2984,2988,2992,2996],{"type":40,"tag":688,"props":2926,"children":2927},{"style":717},[2928],{"type":46,"value":2591},{"type":40,"tag":688,"props":2930,"children":2931},{"style":695},[2932],{"type":46,"value":2933}," comm",{"type":40,"tag":688,"props":2935,"children":2936},{"style":701},[2937],{"type":46,"value":2782},{"type":40,"tag":688,"props":2939,"children":2940},{"style":701},[2941],{"type":46,"value":2942}," -",{"type":40,"tag":688,"props":2944,"children":2945},{"style":717},[2946],{"type":46,"value":2947}," \u003C(",{"type":40,"tag":688,"props":2949,"children":2950},{"style":695},[2951],{"type":46,"value":1539},{"type":40,"tag":688,"props":2953,"children":2954},{"style":701},[2955],{"type":46,"value":2804},{"type":40,"tag":688,"props":2957,"children":2958},{"style":717},[2959],{"type":46,"value":1081},{"type":40,"tag":688,"props":2961,"children":2962},{"style":701},[2963],{"type":46,"value":2725},{"type":40,"tag":688,"props":2965,"children":2966},{"style":744},[2967],{"type":46,"value":2008},{"type":40,"tag":688,"props":2969,"children":2970},{"style":717},[2971],{"type":46,"value":1081},{"type":40,"tag":688,"props":2973,"children":2974},{"style":717},[2975],{"type":46,"value":2738},{"type":40,"tag":688,"props":2977,"children":2978},{"style":701},[2979],{"type":46,"value":2834},{"type":40,"tag":688,"props":2981,"children":2982},{"style":717},[2983],{"type":46,"value":2839},{"type":40,"tag":688,"props":2985,"children":2986},{"style":695},[2987],{"type":46,"value":2596},{"type":40,"tag":688,"props":2989,"children":2990},{"style":701},[2991],{"type":46,"value":2601},{"type":40,"tag":688,"props":2993,"children":2994},{"style":717},[2995],{"type":46,"value":731},{"type":40,"tag":688,"props":2997,"children":2998},{"style":744},[2999],{"type":46,"value":747},{"type":40,"tag":688,"props":3001,"children":3003},{"class":690,"line":3002},69,[3004,3008,3013,3018,3022,3027,3031],{"type":40,"tag":688,"props":3005,"children":3006},{"style":717},[3007],{"type":46,"value":2591},{"type":40,"tag":688,"props":3009,"children":3010},{"style":695},[3011],{"type":46,"value":3012}," grep",{"type":40,"tag":688,"props":3014,"children":3015},{"style":701},[3016],{"type":46,"value":3017}," -E",{"type":40,"tag":688,"props":3019,"children":3020},{"style":717},[3021],{"type":46,"value":2456},{"type":40,"tag":688,"props":3023,"children":3024},{"style":701},[3025],{"type":46,"value":3026},"[[:alnum:]_]",{"type":40,"tag":688,"props":3028,"children":3029},{"style":717},[3030],{"type":46,"value":2326},{"type":40,"tag":688,"props":3032,"children":3033},{"style":744},[3034],{"type":46,"value":747},{"type":40,"tag":688,"props":3036,"children":3038},{"class":690,"line":3037},70,[3039,3044,3048],{"type":40,"tag":688,"props":3040,"children":3041},{"style":717},[3042],{"type":46,"value":3043},"            ||",{"type":40,"tag":688,"props":3045,"children":3046},{"style":723},[3047],{"type":46,"value":1569},{"type":40,"tag":688,"props":3049,"children":3050},{"style":717},[3051],{"type":46,"value":1574},{"type":40,"tag":688,"props":3053,"children":3055},{"class":690,"line":3054},71,[3056],{"type":40,"tag":688,"props":3057,"children":3058},{"emptyLinePlaceholder":1518},[3059],{"type":46,"value":1521},{"type":40,"tag":688,"props":3061,"children":3063},{"class":690,"line":3062},72,[3064,3068,3072,3076,3080,3085,3089,3093],{"type":40,"tag":688,"props":3065,"children":3066},{"style":1580},[3067],{"type":46,"value":1963},{"type":40,"tag":688,"props":3069,"children":3070},{"style":717},[3071],{"type":46,"value":1588},{"type":40,"tag":688,"props":3073,"children":3074},{"style":717},[3075],{"type":46,"value":1593},{"type":40,"tag":688,"props":3077,"children":3078},{"style":717},[3079],{"type":46,"value":766},{"type":40,"tag":688,"props":3081,"children":3082},{"style":744},[3083],{"type":46,"value":3084},"$missing",{"type":40,"tag":688,"props":3086,"children":3087},{"style":717},[3088],{"type":46,"value":1081},{"type":40,"tag":688,"props":3090,"children":3091},{"style":717},[3092],{"type":46,"value":1611},{"type":40,"tag":688,"props":3094,"children":3095},{"style":1580},[3096],{"type":46,"value":1616},{"type":40,"tag":688,"props":3098,"children":3100},{"class":690,"line":3099},73,[3101,3105,3109,3114,3118,3123],{"type":40,"tag":688,"props":3102,"children":3103},{"style":723},[3104],{"type":46,"value":2056},{"type":40,"tag":688,"props":3106,"children":3107},{"style":717},[3108],{"type":46,"value":766},{"type":40,"tag":688,"props":3110,"children":3111},{"style":701},[3112],{"type":46,"value":3113},"=== ",{"type":40,"tag":688,"props":3115,"children":3116},{"style":744},[3117],{"type":46,"value":2008},{"type":40,"tag":688,"props":3119,"children":3120},{"style":701},[3121],{"type":46,"value":3122}," ===",{"type":40,"tag":688,"props":3124,"children":3125},{"style":717},[3126],{"type":46,"value":790},{"type":40,"tag":688,"props":3128,"children":3130},{"class":690,"line":3129},74,[3131,3136,3140,3145,3149,3153,3157],{"type":40,"tag":688,"props":3132,"children":3133},{"style":723},[3134],{"type":46,"value":3135},"    printf",{"type":40,"tag":688,"props":3137,"children":3138},{"style":717},[3139],{"type":46,"value":2456},{"type":40,"tag":688,"props":3141,"children":3142},{"style":701},[3143],{"type":46,"value":3144},"%s\\n",{"type":40,"tag":688,"props":3146,"children":3147},{"style":717},[3148],{"type":46,"value":2326},{"type":40,"tag":688,"props":3150,"children":3151},{"style":717},[3152],{"type":46,"value":766},{"type":40,"tag":688,"props":3154,"children":3155},{"style":744},[3156],{"type":46,"value":3084},{"type":40,"tag":688,"props":3158,"children":3159},{"style":717},[3160],{"type":46,"value":790},{"type":40,"tag":688,"props":3162,"children":3164},{"class":690,"line":3163},75,[3165,3170,3175,3179,3184,3188,3193,3197,3201,3205,3209,3213,3217,3222,3226,3230,3235],{"type":40,"tag":688,"props":3166,"children":3167},{"style":744},[3168],{"type":46,"value":3169},"    FINDINGS",{"type":40,"tag":688,"props":3171,"children":3172},{"style":717},[3173],{"type":46,"value":3174},"=$((",{"type":40,"tag":688,"props":3176,"children":3177},{"style":695},[3178],{"type":46,"value":2379},{"type":40,"tag":688,"props":3180,"children":3181},{"style":701},[3182],{"type":46,"value":3183}," +",{"type":40,"tag":688,"props":3185,"children":3186},{"style":717},[3187],{"type":46,"value":720},{"type":40,"tag":688,"props":3189,"children":3190},{"style":723},[3191],{"type":46,"value":3192},"printf",{"type":40,"tag":688,"props":3194,"children":3195},{"style":717},[3196],{"type":46,"value":2456},{"type":40,"tag":688,"props":3198,"children":3199},{"style":701},[3200],{"type":46,"value":3144},{"type":40,"tag":688,"props":3202,"children":3203},{"style":717},[3204],{"type":46,"value":2326},{"type":40,"tag":688,"props":3206,"children":3207},{"style":717},[3208],{"type":46,"value":766},{"type":40,"tag":688,"props":3210,"children":3211},{"style":744},[3212],{"type":46,"value":3084},{"type":40,"tag":688,"props":3214,"children":3215},{"style":717},[3216],{"type":46,"value":1081},{"type":40,"tag":688,"props":3218,"children":3219},{"style":717},[3220],{"type":46,"value":3221}," |",{"type":40,"tag":688,"props":3223,"children":3224},{"style":695},[3225],{"type":46,"value":3012},{"type":40,"tag":688,"props":3227,"children":3228},{"style":701},[3229],{"type":46,"value":761},{"type":40,"tag":688,"props":3231,"children":3232},{"style":701},[3233],{"type":46,"value":3234}," .",{"type":40,"tag":688,"props":3236,"children":3237},{"style":717},[3238],{"type":46,"value":3239},")))\n",{"type":40,"tag":688,"props":3241,"children":3243},{"class":690,"line":3242},76,[3244],{"type":40,"tag":688,"props":3245,"children":3246},{"style":1580},[3247],{"type":46,"value":2087},{"type":40,"tag":688,"props":3249,"children":3251},{"class":690,"line":3250},77,[3252],{"type":40,"tag":688,"props":3253,"children":3254},{"style":1580},[3255],{"type":46,"value":2096},{"type":40,"tag":688,"props":3257,"children":3259},{"class":690,"line":3258},78,[3260],{"type":40,"tag":688,"props":3261,"children":3262},{"emptyLinePlaceholder":1518},[3263],{"type":46,"value":1521},{"type":40,"tag":688,"props":3265,"children":3267},{"class":690,"line":3266},79,[3268,3272,3276,3280,3285,3289,3294,3300,3304],{"type":40,"tag":688,"props":3269,"children":3270},{"style":1580},[3271],{"type":46,"value":1583},{"type":40,"tag":688,"props":3273,"children":3274},{"style":717},[3275],{"type":46,"value":1588},{"type":40,"tag":688,"props":3277,"children":3278},{"style":717},[3279],{"type":46,"value":766},{"type":40,"tag":688,"props":3281,"children":3282},{"style":744},[3283],{"type":46,"value":3284},"$FINDINGS",{"type":40,"tag":688,"props":3286,"children":3287},{"style":717},[3288],{"type":46,"value":1081},{"type":40,"tag":688,"props":3290,"children":3291},{"style":717},[3292],{"type":46,"value":3293}," -gt",{"type":40,"tag":688,"props":3295,"children":3297},{"style":3296},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[3298],{"type":46,"value":3299}," 0",{"type":40,"tag":688,"props":3301,"children":3302},{"style":717},[3303],{"type":46,"value":1611},{"type":40,"tag":688,"props":3305,"children":3306},{"style":1580},[3307],{"type":46,"value":1616},{"type":40,"tag":688,"props":3309,"children":3311},{"class":690,"line":3310},80,[3312,3316,3320,3324,3328,3333],{"type":40,"tag":688,"props":3313,"children":3314},{"style":723},[3315],{"type":46,"value":1843},{"type":40,"tag":688,"props":3317,"children":3318},{"style":717},[3319],{"type":46,"value":766},{"type":40,"tag":688,"props":3321,"children":3322},{"style":701},[3323],{"type":46,"value":2065},{"type":40,"tag":688,"props":3325,"children":3326},{"style":744},[3327],{"type":46,"value":3284},{"type":40,"tag":688,"props":3329,"children":3330},{"style":701},[3331],{"type":46,"value":3332}," potential dev-only line removal(s) detected. For each:",{"type":40,"tag":688,"props":3334,"children":3335},{"style":717},[3336],{"type":46,"value":790},{"type":40,"tag":688,"props":3338,"children":3340},{"class":690,"line":3339},81,[3341,3345,3349,3354],{"type":40,"tag":688,"props":3342,"children":3343},{"style":723},[3344],{"type":46,"value":1843},{"type":40,"tag":688,"props":3346,"children":3347},{"style":717},[3348],{"type":46,"value":766},{"type":40,"tag":688,"props":3350,"children":3351},{"style":701},[3352],{"type":46,"value":3353},"  (a) MAIN INTENTIONALLY REMOVED — find the specific commit in",{"type":40,"tag":688,"props":3355,"children":3356},{"style":717},[3357],{"type":46,"value":790},{"type":40,"tag":688,"props":3359,"children":3361},{"class":690,"line":3360},82,[3362,3366,3370,3375],{"type":40,"tag":688,"props":3363,"children":3364},{"style":723},[3365],{"type":46,"value":1843},{"type":40,"tag":688,"props":3367,"children":3368},{"style":717},[3369],{"type":46,"value":766},{"type":40,"tag":688,"props":3371,"children":3372},{"style":701},[3373],{"type":46,"value":3374},"      'git log origin\u002Fmain -- \u003Cfile>' that removed it; document the",{"type":40,"tag":688,"props":3376,"children":3377},{"style":717},[3378],{"type":46,"value":790},{"type":40,"tag":688,"props":3380,"children":3382},{"class":690,"line":3381},83,[3383,3387,3391,3396],{"type":40,"tag":688,"props":3384,"children":3385},{"style":723},[3386],{"type":46,"value":1843},{"type":40,"tag":688,"props":3388,"children":3389},{"style":717},[3390],{"type":46,"value":766},{"type":40,"tag":688,"props":3392,"children":3393},{"style":701},[3394],{"type":46,"value":3395},"      SHA in the PR body, then the drop is acceptable.",{"type":40,"tag":688,"props":3397,"children":3398},{"style":717},[3399],{"type":46,"value":790},{"type":40,"tag":688,"props":3401,"children":3403},{"class":690,"line":3402},84,[3404,3408,3412,3417],{"type":40,"tag":688,"props":3405,"children":3406},{"style":723},[3407],{"type":46,"value":1843},{"type":40,"tag":688,"props":3409,"children":3410},{"style":717},[3411],{"type":46,"value":766},{"type":40,"tag":688,"props":3413,"children":3414},{"style":701},[3415],{"type":46,"value":3416},"  (b) MERGE ACCIDENT — main never explicitly touched that line.",{"type":40,"tag":688,"props":3418,"children":3419},{"style":717},[3420],{"type":46,"value":790},{"type":40,"tag":688,"props":3422,"children":3424},{"class":690,"line":3423},85,[3425,3429,3433,3438],{"type":40,"tag":688,"props":3426,"children":3427},{"style":723},[3428],{"type":46,"value":1843},{"type":40,"tag":688,"props":3430,"children":3431},{"style":717},[3432],{"type":46,"value":766},{"type":40,"tag":688,"props":3434,"children":3435},{"style":701},[3436],{"type":46,"value":3437},"      RESTORE the dev line (Edit\u002FWrite to put it back).",{"type":40,"tag":688,"props":3439,"children":3440},{"style":717},[3441],{"type":46,"value":790},{"type":40,"tag":688,"props":3443,"children":3445},{"class":690,"line":3444},86,[3446,3450,3454,3459],{"type":40,"tag":688,"props":3447,"children":3448},{"style":723},[3449],{"type":46,"value":1843},{"type":40,"tag":688,"props":3451,"children":3452},{"style":717},[3453],{"type":46,"value":766},{"type":40,"tag":688,"props":3455,"children":3456},{"style":701},[3457],{"type":46,"value":3458},"Default to (b); only declare (a) with a specific main commit as evidence.",{"type":40,"tag":688,"props":3460,"children":3461},{"style":717},[3462],{"type":46,"value":790},{"type":40,"tag":688,"props":3464,"children":3466},{"class":690,"line":3465},87,[3467,3471,3475,3480],{"type":40,"tag":688,"props":3468,"children":3469},{"style":723},[3470],{"type":46,"value":1843},{"type":40,"tag":688,"props":3472,"children":3473},{"style":717},[3474],{"type":46,"value":766},{"type":40,"tag":688,"props":3476,"children":3477},{"style":701},[3478],{"type":46,"value":3479},"This audit is advisory; continue the push after reviewing the findings.",{"type":40,"tag":688,"props":3481,"children":3482},{"style":717},[3483],{"type":46,"value":790},{"type":40,"tag":688,"props":3485,"children":3487},{"class":690,"line":3486},88,[3488],{"type":40,"tag":688,"props":3489,"children":3490},{"style":1580},[3491],{"type":46,"value":1753},{"type":40,"tag":688,"props":3493,"children":3495},{"class":690,"line":3494},89,[3496],{"type":40,"tag":688,"props":3497,"children":3498},{"emptyLinePlaceholder":1518},[3499],{"type":46,"value":1521},{"type":40,"tag":688,"props":3501,"children":3503},{"class":690,"line":3502},90,[3504,3509,3513,3518],{"type":40,"tag":688,"props":3505,"children":3506},{"style":723},[3507],{"type":46,"value":3508},"echo",{"type":40,"tag":688,"props":3510,"children":3511},{"style":717},[3512],{"type":46,"value":766},{"type":40,"tag":688,"props":3514,"children":3515},{"style":701},[3516],{"type":46,"value":3517},"nightly-sync pre-push guidance complete",{"type":40,"tag":688,"props":3519,"children":3520},{"style":717},[3521],{"type":46,"value":790},{"type":40,"tag":688,"props":3523,"children":3525},{"class":690,"line":3524},91,[3526],{"type":40,"tag":688,"props":3527,"children":3528},{"style":717},[3529],{"type":46,"value":1574},{"type":40,"tag":688,"props":3531,"children":3533},{"class":690,"line":3532},92,[3534,3539,3543],{"type":40,"tag":688,"props":3535,"children":3536},{"style":744},[3537],{"type":46,"value":3538},"GUIDANCE_STATUS",{"type":40,"tag":688,"props":3540,"children":3541},{"style":717},[3542],{"type":46,"value":1630},{"type":40,"tag":688,"props":3544,"children":3545},{"style":744},[3546],{"type":46,"value":3547},"$?\n",{"type":40,"tag":688,"props":3549,"children":3551},{"class":690,"line":3550},93,[3552,3556,3560,3564,3569,3573,3578,3582,3586],{"type":40,"tag":688,"props":3553,"children":3554},{"style":1580},[3555],{"type":46,"value":1583},{"type":40,"tag":688,"props":3557,"children":3558},{"style":717},[3559],{"type":46,"value":1588},{"type":40,"tag":688,"props":3561,"children":3562},{"style":717},[3563],{"type":46,"value":766},{"type":40,"tag":688,"props":3565,"children":3566},{"style":744},[3567],{"type":46,"value":3568},"$GUIDANCE_STATUS",{"type":40,"tag":688,"props":3570,"children":3571},{"style":717},[3572],{"type":46,"value":1081},{"type":40,"tag":688,"props":3574,"children":3575},{"style":717},[3576],{"type":46,"value":3577}," -ne",{"type":40,"tag":688,"props":3579,"children":3580},{"style":3296},[3581],{"type":46,"value":3299},{"type":40,"tag":688,"props":3583,"children":3584},{"style":717},[3585],{"type":46,"value":1611},{"type":40,"tag":688,"props":3587,"children":3588},{"style":1580},[3589],{"type":46,"value":1616},{"type":40,"tag":688,"props":3591,"children":3593},{"class":690,"line":3592},94,[3594,3598,3602,3607,3611,3616],{"type":40,"tag":688,"props":3595,"children":3596},{"style":723},[3597],{"type":46,"value":1843},{"type":40,"tag":688,"props":3599,"children":3600},{"style":717},[3601],{"type":46,"value":766},{"type":40,"tag":688,"props":3603,"children":3604},{"style":701},[3605],{"type":46,"value":3606},"WARNING: nightly-sync pre-push guidance failed with status ",{"type":40,"tag":688,"props":3608,"children":3609},{"style":744},[3610],{"type":46,"value":3568},{"type":40,"tag":688,"props":3612,"children":3613},{"style":701},[3614],{"type":46,"value":3615},"; allowing the push to continue.",{"type":40,"tag":688,"props":3617,"children":3618},{"style":717},[3619],{"type":46,"value":790},{"type":40,"tag":688,"props":3621,"children":3623},{"class":690,"line":3622},95,[3624],{"type":40,"tag":688,"props":3625,"children":3626},{"style":1580},[3627],{"type":46,"value":1753},{"type":40,"tag":688,"props":3629,"children":3631},{"class":690,"line":3630},96,[3632,3637],{"type":40,"tag":688,"props":3633,"children":3634},{"style":723},[3635],{"type":46,"value":3636},"exit",{"type":40,"tag":688,"props":3638,"children":3639},{"style":3296},[3640],{"type":46,"value":3641}," 0\n",{"type":40,"tag":49,"props":3643,"children":3644},{},[3645],{"type":46,"value":3646},"All pre-push findings are advisory. The hook must return success even when it\nfinds a CODEOWNERS difference, potential dev-feature removal, dependency-triple\ndifference, or an internal audit error. The underlying policies still apply:\nrestore accidental changes, preserve dev-only features, and document exact main\ncommits for intentional removals. A warning by itself is never a reason to stop\nthe workflow or request authorization to continue.",{"type":40,"tag":49,"props":3648,"children":3649},{},[3650],{"type":46,"value":3651},"Recent regressions the dev-feature audit would have flagged (all\n\"merge accident\" type from #4659 and #4716):",{"type":40,"tag":201,"props":3653,"children":3654},{},[3655,3672,3699,3715,3732,3743,3762],{"type":40,"tag":77,"props":3656,"children":3657},{},[3658,3664,3666],{"type":40,"tag":83,"props":3659,"children":3661},{"className":3660},[],[3662],{"type":46,"value":3663},"transformer_layer.py",{"type":46,"value":3665}," lost ",{"type":40,"tag":83,"props":3667,"children":3669},{"className":3668},[],[3670],{"type":46,"value":3671},"_forward_mlp_router(input_ids=None)",{"type":40,"tag":77,"props":3673,"children":3674},{},[3675,3681,3683,3689,3691,3697],{"type":40,"tag":83,"props":3676,"children":3678},{"className":3677},[],[3679],{"type":46,"value":3680},"token_dispatcher.py",{"type":46,"value":3682}," lost the\n",{"type":40,"tag":83,"props":3684,"children":3686},{"className":3685},[],[3687],{"type":46,"value":3688},"num_sms_preprocessing_api=...",{"type":46,"value":3690}," kwarg on the ",{"type":40,"tag":83,"props":3692,"children":3694},{"className":3693},[],[3695],{"type":46,"value":3696},"_HybridEPManager",{"type":46,"value":3698}," call",{"type":40,"tag":77,"props":3700,"children":3701},{},[3702,3708,3709],{"type":40,"tag":83,"props":3703,"children":3705},{"className":3704},[],[3706],{"type":46,"value":3707},"moe_layer.py",{"type":46,"value":3665},{"type":40,"tag":83,"props":3710,"children":3712},{"className":3711},[],[3713],{"type":46,"value":3714},"self._maybe_record_overload_factor(...)",{"type":40,"tag":77,"props":3716,"children":3717},{},[3718,3724,3726],{"type":40,"tag":83,"props":3719,"children":3721},{"className":3720},[],[3722],{"type":46,"value":3723},"gpt_dynamic_inference_with_coordinator.py",{"type":46,"value":3725}," lost\n",{"type":40,"tag":83,"props":3727,"children":3729},{"className":3728},[],[3730],{"type":46,"value":3731},"from megatron.training.arguments import parse_and_validate_args",{"type":40,"tag":77,"props":3733,"children":3734},{},[3735,3741],{"type":40,"tag":83,"props":3736,"children":3738},{"className":3737},[],[3739],{"type":46,"value":3740},"datasets\u002Freadme.md",{"type":46,"value":3742}," lost the dev-only \"Packing Scheduler\" section",{"type":40,"tag":77,"props":3744,"children":3745},{},[3746,3748,3753,3755,3760],{"type":46,"value":3747},"PR #4882 \u002F PR #4318 dropped the ",{"type":40,"tag":83,"props":3749,"children":3751},{"className":3750},[],[3752],{"type":46,"value":287},{"type":46,"value":3754}," implementation and\n",{"type":40,"tag":83,"props":3756,"children":3758},{"className":3757},[],[3759],{"type":46,"value":295},{"type":46,"value":3761}," selection while leaving the config flag and unit test",{"type":40,"tag":77,"props":3763,"children":3764},{},[3765,3771,3773,3779,3780,3785,3787,3793,3795,3801,3803,3809,3811,3816,3818,3823],{"type":40,"tag":83,"props":3766,"children":3768},{"className":3767},[],[3769],{"type":46,"value":3770},"data_samplers.py",{"type":46,"value":3772}," \u002F ",{"type":40,"tag":83,"props":3774,"children":3776},{"className":3775},[],[3777],{"type":46,"value":3778},"utils.py",{"type":46,"value":3772},{"type":40,"tag":83,"props":3781,"children":3783},{"className":3782},[],[3784],{"type":46,"value":1207},{"type":46,"value":3786}," kept main's\n",{"type":40,"tag":83,"props":3788,"children":3790},{"className":3789},[],[3791],{"type":46,"value":3792},"args.hybrid_context_parallel",{"type":46,"value":3794}," instead of dev's\n",{"type":40,"tag":83,"props":3796,"children":3798},{"className":3797},[],[3799],{"type":46,"value":3800},"args.dynamic_context_parallel",{"type":46,"value":3802}," (counts as a MERGE ACCIDENT — dev's\nreference is present, main's is the deprecated alias that's False\nwhen callers pass ",{"type":40,"tag":83,"props":3804,"children":3806},{"className":3805},[],[3807],{"type":46,"value":3808},"--dynamic-context-parallel",{"type":46,"value":3810},"). These files are on\nthe override list so the audit treats them as \"advisory\", but you\nshould still rename ",{"type":40,"tag":83,"props":3812,"children":3814},{"className":3813},[],[3815],{"type":46,"value":3792},{"type":46,"value":3817}," →\n",{"type":40,"tag":83,"props":3819,"children":3821},{"className":3820},[],[3822],{"type":46,"value":3800},{"type":46,"value":3824}," on every reference after taking\nmain's version of these files.",{"type":40,"tag":66,"props":3826,"children":3828},{"id":3827},"commit-and-push",[3829],{"type":46,"value":3830},"Commit and Push",{"type":40,"tag":49,"props":3832,"children":3833},{},[3834,3836,3841],{"type":46,"value":3835},"Phase 1 produces a single commit on the sync branch. The merge itself\ncreates the merge commit; fold any post-merge work (formatting,\nconflict surgery, restored files, regenerated ",{"type":40,"tag":83,"props":3837,"children":3839},{"className":3838},[],[3840],{"type":46,"value":411},{"type":46,"value":3842},") into it\nrather than stacking a second commit:",{"type":40,"tag":488,"props":3844,"children":3846},{"className":680,"code":3845,"language":682,"meta":496,"style":496},"git add -A\ngit commit --amend --no-edit  # rewrites the merge commit's tree;\n                              # parents are preserved.\ngit push -u origin \"$BRANCH\"  # only non-force push of the run.\n",[3847],{"type":40,"tag":83,"props":3848,"children":3849},{"__ignoreMap":496},[3850,3867,3894,3902],{"type":40,"tag":688,"props":3851,"children":3852},{"class":690,"line":691},[3853,3857,3862],{"type":40,"tag":688,"props":3854,"children":3855},{"style":695},[3856],{"type":46,"value":1539},{"type":40,"tag":688,"props":3858,"children":3859},{"style":701},[3860],{"type":46,"value":3861}," add",{"type":40,"tag":688,"props":3863,"children":3864},{"style":701},[3865],{"type":46,"value":3866}," -A\n",{"type":40,"tag":688,"props":3868,"children":3869},{"class":690,"line":750},[3870,3874,3879,3884,3889],{"type":40,"tag":688,"props":3871,"children":3872},{"style":695},[3873],{"type":46,"value":1539},{"type":40,"tag":688,"props":3875,"children":3876},{"style":701},[3877],{"type":46,"value":3878}," commit",{"type":40,"tag":688,"props":3880,"children":3881},{"style":701},[3882],{"type":46,"value":3883}," --amend",{"type":40,"tag":688,"props":3885,"children":3886},{"style":701},[3887],{"type":46,"value":3888}," --no-edit",{"type":40,"tag":688,"props":3890,"children":3891},{"style":797},[3892],{"type":46,"value":3893},"  # rewrites the merge commit's tree;\n",{"type":40,"tag":688,"props":3895,"children":3896},{"class":690,"line":779},[3897],{"type":40,"tag":688,"props":3898,"children":3899},{"style":797},[3900],{"type":46,"value":3901},"                              # parents are preserved.\n",{"type":40,"tag":688,"props":3903,"children":3904},{"class":690,"line":793},[3905,3909,3914,3918,3923,3927,3931,3935],{"type":40,"tag":688,"props":3906,"children":3907},{"style":695},[3908],{"type":46,"value":1539},{"type":40,"tag":688,"props":3910,"children":3911},{"style":701},[3912],{"type":46,"value":3913}," push",{"type":40,"tag":688,"props":3915,"children":3916},{"style":701},[3917],{"type":46,"value":2601},{"type":40,"tag":688,"props":3919,"children":3920},{"style":701},[3921],{"type":46,"value":3922}," origin",{"type":40,"tag":688,"props":3924,"children":3925},{"style":717},[3926],{"type":46,"value":766},{"type":40,"tag":688,"props":3928,"children":3929},{"style":744},[3930],{"type":46,"value":88},{"type":40,"tag":688,"props":3932,"children":3933},{"style":717},[3934],{"type":46,"value":1081},{"type":40,"tag":688,"props":3936,"children":3937},{"style":797},[3938],{"type":46,"value":3939},"  # only non-force push of the run.\n",{"type":40,"tag":49,"props":3941,"children":3942},{},[3943],{"type":46,"value":3944},"Once pushed, this commit is immutable for the rest of the run.\nPhase 3 fixes go into a separate rolling fix commit on top (see\nPhase 3 step 4 and the two-commit policy in Rules).",{"type":40,"tag":55,"props":3946,"children":3947},{},[],{"type":40,"tag":59,"props":3949,"children":3951},{"id":3950},"phase-2-create-the-draft-pr",[3952],{"type":46,"value":3953},"Phase 2: Create the Draft PR",{"type":40,"tag":201,"props":3955,"children":3956},{},[3957,3968,3986,4157,4162],{"type":40,"tag":77,"props":3958,"children":3959},{},[3960,3962],{"type":46,"value":3961},"Title: ",{"type":40,"tag":83,"props":3963,"children":3965},{"className":3964},[],[3966],{"type":46,"value":3967},"chore: nightly sync main into dev ($DATE)",{"type":40,"tag":77,"props":3969,"children":3970},{},[3971,3973,3978,3980],{"type":46,"value":3972},"Create as ",{"type":40,"tag":170,"props":3974,"children":3975},{},[3976],{"type":46,"value":3977},"draft",{"type":46,"value":3979},": ",{"type":40,"tag":83,"props":3981,"children":3983},{"className":3982},[],[3984],{"type":46,"value":3985},"gh pr create --draft",{"type":40,"tag":77,"props":3987,"children":3988},{},[3989,3991],{"type":46,"value":3990},"Body should include:\n",{"type":40,"tag":73,"props":3992,"children":3993},{},[3994,3999,4113,4118,4123,4128],{"type":40,"tag":77,"props":3995,"children":3996},{},[3997],{"type":46,"value":3998},"Summary of what was synced (number of commits from main)",{"type":40,"tag":77,"props":4000,"children":4001},{},[4002,4007,4009,4099,4103,4105,4111],{"type":40,"tag":170,"props":4003,"children":4004},{},[4005],{"type":46,"value":4006},"Python-only line-change stats",{"type":46,"value":4008},", so reviewers can gauge the real\ncode surface (excluding golden-value JSON, uv.lock, etc.). Compute\nwith:",{"type":40,"tag":488,"props":4010,"children":4012},{"className":680,"code":4011,"language":682,"meta":496,"style":496},"git diff --numstat origin\u002Fdev...HEAD -- '*.py' \\\n  | awk 'BEGIN{a=0;d=0} {a+=$1; d+=$2} END{\n      printf \"Python lines: +%d \u002F -%d across %d files\\n\", a, d, NR\n    }'\n",[4013],{"type":40,"tag":83,"props":4014,"children":4015},{"__ignoreMap":496},[4016,4057,4079,4087],{"type":40,"tag":688,"props":4017,"children":4018},{"class":690,"line":691},[4019,4023,4027,4032,4037,4041,4045,4049,4053],{"type":40,"tag":688,"props":4020,"children":4021},{"style":695},[4022],{"type":46,"value":1539},{"type":40,"tag":688,"props":4024,"children":4025},{"style":701},[4026],{"type":46,"value":1793},{"type":40,"tag":688,"props":4028,"children":4029},{"style":701},[4030],{"type":46,"value":4031}," --numstat",{"type":40,"tag":688,"props":4033,"children":4034},{"style":701},[4035],{"type":46,"value":4036}," origin\u002Fdev...HEAD",{"type":40,"tag":688,"props":4038,"children":4039},{"style":701},[4040],{"type":46,"value":1820},{"type":40,"tag":688,"props":4042,"children":4043},{"style":717},[4044],{"type":46,"value":2456},{"type":40,"tag":688,"props":4046,"children":4047},{"style":701},[4048],{"type":46,"value":2461},{"type":40,"tag":688,"props":4050,"children":4051},{"style":717},[4052],{"type":46,"value":2326},{"type":40,"tag":688,"props":4054,"children":4055},{"style":744},[4056],{"type":46,"value":747},{"type":40,"tag":688,"props":4058,"children":4059},{"class":690,"line":750},[4060,4065,4070,4074],{"type":40,"tag":688,"props":4061,"children":4062},{"style":717},[4063],{"type":46,"value":4064},"  |",{"type":40,"tag":688,"props":4066,"children":4067},{"style":695},[4068],{"type":46,"value":4069}," awk",{"type":40,"tag":688,"props":4071,"children":4072},{"style":717},[4073],{"type":46,"value":2456},{"type":40,"tag":688,"props":4075,"children":4076},{"style":701},[4077],{"type":46,"value":4078},"BEGIN{a=0;d=0} {a+=$1; d+=$2} END{\n",{"type":40,"tag":688,"props":4080,"children":4081},{"class":690,"line":779},[4082],{"type":40,"tag":688,"props":4083,"children":4084},{"style":701},[4085],{"type":46,"value":4086},"      printf \"Python lines: +%d \u002F -%d across %d files\\n\", a, d, NR\n",{"type":40,"tag":688,"props":4088,"children":4089},{"class":690,"line":793},[4090,4095],{"type":40,"tag":688,"props":4091,"children":4092},{"style":701},[4093],{"type":46,"value":4094},"    }",{"type":40,"tag":688,"props":4096,"children":4097},{"style":717},[4098],{"type":46,"value":2336},{"type":40,"tag":4100,"props":4101,"children":4102},"br",{},[],{"type":46,"value":4104},"Include the exact line (e.g. ",{"type":40,"tag":83,"props":4106,"children":4108},{"className":4107},[],[4109],{"type":46,"value":4110},"Python lines: +1234 \u002F -567 across 42 files",{"type":46,"value":4112},")\nin the PR body so reviewers see it at a glance.",{"type":40,"tag":77,"props":4114,"children":4115},{},[4116],{"type":46,"value":4117},"List of files where main's version was taken over the merge",{"type":40,"tag":77,"props":4119,"children":4120},{},[4121],{"type":46,"value":4122},"List of files that were deleted in dev but restored (and why)",{"type":40,"tag":77,"props":4124,"children":4125},{},[4126],{"type":46,"value":4127},"Disposition of every pre-push advisory finding, including CODEOWNERS or\ndependency-triple differences and potential dev-feature removals. Record\nwhether each was corrected, intentional (with the exact commit or reason),\nor a formatting\u002Freordering false positive. State explicitly if there were\nno findings.",{"type":40,"tag":77,"props":4129,"children":4130},{},[4131,4133,4139,4141,4147,4149,4155],{"type":46,"value":4132},"The remerge-diff output (",{"type":40,"tag":83,"props":4134,"children":4136},{"className":4135},[],[4137],{"type":46,"value":4138},"git show --remerge-diff HEAD",{"type":46,"value":4140}," on the merge\ncommit) so reviewers can inspect ONLY the conflict resolutions. If the\noutput is very long, summarize conflicts by file and put the full diff\nin a collapsed ",{"type":40,"tag":83,"props":4142,"children":4144},{"className":4143},[],[4145],{"type":46,"value":4146},"\u003Cdetails>",{"type":46,"value":4148}," block. If git is too old for ",{"type":40,"tag":83,"props":4150,"children":4152},{"className":4151},[],[4153],{"type":46,"value":4154},"--remerge-diff",{"type":46,"value":4156},",\nnote the git version and describe the merge strategy used instead.",{"type":40,"tag":77,"props":4158,"children":4159},{},[4160],{"type":46,"value":4161},"Save the PR number for later phases",{"type":40,"tag":77,"props":4163,"children":4164},{},[4165,4186,4188,4193,4195,4201,4203,4208,4210],{"type":40,"tag":170,"props":4166,"children":4167},{},[4168,4170,4176,4178,4184],{"type":46,"value":4169},"Add the ",{"type":40,"tag":83,"props":4171,"children":4173},{"className":4172},[],[4174],{"type":46,"value":4175},"Run functional tests",{"type":46,"value":4177}," and ",{"type":40,"tag":83,"props":4179,"children":4181},{"className":4180},[],[4182],{"type":46,"value":4183},"Run MBridge tests",{"type":46,"value":4185}," labels",{"type":46,"value":4187}," to the\nPR immediately after creation. The ",{"type":40,"tag":83,"props":4189,"children":4191},{"className":4190},[],[4192],{"type":46,"value":4175},{"type":46,"value":4194}," label ensures\n",{"type":40,"tag":83,"props":4196,"children":4198},{"className":4197},[],[4199],{"type":46,"value":4200},"\u002Fok to test",{"type":46,"value":4202}," triggers the full CI suite (unit tests + functional\u002F\nintegration tests with 100-step training and golden value comparison).\nThe ",{"type":40,"tag":83,"props":4204,"children":4206},{"className":4205},[],[4207],{"type":46,"value":4183},{"type":46,"value":4209}," label triggers the MBridge test suite. Without\nthese labels, only a lightweight subset runs.\n",{"type":40,"tag":488,"props":4211,"children":4213},{"className":680,"code":4212,"language":682,"meta":496,"style":496},"gh pr edit \u003CPR_NUMBER> --repo $REPO \\\n  --add-label \"Run functional tests\" \\\n  --add-label \"Run MBridge tests\"\n",[4214],{"type":40,"tag":83,"props":4215,"children":4216},{"__ignoreMap":496},[4217,4265,4289],{"type":40,"tag":688,"props":4218,"children":4219},{"class":690,"line":691},[4220,4225,4230,4235,4240,4245,4250,4255,4260],{"type":40,"tag":688,"props":4221,"children":4222},{"style":695},[4223],{"type":46,"value":4224},"gh",{"type":40,"tag":688,"props":4226,"children":4227},{"style":701},[4228],{"type":46,"value":4229}," pr",{"type":40,"tag":688,"props":4231,"children":4232},{"style":701},[4233],{"type":46,"value":4234}," edit",{"type":40,"tag":688,"props":4236,"children":4237},{"style":717},[4238],{"type":46,"value":4239}," \u003C",{"type":40,"tag":688,"props":4241,"children":4242},{"style":701},[4243],{"type":46,"value":4244},"PR_NUMBE",{"type":40,"tag":688,"props":4246,"children":4247},{"style":744},[4248],{"type":46,"value":4249},"R",{"type":40,"tag":688,"props":4251,"children":4252},{"style":717},[4253],{"type":46,"value":4254},">",{"type":40,"tag":688,"props":4256,"children":4257},{"style":701},[4258],{"type":46,"value":4259}," --repo",{"type":40,"tag":688,"props":4261,"children":4262},{"style":744},[4263],{"type":46,"value":4264}," $REPO \\\n",{"type":40,"tag":688,"props":4266,"children":4267},{"class":690,"line":750},[4268,4273,4277,4281,4285],{"type":40,"tag":688,"props":4269,"children":4270},{"style":701},[4271],{"type":46,"value":4272},"  --add-label",{"type":40,"tag":688,"props":4274,"children":4275},{"style":717},[4276],{"type":46,"value":766},{"type":40,"tag":688,"props":4278,"children":4279},{"style":701},[4280],{"type":46,"value":4175},{"type":40,"tag":688,"props":4282,"children":4283},{"style":717},[4284],{"type":46,"value":1081},{"type":40,"tag":688,"props":4286,"children":4287},{"style":744},[4288],{"type":46,"value":747},{"type":40,"tag":688,"props":4290,"children":4291},{"class":690,"line":779},[4292,4296,4300,4304],{"type":40,"tag":688,"props":4293,"children":4294},{"style":701},[4295],{"type":46,"value":4272},{"type":40,"tag":688,"props":4297,"children":4298},{"style":717},[4299],{"type":46,"value":766},{"type":40,"tag":688,"props":4301,"children":4302},{"style":701},[4303],{"type":46,"value":4183},{"type":40,"tag":688,"props":4305,"children":4306},{"style":717},[4307],{"type":46,"value":790},{"type":40,"tag":55,"props":4309,"children":4310},{},[],{"type":40,"tag":59,"props":4312,"children":4314},{"id":4313},"phase-3-ci-iteration",[4315],{"type":46,"value":4316},"Phase 3: CI Iteration",{"type":40,"tag":66,"props":4318,"children":4320},{"id":4319},"ci-architecture",[4321],{"type":46,"value":4322},"CI Architecture",{"type":40,"tag":201,"props":4324,"children":4325},{},[4326,4340,4357],{"type":40,"tag":77,"props":4327,"children":4328},{},[4329,4338],{"type":40,"tag":170,"props":4330,"children":4331},{},[4332],{"type":40,"tag":83,"props":4333,"children":4335},{"className":4334},[],[4336],{"type":46,"value":4337},"Nemo_CICD_Test",{"type":46,"value":4339}," is a downstream gate job aggregating unit test,\nintegration test, and other results. If it fails, investigate the upstream\njobs it depends on — do NOT debug the gate itself.",{"type":40,"tag":77,"props":4341,"children":4342},{},[4343,4348,4350,4355],{"type":40,"tag":170,"props":4344,"children":4345},{},[4346],{"type":46,"value":4347},"Integration tests",{"type":46,"value":4349}," (H100, GB200) may be skipped for non-maintainer PRs.\nThis is expected; the ",{"type":40,"tag":83,"props":4351,"children":4353},{"className":4352},[],[4354],{"type":46,"value":4337},{"type":46,"value":4356}," gate will fail as a result.",{"type":40,"tag":77,"props":4358,"children":4359},{},[4360,4369,4371,4377,4379,4384],{"type":40,"tag":170,"props":4361,"children":4362},{},[4363],{"type":40,"tag":83,"props":4364,"children":4366},{"className":4365},[],[4367],{"type":46,"value":4368},"tests\u002Funit_tests\u002Fconftest.py",{"type":46,"value":4370}," imports from ",{"type":40,"tag":83,"props":4372,"children":4374},{"className":4373},[],[4375],{"type":46,"value":4376},"megatron.training.training",{"type":46,"value":4378},",\nso a broken import in ",{"type":40,"tag":83,"props":4380,"children":4382},{"className":4381},[],[4383],{"type":46,"value":1207},{"type":46,"value":4385}," (or anything it transitively imports)\ncascades to fail ALL test suites. If every test job fails with ImportError,\ncheck the training.py import chain first.",{"type":40,"tag":66,"props":4387,"children":4389},{"id":4388},"execution-model-one-step-no-background",[4390],{"type":46,"value":4391},"Execution model: one step, no background",{"type":40,"tag":49,"props":4393,"children":4394},{},[4395],{"type":46,"value":4396},"You run inside ONE GitHub Actions step. The moment you stop emitting\ntool calls, the step ends and the runner container is destroyed. Any\nbackground process you started dies with it. There is NO persistent\nsession and NO future wakeup. See the workflow prompt's \"NO background\ntasks\" block for the full ban list.",{"type":40,"tag":49,"props":4398,"children":4399},{},[4400],{"type":46,"value":4401},"Practical rule: every wait for CI to resolve is a SINGLE foreground Bash\ntool call that blocks inline until the wait is resolved.",{"type":40,"tag":66,"props":4403,"children":4405},{"id":4404},"the-fix-then-retrigger-loop",[4406],{"type":46,"value":4407},"The Fix-Then-Retrigger Loop",{"type":40,"tag":49,"props":4409,"children":4410},{},[4411],{"type":46,"value":4412},"Two nested loops. Do NOT conflate them:",{"type":40,"tag":201,"props":4414,"children":4415},{},[4416,4435],{"type":40,"tag":77,"props":4417,"children":4418},{},[4419,4421,4426,4428,4433],{"type":46,"value":4420},"The ",{"type":40,"tag":170,"props":4422,"children":4423},{},[4424],{"type":46,"value":4425},"outer loop",{"type":46,"value":4427}," is YOUR sequence of tool calls (each iteration: one\n",{"type":40,"tag":83,"props":4429,"children":4431},{"className":4430},[],[4432],{"type":46,"value":4200},{"type":46,"value":4434},", one blocking poll, maybe one fix-and-push). It is NOT a\nBash loop. It advances because you make new tool calls.",{"type":40,"tag":77,"props":4436,"children":4437},{},[4438,4439,4444,4446,4452],{"type":46,"value":4420},{"type":40,"tag":170,"props":4440,"children":4441},{},[4442],{"type":46,"value":4443},"inner loop",{"type":46,"value":4445}," is a single blocking Bash tool call using\n",{"type":40,"tag":83,"props":4447,"children":4449},{"className":4448},[],[4450],{"type":46,"value":4451},"while true; do ... sleep 120; done",{"type":46,"value":4453},". It runs during one iteration of\nthe outer loop and ends when CI reaches a terminal state for that\niteration.",{"type":40,"tag":49,"props":4455,"children":4456},{},[4457],{"type":46,"value":4458},"The outer loop terminates ONLY when Phase 4's gate is satisfied.",{"type":40,"tag":49,"props":4460,"children":4461},{},[4462,4467,4469,4475,4477,4483,4485,4491],{"type":40,"tag":170,"props":4463,"children":4464},{},[4465],{"type":46,"value":4466},"Source of truth:",{"type":46,"value":4468}," ",{"type":40,"tag":83,"props":4470,"children":4472},{"className":4471},[],[4473],{"type":46,"value":4474},"gh pr view \u003CPR_NUMBER> --repo $REPO --json statusCheckRollup",{"type":46,"value":4476},".\nThis lists every required check, including external status contexts\n(GitLab CI, ",{"type":40,"tag":83,"props":4478,"children":4480},{"className":4479},[],[4481],{"type":46,"value":4482},"copy-pr-bot",{"type":46,"value":4484},", etc.) that ",{"type":40,"tag":83,"props":4486,"children":4488},{"className":4487},[],[4489],{"type":46,"value":4490},"gh api ...\u002Factions\u002Fruns\u002F...\u002Fjobs",{"type":46,"value":4492},"\ndoes NOT show.",{"type":40,"tag":49,"props":4494,"children":4495},{},[4496],{"type":40,"tag":170,"props":4497,"children":4498},{},[4499],{"type":46,"value":4500},"Outer-loop iteration (each iteration is a few tool calls):",{"type":40,"tag":73,"props":4502,"children":4503},{},[4504,4515,4534,5961],{"type":40,"tag":77,"props":4505,"children":4506},{},[4507,4513],{"type":40,"tag":83,"props":4508,"children":4510},{"className":4509},[],[4511],{"type":46,"value":4512},"latest_sha=$(git rev-parse HEAD)",{"type":46,"value":4514}," (one Bash call).",{"type":40,"tag":77,"props":4516,"children":4517},{},[4518,4520,4526,4528],{"type":46,"value":4519},"Post ",{"type":40,"tag":83,"props":4521,"children":4523},{"className":4522},[],[4524],{"type":46,"value":4525},"\u002Fok to test $latest_sha",{"type":46,"value":4527}," on the PR:\n",{"type":40,"tag":83,"props":4529,"children":4531},{"className":4530},[],[4532],{"type":46,"value":4533},"gh pr comment \u003CPR_NUMBER> --repo $REPO --body \"\u002Fok to test $latest_sha\"",{"type":40,"tag":77,"props":4535,"children":4536},{},[4537,4539,4545,4546,4552,4553,5948,5951,5953,5959],{"type":46,"value":4538},"ONE blocking Bash tool call. This is the inner loop. Copy this\ntemplate verbatim, only changing ",{"type":40,"tag":83,"props":4540,"children":4542},{"className":4541},[],[4543],{"type":46,"value":4544},"REPO",{"type":46,"value":4177},{"type":40,"tag":83,"props":4547,"children":4549},{"className":4548},[],[4550],{"type":46,"value":4551},"PR",{"type":46,"value":324},{"type":40,"tag":488,"props":4554,"children":4556},{"className":680,"code":4555,"language":682,"meta":496,"style":496},"REPO='NVIDIA\u002FMegatron-LM'\nPR='\u003CPR_NUMBER>'\n# Names matched case-insensitively, anchored to the START of the name.\nEXEMPT='copy-pr-bot|is-not-external-contributor|greptile|coderabbit|codeowners|.*review|.*approval|codecov|coverage|build-docs|doc-build|readthedocs|sphinx'\n# Sentinel check that tells us CI has fully run. Update this if the\n# aggregate gate job is renamed.\nSENTINEL='Nemo_CICD_Test'\n\nwhile true; do\n  # Normalize both CheckRun (.status \u002F .conclusion) and StatusContext\n  # (.state) entries into the same {name, status, conclusion} shape.\n  rollup=$(gh pr view \"$PR\" --repo \"$REPO\" --json statusCheckRollup --jq '\n    .statusCheckRollup[] | [\n      (.name \u002F\u002F .context \u002F\u002F \"?\"),\n      (if .__typename == \"StatusContext\" then\n         (if (.state == \"PENDING\" or .state == \"EXPECTED\") then \"IN_PROGRESS\"\n          else \"COMPLETED\" end)\n       else (.status \u002F\u002F \"UNKNOWN\") end),\n      (if .__typename == \"StatusContext\" then\n         (if .state == \"SUCCESS\" then \"SUCCESS\"\n          elif (.state == \"FAILURE\" or .state == \"ERROR\") then \"FAILURE\"\n          else \"NEUTRAL\" end)\n       else (.conclusion \u002F\u002F \"UNKNOWN\") end)\n    ] | @tsv')\n\n  # Sentinel: do NOT declare green until the CI aggregate gate has\n  # reached a terminal state. Before \u002Fok to test triggers the run,\n  # the sentinel is absent; while CI is running, it's IN_PROGRESS.\n  sentinel_line=$(printf '%s\\n' \"$rollup\" | awk -F'\\t' -v s=\"$SENTINEL\" '$1 == s')\n  sentinel_status=$(printf '%s\\n' \"$sentinel_line\" | awk -F'\\t' 'NR==1 {print $2}')\n  if [ \"$sentinel_status\" != \"COMPLETED\" ]; then\n    echo \"=== $(date -u) waiting for $SENTINEL (status: ${sentinel_status:-absent}) ===\"\n    sleep 120\n    continue\n  fi\n\n  # Classify non-exempt checks (exempt list applied to the NAME only).\n  non_exempt=$(printf '%s\\n' \"$rollup\" | awk -F'\\t' -v p=\"^($EXEMPT)\" 'tolower($1) !~ tolower(p)')\n  failed=$(printf '%s\\n' \"$non_exempt\" | awk -F'\\t' '$2 == \"COMPLETED\" && $3 !~ \u002F^(SUCCESS|SKIPPED|NEUTRAL)$\u002F')\n  pending=$(printf '%s\\n' \"$non_exempt\" | awk -F'\\t' '$2 != \"COMPLETED\"')\n\n  if [ -n \"$failed\" ]; then\n    echo \"=== NON-EXEMPT FAILURES ===\"\n    printf '%s\\n' \"$failed\"\n    echo \"RESULT=FAILURE\"\n    exit 0\n  fi\n  if [ -n \"$pending\" ]; then\n    # Sentinel is COMPLETED but a non-exempt check is still pending —\n    # rare but possible. Keep waiting; do NOT ship.\n    echo \"=== $(date -u) sentinel done but non-exempt checks still pending ===\"\n    printf '%s\\n' \"$pending\"\n    sleep 120\n    continue\n  fi\n\n  echo \"=== ALL NON-EXEMPT CHECKS COMPLETED GREEN ===\"\n  printf '%s\\n' \"$non_exempt\"\n  echo \"RESULT=GREEN\"\n  exit 0\ndone\n",[4557],{"type":40,"tag":83,"props":4558,"children":4559},{"__ignoreMap":496},[4560,4584,4608,4616,4641,4649,4657,4681,4688,4708,4716,4724,4799,4807,4815,4823,4831,4839,4847,4854,4862,4870,4878,4886,4902,4909,4917,4925,4933,5039,5121,5171,5251,5264,5272,5279,5286,5294,5406,5488,5569,5576,5612,5632,5663,5683,5695,5702,5738,5746,5754,5794,5825,5836,5843,5850,5857,5877,5909,5929,5941],{"type":40,"tag":688,"props":4561,"children":4562},{"class":690,"line":691},[4563,4567,4571,4575,4580],{"type":40,"tag":688,"props":4564,"children":4565},{"style":744},[4566],{"type":46,"value":4544},{"type":40,"tag":688,"props":4568,"children":4569},{"style":717},[4570],{"type":46,"value":1630},{"type":40,"tag":688,"props":4572,"children":4573},{"style":717},[4574],{"type":46,"value":2326},{"type":40,"tag":688,"props":4576,"children":4577},{"style":701},[4578],{"type":46,"value":4579},"NVIDIA\u002FMegatron-LM",{"type":40,"tag":688,"props":4581,"children":4582},{"style":717},[4583],{"type":46,"value":2336},{"type":40,"tag":688,"props":4585,"children":4586},{"class":690,"line":750},[4587,4591,4595,4599,4604],{"type":40,"tag":688,"props":4588,"children":4589},{"style":744},[4590],{"type":46,"value":4551},{"type":40,"tag":688,"props":4592,"children":4593},{"style":717},[4594],{"type":46,"value":1630},{"type":40,"tag":688,"props":4596,"children":4597},{"style":717},[4598],{"type":46,"value":2326},{"type":40,"tag":688,"props":4600,"children":4601},{"style":701},[4602],{"type":46,"value":4603},"\u003CPR_NUMBER>",{"type":40,"tag":688,"props":4605,"children":4606},{"style":717},[4607],{"type":46,"value":2336},{"type":40,"tag":688,"props":4609,"children":4610},{"class":690,"line":779},[4611],{"type":40,"tag":688,"props":4612,"children":4613},{"style":797},[4614],{"type":46,"value":4615},"# Names matched case-insensitively, anchored to the START of the name.\n",{"type":40,"tag":688,"props":4617,"children":4618},{"class":690,"line":793},[4619,4624,4628,4632,4637],{"type":40,"tag":688,"props":4620,"children":4621},{"style":744},[4622],{"type":46,"value":4623},"EXEMPT",{"type":40,"tag":688,"props":4625,"children":4626},{"style":717},[4627],{"type":46,"value":1630},{"type":40,"tag":688,"props":4629,"children":4630},{"style":717},[4631],{"type":46,"value":2326},{"type":40,"tag":688,"props":4633,"children":4634},{"style":701},[4635],{"type":46,"value":4636},"copy-pr-bot|is-not-external-contributor|greptile|coderabbit|codeowners|.*review|.*approval|codecov|coverage|build-docs|doc-build|readthedocs|sphinx",{"type":40,"tag":688,"props":4638,"children":4639},{"style":717},[4640],{"type":46,"value":2336},{"type":40,"tag":688,"props":4642,"children":4643},{"class":690,"line":803},[4644],{"type":40,"tag":688,"props":4645,"children":4646},{"style":797},[4647],{"type":46,"value":4648},"# Sentinel check that tells us CI has fully run. Update this if the\n",{"type":40,"tag":688,"props":4650,"children":4651},{"class":690,"line":847},[4652],{"type":40,"tag":688,"props":4653,"children":4654},{"style":797},[4655],{"type":46,"value":4656},"# aggregate gate job is renamed.\n",{"type":40,"tag":688,"props":4658,"children":4659},{"class":690,"line":1619},[4660,4665,4669,4673,4677],{"type":40,"tag":688,"props":4661,"children":4662},{"style":744},[4663],{"type":46,"value":4664},"SENTINEL",{"type":40,"tag":688,"props":4666,"children":4667},{"style":717},[4668],{"type":46,"value":1630},{"type":40,"tag":688,"props":4670,"children":4671},{"style":717},[4672],{"type":46,"value":2326},{"type":40,"tag":688,"props":4674,"children":4675},{"style":701},[4676],{"type":46,"value":4337},{"type":40,"tag":688,"props":4678,"children":4679},{"style":717},[4680],{"type":46,"value":2336},{"type":40,"tag":688,"props":4682,"children":4683},{"class":690,"line":1656},[4684],{"type":40,"tag":688,"props":4685,"children":4686},{"emptyLinePlaceholder":1518},[4687],{"type":46,"value":1521},{"type":40,"tag":688,"props":4689,"children":4690},{"class":690,"line":1690},[4691,4696,4700,4704],{"type":40,"tag":688,"props":4692,"children":4693},{"style":1580},[4694],{"type":46,"value":4695},"while",{"type":40,"tag":688,"props":4697,"children":4698},{"style":723},[4699],{"type":46,"value":1569},{"type":40,"tag":688,"props":4701,"children":4702},{"style":717},[4703],{"type":46,"value":1830},{"type":40,"tag":688,"props":4705,"children":4706},{"style":1580},[4707],{"type":46,"value":1954},{"type":40,"tag":688,"props":4709,"children":4710},{"class":690,"line":1699},[4711],{"type":40,"tag":688,"props":4712,"children":4713},{"style":797},[4714],{"type":46,"value":4715},"  # Normalize both CheckRun (.status \u002F .conclusion) and StatusContext\n",{"type":40,"tag":688,"props":4717,"children":4718},{"class":690,"line":1723},[4719],{"type":40,"tag":688,"props":4720,"children":4721},{"style":797},[4722],{"type":46,"value":4723},"  # (.state) entries into the same {name, status, conclusion} shape.\n",{"type":40,"tag":688,"props":4725,"children":4726},{"class":690,"line":1747},[4727,4732,4736,4740,4744,4749,4753,4758,4762,4766,4770,4775,4779,4784,4789,4794],{"type":40,"tag":688,"props":4728,"children":4729},{"style":744},[4730],{"type":46,"value":4731},"  rollup",{"type":40,"tag":688,"props":4733,"children":4734},{"style":717},[4735],{"type":46,"value":1534},{"type":40,"tag":688,"props":4737,"children":4738},{"style":695},[4739],{"type":46,"value":4224},{"type":40,"tag":688,"props":4741,"children":4742},{"style":701},[4743],{"type":46,"value":4229},{"type":40,"tag":688,"props":4745,"children":4746},{"style":701},[4747],{"type":46,"value":4748}," view",{"type":40,"tag":688,"props":4750,"children":4751},{"style":717},[4752],{"type":46,"value":766},{"type":40,"tag":688,"props":4754,"children":4755},{"style":744},[4756],{"type":46,"value":4757},"$PR",{"type":40,"tag":688,"props":4759,"children":4760},{"style":717},[4761],{"type":46,"value":1081},{"type":40,"tag":688,"props":4763,"children":4764},{"style":701},[4765],{"type":46,"value":4259},{"type":40,"tag":688,"props":4767,"children":4768},{"style":717},[4769],{"type":46,"value":766},{"type":40,"tag":688,"props":4771,"children":4772},{"style":744},[4773],{"type":46,"value":4774},"$REPO",{"type":40,"tag":688,"props":4776,"children":4777},{"style":717},[4778],{"type":46,"value":1081},{"type":40,"tag":688,"props":4780,"children":4781},{"style":701},[4782],{"type":46,"value":4783}," --json",{"type":40,"tag":688,"props":4785,"children":4786},{"style":701},[4787],{"type":46,"value":4788}," statusCheckRollup",{"type":40,"tag":688,"props":4790,"children":4791},{"style":701},[4792],{"type":46,"value":4793}," --jq",{"type":40,"tag":688,"props":4795,"children":4796},{"style":717},[4797],{"type":46,"value":4798}," '\n",{"type":40,"tag":688,"props":4800,"children":4801},{"class":690,"line":1756},[4802],{"type":40,"tag":688,"props":4803,"children":4804},{"style":701},[4805],{"type":46,"value":4806},"    .statusCheckRollup[] | [\n",{"type":40,"tag":688,"props":4808,"children":4809},{"class":690,"line":1764},[4810],{"type":40,"tag":688,"props":4811,"children":4812},{"style":701},[4813],{"type":46,"value":4814},"      (.name \u002F\u002F .context \u002F\u002F \"?\"),\n",{"type":40,"tag":688,"props":4816,"children":4817},{"class":690,"line":1773},[4818],{"type":40,"tag":688,"props":4819,"children":4820},{"style":701},[4821],{"type":46,"value":4822},"      (if .__typename == \"StatusContext\" then\n",{"type":40,"tag":688,"props":4824,"children":4825},{"class":690,"line":1837},[4826],{"type":40,"tag":688,"props":4827,"children":4828},{"style":701},[4829],{"type":46,"value":4830},"         (if (.state == \"PENDING\" or .state == \"EXPECTED\") then \"IN_PROGRESS\"\n",{"type":40,"tag":688,"props":4832,"children":4833},{"class":690,"line":1859},[4834],{"type":40,"tag":688,"props":4835,"children":4836},{"style":701},[4837],{"type":46,"value":4838},"          else \"COMPLETED\" end)\n",{"type":40,"tag":688,"props":4840,"children":4841},{"class":690,"line":1889},[4842],{"type":40,"tag":688,"props":4843,"children":4844},{"style":701},[4845],{"type":46,"value":4846},"       else (.status \u002F\u002F \"UNKNOWN\") end),\n",{"type":40,"tag":688,"props":4848,"children":4849},{"class":690,"line":1897},[4850],{"type":40,"tag":688,"props":4851,"children":4852},{"style":701},[4853],{"type":46,"value":4822},{"type":40,"tag":688,"props":4855,"children":4856},{"class":690,"line":1905},[4857],{"type":40,"tag":688,"props":4858,"children":4859},{"style":701},[4860],{"type":46,"value":4861},"         (if .state == \"SUCCESS\" then \"SUCCESS\"\n",{"type":40,"tag":688,"props":4863,"children":4864},{"class":690,"line":1914},[4865],{"type":40,"tag":688,"props":4866,"children":4867},{"style":701},[4868],{"type":46,"value":4869},"          elif (.state == \"FAILURE\" or .state == \"ERROR\") then \"FAILURE\"\n",{"type":40,"tag":688,"props":4871,"children":4872},{"class":690,"line":1957},[4873],{"type":40,"tag":688,"props":4874,"children":4875},{"style":701},[4876],{"type":46,"value":4877},"          else \"NEUTRAL\" end)\n",{"type":40,"tag":688,"props":4879,"children":4880},{"class":690,"line":2023},[4881],{"type":40,"tag":688,"props":4882,"children":4883},{"style":701},[4884],{"type":46,"value":4885},"       else (.conclusion \u002F\u002F \"UNKNOWN\") end)\n",{"type":40,"tag":688,"props":4887,"children":4888},{"class":690,"line":2032},[4889,4894,4898],{"type":40,"tag":688,"props":4890,"children":4891},{"style":701},[4892],{"type":46,"value":4893},"    ] | @tsv",{"type":40,"tag":688,"props":4895,"children":4896},{"style":717},[4897],{"type":46,"value":2326},{"type":40,"tag":688,"props":4899,"children":4900},{"style":717},[4901],{"type":46,"value":1574},{"type":40,"tag":688,"props":4903,"children":4904},{"class":690,"line":2041},[4905],{"type":40,"tag":688,"props":4906,"children":4907},{"emptyLinePlaceholder":1518},[4908],{"type":46,"value":1521},{"type":40,"tag":688,"props":4910,"children":4911},{"class":690,"line":2050},[4912],{"type":40,"tag":688,"props":4913,"children":4914},{"style":797},[4915],{"type":46,"value":4916},"  # Sentinel: do NOT declare green until the CI aggregate gate has\n",{"type":40,"tag":688,"props":4918,"children":4919},{"class":690,"line":2081},[4920],{"type":40,"tag":688,"props":4921,"children":4922},{"style":797},[4923],{"type":46,"value":4924},"  # reached a terminal state. Before \u002Fok to test triggers the run,\n",{"type":40,"tag":688,"props":4926,"children":4927},{"class":690,"line":2090},[4928],{"type":40,"tag":688,"props":4929,"children":4930},{"style":797},[4931],{"type":46,"value":4932},"  # the sentinel is absent; while CI is running, it's IN_PROGRESS.\n",{"type":40,"tag":688,"props":4934,"children":4935},{"class":690,"line":2099},[4936,4941,4945,4949,4953,4957,4961,4965,4970,4974,4978,4982,4987,4991,4996,5000,5004,5009,5013,5018,5022,5026,5031,5035],{"type":40,"tag":688,"props":4937,"children":4938},{"style":744},[4939],{"type":46,"value":4940},"  sentinel_line",{"type":40,"tag":688,"props":4942,"children":4943},{"style":717},[4944],{"type":46,"value":1534},{"type":40,"tag":688,"props":4946,"children":4947},{"style":723},[4948],{"type":46,"value":3192},{"type":40,"tag":688,"props":4950,"children":4951},{"style":717},[4952],{"type":46,"value":2456},{"type":40,"tag":688,"props":4954,"children":4955},{"style":701},[4956],{"type":46,"value":3144},{"type":40,"tag":688,"props":4958,"children":4959},{"style":717},[4960],{"type":46,"value":2326},{"type":40,"tag":688,"props":4962,"children":4963},{"style":717},[4964],{"type":46,"value":766},{"type":40,"tag":688,"props":4966,"children":4967},{"style":744},[4968],{"type":46,"value":4969},"$rollup",{"type":40,"tag":688,"props":4971,"children":4972},{"style":717},[4973],{"type":46,"value":1081},{"type":40,"tag":688,"props":4975,"children":4976},{"style":717},[4977],{"type":46,"value":3221},{"type":40,"tag":688,"props":4979,"children":4980},{"style":695},[4981],{"type":46,"value":4069},{"type":40,"tag":688,"props":4983,"children":4984},{"style":701},[4985],{"type":46,"value":4986}," -F",{"type":40,"tag":688,"props":4988,"children":4989},{"style":717},[4990],{"type":46,"value":2326},{"type":40,"tag":688,"props":4992,"children":4993},{"style":701},[4994],{"type":46,"value":4995},"\\t",{"type":40,"tag":688,"props":4997,"children":4998},{"style":717},[4999],{"type":46,"value":2326},{"type":40,"tag":688,"props":5001,"children":5002},{"style":701},[5003],{"type":46,"value":714},{"type":40,"tag":688,"props":5005,"children":5006},{"style":701},[5007],{"type":46,"value":5008}," s=",{"type":40,"tag":688,"props":5010,"children":5011},{"style":717},[5012],{"type":46,"value":1081},{"type":40,"tag":688,"props":5014,"children":5015},{"style":744},[5016],{"type":46,"value":5017},"$SENTINEL",{"type":40,"tag":688,"props":5019,"children":5020},{"style":717},[5021],{"type":46,"value":1081},{"type":40,"tag":688,"props":5023,"children":5024},{"style":717},[5025],{"type":46,"value":2456},{"type":40,"tag":688,"props":5027,"children":5028},{"style":701},[5029],{"type":46,"value":5030},"$1 == s",{"type":40,"tag":688,"props":5032,"children":5033},{"style":717},[5034],{"type":46,"value":2326},{"type":40,"tag":688,"props":5036,"children":5037},{"style":717},[5038],{"type":46,"value":1574},{"type":40,"tag":688,"props":5040,"children":5041},{"class":690,"line":2107},[5042,5047,5051,5055,5059,5063,5067,5071,5076,5080,5084,5088,5092,5096,5100,5104,5108,5113,5117],{"type":40,"tag":688,"props":5043,"children":5044},{"style":744},[5045],{"type":46,"value":5046},"  sentinel_status",{"type":40,"tag":688,"props":5048,"children":5049},{"style":717},[5050],{"type":46,"value":1534},{"type":40,"tag":688,"props":5052,"children":5053},{"style":723},[5054],{"type":46,"value":3192},{"type":40,"tag":688,"props":5056,"children":5057},{"style":717},[5058],{"type":46,"value":2456},{"type":40,"tag":688,"props":5060,"children":5061},{"style":701},[5062],{"type":46,"value":3144},{"type":40,"tag":688,"props":5064,"children":5065},{"style":717},[5066],{"type":46,"value":2326},{"type":40,"tag":688,"props":5068,"children":5069},{"style":717},[5070],{"type":46,"value":766},{"type":40,"tag":688,"props":5072,"children":5073},{"style":744},[5074],{"type":46,"value":5075},"$sentinel_line",{"type":40,"tag":688,"props":5077,"children":5078},{"style":717},[5079],{"type":46,"value":1081},{"type":40,"tag":688,"props":5081,"children":5082},{"style":717},[5083],{"type":46,"value":3221},{"type":40,"tag":688,"props":5085,"children":5086},{"style":695},[5087],{"type":46,"value":4069},{"type":40,"tag":688,"props":5089,"children":5090},{"style":701},[5091],{"type":46,"value":4986},{"type":40,"tag":688,"props":5093,"children":5094},{"style":717},[5095],{"type":46,"value":2326},{"type":40,"tag":688,"props":5097,"children":5098},{"style":701},[5099],{"type":46,"value":4995},{"type":40,"tag":688,"props":5101,"children":5102},{"style":717},[5103],{"type":46,"value":2326},{"type":40,"tag":688,"props":5105,"children":5106},{"style":717},[5107],{"type":46,"value":2456},{"type":40,"tag":688,"props":5109,"children":5110},{"style":701},[5111],{"type":46,"value":5112},"NR==1 {print $2}",{"type":40,"tag":688,"props":5114,"children":5115},{"style":717},[5116],{"type":46,"value":2326},{"type":40,"tag":688,"props":5118,"children":5119},{"style":717},[5120],{"type":46,"value":1574},{"type":40,"tag":688,"props":5122,"children":5123},{"class":690,"line":2116},[5124,5128,5132,5136,5141,5145,5150,5154,5159,5163,5167],{"type":40,"tag":688,"props":5125,"children":5126},{"style":1580},[5127],{"type":46,"value":1963},{"type":40,"tag":688,"props":5129,"children":5130},{"style":717},[5131],{"type":46,"value":1588},{"type":40,"tag":688,"props":5133,"children":5134},{"style":717},[5135],{"type":46,"value":766},{"type":40,"tag":688,"props":5137,"children":5138},{"style":744},[5139],{"type":46,"value":5140},"$sentinel_status",{"type":40,"tag":688,"props":5142,"children":5143},{"style":717},[5144],{"type":46,"value":1081},{"type":40,"tag":688,"props":5146,"children":5147},{"style":717},[5148],{"type":46,"value":5149}," !=",{"type":40,"tag":688,"props":5151,"children":5152},{"style":717},[5153],{"type":46,"value":766},{"type":40,"tag":688,"props":5155,"children":5156},{"style":701},[5157],{"type":46,"value":5158},"COMPLETED",{"type":40,"tag":688,"props":5160,"children":5161},{"style":717},[5162],{"type":46,"value":1081},{"type":40,"tag":688,"props":5164,"children":5165},{"style":717},[5166],{"type":46,"value":1611},{"type":40,"tag":688,"props":5168,"children":5169},{"style":1580},[5170],{"type":46,"value":1616},{"type":40,"tag":688,"props":5172,"children":5173},{"class":690,"line":2125},[5174,5178,5182,5186,5191,5196,5200,5204,5209,5213,5218,5223,5228,5233,5238,5242,5247],{"type":40,"tag":688,"props":5175,"children":5176},{"style":723},[5177],{"type":46,"value":2056},{"type":40,"tag":688,"props":5179,"children":5180},{"style":717},[5181],{"type":46,"value":766},{"type":40,"tag":688,"props":5183,"children":5184},{"style":701},[5185],{"type":46,"value":3113},{"type":40,"tag":688,"props":5187,"children":5188},{"style":717},[5189],{"type":46,"value":5190},"$(",{"type":40,"tag":688,"props":5192,"children":5193},{"style":695},[5194],{"type":46,"value":5195},"date",{"type":40,"tag":688,"props":5197,"children":5198},{"style":701},[5199],{"type":46,"value":2601},{"type":40,"tag":688,"props":5201,"children":5202},{"style":717},[5203],{"type":46,"value":731},{"type":40,"tag":688,"props":5205,"children":5206},{"style":701},[5207],{"type":46,"value":5208}," waiting for ",{"type":40,"tag":688,"props":5210,"children":5211},{"style":744},[5212],{"type":46,"value":5017},{"type":40,"tag":688,"props":5214,"children":5215},{"style":701},[5216],{"type":46,"value":5217}," (status: ",{"type":40,"tag":688,"props":5219,"children":5220},{"style":717},[5221],{"type":46,"value":5222},"${",{"type":40,"tag":688,"props":5224,"children":5225},{"style":744},[5226],{"type":46,"value":5227},"sentinel_status",{"type":40,"tag":688,"props":5229,"children":5230},{"style":717},[5231],{"type":46,"value":5232},":-",{"type":40,"tag":688,"props":5234,"children":5235},{"style":744},[5236],{"type":46,"value":5237},"absent",{"type":40,"tag":688,"props":5239,"children":5240},{"style":717},[5241],{"type":46,"value":1644},{"type":40,"tag":688,"props":5243,"children":5244},{"style":701},[5245],{"type":46,"value":5246},") ===",{"type":40,"tag":688,"props":5248,"children":5249},{"style":717},[5250],{"type":46,"value":790},{"type":40,"tag":688,"props":5252,"children":5253},{"class":690,"line":2134},[5254,5259],{"type":40,"tag":688,"props":5255,"children":5256},{"style":695},[5257],{"type":46,"value":5258},"    sleep",{"type":40,"tag":688,"props":5260,"children":5261},{"style":3296},[5262],{"type":46,"value":5263}," 120\n",{"type":40,"tag":688,"props":5265,"children":5266},{"class":690,"line":2143},[5267],{"type":40,"tag":688,"props":5268,"children":5269},{"style":1580},[5270],{"type":46,"value":5271},"    continue\n",{"type":40,"tag":688,"props":5273,"children":5274},{"class":690,"line":2152},[5275],{"type":40,"tag":688,"props":5276,"children":5277},{"style":1580},[5278],{"type":46,"value":2087},{"type":40,"tag":688,"props":5280,"children":5281},{"class":690,"line":2161},[5282],{"type":40,"tag":688,"props":5283,"children":5284},{"emptyLinePlaceholder":1518},[5285],{"type":46,"value":1521},{"type":40,"tag":688,"props":5287,"children":5288},{"class":690,"line":2170},[5289],{"type":40,"tag":688,"props":5290,"children":5291},{"style":797},[5292],{"type":46,"value":5293},"  # Classify non-exempt checks (exempt list applied to the NAME only).\n",{"type":40,"tag":688,"props":5295,"children":5296},{"class":690,"line":2179},[5297,5302,5306,5310,5314,5318,5322,5326,5330,5334,5338,5342,5346,5350,5354,5358,5362,5367,5371,5376,5381,5385,5389,5393,5398,5402],{"type":40,"tag":688,"props":5298,"children":5299},{"style":744},[5300],{"type":46,"value":5301},"  non_exempt",{"type":40,"tag":688,"props":5303,"children":5304},{"style":717},[5305],{"type":46,"value":1534},{"type":40,"tag":688,"props":5307,"children":5308},{"style":723},[5309],{"type":46,"value":3192},{"type":40,"tag":688,"props":5311,"children":5312},{"style":717},[5313],{"type":46,"value":2456},{"type":40,"tag":688,"props":5315,"children":5316},{"style":701},[5317],{"type":46,"value":3144},{"type":40,"tag":688,"props":5319,"children":5320},{"style":717},[5321],{"type":46,"value":2326},{"type":40,"tag":688,"props":5323,"children":5324},{"style":717},[5325],{"type":46,"value":766},{"type":40,"tag":688,"props":5327,"children":5328},{"style":744},[5329],{"type":46,"value":4969},{"type":40,"tag":688,"props":5331,"children":5332},{"style":717},[5333],{"type":46,"value":1081},{"type":40,"tag":688,"props":5335,"children":5336},{"style":717},[5337],{"type":46,"value":3221},{"type":40,"tag":688,"props":5339,"children":5340},{"style":695},[5341],{"type":46,"value":4069},{"type":40,"tag":688,"props":5343,"children":5344},{"style":701},[5345],{"type":46,"value":4986},{"type":40,"tag":688,"props":5347,"children":5348},{"style":717},[5349],{"type":46,"value":2326},{"type":40,"tag":688,"props":5351,"children":5352},{"style":701},[5353],{"type":46,"value":4995},{"type":40,"tag":688,"props":5355,"children":5356},{"style":717},[5357],{"type":46,"value":2326},{"type":40,"tag":688,"props":5359,"children":5360},{"style":701},[5361],{"type":46,"value":714},{"type":40,"tag":688,"props":5363,"children":5364},{"style":701},[5365],{"type":46,"value":5366}," p=",{"type":40,"tag":688,"props":5368,"children":5369},{"style":717},[5370],{"type":46,"value":1081},{"type":40,"tag":688,"props":5372,"children":5373},{"style":701},[5374],{"type":46,"value":5375},"^(",{"type":40,"tag":688,"props":5377,"children":5378},{"style":744},[5379],{"type":46,"value":5380},"$EXEMPT",{"type":40,"tag":688,"props":5382,"children":5383},{"style":701},[5384],{"type":46,"value":731},{"type":40,"tag":688,"props":5386,"children":5387},{"style":717},[5388],{"type":46,"value":1081},{"type":40,"tag":688,"props":5390,"children":5391},{"style":717},[5392],{"type":46,"value":2456},{"type":40,"tag":688,"props":5394,"children":5395},{"style":701},[5396],{"type":46,"value":5397},"tolower($1) !~ tolower(p)",{"type":40,"tag":688,"props":5399,"children":5400},{"style":717},[5401],{"type":46,"value":2326},{"type":40,"tag":688,"props":5403,"children":5404},{"style":717},[5405],{"type":46,"value":1574},{"type":40,"tag":688,"props":5407,"children":5408},{"class":690,"line":2188},[5409,5414,5418,5422,5426,5430,5434,5438,5443,5447,5451,5455,5459,5463,5467,5471,5475,5480,5484],{"type":40,"tag":688,"props":5410,"children":5411},{"style":744},[5412],{"type":46,"value":5413},"  failed",{"type":40,"tag":688,"props":5415,"children":5416},{"style":717},[5417],{"type":46,"value":1534},{"type":40,"tag":688,"props":5419,"children":5420},{"style":723},[5421],{"type":46,"value":3192},{"type":40,"tag":688,"props":5423,"children":5424},{"style":717},[5425],{"type":46,"value":2456},{"type":40,"tag":688,"props":5427,"children":5428},{"style":701},[5429],{"type":46,"value":3144},{"type":40,"tag":688,"props":5431,"children":5432},{"style":717},[5433],{"type":46,"value":2326},{"type":40,"tag":688,"props":5435,"children":5436},{"style":717},[5437],{"type":46,"value":766},{"type":40,"tag":688,"props":5439,"children":5440},{"style":744},[5441],{"type":46,"value":5442},"$non_exempt",{"type":40,"tag":688,"props":5444,"children":5445},{"style":717},[5446],{"type":46,"value":1081},{"type":40,"tag":688,"props":5448,"children":5449},{"style":717},[5450],{"type":46,"value":3221},{"type":40,"tag":688,"props":5452,"children":5453},{"style":695},[5454],{"type":46,"value":4069},{"type":40,"tag":688,"props":5456,"children":5457},{"style":701},[5458],{"type":46,"value":4986},{"type":40,"tag":688,"props":5460,"children":5461},{"style":717},[5462],{"type":46,"value":2326},{"type":40,"tag":688,"props":5464,"children":5465},{"style":701},[5466],{"type":46,"value":4995},{"type":40,"tag":688,"props":5468,"children":5469},{"style":717},[5470],{"type":46,"value":2326},{"type":40,"tag":688,"props":5472,"children":5473},{"style":717},[5474],{"type":46,"value":2456},{"type":40,"tag":688,"props":5476,"children":5477},{"style":701},[5478],{"type":46,"value":5479},"$2 == \"COMPLETED\" && $3 !~ \u002F^(SUCCESS|SKIPPED|NEUTRAL)$\u002F",{"type":40,"tag":688,"props":5481,"children":5482},{"style":717},[5483],{"type":46,"value":2326},{"type":40,"tag":688,"props":5485,"children":5486},{"style":717},[5487],{"type":46,"value":1574},{"type":40,"tag":688,"props":5489,"children":5490},{"class":690,"line":2196},[5491,5496,5500,5504,5508,5512,5516,5520,5524,5528,5532,5536,5540,5544,5548,5552,5556,5561,5565],{"type":40,"tag":688,"props":5492,"children":5493},{"style":744},[5494],{"type":46,"value":5495},"  pending",{"type":40,"tag":688,"props":5497,"children":5498},{"style":717},[5499],{"type":46,"value":1534},{"type":40,"tag":688,"props":5501,"children":5502},{"style":723},[5503],{"type":46,"value":3192},{"type":40,"tag":688,"props":5505,"children":5506},{"style":717},[5507],{"type":46,"value":2456},{"type":40,"tag":688,"props":5509,"children":5510},{"style":701},[5511],{"type":46,"value":3144},{"type":40,"tag":688,"props":5513,"children":5514},{"style":717},[5515],{"type":46,"value":2326},{"type":40,"tag":688,"props":5517,"children":5518},{"style":717},[5519],{"type":46,"value":766},{"type":40,"tag":688,"props":5521,"children":5522},{"style":744},[5523],{"type":46,"value":5442},{"type":40,"tag":688,"props":5525,"children":5526},{"style":717},[5527],{"type":46,"value":1081},{"type":40,"tag":688,"props":5529,"children":5530},{"style":717},[5531],{"type":46,"value":3221},{"type":40,"tag":688,"props":5533,"children":5534},{"style":695},[5535],{"type":46,"value":4069},{"type":40,"tag":688,"props":5537,"children":5538},{"style":701},[5539],{"type":46,"value":4986},{"type":40,"tag":688,"props":5541,"children":5542},{"style":717},[5543],{"type":46,"value":2326},{"type":40,"tag":688,"props":5545,"children":5546},{"style":701},[5547],{"type":46,"value":4995},{"type":40,"tag":688,"props":5549,"children":5550},{"style":717},[5551],{"type":46,"value":2326},{"type":40,"tag":688,"props":5553,"children":5554},{"style":717},[5555],{"type":46,"value":2456},{"type":40,"tag":688,"props":5557,"children":5558},{"style":701},[5559],{"type":46,"value":5560},"$2 != \"COMPLETED\"",{"type":40,"tag":688,"props":5562,"children":5563},{"style":717},[5564],{"type":46,"value":2326},{"type":40,"tag":688,"props":5566,"children":5567},{"style":717},[5568],{"type":46,"value":1574},{"type":40,"tag":688,"props":5570,"children":5571},{"class":690,"line":2205},[5572],{"type":40,"tag":688,"props":5573,"children":5574},{"emptyLinePlaceholder":1518},[5575],{"type":46,"value":1521},{"type":40,"tag":688,"props":5577,"children":5578},{"class":690,"line":2214},[5579,5583,5587,5591,5595,5600,5604,5608],{"type":40,"tag":688,"props":5580,"children":5581},{"style":1580},[5582],{"type":46,"value":1963},{"type":40,"tag":688,"props":5584,"children":5585},{"style":717},[5586],{"type":46,"value":1588},{"type":40,"tag":688,"props":5588,"children":5589},{"style":717},[5590],{"type":46,"value":1593},{"type":40,"tag":688,"props":5592,"children":5593},{"style":717},[5594],{"type":46,"value":766},{"type":40,"tag":688,"props":5596,"children":5597},{"style":744},[5598],{"type":46,"value":5599},"$failed",{"type":40,"tag":688,"props":5601,"children":5602},{"style":717},[5603],{"type":46,"value":1081},{"type":40,"tag":688,"props":5605,"children":5606},{"style":717},[5607],{"type":46,"value":1611},{"type":40,"tag":688,"props":5609,"children":5610},{"style":1580},[5611],{"type":46,"value":1616},{"type":40,"tag":688,"props":5613,"children":5614},{"class":690,"line":2223},[5615,5619,5623,5628],{"type":40,"tag":688,"props":5616,"children":5617},{"style":723},[5618],{"type":46,"value":2056},{"type":40,"tag":688,"props":5620,"children":5621},{"style":717},[5622],{"type":46,"value":766},{"type":40,"tag":688,"props":5624,"children":5625},{"style":701},[5626],{"type":46,"value":5627},"=== NON-EXEMPT FAILURES ===",{"type":40,"tag":688,"props":5629,"children":5630},{"style":717},[5631],{"type":46,"value":790},{"type":40,"tag":688,"props":5633,"children":5634},{"class":690,"line":2232},[5635,5639,5643,5647,5651,5655,5659],{"type":40,"tag":688,"props":5636,"children":5637},{"style":723},[5638],{"type":46,"value":3135},{"type":40,"tag":688,"props":5640,"children":5641},{"style":717},[5642],{"type":46,"value":2456},{"type":40,"tag":688,"props":5644,"children":5645},{"style":701},[5646],{"type":46,"value":3144},{"type":40,"tag":688,"props":5648,"children":5649},{"style":717},[5650],{"type":46,"value":2326},{"type":40,"tag":688,"props":5652,"children":5653},{"style":717},[5654],{"type":46,"value":766},{"type":40,"tag":688,"props":5656,"children":5657},{"style":744},[5658],{"type":46,"value":5599},{"type":40,"tag":688,"props":5660,"children":5661},{"style":717},[5662],{"type":46,"value":790},{"type":40,"tag":688,"props":5664,"children":5665},{"class":690,"line":2241},[5666,5670,5674,5679],{"type":40,"tag":688,"props":5667,"children":5668},{"style":723},[5669],{"type":46,"value":2056},{"type":40,"tag":688,"props":5671,"children":5672},{"style":717},[5673],{"type":46,"value":766},{"type":40,"tag":688,"props":5675,"children":5676},{"style":701},[5677],{"type":46,"value":5678},"RESULT=FAILURE",{"type":40,"tag":688,"props":5680,"children":5681},{"style":717},[5682],{"type":46,"value":790},{"type":40,"tag":688,"props":5684,"children":5685},{"class":690,"line":2250},[5686,5691],{"type":40,"tag":688,"props":5687,"children":5688},{"style":723},[5689],{"type":46,"value":5690},"    exit",{"type":40,"tag":688,"props":5692,"children":5693},{"style":3296},[5694],{"type":46,"value":3641},{"type":40,"tag":688,"props":5696,"children":5697},{"class":690,"line":2259},[5698],{"type":40,"tag":688,"props":5699,"children":5700},{"style":1580},[5701],{"type":46,"value":2087},{"type":40,"tag":688,"props":5703,"children":5704},{"class":690,"line":2267},[5705,5709,5713,5717,5721,5726,5730,5734],{"type":40,"tag":688,"props":5706,"children":5707},{"style":1580},[5708],{"type":46,"value":1963},{"type":40,"tag":688,"props":5710,"children":5711},{"style":717},[5712],{"type":46,"value":1588},{"type":40,"tag":688,"props":5714,"children":5715},{"style":717},[5716],{"type":46,"value":1593},{"type":40,"tag":688,"props":5718,"children":5719},{"style":717},[5720],{"type":46,"value":766},{"type":40,"tag":688,"props":5722,"children":5723},{"style":744},[5724],{"type":46,"value":5725},"$pending",{"type":40,"tag":688,"props":5727,"children":5728},{"style":717},[5729],{"type":46,"value":1081},{"type":40,"tag":688,"props":5731,"children":5732},{"style":717},[5733],{"type":46,"value":1611},{"type":40,"tag":688,"props":5735,"children":5736},{"style":1580},[5737],{"type":46,"value":1616},{"type":40,"tag":688,"props":5739,"children":5740},{"class":690,"line":2276},[5741],{"type":40,"tag":688,"props":5742,"children":5743},{"style":797},[5744],{"type":46,"value":5745},"    # Sentinel is COMPLETED but a non-exempt check is still pending —\n",{"type":40,"tag":688,"props":5747,"children":5748},{"class":690,"line":2285},[5749],{"type":40,"tag":688,"props":5750,"children":5751},{"style":797},[5752],{"type":46,"value":5753},"    # rare but possible. Keep waiting; do NOT ship.\n",{"type":40,"tag":688,"props":5755,"children":5756},{"class":690,"line":2294},[5757,5761,5765,5769,5773,5777,5781,5785,5790],{"type":40,"tag":688,"props":5758,"children":5759},{"style":723},[5760],{"type":46,"value":2056},{"type":40,"tag":688,"props":5762,"children":5763},{"style":717},[5764],{"type":46,"value":766},{"type":40,"tag":688,"props":5766,"children":5767},{"style":701},[5768],{"type":46,"value":3113},{"type":40,"tag":688,"props":5770,"children":5771},{"style":717},[5772],{"type":46,"value":5190},{"type":40,"tag":688,"props":5774,"children":5775},{"style":695},[5776],{"type":46,"value":5195},{"type":40,"tag":688,"props":5778,"children":5779},{"style":701},[5780],{"type":46,"value":2601},{"type":40,"tag":688,"props":5782,"children":5783},{"style":717},[5784],{"type":46,"value":731},{"type":40,"tag":688,"props":5786,"children":5787},{"style":701},[5788],{"type":46,"value":5789}," sentinel done but non-exempt checks still pending ===",{"type":40,"tag":688,"props":5791,"children":5792},{"style":717},[5793],{"type":46,"value":790},{"type":40,"tag":688,"props":5795,"children":5796},{"class":690,"line":2303},[5797,5801,5805,5809,5813,5817,5821],{"type":40,"tag":688,"props":5798,"children":5799},{"style":723},[5800],{"type":46,"value":3135},{"type":40,"tag":688,"props":5802,"children":5803},{"style":717},[5804],{"type":46,"value":2456},{"type":40,"tag":688,"props":5806,"children":5807},{"style":701},[5808],{"type":46,"value":3144},{"type":40,"tag":688,"props":5810,"children":5811},{"style":717},[5812],{"type":46,"value":2326},{"type":40,"tag":688,"props":5814,"children":5815},{"style":717},[5816],{"type":46,"value":766},{"type":40,"tag":688,"props":5818,"children":5819},{"style":744},[5820],{"type":46,"value":5725},{"type":40,"tag":688,"props":5822,"children":5823},{"style":717},[5824],{"type":46,"value":790},{"type":40,"tag":688,"props":5826,"children":5827},{"class":690,"line":2311},[5828,5832],{"type":40,"tag":688,"props":5829,"children":5830},{"style":695},[5831],{"type":46,"value":5258},{"type":40,"tag":688,"props":5833,"children":5834},{"style":3296},[5835],{"type":46,"value":5263},{"type":40,"tag":688,"props":5837,"children":5838},{"class":690,"line":2339},[5839],{"type":40,"tag":688,"props":5840,"children":5841},{"style":1580},[5842],{"type":46,"value":5271},{"type":40,"tag":688,"props":5844,"children":5845},{"class":690,"line":2365},[5846],{"type":40,"tag":688,"props":5847,"children":5848},{"style":1580},[5849],{"type":46,"value":2087},{"type":40,"tag":688,"props":5851,"children":5852},{"class":690,"line":2373},[5853],{"type":40,"tag":688,"props":5854,"children":5855},{"emptyLinePlaceholder":1518},[5856],{"type":46,"value":1521},{"type":40,"tag":688,"props":5858,"children":5859},{"class":690,"line":2391},[5860,5864,5868,5873],{"type":40,"tag":688,"props":5861,"children":5862},{"style":723},[5863],{"type":46,"value":1843},{"type":40,"tag":688,"props":5865,"children":5866},{"style":717},[5867],{"type":46,"value":766},{"type":40,"tag":688,"props":5869,"children":5870},{"style":701},[5871],{"type":46,"value":5872},"=== ALL NON-EXEMPT CHECKS COMPLETED GREEN ===",{"type":40,"tag":688,"props":5874,"children":5875},{"style":717},[5876],{"type":46,"value":790},{"type":40,"tag":688,"props":5878,"children":5879},{"class":690,"line":2445},[5880,5885,5889,5893,5897,5901,5905],{"type":40,"tag":688,"props":5881,"children":5882},{"style":723},[5883],{"type":46,"value":5884},"  printf",{"type":40,"tag":688,"props":5886,"children":5887},{"style":717},[5888],{"type":46,"value":2456},{"type":40,"tag":688,"props":5890,"children":5891},{"style":701},[5892],{"type":46,"value":3144},{"type":40,"tag":688,"props":5894,"children":5895},{"style":717},[5896],{"type":46,"value":2326},{"type":40,"tag":688,"props":5898,"children":5899},{"style":717},[5900],{"type":46,"value":766},{"type":40,"tag":688,"props":5902,"children":5903},{"style":744},[5904],{"type":46,"value":5442},{"type":40,"tag":688,"props":5906,"children":5907},{"style":717},[5908],{"type":46,"value":790},{"type":40,"tag":688,"props":5910,"children":5911},{"class":690,"line":2524},[5912,5916,5920,5925],{"type":40,"tag":688,"props":5913,"children":5914},{"style":723},[5915],{"type":46,"value":1843},{"type":40,"tag":688,"props":5917,"children":5918},{"style":717},[5919],{"type":46,"value":766},{"type":40,"tag":688,"props":5921,"children":5922},{"style":701},[5923],{"type":46,"value":5924},"RESULT=GREEN",{"type":40,"tag":688,"props":5926,"children":5927},{"style":717},[5928],{"type":46,"value":790},{"type":40,"tag":688,"props":5930,"children":5931},{"class":690,"line":2585},[5932,5937],{"type":40,"tag":688,"props":5933,"children":5934},{"style":723},[5935],{"type":46,"value":5936},"  exit",{"type":40,"tag":688,"props":5938,"children":5939},{"style":3296},[5940],{"type":46,"value":3641},{"type":40,"tag":688,"props":5942,"children":5943},{"class":690,"line":2613},[5944],{"type":40,"tag":688,"props":5945,"children":5946},{"style":1580},[5947],{"type":46,"value":2096},{"type":40,"tag":4100,"props":5949,"children":5950},{},[],{"type":46,"value":5952},"This Bash call blocks for as long as CI takes (minutes to hours). Do\nNOT split it into many short polls interleaved with other tool calls\n— that wastes ",{"type":40,"tag":83,"props":5954,"children":5956},{"className":5955},[],[5957],{"type":46,"value":5958},"--max-turns",{"type":46,"value":5960}," and creates windows where you could lose\ntrack of the loop state.",{"type":40,"tag":77,"props":5962,"children":5963},{},[5964,5966],{"type":46,"value":5965},"Read the tool output:",{"type":40,"tag":201,"props":5967,"children":5968},{},[5969,6217],{"type":40,"tag":77,"props":5970,"children":5971},{},[5972,5974,5979,5981,5987,5989,6201,6207,6209,6215],{"type":46,"value":5973},"If ",{"type":40,"tag":83,"props":5975,"children":5977},{"className":5976},[],[5978],{"type":46,"value":5678},{"type":46,"value":5980},": diagnose via\n",{"type":40,"tag":83,"props":5982,"children":5984},{"className":5983},[],[5985],{"type":46,"value":5986},"gh api repos\u002F$REPO\u002Factions\u002Fjobs\u002F\u003CJOB_ID>\u002Flogs",{"type":46,"value":5988}," (or the\nexternal-context equivalent) and fix the code. The Phase 1\ncommit is immutable; fixes accumulate in a single rolling fix\ncommit on top of it:\n",{"type":40,"tag":488,"props":5990,"children":5992},{"className":680,"code":5991,"language":682,"meta":496,"style":496},"git add -A\nif git rev-parse --verify HEAD^2 >\u002Fdev\u002Fnull 2>&1; then\n  # HEAD has two parents → still the Phase 1 merge commit.\n  # First failure of this run: create the fix commit.\n  git commit -m \"fix: post-CI corrections\"\n  git push origin \"$BRANCH\"\nelse\n  # HEAD is the existing fix commit → amend it.\n  git commit --amend --no-edit\n  git push --force-with-lease origin \"$BRANCH\"\nfi\n",[5993],{"type":40,"tag":83,"props":5994,"children":5995},{"__ignoreMap":496},[5996,6011,6055,6063,6071,6100,6127,6134,6142,6162,6194],{"type":40,"tag":688,"props":5997,"children":5998},{"class":690,"line":691},[5999,6003,6007],{"type":40,"tag":688,"props":6000,"children":6001},{"style":695},[6002],{"type":46,"value":1539},{"type":40,"tag":688,"props":6004,"children":6005},{"style":701},[6006],{"type":46,"value":3861},{"type":40,"tag":688,"props":6008,"children":6009},{"style":701},[6010],{"type":46,"value":3866},{"type":40,"tag":688,"props":6012,"children":6013},{"class":690,"line":750},[6014,6018,6022,6027,6032,6037,6042,6046,6051],{"type":40,"tag":688,"props":6015,"children":6016},{"style":1580},[6017],{"type":46,"value":1583},{"type":40,"tag":688,"props":6019,"children":6020},{"style":695},[6021],{"type":46,"value":1788},{"type":40,"tag":688,"props":6023,"children":6024},{"style":701},[6025],{"type":46,"value":6026}," rev-parse",{"type":40,"tag":688,"props":6028,"children":6029},{"style":701},[6030],{"type":46,"value":6031}," --verify",{"type":40,"tag":688,"props":6033,"children":6034},{"style":701},[6035],{"type":46,"value":6036}," HEAD^2",{"type":40,"tag":688,"props":6038,"children":6039},{"style":717},[6040],{"type":46,"value":6041}," >",{"type":40,"tag":688,"props":6043,"children":6044},{"style":701},[6045],{"type":46,"value":2743},{"type":40,"tag":688,"props":6047,"children":6048},{"style":717},[6049],{"type":46,"value":6050}," 2>&1;",{"type":40,"tag":688,"props":6052,"children":6053},{"style":1580},[6054],{"type":46,"value":1616},{"type":40,"tag":688,"props":6056,"children":6057},{"class":690,"line":779},[6058],{"type":40,"tag":688,"props":6059,"children":6060},{"style":797},[6061],{"type":46,"value":6062},"  # HEAD has two parents → still the Phase 1 merge commit.\n",{"type":40,"tag":688,"props":6064,"children":6065},{"class":690,"line":793},[6066],{"type":40,"tag":688,"props":6067,"children":6068},{"style":797},[6069],{"type":46,"value":6070},"  # First failure of this run: create the fix commit.\n",{"type":40,"tag":688,"props":6072,"children":6073},{"class":690,"line":803},[6074,6078,6082,6087,6091,6096],{"type":40,"tag":688,"props":6075,"children":6076},{"style":695},[6077],{"type":46,"value":2706},{"type":40,"tag":688,"props":6079,"children":6080},{"style":701},[6081],{"type":46,"value":3878},{"type":40,"tag":688,"props":6083,"children":6084},{"style":701},[6085],{"type":46,"value":6086}," -m",{"type":40,"tag":688,"props":6088,"children":6089},{"style":717},[6090],{"type":46,"value":766},{"type":40,"tag":688,"props":6092,"children":6093},{"style":701},[6094],{"type":46,"value":6095},"fix: post-CI corrections",{"type":40,"tag":688,"props":6097,"children":6098},{"style":717},[6099],{"type":46,"value":790},{"type":40,"tag":688,"props":6101,"children":6102},{"class":690,"line":847},[6103,6107,6111,6115,6119,6123],{"type":40,"tag":688,"props":6104,"children":6105},{"style":695},[6106],{"type":46,"value":2706},{"type":40,"tag":688,"props":6108,"children":6109},{"style":701},[6110],{"type":46,"value":3913},{"type":40,"tag":688,"props":6112,"children":6113},{"style":701},[6114],{"type":46,"value":3922},{"type":40,"tag":688,"props":6116,"children":6117},{"style":717},[6118],{"type":46,"value":766},{"type":40,"tag":688,"props":6120,"children":6121},{"style":744},[6122],{"type":46,"value":88},{"type":40,"tag":688,"props":6124,"children":6125},{"style":717},[6126],{"type":46,"value":790},{"type":40,"tag":688,"props":6128,"children":6129},{"class":690,"line":1619},[6130],{"type":40,"tag":688,"props":6131,"children":6132},{"style":1580},[6133],{"type":46,"value":1696},{"type":40,"tag":688,"props":6135,"children":6136},{"class":690,"line":1656},[6137],{"type":40,"tag":688,"props":6138,"children":6139},{"style":797},[6140],{"type":46,"value":6141},"  # HEAD is the existing fix commit → amend it.\n",{"type":40,"tag":688,"props":6143,"children":6144},{"class":690,"line":1690},[6145,6149,6153,6157],{"type":40,"tag":688,"props":6146,"children":6147},{"style":695},[6148],{"type":46,"value":2706},{"type":40,"tag":688,"props":6150,"children":6151},{"style":701},[6152],{"type":46,"value":3878},{"type":40,"tag":688,"props":6154,"children":6155},{"style":701},[6156],{"type":46,"value":3883},{"type":40,"tag":688,"props":6158,"children":6159},{"style":701},[6160],{"type":46,"value":6161}," --no-edit\n",{"type":40,"tag":688,"props":6163,"children":6164},{"class":690,"line":1699},[6165,6169,6173,6178,6182,6186,6190],{"type":40,"tag":688,"props":6166,"children":6167},{"style":695},[6168],{"type":46,"value":2706},{"type":40,"tag":688,"props":6170,"children":6171},{"style":701},[6172],{"type":46,"value":3913},{"type":40,"tag":688,"props":6174,"children":6175},{"style":701},[6176],{"type":46,"value":6177}," --force-with-lease",{"type":40,"tag":688,"props":6179,"children":6180},{"style":701},[6181],{"type":46,"value":3922},{"type":40,"tag":688,"props":6183,"children":6184},{"style":717},[6185],{"type":46,"value":766},{"type":40,"tag":688,"props":6187,"children":6188},{"style":744},[6189],{"type":46,"value":88},{"type":40,"tag":688,"props":6191,"children":6192},{"style":717},[6193],{"type":46,"value":790},{"type":40,"tag":688,"props":6195,"children":6196},{"class":690,"line":1723},[6197],{"type":40,"tag":688,"props":6198,"children":6199},{"style":1580},[6200],{"type":46,"value":1753},{"type":40,"tag":83,"props":6202,"children":6204},{"className":6203},[],[6205],{"type":46,"value":6206},"--force-with-lease",{"type":46,"value":6208}," (not ",{"type":40,"tag":83,"props":6210,"children":6212},{"className":6211},[],[6213],{"type":46,"value":6214},"--force",{"type":46,"value":6216},"): if a human pushed onto the\nbranch since the bot last fetched, the lease aborts the push\ninstead of clobbering them — fetch and decide what to do.\nStart a new outer-loop iteration at step 1 with the new HEAD SHA.",{"type":40,"tag":77,"props":6218,"children":6219},{},[6220,6221,6226],{"type":46,"value":5973},{"type":40,"tag":83,"props":6222,"children":6224},{"className":6223},[],[6225],{"type":46,"value":5924},{"type":46,"value":6227},": outer loop is done. Proceed to Phase 4.",{"type":40,"tag":49,"props":6229,"children":6230},{},[6231,6236,6237,6243,6245,6251,6253,6258,6260,6266,6268,6274,6275,6281],{"type":40,"tag":170,"props":6232,"children":6233},{},[6234],{"type":46,"value":6235},"Why not wait-for-run-to-register first?",{"type":46,"value":4468},{"type":40,"tag":83,"props":6238,"children":6240},{"className":6239},[],[6241],{"type":46,"value":6242},"gh pr comment",{"type":46,"value":6244}," with\n",{"type":40,"tag":83,"props":6246,"children":6248},{"className":6247},[],[6249],{"type":46,"value":6250},"\u002Fok to test \u003Csha>",{"type":46,"value":6252}," is handled by ",{"type":40,"tag":83,"props":6254,"children":6256},{"className":6255},[],[6257],{"type":46,"value":4482},{"type":46,"value":6259},", which takes a few\nseconds to trigger the CI run. The ",{"type":40,"tag":83,"props":6261,"children":6263},{"className":6262},[],[6264],{"type":46,"value":6265},"statusCheckRollup",{"type":46,"value":6267}," poll in step 3\nwill initially show checks in ",{"type":40,"tag":83,"props":6269,"children":6271},{"className":6270},[],[6272],{"type":46,"value":6273},"PENDING",{"type":46,"value":3772},{"type":40,"tag":83,"props":6276,"children":6278},{"className":6277},[],[6279],{"type":46,"value":6280},"QUEUED",{"type":46,"value":6282},"; that's fine — the\ninner loop treats those as \"keep waiting\" and will see them advance as\nCI progresses. No separate registration poll needed.",{"type":40,"tag":66,"props":6284,"children":6286},{"id":6285},"anti-patterns-what-went-wrong-on-run-24800621116",[6287],{"type":46,"value":6288},"Anti-Patterns (what went wrong on run 24800621116)",{"type":40,"tag":201,"props":6290,"children":6291},{},[6292,6302,6340,6350,6373,6414,6447],{"type":40,"tag":77,"props":6293,"children":6294},{},[6295,6300],{"type":40,"tag":170,"props":6296,"children":6297},{},[6298],{"type":46,"value":6299},"Do NOT classify a queued\u002Fin-progress job as \"infrastructure-\nblocked\" and ship.",{"type":46,"value":6301}," A stuck queue drains eventually — wait. If the\njob eventually passes, great; if it fails, go fix it.",{"type":40,"tag":77,"props":6303,"children":6304},{},[6305,6331,6333,6338],{"type":40,"tag":170,"props":6306,"children":6307},{},[6308,6310,6315,6317,6322,6323,6329],{"type":46,"value":6309},"Do NOT mark ready while any required check is ",{"type":40,"tag":83,"props":6311,"children":6313},{"className":6312},[],[6314],{"type":46,"value":6273},{"type":46,"value":6316}," \u002F\n",{"type":40,"tag":83,"props":6318,"children":6320},{"className":6319},[],[6321],{"type":46,"value":6280},{"type":46,"value":3772},{"type":40,"tag":83,"props":6324,"children":6326},{"className":6325},[],[6327],{"type":46,"value":6328},"IN_PROGRESS",{"type":46,"value":6330}," on the HEAD SHA.",{"type":46,"value":6332}," A push is not a pass;\nonly a ",{"type":40,"tag":83,"props":6334,"children":6336},{"className":6335},[],[6337],{"type":46,"value":5158},{"type":46,"value":6339}," + green status is.",{"type":40,"tag":77,"props":6341,"children":6342},{},[6343,6348],{"type":40,"tag":170,"props":6344,"children":6345},{},[6346],{"type":46,"value":6347},"Do NOT declare an untested job \"pre-existing.\"",{"type":46,"value":6349}," Pre-existing\nmeans the test ran to completion and failed the same way on recent\ndev CI. A job that never ran on your PR cannot be pre-existing.",{"type":40,"tag":77,"props":6351,"children":6352},{},[6353,6365,6367,6372],{"type":40,"tag":170,"props":6354,"children":6355},{},[6356,6358,6363],{"type":46,"value":6357},"Do NOT use ",{"type":40,"tag":83,"props":6359,"children":6361},{"className":6360},[],[6362],{"type":46,"value":4490},{"type":46,"value":6364}," alone",{"type":46,"value":6366}," as the gate\nsignal. External status contexts (GitLab CI pipelines, copy-pr-bot\nstatus, etc.) do NOT appear there. Use ",{"type":40,"tag":83,"props":6368,"children":6370},{"className":6369},[],[6371],{"type":46,"value":6265},{"type":46,"value":421},{"type":40,"tag":77,"props":6374,"children":6375},{},[6376,6381,6383,6389,6391,6397,6399,6405,6406,6412],{"type":40,"tag":170,"props":6377,"children":6378},{},[6379],{"type":46,"value":6380},"Do NOT start any background process.",{"type":46,"value":6382}," No ",{"type":40,"tag":83,"props":6384,"children":6386},{"className":6385},[],[6387],{"type":46,"value":6388},"&",{"type":46,"value":6390},", no ",{"type":40,"tag":83,"props":6392,"children":6394},{"className":6393},[],[6395],{"type":46,"value":6396},"nohup",{"type":46,"value":6398},", no\n",{"type":40,"tag":83,"props":6400,"children":6402},{"className":6401},[],[6403],{"type":46,"value":6404},"run_in_background: true",{"type":46,"value":6390},{"type":40,"tag":83,"props":6407,"children":6409},{"className":6408},[],[6410],{"type":46,"value":6411},"ScheduleWakeup",{"type":46,"value":6413},". The GitHub Actions\nstep owns your shell; when the step ends, every background process\nis killed and cannot resume.",{"type":40,"tag":77,"props":6415,"children":6416},{},[6417,6430,6432,6437,6439,6445],{"type":40,"tag":170,"props":6418,"children":6419},{},[6420,6422,6428],{"type":46,"value":6421},"Do NOT push directly to ",{"type":40,"tag":83,"props":6423,"children":6425},{"className":6424},[],[6426],{"type":46,"value":6427},"pull-request\u002F\u003CPR_NUMBER>",{"type":46,"value":6429}," branches.",{"type":46,"value":6431},"\nThe community bot manages those branches when it processes\n",{"type":40,"tag":83,"props":6433,"children":6435},{"className":6434},[],[6436],{"type":46,"value":4200},{"type":46,"value":6438},". Pushing to them directly breaks the CI trigger\nmechanism. Always push to your own sync branch (e.g.\n",{"type":40,"tag":83,"props":6440,"children":6442},{"className":6441},[],[6443],{"type":46,"value":6444},"main2dev\u002F\u003CDATE>",{"type":46,"value":6446},") instead.",{"type":40,"tag":77,"props":6448,"children":6449},{},[6450,6468,6470,6475,6477,6482],{"type":40,"tag":170,"props":6451,"children":6452},{},[6453,6455,6460,6461,6466],{"type":46,"value":6454},"Do NOT forget the ",{"type":40,"tag":83,"props":6456,"children":6458},{"className":6457},[],[6459],{"type":46,"value":4175},{"type":46,"value":4177},{"type":40,"tag":83,"props":6462,"children":6464},{"className":6463},[],[6465],{"type":46,"value":4183},{"type":46,"value":6467},"\nlabels.",{"type":46,"value":6469}," Without ",{"type":40,"tag":83,"props":6471,"children":6473},{"className":6472},[],[6474],{"type":46,"value":4175},{"type":46,"value":6476},", the internal GitLab\nfunctional tests do not run; without ",{"type":40,"tag":83,"props":6478,"children":6480},{"className":6479},[],[6481],{"type":46,"value":4183},{"type":46,"value":6483},", the\nMBridge test suite does not run.",{"type":40,"tag":66,"props":6485,"children":6487},{"id":6486},"failure-investigation",[6488],{"type":46,"value":6489},"Failure Investigation",{"type":40,"tag":73,"props":6491,"children":6492},{},[6493,6503,6549],{"type":40,"tag":77,"props":6494,"children":6495},{},[6496,6498],{"type":46,"value":6497},"Fetch logs: ",{"type":40,"tag":83,"props":6499,"children":6501},{"className":6500},[],[6502],{"type":46,"value":5986},{"type":40,"tag":77,"props":6504,"children":6505},{},[6506,6508,6514,6515,6521,6522,6528,6529,6535,6536,6542,6543],{"type":46,"value":6507},"Grep for: ",{"type":40,"tag":83,"props":6509,"children":6511},{"className":6510},[],[6512],{"type":46,"value":6513},"ImportError",{"type":46,"value":405},{"type":40,"tag":83,"props":6516,"children":6518},{"className":6517},[],[6519],{"type":46,"value":6520},"ModuleNotFoundError",{"type":46,"value":405},{"type":40,"tag":83,"props":6523,"children":6525},{"className":6524},[],[6526],{"type":46,"value":6527},"FAILED",{"type":46,"value":1228},{"type":40,"tag":83,"props":6530,"children":6532},{"className":6531},[],[6533],{"type":46,"value":6534},"would reformat",{"type":46,"value":405},{"type":40,"tag":83,"props":6537,"children":6539},{"className":6538},[],[6540],{"type":46,"value":6541},"line-too-long",{"type":46,"value":405},{"type":40,"tag":83,"props":6544,"children":6546},{"className":6545},[],[6547],{"type":46,"value":6548},"Traceback",{"type":40,"tag":77,"props":6550,"children":6551},{},[6552],{"type":46,"value":6553},"Read the error, understand root cause, fix the code",{"type":40,"tag":66,"props":6555,"children":6557},{"id":6556},"common-issues",[6558],{"type":46,"value":6559},"Common Issues",{"type":40,"tag":201,"props":6561,"children":6562},{},[6563,6573,6591,6631,6663,6673],{"type":40,"tag":77,"props":6564,"children":6565},{},[6566,6571],{"type":40,"tag":170,"props":6567,"children":6568},{},[6569],{"type":46,"value":6570},"ImportError for a class\u002Fmodule:",{"type":46,"value":6572}," Dev test imports a class from a file\nwhere we took main's version. Restore only the missing class\u002Ffunction —\nnot the entire file. If a file's classes are completely different between\nmain and dev, keep both sets of code.",{"type":40,"tag":77,"props":6574,"children":6575},{},[6576,6581,6583,6589],{"type":40,"tag":170,"props":6577,"children":6578},{},[6579],{"type":46,"value":6580},"Formatting failures (black\u002Fpylint):",{"type":46,"value":6582}," Run ",{"type":40,"tag":83,"props":6584,"children":6586},{"className":6585},[],[6587],{"type":46,"value":6588},"black --config pyproject.toml",{"type":46,"value":6590},"\non offending files. For pylint long-line or missing-docstring, edit directly.",{"type":40,"tag":77,"props":6592,"children":6593},{},[6594,6599,6600,6605,6607,6613,6615,6621,6623,6629],{"type":40,"tag":170,"props":6595,"children":6596},{},[6597],{"type":46,"value":6598},"Circular imports:",{"type":46,"value":4468},{"type":40,"tag":83,"props":6601,"children":6603},{"className":6602},[],[6604],{"type":46,"value":1424},{"type":46,"value":6606}," can reorder imports in a way that introduces\ncircular dependencies (e.g. ",{"type":40,"tag":83,"props":6608,"children":6610},{"className":6609},[],[6611],{"type":46,"value":6612},"megatron\u002Flegacy\u002Fmodel\u002F__init__.py",{"type":46,"value":6614},"). Check\n",{"type":40,"tag":83,"props":6616,"children":6618},{"className":6617},[],[6619],{"type":46,"value":6620},"git diff",{"type":46,"value":6622}," on ",{"type":40,"tag":83,"props":6624,"children":6626},{"className":6625},[],[6627],{"type":46,"value":6628},"__init__.py",{"type":46,"value":6630}," files to see if import order changed.",{"type":40,"tag":77,"props":6632,"children":6633},{},[6634,6639,6641,6646,6648,6653,6655,6661],{"type":40,"tag":170,"props":6635,"children":6636},{},[6637],{"type":46,"value":6638},"Dependency version mismatches:",{"type":46,"value":6640}," Taking main's ",{"type":40,"tag":83,"props":6642,"children":6644},{"className":6643},[],[6645],{"type":46,"value":403},{"type":46,"value":6647},"\u002F",{"type":40,"tag":83,"props":6649,"children":6651},{"className":6650},[],[6652],{"type":46,"value":411},{"type":46,"value":6654},"\ncan change library versions in the CI container. Dev-only code may depend on\nnewer versions (e.g. TransformerEngine's ",{"type":40,"tag":83,"props":6656,"children":6658},{"className":6657},[],[6659],{"type":46,"value":6660},"single_grouped_weight",{"type":46,"value":6662},"). If failures\ntrace to missing kwargs or changed APIs in third-party libs, this is the cause.",{"type":40,"tag":77,"props":6664,"children":6665},{},[6666,6671],{"type":40,"tag":170,"props":6667,"children":6668},{},[6669],{"type":46,"value":6670},"API mismatch (AttributeError \u002F TypeError at runtime):",{"type":46,"value":6672}," Main's callers\nreference methods that don't exist (or have different signatures) in dev's\nimplementations. See \"API Mismatch Detection\" in Phase 1. Fix by adding\nshims, renaming methods, or adjusting call signatures.",{"type":40,"tag":77,"props":6674,"children":6675},{},[6676,6681,6683,6689,6691,6697],{"type":40,"tag":170,"props":6677,"children":6678},{},[6679],{"type":46,"value":6680},"Infrastructure \u002F network failures (apt-get, pip download):",{"type":46,"value":6682}," Errors like\n",{"type":40,"tag":83,"props":6684,"children":6686},{"className":6685},[],[6687],{"type":46,"value":6688},"archive.ubuntu.com unreachable",{"type":46,"value":6690}," or ",{"type":40,"tag":83,"props":6692,"children":6694},{"className":6693},[],[6695],{"type":46,"value":6696},"Connection timed out",{"type":46,"value":6698}," during package\ninstallation are transient CI infrastructure issues, not code problems.\nRetry CI with the same SHA. Do not investigate as code failures.",{"type":40,"tag":66,"props":6700,"children":6702},{"id":6701},"pre-existing-failure-verification",[6703],{"type":46,"value":6704},"Pre-Existing Failure Verification",{"type":40,"tag":49,"props":6706,"children":6707},{},[6708],{"type":40,"tag":170,"props":6709,"children":6710},{},[6711],{"type":46,"value":6712},"You MUST empirically verify before classifying any failure as pre-existing.",{"type":40,"tag":73,"props":6714,"children":6715},{},[6716,6725,6736,6748],{"type":40,"tag":77,"props":6717,"children":6718},{},[6719],{"type":40,"tag":83,"props":6720,"children":6722},{"className":6721},[],[6723],{"type":46,"value":6724},"gh pr list --repo $REPO --base dev --state merged --limit 3",{"type":40,"tag":77,"props":6726,"children":6727},{},[6728,6734],{"type":40,"tag":83,"props":6729,"children":6731},{"className":6730},[],[6732],{"type":46,"value":6733},"gh pr checks \u003CPR_NUMBER> --repo $REPO",{"type":46,"value":6735}," on a recently merged dev PR",{"type":40,"tag":77,"props":6737,"children":6738},{},[6739,6741,6746],{"type":46,"value":6740},"If the same test bucket ",{"type":40,"tag":170,"props":6742,"children":6743},{},[6744],{"type":46,"value":6745},"passes on recent dev CI",{"type":46,"value":6747}," → the failure is\nsync-caused. You must fix it.",{"type":40,"tag":77,"props":6749,"children":6750},{},[6751,6753,6758],{"type":46,"value":6752},"Only if the test ",{"type":40,"tag":170,"props":6754,"children":6755},{},[6756],{"type":46,"value":6757},"also fails on recent dev CI",{"type":46,"value":6759}," can you classify it as\npre-existing. Document with the dev PR number and CI run as evidence.",{"type":40,"tag":66,"props":6761,"children":6763},{"id":6762},"internal-gitlab-functional-tests",[6764],{"type":46,"value":6765},"Internal GitLab Functional Tests",{"type":40,"tag":49,"props":6767,"children":6768},{},[6769,6771,6777,6779,6784,6786,6792],{"type":46,"value":6770},"GitHub CI covers unit tests and some integration tests. Internal GitLab\n(",{"type":40,"tag":83,"props":6772,"children":6774},{"className":6773},[],[6775],{"type":46,"value":6776},"gitlab-master.nvidia.com",{"type":46,"value":6778},") runs additional functional tests on\nH100\u002FGB200 hardware that may reveal issues GitHub CI does not catch.\nThese surface in ",{"type":40,"tag":83,"props":6780,"children":6782},{"className":6781},[],[6783],{"type":46,"value":6265},{"type":46,"value":6785}," as external status contexts (the\nbash template already handles them via the ",{"type":40,"tag":83,"props":6787,"children":6789},{"className":6788},[],[6790],{"type":46,"value":6791},"__typename == \"StatusContext\"",{"type":46,"value":6793},"\nbranch).",{"type":40,"tag":201,"props":6795,"children":6796},{},[6797,6802,6807],{"type":40,"tag":77,"props":6798,"children":6799},{},[6800],{"type":46,"value":6801},"Fine-grained activation offloading failures, for example, only showed\nup in GitLab functional tests during PR #4291",{"type":40,"tag":77,"props":6803,"children":6804},{},[6805],{"type":46,"value":6806},"If GitHub CI passes but a reviewer reports GitLab failures,\ninvestigate with the same rigor as GitHub CI failures",{"type":40,"tag":77,"props":6808,"children":6809},{},[6810,6812],{"type":46,"value":6811},"The sync PR should ideally pass both GitHub and GitLab CI before\nmerge, but GitHub CI passing (i.e. the Phase 4 gate above) is the\nminimum before ",{"type":40,"tag":83,"props":6813,"children":6815},{"className":6814},[],[6816],{"type":46,"value":6817},"gh pr ready",{"type":40,"tag":55,"props":6819,"children":6820},{},[],{"type":40,"tag":59,"props":6822,"children":6824},{"id":6823},"phase-4-mark-pr-ready-strict-gate",[6825],{"type":46,"value":6826},"Phase 4: Mark PR Ready — Strict Gate",{"type":40,"tag":49,"props":6828,"children":6829},{},[6830,6832,6837],{"type":46,"value":6831},"Run ",{"type":40,"tag":83,"props":6833,"children":6835},{"className":6834},[],[6836],{"type":46,"value":6817},{"type":46,"value":6838}," ONLY when every non-exempt required check on the latest\nCI run (against the current HEAD SHA) satisfies BOTH:",{"type":40,"tag":73,"props":6840,"children":6841},{},[6842,6889],{"type":40,"tag":77,"props":6843,"children":6844},{},[6845,6851,6853,6859,6860,6866,6867,6873,6874,6880,6882,6888],{"type":40,"tag":83,"props":6846,"children":6848},{"className":6847},[],[6849],{"type":46,"value":6850},"status == \"completed\"",{"type":46,"value":6852}," — NOT ",{"type":40,"tag":83,"props":6854,"children":6856},{"className":6855},[],[6857],{"type":46,"value":6858},"queued",{"type":46,"value":405},{"type":40,"tag":83,"props":6861,"children":6863},{"className":6862},[],[6864],{"type":46,"value":6865},"in_progress",{"type":46,"value":405},{"type":40,"tag":83,"props":6868,"children":6870},{"className":6869},[],[6871],{"type":46,"value":6872},"pending",{"type":46,"value":1228},{"type":40,"tag":83,"props":6875,"children":6877},{"className":6876},[],[6878],{"type":46,"value":6879},"waiting",{"type":46,"value":6881},", or ",{"type":40,"tag":83,"props":6883,"children":6885},{"className":6884},[],[6886],{"type":46,"value":6887},"requested",{"type":46,"value":421},{"type":40,"tag":77,"props":6890,"children":6891},{},[6892,6898],{"type":40,"tag":83,"props":6893,"children":6895},{"className":6894},[],[6896],{"type":46,"value":6897},"conclusion ∈ {\"success\", \"skipped\", \"neutral\"}",{"type":46,"value":421},{"type":40,"tag":49,"props":6900,"children":6901},{},[6902,6904,6909],{"type":46,"value":6903},"If a non-exempt check is pending\u002Fqueued\u002Fin-progress: keep polling; do not\nrun ",{"type":40,"tag":83,"props":6905,"children":6907},{"className":6906},[],[6908],{"type":46,"value":6817},{"type":46,"value":6910},". If it fails: go back to Phase 3's loop.",{"type":40,"tag":49,"props":6912,"children":6913},{},[6914],{"type":46,"value":6915},"The exempt list (approval\u002Fcoverage\u002Fdocs) is defined in Phase 3; only those\nchecks may be ignored.",{"type":40,"tag":49,"props":6917,"children":6918},{},[6919],{"type":46,"value":6920},"A pre-existing failure (same test failing identically on recent dev CI)\nmay be accepted, but ONLY after it has fully run, been empirically\nverified against dev, and documented in the PR body with evidence (dev PR\nnumber + CI run URL).",{"type":40,"tag":488,"props":6922,"children":6925},{"className":6923,"code":6924,"language":46},[491],"gh pr ready \u003CPR_NUMBER> --repo $REPO\n",[6926],{"type":40,"tag":83,"props":6927,"children":6928},{"__ignoreMap":496},[6929],{"type":46,"value":6924},{"type":40,"tag":49,"props":6931,"children":6932},{},[6933],{"type":46,"value":6934},"Then comment on the PR confirming it is ready for human review. The\ncomment should include:",{"type":40,"tag":201,"props":6936,"children":6937},{},[6938,6951,6956,6961,6966,6978],{"type":40,"tag":77,"props":6939,"children":6940},{},[6941,6943,6949],{"type":46,"value":6942},"Which non-exempt checks passed (summary from the bash template's\nfinal ",{"type":40,"tag":83,"props":6944,"children":6946},{"className":6945},[],[6947],{"type":46,"value":6948},"ALL NON-EXEMPT CHECKS COMPLETED GREEN",{"type":46,"value":6950}," output)",{"type":40,"tag":77,"props":6952,"children":6953},{},[6954],{"type":46,"value":6955},"Any documented pre-existing failures with evidence (dev PR number +\nCI run URL showing the same failure on recent dev CI)",{"type":40,"tag":77,"props":6957,"children":6958},{},[6959],{"type":46,"value":6960},"Which files were taken from main vs. merged manually",{"type":40,"tag":77,"props":6962,"children":6963},{},[6964],{"type":46,"value":6965},"Any API mismatches detected and fixed",{"type":40,"tag":77,"props":6967,"children":6968},{},[6969,6971,6976],{"type":46,"value":6970},"Any ",{"type":40,"tag":83,"props":6972,"children":6974},{"className":6973},[],[6975],{"type":46,"value":403},{"type":46,"value":6977}," git source reconciliation performed",{"type":40,"tag":77,"props":6979,"children":6980},{},[6981],{"type":46,"value":6982},"Links to the CI runs that validated the fixes",{"type":40,"tag":55,"props":6984,"children":6985},{},[],{"type":40,"tag":59,"props":6987,"children":6989},{"id":6988},"rules",[6990],{"type":46,"value":6991},"Rules",{"type":40,"tag":201,"props":6993,"children":6994},{},[6995,7000,7026,7036,7046,7057,7069],{"type":40,"tag":77,"props":6996,"children":6997},{},[6998],{"type":46,"value":6999},"Do not globally prioritize main over dev. Preserve recent dev-only additions\nunless a specific main commit intentionally removed them. Main may win\nwholesale only for the explicit override list above; otherwise resolve\nconflicts by combining main's incoming changes with dev's still-unmerged\nfeatures.",{"type":40,"tag":77,"props":7001,"children":7002},{},[7003,7008,7010,7016,7018,7024],{"type":40,"tag":170,"props":7004,"children":7005},{},[7006],{"type":46,"value":7007},"Two-commit policy:",{"type":46,"value":7009}," the PR contains at most two bot-authored\ncommits — the Phase 1 merge commit (immutable once pushed) and a\nsingle rolling fix commit on top. The fix commit is created on\nthe first Phase 3 failure (normal push) and amended on every\nsubsequent failure (",{"type":40,"tag":83,"props":7011,"children":7013},{"className":7012},[],[7014],{"type":46,"value":7015},"git commit --amend --no-edit",{"type":46,"value":7017}," +\n",{"type":40,"tag":83,"props":7019,"children":7021},{"className":7020},[],[7022],{"type":46,"value":7023},"git push --force-with-lease",{"type":46,"value":7025},"). Never modify the Phase 1 commit\nafter pushing it; never let the fix-commit count exceed one.",{"type":40,"tag":77,"props":7027,"children":7028},{},[7029,7031],{"type":46,"value":7030},"CI triggers via comment: ",{"type":40,"tag":83,"props":7032,"children":7034},{"className":7033},[],[7035],{"type":46,"value":6250},{"type":40,"tag":77,"props":7037,"children":7038},{},[7039,7041],{"type":46,"value":7040},"CI runs appear on branch ",{"type":40,"tag":83,"props":7042,"children":7044},{"className":7043},[],[7045],{"type":46,"value":6427},{"type":40,"tag":77,"props":7047,"children":7048},{},[7049,7051],{"type":46,"value":7050},"Git committer identity: ",{"type":40,"tag":83,"props":7052,"children":7054},{"className":7053},[],[7055],{"type":46,"value":7056},"svcnvidia-nemo-ci",{"type":40,"tag":77,"props":7058,"children":7059},{},[7060,7062,7067],{"type":46,"value":7061},"After editing imports, run ",{"type":40,"tag":83,"props":7063,"children":7065},{"className":7064},[],[7066],{"type":46,"value":1424},{"type":46,"value":7068}," on those files",{"type":40,"tag":77,"props":7070,"children":7071},{},[7072,7077],{"type":40,"tag":170,"props":7073,"children":7074},{},[7075],{"type":46,"value":7076},"Push directly to NVIDIA\u002FMegatron-LM",{"type":46,"value":7078}," (not a fork). The bot uses a PAT\nwith write access. CLAUDE.md says \"never push directly\" but that rule is\nfor human contributors — the sync bot is an exception.",{"type":40,"tag":7080,"props":7081,"children":7082},"style",{},[7083],{"type":46,"value":7084},"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":7086,"total":1756},[7087,7103,7112,7124,7138,7151,7165],{"slug":7088,"name":7088,"fn":7089,"description":7090,"org":7091,"tags":7092,"stars":19,"repoUrl":20,"updatedAt":7102},"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},[7093,7096,7099],{"name":7094,"slug":7095,"type":15},"Containers","containers",{"name":7097,"slug":7098,"type":15},"Deployment","deployment",{"name":7100,"slug":7101,"type":15},"Python","python","2026-07-27T06:06:11.249662",{"slug":7104,"name":7104,"fn":7105,"description":7106,"org":7107,"tags":7108,"stars":19,"repoUrl":20,"updatedAt":7111},"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},[7109,7110],{"name":17,"slug":18,"type":15},{"name":7097,"slug":7098,"type":15},"2026-07-14T05:25:59.97109",{"slug":7113,"name":7113,"fn":7114,"description":7115,"org":7116,"tags":7117,"stars":19,"repoUrl":20,"updatedAt":7123},"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},[7118,7119,7120],{"name":17,"slug":18,"type":15},{"name":7097,"slug":7098,"type":15},{"name":7121,"slug":7122,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":7125,"name":7125,"fn":7126,"description":7127,"org":7128,"tags":7129,"stars":19,"repoUrl":20,"updatedAt":7137},"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},[7130,7133,7134],{"name":7131,"slug":7132,"type":15},"Debugging","debugging",{"name":7121,"slug":7122,"type":15},{"name":7135,"slug":7136,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":7139,"name":7139,"fn":7140,"description":7141,"org":7142,"tags":7143,"stars":19,"repoUrl":20,"updatedAt":7150},"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},[7144,7147],{"name":7145,"slug":7146,"type":15},"Best Practices","best-practices",{"name":7148,"slug":7149,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":7152,"name":7152,"fn":7153,"description":7154,"org":7155,"tags":7156,"stars":19,"repoUrl":20,"updatedAt":7164},"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},[7157,7160,7163],{"name":7158,"slug":7159,"type":15},"Machine Learning","machine-learning",{"name":7161,"slug":7162,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":7166,"name":7166,"fn":7167,"description":7168,"org":7169,"tags":7170,"stars":19,"repoUrl":20,"updatedAt":7177},"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},[7171,7174],{"name":7172,"slug":7173,"type":15},"QA","qa",{"name":7175,"slug":7176,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"items":7179,"total":7276},[7180,7198,7204,7209,7215,7221,7226,7232,7237,7248,7262,7271],{"slug":7181,"name":7181,"fn":7182,"description":7183,"org":7184,"tags":7185,"stars":7195,"repoUrl":7196,"updatedAt":7197},"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},[7186,7189,7192],{"name":7187,"slug":7188,"type":15},"Documentation","documentation",{"name":7190,"slug":7191,"type":15},"MCP","mcp",{"name":7193,"slug":7194,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":7088,"name":7088,"fn":7089,"description":7090,"org":7199,"tags":7200,"stars":19,"repoUrl":20,"updatedAt":7102},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7201,7202,7203],{"name":7094,"slug":7095,"type":15},{"name":7097,"slug":7098,"type":15},{"name":7100,"slug":7101,"type":15},{"slug":7104,"name":7104,"fn":7105,"description":7106,"org":7205,"tags":7206,"stars":19,"repoUrl":20,"updatedAt":7111},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7207,7208],{"name":17,"slug":18,"type":15},{"name":7097,"slug":7098,"type":15},{"slug":7113,"name":7113,"fn":7114,"description":7115,"org":7210,"tags":7211,"stars":19,"repoUrl":20,"updatedAt":7123},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7212,7213,7214],{"name":17,"slug":18,"type":15},{"name":7097,"slug":7098,"type":15},{"name":7121,"slug":7122,"type":15},{"slug":7125,"name":7125,"fn":7126,"description":7127,"org":7216,"tags":7217,"stars":19,"repoUrl":20,"updatedAt":7137},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7218,7219,7220],{"name":7131,"slug":7132,"type":15},{"name":7121,"slug":7122,"type":15},{"name":7135,"slug":7136,"type":15},{"slug":7139,"name":7139,"fn":7140,"description":7141,"org":7222,"tags":7223,"stars":19,"repoUrl":20,"updatedAt":7150},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7224,7225],{"name":7145,"slug":7146,"type":15},{"name":7148,"slug":7149,"type":15},{"slug":7152,"name":7152,"fn":7153,"description":7154,"org":7227,"tags":7228,"stars":19,"repoUrl":20,"updatedAt":7164},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7229,7230,7231],{"name":7158,"slug":7159,"type":15},{"name":7161,"slug":7162,"type":15},{"name":9,"slug":8,"type":15},{"slug":7166,"name":7166,"fn":7167,"description":7168,"org":7233,"tags":7234,"stars":19,"repoUrl":20,"updatedAt":7177},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7235,7236],{"name":7172,"slug":7173,"type":15},{"name":7175,"slug":7176,"type":15},{"slug":7238,"name":7238,"fn":7239,"description":7240,"org":7241,"tags":7242,"stars":19,"repoUrl":20,"updatedAt":7247},"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},[7243,7244],{"name":7097,"slug":7098,"type":15},{"name":7245,"slug":7246,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":7249,"name":7249,"fn":7250,"description":7251,"org":7252,"tags":7253,"stars":19,"repoUrl":20,"updatedAt":7261},"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},[7254,7257,7258],{"name":7255,"slug":7256,"type":15},"Code Review","code-review",{"name":7121,"slug":7122,"type":15},{"name":7259,"slug":7260,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":7263,"name":7263,"fn":7264,"description":7265,"org":7266,"tags":7267,"stars":19,"repoUrl":20,"updatedAt":7270},"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},[7268,7269],{"name":7172,"slug":7173,"type":15},{"name":7175,"slug":7176,"type":15},"2026-07-14T05:25:54.928983",{"slug":4,"name":4,"fn":5,"description":6,"org":7272,"tags":7273,"stars":19,"repoUrl":20,"updatedAt":21},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7274,7275],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},496]