Skip to content

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

Open

Description

@cemililik

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.

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

No one assigned

    Labels

    area: dev-toolingCode area: dev-toolingbacklog: knownAlready tracked in docs/roadmapblockedWaits for another issue (see Blocked by); set and removed automatically, never by handbugSomething isn't workingseverity: highWrong behaviour or a false claim users rely onsource: review-2026-10Found by the October 2026 code and documentation reviewwave: 1Roadmap wave 1: high severity, small effort

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions