Phillip Tarrant 1ae62fe0db feat(creation): distinguish granted skills as owned, and enlarge the small text
Two F6-review follow-ups from the human's read of the running screen.

1. GRANTED skill chips now read as 'you already have this', not 'unavailable'.
   The elf's granted `perception` shared SkillChip's dim `disabled` look with the
   'picks are spent' chips, so it read as blocked. Split out a fourth state,
   SkillChipGranted — a solid gold fill, cream text, and a ✓ prefix (owned) — while
   the pool-is-spent chips keep the plain dim disabled. Applied per-chip in _bind_skills.

2. Enlarged the small mono/body/prose roles for readability on sub-1920 laptops
   (the 1920 design canvas scales DOWN on a smaller screen, so 11-13px text got
   tiny): DM prose 20->22, MONO 13->14, section labels 13->14, card title 19->20,
   card body 13->14, chips 11->12, skill chips 12->14, the two flag pills +1. Big
   serif headings unchanged.

   Two layout consequences the guards caught and I fixed, not silenced:
   - Race cards overflowed the taller blurb -> card min-height 140->180 (the overflow
     guard, which measures against the card the engine does NOT derive from the text,
     went red first; traps.md #17).
   - The 9-chip Human bonus row, wider at the bigger font, blew the whole sheet past
     the viewport -> BonusRow HBoxContainer -> HFlowContainer so it wraps instead of
     forcing the sheet wide. Nothing depends on the row's type (tests check child
     count + visibility only).

319 client tests green (theme drift guard + overflow guard included); screenshot-
verified at 1280x720: granted chip owned, no clipping, bonus row wraps cleanly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 20:33:08 -05:00
2026-07-11 11:13:16 -05:00
2026-07-09 11:17:54 -05:00

coc-rpg

AI-driven single-player, party-based fantasy RPG. Godot 4 client, FastAPI proxy, AI as Dungeon Master.

Read CLAUDE.md first — project charter and working agreement. It is the source of truth. If code disagrees with it, the charter wins until the charter is changed.

The one rule

Code owns state. AI owns text. (charter §2)

Repo layout

/client        Godot 4.7 game client (GDScript) — ALL game state, ALL game rules
  /docs        Client-specific docs (scenes, input, combat wiring)
/api           FastAPI proxy — auth, metering, prompt routing, logging (charter §4)
  /docs        API-specific docs (endpoints, model routing, deploy)
  /prompts     Role prompts — source code, versioned, reviewed (charter §5, §16)
/content       Authored game data — quests, NPC knowledge lists, fallback text
  /quests      Story skeletons and quest definitions
  /npcs        Per-NPC knowledge lists (charter §6 — "the whole design")
  /fallback    Authored degraded-DM text for every AI surface (charter §13)
/docs          Cross-cutting docs — roadmap, ADRs, planning affecting both sides
  /adr         Architecture Decision Records

The three processes (charter §4)

client (GDScript)  ──HTTP──▶  api (FastAPI)  ──▶  Replicate / Ollama

The client holds no API key, ever. It knows one base URL and a set of role endpoints. It sends game state, receives text.

Description
No description provided
Readme 3.3 MiB
Languages
Text 100%