Playtest feedback
@gameforge/playtest-feedback
Turn messy playtest notes into a ranked list of what to fix next. Tags each note (bug, confusion, frustration, boredom, delight, idea), tallies them with a script, ranks issues by how many testers hit them and how badly, and lists the moments players loved so you protect them.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1{
- 2 "name": "playtest-feedback",
- 3 "owner": "gameforge",
- 4 "version": "1.0.0",
- 5 "type": "skill",
- 6 "description": "Turn messy playtest notes into a ranked list of what to fix next. Tags each note (bug, confusion, frustration, boredom, delight, idea), tallies them with a script, ranks issues by how many testers hit them and how badly, and lists the moments players loved so you protect them.",
- 7 "category": "other",
- 8 "license": "MIT",
- 9 "compat": [
- 10 "claude-code"
- 11 ],
- 12 "permissions": {
- 13 "shell": [
- 14 "node scripts/tally-playtest.mjs"
- 15 ],
- 16 "files": {
- 17 "read": [
- 18 "./data/**",
- 19 "./playtests/**"
- 20 ],
- 21 "write": [
- 22 "./data/**",
- 23 "./out/**"
- 24 ]
- 25 }
- 26 },
- 27 "tests": {
- 28 "cases": [
- 29 {
- 30 "name": "ranks the issue every tester hit first and flags bad rows",
- 31 "inputs": {
- 32 "data/playtest.csv": "tester,level,type,severity,tag,note\nP1,1-1,confusion,2,cant-find-jump,\"Pressed every key before finding jump, nothing on screen says Space\"\nP1,1-2,frustration,2,jump-too-floaty,Overshot the small platform three times\nP1,1-2,delight,,,\"Laughed at the squash when landing, \"\"so bouncy\"\"\"\nP2,tutorial,confusion,2,cant-find-jump,Did not know how to jump until the second try\nP2,1-2,frustration,3,jump-too-floaty,Gave up on the gap after 6 tries\nP2,1-3,bug,3,stuck-in-wall,Got stuck inside the wall left of the door and had to restart\nP2,1-3,idea,,,A checkpoint before the spikes would help\nP3,1-1,boredom,1,long-intro,Intro text felt long\nP3,1-2,frustration,2,jump-too-floaty,Hard to land on the moving block\nP3,1-3,delight,,,Coin sound is really satisfying\nP3,1-3,confusion,1,,Thought the door was a wall\nP4,1-2,frustration,2,jump-too-floaty,Jump feels like the moon\nP4,1-3,bug,3,stuck-in-wall,Clipped into the wall after the door\nP4,menu,bugg,2,menu-music,Music restarts every time I open the menu\n"
- 33 },
- 34 "checks": [
- 35 {
- 36 "type": "command_exits_zero",
- 37 "command": "node scripts/tally-playtest.mjs data/playtest.csv out/playtest-summary.md --json out/playtest-summary.json"
- 38 },
- 39 {
- 40 "type": "file_contains",
- 41 "path": "out/playtest-summary.md",
- 42 "text": "| 1 | jump-too-floaty | frustration | 4/4 | 3 | 1-2 |"
- 43 },
- 44 {
- 45 "type": "file_contains",
- 46 "path": "out/playtest-summary.md",
- 47 "text": "line 15: unknown type \"bugg\""
- 48 },
- 49 {
- 50 "type": "output_matches_schema",
- 51 "path": "out/playtest-summary.json",
- 52 "schema": {
- 53 "type": "object",
- 54 "required": [
- 55 "summary",
- 56 "issues",
- 57 "levels",
- 58 "delights",
- 59 "ideas",
- 60 "untagged",
- 61 "skipped"
- 62 ],
- 63 "properties": {
- 64 "summary": {
- 65 "type": "object",
- 66 "properties": {
- 67 "testers": {
- 68 "const": 4
- 69 },
- 70 "notes": {
- 71 "const": 13
- 72 },
- 73 "skipped": {
- 74 "const": 1
- 75 },
- 76 "issues": {
- 77 "const": 4
- 78 }
- 79 }
- 80 },
- 81 "delights": {
- 82 "type": "array",
- 83 "minItems": 2,
- 84 "maxItems": 2
- 85 },
- 86 "untagged": {
- 87 "type": "array",
- 88 "minItems": 1,
- 89 "maxItems": 1
- 90 }
- 91 }
- 92 }
- 93 }
- 94 ]
- 95 },
- 96 {
- 97 "name": "handles quoted commas and a missing severity",
- 98 "inputs": {
- 99 "data/playtest.csv": "tester,level,type,severity,tag,note\nA,1-1,confusion,,menu-hidden,\"Where is the menu, I looked everywhere\"\nB,1-1,confusion,3,menu-hidden,Could not find the menu\n"
- 100 },
- 101 "checks": [
- 102 {
- 103 "type": "command_exits_zero",
- 104 "command": "node scripts/tally-playtest.mjs data/playtest.csv out/playtest-summary.md"
- 105 },
- 106 {
- 107 "type": "file_contains",
- 108 "path": "out/playtest-summary.md",
- 109 "text": "| 1 | menu-hidden | confusion | 2/2 | 3 | 1-1 |"
- 110 }
- 111 ]
- 112 }
- 113 ]
- 114 }
- 115}
