Skip to content

[Wave 4] Low/info — Docs: docs/guides/data_audit.md #723

Open

Description

@cemililik

Wave 4 · 14 finding(s) in 14 fix package(s). One pass over this document; keep the Turkish mirror in sync.

Findings

  • DOC-BLEGAL-185 (docs, Low) — docs/guides/data_audit.md: misleading — "Typical multi-split runs (train / validation / test) see a near-linear speed-up at --workers 3."
    severity Low
    Where. docs/guides/data_audit.md:598-599 (Turkish mirror: docs/guides/data_audit-tr.md:583) · type: misleading
    The document says. "Typical multi-split runs (train / validation / test) see a near-linear speed-up at --workers 3."
    What the code does. Re-measured on the snapshot: with a typical 80/10/10 split, --workers 3 gave about 1.2x (ceiling total/largest = 1.25x; the cross-check measured 0.96-1.04x). Only equal-size splits gave 1.6-2.6x. The largest split bounds the wall time.
    Proposed correction. 'Speed-up is bounded by the largest split (total / largest): a typical 80/10/10 split gains about 1.2x at --workers 3; equal-size splits approach 2-3x.'
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-020 (docs, Low) — docs/guides/data_audit.md: misleading — Per-split example: sample_count: 1240 with languages_top3 counts 950/240/50, which sum to the row count.
    severity Low
    Where. docs/guides/data_audit.md:70-79 (Turkish mirror: docs/guides/data_audit-tr.md:75-79) · type: misleading
    The document says. Per-split example: sample_count: 1240 with languages_top3 counts 950/240/50, which sum to the row count.
    What the code does. Language detection runs on a uniform reservoir of at most 200 text-bearing payloads, so languages_top3[].count values sum to at most 200, not to the row count.
    Code references. forgelm/data_audit/_streaming.py:226-245, forgelm/data_audit/_aggregator.py:127-145
    Proposed correction. Change the example counts so they sum to ≤200 and add: "languages_top3 counts are over a ≤200-row reservoir sample, not over all rows."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-021 (docs, Low) — docs/guides/data_audit.md: wrong detail — Credit cards run through issuer-prefix + Luhn and TR IDs through the TC Kimlik checksum; other categories surface on regex shape alone.
    severity Low
    Where. docs/guides/data_audit.md:126-128 (Turkish mirror: docs/guides/data_audit-tr.md:126-129) · type: wrong detail
    The document says. Credit cards run through issuer-prefix + Luhn and TR IDs through the TC Kimlik checksum; other categories surface on regex shape alone.
    What the code does. IBANs are also checksum-validated (ISO 7064 mod-97) before they are counted.
    Code references. forgelm/data_audit/_pii_regex.py:177-193, forgelm/data_audit/_pii_regex.py:222-226
    Proposed correction. "... credit cards run through an issuer-prefix + Luhn check, IBANs through ISO 7064 mod-97, TR national IDs through the TC Kimlik No checksum. Other categories surface on regex shape alone ..."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-022 (docs, Low) — docs/guides/data_audit.md: wrong detail — The gate reads the declared tier in PII_SEVERITY.
    severity Low
    Where. docs/guides/data_audit.md:195-197 (Turkish mirror: docs/guides/data_audit-tr.md:206-208) · type: wrong detail
    The document says. The gate reads the declared tier in PII_SEVERITY.
    What the code does. The gate reads the merged table {**PII_SEVERITY, **PII_ML_SEVERITY}, so an ML category raised to critical would also gate.
    Code references. forgelm/data_audit/_summary.py:208-228
    Proposed correction. "... the gate reads the declared tier in the merged PII_SEVERITY + PII_ML_SEVERITY table ..."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-024 (docs, Low) — docs/guides/data_audit.md: stale — Heading 'Heuristic quality filter (Phase 12, opt-in)'; programmatic audit_dataset example implies CLI-equivalent output
    severity Low
    Where. docs/guides/data_audit.md:357; docs/guides/data_audit.md:621-633 · type: stale
    The document says. Heading 'Heuristic quality filter (Phase 12, opt-in)'; programmatic audit_dataset example implies CLI-equivalent output
    What the code does. CLI default is ON (data_audit.md:13 and the parser), but library audit_dataset() still defaults enable_quality_filter=False, so the documented API example produces an empty quality_summary
    Code references. forgelm/cli/_parser.py:584-595, forgelm/data_audit/_orchestrator.py:235
    Proposed correction. Fix the heading; note the library default in the Programmatic API section
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-025 (docs, Low) — docs/guides/data_audit.md: stale — Section heading 'Heuristic quality filter (Phase 12, opt-in)' / 'forgelm audit --quality-filter runs ...'
    severity Low
    Where. docs/guides/data_audit.md:357-359 (Turkish mirror: docs/guides/data_audit-tr.md:360-362) · type: stale
    The document says. Section heading 'Heuristic quality filter (Phase 12, opt-in)' / 'forgelm audit --quality-filter runs ...'
    What the code does. In the CLI the filter is on by default (BooleanOptionalAction; the dispatcher defaults it to True), and the guide's own intro says so.
    Code references. forgelm/cli/subcommands/_audit.py:353
    Proposed correction. Retitle to 'Heuristic quality filter (Phase 12; CLI default-ON since v0.6.0)' and say 'forgelm audit runs ... unless --no-quality-filter is passed'.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-026 (docs, Low) — docs/guides/data_audit.md: wrong detail — quality_summary example with keys samples_flagged, by_check, overall_quality_score.
    severity Low
    Where. docs/guides/data_audit.md:362-376 (Turkish mirror: docs/guides/data_audit-tr.md:365-378) · type: wrong detail
    The document says. quality_summary example with keys samples_flagged, by_check, overall_quality_score.
    What the code does. The block also carries samples_evaluated, the denominator of overall_quality_score.
    Code references. forgelm/data_audit/_summary.py:274-300
    Proposed correction. Add "samples_evaluated": 1240, to the example.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-027 (docs, Low) — docs/guides/data_audit.md: wrong detail — The auditor reads the first text-bearing column it finds, in this priority: text → content → completion → prompt. For messages-format chat data, th…
    severity Low
    Where. docs/guides/data_audit.md:517-519 (Turkish mirror: docs/guides/data_audit-tr.md:525-527) · type: wrong detail
    The document says. The auditor reads the first text-bearing column it finds, in this priority: text → content → completion → prompt. For messages-format chat data, the role-tagged content is concatenated.
    What the code does. The instruction pairs (instruction/output, User/Assistant, prompt/response) take priority and both halves are joined. text/content/completion/prompt come next, then messages content, which is joined without role tags. A half-present instruction pair is the last fallback.
    Code references. forgelm/data_audit/_streaming.py:116-163, forgelm/data_audit/_types.py:78-94
    Proposed correction. "Payload selection: (1) recognised instruction pairs (instruction/output, User/Assistant, prompt/response), both halves joined; (2) the first non-empty of text → content → completion → prompt; (3) messages[].content concatenated (no role tags); (4) a lone half of an instruction pair."
    Turkish mirror. the Turkish page has no such statement

  • DOC-D2B01-028 (docs, Low) — docs/guides/data_audit.md: wrong detail — Any column that appears after row 0 is reported under schema_drift_columns.
    severity Low
    Where. docs/guides/data_audit.md:521-524 (Turkish mirror: docs/guides/data_audit-tr.md:529-533) · type: wrong detail
    The document says. Any column that appears after row 0 is reported under schema_drift_columns.
    What the code does. Drift columns are the columns missing from the most common keyset, whatever row they first appear in. A column present from row 0 but absent from the majority keyset is drift, and a column first seen after row 0 that is in the majority keyset is not.
    Code references. forgelm/data_audit/_aggregator.py:211-223
    Proposed correction. "... any column not present in the most common row keyset is reported under schema_drift_columns."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-029 (docs, Low) — docs/guides/data_audit.md: wrong detail — The on-disk JSON is byte-identical across worker counts; the only field that varies is generated_at.
    severity Low
    Where. docs/guides/data_audit.md:601-606 (Turkish mirror: docs/guides/data_audit-tr.md:585-589) · type: wrong detail
    The document says. The on-disk JSON is byte-identical across worker counts; the only field that varies is generated_at.
    What the code does. With --croissant, croissant.datePublished is set to the same wall-clock generated_at value and also varies between runs.
    Code references. forgelm/data_audit/_orchestrator.py:462-473, forgelm/data_audit/_croissant.py:226
    Proposed correction. "... the only fields that vary are generated_at and, with --croissant, croissant.datePublished."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-030 (docs, Low) — docs/guides/data_audit.md: wrong detail — Language stats show "unknown (install forgelm[ingestion])" when langdetect is missing
    severity Low
    Where. docs/guides/data_audit.md:615 · type: wrong detail
    The document says. Language stats show "unknown (install forgelm[ingestion])" when langdetect is missing
    What the code does. Output is a bare 'unknown=' with no hint and no note; the string does not occur in forgelm/
    Code references. forgelm/data_audit/_streaming.py:25-41
    Proposed correction. Document the bare 'unknown', or emit the hint/note in code
    Turkish mirror. the Turkish page has no such statement

  • DOC-D2B01-031 (docs, Low) — docs/guides/data_audit.md: wrong detail — Troubleshooting: the symptom "unknown (install forgelm[ingestion])" appears in language stats when langdetect is missing.
    severity Low
    Where. docs/guides/data_audit.md:615 (Turkish mirror: docs/guides/data_audit-tr.md:625) · type: wrong detail
    The document says. Troubleshooting: the symptom "unknown (install forgelm[ingestion])" appears in language stats when langdetect is missing.
    What the code does. When langdetect is missing (ImportError), _detect_language returns plain "unknown"; no install hint is emitted. Reproduced: languages_top3 showed [{'code': 'unknown', ...}].
    Code references. forgelm/data_audit/_streaming.py:25-41
    Proposed correction. Symptom: "languages_top3 reports only {"code": "unknown"}"; cause: "langdetect not installed (or rows shorter than 20 chars)".
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-036 (docs, Low) — docs/guides/data_audit.md: misleading — Phase 11.5 added 'a verbose-by-default truncation policy'.
    severity Low
    Where. docs/guides/data_audit.md:7-9 (Turkish mirror: docs/guides/data_audit-tr.md) · type: misleading
    The document says. Phase 11.5 added 'a verbose-by-default truncation policy'.
    What the code does. The default is non-verbose: zero-finding splits are folded into one '(N clean split(s)...)' tail line, and --verbose expands them. The doc itself says this at L568-572.
    Code references. forgelm/data_audit/_summary.py:380-403
    Proposed correction. Replace with 'a folded-by-default human summary (clean splits collapse into one line; --verbose expands them)'.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D2B01-037 (docs, Low) — docs/guides/data_audit.md: misleading — Mask with forgelm ingest --pii-mask (or in your own preprocessing) before publishing the dataset (also the remediation in the PII gate message, L173).
    severity Low
    Where. docs/guides/data_audit.md:129-130 (Turkish mirror: docs/guides/data_audit-tr.md) · type: misleading
    The document says. Mask with forgelm ingest --pii-mask (or in your own preprocessing) before publishing the dataset (also the remediation in the PII gate message, L173).
    What the code does. forgelm ingest reads only .pdf, .docx, .epub, .txt and .md sources, not JSONL, so an audited JSONL cannot be masked by re-running ingest on it. The usable routes are re-ingesting the original documents with --pii-mask, or calling forgelm.data_audit.mask_pii on the JSONL text.
    Code references. forgelm/ingestion.py:60, forgelm/ingestion.py:2005
    Proposed correction. Write: 'Mask by re-running forgelm ingest --pii-mask on the original documents, or apply forgelm.data_audit.mask_pii to the JSONL text in your own preprocessing.'
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

Done when

  • Every finding above is fixed or closed with a reason (tick it here).
  • Code fixes carry a test; doc fixes update the Turkish mirror in the same PR.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationseverity: lowMinor defect, inaccuracy or rough edgesource: review-2026-10Found by the October 2026 code and documentation reviewwave: 4Roadmap wave 4: low / info / watch, when touching the module

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions