From 1035262d712164082f1ae6688c292c17e379bcc0 Mon Sep 17 00:00:00 2001 From: m3ta-chiron Date: Sat, 22 Aug 2026 10:15:07 +0200 Subject: [PATCH] feat(skills): az-hilfe onboarding skill + invalid skill guard fixtures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the ow-hello pilot skill (never rolled out, dropped before first commit) with az-hilfe — a German onboarding/help router skill for AZ users, modeled after the ask-matt pattern: explains the four artifact types, typical user questions with answer patterns, contribution path via IT/repo, and honest rollout status (commands/agents/mcp pending). Add five invalid skill fixtures under tests/fixtures/skills/invalid/, each failing exactly one README guard rule: missing SKILL.md, missing frontmatter opener, empty frontmatter, name != folder, missing description. Remove obsolete .gitkeep placeholders. Closes az-agent-defaults-dzx, az-agent-defaults-1ub --- .beads/interactions.jsonl | 2 + .beads/issues.jsonl | 3 +- skills/.gitkeep | 0 skills/az-hilfe/SKILL.md | 68 +++++++++++++++++++ tests/fixtures/.gitkeep | 0 .../invalid/leeres-frontmatter/SKILL.md | 7 ++ .../invalid/name-ungleich-ordner/SKILL.md | 9 +++ .../skills/invalid/ohne-description/SKILL.md | 8 +++ .../skills/invalid/ohne-frontmatter/SKILL.md | 4 ++ .../invalid/ordner-ohne-skill-md/README.md | 5 ++ 10 files changed, 105 insertions(+), 1 deletion(-) delete mode 100644 skills/.gitkeep create mode 100644 skills/az-hilfe/SKILL.md delete mode 100644 tests/fixtures/.gitkeep create mode 100644 tests/fixtures/skills/invalid/leeres-frontmatter/SKILL.md create mode 100644 tests/fixtures/skills/invalid/name-ungleich-ordner/SKILL.md create mode 100644 tests/fixtures/skills/invalid/ohne-description/SKILL.md create mode 100644 tests/fixtures/skills/invalid/ohne-frontmatter/SKILL.md create mode 100644 tests/fixtures/skills/invalid/ordner-ohne-skill-md/README.md diff --git a/.beads/interactions.jsonl b/.beads/interactions.jsonl index 0722b84..ac41c9b 100644 --- a/.beads/interactions.jsonl +++ b/.beads/interactions.jsonl @@ -1 +1,3 @@ {"id":"int-97b8d2f545bb01e5a71868be1b46d3e6","kind":"field_change","created_at":"2026-08-22T08:02:44.467228132Z","actor":"m3tam3re","issue_id":"az-agent-defaults-j35","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Closed"}} +{"id":"int-1aeab5fae03f5d2b4cb699d7c50ee4d6","kind":"field_change","created_at":"2026-08-22T08:09:02.302617707Z","actor":"m3tam3re","issue_id":"az-agent-defaults-dzx","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Skills-Slice umgesetzt: ow-hello aus az-agent-skills nach skills/ migriert (einzige Abweichung: Repo-Erwähnung L15 → az-agent-defaults); 5 ungültige Skill-Fixtures unter tests/fixtures/skills/invalid/ (ordner-ohne-skill-md, ohne-frontmatter, leeres-frontmatter, name-ungleich-ordner, ohne-description) — decken alle im README dokumentierten Skill-Guard-Fehlertypen ab, jede Fixture failt exakt eine Regel; alle 4 Akzeptanzkriterien per Skript verifiziert (15/15 PASS); .gitkeep-Platzhalter entfernt."}} +{"id":"int-ac8b30c7c6b2fe206a89b0c552ae062e","kind":"field_change","created_at":"2026-08-22T08:13:39.665260198Z","actor":"m3tam3re","issue_id":"az-agent-defaults-1ub","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"ow-hello entfernt; az-hilfe als Onboarding-/Hilfe-Skill (Entwurf) angelegt — Router-Prinzip wie ask-matt: vier Artefakt-Typen erklärt, typische Anfragen mit Antwortmustern, Beitragsweg (IT/Repo), Problemeskalation; ehrlicher Ausbaustand (Commands/Agents/MCP als in Vorbereitung). Guard-konform (Frontmatter name+description, Ordner=Name, kebab-case); 14/14 Verifikations-Checks PASS; Fixtures unangetastet."}} diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index bfdf8d6..fc12b4e 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -1,5 +1,6 @@ {"_type":"issue","id":"az-agent-defaults-j35","title":"Repo-Gerüst: vier Artefakt-Verzeichnisse + README mit Guard-Regeln je Artefakt-Typ","description":"Quelle: Spec 01-az-agent-defaults-spec.md (lokal, wird nicht gepusht).\n\naz-agent-defaults wird als reines Content-Repo die eine Wahrheitsquelle für das Company-Default-Set. Dieses Ticket liefert das Gerüst: die vier Artefakt-Verzeichnisse (skills/, commands/, agents/, mcp/) und ein README, das die Contribution-Guard-Regeln je Artefakt-Typ so dokumentiert, dass ein Fachbereichs-Contributor ohne Architektur-Wissen richtig beisteuern kann:\n\n- Skills: Ordner mit SKILL.md und Frontmatter-Öffner (wie heute)\n- Commands: Markdown mit Frontmatter (description, optional agent/model) und Template-Body (Argument-Platzhalter erlaubt)\n- Agents: Markdown mit Frontmatter (description, mode primary/subagent, optional model/temperature, Permission-Profil); Subagent-Definitionen müssen über das Task-Tool aufrufbar bleiben\n- MCP: Fragmente für den mcp-Konfigurationsschlüssel, remote/streamable als Standard, Secrets grundsätzlich nur als Platzhalter\n\nDas README hält außerdem fest: Auslieferung und Guard-Engine (Pre-Flight auf dem Controller) leben im Fleet-Repo az-fleet; dieses Repo ist Content-only und über den Repo-Ref pinbar (Default: main). Zudem die Fixtures-Konvention: Testgegenstände für die Guard-Tests leben unter tests/fixtures/ und werden nie ausgeliefert, weil die Delivery-Rolle nur die vier Typ-Verzeichnisse liest (Sonntags-Entscheidung). Das Repo verabschiedet damit den Namen az-agent-skills (User Story 2).","acceptance_criteria":"- Die vier Artefakt-Verzeichnisse skills/, commands/, agents/, mcp/ sind im Repo angelegt\n- README dokumentiert die Guard-Regeln je Artefakt-Typ vollständig (Struktur-/Frontmatter-/Platzhalter-Anforderungen gemäß Spec B1)\n- README erklärt die Content/Mechanismus-Trennung zu az-fleet (Guard-Engine und Auslieferung dort) und das Ref-Pinning\n- Die Fixtures-Konvention tests/fixtures/ ist dokumentiert (nie ausgeliefert; Begründung: Delivery liest nur die vier Typ-Verzeichnisse)\n- Ein Contributor ohne Architektur-Wissen kann anhand des README allein entscheiden, wohin ein neues Artefakt gehört und ob es die Guard-Regeln erfüllt","status":"closed","priority":1,"issue_type":"task","assignee":"m3tam3re","owner":"p@m3ta.dev","created_at":"2026-08-22T07:57:14Z","created_by":"m3tam3re","updated_at":"2026-08-22T08:02:44Z","started_at":"2026-08-22T07:59:36Z","closed_at":"2026-08-22T08:02:44Z","close_reason":"Closed","labels":["ready-for-agent"],"dependency_count":0,"dependent_count":4,"comment_count":0} +{"_type":"issue","id":"az-agent-defaults-1ub","title":"Skills: ow-hello entfernen, durch Onboarding-/Hilfe-Skill (az-hilfe, Entwurf) ersetzen","description":"Entscheidung des Nutzers (22.08.2026): ow-hello wird nicht mehr benötigt. Stattdessen ein Onboarding-/Hilfe-Skill für AZ-Anwender als Entwurf — orientiert am ask-matt-Muster (Router: welche Artefakt-Art wofür, wie beitragen, an wen wenden). Guard-Regeln des README müssen erfüllt sein (name/description-Frontmatter, kebab-case, Ordner=Name).","status":"open","priority":2,"issue_type":"feature","owner":"p@m3ta.dev","created_at":"2026-08-22T08:12:43Z","created_by":"m3tam3re","updated_at":"2026-08-22T08:12:43Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"az-agent-defaults-95y","title":"MCP-Slice: Fragment-Format (remote/streamable) + Vault-Platzhalter-Konvention + Guard-Fixtures","description":"Quelle: Spec 01-az-agent-defaults-spec.md.\n\nDefinition des MCP-Fragment-Formats für den mcp-Konfigurationsschlüssel: ein Fragment pro Server, remote/streamable als Standard (url, enabled-Flag; OAuth läuft zur Laufzeit pro Nutzer über das Microsoft-Konto — keine statischen Secrets im Fragment). Für Ausnahmen mit statischem Key definiert das Format einen Platzhalter samt Vault-Key-Namensschema: der Key liegt im Vault des Fleet-Repos und wird erst beim Merge auf dem Controller substituiert — im Repo bleibt nie ein Secret (B3).\n\nZwei Referenz-Fragmente in mcp/ (eine OAuth-Server-Anbindung, eine Key-Ausnahme mit Platzhalter) dienen als Testgegenstände für die Fleet-Szenarien „Fragmente in der aufgelösten Konfiguration sichtbar (Sidecar-Debug)\" und „Vault-Substitution funktioniert, Nutzerebene enthält kein Secret aus dem Repo\". Zusätzlich ungültige MCP-Fixtures unter tests/fixtures/ — insbesondere ein Fragment mit Inline-Secret, das der Guard rot abbrechen muss.\n","acceptance_criteria":"- Das Fragment-Format ist im README dokumentiert (ein Fragment pro Server; Felder für remote/streamable; enabled-Flag)\n- Die Platzhalter-Konvention für Key-Ausnahmen ist definiert (Syntax + Vault-Key-Namensschema; Substitution nur beim Merge auf dem Controller)\n- Ein OAuth-Referenz-Fragment und ein Key-Ausnahme-Referenz-Fragment liegen in mcp/ — beide ohne jedes Secret\n- Ungültige MCP-Testgegenstände existieren unter tests/fixtures/ (mindestens: Fragment mit Inline-Secret)\n- Keine Fixture liegt in einem ausgelieferten Typ-Verzeichnis","status":"open","priority":2,"issue_type":"feature","owner":"p@m3ta.dev","created_at":"2026-08-22T07:57:49Z","created_by":"m3tam3re","updated_at":"2026-08-22T07:57:49Z","labels":["ready-for-agent"],"dependencies":[{"issue_id":"az-agent-defaults-95y","depends_on_id":"az-agent-defaults-j35","type":"blocks","created_at":"2026-08-22T09:57:48Z","created_by":"m3tam3re","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"az-agent-defaults-gj1","title":"Commands-Slice: Referenz-Command mit Argument-Platzhaltern + Guard-Fixtures","description":"Quelle: Spec 01-az-agent-defaults-spec.md.\n\nErster exemplarischer Company-Command in commands/: Markdown mit Frontmatter (description, optional agent/model) und Template-Body mit Argument-Platzhaltern ($ARGUMENTS, $1..$n) — Format gemäß verifizierter OpenCode-Doku (global ~/.config/opencode/commands/, pro Projekt .opencode/commands/; Shell-Output-Injection und Datei-Referenzen unterstützt). Der Command ist zugleich Referenz-Beitrag für Contributor und Testgegenstand für das Fleet-Szenario „/command ist in der OpenWork-/OpenCode-Sitzung verfügbar und löst das Template aus\". Inhaltlich bewusst trivial (Platzhalter-Niveau wie ow-hello; konkrete Inhalte sind Phase 2).\n\nZusätzlich ungültige Command-Fixtures unter tests/fixtures/ (z. B. Frontmatter ohne description, Datei ohne Frontmatter).\n","acceptance_criteria":"- Ein gültiger Referenz-Command liegt in commands/ und erfüllt die README-Guard-Regeln (description im Frontmatter, Template-Body, Argument-Platzhalter genutzt)\n- Der Command folgt dem OpenCode-Command-Format, sodass er nach Fleet-Auslieferung als /slash-Befehl verfügbar ist und das Template auslöst\n- Ungültige Command-Testgegenstände existieren unter tests/fixtures/ (mindestens: ohne description, ohne Frontmatter)\n- Keine Fixture liegt in einem ausgelieferten Typ-Verzeichnis","status":"open","priority":2,"issue_type":"feature","owner":"p@m3ta.dev","created_at":"2026-08-22T07:57:49Z","created_by":"m3tam3re","updated_at":"2026-08-22T07:57:49Z","labels":["ready-for-agent"],"dependencies":[{"issue_id":"az-agent-defaults-gj1","depends_on_id":"az-agent-defaults-j35","type":"blocks","created_at":"2026-08-22T09:57:48Z","created_by":"m3tam3re","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"az-agent-defaults-gyj","title":"Agents-Slice: Referenz-Primäragent + Read-only-Subagent + Guard-Fixtures","description":"Quelle: Spec 01-az-agent-defaults-spec.md.\n\nZwei Referenz-Agent-Definitionen in agents/: ein spezialisierter Primäragent (per Agentenwechsel erreichbar) und ein Subagent mit Read-only-Permission-Profil (kein Edit/Bash) — Spezialisierung ohne Rechteausweitung (User Story 13). Beide folgen dem OpenCode-Format: Markdown mit Frontmatter (description, mode primary/subagent, optional model/temperature, Permission-Profil); Dateiname = Agentenname.\n\nKritisch: Die Subagent-Definition darf die Task-Tool-Delegation nie verbauen — Agenten müssen Subagenten weiterhin selbstständig starten können (User Story 12), und Permission-Profile dürfen niemals etwas erlauben, was der Managed-Layer verweigert (User Story 14).\n\nZusätzlich ungültige Agent-Fixtures unter tests/fixtures/ (z. B. mode fehlt, description fehlt).\n","acceptance_criteria":"- Ein Primäragent (mode: primary) und ein Subagent (mode: subagent) liegen in agents/ und erfüllen die README-Guard-Regeln\n- Der Subagent trägt ein Read-only-Permission-Profil ohne Edit/Bash\n- Die Subagent-Definition lässt Task-Tool-Aufruf und @mention zu (verbaut die Delegationsfähigkeit nicht)\n- Keine Agent-Definition weicht die Sicherheitsgrenzen des Managed-Layers auf (bleibt innerhalb des Permission-Regelwerks)\n- Ungültige Agent-Testgegenstände existieren unter tests/fixtures/ (mindestens: mode fehlt, description fehlt)\n- Keine Fixture liegt in einem ausgelieferten Typ-Verzeichnis","status":"open","priority":2,"issue_type":"feature","owner":"p@m3ta.dev","created_at":"2026-08-22T07:57:49Z","created_by":"m3tam3re","updated_at":"2026-08-22T07:57:49Z","labels":["ready-for-agent"],"dependencies":[{"issue_id":"az-agent-defaults-gyj","depends_on_id":"az-agent-defaults-j35","type":"blocks","created_at":"2026-08-22T09:57:48Z","created_by":"m3tam3re","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"az-agent-defaults-dzx","title":"Skills-Slice: ow-hello aus az-agent-skills übernehmen + Skill-Guard-Fixtures","description":"Quelle: Spec 01-az-agent-defaults-spec.md.\n\nDer Pilot-Skill ow-hello wandert aus dem Vorgänger-Repo az-agent-skills in skills/ — inhaltlich unverändert; einzig die Erwähnung „Repository az-agent-skills\" im Skill-Text wird auf az-agent-defaults aktualisiert (Ticketing-Entscheidung 22.08.2026). Damit bleibt der bestehende Skills-Spiegel (ADR-0006-Logik) ohne Funktionsverlust funktionsfähig.\n\nZusätzlich entstehen die Testgegenstände für den Guard-Test „ungültiges Artefakt im Repo → Run bricht kontrolliert ab\": unter tests/fixtures/ ungültige Skill-Artefakte (z. B. Ordner ohne SKILL.md; SKILL.md ohne Frontmatter-Öffner). Die Guard-Engine selbst implementiert az-fleet (Pre-Flight der Delivery-Rolle).\n","acceptance_criteria":"- ow-hello liegt in skills/ und ist inhaltlich identisch mit dem Stand aus az-agent-skills (einzige Abweichung: Repo-Erwähnung az-agent-defaults)\n- Frontmatter-Öffner und Struktur erfüllen die im README dokumentierten Skill-Guard-Regeln\n- Unter tests/fixtures/ existieren ungültige Skill-Testgegenstände (mindestens: Ordner ohne SKILL.md, SKILL.md ohne Frontmatter-Öffner)\n- Keine Fixture liegt in einem der vier ausgelieferten Typ-Verzeichnisse","status":"open","priority":2,"issue_type":"feature","owner":"p@m3ta.dev","created_at":"2026-08-22T07:57:48Z","created_by":"m3tam3re","updated_at":"2026-08-22T07:57:48Z","labels":["ready-for-agent"],"dependencies":[{"issue_id":"az-agent-defaults-dzx","depends_on_id":"az-agent-defaults-j35","type":"blocks","created_at":"2026-08-22T09:57:48Z","created_by":"m3tam3re","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"az-agent-defaults-dzx","title":"Skills-Slice: ow-hello aus az-agent-skills übernehmen + Skill-Guard-Fixtures","description":"Quelle: Spec 01-az-agent-defaults-spec.md.\n\nDer Pilot-Skill ow-hello wandert aus dem Vorgänger-Repo az-agent-skills in skills/ — inhaltlich unverändert; einzig die Erwähnung „Repository az-agent-skills\" im Skill-Text wird auf az-agent-defaults aktualisiert (Ticketing-Entscheidung 22.08.2026). Damit bleibt der bestehende Skills-Spiegel (ADR-0006-Logik) ohne Funktionsverlust funktionsfähig.\n\nZusätzlich entstehen die Testgegenstände für den Guard-Test „ungültiges Artefakt im Repo → Run bricht kontrolliert ab\": unter tests/fixtures/ ungültige Skill-Artefakte (z. B. Ordner ohne SKILL.md; SKILL.md ohne Frontmatter-Öffner). Die Guard-Engine selbst implementiert az-fleet (Pre-Flight der Delivery-Rolle).\n","acceptance_criteria":"- ow-hello liegt in skills/ und ist inhaltlich identisch mit dem Stand aus az-agent-skills (einzige Abweichung: Repo-Erwähnung az-agent-defaults)\n- Frontmatter-Öffner und Struktur erfüllen die im README dokumentierten Skill-Guard-Regeln\n- Unter tests/fixtures/ existieren ungültige Skill-Testgegenstände (mindestens: Ordner ohne SKILL.md, SKILL.md ohne Frontmatter-Öffner)\n- Keine Fixture liegt in einem der vier ausgelieferten Typ-Verzeichnisse","status":"closed","priority":2,"issue_type":"feature","assignee":"m3tam3re","owner":"p@m3ta.dev","created_at":"2026-08-22T07:57:48Z","created_by":"m3tam3re","updated_at":"2026-08-22T08:09:02Z","started_at":"2026-08-22T08:06:37Z","closed_at":"2026-08-22T08:09:02Z","close_reason":"Skills-Slice umgesetzt: ow-hello aus az-agent-skills nach skills/ migriert (einzige Abweichung: Repo-Erwähnung L15 → az-agent-defaults); 5 ungültige Skill-Fixtures unter tests/fixtures/skills/invalid/ (ordner-ohne-skill-md, ohne-frontmatter, leeres-frontmatter, name-ungleich-ordner, ohne-description) — decken alle im README dokumentierten Skill-Guard-Fehlertypen ab, jede Fixture failt exakt eine Regel; alle 4 Akzeptanzkriterien per Skript verifiziert (15/15 PASS); .gitkeep-Platzhalter entfernt.","labels":["ready-for-agent"],"dependencies":[{"issue_id":"az-agent-defaults-dzx","depends_on_id":"az-agent-defaults-j35","type":"blocks","created_at":"2026-08-22T09:57:48Z","created_by":"m3tam3re","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} diff --git a/skills/.gitkeep b/skills/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/skills/az-hilfe/SKILL.md b/skills/az-hilfe/SKILL.md new file mode 100644 index 0000000..1700707 --- /dev/null +++ b/skills/az-hilfe/SKILL.md @@ -0,0 +1,68 @@ +--- +name: az-hilfe +description: Einstiegs- und Orientierungshilfe für die Agenten-Workstation der AZ-Gruppe — greift, wenn ein Anwender fragt, was sein Agent kann, welches Artefakt wofür da ist, wie man etwas beiträgt oder an wen man sich bei Problemen wendet. +--- + +# AZ-Agent — Hilfe & Onboarding + +Du bist der Guide für Anwender der AZ-Agenten-Workstation. Wer diesen Skill aufruft, +will orientiert werden — nicht mit Technik-Details überschüttet werden. Antworte auf +Deutsch, freundlich und in kurzen Schritten. + +> **Status: Entwurf.** Dieses Skill ist der erste Baustein des Company-Default-Sets +> und wird mit den kommenden Artefakten (Commands, Agenten, MCP-Anbindungen) +> mitwachsen. Solange ein Bereich noch leer ist, sage das ehrlich. + +## Erste Orientierung: Was ist hier installiert? + +Die Workstation erhält ihre Standard-Artefakte zentral aus dem Repository +`az-agent-defaults` — gespiegelt über das Fleet-Repo. Es gibt vier Arten: + +| Frage des Anwenders | Artefakt-Art | Wo es liegt | +|---|---|---| +| „Mach X, wenn Y" — Verhalten beibringen | Skill | `skills/` | +| Wiederkehrenden Prompt als Tastendruck (/slash) | Command | `commands/` | +| Eigenes Agenten-Profil / Prüf-Subagenten | Agent | `agents/` | +| Werkzeug anbinden (API, Datenquelle) | MCP-Server | `mcp/` | + +**Aktuell verfügbar:** dieser Hilfe-Skill selbst. Commands, Agenten-Definitionen +und MCP-Anbindungen folgen (in Vorbereitung). Versprich nichts, was nicht +ausgeliefert ist. + +## Typische Anfragen und gute Antworten + +- **„Was kann mein Agent überhaupt?"** → Nenne die vier Artefakt-Arten oben und + was davon heute live ist. Beispiel geben: dieser Skill hier ist eins. +- **„Ich will, dass der Agent immer X tut, wenn Y."** → Das ist ein **Skill**. + Erkläre: Verhaltens-Anweisungen werden zentral gepflegt (Beitragshinweise + unten), nicht lokal auf der Workstation gebastelt. +- **„Ich tippe jeden Tag dasselbe …"** → Kandidat für einen **Command** — noch in + Vorbereitung; Wunsch aufnehmen und an die IT weiterreichen. +- **„Kann der Agent auch auf Tool Z zugreifen?"** → Das ist eine **MCP-Anbindung** + — sicherheitsrelevant, läuft über die IT (keine lokalen Einträge). +- **„Mein Kollege hat einen Skill, ich nicht."** → Auslieferung erfolgt zentral im + Fleet-Rollout: App neu starten; bleibt der Skill weg, IT kontaktieren. + +## Selbst beitragen + +Änderungen laufen **zentral über die IT** im Repository `az-agent-defaults`: + +1. Wohin gehört der Beitrag? → Tabelle oben („Wohin gehört mein Beitrag?"). +2. Das Repo-README beschreibt je Artefakt-Typ verbindliche Guard-Regeln + (Struktur, Frontmatter, Pflichtfelder) — dort steht auch je ein Minimalbeispiel. +3. Beitrag als Commit/PR einreichen; die IT prüft und rollt aus. Erst nach + Rollout und App-Neustart ist das Artefakt auf den Workstationen. + +Anwender sollten **nie** lokal in `~\.agents\skills` (oder vergleichbare +Spiegel-Verzeichnisse) editieren — lokale Änderungen werden vom nächsten +Rollout überschrieben. + +## Bei Problemen + +- Artefakt fehlt / verhält sich falsch → IT kontaktieren, mit Name des + Artefakts und kurzem Ablauf des Problems. +- Nichts funktionstüchtig ändern: Diagnose ja, lokale Reparatur nein — + sie überlebt den nächsten Rollout nicht. + +Führe darüber hinaus keine Aktionen aus. Dieser Skill orientiert — er verändert +nichts. diff --git a/tests/fixtures/.gitkeep b/tests/fixtures/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/tests/fixtures/skills/invalid/leeres-frontmatter/SKILL.md b/tests/fixtures/skills/invalid/leeres-frontmatter/SKILL.md new file mode 100644 index 0000000..d381239 --- /dev/null +++ b/tests/fixtures/skills/invalid/leeres-frontmatter/SKILL.md @@ -0,0 +1,7 @@ +--- +--- + +# Skill mit leerem Frontmatter + +Diese SKILL.md enthält einen Frontmatter-Block, aber keine Felder — weder +`name` noch `description`. Der Guard muss dieses Artefakt rot abbrechen. diff --git a/tests/fixtures/skills/invalid/name-ungleich-ordner/SKILL.md b/tests/fixtures/skills/invalid/name-ungleich-ordner/SKILL.md new file mode 100644 index 0000000..45666e0 --- /dev/null +++ b/tests/fixtures/skills/invalid/name-ungleich-ordner/SKILL.md @@ -0,0 +1,9 @@ +--- +name: total-anderer-name +description: Testgegenstand — Frontmatter-Name passt nicht zum Ordner. +--- + +# Skill mit abweichendem Namen + +Der Frontmatter-Name `total-anderer-name` passt nicht zum Ordnernamen +`name-ungleich-ordner`. Der Guard muss dieses Artefakt rot abbrechen. diff --git a/tests/fixtures/skills/invalid/ohne-description/SKILL.md b/tests/fixtures/skills/invalid/ohne-description/SKILL.md new file mode 100644 index 0000000..942e3ed --- /dev/null +++ b/tests/fixtures/skills/invalid/ohne-description/SKILL.md @@ -0,0 +1,8 @@ +--- +name: ohne-description +--- + +# Skill ohne Description + +Dieses Frontmatter enthält `name`, aber das Pflichtfeld `description` fehlt. +Der Guard muss dieses Artefakt rot abbrechen. diff --git a/tests/fixtures/skills/invalid/ohne-frontmatter/SKILL.md b/tests/fixtures/skills/invalid/ohne-frontmatter/SKILL.md new file mode 100644 index 0000000..79a7eb3 --- /dev/null +++ b/tests/fixtures/skills/invalid/ohne-frontmatter/SKILL.md @@ -0,0 +1,4 @@ +# Skill ohne Frontmatter-Öffner + +Diese SKILL.md beginnt direkt mit einer Überschrift statt mit dem +YAML-Frontmatter-Öffner. Der Guard muss dieses Artefakt rot abbrechen. diff --git a/tests/fixtures/skills/invalid/ordner-ohne-skill-md/README.md b/tests/fixtures/skills/invalid/ordner-ohne-skill-md/README.md new file mode 100644 index 0000000..7c690eb --- /dev/null +++ b/tests/fixtures/skills/invalid/ordner-ohne-skill-md/README.md @@ -0,0 +1,5 @@ +# Testgegenstand: Ordner ohne SKILL.md + +Dieser Ordner ist ein ungültiger Skill: er enthält keine `SKILL.md`, nur +diese Notiz (damit Git den Ordner überhaupt tracken kann). Der Guard muss +beim Scan der Skills-Verzeichnisse an diesem Ordner rot abbrechen.