Files
BT411/context/playtest-tracker.md
T
Joe DiPrimaandClaude Opus 5 74534cec9e KB: the playtest tracker sheet is now a first-class topic (context/playtest-tracker.md) -- the testers moved issue tracking off the .txt handout onto a shared Google Sheet on 2026-08-14, making it the primary feedback channel with gitea still the system of record. Documents the two-tab shape (OPEN priority-ordered / CLOSED), the dev-status vocabulary with the colour EMBEDDED IN THE LABEL, the priority tiers, and the Dev-Comments contract (what is wrong / STATUS / NEED FROM YOU, written for a player in under ~55 words with a concrete ask). Captures the working rules that were learned the hard way this session: read the gitea COMMENT THREAD never the body (re-triaging 53 tickets from threads moved a third of the statuses and dropped P1 from 5 to 2); undated tester rows are HISTORICAL and reading them as fresh produced a false 'still crashing after the fix' claim on #170 that had to be retracted across seven tickets; never write DONE on the OPEN tab; merge duplicates to one row per ticket; never use cell fills for status (fills live on cells, labels on text -- every re-sort desyncs them, re-fixed three times before embedding); a leftover FILTER hides rows after a rewrite (skipping row numbers in the gutter = hidden rows, not lost data); pin row heights or autofit makes wrapped rows unreadably tall. Access documented both ways: read via the public CSV export (the Claude Drive connector CANNOT see it -- scoped to files it created, and it has no cell-write capability at all, so sharing does not help), write via an Apps Script bridge whose URL+token stay in local operator memory and NEVER in this repo. Quick Lookup row added; handout demoted to secondary; operator-console cross-linked. checkctx CLEAN.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 23:38:29 -05:00

6.2 KiB

id, title, status, source_sections, related_topics, key_terms, open_questions
id title status source_sections related_topics key_terms open_questions
playtest-tracker The playtest tracker sheet — the tester-facing issue board living Established 2026-08-14/15 (session housekeeping); supersedes the .txt handout as the primary feedback channel
operator-console
test-harness
project-overview
gitea
tracker
playtest
Should the OPEN tab auto-sync from gitea on a schedule, or stay a manual reconciliation before/after each playtest?

The playtest tracker sheet

Since 2026-08-14 the testers track issues in a shared Google Sheet instead of the annotated docs/OPEN_ISSUES_FOR_TESTERS.txt handout. It is now the primary feedback channel; edited .txt docs and pasted Discord logs are secondary (operator-console covers the session tooling itself). The sheet is the testers' INPUT surface; gitea remains the system of record.

Shape

Two tabs. Sheet ID and the write-bridge credentials live in the operator's local Claude memory (feedback-channels), never in this repo — the bridge URL + token together grant write access to the sheet.

  • OPEN# | Priority | Test Status | Dev Status | Dev Comments | Tester Comments, ONE row per ticket, sorted by priority then ticket number.
  • CLOSED — the same minus Priority, ascending by number. Also holds non-ticket records (completed audits) under a text key like AUDIT.

The split is driven by GITEA STATE, not by the Dev Status column — the two drift constantly, and the sheet's own column is the stale one.

Dev Status vocabulary (dev-owned column)

The colour is embedded in the label, not applied as a cell fill:

Label Meaning
🟡 PATCHED - RETEST code landed, needs a playtest to confirm — the testers' retest list
🟠 NEED INFO blocked on testers for a repro, detail, or log
🔵 YOUR CALL not a code question; needs their opinion or era memory
⚪ QUEUED logged and understood, work not started
🟢 WORKING actively being worked right now
✅ DONE verified — only ever appears on CLOSED

Priority: P1 blocks a session / hits everyone · P2 gameplay correctness confirmed in the field · P3 presentation and polish · P4 era question or opinion call · P5 latent or internal with no field impact.

Test Status is TESTER-owned (Pass / Fail / Test = not yet retested / Rework / Clarify). A Fail on a ticket gitea has closed is the highest-value signal in the whole sheet — it means a shipped fix did not hold, or the tested build predated it.

The Dev Comments contract

That column is what a player reads, so it is written for a player, in three lines:

<one sentence: what is wrong, or what changed if patched>
STATUS: <where it actually stands>
NEED FROM YOU: <a concrete, specific ask>      <- omit for QUEUED

Under ~55 words, no addresses, no engine jargon. The ask must name what to capture (which mech, which map, what time, what you expected vs saw, the boot-screen build number) — never "let us know if it happens again". If the thread already answers it, do not ask again.

Working rules (learned the hard way)

  • Read the gitea COMMENT THREAD, never the body alone. Bodies are original reports and are routinely superseded, retracted, or already fixed by comment 4. Triaging 53 tickets from threads moved a third of the statuses and dropped P1 from 5 to 2. See reconstruction-gotchas for the general form of this mistake.
  • Undated tester rows are historical. Only rows explicitly prefixed with a date (8/14 - ) came from that session. Reading undated carried-forward rows as fresh evidence produced a false "still crashing after the fix" report on #170 that had to be retracted across seven tickets. Ask testers to date entries.
  • Never write DONE on OPEN. A row that is done belongs on CLOSED; a DONE on the open page is a contradiction that confuses everyone reading it.
  • Merge duplicates to one row per ticket — linking loose reports to existing tickets creates two rows for the same number otherwise.
  • Never use cell fills for status. Fills belong to cells, labels to text; every re-sort moves the text and leaves the paint, so they desync. This was re-fixed three times before the colour was embedded in the label.
  • A leftover FILTER hides rows after a rewrite — if rows appear to vanish and the row numbers in the gutter SKIP, that is hidden rows, not lost data (Data → Remove filter).
  • Row heights: autofit makes wrapped comment rows hundreds of pixels tall (≈4 visible rows). Pin to ~63 px.

The cycle

  1. Before a playtest — regenerate/refresh: reconcile every row against gitea, clear stale statuses, make sure each NEED INFO carries an ask the testers can act on that night.
  2. After a playtest — read the sheet, file the unfiled New rows as tickets, link duplicates to existing numbers, post the field evidence onto the tickets, then write results back.
  3. Reconciling ~50 tickets against their threads is a fan-out job — one agent per batch of ~7, returning {num, dev_status, priority, dev_comment}.

Access

  • Read — the sheet is public, so the CSV export works with no auth: https://docs.google.com/spreadsheets/d/<ID>/export?format=csv&gid=0 (307-redirects to a googleusercontent.com host; follow it). The Claude Google Drive connector cannot see it — that connector is scoped to files it created itself, and it has no cell-write capability for any file, so sharing the sheet to the account does not help.
  • Write — a Google Apps Script web app bound to the sheet, called with curl -sL -d (never -X POST). Actions: ping, tabs, get, set, append, note, width, height, autofit, format. Extending it requires re-pasting the script AND Deploy → Manage deployments → pencil → Version: New version — clicking Deploy alone keeps the old code live on the same URL. Treat further script edits as expensive: the operator has said the redeploy loop is not worth repeating for cosmetics.

Key Relationships

  • Feeds: the gitea tracker (system of record) · docs/OPEN_ISSUES_FOR_TESTERS.txt (now secondary)
  • Uses: operator-console (session tooling) · test-harness (what "verified" means here)