Repository navigation
Description
Wave 4 · group W4 Docs · highest severity Low · 1 finding(s) · effort docs fix
Summary
The page explains that evaluation_completed: false marks a safety run that produced no usable evidence, then gives a jq view that renders the field with .evaluation_completed // "n/a". jq's alternative operator falls back on false as well as null, so exactly the rows the view is meant to expose print as completed=n/a, indistinguishable from older rows that lack the field.
Primary finding
F-W1-DOCS-TRAIN-16 — The trend query hides an explicit evaluation failure as missing telemetry
severity Low · confidence high · reproduced with jq 1.7.1
What happens. docs/usermanuals/en/evaluation/trend-tracking.md:47 and the Turkish mirror at the same line. Rows with evaluation_completed: false do occur: the safety orchestrator sets it when the classifier abstains (forgelm/safety/_orchestrator.py:359-361) and _append_trend_entry writes it to safety_trend.jsonl (forgelm/safety/_results.py:168).
Where.
docs/usermanuals/en/evaluation/trend-tracking.md:47docs/usermanuals/tr/evaluation/trend-tracking.md:47forgelm/safety/_orchestrator.py:359-361forgelm/safety/_results.py:168
Evidence (re-verified on 2026-10-09).
- With jq 1.7.1 the documented expression prints
completed=n/afor{"evaluation_completed": false},completed=truefortrue, andcompleted=n/awhen the field is absent.
Recommended fix. Render the field without the alternative operator, for example completed=\(if .evaluation_completed == null then "n/a" else .evaluation_completed end), which prints true, false and n/a for the three cases.
Acceptance criteria
- The jq view prints
true,falseandn/afor true, false and missing values. - Documentation listed above is corrected in English and in its Turkish mirror in the same PR.
- The finding is resolved or explicitly closed with a reason.
Found by the September 2026 independent review of ForgeLM against commit cab2947 and re-verified against development at f94595f on 2026-10-09. Code links point at cab2947; line numbers may have moved since. Finding IDs (F-W1-…) are stable references for this backlog.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTodo
Activity
cemililik commentedon Oct 11, 2026
Where to start
Thanks for taking a look. Please confirm the issue is unassigned and comment before starting so work does not overlap.
Start with these files on
development:Use an explicit null/missing check so evaluation_completed=false prints false. Exercise the recipe with true, false, null and a missing key, and keep EN/TR shell blocks identical.
Run the focused tests:
Run these guards/checks as applicable to the changed files:
If user-facing documentation changes, update the existing Turkish mirror in the same PR; keep commands, code and terminal output in English and structurally aligned. English-only contributor standards need no new mirror.
Open the PR against
developmentwithFixes #884once every finding is resolved or explicitly closed with a reason; useRefs #884for partial work and list the resolved finding IDs.cemililik commentedon Oct 17, 2026
Update — re-verified on
development(0766e94). The expression is unchanged in bothpages (line 47).
No Python test is needed; the
pytest/rufflines above are only a sanity run. Check thereplacement against three rows —
true,falseand a missing field: the documentedexpression prints
n/aforfalse, the corrected one printsfalse. Put the identicalline in the English and the Turkish page.
yuefdev commentedon Oct 17, 2026
I'll take this one. I'll keep the English and Turkish jq recipes identical and check true, false, null and missing values.