Repository navigation
Conversation
The page promised more than the code delivers, in the place a data-protection officer would read first: - "By the time data lands in JSONL, identifiable subjects are removed" and "no specific person's data is recoverable from the model. The audit report confirms this." ForgeLM masks eight identifier formats (email, phone, card, IBAN and the TR/DE/FR/US national IDs); names, addresses and free text are not detected, the patterns are tuned to miss borderline matches, and nothing measures what a trained model remembers. - "Detect memorisation: the audit step flags rows that overlap with known PII patterns" described PII detection as if it were memorisation detection. - The audit report was said to attribute rows to source documents and to carry a SHA-256 manifest. It does neither (it records counts and summaries, the audit's own metadata, and an optional Croissant card) and is not written to the audit log. - `retention` was said to "auto-delete originals" and to "record the intended TTL in the audit log". The horizons are only reported by `forgelm purge --check-policy`, which always exits 0. - An `ingestion: pii_mask:` YAML block and an `international_transfers.enabled` setting were shown; neither exists (the schema-drift guard skips unknown top-level keys, which is how they passed). The access and erasure sections now point at what exists: `forgelm reverse-pii` to find a subject's identifier in the files you give it, `forgelm purge --row-id` to remove rows (both write to the audit log), and the raw sources searched separately. English and Turkish. A reader can no longer cite this page for "personal data is removed before training" or "the model cannot reproduce a person's data". The page now says what the detectors cover and that coverage is partial. Refs #101 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Sorry @cemililik, you've used your own review budget of 250,000 diff characters for the last 7 days. You can request another review in 13 hours and 27 minutes by commenting |
|
Warning Review limit reachedEnable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. Next included review available in 30 minutes. View limit details
Comment |
Reviewer's GuideRewrites the English and Turkish GDPR/KVKK manual pages to match ForgeLM’s actual behavior, emphasizing partial identifier masking, non-enforced retention, limited audit evidence, command-based access and erasure workflows, and the absence of model memorisation guarantees; records the documentation correction in the changelog. Sequence diagram for data subject access and erasuresequenceDiagram
actor DataSubject
participant Operator
participant JSONL
participant AuditLog
DataSubject->>Operator: Request access or erasure
Operator->>JSONL: reverse-pii --query
JSONL-->>Operator: Matching rows, or zero matches
alt Erasure requested
Operator->>JSONL: purge --row-id --corpus
JSONL->>AuditLog: Record erasure
AuditLog-->>Operator: Hash-chained audit entry
end
Flow diagram for partial PII masking and audit scopeflowchart LR
Sources[Raw source documents] --> Ingest[forgelm ingest --pii-mask]
Ingest --> Masked[Masked JSONL]
Masked --> Audit[forgelm audit]
Audit --> Report[data_audit_report.json]
Masked -. Names, addresses, free text may remain .-> Masked
Report -. Counts and summaries only .-> Scope[No source attribution or hash manifest]
Flow diagram for retention policy reportingflowchart LR
Config[Retention horizons] --> Check[forgelm purge --check-policy]
Check --> Report[Lists overdue artefacts]
Check --> Exit[Always exits 0]
Report --> Storage[Storage layer deletes overdue artefacts]
Check -. No automatic deletion or audit-log entry .-> Storage
File-Level Changes
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Superseded by #1000: the wave-0 fixes are combined by theme into five pull requests to cut the review load. This branch's commits are included there unchanged apart from the |
… six-language site copy, described as the code behaves (#1000) ## Summary Compliance- and privacy-facing wording corrected to what the code does, plus the six-language site copy that repeated the same claims. Six earlier branches combined into one pull request, replacing #983, #986, #988 and #991 (to be closed as superseded) and two branches that were never opened. **This is compliance wording; please read the before/after tables.** ##⚠️ Localization exception `docs/standards/localization.md` keeps German, French, Spanish and Chinese as deferred tiers and says not to machine-translate them. At the owner's decision I **wrote the DE / FR / ES / ZH site strings myself**, with no native review. English and Turkish are authoritative; the other four need a native reader before they can be trusted. A follow-up issue for that is drafted, not yet filed. ## Related issues Refs #73, #99, #90, #94, #101, #87, #114, #75, #86, #89, #92, #98, #110, #112. The code halves stay open: whether the gate should ever compare trainer and approver, failing closed on a missing safety verdict (breaking), attaching SBOMs to the release. ## Changes | Theme | Said | Now says | |---|---|---| | **Segregation of duties** (ISO 27001 / SOC 2 mappings, SoA, SOP, deployer guide, manual) | the approval gate "enforces trainer ≠ approver", "dual-controlled" | it **records** trainer and approver identities and does not compare them; both are self-asserted; keeping them different people is the deployer's control. `require_human_approval` is not enforced for strict tiers by `ConfigError` (it only is when safety evaluation is off) | | **GDPR / KVKK manual page** | identifiable subjects are removed; "no specific person's data is recoverable from the model"; an `international_transfers` setting; audit report with source attribution and SHA-256 manifest; retention "auto-deletes originals" | eight identifier formats are masked, names and free text are not; the report is counts and summaries, not written to the audit log; retention is reported, not enforced; memorisation is not measured | | **No-verdict safety evaluation** (8 documents + TR) | exit 0 ⇒ every gate passed; classifier load failure halts the run; classification errors count as unsafe | a safety evaluation that produced no verdict (`evaluation_completed: false`) keeps the model and exits 0 (4 with the approval gate) regardless of `auto_revert`; code unchanged | | **SBOM** (reference, SOP, guides, manuals, mappings) | `gh release download …`; "re-emit from the git tag"; "licence extraction in SBOM" | workflow-run artifacts, 90-day retention; `gh run download`; the file is the CI runner's `pip list` (test tooling included, no dependency graph, no licences) | | **Article 12 / 14** (audit-event catalogue, audit-log and human-oversight pages) | the audit log is "mandated by Article 12"; the gate "implements" Article 14 | the log is development-time evidence that supports Annex IV; Article 12 logging and Article 14 in-use oversight belong to the deployed system | | **Site, six languages** | benchmark failure "fails (exit 3)"; "dual-controlled"; Slack/Teams/Discord; "PII redacted"; "satisfying the access-request side of the GDPR"; wizard "Enforce automatic deletion"; "SHA-256 manifest"; DeepSpeed "presets" | exit 3 only with `auto_revert: true`; records the approver; Slack-format, Teams and Discord need a relay; common formats masked, names not detected; reverse-pii finds only what is literally in the scanned files; retention mode reserved; SHA-256 sidecar; bring your own DeepSpeed JSON | The site GGUF strings describe the `.sha256` sidecar, the retention strings the reserved mode, and the DeepSpeed strings the preset caveat; they match the GGUF, code and docs pull requests, so **merge those first**. A new site test keeps the retired phrases out of English, Turkish and the HTML (mutation-checked). ### What this changes for a deployer A DPIA or audit response can no longer cite ForgeLM for: segregation of duties being enforced, personal data being removed or unrecoverable from the model, the SBOM being on the release page, or the audit log being the Article 12 mechanism. ## Type - [x] Documentation (and site copy) ## Testing - The full `CLAUDE.md` gauntlet from a clean worktree of this branch: exit 0. (An earlier run failed `tests/test_turkish_glossary_terms.py` because the Article 12 rewrite wrote "Ek IV" instead of "Annex IV", fixed here, then two timing-based regex linearity tests failed while two gauntlets ran at once; they pass alone and in this final run.) - `node --test tests/site/*.test.cjs`: 81 pass; English ↔ Turkish keys in lockstep. ## Checklist - [x] English and Turkish updated together (Turkish wording needs the owner's review) - [ ] DE / FR / ES / ZH reviewed by a native speaker — **not done** - [x] CHANGELOG entries under `[Unreleased]` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Summary
The user-manual GDPR / KVKK page promised more than the code delivers, in the place a data-protection officer would read first. It said that identifiable subjects are removed before training, that "no specific person's data is recoverable from the model" and that "the audit report confirms this". This rewrites the page to what ForgeLM does, in English and Turkish.
Related issues
Refs #101 — the documentation half for this page. The website strings that repeat the same claims (
site/js/translations.js, six locales) are a separate change and #101 stays open for them.Changes — each row shows what it said and what it says now
ingestion: pii_mask:YAML blockforgelm ingest … --pii-mask(the YAML block does not exist; the schema-drift guard skips unknown top-level keys, which is how it passed)forgelm purge --check-policylists what is overdue and always exits 0; nothing is deleted or logged for itinternational_transfers.enabled: true"The access and erasure sections now point at commands that exist:
forgelm reverse-piito find a subject's identifier in the files you give it,forgelm purge --row-idto remove rows (both write to the audit log), and the raw sources searched separately.What this changes for a deployer
A DPIA or an audit response can no longer cite this page for "personal data is removed before training" or "the model cannot reproduce a person's data". That is the point: the page now states what the detectors cover and that the coverage is partial. Please read the new wording of the first and last rows; it is yours to approve.
Not done here
home.*,features.*and the privacy copy in six locales).Type
Testing
CLAUDE.mdgauntlet from a clean worktree of this branch: exit 0 (bilingual parity, code-block parity, anchors, usermanual self-contained links, schema drift, YAML snippets).Checklist
[Unreleased]🤖 Generated with Claude Code
Summary by Sourcery
Rewrite the GDPR/KVKK documentation in English and Turkish to accurately describe ForgeLM’s compliance capabilities, limitations, and operator responsibilities.
Enhancements:
Documentation:
forgelm ingest,forgelm reverse-pii,forgelm purge, and retention-policy workflows.Chores: