Compare commits

...

28 Commits

Author SHA1 Message Date
torben 87a47cc237 instructions/dev/issue-tracking.md: destructive-step invariants, comment-vs-body authority, rename sweep (#47 Block 1, #29)
CI / verify (push) Successful in 56s
Release / release (push) Successful in 35s
Files changed:
- CHANGES.md
- VERSION
- instructions/dev/issue-tracking.md
2026-09-04 14:59:30 +02:00
torben d4cbeca5a8 docs: INSTALL.md - erster Sprung auf 4.5.0 nutzt das Werkzeug aus dem neuen Tarball (#7)
CI / verify (push) Successful in 55s
Files changed:
- INSTALL.md
2026-09-04 12:52:43 +02:00
torben 0ba94c63d1 release: 4.5.0 - beide Update-Wege in Code (upstream merge, dist upgrade)
CI / verify (push) Successful in 53s
Release / release (push) Successful in 37s
Files changed:
- CHANGES.md
- VERSION
2026-09-04 12:48:05 +02:00
torben 368438e48c docs: dist upgrade - Stamp-Semantik nach --keep-local, drei Eigentumsklassen in docs/ (#7)
CI / verify (push) Successful in 54s
Release / release (push) Successful in 34s
Files changed:
- CHANGES.md
- VERSION
- docs/ownership-and-templates.md
- tools/CONTRACT.md
2026-09-04 12:41:50 +02:00
torben cd81ba3d4f feat: dist upgrade - apply a stack update, not just detect one (#7)
CI / verify (push) Successful in 54s
Release / release (push) Successful in 34s
Files changed:
- CHANGES.md
- INSTALL.md
- VERSION
- tools/CONTRACT.md
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/kb_state.py
- tools/chemenu/ownership.py
- tools/chemenu/tests/test_dist_upgrade.py
2026-09-04 11:36:21 +02:00
torben 1b5ffea854 fix: upstream merge - preserve gitignored local data, refuse a merge git never opened (4.5.0-beta.3, #30)
CI / verify (push) Successful in 57s
Release / release (push) Successful in 35s
Files changed:
- CHANGES.md
- VERSION
- docs/ownership-and-templates.md
- instructions/gates.md
- instructions/private-instance.md
- tools/CONTRACT.md
- tools/chemenu/commands/upstream_cmd.py
- tools/chemenu/tests/test_upstream_cmd.py
2026-09-04 07:35:00 +02:00
torben d2b1719a4b test: upstream merge - combined-commit regression covering the acceptance checklist (4.5.0-beta.2, #30)
CI / verify (push) Successful in 58s
Release / release (push) Successful in 35s
Files changed:
- CHANGES.md
- VERSION
- tools/chemenu/tests/test_upstream_cmd.py
2026-09-04 07:11:20 +02:00
torben 686c08bb14 feat: wikitool upstream merge/verify - code procedure for taking a stack update (4.5.0-beta.1, #30)
CI / verify (push) Successful in 57s
Release / release (push) Successful in 35s
Files changed:
- AGENTS.md
- CHANGES.md
- VERSION
- instructions/gates.md
- instructions/private-instance.md
- tools/CONTRACT.md
- tools/README.md
- tools/chemenu/cli.py
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/commands/run_budget.py
- tools/chemenu/commands/upstream_cmd.py
- tools/chemenu/ownership.py
- tools/chemenu/tests/test_upstream_cmd.py
2026-09-04 07:08:49 +02:00
torben abe5497cda docs: Faktenkorrekturen in der 4.4.0-Prosa; DEVELOPMENT.md ohne zweite Kommandobeschreibung (4.4.1-beta.1, #47)
CI / verify (push) Successful in 49s
Release / release (push) Successful in 34s
Files changed:
- CHANGES.md
- DEVELOPMENT.md
- VERSION
- docs/version-model.md
- instructions/dev/version-parts.md
2026-09-03 22:48:09 +02:00
torben d29d400dd3 feat: Versionskandidat statt Bump-pro-Release - VERSION traegt -beta.N, version release fixiert (4.4.0, #42)
CI / verify (push) Successful in 47s
Release / release (push) Successful in 35s
Files changed:
- .gitea/workflows/release.yml
- AGENTS.md
- CHANGES.md
- DEVELOPMENT.md
- README.md
- VERSION
- docs/version-model.md
- instructions/dev/version-parts.md
- tools/CONTRACT.md
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/commands/docs_verify.py
- tools/chemenu/commands/doctor.py
- tools/chemenu/commands/migrate_cmd.py
- tools/chemenu/commands/version_cmd.py
- tools/chemenu/kb_state.py
- tools/chemenu/tests/test_dist_cmd.py
- tools/chemenu/tests/test_docs_verify.py
- tools/chemenu/tests/test_doctor.py
- tools/chemenu/tests/test_migrate_cmd.py
- tools/chemenu/tests/test_version_cmd.py
- tools/chemenu/version.py
2026-09-03 22:19:41 +02:00
torben b1883befc7 docs: Modellwahl nach Pruefbarkeit; stack-dev bricht an den Phasenwechseln fuer den Model-Switch (4.3.3)
CI / verify (push) Successful in 49s
Release / release (push) Successful in 36s
Files changed:
- CHANGES.md
- VERSION
- instructions/claude-code-model-selection.md
- instructions/dev/stack-dev/SKILL.md
2026-09-03 21:30:54 +02:00
torben 56ecfc7fee docs: stack-dev - Issue-Abschluss als nummerierter Schritt 5, Routing-Blurb rebalanciert (4.3.2, #45)
CI / verify (push) Successful in 47s
Release / release (push) Successful in 36s
Files changed:
- CHANGES.md
- VERSION
- instructions/dev/stack-dev/SKILL.md
2026-09-03 20:46:10 +02:00
torben 4e80a07ac7 docs/ befuellt - Stack-Hintergrund fuer vier Themen, Pflegeklausel in AGENTS.md ergaenzt (4.3.1, #45)
CI / verify (push) Successful in 48s
Release / release (push) Successful in 36s
Files changed:
- AGENTS.md
- CHANGES.md
- VERSION
- docs/ownership-and-templates.md
- docs/pipeline-rationale.md
- docs/version-model.md
- docs/why-gates-are-code.md
2026-09-03 19:40:39 +02:00
torben 0b8ca746fa docs/ als ausgelieferter Hintergrund-Ort; Decision-Seiten bleiben in kb/, Decay-Skip fuer concept_type: decision (4.3.0, #38)
CI / verify (push) Successful in 49s
Release / release (push) Successful in 36s
Files changed:
- AGENTS.md
- CHANGES.md
- VERSION
- instructions/kb-profiles.md
- kb/CONVENTIONS.md
- kb/concepts/COLLECTION.md
- tools/CONTRACT.md
- tools/chemenu/commands/confidence_decay.py
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/tests/test_confidence_decay.py
- tools/chemenu/tests/test_dist_cmd.py
2026-09-03 19:01:21 +02:00
torben 9b461421e8 feat: Korpus-Kuratierungsrichtlinie - Floors und Leitplanke fuer reaktive Fixes (4.2.0, #28)
CI / verify (push) Successful in 52s
Release / release (push) Successful in 37s
Files changed:
- CHANGES.md
- VERSION
- instructions/dev/corpus-policy.md
- instructions/dev/stack-dev/SKILL.md
2026-09-03 08:11:16 +02:00
torben 41f5dfe1cd docs: Issue-Body ist das Plan-File - fortlaufend aktuell, Abschluss ist die letzte Aktualisierung (4.1.2, #44)
CI / verify (push) Successful in 52s
Release / release (push) Successful in 38s
Files changed:
- CHANGES.md
- VERSION
- instructions/dev/issue-tracking.md
- instructions/dev/stack-dev/SKILL.md
2026-09-03 06:39:16 +02:00
torben 23307c3c5f fix: Testisolation - kb_dir repointet config.ROOT, lint loest Kollektionen gegen den uebergebenen Baum auf (4.1.1, #44)
CI / verify (push) Successful in 55s
Release / release (push) Successful in 38s
Files changed:
- CHANGES.md
- VERSION
- instructions/dev/testing-conventions.md
- tools/chemenu/lint_core.py
- tools/chemenu/tests/conftest.py
- tools/chemenu/tests/test_hermetic_env.py
- tools/chemenu/tests/test_lint.py
2026-09-03 06:33:38 +02:00
torben cfe925a76c feat: Link-Taxonomie abgeschlossen - Lint hart ab kb_version 4.0.0, outbound: an Type-Spec gebunden, part-of/composition als Inversenpaar (4.1.0, #40)
CI / verify (push) Successful in 53s
Release / release (push) Successful in 36s
Files changed:
- CHANGES.md
- VERSION
- instructions/link-taxonomy.md
- instructions/migrations/4.0.0-link-taxonomy.md
- kb/comparisons/amd-pstate vs acpi-cpufreq.md
- kb/concepts/Episodic Memory.md
- kb/concepts/Memory Lifecycle.md
- kb/concepts/Mesh Sync.md
- kb/concepts/Procedural Memory.md
- kb/concepts/Reciprocal Rank Fusion.md
- kb/concepts/Semantic Memory.md
- kb/concepts/Shared vs Private.md
- kb/concepts/Split Threshold.md
- kb/concepts/Stub Threshold.md
- kb/concepts/Supersession.md
- kb/concepts/Typed Relationships.md
- kb/concepts/Vector Search.md
- kb/concepts/Work Coordination.md
- kb/concepts/Working Memory.md
- kb/entities/technologies/Wine-Staging.md
- kb/entities/tools/pascalandy schema.md
- kb/index.md
- kb/log.md
- kb/sources/COLLECTION.md
- tools/CONTRACT.md
- tools/chemenu/commands/lint.py
- tools/chemenu/kb_collections.py
- tools/chemenu/lint_core.py
- tools/chemenu/tests/test_conventions.py
- tools/chemenu/tests/test_lint.py
- tools/chemenu/tests/test_type_resolver.py
- types/comparison.md
- types/comparison.schema.yaml
2026-09-03 06:19:56 +02:00
torben 23e34a940c feat(kb): Issue Label Scheme auf Vierachsen-Schema und Body-als-Wahrheit nachgezogen (#41)
Files changed:
- kb/concepts/INDEX.md
- kb/concepts/Issue Label Scheme.md
- kb/entities/projects/Chemenu.md
- kb/entities/tools/Gitea MCP Server.md
- kb/index.md
- kb/log.md
- kb/provenance.md
- kb/sources/INDEX.md
- kb/sources/Source - Gitea Issue 41 - Issue Management and Label Scheme 2026-09-02.md
- raw/notes/Gitea Issue 41 - Issue Management and Label Scheme 2026-09-02.md
2026-09-02 23:20:39 +02:00
torben c8c238523a feat: Issue-Board auf vier Pflicht-Label-Familien und Body-als-Wahrheit (#41)
CI / verify (push) Successful in 53s
Release / release (push) Successful in 39s
Files changed:
- CHANGES.md
- VERSION
- instructions/dev/issue-tracking.md
- instructions/dev/stack-dev/SKILL.md
2026-09-02 23:11:48 +02:00
torben 3f99d6715f feat: Link-Taxonomie u5 - Restkanten gelabelt, migrate done 4.0.0, Workshop geschlossen
CI / verify (push) Successful in 51s
Files changed:
- .wikitool-kb.json
- kb/entities/technologies/Arch Linux.md
- kb/entities/technologies/Disk Encryption.md
- kb/entities/technologies/Wine-Staging.md
- kb/entities/tools/AUR.md
- kb/entities/tools/GPG.md
- kb/entities/tools/Lutris.md
- kb/entities/tools/NotebookLM.md
- kb/entities/tools/Obsidian.md
- kb/entities/tools/OpenAI Codex.md
- kb/entities/tools/OpenCode.md
- kb/entities/tools/Pi.md
- kb/entities/tools/Proton.md
- kb/entities/tools/Steam.md
- kb/entities/tools/Wine.md
- kb/entities/tools/gdeploy.md
- kb/entities/tools/makepkg.md
- kb/entities/tools/pascalandy schema.md
- kb/log.md
- work/link-taxonomy-migration/README.md
- work/link-taxonomy-migration/glossary.md
- work/link-taxonomy-migration/plan.md
2026-09-02 23:06:08 +02:00
torben 807094deae update: u4 (kb/sources) als abgeschlossen dokumentiert - keine Aenderungen noetig
Files changed:
- work/link-taxonomy-migration/README.md
- work/link-taxonomy-migration/glossary.md
2026-09-02 23:00:32 +02:00
torben 8b711f4860 update: u3-Checkliste im link-taxonomy-migration-Workshop abgehakt
Files changed:
- work/link-taxonomy-migration/README.md
2026-09-02 22:56:23 +02:00
torben a35c94e2d9 feat: Link-Taxonomie u3 - kb/concepts/ vollstaendig gelabelt
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
2026-09-02 22:56:04 +02:00
torben 9e2f9bf98d feat: Link-Taxonomie u2 - kb/entities/people, projects, kb/comparisons gelabelt
Files changed:
- kb/comparisons/amd-pstate vs acpi-cpufreq.md
- kb/concepts/RAG.md
- kb/entities/people/Andrej Karpathy.md
- kb/entities/people/E3DC GmbH.md
- kb/entities/people/Rohit Gupta.md
- kb/entities/people/Vannevar Bush.md
- kb/entities/projects/BCDModule.md
- kb/entities/projects/Chemenu.md
- kb/entities/projects/andybalholm-edl.md
- kb/entities/projects/goresponsiveness.md
- kb/entities/projects/ha-core.md
- kb/entities/projects/hacs-e3dc.md
- kb/entities/projects/hacs-integration-blueprint.md
- kb/entities/projects/kfchou/wiki-skills.md
- kb/entities/projects/plugnburn-edl.md
- kb/entities/projects/vanillaflava/wiki-skills-vanillaflava.md
- kb/entities/projects/yugasun/llm-wiki-skills.md
- kb/entities/tools/Agent Memory.md
- kb/log.md
- work/link-taxonomy-migration/README.md
- work/link-taxonomy-migration/glossary.md
2026-09-02 19:58:07 +02:00
torben 7e15035001 update: u1-Checkliste im link-taxonomy-migration-Workshop abgehakt
Files changed:
- work/link-taxonomy-migration/README.md
2026-09-02 19:36:24 +02:00
torben b137359b90 feat: Link-Taxonomie u1 - kb/entities/systems, tools, technologies gelabelt
Files changed:
- kb/concepts/Denylist over Allowlist.md
- kb/concepts/LLM Wiki Pattern.md
- kb/concepts/SSD TRIM.md
- kb/entities/people/E3DC GmbH.md
- kb/entities/people/Vannevar Bush.md
- kb/entities/projects/ha-core.md
- kb/entities/projects/hacs-integration-blueprint.md
- kb/entities/systems/AGENTS.md.md
- kb/entities/systems/CLAUDE.md.md
- kb/entities/systems/E3DC.md
- kb/entities/systems/ENVIRONMENT.md.md
- kb/entities/systems/Memex.md
- kb/entities/systems/Tolkien Gateway.md
- kb/entities/technologies/Arch Linux.md
- kb/entities/technologies/Disk Encryption.md
- kb/entities/technologies/Docker.md
- kb/entities/technologies/Gitea Actions.md
- kb/entities/technologies/Gitea.md
- kb/entities/technologies/Go.md
- kb/entities/technologies/Home Assistant.md
- kb/entities/technologies/Kernel PM Governors.md
- kb/entities/technologies/LVM.md
- kb/entities/technologies/Linux Kernel.md
- kb/entities/technologies/MQTT.md
- kb/entities/technologies/OPC UA.md
- kb/entities/technologies/Python.md
- kb/entities/technologies/Rust.md
- kb/entities/technologies/Wine GE.md
- kb/entities/technologies/Wine-Staging.md
- kb/entities/technologies/acpi-cpufreq.md
- kb/entities/technologies/amd-pstate.md
- kb/entities/technologies/iii Engine.md
- kb/entities/tools/AUR.md
- kb/entities/tools/Act Runner.md
- kb/entities/tools/Agent Memory.md
- kb/entities/tools/Aura.md
- kb/entities/tools/Bottles.md
- kb/entities/tools/ChatGPT.md
- kb/entities/tools/Claude Code.md
- kb/entities/tools/Codex CLI.md
- kb/entities/tools/Dataview.md
- kb/entities/tools/GPG.md
- kb/entities/tools/GitHub Copilot.md
- kb/entities/tools/Gitea MCP Server.md
- kb/entities/tools/Lutris.md
- kb/entities/tools/Marp.md
- kb/entities/tools/Mistral Vibe.md
- kb/entities/tools/NotebookLM.md
- kb/entities/tools/Obsidian Web Clipper.md
- kb/entities/tools/Obsidian.md
- kb/entities/tools/OpenAI Codex.md
- kb/entities/tools/OpenCode.md
- kb/entities/tools/Pi.md
- kb/entities/tools/Proton.md
- kb/entities/tools/Wine.md
- kb/entities/tools/awesome-llm-wiki.md
- kb/entities/tools/farzaa gist.md
- kb/entities/tools/gdeploy.md
- kb/entities/tools/makepkg.md
- kb/entities/tools/pascalandy schema.md
- kb/entities/tools/qmd.md
- kb/entities/tools/wikitool.md
- kb/log.md
- work/link-taxonomy-migration/glossary.md
2026-09-02 19:36:04 +02:00
torben 177c7e9ce8 feat: Prosa ist kein Identifier - Link-Taxonomie als Enum, generierte Regionen mit Markern (4.0.0)
CI / verify (push) Successful in 55s
Release / release (push) Successful in 38s
Files changed:
- .gitea/workflows/ci.yml
- AGENTS.md
- CHANGES.md
- VERSION
- instructions/CONTRACT.md
- instructions/link-taxonomy.md
- instructions/migrations/4.0.0-link-taxonomy.md
- instructions/setup-instance.md
- kb/CONTRACT.md
- kb/CONVENTIONS.md
- kb/CONVENTIONS.md.template
- kb/comparisons/COLLECTION.md
- kb/concepts/COLLECTION.md
- kb/entities/COLLECTION.md
- kb/sources/COLLECTION.md
- tools/CONTRACT.md
- tools/README.md
- tools/chemenu/blocks.py
- tools/chemenu/cli.py
- tools/chemenu/commands/cite_cmd.py
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/commands/docs_verify.py
- tools/chemenu/commands/doctor.py
- tools/chemenu/commands/links_cmd.py
- tools/chemenu/commands/migrate_cmd.py
- tools/chemenu/commands/new_page.py
- tools/chemenu/commands/page_ops.py
- tools/chemenu/commands/run_budget.py
- tools/chemenu/commands/xref.py
- tools/chemenu/conventions.py
- tools/chemenu/corpus_diff.py
- tools/chemenu/frontmatter_io.py
- tools/chemenu/kb_collections.py
- tools/chemenu/kb_state.py
- tools/chemenu/links.py
- tools/chemenu/lint_core.py
- tools/chemenu/provenance.py
- tools/chemenu/sections.py
- tools/chemenu/tests/conftest.py
- tools/chemenu/tests/test_blocks.py
- tools/chemenu/tests/test_cite_cmd.py
- tools/chemenu/tests/test_conventions.py
- tools/chemenu/tests/test_dist_cmd.py
- tools/chemenu/tests/test_doctor.py
- tools/chemenu/tests/test_migrate_cmd.py
- tools/chemenu/tests/test_new_page.py
- tools/chemenu/tests/test_pipeline_l0.py
- tools/chemenu/tests/test_types_cmd.py
- tools/chemenu/tests/test_xref.py
- types/concept.schema.yaml
- types/entity.md
- types/entity.schema.yaml
- types/instruction.schema.yaml
- types/type-spec.md
- work/link-taxonomy-migration/README.md
- work/link-taxonomy-migration/plan.md
2026-09-02 18:39:22 +02:00
247 changed files with 9861 additions and 1867 deletions
+1 -1
View File
@@ -228,7 +228,7 @@ jobs:
# contracts are adopted verbatim - the shipped text is a working # contracts are adopted verbatim - the shipped text is a working
# default, unlike a personalization file. # default, unlike a personalization file.
grep -v 'wikitool:template-unfilled' kb/CONVENTIONS.md.template > kb/CONVENTIONS.md grep -v 'wikitool:template-unfilled' kb/CONVENTIONS.md.template > kb/CONVENTIONS.md
for template in kb/*/COLLECTION.md.template; do for template in kb/*/COLLECTION.md.template types/*.template; do
cp "$template" "${template%.template}" cp "$template" "${template%.template}"
done done
python3 -m venv tools/.venv python3 -m venv tools/.venv
+23
View File
@@ -66,6 +66,26 @@ jobs:
run: | run: |
set -eu set -eu
version="$(cat VERSION | tr -d '[:space:]')" version="$(cat VERSION | tr -d '[:space:]')"
# A running candidate (`X.Y.Z-beta.N`) is never released - betas are
# a dev-checkout state, not a distributed one (see
# instructions/dev/version-parts.md). This guard sits *before* the
# API query below: without it, every `version bump` on a candidate
# would push VERSION and trigger a wasted round-trip against the
# releases API for a tag that was never going to be created. Ending
# the job cleanly here (not `exit 1`) is what keeps a beta bump a
# normal, unremarkable push rather than a failing CI run - skipping
# every later step is what "cleanly" means in Actions: mark this one
# skip and gate the rest on it.
case "$version" in
*-beta.*)
echo "VERSION is a running candidate (${version}) - nothing to release. Skipping."
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
;;
esac
echo "skip=false" >> "$GITHUB_OUTPUT"
tag="v${version}" tag="v${version}"
echo "version=${version}" >> "$GITHUB_OUTPUT" echo "version=${version}" >> "$GITHUB_OUTPUT"
echo "tag=${tag}" >> "$GITHUB_OUTPUT" echo "tag=${tag}" >> "$GITHUB_OUTPUT"
@@ -82,6 +102,7 @@ jobs:
- name: Release notes from CHANGES.md - name: Release notes from CHANGES.md
# `version notes` fails when the changelog has no entry for this # `version notes` fails when the changelog has no entry for this
# version, which is the last place that mistake can still be caught. # version, which is the last place that mistake can still be caught.
if: steps.version.outputs.skip != 'true'
run: | run: |
set -eu set -eu
tools/wikitool docs verify tools/wikitool docs verify
@@ -90,6 +111,7 @@ jobs:
- name: Build the distribution tarball - name: Build the distribution tarball
id: build id: build
if: steps.version.outputs.skip != 'true'
env: env:
VERSION: ${{ steps.version.outputs.version }} VERSION: ${{ steps.version.outputs.version }}
TAG: ${{ steps.version.outputs.tag }} TAG: ${{ steps.version.outputs.tag }}
@@ -109,6 +131,7 @@ jobs:
echo "name=${name}" >> "$GITHUB_OUTPUT" echo "name=${name}" >> "$GITHUB_OUTPUT"
- name: Publish the release - name: Publish the release
if: steps.version.outputs.skip != 'true'
env: env:
API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }} API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }}
TOKEN: ${{ gitea.token }} TOKEN: ${{ gitea.token }}
+6 -1
View File
@@ -1,11 +1,16 @@
{ {
"schema": 1, "schema": 1,
"kb_version": "3.0.0", "kb_version": "4.0.0",
"applied": [ "applied": [
{ {
"migration": "3.0.0-authoring-conventions", "migration": "3.0.0-authoring-conventions",
"at": "2026-09-02", "at": "2026-09-02",
"pages": 0 "pages": 0
},
{
"migration": "4.0.0-link-taxonomy",
"at": "2026-09-02",
"pages": 153
} }
] ]
} }
+24 -3
View File
@@ -71,6 +71,7 @@ What a file is called says who it is for and how it is loaded. This is a rule, n
|------|-----|--------| |------|-----|--------|
| `README.md` | Humans - technical documentation and how to develop the thing in that directory | Never by an agent as instruction | | `README.md` | Humans - technical documentation and how to develop the thing in that directory | Never by an agent as instruction |
| `EVALS.md` | Humans - how telemetry and evaluation work; routes to the contracts that bind | Never by an agent as instruction | | `EVALS.md` | Humans - how telemetry and evaluation work; routes to the contracts that bind | Never by an agent as instruction |
| `DEVELOPMENT.md` | Humans - the release workflow (`version bump`/`version release`/`publish`/CI), for whoever develops this stack rather than an instance built on it | Never by an agent as instruction. Not shipped: `dist_cmd.ROOT_FILES` excludes it deliberately, the same way `instructions/dev/` (which it may link to, unlike the documents `instructions verify` holds to that rule) is excluded - a distributed instance has no release workflow to document |
| `AGENTS.md` | Agents | Always, every session | | `AGENTS.md` | Agents | Always, every session |
| `CLAUDE.md` | Agents on Claude Code | Automatically by that harness, which does not load `AGENTS.md` - so it imports this file and the two below, and carries no rules itself. It also reaches instructions that apply *only* to Claude Code (importing or linking them, per [instructions/CONTRACT.md](instructions/CONTRACT.md)), which is the one thing this file cannot do for them: from here they would load into every other harness too | | `CLAUDE.md` | Agents on Claude Code | Automatically by that harness, which does not load `AGENTS.md` - so it imports this file and the two below, and carries no rules itself. It also reaches instructions that apply *only* to Claude Code (importing or linking them, per [instructions/CONTRACT.md](instructions/CONTRACT.md)), which is the one thing this file cannot do for them: from here they would load into every other harness too |
| `USER.md` | Agents | Always, every session | | `USER.md` | Agents | Always, every session |
@@ -81,7 +82,8 @@ What a file is called says who it is for and how it is loaded. This is a rule, n
| `kb/<collection>/COLLECTION.md` | Agents | When writing in that collection. Instance-owned in the same way, and declares in frontmatter which profile it adopted | | `kb/<collection>/COLLECTION.md` | Agents | When writing in that collection. Instance-owned in the same way, and declares in frontmatter which profile it adopted |
| `instructions/<name>.md` | Agents | By link, or on explicit request | | `instructions/<name>.md` | Agents | By link, or on explicit request |
| `instructions/<name>/SKILL.md` | Agents | By the harness, once published | | `instructions/<name>/SKILL.md` | Agents | By the harness, once published |
| `types/<name>.md` | Agents + validator | Via `tools/wikitool types describe` | | `types/<name>.md` | Agents + validator | Via `tools/wikitool types describe`. Split by `root:`: a page type-spec (`root: kb`) belongs to the instance and ships as `.template`; one describing a stack artifact ships verbatim |
| `docs/<name>.md` | Agents and humans | By link, or on explicit request - never automatically, and never as instruction |
| `INDEX.md` | Both | Generated - never hand-edited | | `INDEX.md` | Both | Generated - never hand-edited |
A stage may carry both a `README.md` and a `CONTRACT.md`: different readers, different A stage may carry both a `README.md` and a `CONTRACT.md`: different readers, different
@@ -89,6 +91,16 @@ documents. What it may not carry is the same content twice - a README that resta
contract is a second copy that drifts. `docs verify` enforces the specific case that already contract is a second copy that drifts. `docs verify` enforces the specific case that already
happened once: no README may hold a copy of the `wikitool` command table. happened once: no README may hold a copy of the `wikitool` command table.
**`docs/` carries no normative sentence.** It holds why the stack is built the way it is -
background a session consults in passing, not a rule it must follow. Anything that would bind
belongs in a `CONTRACT.md` instead, which is what keeps invariant 8 intact here: `docs/` is
never a second place a rule could live, only prose about rules that live elsewhere. That is also
why nothing verifies its content - there is no rule in it to check. It has no frontmatter, no type, no index, no lint, no decay, no provenance, and no
`COLLECTION.md` - which [kb/CONTRACT.md § Collections](kb/CONTRACT.md#collections) forbids
outside `kb/` anyway, but the point holds independently: `docs/` stays a plain directory of
prose, invisible to everything `tools/wikitool` does except `dist export`, which copies it
verbatim. A fresh instance needs the reasoning as much as this one does.
## Personalization ## Personalization
`USER.md` and `SOUL.md` are read at session start, if the runtime has not already injected `USER.md` and `SOUL.md` are read at session start, if the runtime has not already injected
@@ -145,7 +157,8 @@ input schema + compiler output derived (gitignored)
work/ tracked scratch, deleted when the run closes work/ tracked scratch, deleted when the run closes
``` ```
Alongside it, not part of it: `instructions/` (what agents are told to do) and this file. Alongside it, not part of it: `instructions/` (what agents are told to do), `docs/` (why the
stack is built the way it is - see [File naming](#file-naming)), and this file.
**By stage** - read the contract for the stage you are writing in: **By stage** - read the contract for the stage you are writing in:
@@ -225,7 +238,8 @@ Every `tools/wikitool` call has exactly four outcomes:
produced. produced.
After the single allowed retry - or immediately, for the non-idempotent commands `new`, After the single allowed retry - or immediately, for the non-idempotent commands `new`,
`log append`, and `publish` - stop and report the exact command and error text to the user. `log append`, `publish`, and `upstream merge` - stop and report the exact command and error
text to the user.
Per-command detail (what exit 1 means, whether the command is atomic, whether a retry is Per-command detail (what exit 1 means, whether the command is atomic, whether a retry is
safe) is in [tools/CONTRACT.md](tools/CONTRACT.md). A gate refusal is not a validation error - safe) is in [tools/CONTRACT.md](tools/CONTRACT.md). A gate refusal is not a validation error -
@@ -263,3 +277,10 @@ and `tools/README.md` are part of the change that introduced a stage, a command
not follow-up work: nobody comes back for them, and a document that describes a repo which no not follow-up work: nobody comes back for them, and a document that describes a repo which no
longer exists is worse than none. The mechanical half - command tables, contracts, ignore longer exists is worse than none. The mechanical half - command tables, contracts, ignore
canaries - is checked by `tools/wikitool docs verify`; the prose half is yours. canaries - is checked by `tools/wikitool docs verify`; the prose half is yours.
`docs/` pages are held to a different clock than those three. A README goes stale on every new
flag; a `docs/` page goes stale only when the reasoning it wrote down stops holding - a gate
that stops living in code, an ownership line that moves, a boundary redrawn - which is rarer
and not tied to any one commit. Nothing checks this by construction: a page there carries no
normative sentence (see [File naming](#file-naming)), so there is no rule for `docs verify` to
check, only a rationale for a session to notice has gone stale and to update or retire.
+792
View File
@@ -18,6 +18,798 @@ heading, and `wikitool docs verify` refuses a tree whose `VERSION` and newest
versioned entry disagree. Entries below `0.1.0` predate versioning and keep versioned entry disagree. Entries below `0.1.0` predate versioning and keep
their date-only headings. their date-only headings.
Since `4.4.0` the stack carries **one running candidate** between two
releases rather than a fresh version per bump - see
`instructions/dev/version-parts.md`. While a candidate is open its heading
names it with a `-beta.N` suffix (`## 4.4.0-beta.2 - <date> - <title>`), and
every bump of that same candidate updates this one entry in place rather than
opening another: the heading's version/date/title move, and the bump's
`--title` joins a machine-managed `<!-- wikitool:bumps -->` list right under
the entry's `**Author:**` line - written and read by `wikitool version bump`,
never by hand. `wikitool version release` is what closes a candidate: it
strips the suffix and turns the entry into an ordinary, suffix-free one,
leaving the bump-title list as the record of what happened. A distributed
instance never sees a `-beta.` version at all (`release.yml` only ever
releases a fixed one), so this suffix and the list beneath it are a
dev-checkout concern - readable here, never shipped as something to parse.
---
## 4.5.1 - 2026-09-04 - issue-tracking - destructive-step invariants, comment-vs-body authority, rename sweep
**Author:** Torben Nehmer
<!-- wikitool:bumps -->
- issue-tracking - destructive-step invariants, comment-vs-body authority, rename sweep
<!-- /wikitool:bumps -->
Block 1 aus #47 (gemeinsam mit #29): drei Ergänzungen an
`instructions/dev/issue-tracking.md`, ausgelöst durch zwei Fehlerklassen, die
in derselben Sitzung am Stack aufgetreten waren.
- **Schritt 1** trägt jetzt, dass destruktive Schritte im Body die Invariante
nennen müssen, die sie nicht verletzen dürfen, und dass ein
Akzeptanzkriterium eine prüfbare Eigenschaft ist, keine Tätigkeit. Auslöser
war #30: der Body schrieb wörtlich "Arbeitsverzeichnis entfernen" für den
`upstream merge`-Ablauf, und genau das wurde zum datenvernichtenden Bug -
ein `shutil.rmtree` auf eine Stage mit gitignorierten, nicht
rekonstruierbaren Daten.
- **Schritt 2** trägt jetzt die Lesesicht auf Body und Kommentare, die es
bisher nur aus Autorensicht gab: der Body ist der Stand, Kommentare sind
Historie; ein erkennbar veralteter Body wird richtiggestellt statt
umgangen; widersprüchliche Kommentare werden nach Beleg aufgelöst, nicht
nach Datum. Auslöser war ebenfalls #30 (ein Kommentar empfahl das Gegenteil
dessen, was der Body später festlegte) und #10 (ein seit Tagen veralteter
Body gegen drei widersprechende Kommentare, zwei davon sich selbst
widersprechend).
- Neuer Abschnitt **"Renames and other decay in the tracker"** nach Schritt 7:
ein Rename ist erst fertig, wenn auch die offenen Issues nachgezogen sind,
weil `wikitool` diesen Tracker nicht kennt und nicht kennenlernen soll. Mit
der Wegweiser-vs-Beleg-Unterscheidung aus #29 und dem Hinweis, dass auch
verschwundene `kb/`-Seiten und private Infrastrukturangaben Issue-Texte
altern lassen. Ein neuer Trigger in "When to run" verweist darauf.
Keine der drei Ergänzungen verschiebt die bestehende Nummerierung der
Schritte 1-7 - die Querverweise darauf (u. a. aus
`instructions/dev/stack-dev/SKILL.md` auf Schritt 7, aus
`kb/concepts/Issue Label Scheme.md` auf Schritt 2) bleiben also gültig, ohne
angefasst zu werden.
Verifiziert: `tools/wikitool instructions verify`, `tools/wikitool docs
verify`, beide grün (Prosa-only, kein Interface geändert, PATCH).
#47 bleibt offen (Block 2: der Skill-Schnitt aus Vorschlag E; Block 3: die
beiden Nebenbefunde). #29 bleibt ebenfalls offen: dieser Block deckte nur den
Regelabsatz, nicht den noch ausstehenden Pfad-Durchgang durch #4, #5, #15,
#21, #16, #26 - der war nicht Teil des Auftrags für diesen Block.
---
## 4.5.0 - 2026-09-04 - Beide Update-Wege in Code: upstream merge fuer Clones, dist upgrade fuer Tarball-Instanzen
**Author:** Torben Nehmer
<!-- wikitool:bumps -->
- Faktenkorrekturen in der 4.4.0-Prosa; DEVELOPMENT.md ohne zweite Kommandobeschreibung
- wikitool upstream merge/verify: code procedure for taking a stack update, ownership.py as the shared stack/instance boundary
- upstream merge: combined-commit regression test (edit+add+delete+contract+template+contract-delete in one commit)
- upstream merge: keep gitignored local data under a content stage, refuse a merge git never opened, report what actually changed
- dist upgrade: apply a stack update, not just detect one (#7)
- dist upgrade: Stamp-Semantik nach --keep-local benannt, docs/ownership-and-templates.md auf drei Eigentumsklassen nachgezogen
<!-- /wikitool:bumps -->
Die Prosa zu 4.4.0 - Changelog-Eintrag, `docs/version-model.md`, `instructions/dev/version-parts.md`,
`DEVELOPMENT.md` - entstand ungeprüft: kein maschineller Check liest sie, und die Sitzung, die sie
schrieb, hat den dafür vorgesehenen Modellwechsel aus `stack-dev` Schritt 6 übersprungen. Ein
nachgeholter Durchgang hat drei Fehler gefunden, von denen der erste der teuerste war.
**Der Befund war an einer Stelle schlicht falsch.** Changelog und `docs/version-model.md`
behaupteten, unter dem alten Modell seien Nummern vergeben worden, die „nie ausgeliefert" wurden -
im Changelog sogar mit einer erfundenen Zahl („fünf Minor-Bumps ... vier nie ausgeliefert"). Das
Gegenteil stimmt: weil `release.yml` auf jede `VERSION`-Bewegung feuerte, wurde **jeder** Bump zu
einem echten, getaggten Release. Der 2026-09-03 hat vier davon in sechs Stunden erzeugt (`4.3.0`
bis `4.3.3`), zwei für reine Prosa-Änderungen. Der Schaden war nie ein Phantom-Release, sondern
dass „Release" aufhörte, etwas zu bedeuten - vier Upgrades an einem Nachmittag sind für einen
Konsumenten kein kleineres Versprechen, sondern ein unleserliches. Beide Stellen tragen jetzt den
tatsächlichen Vorgang samt Beleg.
Dazu zwei kleinere Korrekturen: `version-parts.md` nannte den Stack weiterhin `2.x` (er steht bei
`4.x`), und `DEVELOPMENT.md` trug eine Tabelle, die für jeden Verify-Befehl ein zweites Mal
beschrieb, was er prüft - eine Kopie dessen, was `tools/CONTRACT.md` hält und `docs verify` dort
gegen die CLI prüft. Die Tabelle ist raus; dass die Datei selbst außerhalb der von diesem Check
abgedeckten Dokumente liegt, steht jetzt an ihrer Stelle. Der Code-seitige Teil davon - ob
`DEVELOPMENT.md` in `docs_verify.STAGE_READMES` gehört - hängt an #47, zusammen mit der Lücke im
Skill, die den übersprungenen Modellwechsel überhaupt erst unauffällig gemacht hat.
Kein Verhalten geändert, nur Prosa - und bewusst als laufender Kandidat gelassen statt fixiert:
CIs Version-Gate verlangt die `VERSION`-Bewegung, ein Release verlangt sie nicht. Genau dafür gibt
es das Modell aus 4.4.0.
**Zweiter Bump auf demselben Kandidaten (#30):** `git merge upstream/main` behandelt einen
bewegten Korpus asymmetrisch - eine gelöschte, upstream-geänderte Seite meldet sich als Konflikt,
eine neu angelegte Seite wird still gestaged, nur eine beidseitig gelöschte Seite ist harmlos. Die
Prosa-Prozedur in `private-instance.md` § "Taking a stack update" hat das geschlossen, aber mit
vier eigenen Fehlern: der Pfadsatz stand dreifach (im Skript, im Kontroll-Grep, implizit in
`dist_cmd.py`); eine vom Upstream **gelöschte** Maschinerie-Datei wurde von `git checkout
MERGE_HEAD -- <pfad>` still ignoriert, weil das Skript kein `set -e` hatte; ein echter Konflikt in
`tools/`/`types/`/`instructions/` endete in einem von der Prosa nirgends erwähnten offenen Merge;
und ein *neuer* Maschinerie-Pfad unter einer Content-Stage hätte die Literal-Liste nie erreicht.
Die Eigentumsgrenze ist jetzt ein Prädikat statt einer Liste: `chemenu/ownership.py`,
`is_stack_owned(relative)`, wahr für `<stage>/CONTRACT.md` direkt unter einer Content-Stage
(`kb`, `raw`, `work`, `reports`) und für jeden Pfad, der dort auf `.template` endet - nicht
rekursiv, `kb/<collection>/COLLECTION.md` bleibt seit #39 instanzeigen. `dist_cmd.py` liest das
Modul jetzt statt einer eigenen `_CONTENT_ALLOWED_NAMES`-Liste zu pflegen, und
`CONTRACT_ONLY_STAGES` leitet sich aus `ownership.CONTENT_STAGES` ab statt die drei Stage-Pfade
ein zweites Mal aufzuschreiben - ein Test hält fest, dass beide Sichten nicht auseinanderlaufen
können.
Neu: `wikitool upstream merge [--remote upstream] [--branch main] [--no-fetch]` und `wikitool
upstream verify --since <rev> [--until HEAD]`. `merge` prüft Vorbedingungen (sauberer Baum, kein
laufendes Merge, Remote löst auf), warnt statt zu blockieren, wenn `.wikitool-remotes.json` fehlt,
hält den Merge offen (`--no-commit --no-ff`), zwingt jede Content-Stage auf die lokale Seite
zurück, holt dann über die Vereinigungsmenge der Bäume von `MERGE_HEAD` und `HEAD` genau die
stack-eigenen Pfade zurück - inklusive einer Löschung, falls der Upstream einen Maschinerie-Pfad
entfernt hat -, verweigert bei verbliebenen unaufgelösten Pfaden ohne zu committen, committet
sonst und verifiziert den entstandenen Commit mit derselben Logik wie `verify` - ein Fund dort
wird laut gemeldet und **nicht** automatisch zurückgerollt. Nicht idempotent (AGENTS.md § Tool
error contract), nicht budget-exempt; `verify` liest nur und ist wie `migrate verify` von der
Budget-Gate ausgenommen. Die Mass-Update-Gate greift bei einem Merge-Commit strukturell nicht -
das steht jetzt als eigener Absatz in `instructions/gates.md`, mit `upstream merge`s eigener
Nachkontrolle als der Sicherung, die hier tatsächlich trägt.
`private-instance.md` § "Taking a stack update" verweist jetzt auf den Befehl statt das Skript
auszuschreiben; die Pfadtabelle bleibt als Erklärung stehen, ist aber nicht mehr die operative
Liste. Vorschlag B (eigenes Demo-Repo) bleibt zurückgestellt, siehe #30.
23 neue Tests unter `test_upstream_cmd.py` (35 Fälle mit der parametrisierten
`is_stack_owned`-Tabelle) decken die Fälle aus der Spezifikation ab:
gelöschte vs. geänderte vs. neu angelegte Seiten, `kb/CONTRACT.md`- und Template-Änderungen,
`kb/entities/COLLECTION.md` bleibt lokal, eine gelöschte `raw/CONTRACT.md` landet, ein neuer
Template-Pfad landet, ein offener `work/`-Lauf landet nicht, ein echter `tools/`-Konflikt lässt
den Merge offen, ein schmutziger Baum wird unberührt abgewiesen, "bereits aktuell" ist ein No-op,
die Publish-Remote-Gate-Warnung, `verify` gegen einen von Hand verpfuschten Merge, und die
`dist_cmd`/`ownership`-Konsistenz.
**Dritter Bump auf demselben Kandidaten:** die im Akzeptanzkriterium geforderte Kombinationsprobe
fehlte noch - ein einzelner Upstream-Commit, der Editieren, Anlegen, Löschen einer Seite, eine
Contract-Änderung, eine Template-Änderung und eine Contract-Löschung gleichzeitig bewegt. Jetzt
als `test_one_upstream_commit_mixing_every_case_at_once` nachgetragen; alle sechs Erwartungen in
einem `upstream merge`-Aufruf verifiziert.
**Vierter Bump: zwei Fehler, die ein Review-Durchgang nach dem Publish gefunden hat.** Beide
waren in der ersten Fassung enthalten, beide hätten Daten vernichtet, und keiner der bestehenden
Tests hat sie berührt.
*Erstens: die Content-Stage wurde als Ganzes gelöscht.* `_restore_stage_to_local` hieß in der
ersten Fassung `shutil.rmtree(stage_dir)` — die wörtliche Übersetzung des `rm -rf kb raw` aus der
Prosa-Prozedur. Für `kb/` und `raw/` ist das harmlos, weil dort nichts Ignoriertes liegt. Für die
beiden Stages, die dieses Issue *neu* in den Satz aufgenommen hat, ist es das nicht: `reports/`
ist bis auf seinen Contract komplett gitignored und trägt genau die Daten, die nirgends sonst
existieren — die Telemetrie-Traces, aus denen `eval score` liest, gespeicherte Eval-Berichte,
alte Lint-Reports. In dieser Instanz standen zum Zeitpunkt des Fundes 497 Trace-Verzeichnisse
unter `reports/telemetry/`; ein einziger `upstream merge` hätte sie alle gelöscht, und zwar
stillschweigend, weil git von ignorierten Dateien nichts meldet. Die Stage wird jetzt über die
**getrackten** Pfade beider Bäume zurückgesetzt statt über das Verzeichnis; ignorierte lokale
Daten bleiben unberührt. Leergewordene Verzeichnisse werden aufgeräumt, aber nur wirklich leere.
*Zweitens: ein Merge, den git nie eröffnet hat, hätte die Maschinerie gelöscht.* Der Exit-Code
von `git merge --no-commit --no-ff` wird bewusst ignoriert (Konflikte unter den Content-Stages
sind erwartet). Nur: wenn git das Merge gar nicht erst eröffnet — unverwandte Historien, eine
ignorierte Datei im Weg —, gibt es kein `MERGE_HEAD`, `_tree_paths("MERGE_HEAD")` liefert die
leere Menge, und **jeder** stack-eigene Pfad in `HEAD` fällt damit in den Zweig „der Upstream hat
ihn gelöscht": `kb/CONTRACT.md`, `raw/CONTRACT.md` und sämtliche Templates werden entfernt. Der
Kommando-Ablauf prüft jetzt nach dem Merge-Aufruf, dass tatsächlich ein Merge offen ist, und
bricht sonst ab, ohne den Baum angefasst zu haben. Beide Fehler haben je einen Regressionstest,
und beide Tests wurden gegen die alte Fassung laufen gelassen, um zu zeigen, dass sie sie
tatsächlich fangen.
Dazu eine Ehrlichkeitskorrektur an der Erfolgsmeldung: sie zählte die *wiederhergestellten*
Pfade, nicht die geänderten — ein Merge, der eine Datei bewegt, meldete vier oder fünf. Sie fragt
jetzt `git diff` zwischen Vor- und Nach-Commit, kennzeichnet Löschungen, und stimmt damit mit dem
überein, was ein Leser nachprüfen würde. `docs/ownership-and-templates.md` hat einen Abschnitt
bekommen, warum die Grenze ein Prädikat und keine Liste ist — die Begründung, die dieses Issue
erarbeitet hat, gehörte in die Hintergrunddoku und nicht nur in einen Changelog-Eintrag.
**Fünfter Bump: `wikitool dist upgrade` (#7), der zweite der beiden Update-Wege.** `upstream
merge` oben bedient eine Instanz mit gemeinsamer Git-History; `dist upgrade` bedient eine
Instanz aus einem Tarball, ohne History, die bislang eine rein manuelle Prozedur in
`INSTALL.md` durchlaufen musste - Schritt 4 verlangte einen sha256-Vergleich von Hand gegen den
`files`-Block der alten `.wikitool-release.json`.
Die tragende Regel: die Schreibmenge ist genau der `files`-Block der *neuen*
`.wikitool-release.json`, minus was ein Export aus einer leeren Vorlage neu sät
(`chemenu.ownership.is_export_stub`, wie bisher schon für `kb/log.md`/`.gitkeep`) oder einmalig
sät und danach der Instanz gehört (`chemenu.ownership.is_upgrade_preserved`, neu für
`.wikitool-kb.json` und `CHANGES.md`), plus der Stamp selbst. Jeder Kandidatpfad wird gegen die
*alte* Instanz-Summe klassifiziert: unverändert wird geräuschlos überschrieben, neu im Release
wird angelegt, lokal verändert oder gelöscht wird **nie** still überschrieben - der Lauf bricht
mit der vollständigen Liste ab, außer `--keep-local` sagt ausdrücklich, dass die Dateien liegen
bleiben sollen. `--prune` entfernt zusätzlich aus dem Release entfallene Dateien, aber nur
solche, die seit der Installation unverändert sind.
Die Migrationskette nach dem Tausch wird aus den `instructions/migrations/` des *neuen* Baums
ermittelt (`kb_state.load_migrations` bekam dafür einen `directory`-Parameter) und nur
gemeldet, nie ausgeführt - es gibt bewusst kein `migrate run`. Eine bereits gegen die
*installierte* Maschinerie offene Kette lässt den Befehl abbrechen, bevor er die Quelle
überhaupt öffnet. `kb_state.divergent_files()` (bisher nur von `migrate status` gelesen) ist
jetzt eine dünne Hülle um das neue, zwei-Baum-fähige `compare_against_stamp()` - gleiches
Verhalten für den bestehenden Aufrufer, wiederverwendbar für `dist upgrade`s eigenen Vergleich.
Quelle ist immer ein bereits vorhandenes Verzeichnis oder `.tar.gz` - kein Download, das bleibt
allein `version check`s Sache. Ein Tarball muss genau ein Top-Level-Verzeichnis enthalten (die
Form, in der `release.yml` es baut) und wird gegen eine `.sha256`-Beidatei geprüft, falls eine
danebenliegt (fehlt sie: WARN, kein Abbruch). Weitere Abbruchgründe vor jedem Schreiben: fehlende
lokale `VERSION`/`.wikitool-kb.json`/Stamp mit `files`-Block, ein schmutziger Arbeitsbaum (kein
Git-Repo ist ein WARN, keine Sperre), eine Vorab-Version (`-beta.N`) ohne `--pre`, sowie ein
Downgrade; Gleichstand ist ein No-op. Ein Grenzübertritt der Kompatibilität wird laut gemeldet,
blockiert aber nicht. Committet und pusht nichts (Invariante 5).
Gegenüber dem ersten Entwurf des Issues zwei Korrekturen, die dort auch nachgetragen sind: der
`files`-Block wurde entgegen der ursprünglichen Annahme bereits vor diesem Bump gelesen
(`divergent_files`/`migrate status`), und die Migrationskette war ursprünglich falsch begründet
- sie kann nur aus dem *neuen* Baum kommen, nicht durch eine andere Abfragereihenfolge aus der
alten Instanz. 24 neue Tests unter `test_dist_upgrade.py` decken die Klassifikation, alle
Abbruchgründe, `--keep-local`, `--prune` und beide Quellformen (Verzeichnis und Tarball,
inklusive der sha256- und Top-Level-Prüfung) ab.
Bewusst nicht angetastet: `instructions/private-instance.md` (der Clone-Weg ändert sich nicht,
`INSTALL.md` benennt jetzt beide Wege nebeneinander) und die Frage, wie `dist upgrade` mit
Collection-Templates umgeht, deren Namen eine fremde Instanz gar nicht hat - es verhält sich wie
`upstream merge` und schreibt sie, was ein eigenes Issue gegen den Export wäre, keins gegen das
Upgrade.
**Sechster Bump: die ungeprüfte Phase nachgeholt.** Der Abschluss des vorigen Bumps lief auf
Sonnet, und `stack-dev` Schritt 6 verlangt dort genau zwei Dinge, die kein Check erzwingt:
Issue-Body und `docs/`-Veralterung. Der Body war gemacht, die `docs/`-Prüfung nicht - sie wurde
benannt statt durchgeführt. Nachgeholt auf Opus, mit einem Fund.
`docs/ownership-and-templates.md` § „The consequence in practice" beschrieb ein Upgrade als
Zweiteilung: verbatim überschreiben, `.template`-gestützte Dateien liegen lassen - und begründete
den ersten Teil damit, dass verbatim ausgelieferte Dateien „safe to replace wholesale" seien,
weil sie „never instance-specific to begin with" waren. Genau diese Annahme trifft `dist upgrade`
nicht: eine Instanz *kann* eine verbatim ausgelieferte Datei angefasst haben, und die sha256 je
Datei existiert, um das zu erkennen, statt es vorauszusetzen. Dazu fehlte die dritte Klasse ganz -
die einmalig gesäten, danach instanzeigenen Pfade (`.wikitool-kb.json`, `CHANGES.md`,
`kb/log.md`, `raw/*/.gitkeep`), die im Stamp stehen wie jede andere Datei und deshalb aktiv
ausgeschlossen werden müssen. Die Seite nennt jetzt drei Klassen und die engere praktische Regel:
überschreibe die verbatim ausgelieferten Dateien, *die diese Instanz nicht angefasst hat*.
Dazu eine Präzisierung in `tools/CONTRACT.md`, die vorher nirgends stand: nach `--keep-local`
wird der neue Stamp trotzdem vollständig geschrieben, trägt also die Release-Summe auch für
Dateien, die bewusst *nicht* geschrieben wurden. Der Stamp ist die Vergleichsbasis für den
nächsten Lauf, kein wörtliches Inventar der Platte - und genau das hält eine übersprungene Datei
bei jedem weiteren Lauf als abweichend gemeldet, statt sie nach einmaligem Überspringen still als
aktuell zu führen.
---
## 4.4.0 - 2026-09-03 - Versionskandidat statt Bump-pro-Release: VERSION traegt -beta.N, version release fixiert
**Author:** Torben Nehmer
<!-- wikitool:bumps -->
- Versionskandidat statt Bump-pro-Release: VERSION traegt -beta.N, version release fixiert
<!-- /wikitool:bumps -->
Bisher bekam jeder `version bump` sofort eine fixierte Nummer, und weil `release.yml` auf jede
`VERSION`-Bewegung feuert, wurde daraus sofort ein Release: Nummern entstanden in
Commit-Granularität statt in Release-Granularität. Der 2026-09-03 hat so vier Releases in sechs
Stunden erzeugt (`4.3.0` bis `4.3.3`), zwei davon für reine Prosa-Änderungen - alle vier echt,
keines davon eine Einheit, an der ein Konsument sich hätte orientieren können. `VERSION` trägt
jetzt zwischen zwei Releases **einen** laufenden Kandidaten (`X.Y.Z-beta.N`):
`--major/--minor/--patch` eskaliert diesen Kandidaten max-wins gegen den letzten Release, statt
eine neue Nummer danebenzustellen, und geht dabei nie zurück.
`Version` versteht den Suffix, mit einer expliziten Ordnung
(`4.4.0-beta.1 < 4.4.0-beta.2 < 4.4.0`, numerisch nach `N`, nicht lexikografisch). `CHANGES.md`
trägt genau einen offenen Eintrag pro Kandidat: der erste Bump eröffnet ihn, jeder weitere
aktualisiert Heading und die maschinenverwaltete Bump-Titel-Liste in
`<!-- wikitool:bumps -->` (Marker-Konvention aus `blocks.py`, aber bewusst nicht in
`blocks.BLOCKS` - diese Region gehört zu `CHANGES.md`, nicht zu einer Seite). `version release`
ist neu und fixiert einen Kandidaten: Suffix weg, Eintrag geschlossen, committet und pusht nichts.
Vier Stellen am Bestand angepasst, die das Kandidatenmodell sonst still beschädigt hätten:
`release.yml` überspringt einen suffixbehafteten `VERSION`-Push sauber, bevor die Releases-API
gefragt wird, statt jeden Beta-Bump zu veröffentlichen; die Grenzübertritts-Checks in
`docs verify` (`check_migration_for_boundary`, `check_breaking_change_for_boundary`) messen jetzt
gegen den **letzten Release** (`version_mod.last_release`) statt gegen den zweitobersten Eintrag,
der zwischen zwei Betas keine Grenze mehr hergibt; `kb_state.chain()`/`next_link()` vergleichen
gegen die **Kandidatenbasis**, weil eine Migration mit Ziel `4.4.0` sonst bei installiertem
`4.4.0-beta.1` aus dem Intervall fällt (`4.4.0-beta.1 < 4.4.0`); `read_kb_version()` verweigert
einen Prerelease, weil eine Inhaltsform kein Beta kennt. `dist export` schreibt `VERSION` und den
Stamp weiterhin ehrlich mit Suffix, aber `.wikitool-kb.json` bekommt die Basis.
Menschendoku für die Erzeuger-Seite: `DEVELOPMENT.md` im Repo-Root, bewusst nicht in
`dist_cmd.ROOT_FILES` (Begründung als Kommentar dort), mit Zeile in `AGENTS.md` § File naming und
Zeiger aus `README.md`. `docs/version-model.md` hat einen neuen Abschnitt, warum eine Nummer erst
durch ein Release verbraucht wird.
---
## 4.3.3 - 2026-09-03 - Modellwahl nach Pruefbarkeit statt nach Aufgabenname; stack-dev bricht an den Phasenwechseln fuer den Model-Switch
**Author:** Torben Nehmer
`instructions/claude-code-model-selection.md` routete bisher nach Skill: eine Zeile "Stack
development -> Opus/high" fuer alles, was `tools/`, `types/` oder `instructions/` anfasst. Das ist
zu grob in beide Richtungen - es verteuert die lange, mechanische Mitte einer Stack-Sitzung, und es
sagt nichts darueber, dass Anfang und Ende derselben Sitzung anders zu behandeln sind.
**Die neue Achse ist "was faengt hier einen Fehler ab".** Wo ein Check in Code steht - `pytest`,
`docs verify`, `instructions verify`, CI, die Gates - kostet der Fehler eines schwaecheren Modells
eine Runde und faellt auf. Wo die einzige Durchsetzung eine Sitzung ist, die Prosa liest, faellt
derselbe Fehler gar nicht auf: er wird ausgeliefert und bleibt stehen. Das ist dasselbe Argument,
das `docs/why-gates-are-code.md` fuer Gates fuehrt, angewandt auf die Modellwahl.
Stack-Entwicklung ist damit **nicht mehr eine Zeile, sondern drei**:
| Phase | Was einen Fehler faengt | Modell |
|---|---|---|
| Design, Versionsstelle, Grenzuebertritts-Urteil | nichts | Opus/high |
| Code, Tests, mechanische Doku-Synchronisation | pytest, CI, `docs verify` | Sonnet/high |
| Issue-Abschluss, `docs/`-Veralterung, Changelog-Prosa | nichts, per Konstruktion | Opus/high |
Die Mitte ist die lange Phase und die mit den Checks - dort liegt die Ersparnis. Die beiden
Raender sind kurz (Minuten, nicht Stunden), haben aber keinen maschinellen Waechter: `wikitool`
kennt den Issue-Tracker bewusst nicht, und eine `docs/`-Seite traegt keinen normativen Satz, also
gibt es dort nichts zu verifizieren. Sie oben zu lassen ist billig und schuetzt genau die Arbeit,
die still scheitert.
Zwei Praezisierungen dazu: **Effort ist der billigere Hebel als das Modell** - `medium` steht fuer
Stack-Arbeit bewusst in keiner Zeile, weil Mehrdatei-Konsistenz das ist, was ein reduzierter
Effort zuerst aufgibt; `high` ist die Untergrenze, sobald mehr als eine Datei oder ein Contract
betroffen ist. Und die Asymmetrie ist benannt: eine unnoetige Opus-Phase kostet einmal Geld, eine
ungepruefte Sonnet-Phase kann etwas ausliefern, das nie wieder jemand ansieht.
**Damit die Tabelle ueberhaupt wirksam wird, braucht sie Haltepunkte.** Eine Sitzung kann ihr
eigenes Modell nicht wechseln - das ist `/model` und gehoert dem Nutzer. Eine Empfehlung, die
niemand zum richtigen Zeitpunkt ausspricht, aendert nichts. `instructions/dev/stack-dev/SKILL.md`
bekommt deshalb zwei ausdrueckliche Breaks:
- **Neuer Schritt 3** - "Settle the design before building", mit dem Angebot zum Wechsel nach
unten, sobald der Plan steht und die Arbeit mechanisch wird. Einmal aussprechen, dann so oder
so weiterarbeiten.
- **Schritt 6 (Abschluss) bricht in die Gegenrichtung** - ab dort greift wieder kein Check. Mit
der ausdruecklichen Auflage, die Arbeit **unabhaengig von der Antwort** zu tun: nach dem Publish
auf einen Modellwechsel zu blockieren wuerde genau den Zustand hinterlassen, den Schritt 6
verhindern soll. Lief die Phase auf dem billigeren Modell, gehoert das in die Uebergabe statt
ins Schweigen.
Ein auftauchender Grenzuebertritt ist unter den Decision points ebenfalls als Anlass zum Wechsel
nach oben benannt: `docs verify` prueft, dass ein Uebertritt sich dokumentiert, nie dass die
Stelle richtig gewaehlt war.
Die uebrigen Schritte sind unveraendert und nur umnummeriert (alt 3-5 -> neu 4-6).
---
## 4.3.2 - 2026-09-03 - stack-dev: Issue-Abschluss ist ein nummerierter Schritt, kein Zeiger in einer Routing-Liste
**Author:** Torben Nehmer
Nachfassen zu 4.1.2 (#44), das die Regel geschaerft, aber den Weg zu ihr nicht geaendert hat.
`instructions/dev/issue-tracking.md` bekam damals Schritt 7 ("Closing is the last body update,
not a comment"); `instructions/dev/stack-dev/SKILL.md` bekam nur eine umformulierte Zeile in
seiner Routing-Liste. Eine Stunde spaeter schloss #45 auf exakt dieselbe Weise: gruendlicher
Abschlusskommentar ueber einem Body mit unangehakten Kriterien.
**Die Ursache lag nicht am Text der Regel, sondern an ihrer Erreichbarkeit.** Die nummerierten
Schritte des Skills endeten bei "Verify before publishing". Ein Issue zu schliessen war ueberhaupt
kein Schritt - es hing an einem Zeiger *innerhalb* von Schritt 2, und Schritt 2 ist eine
Routing-Tabelle aus fuenf "read X before Y"-Eintraegen, keine Checkliste. Eine Sitzung folgt dem
Spine, den sie im Kontext hat; was nur hinter einem Link steht, wird genau in dem Moment nicht
aufgeschlagen, in dem es greift - am Ende einer langen Sitzung, wenn der Kontext am vollsten und
die verbleibende Instruktionsflaeche am duennsten ist.
Verschaerfend arbeitete der Blurb gegen seine eigene Regel: fett gesetzt war "keep it current as
the state moves, **not at the end**". Wer den Body unterwegs ungefaehr gepflegt hatte, las daraus
Konformitaet - der eigentliche Abschlusstest stand nur in der verlinkten Datei.
Geaendert:
- **Neuer Schritt 5 in `stack-dev/SKILL.md`** - "Close the issue with a body rewrite, not a
comment", mit dem Test inline (Kriterien abgehakt oder mit Begruendung gestrichen,
Entscheidungen als entschieden formuliert, kein Praesens ueber einen behobenen Defekt,
Verifikation benannt) und dem Verweis auf Schritt 7 fuer die volle Form. Damit steht der
Abschluss auf dem Spine.
- **Schritt-2-Blurb rebalanciert** - beide Haelften binden jetzt sichtbar: fortlaufende Pflege
*und* der Rewrite vor dem Schliessen, mit Verweis auf Schritt 5.
Nichts davon ist maschinell pruefbar, und das bleibt richtig so: `wikitool` kennt den Tracker
nicht und darf ihn nicht lernen, weil es an Instanzen ausliefert, die kein Board haben
(`issue-tracking.md` § "What no tool checks"). Der Skill-Spine ist die einzige Durchsetzung, die
es geben kann - was der Grund ist, den Schritt zu nummerieren statt ihn zu verlinken.
Verallgemeinerbar: eine Regel, die in eine verlinkte Instruction geschrieben wird, erreicht
Sitzungen nur, wenn die nummerierten Schritte des zustaendigen Skills sie in dem Moment
ansteuern, in dem sie greift.
---
## 4.3.1 - 2026-09-03 - docs/ befuellt - Stack-Hintergrund fuer vier Themen, Pflegeklausel in AGENTS.md ergaenzt
**Author:** Torben Nehmer
Gitea #45: die von #38 angelegte, bis dahin leere `docs/` bekommt ihre ersten vier Seiten - frisch
geschrieben, nicht durch Umzug aus `kb/` befuellt, jede ohne normativen Satz und mit Verweis auf
das bindende Dokument statt einer Wiederholung seiner Regeln:
- `docs/pipeline-rationale.md` - warum `raw -> types/tools -> kb -> reports` vier getrennte Stufen
sind und was "never re-derive, always compile" praktisch bedeutet
- `docs/why-gates-are-code.md` - warum Mass-Update-, Publish-Remote- und Iteration-Budget-Gate in
`tools/wikitool` statt in einer Instruktion stehen
- `docs/ownership-and-templates.md` - der Unterschied zwischen stack-eigenen, verbatim
ausgelieferten Dateien und instanz-eigenen `.template`-Dateien
- `docs/version-model.md` - warum Drop-in-Kompatibilitaet und Migrationsbedarf zwei unabhaengige
Fragen sind, illustriert an der 2.0.0-Fallstudie
**AGENTS.md § Changelog:** neue Klausel zur Pflege von `docs/`, ergaenzt neben der bestehenden
Regel zu `README.md`/`EVALS.md`/`tools/README.md`. Eine `docs/`-Seite veraltet nicht wie ein
README bei jedem neuen Flag, sondern nur, wenn die aufgeschriebene Begruendung selbst nicht mehr
traegt - per Konstruktion ungeprueft, da die Seite keinen normativen Satz enthaelt, den
`docs verify` pruefen koennte.
---
## 4.3.0 - 2026-09-03 - docs/ als ausgelieferter Hintergrund-Ort; Decision-Seiten bleiben in kb/, Decay-Skip fuer concept_type: decision
**Author:** Torben Nehmer
Gitea #38: `dist export` lieferte bislang keine einzige `kb/`-Seite aus - eine frische Instanz
bekam den Stack, aber keinen Grund für seine Form. Die dokumentierte `adr-NNN-`-Konvention in
`kb/concepts/COLLECTION.md` existierte zudem nur auf Papier: keine der sieben
`concept_type: decision`-Seiten folgte ihr, und `confidence_decay()` lief bedingungslos über sie
- ein Kategorienfehler, weil Zeitablauf eine Entscheidung nicht falscher macht, nur Supersession
tut das.
**Neu:** `docs/` - ein inertes Verzeichnis für Stack-Hintergrund (warum der Stack so gebaut ist,
nicht was diese Instanz entschieden hat). Keine Frontmatter, kein Typ, kein Index, kein Lint,
keine Decay, keine Provenance, keine `COLLECTION.md`. `dist export` liefert es verbatim aus, wie
`instructions/` und `types/`. Befüllung folgt in Gitea #45.
**Verworfen, nach Prüfung:** ein Umzug der sieben Decision-Seiten nach `decisions/`. Der
Subtyp-Floor aus #28 verlangt mindestens eine Seite je deklariertem `concept_type`, und ein
Umzug hätte `decision` auf null gebracht; dazu zeigen 89 Wikilinks aus `kb/` sowie
tool-eigene Frontmatter-Arrays auf die sieben, und `links.py`/`xref add` kennen kein Ziel
außerhalb `kb/`. Die sieben bleiben in `kb/concepts/`, ebenso ein zweiter, separat erwogener
Rename (`docs verify``parity verify`) - der wäre nur nötig gewesen, wenn ein Befehl auf das
Verzeichnis `docs/` wirkt, und keiner tut das.
**Geändert:**
- `confidence_decay()` überspringt `concept_type: decision` strukturell (kategorische Ausnahme,
nicht als Brücke gebaut - Begründung im Docstring).
- `kb/concepts/COLLECTION.md` § Decisions ersetzt die tote ADR-Vorlage durch die real gelebte
Form: eine Entscheidung ist eine gewöhnliche Concept-Seite, organische Prosa, kein
`adr-NNN-`-Präfix, `**Status:**` optional, Supersession per `supersedes`-Link.
- `kb/CONVENTIONS.md` § Naming und `instructions/kb-profiles.md` (Profil `german`) korrigiert -
beide dokumentierten noch die verworfene `adr-NNN-`-Namensregel.
- `AGENTS.md` § File naming und § Routing: `docs/`-Zeile, plus die Regel, dass `docs/` keinen
normativen Satz trägt (das hält Invariante 8 heil - was binden würde, gehört in einen
Contract).
- `tools/CONTRACT.md`: Klarstellung, dass `docs verify` Dokumentations-Parität prüft, nicht das
`docs/`-Verzeichnis, sowie `docs/` in der `dist export`-Zeile ergänzt.
Additiv und in beide Richtungen drop-in: eine bestehende Instanz ohne `docs/` exportiert
weiterhin identisch (leerer `_copy_tree`-Treffer), eine Instanz mit `docs/` bekommt es ab jetzt
mitgeliefert. Kein Feld, kein Kommando ändert sein Verhalten für bestehenden Inhalt.
**Migration:** none required.
Berührt: `tools/chemenu/commands/confidence_decay.py`, `tools/chemenu/commands/dist_cmd.py`,
`tools/chemenu/tests/test_confidence_decay.py`, `tools/chemenu/tests/test_dist_cmd.py`,
`kb/concepts/COLLECTION.md`, `kb/CONVENTIONS.md`, `instructions/kb-profiles.md`, `AGENTS.md`,
`tools/CONTRACT.md`.
---
## 4.2.0 - 2026-09-03 - Korpus-Kuratierungsrichtlinie: Untergrenzen und Leitplanke für reaktive Fixes
**Author:** Torben Nehmer
Ein Demo-Korpus will klein und stabil sein, ein Testbett groß, unordentlich und in Bewegung -
dieses Repo verlangt seit der Veröffentlichung beides vom selben `kb/` (Gitea #28). Die Sitzung
vom 2026-09-02 hatte Fixture, `--with-demo` und ein zweites Repo bereits verworfen; offen blieb
nur, wie kuratiert "kuratiert genug" heißt und welche Leitplanke reaktive Fixes bekommen.
**Neu:** `instructions/dev/corpus-policy.md`. Fünf Untergrenzen, jede mit einer bestehenden
`wikitool`-Prüfung messbar, keine davon durch neuen Tool-Code: jeder Seitentyp und jeder
deklarierte Subtyp mit mindestens einer Seite, mindestens fünf Seiten mit mindestens drei
Quellen, ein bis zehn Orphan-Seiten, im Schnitt mindestens vier ausgehende Wikilinks pro Seite.
Gemessen am 2026-09-03: 181 Seiten, alle Typ-/Subtyp-Floors erfüllt, 12 Seiten mit ≥3 Quellen, 3
Orphans, Ø 6,2 ausgehende Links - der Korpus war bereits groß genug, ohne dass eine einzige
Seite eigens dafür angelegt werden musste. Eine Untergrenze wird nie durch eine erfundene Seite
gefüllt, sondern durch eine echte Quelle beim nächsten passenden Ingest - Invariante 3 gilt
unverändert.
**Die Leitplanke für reaktive Fixes** unterscheidet drei Stufen: punktuelle Änderungen (immer
erlaubt, gewöhnliche Arbeit), korpusweite Änderungen (nur geplant, mit eigenem Issue und
`work/`-Run - trifft eine Session das Mass-Update-Gate während sie etwas anderes tat, holt sie
sich nicht den `--confirm`-Token, sondern stoppt und legt ein Issue an) und reaktive Eingriffe
in Korpusinhalt, um einen Test grün zu machen oder einen Tool-Bug zu umgehen (nie erlaubt,
Invariante 7). Das Verhältnis zu `kb_dir`/`raw_dir` und `test_pipeline_l0.py` bleibt wie im
ursprünglichen Befund: kleiner, isolierter Fall in der Fixture, großer, vernetzter Fall in
`kb/` - keine Fixture-Extraktion aus dem Korpus.
Dev-only und rein additiv - kein Feld, kein Kommando, keine Datei außerhalb von
`instructions/dev/` ändert sich, daher `--minor` ohne `--breaking`.
**Migration:** none required.
Berührt: `instructions/dev/corpus-policy.md` (neu),
`instructions/dev/stack-dev/SKILL.md` (Schritt 2, Routing-Zeile).
---
## 4.1.2 - 2026-09-03 - Issue-Abschluss ist ein Body-Rewrite, nicht nur ein Kommentar
**Author:** Torben Nehmer
Aufgefallen beim Schließen von #44: der Abschlussbericht stand als Kommentar da, der Body
darunter weiterhin als offene Arbeit — Abschnitt „Zu entscheiden" über eine längst getroffene
Entscheidung, ungehakte Checkliste, Präsens über einen Defekt, den es nicht mehr gab.
Die Regel gab es dafür schon: Schritt 2 von `instructions/dev/issue-tracking.md` sagt, der Body
ist die aktuelle Wahrheit und wird umgeschrieben, wenn sich der Stand ändert. Nur ließ die
Formulierung offen, *wann* — und Schritt 7 („Close with what actually happened") war vollständig
erfüllbar, ohne den Body anzufassen. Ein Abschlussbericht im Kommentar fühlt sich beim Schreiben
vollständig an; dass der Body dabei zurückbleibt, merkt erst der nächste Leser.
**Schritt 2 ist deshalb schärfer geworden: der Body ist das Plan-File dieses Stacks.** Dasselbe,
was das Plan-Dokument eines Harness ist, und genauso gepflegt — fortlaufend, sobald etwas darin
nicht mehr stimmt, nicht am Ende. Der Maßstab ist der Abbruch, nicht der Meilenstein: eine
Session kann jederzeit enden, und was der Body in diesem Moment sagt, ist die vollständige
Übergabe. Eine frische Session muss zu **jedem** Zeitpunkt allein aus dem Body weiterarbeiten
können, ohne Kommentare rückwärts zu lesen und ohne einen Menschen, der es neu erklärt. Entschieden
ersetzt die Frage, erledigt hakt das Kriterium ab, verworfen steht mit Begründung dort, wo das
Kriterium stand.
Schritt 7 ist damit kein Sonderakt mehr, sondern die letzte dieser Aktualisierungen: erst Body
auf den Endstand, dann schließen, dann die Changelog-Zeile aus Schritt 3. Wer Schritt 2 befolgt
hat, ist fast fertig; wer nicht, zahlt die ganze Schuld im schlechtesten Moment — der
geschlossene Body ist die Fassung, die danach alle lesen und niemand mehr aufsucht. #44 steht
als Beispiel drin.
Schritt 3 zieht die Konsequenz: **ein Kommentar pro Session-Umfang, nicht pro Edit.** Ein
fortlaufend gepflegter Body mit einem Changelog-Kommentar je Änderung wäre Lärm; triviale Pflege
braucht gar keinen. Der `stack-dev`-Skill sagt es beim Aufgreifen mit, weil dort die Entscheidung
fällt, ob eine Session den Body überhaupt anfasst.
**Und die ehrliche Antwort auf die Frage nach dem Tooling: es gibt keins, und es soll keins
geben.** `wikitool` kennt diesen Tracker nicht. Es wird an Instanzen ausgeliefert, die unter
dieser URL keine Issues haben, während `instructions/dev/` von `dist export` gepruned wird —
ein Gitea-Client im ausgelieferten Tool wäre eine Dev-Abhängigkeit, die jede Instanz mitträgt,
um ein Board zu prüfen, das keine von ihnen hat. Der Tracker ist ausschließlich über
`gitea-mcp` erreichbar, also in einer Session, durch einen Agenten.
Kein `docs verify` fängt also einen geschlossenen Issue, dessen Body offen klingt, einen Body,
der seinen eigenen Kommentaren widerspricht, oder ein fehlendes Pflichtlabel. Das steht jetzt
als eigener Abschnitt „What no tool checks" in der Instruktion — nicht als Bedauern, sondern als
Begründung dafür, warum die Reihenfolge in Schritt 7 ausgeschrieben ist statt aus Schritt 2
erschlossen zu werden.
---
## 4.1.1 - 2026-09-03 - Testisolation: kb_dir repointet config.ROOT, lint löst Kollektionen gegen den übergebenen Baum auf
**Author:** Torben Nehmer
Issue #44, gefunden beim Bau der Migrations-Gate-Tests für 4.1.0: die `kb_dir`-Fixture baute
ihren Baum unter `tmp_path`, ließ `config.ROOT` aber auf dem echten Checkout stehen. Jeder
Codepfad, der eine Datei über `config.ROOT`/`config.KB_DIR` auflöst statt über das übergebene
Verzeichnis, traf damit das echte Repository.
**Der laute Fall** war ein Test, der `kb_state.write_kb_state()` rief und dabei das
`.wikitool-kb.json` des Repos überschrieb — Applied-Ledger leer statt zwei Einträgen. In
`git status` sofort sichtbar und reversibel; bei einer gitignorierten Datei wäre es das nicht
gewesen.
**Der stillere Fall** ist der teurere. `lint`s Kollektions-Lookup löste eine Seite gegen
`config.KB_DIR` auf. Für eine Seite unter `tmp_path/kb/` warf das `ValueError`, die Funktion
antwortete „keine Kollektion", und die Label-Autorisierung übersprang die Kante wortlos.
`unauthorised_labels` war damit faktisch ungetestet — jeder Test, der das Finding hätte
auslösen können, bekam eine leere Liste und behauptete nichts. Ein grüner Lauf, der wie eine
Zusicherung aussah.
**Der Fix ist der Codepfad, nicht die Fixture.** `run_lint()` bekommt ein Verzeichnis
übergeben und löst jetzt auch intern dagegen auf; `authorised_labels()` bekommt denselben Baum
gereicht, statt auf `config.KB_DIR` zurückzufallen. Der Regressionstest lintet einen Baum, von
dem `ROOT` bewusst wegzeigt — genau der Fall, den die alte Auflösung verschluckte. Eine Funktion,
die ein Verzeichnis entgegennimmt, löst dagegen auf: keine Fixture kann diese Form von außen
reparieren.
**Beide Korpus-Fixturen repointen jetzt.** `kb_dir` tut, was `raw_dir` längst tat — `ROOT` auf
das eigene `tmp_path`, plus `use_shipped_type_specs()`. Der Suite-Lauf kippte dadurch keinen
einzigen Test. Die lokale `rooted_kb`-Umgehung aus 4.1.0 entfällt damit; die Auswahl zwischen
zwei fast gleichen Fixturen war Wissen, das nirgends stand.
**Und ein Wächter für die ganze Klasse.** `repository_tree_guard` (session-scoped, autouse)
vergleicht `git status --porcelain` vor und nach dem Lauf und lässt die Suite scheitern, wenn
sich im Checkout etwas bewegt hat — zwei `git status`-Aufrufe pro Lauf, deshalb per Default an.
Er vergleicht vorher gegen nachher statt einen sauberen Baum zu verlangen, sagt also nichts über
die unveröffentlichte Arbeit des Entwicklers. Den Verursacher benennt er nicht;
`CHEMENU_TREE_GUARD=each` prüft nach jedem Test und tut es. Ohne git oder außerhalb eines
Repositorys sind beide still.
Was der Wächter nicht sieht: eine Prüfung, die unter Test nichts tut, schreibt keine Datei.
Dagegen hilft nur ein Test, der das Finding tatsächlich auslöst — der neue tut das.
`instructions/dev/testing-conventions.md` hat dafür einen eigenen Abschnitt („Which tree a test
writes into"), einen Schritt in der Checkliste und die Regel für neue Fixturen.
---
## 4.1.0 - 2026-09-03 - Link-Taxonomie: Lint-Findings hart ab kb_version 4.0.0, outbound: an das Type-Spec gebunden, part-of/composition als Inversenpaar
**Author:** Torben Nehmer
Der Rest von Issue #40, nachdem die Korpus-Migration durch ist: die beiden aufgeschobenen
Lint-Findings werden hart, und die drei Befunde aus dem Abschlusskommentar des Migrationslaufs
werden aufgelöst.
**`unlabelled_edges` und `unauthorised_labels` sind harte Fehler — aber an `kb_version`
gebunden, nicht an ein Datum.** Der Weg, den `legacy_citation_markers` genommen hat, war ein
Umlegen in einer späteren Version: eine Instanz, die die Zitat-Migration noch schuldete, lebte
danach mit rotem Lint. Das Ledger kann die Frage inzwischen beantworten, also tut es das.
Unterhalb `kb_version` 4.0.0 bleiben beide beratend — genau das Fenster, in dem
`instructions/migrations/4.0.0-link-taxonomy.md` der Instanz sagt, sie solle den halb
konvertierten Korpus Einheit für Einheit publizieren; ein Check, der dabei fehlschlägt, würde
den Korpus verweigern, dessen Fortschritt er misst. Ab 4.0.0 ist eine kahle Titelangabe in
`related:` keine Seite mehr, die auf ihre Umstellung wartet, sondern eine Kante, deren Autor
nicht gesagt hat, was sie behauptet. `hard_error_keys()` liefert die jeweils geltende Menge,
`HARD_ERROR_KEYS` bleibt die vollständige.
**`outbound:` ist an das Type-Spec gebunden.** `kb/sources/` und `kb/comparisons/`
autorisierten Label, die dort strukturell nicht schreibbar waren: keiner der beiden Type-Specs
führte ein `related:`. Folgenlos war das nicht — die einzige Comparison-Seite des Korpus trug
`- **compares-with:** [[amd-pstate]]` als *handgeschriebene Prosa*, ohne Marker-Region, ohne
Frontmatter, für `lint` unsichtbar. Also ein Identifier zurück im Fließtext, gut vier Stunden
nachdem 4.0.0 genau das beendet hatte. Eine leere Autorisierung liest sich als Lizenz.
Aufgelöst nach dem, was die beiden Contracts jeweils selbst sagen: `comparison` bekommt ein
`related:` (die `compares-with`-Kante gegen jedes Subjekt ist die eine Aussage, für die die
Seite existiert), `kb/sources/` verliert seinen `outbound:`-Block ersatzlos (dessen Contract
sagt ausdrücklich, seine Verknüpfungen seien der mechanische Provenance-Pfad und keine
Autorenkanten). Neu prüft `docs verify` die Kombination: ein `outbound:`-Block auf einer
Collection, in die kein Typ mit `related:` schreibt, ist ein Befund und nennt beide Richtungen
der Reparatur.
**`composition` / `part-of` ist das dritte Inversenpaar**, neben `depends-on` / `required-by`
und `runs-on` / `hosts`. Aus der Messung, nicht vom Schreibtisch: der u3-Lauf hatte entschieden,
die Gegenseite eines `composition` bekomme `see-also`, weil `part-of` ein Spiegel wäre. Ist es
nicht — der Satz des Elternteils zählt seine Teile auf, der des Kindes benennt das Ganze, zu
dem es gehört, und ein Leser, der auf dem Kind landet, braucht den zweiten. Übrig blieben 16
`see-also`-Kanten für eine Beziehung, für die der Katalog ein Wort hat; sie sind auf `part-of`
umgestellt. Ein Inversenpaar macht die Gegenkante weiterhin **nicht** zur Pflicht — Richtung
wird verfasst, nicht gespiegelt —, es legt nur fest, welches Label sie trägt, wenn jemand sie
schreibt.
**Stack- und Korpusänderung laufen hier in einem Zug**, entgegen der sonstigen Trennung. Der
neue `docs verify`-Check würde eine bestehende 4.0.x-Instanz beim bloßen Kopieren der neuen
Maschinerie fehlschlagen lassen, weil deren `kb/sources/COLLECTION.md` den `outbound:`-Block
noch trägt — nach [instructions/dev/version-parts.md](instructions/dev/version-parts.md)
Schritt 1 ein Grenzübertritt. Statt dafür eine `5.0.0` zu lösen, ist die Ursache mitbeseitigt:
die Collection-Contracts dieser Instanz sind angepasst, und `dist export` leitet die
`COLLECTION.md.template` daraus ab, also liefert jede neue Distribution die korrigierte Form
aus. Für eine bereits bestehende 4.0.x-Instanz bleibt eine Handbewegung übrig, und sie wird
hier benannt statt versteckt: die zwei `outbound:`-Zeilen aus `kb/sources/COLLECTION.md`
löschen. Das neue `related:` im `comparison`-Type-Spec erreicht sie ohnehin nicht — die vier
Page-Type-Specs gehören seit 4.0.0 der Instanz und werden nur als `.template` ausgeliefert.
Offen aus #40 bleibt nichts mehr; Befund 2 des Migrationslaufs (dem Katalog fehlt ein Register
für Urheberschaft) ist als eigenes Issue erfasst.
---
## 4.0.1 - 2026-09-02 - Issue-Board: vier Pflicht-Label-Familien und Body-als-Wahrheit
**Author:** Torben Nehmer
Das Issue-Schema aus 1.2.1 hatte zwei Pflichtachsen und einen ausdrücklich begründeten Verzicht
auf eine dritte: eine Taxonomie mit mehr Achsen brauche eigene Pflege, und das Board habe einen
einzigen Betreuer. Diese Begründung ist entfallen, weil die Pflege inzwischen maschinell
passiert - Body-Rewrites und Kommentare laufen über eine LLM-Sitzung, Menschen fassen in der
Regel nur Labels an. Damit sind vier Achsen bezahlbar (Issue #41).
**Pflicht auf jedem offenen Issue sind jetzt vier Label:** `area/` (`kb`, `distribution`,
`corpus`, `workflow`, `process` - kein `area/tools`, Tooling wird nach der bedienten Domäne
einsortiert, nicht nach Codeort), `kind/` (`decision`, `build`, `defect`), `prio/`
(`blocking`, `planned`, `waiting` - reine Umbenennung von `1`/`2`/`3`) und `size/` (`S`, `M`,
`L`; `XS` entfällt). Dazu zwei optionale Flags: `status/blocked` für Abhängigkeit von einem
anderen offenen Issue, `status/unconfirmed` für einen ungeprüften Verdacht, unter dem `size`
und `prio` vorläufig sind. Ein `unconfirmed`-Issue endet in der Triage entweder ohne Flag und
mit verbindlichen Werten oder geschlossen mit Begründung - die Prozessentsprechung zu
Invariante 3.
**Der Issue-Body ist ab jetzt aktuelle Wahrheit, nicht Ursprungstext.** Die Umsetzung eines
Issues zieht sich über mehrere, zeitlich getrennte Sitzungen, und der Body ist das einzige, was
sie verbindet: eine Sitzung muss aus ihm allein rekonstruieren können, was entschieden und was
offen ist. Er wird deshalb umgeschrieben statt ergänzt. Jeder Rewrite bekommt einen Kommentar,
der ausschließlich benennt, was sich geändert hat - keine Vollkopie des alten Stands, weil ein
Mensch zwei Fließtexte nicht diffen kann und eine Kopie pro Revision damit keine Historie ist,
sondern nur eine weitere Kopie.
Geändert: [instructions/dev/issue-tracking.md](instructions/dev/issue-tracking.md) (Schritte 2,
3, 5 neu; Schritt 4 um `area/` und `kind/` erweitert; der Entscheidungspunkt „Two labels feel
too coarse?" entfällt) und die Beschreibungszeile in `instructions/dev/stack-dev/SKILL.md`. Für
eine ausgelieferte Instanz ändert sich nichts: `dist export` schließt `instructions/dev/`
vollständig aus, weshalb dies ein PATCH ist und kein MINOR - dieselbe Begründung wie bei
`1.2.1`. Noch offen aus #41: `kb/concepts/Issue Label Scheme.md` beschreibt weiterhin das
zweiachsige Schema und braucht eine eigene `wiki-manage`-Sitzung.
---
## 4.0.0 - 2026-09-02 - Prosa ist kein Identifier: Link-Taxonomie als Enum, generierte Regionen mit Markern
**Author:** Torben Nehmer
**Breaking Change:** Beziehungslabel sind Enum-Werte in related: statt Freitext im Body-Bullet, toolgefuehrte Abschnitte liegen zwischen Marker-Paaren statt hinter ihrer Ueberschrift, und xref add schreibt nur noch eine Kante statt beider Richtungen. tools/chemenu/sections.py ist geloescht. Eine bestehende Instanz muss sections: in kb/CONVENTIONS.md auf links/footnotes umstellen, outbound: in jede COLLECTION.md eintragen, die {section.*}-Variablen aus ihren Page-Type-Templates entfernen und den Korpus umstellen - sonst scaffoldet new die Variablen woertlich in neue Seiten. Ablauf: instructions/migrations/4.0.0-link-taxonomy.md
Der Stack benutzte an drei Stellen **Prosa als Identifier**, und jede hat messbar etwas
gekostet. Die Überschrift eines Abschnitts war seine Adresse (`^## Beziehungen$`), was die
KB-Sprache zu einer Compiler-Konstante machte *und* das Ende der Region zur Schätzung - sie lief
bis zur nächsten Überschrift, davor bis zum Dateiende, und hat auf acht Seiten still Inhalt
gelöscht. Das Beziehungslabel stand nur im Body-Bullet, also konnte nichts das Vokabular prüfen:
gemessen am Korpus **152 distinkte Label in 337 Bullets** gegen dreizehn dokumentierte, 102 davon
genau einmal vorkommend. Und `xref add` spiegelte jede Kante, was `## Siehe auch` mit 555
Bullets ohne Label füllte - 353 davon beweisbar redundant.
**Was jetzt Identifier ist.** Eine Region liegt zwischen `<!-- wikitool:links -->` bzw.
`<!-- wikitool:footnotes -->` und wird vollständig aus dem Frontmatter gerendert, Überschrift
eingeschlossen. Ein Label ist ein Maschinenwert in `related:` (`- depends-on: Hermes`), gezogen
aus `instructions/link-taxonomy.md` und **pro Ziel autorisiert von der Quell-Collection**
(`outbound:` im `COLLECTION.md`, Commonplaces ADR-019). Der Body-Bullet ist eine Darstellung
dieser Daten, nicht ihr zweiter Aufbewahrungsort.
**Gelöscht, ersatzlos:** `tools/chemenu/sections.py` komplett, `heading_re`, der
Alias-Mechanismus, `PRE_CONVENTIONS_NAMES`, `cite_block_heading`, `provenance.__getattr__`, die
`{section.*}`-Template-Variablen, `xref`s Abschnittssuche. Kein Überschriftentext liegt mehr in
Python - bis auf zwei kosmetische Fallbacks, und die sind harmlos geworden: der Marker trägt die
Identität, also rendert ein falscher Default falsche Wörter statt Struktur zu zerlegen, und der
nächste Write repariert es.
**Kanten sind direktional, und das war keine Geschmacksfrage.** Die per-Collection-Autorisierung
ist mit einer automatisch gespiegelten Gegenkante logisch unverträglich: die Spiegelhälfte
entsteht in einer Collection, deren Regeln der Autor nie gelesen hat. Entweder schriebe das
Werkzeug unautorisierte Kanten, oder die Regel "die Quellcollection entscheidet" löst sich auf.
Der Navigationseinwand wird dabei *besser* beantwortet als vorher: `wikitool links show --page`
berechnet die Eingangssicht über den Korpus, vollständig und ohne Pflege, und das gerenderte
Bullet ist ein gewöhnlicher `[[wikilink]]` - ein Backlink-Panel zeigt es ohnehin. Die erzwungene
Gegenkante garantierte nie Vollständigkeit, nur dass jemand daran gedacht hat.
**Der Orphan-Check meldet dadurch mehr,** und das ist die Prüfung bei der Arbeit: sie misst jetzt
Erreichbarkeit statt "ist `xref` gelaufen".
**`obligation:` trennt zwei Achsen, die vorher eine waren.** `migration_kind:` sagt *wie*
gearbeitet wird, neu `obligation: required|offered` *ob* überhaupt. Eine `offered`-Migration ist
ein Angebot für eine Datei, die der Instanz gehört - sie blockiert nie, steht nicht in der Kette,
und `migrate done` verbucht sie im Ledger, **ohne** `kb_version` zu bewegen. Genau daran hing ein
Entwurfsfehler, den erst der Test gezeigt hat: Offers gegen `kb_version` zu filtern hätte jede
Offer verschwinden lassen, sobald irgendein unbeteiligter Pflichtschritt lief. Dazu ist die
Erkennungshälfte aktiviert, die seit ihrer Einführung ungelesen dalag - die sha256 pro Datei in
`.wikitool-release.json` beantwortet jetzt "editiert oder nur empfangen", also ob eine Offer
kopiert werden darf oder von Hand abgeglichen werden muss.
**`types/` teilt sich entlang `root:`.** `root: kb` heißt Wissensseite heißt Instanz: die vier
Page-Type-Specs samt Schemas gehen als `.template`, `instruction`/`lint-report`/`type-spec`
verbatim. Damit ist die deutsche Prosa in jenen vier Dateien **korrekt statt Migrationsschuld** -
es war die richtige Sprache an einem Ort mit falsch deklariertem Eigentümer. Was der Stack von
der Type-Schicht noch verlangt, ist eine Zeile: ein Type-Spec `name: source`, dessen Schema
`raw_files` fordert. `STACK_REQUIRED_COLLECTIONS` entfällt als separate Liste - die pflichtige
Collection wird aus dem `base_dir` dieses Typs abgeleitet.
**Warum das MAJOR ist.** Vorwärts: `sections:` hat eine andere Form, `outbound:` fehlt, und die
in 3.0.0 übernommenen Page-Type-Templates enthalten `{section.*}`-Variablen, die es nicht mehr
gibt - `new` schriebe sie wörtlich in neue Seiten. Rückwärts: 4.0.0 schreibt gelabelte Kanten,
die 3.0.0s Schema als `type: string` ablehnt. Beide Hälften des Drop-in-Tests fallen.
**Der Korpus dieser Instanz ist noch nicht umgestellt.** Diese Version liefert die Maschinerie;
`lint` meldet die 480 noch ungelabelten Kanten als Findings, nicht als Fehler, weil das genau das
Fenster ist, für das `.wikitool-kb.json` existiert. `malformed_edges` und `unbalanced_markers`
sind dagegen sofort hart - keines beschreibt eine unkonvertierte Seite, nur eine kaputte. Die
Beförderung der beiden anderen kommt, wenn der Korpus sie bestehen kann.
--- ---
## 3.0.0 - 2026-09-02 - Autorenkonventionen nach Eigentum geschnitten: kb/CONVENTIONS.md, deklarierte Collections ## 3.0.0 - 2026-09-02 - Autorenkonventionen nach Eigentum geschnitten: kb/CONVENTIONS.md, deklarierte Collections
+97
View File
@@ -0,0 +1,97 @@
# Entwicklung dieses Stacks
Dieses Dokument richtet sich an Menschen, die an `tools/wikitool`, dem Type-Schema oder der
Instruction-/Skill-Schicht selbst arbeiten - nicht an den Konsumenten einer Instanz. Für die
Gegenseite (eine Instanz installieren, aktualisieren, betreiben) siehe [INSTALL.md](INSTALL.md).
**Diese Datei wird nicht ausgeliefert.** Sie ist das menschliche Gegenstück zu
`instructions/dev/`, das `tools/wikitool dist export` vollständig ausschließt: eine
ausgelieferte Instanz hat keinen Release-Workflow, keine CI und kein Issue-Board, also braucht
sie auch keine Anleitung dafür. `dist_cmd.ROOT_FILES` listet sie deshalb bewusst nicht - der
Grund steht dort als Kommentar, damit eine spätere Sitzung die vermeintliche Lücke nicht
"repariert". Und weil sie nicht ausgeliefert wird, darf sie - anders als `README.md`,
`INSTALL.md` oder `EVALS.md`, die `instructions verify` auf genau diesen Punkt prüft - nach
`instructions/dev/` verlinken.
## Der Release-Ablauf
Zwischen zwei Releases führt der Stack **einen** laufenden Versionskandidaten statt einer neuen
Nummer pro Bump. Das volle Modell - Zustandsort, Eskalationslogik, warum eine Nummer erst durch
ein Release verbraucht wird - steht in
[instructions/dev/version-parts.md](instructions/dev/version-parts.md) und
[docs/version-model.md](docs/version-model.md). Hier nur der Ablauf, in der Reihenfolge, in der
eine Sitzung ihn tatsächlich durchläuft:
1. **Bump eröffnet oder eskaliert den Kandidaten.**
```bash
tools/wikitool version bump --minor --title "Was sich geändert hat"
```
Schreibt `VERSION` als `X.Y.Z-beta.N` und öffnet (oder aktualisiert) den passenden
`CHANGES.md`-Eintrag. Mehrere Bumps für dieselbe Änderung sind normal - jeder aktualisiert
denselben Eintrag, statt einen neuen zu eröffnen.
2. **Der Eintrag bekommt seine Prosa.** `bump` schreibt nur das Skelett (Heading, Datum, Autor,
die maschinenverwaltete Bump-Titel-Liste, ggf. Breaking-/Migration-Zeile). Der Fließtext
darunter ist Autorenarbeit, wie bei `new` und der Seiten-Prosa.
3. **Verify laufen lassen, bevor irgendetwas gepublished wird:**
```bash
cd tools && .venv/bin/python -m pytest -q
tools/wikitool docs verify
tools/wikitool instructions verify
```
4. **`version release` fixiert den Kandidaten**, sobald er ausgeliefert werden soll:
```bash
tools/wikitool version release --title "Zusammenfassender Titel"
```
Streicht den `-beta.N`-Suffix aus `VERSION` und schließt den Changelog-Eintrag. `--title` ist
optional - ohne ihn bleibt der Titel des letzten Bumps stehen; mit ihm bekommt ein Kandidat,
der mehrere Bump-Titel gesammelt hat, eine zusammenfassende Überschrift. Committet und pusht
nichts (Invariante 5 in [AGENTS.md](AGENTS.md)).
5. **Publish bewegt `VERSION` auf `main`.**
```bash
tools/wikitool publish --message "..."
```
Das Mass-Update-Gate und das Publish-Remote-Gate gelten wie bei jedem anderen Publish -
siehe [instructions/gates.md](instructions/gates.md).
6. **CI übernimmt den Rest.** `.gitea/workflows/release.yml` reagiert auf jeden Push, der
`VERSION` bewegt: Eine suffixbehaftete `VERSION` (ein Kandidat) lässt den Job sauber
überspringen, bevor er die Releases-API überhaupt anfragt - Betas werden nie veröffentlicht.
Eine suffixfreie `VERSION` baut die Distribution (`dist export`), erzeugt Tag und Release und
lädt Tarball plus Prüfsumme hoch. **CI setzt den Tag, nie eine Sitzung** - das hält
Invariante 5 intakt.
Die drei Verify-Befehle stehen oben in Schritt 3; was jeder von ihnen prüft, steht in
[tools/CONTRACT.md](tools/CONTRACT.md) und wird dort von `docs verify` gegen die tatsächliche
CLI gehalten. Hier steht es bewusst **nicht** noch einmal: eine zweite Beschreibung derselben
Befehle ist genau die Kopie, die driftet (AGENTS.md Invariante 8), und dieses Dokument liegt
außerhalb der Dateien, die der Kommandotabellen-Check von `docs verify` abdeckt - hier fällt eine
Drift also niemandem auf. Was `pytest` an dieser Stelle vom Entwickler erwartet, steht in
[instructions/dev/testing-conventions.md](instructions/dev/testing-conventions.md).
## Die CI-Hälfte
`.gitea/workflows/ci.yml` läuft auf jeden Push/PR gegen `main` (Content-Pfade ausgenommen) und
führt Testsuite, `docs verify`, `instructions verify` sowie einen vollständigen
`setup-instance.md`-Replay gegen einen frischen `dist export` aus - derselbe Pfad, den ein neuer
Nutzer tatsächlich geht. `.gitea/workflows/nightly.yml` ist der Drift-Check gegen die Zeit statt
gegen einen Commit. `.gitea/workflows/release.yml` ist Schritt 6 oben.
## Stack-Entwicklung als eigener Sitzungstyp
Der `stack-dev`-Skill (`instructions/dev/`, nur in diesem Ursprungs-Repo vorhanden) fasst die
Regeln für eine Sitzung, die den Stack selbst statt Wiki-Inhalt bearbeitet: wann
Quellenbindung nicht gilt, wo Design endet und die mechanische Phase beginnt (mit dem
Modellwechsel-Hinweis), und dass Issue-Abschluss ein Body-Rewrite ist, kein Kommentar. Siehe
[instructions/dev/issue-tracking.md](instructions/dev/issue-tracking.md) für den
Issue-Tracker selbst.
+71 -19
View File
@@ -167,10 +167,17 @@ wenn nicht). `tools/wikitool version notes` druckt den Eintrag.
### Eine Instanz aktualisieren ### Eine Instanz aktualisieren
Das Anwenden eines Updates ist ein bewusst manueller Vorgang - es schreibt in eine Instanz, die Zwei Wege, je nachdem, wie diese Instanz entstanden ist. Ein **Clone mit gemeinsamer
bereits Inhalt hat. Der Inhalt hat dabei eine **eigene Version**: `.wikitool-kb.json` sagt, in Git-History** (`upstream`-Remote auf das Ursprungs-Repo, siehe
welcher Form die Seiten vorliegen, unabhängig davon, welche Maschinerie danebensteht. Genau [instructions/private-instance.md](instructions/private-instance.md)) nimmt Stack-Updates per
dieser Unterschied ist der Zustand, in dem sich jede Instanz mitten im Upgrade befindet. echtem Drei-Wege-Merge: `tools/wikitool upstream merge`. Alles Folgende gilt für eine **Instanz
aus einem Tarball**, ohne gemeinsame History - der Weg unten unter „Eine Instanz aktualisieren"
nutzt sie.
Das Anwenden eines Updates schreibt in eine Instanz, die bereits Inhalt hat. Der Inhalt hat dabei
eine **eigene Version**: `.wikitool-kb.json` sagt, in welcher Form die Seiten vorliegen,
unabhängig davon, welche Maschinerie danebensteht. Genau dieser Unterschied ist der Zustand, in
dem sich jede Instanz mitten im Upgrade befindet.
1. **Vor dem Tausch** prüfen, was ansteht - solange `VERSION` noch die alte ist: 1. **Vor dem Tausch** prüfen, was ansteht - solange `VERSION` noch die alte ist:
@@ -178,19 +185,49 @@ dieser Unterschied ist der Zustand, in dem sich jede Instanz mitten im Upgrade b
tools/wikitool migrate status tools/wikitool migrate status
``` ```
2. Release-Tarball herunterladen und entpacken (Weg A), die Release-Notes lesen. Steht hier etwas aus, erst diese Migrationskette abschließen (Schritt 5 unten) - `dist upgrade`
3. Die **Maschinerie** aus dem Tarball über die Instanz kopieren: `tools/`, `types/`, verweigert den Tausch sonst von selbst.
`instructions/`, `AGENTS.md`, `VERSION`, `.wikitool-release.json` - **und `kb/CONTRACT.md`**.
Die letzte Datei liegt unter einem Content-Verzeichnis, ist aber Stack-Eigentum: sie hält, 2. Release-Tarball herunterladen und die Release-Notes lesen (Weg A oben).
was `wikitool` erzwingt, und ist in jeder Instanz gleich. Nicht anfassen: alles andere unter 3. **Maschinerie tauschen:**
`kb/` und `raw/`, `work/`, `.wikitool-kb.json` und `.git/` - das ist die Instanz selbst,
`kb/CONVENTIONS.md` und die `kb/*/COLLECTION.md` eingeschlossen. ```bash
4. Achtung bei lokal angepassten Stack-Dateien. Die Autorenkonventionen gehören **nicht** dazu: tools/wikitool dist upgrade <tarball-oder-verzeichnis> --dry-run
`kb/CONVENTIONS.md` und die `kb/*/COLLECTION.md` liegen unter `kb/`, werden in Schritt 3 ```
also ohnehin nicht angefasst - genau dafür ist der Schnitt da. Wer darüber hinaus etwas
unter `tools/`, `types/` oder `instructions/` verändert hat, sichert das vorher und spielt **Beim ersten Sprung auf `4.5.0` oder höher gibt es dieses Kommando in der Instanz noch
es danach wieder ein. Welche Dateien das sind, verrät ein Vergleich gegen die sha256-Summen nicht** - es kam erst mit `4.5.0`. Dann das Werkzeug aus dem entpackten *neuen* Tarball
im `files`-Block der alten `.wikitool-release.json`. verwenden, gegen die alte Instanz gerichtet:
```bash
tar -xzf chemenu-stack-<version>.tar.gz
CHEMENU_ROOT="$PWD" chemenu-stack-<version>/tools/wikitool \
dist upgrade chemenu-stack-<version>.tar.gz --dry-run
```
`CHEMENU_ROOT` sagt dem Paket, auf welchen Korpus es zeigen soll (siehe § Konfiguration);
ohne die Variable würde es den entpackten Tarball selbst für die Instanz halten. Ab dem
zweiten Upgrade trägt die Instanz das Kommando selbst und die kurze Form oben genügt.
Klassifiziert jede Datei aus dem `files`-Block der neuen `.wikitool-release.json`:
unverändert seit der Installation, lokal verändert oder gelöscht, neu im Release, oder aus dem
Release entfallen - und druckt die Migrationskette, die nach dem Tausch aussteht, ohne sie
auszuführen. Ohne `--dry-run` schreibt der Befehl; eine lokal veränderte oder gelöschte Datei
wird dabei **nie** stillschweigend überschrieben - der Lauf bricht mit der vollständigen Liste
ab, es sei denn `--keep-local` ist gesetzt (dann bleibt jede davon unangetastet, erneut
gemeldet). `--prune` entfernt zusätzlich Dateien, die der neue Release nicht mehr ausliefert
und die seit der Installation unverändert sind. Voraussetzungen: ein sauberer Arbeitsbaum
(kein Git-Repo ist ein WARN, keine Sperre), eine lokale `.wikitool-release.json` mit
`files`-Block (fehlt sie, siehe „Fallstricke" unten), und `.wikitool-kb.json` vorhanden.
Committet und pusht nichts (Invariante 5). Vollständiger Fehlerkontrakt:
[tools/CONTRACT.md](tools/CONTRACT.md).
Eine lokal veränderte Stack-Datei ist damit sichtbar, statt von Hand gegen die sha256-Summen
im `files`-Block geprüft werden zu müssen - genau der Schritt, der vor `4.5.0` hier stand.
4. Bei einer Kompatibilitätsgrenze (`dist upgrade` meldet sie laut) die Release-Notes vor dem
nächsten Schritt lesen: **Breaking Change:** und **Migration:** im Eintrag von
`tools/wikitool version notes` sagen, was aufhört zu funktionieren und ob der Korpus
umgeschrieben werden muss.
5. **Die Migrationskette abarbeiten.** `tools/wikitool migrate status` listet jetzt alle 5. **Die Migrationskette abarbeiten.** `tools/wikitool migrate status` listet jetzt alle
offenen Migrationen in der Reihenfolge, in der sie laufen müssen - bei einem Sprung über offenen Migrationen in der Reihenfolge, in der sie laufen müssen - bei einem Sprung über
mehrere Versionen sind das mehrere. Für jede: das genannte Dokument unter mehrere Versionen sind das mehrere. Für jede: das genannte Dokument unter
@@ -204,15 +241,30 @@ dieser Unterschied ist der Zustand, in dem sich jede Instanz mitten im Upgrade b
`done` verweigert jede Version, die nicht das nächste Glied ist - eine übersprungene `done` verweigert jede Version, die nicht das nächste Glied ist - eine übersprungene
Migration hinterlässt einen Korpus in einer Form, die keine Version beschreibt. Ein Migration hinterlässt einen Korpus in einer Form, die keine Version beschreibt. Ein
abgebrochenes Upgrade wird durch erneutes `migrate status` fortgesetzt. abgebrochenes Upgrade wird durch erneutes `migrate status` fortgesetzt.
6. Prüfen: `tools/wikitool migrate verify --from <commit vor der Migration>`, dann `doctor`, 6. Prüfen: `tools/wikitool migrate verify --from <commit vor dem Tausch>`, dann `doctor`,
`docs verify`, `instructions verify` und `lint`. Zum Schluss `docs verify`, `instructions verify` und `lint`. Zum Schluss
`tools/wikitool instructions sync` (die Skills sind Kopien) und die Agent-Session neu `tools/wikitool instructions sync` (die Skills sind Kopien) und die Agent-Session neu
starten. starten. `dist upgrade` nennt diese Reihenfolge im eigenen Abschlussbericht, führt aber keinen
der Schritte selbst aus.
`doctor` warnt, solange `kb_version` hinter `VERSION` zurückliegt und noch Migrationen offen `doctor` warnt, solange `kb_version` hinter `VERSION` zurückliegt und noch Migrationen offen
sind. Einer Instanz, die älter ist als `.wikitool-kb.json`, fehlt die Datei ganz - dann einmalig sind. Einer Instanz, die älter ist als `.wikitool-kb.json`, fehlt die Datei ganz - dann einmalig
`tools/wikitool migrate baseline <version>` aufrufen; geraten wird nichts. `tools/wikitool migrate baseline <version>` aufrufen; geraten wird nichts.
**Fallstricke.** Eine Instanz ohne lokale `.wikitool-release.json` (oder eine ohne `files`-Block,
aus der Zeit vor `4.5.0`) hat für `dist upgrade` keine Basis, gegen die es eine lokale Änderung
erkennen könnte, und verweigert den Tausch - dafür gibt es heute keine Reparatur (siehe Gitea #7).
Der Befehl lädt selbst nichts herunter: `<tarball-oder-verzeichnis>` muss vorher aus Weg A
geholt werden, und ein Tarball muss genau ein Top-Level-Verzeichnis enthalten - die Form, in der
`.gitea/workflows/release.yml` es baut.
Vor `4.5.0` stand hier ein rein manueller Ablauf (Maschinerie von Hand kopieren, `kb/CONTRACT.md`
eingeschlossen, sha256-Vergleich von Hand). `dist upgrade` ersetzt genau diesen Teil; wer ihn
dennoch von Hand nachvollziehen will oder muss (ein Werkzeug, das `wikitool` selbst nicht
ausführen kann), findet die Dateiliste im `files`-Block der `.wikitool-release.json` und die
Ausnahmen (`kb/CONVENTIONS.md`, `kb/*/COLLECTION.md`, `.wikitool-kb.json`) in
[tools/CONTRACT.md](tools/CONTRACT.md)s `dist upgrade`-Zeile.
### Sonderfall: Update von 1.x auf 2.0.0 ### Sonderfall: Update von 1.x auf 2.0.0
Mit `2.0.0` wurde das Ursprungs-Repo von `torben/llm-wiki-test1` auf `torben/chemenu` Mit `2.0.0` wurde das Ursprungs-Repo von `torben/llm-wiki-test1` auf `torben/chemenu`
+1
View File
@@ -115,6 +115,7 @@ chemenu/
Dev-instance-only (see `tools/CONTRACT.md` for how it got here): Dev-instance-only (see `tools/CONTRACT.md` for how it got here):
``` ```
├── DEVELOPMENT.md # Human-readable: the release workflow (version bump/release/publish/CI)
└── commonplace/ # Vendored, read-only knowledge base └── commonplace/ # Vendored, read-only knowledge base
``` ```
<!-- dist:strip-end --> <!-- dist:strip-end -->
+1 -1
View File
@@ -1 +1 @@
3.0.0 4.5.1
+115
View File
@@ -0,0 +1,115 @@
# Ownership and Templates
Chemenu ships two kinds of files side by side, and at a glance they look the same: both are
plain markdown, both sit in the repo root or under `kb/`, both get read at session start. But a
stack upgrade treats them completely differently. Some - [AGENTS.md](../AGENTS.md),
[kb/CONTRACT.md](../kb/CONTRACT.md), the per-stage contracts - are identical in every instance
that runs this stack and are the next release's to replace (with one caveat about local edits,
below). Others - `USER.md`,
`SOUL.md`, `kb/CONVENTIONS.md`, `ENVIRONMENT.md` - describe one particular instance, and
overwriting them would silently erase a choice someone made on purpose.
## Two different kinds of truth
The stack-owned files describe how the tool works. `kb/CONTRACT.md` opens by saying it holds
what `tools/wikitool` enforces or what follows mechanically from how it operates - see
[kb/CONTRACT.md](../kb/CONTRACT.md), lines 10-13. That kind of statement doesn't vary by
instance: the compiler behaves the same way regardless of who is running it, so the sentence
describing that behavior can be copied byte-for-byte into every checkout without becoming
wrong anywhere.
The instance-owned files describe a choice: which language pages are written in, what tone the
agent takes, who the operator is, which git remote is authoritative, which MCP servers are
reachable. None of that follows from the tool's mechanics - two instances of the identical
stack can answer all of these differently and both be correct. [AGENTS.md § Personalization](../AGENTS.md#personalization)
frames the split the same way for `kb/CONTRACT.md` versus `kb/CONVENTIONS.md`: "the split is by
who may change the sentence, not by what it is about." A rule about page structure could in
principle have been written per-instance too, but then every instance answering "not German" to
setup would be hand-editing a file the stack also ships, and the next `dist export` merge would
hand the instance's own file back to it, discarding the customization.
## Why silent overwrite is the failure being designed against
A stack update is meant to be a routine, low-risk operation: pull the latest release, get
whatever fixes and features shipped since the last one. That only stays low-risk if the update
knows which files it's allowed to touch. If `USER.md` or `kb/CONVENTIONS.md` were treated the
same as `AGENTS.md` - shipped and periodically re-copied - an upgrade would quietly replace a
description of *this* operator, in *this* language, with whatever placeholder or default the
stack maintainers wrote. The damage wouldn't be loud: nothing crashes, the files still parse,
the agent just starts acting on the wrong premises until someone notices the voice or the
language changed.
Keeping the boundary at the file level, rather than trying to merge changes within a shared
file, means an upgrade never has to guess which lines are "stack" and which are "instance" -
the file itself already answers that.
## Why the boundary is a predicate rather than a list
For a while the boundary was written down as a list of paths - once in `dist_cmd.py`, once in
the merge procedure a private instance was told to run by hand, and once in the check that
procedure ended with. Three copies of one fact, which is the shape [AGENTS.md](../AGENTS.md)
invariant 8 exists to forbid, and they drifted exactly as predicted: the hand-run procedure was
still naming three paths after the collection contracts had moved to the instance's side of the
line, so it discarded upstream changes to files it had never heard of, while its own final check
excluded the same three paths and therefore reported success.
`chemenu/ownership.py` replaced the lists with one question - is this path, under a content
stage, the stack's or the instance's? - answered by shape rather than by enumeration:
`<stage>/CONTRACT.md`, and anything ending `.template`. Both consumers ask it, so `dist export`
and `wikitool upstream merge` cannot disagree, and a machinery file added under a content stage
tomorrow is recognised by both without either being edited. The deeper point is not the
deduplication: a list has to be maintained by whoever remembers it exists, and the failure mode
when nobody does is silence, because a path the list has never heard of simply looks like
content.
## Why a `.template`, not just an absent file
The mechanism for instance-owned content is a `.template` file the distribution ships instead
of the real one - `USER.md.template`, `SOUL.md.template`, `kb/CONVENTIONS.md.template`,
`ENVIRONMENT.md.template`. An alternative would have been to ship nothing at all and let a
brand-new instance start from a blank page. The template exists because a blank page doesn't
tell [instructions/setup-instance.md](../instructions/setup-instance.md) what shape the answer
should take, and it gives nothing for a validator to check afterward.
A template carries a placeholder value - a sentinel - in the fields that need a real answer.
Setup interviews the operator and replaces the sentinel with what they actually said. That
gives `doctor` a mechanical way to tell "personalized" from "not yet": a file that still
contains the sentinel hasn't been through setup, regardless of whether the file exists. That's
also why `ENVIRONMENT.md` only warrants a WARN rather than a FAIL when absent - see
[AGENTS.md § Environment](../AGENTS.md#environment) - while a missing or unfilled
`USER.md`/`SOUL.md`/`kb/CONVENTIONS.md` is a harder failure: `ENVIRONMENT.md` describes one
checkout among possibly several and is gitignored for that reason, so its absence is a normal
state rather than a sign setup was skipped.
## The consequence in practice
An upgrade sorts every shipped path into three categories, not two - and the third one only
becomes visible once an upgrade is a command rather than a hand-run copy:
- **Verbatim files** - `AGENTS.md`, `kb/CONTRACT.md`, the per-stage contracts, everything under
`tools/`, `types/` and `instructions/` - are the release's to replace.
- **`.template`-sourced files** - `USER.md`, `SOUL.md`, `kb/CONVENTIONS.md`, each
`kb/<name>/COLLECTION.md`, `ENVIRONMENT.md`, the `root: kb` type-specs - are never written by
an upgrade at all. The distribution ships only the `.template` beside them, so the filled file
is out of reach by construction rather than by a rule someone has to remember.
- **Seeded-once files** - `.wikitool-kb.json`, `CHANGES.md`, `kb/log.md`, `raw/*/.gitkeep` - are
written into a *new* instance by `dist export` and belong to the instance from then on. They
are the awkward category: they sit in the release stamp's file list like any other shipped
file, so an upgrade has to exclude them deliberately (`chemenu.ownership.is_export_stub` and
`is_upgrade_preserved`). An upgrade that re-seeded them would reset the record of which
migrations ran, or erase the changelog the instance wrote for itself.
The first category carries a caveat that the word "verbatim" hides. It says who *decides* the
content, not that overwriting is always safe: an instance can still have edited a verbatim file
- a patched `tools/`, a locally adjusted instruction - and an upgrade assuming otherwise would
destroy that silently. Avoiding that assumption is the whole reason `dist export` records a
sha256 per shipped file in `.wikitool-release.json`. `wikitool dist upgrade` compares every
candidate path against the digest recorded when it was installed, overwrites only what still
matches, and refuses rather than overwrite what does not.
So the practical rule is narrower than "overwrite the verbatim files, leave the rest alone":
overwrite the verbatim files *this instance has not touched*, never write the other two
categories, and make a locally changed file a decision someone takes deliberately instead of
one an upgrade takes for them. The template-sourced files were filled in once, by a person, for
a reason, and nothing about a newer release of the stack's mechanics gives it standing to
override that.
+64
View File
@@ -0,0 +1,64 @@
# Why the pipeline has four stages
Chemenu could, in principle, be one directory: drop a file in, ask a question, get an answer
computed fresh each time. It isn't built that way. The pipeline in
[AGENTS.md](../AGENTS.md#routing) - `raw/` -> `[types/ + tools/]` -> `kb/` -> `reports/`, with
`work/` alongside rather than inside it - separates *material* from *meaning* from
*byproduct*, and each seam exists because collapsing it costs something specific.
## Why raw material stays untouched
[raw/CONTRACT.md](../raw/CONTRACT.md) keeps a source exactly as it arrived. The reasoning is
simple once stated: the moment someone "cleans up" or reformats a source on the way in, the
thing later claims get checked against is no longer the thing that was actually said. An
immutable `raw/` means a citation always resolves to the original, not to somebody's tidied
memory of it. It also draws a trust boundary in one place instead of scattering it - everything
past `raw/` can be treated as reviewed, because nothing upstream of it silently already was.
## Why extraction happens once, through a schema
[types/type-spec.md](../types/type-spec.md) is what stands between a raw file and a `kb/` page:
a type-spec defines what a conforming instance of a page looks like, and the compiler
(`tools/wikitool`) applies it. The alternative - every query re-reading and re-interpreting the
source on demand - would mean paying the cost of understanding the material every single time,
and getting a slightly different answer each time depending on how the question was phrased.
Extracting once, against a fixed schema, turns "re-read and re-guess" into "look up what was
already compiled." That is the "never re-derive, always compile" principle from
[AGENTS.md](../AGENTS.md): understanding a source is expensive and worth doing exactly once,
after which it becomes a cheap, stable lookup.
## Why a `kb/` page has to stand on its own
[kb/CONTRACT.md](../kb/CONTRACT.md) sets the bar for the compiled layer: a page should answer a
future question without sending the reader back to the source it came from. That's the payoff
of compiling in the first place - if every answer still bottomed out in "go re-read the raw
file," the `kb/` layer would just be a pointer with extra steps, and the cost of extraction
would have bought nothing. A page that stands alone is what makes the corpus fast and
consistent to query: the work of understanding is already sitting there, done.
## Why `reports/` doesn't need to be maintained
[reports/CONTRACT.md](../reports/CONTRACT.md) treats most of what lands in `reports/` -
lint output, telemetry traces - as disposable. The structural content of a lint report can be
recomputed from the tree at any commit, so keeping an old copy around would just be a second
version of something the tool can already answer on demand, and a second copy is exactly the
kind of thing that quietly goes stale. Treating it as derived output rather than a fourth thing
to maintain means there is nothing there to fall out of sync - regenerating it is cheaper than
reconciling it. The one part that genuinely can't be recomputed - the judgment a pass produced -
is carried out into `kb/` or `kb/log.md` before the report itself is discarded, which is the
distinction between what's recomputable and what isn't.
## Where `work/` fits
[work/CONTRACT.md](../work/CONTRACT.md) describes a workshop, not a fifth pipeline stage: a
place for the notes, extracts and open decisions of a task that spans more than one session, on
its way toward becoming a `kb/` page. It sits beside the raw -> kb -> reports flow rather than
inside it - closer in spirit to a desk than to a conveyor belt.
## The shape this produces
Four stages, each answering a different question: `raw/` - what was actually said; `types/` +
`tools/` - how to turn that into structured understanding; `kb/` - what is now known;
`reports/` - what a pass over the corpus noticed in passing. Keeping them separate is what lets
each one be trusted for what it is, instead of every layer having to double as all four at
once.
+119
View File
@@ -0,0 +1,119 @@
# Why the stack version splits compatibility from migration
A stack version number looks like it answers one question. It actually answers two, and the two
are independent of each other.
## Two questions, not one
The first question is whether the new version is a drop-in replacement for the old one - whether
an existing instance can install it, and can also go back, without anyone doing hand-work. That
is what a version number *is*: a promise. The second question is whether the existing corpus in
`kb/` needs to change shape to keep working under the new version. These sound like the same
question, because most of the time a change that breaks compatibility also happens to touch
content, and most of the time a change that leaves content untouched also happens to be
compatible. The correlation is real; it just is not a law. `instructions/dev/version-parts.md`
carries the actual test for telling them apart and the steps that follow from it - this page is
about why the split exists at all.
## Why "kb/ untouched" is not proof of anything
The tempting shortcut is: if no page in `kb/` had to change, the bump can't be that serious. This
is exactly backwards for a class of changes that live entirely outside the corpus - a renamed
release artefact, a Python import path, an environment variable, the URL an instance's own
updater points at. None of those touch a single page. All of them can strand an existing
instance just as thoroughly as a rewritten type-spec would. The corpus is the part of the stack
that looks at itself; the compatibility question is about everything an instance depends on to
keep functioning, most of which the corpus never sees.
## Reading compatibility off the leftmost non-zero component
Semantic versioning gives every component a job, but only one of them is where an existing
instance's tooling actually looks to decide "is this safe." On a `2.x` stack that is MAJOR; on a
still-pre-1.0 `0.x` stack, by the same convention, it's MINOR - the leftmost slot that isn't
pinned to zero is the one an automated updater treats as the compatibility boundary. Bump
anything to its left, or bump that slot itself, and the promise changes. Everything to the right
of it can move as freely as the project likes without touching that promise. This is why the
question "is it boundary-crossing" always resolves to one specific digit, not to a feeling about
how big the change is.
## Downgrade is half the promise
It's natural to test compatibility by only asking "does the upgrade work." The other half -
"can an instance that upgraded put the old version back and land where it started" - carries
equal weight, and it's the half that's easy to forget because forward motion is what everyone is
testing for anyway. A state file the old version can no longer parse, a generated index in a new
shape, a stamp file that got renamed: none of these have to break the upgrade to break the
downgrade. An instance that can go forward but not back has already lost the property a
compatible version number is supposed to guarantee.
## A promise made to a machine, not only to a person
A human reading a changelog can absorb "this technically isn't compatible but it's fine, just
update those two things by hand." An instance's own update mechanism cannot. It reads a version
number, decides whether to pull the new release, and has no channel for nuance - which is exactly
why the update path itself is one of the sharpest ways to cross the boundary invisibly: if the
new version moves where updates come from, the very channel that would have told an instance to
adjust is the channel that just broke. The version number isn't documentation aimed at a reader;
it's an input consumed by code that has no other way to ask.
## The 2.0.0 story
This isn't hypothetical for this stack. The rebranding that produced Chemenu renamed the repo,
the release artefact, and the Python package - and left every page in `kb/` untouched. The first
instinct was a MINOR bump, on the reasoning that nothing in the corpus needed migrating. That
reasoning was correct on its own terms and answered the wrong question. Three things broke
underneath it: every existing instance's `update_url` pointed at a repo path that no longer
existed and, because it's a machine-written file, couldn't be hand-repaired; the release artefact
name changed, breaking every download script and pin against it; and the import name changed,
breaking anything importing the package from outside the shipped tree. The corpus had nothing to
say about any of this, because none of it lived in the corpus.
What caught the mistake was a person looking at the diff and asking whether it really was a
drop-in replacement, not a validator. No check in `docs verify` or anywhere else confirms that a
version part was chosen correctly - it only confirms that a boundary-crossing bump documents
what it breaks. The 2.0.0 entry in `CHANGES.md` carries the corrected reasoning in full, and the
version bump that shipped it was `--major --no-migration`: boundary-crossing and untouched
corpus, at the same time, which is precisely the combination the two-question split exists to
make visible.
## Why a number is only spent by a release
Everything above is about what a version number *promises*. A separate question turned out to
matter just as much in practice: how many numbers get handed out along the way to making one
release. For a while the answer was "one per bump," and that turned out to be the wrong grain
entirely.
Two mechanisms decide when a number gets minted, and they answer different questions. CI's
version gate asks a *commit*-level one: has this tree changed since the last push, and if so
has `VERSION` moved with it. A release asks something else entirely: is this a state worth
handing to someone, under a number they will pin against. Tying the second to the first - every
`VERSION` move firing the release workflow - answers the gate correctly and the release question
by accident, because it treats every bump as if it were about to ship when most bumps are steps
toward a release that has not happened yet.
The failure mode is not phantom numbers; every one of those releases was real, tagged and
downloadable. It is that "real" stopped meaning anything. On 2026-09-03 this repository cut four
releases in six hours - `4.3.0` through `4.3.3` - for one continuous arc of work, two of them for
prose changes alone. Someone tracking the feed saw four upgrades and had no way to tell which, if
any, was a moment worth stopping for. A release is a promise addressed to a consumer, and a
promise made four times an afternoon is not a smaller promise, it is a less legible one.
The fix is not to slow the gate down - it still wants `VERSION` to move every time, and it still
gets that. It is to stop treating every movement as a number worth publishing. Between two
releases the stack now carries one running candidate, escalating through `-beta.N` as bumps
accumulate, and only `version release` spends the number for real by fixing it and closing its
changelog entry. A number is proposed by a bump and spent by a release; conflating the two was
the actual defect, not the arithmetic of any single bump.
This is also why a candidate never gets to a distributed instance. The promise a released version
makes - "install this, and it is exactly what its number says" - has no equivalent for something
still being decided during a single dev checkout's session. `release.yml`'s only job with respect
to this is refusing to act on a suffixed `VERSION` at all: not because a beta is unsafe, but
because there is nothing yet to promise.
## Where the procedure lives
The drop-in test, the catalogue of changes that cross the boundary with no page touched, and the
steps for a boundary-crossing bump - the `--breaking` line, the migration document or
`--no-migration` reason, talking to the user before bumping - are one procedure, kept at one
place: [instructions/dev/version-parts.md](../instructions/dev/version-parts.md).
+57
View File
@@ -0,0 +1,57 @@
# Why gates are code
Chemenu has three hard limits - the Mass-Update Gate, the Publish-Remote Gate, and the
Iteration Budget Gate - and all three live inside `tools/wikitool`, not in a paragraph of
instructions an agent reads and follows. The rules themselves, and what to do when one trips,
are in [AGENTS.md § Gates](../AGENTS.md#gates) and [instructions/gates.md](../instructions/gates.md).
This page is only about the design choice underneath them: why code, and why these three
mechanisms in particular.
## A suggestion an agent can talk itself past
An instruction like "don't publish too much at once" or "don't loop forever" lives in the same
place as every other piece of guidance a session is holding - alongside the task, the user's
last message, and whatever context made the moment feel urgent. Under pressure, or with a
plausible-sounding reason ("this batch is different, it's mechanical"), that guidance can be
reasoned around without anyone deciding to break a rule. Nothing enforces it; it just competes
for attention with everything else in the context window, and sometimes loses.
A check compiled into the tool doesn't have that problem, because it isn't part of the
conversation at all. It runs before the command dispatches, regardless of how convincing the
case for skipping it seemed a moment earlier. The difference isn't that code is smarter than a
well-written instruction - it's that code doesn't get talked into anything.
## Why three different mechanisms, not one
The three gates ask three different questions, and each one's shape follows from what kind of
question it is.
The Mass-Update Gate asks *is this change too large to publish unreviewed* - a judgment that
varies changeset by changeset, so it clears with a `--confirm` token tied to the specific
output the user just read. Approval is scoped to that one publish.
The Publish-Remote Gate asks something underneath that: *is this even the right repository*.
That's not a per-push judgment, it's a standing property of the checkout - true or false for
every publish that checkout will ever attempt, not just this one. A confirm token would let an
agent clear it once and then treat the answer as settled, which is exactly backwards for a
question whose answer shouldn't move at all mid-session. The only way past it is the user
editing `.wikitool-remotes.json` directly, outside the gate's own flow.
The Iteration Budget Gate asks a third kind of question - not "is this instance correct" but
"has this session stopped making progress." That's read from the shape of the call history
itself (call count, repeated identical calls), not from anything about the content of any one
call.
## Numbers that come from measurement, not intuition
The iteration ceiling didn't start where it sits now. It used to run 15-25, borrowed from a
general rule of thumb, until four real ingest runs measured 24, 26, 29 and 30 calls apiece -
every one of them an ordinary workflow doing nothing wrong, and every one of them at or past
where the old ceiling would have refused it. A limit that the normal case keeps tripping stops
functioning as a limit; it becomes background noise a session learns to route `--override-budget`
around as a matter of course, and the whole point of a hard-coded check is that it isn't supposed
to feel routine.
That's the deeper reason these numbers live in a tool rather than in prose: prose is read once
and remembered loosely, but a threshold enforced every call is tested by every call, and a
threshold that fails its own test gets noticed and re-measured rather than quietly ignored.
+22 -2
View File
@@ -65,11 +65,31 @@ catalogue of authoring profiles an instance may adopt into its own `kb/CONVENTIO
## `instructions/migrations/` ## `instructions/migrations/`
A content migration is a Manual instruction with two extra frontmatter fields A content migration is a Manual instruction with three extra frontmatter fields
(`types/instruction.schema.yaml`): `migrates_to:`, the stack version whose content shape it (`types/instruction.schema.yaml`): `migrates_to:`, the stack version whose content shape it
produces, and `migration_kind:` (`mechanical` | `assisted`). It lives at produces; `migration_kind:` (`mechanical` | `assisted`); and `obligation:`
(`required` | `offered`, default `required`). It lives at
`instructions/migrations/<version>-<slug>.md`. `instructions/migrations/<version>-<slug>.md`.
`migration_kind:` and `obligation:` are **two axes, not one**. The first says how the work is
carried out, the second whether it has to happen at all:
| `obligation:` | Means | `migrate status` |
|---|---|---|
| `required` | The content must reach the new shape or it no longer fits the machinery | Counted as outstanding; `migrate done` advances `kb_version` through it, in chain order |
| `offered` | A file the instance owns still works as it is, and the stack proposes a better default | Listed separately, never blocks, no ordering rule. `migrate done` records it in the applied ledger and leaves `kb_version` where it is |
Keeping them apart is what stops `migrate status` crying wolf: an instance nagged about an
improvement it declined stops reading the nag that means its content no longer fits its
machinery. And because taking an offer deliberately does not move the version, the **applied
ledger** - not `kb_version` - is what makes an offer stop being offered; without that record
there is no way to tell a taken offer from an ignored one.
An `offered` migration is what makes an instance-owned file upgradeable at all. `dist export`
records a sha256 per shipped file in `.wikitool-release.json`, so `migrate status` can say which
of those files the instance edited and which it merely received - the first have to be
reconciled by a person, the second can simply be copied over.
The tier fits exactly: a migration must never be picked up implicitly - it rewrites the corpus - The tier fits exactly: a migration must never be picked up implicitly - it rewrites the corpus -
and it is referenced by nothing, because `tools/wikitool migrate status` finds it by reading the and it is referenced by nothing, because `tools/wikitool migrate status` finds it by reading the
directory and comparing `migrates_to:` against this instance's `kb_version`. That is also why directory and comparing `migrates_to:` against this instance's `kb_version`. That is also why
+60 -16
View File
@@ -6,10 +6,24 @@ description: Which Claude model and effort level to run a Claude Code session, a
# Pick the Claude model and effort level for the task at hand # Pick the Claude model and effort level for the task at hand
Scale the model and effort to how much judgment the task actually needs. Running everything at Scale the model and effort to **what catches a mistake in this part of the work** - not to how
the most capable model and highest effort is safe but wasteful: the gates in [gates.md](gates.md) important the task feels, and not to its name. Running everything at the most capable model and
are enforced in code, not by model judgment, so a weaker model cannot bypass them - it can only highest effort is safe but wasteful: the gates in [gates.md](gates.md) are enforced in code, not
do a worse job of the calls the gates don't cover. by model judgment, so a weaker model cannot bypass them - it can only do a worse job of the calls
the gates don't cover.
That last clause is the whole rule, turned into a test. Where a check lives in code - `pytest`,
`docs verify`, `instructions verify`, CI, the gates - a weaker model's mistake surfaces and costs
one more round. Where the only enforcement is a session reading prose, the same mistake does not
surface at all: it ships, and it stays until someone happens to notice. The two are not the same
risk, and they should not get the same model. This is the argument
[docs/why-gates-are-code.md](../docs/why-gates-are-code.md) makes about gates, applied to who is
holding the keyboard.
Both directions cost something, which is why the axis matters rather than a blanket answer:
over-provisioning is a standing cost paid every session, while under-provisioning in an unchecked
phase is a silent error with a long tail. A corrective session, its bump, its CI runs and its
release together cost more compute than the model difference they were saving.
Claude-Code-only, and imported by CLAUDE.md rather than linked from AGENTS.md: the model names, Claude-Code-only, and imported by CLAUDE.md rather than linked from AGENTS.md: the model names,
the `/code-review` effort dial and the `Agent` tool's `model:` override have no equivalent in the the `/code-review` effort dial and the `Agent` tool's `model:` override have no equivalent in the
@@ -28,17 +42,41 @@ to *make*, not a setting to apply.
## Steps ## Steps
1. **Recommend the session's model and effort by the skill in use**, when asked or when the 1. **Recommend the session's model and effort by what catches a mistake in the phase it is in**,
mismatch is worth one sentence. Say it once and continue working either way - a session that when asked or when the mismatch is worth one sentence. Say it once and continue working either
argues about its own model instead of doing the task has already cost more than the model way - a session that argues about its own model instead of doing the task has already cost
difference: more than the model difference:
| Skill / task | Model | Effort | | Phase / task | What catches a mistake here | Model | Effort |
|---|---|---| |---|---|---|---|
| `wiki-status`, simple `wiki-query` lookups | Sonnet | default | | `wiki-status`, simple `wiki-query` lookups | the answer is re-checkable against the corpus | Sonnet | default |
| `wiki-lint` | Sonnet | default | | `wiki-lint` | `lint` itself is the check | Sonnet | default |
| `wiki-ingest`, `wiki-manage`, judgment-heavy `wiki-query` | Sonnet | high | | `wiki-ingest`, `wiki-manage`, judgment-heavy `wiki-query` | `lint` and `docs verify`, partly - the judgment about a claim is not covered | Sonnet | high |
| Stack development: `tools/`, `types/`, `instructions/` as code | Opus | high | | Stack dev: design, the version part, a boundary-crossing judgment | nothing - `docs verify` checks that a crossing documents itself, never that the part was right | Opus | high |
| Stack dev: code, tests, mechanical doc sync (command tables, contract rows) | `pytest`, `docs verify`, `instructions verify`, CI | Sonnet | high |
| Stack dev: closing an issue, `docs/` staleness, changelog prose | nothing, by construction - see below | Opus | high |
**Stack development is not one row**, which is the point of splitting it. The middle phase is
where the tokens are and where the checks are, so it is the phase worth running cheaper. The
two around it have no mechanical guard at all - a `docs/` page carries no normative sentence,
so there is nothing for `docs verify` to check ([AGENTS.md](../AGENTS.md) § File naming), and
the same holds for whatever tracker an instance keeps its open work in, which `wikitool`
deliberately knows nothing about. Those two phases are short - minutes, not hours - so keeping
them on the stronger model is cheap, and it protects the only work in the session that fails
silently.
**Effort is the cheaper lever than the model.** Reach for it first: `medium` deliberately does
not appear in this table for stack work, because multi-file consistency is exactly what a
reduced effort level gives up. Sonnet at `high` is the floor for anything touching more than
one file or a contract; `default` is for a single-file mechanical edit with a test behind it.
**A session cannot switch its own model**, so these rows only become real if someone offers the
switch at the moment the phase changes - once, without arguing about it, and never as a reason
to stop work that is already underway.
<!-- dist:strip-start -->
In this repo those moments are named: the `stack-dev` skill breaks for them at its steps 3
(design settled, work turns mechanical) and 6 (publish done, the unchecked tail begins).
<!-- dist:strip-end -->
2. **Pick a spawned subagent's model by what it does**, via the `Agent` tool's `model:` 2. **Pick a spawned subagent's model by what it does**, via the `Agent` tool's `model:`
parameter - the values are `haiku`, `sonnet`, `opus`, `fable`: parameter - the values are `haiku`, `sonnet`, `opus`, `fable`:
@@ -66,8 +104,14 @@ to *make*, not a setting to apply.
mechanical one - `wikitool` carries the mechanical part regardless of which model is mechanical one - `wikitool` carries the mechanical part regardless of which model is
supervising it. supervising it.
- **Unsure which row applies?** Default to Sonnet at high effort, not the most capable model at - **Unsure which row applies?** Default to Sonnet at high effort, not the most capable model at
the highest effort. Under-provisioning costs one worse answer in one session; reflexively the highest effort. Under-provisioning *where a check exists* costs one worse answer in one
over-provisioning is a standing cost paid every session. session; reflexively over-provisioning is a standing cost paid every session.
- **Unsure whether the phase is checked?** Treat it as unchecked. The asymmetry is not symmetric:
a needless Opus phase costs money once, an unchecked Sonnet phase can ship something nobody
looks at again.
- **Mid-session and the phase changed, but nobody switched?** Do the work anyway - never block a
publish or an issue close on a model the session cannot change itself. Say which phase ran on
which model in the handover, so the gap is visible rather than silent.
## Scope ## Scope
+94
View File
@@ -0,0 +1,94 @@
---
type: types/instruction.md
name: corpus-policy
description: What "curated enough" means for kb/ when it is demo and testbed at once, the measurable floors that define it, and what a reactive fix to the corpus may and may not do.
---
# Keep kb/ curated enough to develop against, without a second corpus
This instance runs one `kb/` for two purposes at once: a public demo and the testbed this stack
is developed against. There is deliberately no fixture corpus, no `--with-demo` export, and no
second repository - see Gitea #28. The corpus's size and shape are set by what targeted
development needs, not by a synthetic fixture size or a demo aesthetic.
## When to run
- Before judging whether the corpus can exercise a change under development - ranking, index
scaling, orphan detection, a new label, a new type-spec.
- Before a reactive fix touches `kb/` content rather than the failing code - the floors below
are what decides whether the fix may proceed as-is.
- Picking up Gitea #28 or #30, or any issue that references this file.
## The floors
Each is mechanically checkable with an existing `wikitool` command; none needs new tool code.
A floor exists to keep some class of bug observable, not to describe an aesthetic target - so
when a session is about to make one of these numbers *worse*, that is the signal to stop and
think, not a number to defend for its own sake.
| Floor | Check | Why this number |
|---|---|---|
| Every page type has ≥1 page | `wikitool search --field type=types/<t>.md` | A type with zero pages means its schema, its collection contract and its lint rules are unexercised |
| Every declared subtype has ≥1 page | `wikitool search --field <x>_type=<v>` | Same reasoning, one level down - `entity_type`, `concept_type`, `source_type` |
| ≥5 pages corpus-wide with ≥3 `sources:` entries | one-off script, see below | Provenance fan-in - multiple sources backing one claim - is a real case only a handful of pages exercise; fewer than 5 and a provenance-index bug can hide |
| Orphan pages (no inbound link) between 1 and 10 | `wikitool lint` | Zero orphans makes orphan detection itself unobservable; more than 10 means the corpus stopped being curated |
| Average outbound wikilinks per page ≥4 | one-off script, see below | Below this, ranking and graph-traversal work has too little structure to exercise |
A floor is a lower bound only. There is no upper bound on page count or on any of these numbers
except the orphan ceiling above - a corpus that outgrows these floors through real ingests is
not a problem this file cares about.
**Measured 2026-09-03** (see Gitea #28): 181 pages, 14/14 types and subtypes covered, 12 pages
with ≥3 sources, 3 orphans, 6.2 average outbound links. All floors held without any manufactured
content - the corpus was already big enough when the question was asked.
A type or subtype sitting at exactly the floor - one page - shows no set-level bugs, only that
the type is *reachable*. That is a soft target for the next `wiki-ingest` that happens to
produce a matching page, never a reason to write one: filing an unsourced page to clear a floor
is exactly what AGENTS.md invariant 3 forbids, floor or no floor. The same holds for an
authorised link label with zero live uses (`wikitool xref` reports these) - fill it when a real
edge calls for it, never manufacture one to exercise the label.
To check the two floors without a dedicated command, walk `kb/**/*.md` (excluding
`INDEX.md`/`COLLECTION.md`/`CONTRACT.md`/`CONVENTIONS.md`), parse frontmatter, and: count pages
whose `related:` array (resolved against page titles) has ≥3 entries for outbound density; count
`sources:` array length ≥3 for the provenance floor. `wikitool search` and `wikitool lint`
cover everything else in the table.
## What a reactive fix may do to kb/ content
Three tiers, by how much of the corpus a change touches:
1. **Pointwise - always allowed.** Creating, updating, renaming or deleting a single page
through the normal tools (`new`, `touch`, the page-lifecycle procedure), below the
Mass-Update Gate's threshold. This is ordinary work and needs no special permission.
2. **Corpus-wide - planned only, never reactive.** A migration, a vocabulary sweep, a bulk
`touch` across many pages. This needs its own issue and, per `work/CONTRACT.md`, a `work/`
run - never a same-session reaction to whatever the session was originally doing. If a
session hits the Mass-Update Gate (exit 42, see `instructions/gates.md`) while working on
something else, it does not fetch the `--confirm` token to push through: it stops, opens an
issue for the corpus-wide change, and finishes the original task without it.
3. **Reactive - never allowed.** Deleting or reshaping a page to make a failing test pass;
restructuring corpus content to route around a tool bug (AGENTS.md invariant 7); using
`kb/` as a scratch surface for a tool experiment. If a stack change under development needs a
corpus shape that does not exist, build it as a pytest fixture (see the next section) -
never manufacture it in `kb/`.
## Relationship to the test fixtures
`tools/chemenu/tests/conftest.py`'s `kb_dir`/`raw_dir` fixtures and `test_pipeline_l0.py` cover
the **small, isolated** case: a handful of pages, built fresh per test, hermetic. `kb/` covers
the **large, connected** case: 181+ pages, grown link density, real provenance history that no
per-test fixture reconstructs economically. The cut: if a `tmp_path` tree can reproduce what the
test needs, it belongs in a fixture; if the test needs density or scale that only a grown corpus
has, it belongs against `kb/`. Neither absorbs the other's job - see
[testing-conventions.md](testing-conventions.md).
## Decision points
- **A floor would be violated by an in-progress change - is that a blocker?** Only for the
orphan ceiling and the type/subtype floors, since those two can go to zero. The density and
provenance floors move gradually with ordinary ingests and are not gating on any single
session.
- **Corpus is "too small" for a feature under development?** That is not this file's problem to
solve by adding pages - see tier 3 above. Either the feature waits for a real ingest to supply
the shape, or it gets a pytest fixture.
+228 -26
View File
@@ -1,7 +1,7 @@
--- ---
type: types/instruction.md type: types/instruction.md
name: issue-tracking name: issue-tracking
description: Where open work on this stack is tracked, and what the prio/ and size/ labels on a Gitea issue mean. description: Where open work on this stack is tracked, what the four mandatory area/kind/prio/size labels and the two status flags on a Gitea issue mean, and how to keep an issue body current across sessions.
--- ---
# Track open work as Gitea issues, not as prose in the repo # Track open work as Gitea issues, not as prose in the repo
@@ -26,8 +26,16 @@ issues at that URL, which is exactly why `dist export` excludes
the repo. the repo.
- A session's findings outgrow the change it was making - a gap in the tooling, - A session's findings outgrow the change it was making - a gap in the tooling,
an assumption nobody has checked, a decision that needs the user. an assumption nobody has checked, a decision that needs the user.
- Picking an issue up: before doing anything else, read the body as the current
spec, and re-label it if the ground has moved since.
- **While working on one:** the body is updated as the state moves, not at the
end (step 2). A session that is interrupted leaves the body as its handover.
- Prioritising: deciding what to pick up next, or re-labelling after the ground - Prioritising: deciding what to pick up next, or re-labelling after the ground
moved. moved.
- Closing one: the body is rewritten to its final state first, and only then
closed (step 7).
- A rename or move ships: sweep the open issues for text that assumed the old
name or path (§ Renames and other decay in the tracker).
## Steps ## Steps
@@ -36,38 +44,226 @@ issues at that URL, which is exactly why `dist export` excludes
specific files or commands involved. An issue that only makes sense to specific files or commands involved. An issue that only makes sense to
whoever wrote it is a note, and notes were the problem. whoever wrote it is a note, and notes were the problem.
2. **Give it exactly two labels: one `prio/`, one `size/`.** Both, always - **Destructive steps carry the invariant they must not violate.** A body
a priority without a cost is half a decision. Neither is a promise about that prescribes a mechanism gets built as prescribed - including its
*when*; together they answer "what should I pick up in the time I have". bugs. Where a step deletes, overwrites, resets or moves, name the
property that must still hold afterwards, not only the command that gets
there. "Remove the working directory, then `git checkout HEAD --
<stage>`" is a mechanism; "the content stages must afterwards match
`HEAD` exactly, without any untracked or ignored file being touched" is
the same instruction plus its test - a build instruction and an
acceptance criterion at once, so the defect surfaces while the test is
written rather than in review afterwards. #30's `upstream merge` body
wrote the mechanism and got exactly that bug: a working-directory removal
that took a stage's gitignored, unrecoverable data with it.
| Priority | Means | **An acceptance criterion states a checkable property, not an activity.**
"Implement X" is done when someone says so; "after `upstream merge`,
`reports/` still holds every file it held before" is done when it is
true. This is not a ban on imperative steps - a numbered procedure can
still produce a correct control flow, and that is its merit - it binds
the destructive steps, and every box in the criteria list.
2. **The body is the working state, not a historical first post - keep it
current as you go.** It is this stack's plan file: the same thing a harness's
own plan document is, and it is maintained the same way. Not written once,
not brought up to date at the end, but **updated whenever something in it
stops being true** - a decision made, a criterion met, an approach ruled out,
a new constraint found.
The test is an abort, not a milestone. A session can end at any moment - an
interrupt, a context limit, a crash, a human walking away - and whatever the
body says at that instant is the entire handover. So the standard is: **at
every point, a fresh session must be able to open the body and pick the work
up from there**, without a human re-explaining it and without reading back
through the comments. If the body would mislead someone who read it right
now, it is already out of date, whether or not the work is finished.
That means updating *during* the work, not only at its end:
- a decision gets made → the decision and its reasoning replace the question
- an acceptance criterion is done → tick it, in the same session that did it
- something turns out differently than the issue assumed → the assumption is
corrected where it stands, not contradicted three paragraphs later
- work is deferred or dropped → say so, with the reason, where the criterion is
**Rewrite, never append.** Do not add to a text that has become wrong: an
additively grown log forces every later reader to reconstruct the current
state by filtering the whole history, which is the exact cost the body exists
to remove. Comments carry the history (step 3); the body carries the state.
Body rewrites and comments are an LLM session's job. A human normally
touches only labels and metadata directly.
**Reading an issue, the body is the state and comments are history.** A
session picking an issue up reads the body as the spec; comments are read
for provenance - why something was decided, what was tried - never as
the current instruction. A recommendation in a comment can be older than
the body's decision and read just as convincingly: on #30 an earlier
comment recommended a smaller, `verify`-only command, while the body had
since settled on building the full `merge` command. A session trusting
the comment would have built the wrong thing, with a plausible
justification out of this repo's own tracker.
**A body that is demonstrably wrong is corrected first, not worked
around.** "Body beats comment" is a rule of precedence, not a licence to
execute a stale spec. Where a comment or the tree proves a claim in the
body false, the body is rewritten before the work starts - the rewrite
above is the fix; leaning on the comments as the "real" state is not.
#10 is the case: its body claimed coverage had never been measured while
three comments carried a percentage, a statement count and a CI run
number.
**Where two comments contradict each other, evidence decides, not
recency.** On #10, one comment showed a retrieved artifact with zero
items on a finished run - the report was not actually retrievable - and
a later comment declared the same criterion met without re-checking. The
later comment is not the newer truth, only the unchecked one. Resolve it
into the body with the evidence named, or mark the point open.
3. **Comment a changelog, never a copy.** A body rewrite gets one short comment
naming only what changed against the previous state - what is new, what is
gone, what was corrected. Do not snapshot the old body into a comment: a full
copy per revision forces a human to diff two prose texts, which is not a
readable history, only another copy.
One comment per *session's worth* of change, not per edit. Step 2 asks the
body to be kept current continuously, and a comment for every tick would bury
the board in noise; the changelog line summarises what that session moved.
Trivial upkeep - a typo, a tightened sentence - needs no comment at all.
```
**Changelog:** Decision 2 tightened - `kind/` may now change over an
issue's life. Old acceptance criterion 3 dropped (covered by #42).
```
4. **Give it all four mandatory labels: one `area/`, one `kind/`, one `prio/`,
one `size/`.** All four, always. Machine maintenance by an LLM session is
what makes four axes affordable - the original objection to a third and
fourth axis was the upkeep cost for a single human maintainer, and that
objection no longer holds.
| `area/` | Means |
|---|---| |---|---|
| `prio/1` | Blocks or damages work in progress. Next. | | `area/kb` | The `kb/` schema, contract, confidence machinery, lint - the knowledge base as a system. |
| `prio/2` | Accrues interest. Planned. | | `area/distribution` | Shipping, upgrading and versioning an instance. |
| `prio/3` | Worth doing, waiting on a trigger. | | `area/corpus` | The content and scope of `kb/` in this instance, and the demo/testbed question. |
| `area/workflow` | Git, merging, branching, publish, PRs. |
| `area/process` | The development process itself, rather than the stack as an artefact. |
`prio/3` is not a graveyard. It means the issue's value is real but gated on There is deliberately no `area/tools`: tooling is filed under the domain it
something outside it - a decision, another issue, a second instance serves, not under where its code sits. The axis follows the stage split in
[AGENTS.md](../../AGENTS.md).
| `kind/` | Means |
|---|---|
| `kind/decision` | Waiting on an operator decision. |
| `kind/build` | Specified; waiting only on implementation time. |
| `kind/defect` | A finding: documentation and reality, or two documents, contradict each other. |
`kind/` is expected to change over an issue's life - `decision` becomes
`build` once the decision is made. That is session memory working, not a
labelling failure.
| `prio/` | Means |
|---|---|
| `prio/blocking` | Blocks or damages work in progress. Next. |
| `prio/planned` | Accrues interest. Planned. |
| `prio/waiting` | Worth doing, waiting on a trigger. |
`prio/waiting` is not a graveyard. It means the issue's value is real but
gated on something outside it - a decision, another issue, a second instance
existing. Name that trigger in the issue, or the label is a polite no. existing. Name that trigger in the issue, or the label is a polite no.
| Size | Means | | `size/` | Means |
|---|---| |---|---|
| `size/XS` | Minutes. Often just a decision or an observation to record. |
| `size/S` | One session, one publish, a clear cut. | | `size/S` | One session, one publish, a clear cut. |
| `size/M` | Several files; a contract or instruction change; its own test effort. | | `size/M` | Several files; a contract or instruction change; its own test effort. |
| `size/L` | Several sessions, or open design questions before the first commit. | | `size/L` | Several sessions, or open design questions before the first commit. |
Size is effort, not importance. A `prio/1 size/XS` is the best thing on the Size is effort, not importance. A `prio/blocking size/S` is the best thing
board; a `prio/3 size/L` is a thing to talk about before anyone starts. on the board; a `prio/waiting size/L` is a thing to talk about before anyone
starts.
3. **Re-label when the ground moves, and say why in a comment.** A trigger that 5. **Add a `status/` flag only when it applies.** Both are optional, because
fired turns `prio/3` into `prio/2`. A design question that got answered can each describes a temporary condition rather than a property every issue has.
drop a size. Silent re-labelling is how a board stops meaning anything.
4. **Close with what actually happened**, not with a commit hash alone: which | `status/` | Means |
proposals were implemented, which were deliberately left out and why, and |---|---|
what was verified. The issue is the only place that record survives - a | `status/blocked` | Waiting on another, still-open issue - not workable on its own, whatever its `prio/` says. Name the blocking issue in the body. |
changelog entry says what changed, not what was decided against. | `status/unconfirmed` | A reported suspicion, not yet checked against actual behaviour. Applies to any `kind/`, not just `kind/defect`. |
While `status/unconfirmed` is set, `size/` and `prio/` are provisional. Triage
ends it one of two ways: the flag comes off and `size`/`prio` are set for
real, or the issue is closed with the reason. An unverified suspicion does not
stay open indefinitely - the process-level analogue of AGENTS.md invariant 3.
6. **Re-label when the ground moves, and say why in a comment.** A trigger that
fired turns `prio/waiting` into `prio/planned`. A design question that got
answered can drop a size and move `kind/decision` to `kind/build`. Silent
re-labelling is how a board stops meaning anything.
7. **Closing is the last body update, not a comment.** If step 2 was followed
the body is already nearly there, and closing only settles what the final
run established. If it was not, closing is where the whole debt comes due -
and it comes due at the worst moment, because a closed body is the version
everyone reads afterwards and nobody revisits.
Either way the body reaches its final state *before* the issue closes:
proposals that were decided read as decided, a "to decide" section has become
the decision with its reasoning, acceptance criteria are ticked or struck with
a reason, and what was verified is named. Then close, with the one-line
changelog comment step 3 asks for.
Record what actually happened, not a commit hash alone: which proposals were
implemented, which were deliberately left out and why, and what was verified.
The issue is the only place that record survives - a changelog entry says
what changed, not what was decided against.
**A closing report in a comment does not satisfy this.** It reads as
complete to whoever writes it and leaves a body still phrased as open work:
unticked boxes, an undecided decision section, present tense about a defect
that no longer exists. #44 closed exactly that way, with a thorough comment
above a body that still asked for a decision that had already been made and
shipped. Nothing mechanical catches it (see below), which is why it is a step
rather than a habit.
## Renames and other decay in the tracker
A rename is not finished when the tree is green. Renaming a package, a path,
a command, a flag or the repository itself moves text that lives outside the
working tree, and the open issues are the largest such text. Nothing catches
them - `wikitool` does not know this tracker exists and must not learn (see
"What no tool checks" below) - so a pass over the open issues is part of the
rename, in the session that did it, not a follow-up someone remembers.
Distinguish a wayfinder from a piece of evidence: a path meant to point at
where something *is* gets pulled through; a path quoted for what was true at
a time is left standing and dated. Note per corrected body what was pulled
through and when, so the next pass can tell a checked body from one that
merely looks right. Closed issues are out of scope - they guide nobody.
Renames are not the only thing that ages an issue text. A page a body cites
can vanish from `kb/` (`wikitool search` against the cited titles is the
second pass), and an old body can carry private infrastructure detail into
what is now a public tracker - both found in the same issue, both worth the
same look.
## What no tool checks
`wikitool` does not know this tracker exists, and should not learn. It ships to
instances that have no issues at that URL, while this file and the workflow it
describes are pruned by `dist export` - a Gitea client inside the shipped tool
would be a dev-only dependency carried by every instance, to check a board none
of them have. The tracker is reachable only through the `gitea-mcp` server, in a
session, by an agent.
So there is no `docs verify` for the board. Nothing reports a closed issue whose
body still reads as open, a body that contradicts its own comments, or an issue
missing one of the four mandatory labels. Every one of those is caught by a
session following this file, or not at all - which is the argument for the
sequence in step 7 being explicit about the order (body first, then close),
rather than leaving it to be inferred from step 2.
## Decision points ## Decision points
@@ -75,8 +271,14 @@ issues at that URL, which is exactly why `dist export` excludes
what shipped. A finished change needs both: the entry, and the issue closed what shipped. A finished change needs both: the entry, and the issue closed
with the reasoning. with the reasoning.
- **Issue or `kb/` page?** An issue is about *this stack* and is ephemeral - it - **Issue or `kb/` page?** An issue is about *this stack* and is ephemeral - it
closes. A `kb/` page is compiled knowledge that stays true. Never put wiki closes, and it records a wish. A `kb/` page is verified knowledge that stays
content findings in an issue, and never file a work item as a page. true. Never put wiki content findings in an issue, and never file a work item
- **Two labels feel too coarse?** They are meant to. A third axis - kind, area, as a page.
status - is the point at which a taxonomy starts needing maintenance of its - **Rewrite the body, or add a comment?** Rewrite whenever a reader of the body
own, and this board has one maintainer. alone would otherwise be misled - a changed decision, a dropped criterion, a
new constraint. A comment carries the changelog line for that rewrite, and
nothing else that a future session needs in order to act. Closing an issue is
always a rewrite - see step 7.
- **An old issue carries only `prio/` and `size/`?** Complete it to all four
when you touch it, rather than in a sweep. The board reaches the new scheme
issue by issue, as each is picked up.
+73 -6
View File
@@ -43,17 +43,46 @@ stack development happens in the origin repo instead (see AGENTS.md's routing li
engineering, memory and deploy-time learning; consult before a design decision in those engineering, memory and deploy-time learning; consult before a design decision in those
areas. areas.
[issue-tracking.md](../issue-tracking.md) - open work lives in Gitea issues, one per work [issue-tracking.md](../issue-tracking.md) - open work lives in Gitea issues, one per work
package, labelled `prio/1..3` and `size/XS..L`. There is no `TODO.md`. Read it before package, labelled `area/`, `kind/`, `prio/` and `size/`. There is no `TODO.md`. **The body
filing something for later, or before deciding what to pick up next. of the issue you are working on is this session's plan file:** keep it current as the state
moves, so an interrupted session leaves a body the next one can resume from, *and* rewrite it
to its final state before closing. Both halves bind; the second is step 6 below. Read it
before filing something for later, before editing or closing an issue, or before deciding
what to pick up next.
[testing-conventions.md](../testing-conventions.md) - the suite runs against a deliberately [testing-conventions.md](../testing-conventions.md) - the suite runs against a deliberately
empty machine; what the autouse fixture already neutralizes, and what a test still has to empty machine; what the autouse fixture already neutralizes, and what a test still has to
establish itself. Read it before adding or changing a test. establish itself. Read it before adding or changing a test.
[version-parts.md](../version-parts.md) - which part a change bumps: the drop-in test, the [version-parts.md](../version-parts.md) - which part a change bumps: the drop-in test, the
catalogue of breaks that cross the compatibility boundary with `kb/` untouched, and what to catalogue of breaks that cross the compatibility boundary with `kb/` untouched, and what to
put in front of the user before a breaking bump. Read it before step 3. put in front of the user before a breaking bump. Read it before step 4.
[corpus-policy.md](../corpus-policy.md) - what "curated enough" means for the shared
demo/testbed `kb/`, the measurable floors that define it, and what a reactive fix may and may
not do to corpus content. Read it before judging whether the corpus can exercise a change, or
before any fix that would touch `kb/` content.
More instructions are added here incrementally as stack-development needs come up - this More instructions are added here incrementally as stack-development needs come up - this
list grows without needing this skill file to change shape. list grows without needing this skill file to change shape.
3. **Raise the version, if the change ships.** A change under `tools/`, `types/`, 3. **Settle the design before building - and break there for the model switch.** These are two
different kinds of work, and the split is not stylistic: design, the version part and any
boundary judgment have **no** mechanical guard, while the code and tests that follow have
`pytest`, `docs verify`, `instructions verify` and CI behind them.
So when the design is settled - the issue body says what will be built, the open questions are
answered - stop and say so, in one sentence:
> Der Plan steht, ab hier ist die Arbeit mechanisch und durch Tests/CI abgedeckt. Wenn du auf
> Opus bist, ist jetzt der Moment für `/model sonnet` bei Effort `high`.
**You cannot make this switch yourself** - the session's model is the user's `/model`, not a
setting an agent applies. Offer it once and keep working either way; a session that argues
about its own model has already cost more than the difference. If the design turns out not to
be settled after all - a boundary crossing surfaces, an assumption breaks - that is a reason to
offer the switch back up, not to decide it alone.
Effort is the cheaper lever than the model, and `high` is the floor for anything touching more
than one file or a contract. Full table and reasoning:
[claude-code-model-selection.md](../../claude-code-model-selection.md).
4. **Raise the version, if the change ships.** A change under `tools/`, `types/`,
`instructions/`, `AGENTS.md` or a `CONTRACT.md` reaches every future instance, so it needs a `instructions/`, `AGENTS.md` or a `CONTRACT.md` reaches every future instance, so it needs a
version and a changelog entry: version and a changelog entry:
@@ -90,13 +119,48 @@ stack development happens in the origin repo instead (see AGENTS.md's routing li
Prose-only changes (`README.md`, `INSTALL.md`, `EVALS.md`) and the workflows under `.gitea/` Prose-only changes (`README.md`, `INSTALL.md`, `EVALS.md`) and the workflows under `.gitea/`
do not need a bump - CI's version gate is scoped to what changes behaviour. do not need a bump - CI's version gate is scoped to what changes behaviour.
4. **Verify before publishing.** `tools/wikitool docs verify`, `tools/wikitool instructions 5. **Verify before publishing.** `tools/wikitool docs verify`, `tools/wikitool instructions
verify`, and the relevant `pytest` run in `tools/` - the same checks any stack change must verify`, and the relevant `pytest` run in `tools/` - the same checks any stack change must
pass, run explicitly rather than assumed. CI (`.gitea/workflows/ci.yml`) runs these plus a pass, run explicitly rather than assumed. CI (`.gitea/workflows/ci.yml`) runs these plus a
full `setup-instance.md` replay against a fresh `dist export`; a push to `main` that moves full `setup-instance.md` replay against a fresh `dist export`; a push to `main` that moves
`VERSION` additionally triggers a tagged release. **CI does the tagging** - a session never `VERSION` additionally triggers a tagged release. **CI does the tagging** - a session never
creates a tag, which is what keeps AGENTS.md invariant 5 intact. creates a tag, which is what keeps AGENTS.md invariant 5 intact.
6. **Close the issue with a body rewrite, not a comment.** The last act of a session that
finished a work package, and the one most easily skipped: by here the change is published and
the issue feels done. It is not. The body is the version everyone reads afterwards and nobody
revisits, so it is the one place the debt comes due at the worst moment.
**Break here too, in the other direction.** Everything left in the session - this rewrite,
whether a `docs/` page's reasoning went stale, the changelog prose - is the unchecked kind of
work again, the mirror of step 3. If the session dropped to Sonnet there, say so now:
> Ab hier greift kein maschineller Check mehr - Issue-Body, `docs/`-Veralterung und
> Changelog-Prosa prüft nichts. Wenn du zurück auf Opus willst, ist jetzt der Moment.
Then **do the work regardless of the answer.** Never block a close on a model switch: the
change is already published, and a session that stops here leaves exactly the state this step
exists to prevent. If it ran on the cheaper model, name that in the handover rather than
leaving it silent.
Rewrite it to its final state *first*, then close. The test is what a reader who opens the
closed issue tomorrow would conclude:
- every acceptance criterion ticked, or struck with the reason it was dropped
- proposals that were decided read as decided; a "to decide" section has become the decision
and its reasoning
- nothing left in the present tense about a defect that no longer exists
- what was verified is named - which checks ran, which CI run - not a commit hash alone
Then one short comment naming what changed against the previous state, and nothing else.
**A closing report in a comment does not satisfy this**, however thorough: it reads as
complete to whoever writes it and leaves a body still phrased as open work. Nothing
mechanical catches it - `wikitool` does not know this tracker exists and must not learn it,
since it ships to instances that have no board - so this step is the only enforcement there
is. #44 and #45 both closed exactly this way, the second an hour after the rule was written.
[issue-tracking.md](../issue-tracking.md) step 7 has the full shape.
## Decision points ## Decision points
- **Touches both stack code and wiki content in one session?** Apply this skill's rules to the - **Touches both stack code and wiki content in one session?** Apply this skill's rules to the
@@ -107,7 +171,10 @@ stack development happens in the origin repo instead (see AGENTS.md's routing li
user decides whether it is worth that: show them what breaks, what an instance has to do about user decides whether it is worth that: show them what breaks, what an instance has to do about
it, and the alternatives (avoid the break with a shim, defer and batch it with the next one, it, and the alternatives (avoid the break with a shim, defer and batch it with the next one,
or split it behind a deprecation window), then recommend one and wait for a go-ahead. or split it behind a deprecation window), then recommend one and wait for a go-ahead.
[version-parts.md](../version-parts.md) step 4 has the full shape. [version-parts.md](../version-parts.md) step 4 has the full shape. A surfacing boundary crossing
is also a reason to offer the model switch back up (step 3): the judgment it needs has no
mechanical guard, and `docs verify` only checks that a crossing documents itself, never that the
part was chosen correctly.
## Scope ## Scope
+49 -2
View File
@@ -40,6 +40,48 @@ resolved paths and `conventions`' parsed `kb/CONVENTIONS.md`. A test that *rewri
conventions file mid-test calls `conventions.reset_cache()` itself - the fixture answers for the conventions file mid-test calls `conventions.reset_cache()` itself - the fixture answers for the
boundary between tests, not for one inside a test. boundary between tests, not for one inside a test.
## Which tree a test writes into
The environment is one half of the isolation; `config.ROOT` is the other. With `CHEMENU_ROOT`
cleared, `ROOT` falls back to the checkout pytest is running from - deliberately, because most
tests want the shipped `types/`. It also means that any code path resolving a file through
`config.ROOT` or `config.KB_DIR` reaches **the real repository**, no matter which tree the
fixture built.
Both corpus fixtures therefore repoint it: `raw_dir` and `kb_dir` each set
`config.ROOT` to their `tmp_path` and re-declare the shipped `types/` through
`use_shipped_type_specs()`. `config`'s module `__getattr__` resolves the derived paths on
access, so repointing `ROOT` carries `KB_DIR`, `RAW_DIR` and the rest with it. A new fixture
that builds a tree does the same thing - that is the rule here, not a per-test judgment.
`kb_dir` did not, until Gitea #44. Two things came of that. A test calling
`kb_state.write_kb_state()` overwrote the real `.wikitool-kb.json`, which `git status` made
visible within the minute. Quieter and worse: `lint`'s collection lookup resolved a page
against `config.KB_DIR`, so every fixture page read back as "no collection" and the
`unauthorised_labels` check skipped every edge in silence - the finding had no working test at
all, and its green run read like an assurance.
Two guards came out of it, both in `conftest.py`:
| Guard | Default | Cost |
|---|---|---|
| `repository_tree_guard` (session) | on | two `git status --porcelain` calls per run |
| `per_test_tree_guard` | off, `CHEMENU_TREE_GUARD=each` turns it on | one `git status` per test |
The session guard compares the working tree before against after and fails the run if anything
moved, so it says nothing about uncommitted work a developer already had. It cannot name the
test that did it; `CHEMENU_TREE_GUARD=each` can, and is the way to bisect once it fires. Where
git is unavailable or the checkout is not a repository, both are silently inert.
Neither guard sees the second, quieter half: a check that silently *does nothing* under test
writes no file. That one is only caught by a test that asserts the finding actually fires -
which is why `test_unauthorised_label_is_judged_in_a_tree_that_is_not_the_configured_kb`
lints a tree `ROOT` deliberately points away from.
**A function that takes a directory resolves against that directory.** `run_lint(kb_dir)`
reading `config.KB_DIR` for one of its own lookups was the defect behind the quiet half, and
no fixture can fix that shape from the outside.
## When to run ## When to run
Whenever you add or change a test under `tools/chemenu/tests/`. Whenever you add or change a test under `tools/chemenu/tests/`.
@@ -80,7 +122,12 @@ Whenever you add or change a test under `tools/chemenu/tests/`.
`conftest.py` in the same change. A variable the tool reads and the fixture does not clear `conftest.py` in the same change. A variable the tool reads and the fixture does not clear
is the exact hole this whole file is about, reopened. is the exact hole this whole file is about, reopened.
5. **Verify against an empty machine before publishing**, not only in your own shell: 5. **Writing a fixture that builds a tree?** Repoint `config.ROOT` at it and call
`use_shipped_type_specs(monkeypatch)`, as `raw_dir` and `kb_dir` do - see
[Which tree a test writes into](#which-tree-a-test-writes-into). A fixture that returns a
path without repointing hands the code under test the real repository.
6. **Verify against an empty machine before publishing**, not only in your own shell:
```bash ```bash
cd tools && env -i PATH="$PATH" HOME="$(mktemp -d)" \ cd tools && env -i PATH="$PATH" HOME="$(mktemp -d)" \
@@ -92,7 +139,7 @@ Whenever you add or change a test under `tools/chemenu/tests/`.
`.venv/bin/python -m pytest -q`. A difference between the two is a leak, and the leaking `.venv/bin/python -m pytest -q`. A difference between the two is a leak, and the leaking
variable belongs in step 4's list. variable belongs in step 4's list.
6. **Check the coverage report when adding tests to close a gap**, rather than guessing which 7. **Check the coverage report when adding tests to close a gap**, rather than guessing which
lines were uncovered: lines were uncovered:
```bash ```bash
+59 -13
View File
@@ -9,7 +9,7 @@ Two questions decide a version bump, and they are **not the same question**:
1. **Is the new version a drop-in replacement for the old one?** This is what the version 1. **Is the new version a drop-in replacement for the old one?** This is what the version
number itself says. Compatibility is read off the **leftmost non-zero component** - on this number itself says. Compatibility is read off the **leftmost non-zero component** - on this
stack (`2.x`) that is MAJOR, on a `0.x` stack it is MINOR. A bump that changes it is called stack (`4.x`) that is MAJOR, on a `0.x` stack it is MINOR. A bump that changes it is called
*boundary-crossing* below, because that is the term `version bump` and `docs verify` use in *boundary-crossing* below, because that is the term `version bump` and `docs verify` use in
their own messages. their own messages.
2. **Must existing content be migrated?** This is a *consequence* a boundary crossing may or 2. **Must existing content be migrated?** This is a *consequence* a boundary crossing may or
@@ -20,6 +20,38 @@ Two questions decide a version bump, and they are **not the same question**:
Getting these backwards is how a genuinely breaking change ships as a MINOR. It happened once Getting these backwards is how a genuinely breaking change ships as a MINOR. It happened once
already (see the case study at the end), which is why this file exists. already (see the case study at the end), which is why this file exists.
## The candidate model
Between two releases the stack carries **one running candidate**, not a fresh version per
`bump`. Before that, every bump minted a number *and* a release: CI's version gate requires
`VERSION` to move on every stack-touching push, and `release.yml` fires on every `VERSION`
move, so releases were being cut at commit granularity. 2026-09-03 produced four of them in
six hours (`4.3.0` through `4.3.3`) for one arc of work - all four real, none of them a
meaningful unit to anyone downstream. A candidate closes that gap without touching the gate:
`VERSION` still moves on every bump, it just escalates the *same* number instead of handing out
a new one, and only `version release` turns it into something the release workflow acts on.
- **State lives in `VERSION` itself**, as an optional `-beta.N` suffix (`4.4.0-beta.3`). No
second state file: the last release is read back out of `CHANGES.md` (the newest entry with no
suffix), and the escalation stage is the difference between the candidate's base and that
release - derived, not stored.
- **`--major`/`--minor`/`--patch` is max-wins escalation**, not a step you can undo. A `--patch`
bump on a candidate already at MINOR only advances its bump count (`N`); nothing ever steps a
candidate back down. Declaring the part is still your judgment call, made the same way the
steps below describe - `escalate()` only ever raises it further.
- **A candidate is never released.** Pre-release is a dev-checkout state; `release.yml` only acts
on a suffix-free `VERSION`, so a distributed instance never sees a `-beta.` version at all, and
its parser never has to know the suffix exists.
- **One `CHANGES.md` entry per candidate**, not per bump. The first bump of a candidate opens it
(heading, date, author, and a machine-managed `<!-- wikitool:bumps -->` list seeded with that
bump's `--title`); every later bump of the *same* candidate updates that entry in place -
heading, date and the bumps list all move, but the entry's own prose (written below the
skeleton, by hand) is left alone. `version notes` therefore still prints exactly one entry per
release, whatever a candidate's history of bumps looked like.
- **`version bump` opens or continues a candidate; `version release` fixes one.** Only `release`
strips the suffix and turns the entry into a real, closed release - see its own row in
`tools/CONTRACT.md`. Nothing else does, and nothing auto-fixes a candidate on its own.
## When to run ## When to run
Before every `tools/wikitool version bump` - the `stack-dev` skill's step 3 sends you here. Before every `tools/wikitool version bump` - the `stack-dev` skill's step 3 sends you here.
@@ -63,9 +95,11 @@ the three-line test below is usually enough.
| Fix, no interface change | `--patch` | | Fix, no interface change | `--patch` |
| New capability, drop-in in both directions | `--minor` | | New capability, drop-in in both directions | `--minor` |
4. **Stop and talk to the user before a boundary-crossing bump.** It is expensive in a way the 4. **Stop and talk to the user before the bump that first escalates a candidate past the
other two parts are not: every existing instance pays for it, once, by hand. Put in front of boundary.** It is expensive in a way the other two parts are not: every existing instance pays
them, in this order: for it, once, by hand. That escalation happens exactly once per candidate - a later bump that
keeps the candidate at the same stage (another `--major` on one already there, say) does not
re-cross anything and needs no second conversation. Put in front of the user, in this order:
- **What breaks**, concretely - which file, which name, which call site. - **What breaks**, concretely - which file, which name, which call site.
- **What each existing instance must do**, as the steps they would actually run. - **What each existing instance must do**, as the steps they would actually run.
@@ -81,8 +115,9 @@ the three-line test below is usually enough.
Then wait for an explicit go-ahead. Do not bump across the boundary on your own initiative. Then wait for an explicit go-ahead. Do not bump across the boundary on your own initiative.
5. **Record the break in the bump itself.** A boundary-crossing bump requires 5. **Record the break in the escalation bump itself.** The bump that first crosses the boundary
`--breaking "<what breaks>"`, which writes a `**Breaking Change:**` line into the entry: requires `--breaking "<what breaks>"`, which writes a `**Breaking Change:**` line into the
entry:
```bash ```bash
tools/wikitool version bump --major \ tools/wikitool version bump --major \
@@ -91,22 +126,33 @@ the three-line test below is usually enough.
--no-migration "<why no page has to change>" # only if that is true --no-migration "<why no page has to change>" # only if that is true
``` ```
`--breaking` is refused on a bump that crosses nothing, and required on one that does; The line, once written, stays in the entry across every later bump of the same candidate -
`docs verify` checks the newest boundary-crossing entry still carries the line. Write it for a follow-up `--major` does not need to repeat `--breaking`, because the entry it would repeat
the operator of an instance that has not read this repository: what stops working, and what it into is the same one. `--breaking` is refused on a bump that crosses nothing, and required
they do about it. on the one that does. `docs verify` checks the newest boundary-crossing entry still carries
the line. Write it for the operator of an instance that has not read this repository: what
stops working, and what they do about it.
6. **Then answer the migration question separately.** Boundary-crossing and 6. **Then answer the migration question separately.** Boundary-crossing and
content-migrating are independent: content-migrating are independent:
- Content must change → write the migration document under `instructions/migrations/` per - Content must change → write the migration document under `instructions/migrations/` per
[migrate-corpus.md](../migrate-corpus.md). `bump` finds it by its `migrates_to:` field. [migrate-corpus.md](../migrate-corpus.md). The escalation bump finds it by the document's
`migrates_to:` field, matched against the candidate's **base** - a document targets the
release the candidate will become, never a `-beta.N` form of it.
- Content need not change → `--no-migration "<reason>"`, which records that in the entry. - Content need not change → `--no-migration "<reason>"`, which records that in the entry.
Both are also needed by `docs verify`, for the same reason: an instance that learns it must Both are also needed by `docs verify`, for the same reason: an instance that learns it must
migrate, with nothing telling it how, is a dead end. migrate, with nothing telling it how, is a dead end. Like `--breaking`, both persist across
later bumps of the same candidate without being repeated.
7. **Write the entry's body.** `bump` leaves it empty on purpose. A boundary-crossing entry 7. **Fix the candidate once it is ready to ship.** `version bump` only ever opens or escalates
one; nothing turns it into a release except `tools/wikitool version release`, which strips the
`-beta.N` suffix and closes the entry - see its row in `tools/CONTRACT.md`. That is also the
point to pass a summarising `--title` if the candidate collected several bump titles along the
way; without one, the heading simply keeps whichever bump last set it.
8. **Write the entry's body.** `bump` leaves it empty on purpose. A boundary-crossing entry
earns a paragraph that says *why this is breaking* - it is the one thing a future reader earns a paragraph that says *why this is breaking* - it is the one thing a future reader
cannot reconstruct from the diff, and it is what the next session in this position will read cannot reconstruct from the diff, and it is what the next session in this position will read
instead of guessing. instead of guessing.
+20
View File
@@ -103,6 +103,26 @@ The setup this gate exists for - a private instance that takes stack updates fro
upstream - is [private-instance.md](private-instance.md). Step 4 there arms it, deliberately upstream - is [private-instance.md](private-instance.md). Step 4 there arms it, deliberately
*before* the first `publish`: added afterwards it leaves open exactly the window it closes. *before* the first `publish`: added afterwards it leaves open exactly the window it closes.
### Mass-Update Gate blind spot: `upstream merge`
`upstream merge` (a private instance taking a stack update - see
[private-instance.md](private-instance.md)) can update or delete dozens of stack-owned paths in
one commit, and the Mass-Update Gate does not see any of it. The gate counts *working-tree*
changes before `publish` stages them; by the time `upstream merge` commits, the change is
already history, and the commit it made is not what a later `publish` would be staging - that
publish sees only whatever this session adds on top. A merge touching 200 files therefore goes
out ungated the moment it is pushed.
This is not a hole to patch by making `upstream merge` route through the gate: the gate's
question ("is this too much to publish?") does not apply to a change that only ever touches
stack-owned paths that are, by definition, not this instance's own content. The check that
actually matters here is `upstream merge`'s own postcheck - it re-verifies the merge commit
against `upstream verify`'s logic immediately after committing, and exits 1 with the offending
paths if anything landed outside a stack-owned one. **The merge commit is deliberately left in
place** rather than reverted: it exists, a human has to look at it, and a command that quietly
repaired its own mistake would hide the one event worth seeing. That postcheck is the safeguard
for this command, not the Mass-Update Gate.
## Iteration Budget Gate and loop-breaker ## Iteration Budget Gate and loop-breaker
Every `wikitool` call is counted per session. Calls are refused past **60 in a session**, or Every `wikitool` call is counted per session. Calls are refused past **60 in a session**, or
+1 -1
View File
@@ -68,7 +68,7 @@ stack's hardcoded behaviour until the conventions file existed.
|---|---| |---|---|
| `language:` | `de` | | `language:` | `de` |
| `sections:` | `Beziehungen` / `Siehe auch` / `Fußnoten` | | `sections:` | `Beziehungen` / `Siehe auch` / `Fußnoten` |
| Naming | Human-readable titles with spaces; singular for entities; `adr-NNN-` for decisions; `X vs Y` for comparisons | | Naming | Human-readable titles with spaces; singular for entities; a decision named like any other concept, no `adr-NNN-` prefix; `X vs Y` for comparisons |
| Tone | Wikipedia register, with a German buzzword and filler list | | Tone | Wikipedia register, with a German buzzword and filler list |
| Relationship labels | `hängt ab von` · `verwendet` · `implementiert` · `erweitert` · `ersetzt` · `steht in Konflikt mit` · `benötigt` · `erzeugt` · `konsumiert` · `besitzt` · `pflegt` · `läuft auf` · `verwandt mit` | | Relationship labels | `hängt ab von` · `verwendet` · `implementiert` · `erweitert` · `ersetzt` · `steht in Konflikt mit` · `benötigt` · `erzeugt` · `konsumiert` · `besitzt` · `pflegt` · `läuft auf` · `verwandt mit` |
| Confidence rubric | 0.5 base, +0.2 per supporting source (max +0.6), recency and source-quality bonuses; hedge with "möglicherweise"/"kann" below 0.6, "unsicher"/"unbestätigt" below 0.4 | | Confidence rubric | 0.5 base, +0.2 per supporting source (max +0.6), recency and source-quality bonuses; hedge with "möglicherweise"/"kann" below 0.6, "unsicher"/"unbestätigt" below 0.4 |
+215
View File
@@ -0,0 +1,215 @@
---
type: types/instruction.md
name: link-taxonomy
description: The link-label catalogue - every relationship label a page may declare in related:, grouped by register, with the reader need each one names. A palette to authorise from in a COLLECTION.md, never binding on its own.
manual: true
---
# Pick a link label
**This page is a palette, not an enum.** It lists every label this stack ships with and what
each one asserts. What a page may actually *use* is decided by its own collection: each
`kb/<name>/COLLECTION.md` authorises a subset per destination, and `wikitool lint` checks
`related:` against that authorisation rather than against this file. A collection that
authorises six labels has six, however long this list gets.
A label is an **identifier, not prose**. It is written into `related:` as a machine value and
rendered verbatim into the page body, so it is never translated - not in a German wiki, not in
any other. Which words a page is *written* in stays [kb/CONVENTIONS.md](../kb/CONVENTIONS.md)'s;
this is not one of them.
## The invariant every label obeys
Every label completes, with the page carrying the link as the grammatical subject:
> `[source] <label> [target]`
The page containing the link asserts something **about** the target. `Hermes depends-on
PostgreSQL` reads correctly on Hermes' page; the same fact written on PostgreSQL's page is a
different label (`required-by`), not the same one pointing back. Omitted helper verbs ("is",
"a") are fine where they do not reverse the endpoints.
This is Commonplace's ADR-058, adopted wholesale, and it is what makes a label checkable rather
than a matter of taste: read the sentence out loud, and if it says the opposite of what you
meant, the label is wrong.
## Direction is authored, never mirrored
Each direction is a separate decision. A link back from the target is welcome when it
independently helps a reader *there* - and unnecessary when it does not. **Do not add a reverse
edge merely to mirror the first one.** The inbound view is rendered from the graph by
`index rebuild` and `search`, so a reader landing on the target sees what points at it whether
or not anyone wrote a second edge.
That is why most labels below have no inverse. Only three pairs do, because in each the reverse
direction is a genuine primary statement someone would write on its own: `depends-on` /
`required-by`, `runs-on` / `hosts`, and `composition` / `part-of`.
The third was added after the 4.0.0 migration, from measurement rather than from the desk. A
parent-child structure - a tier list and its tiers, a spectrum and its levels - produces the
question on nearly every page: the parent writes `composition`, and the child then reaches for
either `part-of` or `see-also`. The migration run answered `see-also`, on the reading that
`part-of` would be a mirror, and left sixteen edges saying "these two are related" about a
relationship the catalogue already had a word for. It is not a mirror: the parent's sentence
lists its parts, the child's names the whole it belongs to, and a reader landing on the child
needs the second one.
## When to run
Adding or changing a `related:` entry, authorising labels in a `COLLECTION.md`, or judging
whether a relationship is worth naming as a formal edge at all.
## Steps
1. **Decide whether this is an edge.** Not every mention is one. An edge is a reader aid: it
says *follow this if you need X*. A subject mentioned once in passing is prose with a
`[[wikilink]]`, not a declared relationship. Over-declaring is how a graph becomes a list of
everything adjacent to everything.
2. **Say the sentence.** `[this page] <label> [that page]`. If it reads backwards, you want the
other page to carry the edge, or a different label.
3. **Pick from the register that fits the pair**, below. Prefer the most specific label that is
true; fall back outward only when nothing fits.
4. **Check the collection authorises it** for that destination -
`kb/<name>/COLLECTION.md`'s `outbound:` block. If the label you want is not authorised and
should be, that is a collection-contract change, made deliberately, not a lint error to
route around.
5. **Write it with the tool**, never by hand:
```bash
tools/wikitool xref add --a "<This Page>" --b "<That Page>" --rel <label>
```
## The catalogue
### Operational
Concrete things and how they stand to one another - the register this instance runs on. Mostly
entity to entity.
| label | inverse | asserts |
|---|---|---|
| `depends-on` | `required-by` | cannot function without the target |
| `required-by` | `depends-on` | the target cannot function without this |
| `runs-on` | `hosts` | executes on the target as its substrate |
| `hosts` | `runs-on` | provides the substrate the target executes on |
| `uses` | — | employs the target at runtime, but survives without it |
| `produces` | — | emits the target as an artifact or data |
| `consumes` | — | reads the target as an artifact or data |
| `maintains` | — | carries the upkeep of the target |
| `owns` | — | is accountable for the target's existence and decisions |
`uses` versus `depends-on` is the distinction worth keeping sharp: if removing the target breaks
this thing, it is `depends-on`. `owns` versus `maintains`: accountability versus labour, and
they are often different people.
### Realization
How an idea becomes a running thing. Usually concept to entity or the reverse.
| label | asserts |
|---|---|
| `implements` | is a concrete realization of the target |
| `operationalized-from` | is the prescriptive form of the target's theory |
| `mechanism` | is the mechanism by which the target works |
| `procedure` | is the procedure for carrying out the target |
| `applies-when` | applies under the condition the target describes |
| `operates-on` | acts upon the target as its subject matter |
| `invokes` | calls the target as a step within itself |
### Conceptual
Inference and comparison between ideas.
| label | asserts |
|---|---|
| `extends` | develops the target's argument further |
| `grounds` | provides the basis the target rests on |
| `rests-on` | takes the target as its premise |
| `enables` | is the operational prerequisite that makes the target possible |
| `precondition` | must hold before the target applies |
| `exemplifies` | is an instance of the general claim the target makes |
| `abstracted-from` | generalizes from the target |
| `contrasts` | differs from the target in a way worth reading both for |
| `compares-with` | is weighed against the target on shared dimensions |
| `contradicts` | asserts something the target denies |
| `composition` | is composed of the target |
| `part-of` | is a component of the target |
`composition` / `part-of` is the third **inverse pair**, alongside `depends-on` / `required-by`
and `runs-on` / `hosts` in the operational register. Being a pair does not make the second edge
obligatory - direction is still authored - it settles *which label* the second edge takes when
someone does write it. The child of a `composition` writes `part-of`, not `see-also`: what it
is a component of is a primary statement about the child, and `see-also` says strictly less
about the same fact.
`grounds` / `rests-on` is a genuine pair and both directions are primary statements; they are
listed separately rather than as inverses because either page may legitimately carry only its
own side.
### Lineage
Where something came from, and what replaced it.
| label | asserts |
|---|---|
| `supersedes` | replaces the target, which is now historical |
| `derived-from` | was produced from the target |
| `adapted-from` | was reworked from the target for a different purpose |
| `defined-in` | takes its definition from the target |
A superseded page is never deleted or rewritten - see the collection contract for
`kb/concepts/`.
### Evidence
The provenance register. Distinct from `sources:` and `[^cite-id]`, which are the *mechanical*
provenance path: these two are authored claims about how strongly something is backed.
| label | asserts |
|---|---|
| `evidenced-by` | is supported by the target as evidence |
| `is-evidence-for` | serves as evidence for the target's claim |
### Universal
| label | asserts |
|---|---|
| `see-also` | nothing more specific applies, and a reader here would still want the target |
**`see-also` is the last resort and should stay rare.** A collection where it is the commonest
label has a vocabulary problem, not a lot of loosely related pages. The previous vocabulary's
`verwandt mit` was exactly that, and it is the reason this catalogue exists.
## Extending it
Adding a label is a line of data, never a code change:
1. Add a row here, in the register it belongs to, with the sentence it completes.
2. Authorise it in the `COLLECTION.md` of every collection that may use it.
The registers are advisory groupings for readers, not a schema - nothing checks that a label is
used only within its register. Invent an intra-collection label the work needs and propose it
here afterwards; the architecture is deliberately loose, because the link theory is still
developing.
## Decision points
- **Two labels both fit?** Take the more specific one. If they are equally specific and mean
different things, the relationship is probably two edges.
- **The relationship reads better from the other page?** Write it there. Nothing is lost - the
inbound view renders it here.
- **You want a reverse edge for navigation?** You do not need one. That is what the rendered
inbound view is for, and it is complete in a way an authored mirror never was.
- **Nothing fits at all?** Use `see-also` and say so in the commit, or propose a label. Do not
stretch a label whose sentence reads false - a wrong edge is worse than a weak one, because
it is machine-readable and will be believed.
## Scope
Covers labels on `related:` edges between pages. Says nothing about `sources:` (the provenance
field, unlabelled by construction), `[^cite-id]` footnotes
([kb/CONTRACT.md](../kb/CONTRACT.md#provenance-and-citation)), or `tags:` (search keys, not
relationships).
@@ -0,0 +1,153 @@
---
type: types/instruction.md
name: 4.0.0-link-taxonomy
description: Move every relationship from free-text prose in a body bullet to a labelled edge in related:, and every tool-owned body region from heading-matching to a marker pair.
manual: true
migrates_to: 4.0.0
migration_kind: assisted
obligation: required
---
# Move relationships into the data, and generated regions behind markers (4.0.0)
Until 4.0.0 the stack used **prose as an identifier** in three places, and each one cost
something measurable:
| Was the identifier | Cost |
|---|---|
| A section's heading text (`## Beziehungen`) | The KB language was a compiler constant, and the region's *end* was a guess. Content sitting after it was silently deleted on eight pages |
| A relationship label in a body bullet (`- **hängt ab von:**`) | Nothing could check the vocabulary, so it drifted to **152 distinct labels** across 337 bullets against thirteen that were documented |
| The reciprocal half of every edge | `xref add` mirrored every link, which made per-collection label authorisation impossible and filled `## Siehe auch` with 555 unlabelled bullets, 353 of them provably redundant |
4.0.0 replaces all three. A region is delimited by a marker pair and rendered from frontmatter;
a label is a machine value in `related:`, drawn from a catalogue and authorised per destination
by the source collection; an edge is authored in one direction and the inbound view is computed.
**This one touches pages.** Unlike 3.0.0 it is not a contract reshuffle: every `related:` entry
and every tool-owned body region changes. It is `assisted` because there is no mapping table -
mapping free-text German onto a 35-label catalogue is a judgment call per edge, and a large
minority of the old labels are reverse directions that under the new model are not stored at all.
## When to run
After installing 4.0.0 over an instance on 3.x. `tools/wikitool migrate status` names it, and
`lint` reports `unlabelled_edges` for every unconverted edge - that count reaching zero is how
you know the run is finished.
**Nothing breaks while it is outstanding.** Unlabelled edges and undelimited regions are read,
not rejected: `links.py` treats a bare title as an edge whose label is not declared yet, and
`provenance.split_cite_block` falls back to the pre-marker layout. That is deliberate - a corpus
has to stay readable while it is being converted - and it is why the two lint findings stay
advisory for as long as `kb_version` is below 4.0.0, which is exactly as long as this document
is outstanding.
## Steps
1. **Rewrite `kb/CONVENTIONS.md`'s `sections:` block.** Three slots become two, because the
See Also region is gone:
```yaml
sections:
links: <your heading for declared relationships>
footnotes: <your heading for citation definitions>
```
Delete `section_aliases:` if you have one - nothing matches on heading text any more, so
there is nothing to alias. The heading is now a *rendering* value: changing it re-renders
the words above each region on the next write and can no longer split a page.
2. **Add an `outbound:` block to every `kb/<name>/COLLECTION.md`.** Which labels a page may use,
per destination collection, with `any` as a wildcard:
```yaml
outbound:
entities: [depends-on, runs-on, uses, see-also]
concepts: [implements, see-also]
```
The catalogue to draw from is [link-taxonomy.md](../link-taxonomy.md); the four contracts in
the origin repo are worked examples. **The source collection decides** - that is what makes a
35-label palette usable, and it is why the reverse edge can no longer be written
automatically. A destination you do not list authorises nothing, which is a real answer.
3. **Fix your page type-spec templates.** If you adopted the 3.0.0 templates, they contain
`## {section.relationships}` and `## {section.see_also}`. Those variables no longer exist and
would be written into new pages literally. **Delete both sections from the `## Template`
block** - a template must not scaffold a tool-owned region at all: it is generated between
markers on the first `xref add` / `cite add` and re-rendered on every write.
4. **Convert the corpus**, following [migrate-corpus.md](../migrate-corpus.md). Cut it into
units sized against the iteration budget; the origin repo used four, ~45 pages each. Per page:
- For each labelled bullet under the old relationships heading: say the sentence
`[this page] <label> [target]` and pick the catalogue label that makes it true. If it only
reads true **backwards**, the edge belongs on the other page - move it there rather than
inventing an inverse label the catalogue does not have.
- For each bare `- [[X]]` bullet under the old See Also heading: drop it if a labelled edge
already connects the pair. Otherwise decide - a real label, or dropped with the reason
recorded. **Do not convert them to `see-also` in bulk.** That is the one shortcut this
migration explicitly refuses: it would start the new taxonomy with most of its edges on its
weakest label, which is the sediment the change exists to remove.
- Write edges with `tools/wikitool xref add --a "<A>" --b "<B>" --rel <label>`, never by
hand. The body region is rendered from `related:`; editing inside a marker pair is
overwritten without warning.
- `cite sync` converts a page's old footnote block into a marked region in passing.
5. **Check each unit mechanically before anything else:**
```bash
tools/wikitool migrate verify --from <pre-migration rev> --path kb/<area> --fail-on-error
```
It compares wikilink and citation **counts**, footnote definitions, H1, structural
frontmatter, and - new in 4.0.0 - the **count of marker pairs per region**. A dropped marker
is otherwise silent: the region becomes ordinary prose and the next write appends a second
one beside it.
6. **Record it. The checks tighten themselves:**
```bash
tools/wikitool lint # unlabelled_edges and unauthorised_labels must be 0
tools/wikitool migrate done 4.0.0 --pages <N>
```
Only once `lint` reports zero of both is the run finished. The two findings are advisory
while `kb_version` is below 4.0.0 and hard from the moment `migrate done` records it -
nothing to flip by hand, and no window in which a half-converted corpus is refused by the
check that is measuring its progress.
Do not record the migration to silence the findings. The promotion is what makes the run
stick: after it, a bare title in `related:` is a hard error rather than a page still
waiting, so a corpus recorded early fails its next lint instead of quietly keeping the old
shape.
## How to tell a migrated page from an unmigrated one
Its `related:` entries are `- <label>: <title>` rather than bare titles, and its relationship
and footnote sections sit between `<!-- wikitool:links -->` / `<!-- wikitool:footnotes -->`
marker pairs. `tools/wikitool links show --page "<Title>"` prints `unlabelled` for every edge
still waiting, and `lint`'s `unlabelled_edges` count is the corpus-wide version of the same
question.
## Decision points
- **A label you want is not in the catalogue?** Add it - a row in `link-taxonomy.md` and an
entry in the authorising `COLLECTION.md`. No code change is involved, and the registers are
advisory groupings rather than a schema. Do not stretch a label whose sentence reads false: a
wrong edge is worse than a weak one, because it is machine-readable and will be believed.
- **`related:` holds an entry with no body bullet to derive a label from?** Expected - the
origin repo found 480 edges against 337 bullets, because frontmatter and body had already
drifted apart while the label lived only in prose. Read the page and decide; that drift is
itself part of what this migration repairs.
- **A page loses its last inbound edge?** The orphan check will now report it, and that is the
check working: directional edges mean a page nothing points at is genuinely unreachable, where
the old mirrored model always manufactured a back-link. Either something should point at it,
or it is reached through the catalog and that is fine.
- **Tempted to keep writing reverse edges for navigation?** Do not. `links show` computes the
inbound view, and the rendered bullet on the asserting page is an ordinary `[[wikilink]]`, so
a backlink panel in an editor already shows it.
## Scope
The corpus under `kb/`, plus the three instance-owned declarations in steps 1-3. It does not
touch `raw/`, and it learns nothing new: the same knowledge is restated in a form that can be
checked. Installing the 4.0.0 machinery itself is `INSTALL.md`'s and must have happened first.
+50 -62
View File
@@ -108,69 +108,53 @@ So the merge has to be scoped. That is the procedure below, and it is not option
## Taking a stack update ## Taking a stack update
Take the machinery, never the content. The merge is held open, the content stages are forced ```bash
back to your own state, and only then does it close. tools/wikitool upstream merge --remote upstream --branch main
```
**Three files under those stages are machinery, not content**, and forcing them back is how an Take the machinery, never the content. This is the command form of the same idea a hand-rolled
upstream contract change gets silently discarded: merge would need: hold the merge open, force the content stages back to your own state, restore
only the paths that are machinery, and only then let it close. Which paths those are is not a
short literal list any more (see below) - it is `chemenu.ownership.is_stack_owned`, the same
predicate `dist_cmd.py`'s export reads, so a stack change that adds a new machinery path under a
content stage is recognised automatically rather than needing this document edited first.
| Path | Why it must take the upstream side | **What counts as machinery under a content stage**, for readers who want the shape rather than
the code:
| Path | Why it takes the upstream side |
|---|---| |---|---|
| `kb/CONTRACT.md` | The stack's own knowledge-layer contract. Every rule in it is enforced by `wikitool`; an instance never edits it | | `<stage>/CONTRACT.md` (`kb/CONTRACT.md`, `raw/CONTRACT.md`, `work/CONTRACT.md`, `reports/CONTRACT.md`) | The stack's own stage contract. Every rule in it is enforced by `wikitool`; an instance never edits it |
| `kb/CONVENTIONS.md.template` | The template your `kb/CONVENTIONS.md` was filled from. The filled file is yours; the template is the stack's | | any `*.template` under a content stage (`kb/CONVENTIONS.md.template`, each `kb/<name>/COLLECTION.md.template`, and any later one) | The template your filled file was adopted from. The filled file is yours; the template is the stack's |
| `raw/CONTRACT.md` | The raw stage's contract, for the same reason as the first row |
Everything else under `kb/` and `raw/` is yours, `kb/CONVENTIONS.md` and each Everything else under `kb/`, `raw/`, `work/` and `reports/` is yours, `kb/CONVENTIONS.md` and
`kb/<name>/COLLECTION.md` included - they bind your corpus, and they are exactly what the each `kb/<name>/COLLECTION.md` included - they bind your corpus, and they are exactly what
restore below is protecting. `upstream merge` protects.
```bash **Your local, uncommitted-by-design files under those stages survive.** Forcing a content stage
BEFORE=$(git rev-parse HEAD) back to your own state removes only what git tracks, never the directory wholesale - which
git fetch upstream matters because `reports/` is gitignored apart from its contract, so it holds data that is in no
commit and cannot be recomputed: the telemetry traces `eval score` reads, saved eval reports,
past lint reports. A merge has no business touching any of it, and does not.
# --no-commit holds the merge open; it may report conflicts under kb/ or raw/, The command itself checks its own result the same way `upstream verify` would, immediately
# which the next four lines are about to make irrelevant. after committing, and refuses loudly - without rolling the commit back - if anything landed
git merge --no-commit --no-ff upstream/main || true outside a stack-owned path. A refusal there is a bug report, not something to work around by
hand; see [tools/CONTRACT.md](../tools/CONTRACT.md) for the full error contract, including what
# Whatever the merge did to the content stages, undo it. HEAD is still your a real conflict in `tools/`/`types/`/`instructions/` leaves behind.
# pre-merge commit while the merge is open, so this restores exactly your side.
git rm -rq --cached --ignore-unmatch kb raw
rm -rf kb raw
git checkout HEAD -- kb raw
# ...then take the upstream side back for the machinery that lives among it.
# MERGE_HEAD is still resolvable while the merge is open.
git checkout MERGE_HEAD -- kb/CONTRACT.md kb/CONVENTIONS.md.template raw/CONTRACT.md
git commit --no-edit
```
Then **check that it worked**, rather than trusting that it did. The same three paths are
excluded here, spelled out rather than held in a variable so that the check can be read on its
own and copied on its own:
```bash
git diff --name-only "$BEFORE" HEAD -- kb raw \
| grep -vE '^(kb/CONTRACT\.md|kb/CONVENTIONS\.md\.template|raw/CONTRACT\.md)$'
```
Must print nothing.
An empty result is the proof that the update touched machinery only. A non-empty one means a
path slipped through - inspect it before going further.
**The exclusion is not cosmetic.** Without it the check reports *empty* for an update that just
ate a `kb/CONTRACT.md` change - it would be confirming the failure it exists to catch. If one of
the three paths does not appear in the diff at all, that is fine: it means upstream did not
touch it.
Then, as after any stack change: `doctor`, `docs verify`, `instructions verify`, `migrate status`, Then, as after any stack change: `doctor`, `docs verify`, `instructions verify`, `migrate status`,
`lint`. A `migrate status` with outstanding links means the update crossed a compatibility `lint`. A `migrate status` with outstanding links means the update crossed a compatibility
boundary - follow [migrate-corpus.md](migrate-corpus.md) before doing anything else. boundary - follow [migrate-corpus.md](migrate-corpus.md) before doing anything else.
**Why not just `git merge upstream/main`?** Because of the table above: a page the upstream **Why not just `git merge upstream/main`?** A page the upstream *adds* arrives with no conflict
*adds* arrives with no conflict and no message. You would find out when `lint` starts reporting and no message under a plain merge - measured in the table further up this document. You would
pages you never wrote - if you noticed at all. find out when `lint` starts reporting pages you never wrote, if you noticed at all. `upstream
merge` closes exactly that gap: the content stages never see the upstream's version at all.
**Checking a merge you resolved by hand instead** (or auditing a past one): `tools/wikitool
upstream verify --since <rev-before> --until <rev-after>` runs the same check `upstream merge`
runs on itself, without doing the merge.
## Where stack development happens ## Where stack development happens
@@ -186,17 +170,21 @@ merge above. Nothing is lost by the detour: the fix has to pass that CI either w
## Decision points ## Decision points
- **Merge conflict in `kb/` or `raw/`?** Expected, and already handled: the update procedure - **Merge conflict in `kb/`, `raw/`, `work/` or `reports/`?** Expected, and already handled:
above overwrites those stages with your own afterwards, so the conflict resolves itself. `upstream merge` overwrites those stages with your own afterwards, so the conflict resolves
Never resolve one by hand with `git add -A` - that is exactly how the upstream version, which itself. Never resolve one by hand with `git add -A` in a merge you are running yourself
git left sitting in your working tree, gets committed into your instance. instead - that is exactly how the upstream version, which git left sitting in your working
- **`git diff` after the merge shows something under `kb/` or `raw/`?** Stop - unless it is one tree, gets committed into your instance.
of the three machinery paths the check excludes, which is the update working as intended. For - **`upstream merge` exits 1 after committing?** Read the message: its own postcheck found
anything else the scoping step did not take: do not publish; find out which path came through content outside a stack-owned path in the commit it just made. The commit is **not** rolled
and where from. back - inspect it (`git show`, or `tools/wikitool upstream verify --since <before> --until
HEAD`) and decide by hand whether to revert it, fix forward, or report it as a stack bug. This
should not happen; if it does, `chemenu.ownership.is_stack_owned` disagreed with itself between
the restore and the check, which is exactly what the shared predicate is meant to prevent.
- **Conflict in `tools/`, `types/` or `instructions/`?** You changed the stack locally, which - **Conflict in `tools/`, `types/` or `instructions/`?** You changed the stack locally, which
step "Where stack development happens" says not to do. Take the upstream side and re-file the step "Where stack development happens" says not to do. `upstream merge` leaves the merge open
change as an issue there. rather than guessing - take the upstream side for the named paths and re-file the change as an
issue there, or resolve deliberately and finish the commit yourself.
- **...but you changed how *your pages* are written?** That is not a stack change and the rule - **...but you changed how *your pages* are written?** That is not a stack change and the rule
above does not apply to it. Language, section headings, naming forms, tone, relationship above does not apply to it. Language, section headings, naming forms, tone, relationship
labels and the confidence rubric live in `kb/CONVENTIONS.md`, and each collection's authoring labels and the confidence rubric live in `kb/CONVENTIONS.md`, and each collection's authoring
+19 -6
View File
@@ -68,17 +68,23 @@ bereit für den ersten `Ingest`.
Ablauf: Ablauf:
1. Die Collection-Contracts übernehmen - vier Kopien, keine Frage an den Nutzer, denn was 1. Die Collection-Contracts **und die Page-Type-Specs** übernehmen - Kopien, keine Frage an
dort steht ist unabhängig von der Sprache brauchbar: den Nutzer, denn was dort steht ist als Ausgangspunkt unabhängig von der Sprache brauchbar:
```bash ```bash
for template in kb/*/COLLECTION.md.template; do for template in kb/*/COLLECTION.md.template types/*.template; do
cp "$template" "${template%.template}" cp "$template" "${template%.template}"
done done
``` ```
Die `.template`-Dateien bleiben liegen; sie sind die Vorlage für den nächsten Export. Die `.template`-Dateien bleiben liegen; sie sind die Vorlage für den nächsten Export.
Unter `types/` betrifft das genau die Type-Specs mit `root: kb` - `entity`, `concept`,
`source`, `comparison` - samt ihrer `.schema.yaml`. Sie beschreiben Seiten, die *diese*
Instanz schreibt, also gehören sie ihr: Prosa, Template und Sprache dürfen umgeschrieben
werden. `instruction`, `lint-report` und `type-spec` beschreiben Stack-Artefakte und
kommen unverändert.
2. Den Nutzer nach der KB-Sprache fragen. `kb/CONVENTIONS.md.template` ist auf **Englisch** 2. Den Nutzer nach der KB-Sprache fragen. `kb/CONVENTIONS.md.template` ist auf **Englisch**
voreingestellt; [kb-profiles.md](kb-profiles.md) hält daneben ein vollständiges voreingestellt; [kb-profiles.md](kb-profiles.md) hält daneben ein vollständiges
deutsches Profil bereit, und dessen Volltext ist die `kb/CONVENTIONS.md` des Quell-Repos. deutsches Profil bereit, und dessen Volltext ist die `kb/CONVENTIONS.md` des Quell-Repos.
@@ -99,9 +105,16 @@ bereit für den ersten `Ingest`.
Migration jeder vorhandenen Seite (`section_aliases:` trägt die alten Namen, siehe Migration jeder vorhandenen Seite (`section_aliases:` trägt die alten Namen, siehe
[migrate-corpus.md](migrate-corpus.md)). [migrate-corpus.md](migrate-corpus.md)).
**Nichts davon liegt unter `tools/` oder `types/`.** Der Compiler liest die Abschnittsnamen **Nichts davon liegt in einer Stack-Datei.** Der Compiler liest die Abschnittsnamen aus
aus `kb/CONVENTIONS.md`, und die vier Page-Type-Templates setzen sie über `kb/CONVENTIONS.md`; die vier Page-Type-Specs gehören ab Schritt 1 dieser Instanz. Eine
`{section.…}`-Variablen ein - eine anderssprachige Instanz ändert dort keine Datei. anderssprachige Instanz übersetzt sie einfach - das ist kein lokaler Patch an etwas
Ausgeliefertem mehr, sondern Arbeit an den eigenen Dateien, und ein Upgrade nimmt sie ihr
nicht wieder weg.
Was der Stack von `types/` überhaupt noch verlangt, ist eine Zeile: es muss einen Type-Spec
mit `name: source` geben, dessen Schema `raw_files` fordert. Daran hängt der gesamte
`raw/`→`kb/`-Provenance-Pfad (`sources coverage`, `[^cite-id]`-Auflösung, `kb/provenance.md`),
und `docs verify` prüft genau das - nicht mehr.
Unverändert bleibt in jedem Fall die Regel, die dem Stack gehört: **jede Zeile einer Seite Unverändert bleibt in jedem Fall die Regel, die dem Stack gehört: **jede Zeile einer Seite
ist Prosa oder Identifier, und nur Prosa wird übersetzt** ([kb/CONTRACT.md § Language and ist Prosa oder Identifier, und nur Prosa wird übersetzt** ([kb/CONTRACT.md § Language and
+53 -27
View File
@@ -12,9 +12,8 @@ second half is the cut: what is written here is enforced by `tools/wikitool` or
how it works, so it is identical everywhere and `dist export` ships it verbatim. how it works, so it is identical everywhere and `dist export` ships it verbatim.
**What an instance decides for itself is next door, in **What an instance decides for itself is next door, in
[kb/CONVENTIONS.md](CONVENTIONS.md)** - the language pages are written in and its three [kb/CONVENTIONS.md](CONVENTIONS.md)** - the language pages are written in, the headings its two
tool-owned section headings, the naming forms, the tone, the relationship-label vocabulary, the generated regions render under, the naming forms, the tone, the confidence rubric. That file binds exactly as this one does; it is simply owned by the instance
confidence rubric. That file binds exactly as this one does; it is simply owned by the instance
rather than by the stack, so the distribution ships only its `.template` and the instance writes rather than by the stack, so the distribution ships only its `.template` and the instance writes
the real one. Read both, plus the target collection's `kb/<name>/COLLECTION.md` (also the real one. Read both, plus the target collection's `kb/<name>/COLLECTION.md` (also
instance-owned), before writing or editing a page. instance-owned), before writing or editing a page.
@@ -99,7 +98,8 @@ decision record - is the instance's, in
- [ ] Carry a clear, descriptive title and a summary near the top - [ ] Carry a clear, descriptive title and a summary near the top
- [ ] Use consistent terminology with the rest of the wiki - [ ] Use consistent terminology with the rest of the wiki
- [ ] Link to every entity and concept it mentions, and be linked to in return - [ ] Link to the entities and concepts it mentions, and declare an edge where the relationship
is worth naming - in the direction this page asserts it, not in both
- [ ] Cite its hard facts (see [Provenance and citation](#provenance-and-citation)) - [ ] Cite its hard facts (see [Provenance and citation](#provenance-and-citation))
- [ ] Duplicate no existing page - [ ] Duplicate no existing page
- [ ] Appear in the catalog (guaranteed by `wikitool index rebuild`) - [ ] Appear in the catalog (guaranteed by `wikitool index rebuild`)
@@ -141,36 +141,62 @@ instance records - see [kb/CONVENTIONS.md § Language](CONVENTIONS.md#language).
evidence *about* a source, not a substitute for it. Quote verbatim in the original language and evidence *about* a source, not a substitute for it. Quote verbatim in the original language and
record the raw file's language in `source_language:`. record the raw file's language in `source_language:`.
### Section headings ### Generated regions
Three headings are a vocabulary the tool owns rather than prose an author picks: `xref add` Two regions of a page body are **generated**, not authored: the links region `xref` owns and the
writes into Relationships and See Also, and `cite add` owns the trailing Footnotes block. They footnotes region `cite` owns. Each sits between a marker pair:
follow the KB language like everything else, so **the instance names them**, in
`kb/CONVENTIONS.md`'s `sections:` frontmatter. `tools/chemenu/conventions.py` reads that
declaration and `tools/chemenu/sections.py` is what the rest of the compiler asks - there is no
heading text in the compiler itself.
Each has aliases the tool still *recognizes* but no longer writes, which is what lets the corpus ```markdown
be translated page by page: a page still carrying `## Relationships` is found and appended to <!-- wikitool:links -->
correctly, and `cite sync` leaves an untranslated `## Footnotes` heading alone rather than ## Beziehungen
retitling it. The recognized set is the canonical name, any `section_aliases:` the instance
declared, and the names this stack wrote before the declaration existed. Renaming a heading is - **depends-on:** [[Hermes]]
the translation pass's job, never a side effect of another command. Any *other* heading an <!-- /wikitool:links -->
author adds is ordinary prose and is translated with the rest. ```
The marker is what the tool locates the region by, and everything between the markers -
**heading included** - is replaced wholesale on the next write. An author never edits inside
them; anything left there is overwritten without warning, exactly as in `kb/index.md`. A region
with nothing to show is absent rather than empty.
The heading is therefore a *rendering* value, taken from `kb/CONVENTIONS.md`'s `sections:`. No
heading text exists in the compiler, and nothing matches on it: changing the declaration
re-renders the words on the next write and cannot split a page.
That is not how it used to work. The tool located these regions by matching their heading text,
which made a translated heading a structural fact - and made the region's *end* a guess. It ran
to the next heading, and before that to the end of the file, which silently deleted whatever sat
after it on eight pages. Any *other* heading a page carries is ordinary prose.
## Linking ## Linking
Every page links to what it mentions, in both directions. Cross-references are created with **An edge is authored in one direction**, on the page that asserts it, and carries a label that
`tools/wikitool xref add --a "<A>" --b "<B>" --rel-a "<label>" --rel-b "<label>"`, never by is a machine value rather than prose:
hand-editing the `related:` array or the Relationships/See Also bullets.
Use a typed relationship label rather than a generic one. The label is free text as far as the ```yaml
tool is concerned - it is written into a `- **label:** [[Title]]` bullet and no code matches on related:
it - so which vocabulary this instance uses is - depends-on: Hermes
[kb/CONVENTIONS.md § Relationship labels](CONVENTIONS.md#relationship-labels)'s to list. ```
A page is expected to have at least one inbound link; `wikitool lint` reports orphans. Created with `tools/wikitool xref add --a "<A>" --b "<B>" --rel <label>`, never by hand-editing
Comparison pages are exempt - they are reached through the catalog. `related:` or the rendered bullet. Say the sentence before choosing the label - `[A] <label>
[B]` - and if it only reads true backwards, the edge belongs on the other page.
**A reverse edge is a separate decision, not a mirror.** Write one when it independently helps a
reader at the other end; do not write one to make the graph symmetric. Navigation does not
depend on it either way: `index rebuild` renders the inbound view from the graph, completely and
without maintenance.
Which labels exist is [instructions/link-taxonomy.md](../instructions/link-taxonomy.md), a
palette that binds nothing. Which of them a page may *use* is its own collection's `outbound:`
block, per destination - the **source** collection decides, because the rules that govern an
edge are the rules of the collection asserting it. `xref add` refuses an unauthorised label and
`lint` reports one.
A page is expected to have at least one inbound edge; `wikitool lint` reports orphans.
Comparison pages are exempt - they are reached through the catalog. Directional edges mean more
pages qualify than under the old mirrored model, and that is the check measuring reachability
rather than measuring whether `xref` ran.
Renaming a page, deleting one, or dropping a single reference are tool operations with their Renaming a page, deleting one, or dropping a single reference are tool operations with their
own procedure: see [instructions/page-lifecycle.md](../instructions/page-lifecycle.md). own procedure: see [instructions/page-lifecycle.md](../instructions/page-lifecycle.md).
+24 -30
View File
@@ -2,8 +2,7 @@
language: de language: de
profile: german profile: german
sections: sections:
relationships: Beziehungen links: Beziehungen
see_also: Siehe auch
footnotes: Fußnoten footnotes: Fußnoten
--- ---
@@ -21,13 +20,11 @@ Adopted from the `german` profile in
[instructions/kb-profiles.md](../instructions/kb-profiles.md). That catalogue is a palette, not [instructions/kb-profiles.md](../instructions/kb-profiles.md). That catalogue is a palette, not
an enum - what is written here is what holds, whether or not a profile says the same thing. an enum - what is written here is what holds, whether or not a profile says the same thing.
The frontmatter above is the one machine-read part. `sections:` names the three headings The frontmatter above is the one machine-read part. `sections:` names the headings the two
`wikitool xref` and `wikitool cite` write into; `tools/chemenu/conventions.py` reads them and **generated regions** render under - the links region `wikitool xref` owns and the footnotes
`tools/chemenu/sections.py` is what the rest of the compiler asks. Renaming one here changes region `wikitool cite` owns. Each sits between a marker pair, and the marker is what the tool
what the tool *writes*; what it still *recognizes* is the union of that name, any locates it by, so the heading here is a display value: changing it re-renders the words above
`section_aliases:` declared beside it, and the names this stack wrote before this file existed. those regions and nothing else. Nothing matches on this text.
That asymmetry is the translation path: a page keeps working under its old heading until it is
itself translated.
## Language ## Language
@@ -52,19 +49,21 @@ material, not a second rule - every entry in it is a decision that was made wron
### Section headings ### Section headings
The canonical names are the frontmatter's: `## Beziehungen`, `## Siehe auch`, `## Fußnoten`. The two generated regions render under `## Beziehungen` and `## Fußnoten`. An author never
The English forms this stack wrote before the corpus was translated are still recognized, so a writes inside them - they are rebuilt from frontmatter on every write, exactly like
page carrying `## Relationships` is found and appended to correctly and `cite sync` leaves an `kb/index.md` - and never has to write the heading either. Any *other* heading on a page is
untranslated `## Footnotes` alone. Renaming such a heading is the translation pass's job, never ordinary prose and is translated with the rest.
a side effect of another command. Any *other* heading an author adds is ordinary prose and is
translated with the rest. There is no `## Siehe auch` region any more. It was the reciprocal half of a bidirectional
`xref add`; under authored directional edges, `see-also` is a *label* inside the links region.
## Naming ## Naming
- Human-readable titles with spaces: `Hybrid Search.md`, `Gitea Actions.md` - not kebab-case. - Human-readable titles with spaces: `Hybrid Search.md`, `Gitea Actions.md` - not kebab-case.
- Singular for entities: `ha-core.md`, not `ha-cores.md`. - Singular for entities: `ha-core.md`, not `ha-cores.md`.
- Comparison pages read as a comparison: `Go vs Rust.md`. - Comparison pages read as a comparison: `Go vs Rust.md`.
- ADRs are prefixed: `adr-001-use-go-modules.md`. - A decision (`concept_type: decision`) is named like any other concept - no `adr-NNN-` prefix.
See [kb/concepts/COLLECTION.md § Decisions](concepts/COLLECTION.md#decisions).
- Prefer readability over convention when the two conflict. - Prefer readability over convention when the two conflict.
What to name a thing: projects use their repository or common name; systems a descriptive What to name a thing: projects use their repository or common name; systems a descriptive
@@ -92,15 +91,11 @@ The blockquote cap is not here: `wikitool lint` reports it, so it is the contrac
## Relationship labels ## Relationship labels
`tools/wikitool xref add --rel-a/--rel-b` takes a free-text label. This instance uses a typed **Not this file's to list, and not localized.** A label is a machine value in `related:`, drawn
one rather than a generic one: from [instructions/link-taxonomy.md](../instructions/link-taxonomy.md) and authorised per
destination in each `kb/<name>/COLLECTION.md`'s `outbound:` block. `- **depends-on:** [[Hermes]]`
`hängt ab von` · `verwendet` · `implementiert` · `erweitert` · `ersetzt` · `steht in Konflikt mit` is what a German page carries, and that is deliberate: the label is an identifier, so translating
· `benötigt` · `erzeugt` · `konsumiert` · `besitzt` · `pflegt` · `läuft auf` · `verwandt mit` it would make the graph's semantics depend on the prose again.
(last resort)
The labels are prose written into a `- **label:** [[Title]]` bullet; no code matches on them, so
an untranslated page's English label is stale wording, not a broken reference.
## Confidence rubric ## Confidence rubric
@@ -119,8 +114,7 @@ write "unsicher"/"unbestätigt".
## Keeping this file honest ## Keeping this file honest
Change it when a convention actually changes, and treat a change to `sections:` as a corpus Change it when a convention actually changes. `sections:` is safe to change at any time - the
migration rather than an edit: existing pages keep their old headings until something translates regions are located by their markers and re-rendered under the new words on the next write.
them, and the alias list is what carries them in the meantime. `wikitool doctor` FAILs on a `wikitool doctor` FAILs on a missing or unfilled file, and `wikitool docs verify` refuses a
missing or unfilled file, and `wikitool docs verify` refuses a `sections:` block that does not `sections:` block that does not name both regions.
name all three slots.
+11 -26
View File
@@ -3,16 +3,8 @@
language: en language: en
profile: none profile: none
sections: sections:
relationships: Relationships links: Relationships
see_also: See Also
footnotes: Footnotes footnotes: Footnotes
# Headings this instance no longer writes but still recognizes, so a corpus can
# be translated page by page instead of all at once. Optional; the names this
# stack wrote before this file existed are always recognized anyway.
# section_aliases:
# relationships: [Beziehungen]
# see_also: [Siehe auch]
# footnotes: [Fußnoten]
--- ---
# kb/ - Authoring Conventions of This Instance # kb/ - Authoring Conventions of This Instance
@@ -29,9 +21,9 @@ Ready-made answers to every section below - including a complete German profile
[instructions/kb-profiles.md](../instructions/kb-profiles.md). That catalogue is a palette, not [instructions/kb-profiles.md](../instructions/kb-profiles.md). That catalogue is a palette, not
an enum: adopt an entry, adapt it, or write your own. What is written *here* is what holds. an enum: adopt an entry, adapt it, or write your own. What is written *here* is what holds.
The frontmatter above is the one machine-read part. `sections:` names the three headings The frontmatter above is the one machine-read part. `sections:` names the headings the two
`wikitool xref` and `wikitool cite` write into. Set them before the first page is written: generated regions render under. Safe to change at any time - each region is located by its
afterwards, changing one is a corpus migration rather than an edit. marker pair, so a rename re-renders words and nothing else.
## Language ## Language
@@ -52,10 +44,8 @@ is the one those terms are already in.}
### Section headings ### Section headings
The canonical names are the frontmatter's. Any name this instance previously wrote stays The two generated regions render under the frontmatter's headings. An author never writes inside
recognized through `section_aliases:`, which is what lets a corpus be translated page by page. them - they are rebuilt from frontmatter on every write. Any *other* heading is ordinary prose.
Renaming such a heading is the translation pass's job, never a side effect of another command.
Any *other* heading an author adds is ordinary prose.
## Naming ## Naming
@@ -80,13 +70,9 @@ Bad: {the same sentence written the way it must not be.}
## Relationship labels ## Relationship labels
`tools/wikitool xref add --rel-a/--rel-b` takes a free-text label. Listing the ones this **Not this file's to list, and not localized.** A label is a machine value in `related:`, drawn
instance uses is what keeps a graph typed rather than a wiki full of "related to": from [instructions/link-taxonomy.md](../instructions/link-taxonomy.md) and authorised per
destination in each `kb/<name>/COLLECTION.md`'s `outbound:` block.
{the label vocabulary, in the KB language}
No code matches on these, so an old label on an untranslated page is stale wording, not a
broken reference.
## Confidence rubric ## Confidence rubric
@@ -99,6 +85,5 @@ contract's. What the number *means* is this instance's:
## Keeping this file honest ## Keeping this file honest
Change it when a convention actually changes, and treat a change to `sections:` as a corpus Change it when a convention actually changes. `wikitool doctor` FAILs on a missing or unfilled
migration rather than an edit. `wikitool doctor` FAILs on a missing or unfilled file, and file, and `wikitool docs verify` refuses a `sections:` block that does not name both regions.
`wikitool docs verify` refuses a `sections:` block that does not name all three slots.
+16 -3
View File
@@ -1,5 +1,7 @@
--- ---
profile: comparisons profile: comparisons
outbound:
any: [compares-with, contrasts, see-also]
required_by_stack: false required_by_stack: false
--- ---
@@ -37,11 +39,22 @@ alphabetically.
- State the trade-off, not a winner. Where a recommendation is genuinely warranted, scope it: - State the trade-off, not a winner. Where a recommendation is genuinely warranted, scope it:
"for X workload", not "better". "for X workload", not "better".
## Authorised labels
The `outbound:` block above is what `wikitool lint` and `xref add` check: which labels a page in
this collection may use, per destination. The catalogue they are drawn from - and what each one
asserts - is [instructions/link-taxonomy.md](../../instructions/link-taxonomy.md), which binds
nothing on its own.
Narrow for the opposite reason: a comparison's substance is its table, and its links to the compared subjects are the one relationship it asserts.
Adding a label here is a deliberate contract change, not a way around a refusal.
## Outbound linking ## Outbound linking
A comparison links to every subject with `related to`, and each subject links back. Comparison A comparison links to every subject with `compares-with`. The subjects do not have to link back:
pages are **exempt from the orphan check** - they are reached through `index.md` rather than a comparison is reached through the catalog, and each subject's inbound view renders the edge
through inbound prose links. anyway. Comparison pages are **exempt from the orphan check** for the same reason.
## What does not belong here ## What does not belong here
+8 -10
View File
@@ -3,8 +3,10 @@ type: types/comparison.md
tags: [kernel, power-management, amd, cpu, driver] tags: [kernel, power-management, amd, cpu, driver]
created: 2026-07-31 created: 2026-07-31
entities: [amd-pstate, acpi-cpufreq] entities: [amd-pstate, acpi-cpufreq]
summary: "Vergleich zweier AMD-CPU-Power-Management-Treiber: CPPC-basiertes amd-pstate gegen\xFC\ summary: "Vergleich zweier AMD-CPU-Power-Management-Treiber: CPPC-basiertes amd-pstate gegen\xFCber ACPI-basiertem acpi-cpufreq."
ber ACPI-basiertem acpi-cpufreq." related:
- compares-with: amd-pstate
- compares-with: acpi-cpufreq
--- ---
# Comparison: amd-pstate vs acpi-cpufreq # Comparison: amd-pstate vs acpi-cpufreq
@@ -131,13 +133,9 @@ ls /sys/devices/system/cpu/cpu0/cpufreq/cppc_*
**amd-pstate** stellt einen bedeutenden Fortschritt in der CPU-Energieverwaltung für AMD-Prozessoren dar und bietet fein-körnige Steuerung, bessere Effizienz und verbessertes Batterielebensdauer. **acpi-cpufreq** bleibt ein zuverlässiger Fallback und dient weiterhin älterer Hardware. Die Wahl zwischen ihnen hängt hauptsächlich von Hardware-Unterstützung und Kernel-Version ab, wobei amd-pstate die klare Präferenz für moderne AMD-Systeme ist. **amd-pstate** stellt einen bedeutenden Fortschritt in der CPU-Energieverwaltung für AMD-Prozessoren dar und bietet fein-körnige Steuerung, bessere Effizienz und verbessertes Batterielebensdauer. **acpi-cpufreq** bleibt ein zuverlässiger Fallback und dient weiterhin älterer Hardware. Die Wahl zwischen ihnen hängt hauptsächlich von Hardware-Unterstützung und Kernel-Version ab, wobei amd-pstate die klare Präferenz für moderne AMD-Systeme ist.
<!-- wikitool:links -->
## Beziehungen ## Beziehungen
- **compares:** [[amd-pstate]] - **compares-with:** [[amd-pstate]]
- **compares:** [[acpi-cpufreq]] - **compares-with:** [[acpi-cpufreq]]
<!-- /wikitool:links -->
## Siehe auch
- [[amd-pstate]]
- [[acpi-cpufreq]]
+14 -15
View File
@@ -4,7 +4,11 @@ concept_type: problem
tags: [tests, ci, tooling, quality] tags: [tests, ci, tooling, quality]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [Structural Enforcement over Documented Rule, Green Suite Blind Spot, wikitool, Gitea Actions] related:
- exemplifies: Structural Enforcement over Documented Rule
- contrasts: Green Suite Blind Spot
- exemplifies: wikitool
- exemplifies: Gitea Actions
sources: [Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31] sources: [Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -101,26 +105,21 @@ wird sie erst auf einer fremden Maschine - und wenn niemand die Suite je woander
- Als Argument gegen Integrationstests gegen echte Systeme. Die stützen sich bewusst auf eine - Als Argument gegen Integrationstests gegen echte Systeme. Die stützen sich bewusst auf eine
Umgebung, und das ist deklariert - nicht still. Umgebung, und das ist deklariert - nicht still.
## Verwandte Concepts
- [[Green Suite Blind Spot]]
- [[Structural Enforcement over Documented Rule]]
## Beziehungen ## Beziehungen
- **abzugrenzen von:** [[Green Suite Blind Spot]]
- **behoben durch:** [[Structural Enforcement over Documented Rule]]
- **trat auf in:** [[wikitool]]
- **beobachtet an:** [[Gitea Actions]]
## Siehe auch ## Siehe auch
- [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]] - [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]]
- [[Structural Enforcement over Documented Rule]]
- [[Green Suite Blind Spot]]
- [[wikitool]]
- [[Gitea Actions]]
## Fußnoten ## Fußnoten
[^s-conversation-hardening-the-test-suite-against-silent-environment-dependencies-session-2026-08-31]: [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]] [^s-conversation-hardening-the-test-suite-against-silent-environment-dependencies-session-2026-08-31]: [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[Structural Enforcement over Documented Rule]]
- **contrasts:** [[Green Suite Blind Spot]]
- **exemplifies:** [[wikitool]]
- **exemplifies:** [[Gitea Actions]]
<!-- /wikitool:links -->
+10 -9
View File
@@ -4,7 +4,9 @@ concept_type: workflow
tags: [cramming, heuristic, pages, creation] tags: [cramming, heuristic, pages, creation]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [Content Quality Control, Iteration and Cost Limits] related:
- part-of: Content Quality Control
- see-also: Iteration and Cost Limits
sources: [Source - LLM Improvements Sonnet Analysis, Source - LLM Improvements Production Agent Gaps 2026] sources: [Source - LLM Improvements Sonnet Analysis, Source - LLM Improvements Production Agent Gaps 2026]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -46,21 +48,20 @@ Die Anti-Cramming-Heuristik ist eine Entscheidungsregel, die hilft zu bestimmen,
- Wenn das Unterthema inhärent Teil des Hauptthemas ist und eine Aufteilung künstlich wäre - Wenn das Unterthema inhärent Teil des Hauptthemas ist und eine Aufteilung künstlich wäre
- Wenn der Inhalt kurz ist und die Seite gut organisiert bleibt - Wenn der Inhalt kurz ist und die Seite gut organisiert bleibt
## Verwandte Concepts
- [[Content Quality Control]] - Breitere Qualitätsrichtlinie
- [[Split Threshold]] - Größenbasierte Aufteilungsregel
## Beziehungen ## Beziehungen
- **protected by:** [[Iteration and Cost Limits]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Sonnet Analysis]] - [[Source - LLM Improvements Sonnet Analysis]]
- [[Iteration and Cost Limits]]
- [[Source - LLM Improvements Production Agent Gaps 2026]] - [[Source - LLM Improvements Production Agent Gaps 2026]]
## Fußnoten ## Fußnoten
[^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]] [^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Content Quality Control]]
- **see-also:** [[Iteration and Cost Limits]]
<!-- /wikitool:links -->
+18 -1
View File
@@ -4,7 +4,13 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Implementation Spectrum, Multi-Agent Collaboration, Privacy and Governance, Quality and Self-Correction, Source - LLM Wiki v2, Supersession] related:
- exemplifies: Implementation Spectrum
- enables: Multi-Agent Collaboration
- part-of: Privacy and Governance
- enables: Quality and Self-Correction
- evidenced-by: Source - LLM Wiki v2
- enables: Supersession
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +44,14 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[Implementation Spectrum]]
- **enables:** [[Multi-Agent Collaboration]]
- **part-of:** [[Privacy and Governance]]
- **enables:** [[Quality and Self-Correction]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
- **enables:** [[Supersession]]
<!-- /wikitool:links -->
+12 -1
View File
@@ -4,7 +4,10 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Hybrid Search, LLM Wiki Pattern, Source - LLM Wiki v2] related:
- part-of: Hybrid Search
- see-also: LLM Wiki Pattern
- evidenced-by: Source - LLM Wiki v2
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +41,11 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Hybrid Search]]
- **see-also:** [[LLM Wiki Pattern]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
<!-- /wikitool:links -->
+10 -4
View File
@@ -4,7 +4,10 @@ concept_type: workflow
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Privacy and Governance, Implementation Spectrum, Mass-Update Gate] related:
- part-of: Privacy and Governance
- exemplifies: Implementation Spectrum
- see-also: Mass-Update Gate
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -41,9 +44,12 @@ TODO
## Beziehungen ## Beziehungen
- **ergaenzt:** [[Mass-Update Gate]]
## Siehe auch ## Siehe auch
- [[Mass-Update Gate]] <!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Privacy and Governance]]
- **exemplifies:** [[Implementation Spectrum]]
- **see-also:** [[Mass-Update Gate]]
<!-- /wikitool:links -->
+10 -9
View File
@@ -4,7 +4,9 @@ concept_type: workflow
tags: [pre-commit, hooks, automation, quality-control] tags: [pre-commit, hooks, automation, quality-control]
created: 2026-08-03 created: 2026-08-03
modified: 2026-09-01 modified: 2026-09-01
related: [wikitool, Gitea Actions] related:
- invokes: wikitool
- operates-on: Gitea Actions
sources: [Source - LLM Improvements Codex Analysis, Source - Conversation - Nightly Drift-Check Workflow and doctor's Bootstrap Gap Session 2026-08-31] sources: [Source - LLM Improvements Codex Analysis, Source - Conversation - Nightly Drift-Check Workflow and doctor's Bootstrap Gap Session 2026-08-31]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -82,24 +84,23 @@ Bootstrap-Anspruch an eine Instanz statt an einen bloßen Checkout).
## Verwandte Concepts ## Verwandte Concepts
- [[wikitool]] (stellt Lint- und andere Befehle für CI bereit)
(die Reihenfolge hinter dem Coverage-Reporting)
(CI-Gates ergänzen Runtime-Gates)
- [[Lint Workflow]] (Lint ist eine Schlüssel-CI-Prüfung) - [[Lint Workflow]] (Lint ist eine Schlüssel-CI-Prüfung)
- [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis] - [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis]
## Beziehungen ## Beziehungen
- **verwendet:** [[wikitool]]
- **implementiert über:** [[Gitea Actions]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Codex Analysis]] - [[Source - LLM Improvements Codex Analysis]]
- [[wikitool]]
- [[Gitea Actions]]
## Fußnoten ## Fußnoten
[^s-conversation-nightly-drift-check-workflow-and-doctor-s-bootstrap-gap-session-2026-08-31]: [[Source - Conversation - Nightly Drift-Check Workflow and doctor's Bootstrap Gap Session 2026-08-31]] [^s-conversation-nightly-drift-check-workflow-and-doctor-s-bootstrap-gap-session-2026-08-31]: [[Source - Conversation - Nightly Drift-Check Workflow and doctor's Bootstrap Gap Session 2026-08-31]]
[^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]] [^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **invokes:** [[wikitool]]
- **operates-on:** [[Gitea Actions]]
<!-- /wikitool:links -->
+34 -10
View File
@@ -1,5 +1,10 @@
--- ---
profile: concepts profile: concepts
outbound:
concepts: [extends, grounds, rests-on, enables, precondition, exemplifies, abstracted-from, contrasts, compares-with, contradicts, composition, part-of, supersedes, derived-from, adapted-from, see-also]
entities: [operationalized-from, mechanism, procedure, applies-when, operates-on, invokes, exemplifies, see-also]
sources: [evidenced-by, derived-from, adapted-from, defined-in, see-also]
comparisons: [compares-with, see-also]
required_by_stack: false required_by_stack: false
--- ---
@@ -22,19 +27,38 @@ tone, relationship labels, the confidence rubric. Neither is restated here.
`concept` (`tools/wikitool types describe concept`). `concept` (`tools/wikitool types describe concept`).
## Decisions and ADRs ## Decisions
An architectural decision is a concept page, prefixed as An architectural decision is an ordinary concept page with `concept_type: decision`
[kb/CONVENTIONS.md § Naming](../CONVENTIONS.md#naming) says. It records: (`tools/wikitool types describe concept`) - not a separate format, and not a separate location.
There is no `adr-NNN-`-prefixed filename and no dedicated directory: naming follows
[kb/CONVENTIONS.md § Naming](../CONVENTIONS.md#naming) like every other concept, and the page
lives in `kb/concepts/` like every other concept.
- **Context** - what forced a decision. The body is organic prose under this collection's usual sections, not a fixed template. What it
- **Decision** - what was chosen. still has to carry: what was decided, what forced the decision, what it costs (not only what it
- **Consequences** - what this costs, not only what it buys. buys), and a link to every entity the decision affects. A `**Status:**` line is optional - most
- **Status** - proposed / accepted / deprecated / superseded. decision pages in this instance carry none, because the page's own prose already says whether the
- Links to every entity the decision affects. decision stands.
A superseded ADR is never deleted or rewritten; a new one supersedes it and both link to the A decision superseded by a later one is never deleted or rewritten. The new page declares
other with `replaces` / `replaced by`. `supersedes` pointing at it; the old one needs no edge back, because its inbound view renders the
replacement.
`concept_type: decision` is also the one subtype [kb/CONTRACT.md](../CONTRACT.md)'s confidence
machinery treats differently: `confidence decay` skips it structurally, because elapsed time does
not falsify a decision - only a later decision superseding it does.
## Authorised labels
The `outbound:` block above is what `wikitool lint` and `xref add` check: which labels a page in
this collection may use, per destination. The catalogue they are drawn from - and what each one
asserts - is [instructions/link-taxonomy.md](../../instructions/link-taxonomy.md), which binds
nothing on its own.
The widest authorisation in this instance, because argumentation is what concept pages do. Note that the operational labels are absent: a concept does not `depend-on` anything - the entity implementing it does.
Adding a label here is a deliberate contract change, not a way around a refusal.
## Outbound linking ## Outbound linking
+11 -5
View File
@@ -4,7 +4,10 @@ concept_type: protocol
tags: [power-management, cpu, amd, hardware] tags: [power-management, cpu, amd, hardware]
created: 2026-07-31 created: 2026-07-31
modified: 2026-08-29 modified: 2026-08-29
related: [Linux Kernel, amd-pstate, Kernel PM Governors] related:
- see-also: Linux Kernel
- mechanism: amd-pstate
- see-also: Kernel PM Governors
sources: [Source - AMD Powermanagement CPU] sources: [Source - AMD Powermanagement CPU]
confidence: 0.95 confidence: 0.95
confidence_base: 0.95 confidence_base: 0.95
@@ -75,7 +78,10 @@ CPPC bietet mehrere Schlüsselmöglichkeiten:
## Siehe auch ## Siehe auch
- [[amd-pstate]] <!-- wikitool:links -->
- [[acpi-cpufreq]] ## Beziehungen
- [[Kernel PM Governors]]
- [[Linux Kernel]] - **see-also:** [[Linux Kernel]]
- **mechanism:** [[amd-pstate]]
- **see-also:** [[Kernel PM Governors]]
<!-- /wikitool:links -->
+10 -1
View File
@@ -4,7 +4,9 @@ concept_type: workflow
tags: [audit, checkpoint, rhythm, quality] tags: [audit, checkpoint, rhythm, quality]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [Semantic Lint Automation, Content Quality Control] related:
- see-also: Semantic Lint Automation
- part-of: Content Quality Control
sources: [Source - LLM Improvements Sonnet Analysis] sources: [Source - LLM Improvements Sonnet Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -64,3 +66,10 @@ Das Checkpoint Audit definiert einen regelmäßigen Rhythmus für Qualitätssich
## Fußnoten ## Fußnoten
[^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]] [^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Semantic Lint Automation]]
- **part-of:** [[Content Quality Control]]
<!-- /wikitool:links -->
+10 -6
View File
@@ -4,7 +4,9 @@ concept_type: workflow
tags: [claude-code, permissions, auto-mode, harness, classifier] tags: [claude-code, permissions, auto-mode, harness, classifier]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [Claude Code, Diff-Reviewable Agent Edits] related:
- mechanism: Claude Code
- contradicts: Diff-Reviewable Agent Edits
sources: [Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31] sources: [Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -96,15 +98,17 @@ ist hier also die eingebaute Voreinstellung, keine getroffene Wahl.
## Beziehungen ## Beziehungen
- **wird umgesetzt von:** [[Claude Code]]
- **steht in Konflikt mit:** [[Diff-Reviewable Agent Edits]]
## Siehe auch ## Siehe auch
- [[Claude Code]]
- [[Diff-Reviewable Agent Edits]]
- [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]] - [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]]
## Fußnoten ## Fußnoten
[^s-conversation-auto-mode-and-tool-choice-session-2026-08-31]: [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]] [^s-conversation-auto-mode-and-tool-choice-session-2026-08-31]: [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[Claude Code]]
- **contradicts:** [[Diff-Reviewable Agent Edits]]
<!-- /wikitool:links -->
+16 -16
View File
@@ -4,7 +4,12 @@ concept_type: pattern
tags: [wikitool, cli, idempotenz, tooling, datenintegritaet] tags: [wikitool, cli, idempotenz, tooling, datenintegritaet]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [wikitool, Self-Healing, Detect-Repair Asymmetry, Green Suite Blind Spot, Write-Once Frontmatter Fields] related:
- exemplifies: wikitool
- enables: Self-Healing
- contrasts: Detect-Repair Asymmetry
- see-also: Green Suite Blind Spot
- contrasts: Write-Once Frontmatter Fields
sources: [Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31] sources: [Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -93,29 +98,24 @@ Seite, die kein Befehl mehr reparieren kann, ist eine Sackgasse.
- Als Argument gegen anhängende Schreibvorgänge überhaupt. Das Problem war nicht das Anhängen - Als Argument gegen anhängende Schreibvorgänge überhaupt. Das Problem war nicht das Anhängen
am Dateiende, sondern ein Leser, der alles dahinter als seinen Bereich betrachtete. am Dateiende, sondern ein Leser, der alles dahinter als seinen Bereich betrachtete.
## Verwandte Concepts
- [[Detect-Repair Asymmetry]]
- [[Self-Healing]]
- [[Green Suite Blind Spot]]
## Beziehungen ## Beziehungen
- **tritt auf in:** [[wikitool]]
- **erzeugt:** [[Self-Healing]]
- **abgegrenzt gegen:** [[Detect-Repair Asymmetry]]
- **wird begünstigt durch:** [[Green Suite Blind Spot]]
- **abgegrenzt gegen:** [[Write-Once Frontmatter Fields]]
## Siehe auch ## Siehe auch
- [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]] - [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
- [[wikitool]]
- [[Self-Healing]]
- [[Detect-Repair Asymmetry]]
- [[Green Suite Blind Spot]] - [[Green Suite Blind Spot]]
- [[Write-Once Frontmatter Fields]] - [[Write-Once Frontmatter Fields]]
## Fußnoten ## Fußnoten
[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]] [^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[wikitool]]
- **enables:** [[Self-Healing]]
- **contrasts:** [[Detect-Repair Asymmetry]]
- **see-also:** [[Green Suite Blind Spot]]
- **contrasts:** [[Write-Once Frontmatter Fields]]
<!-- /wikitool:links -->
+10 -1
View File
@@ -4,7 +4,9 @@ concept_type: pattern
tags: [confidence, scoring, reliability, knowledge-management] tags: [confidence, scoring, reliability, knowledge-management]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [Memory Lifecycle, LLM Wiki Pattern] related:
- part-of: Memory Lifecycle
- exemplifies: LLM Wiki Pattern
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.95 confidence: 0.95
confidence_base: 0.95 confidence_base: 0.95
@@ -128,3 +130,10 @@ Aussage: „Das CI-System verwendet BuildKit auf Port 1234." (als Tatsache angeg
- [[Event-Driven Automation]] (für automatisierte Konfidenz-Updates) - [[Event-Driven Automation]] (für automatisierte Konfidenz-Updates)
- [[Contradiction Resolution]] (für Konfliktbehandlung) - [[Contradiction Resolution]] (für Konfliktbehandlung)
- [[Self-Healing]] (für automatisierte Konfidenz-Reparatur) - [[Self-Healing]] (für automatisierte Konfidenz-Reparatur)
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Memory Lifecycle]]
- **exemplifies:** [[LLM Wiki Pattern]]
<!-- /wikitool:links -->
+18 -7
View File
@@ -4,7 +4,13 @@ concept_type: architecture
tags: [memory, tiers, consolidation, knowledge-management] tags: [memory, tiers, consolidation, knowledge-management]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [Memory Lifecycle, Working Memory, Episodic Memory, Semantic Memory, Procedural Memory, LLM Wiki Pattern] related:
- part-of: Memory Lifecycle
- composition: Working Memory
- composition: Episodic Memory
- composition: Semantic Memory
- composition: Procedural Memory
- exemplifies: LLM Wiki Pattern
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.95 confidence: 0.95
confidence_base: 0.95 confidence_base: 0.95
@@ -189,12 +195,6 @@ Basierend auf [[Agent Memory]]-Erfahrung:
## Verwandte Konzepte ## Verwandte Konzepte
- [[Memory Lifecycle]] - Übergeordnetes Konzept
- [[Working Memory]] - Ebene 1
- [[Episodic Memory]] - Ebene 2
- [[Semantic Memory]] - Ebene 3
- [[Procedural Memory]] - Ebene 4
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[Agent Memory]] - Produktive Implementierung - [[Agent Memory]] - Produktive Implementierung
- [[Forgetting]] - Ergänzender Aufbewahrungsmechanismus - [[Forgetting]] - Ergänzender Aufbewahrungsmechanismus
@@ -203,3 +203,14 @@ Basierend auf [[Agent Memory]]-Erfahrung:
- [[Confidence Scoring]] (für ebenenspezifische Konfidenz) - [[Confidence Scoring]] (für ebenenspezifische Konfidenz)
- [[Event-Driven Automation]] (für Förderungstrigger) - [[Event-Driven Automation]] (für Förderungstrigger)
- [[Knowledge Graph]] (für ebenenübergreifende Beziehungen) - [[Knowledge Graph]] (für ebenenübergreifende Beziehungen)
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Memory Lifecycle]]
- **composition:** [[Working Memory]]
- **composition:** [[Episodic Memory]]
- **composition:** [[Semantic Memory]]
- **composition:** [[Procedural Memory]]
- **exemplifies:** [[LLM Wiki Pattern]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: workflow
tags: [quality, lint, thresholds, pages] tags: [quality, lint, thresholds, pages]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [Semantic Lint Automation, Stub Threshold, Split Threshold] related:
- composition: Semantic Lint Automation
- composition: Stub Threshold
- composition: Split Threshold
sources: [Source - LLM Improvements Sonnet Analysis] sources: [Source - LLM Improvements Sonnet Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -45,9 +48,6 @@ Content Quality Control bezieht sich auf die Menge der Regeln, Schwellwerte und
## Verwandte Konzepte ## Verwandte Konzepte
- [[Semantic Lint Automation]] - Automatisierte semantische Überprüfungen, die Qualitätsschwellwerte beinhalten könnten
- [[Stub Threshold]] - Spezifische Mindestanforderung an Inhalte
- [[Split Threshold]] - Spezifische maximale Größe vor dem Aufteilen
- [[Index Scaling]] - Verwandte Skalierungsüberlegungen für die Index-Seite - [[Index Scaling]] - Verwandte Skalierungsüberlegungen für die Index-Seite
## Siehe auch ## Siehe auch
@@ -57,3 +57,11 @@ Content Quality Control bezieht sich auf die Menge der Regeln, Schwellwerte und
## Fußnoten ## Fußnoten
[^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]] [^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **composition:** [[Semantic Lint Automation]]
- **composition:** [[Stub Threshold]]
- **composition:** [[Split Threshold]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: architecture
tags: [context, isolation, efficiency] tags: [context, isolation, efficiency]
created: 2026-08-04 created: 2026-08-04
modified: 2026-08-29 modified: 2026-08-29
related: [] related:
- see-also: Token Economics
- see-also: Scale Ceiling
- see-also: Workflow Extraction
sources: [Source - Copilot Skill Restructure Instructions, Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04] sources: [Source - Copilot Skill Restructure Instructions, Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -50,9 +53,6 @@ Context Isolation ist weniger wirksam, wenn:
## Verwandte Konzepte ## Verwandte Konzepte
- [[Cross-platform Agent Skills]] - [[Cross-platform Agent Skills]]
- [[Token Economics]]
- [[Scale Ceiling]]
- [[Workflow Extraction]]
## Siehe auch ## Siehe auch
@@ -61,3 +61,11 @@ Context Isolation ist weniger wirksam, wenn:
## Fußnoten ## Fußnoten
[^s-copilot-skill-restructure-instructions]: [[Source - Copilot Skill Restructure Instructions]] [^s-copilot-skill-restructure-instructions]: [[Source - Copilot Skill Restructure Instructions]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Token Economics]]
- **see-also:** [[Scale Ceiling]]
- **see-also:** [[Workflow Extraction]]
<!-- /wikitool:links -->
+18 -1
View File
@@ -4,7 +4,13 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Confidence Scoring, Event-Driven Automation, Multi-Agent Collaboration, Quality and Self-Correction, Source - LLM Wiki v2, Supersession] related:
- rests-on: Confidence Scoring
- see-also: Event-Driven Automation
- see-also: Multi-Agent Collaboration
- part-of: Quality and Self-Correction
- evidenced-by: Source - LLM Wiki v2
- enables: Supersession
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +44,14 @@ TODO
## Verwandte Konzepte ## Verwandte Konzepte
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **rests-on:** [[Confidence Scoring]]
- **see-also:** [[Event-Driven Automation]]
- **see-also:** [[Multi-Agent Collaboration]]
- **part-of:** [[Quality and Self-Correction]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
- **enables:** [[Supersession]]
<!-- /wikitool:links -->
+14 -8
View File
@@ -4,7 +4,11 @@ concept_type: architecture
tags: [skills, agents, cross-platform] tags: [skills, agents, cross-platform]
created: 2026-08-04 created: 2026-08-04
modified: 2026-09-01 modified: 2026-09-01
related: [] related:
- rests-on: Context Isolation
- rests-on: Token Economics
- see-also: Scale Ceiling
- see-also: Workflow Extraction
sources: [Source - Copilot Skill Restructure Instructions, Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04] sources: [Source - Copilot Skill Restructure Instructions, Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -66,13 +70,6 @@ Dieses Muster vermeiden, wenn:
- Workflows so eng gekoppelt sind, dass sie nicht sauber unterteilt werden können - Workflows so eng gekoppelt sind, dass sie nicht sauber unterteilt werden können
- der Overhead für die Verwaltung der Skill-Struktur die Vorteile überwiegt - der Overhead für die Verwaltung der Skill-Struktur die Vorteile überwiegt
## Verwandte Konzepte
- [[Token Economics]]
- [[Scale Ceiling]]
- [[Context Isolation]]
- [[Workflow Extraction]]
## Siehe auch ## Siehe auch
- [[Source - Copilot Skill Restructure Instructions]] - [[Source - Copilot Skill Restructure Instructions]]
@@ -82,3 +79,12 @@ Dieses Muster vermeiden, wenn:
[^s-copilot-skill-restructure-instructions]: [[Source - Copilot Skill Restructure Instructions]] [^s-copilot-skill-restructure-instructions]: [[Source - Copilot Skill Restructure Instructions]]
[^s-conversation-agents-md-skill-restructuring-session-2026-08-04]: [[Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04]] [^s-conversation-agents-md-skill-restructuring-session-2026-08-04]: [[Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04]]
<!-- wikitool:links -->
## Beziehungen
- **rests-on:** [[Context Isolation]]
- **rests-on:** [[Token Economics]]
- **see-also:** [[Scale Ceiling]]
- **see-also:** [[Workflow Extraction]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: workflow
tags: [crystallization, knowledge, distillation, workflow] tags: [crystallization, knowledge, distillation, workflow]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Memory Lifecycle, Event-Driven Automation] related:
- exemplifies: LLM Wiki Pattern
- part-of: Memory Lifecycle
- rests-on: Event-Driven Automation
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.85 confidence: 0.85
confidence_base: 0.85 confidence_base: 0.85
@@ -138,9 +141,6 @@ Mit [[Event-Driven Automation]] integrieren:
## Verwandte Konzepte ## Verwandte Konzepte
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[Memory Lifecycle]] - Wie kristallisiertes Wissen verwaltet wird
- [[Event-Driven Automation]] - Für automatische Crystallization
- [[Consolidation Tiers]] - Wo kristallisiertes Wissen befördert wird - [[Consolidation Tiers]] - Wo kristallisiertes Wissen befördert wird
- [[Knowledge Compounding]] - Der Gesamteffekt - [[Knowledge Compounding]] - Der Gesamteffekt
@@ -148,3 +148,11 @@ Mit [[Event-Driven Automation]] integrieren:
- [[Implementation Spectrum]] (Crystallization als erweiterte Funktion) - [[Implementation Spectrum]] (Crystallization als erweiterte Funktion)
- [[Quality and Self-Correction]] (Sicherung der Qualität kristallisierten Inhalts) - [[Quality and Self-Correction]] (Sicherung der Qualität kristallisierten Inhalts)
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[LLM Wiki Pattern]]
- **part-of:** [[Memory Lifecycle]]
- **rests-on:** [[Event-Driven Automation]]
<!-- /wikitool:links -->
+7 -4
View File
@@ -4,7 +4,8 @@ concept_type: decision
tags: [] tags: []
created: 2026-09-01 created: 2026-09-01
modified: 2026-09-01 modified: 2026-09-01
related: [Chemenu] related:
- operates-on: Chemenu
sources: ['Source - Public Release, Corpus Purge and History Squash Session 2026-09-01', Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01] sources: ['Source - Public Release, Corpus Purge and History Squash Session 2026-09-01', Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -63,11 +64,13 @@ sonst unverändertem Inhalt) vorzuziehen - wenn ein unterstütztes Löschkommand
## Beziehungen ## Beziehungen
- **gilt fuer:** [[Chemenu]]
## Siehe auch ## Siehe auch
- [[Source - Public Release, Corpus Purge and History Squash Session 2026-09-01]] - [[Source - Public Release, Corpus Purge and History Squash Session 2026-09-01]]
- [[Chemenu]]
- [[Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01]] - [[Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01]]
<!-- wikitool:links -->
## Beziehungen
- **operates-on:** [[Chemenu]]
<!-- /wikitool:links -->
+12 -10
View File
@@ -4,7 +4,10 @@ concept_type: decision
tags: [schema, tooling, cli, design-rule] tags: [schema, tooling, cli, design-rule]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [wikitool, Write-Once Frontmatter Fields, AGENTS.md, Green Suite Blind Spot] related:
- mechanism: wikitool
- grounds: Write-Once Frontmatter Fields
- see-also: Green Suite Blind Spot
sources: [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] sources: [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]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -83,21 +86,20 @@ Angenommen (2026-08-31) mit Stack-Version `1.4.0`, Commit
## Beziehungen ## Beziehungen
- **umgesetzt in:** [[wikitool]]
- **begründet die Lösung von:** [[Write-Once Frontmatter Fields]]
- **beruft sich auf:** [[AGENTS.md]]
- **verwandt mit:** [[Green Suite Blind Spot]]
## Siehe auch ## Siehe auch
- [[wikitool]]
- [[Write-Once Frontmatter Fields]]
- [[AGENTS.md]]
- [[Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31]] - [[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]] - [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
- [[Green Suite Blind Spot]]
## Fußnoten ## Fußnoten
[^s-conversation-write-once-frontmatter-fields-and-touch-set-session-2026-08-31]: [[Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31]] [^s-conversation-write-once-frontmatter-fields-and-touch-set-session-2026-08-31]: [[Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31]]
[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]] [^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[wikitool]]
- **grounds:** [[Write-Once Frontmatter Fields]]
- **see-also:** [[Green Suite Blind Spot]]
<!-- /wikitool:links -->
+18 -19
View File
@@ -4,7 +4,13 @@ concept_type: problem
tags: [tooling, lint, provenance, hand-edit, gap] tags: [tooling, lint, provenance, hand-edit, gap]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [wikitool, Lint Workflow, Self-Healing, Issue Label Scheme, Write-Once Frontmatter Fields, Command Round-Trip Integrity] related:
- exemplifies: wikitool
- rests-on: Lint Workflow
- contrasts: Self-Healing
- see-also: Issue Label Scheme
- contrasts: Write-Once Frontmatter Fields
- contrasts: Command Round-Trip Integrity
sources: [Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31, Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31, 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] sources: [Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31, Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31, 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]
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -102,34 +108,27 @@ auftritt.
- Als Begründung, einen Check wegzulassen, bis die Reparatur fertig ist. Ein gemeldeter Defekt - Als Begründung, einen Check wegzulassen, bis die Reparatur fertig ist. Ein gemeldeter Defekt
ohne Reparatur ist immer noch besser als ein unbemerkter. ohne Reparatur ist immer noch besser als ein unbemerkter.
## Verwandte Concepts
- [[Self-Healing]]
- [[Lint Workflow]]
## Beziehungen ## Beziehungen
- **abgegrenzt gegen:** [[Write-Once Frontmatter Fields]]
- **tritt auf in:** [[wikitool]]
- **wird sichtbar durch:** [[Lint Workflow]]
- **abgegrenzt gegen:** [[Self-Healing]]
- **verwandt mit:** [[Issue Label Scheme]]
- **abgegrenzt gegen:** [[Command Round-Trip Integrity]]
## Siehe auch ## Siehe auch
- [[Write-Once Frontmatter Fields]]
- [[wikitool]]
- [[Lint Workflow]]
- [[Self-Healing]]
- [[Issue Label Scheme]]
- [[Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31]] - [[Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31]]
- [[Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31]] - [[Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31]]
- [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]] - [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
- [[Command Round-Trip Integrity]]
## Fußnoten ## Fußnoten
[^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]] [^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]]
[^s-conversation-write-once-frontmatter-fields-and-touch-set-session-2026-08-31]: [[Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31]] [^s-conversation-write-once-frontmatter-fields-and-touch-set-session-2026-08-31]: [[Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31]]
[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]] [^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[wikitool]]
- **rests-on:** [[Lint Workflow]]
- **contrasts:** [[Self-Healing]]
- **see-also:** [[Issue Label Scheme]]
- **contrasts:** [[Write-Once Frontmatter Fields]]
- **contrasts:** [[Command Round-Trip Integrity]]
<!-- /wikitool:links -->
+12 -8
View File
@@ -4,7 +4,10 @@ concept_type: decision
tags: [agent-workflow, context-engineering, tooling] tags: [agent-workflow, context-engineering, tooling]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [Claude Code Auto Mode, Claude Code, Write-Once Frontmatter Fields] related:
- see-also: Claude Code Auto Mode
- operates-on: Claude Code
- derived-from: Write-Once Frontmatter Fields
sources: [Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31] sources: [Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -75,17 +78,18 @@ Angenommen (2026-08-31), auf Anweisung des Nutzers, für Sitzungen an diesem Rep
## Beziehungen ## Beziehungen
- **korrigiert:** [[Claude Code Auto Mode]]
- **gilt für:** [[Claude Code]]
- **war betroffen von:** [[Write-Once Frontmatter Fields]]
## Siehe auch ## Siehe auch
- [[Claude Code Auto Mode]]
- [[Claude Code]]
- [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]] - [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]]
- [[Write-Once Frontmatter Fields]]
## Fußnoten ## Fußnoten
[^s-conversation-auto-mode-and-tool-choice-session-2026-08-31]: [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]] [^s-conversation-auto-mode-and-tool-choice-session-2026-08-31]: [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Claude Code Auto Mode]]
- **operates-on:** [[Claude Code]]
- **derived-from:** [[Write-Once Frontmatter Fields]]
<!-- /wikitool:links -->
+7 -8
View File
@@ -4,7 +4,8 @@ concept_type: decision
tags: [] tags: []
created: 2026-09-01 created: 2026-09-01
modified: 2026-09-01 modified: 2026-09-01
related: [Chemenu] related:
- operates-on: Chemenu
sources: ['Source - Public Release, Corpus Purge and History Squash Session 2026-09-01'] sources: ['Source - Public Release, Corpus Purge and History Squash Session 2026-09-01']
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -56,16 +57,14 @@ Distributions-/Build-Werkzeug ohnehin pflegt.
separate, maschinell nachvollziehbare Grenze existiert - dort wäre die Lizenz-Zuordnung selbst separate, maschinell nachvollziehbare Grenze existiert - dort wäre die Lizenz-Zuordnung selbst
wieder eine unabhängige, drift-anfällige Liste. wieder eine unabhängige, drift-anfällige Liste.
## Verwandte Concepts
- [[Chemenu]]
## Beziehungen ## Beziehungen
- **gilt fuer:** [[Chemenu]]
## Siehe auch ## Siehe auch
- [[Source - Public Release, Corpus Purge and History Squash Session 2026-09-01]] - [[Source - Public Release, Corpus Purge and History Squash Session 2026-09-01]]
- [[Chemenu]]
<!-- wikitool:links -->
## Beziehungen
- **operates-on:** [[Chemenu]]
<!-- /wikitool:links -->
+11 -2
View File
@@ -4,7 +4,10 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Implementation Spectrum, Knowledge Graph, Source - LLM Wiki v2] related:
- exemplifies: Implementation Spectrum
- enables: Knowledge Graph
- evidenced-by: Source - LLM Wiki v2
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -37,4 +40,10 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO <!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[Implementation Spectrum]]
- **enables:** [[Knowledge Graph]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
<!-- /wikitool:links -->
+7 -2
View File
@@ -4,7 +4,8 @@ concept_type: architecture
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Consolidation Tiers] related:
- part-of: Consolidation Tiers
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -37,4 +38,8 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO <!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Consolidation Tiers]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: workflow
tags: [automation, hooks, events, workflow] tags: [automation, hooks, events, workflow]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Memory Lifecycle, Hooks] related:
- exemplifies: LLM Wiki Pattern
- enables: Memory Lifecycle
- rests-on: Hooks
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.95 confidence: 0.95
confidence_base: 0.95 confidence_base: 0.95
@@ -169,9 +172,6 @@ Mit **Stufe 2 (Basis)** beginnen und Ereignisse nach Bedarf hinzufügen:
## Verwandte Concepts ## Verwandte Concepts
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[Memory Lifecycle]] - Was Automatisierung verwaltet
- [[Hooks]] - Der Implementierungsmechanismus
- [[Agent Memory]] - Produktionsimplementierung - [[Agent Memory]] - Produktionsimplementierung
- [[Quality and Self-Correction]] - Ergänzende Qualitätsmechanismen - [[Quality and Self-Correction]] - Ergänzende Qualitätsmechanismen
@@ -183,3 +183,11 @@ Mit **Stufe 2 (Basis)** beginnen und Ereignisse nach Bedarf hinzufügen:
- [[Forgetting]] (angewandt durch Automatisierung) - [[Forgetting]] (angewandt durch Automatisierung)
- [[Hybrid Search]] (verwendet in Query-Automatisierung) - [[Hybrid Search]] (verwendet in Query-Automatisierung)
- [[Contradiction Resolution]] (ausgelöst durch Automatisierung) - [[Contradiction Resolution]] (ausgelöst durch Automatisierung)
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[LLM Wiki Pattern]]
- **enables:** [[Memory Lifecycle]]
- **rests-on:** [[Hooks]]
<!-- /wikitool:links -->
+9 -2
View File
@@ -4,7 +4,9 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Implementation Spectrum, Privacy and Governance] related:
- exemplifies: Implementation Spectrum
- part-of: Privacy and Governance
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -37,4 +39,9 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO <!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[Implementation Spectrum]]
- **part-of:** [[Privacy and Governance]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: pattern
tags: [memory, retention, decay, ebbinghaus] tags: [memory, retention, decay, ebbinghaus]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [Memory Lifecycle, Confidence Scoring, Consolidation Tiers] related:
- part-of: Memory Lifecycle
- see-also: Confidence Scoring
- rests-on: Consolidation Tiers
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -149,9 +152,6 @@ Fakten mit niedrigerer Priorität:
## Verwandte Concepts ## Verwandte Concepts
- [[Memory Lifecycle]] - Übergeordnetes Concept
- [[Confidence Scoring]] - Ergänzender Zuverlässigkeitsmechanismus
- [[Consolidation Tiers]] - Tier-spezifische Verfallsraten
- [[Supersession]] - Umgang mit veralteten Informationen - [[Supersession]] - Umgang mit veralteten Informationen
- [[LLM Wiki Pattern]] - Gesamtmuster - [[LLM Wiki Pattern]] - Gesamtmuster
@@ -159,3 +159,11 @@ Fakten mit niedrigerer Priorität:
- [[Event-Driven Automation]] (für automatisiertes Verstärkungstracking) - [[Event-Driven Automation]] (für automatisiertes Verstärkungstracking)
- [[Quality and Self-Correction]] (für verwandte Qualitätsmechanismen) - [[Quality and Self-Correction]] (für verwandte Qualitätsmechanismen)
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Memory Lifecycle]]
- **see-also:** [[Confidence Scoring]]
- **rests-on:** [[Consolidation Tiers]]
<!-- /wikitool:links -->
+13 -2
View File
@@ -4,7 +4,11 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Hybrid Search, Knowledge Graph, LLM Wiki Pattern, Source - LLM Wiki v2] related:
- part-of: Hybrid Search
- rests-on: Knowledge Graph
- exemplifies: LLM Wiki Pattern
- evidenced-by: Source - LLM Wiki v2
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -37,4 +41,11 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO <!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Hybrid Search]]
- **rests-on:** [[Knowledge Graph]]
- **exemplifies:** [[LLM Wiki Pattern]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
<!-- /wikitool:links -->
+16 -15
View File
@@ -4,7 +4,12 @@ concept_type: problem
tags: [tests, regression, tooling, quality] tags: [tests, regression, tooling, quality]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [Command Round-Trip Integrity, wikitool, Denylist over Allowlist, Ambient Environment Dependency, Lint Workflow] related:
- see-also: Command Round-Trip Integrity
- exemplifies: wikitool
- see-also: Denylist over Allowlist
- see-also: Ambient Environment Dependency
- rests-on: Lint Workflow
sources: [Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31, Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31] sources: [Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31, Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -110,30 +115,26 @@ widersprechen: jede für sich ist getestet, das Zusammenspiel hat nie jemand auf
## Verwandte Concepts ## Verwandte Concepts
- [[Command Round-Trip Integrity]]
- [[Denylist over Allowlist]]
- [[Ambient Environment Dependency]]
- [[Structural Enforcement over Documented Rule]] - [[Structural Enforcement over Documented Rule]]
## Beziehungen ## Beziehungen
- **begünstigt:** [[Command Round-Trip Integrity]]
- **trat auf in:** [[wikitool]]
- **belegt an:** [[Denylist over Allowlist]]
- **abzugrenzen von:** [[Ambient Environment Dependency]]
- **belegt an:** [[Lint Workflow]]
## Siehe auch ## Siehe auch
- [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]] - [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
- [[Command Round-Trip Integrity]]
- [[wikitool]]
- [[Denylist over Allowlist]]
- [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]] - [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]]
- [[Ambient Environment Dependency]]
- [[Lint Workflow]]
## Fußnoten ## Fußnoten
[^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]] [^s-conversation-two-round-trip-defects-found-by-an-ingest-session-2026-08-31]: [[Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31]]
[^s-conversation-hardening-the-test-suite-against-silent-environment-dependencies-session-2026-08-31]: [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]] [^s-conversation-hardening-the-test-suite-against-silent-environment-dependencies-session-2026-08-31]: [[Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Command Round-Trip Integrity]]
- **exemplifies:** [[wikitool]]
- **see-also:** [[Denylist over Allowlist]]
- **see-also:** [[Ambient Environment Dependency]]
- **rests-on:** [[Lint Workflow]]
<!-- /wikitool:links -->
+10 -3
View File
@@ -4,7 +4,9 @@ concept_type: workflow
tags: [automation, events, triggers, workflow] tags: [automation, events, triggers, workflow]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [Event-Driven Automation, LLM Wiki Pattern] related:
- grounds: Event-Driven Automation
- exemplifies: LLM Wiki Pattern
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.85 confidence: 0.85
confidence_base: 0.85 confidence_base: 0.85
@@ -129,8 +131,6 @@ Hooks sollten **robust** sein:
## Verwandte Concepts ## Verwandte Concepts
- [[Event-Driven Automation]] - Das Gesamtautomatisierungs-Framework
- [[LLM Wiki Pattern]] - Das übergeordnete Muster
- [[Memory Lifecycle]] - Was Hooks helfen zu verwalten - [[Memory Lifecycle]] - Was Hooks helfen zu verwalten
- [[Quality and Self-Correction]] - Qualitätsbezogene Hooks - [[Quality and Self-Correction]] - Qualitätsbezogene Hooks
@@ -140,3 +140,10 @@ Hooks sollten **robust** sein:
- [[Consolidation Tiers]] (hochgestuft durch Hooks) - [[Consolidation Tiers]] (hochgestuft durch Hooks)
- [[Forgetting]] (angewandt durch Hooks) - [[Forgetting]] (angewandt durch Hooks)
- [[Confidence Scoring]] (aktualisiert durch Hooks) - [[Confidence Scoring]] (aktualisiert durch Hooks)
<!-- wikitool:links -->
## Beziehungen
- **grounds:** [[Event-Driven Automation]]
- **exemplifies:** [[LLM Wiki Pattern]]
<!-- /wikitool:links -->
+18 -7
View File
@@ -4,7 +4,13 @@ concept_type: architecture
tags: [search, bm25, vector, graph, scalability] tags: [search, bm25, vector, graph, scalability]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, BM25, Vector Search, Reciprocal Rank Fusion, Knowledge Graph, Graph Traversal] related:
- exemplifies: LLM Wiki Pattern
- see-also: BM25
- composition: Vector Search
- composition: Reciprocal Rank Fusion
- rests-on: Knowledge Graph
- see-also: Graph Traversal
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -115,15 +121,20 @@ Abfrage: "Wie funktioniert das Auth-System?"
## Verwandte Concepts ## Verwandte Concepts
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[BM25]] - Schlüsselwortabgleich-Komponente
- [[Vector Search]] - Semantische Ähnlichkeits-Komponente
- [[Reciprocal Rank Fusion]] - Fusionsalgorithmus
- [[Knowledge Graph]] - Graph-Traversal-Komponente
- [[Graph Traversal]] - Der Graph-Suchmechanismus
- [[Agent Memory]] - Produktionsimplementierung - [[Agent Memory]] - Produktionsimplementierung
## Siehe auch ## Siehe auch
- [[Event-Driven Automation]] (für automatisierte Indizierung) - [[Event-Driven Automation]] (für automatisierte Indizierung)
- Scalable Search (verwandtes Concept) - Scalable Search (verwandtes Concept)
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[LLM Wiki Pattern]]
- **see-also:** [[BM25]]
- **composition:** [[Vector Search]]
- **composition:** [[Reciprocal Rank Fusion]]
- **rests-on:** [[Knowledge Graph]]
- **see-also:** [[Graph Traversal]]
<!-- /wikitool:links -->
+1 -1
View File
@@ -41,7 +41,7 @@
| [[Hybrid Search]] | architecture | Multimodale Suche, die BM25-Schlüsselwortabgleich, Vektor-Embeddings und Graph Traversal verbindet, um Wissensabruf im Wiki skalierbar zu machen. | 2026-08-29 | | [[Hybrid Search]] | architecture | Multimodale Suche, die BM25-Schlüsselwortabgleich, Vektor-Embeddings und Graph Traversal verbindet, um Wissensabruf im Wiki skalierbar zu machen. | 2026-08-29 |
| [[Implementation Spectrum]] | architecture | Modularer Einführungspfad für die Funktionen von LLM Wiki v2, vom minimal tragfähigen Wiki bis zur vollen Umsetzung mit Automatisierung und Governance. | 2026-08-29 | | [[Implementation Spectrum]] | architecture | Modularer Einführungspfad für die Funktionen von LLM Wiki v2, vom minimal tragfähigen Wiki bis zur vollen Umsetzung mit Automatisierung und Governance. | 2026-08-29 |
| [[Index Scaling]] | workflow | Skalierungsregeln für Indexseiten: Tabellenabschnitte ab 50 Einträgen teilen, ab 200 Seiten _meta/topic-map.md anlegen | 2026-08-29 | | [[Index Scaling]] | workflow | Skalierungsregeln für Indexseiten: Tabellenabschnitte ab 50 Einträgen teilen, ab 200 Seiten _meta/topic-map.md anlegen | 2026-08-29 |
| [[Issue Label Scheme]] | decision | Zweiachsiges Pflicht-Labelschema fuer das Gitea-Board: prio/1..3 und size/XS..L, bewusst keine dritte Achse; die Regel liegt in instructions/dev/, weil sie keine ausgelieferte Instanz erreichen darf | 2026-08-31 | | [[Issue Label Scheme]] | decision | Pflicht-Labelschema fuer das Gitea-Board: seit 2026-09-02 vier Achsen (area/kind/prio/size) plus zwei optionale status/-Flags, dazu der Issue-Body als aktuelle Wahrheit; die Regel liegt in instructions/dev/, weil sie keine ausgelieferte Instanz erreichen darf | 2026-09-02 |
| [[Iteration and Cost Limits]] | workflow | Im Code durchgesetzte Obergrenze von 60 wikitool-Aufrufen je Session, Loop-Breaker bei 3 identischen Wiederholungen, Slot-Erstattung, ein gemessenes Kalibrierungsband, und Retrieval sowie der MCP-Leseserver bleiben ausgenommen | 2026-09-02 | | [[Iteration and Cost Limits]] | workflow | Im Code durchgesetzte Obergrenze von 60 wikitool-Aufrufen je Session, Loop-Breaker bei 3 identischen Wiederholungen, Slot-Erstattung, ein gemessenes Kalibrierungsband, und Retrieval sowie der MCP-Leseserver bleiben ausgenommen | 2026-09-02 |
| [[KB Migration]] | workflow | Migration des KB-Inhalts entlang einer geordneten Versionskette; abgegrenzt gegen offene Instanz-Aktionen, die in den doctor-Check gehoeren statt in die Kette | 2026-08-31 | | [[KB Migration]] | workflow | Migration des KB-Inhalts entlang einer geordneten Versionskette; abgegrenzt gegen offene Instanz-Aktionen, die in den doctor-Check gehoeren statt in die Kette | 2026-08-31 |
| [[KB Stack Versioning]] | decision | Semantische Versionierung des Wiki-Stacks: VERSION beschreibt die Maschinerie, Kompatibilitaet (Drop-in-Ersatz) und Inhaltsmigration sind seit 2.5.0 getrennte, unabhaengig geprueft Fragen | 2026-09-02 | | [[KB Stack Versioning]] | decision | Semantische Versionierung des Wiki-Stacks: VERSION beschreibt die Maschinerie, Kompatibilitaet (Drop-in-Ersatz) und Inhaltsmigration sind seit 2.5.0 getrennte, unabhaengig geprueft Fragen | 2026-09-02 |
+20 -8
View File
@@ -4,7 +4,14 @@ concept_type: architecture
tags: [implementation, modular, levels, adoption] tags: [implementation, modular, levels, adoption]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Memory Lifecycle, Knowledge Graph, Event-Driven Automation, Multi-Agent Collaboration, Privacy and Governance, Crystallization] related:
- rests-on: LLM Wiki Pattern
- composition: Memory Lifecycle
- composition: Knowledge Graph
- composition: Event-Driven Automation
- composition: Multi-Agent Collaboration
- composition: Privacy and Governance
- composition: Crystallization
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -224,16 +231,21 @@ Level 0 → Level 1 → Level 2 → Level 3 → Level 4 → Level 5 → Level 6
## Verwandte Concepts ## Verwandte Concepts
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[Memory Lifecycle]] - Level-1-Erweiterung
- [[Knowledge Graph]] - Level-2-Erweiterung
- [[Event-Driven Automation]] - Level-3-Erweiterung
- [[Hybrid Search]] - Level-4-Erweiterung - [[Hybrid Search]] - Level-4-Erweiterung
- [[Multi-Agent Collaboration]] - Level-5-Erweiterung
- [[Privacy and Governance]] - Level-6-Erweiterung
- [[Crystallization]] - Level-7-Erweiterung
## Siehe auch ## Siehe auch
- [[Three-Layer Architecture]] (Grundlage für alle Ebenen) - [[Three-Layer Architecture]] (Grundlage für alle Ebenen)
- [[Agent Memory]] (Implementierung höherer Ebenen) - [[Agent Memory]] (Implementierung höherer Ebenen)
<!-- wikitool:links -->
## Beziehungen
- **rests-on:** [[LLM Wiki Pattern]]
- **composition:** [[Memory Lifecycle]]
- **composition:** [[Knowledge Graph]]
- **composition:** [[Event-Driven Automation]]
- **composition:** [[Multi-Agent Collaboration]]
- **composition:** [[Privacy and Governance]]
- **composition:** [[Crystallization]]
<!-- /wikitool:links -->
+14 -7
View File
@@ -4,7 +4,11 @@ concept_type: workflow
tags: [index, scaling, thresholds, pages] tags: [index, scaling, thresholds, pages]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [Content Quality Control, Split Threshold, pascalandy schema, Iteration and Cost Limits] related:
- part-of: Content Quality Control
- see-also: Split Threshold
- operationalized-from: pascalandy schema
- see-also: Iteration and Cost Limits
sources: [Source - LLM Improvements Sonnet Analysis, Source - LLM Improvements Production Agent Gaps 2026] sources: [Source - LLM Improvements Sonnet Analysis, Source - LLM Improvements Production Agent Gaps 2026]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -56,21 +60,24 @@ Index Scaling definiert Regeln und Schwellenwerte für den Zeitpunkt und die Art
## Verwandte Concepts ## Verwandte Concepts
- [[Content Quality Control]] - Umfassenderes Qualitätssystem
- [[Split Threshold]] - Ähnliches Konzept für einzelne Seiten
- [[pascalandy schema]] - Quelle der Skalierungsempfehlungen
- [[Three-Layer Architecture]] - Index ist Teil der Wiki-Ebene - [[Three-Layer Architecture]] - Index ist Teil der Wiki-Ebene
## Beziehungen ## Beziehungen
- **geschützt durch:** [[Iteration and Cost Limits]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Sonnet Analysis]] - [[Source - LLM Improvements Sonnet Analysis]]
- [[Iteration and Cost Limits]]
- [[Source - LLM Improvements Production Agent Gaps 2026]] - [[Source - LLM Improvements Production Agent Gaps 2026]]
## Fußnoten ## Fußnoten
[^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]] [^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Content Quality Control]]
- **see-also:** [[Split Threshold]]
- **operationalized-from:** [[pascalandy schema]]
- **see-also:** [[Iteration and Cost Limits]]
<!-- /wikitool:links -->
+119 -49
View File
@@ -3,13 +3,17 @@ type: types/concept.md
concept_type: decision concept_type: decision
tags: [issues, gitea, triage, labels, backlog] tags: [issues, gitea, triage, labels, backlog]
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-09-02
related: [Chemenu, Gitea MCP Server, KB Stack Versioning, Detect-Repair Asymmetry] related:
sources: [Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31] - operates-on: Chemenu
- mechanism: Gitea MCP Server
- see-also: KB Stack Versioning
- see-also: Detect-Repair Asymmetry
sources: [Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31, Source - Gitea Issue 41 - Issue Management and Label Scheme 2026-09-02]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.85
provenance: sourced provenance: sourced
summary: 'Zweiachsiges Pflicht-Labelschema fuer das Gitea-Board: prio/1..3 und size/XS..L, bewusst keine dritte Achse; die Regel liegt in instructions/dev/, weil sie keine ausgelieferte Instanz erreichen darf' summary: 'Pflicht-Labelschema fuer das Gitea-Board: seit 2026-09-02 vier Achsen (area/kind/prio/size) plus zwei optionale status/-Flags, dazu der Issue-Body als aktuelle Wahrheit; die Regel liegt in instructions/dev/, weil sie keine ausgelieferte Instanz erreichen darf'
--- ---
# Issue Label Scheme # Issue Label Scheme
@@ -18,36 +22,78 @@ summary: 'Zweiachsiges Pflicht-Labelschema fuer das Gitea-Board: prio/1..3 und s
## Definition ## Definition
Issue Label Scheme ist die Entscheidung, offene Arbeit an diesem Stack ausschließlich als Issue Label Scheme ist die Entscheidung, offene Arbeit an diesem Stack ausschließlich als
Gitea-Issues zu führen und jedes Issue mit genau zwei Pflicht-Labels zu versehen: einer Gitea-Issues zu führen und jedes offene Issue mit vier Pflicht-Labels zu versehen: einem
Priorität `prio/1..3` und einer Größe `size/XS..L`. Eine dritte Achse gibt es bewusst nicht. Bereich `area/`, einer Art `kind/`, einer Priorität `prio/` und einer Größe `size/`. Dazu
Getroffen wurde die Entscheidung am 2026-08-31, gemeinsam mit der Löschung von `TODO.md`[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31]. kommen zwei optionale `status/`-Flags. Getroffen wurde die Entscheidung in dieser Form am
2026-09-02[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02]; sie ersetzt das
zweiachsige Schema vom 2026-08-31 (siehe [Historie](#historie)).
| Priorität | Bedeutung | | `area/` | Bedeutung |
|---|---| |---|---|
| `prio/1` | Blockiert oder beschädigt laufende Arbeit. Als Nächstes. | | `area/kb` | `kb/`-Schema, Contract, Confidence, Lint - die Wissensbasis als System. |
| `prio/2` | Sammelt Zinsen. Eingeplant. | | `area/distribution` | Auslieferung, Upgrade und Versionierung einer Instanz. |
| `prio/3` | Lohnend, wartet auf einen benannten Auslöser. | | `area/corpus` | Inhalt und Umfang von `kb/` in dieser Instanz, samt Demo-/Testbett-Frage. |
| `area/workflow` | Git, Merge, Branching, Publish, PRs. |
| `area/process` | Der Entwicklungsprozess selbst, nicht der Stack als Artefakt. |
| Größe | Bedeutung | | `kind/` | Bedeutung |
|---|---|
| `kind/decision` | Wartet auf eine Betreiberentscheidung. |
| `kind/build` | Spezifiziert, wartet nur noch auf Umsetzungszeit. |
| `kind/defect` | Befund: Doku und Realität, oder zwei Dokus, widersprechen sich. |
| `prio/` | Bedeutung |
|---|---|
| `prio/blocking` | Blockiert oder beschädigt laufende Arbeit. Als Nächstes. |
| `prio/planned` | Sammelt Zinsen. Eingeplant. |
| `prio/waiting` | Lohnend, wartet auf einen benannten Auslöser. |
| `size/` | Bedeutung |
|---|---| |---|---|
| `size/XS` | Minuten. Oft nur eine Entscheidung oder eine Beobachtung. |
| `size/S` | Eine Sitzung, ein Publish, ein klarer Schnitt. | | `size/S` | Eine Sitzung, ein Publish, ein klarer Schnitt. |
| `size/M` | Mehrere Dateien; eine Contract- oder Instruction-Änderung; eigener Testaufwand. | | `size/M` | Mehrere Dateien; eine Contract- oder Instruction-Änderung; eigener Testaufwand. |
| `size/L` | Mehrere Sitzungen, oder offene Entwurfsfragen vor dem ersten Commit. | | `size/L` | Mehrere Sitzungen, oder offene Entwurfsfragen vor dem ersten Commit. |
Die sieben Labels wurden angelegt und auf alle zehn zu dem Zeitpunkt offenen Issues | `status/` (optional) | Bedeutung |
angewandt[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31]. |---|---|
| `status/blocked` | Wartet auf ein anderes, noch offenes Issue - unabhängig vom `prio`-Wert nicht eigenständig bearbeitbar. |
| `status/unconfirmed` | Gemeldeter Verdacht, noch nicht gegen tatsächliches Verhalten geprüft; `size` und `prio` sind solange vorläufig. |
Sechzehn Labels stehen in Gitea; `prio/1`, `prio/2`, `prio/3` und `size/XS` existieren nicht
mehr[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
## Kernpunkte ## Kernpunkte
- **Beide Achsen sind Pflicht, weil eine Priorität ohne Kosten eine halbe Entscheidung ist.** - **Vier Achsen sind Pflicht, weil ihre Pflege maschinell läuft.** Der ursprüngliche Einwand
Größe ist Aufwand und nicht Wichtigkeit, deshalb ist `prio/1 size/XS` das Beste, was auf gegen eine dritte Achse war der Aufwand für einen einzelnen menschlichen Betreuer. Da
einem Board stehen kann, und `prio/3 size/L` etwas, worüber gesprochen wird, bevor jemand Body-Rewrites und Labelpflege über eine LLM-Sitzung laufen und ein Mensch in der Regel nur
anfängt. Metadaten anfasst, trägt dieser Einwand
- **`prio/3` ist kein Friedhof.** Der Auslöser muss im Issue benannt sein, sonst ist das Label nicht mehr[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
ein höfliches Nein[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31]. - **Der Issue-Body ist die aktuelle Wahrheit, nicht der Ursprungstext.** Die Umsetzung eines
- **Keine dritte Achse.** Art, Bereich oder Status wurden verworfen als der Punkt, ab dem eine Issues zieht sich über mehrere, zeitlich getrennte Sitzungen, und der Body ist das einzige,
Taxonomie eigene Pflege braucht. Das Board hat einen einzigen Betreuer. was sie verbindet: eine Sitzung muss allein aus ihm rekonstruieren können, was entschieden
und was offen ist. Er wird deshalb umgeschrieben statt
ergänzt[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
- **Ein Kommentar ist ein Changelog, keine Kopie.** Ein Volltext-Snapshot des alten Bodys pro
Revision zwingt einen Menschen zum Diffen zweier Fließtexte und ist damit keine lesbare
Historie, sondern nur eine weitere
Kopie[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
- **`area/` folgt der Systemgrenze, nicht dem Codeort.** Die Werte folgen der Stufenteilung aus
`AGENTS.md`. Ein `area/tools` gibt es bewusst nicht - Tooling wird nach der Domäne
einsortiert, die es
bedient[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
- **`kind/` darf sich im Lauf eines Issues ändern.** Der Wechsel von `decision` zu `build`,
sobald entschieden ist, ist erwünschtes Session-Memory-Verhalten und kein
Makel[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
- **Eine Priorität ohne Kosten ist eine halbe Entscheidung.** Größe ist Aufwand und nicht
Wichtigkeit, deshalb ist `prio/blocking size/S` das Beste, was auf einem Board stehen kann,
und `prio/waiting size/L` etwas, worüber gesprochen wird, bevor jemand anfängt.
- **`prio/waiting` ist kein Friedhof.** Der Auslöser muss im Issue benannt sein, sonst ist das
Label ein höfliches Nein[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31].
- **Kein unbelegter Verdacht bleibt offen liegen.** Die Triage eines `status/unconfirmed`
endet entweder mit entferntem Flag und verbindlichen `size`/`prio`-Werten oder mit einem
geschlossenen Issue samt Begründung - die Prozessentsprechung zu Invariante 3 des
Stacks[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
- **Priorisiert wird nach Schaden, nicht nach Aufwand.** Das Kriterium der ersten Triage - **Priorisiert wird nach Schaden, nicht nach Aufwand.** Das Kriterium der ersten Triage
lautete: was blockiert oder beschädigt laufende Arbeit. Ein Werkzeugfehler, der seinen lautete: was blockiert oder beschädigt laufende Arbeit. Ein Werkzeugfehler, der seinen
Benutzer gegen eine Invariante des Stacks drückt, rangiert deshalb vor einer fehlenden Benutzer gegen eine Invariante des Stacks drückt, rangiert deshalb vor einer fehlenden
@@ -59,6 +105,28 @@ angewandt[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-0
Linkliste auf Issues; der zweite, die Recherche-Notiz, ging vollständig nach #15. Danach gab Linkliste auf Issues; der zweite, die Recherche-Notiz, ging vollständig nach #15. Danach gab
es nichts mehr in der Datei, was nicht auf Gitea stand. es nichts mehr in der Datei, was nicht auf Gitea stand.
## Historie
Das ursprüngliche Schema vom 2026-08-31 hatte ~~genau zwei Pflicht-Labels, `prio/1..3` und
`size/XS..L`, und verzichtete ausdrücklich auf eine dritte Achse: Art, Bereich oder Status
wurden verworfen als der Punkt, ab dem eine Taxonomie eigene Pflege braucht, und das Board
habe einen einzigen Betreuer.~~ Sieben Labels wurden angelegt und auf alle zehn zu dem
Zeitpunkt offenen Issues
angewandt[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31].
Was sich am 2026-09-02 geändert hat:
| Achse | Vorher | Jetzt |
|---|---|---|
| `prio/` | `1`, `2`, `3` | `blocking`, `planned`, `waiting` - reine Umbenennung, Bedeutung unverändert |
| `size/` | `XS`, `S`, `M`, `L` | `S`, `M`, `L` - `XS` entfällt, die übrigen unverändert |
| `area/` | - | fünf Werte, neu |
| `kind/` | - | drei Werte, neu |
| `status/` | - | zwei optionale Flags, neu |
Der Verzicht auf die dritte Achse fiel damit weg, nicht weil die Begründung falsch war,
sondern weil ihre Voraussetzung entfallen ist: gepflegt wird das Board nicht mehr von Hand.
## Wo die Regel liegt ## Wo die Regel liegt
Die Platzierung war die tragende Entscheidung, nicht das Schema selbst. `README.md` und Die Platzierung war die tragende Entscheidung, nicht das Schema selbst. `README.md` und
@@ -76,51 +144,53 @@ Instanz ändert sich nichts. Das CI-Versions-Gate verlangte den Bump trotzdem, w
auf `instructions/` passt und `instructions/dev/` darunter liegt[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31]. Siehe auf `instructions/` passt und `instructions/dev/` darunter liegt[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31]. Siehe
[[KB Stack Versioning]]. [[KB Stack Versioning]].
Für die Erweiterung auf vier Achsen galt dieselbe Rechnung noch einmal: sie ging als `4.0.1`
und damit ebenfalls als PATCH
hinaus[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02].
## Beispiele ## Beispiele
- [[Chemenu]] - das Repository, dessen Board nach dem Schema geführt wird; sieben Labels - [[Chemenu]] - das Repository, dessen Board nach dem Schema geführt wird; sechzehn Labels
wurden angelegt und auf alle zehn offenen Issues angewandt stehen dort, verteilt auf vier Pflicht- und eine optionale Familie
- [[Gitea MCP Server]] - der Weg, auf dem Issues und Labels gelesen und geschrieben werden, da - [[Gitea MCP Server]] - der Weg, auf dem Issues und Labels gelesen und geschrieben werden
das Origin-Repository privat ist
- [[Detect-Repair Asymmetry]] - Issue #14 ist der Fall, den dieses Concept beschreibt, und - [[Detect-Repair Asymmetry]] - Issue #14 ist der Fall, den dieses Concept beschreibt, und
trägt `prio/2 size/S` trug in der ersten Triage `prio/2 size/S`, nach der Umbenennung also `prio/planned size/S`
## Wann zu verwenden ## Wann zu verwenden
- Auf einem Board mit einem einzigen Betreuer, das eine erkennbare Reihenfolge braucht, aber - Auf einem Board mit einem einzigen menschlichen Betreuer, dessen Labelpflege maschinell
keinen Prozess. läuft. Erst das macht mehr als zwei Achsen bezahlbar.
- Sobald offene Arbeit sonst in Prosa-Dateien wandert, die niemand als Board liest und die - Sobald offene Arbeit sonst in Prosa-Dateien wandert, die niemand als Board liest und die
gegen den Tracker driften. gegen den Tracker driften.
- Sobald die Bearbeitung eines Issues sich über mehrere, zeitlich getrennte Sitzungen zieht -
dann trägt die Body-als-Wahrheit-Konvention den Kontext, den sonst ein Mensch jedes Mal neu
erzählen müsste.
## Wann NICHT zu verwenden ## Wann NICHT zu verwenden
- Nicht auf einem Board mit mehreren Teams, wo Zuständigkeit und Bereich echte Information - Nicht dort, wo Labels von Hand gepflegt werden. Dann ist die ursprüngliche Zweiachsigkeit
tragen. Dann ist die dritte Achse keine Taxonomie-Pflege, sondern Routing. die tragfähigere Wahl, und die Begründung von 2026-08-31 gilt unverändert.
- Nicht als Ersatz für die Abnahmekriterien im Issue-Text. Die Labels ordnen ein Issue ein; ob - Nicht als Ersatz für die Abnahmekriterien im Issue-Text. Die Labels ordnen ein Issue ein; ob
es fertig ist, sagen sie nicht. es fertig ist, sagen sie nicht.
- Nicht mit umgeschriebenen Bodys dort, wo mehrere Menschen denselben Thread lesen und den
Verlauf brauchen. Die Konvention tauscht Historie gegen Aktualität und setzt voraus, dass
der Changelog-Kommentar als Historie genügt.
- Nicht in einer ausgelieferten Instanz. Das Schema beschreibt das Entwicklungs-Repository und - Nicht in einer ausgelieferten Instanz. Das Schema beschreibt das Entwicklungs-Repository und
hat außerhalb davon keinen Gegenstand. hat außerhalb davon keinen Gegenstand.
## Verwandte Concepts <!-- wikitool:links -->
- [[KB Stack Versioning]]
- [[Detect-Repair Asymmetry]]
## Beziehungen ## Beziehungen
- **gilt für:** [[Chemenu]] - **operates-on:** [[Chemenu]]
- **umgesetzt über:** [[Gitea MCP Server]] - **mechanism:** [[Gitea MCP Server]]
- **verwandt mit:** [[KB Stack Versioning]] - **see-also:** [[KB Stack Versioning]]
- **verwandt mit:** [[Detect-Repair Asymmetry]] - **see-also:** [[Detect-Repair Asymmetry]]
<!-- /wikitool:links -->
## Siehe auch
- [[Chemenu]]
- [[Gitea MCP Server]]
- [[KB Stack Versioning]]
- [[Detect-Repair Asymmetry]]
- [[Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31]]
<!-- wikitool:footnotes -->
## Fußnoten ## Fußnoten
[^s-gitea-issue-41-issue-management-and-label-scheme-2026-09-02]: [[Source - Gitea Issue 41 - Issue Management and Label Scheme 2026-09-02]]
[^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31]: [[Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31]] [^s-conversation-issue-triage-labels-and-todo-retirement-session-2026-08-31]: [[Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31]]
<!-- /wikitool:footnotes -->
+18 -21
View File
@@ -4,7 +4,13 @@ concept_type: workflow
tags: [gate, safety, iteration-budget, loop-breaker] tags: [gate, safety, iteration-budget, loop-breaker]
created: 2026-08-07 created: 2026-08-07
modified: 2026-09-02 modified: 2026-09-02
related: [Mass-Update Gate, Anti-Cramming Heuristic, Index Scaling, wikitool, Structural Enforcement over Documented Rule, MCP-Leseserver] related:
- compares-with: Mass-Update Gate
- see-also: Anti-Cramming Heuristic
- see-also: Index Scaling
- mechanism: wikitool
- exemplifies: Structural Enforcement over Documented Rule
- see-also: MCP-Leseserver
sources: [Source - LLM Improvements Production Agent Gaps 2026, Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31, Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31, Source - MCP Read Server Implementation Session 2026-09-02] sources: [Source - LLM Improvements Production Agent Gaps 2026, Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31, Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31, Source - MCP Read Server Implementation Session 2026-09-02]
confidence: 0.88 confidence: 0.88
confidence_base: 0.88 confidence_base: 0.88
@@ -54,32 +60,12 @@ Eine hart in Code durchgesetzte Obergrenze für die Anzahl der Tool-Aufrufe, die
den Serverprozess gehört (Rate Limiting), nicht in dieses Gate - beide zu vermischen würde es den Serverprozess gehört (Rate Limiting), nicht in dieses Gate - beide zu vermischen würde es
zu einem Rate Limiter verwässern.[^s-mcp-read-server-implementation-session-2026-09-02] zu einem Rate Limiter verwässern.[^s-mcp-read-server-implementation-session-2026-09-02]
## Verwandte Concepts
- [[Mass-Update Gate]] - das verwandte Sicherheitsgate, das dieses Muster spiegelt, begrenzt auf Veröffentlichungsgröße statt Sitzungsiterationsvolumen
- [[Anti-Cramming Heuristic]] - eines der Wiki-Qualitätsprobleme, die ein unbegrenzter Ingest-Lauf sonst verletzen könnte
- [[Index Scaling]] - das andere Wiki-Qualitätsproblem, das durch unkontrolliertes Seitenwachstum gefährdet ist
- [[wikitool]] - die CLI, die dieses Gate implementiert
## Beziehungen ## Beziehungen
- **spiegelt das gleiche Muster wie:** [[Mass-Update Gate]]
- **schützt:** [[Anti-Cramming Heuristic]]
- **schützt:** [[Index Scaling]]
- **implementiert durch:** [[wikitool]]
- **wendet an:** [[Structural Enforcement over Documented Rule]]
- **nimmt aus:** [[MCP-Leseserver]]
## Siehe auch ## Siehe auch
- [[Mass-Update Gate]]
- [[Anti-Cramming Heuristic]]
- [[Index Scaling]]
- [[wikitool]]
- [[Source - LLM Improvements Production Agent Gaps 2026]] - [[Source - LLM Improvements Production Agent Gaps 2026]]
- [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]] - [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]]
- [[Structural Enforcement over Documented Rule]]
- [[MCP-Leseserver]]
## Fußnoten ## Fußnoten
@@ -87,3 +73,14 @@ Eine hart in Code durchgesetzte Obergrenze für die Anzahl der Tool-Aufrufe, die
[^s-conversation-gate-counting-and-measured-calibration-session-2026-08-31]: [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]] [^s-conversation-gate-counting-and-measured-calibration-session-2026-08-31]: [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]]
[^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]] [^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]]
[^s-mcp-read-server-implementation-session-2026-09-02]: [[Source - MCP Read Server Implementation Session 2026-09-02]] [^s-mcp-read-server-implementation-session-2026-09-02]: [[Source - MCP Read Server Implementation Session 2026-09-02]]
<!-- wikitool:links -->
## Beziehungen
- **compares-with:** [[Mass-Update Gate]]
- **see-also:** [[Anti-Cramming Heuristic]]
- **see-also:** [[Index Scaling]]
- **mechanism:** [[wikitool]]
- **exemplifies:** [[Structural Enforcement over Documented Rule]]
- **see-also:** [[MCP-Leseserver]]
<!-- /wikitool:links -->
+14 -7
View File
@@ -4,7 +4,11 @@ concept_type: workflow
tags: [migration, versioning, corpus-diff, workflow] tags: [migration, versioning, corpus-diff, workflow]
created: 2026-08-30 created: 2026-08-30
modified: 2026-08-31 modified: 2026-08-31
related: [wikitool] related:
- mechanism: wikitool
- rests-on: KB Stack Versioning
- see-also: Mass-Update Gate
- see-also: Iteration and Cost Limits
sources: [Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30] sources: [Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -116,12 +120,15 @@ verweigert[^s-conversation-versioning-ci-cd-and-content-migration-session-2026-0
Werkzeug, weil er selbstprüfend ist: er meldet `FAIL`, bis die Sache erledigt ist, während Werkzeug, weil er selbstprüfend ist: er meldet `FAIL`, bis die Sache erledigt ist, während
`migrate done` eine Behauptung ist, die man ohne die Arbeit aufstellen kann. `migrate done` eine Behauptung ist, die man ohne die Arbeit aufstellen kann.
## Verwandte Concepts
- [[KB Stack Versioning]]
- [[Mass-Update Gate]]
- [[Iteration and Cost Limits]]
## Fußnoten ## Fußnoten
[^s-conversation-versioning-ci-cd-and-content-migration-session-2026-08-30]: [[Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30]] [^s-conversation-versioning-ci-cd-and-content-migration-session-2026-08-30]: [[Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[wikitool]]
- **rests-on:** [[KB Stack Versioning]]
- **see-also:** [[Mass-Update Gate]]
- **see-also:** [[Iteration and Cost Limits]]
<!-- /wikitool:links -->
+12 -11
View File
@@ -4,7 +4,10 @@ concept_type: decision
tags: [versioning, semver, release, stack] tags: [versioning, semver, release, stack]
created: 2026-08-30 created: 2026-08-30
modified: 2026-09-02 modified: 2026-09-02
related: [wikitool, Issue Label Scheme] related:
- mechanism: wikitool
- see-also: Issue Label Scheme
- see-also: CI Integration
sources: [Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30, Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31, Source - Version Part Nomenclature and Breaking Change Gate Session 2026-09-02] sources: [Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30, Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31, Source - Version Part Nomenclature and Breaking Change Gate Session 2026-09-02]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -103,20 +106,10 @@ kann.
- Nicht als automatischer Bump aus Commit-Nachrichten, solange Content-Commits und - Nicht als automatischer Bump aus Commit-Nachrichten, solange Content-Commits und
Stack-Commits im selben Repository liegen. Stack-Commits im selben Repository liegen.
## Verwandte Concepts
- [[KB Migration]]
- [[CI Integration]]
## Beziehungen ## Beziehungen
- **umgesetzt von:** [[wikitool]]
- **verwandt mit:** [[Issue Label Scheme]]
## Siehe auch ## Siehe auch
- [[wikitool]]
- [[Issue Label Scheme]]
- [[Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31]] - [[Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31]]
- [[Source - Version Part Nomenclature and Breaking Change Gate Session 2026-09-02]] - [[Source - Version Part Nomenclature and Breaking Change Gate Session 2026-09-02]]
@@ -124,3 +117,11 @@ kann.
[^s-conversation-versioning-ci-cd-and-content-migration-session-2026-08-30]: [[Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30]] [^s-conversation-versioning-ci-cd-and-content-migration-session-2026-08-30]: [[Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30]]
[^s-version-part-nomenclature-and-breaking-change-gate-session-2026-09-02]: [[Source - Version Part Nomenclature and Breaking Change Gate Session 2026-09-02]] [^s-version-part-nomenclature-and-breaking-change-gate-session-2026-09-02]: [[Source - Version Part Nomenclature and Breaking Change Gate Session 2026-09-02]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[wikitool]]
- **see-also:** [[Issue Label Scheme]]
- **see-also:** [[CI Integration]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: workflow
tags: [knowledge-management, growth, learning] tags: [knowledge-management, growth, learning]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Memex, Tolkien Gateway] related:
- part-of: LLM Wiki Pattern
- see-also: Memex
- see-also: Tolkien Gateway
sources: [Source - LLM Wiki Pattern] sources: [Source - LLM Wiki Pattern]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -118,7 +121,12 @@ Mit LLM Wiki Pattern:
## Siehe auch ## Siehe auch
- [[LLM Wiki Pattern]]
- [[Memex]]
- [[Tolkien Gateway]]
- [[Three-Layer Architecture]] - [[Three-Layer Architecture]]
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[LLM Wiki Pattern]]
- **see-also:** [[Memex]]
- **see-also:** [[Tolkien Gateway]]
<!-- /wikitool:links -->
+16 -6
View File
@@ -4,7 +4,12 @@ concept_type: architecture
tags: [graph, entities, relationships, knowledge-management] tags: [graph, entities, relationships, knowledge-management]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Memory Lifecycle, Entity Extraction, Typed Relationships, Graph Traversal] related:
- exemplifies: LLM Wiki Pattern
- see-also: Memory Lifecycle
- see-also: Entity Extraction
- composition: Typed Relationships
- see-also: Graph Traversal
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -130,11 +135,6 @@ Basierend auf [[Agent Memory]] und [[iii Engine]]:
## Verwandte Concepts ## Verwandte Concepts
- [[LLM Wiki Pattern]] - Gesamtes Muster
- [[Entity Extraction]] - Füllung des Graphen
- [[Typed Relationships]] - Die Beziehungstypen
- [[Graph Traversal]] - Abfragemechanismus
- [[Memory Lifecycle]] - Komplementäres Wissensmanagement
- [[Agent Memory]] - Produktionsimplementierung - [[Agent Memory]] - Produktionsimplementierung
## Siehe auch ## Siehe auch
@@ -142,3 +142,13 @@ Basierend auf [[Agent Memory]] und [[iii Engine]]:
- [[Hybrid Search]] (nutzt Graph-Traversal als einen Stream) - [[Hybrid Search]] (nutzt Graph-Traversal als einen Stream)
- [[Event-Driven Automation]] (für automatische Graph-Updates) - [[Event-Driven Automation]] (für automatische Graph-Updates)
- [[Supersession]] (als Graph-Beziehung verfolgt) - [[Supersession]] (als Graph-Beziehung verfolgt)
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[LLM Wiki Pattern]]
- **see-also:** [[Memory Lifecycle]]
- **see-also:** [[Entity Extraction]]
- **composition:** [[Typed Relationships]]
- **see-also:** [[Graph Traversal]]
<!-- /wikitool:links -->
+17 -11
View File
@@ -4,7 +4,13 @@ concept_type: architecture
tags: [knowledge-management, llm, wiki, pattern] tags: [knowledge-management, llm, wiki, pattern]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [Three-Layer Architecture, Knowledge Compounding, RAG, Memex, Vannevar Bush, Memory Lifecycle] related:
- rests-on: Three-Layer Architecture
- see-also: Knowledge Compounding
- contrasts: RAG
- see-also: Vannevar Bush
- composition: Memory Lifecycle
- see-also: Memex
sources: [Source - LLM Wiki Pattern, Source - LLM Wiki v2] sources: [Source - LLM Wiki Pattern, Source - LLM Wiki v2]
confidence: 0.95 confidence: 0.95
confidence_base: 0.95 confidence_base: 0.95
@@ -201,11 +207,6 @@ Periodische Gesundheitsprüfung zu:
## Verwandte Concepts ## Verwandte Concepts
- [[RAG]]: Der traditionelle Ansatz, den dieses Muster verbessert
- [[Knowledge Compounding]]: Die Auswirkung des Aufbaus von Wissen auf sich selbst
- [[Three-Layer Architecture]]: Die architektonische Grundlage
- [[Memex]]: Vannevar Bushs 1945er Vision, die dieses Muster inspirierte
## Beispiele ## Beispiele
- **Persönlich**: Ziele, Gesundheit, Psychologie, Selbstverbesserung verfolgen - **Persönlich**: Ziele, Gesundheit, Psychologie, Selbstverbesserung verfolgen
@@ -230,10 +231,15 @@ Periodische Gesundheitsprüfung zu:
## Siehe auch ## Siehe auch
- [[Three-Layer Architecture]]
- [[Knowledge Compounding]]
- [[RAG]]
- [[Memex]]
- [[Vannevar Bush]]
- [[Obsidian]] - [[Obsidian]]
<!-- wikitool:links -->
## Beziehungen
- **rests-on:** [[Three-Layer Architecture]]
- **see-also:** [[Knowledge Compounding]]
- **contrasts:** [[RAG]]
- **see-also:** [[Vannevar Bush]]
- **composition:** [[Memory Lifecycle]]
- **see-also:** [[Memex]]
<!-- /wikitool:links -->
+14 -9
View File
@@ -4,7 +4,11 @@ concept_type: workflow
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-09-01 modified: 2026-09-01
related: [Event-Driven Automation, Quality and Self-Correction, Detect-Repair Asymmetry, Green Suite Blind Spot] related:
- see-also: Event-Driven Automation
- part-of: Quality and Self-Correction
- grounds: Detect-Repair Asymmetry
- grounds: Green Suite Blind Spot
sources: [Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31] sources: [Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -48,21 +52,22 @@ Läuft nach Zeitplan (täglich/wöchentlich) ab und kann durch Memory-Write-Erei
## Verwandte Concepts ## Verwandte Concepts
- [[Quality and Self-Correction]]
- [[Confidence Scoring]] - [[Confidence Scoring]]
- [[Event-Driven Automation]]
- [[LLM Wiki Pattern]] - [[LLM Wiki Pattern]]
## Beziehungen ## Beziehungen
- **macht sichtbar:** [[Detect-Repair Asymmetry]]
- **abgesichert von:** [[Green Suite Blind Spot]]
## Siehe auch ## Siehe auch
- [[Detect-Repair Asymmetry]]
- [[Green Suite Blind Spot]]
## Fußnoten ## Fußnoten
[^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]] [^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Event-Driven Automation]]
- **part-of:** [[Quality and Self-Correction]]
- **grounds:** [[Detect-Repair Asymmetry]]
- **grounds:** [[Green Suite Blind Spot]]
<!-- /wikitool:links -->
+15 -18
View File
@@ -4,7 +4,12 @@ concept_type: architecture
tags: [mcp, library-boundary, search, server] tags: [mcp, library-boundary, search, server]
created: 2026-09-02 created: 2026-09-02
modified: 2026-09-02 modified: 2026-09-02
related: [wikitool, Publish-Remote Gate, Mass-Update Gate, Iteration and Cost Limits, Chemenu] related:
- operates-on: wikitool
- see-also: Publish-Remote Gate
- see-also: Mass-Update Gate
- see-also: Iteration and Cost Limits
- see-also: Chemenu
sources: [Source - MCP Read Server Implementation Session 2026-09-02] sources: [Source - MCP Read Server Implementation Session 2026-09-02]
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -79,30 +84,22 @@ vertrauen, dass sie übereinstimmen.
- Als Ersatz für den Iteration Budget Gate oder das Traefik-Rate-Limiting - beide bleiben - Als Ersatz für den Iteration Budget Gate oder das Traefik-Rate-Limiting - beide bleiben
notwendig und leben an anderer Stelle. notwendig und leben an anderer Stelle.
## Verwandte Concepts
- [[Publish-Remote Gate]]
- [[Mass-Update Gate]]
- [[Iteration and Cost Limits]]
## Fußnoten ## Fußnoten
[^s-mcp-read-server-implementation-session-2026-09-02]: [[Source - MCP Read Server Implementation Session 2026-09-02]] [^s-mcp-read-server-implementation-session-2026-09-02]: [[Source - MCP Read Server Implementation Session 2026-09-02]]
## Beziehungen ## Beziehungen
- **implementiert:** [[wikitool]]
- **verwandt mit:** [[Publish-Remote Gate]]
- **verwandt mit:** [[Mass-Update Gate]]
- **ausgenommen von:** [[Iteration and Cost Limits]]
- **Teil von:** [[Chemenu]]
## Siehe auch ## Siehe auch
- [[wikitool]]
- [[Publish-Remote Gate]]
- [[Mass-Update Gate]]
- [[Iteration and Cost Limits]]
- [[Chemenu]]
- [[Source - MCP Read Server Implementation Session 2026-09-02]] - [[Source - MCP Read Server Implementation Session 2026-09-02]]
<!-- wikitool:links -->
## Beziehungen
- **operates-on:** [[wikitool]]
- **see-also:** [[Publish-Remote Gate]]
- **see-also:** [[Mass-Update Gate]]
- **see-also:** [[Iteration and Cost Limits]]
- **see-also:** [[Chemenu]]
<!-- /wikitool:links -->
+20 -14
View File
@@ -4,7 +4,14 @@ concept_type: workflow
tags: [gate, safety, mass-update, confirmation] tags: [gate, safety, mass-update, confirmation]
created: 2026-08-03 created: 2026-08-03
modified: 2026-09-01 modified: 2026-09-01
related: [Content Quality Control, wikitool, Iteration and Cost Limits, Structural Enforcement over Documented Rule, Bulk Operations, Publish-Remote Gate, MCP-Leseserver] related:
- enables: Content Quality Control
- mechanism: wikitool
- see-also: Iteration and Cost Limits
- exemplifies: Structural Enforcement over Documented Rule
- contrasts: Bulk Operations
- see-also: Publish-Remote Gate
- see-also: MCP-Leseserver
sources: [Source - LLM Improvements Sonnet Analysis, Source - LLM Improvements Production Agent Gaps 2026, Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31, Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31, Source - LLM Improvements Codex Analysis] sources: [Source - LLM Improvements Sonnet Analysis, Source - LLM Improvements Production Agent Gaps 2026, Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31, Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31, Source - LLM Improvements Codex Analysis]
confidence: 0.88 confidence: 0.88
confidence_base: 0.88 confidence_base: 0.88
@@ -68,28 +75,15 @@ Das Mass-Update Gate ist ein Sicherheitsmechanismus, der die Ausführung pausier
## Verwandte Concepts ## Verwandte Concepts
- [[Content Quality Control]] - Qualitätsrahmen, den Massenaktualisierungen bewahren sollten
- [[wikitool]] - Das CLI-Tool, das dieses Gate implementieren könnte
- [[Workflow Orchestration]] - Koordinierte Vorgänge, die Gates benötigen könnten - [[Workflow Orchestration]] - Koordinierte Vorgänge, die Gates benötigen könnten
## Beziehungen ## Beziehungen
- **wird gespiegelt durch:** [[Iteration and Cost Limits]]
- **wendet an:** [[Structural Enforcement over Documented Rule]]
- **grenzt ab gegen:** [[Bulk Operations]]
- **verwandtes Gate:** [[Publish-Remote Gate]]
- **verwandt mit:** [[MCP-Leseserver]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Sonnet Analysis]] - [[Source - LLM Improvements Sonnet Analysis]]
- [[Iteration and Cost Limits]]
- [[Source - LLM Improvements Production Agent Gaps 2026]] - [[Source - LLM Improvements Production Agent Gaps 2026]]
- [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]] - [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]]
- [[Structural Enforcement over Documented Rule]]
- [[Bulk Operations]]
- [[Publish-Remote Gate]]
- [[MCP-Leseserver]]
## Fußnoten ## Fußnoten
@@ -97,3 +91,15 @@ Das Mass-Update Gate ist ein Sicherheitsmechanismus, der die Ausführung pausier
[^s-conversation-gate-counting-and-measured-calibration-session-2026-08-31]: [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]] [^s-conversation-gate-counting-and-measured-calibration-session-2026-08-31]: [[Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31]]
[^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]] [^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]]
[^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]] [^s-conversation-comma-bug-budget-refund-and-lint-report-path-session-2026-08-31]: [[Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **enables:** [[Content Quality Control]]
- **mechanism:** [[wikitool]]
- **see-also:** [[Iteration and Cost Limits]]
- **exemplifies:** [[Structural Enforcement over Documented Rule]]
- **contrasts:** [[Bulk Operations]]
- **see-also:** [[Publish-Remote Gate]]
- **see-also:** [[MCP-Leseserver]]
<!-- /wikitool:links -->
+18 -7
View File
@@ -4,7 +4,13 @@ concept_type: architecture
tags: [memory, lifecycle, confidence, knowledge-management] tags: [memory, lifecycle, confidence, knowledge-management]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Confidence Scoring, Supersession, Consolidation Tiers, Forgetting, Knowledge Compounding] related:
- part-of: LLM Wiki Pattern
- see-also: Confidence Scoring
- composition: Supersession
- see-also: Consolidation Tiers
- see-also: Forgetting
- enables: Knowledge Compounding
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.95 confidence: 0.95
confidence_base: 0.95 confidence_base: 0.95
@@ -109,12 +115,6 @@ Basierend auf [[Agent Memory]]-Erfahrung:
## Verwandte Concepts ## Verwandte Concepts
- [[Confidence Scoring]] - Der Scoring-Mechanismus
- [[Supersession]] - Der Versionskontroll-Mechanismus
- [[Forgetting]] - Der Retention-Curve-Mechanismus
- [[Consolidation Tiers]] - Die Promotions-Pipeline
- [[Knowledge Compounding]] - Die Gesamtauswirkung
- [[LLM Wiki Pattern]] - Das übergeordnete Muster
- [[Agent Memory]] - Produktionsimplementierung - [[Agent Memory]] - Produktionsimplementierung
## Siehe auch ## Siehe auch
@@ -122,3 +122,14 @@ Basierend auf [[Agent Memory]]-Erfahrung:
- [[Event-Driven Automation]] (Trigger für Lebenszyklus-Management) - [[Event-Driven Automation]] (Trigger für Lebenszyklus-Management)
- [[Quality Scoring]] (komplementäre Qualitätsmetriken) - [[Quality Scoring]] (komplementäre Qualitätsmetriken)
- [[Knowledge Graph]] (Struktur zur Verfolgung von Beziehungen) - [[Knowledge Graph]] (Struktur zur Verfolgung von Beziehungen)
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[LLM Wiki Pattern]]
- **see-also:** [[Confidence Scoring]]
- **composition:** [[Supersession]]
- **see-also:** [[Consolidation Tiers]]
- **see-also:** [[Forgetting]]
- **enables:** [[Knowledge Compounding]]
<!-- /wikitool:links -->
+12 -1
View File
@@ -4,7 +4,10 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Implementation Spectrum, Multi-Agent Collaboration, Source - LLM Wiki v2] related:
- exemplifies: Implementation Spectrum
- part-of: Multi-Agent Collaboration
- evidenced-by: Source - LLM Wiki v2
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +41,11 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[Implementation Spectrum]]
- **part-of:** [[Multi-Agent Collaboration]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: protocol
tags: [industrial, automation, communication, serial] tags: [industrial, automation, communication, serial]
created: 2026-07-25 created: 2026-07-25
modified: 2026-08-29 modified: 2026-08-29
related: [E3DC, ha-core, Home Assistant] related:
- see-also: E3DC
- see-also: ha-core
- see-also: Home Assistant
sources: [] sources: []
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -243,7 +246,6 @@ func main() {
- [[MQTT]] - Alternatives Protokoll für IoT/Industrie - [[MQTT]] - Alternatives Protokoll für IoT/Industrie
- [[OPC UA]] - Modernes Industrieprotokoll mit Sicherheit - [[OPC UA]] - Modernes Industrieprotokoll mit Sicherheit
- Industrial-Automation-Konzept - Industrial-Automation-Konzept
- [[E3DC]] - Verwendet Modbus zur Kommunikation
## Historie ## Historie
@@ -257,5 +259,11 @@ func main() {
- [Modbus Organization](https://modbus.org/) - [Modbus Organization](https://modbus.org/)
- [Modbus Specifications](https://modbus.org/specifications/) - [Modbus Specifications](https://modbus.org/specifications/)
- [[E3DC]] - Verwendet Modbus TCP
- [[ha-core]] - Kann Modbus verwenden <!-- wikitool:links -->
## Beziehungen
- **see-also:** [[E3DC]]
- **see-also:** [[ha-core]]
- **see-also:** [[Home Assistant]]
<!-- /wikitool:links -->
+16 -5
View File
@@ -4,7 +4,12 @@ concept_type: workflow
tags: [multi-agent, collaboration, sync, coordination] tags: [multi-agent, collaboration, sync, coordination]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Memory Lifecycle, Mesh Sync, Shared vs Private, Work Coordination] related:
- exemplifies: LLM Wiki Pattern
- see-also: Memory Lifecycle
- composition: Mesh Sync
- composition: Shared vs Private
- composition: Work Coordination
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.85 confidence: 0.85
confidence_base: 0.85 confidence_base: 0.85
@@ -116,10 +121,6 @@ Basierend auf [[Agent Memory]]-Erfahrung:
## Verwandte Concepts ## Verwandte Concepts
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[Mesh Sync]] - Der Synchronisationsmechanismus
- [[Shared vs Private]] - Der Scoping-Mechanismus
- [[Work Coordination]] - Der Koordinationsmechanismus
- [[Event-Driven Automation]] - Für Sync-Trigger - [[Event-Driven Automation]] - Für Sync-Trigger
- [[Audit Trail]] - Zur Verfolgung von Multi-Agent-Operationen - [[Audit Trail]] - Zur Verfolgung von Multi-Agent-Operationen
@@ -127,3 +128,13 @@ Basierend auf [[Agent Memory]]-Erfahrung:
- [[Privacy and Governance]] (für Zugriffskontrolle) - [[Privacy and Governance]] (für Zugriffskontrolle)
- [[Quality and Self-Correction]] (zur Aufrechterhaltung der Qualität in kollaborativen Einstellungen) - [[Quality and Self-Correction]] (zur Aufrechterhaltung der Qualität in kollaborativen Einstellungen)
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[LLM Wiki Pattern]]
- **see-also:** [[Memory Lifecycle]]
- **composition:** [[Mesh Sync]]
- **composition:** [[Shared vs Private]]
- **composition:** [[Work Coordination]]
<!-- /wikitool:links -->
+8 -5
View File
@@ -4,7 +4,8 @@ concept_type: problem
tags: [bug, drifts, kebab-case, human-readable] tags: [bug, drifts, kebab-case, human-readable]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [AGENTS.md] related:
- operates-on: AGENTS.md
sources: [Source - LLM Improvements Codex Analysis] sources: [Source - LLM Improvements Codex Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -45,19 +46,21 @@ Naming Convention Conflict ist ein spezifischer Drift/Bug, bei dem README.md und
## Verwandte Concepts ## Verwandte Concepts
- [[AGENTS.md]] (gibt benutzerfreundliche Titel mit Leerzeichen an)
- README.md (gibt kebab-case an) - README.md (gibt kebab-case an)
- [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis] - [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis]
## Beziehungen ## Beziehungen
- **beeinflusst:** [[AGENTS.md]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Codex Analysis]] - [[Source - LLM Improvements Codex Analysis]]
- [[AGENTS.md]]
## Fußnoten ## Fußnoten
[^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]] [^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **operates-on:** [[AGENTS.md]]
<!-- /wikitool:links -->
+8 -5
View File
@@ -4,7 +4,8 @@ concept_type: architecture
tags: [interoperability, export, validate, okf-profile] tags: [interoperability, export, validate, okf-profile]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [awesome-llm-wiki] related:
- see-also: awesome-llm-wiki
sources: [Source - LLM Improvements Codex Analysis] sources: [Source - LLM Improvements Codex Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -45,19 +46,21 @@ OKF (Open Knowledge Framework) Compatibility ist das Konzept, einen Export-/Vali
## Verwandte Concepts ## Verwandte Concepts
- [[awesome-llm-wiki]] (OKF ist ein großes Thema in diesem Repository)
- [[Three-Layer Architecture]] (OKF-Export würde eine zusätzliche Ebene oder einen Modus darstellen) - [[Three-Layer Architecture]] (OKF-Export würde eine zusätzliche Ebene oder einen Modus darstellen)
- [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis] - [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis]
## Beziehungen ## Beziehungen
- **vorgestellt in:** [[awesome-llm-wiki]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Codex Analysis]] - [[Source - LLM Improvements Codex Analysis]]
- [[awesome-llm-wiki]]
## Fußnoten ## Fußnoten
[^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]] [^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[awesome-llm-wiki]]
<!-- /wikitool:links -->
+14 -12
View File
@@ -4,7 +4,11 @@ concept_type: architecture
tags: [] tags: []
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [ENVIRONMENT.md, Personalization Plane, wikitool, Chemenu] related:
- mechanism: ENVIRONMENT.md
- contrasts: Personalization Plane
- mechanism: wikitool
- operates-on: Chemenu
sources: [Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31] sources: [Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -92,25 +96,23 @@ in das Repo aller anderen.
## Verwandte Concepts ## Verwandte Concepts
- [[Personalization Plane]] — dasselbe Muster als Pflicht: dort `FAIL` bei fehlender Datei, hier
nie
- [[KB Stack Versioning]] — das Muster kam mit `1.8.0`, ohne Kompatibilitätsbruch - [[KB Stack Versioning]] — das Muster kam mit `1.8.0`, ohne Kompatibilitätsbruch
## Beziehungen ## Beziehungen
- **umgesetzt von:** [[wikitool]]
- **verwendet von:** [[Chemenu]]
- **umgesetzt von:** [[ENVIRONMENT.md]]
- **verwandt mit:** [[Personalization Plane]]
## Siehe auch ## Siehe auch
- [[ENVIRONMENT.md]]
- [[Personalization Plane]]
- [[wikitool]]
- [[Chemenu]]
- [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]] - [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]]
## Fußnoten ## Fußnoten
[^s-conversation-environment-md-as-an-optional-third-session-level-file-session-2026-08-31]: [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]] [^s-conversation-environment-md-as-an-optional-third-session-level-file-session-2026-08-31]: [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[ENVIRONMENT.md]]
- **contrasts:** [[Personalization Plane]]
- **mechanism:** [[wikitool]]
- **operates-on:** [[Chemenu]]
<!-- /wikitool:links -->
+13 -9
View File
@@ -4,7 +4,10 @@ concept_type: architecture
tags: [] tags: []
created: 2026-08-31 created: 2026-08-31
modified: 2026-08-31 modified: 2026-08-31
related: [wikitool, Chemenu, Optional Instance Context File] related:
- mechanism: wikitool
- operates-on: Chemenu
- see-also: Optional Instance Context File
sources: [Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31] sources: [Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -85,23 +88,24 @@ sondern in den Health-Check.
## Verwandte Concepts ## Verwandte Concepts
- [[KB Migration]] - Abgrenzung: dort Korpus-Form, hier Instanz-Zustand - [[KB Migration]] - Abgrenzung: dort Korpus-Form, hier Instanz-Zustand
- [[Optional Instance Context File]] - dasselbe Muster ohne Pflicht: dort meldet der - Optional Instance Context File - dasselbe Muster ohne Pflicht: dort meldet der
Health-Check nur, hier scheitert er[^s-conversation-environment-md-as-an-optional-third-session-level-file-session-2026-08-31] Health-Check nur, hier scheitert er[^s-conversation-environment-md-as-an-optional-third-session-level-file-session-2026-08-31]
- [[KB Stack Versioning]] - die Plane kam mit `1.1.0`, ohne Kompatibilitätsbruch - [[KB Stack Versioning]] - die Plane kam mit `1.1.0`, ohne Kompatibilitätsbruch
## Beziehungen ## Beziehungen
- **umgesetzt von:** [[wikitool]]
- **verwendet von:** [[Chemenu]]
- **verwandt mit:** [[Optional Instance Context File]]
## Siehe auch ## Siehe auch
- [[wikitool]]
- [[Chemenu]]
- [[Optional Instance Context File]]
- [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]] - [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]]
## Fußnoten ## Fußnoten
[^s-conversation-environment-md-as-an-optional-third-session-level-file-session-2026-08-31]: [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]] [^s-conversation-environment-md-as-an-optional-third-session-level-file-session-2026-08-31]: [[Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[wikitool]]
- **operates-on:** [[Chemenu]]
- **see-also:** [[Optional Instance Context File]]
<!-- /wikitool:links -->
+14 -5
View File
@@ -4,7 +4,11 @@ concept_type: workflow
tags: [privacy, security, governance, audit] tags: [privacy, security, governance, audit]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Filter on Ingest, Audit Trail, Bulk Operations] related:
- exemplifies: LLM Wiki Pattern
- see-also: Filter on Ingest
- see-also: Audit Trail
- see-also: Bulk Operations
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -132,10 +136,6 @@ Basierend auf [[Agent Memory]] und Produktionserfahrung:
## Verwandte Concepts ## Verwandte Concepts
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[Filter on Ingest]] - Der Filtermechanismus
- [[Audit Trail]] - Der Protokollierungsmechanismus
- [[Bulk Operations]] - Gouvernanzoperationen
- [[Event-Driven Automation]] - Für automatisierte Governance - [[Event-Driven Automation]] - Für automatisierte Governance
## Siehe auch ## Siehe auch
@@ -143,3 +143,12 @@ Basierend auf [[Agent Memory]] und Produktionserfahrung:
- [[Privacy and Governance]] (diese Seite) - [[Privacy and Governance]] (diese Seite)
- [[Multi-Agent Collaboration]] (für Multi-Agent-Sicherheit) - [[Multi-Agent Collaboration]] (für Multi-Agent-Sicherheit)
- [[Quality and Self-Correction]] (für Qualitätsaspekte) - [[Quality and Self-Correction]] (für Qualitätsaspekte)
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[LLM Wiki Pattern]]
- **see-also:** [[Filter on Ingest]]
- **see-also:** [[Audit Trail]]
- **see-also:** [[Bulk Operations]]
<!-- /wikitool:links -->
+8 -1
View File
@@ -4,7 +4,8 @@ concept_type: architecture
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Consolidation Tiers] related:
- part-of: Consolidation Tiers
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +39,9 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Consolidation Tiers]]
<!-- /wikitool:links -->
+12 -13
View File
@@ -4,7 +4,10 @@ concept_type: workflow
tags: [] tags: []
created: 2026-09-01 created: 2026-09-01
modified: 2026-09-02 modified: 2026-09-02
related: [Mass-Update Gate, Chemenu, MCP-Leseserver] related:
- see-also: Mass-Update Gate
- operates-on: Chemenu
- see-also: MCP-Leseserver
sources: [Source - Publish-Remote Gate and Issue Triage Session 2026-09-01, Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01, Source - MCP Read Server Implementation Session 2026-09-02] sources: [Source - Publish-Remote Gate and Issue Triage Session 2026-09-01, Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01, Source - MCP Read Server Implementation Session 2026-09-02]
confidence: 0.70 confidence: 0.70
confidence_base: 0.70 confidence_base: 0.70
@@ -91,26 +94,22 @@ getestetes Skript und zwei Architekturvorschläge (das Verfahren als `wikitool`-
oder den Demo-Korpus grundsätzlich von dem Branch fernhalten, von dem private Instanzen ihre oder den Demo-Korpus grundsätzlich von dem Branch fernhalten, von dem private Instanzen ihre
Maschinerie ziehen) stehen in Gitea-Issue #30. Maschinerie ziehen) stehen in Gitea-Issue #30.
## Verwandte Concepts
- [[Mass-Update Gate]]
- [[MCP-Leseserver]]
## Beziehungen ## Beziehungen
- **gilt fuer:** [[Chemenu]]
- **verwandtes Gate:** [[Mass-Update Gate]]
- **verwandt mit:** [[MCP-Leseserver]]
## Siehe auch ## Siehe auch
- [[Source - Publish-Remote Gate and Issue Triage Session 2026-09-01]] - [[Source - Publish-Remote Gate and Issue Triage Session 2026-09-01]]
- [[Chemenu]]
- [[Mass-Update Gate]]
- [[Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01]] - [[Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01]]
- [[MCP-Leseserver]]
## Fußnoten ## Fußnoten
[^s-private-instance-merge-correction-and-issue-30-session-2026-09-01]: [[Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01]] [^s-private-instance-merge-correction-and-issue-30-session-2026-09-01]: [[Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01]]
[^s-mcp-read-server-implementation-session-2026-09-02]: [[Source - MCP Read Server Implementation Session 2026-09-02]] [^s-mcp-read-server-implementation-session-2026-09-02]: [[Source - MCP Read Server Implementation Session 2026-09-02]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Mass-Update Gate]]
- **operates-on:** [[Chemenu]]
- **see-also:** [[MCP-Leseserver]]
<!-- /wikitool:links -->
+14 -1
View File
@@ -4,7 +4,11 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Confidence Scoring, Implementation Spectrum, Memory Lifecycle, Source - LLM Wiki v2] related:
- see-also: Confidence Scoring
- exemplifies: Implementation Spectrum
- see-also: Memory Lifecycle
- evidenced-by: Source - LLM Wiki v2
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +42,12 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Confidence Scoring]]
- **exemplifies:** [[Implementation Spectrum]]
- **see-also:** [[Memory Lifecycle]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
<!-- /wikitool:links -->
+13 -5
View File
@@ -4,7 +4,11 @@ concept_type: workflow
tags: [quality, scoring, self-healing, contradiction, knowledge-management] tags: [quality, scoring, self-healing, contradiction, knowledge-management]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, Memory Lifecycle, Event-Driven Automation, Confidence Scoring] related:
- exemplifies: LLM Wiki Pattern
- see-also: Memory Lifecycle
- rests-on: Event-Driven Automation
- rests-on: Confidence Scoring
sources: [Source - LLM Wiki v2] sources: [Source - LLM Wiki v2]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -111,10 +115,6 @@ Basierend auf [[Agent Memory]] und [[Event-Driven Automation]]:
## Verwandte Concepts ## Verwandte Concepts
- [[LLM Wiki Pattern]] - Gesamtmuster
- [[Memory Lifecycle]] - Ergänzende Knowledge Management
- [[Confidence Scoring]] - Für Aussage-Level-Konfidenz
- [[Event-Driven Automation]] - Für Auslösen von Qualitätsprüfungen
- [[Lint Workflow]] - Die Gesundheitsprüfungsoperation - [[Lint Workflow]] - Die Gesundheitsprüfungsoperation
- [[Agent Memory]] - Produktionsimplementierung - [[Agent Memory]] - Produktionsimplementierung
@@ -125,3 +125,11 @@ Basierend auf [[Agent Memory]] und [[Event-Driven Automation]]:
- [[Self-Healing]] (der automatische Reparaturmechanismus) - [[Self-Healing]] (der automatische Reparaturmechanismus)
- [[Contradiction Resolution]] (der Entscheidungsprozess) - [[Contradiction Resolution]] (der Entscheidungsprozess)
<!-- wikitool:links -->
## Beziehungen
- **exemplifies:** [[LLM Wiki Pattern]]
- **see-also:** [[Memory Lifecycle]]
- **rests-on:** [[Event-Driven Automation]]
- **rests-on:** [[Confidence Scoring]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: architecture
tags: [ai, retrieval, generation, knowledge-management] tags: [ai, retrieval, generation, knowledge-management]
created: 2026-07-26 created: 2026-07-26
modified: 2026-08-29 modified: 2026-08-29
related: [LLM Wiki Pattern, NotebookLM, ChatGPT] related:
- see-also: LLM Wiki Pattern
- see-also: NotebookLM
- see-also: ChatGPT
sources: [Source - LLM Wiki Pattern] sources: [Source - LLM Wiki Pattern]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -107,7 +110,12 @@ Das [[LLM Wiki Pattern]] kann als eine Verbesserung zu RAG angesehen werden, die
## Siehe auch ## Siehe auch
- [[LLM Wiki Pattern]]
- [[Knowledge Compounding]] - [[Knowledge Compounding]]
- [[NotebookLM]]
- [[ChatGPT]] <!-- wikitool:links -->
## Beziehungen
- **see-also:** [[LLM Wiki Pattern]]
- **see-also:** [[NotebookLM]]
- **see-also:** [[ChatGPT]]
<!-- /wikitool:links -->
+12 -1
View File
@@ -4,7 +4,10 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Hybrid Search, LLM Wiki Pattern, Source - LLM Wiki v2] related:
- part-of: Hybrid Search
- exemplifies: LLM Wiki Pattern
- evidenced-by: Source - LLM Wiki v2
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +41,11 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Hybrid Search]]
- **exemplifies:** [[LLM Wiki Pattern]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
<!-- /wikitool:links -->
+11 -7
View File
@@ -4,7 +4,9 @@ concept_type: protocol
tags: [storage, ssd, performance, optimization, linux] tags: [storage, ssd, performance, optimization, linux]
created: 2026-07-31 created: 2026-07-31
modified: 2026-08-29 modified: 2026-08-29
related: [Disk Encryption, LVM, Arch Linux] related:
- see-also: LVM
- see-also: Arch Linux
sources: [Source - Arch Linux Cheat Sheet] sources: [Source - Arch Linux Cheat Sheet]
confidence: 0.90 confidence: 0.90
confidence_base: 0.90 confidence_base: 0.90
@@ -175,16 +177,18 @@ lsblk -o NAME,FSTYPE,DISC-GRAN,DISC-MAX
## Beziehungen ## Beziehungen
- **Verwendet mit:** [[Disk Encryption]] (dm-crypt/LUKS) (dm-crypt/LUKS)
- **Ergänzt:** [[LVM]] (Logical Volume Manager)
- **Läuft auf:** [[Arch Linux]] und anderen Distributionen
- **Wirkt sich aus auf:** Speicherleistung SSD-gestützter Systeme - **Wirkt sich aus auf:** Speicherleistung SSD-gestützter Systeme
## Siehe auch ## Siehe auch
- [[Disk Encryption]]
- [[LVM]]
- [[Arch Linux]]
- [[Source - Arch Linux Cheat Sheet]] - [[Source - Arch Linux Cheat Sheet]]
- https://wiki.archlinux.org/title/Solid_State_Drives - https://wiki.archlinux.org/title/Solid_State_Drives
- https://wiki.archlinux.org/title/Dm-crypt/Specialties#Discard/TRIM_support_for_solid_state_drives_(SSD) - https://wiki.archlinux.org/title/Dm-crypt/Specialties#Discard/TRIM_support_for_solid_state_drives_(SSD)
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[LVM]]
- **see-also:** [[Arch Linux]]
<!-- /wikitool:links -->
+12 -7
View File
@@ -4,7 +4,10 @@ concept_type: architecture
tags: [scale, limitations] tags: [scale, limitations]
created: 2026-08-04 created: 2026-08-04
modified: 2026-09-01 modified: 2026-09-01
related: [] related:
- see-also: Token Economics
- see-also: Cross-platform Agent Skills
- see-also: Context Isolation
sources: [Source - Copilot Skill Restructure Instructions] sources: [Source - Copilot Skill Restructure Instructions]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -46,12 +49,14 @@ Scale Ceiling ist kein Problem wenn:
- Retrieval-Augmented-Ansätze genutzt werden, die alles in den Kontext laden vermeiden - Retrieval-Augmented-Ansätze genutzt werden, die alles in den Kontext laden vermeiden
- Die Workflows kein Verständnis von Verbindungen über das gesamte Wiki erfordern - Die Workflows kein Verständnis von Verbindungen über das gesamte Wiki erfordern
## Verwandte Concepts
- [[Token Economics]]
- [[Cross-platform Agent Skills]]
- [[Context Isolation]]
## Fußnoten ## Fußnoten
[^s-copilot-skill-restructure-instructions]: [[Source - Copilot Skill Restructure Instructions]] [^s-copilot-skill-restructure-instructions]: [[Source - Copilot Skill Restructure Instructions]]
<!-- wikitool:links -->
## Beziehungen
- **see-also:** [[Token Economics]]
- **see-also:** [[Cross-platform Agent Skills]]
- **see-also:** [[Context Isolation]]
<!-- /wikitool:links -->
+16 -6
View File
@@ -4,7 +4,13 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Confidence Scoring, Quality and Self-Correction, Source - LLM Wiki v2, Supersession, Detect-Repair Asymmetry, Command Round-Trip Integrity] related:
- see-also: Confidence Scoring
- part-of: Quality and Self-Correction
- evidenced-by: Source - LLM Wiki v2
- see-also: Supersession
- see-also: Detect-Repair Asymmetry
- see-also: Command Round-Trip Integrity
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -41,11 +47,15 @@ TODO
## Beziehungen ## Beziehungen
- **abgegrenzt gegen:** [[Detect-Repair Asymmetry]]
- **folgt aus:** [[Command Round-Trip Integrity]]
## Siehe auch ## Siehe auch
- [[Detect-Repair Asymmetry]] <!-- wikitool:links -->
- [[Command Round-Trip Integrity]] ## Beziehungen
- **see-also:** [[Confidence Scoring]]
- **part-of:** [[Quality and Self-Correction]]
- **evidenced-by:** [[Source - LLM Wiki v2]]
- **see-also:** [[Supersession]]
- **see-also:** [[Detect-Repair Asymmetry]]
- **see-also:** [[Command Round-Trip Integrity]]
<!-- /wikitool:links -->
+8 -5
View File
@@ -4,7 +4,8 @@ concept_type: workflow
tags: [heuristics, stale-claims, change-density, weak-linking] tags: [heuristics, stale-claims, change-density, weak-linking]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [wikitool] related:
- mechanism: wikitool
sources: [Source - LLM Improvements Codex Analysis, Source - LLM Improvements Sonnet Analysis] sources: [Source - LLM Improvements Codex Analysis, Source - LLM Improvements Sonnet Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -55,20 +56,22 @@ Semantic Lint Automation bezieht sich auf Maschinen-Heuristiken, die potenzielle
- [[Lint Workflow]] (vorhandenes Konzept für strukturelles Linting) - [[Lint Workflow]] (vorhandenes Konzept für strukturelles Linting)
- [[Confidence Scoring]] (wird verwendet, um Aussagen mit niedrigem Vertrauen zu identifizieren) - [[Confidence Scoring]] (wird verwendet, um Aussagen mit niedrigem Vertrauen zu identifizieren)
- [[wikitool]] (implementiert strukturelles Linting, könnte semantische Heuristiken hinzufügen)
- [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis] - [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis]
## Beziehungen ## Beziehungen
- **implementiert von:** [[wikitool]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Codex Analysis]] - [[Source - LLM Improvements Codex Analysis]]
- [[wikitool]]
- [[Source - LLM Improvements Sonnet Analysis]] - [[Source - LLM Improvements Sonnet Analysis]]
## Fußnoten ## Fußnoten
[^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]] [^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]]
[^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]] [^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[wikitool]]
<!-- /wikitool:links -->
+8 -1
View File
@@ -4,7 +4,8 @@ concept_type: architecture
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Consolidation Tiers] related:
- part-of: Consolidation Tiers
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +39,9 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Consolidation Tiers]]
<!-- /wikitool:links -->
+8 -4
View File
@@ -4,7 +4,8 @@ concept_type: workflow
tags: [preflight, context, query, update] tags: [preflight, context, query, update]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [wikitool] related:
- mechanism: wikitool
sources: [Source - LLM Improvements Codex Analysis, Source - LLM Improvements Sonnet Analysis] sources: [Source - LLM Improvements Codex Analysis, Source - LLM Improvements Sonnet Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -55,15 +56,18 @@ Session Orientation ist eine obligatorische Preflight-Prüfung, die einen Kontex
## Beziehungen ## Beziehungen
- **würde implementiert von:** [[wikitool]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Codex Analysis]] - [[Source - LLM Improvements Codex Analysis]]
- [[wikitool]]
- [[Source - LLM Improvements Sonnet Analysis]] - [[Source - LLM Improvements Sonnet Analysis]]
## Fußnoten ## Fußnoten
[^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]] [^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]]
[^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]] [^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[wikitool]]
<!-- /wikitool:links -->
+8 -1
View File
@@ -4,7 +4,8 @@ concept_type: pattern
tags: [] tags: []
created: 2026-08-02 created: 2026-08-02
modified: 2026-08-29 modified: 2026-08-29
related: [Multi-Agent Collaboration] related:
- part-of: Multi-Agent Collaboration
sources: [] sources: []
confidence: 0.50 confidence: 0.50
confidence_base: 0.50 confidence_base: 0.50
@@ -38,3 +39,9 @@ TODO
## Verwandte Concepts ## Verwandte Concepts
- TODO - TODO
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Multi-Agent Collaboration]]
<!-- /wikitool:links -->
+8 -5
View File
@@ -4,7 +4,8 @@ concept_type: workflow
tags: [page-management, refactoring, link-correction, frontmatter] tags: [page-management, refactoring, link-correction, frontmatter]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [wikitool] related:
- mechanism: wikitool
sources: [Source - LLM Improvements Codex Analysis] sources: [Source - LLM Improvements Codex Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -46,20 +47,22 @@ Split Merge Reclassify bezieht sich auf dedizierte Befehle für strukturelle Sei
## Verwandte Concepts ## Verwandte Concepts
- [[wikitool]] (Werkzeug, das diese Befehle implementieren würde)
- [[Bulk Operations]] (vorhandenes Concept für geprüfte Massenvorgänge) - [[Bulk Operations]] (vorhandenes Concept für geprüfte Massenvorgänge)
- [[Entity Extraction]] (bezüglich Umklassifizierungsentscheidungen) - [[Entity Extraction]] (bezüglich Umklassifizierungsentscheidungen)
- [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis] - [[Source - LLM Improvements Codex Analysis]][^s-llm-improvements-codex-analysis]
## Beziehungen ## Beziehungen
- **würde implementiert durch:** [[wikitool]]
## Siehe auch ## Siehe auch
- [[Source - LLM Improvements Codex Analysis]] - [[Source - LLM Improvements Codex Analysis]]
- [[wikitool]]
## Fußnoten ## Fußnoten
[^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]] [^s-llm-improvements-codex-analysis]: [[Source - LLM Improvements Codex Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **mechanism:** [[wikitool]]
<!-- /wikitool:links -->
+12 -4
View File
@@ -4,7 +4,10 @@ concept_type: workflow
tags: [split, threshold, lines, pages] tags: [split, threshold, lines, pages]
created: 2026-08-03 created: 2026-08-03
modified: 2026-08-29 modified: 2026-08-29
related: [Content Quality Control, Stub Threshold, Index Scaling] related:
- part-of: Content Quality Control
- see-also: Stub Threshold
- see-also: Index Scaling
sources: [Source - LLM Improvements Sonnet Analysis] sources: [Source - LLM Improvements Sonnet Analysis]
confidence: 0.80 confidence: 0.80
confidence_base: 0.80 confidence_base: 0.80
@@ -53,9 +56,6 @@ Split Threshold definiert die maximale Größe, die eine Wiki-Seite erreichen so
## Verwandte Concepts ## Verwandte Concepts
- [[Content Quality Control]] - Breiteres Framework
- [[Stub Threshold]] - Mindestgröße-Ergänzung
- [[Index Scaling]] - Verwandte Skalierung für Index-Seiten
- [[Anti-Cramming Heuristic]] - Regel für wann neue Seiten zu erstellen sind - [[Anti-Cramming Heuristic]] - Regel für wann neue Seiten zu erstellen sind
## Siehe auch ## Siehe auch
@@ -65,3 +65,11 @@ Split Threshold definiert die maximale Größe, die eine Wiki-Seite erreichen so
## Fußnoten ## Fußnoten
[^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]] [^s-llm-improvements-sonnet-analysis]: [[Source - LLM Improvements Sonnet Analysis]]
<!-- wikitool:links -->
## Beziehungen
- **part-of:** [[Content Quality Control]]
- **see-also:** [[Stub Threshold]]
- **see-also:** [[Index Scaling]]
<!-- /wikitool:links -->

Some files were not shown because too many files have changed in this diff Show More