The anti-fabrication rules in modes/_shared.md are missing from 16 of the 18 localized _shared.md files. For those languages the rule does not exist at any layer: not in code, not in a test, and not as an instruction the agent reads.
What is missing
modes/_shared.md:30-31 carries two rules:
**RULE: NEVER claim the user authored a project, repo, library, tool, framework, or open-source
artefact unless explicitly attributed to them in cv.md or article-digest.md.** Tool-of-trade
conflation (user uses X -> user built X) is the most common fabrication pattern and is forbidden.
**RULE: Keywords get reformulated, never fabricated.** ...
Present in modes/ja/_shared.md:28-29 (translated, keeping the second rule's English wording verbatim) and modes/nl/_shared.md:32-33 (translated as REGEL). Absent from ar, da, de, es, fr, hi, id, it, ko, pl, pt, ru, tr, ua, zh, zh-TW.
modes/de/_shared.md goes straight from the file list to the North Star table with no rule block at all.
The ### NEVER list is present in all 18, so this is not a total absence of guardrails, but the authorship rule and the reformulate-never-fabricate rule specifically did not make it across.
Two related gaps found alongside it:
- The exclusivity framing is gone in 17 of 18. English
_shared.md:13 states the listed files are the ONLY sources and names what is out of scope (auto-memory, parent-directory repos, cross-session inferences). Only ja/_shared.md:11-12 reproduces it; the others replace it with a read-order instruction ("ALWAYS read before each evaluation", e.g. de/_shared.md:14, fr/_shared.md:14). That is a sequencing hint, not a boundary. The voice-dna.md, interview-prep/ and _custom.md rows are missing from most.
- No localized
cover.md, email.md or contacto.md exists in any of the 18 directories. Those three English files carry the densest guardrail text, including the only emphatic "Never submit. Never send email. Never click send." block (modes/email.md:15). A user with language.modes_dir: modes/de falls back to English for them, so the guardrail survives, but by accident rather than design.
Why this ranks above the other gaps I looked at
Elsewhere in the system a missing test still leaves an instruction in the agent's read path. Here, for 16 languages, there is nothing at any layer. A user on modes/de gets a system that has never been told the tool-of-trade conflation rule, and the CV goes to a hiring manager.
The check is cheap, because the machinery already exists
test-all.mjs:3189-3202 already enumerates every language directory and asserts a required string in each pipeline.md:
const langPipelines = readdirSync(join(ROOT, 'modes'), { withFileTypes: true })
.filter((e) => e.isDirectory())
.map((e) => `modes/${e.name}/pipeline.md`)
.filter((p) => existsSync(join(ROOT, p)));
Pointing the same loop at _shared.md is a small change. The one design question is what to assert against, since the rule text is translated and a literal English match would fail for nl while passing for ja.
A stable machine-readable marker per rule would survive translation and make the test exact, for example a comment the translator is required to carry across:
<!-- guardrail:authorship -->
<!-- guardrail:no-fabrication -->
<!-- guardrail:source-exclusivity -->
That also gives translators an explicit checklist of what must not be dropped, which is the underlying failure here: nothing told them these lines were load-bearing.
Happy to send a PR with the markers plus the enumeration test. Flagging first because the marker convention is a repo-wide decision, and because 16 files need translated rule text added, which I would rather you review per language than have me generate unreviewed.
The anti-fabrication rules in
modes/_shared.mdare missing from 16 of the 18 localized_shared.mdfiles. For those languages the rule does not exist at any layer: not in code, not in a test, and not as an instruction the agent reads.What is missing
modes/_shared.md:30-31carries two rules:Present in
modes/ja/_shared.md:28-29(translated, keeping the second rule's English wording verbatim) andmodes/nl/_shared.md:32-33(translated as REGEL). Absent fromar,da,de,es,fr,hi,id,it,ko,pl,pt,ru,tr,ua,zh,zh-TW.modes/de/_shared.mdgoes straight from the file list to the North Star table with no rule block at all.The
### NEVERlist is present in all 18, so this is not a total absence of guardrails, but the authorship rule and the reformulate-never-fabricate rule specifically did not make it across.Two related gaps found alongside it:
_shared.md:13states the listed files are the ONLY sources and names what is out of scope (auto-memory, parent-directory repos, cross-session inferences). Onlyja/_shared.md:11-12reproduces it; the others replace it with a read-order instruction ("ALWAYS read before each evaluation", e.g.de/_shared.md:14,fr/_shared.md:14). That is a sequencing hint, not a boundary. Thevoice-dna.md,interview-prep/and_custom.mdrows are missing from most.cover.md,email.mdorcontacto.mdexists in any of the 18 directories. Those three English files carry the densest guardrail text, including the only emphatic "Never submit. Never send email. Never click send." block (modes/email.md:15). A user withlanguage.modes_dir: modes/defalls back to English for them, so the guardrail survives, but by accident rather than design.Why this ranks above the other gaps I looked at
Elsewhere in the system a missing test still leaves an instruction in the agent's read path. Here, for 16 languages, there is nothing at any layer. A user on
modes/degets a system that has never been told the tool-of-trade conflation rule, and the CV goes to a hiring manager.The check is cheap, because the machinery already exists
test-all.mjs:3189-3202already enumerates every language directory and asserts a required string in eachpipeline.md:Pointing the same loop at
_shared.mdis a small change. The one design question is what to assert against, since the rule text is translated and a literal English match would fail fornlwhile passing forja.A stable machine-readable marker per rule would survive translation and make the test exact, for example a comment the translator is required to carry across:
That also gives translators an explicit checklist of what must not be dropped, which is the underlying failure here: nothing told them these lines were load-bearing.
Happy to send a PR with the markers plus the enumeration test. Flagging first because the marker convention is a repo-wide decision, and because 16 files need translated rule text added, which I would rather you review per language than have me generate unreviewed.