Repository navigation
Chat user manual documents a chat: YAML block, persistent history, YAML seed: and GGUF loading, none of which forgelm chat has; the schema-drift guard skips the unknown block (CR-A17a-002) #452
Description
Wave 1 · theme D1-8: Docs describing features that do not exist (doc side of code findings) · highest severity High · 1 finding(s) · effort small
Summary
docs/usermanuals/en/deployment/chat.md:40-47 (TR mirror :41-46) shows a chat: config block (default_temperature, default_top_p, default_max_tokens, default_system_prompt, history_file 'persisted across sessions'). ForgeConfig is extra='forbid' (config.py:1605) and has no chat field, so this block fails --dry-run. forgelm chat loads no YAML at all, as the same page states at :66, and chat.py has no history persistence, only in-memory history plus /save. chat.md:56 (TR :56) lists 'A GGUF file: ./model.gguf (uses llama.cpp under the hood)'. chat.py and inference.py contain no GGUF handling, and load_model on a .gguf path fails with OSError 'It looks like the config file at .../m.gguf is not a valid JSON file' (dummy file; load_model never passes gguf_file=). chat.md:125 (TR :126) tells readers to 'set seed: in YAML' for chat reproducibility, which chat cannot consume. tools/check_usermanual_schema_drift.py:302-304 skips any top-level key that is not a ForgeConfig block ('out of scope'). The guard therefore reports 'OK: 180 yaml block(s)' while this fabricated block ships.
Primary finding
CR-A17a-002 — Chat user manual documents a chat: YAML block, persistent history, YAML seed: and GGUF loading, none of which forgelm chat has; the schema-drift guard skips the unknown block
severity High · reachability default · intent contract-violation · confidence confirmed · independently confirmed · reproduced (plumbing only) · already tracked: KNOWN-OPEN C31-DOC-SCHEMA-PROSE (DOCS-08+DOCS-09) — docs/roadmap/phase-16-trust-surface-hardening.md:773,785-786
What happens. docs/usermanuals/en/deployment/chat.md:40-47 (TR mirror :41-46) shows a chat: config block (default_temperature, default_top_p, default_max_tokens, default_system_prompt, history_file 'persisted across sessions'). ForgeConfig is extra='forbid' (config.py:1605) and has no chat field, so this block fails --dry-run. forgelm chat loads no YAML at all, as the same page states at :66, and chat.py has no history persistence, only in-memory history plus /save. chat.md:56 (TR :56) lists 'A GGUF file: ./model.gguf (uses llama.cpp under the hood)'. chat.py and inference.py contain no GGUF handling, and load_model on a .gguf path fails with OSError 'It looks like the config file at .../m.gguf is not a valid JSON file' (dummy file; load_model never passes gguf_file=). chat.md:125 (TR :126) tells readers to 'set seed: in YAML' for chat reproducibility, which chat cannot consume. tools/check_usermanual_schema_drift.py:302-304 skips any top-level key that is not a ForgeConfig block ('out of scope'). The guard therefore reports 'OK: 180 yaml block(s)' while this fabricated block ships.
Where.
docs/usermanuals/en/deployment/chat.md:56docs/usermanuals/en/deployment/chat.md:125docs/usermanuals/tr/deployment/chat.md:40-47(full yaml fence; body :41-46)docs/usermanuals/tr/deployment/chat.md:56tools/check_usermanual_schema_drift.py:302-304forgelm/config.py:1604-1605(class ForgeConfig + extra=forbid)docs/usermanuals/tr/deployment/chat.md:126(seed: claim; finding text says TR :126 in mechanism, consistent)forgelm/inference.py:40-115(load_model without GGUF handling)forgelm/cli/_parser.py:35-67(chat subparser: no --config/seed/top_p)forgelm/inference.py:83
Evidence.
- Guard run in private copy: 'OK: 180 yaml block(s) under docs/usermanuals/ checked'. rg -i gguf over forgelm/chat.py, forgelm/inference.py and cli/subcommands/_chat.py: no matches.
Recommended fix. Remove the chat: block, the history_file/seed claims and the GGUF bullet from both mirrors, or mark them as planned. Make the schema-drift guard flag unknown top-level keys in blocks that otherwise look like ForgeConfig snippets.
Acceptance criteria
- A regression test reproduces the failure scenario and asserts the corrected behaviour.
- Documentation listed above is corrected in English and in its Turkish mirror in the same PR.
- Every finding in this issue is resolved or explicitly closed with a reason.
Found by the October 2026 ForgeLM code and documentation review against commit cab2947. Code links point at that commit; line numbers may have moved since. Finding IDs (CR-…, DOC-…, TECH-…) are stable references for this backlog.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTodo
Activity