docs(genome): Konzept aktualisiert + Mermaid-Diagramme, Inkonsistenzen behoben
- genome-engine.md: Script-Name, Pfade, Scope korrigiert, Mermaid-Visualisierungen - genome-extract.py: dynamisches Pattern statt hardcoded kotlin-conventions - SKILL.md: vollständige Dateiliste mit korrekten Pfaden - genome.prompt.md: Referenz auf Konzept-Dokument korrigiert
This commit is contained in:
parent
7ea7729f96
commit
d59663a2fa
4 changed files with 157 additions and 51 deletions
2
.github/prompts/genome.prompt.md
vendored
2
.github/prompts/genome.prompt.md
vendored
|
|
@ -6,7 +6,7 @@ tools: [read, edit, search, execute]
|
|||
|
||||
# Genome Engine
|
||||
|
||||
> **Skill-Referenz:** Lies `.github/skills/genome/SKILL.md` für das vollständige Konzept.
|
||||
> **Konzept-Dokument:** `docs/genome-engine.md` · **Skill-Doku:** `.github/skills/genome/SKILL.md`
|
||||
|
||||
Du orchestrierst die 3 Phasen der Genome Engine: **Extraction → Distillation → Propagation**.
|
||||
|
||||
|
|
|
|||
12
.github/skills/genome/SKILL.md
vendored
12
.github/skills/genome/SKILL.md
vendored
|
|
@ -36,10 +36,14 @@ Der Router-Prompt fragt nach Quell-Repo und Zeitspanne, dann orchestriert er all
|
|||
|
||||
## Dateien
|
||||
|
||||
| Datei | Zweck |
|
||||
| ------------------- | --------------------------------------- |
|
||||
| `SKILL.md` | Diese Dokumentation |
|
||||
| `genome-extract.py` | Phase 1: Git-Scanning + Trait-Erkennung |
|
||||
| Datei | Ort | Zweck |
|
||||
| -------------------------------------------- | ---------------------- | --------------------------------------- |
|
||||
| `SKILL.md` | `.github/skills/genome/` | Diese Dokumentation |
|
||||
| `genome-extract.py` | `.github/skills/genome/` | Phase 1: Git-Scanning + Trait-Erkennung |
|
||||
| `genome.prompt.md` | `.github/prompts/` | Orchestrator (Router für alle 3 Phasen) |
|
||||
| `genome-distill.prompt.md` | `.github/prompts/` | Phase 2: Klassifizierung + Scoring |
|
||||
| `genome-propagate.prompt.md` | `.github/prompts/` | Phase 3: Patch-Generierung für Ziel |
|
||||
| `genome-engine.md` | `docs/` | Vollständiges Konzept-Dokument |
|
||||
|
||||
## Trait-Erkennung
|
||||
|
||||
|
|
|
|||
7
.github/skills/genome/genome-extract.py
vendored
7
.github/skills/genome/genome-extract.py
vendored
|
|
@ -27,9 +27,11 @@ GENOME_SCOPES = [
|
|||
".github/agents/",
|
||||
".github/prompts/",
|
||||
".github/copilot-instructions.md",
|
||||
".github/kotlin-conventions.instructions.md",
|
||||
]
|
||||
|
||||
# Dynamisches Pattern für weitere Instructions-Dateien
|
||||
INSTRUCTIONS_PATTERN = re.compile(r"^\.github/[^/]+\.instructions\.md$")
|
||||
|
||||
MAX_DIFF_LINES = 80
|
||||
|
||||
|
||||
|
|
@ -55,6 +57,9 @@ def is_in_genome_scope(filepath: str) -> bool:
|
|||
else:
|
||||
if filepath == scope:
|
||||
return True
|
||||
# Dynamisch: .github/*.instructions.md
|
||||
if INSTRUCTIONS_PATTERN.match(filepath):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,32 @@
|
|||
|
||||
Automatische Erkennung evolutionärer Verbesserungen an Copilot-Customization-Dateien (Skills, Agents, Prompts, Instructions) über Git-History hinweg. Die erkannten Verbesserungen werden destilliert, bewertet und als Propagation-Vorschläge für andere Projekte bereitgestellt.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[Repo A<br/>Verbesserungen] -->|Git-History| E[Extraction]
|
||||
E -->|raw-mutations| D[Distillation]
|
||||
D -->|Growth Vectors| P[Propagation]
|
||||
P -->|Patches| B[Repo B<br/>aktualisiert]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Begriffe
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
G[🧬 Genome<br/>Gesamtheit aller Traits] --> T1[Trait: Skill]
|
||||
G --> T2[Trait: Agent]
|
||||
G --> T3[Trait: Prompt]
|
||||
G --> T4[Trait: Instructions]
|
||||
T1 -->|Git-Delta| M1[Mutation]
|
||||
T3 -->|Git-Delta| M2[Mutation]
|
||||
M1 -->|destilliert| GV1[Growth Vector<br/>Score 8/10 🟡]
|
||||
M2 -->|destilliert| GV2[Growth Vector<br/>Score 9/10 🔴]
|
||||
GV1 --> PR[Propagation<br/>Konkrete Patches]
|
||||
GV2 --> PR
|
||||
```
|
||||
|
||||
| Begriff | Bedeutung |
|
||||
| ----------------- | ----------------------------------------------------------------------------------------- |
|
||||
| **Trait** | Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File inkl. aller zugehörigen Dateien |
|
||||
|
|
@ -26,6 +48,7 @@ Folgende Pfade bilden das Genome:
|
|||
- `.github/agents/**`
|
||||
- `.github/prompts/**`
|
||||
- `.github/copilot-instructions.md`
|
||||
- `.github/*.instructions.md`
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -33,6 +56,17 @@ Folgende Pfade bilden das Genome:
|
|||
|
||||
Traits werden aus dem Dateipfad abgeleitet. Die Granularität hängt vom Trait-Typ ab:
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
F[Dateipfad] --> S{Pfad-Pattern?}
|
||||
S -->|.github/skills/X/...| SK["skill/X"]
|
||||
S -->|.github/agents/X.agent.md| AG["agent/X"]
|
||||
S -->|.github/prompts/X.prompt.md| PM{Verbund?}
|
||||
S -->|.github/*.instructions.md| IN["instructions/X"]
|
||||
PM -->|"X-*.prompt.md existiert"| VB["prompt/X<br/>(Verbund)"]
|
||||
PM -->|Keine Sub-Prompts| SA["prompt/X<br/>(Standalone)"]
|
||||
```
|
||||
|
||||
### Skills
|
||||
|
||||
Ein Skill besteht aus einem Ordner mit mehreren zusammengehörigen Dateien (SKILL.md, Scripte, Templates). Der **Ordnername** ist der Trait-Schlüssel.
|
||||
|
|
@ -69,7 +103,6 @@ Einzeldateien ohne Router-Beziehung. Der **Dateiname** ist der Trait-Schlüssel.
|
|||
.github/prompts/commit.prompt.md → trait: prompt/commit
|
||||
.github/prompts/ship.prompt.md → trait: prompt/ship
|
||||
.github/prompts/publish.prompt.md → trait: prompt/publish
|
||||
.github/prompts/clean.prompt.md → trait: prompt/clean
|
||||
```
|
||||
|
||||
**Regel:** `prompt/<dateiname-ohne-extension>` – 1:1-Zuordnung Datei → Trait.
|
||||
|
|
@ -81,18 +114,11 @@ Wenn eine Prompt-Datei eine Routing-Tabelle mit Verweisen auf andere `.prompt.md
|
|||
```
|
||||
.github/prompts/nextstep.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-implementation.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-infrastructure.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-planning.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-block-planning.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-tech-decision.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-test.prompt.md → trait: prompt/nextstep
|
||||
```
|
||||
|
||||
**Regel:** `prompt/<router-name>` – Router (`<name>.prompt.md`) + alle `<name>-*.prompt.md`-Dateien gehören zum selben Trait.
|
||||
|
||||
**Begründung:** Der gesamte Workflow (Router + Sub-Prompts) ist semantisch eine Einheit (~300 Zeilen). Ein neuer Sub-Workflow ist nur im Kontext des Routers sinnvoll. Bei Propagation muss der Agent immer Router + Sub-Prompts zusammen betrachten.
|
||||
|
||||
**Verbund-Erkennung (Namenskonvention):** Eine Datei `<name>.prompt.md` ist ein Router, wenn Dateien `<name>-*.prompt.md` im selben Verzeichnis existieren. Alle `<name>-*.prompt.md`-Dateien gehören zum selben Verbund-Trait.
|
||||
**Verbund-Erkennung:** Eine Datei `<name>.prompt.md` ist ein Router, wenn Dateien `<name>-*.prompt.md` im selben Verzeichnis existieren. Alle gehören zum selben Verbund-Trait.
|
||||
|
||||
### Instructions
|
||||
|
||||
|
|
@ -100,6 +126,7 @@ Instructions-Dateien sind Einzeldateien. Der **Dateiname** ist der Trait-Schlüs
|
|||
|
||||
```
|
||||
.github/copilot-instructions.md → trait: instructions/copilot-instructions
|
||||
.github/kotlin-conventions.instructions.md → trait: instructions/kotlin-conventions
|
||||
```
|
||||
|
||||
**Regel:** `instructions/<dateiname-ohne-extension>` – 1:1-Zuordnung Datei → Trait.
|
||||
|
|
@ -108,41 +135,69 @@ Instructions-Dateien sind Einzeldateien. Der **Dateiname** ist der Trait-Schlüs
|
|||
|
||||
## Mutation-Typen
|
||||
|
||||
Jede Mutation wird mit einem Typ klassifiziert:
|
||||
|
||||
| Typ | Bedeutung | Beispiel |
|
||||
| ---------------- | ------------------------------------ | ------------------------------------------------------------ |
|
||||
| ---------------- | ------------------------------------ | ----------------------------------------------------- |
|
||||
| `content-change` | Inhalt einer Datei im Trait geändert | `nextstep-implementation.prompt.md` optimiert |
|
||||
| `member-added` | Neue Datei zum Trait hinzugefügt | Neuer `nextstep-migration.prompt.md` + Router-Eintrag |
|
||||
| `member-removed` | Datei aus dem Trait entfernt | `nextstep-test.prompt.md` gelöscht + Router-Eintrag entfernt |
|
||||
|
||||
Bei **Verbund-Traits** umfasst `member-added`/`member-removed` immer die betroffene Sub-Datei **und** die Router-Anpassung als zusammenhängende Mutation. Bei **Standalone-Traits** und **Skills** entspricht `member-added` dem Anlegen einer neuen Datei im Trait-Ordner.
|
||||
| `member-removed` | Datei aus dem Trait entfernt | `nextstep-test.prompt.md` gelöscht |
|
||||
|
||||
---
|
||||
|
||||
## Pipeline
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph "Phase 1: Extraction"
|
||||
direction TB
|
||||
GIT[(Git-History)] --> SCRIPT[genome-extract.py]
|
||||
SCRIPT --> RAW[raw-mutations.md]
|
||||
end
|
||||
subgraph "Phase 2: Distillation"
|
||||
direction TB
|
||||
RAW2[raw-mutations.md] --> AGENT1[KI-Agent]
|
||||
AGENT1 --> |"Klassifizieren\nScoren\nSanitizen"| DIST[distilled-mutations.md]
|
||||
end
|
||||
subgraph "Phase 3: Propagation"
|
||||
direction TB
|
||||
DIST2[distilled-mutations.md] --> AGENT2[KI-Agent]
|
||||
ZIEL[Ziel-Genome] --> AGENT2
|
||||
AGENT2 --> PATCHES[Konkrete Patches]
|
||||
end
|
||||
RAW --> RAW2
|
||||
DIST --> DIST2
|
||||
```
|
||||
|
||||
### Phase 1: Extraction (Script)
|
||||
|
||||
**Input:** Repo-Pfad + Zeitspanne (z.B. `--since "4 days ago"`)
|
||||
**Input:** Repo-Pfad + Zeitspanne (z.B. `--since "7 days ago"`)
|
||||
**Output:** `raw-mutations.md`
|
||||
|
||||
- Scannt `git log` für Änderungen im Genome-Scope
|
||||
- Gruppiert Diffs nach Trait (siehe Trait-Erkennung oben)
|
||||
- Gibt pro Trait alle Commits mit Diff, Message und Autor aus
|
||||
|
||||
**Tool:** `genome-extract.ps1`
|
||||
**Tool:** `genome-extract.py` (Python)
|
||||
|
||||
### Phase 2: Distillation (Agent)
|
||||
|
||||
**Input:** `raw-mutations.md`
|
||||
**Output:** `distilled-mutations.md`
|
||||
|
||||
- Klassifiziert jede Mutation:
|
||||
- 🔴 **Critical** – Bugfixes, die andere auch treffen
|
||||
- 🟡 **Evolution** – Generelle Verbesserungen (bessere Prompts, neue Patterns)
|
||||
- ⚪ **Specialized** – Projektspezifisch, nicht übertragbar
|
||||
- Scored jede Mutation (1–10)
|
||||
```mermaid
|
||||
flowchart TD
|
||||
M[Mutation] --> K{Klassifizierung}
|
||||
K -->|Bugfix für alle| C[🔴 Critical]
|
||||
K -->|Generelle Verbesserung| E[🟡 Evolution]
|
||||
K -->|Nur dieses Projekt| S[⚪ Specialized]
|
||||
C --> SC[Score 1–10]
|
||||
E --> SC
|
||||
S --> X[❌ Entfernt]
|
||||
SC --> SAN[Sanitization<br/>Pfade, Tokens, IDs ersetzen]
|
||||
SAN --> |Score ≥ 4| OUT[→ distilled-mutations.md]
|
||||
SAN --> |Score < 4| X
|
||||
```
|
||||
|
||||
- Scored jede Mutation (1–10) nach Übertragungswert
|
||||
- Filtert sensitive Daten (Usernames, Maschinenpfade, Tokens, projektspezifische IDs)
|
||||
- Specialized Mutations werden komplett entfernt
|
||||
|
||||
|
|
@ -150,17 +205,19 @@ Bei **Verbund-Traits** umfasst `member-added`/`member-removed` immer die betroff
|
|||
|
||||
### Phase 3: Propagation (Agent)
|
||||
|
||||
**Input:** `distilled-mutations.md` + Ziel-Genome (`.github/` des Ziel-Repos)
|
||||
**Input:** `distilled-mutations.md` + Ziel-Genome
|
||||
**Output:** `propagation-proposals.md`
|
||||
|
||||
- Matched Traits zwischen Quell- und Ziel-Genome
|
||||
- Erstellt konkrete Änderungsvorschläge pro Trait
|
||||
- Formatiert als Checkliste:
|
||||
- `[x]` Critical (default an)
|
||||
- `[x]` Evolution mit Score ≥ 7 (default an)
|
||||
- `[ ]` Evolution mit Score < 7 (default aus)
|
||||
- Specialized taucht nicht auf (bereits gefiltert)
|
||||
- User wählt aus, Agent wendet ausgewählte Patches an
|
||||
- Formatiert als Checkliste mit Default-Auswahl:
|
||||
|
||||
| Kategorie | Default | Bedingung |
|
||||
| ------------------ | ------- | ---------- |
|
||||
| 🔴 Critical | ✅ an | immer |
|
||||
| 🟡 Evolution ≥ 7 | ✅ an | Score ≥ 7 |
|
||||
| 🟡 Evolution < 7 | ❌ aus | Score < 7 |
|
||||
| ⚪ Specialized | — | gefiltert |
|
||||
|
||||
**Tool:** `genome-propagate.prompt.md`
|
||||
|
||||
|
|
@ -168,26 +225,66 @@ Bei **Verbund-Traits** umfasst `member-added`/`member-removed` immer die betroff
|
|||
|
||||
## Zeitbasierte Transferlogik
|
||||
|
||||
Die Zeitspanne bestimmt, welche Mutations extrahiert werden:
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant R as Quell-Repo
|
||||
participant T as Ziel-Repo
|
||||
Note over T: Letzter .github/-Commit = T_target
|
||||
R->>R: git log --since T_target
|
||||
R->>R: 12 Commits an .github/ gefunden
|
||||
R-->>T: Mutations extrahiert → Distillation → Propagation
|
||||
```
|
||||
|
||||
1. Letzter `.github/`-Commit im Ziel-Repo ermitteln → `T_target`
|
||||
2. Alle `.github/`-Commits im Quell-Repo seit `T_target` extrahieren
|
||||
3. Das Delta zwischen `T_target` und jetzt ist der Evolutionszeitraum
|
||||
|
||||
**Beispiel:** bollwerk hat `.github/` zuletzt vor 4 Tagen von hva übernommen. Seitdem gab es 12 Commits an `.github/` in bollwerk. Diese 12 Commits sind die Mutations.
|
||||
|
||||
---
|
||||
|
||||
## Deliverables
|
||||
## Dateistruktur
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph ".github/skills/genome/"
|
||||
SK[SKILL.md<br/>Skill-Dokumentation]
|
||||
EX[genome-extract.py<br/>Phase 1 Script]
|
||||
end
|
||||
subgraph ".github/prompts/"
|
||||
OR[genome.prompt.md<br/>Orchestrator]
|
||||
DI[genome-distill.prompt.md<br/>Phase 2]
|
||||
PR[genome-propagate.prompt.md<br/>Phase 3]
|
||||
end
|
||||
subgraph ".github/genome/output/"
|
||||
RM[raw-mutations.md<br/>generiert]
|
||||
DM[distilled-mutations.md<br/>generiert]
|
||||
PP[propagation-proposals.md<br/>generiert]
|
||||
end
|
||||
subgraph "docs/"
|
||||
CO[genome-engine.md<br/>Dieses Konzept]
|
||||
end
|
||||
OR -->|"ruft auf"| EX
|
||||
OR -->|"delegiert an"| DI
|
||||
OR -->|"delegiert an"| PR
|
||||
EX -->|"schreibt"| RM
|
||||
DI -->|"liest"| RM
|
||||
DI -->|"schreibt"| DM
|
||||
PR -->|"liest"| DM
|
||||
PR -->|"schreibt"| PP
|
||||
```
|
||||
|
||||
| # | Datei | Typ | Ort |
|
||||
| --- | ---------------------------- | ----------------- | ------------------------ |
|
||||
| 1 | `genome-extract.ps1` | PowerShell Script | `.github/genome/` |
|
||||
| 2 | `genome-distill.prompt.md` | Prompt | `.github/genome/` |
|
||||
| 3 | `genome-propagate.prompt.md` | Prompt | `.github/genome/` |
|
||||
| 4 | `raw-mutations.md` | Generiert | `.github/genome/output/` |
|
||||
| 5 | `distilled-mutations.md` | Generiert | `.github/genome/output/` |
|
||||
| 6 | `propagation-proposals.md` | Generiert | `.github/genome/output/` |
|
||||
| --- | ---------------------------- | ------------- | -------------------------- |
|
||||
| 1 | `genome-extract.py` | Python Script | `.github/skills/genome/` |
|
||||
| 2 | `genome.prompt.md` | Orchestrator | `.github/prompts/` |
|
||||
| 3 | `genome-distill.prompt.md` | Prompt | `.github/prompts/` |
|
||||
| 4 | `genome-propagate.prompt.md` | Prompt | `.github/prompts/` |
|
||||
| 5 | `SKILL.md` | Skill-Doku | `.github/skills/genome/` |
|
||||
| 6 | `genome-engine.md` | Konzept | `docs/` |
|
||||
| 7 | `raw-mutations.md` | Generiert | `.github/genome/output/` |
|
||||
| 8 | `distilled-mutations.md` | Generiert | `.github/genome/output/` |
|
||||
| 9 | `propagation-proposals.md` | Generiert | `.github/genome/output/` |
|
||||
|
||||
> Generierte Dateien (7–9) sind gitignored.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue