diff --git a/.omc/project-memory.json b/.omc/project-memory.json index bde48d8..f762367 100644 --- a/.omc/project-memory.json +++ b/.omc/project-memory.json @@ -1,6 +1,6 @@ { "version": "1.0.0", - "lastScanned": 1777897422303, + "lastScanned": 1778506113057, "projectRoot": "/home/galadriel/Documents/Cline/risus-cli", "techStack": { "languages": [ @@ -30,7 +30,7 @@ }, "build": { "buildCommand": null, - "testCommand": "pytest tests/unit -q 2>&1", + "testCommand": "pytest", "lintCommand": "ruff check", "devCommand": null, "scripts": {} @@ -55,20 +55,11 @@ }, "customNotes": [], "directoryMap": { - "__pycache__": { - "path": "__pycache__", - "purpose": null, - "fileCount": 1, - "lastAccessed": 1777897422278, - "keyFiles": [ - "risus.cpython-312.pyc" - ] - }, "build": { "path": "build", "purpose": "Build output", "fileCount": 3, - "lastAccessed": 1777897422295, + "lastAccessed": 1778506113053, "keyFiles": [ "README.md", "entitlements.plist", @@ -79,7 +70,7 @@ "path": "client", "purpose": null, "fileCount": 4, - "lastAccessed": 1777897422300, + "lastAccessed": 1778506113054, "keyFiles": [ "__init__.py", "config.py", @@ -87,20 +78,11 @@ "ws_client.py" ] }, - "dist": { - "path": "dist", - "purpose": "Distribution/build output", - "fileCount": 1, - "lastAccessed": 1777897422301, - "keyFiles": [ - "risus" - ] - }, "docker": { "path": "docker", "purpose": null, "fileCount": 1, - "lastAccessed": 1777897422301, + "lastAccessed": 1778506113055, "keyFiles": [ "server.Dockerfile" ] @@ -109,27 +91,14 @@ "path": "docs", "purpose": "Documentation", "fileCount": 0, - "lastAccessed": 1777897422301, + "lastAccessed": 1778506113055, "keyFiles": [] }, - "risus_cli.egg-info": { - "path": "risus_cli.egg-info", - "purpose": null, - "fileCount": 5, - "lastAccessed": 1777897422301, - "keyFiles": [ - "PKG-INFO", - "SOURCES.txt", - "dependency_links.txt", - "requires.txt", - "top_level.txt" - ] - }, "server": { "path": "server", "purpose": null, "fileCount": 9, - "lastAccessed": 1777897422301, + "lastAccessed": 1778506113055, "keyFiles": [ "__init__.py", "app.py", @@ -142,14 +111,14 @@ "path": "specs", "purpose": null, "fileCount": 0, - "lastAccessed": 1777897422302, + "lastAccessed": 1778506113055, "keyFiles": [] }, "tests": { "path": "tests", "purpose": "Test files", "fileCount": 1, - "lastAccessed": 1777897422302, + "lastAccessed": 1778506113056, "keyFiles": [ "__init__.py" ] diff --git a/CLAUDE.md b/CLAUDE.md index 2a45701..28f11ba 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,3 +19,51 @@ For additional context about technologies to be used, project structure, shell commands, and other important information, read the current plan at `specs/007-client-screen-sync/plan.md`. + + + +## Beads Issue Tracker + +This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands. + +### Quick Reference + +```bash +bd ready # Find available work +bd show # View issue details +bd update --claim # Claim work +bd close # Complete work +``` + +### Rules + +- Use `bd` for ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists +- Run `bd prime` for detailed command reference and session close protocol +- Use `bd remember` for persistent knowledge — do NOT use MEMORY.md files + +## Session Completion + +**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds. + +**MANDATORY WORKFLOW:** + +1. **File issues for remaining work** - Create issues for anything that needs follow-up +2. **Run quality gates** (if code changed) - Tests, linters, builds +3. **Update issue status** - Close finished work, update in-progress items +4. **PUSH TO REMOTE** - This is MANDATORY: + ```bash + git pull --rebase + bd dolt push + git push + git status # MUST show "up to date with origin" + ``` +5. **Clean up** - Clear stashes, prune remote branches +6. **Verify** - All changes committed AND pushed +7. **Hand off** - Provide context for next session + +**CRITICAL RULES:** +- Work is NOT complete until `git push` succeeds +- NEVER stop before pushing - that leaves work stranded locally +- NEVER say "ready to push when you are" - YOU must push +- If push fails, resolve and retry until it succeeds + diff --git a/beads-backup.jsonl b/beads-backup.jsonl new file mode 100644 index 0000000..9327ed9 --- /dev/null +++ b/beads-backup.jsonl @@ -0,0 +1,8 @@ +{"_type":"issue","id":"risus-cli-el-maestro-d0l","title":"Update risus-combat skill: Health Hausregel integrieren","description":"Kritisch: Skill trackt noch Wuerfel-Verluste (Standard Risus), aber Hausregel trennt Health von Cliches. State Block, Defeat-Bedingung, Team-Verluste muessen auf Health umgestellt werden. Malus-Schwellen fehlen. Zone-Bewegungsregeln fehlen.","status":"closed","priority":1,"issue_type":"task","assignee":"galadriel","owner":"galadriel@example.com","created_at":"2026-05-06T23:13:41Z","created_by":"galadriel","updated_at":"2026-05-11T13:05:33Z","started_at":"2026-05-06T23:15:06Z","closed_at":"2026-05-06T23:15:37Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"risus-cli-95u","title":"Roll dice for active cliche of a character","description":"As a player, I want to roll dice for the active cliche of a character so I can quickly report the dice throwing result to the game master. The roll should use the cliche's dice pool (number of dice equal to the cliche's rating).","status":"open","priority":2,"issue_type":"feature","owner":"galadriel@example.com","created_at":"2026-05-11T13:31:03Z","created_by":"galadriel","updated_at":"2026-05-11T13:31:03Z","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"risus-cli-o9l","title":"macOS release archive: executable only, no folder hierarchy","description":"The release archive for the macOS version shall only contain the executable without any folder hierarchy. Currently the archive may include nested directories; it should be a flat archive with just the binary.","status":"open","priority":2,"issue_type":"task","owner":"galadriel@example.com","created_at":"2026-05-11T13:29:52Z","created_by":"galadriel","updated_at":"2026-05-11T13:29:52Z","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"risus-cli-el-maestro-17o","title":"Update risus-coach skill: filename fix + ingestion + token optimization","description":"Probleme: (1) SR6E Dateiname falsch fehlt registriert. (2) Hausregeln.md nicht in Ingestion-Liste. (3) Rolle falsch als Game Master beschrieben. (4) Ingestion-Anweisung vage. (5) Keine Health-Hausregel im Quick-Reference. Ziel: Token-optimiert, präzise Instruktionen.","status":"closed","priority":2,"issue_type":"task","assignee":"galadriel","owner":"galadriel@example.com","created_at":"2026-05-06T23:13:35Z","created_by":"galadriel","updated_at":"2026-05-11T13:05:33Z","started_at":"2026-05-06T23:15:38Z","closed_at":"2026-05-06T23:15:56Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"risus-cli-10e","title":"Feature: Health Status tracking im Battle Tracker","description":"Der Battle Tracker soll Health Status separat von den Cliché-Würfeln tracken. Hintergrund: Hausregel vom 2026-05-06 trennt Health vom Cliché (Health = höchstes Cliché + 3). Health sinkt im Kampf, nicht das Cliché. Benötigt: (1) Health-Anzeige pro Charakter (aktuell / max), (2) Möglichkeit Health zu ändern (+ / - Buttons oder Eingabe), (3) Automatischer Malus-Hinweis bei Health \u003c= 4 (-1 Würfel) und \u003c= 2 (-2 Würfel).","status":"open","priority":2,"issue_type":"feature","owner":"galadriel@example.com","created_at":"2026-05-06T23:03:30Z","created_by":"galadriel","updated_at":"2026-05-11T13:06:15Z","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"risus-cli-6w5","title":"Bug: Save zeigt fehlerhaften Lock-Error trotz Erfolg","description":"Beim Speichern erscheint Fehlermeldung: 'Error: lock required — \\n locked by unlocked or unlocked'. Danach speichert das System trotzdem erfolgreich. Zwei Probleme: (1) '\\n' wird als Literal angezeigt statt als Zeilenumbruch — String-Formatierungsfehler. (2) Lock-Status-Text 'locked by unlocked or unlocked' ist sinnlos — vermutlich fehlerhafter Zustandsvergleich oder falsche Variable im Lock-Status-String.","notes":"Workaround: Neustart der App behebt das Problem temporär.","status":"closed","priority":2,"issue_type":"bug","owner":"galadriel@example.com","created_at":"2026-05-06T20:19:09Z","created_by":"galadriel","updated_at":"2026-05-11T16:03:25Z","closed_at":"2026-05-11T16:03:25Z","close_reason":"Unable to reproduce","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"risus-cli-glp","title":"Bug: Switch Cliche nur einmal verwendbar","description":"'Switch Cliche' kann nur einmal pro Session ausgeführt werden. Danach friert die Funktion ein. Neustart des Programms behebt das Problem temporär. Root cause unbekannt — vermutlich State wird nach erstem Switch nicht zurückgesetzt.","status":"closed","priority":2,"issue_type":"bug","owner":"galadriel@example.com","created_at":"2026-05-06T19:58:12Z","created_by":"galadriel","updated_at":"2026-05-11T16:03:26Z","closed_at":"2026-05-11T16:03:26Z","close_reason":"Unable to reproduce","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"risus-cli-el-maestro-dg3","title":"Update risus-session-summary skill: Duplikate entfernen + cleanup","description":"Git-Protokoll im Skill dupliziert AGENTS.md. Hausregeln-Referenz koennte direkter sein. Minor token-Optimierungen.","status":"closed","priority":3,"issue_type":"task","assignee":"galadriel","owner":"galadriel@example.com","created_at":"2026-05-06T23:13:42Z","created_by":"galadriel","updated_at":"2026-05-11T13:05:34Z","started_at":"2026-05-06T23:15:57Z","closed_at":"2026-05-06T23:16:34Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}