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.
## 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
- Work with **godot-specialist** for overall Godot architecture and scene design
- 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.
## 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
- Work with **godot-specialist** for overall Godot architecture
- 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.
## 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
- Work with **godot-specialist** for overall Godot architecture
- 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.
## 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
- Work with **godot-specialist** for overall Godot architecture
- 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.
## 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
Always involve this agent when:
- Adding new autoloads or singletons

View File

@@ -2,16 +2,21 @@
# Claude Code SubagentStop hook: Log agent completion for audit trail
# Tracks when agents finish and their outcome
#
# Input schema (SubagentStop):
# { "agent_id": "agent-abc123", "agent_name": "game-designer", ... }
# Input schema (SubagentStop) — per Claude Code hooks reference:
# { "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)
# Parse agent name -- use jq if available, fall back to grep
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
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"
fi

View File

@@ -2,16 +2,20 @@
# Claude Code SubagentStart hook: Log agent invocations for audit trail
# Tracks which agents are being used and when
#
# Input schema (SubagentStart):
# { "agent_id": "agent-abc123", "agent_name": "game-designer", ... }
# Input schema (SubagentStart) — per Claude Code hooks reference:
# { "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)
# Parse agent name -- use jq if available, fall back to grep
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
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"
fi

View File

@@ -62,8 +62,8 @@ if [ -f "$STATE_FILE" ]; then
echo "A previous session left state at: $STATE_FILE"
echo "Read this file to recover context and continue where you left off."
echo ""
echo "Quick summary:"
head -20 "$STATE_FILE" 2>/dev/null
echo "Quick summary (last 20 lines):"
tail -20 "$STATE_FILE" 2>/dev/null
TOTAL_LINES=$(wc -l < "$STATE_FILE" 2>/dev/null)
if [ "$TOTAL_LINES" -gt 20 ]; then
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."
argument-hint: "[title] [--review full|lean|solo]"
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:

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."
argument-hint: "[story-file-path] [--review full|lean|solo]"
user-invocable: true
allowed-tools: Read, Glob, Grep, Bash, Edit, AskUserQuestion, Task
allowed-tools: Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion, Task
---
# Story Done

4
.github/FUNDING.yml vendored
View File

@@ -1,2 +1,2 @@
ko_fi: donchitos
# github: Donchitos # Uncomment once GitHub Sponsors is approved
github: Donchitos
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
- 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+)
- **visionOS export**: First new platform since open-sourcing (windowed app mode)