git:20260810.892e567 to git:20260915.e44ada8

136 added, 228 removed. Audit A to A.

---
name: "remote-gpu-trainer"
- description: "Use when running, debugging, verifying, or delivering a deep-learning experiment on an owned or rented GPU, especially AutoDL or a remote SSH host; also use for Windows + Clash/Mihomo high-port SSH banner timeouts, fake-IP, or TUN routing interference. Covers launch, checkpoint/resume, detached monitoring, OOM/NaN/convergence/data-loader failures, multi-GPU hangs, ablations, result verification, pull/teardown safety, and canonical export closure. Routes durable replicas to mirror-research-artifacts. Triggers: owned/rented GPU, AutoDL, SSH, Windows Clash/Mihomo, banner timeout, fake-IP, TUN, train/debug/verify/pull/export, 远程GPU训练/租卡, 断点续训, 消融复现, checkpoint 拉回."
+ description: >-
+ 交付可验证的远程 GPU 运行状态、selection-best checkpoint 和拉回结果,适用于 AutoDL、vast.ai、RunPod、Lambda 或 Paperspace 的启动、调试、监控、续训、多开并行、停止及 OOM/NaN/全零指标排查;常见请求:训练卡住;释放实例会销毁机器及数据盘,绝不等同于关机。长期镜像与恢复交给 mirror-research-artifacts。
license: MIT
metadata:
- last-model-review: "2026-08-10 AutoDL canonical export and generic mirror handoff; preserves 2026-07 lifecycle review findings (day completed from aca1c467, which rewrote the description and added the Windows/Clash SSH gate — the bare 2026-08 form is unparseable to the staleness hook)"
+ last-model-review: "2026-08-16 outcome-first and context-economy refactor; incident details moved out of the entrypoint, session/UI monitoring claims corrected, and assurance classified by consequence"
---
- # remote-gpu-trainer — the DL Experiment Lifecycle
-
- ## Overview
-
- One skill for the whole arc of a DL experiment: **RUN → VERIFY → DELIVER.**
+ # Remote GPU Trainer
- - **RUN** — get a long GPU job to start, survive, and finish, then get the result off the box. On a
- machine **you own** there is no meter; on a **rented** box the core insight is that **you are a
- short-term tenant on someone else's machine** — so the job is to *detach the work, make the result
- outlive the instance, and stop the meter safely*, not to provision a cluster. Platform-specific at the
- edges (one `profiles/<platform>.md` owns every path, proxy, billing verb, and spot rule), invariant at
- the core.
- - **Remote ownership boundary** — this skill is the **compute/control layer**: it binds inputs, runs and
- verifies compute, and closes one run into `export/<run-id>`. Long-term project organization belongs to
- `research-artifact-hygiene`; any durable/local/cloud mirror begins only at a validated export and belongs
- to the generic `mirror-research-artifacts` skill. Never mirror a mutable `active/` tree.
- - **VERIFY** — *is this number a bug, a real effect, or noise?* A surprising result is a hypothesis, not
- a fact to report. Platform-agnostic.
- - **DELIVER** — organize the result so every shipped number/figure/table is a *deterministic function of
- one immutable evidence layer*; provenance and cross-document consistency are locked by mechanism, not
- by a human remembering to update three documents. Platform-agnostic.
+ ## Mission
- Two stances run through VERIFY and DELIVER: **user sovereignty** (the science — seed count, which samples,
- whether an `aux` channel exists — is the user's call; the skill organizes and discloses a tradeoff *once*,
- then stops nagging) and **audit → disclose, not enforce** (the skill is an honest auditor, not a gate
- guard — an integrity issue must surface *with the conclusion it affects*, but the skill never blocks the
- user from shipping). Mantra: **"disclose it, or don't claim it."**
+ Move one experiment through **RUN → VERIFY → DELIVER** with the least control work that safely advances the
+ user's outcome. This is the compute/control layer and owns one compute attempt. When the task spans several runs, nodes, independent
+ side-effect lanes, or paper-wide closeout, route scheduling and state projection to
+ `research-artifact-hygiene` (closeout ledger; 原 supervise-research-closeout 已并入); do not duplicate a second controller here.
- ## Route first
+ ## Start with the outcome, not a package
- 1. **RUN — own the box or rent it?**
- - **Local** (a workstation/laptop you own, no meter) → `references/run-local/` and `profiles/local.md`.
- - **Rented / remote** (any metered or shared box you don't own) → `references/run-remote/`, and pick
- your **`profiles/<platform>.md`** FIRST (it owns every path/verb/proxy the phases delegate to).
- 2. **Then ALWAYS** → **VERIFY** the result (`references/verifying/`). A green run is not a real number.
- 3. When publication synthesis is requested, optionally consult `references/delivering/` for
- **legacy/non-canonical publication synthesis guidance**. It never defines the artifact layout: canonical
- runs, hardware evidence, trust records, figures and tables belong to `research-artifact-hygiene`.
+ Before tools, write a compact internal decision:
- > Already debugging a model that won't converge / OOMs / hangs / NaNs, regardless of where it runs? Jump
- > straight to **`references/training/`** (the 8-file debug layer), then come back to VERIFY before you report.
+ 1. desired result and current verified state;
+ 2. exact next executable action;
+ 3. consequence level below;
+ 4. stop condition and where the result will live.
- ## Operating principles (the spine)
+ Do not preload incident catalogues, every platform profile, or a whole project SSoT. Pick one profile and one
+ phase reference. Keep large evidence out of model context: verify identity/schema, parse task-relevant fields,
+ and retain paths/hashes as an evidence index.
- The load-bearing invariants. One line each; the full cross-platform set (10 invariants for the remote
- lifecycle) is in **`references/run-remote/principles.md`** — read it before Phase 0 of a remote run.
+ ## Consequence-based assurance
- - **Checkpoint-to-durable + idempotent resume is the universal spine.** File-checkpoint to the durable
- location + unconditional load-latest-on-startup is the *one* mechanism that survives an SSH drop, a
- Slurm walltime kill, a K8s reschedule, a spot preemption, a Colab disconnect. The detach primitive
- (tmux / sbatch / Job) is the swappable plug; this is the invariant.
- - **Trust the artifact you loaded, not a log line that claims success.** "synced / saved / done" lies
- under a silently-failed write; a watcher's own state is also a claim — reconcile it against the real
- process / artifact / pixels / bytes.
- - **Cheap checks before expensive compute.** A 1–2 batch CPU smoke (logger off) kills import/config/
- shape/scale bugs for ~free, before they bill GPU-hours.
- - **Cost and destructive actions are the user's call.** Never auto-release/terminate, never delete durable
- files without confirmation; if cleanup can't free space, ask to expand the disk, don't silently shrink
- the experiment.
- - **Execution permission is not task authority.** Sandbox / Full Access only controls whether a command
- can run. Keep operational authority and scientific promotion separate: once a bounded, non-overwriting
- delivery objective is authorized, same-scope diagnostics, verifier/schema version bumps, tests, hashes,
- and control-plane repairs do **not** require a fresh confirmation merely because they mint a new immutable
- ID. Re-ask for new billable compute, destructive/irreversible actions, science-protocol changes, metric
- promotion, publication, or any other material scope expansion. A standing unattended contract applies
- only after its own activation rule is satisfied.
- - **Make the control plane cheap and the data plane rare.** Validate small schemas, identities, paths, and
- contract hashes before rereading multi-GB bundles. A synthetic fixture may test rejection behavior but
- may never invent the producer's positive schema; freeze a redacted real-shape fixture and prove its test
- is live. Recompute every large payload once per trust boundary—producer, independent remote acceptance,
- and local pull—not once per wrapper or verifier revision.
- - **One-way run closure.** Mutable work stays under `active/<run-id>`; only a validated capsule may move
- from `export/.partial/<run-id>` to `export/<run-id>`, and failed closeouts move to `quarantine/`.
- AutoDL binds this exactly as
- `/root/autodl-tmp/<project>/{cache,active,export/.partial,export/<run-id>,quarantine}`. A closed export is
- fully isomorphic to canonical local `runs/<run-id>`: `run.json`, `config.yaml`, `train.csv`, `best.pth`,
- optional frozen `last.pth`, and `test/<test-id>/{metrics.json,results.parquet,vis/<condition-id>/<task-native-role>/<sample-id>.png}`.
- Every declared software test must include visualization coverage for all declared conditions × task-native
- roles × K fixed selected samples. Real capture/hardware results never enter this software capsule; close
- them separately as `export/hardware/<hardware-run-id>` (capture/decode/model-run bindings, no copied
- weights) or hand them to `research-artifact-hygiene`. A hardware test without machine-readable ground truth
- must declare that status and metric non-applicability; it keeps finite-forward rows and prediction/overlay
- visuals but never invents ground truth or GT-derived metrics. Caches and whole active trees never cross a
- mirror boundary. Layout and gates → `references/run-remote/artifact-layout.md`.
- - **Before teardown, prove the evidence outlives the host.** Teardown is irreversible and *"I scp'd it
- back"* is just another log line. The gate is not "files copied" but **"every number I reported
- re-reads from the local copy"** — diff each claim against the pulled artifact, then write a
- provenance note *next to the data* (protocol, reference frame, caveats) so a later reader can
- retrace it without the chat log. Two traps: (1) what you did **not** pull is a decision, not an
- oversight — say which (checkpoints are usually re-derivable from config+seed *if* determinism is
- established; results are not); (2) **re-read the inventory, don't trust its prose** — a note saying
- "none of these are local" may mean *none was trained here*, not *none is stored here*; the two differ
- by everything when you are about to press destroy.
- - **Audit → disclose, not enforce.** What is mandatory is *disclosure*, not the *fix*. An integrity
- finding (no disjoint val, leakage, test touched during selection, a number you can't re-derive) must
- ride *with* the conclusion — but the skill discloses, it does not block.
+ Classify the next consequence, not the noun used in a handoff:
- ## RUN — local (a box you own)
+ | Level | Examples | Required assurance |
+ |---|---|---|
+ | **L0 observe** | read-only probe, log/metadata parse, offline plan, same-scope pre-execution repair | no new gate or receipt; preserve host identity and observational behavior |
+ | **L1 reversible local** | fresh local staging, deterministic test, non-overwriting config generation | one relevant check and ordinary rollback |
+ | **L2 remote/costly non-destructive** | launch to a fresh path, pull, mirror, shutdown that preserves disk | one action-specific preflight, one compact receipt, one independent postcheck |
+ | **L3 irreversible/scientific authority** | release/terminate that destroys storage, deletion, overwrite, new paid scope, protocol change, metric or paper promotion | current explicit scoped authority plus an independent consequence check |
- No meter, no teardown clock — the risks move from *money* to *resource contention and your machine's
- stability*. The discipline that does **not** relax: env hygiene, resource awareness, artifact/checkpoint
- care, and "state the seed." Start at `profiles/local.md`, then the matching doc:
+ One consequence gets one assurance chain. Reuse accepted immutable evidence; never nest generic approval
+ packages or make a reviewer re-approve read-only diagnosis. Execution permission is not task authority, but an
+ already authorized bounded outcome carries through non-overwriting diagnosis, tests, parsing, hashes, and
+ same-scope repair. Re-ask only when cost, irreversibility, protocol, publication, or target scope actually changes.
- - **Env hygiene** — never train/install in conda `base` on a persistent box; the 4-step gate (enumerate →
- pick the project env → confirm `sys.executable` → run) → `references/run-local/env-hygiene.md`.
- - **Launch & detach** — nohup/tmux, log + alive probe, don't foreground-block → `references/run-local/launch.md`.
- - **Single-node multi-GPU** — `torchrun`/`accelerate` DDP env contract, the first-run rank/hang basics →
- `references/run-local/multi-gpu.md` (multi-*node* → `references/run-remote/multinode.md`).
- - **Local OOM** — the fit-it ladder on hardware you can't rent bigger → `references/run-local/local-oom.md`.
+ **A gate may only fail closed when passing it would make a reported number wrong.**
+ Before writing or honouring one, name the claim it protects. Split leakage, checkpoint/config
+ mismatch, metric-definition drift, selection-on-test: fail closed. Missing paperwork, an absent
+ manifest, an unavailable validator, a receipt that cannot be regenerated on this machine: warn,
+ record the gap in the artifact, and PROCEED. A red gate that cannot make any number wrong is
+ costing GPU hours and calendar days to protect a filing cabinet. When a gate blocks and the
+ substantive evidence is already in hand by another route, say so in one line and continue on
+ that route — do not idle a paid node waiting for a human to adjudicate paperwork.
- ## RUN — remote (a box you rent)
+ For a routine probe, launch, pull, or shutdown, use the maintained primitive. After one failed package and one
+ successor, stop version churn: repair the primitive, use a minimal operator-visible command, or report one
+ blocker. A protocol-preserving scientific source successor is not a renamed control package: keep frozen bytes
+ immutable, bind one minimal successor to a fresh run identity, and test the changed behavior through the real
+ consumer.
- **Pick your profile FIRST** — it binds every concrete path/proxy/credential/billing verb/spot rule the
- phases delegate to. Mental verb model (one API across platforms; the profile binds each verb to real
- commands): `up` (rent+reach) → `push` (code/data on) → `run` (detached + checkpointing) → `watch`
- (durable monitor) → `pull` (results off + verify) → `down` (stop the meter).
+ Detailed action economics, authority retirement, capacity semantics, and exact-chain regression live in
+ `references/run-remote/control-economy.md`. Load it only for remote mutation, custody, storage recovery, or
+ teardown—not for local debugging or metric interpretation.
- **Windows + Clash/Mihomo high-port SSH gate.** Use **OpenSSH direct first** with strict host-key
- checking. A **Paramiko fallback** is allowed only after recorded `banner_timeout`, `fake_ip`, or
- `tun_interference` evidence; it must use a DoH-selected address and Windows `IP_UNICAST_IF` on the
- single socket handed to the SSH transport. Never treat authentication failure, host-key mismatch,
- connection refusal, or an unexplained error as proxy evidence. Never mutate system routes, DNS,
- proxy settings, or Clash/Mihomo configuration. Once fallback is authorized, you **must not report**
- the host unreachable or a live refresh blocked before a bounded Paramiko single-socket attempt completes
- or host identity fails closed. A **transport failure proves only transport unavailability**; it never
- proves that a remote run is completed, live, failed or stalled. Full parameterized decision ladder and
- offline planner → `references/run-remote/ssh_transport.md` §4A.
+ ## RUN
- | You're on… | Profile | Meter-stop verb (the trap) |
- |---|---|---|
- | AutoDL (deepest, battle-tested) | `profiles/autodl.md` | 关机 stops meter, **keeps disk** (the AutoDL exception) |
- | RunPod | `profiles/runpod.md` | **terminate** (stop still bills 2×; destroys volume disk) |
- | vast.ai | `profiles/vastai.md` | **destroy** (stop bills disk forever) |
- | Lambda | `profiles/lambda.md` | **terminate** (no stop state) |
- | Paperspace | `profiles/paperspace.md` | **destroy + release IP + delete storage** |
- | 恒源云 / 矩池云 / Featurize / 揽睿星舟 | `profiles/china.md` | per-platform (data disk often bills while stopped) |
- | Bare SSH / Slurm / K8s / Colab | `profiles/generic-ssh.md` | **manual** (a forgotten box bills 24/7) |
+ ### Local machine
- **The 6-phase lifecycle** (full per-platform checklist → `references/run-remote/lifecycle_checklist.md`):
- **0** env + storage-layout audit (`df -i` not just `df -h`, cgroup `memory.max`, checkpoint/inode budget) · **1** SSH +
- credentials (the prebuilt image **is** the env — don't `conda create` on a rental; secrets via stdin) ·
- **2** identity-bound inputs + isolated active run + **CPU-smoke gate before renting** · **3** detached launch (probe, then hand back — never
- a blocking `sleep`) · **4** durable monitoring (the four-layer architecture →
- `references/run-remote/monitoring_patterns.md`; a session-bound watcher dies with the session) · **5**
- close `active → export`, verify/pull or hand the closed export to the generic mirror skill, then teardown.
+ - Never train, infer, or install deep-learning packages in conda `base` on a persistent machine. Enumerate,
+ select the project environment, confirm `sys.executable`, then run. Details:
+ `references/run-local/env-hygiene.md`.
+ - Route launch, multi-GPU, and local OOM to the matching file under `references/run-local/`.
- > **Iron Law — teardown gate:** NO `release` / `terminate` / `destroy` / file-delete until the remote
- > durable result root has an external immutable `PULL_MANIFEST.json` built by
- > `scripts/aggregate_to_fs.sh` + `scripts/build_pull_manifest.py` from an explicit expected roster
- > (never embedded in canonical `run.json`; the mirror workflow's custody manifest is an additional
- > layer, not a replacement for this one),
- > the pull matches that exact roster + every byte size + SHA-256, every checkpoint loads, and
- > `scripts/verify_local.py` writes local `PULL_VERIFIED.json`; then the user must still explicitly
- > approve the cost-affecting action. A directory count, a size heuristic, an old loadable checkpoint,
- > or "it looked done in the log" is not evidence. On most platforms the
- > meter-stopping action is **irreversible** (deletes the disk) — confirmation matters more, not less.
+ ### Rented or shared machine
- Other remote references: `ssh_transport.md` (rsync/scp resumable, secrets-via-stdin, CRLF) ·
- `artifact-layout.md` (active/export/quarantine boundary, canonical capsule and atomic-close contract) ·
- `spot-resilience.md` (preemption grace, Young/Daly cadence, atomic-write resume) · `china-network.md`
- (mirrors + `HF_ENDPOINT` + the `no_proxy` trap) · `parallel_ablation.md` (fan-out independence +
- reconciliation) · `multinode.md` (NCCL/fabric, advanced) · `production-matrix-acceptance.md`
- (shared-disk multi-node patrol, producer→independent acceptance, control/science failure separation) ·
- `gotchas_universal.md` (the full U1–U44 catalog with a grep index).
+ 0. Browser-boot timeouts → `profiles/autodl.md` §Browser boot; local heavy ops not via ssh are
+ machine-asked by a local guard — go remote; erroneous local downloads clean before Stop.
+ 1. Read exactly one `profiles/<platform>.md`; it owns paths, proxy, billing, stop, destruction semantics and the instance-naming rule (rename every box `<project>-<purpose>-<date>` on creation).
+ 2. Read `references/run-remote/principles.md`, then the current phase in
+ `references/run-remote/lifecycle_checklist.md`.
+ 3. Bind source/config/data identities and run a cheap CPU or one-batch smoke before paid compute.
+ 4. Execute producer → serializer → actual parser/runner → target shell/OS. Mocks may suppress external side
+ effects, never real parsing, paths, quoting, ancestry, time, or exit propagation.
+ 5. Launch detached into a fresh `active/<run-id>` and checkpoint to durable storage with idempotent resume.
+ 6. Close only validated work into `export/<run-id>`; quarantine failures. Never mirror mutable `active/`.
+ 7. Prove every fail-closed input EXISTS before renting, not after booting. Enumerate what the runner refuses
+ to start without (per-checkpoint resolved config, dataset bundle provenance, prepared manifest) and locate
+ each on the mirror, locally, and on the node. 2026-08-18: a pilot booted, then found all three absent
+ everywhere; rebuilding them was unpaid local work. A smoke test proves the box runs, not that the run has inputs.
+ 8. Independent runs get their own box, in parallel -- a serial queue on one machine is a choice, and it has been
+ corrected in three separate sessions. One writer per GPU still holds: parallel means more machines, never two
+ writers on one. Say which runs are independent before asking whether to serialize.
+ 9. The local machine's bandwidth is scarce and is not on the critical path. Move artifacts remote<->remote
+ (mirror <-> node); never route a transfer through the laptop because that is the shell you happen to be typing in.
- ## When training itself breaks (the model, not the platform)
+ Storage pressure is an active recovery problem, not a permanent blocker. Treat percentage as warning and
+ `required bytes + margin` on the resolved device as the action threshold. Stop new writers, protect
+ active/unknown/checkpoint/result/paper-bearing paths, reclaim only proven-regenerable task-local scratch under an
+ exact allowlist, mirror valuable portable artifacts when appropriate, then remeasure. If the floor still fails,
+ report the exact shortfall, expansion target, restart requirement, and do not silently shrink the science.
- Once the box runs, training breaks in its own ways — **local or remote, the same debug layer**
- (`references/training/`, 8 files; each entry symptom → root cause → fix with cited docs). Route by symptom:
- - **OOM / won't fit** (CUDA-VRAM or host-RAM, OOM-at-a-step, the fit-it ladder) → `oom-memory.md`.
- - **Multi-GPU launch / HANGS** (`torchrun`/`accelerate`/`deepspeed` env contract, DDP/FSDP/ZeRO) → `distributed-launch.md`.
- - **NaN / Inf / loss spikes** (fp16/bf16/tf32, AMP/GradScaler, LLM divergence) → `precision-stability.md`.
- - **Too slow** (GPU- vs data- vs comms-bound, dataloader knobs, `torch.compile` traps) → `throughput-profiling.md`.
- - **Resume bugs** (full-state + sharded save/resume; epoch restart, reshuffle, scaler/EMA dropped) → `checkpoint-resume.md`.
- - **Per-domain gotchas** (LLM, vision det/seg, diffusion, RL, multimodal/VLM) → `by-domain.md`.
- - **Runs but won't learn** (overfit-one-batch, params-not-updating, LR/schedule, loss-function footguns, freezing) → `convergence-debugging.md`.
- - **Dataloader correctness** (worker-RNG aug duplication, IterableDataset sharding, RGB-vs-BGR / ÷255 / `set_epoch`) → `data-pipeline.md`.
+ ## Monitor without burning model turns
- ## VERIFY — is the number real?
+ The remote job must finish without an active chat. Put correctness on the box: detached process, checkpoint,
+ bounded self-completion chain, and explicit artifact/marker. A UI spinner is not a watcher, and a session-bound
+ background process is not restart-durable merely because its task chip remains visible.
- Before you trust or report **any** metric, ablation delta, or "it works now": classify it **bug / effect /
- noise**, hold a comparison to **exactly one** changed variable, and probe leakage / fair-comparison /
- variance / metric-direction. A number you can't re-derive from the saved artifact is not a result yet.
- Stance: **audit → disclose** — surface an integrity issue with the conclusion, never silently pass or hard-block.
+ - Keep exactly one watcher for one live run. It exits on a material event or a bounded timeout.
+ - Prefer on-box self-completion and an OS- or product-owned durable watcher whose restart behavior is verified.
+ - Wake the model only for a material delta, terminal state, blocker, new authority, or agreed sparse cadence.
+ - After restart, compaction, or transport loss, re-probe process/session/artifact truth before trusting UI state.
+ - Silence or a log string is historical evidence, not current liveness.
- - Full methodology (the 14-section probe ladder + the 6 invariants) → `references/verifying/methodology.md`.
- - Constant / degenerate output, `real == shuffle`, model-ignores-input → `references/verifying/representation-collapse.md`.
- - A green smoke that hides undertraining vs a real bug; loss-low-but-samples-bad → `references/verifying/smoke-hidden-failures.md`.
- - For an atomic producer bundle, run `scripts/verify_artifact_bundle.py` on a different node; compare two
- independently produced acceptances with `scripts/compare_acceptance.py`. A hash match proves identity,
- a safe load proves checkpoint structure, and a fresh evaluator proves the metric—none substitutes for
- the others.
+ Read `references/run-remote/monitoring_patterns.md` before creating a monitor. It contains the durability truth
+ table, one-watcher lifecycle, bounded polling, and recovery procedure.
- > **State the metric's direction when comparing** (PSNR/SSIM/mAP ↑ better; LPIPS/NMSE/loss ↓ better) —
- > never assume. Tracker forensics / pruning duplicate runs → `scripts/wandb_forensics.py`.
+ ## Pull, shutdown, and release are different consequences
- ## DELIVER — legacy/non-canonical publication synthesis guidance
+ Before destructive teardown, require exact roster/bytes/SHA-256 and an actual restore/readback from the
+ canonical remote into an independent temporary consumer location. On that consumer, safely load the
+ checkpoint and recompute every reported metric from the full prediction population. The consumer may be
+ another remote node; a resident Mac `.pth` and local `PULL_VERIFIED.json` are not universal requirements.
+ Keep a thin logical record with URI, SHA-256, bytes, provider, mutability, verification date, and the bound
+ consumer evidence. Current explicit authority still determines the provider action.
- On a remote rental, delivery ends at the validated closed `export/<run-id>` capsule. Do not turn the compute
- host into the long-term project archive, figure workshop or mirror manager; hand canonical organization to
- `research-artifact-hygiene` and replicas to `mirror-research-artifacts`.
+ - **Shutdown** may stop compute while preserving provider disks; it does not imply release.
+ - **Release/terminate/destroy** may delete storage or continue billing differently; verify current provider facts
+ from its profile and obtain current L3 authority.
+ - A request to make data safe enough that later release would be harmless is a custody quality bar, not release
+ permission. If the user says “shut down, do not release,” finish custody, run one idle/no-writer preflight,
+ shut down once, verify offline, and preserve disks.
+ - A stale delegated `never release` is a provisional guard, not policy. Once its risk closes and a newer direct
+ user decision authorizes the exact instance consequence, retire it instead of repairing an obsolete package.
- The `references/delivering/` group is retained only for publication-synthesis principles such as
- generated-not-transcribed reporting, claim reconciliation, disclosure and pixel re-open QA. **It is not an
- artifact-layout authority.** Any directory/manifest example there that differs from
- `research-artifact-hygiene` is legacy and non-canonical.
+ Keep evidence deletion, cache cleanup, overwrite, shutdown, and provider release as separate decisions.
- For synthesis, read evidence from canonical `runs/<run-id>/test/<test-id>/{metrics.json,results.parquet,vis/}`
- or `hardware/runs/<hardware-run-id>/test/<test-id>/...`; never create a parallel `results/<exp-id>/runs/`
- tree, checkpoint subdirectory, qualitative tree or selected symlink. Figures/tables use the canonical flat
- workshops (`figure.json`/`table.json`, root-level source, `build.py`, `final.*`) rather than README portals,
- nested output directories or provenance sidecars. The fixed selection roster remains the canonical
- `run.json`-bound `_trust/selections` manifest; a publication montage may cite existing atomic PNGs but may
- not redefine the run's visualization roster.
+ ## VERIFY
- This skill owns one execution attempt, not project-wide closeout state. Route authorization gates, node
- queues/heartbeats, legacy checkpoint acceptance, and the separate training/evaluation/pull/paper axes to
- `supervise-research-closeout`; that controller must call this skill rather than duplicate its SSH or trainer logic.
+ A green run is not a trustworthy result. Before reporting a metric or ablation delta:
- Legacy synthesis navigation: `references/delivering/data-architecture.md` states the boundary and current
- flat-workshop mapping; `principles.md`, `figures.md`, `delivery-gate.md` and
- `completeness-reconciliation.md` provide advisory synthesis/QA checks only. None may override canonical
- paths, manifests or retention rules.
+ - state seed and determinism settings;
+ - change exactly one comparison variable;
+ - state metric direction (PSNR/SSIM/mAP ↑; LPIPS/NMSE/loss ↓);
+ - classify the observation as bug, effect, or noise;
+ - probe leakage, fairness, variance, and saved-artifact re-derivation.
- ## Companion skills (all OPTIONAL — this skill is standalone)
+ The full scientific method is `references/verifying/methodology.md`; symptom-specific routes are
+ `representation-collapse.md` and `smoke-hidden-failures.md`. A matching hash proves identity, a safe load proves
+ checkpoint structure, and a fresh evaluator proves the metric—none substitutes for another. Audit and disclose
+ integrity limits with the conclusion; do not silently relabel controls as paper evidence.
- Recommended separate installs that deepen RUN / VERIFY / DELIVER; **the skill needs none of them** and works
- fully standalone. One-line-each list, what each adds, and the no-companion fallback →
- **`references/companions.md`**. In short: figure drawing (nature-figure),
- data availability (`nature-data`), experiment verification (the `experiment-verifier` agent), parallel ablation
- (`superpowers:dispatching-parallel-agents`), durable artifact mirroring
- (`mirror-research-artifacts`), and — one layer above — an idea→conclusion
- orchestrator (`auto-research-pipeline`: human gates + stage wiring; this skill executes, that one decides
- when each stage fires and what a human signs).
+ ## DELIVER
- ## Getting better over time
+ Remote delivery ends at a validated closed export or a validated thin logical run that points to canonical
+ remote checkpoint/results. Canonical long-term layout belongs to
+ `research-artifact-hygiene`; durable/local/cloud replicas belong to `mirror-research-artifacts`; paper synthesis
+ uses the relevant paper/figure skill. Keep software and hardware evidence separate. This skill never invents ground truth or
+ GT-derived metrics; no-GT hardware retains finite-forward rows and applicable prediction/overlay visuals with
+ metrics declared not applicable.
- The skill is static, but every run can teach it a gotcha — without corrupting it. Protocol →
- `references/self-improvement.md`: only sediment a **root-caused, reproduced, generalizable** gotcha (a
- one-off flake is a hypothesis, not a gotcha); route user/project-specific facts to the host's memory and
- generalizable ones to a proposed catalog edit; **never silently rewrite a skill file** — draft the
- `symptom → root cause → fix` and let the user approve. Platform facts carry a `verified <month>` stamp —
- re-verify any teardown/billing fact against current docs before betting money or data
- (`scripts/check_staleness.py`).
+ Lead the user-facing result with usable artifacts and verified status, then residuals and a compact evidence
+ index. Receipts, failed attempts, and internal control versions stay under the trust area, not in the product
+ structure.
- ## Bundled resources
+ ## Resource router
- Load only what the current phase needs (the body sections above name the individual files).
+ - local execution: `references/run-local/`
+ - remote lifecycle, transport, storage, monitoring, layout: `references/run-remote/`
+ - OOM, hangs, NaN, throughput, convergence, data pipeline, checkpoint resume: `references/training/`
+ - scientific result verification: `references/verifying/`
+ - per-platform facts: `profiles/`
+ - one execution attempt: this skill; multi-run/multi-node closeout: `research-artifact-hygiene` (closeout ledger)
+ - canonical project organization: `research-artifact-hygiene`
+ - durable mirroring/restoration: `mirror-research-artifacts`
- - `references/run-local/` — **own-a-box**: env-hygiene · launch · multi-gpu · local-oom.
- - `references/run-remote/` — **rented-box**: principles · lifecycle_checklist · artifact-layout · monitoring_patterns · ssh_transport · spot-resilience · china-network · parallel_ablation · multinode · production-matrix-acceptance · gotchas_universal (U1–U44).
- - `references/training/` — the **DL-training debug layer** (8 files; local/remote-agnostic) — routed above.
- - `references/verifying/` — **is-the-number-real**: methodology · representation-collapse · smoke-hidden-failures.
- - `references/delivering/` — **legacy/non-canonical publication synthesis guidance only**: advisory
- principles · canonical-boundary data-architecture · historical manifest/figure notes · delivery gate ·
- completeness reconciliation. `research-artifact-hygiene` owns every canonical path and schema.
- - `references/companions.md` (optional skills + fallbacks) · `references/self-improvement.md` (capture-a-gotcha loop).
- - `profiles/<platform>.md` — per-platform substrate (7 rental profiles + `local.md`; `_schema.md` = the fields).
- - `scripts/` — wrappers (`run_one`/`run_queue`), monitors (`mem_monitor`, `gpu_health`, `health_patrol.sh.template`, `reap_vram_zombies.sh`),
- transfer (`download_loop`, `aggregate_to_fs`, `build_pull_manifest.py`, `setup-china-mirrors`), `verify_local.py`, delivering
- (`manifest_scaffold.py`, `reconcile.py`, `repro.sh.template`), atomic acceptance
- (`verify_artifact_bundle.py`, `compare_acceptance.py`), `wandb_forensics.py`, `check_staleness.py`.
- - `examples/autodl_sweep/` — one runnable worked case · `evals/` — the regression harness.
+ Load only the resource named by the current route. A generalizable, reproduced root cause may be proposed via
+ `references/self-improvement.md`; project facts belong in project memory/SSoT, not this global entrypoint.