Problem / realer Vorfall
Ein Agent hat in einem standards-nutzenden node-Repo (sebastian-software/relanto) die managed Datei .oxfmtrc.json erweitert, um eine generierte OpenAPI-Spec (packages/backend/openapi.json) vom Formatter auszunehmen (**/openapi.json in ignorePatterns).
- Lokal war
pnpm agent:check grün (lint, format:check, typecheck, build, test).
- Die CI schlug fehl im Schritt
pnpm dlx @sebastian-software/standards check:
[managed] .oxfmtrc.json: managed file differs from reference
1 finding(s). Run `standards apply` for the mechanical part.
Ursache: .oxfmtrc.json ist managed (byte-exact); agent:check führt den standards check nicht aus. Der Agent bekam lokal kein Signal, dass er eine zentral verwaltete Datei verändert hat — der Konflikt tauchte erst in der CI auf.
Kernproblem: die Zielgruppe der Hinweise
Wichtige Abgrenzung: SKILL.md ist die Anweisung für den Standards-Apply-Agenten (OpenClaw) — also für den Lauf, der die Rules in ein Repo einspielt. Sie erreicht nicht einen Agenten, der in einem standards-nutzenden Repo ganz normal fachlich arbeitet (Feature/Fix/Refactor) und dabei versehentlich eine managed Root-Config anfasst.
Genau dieser Agent ist aber der, der stolpert: Er liest die AGENTS.md/Doku des Consumer-Repos, nicht die SKILL.md des Standards-Pakets, und optimiert gegen pnpm agent:check (grün) — ohne zu wissen, dass agent:check ≠ CI ist (der standards check fehlt dort) und welche Dateien managed sind.
Vorschlag: Hinweise in die Consumer-Repos bringen (nicht in SKILL.md)
Die Guidance muss dort ankommen, wo Consumer-Repo-Agents lesen. Optionen:
- Standards-owned AGENTS.md-Section (bevorzugt). Die Standards besitzen bereits marker-delimited README-/AGENTS-Sections. Eine solche owned Section „Managed files & agent guardrails" in die AGENTS.md jedes managed Repos synchronisieren, mit:
- Kurzliste bzw. Verweis, welche Dateien managed sind (aus
manifest.json) und nicht projektlokal editiert werden dürfen (Beispiele: .oxfmtrc.json, eslint/oxlint-Config, tsconfig*, …).
- der Warnung
agent:check ≠ standards check: managed-Drift ist lokal grün, failt aber in der CI.
- den sanktionierten Mustern (siehe unten).
- Alternativ / ergänzend: eine seeded oder managed Hint-Datei (z. B.
docs/agent-guardrails.md), die standards apply in jedes Repo bringt und die die AGENTS.md verlinkt.
- Optional (früher lokaler Guard): empfehlen bzw. seedn, dass Consumer-Repos
pnpm dlx @sebastian-software/standards check in ihren lokalen agent:check-Gate aufnehmen (oder ein standards check --only=managed-Fastpath), damit managed-Drift vor der CI auffällt.
Sanktionierte Muster (Beispiel: generiertes Artefakt vom Formatter ausnehmen)
Ohne .oxfmtrc.json anzufassen:
- Option A (bevorzugt bei Generatoren): das Artefakt im Generator-Schritt selbst mit
oxfmt --write <file> formatieren, sodass es format:check besteht.
- Option B: eine nicht verwaltete Ignore-Datei —
oxfmt respektiert per Default .gitignore und .prettierignore; --ignore-path=PATH (mehrfach) erlaubt eigene Dateien (Achtung: explizites --ignore-path ersetzt die Defaults → .gitignore mitangeben).
Nutzen
Consumer-Repo-Agents (und Menschen) hätten im Repo selbst eine kanonische Guardrail: keine managed Dateien projektlokal editieren, und für wiederkehrende Fälle (generierte Artefakte vs. Formatter) den vorgesehenen Weg — statt es je Repo per Trial-and-Error in der CI zu entdecken.
Kontext: sebastian-software/relanto PR #177 (OpenAPI-Spec-Generierung), final über Option A gelöst (oxfmt im openapi:generate-Script).
Problem / realer Vorfall
Ein Agent hat in einem standards-nutzenden
node-Repo (sebastian-software/relanto) die managed Datei.oxfmtrc.jsonerweitert, um eine generierte OpenAPI-Spec (packages/backend/openapi.json) vom Formatter auszunehmen (**/openapi.jsoninignorePatterns).pnpm agent:checkgrün (lint, format:check, typecheck, build, test).pnpm dlx @sebastian-software/standards check:Ursache:
.oxfmtrc.jsonist managed (byte-exact);agent:checkführt denstandards checknicht aus. Der Agent bekam lokal kein Signal, dass er eine zentral verwaltete Datei verändert hat — der Konflikt tauchte erst in der CI auf.Kernproblem: die Zielgruppe der Hinweise
Wichtige Abgrenzung:
SKILL.mdist die Anweisung für den Standards-Apply-Agenten (OpenClaw) — also für den Lauf, der die Rules in ein Repo einspielt. Sie erreicht nicht einen Agenten, der in einem standards-nutzenden Repo ganz normal fachlich arbeitet (Feature/Fix/Refactor) und dabei versehentlich eine managed Root-Config anfasst.Genau dieser Agent ist aber der, der stolpert: Er liest die AGENTS.md/Doku des Consumer-Repos, nicht die SKILL.md des Standards-Pakets, und optimiert gegen
pnpm agent:check(grün) — ohne zu wissen, dassagent:check ≠ CIist (derstandards checkfehlt dort) und welche Dateien managed sind.Vorschlag: Hinweise in die Consumer-Repos bringen (nicht in SKILL.md)
Die Guidance muss dort ankommen, wo Consumer-Repo-Agents lesen. Optionen:
manifest.json) und nicht projektlokal editiert werden dürfen (Beispiele:.oxfmtrc.json, eslint/oxlint-Config, tsconfig*, …).agent:check ≠ standards check: managed-Drift ist lokal grün, failt aber in der CI.docs/agent-guardrails.md), diestandards applyin jedes Repo bringt und die die AGENTS.md verlinkt.pnpm dlx @sebastian-software/standards checkin ihren lokalenagent:check-Gate aufnehmen (oder einstandards check --only=managed-Fastpath), damit managed-Drift vor der CI auffällt.Sanktionierte Muster (Beispiel: generiertes Artefakt vom Formatter ausnehmen)
Ohne
.oxfmtrc.jsonanzufassen:oxfmt --write <file>formatieren, sodass esformat:checkbesteht.oxfmtrespektiert per Default.gitignoreund.prettierignore;--ignore-path=PATH(mehrfach) erlaubt eigene Dateien (Achtung: explizites--ignore-pathersetzt die Defaults →.gitignoremitangeben).Nutzen
Consumer-Repo-Agents (und Menschen) hätten im Repo selbst eine kanonische Guardrail: keine managed Dateien projektlokal editieren, und für wiederkehrende Fälle (generierte Artefakte vs. Formatter) den vorgesehenen Weg — statt es je Repo per Trial-and-Error in der CI zu entdecken.
Kontext:
sebastian-software/relantoPR #177 (OpenAPI-Spec-Generierung), final über Option A gelöst (oxfmt imopenapi:generate-Script).