Files changed: - kb/concepts/Ambient Environment Dependency.md - kb/concepts/Anti-Cramming Heuristic.md - kb/concepts/Audit Trail.md - kb/concepts/BM25.md - kb/concepts/Bulk Operations.md - kb/concepts/CI Integration.md - kb/concepts/CPPC.md - kb/concepts/Checkpoint Audit.md - kb/concepts/Claude Code Auto Mode.md - kb/concepts/Command Round-Trip Integrity.md - kb/concepts/Confidence Scoring.md - kb/concepts/Consolidation Tiers.md - kb/concepts/Content Quality Control.md - kb/concepts/Context Isolation.md - kb/concepts/Contradiction Resolution.md - kb/concepts/Cross-platform Agent Skills.md - kb/concepts/Crystallization.md - kb/concepts/Delete Rather Than Anonymize.md - kb/concepts/Denylist over Allowlist.md - kb/concepts/Detect-Repair Asymmetry.md - kb/concepts/Diff-Reviewable Agent Edits.md - kb/concepts/Dual Licensing by File Plan.md - kb/concepts/Entity Extraction.md - kb/concepts/Episodic Memory.md - kb/concepts/Event-Driven Automation.md - kb/concepts/Filter on Ingest.md - kb/concepts/Forgetting.md - kb/concepts/Graph Traversal.md - kb/concepts/Green Suite Blind Spot.md - kb/concepts/Hooks.md - kb/concepts/Hybrid Search.md - kb/concepts/Implementation Spectrum.md - kb/concepts/Index Scaling.md - kb/concepts/Issue Label Scheme.md - kb/concepts/Iteration and Cost Limits.md - kb/concepts/KB Migration.md - kb/concepts/KB Stack Versioning.md - kb/concepts/Knowledge Compounding.md - kb/concepts/Knowledge Graph.md - kb/concepts/LLM Wiki Pattern.md - kb/concepts/Lint Workflow.md - kb/concepts/MCP-Leseserver.md - kb/concepts/Mass-Update Gate.md - kb/concepts/Memory Lifecycle.md - kb/concepts/Mesh Sync.md - kb/concepts/Modbus.md - kb/concepts/Multi-Agent Collaboration.md - kb/concepts/Naming Convention Conflict.md - kb/concepts/OKF Compatibility.md - kb/concepts/Optional Instance Context File.md - kb/concepts/Personalization Plane.md - kb/concepts/Privacy and Governance.md - kb/concepts/Procedural Memory.md - kb/concepts/Publish-Remote Gate.md - kb/concepts/Quality Scoring.md - kb/concepts/Quality and Self-Correction.md - kb/concepts/RAG.md - kb/concepts/Reciprocal Rank Fusion.md - kb/concepts/SSD TRIM.md - kb/concepts/Scale Ceiling.md - kb/concepts/Self-Healing.md - kb/concepts/Semantic Lint Automation.md - kb/concepts/Semantic Memory.md - kb/concepts/Session Orientation.md - kb/concepts/Shared vs Private.md - kb/concepts/Split Merge Reclassify.md - kb/concepts/Split Threshold.md - kb/concepts/Structural Enforcement over Documented Rule.md - kb/concepts/Stub Threshold.md - kb/concepts/Supersession.md - kb/concepts/Three-Layer Architecture.md - kb/concepts/Token Economics.md - kb/concepts/Typed Relationships.md - kb/concepts/User Management.md - kb/concepts/Vector Search.md - kb/concepts/Work Coordination.md - kb/concepts/Workflow Extraction.md - kb/concepts/Workflow Orchestration.md - kb/concepts/Working Memory.md - kb/concepts/Write-Once Frontmatter Fields.md - kb/log.md - work/link-taxonomy-migration/glossary.md
5.2 KiB
type, concept_type, tags, created, modified, related, sources, confidence, confidence_base, provenance, summary
| type | concept_type | tags | created | modified | related | sources | confidence | confidence_base | provenance | summary | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| types/concept.md | decision |
|
2026-08-31 | 2026-08-31 |
|
|
0.70 | 0.70 | sourced | Entscheidung, schreibbare Felder als Schema minus kurzer Sperrliste zu bestimmen statt als gepflegte Positivliste, weil die Positivliste eine zweite Kopie des Schemas waere |
Denylist over Allowlist
Typ: Decision
Definition
Wenn ein Befehl entscheiden muss, welche Felder er schreiben darf, wird die Menge als Schema minus kurzer Sperrliste bestimmt, nicht als gepflegte Positivliste. Die Sperrliste nennt zu jedem Eintrag den Befehl, dem das Feld stattdessen gehört.
Kontext
touch --set brauchte eine Antwort auf die Frage, welche Frontmatter-Felder es schreiben darf.
Torben wurden drei Varianten mit ihren Folgen vorgelegt: Denylist, Allowlist, und eine Denylist,
die zusätzlich die Felder sperrt, für die es bereits eigene Optionen gibt
(summary, provenance, confidence_base)1 .
Entscheidung
Denylist. Das Argument, das den Ausschlag gab: eine gepflegte Allowlist ist eine zweite Kopie
des Schemas, und die Kopie ist die Seite, die driftet - Invariante 8 aus AGENTS.md, angewandt
auf eine Konstante im
Code1 .
Gesperrt sind in wikitool vier Gruppen, jede mit einer Zuständigkeit als Begründung:
type:- ändert Schema und Verzeichnis der Seite; das ist der Seiten-Lebenszyklus, kein Feldschreibvorgang.confidence:- ausconfidence_basedurch Decay abgeleitet, nicht autorisiert.related:,sources:,entities:,concepts:- gehörenxref, das auch die Gegenrichtung und die Body-Bullets pflegt; ein blanker Frontmatter-Schreibvorgang ließe die andere Hälfte stehen.
Die dritte Variante - zusätzlich summary, provenance und confidence_base zu sperren, damit
es für eine Sache nur einen Weg gibt - wurde nicht gewählt: die Ersparnis wäre eine
Verweigerung, die für den Nutzer überraschend
aussieht1 .
Konsequenzen
- Ein neues Schema-Feld ist sofort schreibbar, ohne Codeänderung. Das ist der Zweck der Entscheidung und zugleich ihr Risiko: ein Feld, das eigentlich einen eigenen Befehl bräuchte, wird schreibbar ausgeliefert, wenn niemand daran denkt, es zu sperren.
- Die Sperrliste muss ihre Gründe mitführen. Jeder Eintrag nennt den zuständigen Befehl, weil die Ablehnung sonst nur "nein" sagt statt zu routen. Eine gesperrte Zuständigkeit ist ein Routing-Problem; ein unbekanntes Feld dagegen ist ein Tippfehler, und die Meldung listet dort auf, welche Felder die Seite tatsächlich hat.
- Der Verweis in einer Ablehnung ist eine Behauptung über ein anderes Kommando. Die
Sperrliste aus
1.4.0lehnte die Seiten-Referenz-Felder mit dem Hinweis aufxref addundxref removeab. Die Sperre war richtig, das Verweisziel nicht: für dieentities:undconcepts:einer Source-Seite konntexref addgar nicht schreiben, und was es dort schrieb, bekamxref removenicht wieder weg. Eine Ablehnung, die weiterroutet, gehört deshalb mit einem Test ausgeliefert, der zeigt, dass das genannte Kommando den Fall abdeckt - andernfalls schickt sie den Aufrufer in eine Sackgasse und sieht dabei aus wie Hilfe. Behoben mit1.6.0(Gitea-Issue #18), nicht durch eine Änderung an der Sperrliste2 - Der Ansatz überträgt sich auf jeden schemagetriebenen Befehl, nicht nur auf
touch. Wo eine Positivliste dieselbe Information ein zweites Mal aufschreiben würde, ist die Sperrliste die kleinere Kopie. - Er ist kein Sicherheitsmuster. Für eine Vertrauensgrenze gilt fail-closed, also die Allowlist. Diese Entscheidung betrifft eine Zuständigkeitsverteilung innerhalb eines Werkzeugs, das ohnehin alle Felder schreiben kann.
Status
Angenommen (2026-08-31) mit Stack-Version 1.4.0, Commit
dbe2f731 .
Verwandte Concepts
Beziehungen
Siehe auch
- Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31
- Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31
Fußnoten
Beziehungen
- mechanism: wikitool
- grounds: Write-Once Frontmatter Fields
- see-also: Green Suite Blind Spot