diff --git a/.gitignore b/.gitignore index 311e89f..2d32098 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ REMEMBER.md TODO.md ROADMAP.md +*.local.md # Per-plugin session directories (plans, research, execution progress) plugins/*/.claude/ diff --git a/CLAUDE.md b/CLAUDE.md index 7c2417c..527f4ed 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,6 +8,7 @@ Open-source Claude Code plugin marketplace. Solo project by Kjell Tore Guttormse plugins/ ai-psychosis/ v1.0.0 — Interaction awareness (sycophancy, reinforcement loops) config-audit/ v3.1.0 — Configuration intelligence (health, opportunities, auto-fix, whats-active) + graceful-handoff/ v1.0.0 — Session handoff in <60s (NEXT-SESSION artifact + commit+push + copy-paste prompt) linkedin-thought-leadership/ v1.2.0 — LinkedIn content pipeline + analytics llm-security/ v6.0.0 — Security scanning, auditing, threat modeling ms-ai-architect/ v1.8.0 — Microsoft AI architecture (Cosmo Skyberg persona) diff --git a/README.md b/README.md index 0d8d6f9..7b83c78 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,26 @@ Research-informed thresholds. Alerts are progressive and never blocking. Privacy --- +### [Graceful Handoff](plugins/graceful-handoff/) `v1.0.0` + +Session handoff in under 60 seconds. Built for context-constrained models like Opus 4.7 where sessions fill fast. + +When you hit 60-70% context and have to start a new session, three things usually get rushed or forgotten: summarizing state, committing finished work, and writing a continuation prompt. `/graceful-handoff` does all three in one step. + +- **Auto-detect handoff type** — multi-session (active ultraplan project), plugin-work (inside a marketplace plugin), or single-task (fallback) +- **Writes `NEXT-SESSION-PROMPT.local.md`** — 7-section artifact (why, status, how to continue, push-policy, verification, gotchas) matching the established pattern in llm-security and config-audit +- **Auto-commit + push** — generates Conventional Commits message from `git diff --stat`, respects pre-commit hooks (secrets, pathguard), pushes to Forgejo. `--no-commit` skips +- **Copy-paste prompt for next session** — the critical output, always printed even if everything else fails +- **No subagents, no web** — entirely inline in the main session, under 60 seconds budget + +Key command: `/graceful-handoff [topic-slug] [--no-commit] [--dry-run]` + +1 command · 0 hooks · 0 agents · declarative markdown + +→ [Full documentation](plugins/graceful-handoff/README.md) + +--- + ### [MS AI Architect — Azure AI and Microsoft Foundry](plugins/ms-ai-architect/) `v1.8.0` `🇳🇴 Norwegian` Microsoft AI solution architecture guidance for Norwegian public sector and enterprise. diff --git a/plugins/graceful-handoff/.claude-plugin/plugin.json b/plugins/graceful-handoff/.claude-plugin/plugin.json new file mode 100644 index 0000000..632d90b --- /dev/null +++ b/plugins/graceful-handoff/.claude-plugin/plugin.json @@ -0,0 +1,19 @@ +{ + "name": "graceful-handoff", + "version": "1.0.0", + "description": "Produce session-handoff artifacts, commit and push pending work, and print a copy-paste prompt for the next session. Designed for context-constrained models like Opus 4.7 where sessions fill fast.", + "author": { + "name": "Kjell Tore Guttormsen" + }, + "auto_discover": true, + "license": "MIT", + "repository": "https://git.fromaitochitta.com/open/ktg-plugin-marketplace", + "keywords": [ + "session", + "handoff", + "context-management", + "opus-4.7", + "git", + "workflow" + ] +} diff --git a/plugins/graceful-handoff/CHANGELOG.md b/plugins/graceful-handoff/CHANGELOG.md new file mode 100644 index 0000000..94e48d5 --- /dev/null +++ b/plugins/graceful-handoff/CHANGELOG.md @@ -0,0 +1,24 @@ +# Changelog + +All notable changes to graceful-handoff are documented here. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). + +## [1.0.0] - 2026-04-19 + +### Added + +- Initial release with single command `/graceful-handoff` +- 6-fase deklarativ workflow: detect → classify → write artifact → update REMEMBER/TODO → commit+push → print copy-paste-prompt +- Tre handoff-typer: `multi-sesjon` (ultraplan-prosjekt), `plugin-arbeid` (marketplace-plugin), `enkelt-oppgave` (fallback) +- Default filnavn `NEXT-SESSION-PROMPT.local.md`; slug-override via første posisjons-argument +- Flag: `--no-commit` (skip git), `--dry-run` (ingen skriving, ingen git-ops) +- Auto-generert Conventional Commits-melding fra `git diff --stat` +- Respekterer pre-commit hooks (secrets, pathguard) — bypasser aldri +- Tidsbudsjett < 60 sekunder; ingen Agent-delegering, ingen WebSearch +- 7-seksjons-template for NEXT-SESSION-artefakt (matcher eksisterende konvensjon i llm-security/config-audit) + +### Notes + +- Auto-discover plugin — `marketplace.json`-oppføring ikke nødvendig +- MIT-lisens diff --git a/plugins/graceful-handoff/CLAUDE.md b/plugins/graceful-handoff/CLAUDE.md new file mode 100644 index 0000000..db24279 --- /dev/null +++ b/plugins/graceful-handoff/CLAUDE.md @@ -0,0 +1,40 @@ +# graceful-handoff + +Én kommando (`/graceful-handoff`) som produserer en komplett sesjonsoverlevering i ett steg: NEXT-SESSION-artefakt, commit+push, og copy-paste-prompt for neste sesjon. + +## Når brukes den + +Når du nærmer deg kontekst-trøskelen (typisk 60-70% på Opus 4.7) og må starte en ny sesjon. Kommandoen tar jobben med å oppsummere state og pushe ferdig arbeid fra minutter ned til sekunder. + +## Hva den skriver + +| Fil | Når | +|-----|-----| +| `NEXT-SESSION-PROMPT.local.md` (eller `NEXT-SESSION-.local.md`) | Alltid — hovedartefakt med 7 seksjoner (Hvorfor / Status / Fortsett / Push-policy / Verifisering / Husk) | +| `REMEMBER.md` | Hvis den finnes — oppdaterer "Sist oppdatert" og PÅGÅENDE-seksjon | +| `TODO.md` | Hvis den finnes — flytter ferdige items, legger til neste-økt-items | +| Commit + push | Hvis ucommittede endringer finnes OG `--no-commit` ikke er gitt | + +Alle handoff-filer er `*.local.md`-mønster → gitignored, ikke sporet i git. + +## Arkitektur + +Helt deklarativ — ingen hooks, ingen agents, ingen subprocess. Main-sesjonen utfører alle seks faser inline med Bash + Read/Write/Edit: + +1. Detekter arbeidsmappe og prosjekt (pwd, git, find) +2. Identifiser handoff-type (multi-sesjon / plugin-arbeid / enkelt-oppgave) +3. Skriv NEXT-SESSION-artefakt til riktig lokasjon +4. Oppdater REMEMBER.md og TODO.md +5. Commit + push med Conventional Commits-melding (auto-generert) +6. Print copy-paste-prompt til terminal + +## Tidsbudsjett + +< 60 sekunder totalt. Ingen Agent-delegering, ingen WebSearch. Hvis den drar ut: bruker er allerede på kontekst-trøskelen og trenger output raskt. + +## Begrensninger (v1.0.0) + +- Ingen auto-invokasjon ved kontekst-terskel — bruker triggrer manuelt +- Ingen backup av eksisterende NEXT-SESSION-filer (overskrives, men merger fra innhold) +- Ingen integrasjon mot ultraplan-local progress.json (lesing, ikke skriving) +- Commit-meldingen er auto-generert uten bekreftelse — bruk `--no-commit` hvis du vil håndtere commit manuelt diff --git a/plugins/graceful-handoff/LICENSE b/plugins/graceful-handoff/LICENSE new file mode 100644 index 0000000..1105208 --- /dev/null +++ b/plugins/graceful-handoff/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Kjell Tore Guttormsen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/graceful-handoff/README.md b/plugins/graceful-handoff/README.md new file mode 100644 index 0000000..0c70424 --- /dev/null +++ b/plugins/graceful-handoff/README.md @@ -0,0 +1,221 @@ +# graceful-handoff + +> Sesjonsoverlevering på under 60 sekunder. Designet for Opus 4.7-sesjoner som fyller kontekst raskt. + +**Problemet:** Opus 4.7 fyller kontekstvinduet mye raskere enn 4.6 — ofte innen ~5 minutter for reelt arbeid. Når du er på 60-70% og må starte ny sesjon, er det tre manuelle steg som blir hastverk eller glemt: + +1. Oppsummere hvor arbeidet står (commits, lokale endringer, hva som er testet) +2. Commite og pushe ferdig arbeid (ellers tapes det) +3. Skrive en copy-paste-prompt som lar neste sesjon fortsette uten tap + +`/graceful-handoff` gjør alle tre, automatisk, i ett steg. + +## Installasjon + +```bash +claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git +# Deretter /plugin install graceful-handoff +``` + +## Bruk + +Minimum: + +``` +/graceful-handoff +``` + +Med slug (hvis du har flere handoffs i samme mappe): + +``` +/graceful-handoff refactor-auth +``` + +Uten auto-commit: + +``` +/graceful-handoff --no-commit +``` + +Dry-run (se hva som ville skjedd): + +``` +/graceful-handoff --dry-run +``` + +## Hvordan den fungerer + +Kommandoen utfører 6 faser inline i main-sesjonen (ingen Agent-delegering, ingen WebSearch — alt må skje raskt): + +### 1. Detekter arbeidsmappe + +```bash +pwd +git status --porcelain +git log --oneline -10 +# Let oppover etter .claude-plugin/plugin.json +# Let etter .claude/projects/*/brief.md + progress.json +``` + +### 2. Identifiser handoff-type + +| Type | Når | +|------|-----| +| `multi-sesjon` | Aktivt ultraplan-prosjekt finnes (progress.json status ≠ "completed") | +| `plugin-arbeid` | Inne i en marketplace-plugin (`.claude-plugin/plugin.json` finnes oppover i tre) | +| `enkelt-oppgave` | Ingen av over | + +### 3. Skriv NEXT-SESSION-artefakt + +Standardfilnavn: `NEXT-SESSION-PROMPT.local.md`. Med slug: `NEXT-SESSION-.local.md`. + +Lokasjon: +- `multi-sesjon` → i prosjektmappen +- `plugin-arbeid` → i plugin-root +- `enkelt-oppgave` → i cwd + +Innhold (7 seksjoner — samme struktur som `NEXT-SESSION-PROMPT.local.md` i llm-security/config-audit): + +```markdown +# NEXT-SESSION-PROMPT — + +## Hvorfor dette eksisterer +... + +## Status ved sesjonshåndoff +### ✅ Ferdig +### ⏳ Ikke startet / delvis +### ⚠️ Brutt / kjent risiko + +## Slik fortsetter du +... + +## Push-policy +... + +## Verifiseringskommandoer +... + +## Husk +... +``` + +### 4. Oppdater REMEMBER.md og TODO.md + +Kun hvis filene finnes (opprettes ikke i random mapper). Flytter ferdige items, oppdaterer datoer. + +### 5. Commit + push + +Skip hvis `--no-commit`, `--dry-run`, eller `git status --porcelain` er tom. + +Auto-genererer Conventional Commits-melding basert på endrede filer: + +| Filmønster | Type | +|------------|------| +| `tests/**` | `test` | +| `*.md`, `README`, `CHANGELOG` | `docs` | +| Ny funksjon i `hooks/`, `scanners/` | `feat` | +| Bugfix | `fix` | +| Config, lockfile | `chore` | + +Scope: plugin-navn hvis alle endringer er i én plugin. + +Viser meldingen til bruker før commit. Pusher til `origin `. + +Pre-commit hooks (secrets, pathguard) respekteres — hvis de blokkerer, stopper kommandoen og rapporterer uten bypass. + +### 6. Print copy-paste-prompt + +Kompakt blokk til terminal som bruker kopierer direkte til ny Claude-sesjon: + +``` +═════════════════════════════════════════════ +NESTE SESJON — copy-paste til ny Claude: +═════════════════════════════════════════════ + +cd /Users/.../plugins/llm-security +cat NEXT-SESSION-PROMPT.local.md +git log --oneline -5 +git status + +Fortsett fra Commit 2 (entropy-scanner kontekst-suppression). +═════════════════════════════════════════════ +``` + +## Argumenter + +| Argument | Beskrivelse | +|----------|-------------| +| `[topic-slug]` | Kebab-case slug. Med slug: `NEXT-SESSION-.local.md`. Uten: `NEXT-SESSION-PROMPT.local.md` | +| `--no-commit` | Hopp over commit+push. Bruker håndterer commit manuelt | +| `--dry-run` | Ingen filer skrives, ingen git-operasjoner. Print kun hva som ville skjedd | + +## Eksempler + +**Plugin-arbeid:** + +``` +cd plugins/llm-security +# ... arbeid ... +/graceful-handoff +# → skriver plugins/llm-security/NEXT-SESSION-PROMPT.local.md +# → oppdaterer plugins/llm-security/REMEMBER.md + TODO.md +# → committer + pusher +# → printer copy-paste-prompt +``` + +**Multi-sesjon (ultraplan-prosjekt):** + +``` +cd prosjekt-med-.claude/projects/2026-04-18-foo/ +/graceful-handoff +# → skriver .claude/projects/2026-04-18-foo/NEXT-SESSION-PROMPT.local.md +# → (REMEMBER/TODO kun hvis de finnes i prosjektmappen) +# → committer + pusher +``` + +**Flere parallelle handoffs:** + +``` +/graceful-handoff api-migration +/graceful-handoff token-refresh +# → to filer: NEXT-SESSION-api-migration.local.md + NEXT-SESSION-token-refresh.local.md +``` + +**Bare artefakt, ingen git:** + +``` +/graceful-handoff --no-commit +# → skriver artefakt + REMEMBER/TODO +# → git status viser fortsatt uncommittede endringer +``` + +**Forhåndssjekk:** + +``` +/graceful-handoff --dry-run +# → printer planlagt artefakt, foreslått commit-melding, copy-paste-prompt +# → skriver ingenting, gjør ingen git-operasjoner +``` + +## Tidsbudsjett + +< 60 sekunder totalt. Hvis den drar ut: lag en minimal handoff med det du har, og noter det som ufullstendig. Aldri Agent-delegering eller WebSearch — main-sesjonen er raskere. + +## Begrensninger (v1.0.0) + +- Ingen auto-invokasjon ved kontekst-terskel — bruker triggrer manuelt. Vurderes i v1.1 +- Commit-meldingen er auto-generert uten Y/n-bekreftelse. Hvis kvalitet blir et problem: rapporter, vurderer "vis og bekreft" i v1.1 +- Overskriver eksisterende NEXT-SESSION-fil (merger fra innhold, men ikke fra diff). Sikkerhetskopi-mønster vurderes +- Ingen integrasjon mot `.claude/projects/*/progress.json` utover lesing + +## Sikkerhet + +- Respekterer alle pre-commit hooks (secrets-scanning, pathguard). Bypasser ALDRI +- Filer er `*.local.md` → matches av `*.local.md` i global/prosjekt-gitignore +- Ingen nettverks-kall, ingen eksterne avhengigheter +- Krever kun `allowed-tools: Read, Write, Edit, Bash, Glob` + +## Lisens + +MIT diff --git a/plugins/graceful-handoff/commands/graceful-handoff.md b/plugins/graceful-handoff/commands/graceful-handoff.md new file mode 100644 index 0000000..6d77709 --- /dev/null +++ b/plugins/graceful-handoff/commands/graceful-handoff.md @@ -0,0 +1,329 @@ +--- +name: graceful-handoff +description: Produser handoff-artefakt, commit+push, og copy-paste-prompt for neste sesjon. Bruk når du nærmer deg 60-70% kontekst og må fortsette arbeidet i en ny sesjon uten tap. +argument-hint: "[topic-slug] [--no-commit] [--dry-run]" +allowed-tools: Read, Write, Edit, Bash, Glob +--- + +# Graceful Handoff — sesjonsoverlevering + +Produser en komplett handoff-pakke i ett steg: analyser state, skriv NEXT-SESSION-artefakt, oppdater REMEMBER/TODO, commit+push hvis mulig, og print en copy-paste-prompt for neste sesjon. + +**Tidsbudsjett:** Hele kjøringen (fase 1-6) skal ligge under 60 sekunder reell tid. Bruker er typisk på 60-70% kontekst når de trigger dette — ikke bruk Agent-delegering eller WebSearch. + +## Argumenter + +| Argument | Effekt | +|----------|--------| +| `[topic-slug]` | Kebab-case slug som styrer filnavnet. Default: `NEXT-SESSION-PROMPT.local.md`. Med slug: `NEXT-SESSION-.local.md` | +| `--no-commit` | Hopp over fase 5 (commit+push). Bruker håndterer commit manuelt | +| `--dry-run` | Ikke skriv filer eller gjør git-operasjoner. Print kun hva som ville skjedd | + +Parse argumenter fra `$ARGUMENTS` (kombinert streng). Støtt flag i vilkårlig rekkefølge. Første ikke-flag-token er slug. + +--- + +## Fase 1 — Detekter arbeidsmappe og aktivt prosjekt + +Kjør i parallell (én Bash-melding med flere tool calls): + +```bash +pwd +git rev-parse --show-toplevel 2>/dev/null +git status --porcelain +git log --oneline -10 +git branch --show-current +``` + +Let oppover i tre etter plugin-markør (maks 5 nivåer): + +```bash +# Fra cwd og oppover, stopp på første treff +cur="$(pwd)" +for i in 1 2 3 4 5; do + if [ -f "$cur/.claude-plugin/plugin.json" ]; then + echo "PLUGIN_ROOT=$cur" + break + fi + cur="$(dirname "$cur")" + [ "$cur" = "/" ] && break +done +``` + +Finn ultraplan-prosjekt (nyeste først): + +```bash +find . -maxdepth 4 -path '*/.claude/projects/*/brief.md' 2>/dev/null | sort -r | head -3 +find . -maxdepth 4 -path '*/.claude/projects/*/progress.json' 2>/dev/null | sort -r | head -3 +``` + +For hver progress.json-treff: kjør `jq -r '.status' ` for å se om prosjektet er aktivt. + +## Fase 2 — Identifiser handoff-type + +Prioritet: **multi-sesjon > plugin-arbeid > enkelt-oppgave** + +| Type | Betingelse | +|------|------------| +| `multi-sesjon` | Finnes `.claude/projects//progress.json` med `status != "completed"` OG `status != null`. Eller: finnes `.claude/projects//plan.md` uten progress.json | +| `plugin-arbeid` | Fase 1 fant `PLUGIN_ROOT` OG ingen aktiv multi-sesjon | +| `enkelt-oppgave` | Ingen av over | + +Lagre i intern state: `HANDOFF_TYPE`, `PROJECT_DIR` (hvis multi-sesjon), `PLUGIN_ROOT` (hvis plugin-arbeid), `WRITE_DIR` (hvor artefakten skal skrives). + +Write-dir-logikk: +- `multi-sesjon` → `WRITE_DIR = ` +- `plugin-arbeid` → `WRITE_DIR = ` +- `enkelt-oppgave` → `WRITE_DIR = $(pwd)` + +Rapporter til bruker i en kort linje: + +``` +Handoff-type: plugin-arbeid (llm-security). Skriver til /Users/ktg/.../plugins/llm-security/ +``` + +Hvis overlapp eksisterer (f.eks. plugin-arbeid innenfor et aktivt ultraplan-prosjekt): rapporter begge, men velg multi-sesjon som primær. + +## Fase 3 — Skriv/oppdater NEXT-SESSION-artefakt + +Filnavn: +- Hvis `[topic-slug]` gitt: `NEXT-SESSION-.local.md` +- Ellers: `NEXT-SESSION-PROMPT.local.md` + +Full sti: `/`. + +**Hvis filen finnes**: les den først, bevar "Hvorfor dette eksisterer"-seksjonen hvis den er relevant, oppdater status-seksjoner med dagens dato og aktuell state. + +**Template** (samme 7-seksjons-struktur som llm-security/config-audit bruker): + +```markdown +# NEXT-SESSION-PROMPT — + +## Hvorfor dette eksisterer + +<1-3 setninger om hva bruker jobber med og hvorfor denne sesjonen stoppet. Hent fra: siste commits, brief.md hvis multi-sesjon, git diff, samtale-kontekst. Vær konkret — ingen fluff.> + +## Status ved sesjonshåndoff + +### ✅ Ferdig + + + +### ⏳ Ikke startet / delvis + + + +### ⚠️ Brutt / kjent risiko + + + +## Slik fortsetter du + +1. `cd ` +2. `cat ` — les denne filen igjen +3. `git log --oneline -5` og `git status` +<4. (hvis multi-sesjon) Les planen: `cat .claude/projects//plan.md`> +<5. Start med: > + +## Push-policy + +- Direkte push til `main` på Forgejo er pre-autorisert (ikke spør om tillatelse) +- Aldri GitHub — kun Forgejo (`git.fromaitochitta.com`) + + +## Verifiseringskommandoer + +```bash + +git status # forventet: clean (eller uncommittede) +node --test tests/ # forventet: alle grønne +> +``` + +## Husk + +- +``` + +**Innholdsregler:** +- Ikke fyll inn plassholdere med placeholder-tekst. Les faktisk git-state, samtalekontekst, og evt. brief.md/plan.md for å fylle inn ekte info. +- Hvis en seksjon er irrelevant (f.eks. ingen push-policy avvik): skriv én setning som sier det, ikke utelat seksjonen (strukturen må være konsistent). +- Tone: nøktern, norsk, teknisk. Ingen "gøy å jobbe med deg" eller "vi har kommet langt". Hvis brukeren var sint eller frustrert: nevn det kort i "Husk" slik at neste sesjon ikke trår i samme fellen. + +Hvis `--dry-run`: print artefakten til stdout i stedet for å skrive. + +## Fase 4 — Oppdater REMEMBER.md og TODO.md + +**Lokasjon:** +- `plugin-arbeid` → `/REMEMBER.md` og `/TODO.md` +- `multi-sesjon` → `/REMEMBER.md` og `/TODO.md` (hvis de finnes; ellers skip — ultraplan-prosjekter har ikke alltid disse) +- `enkelt-oppgave` → `$(pwd)/REMEMBER.md` og `$(pwd)/TODO.md` (kun hvis de allerede finnes; ikke opprett nye i random mapper) + +**REMEMBER.md-oppdatering:** + +Hvis filen finnes — les, oppdater: +- Øverst: `## Sist oppdatert\n` (absolutt dato, ikke "i dag") +- "PÅGÅENDE"-seksjon (eller lag den): plan-sti hvis relevant, 3-5 status-bullets (✅ ferdig, ⏳ pågående, ⚠️ blokkert) +- Flytt tidligere "PÅGÅENDE" til "TIDLIGERE" med datostempel hvis den peker på annet arbeid + +Hvis filen ikke finnes og type er `plugin-arbeid`: opprett minimal REMEMBER.md med dagens dato og én PÅGÅENDE-bullet. Ellers skip. + +**TODO.md-oppdatering:** + +Hvis filen finnes — les, oppdater: +- Flytt items som ble gjort denne sesjonen til en "✅ Ferdig denne sesjonen (YYYY-MM-DD)"-seksjon øverst +- Legg til items for neste sesjon under "⏳ Neste" +- Ikke slett — kommenter ut eller flytt + +Hvis filen ikke finnes: skip (ikke push onboarding i en handoff). + +**Gitignore-verifisering:** Etter skriving, kjør `git check-ignore -v ` for hver fil. Hvis filen IKKE er ignorert: rapporter til bruker som advarsel (ikke blokker, men bruker må vite). + +Hvis `--dry-run`: print diff i stedet for å skrive. + +## Fase 5 — Commit + push hvis ucommittet arbeid finnes + +Skip hele fasen hvis `--no-commit` eller `--dry-run`. + +Skip hvis `git status --porcelain` er tom (ingenting å commite). + +**Steg 5a — Klassifiser endringer:** + +```bash +git diff --stat +git diff --cached --stat +git status --porcelain +``` + +Kategoriser endrede filer for å utlede commit-type: + +| Filmønster | Type | +|------------|------| +| `tests/**`, `**/*.test.*` | `test` | +| `*.md`, `README`, `CHANGELOG`, `CLAUDE.md` (kun docs-endring) | `docs` | +| `plugins//hooks/**`, `plugins//scanners/**` (ny funksjon) | `feat` | +| Samme mønster, men fikser eksisterende atferd | `fix` | +| `package.json`, config, lockfile kun | `chore` | +| Blandet | Bruk dominerende kategori; hvis uklart, `chore` | + +Scope: plugin-navn hvis `plugin-arbeid` eller hvis alle endringer er i én plugin. Ellers ingen scope. + +**Steg 5b — Generer commit-melding:** + +Format: `(): ` (Conventional Commits). + +Krav: +- Første linje ≤ 72 tegn +- Beskrivelse på norsk eller engelsk (match eksisterende commits i repoet — sjekk `git log --oneline -10`) +- Beskriv **hva** som endres, ikke hvorfor (hvorfor hører hjemme i body hvis nødvendig) +- Hvis flere uavhengige endringer: vurder om de skal splittes i to commits. Hvis bruker er i hastverk (kontekst-trøskel): ett commit med samlet beskrivelse er akseptabelt, men noter at det er samlet i body. + +Eksempler (match stil fra eksisterende repo): +- `test(config-audit): add Opus 4.7 pattern fixtures` +- `fix(llm-security): complete conflict-project fixture for CNF cross-scope tests` +- `feat(graceful-handoff): initial plugin with /graceful-handoff command` + +Body (valgfri, bruk hvis commit dekker flere endringer): +``` +- Endring 1 +- Endring 2 + +Samlet som ett commit pga. graceful-handoff-flyt. +``` + +**Steg 5c — Vis meldingen og commit:** + +Print den genererte meldingen ordrett til bruker FØR commit: + +``` +Commit-melding: +--- +feat(graceful-handoff): initial plugin with /graceful-handoff command +--- +``` + +Deretter: + +```bash +git add -A # eller eksplisitt filvalg hvis endringene spenner flere uavhengige områder +git commit -m "$(cat <<'EOF' + +EOF +)" +``` + +Hvis commit feiler pga. pre-commit hook (secrets, pathguard, osv.): STOPP, rapporter feilmeldingen, **ikke** bypass med `--no-verify`. Be bruker håndtere manuelt. + +**Steg 5d — Push:** + +```bash +BRANCH="$(git branch --show-current)" +if [ -n "$BRANCH" ]; then + git push origin "$BRANCH" +else + git push origin HEAD +fi +``` + +Bekreft push med `git rev-parse @{u}` (at upstream er satt) eller hent siste output fra push-kommandoen. + +Hvis push feiler: rapporter, men ikke force-push. Bruker kan håndtere manuelt. + +## Fase 6 — Print copy-paste-prompt for neste sesjon + +Print en kompakt prompt til terminal som bruker kan kopiere direkte inn i ny Claude Code-sesjon: + +``` +════════════════════════════════════════════════════════════ +NESTE SESJON — copy-paste til ny Claude: +════════════════════════════════════════════════════════════ + +cd +cat +git log --oneline -5 +git status + +Fortsett fra . + +════════════════════════════════════════════════════════════ +Artefakt: +Commit: +Push: <"pushet til Forgejo" eller "skippet (flag / ingenting)"> +════════════════════════════════════════════════════════════ +``` + +Dette er den KRITISKE output-en — hvis alt annet feiler, må minst denne blokken nå bruker slik at de kan fortsette. Bruk én final assistant-tekst-melding til å printe dette. + +--- + +## Tidsbudsjett og escalation + +- Hele kommandoen: < 60 sekunder +- Hvis du oppdager at du trenger å lese >5 filer eller kjøre >3 Agent-delegeringer: stopp, skriv en minimal handoff med det du har, og noter i "Brutt/risiko" at handoff var ufullstendig. +- **Aldri Agent-delegering i denne kommandoen** — main-sesjonen er raskere enn å spinne opp en subagent for noe mekanisk som dette. +- **Aldri WebSearch** — ingen ekstern info trengs. + +## Fallback hvis state er helt uklart + +Hvis fase 1-2 ikke kan identifisere noen av de tre handoff-typene (f.eks. cwd er utenfor git, ingen plugin-markør, ingen ultraplan-prosjekt): + +1. Sett `HANDOFF_TYPE = enkelt-oppgave` +2. `WRITE_DIR = $(pwd)` +3. Varsle bruker: "Kunne ikke detektere handoff-type. Skriver til cwd." +4. Fortsett som vanlig — prompten er fremdeles nyttig