[Phase 16] S7 — CLI and wizard boundary: policy declared must be policy enforced

Offen
#893 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
12/100
Issue-Typ
Bug
Klarheit
Muss geklärt werden
Aktivitätsstatus
Aktiv
Tech-Stack
huggingface, python
Bereich
cli

Rechercherichtung

This is an umbrella roadmap issue, not a single fix. Start with the --offline dispatch path in _dispatch.py, the run_chat / load_model call sites, and the wizard, using the planned section in docs/roadmap/phase-16-trust-surface-hardening.md (lines 481-516). Done means the five exit criteria pass, each in its own subprocess or sentinel test.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

phase: 16 source: roadmap

Roadmap · Phase 16, step S7 · size XL · 8 unit(s) · planned in docs/roadmap/phase-16-trust-surface-hardening.md:481-516

Summary

All eight units are the CLI boundary declaring something it does not enforce or cannot deliver. --offline is applied in _dispatch.py after the subcommand is dispatched, so the global flag is inert for every subcommand — export, deploy, ingest, audit, safety-eval, cache-*, quickstart's parent process — while the CLI reference promises it disables all Hub network calls; doctor is the only exception, because it declares its own flag.

Units

Unit Tracked by (October 2026 review)
C33-CLI-ERROR-ENVELOPE (= CLI-05 + CLI-11) #79 · #365 · #376 · #420 · #547 · #567 · #643 · #652 · #661 · #664 · #674 · #677 · #713 · #832
F-W20260729-CLI-04 #100 · #109 · #542 · #571 · #635
F-W20260729-CLI-02 #113 · #571 · #635
F-W20260729-CLI-17 #113 · #542 · #567 · #595 · #604 · #643 · #738
F-W20260729-CLI-18 #113 · #542 · #595 · #604 · #643 · #654 · #738
F-W20260729-CLI-09 #113 · #561 · #563 · #600 · #644 · #650 · #651 · #668 · #691 · #692 · #693 · #694 · #695
F-W20260729-CLI-12 #113 · #600 · #643 · #668 · #691 · #692 · #693 · #694 · #695
F-W20260729-CLI-13 #113 · #600 · #668 · #691 · #692 · #693 · #694 · #695

Decisions this step executes

  • C-11 — the [export] extra: the external converter becomes an explicit, validated prerequisite.

Plan

  • Commit 1, the central seam: apply the offline policy before dispatch and thread offline into run_chat / load_model; add one canonical failure renderer for UnicodeDecodeError, OSError and the no-train modes.
  • Commit 2, capability honesty: [export] stops proving capability with import llama_cpp and probes for a real converter (doctor uses the same false proxy and is corrected with it; the FileNotFoundError message names the actual install step); share quantization / temperature validation between the parser and the REPL; add the cache-models local-path branch.
  • Commit 3, the wizard: three-state keep / replace / disable per collector, WizardOutcome.valid, and path resolution inside the try block.

Exit criteria

  • Every no-train mode emits exactly one JSON object on stdout plus the documented exit code, with no log text on stdout.
  • An invalid-UTF-8 config, a read-only cache and an unwritable export parent each produce one {"success": false, …} object, in separate subprocess tests.
  • forgelm --offline chat HUB_ID reaches no network function under sentinels, and local_files_only=True reaches both from_pretrained calls.
  • An invalid generated config leaves the file, preserves the state snapshot, prints no "start later" message and exits 1.
  • Explicit-disable answers leave fields absent while bare Enter preserves them, asserted in both directions.

How to deliver

  • One root-cause family, committed on its own; then an Opus review round and a Sonnet review round, each with verified findings fixed and committed before the next step begins.
  • A reproducer that is red before the fix and green after; the full gauntlet from CLAUDE.md passes under ./.venv/bin/python.
  • Every English documentation edit ships with its Turkish mirror in the same commit; a new or renamed audit event gets its EN and TR catalog rows in the same PR.
  • A step that grows a deferred module carries its budget_history justification in the same diff; a widened guard rolls out non-strict first, then flips.
  • Commit bodies cite Absorbs F-W20260729-…; the CHANGELOG [Unreleased] section gets an entry only for a change a user or library consumer can observe (decision C-20).

Planned in docs/roadmap/phase-16-trust-surface-hardening.md (read at f94595f). Unit IDs (F-W20260729-…) come from the 2026-07-29/30 full-project review; the issue numbers next to them are the October 2026 review's records of the same defects.

Vorherrschende Sprache
Python
Sterne
9
Forks
1
Ø Merge
8 Std. 20 Min.
Gemergte PRs (30 T.)
59

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus HodeTech/ForgeLM

Alle Issues in HodeTech/ForgeLM

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.