Skip to content

chat.md (EN+TR) documents a chat: config block with history_file persistence that does not exist (CR-A01-014) #424

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

An operator adds the documented chat: block (or output: cost_tracking:) to a training YAML. The run exits 1 with extra_forbidden, and the docs CI stays green.

Primary finding

CR-A01-014 — chat.md (EN+TR) documents a chat: config block with history_file persistence that does not exist

severity High · reachability default · intent contract-violation · confidence confirmed · independently confirmed · reproduced end to end · already tracked: KNOWN-OPEN C31-DOC-SCHEMA-PROSE — docs/roadmap/phase-16-trust-surface-hardening.md:785-786 (S15 open)

What happens. chat.md:40-47 documents a chat: YAML block (default_* settings, history_file). ForgeConfig (config.py:1604-1645, extra='forbid') has no chat field, forgelm chat loads no YAML, and history is kept only in memory (chat.py:69). The usermanual schema-drift guard skips unknown top-level keys, so it does not flag the block.

Where.

Evidence.

  • ForgeConfig(**minimal, chat={...}) -> ValidationError 'chat: Extra inputs are not permitted [type=extra_forbidden]'. check_usermanual_schema_drift.py --strict on a private copy -> 'OK: 180 yaml block(s) ... every recognised ForgeConfig key path resolves', exit 0. A scan of all usermanual yaml fences listed non-ForgeConfig top-level keys at chat.md:40, gpu-cost.md:38/97/111/125, gdpr.md:30 and troubleshooting.md:112 (EN and TR). `rg cost_tracking|rate_per_hour|gpu_profiles|history_file forgelm…
  • --dry-run on a config with the documented block -> 'chat: Extra inputs are not permitted [extra_forbidden]'. rg history_file over forgelm/ finds nothing.

Recommended fix. Delete the chat: block from chat.md EN and TR. Make the guard fail, or require an explicit allow-marker, on a fence whose top-level keys look like a ForgeLM config but are not ForgeConfig fields, while still exempting CI, docker-compose and similar fences. Then triage the gpu-cost, gdpr and troubleshooting blocks.

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: configCode area: configbacklog: 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