3 Commits

Author SHA1 Message Date
Donchitos
9ccc5440af Fix missing allowed-tools in /architecture-decision and /story-done (#36)
- Add Edit to architecture-decision allowed-tools (retrofit mode and
  registry append both call Edit on existing files — was throwing a
  permission error on every /architecture-decision retrofit run)
- Add Write to story-done allowed-tools (Phase 7 creates active.md on
  first run — was silently failing and losing completion notes)

Fixes #33. Bug found and fix branches prepared by @xiaolai via NLPM audit.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 14:28:26 +10:00
Donchitos
666e0fcb5a Fix log-agent hooks reading wrong field — audit trail always logged "unknown" (#21)
Both SubagentStart/SubagentStop hooks were extracting `.agent_name` from the
hook payload, but Claude Code emits the agent name in `agent_type`. This caused
every audit log entry to fall through to the "unknown" fallback, making the
entire agent audit trail useless.

Fix: swap `.agent_name` -> `.agent_type` in both the jq path and the grep/sed
fallback for systems without jq. Log output format is unchanged so existing
audit logs remain valid.

Bug reported and fix authored by @bobloy in issue #20:
https://github.com/Donchitos/Claude-Code-Game-Studios/issues/20

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:28:38 +10:00
Donchitos
dd2769a580 Update FUNDING.yml: GitHub Sponsors + Buy Me a Coffee (remove ko-fi) 2026-04-07 18:03:00 +10:00
5 changed files with 21 additions and 12 deletions

View File

@@ -2,16 +2,21 @@
# Claude Code SubagentStop hook: Log agent completion for audit trail # Claude Code SubagentStop hook: Log agent completion for audit trail
# Tracks when agents finish and their outcome # Tracks when agents finish and their outcome
# #
# Input schema (SubagentStop): # Input schema (SubagentStop) — per Claude Code hooks reference:
# { "agent_id": "agent-abc123", "agent_name": "game-designer", ... } # { "session_id": "...", "agent_id": "agent-abc123", "agent_type": "Explore",
# "agent_transcript_path": "...", "last_assistant_message": "...", ... }
#
# The agent name is in `agent_type`, NOT `agent_name`. Reading `.agent_name`
# returns null on every invocation, so the fallback "unknown" is always used
# and the audit trail captures nothing useful.
INPUT=$(cat) INPUT=$(cat)
# Parse agent name -- use jq if available, fall back to grep # Parse agent name -- use jq if available, fall back to grep
if command -v jq >/dev/null 2>&1; then if command -v jq >/dev/null 2>&1; then
AGENT_NAME=$(echo "$INPUT" | jq -r '.agent_name // "unknown"' 2>/dev/null) AGENT_NAME=$(echo "$INPUT" | jq -r '.agent_type // "unknown"' 2>/dev/null)
else else
AGENT_NAME=$(echo "$INPUT" | grep -oE '"agent_name"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/"agent_name"[[:space:]]*:[[:space:]]*"//;s/"$//') AGENT_NAME=$(echo "$INPUT" | grep -oE '"agent_type"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/"agent_type"[[:space:]]*:[[:space:]]*"//;s/"$//')
[ -z "$AGENT_NAME" ] && AGENT_NAME="unknown" [ -z "$AGENT_NAME" ] && AGENT_NAME="unknown"
fi fi

View File

@@ -2,16 +2,20 @@
# Claude Code SubagentStart hook: Log agent invocations for audit trail # Claude Code SubagentStart hook: Log agent invocations for audit trail
# Tracks which agents are being used and when # Tracks which agents are being used and when
# #
# Input schema (SubagentStart): # Input schema (SubagentStart) — per Claude Code hooks reference:
# { "agent_id": "agent-abc123", "agent_name": "game-designer", ... } # { "session_id": "...", "agent_id": "agent-abc123", "agent_type": "Explore", ... }
#
# The agent name is in `agent_type`, NOT `agent_name`. Reading `.agent_name`
# returns null on every invocation, so the fallback "unknown" is always used
# and the audit trail captures nothing useful.
INPUT=$(cat) INPUT=$(cat)
# Parse agent name -- use jq if available, fall back to grep # Parse agent name -- use jq if available, fall back to grep
if command -v jq >/dev/null 2>&1; then if command -v jq >/dev/null 2>&1; then
AGENT_NAME=$(echo "$INPUT" | jq -r '.agent_name // "unknown"' 2>/dev/null) AGENT_NAME=$(echo "$INPUT" | jq -r '.agent_type // "unknown"' 2>/dev/null)
else else
AGENT_NAME=$(echo "$INPUT" | grep -oE '"agent_name"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/"agent_name"[[:space:]]*:[[:space:]]*"//;s/"$//') AGENT_NAME=$(echo "$INPUT" | grep -oE '"agent_type"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/"agent_type"[[:space:]]*:[[:space:]]*"//;s/"$//')
[ -z "$AGENT_NAME" ] && AGENT_NAME="unknown" [ -z "$AGENT_NAME" ] && AGENT_NAME="unknown"
fi fi

View File

@@ -3,7 +3,7 @@ name: architecture-decision
description: "Creates an Architecture Decision Record (ADR) documenting a significant technical decision, its context, alternatives considered, and consequences. Every major technical choice should have an ADR." description: "Creates an Architecture Decision Record (ADR) documenting a significant technical decision, its context, alternatives considered, and consequences. Every major technical choice should have an ADR."
argument-hint: "[title] [--review full|lean|solo]" argument-hint: "[title] [--review full|lean|solo]"
user-invocable: true user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Task, AskUserQuestion allowed-tools: Read, Glob, Grep, Write, Edit, Task, AskUserQuestion
--- ---
When this skill is invoked: When this skill is invoked:

View File

@@ -3,7 +3,7 @@ name: story-done
description: "End-of-story completion review. Reads the story file, verifies each acceptance criterion against the implementation, checks for GDD/ADR deviations, prompts code review, updates story status to Complete, and surfaces the next ready story from the sprint." description: "End-of-story completion review. Reads the story file, verifies each acceptance criterion against the implementation, checks for GDD/ADR deviations, prompts code review, updates story status to Complete, and surfaces the next ready story from the sprint."
argument-hint: "[story-file-path] [--review full|lean|solo]" argument-hint: "[story-file-path] [--review full|lean|solo]"
user-invocable: true user-invocable: true
allowed-tools: Read, Glob, Grep, Bash, Edit, AskUserQuestion, Task allowed-tools: Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion, Task
--- ---
# Story Done # Story Done

4
.github/FUNDING.yml vendored
View File

@@ -1,2 +1,2 @@
ko_fi: donchitos github: Donchitos
# github: Donchitos # Uncomment once GitHub Sponsors is approved buy_me_a_coffee: donchitos3