soup/soup_cli/commands
Alpamys b5cb4d12c1 fix(v0.48.0): lstat symlink check on original path, not realpath
CI revealed that on macOS the 3 symlink-rejection tests pass on Windows
(where tmp_path is non-symlink-resolved) but fail on macOS because
`/var/folders/...` is itself a symlink to `/private/var/folders/...`,
and the test's symlink `link.jsonl -> real.jsonl` was being checked AFTER
`os.path.realpath` had already followed both symlinks.

Fix: `os.lstat(original_path)` BEFORE `os.path.realpath` in three sites —
`validate_datasets`, `write_mix_recipe`, `load_mix_recipe`, and the
`soup runs curriculum-curve` history reader. Matches the v0.46.0 Part A
`_reject_symlink_target` pattern.

`FileNotFoundError` from `lstat` is treated as "no existing path" (write
target case); other `OSError`s propagate as `ValueError`. Cached `st`
result reused for the `overwrite` gate in `write_mix_recipe` so we don't
re-stat after realpath.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 19:25:22 +05:00
..
__init__.py Initial project setup: CLI skeleton + config + trainer + data pipeline 2026-02-20 16:14:56 +05:00
adapters.py fix: v0.24.1 — Windows Unicode fix, AWQ/GPTQ output path traversal 2026-04-03 23:41:44 +05:00
agent.py feat(agent): Agent Forge — OpenAPI/MCP/GraphQL spec → tool-calling SFT dataset (v0.46.0 Part B) 2026-05-11 17:12:13 +05:00
autopilot.py fix(autopilot): Windows py3.9 path traversal false-positive 2026-04-13 13:31:43 +05:00
bench.py feat(v0.40.2): Quick polish + v0.40.1 carry-overs (#36, #50, #51 + 7 papercuts) 2026-05-08 13:20:21 +05:00
can.py fix(v0.33.0): missed checklist items (CONTRIBUTING + Unicode arrow) 2026-04-27 20:11:22 +05:00
chat.py feat(correctness): v0.36.0 — Correctness First (4 Parts: A/B/C/D) 2026-04-30 11:52:51 +05:00
cost.py refactor(cost): polish soup cost from PR #42 2026-04-22 23:13:42 +05:00
data.py feat(v0.45.0): Plugin System & Ecosystem Wins — 5 Parts, +169 tests 2026-05-10 21:21:04 +05:00
data_forge.py feat(v0.47.0): Data Forge — synthetic data pipeline + data quality moat 2026-05-11 18:08:33 +05:00
data_mix.py feat(data): Data Mixing Optimizer + v0.48.0 release (v0.48.0 Part B, BETA) 2026-05-11 19:14:37 +05:00
data_score.py feat(v0.47.0): Data Forge — synthetic data pipeline + data quality moat 2026-05-11 18:08:33 +05:00
delinearize_llama4.py feat(v0.44.0): Live Dashboard & UX - 21 features, +192 tests 2026-05-10 19:20:18 +05:00
deploy.py feat(deploy): On-Device Deploy Autopilot — 10-profile catalog + recipe/script writer (v0.46.0 Part A) 2026-05-11 17:11:36 +05:00
diff.py feat(security): trust_remote_code opt-in across non-SFT trainers + 5 commands (v0.40.4 Part A) 2026-05-09 13:20:13 +05:00
doctor.py fix(v0.40.1): QA Hardening — UTF-8 bootstrap, schema strictness, multi-objective preference runtime, CLI UX 2026-05-08 12:03:16 +05:00
eval.py fix(v0.40.1): QA Hardening — UTF-8 bootstrap, schema strictness, multi-objective preference runtime, CLI UX 2026-05-08 12:03:16 +05:00
export.py feat(security): trust_remote_code opt-in across non-SFT trainers + 5 commands (v0.40.4 Part A) 2026-05-09 13:20:13 +05:00
fetch.py feat(v0.44.0): Live Dashboard & UX - 21 features, +192 tests 2026-05-10 19:20:18 +05:00
generate.py feat(security): trust_remote_code opt-in across non-SFT trainers + 5 commands (v0.40.4 Part A) 2026-05-09 13:20:13 +05:00
history.py fix(v0.40.1): QA Hardening — UTF-8 bootstrap, schema strictness, multi-objective preference runtime, CLI UX 2026-05-08 12:03:16 +05:00
infer.py feat(security): trust_remote_code opt-in across non-SFT trainers + 5 commands (v0.40.4 Part A) 2026-05-09 13:20:13 +05:00
init.py fix(v0.40.1): QA Hardening — UTF-8 bootstrap, schema strictness, multi-objective preference runtime, CLI UX 2026-05-08 12:03:16 +05:00
llama.py feat(v0.44.0): Live Dashboard & UX - 21 features, +192 tests 2026-05-10 19:20:18 +05:00
merge.py feat(security): trust_remote_code opt-in across non-SFT trainers + 5 commands (v0.40.4 Part A) 2026-05-09 13:20:13 +05:00
merge_sharded_fsdp_weights.py feat(v0.44.0): Live Dashboard & UX - 21 features, +192 tests 2026-05-10 19:20:18 +05:00
migrate.py fix(v0.40.1): QA Hardening — UTF-8 bootstrap, schema strictness, multi-objective preference runtime, CLI UX 2026-05-08 12:03:16 +05:00
monitor.py feat(v0.44.0): Live Dashboard & UX - 21 features, +192 tests 2026-05-10 19:20:18 +05:00
plugins.py feat(v0.45.0): Plugin System & Ecosystem Wins — 5 Parts, +169 tests 2026-05-10 21:21:04 +05:00
profile.py fix: v0.24.1 — Windows Unicode fix, AWQ/GPTQ output path traversal 2026-04-03 23:41:44 +05:00
push.py feat(hf): v0.29.0 — HuggingFace Hub Deep Integration 2026-04-23 16:17:28 +05:00
quantize.py feat(v0.44.0): Live Dashboard & UX - 21 features, +192 tests 2026-05-10 19:20:18 +05:00
quickstart.py feat(v0.40.2): Quick polish + v0.40.1 carry-overs (#36, #50, #51 + 7 papercuts) 2026-05-08 13:20:21 +05:00
recipes.py fix(v0.40.1): QA Hardening — UTF-8 bootstrap, schema strictness, multi-objective preference runtime, CLI UX 2026-05-08 12:03:16 +05:00
registry.py feat(registry): add Local Model Registry / Provenance Vault (v0.26.0 Part A) 2026-04-20 20:07:54 +05:00
runs.py fix(v0.48.0): lstat symlink check on original path, not realpath 2026-05-11 19:25:22 +05:00
serve.py feat(v0.40.3): Stub-to-live wave 1 (#33, #64; #65 still deferred) 2026-05-08 16:02:45 +05:00
sweep.py feat(preference): v0.40.0 — Preference Variety (4 Parts: BCO + dispatcher + DPO variants + multi-objective) 2026-05-01 22:26:30 +05:00
train.py feat(eval): Tracker & Eval Pro — 18 features (v0.43.0) 2026-05-10 18:04:40 +05:00
tui.py feat(observability): v0.34.0 — Observability & Dev UX (7 Parts) 2026-04-28 13:14:49 +05:00
ui.py v0.14.2: fix validate auto-detect, Windows histogram, UI auth docs 2026-03-25 23:10:07 +05:00
why.py feat(observability): v0.34.0 — Observability & Dev UX (7 Parts) 2026-04-28 13:14:49 +05:00