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:
parent
5eae3a4813
commit
ddf9272dda
6 changed files with 177 additions and 177 deletions
170
.github/genome/Concept Genome Engine.md
vendored
170
.github/genome/Concept Genome Engine.md
vendored
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
## 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
|
||||
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]
|
||||
E -->|raw improvements| D[Distillation]
|
||||
D -->|Insights| T[Transfer]
|
||||
T -->|Patches| B[Repo B<br/>aktualisiert]
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -18,25 +18,25 @@ graph LR
|
|||
|
||||
```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]
|
||||
G[🧬 Genome<br/>Gesamtheit aller Capabilities] --> T1[Capability: Skill]
|
||||
G --> T2[Capability: Agent]
|
||||
G --> T3[Capability: Prompt]
|
||||
G --> T4[Capability: Instructions]
|
||||
T1 -->|Git-Delta| M1[Improvement]
|
||||
T3 -->|Git-Delta| M2[Improvement]
|
||||
M1 -->|destilliert| GV1[Insight<br/>Score 8/10 🟡]
|
||||
M2 -->|destilliert| GV2[Insight<br/>Score 9/10 🔴]
|
||||
GV1 --> PR[Transfer<br/>Konkrete Patches]
|
||||
GV2 --> PR
|
||||
```
|
||||
|
||||
| Begriff | Bedeutung |
|
||||
| ----------------- | ----------------------------------------------------------------------------------------- |
|
||||
| **Trait** | Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File inkl. aller zugehörigen Dateien |
|
||||
| **Genome** | Die Gesamtheit aller Traits eines Projekts |
|
||||
| **Mutation** | Ein Git-Commit-Delta an einem Trait (siehe Mutation-Typen) |
|
||||
| **Growth Vector** | Destillierte, bewertete Mutation (bereinigt, klassifiziert, gescored) |
|
||||
| **Propagation** | Konkreter Änderungsvorschlag für ein Ziel-Genome |
|
||||
| Begriff | Bedeutung |
|
||||
| ---------------- | -------------------------------------------------------------------------------------------- |
|
||||
| **Capability** | Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File inkl. aller zugehörigen Dateien |
|
||||
| **Genome** | Die Gesamtheit aller Capabilities eines Projekts – das "KI-Wissen" eines Repos |
|
||||
| **Improvement** | Ein Git-Commit-Delta an einer Capability – eine konkrete Verbesserung am KI-Tooling |
|
||||
| **Insight** | Destilliertes, bewertetes Improvement (bereinigt, klassifiziert, gescored, übertragbar) |
|
||||
| **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
|
||||
graph TD
|
||||
|
|
@ -69,27 +69,27 @@ graph TD
|
|||
|
||||
### 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/queries.graphql → trait: skill/gh-tickets
|
||||
.github/skills/android-build/SKILL.md → trait: skill/android-build
|
||||
.github/skills/android-build/android-dev.ps1 → trait: skill/android-build
|
||||
.github/skills/gh-tickets/SKILL.md → capability: skill/gh-tickets
|
||||
.github/skills/gh-tickets/queries.graphql → capability: skill/gh-tickets
|
||||
.github/skills/android-build/SKILL.md → capability: 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
|
||||
|
||||
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/code-reviewer.agent.md → trait: agent/code-reviewer
|
||||
.github/agents/android-implementer.agent.md → capability: agent/android-implementer
|
||||
.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
|
||||
|
||||
|
|
@ -97,49 +97,49 @@ Prompts unterscheiden zwei Varianten: **Standalone** und **Verbund**.
|
|||
|
||||
#### 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/ship.prompt.md → trait: prompt/ship
|
||||
.github/prompts/publish.prompt.md → trait: prompt/publish
|
||||
.github/prompts/commit.prompt.md → capability: prompt/commit
|
||||
.github/prompts/ship.prompt.md → capability: prompt/ship
|
||||
.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)
|
||||
|
||||
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-implementation.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-planning.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep-tech-decision.prompt.md → trait: prompt/nextstep
|
||||
.github/prompts/nextstep.prompt.md → capability: prompt/nextstep
|
||||
.github/prompts/nextstep-implementation.prompt.md → capability: prompt/nextstep
|
||||
.github/prompts/nextstep-planning.prompt.md → capability: 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-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/kotlin-conventions.instructions.md → trait: instructions/kotlin-conventions
|
||||
.github/copilot-instructions.md → capability: instructions/copilot-instructions
|
||||
.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 |
|
||||
| ---------------- | ------------------------------------ | ----------------------------------------------------- |
|
||||
| `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 |
|
||||
| Typ | Bedeutung | Beispiel |
|
||||
| ---------------- | -------------------------------------------- | ----------------------------------------------------- |
|
||||
| `content-change` | Inhalt einer Datei in der Capability geändert | `nextstep-implementation.prompt.md` optimiert |
|
||||
| `member-added` | Neue Datei zur Capability hinzugefügt | Neuer `nextstep-migration.prompt.md` + Router-Eintrag |
|
||||
| `member-removed` | Datei aus der Capability entfernt | `nextstep-test.prompt.md` gelöscht |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -150,16 +150,16 @@ flowchart LR
|
|||
subgraph "Phase 1: Extraction"
|
||||
direction TB
|
||||
GIT[(Git-History)] --> SCRIPT[genome-extract.py]
|
||||
SCRIPT --> RAW[raw-mutations.md]
|
||||
SCRIPT --> RAW[raw-improvements.md]
|
||||
end
|
||||
subgraph "Phase 2: Distillation"
|
||||
direction TB
|
||||
RAW2[raw-mutations.md] --> AGENT1[KI-Agent]
|
||||
AGENT1 --> |"Klassifizieren\nScoren\nSanitizen"| DIST[distilled-mutations.md]
|
||||
RAW2[raw-improvements.md] --> AGENT1[KI-Agent]
|
||||
AGENT1 --> |"Klassifizieren\nScoren\nSanitizen"| DIST[distilled-insights.md]
|
||||
end
|
||||
subgraph "Phase 3: Propagation"
|
||||
subgraph "Phase 3: Transfer"
|
||||
direction TB
|
||||
DIST2[distilled-mutations.md] --> AGENT2[KI-Agent]
|
||||
DIST2[distilled-insights.md] --> AGENT2[KI-Agent]
|
||||
ZIEL[Ziel-Genome] --> AGENT2
|
||||
AGENT2 --> PATCHES[Konkrete Patches]
|
||||
end
|
||||
|
|
@ -170,22 +170,22 @@ flowchart LR
|
|||
### Phase 1: Extraction (Script)
|
||||
|
||||
**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
|
||||
- Gruppiert Diffs nach Trait (siehe Trait-Erkennung oben)
|
||||
- Gibt pro Trait alle Commits mit Diff, Message und Autor aus
|
||||
- Gruppiert Diffs nach Capability (siehe Capability-Erkennung oben)
|
||||
- Gibt pro Capability alle Commits mit Diff, Message und Autor aus
|
||||
|
||||
**Tool:** `genome-extract.py` (Python)
|
||||
|
||||
### Phase 2: Distillation (Agent)
|
||||
|
||||
**Input:** `raw-mutations.md`
|
||||
**Output:** `distilled-mutations.md`
|
||||
**Input:** `raw-improvements.md`
|
||||
**Output:** `distilled-insights.md`
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
M[Mutation] --> K{Klassifizierung}
|
||||
M[Improvement] --> K{Klassifizierung}
|
||||
K -->|Bugfix für alle| C[🔴 Critical]
|
||||
K -->|Generelle Verbesserung| E[🟡 Evolution]
|
||||
K -->|Nur dieses Projekt| S[⚪ Specialized]
|
||||
|
|
@ -193,23 +193,23 @@ flowchart TD
|
|||
E --> SC
|
||||
S --> X[❌ Entfernt]
|
||||
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
|
||||
```
|
||||
|
||||
- Scored jede Mutation (1–10) nach Übertragungswert
|
||||
- Scored jedes Improvement (1–10) nach Übertragungswert
|
||||
- Filtert sensitive Daten (Usernames, Maschinenpfade, Tokens, projektspezifische IDs)
|
||||
- Specialized Mutations werden komplett entfernt
|
||||
- Specialized Improvements werden komplett entfernt
|
||||
|
||||
**Tool:** `genome-distill.prompt.md`
|
||||
|
||||
### Phase 3: Propagation (Agent)
|
||||
### Phase 3: Transfer (Agent)
|
||||
|
||||
**Input:** `distilled-mutations.md` + Ziel-Genome
|
||||
**Output:** `propagation-proposals.md`
|
||||
**Input:** `distilled-insights.md` + Ziel-Genome
|
||||
**Output:** `transfer-proposals.md`
|
||||
|
||||
- Matched Traits zwischen Quell- und Ziel-Genome
|
||||
- Erstellt konkrete Änderungsvorschläge pro Trait
|
||||
- Matched Capabilities zwischen Quell- und Ziel-Genome
|
||||
- Erstellt konkrete Änderungsvorschläge pro Capability
|
||||
- Formatiert als Checkliste mit Default-Auswahl:
|
||||
|
||||
| Kategorie | Default | Bedingung |
|
||||
|
|
@ -232,7 +232,7 @@ sequenceDiagram
|
|||
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
|
||||
R-->>T: Improvements extrahiert → Distillation → Transfer
|
||||
```
|
||||
|
||||
1. Letzter `.github/`-Commit im Ziel-Repo ermitteln → `T_target`
|
||||
|
|
@ -255,12 +255,12 @@ graph TD
|
|||
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]
|
||||
RM[raw-improvements.md<br/>generiert]
|
||||
DM[distilled-insights.md<br/>generiert]
|
||||
PP[transfer-proposals.md<br/>generiert]
|
||||
end
|
||||
subgraph "docs/"
|
||||
CO[genome-engine.md<br/>Dieses Konzept]
|
||||
subgraph ".github/genome/"
|
||||
CO[Concept Genome Engine.md<br/>Dieses Konzept]
|
||||
end
|
||||
OR -->|"ruft auf"| EX
|
||||
OR -->|"delegiert an"| DI
|
||||
|
|
@ -280,9 +280,9 @@ graph TD
|
|||
| 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/` |
|
||||
| 7 | `raw-improvements.md` | Generiert | `.github/genome/output/` |
|
||||
| 8 | `distilled-insights.md` | Generiert | `.github/genome/output/` |
|
||||
| 9 | `transfer-proposals.md` | Generiert | `.github/genome/output/` |
|
||||
|
||||
> Generierte Dateien (7–9) sind gitignored.
|
||||
|
||||
|
|
@ -290,7 +290,7 @@ graph TD
|
|||
|
||||
## Zukünftige Erweiterungen
|
||||
|
||||
- Multi-Repo-Registry: Zentrale Sammlung von Growth Vectors aus vielen Projekten
|
||||
- Automatische Erkennung des Evolutionszeitraums über Repo-Vergleich
|
||||
- CI-Integration: Propagation-Check bei jedem Push
|
||||
- Community-Sharing: Öffentliche Growth Vectors als "Trait Packages"
|
||||
- Multi-Repo-Registry: Zentrale Sammlung von Insights aus vielen Projekten
|
||||
- Automatische Erkennung des Transfer-Zeitraums über Repo-Vergleich
|
||||
- CI-Integration: Transfer-Check bei jedem Push
|
||||
- Community-Sharing: Öffentliche Insights als "Capability Packages"
|
||||
|
|
|
|||
34
.github/prompts/genome-distill.prompt.md
vendored
34
.github/prompts/genome-distill.prompt.md
vendored
|
|
@ -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)
|
||||
tools: [read, edit]
|
||||
---
|
||||
|
||||
# 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
|
||||
|
||||
Lies die Datei `.github/genome/output/raw-mutations.md`.
|
||||
Lies die Datei `.github/genome/output/raw-improvements.md`.
|
||||
|
||||
## Aufgabe
|
||||
|
||||
Für **jeden Trait** und jede Mutation darin:
|
||||
Für **jede Capability** und jedes Improvement darin:
|
||||
|
||||
### 1. Klassifizierung
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ Für **jeden Trait** und jede Mutation darin:
|
|||
|
||||
### 2. Scoring (1–10)
|
||||
|
||||
Bewerte den **Übertragungswert** jeder Critical/Evolution-Mutation:
|
||||
Bewerte den **Übertragungswert** jedes Critical/Evolution-Improvements:
|
||||
|
||||
- **9–10:** Universell wertvoll, jedes Repo profitiert
|
||||
- **7–8:** Breit anwendbar, gutes Pattern
|
||||
|
|
@ -64,7 +64,7 @@ Ersetze in den Diffs:
|
|||
|
||||
### 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
|
||||
- **Renames ohne inhaltliche Änderung**: entfernen
|
||||
|
||||
|
|
@ -72,16 +72,16 @@ Ersetze in den Diffs:
|
|||
|
||||
### 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)?
|
||||
- Ist sie nach Pfad-/Namen-Sanitization auf andere Projekte anwendbar?
|
||||
- → Wenn ja: **Evolution** (Score 7–9), nicht Specialized.
|
||||
|
||||
**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 1000–2000 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 1000–2000 Zeilen.
|
||||
|
||||
### 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
|
||||
|
||||
Eine Conversion-Rate von < 10% ist ein Warnsignal. Bei typischen aktiven Repos mit 20+ Traits sollte die Rate bei **15–30%** 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 **15–30%** liegen (bezogen auf Capabilities mit mindestens einer Evolution, nicht auf Improvements-Gesamtzahl).
|
||||
|
||||
## Regeln zur Diff-Analyse
|
||||
|
||||
|
|
@ -125,13 +125,13 @@ Gehe für jeden Commit wie folgt vor:
|
|||
|
||||
## 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
|
||||
# Distilled Mutations
|
||||
# Distilled Insights
|
||||
|
||||
**Quelle:** <repo-name>
|
||||
**Zeitraum:** <aus raw-mutations übernehmen>
|
||||
**Zeitraum:** <aus raw-improvements übernehmen>
|
||||
**Distilliert:** <aktuelles Datum>
|
||||
**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
|
||||
|
||||
### Trait: `<trait-key>`
|
||||
### Capability: `<capability-key>`
|
||||
|
||||
**Score:** N/10
|
||||
**Zusammenfassung:** <1-Satz was gefixt wurde>
|
||||
|
|
@ -153,7 +153,7 @@ Schreibe das Ergebnis in `.github/genome/output/distilled-mutations.md` mit folg
|
|||
|
||||
## 🟡 Evolution
|
||||
|
||||
### Trait: `<trait-key>`
|
||||
### Capability: `<capability-key>`
|
||||
|
||||
**Score:** N/10
|
||||
**Zusammenfassung:** <1-Satz was verbessert wurde>
|
||||
|
|
@ -167,11 +167,11 @@ Schreibe das Ergebnis in `.github/genome/output/distilled-mutations.md` mit folg
|
|||
|
||||
## 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)
|
||||
- Sortiere innerhalb jeder Klasse absteigend nach Score
|
||||
- Halte Zusammenfassungen auf 1 Satz
|
||||
- Das "Pattern"-Feld bei Evolution beschreibt die **generalisierte Verbesserung**, nicht den konkreten Change
|
||||
- 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`
|
||||
```
|
||||
|
|
|
|||
48
.github/prompts/genome-propagate.prompt.md
vendored
48
.github/prompts/genome-propagate.prompt.md
vendored
|
|
@ -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)
|
||||
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
|
||||
|
||||
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`
|
||||
|
||||
## 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 ein **funktional äquivalenter Trait** 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)
|
||||
- Prüfe ob eine **gleichnamige Capability** im Ziel-Genome existiert → direktes Match
|
||||
- Prüfe ob eine **funktional äquivalente Capability** existiert (anderer Name, gleicher Zweck) → adaptiertes Match
|
||||
- Kein Match → **neue Capability** (nur bei Score ≥ 8 in die Checkliste aufnehmen, aber IMMER als "neu" kennzeichnen – nie automatisch anwenden)
|
||||
|
||||
### 2. Patch-Generierung
|
||||
|
||||
Erstelle für jedes Match einen konkreten Änderungsvorschlag:
|
||||
|
||||
- **Bestehender Trait:** Zeige den Ist-Zustand (relevanter Ausschnitt) und den vorgeschlagenen Soll-Zustand
|
||||
- **Neuer Trait:** Zeige die vollständige neue Datei
|
||||
- **Bestehende Capability:** Zeige den Ist-Zustand (relevanter Ausschnitt) und den vorgeschlagenen Soll-Zustand
|
||||
- **Neue Capability:** Zeige die vollständige neue Datei
|
||||
- Passe Platzhalter (`<project>`, `<local-path>` etc.) an die Werte dieses Repos an
|
||||
|
||||
### 3. Checkliste formatieren
|
||||
|
||||
## Output-Format
|
||||
|
||||
Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`:
|
||||
Schreibe das Ergebnis in `.github/genome/output/transfer-proposals.md`:
|
||||
|
||||
````markdown
|
||||
# Propagation Proposals
|
||||
# Transfer Proposals
|
||||
|
||||
**Ziel-Repo:** <aktuelles Repo>
|
||||
**Quelle:** <aus distilled-mutations übernehmen>
|
||||
**Quelle:** <aus distilled-insights übernehmen>
|
||||
**Erstellt:** <aktuelles Datum>
|
||||
**Vorschläge:** X Critical, Y Evolution
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`:
|
|||
|
||||
### 🔴 Critical
|
||||
|
||||
- [x] **`<trait-key>`** (Score N/10) – <Zusammenfassung>
|
||||
- [x] **`<capability-key>`** (Score N/10) – <Zusammenfassung>
|
||||
|
||||
<details>
|
||||
<summary>Änderung anzeigen</summary>
|
||||
|
|
@ -67,7 +67,7 @@ Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`:
|
|||
|
||||
### 🟡 Evolution (Score ≥ 7)
|
||||
|
||||
- [x] **`<trait-key>`** (Score N/10) – <Zusammenfassung>
|
||||
- [x] **`<capability-key>`** (Score N/10) – <Zusammenfassung>
|
||||
|
||||
<details>
|
||||
<summary>Änderung anzeigen</summary>
|
||||
|
|
@ -82,7 +82,7 @@ Schreibe das Ergebnis in `.github/genome/output/propagation-proposals.md`:
|
|||
|
||||
### 🟡 Evolution (Score < 7)
|
||||
|
||||
- [ ] **`<trait-key>`** (Score N/10) – <Zusammenfassung>
|
||||
- [ ] **`<capability-key>`** (Score N/10) – <Zusammenfassung>
|
||||
|
||||
<details>
|
||||
<summary>Änderung anzeigen</summary>
|
||||
|
|
@ -104,21 +104,21 @@ Frage den User:
|
|||
|
||||
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>
|
||||
|
||||
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
|
||||
|
||||
- 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
|
||||
- Erstelle KEINE neuen Traits mit Score < 8
|
||||
- Neue Traits immer einzeln bestätigen lassen – auch wenn mehrere selektiert wurden
|
||||
- Erstelle KEINE neuen Capabilities mit Score < 8
|
||||
- Neue Capabilities immer einzeln bestätigen lassen – auch wenn mehrere selektiert wurden
|
||||
- Passe Einrückung und Stil an die Konventionen des Ziel-Repos an
|
||||
```
|
||||
|
|
|
|||
24
.github/prompts/genome.prompt.md
vendored
24
.github/prompts/genome.prompt.md
vendored
|
|
@ -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.
|
||||
|
||||
> 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
|
||||
|
||||
Führe das Extraction-Script aus:
|
||||
|
||||
```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:
|
||||
|
||||
- Wenn 0 Traits gefunden: Melde "Keine Mutations im Zeitraum" und stoppe.
|
||||
- Sonst: Zeige kurze Zusammenfassung (Anzahl Traits, Anzahl Mutations) und weiter zu Phase 2.
|
||||
- Wenn 0 Capabilities gefunden: Melde "Keine Improvements im Zeitraum" und stoppe.
|
||||
- Sonst: Zeige kurze Zusammenfassung (Anzahl Capabilities, Anzahl Improvements) und weiter zu Phase 2.
|
||||
|
||||
## Phase 2: Distillation
|
||||
|
||||
Führe jetzt die Distillation durch. Folge den Anweisungen aus `.github/prompts/genome-distill.prompt.md`:
|
||||
|
||||
1. Lies `.github/genome/output/raw-mutations.md`
|
||||
2. Klassifiziere jede Mutation (🔴 Critical / 🟡 Evolution / ⚪ Specialized)
|
||||
1. Lies `.github/genome/output/raw-improvements.md`
|
||||
2. Klassifiziere jedes Improvement (🔴 Critical / 🟡 Evolution / ⚪ Specialized)
|
||||
3. Score den Übertragungswert (1–10)
|
||||
4. Sanitize sensitive Daten
|
||||
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:
|
||||
|
||||
|
|
@ -77,17 +77,17 @@ Zeige dem User eine Zusammenfassung:
|
|||
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.**
|
||||
|
||||
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)
|
||||
3. Matche Traits und generiere Patches
|
||||
3. Matche Capabilities und generiere Patches
|
||||
4. Zeige die Checkliste:
|
||||
- `[x]` Critical (default an)
|
||||
- `[x]` Evolution mit Score ≥ 7 (default an)
|
||||
|
|
|
|||
46
.github/skills/genome/SKILL.md
vendored
46
.github/skills/genome/SKILL.md
vendored
|
|
@ -1,30 +1,30 @@
|
|||
# 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
|
||||
|
||||
`genome`, `propagate`, `mutations übertragen`, `traits synchronisieren`, `genome extract`, `genome propagate`
|
||||
`genome`, `transfer`, `improvements übertragen`, `capabilities synchronisieren`, `genome extract`, `genome transfer`
|
||||
|
||||
## 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:**
|
||||
|
||||
- **Trait** – Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File
|
||||
- **Genome** – Die Gesamtheit aller Traits eines Projekts
|
||||
- **Mutation** – Ein Git-Commit-Delta an einem Trait
|
||||
- **Growth Vector** – Destillierte, bewertete Mutation (bereinigt, klassifiziert, gescored)
|
||||
- **Propagation** – Konkreter Änderungsvorschlag für ein Ziel-Genome
|
||||
- **Capability** – Ein Skill, Agent, Prompt(-Verbund) oder Instructions-File
|
||||
- **Genome** – Die Gesamtheit aller Capabilities eines Projekts
|
||||
- **Improvement** – Ein Git-Commit-Delta an einer Capability
|
||||
- **Insight** – Destilliertes, bewertetes Improvement (bereinigt, klassifiziert, gescored)
|
||||
- **Transfer** – Konkreter Änderungsvorschlag für ein Ziel-Genome
|
||||
|
||||
## Pipeline
|
||||
|
||||
| Phase | Tool | Input → Output |
|
||||
| --------------- | ---------------------------- | ------------------------------------------------ |
|
||||
| 1. Extraction | `genome-extract.py` | Git-History → `raw-mutations.md` |
|
||||
| 2. Distillation | `genome-distill.prompt.md` | `raw-mutations.md` → `distilled-mutations.md` |
|
||||
| 3. Propagation | `genome-propagate.prompt.md` | `distilled-mutations.md` + Ziel-Genome → Patches |
|
||||
| Phase | Tool | Input → Output |
|
||||
| --------------- | ---------------------------- | --------------------------------------------------- |
|
||||
| 1. Extraction | `genome-extract.py` | Git-History → `raw-improvements.md` |
|
||||
| 2. Distillation | `genome-distill.prompt.md` | `raw-improvements.md` → `distilled-insights.md` |
|
||||
| 3. Transfer | `genome-propagate.prompt.md` | `distilled-insights.md` + Ziel-Genome → Patches |
|
||||
|
||||
## Usage
|
||||
|
||||
|
|
@ -36,18 +36,18 @@ Der Router-Prompt fragt nach Quell-Repo und Zeitspanne, dann orchestriert er all
|
|||
|
||||
## Dateien
|
||||
|
||||
| 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 |
|
||||
| `Concept Genome Engine.md` | `.github/genome/` | Vollständiges Konzept-Dokument |
|
||||
| Datei | Ort | Zweck |
|
||||
| ---------------------------- | ------------------------ | --------------------------------------------- |
|
||||
| `SKILL.md` | `.github/skills/genome/` | Diese Dokumentation |
|
||||
| `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-distill.prompt.md` | `.github/prompts/` | Phase 2: Klassifizierung + Scoring |
|
||||
| `genome-propagate.prompt.md` | `.github/prompts/` | Phase 3: Transfer-Vorschläge für Ziel |
|
||||
| `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
|
||||
|
|
|
|||
32
.github/skills/genome/genome-extract.py
vendored
32
.github/skills/genome/genome-extract.py
vendored
|
|
@ -2,9 +2,9 @@
|
|||
"""
|
||||
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).
|
||||
Gruppiert Diffs nach Trait und gibt strukturiertes Markdown aus.
|
||||
Gruppiert Diffs nach Capability und gibt strukturiertes Markdown aus.
|
||||
|
||||
Usage:
|
||||
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:
|
||||
"""Leitet den Trait-Key aus einem Dateipfad ab."""
|
||||
"""Leitet den Capability-Key aus einem Dateipfad ab."""
|
||||
|
||||
# Skills: skill/<ordnername>
|
||||
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:
|
||||
"""Bestimmt den Mutation-Typ aus dem Git-Status-Buchstaben."""
|
||||
"""Bestimmt den Improvement-Typ aus dem Git-Status-Buchstaben."""
|
||||
if status.startswith("A"):
|
||||
return "member-added"
|
||||
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]]:
|
||||
"""Extrahiert alle Mutations aus der Git-History."""
|
||||
"""Extrahiert alle Improvements aus der Git-History."""
|
||||
mutations: dict[str, list[dict]] = defaultdict(list)
|
||||
|
||||
# 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:
|
||||
"""Generiert die Markdown-Ausgabe."""
|
||||
lines = []
|
||||
lines.append("# Raw Mutations")
|
||||
lines.append("# Raw Improvements")
|
||||
lines.append("")
|
||||
lines.append(f"**Extrahiert:** {datetime.now().strftime('%Y-%m-%d %H:%M')}")
|
||||
lines.append(f"**Zeitraum:** seit {since}")
|
||||
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("")
|
||||
|
||||
if not mutations:
|
||||
lines.append("*Keine Mutations im angegebenen Zeitraum gefunden.*")
|
||||
lines.append("*Keine Improvements im angegebenen Zeitraum gefunden.*")
|
||||
else:
|
||||
for trait_key in sorted(mutations.keys()):
|
||||
trait_mutations = mutations[trait_key]
|
||||
|
||||
lines.append(f"## Trait: `{trait_key}`")
|
||||
lines.append(f"## Capability: `{trait_key}`")
|
||||
lines.append("")
|
||||
lines.append("| Mutations | Dateien |")
|
||||
lines.append("|-----------|---------|")
|
||||
lines.append("| Improvements | Dateien |")
|
||||
lines.append("|-------------|---------|")
|
||||
|
||||
unique_files = sorted(set(m["file"] for m in trait_mutations))
|
||||
lines.append(f"| {len(trait_mutations)} | {', '.join(unique_files)} |")
|
||||
|
|
@ -259,11 +259,11 @@ def main():
|
|||
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("--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()
|
||||
|
||||
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}'...")
|
||||
|
||||
|
|
@ -278,9 +278,9 @@ def main():
|
|||
total_mutations = sum(len(v) for v in mutations.values())
|
||||
print()
|
||||
print("Extraction abgeschlossen:")
|
||||
print(f" Traits: {len(mutations)}")
|
||||
print(f" Mutations: {total_mutations}")
|
||||
print(f" Output: {output_path}")
|
||||
print(f" Capabilities: {len(mutations)}")
|
||||
print(f" Improvements: {total_mutations}")
|
||||
print(f" Output: {output_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
Loading…
Reference in a new issue