fix: mkdir -p .git/hooks before hook install in bootstrap

Also bootstrapped own repo: adds history/, data/, .vscode/, .gitignore
This commit is contained in:
Conrad Schulz 2026-05-31 12:54:13 +00:00
parent 95d03603cf
commit e1f912f248
7 changed files with 203 additions and 0 deletions

106
.github/copilot-instructions.md vendored Normal file
View file

@ -0,0 +1,106 @@
# GitHub Copilot Project Instructions
## Project
<!-- TODO: Beschreibe das Projekt in 1-2 Sätzen -->
## Stack
<!-- TODO: Sprachen, Frameworks, wichtige Tools -->
- Language:
- Framework:
- Database:
- Infrastructure:
## Architecture
<!-- TODO: Relevante Architekturentscheidungen -->
- Pattern (MVC / Hexagonal / Event-driven / ...):
- Key constraints:
- ADR location: `docs/adr/`
## Project Structure Conventions
### Persistent Data (`/data/`)
- **Alle persistenten Service-Daten** gehören in `/data/<service-name>/` (Repo-Root)
- **Nie** Daten-Dateien committen `/data/` ist vollständig gitignored
- Einen Unterordner pro Service (z.B. `data/postgres/`, `data/redis/`, `data/uploads/`)
- Erforderliche Unterordner in `docs/ADMIN.md` dokumentieren
### Agent History (`/history/`)
- **Vollständige Konversationen**`history/prompts/YYYY-MM-DD_beschreibung.md` (**committed vollständige History bleibt erhalten**)
- **Komprimierter Kontext**`history/summary/PROJECT_CONTEXT.md` (**committed, immer aktuell halten!**)
- **Beim Start einer neuen Session:** `history/summary/PROJECT_CONTEXT.md` zuerst lesen
- **Am Ende jeder Session:** beide Dateien committen
- Copilot Chat: `/history` → History loggen + Summary aktualisieren
### Documentation (3 Zielgruppen alle 3 müssen existieren)
| Datei | Zielgruppe | Inhalt |
|---|---|---|
| `docs/USER.md` | Endnutzer | Features, How-To, FAQ keine technischen Details |
| `docs/ADMIN.md` | Administratoren | Deployment, Konfiguration, Monitoring, Backup |
| `docs/MAINTAINER.md` | Entwickler | Architektur, ADRs, Konventionen, Erweiterung |
**Regel:** Jede bedeutende Änderung muss mindestens eine dieser Dateien aktualisieren.
Der pre-commit Hook prüft dies automatisch.
## Conventions
<!-- TODO: Projekt-spezifische Konventionen -->
- Branch naming: `feat/<ticket>-description`, `fix/<ticket>-description`
- Commit format: Conventional Commits (`feat|fix|chore|docs|refactor|test|ci`)
- File structure:
- Naming:
## Engineering Process
### Before starting any task
1. Clarify requirements user story + acceptance criteria vorhanden?
2. Impact analysis welche bestehenden Komponenten sind betroffen?
3. Architecture check passt die geplante Lösung zur bestehenden Architektur?
4. Test strategy wie wird das Feature getestet?
### Definition of Ready (DoR)
A task can only be started when:
- [ ] Acceptance criteria are clear and unambiguous
- [ ] Non-functional requirements defined (performance, security, scalability)
- [ ] Architectural approach agreed upon
- [ ] No unresolved external blockers
### Definition of Done (DoD)
A task is only done when ALL of the following are true:
- [ ] Code implements the acceptance criteria
- [ ] Unit tests written and passing
- [ ] Integration tests (where applicable) passing
- [ ] No linter / type errors
- [ ] No secrets or credentials in code
- [ ] OWASP Top 10 reviewed
- [ ] Relevant documentation updated: `docs/USER.md` and/or `docs/ADMIN.md` and/or `docs/MAINTAINER.md`
- [ ] Alle 3 Zielgruppen-Dokumente vorhanden (`docs/USER.md`, `docs/ADMIN.md`, `docs/MAINTAINER.md`)
- [ ] Persistente Daten liegen ausschließlich in `/data/<service>/` (nie woanders)
- [ ] `history/summary/PROJECT_CONTEXT.md` aktualisiert
- [ ] Commit message follows Conventional Commits
- [ ] No dead code, no TODOs left behind (or tracked as issues)
- [ ] pre-commit Quality Gate bestanden (oder Bypass bewusst begründet)
## Testing Strategy
<!-- TODO: Anpassen auf das Projekt -->
- Framework:
- Coverage target: ≥ 80% (critical paths: 100%)
- Test pyramid: unit > integration > e2e
- Test location: `tests/` mirroring source structure
## Security
- No secrets in code or config files use environment variables
- Validate all inputs at system boundaries
- Principle of least privilege for all permissions
- Dependency vulnerabilities: check before adding new deps
## Documentation Standards
- Code comments: explain WHY, not WHAT
- Public APIs: always documented
- Architecture decisions: write ADR in `docs/adr/` (template: `docs/adr/000-template.md`)
- CHANGELOG.md: update with every release
- **3-Zielgruppen-Regel:** USER.md (Endnutzer) + ADMIN.md (Ops) + MAINTAINER.md (Dev) immer alle 3 pflegen
## Non-Functional Requirements
<!-- TODO: Anpassen -->
- Response time:
- Availability:
- Data retention:

6
.gitignore vendored
View file

@ -1,2 +1,8 @@
.env
*.local
# Persistente Service-Daten (nie committen!)
data/**/*
!data/.gitkeep

6
.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1,6 @@
{
"recommendations": [
"github.copilot",
"github.copilot-chat"
]
}

7
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,7 @@
{
// Repo-specific overrides only. Global Copilot settings are in User/settings.json (Settings Sync).
"editor.rulers": [100],
// YAML schema validation adjust to your stack
"yaml.schemas": {}
}

0
data/.gitkeep Normal file
View file

View file

@ -0,0 +1,77 @@
# PROJECT_CONTEXT [PROJEKT_NAME]
> Diese Datei ist der **persistente Gedächtnis-Speicher** für alle Agenten.
> Beim Start jeder neuen Agent-Session: **diese Datei zuerst lesen**.
> Nach Abschluss einer Aufgabe: **diesen Stand aktualisieren**.
---
## Aktueller Projektstatus
**Letzte Aktualisierung:** <!-- TODO: Datum + Aufgabe -->
**Phase:** <!-- z.B. Initialisierung / Entwicklung / Stabilisierung / Produktion -->
---
## Was ist dieses Projekt?
<!-- TODO: 2-3 Sätze Kern-Beschreibung -->
**Stack:** <!-- TODO: Sprachen, Frameworks, Datenbanken -->
**Deployment:** <!-- TODO: Wo läuft es? Docker, K8s, bare-metal? -->
---
## Erledigte Aufgaben (neueste zuerst)
<!-- Kurze Einträge: Datum · Aufgabe · Ergebnis · Wichtige Entscheidungen -->
| Datum | Aufgabe | Ergebnis | Entscheidungen |
|---|---|---|---|
| … | … | … | … |
---
## Offene Aufgaben & bekannte Probleme
<!-- TODO: Was ist noch offen? Was wurde bewusst zurückgestellt? -->
- [ ] TODO 1
- [ ] TODO 2
---
## Kritische Architekturentscheidungen
<!-- Die wichtigsten ADRs kurz zusammengefasst Details in docs/adr/ -->
| Entscheidung | Begründung | Wo dokumentiert |
|---|---|---|
| … | … | `docs/adr/NNN-…md` |
---
## Wichtige Pfade & Konventionen
- **Persistente Daten:** `/data/<service>/` (gitignored, nie committen!)
- **Agent-Logs (voll):** `/history/prompts/` (committed vollständige History im Repo)
- **Dieser Kontext:** `/history/summary/PROJECT_CONTEXT.md` (committed)
- **Tests:** `tests/` (Struktur spiegelt Source)
- **Docs:** `docs/USER.md` | `docs/ADMIN.md` | `docs/MAINTAINER.md`
---
## Für den nächsten Agenten: Startpunkt
<!-- TODO: Was soll der nächste Agent wissen / wo soll er anfangen? -->
1. …
2. …
---
## Bekannte Fallstricke / "Don't do this"
<!-- Lessons learned was hat nicht funktioniert oder warum wurde etwas verworfen -->
- …

View file

@ -87,6 +87,7 @@ fi
# ── pre-commit Hook Agent Quality Gate ─────────────────────────────────────
if [ ! -f "$TARGET/.git/hooks/pre-commit" ]; then
mkdir -p "$TARGET/.git/hooks"
cp "$TEMPLATE_DIR/hooks/pre-commit" "$TARGET/.git/hooks/pre-commit"
chmod +x "$TARGET/.git/hooks/pre-commit"
echo " ✓ .git/hooks/pre-commit installed (Quality Gate: Tests + Docs)"