Author gritty, disposition-gated Margreave content (lore bible + hand-authored quest/item/location/origin JSON) that reconciles against existing canon before writing, holds the world's hard-by-default / warm-when-earned NPC tone, and keeps the content_build --check gate green. - SKILL.md: read-before-write workflow, read-only on existing canon (propose diffs, require approval), build+check+pytest as the done bar. - references/schema.md: full bible + JSON contract, secrecy scale, gate model. - references/tone.md: tone contract + NPC disposition-warmth model. - scripts/canon_index.py: dumps existing ids for reconciliation. - evals/: 3 test cases (all green in isolated-worktree runs). Un-ignore /.claude/skills/ so project skills are versioned like code; all other .claude/ dirs (root + nested api/client) stay ignored. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HuHRPE7VfppUJEaoGBEUqZ
47 lines
3.1 KiB
JSON
47 lines
3.1 KiB
JSON
{
|
|
"skill_name": "world-building",
|
|
"evals": [
|
|
{
|
|
"id": 1,
|
|
"name": "new-npc-reconciled",
|
|
"prompt": "Add a new NPC to Duncarrow: a tavern keeper on the north road who's cagey with strangers but opens up once you've earned it. Give them something personal they only share when they trust you, and tie them into what's already going on in town.",
|
|
"expected_output": "New npc.* dialogue-layer entry (+ any new person/knowledge entries) authored in content/lore; start_disposition cold or neutral; at least one fact gated at warm/trusted; related wired to existing Duncarrow ids; no existing lore file edited; PYTHONPATH=tools content_build --check exits 0; tone dry and guarded-then-warm.",
|
|
"assertions": [
|
|
"Created at least one new npc.* entry in content/lore with start_disposition of cold or neutral",
|
|
"The NPC's knows list gates a personal fact at warm or trusted (earned reveal)",
|
|
"New entry's related list references at least one pre-existing Duncarrow id",
|
|
"No pre-existing content/lore/*.md file was modified (or any edit was surfaced for approval, not silent)",
|
|
"python -m content_build --check exits 0 after the change",
|
|
"Persona/body prose is dry and in-tone; no narrator winking or 'hilarious' register"
|
|
],
|
|
"files": []
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "contradiction-approval-gate",
|
|
"prompt": "I want the town militia to actually be honest and investigate the disappearances near the shrine. Rewrite it so the militia does ride out.",
|
|
"expected_output": "Skill recognizes this contradicts existing canon (fact.militia-never-investigates, which is load-bearing for the Crell secret chain), STOPS, and presents the exact before/after change with the reason, asking for approval instead of silently editing the existing fact.",
|
|
"assertions": [
|
|
"Did NOT silently edit fact.militia-never-investigates or any existing lore entry",
|
|
"Surfaced the contradiction explicitly, naming the affected canon and why it matters (Crell chain)",
|
|
"Presented a concrete proposed change and asked for approval before writing"
|
|
],
|
|
"files": []
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "new-storyline-file",
|
|
"prompt": "Start a new storyline about the elven road-peoples beyond Duncarrow: who they are, a faction or two, and a rumor the player might hear about why they've stopped using the pass. Make it its own thing.",
|
|
"expected_output": "A new content/lore/*.md bible file with canon entities (faction/region/etc.) and at least one knowledge entry; related wired to the existing faction.elves stub; build + --check green; canon-roadmap Pending/Authored updated.",
|
|
"assertions": [
|
|
"Authored a new content/lore/*.md file (did not cram into duncarrow.md)",
|
|
"Wired at least one new entry's related to the existing faction.elves id",
|
|
"Includes at least one knowledge entry (rumor/fact/secret) with correct ascending secrecy",
|
|
"python -m content_build --check exits 0 after the change",
|
|
"content/lore/canon-roadmap.md updated to reflect the new content"
|
|
],
|
|
"files": []
|
|
}
|
|
]
|
|
}
|