fix(v0.33.0): missed checklist items (CONTRIBUTING + Unicode arrow)

Pre-push audit found 3 gaps in the Release Checklist (steps 6, 11):

1. soup_cli/commands/can.py:118 used → (->) in the run_cmd
   docstring. Windows cp1252 in non-PYTHONUTF8 mode raises
   UnicodeEncodeError when Typer renders --help. Replaced with
   ASCII '->'. Verified: `python -m soup_cli.cli can run --help`
   renders cleanly on Windows.

2. CONTRIBUTING.md test counts not updated:
   - tree comment: 97 files, 3696 tests -> 104 files, 3818 tests
   - test table: +7 rows for test_part_{f,a_wave1,a_wave2,e,d,c,b}
   - directory tree: added registry/attach.py, cans/run.py,
     cans/publish.py, data/collators.py, utils/v028_features.py

3. README.md:967 stale "v0.32.0 stub" note. Updated to reflect that
   --find-lr now runs the live loop in v0.33.0 and that spike-recovery
   writes a JSON hint while live optimizer rewind / DataLoader rebuild
   remain follow-ups.

examples/README.md: skipped per checklist step 12 — v0.33.0 added no
new YAML configs (the new commands operate on .can files which use
existing config schemas).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alpamys 2026-04-27 20:11:22 +05:00
parent c4a27c1f9e
commit e248b5aea8
3 changed files with 14 additions and 6 deletions

View File

@ -103,13 +103,14 @@ soup_cli/
migrate/ - Config migration (LLaMA-Factory, Axolotl, Unsloth)
recipes/ - Ready-made configs for popular models (80 recipes)
autopilot/ - Zero-config decision engine (v0.25.0)
registry/ - Model Registry (hashing, store, diff) (v0.26.0)
cans/ - Shareable .can artifact format (v0.26.0)
registry/ - Model Registry (hashing, store, diff, attach) (v0.26.0 + v0.33.0)
cans/ - Shareable .can artifact format + run/publish orchestrator (v0.26.0 + v0.33.0)
data/traces/ - Trace-to-Preference harvester (v0.26.0)
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence
data/collators.py - CrossDocCollator for sample packing (v0.33.0)
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features
ui/ - Web UI (FastAPI + HTML/JS SPA)
tests/ - Test suite (97 files, 3696 tests)
tests/ - Test suite (104 files, 3818 tests)
examples/ - Real-world config examples and datasets
```
@ -234,6 +235,13 @@ pytest tests/ --cov=soup_cli --cov-report=html
| test_inference_advanced.py | Inference Excellence: prefix caching, spec-decoding auto-pairing, LoRA hot-swap, structured output, dashboard + /metrics, OpenTelemetry tracing, auto-quant picker (v0.30.0) |
| test_recipes_v031.py | Model & Recipe Breadth: 34 new recipes (vision/audio/reasoning/edge/domain/multimodal); catalog-wide invariants; CI workflow validation (v0.31.0) |
| test_auto_tuning.py | Training Stability & Auto-Tuning: LR range finder, grad-accum monitor, auto mixed-precision, auto warmup, spike recovery, convergence detector, autopilot wiring (v0.32.0) |
| test_part_f_hardening.py | Live Wire Part F: RLVR OS-level sandbox isolation + prune_checkpoints TOCTOU (v0.33.0) |
| test_part_a_wave1.py | Live Wire Part A: live eval-gate scoring + registry attach (v0.33.0) |
| test_part_a_wave2.py | Live Wire Part A: soup can run / publish + DeployTarget schema (v0.33.0) |
| test_part_e.py | Live Wire Part E: --find-lr live loop + spike recovery hint + auto mixed-precision push + grad-accum advisory (v0.33.0) |
| test_part_d.py | Live Wire Part D: structured-output LogitsProcessor + auto-quant live picker + HF push integration smoke (v0.33.0) |
| test_part_c.py | Live Wire Part C: multi-trainer v0.28.0 features + selective ckpt hooks + CrossDocCollator (v0.33.0) |
| test_part_b.py | Live Wire Part B: auto-reexec under accelerate launch + DeepSpeed-MII live serve (v0.33.0) |
## Making Changes

View File

@ -964,7 +964,7 @@ training:
Records peak memory each step. When pressure crosses the threshold, recommends a new `(batch, accum)` pair preserving effective batch (capped at `accum=1024`).
> **v0.32.0 note:** the LR sweep currently writes a stub report demonstrating the schedule + analyzer + JSON path. The live in-process LR-sweep training loop, the live spike-recovery rollback, and live grad-accum mutation all land in v0.32.1. The schemas, validators, and APIs are stable in v0.32.0.
> **v0.33.0:** `--find-lr` now runs an in-process LR-sweep training loop (replaces the v0.32.0 stub curve), spike-recovery writes a `spike_recovery.json` hint with the decayed LR for re-launch, and the grad-accum advisory prints a recommended `(batch, accum)` pair when VRAM pressure crosses the threshold. Live optimizer-state rewind and live DataLoader rebuild remain follow-ups (HF Trainer / TRL upstream constraints).
## Training Intelligence (Forgetting + Checkpoint Quality)

View File

@ -115,7 +115,7 @@ def run_cmd(
help="Write env summary (pip freeze + GPU info) to this path",
),
) -> None:
"""Run a can end-to-end: extract → train (→ optional deploy)."""
"""Run a can end-to-end: extract -> train (-> optional deploy)."""
from soup_cli.cans.run import run_can
if not yes: