Skip to content

refactor(contract): split architecture-documentation into vocabulary contract + arc42-authoring skill#577

Open
JensGrote wants to merge 1 commit into
LLM-Coding:mainfrom
JensGrote:feat/split-architecture-documentation-contract
Open

refactor(contract): split architecture-documentation into vocabulary contract + arc42-authoring skill#577
JensGrote wants to merge 1 commit into
LLM-Coding:mainfrom
JensGrote:feat/split-architecture-documentation-contract

Conversation

@JensGrote

@JensGrote JensGrote commented Jun 5, 2026

Copy link
Copy Markdown
Collaborator

refactor(contract): split architecture-documentation into vocabulary contract + arc42-authoring skill

(German version below)

Splits the over-grown architecture-documentation contract (2922 chars) into:

  1. A vocabulary contract (~340 chars) — declares which anchors apply
  2. A procedural skill arc42-authoring/ — carries the how-to

Closes #529. Absorbs crosscutting-concepts into the skill.


Assessment against project taxonomy

Contract/Skill boundary — catalog evidence

Characteristic Contract (vocabulary) Skill (procedure)
Purpose Pin shared vocabulary — always-on On-demand workflow machinery
Structure template field in contracts.json SKILL.md + references/ + prompts/
Invocation Loaded into every session Invoked when the task calls for it
Size norm (observed) Median 450 chars, max 1200 Unbounded (Socratic: full SKILL.md)
Naming Noun-phrase (architecture-documentation) Verb-phrase (arc42-authoring)

Size analysis — the outlier

Contract Size Pattern
architecture-documentation 2922 DECLARES + PRODUCES + CONSTRAINS
socratic-code-theory-recovery 2513 DECLARES + CONSTRAINS (has companion skill)
explaining-teaching 1226 CONSTRAINS + DELEGATES
tdd-hamburg-style 1191 CONSTRAINS + COMPOSES
All others (14) 141–708 DECLARES or CONSTRAINS

architecture-documentation is the only contract >1200 chars that has no companion skill. socratic-code-theory-recovery is similarly long but justified as a condensed reminder of its companion skill — the procedural depth lives in the skill, not the contract alone.

Precedent: "invoke a skill for depth" pattern

The explaining-teaching contract (#573) proves this pattern works:

  • Contract composes vocabulary (Bloom's, 4MAT, Feynman, Socratic)
  • Procedural depth lives in the socratic-code-theory-recovery skill
  • Contract stays at 1226 chars

Consistency with Harness Inventory

The Harness Inventory page (docs/harness-inventory.adoc) separates "what a layer checks" (definition) from "how to deploy it" (procedure). Same lens: contract = the what, skill = the how.


Changes

1. New skill: skill/arc42-authoring/

skill/arc42-authoring/
├── SKILL.md
└── references/
    ├── traceability-rules.md
    ├── chapter-10-quality-scenarios.md
    ├── chapter-11-structure.md
    ├── chapter-8-baseline.md
    ├── adr-risk-wiring.md
    └── scaffolding.md

Content extracted 1:1 from the current architecture-documentation and crosscutting-concepts contracts. No information lost — only relocated.

2. Shrunken contract: architecture-documentation

From 2922 chars → ~340 chars:

Architecture documentation follows arc42. Diagrams are C4 via PlantUML's bundled C4-PlantUML stdlib (!include <C4/...>). Decisions are Nygard ADRs with a 3-point Pugh Matrix (-1/0/+1). Quality requirements are six-part Quality Attribute Scenarios (Bass/Clements/Kazman). For procedural detail — traceability rules, chapter structure, scaffolding — invoke the arc42-authoring skill.

3. Absorbed: crosscutting-concepts

Moved to skill/arc42-authoring/references/chapter-8-baseline.md. The contract entry is removed from contracts.json.

4. Socratic overlap resolution

The socratic-code-theory-recovery skill's references/arc42.md contains a Phase 1 decomposition guide (Q-IDs, when to stop decomposing) — this is specific to the Socratic workflow, not to arc42 authoring. No overlap — both skills coexist without duplication:

Skill arc42 content Purpose
arc42-authoring Traceability rules, chapter structure, scaffolding Producing documentation
socratic-code-theory-recovery Q3 decomposition hints, leaf-vs-branch criteria Recovering documentation from code

Tradeoff acknowledged

The traceability rules move from always-on to on-demand. For architecture work the skill is invoked anyway — no loss. For someone only reading the contract as a reminder, the detail was already too large for always-on context — this is a correction, not a regression (as #529 states).



Deutsche Version

refactor(contract): architecture-documentation in Vokabular-Contract + arc42-authoring-Skill aufteilen

Teilt den überwachsenen architecture-documentation-Contract (2922 Zeichen) auf in:

  1. Einen Vokabular-Contract (~340 Zeichen) — deklariert welche Anchors gelten
  2. Einen prozeduralen Skill arc42-authoring/ — enthält das Wie

Schließt #529. Absorbiert crosscutting-concepts in den Skill.


Bewertung gegen die Projekt-Taxonomie

Contract/Skill-Grenze — Katalog-Evidenz

Eigenschaft Contract (Vokabular) Skill (Prozedur)
Zweck Geteiltes Vokabular pinnen — always-on On-demand Workflow-Maschinerie
Struktur template-Feld in contracts.json SKILL.md + references/ + prompts/
Aufruf In jeder Session geladen Aufgerufen wenn die Aufgabe es erfordert
Größennorm (beobachtet) Median 450 Zeichen, Maximum 1200 Unbegrenzt (Socratic: vollständige SKILL.md)
Benennung Nomen-Phrase (architecture-documentation) Verb-Phrase (arc42-authoring)

Größenanalyse — der Ausreißer

Contract Größe Pattern
architecture-documentation 2922 DECLARES + PRODUCES + CONSTRAINS
socratic-code-theory-recovery 2513 DECLARES + CONSTRAINS (hat Begleit-Skill)
explaining-teaching 1226 CONSTRAINS + DELEGATES
tdd-hamburg-style 1191 CONSTRAINS + COMPOSES
Alle anderen (14) 141–708 DECLARES oder CONSTRAINS

architecture-documentation ist der einzige Contract >1200 Zeichen ohne Begleit-Skill. socratic-code-theory-recovery ist ähnlich lang, aber gerechtfertigt als kondensierte Erinnerung seines Begleit-Skills — die prozedurale Tiefe lebt im Skill, nicht allein im Contract.

Präzedenzfall: „invoke a skill for depth"-Pattern

Der explaining-teaching-Contract (#573) beweist, dass dieses Pattern funktioniert:

  • Contract komponiert Vokabular (Bloom's, 4MAT, Feynman, Socratic)
  • Prozedurale Tiefe lebt im socratic-code-theory-recovery-Skill
  • Contract bleibt bei 1226 Zeichen

Konsistenz mit der Harness Inventory

Die Harness-Inventory-Seite (docs/harness-inventory.adoc) trennt „was eine Schicht prüft" (Definition) von „wie man sie deployt" (Prozedur). Gleiche Linse: Contract = das Was, Skill = das Wie.


Änderungen

1. Neuer Skill: skill/arc42-authoring/

skill/arc42-authoring/
├── SKILL.md
└── references/
    ├── traceability-rules.md
    ├── chapter-10-quality-scenarios.md
    ├── chapter-11-structure.md
    ├── chapter-8-baseline.md
    ├── adr-risk-wiring.md
    └── scaffolding.md

Inhalt 1:1 extrahiert aus den aktuellen Contracts architecture-documentation und crosscutting-concepts. Keine Information geht verloren — nur umgezogen.

2. Eingedampfter Contract: architecture-documentation

Von 2922 Zeichen → ~340 Zeichen:

Architekturdokumentation folgt arc42. Diagramme sind C4 über PlantUMLs gebundelte C4-PlantUML-Stdlib (!include <C4/...>). Entscheidungen sind Nygard-ADRs mit einer 3-Punkte Pugh-Matrix (-1/0/+1). Qualitätsanforderungen sind sechsteilige Quality Attribute Scenarios (Bass/Clements/Kazman). Für prozedurale Details — Traceability-Regeln, Kapitelstruktur, Scaffolding — den arc42-authoring-Skill aufrufen.

3. Absorbiert: crosscutting-concepts

Verschoben nach skill/arc42-authoring/references/chapter-8-baseline.md. Der Contract-Eintrag wird aus contracts.json entfernt.

4. Socratic-Überschneidung aufgelöst

Die references/arc42.md des socratic-code-theory-recovery-Skills enthält einen Phase-1-Dekompositions-Guide (Q-IDs, wann man aufhört zu dekomponieren) — das ist spezifisch für den Socratic-Workflow, nicht für arc42-Authoring. Keine Überschneidung — beide Skills koexistieren ohne Duplikation:

Skill arc42-Inhalt Zweck
arc42-authoring Traceability-Regeln, Kapitelstruktur, Scaffolding Dokumentation produzieren
socratic-code-theory-recovery Q3-Dekompositions-Hints, Leaf-vs-Branch-Kriterien Dokumentation aus Code recovern

Trade-off anerkannt

Die Traceability-Regeln wandern von always-on zu on-demand. Für Architekturarbeit wird der Skill ohnehin aufgerufen — kein Verlust. Für jemanden, der den Contract nur als Erinnerung liest, war das Detail bereits zu umfangreich für always-on-Kontext — dies ist eine Korrektur, keine Regression (wie #529 feststellt).

Summary by CodeRabbit

Documentation

  • Umfassende Richtlinien zur Erstellung und Pflege von arc42-Architektur‑Dokumentationen hinzugefügt
  • Einheitliches Six‑Part‑Format für Quality‑Szenarien und Statusmodell eingeführt
  • Kapitelstruktur für Risiken und Technical Debt mit stabilen IDs und Priorisierung definiert
  • Traceability‑Regeln und ADR↔Risk‑Verknüpfungslogik festgelegt
  • Vorgaben für Crosscutting Concepts, Scaffolding und Diagrammkonventionen ergänzt

Chores

  • JSON‑Formatierung in öffentlichen Daten optimiert

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Diese Änderung fügt eine neue arc42‑Authoring‑Skill mit Referenzdokumenten für Scaffolding, Kapitel‑8/10/11‑Strukturen, ADR↔Risk‑Wiring und Traceability hinzu und reformatiert mehrere anchors‑Arrays in website/public/data/contracts.json.

Changes

arc42-Authoring-Skill-Definition

Layer / File(s) Summary
Skill-Einstiegspunkt und Struktur
skill/arc42-authoring/SKILL.md
Hauptdokumentation mit Metadaten, Invocation‑Optionen und Verweisen auf alle Referenzmodule.
Scaffolding & Kapitel‑8 Baseline
skill/arc42-authoring/references/scaffolding.md, skill/arc42-authoring/references/chapter-8-baseline.md
Anweisungen zum Scaffolding (docToolchain, PlantUML/C4) und fünf verpflichtende Kapitel‑8‑Konzepte mit Back‑Referencing zu Kapitel‑9‑ADRs.
Kapitel‑10 Quality Scenarios & Kapitel‑11 Struktur
skill/arc42-authoring/references/chapter-10-quality-scenarios.md, skill/arc42-authoring/references/chapter-11-structure.md
Six‑Part‑Format für Quality Scenarios; Kapitel‑11 in Risks vs. Technical Debt mit R‑NNN/TD‑NNN ID‑Schemen.
ADR ↔ Risk Wiring
skill/arc42-authoring/references/adr-risk-wiring.md
Regeln zur Referenzierung von Risiken in ADR‑Consequences, inverse Referenzen, inferierte Entscheidungen und ADR‑Erstellungs‑Template.
Cross‑Section Traceability & Verifikation
skill/arc42-authoring/references/traceability-rules.md
Verbindliche Traceability‑Regeln zwischen arc42‑Kapiteln und eine Verifikations‑Checkliste.
contracts.json‑Ankerpunkte Reformatierung
website/public/data/contracts.json
Umstellung von einzeiligen auf mehrzeilige, eingerückte anchors‑Arrays in mehreren Vertragsdefinitionen ohne semantische Änderung.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

  • #529 — Implementiert die vorgeschlagene Aufteilung: prozedurale arc42‑Dokumentationsregeln werden in eine Skill ausgelagert, während der Vertrag sich auf knappe Vokabeln reduziert.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Der PR-Titel beschreibt genau die Hauptänderung: Aufspaltung des architecture-documentation-Contracts in einen Vocabulary-Contract und eine neue arc42-authoring-Skill.
Linked Issues check ✅ Passed Der PR erfüllt alle Anforderungen aus Issue #529: Der Contract wurde auf Vocabulary-Kernpunkte reduziert, eine neue arc42-authoring-Skill mit umfangreicher Dokumentation wurde erstellt, und crosscutting-concepts wurden absorbiert.
Out of Scope Changes check ✅ Passed Alle Änderungen sind direkt mit dem Refactoring-Ziel verknüpft: neue Skill-Dateien, Dokumentation und minimale Formatierungsanpassungen in contracts.json.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@JensGrote JensGrote force-pushed the feat/split-architecture-documentation-contract branch from d30c1e2 to ec0d14b Compare June 9, 2026 08:33
@JensGrote JensGrote marked this pull request as ready for review June 9, 2026 08:33
@JensGrote JensGrote changed the title feat(skill): split architecture-documentation contract into vocabulary + arc42-authoring skill refactor(contract): split architecture-documentation into vocabulary contract + arc42-authoring skill Jun 9, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skill/arc42-authoring/references/adr-risk-wiring.md`:
- Line 27: The fenced code block at the top of adr-risk-wiring.md currently
starts with triple backticks only (` ``` `); update that opening fence to
include the language identifier by changing it to "```markdown" so the block
becomes "```markdown" followed by the "# ADR-NNN: <Title>" line to enable syntax
highlighting.

In `@website/public/data/contracts.json`:
- Around line 41-47: Update the two references/catalog.md files to include the
missing anchor entries so they match the anchor IDs listed in contracts.json and
the files in docs/anchors; specifically add entries for "arc42" (if absent),
"adr-according-to-nygard", "bdd-given-when-then", "pugh-matrix", and
"quality-attribute-scenario" (and any other anchor IDs present in
website/public/data/contracts.json but missing from catalog.md), ensuring each
entry uses the same anchor ID string and the same display/title format used for
existing anchors in those catalog.md files so the catalogs stay synchronized
with docs/anchors and contracts.json.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 30278b24-ca55-4d67-8bfb-6ebbc02f891b

📥 Commits

Reviewing files that changed from the base of the PR and between 957a67a and ec0d14b.

📒 Files selected for processing (8)
  • skill/arc42-authoring/SKILL.md
  • skill/arc42-authoring/references/adr-risk-wiring.md
  • skill/arc42-authoring/references/chapter-10-quality-scenarios.md
  • skill/arc42-authoring/references/chapter-11-structure.md
  • skill/arc42-authoring/references/chapter-8-baseline.md
  • skill/arc42-authoring/references/scaffolding.md
  • skill/arc42-authoring/references/traceability-rules.md
  • website/public/data/contracts.json


When creating a new ADR, use this template:

```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Sprachkennung für Code-Block ergänzen.

Der Fenced Code Block sollte eine Sprachkennung haben, um Syntax-Highlighting zu ermöglichen. Fügen Sie markdown nach den öffnenden Backticks hinzu.

📝 Vorgeschlagene Korrektur
-```
+```markdown
 # ADR-NNN: <Title>
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 27-27: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skill/arc42-authoring/references/adr-risk-wiring.md` at line 27, The fenced
code block at the top of adr-risk-wiring.md currently starts with triple
backticks only (` ``` `); update that opening fence to include the language
identifier by changing it to "```markdown" so the block becomes "```markdown"
followed by the "# ADR-NNN: <Title>" line to enable syntax highlighting.

Source: Linters/SAST tools

Comment on lines +41 to +47
"anchors": [
"arc42",
"c4-diagrams",
"adr-according-to-nygard",
"pugh-matrix",
"quality-attribute-scenario"
],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Beschreibung: Alle Anchor-IDs aus contracts.json extrahieren und gegen docs/anchors/ prüfen

# Alle Anchor-IDs aus contracts.json sammeln
echo "=== Anchors aus contracts.json ==="
jq -r '.[].anchors[]' website/public/data/contracts.json | sort -u > /tmp/contract_anchors.txt
cat /tmp/contract_anchors.txt

# Alle Anchor-Dateien in docs/anchors/ auflisten
echo -e "\n=== Anchor-Dateien in docs/anchors/ ==="
if [ -d "docs/anchors" ]; then
  fd -t f . docs/anchors/ -x basename {} .md | sort -u > /tmp/docs_anchors.txt
  cat /tmp/docs_anchors.txt
  
  # Differenz: Anchors in contracts.json, die nicht in docs/anchors/ sind
  echo -e "\n=== In contracts.json, aber NICHT in docs/anchors/ ==="
  comm -23 /tmp/contract_anchors.txt /tmp/docs_anchors.txt
  
  # Differenz: Anchors in docs/anchors/, die nicht in contracts.json sind
  echo -e "\n=== In docs/anchors/, aber NICHT in contracts.json ==="
  comm -13 /tmp/contract_anchors.txt /tmp/docs_anchors.txt
else
  echo "Verzeichnis docs/anchors/ nicht gefunden"
fi

# Katalog-Check
echo -e "\n=== Prüfe skill/arc42-authoring/references/catalog.md ==="
if [ -f "skill/arc42-authoring/references/catalog.md" ]; then
  echo "Katalog existiert, prüfe auf fehlende Einträge:"
  while IFS= read -r anchor; do
    if ! rg -q "^## $anchor" skill/arc42-authoring/references/catalog.md; then
      echo "  Fehlender Katalog-Eintrag: $anchor"
    fi
  done < /tmp/contract_anchors.txt
else
  echo "Katalog nicht gefunden"
fi

Repository: LLM-Coding/Semantic-Anchors

Length of output: 16463


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Anchors aus contracts.json
jq -r '.[].anchors[]' website/public/data/contracts.json | sort -u > /tmp/contract_anchors.txt

echo "=== Anchors aus contracts.json (IDs) ==="
cat /tmp/contract_anchors.txt

# 2) Anchors aus docs/anchors/ (Dateinamen -> IDs ohne Endung)
echo
echo "=== Anchor-Dateien in docs/anchors/ (IDs) ==="
if [ -d "docs/anchors" ]; then
  fd -t f . docs/anchors/ --extension md --extension adoc 2>/dev/null || true
  # Robust: alle *.<ext> in docs/anchors nehmen und Endung entfernen
  fd -t f . docs/anchors/ -e adoc -e md 2>/dev/null | sed 's|.*/||' | sed 's/\.[^.]*$//' | sort -u > /tmp/docs_anchor_ids.txt
  cat /tmp/docs_anchor_ids.txt
else
  echo "Verzeichnis docs/anchors/ nicht gefunden"
  exit 0
fi

# Differenzen (IDs)
echo
echo "=== In contracts.json, aber NICHT in docs/anchors/ (IDs) ==="
comm -23 /tmp/contract_anchors.txt /tmp/docs_anchor_ids.txt || true

echo
echo "=== In docs/anchors/, aber NICHT in contracts.json (IDs) ==="
comm -13 /tmp/contract_anchors.txt /tmp/docs_anchor_ids.txt || true

# 3) Katalog finden (Pfad war vorher ggf. falsch)
echo
echo "=== Suche nach catalog.md ==="
fd -t f "catalog.md" . 2>/dev/null | head -n 50

# 4) Katalog-Check gegen die gefundene(n) Datei(n)
echo
echo "=== Prüfe Anchors im gefundenen Katalog ==="
for catalog in $(fd -t f "catalog.md" . 2>/dev/null); do
  echo
  echo "Katalog: $catalog"
  missing_count=0
  while IFS= read -r anchor; do
    # Erwartung: als Heading (z.B. '## arc42') oder beliebiger Treffer
    if ! rg -q -S "^(###+[[:space:]]+)?${anchor}([[:space:]]|$)" "$catalog"; then
      echo "  Fehlender Katalog-Eintrag (kein Heading/Token-Treffer): $anchor"
      missing_count=$((missing_count+1))
    fi
  done < /tmp/contract_anchors.txt
  echo "Fehlende Anchors im Katalog: $missing_count"
done

Repository: LLM-Coding/Semantic-Anchors

Length of output: 28606


🏁 Script executed:

#!/bin/bash
set -euo pipefail

catalogs=(
  "./plugins/semantic-anchors/skills/semantic-anchor-translator/references/catalog.md"
  "./skill/semantic-anchor-translator/references/catalog.md"
)

# Pick a few anchors that contracts.json references
anchors=(
  "arc42"
  "adr-according-to-nygard"
  "bdd-given-when-then"
  "pugh-matrix"
  "walking-skeleton"
)

for c in "${catalogs[@]}"; do
  echo "================ $c ================"
  if [ ! -f "$c" ]; then
    echo "(nicht gefunden)"
    continue
  fi

  for a in "${anchors[@]}"; do
    echo "-- Treffer für: $a"
    # Show up to 20 matching lines with context
    rg -n -S --context 2 "$a" "$c" | head -n 20 || true
  done

  echo "-- Erste 120 Zeilen des Katalogs (Strukturüberblick)"
  head -n 120 "$c" | nl -ba | head -n 120
done

Repository: LLM-Coding/Semantic-Anchors

Length of output: 1754


🏁 Script executed:

#!/bin/bash
set -euo pipefail

catalogs=(
  "./plugins/semantic-anchors/skills/semantic-anchor-translator/references/catalog.md"
  "./skill/semantic-anchor-translator/references/catalog.md"
)

# Anchors aus contracts.json zum Abgleich
anchors=(
  "arc42"
  "adr-according-to-nygard"
  "bdd-given-when-then"
  "pugh-matrix"
  "walking-skeleton"
)

for c in "${catalogs[@]}"; do
  echo "================ $c ================"
  [ -f "$c" ] || { echo "(nicht gefunden)"; continue; }

  for a in "${anchors[@]}"; do
    echo "-- Treffer für: $a"
    rg -n -S --context 2 "$a" "$c" | head -n 20 || true
  done

  echo "-- Erste 120 Zeilen des Katalogs (Strukturüberblick)"
  head -n 120 "$c" | nl -ba
done

Repository: LLM-Coding/Semantic-Anchors

Length of output: 1754


🏁 Script executed:

#!/bin/bash
set -euo pipefail

catalogs=(
  "./plugins/semantic-anchors/skills/semantic-anchor-translator/references/catalog.md"
  "./skill/semantic-anchor-translator/references/catalog.md"
)

anchors=(
  "adr-according-to-nygard"
  "arc42"
  "bdd-given-when-then"
  "pugh-matrix"
  "quality-attribute-scenario"
  "walking-skeleton"
)

for c in "${catalogs[@]}"; do
  echo "================ Katalog: $c ================"
  [ -f "$c" ] || { echo "(nicht gefunden)"; continue; }

  for a in "${anchors[@]}"; do
    echo "-- Treffer für: $a (case-insensitiv)"
    rg -n -i -S "$a" "$c" | head -n 20 || true
  done
done

Repository: LLM-Coding/Semantic-Anchors

Length of output: 2331


🏁 Script executed:

#!/bin/bash
set -euo pipefail

catalogs=(
  "./plugins/semantic-anchors/skills/semantic-anchor-translator/references/catalog.md"
  "./skill/semantic-anchor-translator/references/catalog.md"
)

# Anchors aus contracts.json
jq -r '.[].anchors[]' website/public/data/contracts.json | sort -u > /tmp/contract_anchors.txt

slugify() {
  # input: title text
  # output: lower kebab-case
  echo "$1" \
    | tr '[:upper:]' '[:lower:]' \
    | sed -E 's/[’'\''"]/ /g' \
    | sed -E 's/[^a-z0-9]+/-/g' \
    | sed -E 's/^-+//' \
    | sed -E 's/-+$//' \
    | sed -E 's/--+/-/g'
}

for c in "${catalogs[@]}"; do
  echo "================ Katalog: $c ================"
  [ -f "$c" ] || { echo "(nicht gefunden)"; continue; }

  # Slug-Liste aus den ### Überschriften
  rg -n '^### ' "$c" | sed -E 's/^([0-9]+:)?###[[:space:]]+//' | while IFS= read -r title; do
    slugify "$title"
  done | sort -u > /tmp/catalog_slugs.txt

  echo "=== Vergleich: contracts.json Anchors vs. Katalog-Slugs ==="
  echo "=== In contracts.json, aber NICHT als slug in catalog.md ==="
  comm -23 /tmp/contract_anchors.txt /tmp/catalog_slugs.txt || true

  echo
  echo "=== In catalog.md, aber NICHT in contracts.json ==="
  comm -13 /tmp/contract_anchors.txt /tmp/catalog_slugs.txt || true

  echo
  echo "=== Anzahl: contracts=$(wc -l < /tmp/contract_anchors.txt), catalog_slugs=$(wc -l < /tmp/catalog_slugs.txt) ==="
done

Repository: LLM-Coding/Semantic-Anchors

Length of output: 6929


🏁 Script executed:

#!/bin/bash
set -euo pipefail

catalogs=(
  "./plugins/semantic-anchors/skills/semantic-anchor-translator/references/catalog.md"
  "./skill/semantic-anchor-translator/references/catalog.md"
)

anchors=(
  "adr-according-to-nygard"
  "arc42"
  "bdd-given-when-then"
  "pugh-matrix"
  "quality-attribute-scenario"
  "walking-skeleton"
)

for c in "${catalogs[@]}"; do
  echo "================ Katalog: $c ================"
  [ -f "$c" ] || { echo "(nicht gefunden)"; continue; }
  for a in "${anchors[@]}"; do
    echo "-- Suche in Katalog für: $a"
    # Zeige ggf. die ersten Trefferzeilen
    if rg -n -i -S "$a" "$c" | head -n 5 | sed 's/^/   /'; then
      :
    else
      echo "   (keine Treffer)"
    fi
  done
done

Repository: LLM-Coding/Semantic-Anchors

Length of output: 2431


Anchors sind in docs/anchors/ vorhanden, aber in references/catalog.md fehlen mehrere Einträge

Die Anchors aus website/public/data/contracts.json (u.a. arc42, adr-according-to-nygard, bdd-given-when-then, pugh-matrix, quality-attribute-scenario) existieren als Dateien in docs/anchors/.

In den gefundenen catalog.md-Dateien sind diese Anchors jedoch (außer arc42) nicht enthalten:

  • ./plugins/semantic-anchors/skills/semantic-anchor-translator/references/catalog.md
  • ./skill/semantic-anchor-translator/references/catalog.md

Bitte references/catalog.md so ergänzen, dass die Einträge mit den Anchor-IDs aus contracts.json/docs/anchors/ synchron sind.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website/public/data/contracts.json` around lines 41 - 47, Update the two
references/catalog.md files to include the missing anchor entries so they match
the anchor IDs listed in contracts.json and the files in docs/anchors;
specifically add entries for "arc42" (if absent), "adr-according-to-nygard",
"bdd-given-when-then", "pugh-matrix", and "quality-attribute-scenario" (and any
other anchor IDs present in website/public/data/contracts.json but missing from
catalog.md), ensuring each entry uses the same anchor ID string and the same
display/title format used for existing anchors in those catalog.md files so the
catalogs stay synchronized with docs/anchors and contracts.json.

Source: Coding guidelines

…+ arc42-authoring skill

Extract procedural content from the over-grown architecture-documentation
contract (2922 chars) into a new arc42-authoring skill. Absorb
crosscutting-concepts contract into the skill as chapter-8-baseline.md.
Shrink architecture-documentation contract to vocabulary only (~385 chars).

Closes LLM-Coding#529
@JensGrote JensGrote force-pushed the feat/split-architecture-documentation-contract branch from ec0d14b to 3ab1a88 Compare June 9, 2026 09:08

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
skill/arc42-authoring/references/chapter-10-quality-scenarios.md (1)

1-29: ⚠️ Potential issue | 🔴 Critical

Pflicht-Check zur Anchor-Synchronisation: erforderliche Dateien/Verzeichnisse fehlen
Der Check kann nicht durchgeführt werden, weil im Repo kein docs/anchors-Verzeichnis gefunden wurde und skill/arc42-authoring/references/catalog.md nicht existiert (stattdessen nur skill/semantic-anchor-translator/references/catalog.md vorhanden). Entsprechend muss die fehlende docs/anchors-Quelle und/oder der fehlende skill/arc42-authoring-Catalog ergänzt bzw. korrigiert werden.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skill/arc42-authoring/references/chapter-10-quality-scenarios.md` around
lines 1 - 29, Der Pflicht-Check schlägt fehl, weil das Verzeichnis docs/anchors
fehlt und die erwartete Datei skill/arc42-authoring/references/catalog.md nicht
vorhanden ist (stattdessen existiert nur
skill/semantic-anchor-translator/references/catalog.md); behebe dies, indem du
entweder das fehlende docs/anchors-Verzeichnis und die darin benötigten
Anchor-Quellen anlegst oder den Pfad in der Check-Logik/CI so korrigierst, dass
auf die vorhandene skill/semantic-anchor-translator/references/catalog.md
verwiesen wird; stelle sicher, dass die Anchors im richtigen Format und Ort
liegen und passe ggf. alle Referenzen/Configs an, die auf
skill/arc42-authoring/references/catalog.md verweisen.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@skill/arc42-authoring/references/chapter-10-quality-scenarios.md`:
- Around line 1-29: Der Pflicht-Check schlägt fehl, weil das Verzeichnis
docs/anchors fehlt und die erwartete Datei
skill/arc42-authoring/references/catalog.md nicht vorhanden ist (stattdessen
existiert nur skill/semantic-anchor-translator/references/catalog.md); behebe
dies, indem du entweder das fehlende docs/anchors-Verzeichnis und die darin
benötigten Anchor-Quellen anlegst oder den Pfad in der Check-Logik/CI so
korrigierst, dass auf die vorhandene
skill/semantic-anchor-translator/references/catalog.md verwiesen wird; stelle
sicher, dass die Anchors im richtigen Format und Ort liegen und passe ggf. alle
Referenzen/Configs an, die auf skill/arc42-authoring/references/catalog.md
verweisen.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 7ec70d77-6e35-4a77-b0fe-27a550f46863

📥 Commits

Reviewing files that changed from the base of the PR and between ec0d14b and 3ab1a88.

📒 Files selected for processing (8)
  • skill/arc42-authoring/SKILL.md
  • skill/arc42-authoring/references/adr-risk-wiring.md
  • skill/arc42-authoring/references/chapter-10-quality-scenarios.md
  • skill/arc42-authoring/references/chapter-11-structure.md
  • skill/arc42-authoring/references/chapter-8-baseline.md
  • skill/arc42-authoring/references/scaffolding.md
  • skill/arc42-authoring/references/traceability-rules.md
  • website/public/data/contracts.json
✅ Files skipped from review due to trivial changes (3)
  • skill/arc42-authoring/references/traceability-rules.md
  • skill/arc42-authoring/references/scaffolding.md
  • skill/arc42-authoring/references/chapter-8-baseline.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • skill/arc42-authoring/references/chapter-11-structure.md
  • website/public/data/contracts.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Split the over-grown Architecture Documentation contract: vocabulary stays, procedure moves to a skill

1 participant