refactor(genome): Terminologie vereinheitlichen – Trait→Capability, Mutation→Improvement, Growth Vector→Insight, Propagation→Transfer

Alle Genome-Engine-Dateien auf lernbasierte Begriffe umgestellt:
- Concept Doc: komplett überarbeitet mit Mermaid-Diagrammen
- genome.prompt.md: neue Dateinamen + Begriffe
- genome-distill.prompt.md: Improvements/Insights statt Mutations/Vectors
- genome-propagate.prompt.md: Transfer statt Propagation, Capability statt Trait
- genome-extract.py: Output-Dateiname + Ausgabetext aktualisiert
- SKILL.md: Beschreibung + Dateitabelle aktualisiert
This commit is contained in:
Jens Reinemann 2026-05-18 12:46:39 +02:00
parent 5eae3a4813
commit ddf9272dda
6 changed files with 177 additions and 177 deletions

View file

@ -2,14 +2,14 @@
## Ziel ## Ziel
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. Automatische Erkennung von Verbesserungen an KI-Tooling-Dateien (Skills, Agents, Prompts, Instructions) über Git-History hinweg. Die erkannten Improvements werden destilliert, bewertet und als Transfer-Vorschläge für andere Projekte bereitgestellt.
```mermaid ```mermaid
graph LR graph LR
A[Repo A<br/>Verbesserungen] -->|Git-History| E[Extraction] A[Repo A<br/>Verbesserungen] -->|Git-History| E[Extraction]
E -->|raw-mutations| D[Distillation] E -->|raw improvements| D[Distillation]
D -->|Growth Vectors| P[Propagation] D -->|Insights| T[Transfer]
P -->|Patches| B[Repo B<br/>aktualisiert] T -->|Patches| B[Repo B<br/>aktualisiert]
``` ```
--- ---
@ -18,25 +18,25 @@ graph LR
```mermaid ```mermaid
graph TD graph TD
G[🧬 Genome<br/>Gesamtheit aller Traits] --> T1[Trait: Skill] G[🧬 Genome<br/>Gesamtheit aller Capabilities] --> T1[Capability: Skill]
G --> T2[Trait: Agent] G --> T2[Capability: Agent]
G --> T3[Trait: Prompt] G --> T3[Capability: Prompt]
G --> T4[Trait: Instructions] G --> T4[Capability: Instructions]
T1 -->|Git-Delta| M1[Mutation] T1 -->|Git-Delta| M1[Improvement]
T3 -->|Git-Delta| M2[Mutation] T3 -->|Git-Delta| M2[Improvement]
M1 -->|destilliert| GV1[Growth Vector<br/>Score 8/10 🟡] M1 -->|destilliert| GV1[Insight<br/>Score 8/10 🟡]
M2 -->|destilliert| GV2[Growth Vector<br/>Score 9/10 🔴] M2 -->|destilliert| GV2[Insight<br/>Score 9/10 🔴]
GV1 --> PR[Propagation<br/>Konkrete Patches] GV1 --> PR[Transfer<br/>Konkrete Patches]
GV2 --> PR GV2 --> PR
``` ```
| Begriff | Bedeutung | | Begriff | Bedeutung |
| ----------------- | ----------------------------------------------------------------------------------------- | | ---------------- | -------------------------------------------------------------------------------------------- |
| **Trait** | Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File inkl. aller zugehörigen Dateien | | **Capability** | Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File inkl. aller zugehörigen Dateien |
| **Genome** | Die Gesamtheit aller Traits eines Projekts | | **Genome** | Die Gesamtheit aller Capabilities eines Projekts das "KI-Wissen" eines Repos |
| **Mutation** | Ein Git-Commit-Delta an einem Trait (siehe Mutation-Typen) | | **Improvement** | Ein Git-Commit-Delta an einer Capability eine konkrete Verbesserung am KI-Tooling |
| **Growth Vector** | Destillierte, bewertete Mutation (bereinigt, klassifiziert, gescored) | | **Insight** | Destilliertes, bewertetes Improvement (bereinigt, klassifiziert, gescored, übertragbar) |
| **Propagation** | Konkreter Änderungsvorschlag für ein Ziel-Genome | | **Transfer** | Konkreter Änderungsvorschlag, um ein Insight auf ein Ziel-Genome anzuwenden |
--- ---
@ -52,9 +52,9 @@ Folgende Pfade bilden das Genome:
--- ---
## Trait-Erkennung ## Capability-Erkennung
Traits werden aus dem Dateipfad abgeleitet. Die Granularität hängt vom Trait-Typ ab: Capabilities werden aus dem Dateipfad abgeleitet. Die Granularität hängt vom Capability-Typ ab:
```mermaid ```mermaid
graph TD graph TD
@ -69,27 +69,27 @@ graph TD
### Skills ### Skills
Ein Skill besteht aus einem Ordner mit mehreren zusammengehörigen Dateien (SKILL.md, Scripte, Templates). Der **Ordnername** ist der Trait-Schlüssel. Ein Skill besteht aus einem Ordner mit mehreren zusammengehörigen Dateien (SKILL.md, Scripte, Templates). Der **Ordnername** ist der Capability-Schlüssel.
``` ```
.github/skills/gh-tickets/SKILL.md → trait: skill/gh-tickets .github/skills/gh-tickets/SKILL.md → capability: skill/gh-tickets
.github/skills/gh-tickets/queries.graphql → trait: skill/gh-tickets .github/skills/gh-tickets/queries.graphql → capability: skill/gh-tickets
.github/skills/android-build/SKILL.md → trait: skill/android-build .github/skills/android-build/SKILL.md → capability: skill/android-build
.github/skills/android-build/android-dev.ps1 → trait: skill/android-build .github/skills/android-build/android-dev.ps1 → capability: skill/android-build
``` ```
**Regel:** `skill/<ordnername>` alle Dateien im Ordner gehören zum selben Trait. **Regel:** `skill/<ordnername>` alle Dateien im Ordner gehören zur selben Capability.
### Agents ### Agents
Ein Agent besteht aus genau einer Datei. Der **vollständige Dateiname** (ohne Pfad, ohne Extension) ist der Trait-Schlüssel. Ein Agent besteht aus genau einer Datei. Der **vollständige Dateiname** (ohne Pfad, ohne Extension) ist der Capability-Schlüssel.
``` ```
.github/agents/android-implementer.agent.md → trait: agent/android-implementer .github/agents/android-implementer.agent.md → capability: agent/android-implementer
.github/agents/code-reviewer.agent.md → trait: agent/code-reviewer .github/agents/code-reviewer.agent.md → capability: agent/code-reviewer
``` ```
**Regel:** `agent/<dateiname-ohne-extension>` 1:1-Zuordnung Datei → Trait. **Regel:** `agent/<dateiname-ohne-extension>` 1:1-Zuordnung Datei → Capability.
### Prompts ### Prompts
@ -97,49 +97,49 @@ Prompts unterscheiden zwei Varianten: **Standalone** und **Verbund**.
#### Standalone-Prompts #### Standalone-Prompts
Einzeldateien ohne Router-Beziehung. Der **Dateiname** ist der Trait-Schlüssel. Einzeldateien ohne Router-Beziehung. Der **Dateiname** ist der Capability-Schlüssel.
``` ```
.github/prompts/commit.prompt.md → trait: prompt/commit .github/prompts/commit.prompt.md → capability: prompt/commit
.github/prompts/ship.prompt.md → trait: prompt/ship .github/prompts/ship.prompt.md → capability: prompt/ship
.github/prompts/publish.prompt.md → trait: prompt/publish .github/prompts/publish.prompt.md → capability: prompt/publish
``` ```
**Regel:** `prompt/<dateiname-ohne-extension>` 1:1-Zuordnung Datei → Trait. **Regel:** `prompt/<dateiname-ohne-extension>` 1:1-Zuordnung Datei → Capability.
#### Verbund-Prompts (Router + Sub-Workflows) #### Verbund-Prompts (Router + Sub-Workflows)
Wenn eine Prompt-Datei eine Routing-Tabelle mit Verweisen auf andere `.prompt.md`-Dateien enthält, bilden Router + referenzierte Dateien **einen** Trait. Der **Router-Name** ist der Trait-Schlüssel. Wenn eine Prompt-Datei eine Routing-Tabelle mit Verweisen auf andere `.prompt.md`-Dateien enthält, bilden Router + referenzierte Dateien **eine** Capability. Der **Router-Name** ist der Capability-Schlüssel.
``` ```
.github/prompts/nextstep.prompt.md → trait: prompt/nextstep .github/prompts/nextstep.prompt.md → capability: prompt/nextstep
.github/prompts/nextstep-implementation.prompt.md → trait: prompt/nextstep .github/prompts/nextstep-implementation.prompt.md → capability: prompt/nextstep
.github/prompts/nextstep-planning.prompt.md → trait: prompt/nextstep .github/prompts/nextstep-planning.prompt.md → capability: prompt/nextstep
.github/prompts/nextstep-tech-decision.prompt.md → trait: prompt/nextstep .github/prompts/nextstep-tech-decision.prompt.md → capability: prompt/nextstep
``` ```
**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. **Verbund-Erkennung:** Eine Datei `<name>.prompt.md` ist ein Router, wenn Dateien `<name>-*.prompt.md` im selben Verzeichnis existieren. Alle gehören zur selben Verbund-Capability.
### Instructions ### Instructions
Instructions-Dateien sind Einzeldateien. Der **Dateiname** ist der Trait-Schlüssel. Instructions-Dateien sind Einzeldateien. Der **Dateiname** ist der Capability-Schlüssel.
``` ```
.github/copilot-instructions.md → trait: instructions/copilot-instructions .github/copilot-instructions.md → capability: instructions/copilot-instructions
.github/kotlin-conventions.instructions.md → trait: instructions/kotlin-conventions .github/kotlin-conventions.instructions.md → capability: instructions/kotlin-conventions
``` ```
**Regel:** `instructions/<dateiname-ohne-extension>` 1:1-Zuordnung Datei → Trait. **Regel:** `instructions/<dateiname-ohne-extension>` 1:1-Zuordnung Datei → Capability.
--- ---
## Mutation-Typen ## Improvement-Typen
| Typ | Bedeutung | Beispiel | | Typ | Bedeutung | Beispiel |
| ---------------- | ------------------------------------ | ----------------------------------------------------- | | ---------------- | -------------------------------------------- | ----------------------------------------------------- |
| `content-change` | Inhalt einer Datei im Trait geändert | `nextstep-implementation.prompt.md` optimiert | | `content-change` | Inhalt einer Datei in der Capability geändert | `nextstep-implementation.prompt.md` optimiert |
| `member-added` | Neue Datei zum Trait hinzugefügt | Neuer `nextstep-migration.prompt.md` + Router-Eintrag | | `member-added` | Neue Datei zur Capability hinzugefügt | Neuer `nextstep-migration.prompt.md` + Router-Eintrag |
| `member-removed` | Datei aus dem Trait entfernt | `nextstep-test.prompt.md` gelöscht | | `member-removed` | Datei aus der Capability entfernt | `nextstep-test.prompt.md` gelöscht |
--- ---
@ -150,16 +150,16 @@ flowchart LR
subgraph "Phase 1: Extraction" subgraph "Phase 1: Extraction"
direction TB direction TB
GIT[(Git-History)] --> SCRIPT[genome-extract.py] GIT[(Git-History)] --> SCRIPT[genome-extract.py]
SCRIPT --> RAW[raw-mutations.md] SCRIPT --> RAW[raw-improvements.md]
end end
subgraph "Phase 2: Distillation" subgraph "Phase 2: Distillation"
direction TB direction TB
RAW2[raw-mutations.md] --> AGENT1[KI-Agent] RAW2[raw-improvements.md] --> AGENT1[KI-Agent]
AGENT1 --> |"Klassifizieren\nScoren\nSanitizen"| DIST[distilled-mutations.md] AGENT1 --> |"Klassifizieren\nScoren\nSanitizen"| DIST[distilled-insights.md]
end end
subgraph "Phase 3: Propagation" subgraph "Phase 3: Transfer"
direction TB direction TB
DIST2[distilled-mutations.md] --> AGENT2[KI-Agent] DIST2[distilled-insights.md] --> AGENT2[KI-Agent]
ZIEL[Ziel-Genome] --> AGENT2 ZIEL[Ziel-Genome] --> AGENT2
AGENT2 --> PATCHES[Konkrete Patches] AGENT2 --> PATCHES[Konkrete Patches]
end end
@ -170,22 +170,22 @@ flowchart LR
### Phase 1: Extraction (Script) ### Phase 1: Extraction (Script)
**Input:** Repo-Pfad + Zeitspanne (z.B. `--since "7 days ago"`) **Input:** Repo-Pfad + Zeitspanne (z.B. `--since "7 days ago"`)
**Output:** `raw-mutations.md` **Output:** `raw-improvements.md`
- Scannt `git log` für Änderungen im Genome-Scope - Scannt `git log` für Änderungen im Genome-Scope
- Gruppiert Diffs nach Trait (siehe Trait-Erkennung oben) - Gruppiert Diffs nach Capability (siehe Capability-Erkennung oben)
- Gibt pro Trait alle Commits mit Diff, Message und Autor aus - Gibt pro Capability alle Commits mit Diff, Message und Autor aus
**Tool:** `genome-extract.py` (Python) **Tool:** `genome-extract.py` (Python)
### Phase 2: Distillation (Agent) ### Phase 2: Distillation (Agent)
**Input:** `raw-mutations.md` **Input:** `raw-improvements.md`
**Output:** `distilled-mutations.md` **Output:** `distilled-insights.md`
```mermaid ```mermaid
flowchart TD flowchart TD
M[Mutation] --> K{Klassifizierung} M[Improvement] --> K{Klassifizierung}
K -->|Bugfix für alle| C[🔴 Critical] K -->|Bugfix für alle| C[🔴 Critical]
K -->|Generelle Verbesserung| E[🟡 Evolution] K -->|Generelle Verbesserung| E[🟡 Evolution]
K -->|Nur dieses Projekt| S[⚪ Specialized] K -->|Nur dieses Projekt| S[⚪ Specialized]
@ -193,23 +193,23 @@ flowchart TD
E --> SC E --> SC
S --> X[❌ Entfernt] S --> X[❌ Entfernt]
SC --> SAN[Sanitization<br/>Pfade, Tokens, IDs ersetzen] SC --> SAN[Sanitization<br/>Pfade, Tokens, IDs ersetzen]
SAN --> |Score ≥ 4| OUT[→ distilled-mutations.md] SAN --> |Score ≥ 4| OUT[→ distilled-insights.md]
SAN --> |Score < 4| X SAN --> |Score < 4| X
``` ```
- Scored jede Mutation (110) nach Übertragungswert - Scored jedes Improvement (110) nach Übertragungswert
- Filtert sensitive Daten (Usernames, Maschinenpfade, Tokens, projektspezifische IDs) - Filtert sensitive Daten (Usernames, Maschinenpfade, Tokens, projektspezifische IDs)
- Specialized Mutations werden komplett entfernt - Specialized Improvements werden komplett entfernt
**Tool:** `genome-distill.prompt.md` **Tool:** `genome-distill.prompt.md`
### Phase 3: Propagation (Agent) ### Phase 3: Transfer (Agent)
**Input:** `distilled-mutations.md` + Ziel-Genome **Input:** `distilled-insights.md` + Ziel-Genome
**Output:** `propagation-proposals.md` **Output:** `transfer-proposals.md`
- Matched Traits zwischen Quell- und Ziel-Genome - Matched Capabilities zwischen Quell- und Ziel-Genome
- Erstellt konkrete Änderungsvorschläge pro Trait - Erstellt konkrete Änderungsvorschläge pro Capability
- Formatiert als Checkliste mit Default-Auswahl: - Formatiert als Checkliste mit Default-Auswahl:
| Kategorie | Default | Bedingung | | Kategorie | Default | Bedingung |
@ -232,7 +232,7 @@ sequenceDiagram
Note over T: Letzter .github/-Commit = T_target Note over T: Letzter .github/-Commit = T_target
R->>R: git log --since T_target R->>R: git log --since T_target
R->>R: 12 Commits an .github/ gefunden R->>R: 12 Commits an .github/ gefunden
R-->>T: Mutations extrahiert → Distillation → Propagation R-->>T: Improvements extrahiert → Distillation → Transfer
``` ```
1. Letzter `.github/`-Commit im Ziel-Repo ermitteln → `T_target` 1. Letzter `.github/`-Commit im Ziel-Repo ermitteln → `T_target`
@ -255,12 +255,12 @@ graph TD
PR[genome-propagate.prompt.md<br/>Phase 3] PR[genome-propagate.prompt.md<br/>Phase 3]
end end
subgraph ".github/genome/output/" subgraph ".github/genome/output/"
RM[raw-mutations.md<br/>generiert] RM[raw-improvements.md<br/>generiert]
DM[distilled-mutations.md<br/>generiert] DM[distilled-insights.md<br/>generiert]
PP[propagation-proposals.md<br/>generiert] PP[transfer-proposals.md<br/>generiert]
end end
subgraph "docs/" subgraph ".github/genome/"
CO[genome-engine.md<br/>Dieses Konzept] CO[Concept Genome Engine.md<br/>Dieses Konzept]
end end
OR -->|"ruft auf"| EX OR -->|"ruft auf"| EX
OR -->|"delegiert an"| DI OR -->|"delegiert an"| DI
@ -280,9 +280,9 @@ graph TD
| 4 | `genome-propagate.prompt.md` | Prompt | `.github/prompts/` | | 4 | `genome-propagate.prompt.md` | Prompt | `.github/prompts/` |
| 5 | `SKILL.md` | Skill-Doku | `.github/skills/genome/` | | 5 | `SKILL.md` | Skill-Doku | `.github/skills/genome/` |
| 6 | `genome-engine.md` | Konzept | `docs/` | | 6 | `genome-engine.md` | Konzept | `docs/` |
| 7 | `raw-mutations.md` | Generiert | `.github/genome/output/` | | 7 | `raw-improvements.md` | Generiert | `.github/genome/output/` |
| 8 | `distilled-mutations.md` | Generiert | `.github/genome/output/` | | 8 | `distilled-insights.md` | Generiert | `.github/genome/output/` |
| 9 | `propagation-proposals.md` | Generiert | `.github/genome/output/` | | 9 | `transfer-proposals.md` | Generiert | `.github/genome/output/` |
> Generierte Dateien (79) sind gitignored. > Generierte Dateien (79) sind gitignored.
@ -290,7 +290,7 @@ graph TD
## Zukünftige Erweiterungen ## Zukünftige Erweiterungen
- Multi-Repo-Registry: Zentrale Sammlung von Growth Vectors aus vielen Projekten - Multi-Repo-Registry: Zentrale Sammlung von Insights aus vielen Projekten
- Automatische Erkennung des Evolutionszeitraums über Repo-Vergleich - Automatische Erkennung des Transfer-Zeitraums über Repo-Vergleich
- CI-Integration: Propagation-Check bei jedem Push - CI-Integration: Transfer-Check bei jedem Push
- Community-Sharing: Öffentliche Growth Vectors als "Trait Packages" - Community-Sharing: Öffentliche Insights als "Capability Packages"

View file

@ -1,20 +1,20 @@
--- ---
description: "Genome Engine Phase 2: Distilliert raw-mutations.md klassifiziert, scored und bereinigt Mutations für Cross-Repo-Propagation." description: "Genome Engine Phase 2: Destilliert raw-improvements.md klassifiziert, scored und bereinigt Improvements für Cross-Repo-Transfer."
model: Claude Opus 4.6 (copilot) model: Claude Opus 4.6 (copilot)
tools: [read, edit] tools: [read, edit]
--- ---
# Genome Distillation # Genome Distillation
Du erhältst eine Datei mit rohen Git-Mutations aus Copilot-Customization-Dateien. Deine Aufgabe: **klassifizieren, scoren, bereinigen** damit nur übertragbare Verbesserungen übrig bleiben. Du erhältst eine Datei mit rohen Git-Improvements aus KI-Tooling-Dateien. Deine Aufgabe: **klassifizieren, scoren, bereinigen** damit nur übertragbare Verbesserungen übrig bleiben.
## Input ## Input
Lies die Datei `.github/genome/output/raw-mutations.md`. Lies die Datei `.github/genome/output/raw-improvements.md`.
## Aufgabe ## Aufgabe
Für **jeden Trait** und jede Mutation darin: Für **jede Capability** und jedes Improvement darin:
### 1. Klassifizierung ### 1. Klassifizierung
@ -26,7 +26,7 @@ Für **jeden Trait** und jede Mutation darin:
### 2. Scoring (110) ### 2. Scoring (110)
Bewerte den **Übertragungswert** jeder Critical/Evolution-Mutation: Bewerte den **Übertragungswert** jedes Critical/Evolution-Improvements:
- **910:** Universell wertvoll, jedes Repo profitiert - **910:** Universell wertvoll, jedes Repo profitiert
- **78:** Breit anwendbar, gutes Pattern - **78:** Breit anwendbar, gutes Pattern
@ -64,7 +64,7 @@ Ersetze in den Diffs:
### 4. Filterung ### 4. Filterung
- **Specialized** Mutations: komplett entfernen (nicht in Output aufnehmen) - **Specialized** Improvements: komplett entfernen (nicht in Output aufnehmen)
- **Reine Formatting-Änderungen** (nur Whitespace/Tabellenausrichtung): entfernen - **Reine Formatting-Änderungen** (nur Whitespace/Tabellenausrichtung): entfernen
- **Renames ohne inhaltliche Änderung**: entfernen - **Renames ohne inhaltliche Änderung**: entfernen
@ -72,16 +72,16 @@ Ersetze in den Diffs:
### Fehler 1: `member-added` pauschal als Specialized verwerfen ### Fehler 1: `member-added` pauschal als Specialized verwerfen
Neue Dateien (`member-added`) sind oft die **wertvollsten** Mutations. Ein neuer Skill, Prompt oder Agent ist nach Sanitization häufig hochgradig übertragbar. Prüfe: Neue Dateien (`member-added`) sind oft die **wertvollsten** Improvements. Ein neuer Skill, Prompt oder Agent ist nach Sanitization häufig hochgradig übertragbar. Prüfe:
- Enthält die Datei ein **allgemeines Pattern** (z.B. Checkliste, Workflow-Struktur, Fehlerklassen-Katalog)? - Enthält die Datei ein **allgemeines Pattern** (z.B. Checkliste, Workflow-Struktur, Fehlerklassen-Katalog)?
- Ist sie nach Pfad-/Namen-Sanitization auf andere Projekte anwendbar? - Ist sie nach Pfad-/Namen-Sanitization auf andere Projekte anwendbar?
- → Wenn ja: **Evolution** (Score 79), nicht Specialized. - → Wenn ja: **Evolution** (Score 79), nicht Specialized.
**Nur** als Specialized werten, wenn der **gesamte Inhalt** projektspezifisch ist (z.B. nur eine Entity-Definition für eine bestimmte App). **Nur** als Specialized werten, wenn der **gesamte Inhalt** projektspezifisch ist (z.B. nur eine Entity-Definition für eine bestimmte App).
### Fehler 2: Nur den ersten Teil der raw-mutations lesen ### Fehler 2: Nur den ersten Teil der raw-improvements lesen
Die raw-mutations-Datei kann **tausende Zeilen** lang sein. Skills, Scripts und neue Traits stehen oft am Ende. **Lies die GESAMTE Datei** bevor du klassifizierst nicht nur die ersten 10002000 Zeilen. Die raw-improvements-Datei kann **tausende Zeilen** lang sein. Skills, Scripts und neue Capabilities stehen oft am Ende. **Lies die GESAMTE Datei** bevor du klassifizierst nicht nur die ersten 10002000 Zeilen.
### Fehler 3: Mehrteilige Commits nicht trennen ### Fehler 3: Mehrteilige Commits nicht trennen
@ -98,7 +98,7 @@ PowerShell/Python-Scripts die ein **universelles DevOps-Problem** lösen (z.B. E
### Fehler 5: Zu konservativ scoren ### Fehler 5: Zu konservativ scoren
Eine Conversion-Rate von < 10% ist ein Warnsignal. Bei typischen aktiven Repos mit 20+ Traits sollte die Rate bei **1530%** liegen (bezogen auf Traits mit mindestens einer Evolution, nicht auf Mutations-Gesamtzahl). Eine Conversion-Rate von < 10% ist ein Warnsignal. Bei typischen aktiven Repos mit 20+ Capabilities sollte die Rate bei **1530%** liegen (bezogen auf Capabilities mit mindestens einer Evolution, nicht auf Improvements-Gesamtzahl).
## Regeln zur Diff-Analyse ## Regeln zur Diff-Analyse
@ -125,13 +125,13 @@ Gehe für jeden Commit wie folgt vor:
## Output-Format ## Output-Format
Schreibe das Ergebnis in `.github/genome/output/distilled-mutations.md` mit folgendem Format: Schreibe das Ergebnis in `.github/genome/output/distilled-insights.md` mit folgendem Format:
````markdown ````markdown
# Distilled Mutations # Distilled Insights
**Quelle:** <repo-name> **Quelle:** <repo-name>
**Zeitraum:** <aus raw-mutations übernehmen> **Zeitraum:** <aus raw-improvements übernehmen>
**Distilliert:** <aktuelles Datum> **Distilliert:** <aktuelles Datum>
**Ergebnis:** X Critical, Y Evolution (Z Specialized entfernt) **Ergebnis:** X Critical, Y Evolution (Z Specialized entfernt)
@ -139,7 +139,7 @@ Schreibe das Ergebnis in `.github/genome/output/distilled-mutations.md` mit folg
## 🔴 Critical ## 🔴 Critical
### Trait: `<trait-key>` ### Capability: `<capability-key>`
**Score:** N/10 **Score:** N/10
**Zusammenfassung:** <1-Satz was gefixt wurde> **Zusammenfassung:** <1-Satz was gefixt wurde>
@ -153,7 +153,7 @@ Schreibe das Ergebnis in `.github/genome/output/distilled-mutations.md` mit folg
## 🟡 Evolution ## 🟡 Evolution
### Trait: `<trait-key>` ### Capability: `<capability-key>`
**Score:** N/10 **Score:** N/10
**Zusammenfassung:** <1-Satz was verbessert wurde> **Zusammenfassung:** <1-Satz was verbessert wurde>
@ -167,11 +167,11 @@ Schreibe das Ergebnis in `.github/genome/output/distilled-mutations.md` mit folg
## Regeln ## Regeln
- Fasse mehrere Commits am selben Trait zu EINER Mutation zusammen, wenn sie dasselbe verbessern - Fasse mehrere Commits an derselben Capability zu EINEM Improvement zusammen, wenn sie dasselbe verbessern
- Bei Score < 4: nicht aufnehmen (zu wenig Übertragungswert) - Bei Score < 4: nicht aufnehmen (zu wenig Übertragungswert)
- Sortiere innerhalb jeder Klasse absteigend nach Score - Sortiere innerhalb jeder Klasse absteigend nach Score
- Halte Zusammenfassungen auf 1 Satz - Halte Zusammenfassungen auf 1 Satz
- Das "Pattern"-Feld bei Evolution beschreibt die **generalisierte Verbesserung**, nicht den konkreten Change - Das "Pattern"-Feld bei Evolution beschreibt die **generalisierte Verbesserung**, nicht den konkreten Change
- Diffs dürfen gekürzt werden nur die relevanten Hunks behalten - Diffs dürfen gekürzt werden nur die relevanten Hunks behalten
- Schreibe am Ende einen **Analyse-Bericht** in den Chat (nicht in die Datei): `Traits: N | Mutations: M | Critical: A | Evolution: B | Specialized entfernt: C | Churn-Commits übersprungen: D` - Schreibe am Ende einen **Analyse-Bericht** in den Chat (nicht in die Datei): `Capabilities: N | Improvements: M | Critical: A | Evolution: B | Specialized entfernt: C | Churn-Commits übersprungen: D`
``` ```

View file

@ -1,47 +1,47 @@
--- ---
description: "Genome Engine Phase 3: Propagiert distilled Mutations auf ein Ziel-Genome erstellt konkrete Änderungsvorschläge als Checkliste." description: "Genome Engine Phase 3: Transferiert distilled Insights auf ein Ziel-Genome erstellt konkrete Änderungsvorschläge als Checkliste."
model: Claude Opus 4.6 (copilot) model: Claude Opus 4.6 (copilot)
tools: [read, edit, search] tools: [read, edit, search]
--- ---
# Genome Propagation # Genome Transfer
Du erhältst destillierte Mutations (klassifiziert, gescored, bereinigt) und sollst konkrete Änderungsvorschläge für das **aktuelle Repo** erstellen. Du erhältst destillierte Insights (klassifiziert, gescored, bereinigt) und sollst konkrete Änderungsvorschläge für das **aktuelle Repo** erstellen.
## Input ## Input
1. Lies `.github/genome/output/distilled-mutations.md` (die Growth Vectors) 1. Lies `.github/genome/output/distilled-insights.md` (die Insights)
2. Scanne das Ziel-Genome dieses Repos: `.github/skills/`, `.github/agents/`, `.github/prompts/`, `.github/copilot-instructions.md` 2. Scanne das Ziel-Genome dieses Repos: `.github/skills/`, `.github/agents/`, `.github/prompts/`, `.github/copilot-instructions.md`
## Aufgabe ## Aufgabe
### 1. Trait-Matching ### 1. Capability-Matching
Für jeden Growth Vector aus `distilled-mutations.md`: Für jeden Insight aus `distilled-insights.md`:
- Prüfe ob ein **gleichnamiger Trait** im Ziel-Genome existiert → direktes Match - Prüfe ob eine **gleichnamige Capability** im Ziel-Genome existiert → direktes Match
- Prüfe ob ein **funktional äquivalenter Trait** existiert (anderer Name, gleicher Zweck) → adaptiertes Match - Prüfe ob eine **funktional äquivalente Capability** existiert (anderer Name, gleicher Zweck) → adaptiertes Match
- Kein Match → **neuer Trait** (nur bei Score ≥ 8 in die Checkliste aufnehmen, aber IMMER als "neu" kennzeichnen nie automatisch anwenden) - Kein Match → **neue Capability** (nur bei Score ≥ 8 in die Checkliste aufnehmen, aber IMMER als "neu" kennzeichnen nie automatisch anwenden)
### 2. Patch-Generierung ### 2. Patch-Generierung
Erstelle für jedes Match einen konkreten Änderungsvorschlag: Erstelle für jedes Match einen konkreten Änderungsvorschlag:
- **Bestehender Trait:** Zeige den Ist-Zustand (relevanter Ausschnitt) und den vorgeschlagenen Soll-Zustand - **Bestehende Capability:** Zeige den Ist-Zustand (relevanter Ausschnitt) und den vorgeschlagenen Soll-Zustand
- **Neuer Trait:** Zeige die vollständige neue Datei - **Neue Capability:** Zeige die vollständige neue Datei
- Passe Platzhalter (`<project>`, `<local-path>` etc.) an die Werte dieses Repos an - Passe Platzhalter (`<project>`, `<local-path>` etc.) an die Werte dieses Repos an
### 3. Checkliste formatieren ### 3. Checkliste formatieren
## Output-Format ## Output-Format
Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`: Schreibe das Ergebnis in `.github/genome/output/transfer-proposals.md`:
````markdown ````markdown
# Propagation Proposals # Transfer Proposals
**Ziel-Repo:** <aktuelles Repo> **Ziel-Repo:** <aktuelles Repo>
**Quelle:** <aus distilled-mutations übernehmen> **Quelle:** <aus distilled-insights übernehmen>
**Erstellt:** <aktuelles Datum> **Erstellt:** <aktuelles Datum>
**Vorschläge:** X Critical, Y Evolution **Vorschläge:** X Critical, Y Evolution
@ -51,7 +51,7 @@ Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`:
### 🔴 Critical ### 🔴 Critical
- [x] **`<trait-key>`** (Score N/10) <Zusammenfassung> - [x] **`<capability-key>`** (Score N/10) <Zusammenfassung>
<details> <details>
<summary>Änderung anzeigen</summary> <summary>Änderung anzeigen</summary>
@ -67,7 +67,7 @@ Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`:
### 🟡 Evolution (Score ≥ 7) ### 🟡 Evolution (Score ≥ 7)
- [x] **`<trait-key>`** (Score N/10) <Zusammenfassung> - [x] **`<capability-key>`** (Score N/10) <Zusammenfassung>
<details> <details>
<summary>Änderung anzeigen</summary> <summary>Änderung anzeigen</summary>
@ -82,7 +82,7 @@ Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`:
### 🟡 Evolution (Score < 7) ### 🟡 Evolution (Score < 7)
- [ ] **`<trait-key>`** (Score N/10) <Zusammenfassung> - [ ] **`<capability-key>`** (Score N/10) <Zusammenfassung>
<details> <details>
<summary>Änderung anzeigen</summary> <summary>Änderung anzeigen</summary>
@ -104,21 +104,21 @@ Frage den User:
Wende dann die ausgewählten Patches an mit folgenden Einschränkungen: Wende dann die ausgewählten Patches an mit folgenden Einschränkungen:
### Neue Traits: Bestätigung erforderlich ### Neue Capabilities: Bestätigung erforderlich
Bevor ein neuer Trait (kein Match im Ziel-Genome) angelegt wird, **immer einzeln bestätigen lassen**: Bevor eine neue Capability (kein Match im Ziel-Genome) angelegt wird, **immer einzeln bestätigen lassen**:
> Soll ich `<trait-key>` als neuen Trait in `.github/<pfad>` anlegen? > Soll ich `<capability-key>` als neue Capability in `.github/<pfad>` anlegen?
> Inhalt: <Kurzbeschreibung, 1 Satz> > Inhalt: <Kurzbeschreibung, 1 Satz>
Ers nach expliziter Bestätigung anlegen. Nie mehrere neue Traits auf einmal ohne Bestätigung. Erst nach expliziter Bestätigung anlegen. Nie mehrere neue Capabilities auf einmal ohne Bestätigung.
## Regeln ## Regeln
- Default-Auswahl: Critical = an, Evolution ≥ 7 = an, Evolution < 7 = aus - Default-Auswahl: Critical = an, Evolution ≥ 7 = an, Evolution < 7 = aus
- Überspringe Vorschläge, bei denen der Ziel-Trait bereits den gleichen Stand hat (kein Diff) - Überspringe Vorschläge, bei denen die Ziel-Capability bereits den gleichen Stand hat (kein Diff)
- Bei Konflikten (Ziel-Datei hat abweichende Struktur): markiere als ⚠️ und zeige beide Varianten - Bei Konflikten (Ziel-Datei hat abweichende Struktur): markiere als ⚠️ und zeige beide Varianten
- Erstelle KEINE neuen Traits mit Score < 8 - Erstelle KEINE neuen Capabilities mit Score < 8
- Neue Traits immer einzeln bestätigen lassen auch wenn mehrere selektiert wurden - Neue Capabilities immer einzeln bestätigen lassen auch wenn mehrere selektiert wurden
- Passe Einrückung und Stil an die Konventionen des Ziel-Repos an - Passe Einrückung und Stil an die Konventionen des Ziel-Repos an
``` ```

View file

@ -45,31 +45,31 @@ Stelle dem User zu Beginn **immer** folgende Fragen über das `vscode_askQuestio
Warte auf die Antworten, bevor du mit Phase 1 beginnst. Warte auf die Antworten, bevor du mit Phase 1 beginnst.
> Wenn Quell- und Ziel-Repo identisch sind: Extraction + Distillation durchführen, aber Propagation überspringen (sinnlos auf sich selbst). > Wenn Quell- und Ziel-Repo identisch sind: Extraction + Distillation durchführen, aber Transfer überspringen (sinnlos auf sich selbst).
## Phase 1: Extraction ## Phase 1: Extraction
Führe das Extraction-Script aus: Führe das Extraction-Script aus:
```bash ```bash
python .github/skills/genome/genome-extract.py --since "<zeitspanne>" --repo "<quell-repo>" --output ".github/genome/output/raw-mutations.md" python .github/skills/genome/genome-extract.py --since "<zeitspanne>" --repo "<quell-repo>" --output ".github/genome/output/raw-improvements.md"
``` ```
Prüfe das Ergebnis: Prüfe das Ergebnis:
- Wenn 0 Traits gefunden: Melde "Keine Mutations im Zeitraum" und stoppe. - Wenn 0 Capabilities gefunden: Melde "Keine Improvements im Zeitraum" und stoppe.
- Sonst: Zeige kurze Zusammenfassung (Anzahl Traits, Anzahl Mutations) und weiter zu Phase 2. - Sonst: Zeige kurze Zusammenfassung (Anzahl Capabilities, Anzahl Improvements) und weiter zu Phase 2.
## Phase 2: Distillation ## Phase 2: Distillation
Führe jetzt die Distillation durch. Folge den Anweisungen aus `.github/prompts/genome-distill.prompt.md`: Führe jetzt die Distillation durch. Folge den Anweisungen aus `.github/prompts/genome-distill.prompt.md`:
1. Lies `.github/genome/output/raw-mutations.md` 1. Lies `.github/genome/output/raw-improvements.md`
2. Klassifiziere jede Mutation (🔴 Critical / 🟡 Evolution / ⚪ Specialized) 2. Klassifiziere jedes Improvement (🔴 Critical / 🟡 Evolution / ⚪ Specialized)
3. Score den Übertragungswert (110) 3. Score den Übertragungswert (110)
4. Sanitize sensitive Daten 4. Sanitize sensitive Daten
5. Filtere Specialized + Score < 4 5. Filtere Specialized + Score < 4
6. Schreibe `.github/genome/output/distilled-mutations.md` 6. Schreibe `.github/genome/output/distilled-insights.md`
Zeige dem User eine Zusammenfassung: Zeige dem User eine Zusammenfassung:
@ -77,17 +77,17 @@ Zeige dem User eine Zusammenfassung:
Distillation: X Critical, Y Evolution (Z Specialized entfernt) Distillation: X Critical, Y Evolution (Z Specialized entfernt)
``` ```
Wenn 0 Critical + 0 Evolution übrig: Melde "Keine übertragbaren Mutations" und stoppe. Wenn 0 Critical + 0 Evolution übrig: Melde "Keine übertragbaren Insights" und stoppe.
## Phase 3: Propagation ## Phase 3: Transfer
> **Nur wenn Quell-Repo ≠ Ziel-Repo.** > **Nur wenn Quell-Repo ≠ Ziel-Repo.**
Führe die Propagation durch. Folge den Anweisungen aus `.github/prompts/genome-propagate.prompt.md`: Führe den Transfer durch. Folge den Anweisungen aus `.github/prompts/genome-propagate.prompt.md`:
1. Lies `.github/genome/output/distilled-mutations.md` 1. Lies `.github/genome/output/distilled-insights.md`
2. Scanne das Ziel-Genome (`.github/` des Ziel-Repos) 2. Scanne das Ziel-Genome (`.github/` des Ziel-Repos)
3. Matche Traits und generiere Patches 3. Matche Capabilities und generiere Patches
4. Zeige die Checkliste: 4. Zeige die Checkliste:
- `[x]` Critical (default an) - `[x]` Critical (default an)
- `[x]` Evolution mit Score ≥ 7 (default an) - `[x]` Evolution mit Score ≥ 7 (default an)

View file

@ -1,30 +1,30 @@
# Genome Engine # Genome Engine
Automatische Erkennung und Übertragung evolutionärer Verbesserungen an Copilot-Customization-Dateien (Skills, Agents, Prompts, Instructions) zwischen Repositories. Automatische Erkennung und Übertragung von Verbesserungen am KI-Tooling (Skills, Agents, Prompts, Instructions) zwischen Repositories.
## Trigger-Phrasen ## Trigger-Phrasen
`genome`, `propagate`, `mutations übertragen`, `traits synchronisieren`, `genome extract`, `genome propagate` `genome`, `transfer`, `improvements übertragen`, `capabilities synchronisieren`, `genome extract`, `genome transfer`
## Konzept ## Konzept
Die Genome Engine erkennt Verbesserungen an Copilot-Konfigurationsdateien über Git-History, destilliert sie in übertragbare "Growth Vectors" und schlägt konkrete Patches für andere Repos vor. Die Genome Engine erkennt Verbesserungen an KI-Konfigurationsdateien über Git-History, destilliert sie in übertragbare "Insights" und schlägt konkrete Patches für andere Repos vor.
**Begriffe:** **Begriffe:**
- **Trait** Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File - **Capability** Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File
- **Genome** Die Gesamtheit aller Traits eines Projekts - **Genome** Die Gesamtheit aller Capabilities eines Projekts
- **Mutation** Ein Git-Commit-Delta an einem Trait - **Improvement** Ein Git-Commit-Delta an einer Capability
- **Growth Vector** Destillierte, bewertete Mutation (bereinigt, klassifiziert, gescored) - **Insight** Destilliertes, bewertetes Improvement (bereinigt, klassifiziert, gescored)
- **Propagation** Konkreter Änderungsvorschlag für ein Ziel-Genome - **Transfer** Konkreter Änderungsvorschlag für ein Ziel-Genome
## Pipeline ## Pipeline
| Phase | Tool | Input → Output | | Phase | Tool | Input → Output |
| --------------- | ---------------------------- | ------------------------------------------------ | | --------------- | ---------------------------- | --------------------------------------------------- |
| 1. Extraction | `genome-extract.py` | Git-History → `raw-mutations.md` | | 1. Extraction | `genome-extract.py` | Git-History → `raw-improvements.md` |
| 2. Distillation | `genome-distill.prompt.md` | `raw-mutations.md` → `distilled-mutations.md` | | 2. Distillation | `genome-distill.prompt.md` | `raw-improvements.md` → `distilled-insights.md` |
| 3. Propagation | `genome-propagate.prompt.md` | `distilled-mutations.md` + Ziel-Genome → Patches | | 3. Transfer | `genome-propagate.prompt.md` | `distilled-insights.md` + Ziel-Genome → Patches |
## Usage ## Usage
@ -36,18 +36,18 @@ Der Router-Prompt fragt nach Quell-Repo und Zeitspanne, dann orchestriert er all
## Dateien ## Dateien
| Datei | Ort | Zweck | | Datei | Ort | Zweck |
| ---------------------------- | ------------------------ | --------------------------------------- | | ---------------------------- | ------------------------ | --------------------------------------------- |
| `SKILL.md` | `.github/skills/genome/` | Diese Dokumentation | | `SKILL.md` | `.github/skills/genome/` | Diese Dokumentation |
| `genome-extract.py` | `.github/skills/genome/` | Phase 1: Git-Scanning + Trait-Erkennung | | `genome-extract.py` | `.github/skills/genome/` | Phase 1: Git-Scanning + Capability-Erkennung |
| `genome.prompt.md` | `.github/prompts/` | Orchestrator (Router für alle 3 Phasen) | | `genome.prompt.md` | `.github/prompts/` | Orchestrator (Router für alle 3 Phasen) |
| `genome-distill.prompt.md` | `.github/prompts/` | Phase 2: Klassifizierung + Scoring | | `genome-distill.prompt.md` | `.github/prompts/` | Phase 2: Klassifizierung + Scoring |
| `genome-propagate.prompt.md` | `.github/prompts/` | Phase 3: Patch-Generierung für Ziel | | `genome-propagate.prompt.md` | `.github/prompts/` | Phase 3: Transfer-Vorschläge für Ziel |
| `Concept Genome Engine.md` | `.github/genome/` | Vollständiges Konzept-Dokument | | `Concept Genome Engine.md` | `.github/genome/` | Vollständiges Konzept-Dokument |
## Trait-Erkennung ## Capability-Erkennung
Pfade werden automatisch zu Trait-Keys aufgelöst: Pfade werden automatisch zu Capability-Keys aufgelöst:
``` ```
.github/skills/gh-tickets/SKILL.md → skill/gh-tickets .github/skills/gh-tickets/SKILL.md → skill/gh-tickets

View file

@ -2,9 +2,9 @@
""" """
Genome Engine Phase 1: Extraction Genome Engine Phase 1: Extraction
Extrahiert Mutations aus der Git-History für Copilot-Customization-Dateien. Extrahiert Improvements aus der Git-History für KI-Tooling-Dateien.
Scannt git log für Änderungen im Genome-Scope (.github/skills, agents, prompts, instructions). Scannt git log für Änderungen im Genome-Scope (.github/skills, agents, prompts, instructions).
Gruppiert Diffs nach Trait und gibt strukturiertes Markdown aus. Gruppiert Diffs nach Capability und gibt strukturiertes Markdown aus.
Usage: Usage:
python .github/skills/genome/genome-extract.py --since "7 days ago" python .github/skills/genome/genome-extract.py --since "7 days ago"
@ -64,7 +64,7 @@ def is_in_genome_scope(filepath: str) -> bool:
def get_trait_key(filepath: str, repo_path: str) -> str | None: def get_trait_key(filepath: str, repo_path: str) -> str | None:
"""Leitet den Trait-Key aus einem Dateipfad ab.""" """Leitet den Capability-Key aus einem Dateipfad ab."""
# Skills: skill/<ordnername> # Skills: skill/<ordnername>
m = re.match(r"^\.github/skills/([^/]+)/", filepath) m = re.match(r"^\.github/skills/([^/]+)/", filepath)
@ -107,7 +107,7 @@ def get_trait_key(filepath: str, repo_path: str) -> str | None:
def get_mutation_type(status: str) -> str: def get_mutation_type(status: str) -> str:
"""Bestimmt den Mutation-Typ aus dem Git-Status-Buchstaben.""" """Bestimmt den Improvement-Typ aus dem Git-Status-Buchstaben."""
if status.startswith("A"): if status.startswith("A"):
return "member-added" return "member-added"
elif status.startswith("D"): elif status.startswith("D"):
@ -117,7 +117,7 @@ def get_mutation_type(status: str) -> str:
def extract_mutations(repo_path: str, since: str) -> dict[str, list[dict]]: def extract_mutations(repo_path: str, since: str) -> dict[str, list[dict]]:
"""Extrahiert alle Mutations aus der Git-History.""" """Extrahiert alle Improvements aus der Git-History."""
mutations: dict[str, list[dict]] = defaultdict(list) mutations: dict[str, list[dict]] = defaultdict(list)
# Git-Log abrufen # Git-Log abrufen
@ -201,26 +201,26 @@ def extract_mutations(repo_path: str, since: str) -> dict[str, list[dict]]:
def generate_markdown(mutations: dict[str, list[dict]], repo_path: str, since: str) -> str: def generate_markdown(mutations: dict[str, list[dict]], repo_path: str, since: str) -> str:
"""Generiert die Markdown-Ausgabe.""" """Generiert die Markdown-Ausgabe."""
lines = [] lines = []
lines.append("# Raw Mutations") lines.append("# Raw Improvements")
lines.append("") lines.append("")
lines.append(f"**Extrahiert:** {datetime.now().strftime('%Y-%m-%d %H:%M')}") lines.append(f"**Extrahiert:** {datetime.now().strftime('%Y-%m-%d %H:%M')}")
lines.append(f"**Zeitraum:** seit {since}") lines.append(f"**Zeitraum:** seit {since}")
lines.append(f"**Repository:** {Path(repo_path).resolve().name}") lines.append(f"**Repository:** {Path(repo_path).resolve().name}")
lines.append(f"**Traits mit Mutations:** {len(mutations)}") lines.append(f"**Capabilities mit Improvements:** {len(mutations)}")
lines.append("") lines.append("")
lines.append("---") lines.append("---")
lines.append("") lines.append("")
if not mutations: if not mutations:
lines.append("*Keine Mutations im angegebenen Zeitraum gefunden.*") lines.append("*Keine Improvements im angegebenen Zeitraum gefunden.*")
else: else:
for trait_key in sorted(mutations.keys()): for trait_key in sorted(mutations.keys()):
trait_mutations = mutations[trait_key] trait_mutations = mutations[trait_key]
lines.append(f"## Trait: `{trait_key}`") lines.append(f"## Capability: `{trait_key}`")
lines.append("") lines.append("")
lines.append("| Mutations | Dateien |") lines.append("| Improvements | Dateien |")
lines.append("|-----------|---------|") lines.append("|-------------|---------|")
unique_files = sorted(set(m["file"] for m in trait_mutations)) unique_files = sorted(set(m["file"] for m in trait_mutations))
lines.append(f"| {len(trait_mutations)} | {', '.join(unique_files)} |") lines.append(f"| {len(trait_mutations)} | {', '.join(unique_files)} |")
@ -259,11 +259,11 @@ def main():
parser = argparse.ArgumentParser(description="Genome Engine Extraction") parser = argparse.ArgumentParser(description="Genome Engine Extraction")
parser.add_argument("--since", default="7 days ago", help='Zeitspanne (z.B. "7 days ago")') parser.add_argument("--since", default="7 days ago", help='Zeitspanne (z.B. "7 days ago")')
parser.add_argument("--repo", default=".", help="Pfad zum Repository") parser.add_argument("--repo", default=".", help="Pfad zum Repository")
parser.add_argument("--output", default="", help="Output-Pfad (default: .github/genome/output/raw-mutations.md)") parser.add_argument("--output", default="", help="Output-Pfad (default: .github/genome/output/raw-improvements.md)")
args = parser.parse_args() args = parser.parse_args()
repo_path = os.path.abspath(args.repo) repo_path = os.path.abspath(args.repo)
output_path = args.output or os.path.join(repo_path, ".github/genome/output/raw-mutations.md") output_path = args.output or os.path.join(repo_path, ".github/genome/output/raw-improvements.md")
print(f"Genome Extract: Scanning commits since '{args.since}'...") print(f"Genome Extract: Scanning commits since '{args.since}'...")
@ -278,9 +278,9 @@ def main():
total_mutations = sum(len(v) for v in mutations.values()) total_mutations = sum(len(v) for v in mutations.values())
print() print()
print("Extraction abgeschlossen:") print("Extraction abgeschlossen:")
print(f" Traits: {len(mutations)}") print(f" Capabilities: {len(mutations)}")
print(f" Mutations: {total_mutations}") print(f" Improvements: {total_mutations}")
print(f" Output: {output_path}") print(f" Output: {output_path}")
if __name__ == "__main__": if __name__ == "__main__":