Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

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

Open
#893 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
12/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Active
Tech stack
huggingface, python
Domain
cli

Research direction

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.

Written by the indexing model from the issue text.

Description

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.

Dominant language
Python
Stars
9
Forks
1
Avg merge
11h 8m
Merged PRs (30d)
10

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from HodeTech/ForgeLM

All issues in HodeTech/ForgeLM

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.