5 Commits

Author SHA1 Message Date
Donchitos
a1697d670e Fix: session-start preview shows most recent state instead of oldest (#43)
Replace head with tail so the quick summary surfaces the last 20 lines
of active.md — where all skills append their session extracts — rather
than the first 20 lines which grow stale as the file accumulates history.

Fixes #39

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 20:47:53 +10:00
Donchitos
9a4243b373 Fix: rg --type gdscript is invalid — use --glob *.gd instead (#42)
* Fix: document that rg --type gdscript is invalid, use --glob *.gd instead

Closes #37. ripgrep has no gdscript type — *.gd files are registered under
the gap type (GAP programming language). Using --type gdscript produces a
hard error, silently preventing any search from executing.

Added explicit warnings in two places:
- .claude/agents/godot-gdscript-specialist.md: new Tooling section with
  the correct Grep tool param (glob: "*.gd") and shell equivalent
- docs/engine-reference/godot/current-best-practices.md: new Tooling
  section agents read at version-check time

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix: propagate rg --glob *.gd tooling warning to all Godot agents

Closes the coverage gap identified in PR #42 review — the ripgrep
gdscript-type warning was only in godot-gdscript-specialist. Added
the same CRITICAL tooling section to godot-specialist,
godot-gdextension-specialist, godot-shader-specialist, and
godot-csharp-specialist so no Godot agent can silently misfire a search.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 20:40:23 +10:00
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
12 changed files with 79 additions and 14 deletions

View File

@@ -388,6 +388,16 @@ Do NOT rely on inline version claims in this file — they may be wrong. Always
When in doubt, prefer the API documented in the reference files over your training data. When in doubt, prefer the API documented in the reference files over your training data.
## Tooling — ripgrep File Filtering
**CRITICAL**: There is no `gdscript` type in ripgrep. `*.gd` files are registered
under the `gap` type (GAP programming language). Using `--type gdscript` or passing
`type: "gdscript"` to the Grep tool produces a hard error — the search never executes.
**Always use `glob: "*.gd"`** when filtering GDScript files:
- Grep tool: `glob: "*.gd"` ✓ | `type: "gdscript"`
- Shell/CI: `rg --glob "*.gd"` ✓ | `rg --type gdscript`
## Coordination ## Coordination
- Work with **godot-specialist** for overall Godot architecture and scene design - Work with **godot-specialist** for overall Godot architecture and scene design
- Work with **gameplay-programmer** for gameplay system implementation - Work with **gameplay-programmer** for gameplay system implementation

View File

@@ -298,6 +298,16 @@ that may affect native bindings.
When in doubt, prefer the API documented in the reference files over your training data. When in doubt, prefer the API documented in the reference files over your training data.
## Tooling — ripgrep File Filtering
**CRITICAL**: There is no `gdscript` type in ripgrep. `*.gd` files are registered
under the `gap` type (GAP programming language). Using `--type gdscript` or passing
`type: "gdscript"` to the Grep tool produces a hard error — the search never executes.
**Always use `glob: "*.gd"`** when filtering GDScript files:
- Grep tool: `glob: "*.gd"` ✓ | `type: "gdscript"` ✗
- Shell/CI: `rg --glob "*.gd"` ✓ | `rg --type gdscript` ✗
## Coordination ## Coordination
- Work with **godot-specialist** for overall Godot architecture - Work with **godot-specialist** for overall Godot architecture
- Work with **godot-gdscript-specialist** for GDScript/native boundary decisions - Work with **godot-gdscript-specialist** for GDScript/native boundary decisions

View File

@@ -254,6 +254,16 @@ for the full list.
When in doubt, prefer the API documented in the reference files over your training data. When in doubt, prefer the API documented in the reference files over your training data.
## Tooling — ripgrep File Filtering
**CRITICAL**: There is no `gdscript` type in ripgrep. `*.gd` files are registered
under the `gap` type (GAP programming language). Using `--type gdscript` or passing
`type: "gdscript"` to the Grep tool produces a hard error — the search never executes.
**Always use `glob: "*.gd"`** when filtering GDScript files:
- Grep tool: `glob: "*.gd"` ✓ | `type: "gdscript"` ✗
- Shell/CI: `rg --glob "*.gd"` ✓ | `rg --type gdscript` ✗
## Coordination ## Coordination
- Work with **godot-specialist** for overall Godot architecture - Work with **godot-specialist** for overall Godot architecture
- Work with **gameplay-programmer** for gameplay system implementation - Work with **gameplay-programmer** for gameplay system implementation

View File

@@ -246,6 +246,16 @@ stencil buffer (4.5), shader texture types changed from `Texture2D` to
When in doubt, prefer the API documented in the reference files over your training data. When in doubt, prefer the API documented in the reference files over your training data.
## Tooling — ripgrep File Filtering
**CRITICAL**: There is no `gdscript` type in ripgrep. `*.gd` files are registered
under the `gap` type (GAP programming language). Using `--type gdscript` or passing
`type: "gdscript"` to the Grep tool produces a hard error — the search never executes.
**Always use `glob: "*.gd"`** when filtering GDScript files:
- Grep tool: `glob: "*.gd"` ✓ | `type: "gdscript"` ✗
- Shell/CI: `rg --glob "*.gd"` ✓ | `rg --type gdscript` ✗
## Coordination ## Coordination
- Work with **godot-specialist** for overall Godot architecture - Work with **godot-specialist** for overall Godot architecture
- Work with **art-director** for visual direction and material standards - Work with **art-director** for visual direction and material standards

View File

@@ -173,6 +173,16 @@ introduced after May 2025, use WebSearch to verify it exists in the current vers
When in doubt, prefer the API documented in the reference files over your training data. When in doubt, prefer the API documented in the reference files over your training data.
## Tooling — ripgrep File Filtering
**CRITICAL**: There is no `gdscript` type in ripgrep. `*.gd` files are registered
under the `gap` type (GAP programming language). Using `--type gdscript` or passing
`type: "gdscript"` to the Grep tool produces a hard error — the search never executes.
**Always use `glob: "*.gd"`** when filtering GDScript files:
- Grep tool: `glob: "*.gd"` ✓ | `type: "gdscript"`
- Shell/CI: `rg --glob "*.gd"` ✓ | `rg --type gdscript`
## When Consulted ## When Consulted
Always involve this agent when: Always involve this agent when:
- Adding new autoloads or singletons - Adding new autoloads or singletons

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

@@ -62,8 +62,8 @@ if [ -f "$STATE_FILE" ]; then
echo "A previous session left state at: $STATE_FILE" echo "A previous session left state at: $STATE_FILE"
echo "Read this file to recover context and continue where you left off." echo "Read this file to recover context and continue where you left off."
echo "" echo ""
echo "Quick summary:" echo "Quick summary (last 20 lines):"
head -20 "$STATE_FILE" 2>/dev/null tail -20 "$STATE_FILE" 2>/dev/null
TOTAL_LINES=$(wc -l < "$STATE_FILE" 2>/dev/null) TOTAL_LINES=$(wc -l < "$STATE_FILE" 2>/dev/null)
if [ "$TOTAL_LINES" -gt 20 ]; then if [ "$TOTAL_LINES" -gt 20 ]; then
echo " ... ($TOTAL_LINES total lines — read the full file to continue)" echo " ... ($TOTAL_LINES total lines — read the full file to continue)"

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

View File

@@ -93,6 +93,12 @@ This supplements (not replaces) the agent's built-in knowledge.
- Live preview in Quick Open dialog when "Live Preview" enabled - Live preview in Quick Open dialog when "Live Preview" enabled
- New "Select Mode" (v key) prevents accidental transforms; old mode renamed "Transform Mode" (q key) - New "Select Mode" (v key) prevents accidental transforms; old mode renamed "Transform Mode" (q key)
## Tooling
- **ripgrep has no `gdscript` type**: `*.gd` is registered under `gap` (GAP programming language).
`rg --type gdscript` is a hard error — the search never executes.
Always use `rg --glob "*.gd"` (shell) or `glob: "*.gd"` (Grep tool) to filter GDScript files.
## Platform (4.5+) ## Platform (4.5+)
- **visionOS export**: First new platform since open-sourcing (windowed app mode) - **visionOS export**: First new platform since open-sourcing (windowed app mode)