game-dev · git:20260911.13080c4 · 2026-09-11 · sha256 dffebf85d013eeb0

game-dev git:20260911.13080c4A

Immutable. This exact content is served forever at /api/v1/blob/dffebf85d013eeb0.

---
name: game-dev
description: Criar, evoluir, depurar, produzir e verificar jogos com IA, partindo do acervo existente, até o acabamento pretendido.
---

# Game Dev

Use este processo em qualquer engine. O objetivo é uma experiência jogável no
**acabamento pretendido**, com evidência, preservando a direção do usuário e a
qualidade aprovada — fácil de começar, difícil de rebaixar. “AAA” neste framework é
piso de acabamento observável (verbo, feel sincronizado, áudio, pacing, mundo, receita
repetível), não tier de publisher, orçamento nem adjetivo de trailer; o alvo honesto
com IA é AA / Triple-I nesse piso. Todos os comandos abaixo são
`python3 scripts/game.py ...` a partir deste repositório (ou pelo caminho absoluto do
script), com `--root <laboratorio>` antes ou depois do subcomando.

## Caminho rápido

| Situação | Faça |
| --- | --- |
| Primeira vez ou raiz em dúvida | `doctor --root <lab>`; corrija itens `missing`. Ele nomeia os projetos e lista os starters. Se o package pede Node, o `doctor` nomeia o engines que o package já declara. Pedido no disco não é binário no PATH. Sem chave `engines`. Nomear não instala. Se o manifesto declara as trocas, o `doctor` nomeia as substituições que o manifesto já declara. Manifesto no disco não é projeto criado. Sem chave `substitutions`. Sem jogo e com starter, `then.guide` aponta o mapa ideia→ciclo com `--idea`. Se o README imprime o exemplo, o `doctor` nomeia o exemplo que o README já imprime. Frase no then não é pasta criada. Sem chave `exemplo`. Se a ambição recusa que o harness seja motor, o `doctor` nomeia o motor que a ambição já recusa. Convite no then não é runtime. Sem chave `motor`. Se a skill recusa que AAA seja tier de publisher, o `doctor` nomeia o publisher que a skill já recusa. Atalho no disco não é orçamento. Sem chave `publisher`. Se o mapa recusa que a ausência seja evidência negativa, o `doctor` nomeia a ausência que o mapa já recusa. Lista no disco não é laboratório. Sem chave `ausência`. Não cria e não executa. Na raiz do framework, `guide` sem `--idea` recusa com o mesmo `sem destino` do `start` — não devolve `start '<destino>'`. A recusa nomeia o `start --idea` que o README já imprime; nomear não cria |
| Laboratório com jogos (o caso normal) | `discover --root <lab>` lê cada jogo e devolve o que os distingue, inclusive os sinais que o `next` usa (primeiro ciclo, ofício, feel sem recibo, achado sem forma, convite, origem sem recibo e lacunas de dimensão); a ordem é a do disco — **não trate a primeira linha como prioridade**. Se o package declara os scripts, o `discover` nomeia os scripts que o package já declara. Lista no disco não é passo executado. Sem chave `scripts`. Se o roteiro recusa que o documento comprove qualidade, o `discover` nomeia a qualidade que o roteiro já recusa. Conta no disco não é acabamento. Sem chave `qualidade`. Sinal verdadeiro não é partida jogada. Lista de arquivo sem recibo não é licença. Lista de chave ausente não é alcance observado |
| Perdeu o comando que abre | `play` (ou `open`) aponta o serve e a superfície (`url`, padrão `http://localhost:8080/`) sem executar. Sem caminho, o único jogo do laboratório basta; dois pedem o caminho. Se o serve recusa produção, o `play` nomeia a produção que o serve já recusa. Serve no disco não é publicação. Sem chave `produção`. Com tela, o avanço abre a porta. Depois da partida a página grava o recibo se você escrever; `note` sem caminho usa o mesmo jogo. `then.note` continua. `executed` fica falso. `runtime` lê o Node do PATH. Nomear o endereço não serve. Não cria |
| Jogo novo | Destino inexistente e engine web: `start --idea "<fantasia>"` (ou `start <novo> --starter <starter> --idea "<fantasia>"`) cria o projeto — sem caminho, a frase nomeia a pasta, ao lado do framework se o start corre de dentro desta árvore —, põe a frase na abertura e no aviso do primeiro ciclo, escreve `AGENTS.md` com o comando que abre, o `note` e o `playtest` (não é GDD; não lista rascunhos que não plantou; o `playtest` só lê; sem os quatro não é achado; nomear o leitor não observa), o prompt nomeia o `playtest` que o `AGENTS.md` já cita (só lê; sem os quatro não é achado; sem `then.playtest`; nomear o leitor não observa), não planta os rascunhos do ciclo (`--docs` os cria) e devolve `open` (= `play`), `url` e `then.note` sem executar. Se o play pede npm, o `package.json` tem dependências e `node_modules` falta, `then.install` nomeia `npm install`. Sem dependências a chave some. Nomear não instala. `open` é o comando de agora; `url` é a superfície pedida; `steps` é o mesmo mapa de três passos do `guide`, com o passo 1 feito. Se o starter declara o verbo e as teclas, o prompt as nomeia — `Fantasia:` à parte de `Verbo:` quando `--idea` ou `copy.json` têm frase; a frase não muda o verbo — inclusive a porta, o cluster de uma mão, o toque, o controle e as queries de look, chuva, par, seed, relógio e convite, se houver. Se o projeto — ou o starter, antes do destino existir — declara as ferramentas, `then` nomeia par, look, chuva e voz; depois de um recibo, o prompt as aponta. Se o disco tem last-run com seed, `then` aponta a partida (número, chuva e look quando o candidato os nomeia) e o convite; nomear o endereço não observa. Vestir a query não grava. A chuva da query não retoma o hold. Na porta e no fim a região viva nomeia a mesa e o look que a chuva já veste — spawn e normal somem. Na porta o telefone vê Jogar: toque sem ter apertado. Depois do tap a porta não chama o avanço de cima. Nomear o ofício não pinta. A frase não muda o verbo. `guide [<novo>] --idea "<fantasia>"` (também sem subcomando: `python3 scripts/game.py --idea "<fantasia>"`) mapeia start → jogar → note. `open` é o comando de agora; `prompt` o nomeia. Sem destino, a frase nomeia a pasta no comando do start — ao lado do framework se o mapa corre de dentro desta árvore; no diretório atual se corre de fora. Não grava a frase nem cria a pasta. Sem destino, se o diretório atual é um jogo fora do framework, o mapa usa esse caminho. `next` só se o ciclo já correu e você não sabe o que falta. Sem `start`: `init` e depois o comando em `play`. Se o package declara o módulo, o `init` nomeia o módulo que o package já declara. Tipo no disco não é runtime instalado. Sem chave `type`. Jogo pequeno em qualquer engine: `template game-design --project <novo> --output <novo>/docs/game-design.md` e `--stage game-design`. Não gere nove templates |
| Em dúvida sobre o próximo passo | `next --focus <foco>` deriva uma proposta do estado no disco; sem caminho, o único jogo do laboratório basta. `executed` fica `false` e a escolha é sua. Se o processo pede uma ação recomendada, o `next` nomeia a ação que o processo já pede. Proposta no disco não é autorização. Sem chave `ação`. Se o roteiro recusa que o comando crie o jogo, o `next` nomeia a criação que o roteiro já recusa. Proposta no disco não é pasta criada. Sem chave `criação`. Se o processo recusa fabricar tarefa para cumprir o formato, o `next` nomeia a fabricação que o processo já recusa. Lista no disco não é backlog. Sem chave `fabricação`. |
| O verbo funciona mas não convence | `feel`; se `unobserved`, `note --author … --note "o que o verbo sentiu"`. Sem caminho, o único jogo do laboratório basta. Lê rumble, o peso do passo, as janelas da chuva e o rumo que o coil do dash marca; nomear não é `felt`. Depois `roles` e `context --focus audio` |
| Paleta, conteúdo no código ou jogo só na máquina de quem construiu | `art` / `content` / `ship` <projeto>; `consistent`/`enough`/`shipped` ficam `false` |
| Observou uma partida e só tem uma nota | `playtest`; se `unstructured`, escreva problema, evidência, hipótese e medição. Sem caminho, o único jogo do laboratório basta. Depois do recibo, `playtest --invite` escreve a página e aponta `href` (`/?invite=1` ou, com seed no disco, `/?invite=1&seed=<n>`, com chuva nomeada `&spawn=<mesa>`, com look nomeado `&look=<paleta>`, e com relógio nomeado e ≠ 1 `&speed=<relógio>`), onde a tabela some; depois do fim a página do maker aponta o convite desta partida se a seed ficou no recibo — copiar o endereço não grava; a página também mostra seed, pontos, eixos, a curva que o last-run já traçou e se o candidato foi simulado (`nearest-orb` vira `simulada`; `played` some; a faixa não leva a conta nem o relógio) e oferece os quatro nomes para copiar ou gravar — o achado copiado e gravado leva essa faixa; sem tally nem relógio; markdown no disco não é alguém de fora; depois do fim ela rola até o painel; rolar não é alguém de fora; número na faixa não preenche os quatro; copiar não grava; sem a área de transferência o Copiar baixa o markdown; baixar não grava; gravar anexa o candidato se houver last-run; gravado não é alguém de fora |
| “Está AAA?” ou slice pronta | `context <projeto> --stage vertical-slice` e leia `finish`; só então `template aaa` |
| Mudança em jogo existente | `context <projeto> --focus <foco>`; com gênero definido, `--genre <g>` |
| “continue” / “vamos avançar” | `context <projeto> --focus <foco> --event resume` e leia `continuity.sources`, preservando o foco da tarefa |
| Usuário aprovou uma referência | `context <projeto> --focus <foco> --event direction-approved` e sincronize a base no mesmo turno |
| Recorte já demonstra a experiência | `context <projeto> --focus production --stage production-plan` |
| Revisar um marco (alpha, beta, gold) | `context <projeto> --focus production --stage milestone`; `bar <projeto>` diz o piso declarado e `gate <projeto>` o que ainda não pode passar |
| Registrar observação, orçamento medido ou decisão de marco | `record <projeto> --kind observation\|budget\|milestone --author ... --note ... --field k=v --output <pasta-nova>`. Se o roteiro recusa medir os critérios, o `record` nomeia a medição que o roteiro já recusa. Recibo no disco não é observação. Sem chave `mede`. Se o roteiro recusa que o screenshot isolado comprove animação, o `record` nomeia a animação que o roteiro já recusa. Anexo no disco não é controle. Sem chave `animação`. Se o roteiro recusa que o HEAD substitua o julgamento, o `version` nomeia o julgamento que o roteiro já recusa. Identidade no disco não é avaliação. Sem chave `julgamento`. |

Focos: `create`, `mechanics`, `lifecycle`, `content`, `visual`, `audio`, `feel`,
`network`, `architecture`, `performance`, `accessibility`, `persistence`, `release`,
`production`. Etapas: `brief`, `mda`, `gdd`, `poc`, `prd`, `tdd`, `vertical-slice`,
`mvp`, `qa`, `release`, `art-bible`, `devlog`, `audit`, `aaa`, `game-design`,
`production-plan`, `milestone`, `agents` (memória persistente gerada do disco: o comando que abre e o que não foi plantado; sem rascunhos não lista GDD). Gêneros (`--genre`): `narrative`, `adventure`,
`platformer`, `action-adventure`, `shooter`, `fighting`, `stealth`, `horror`, `racing`,
`sports`, `rhythm`, `turn-based`, `deckbuilder`, `strategy`, `tower-defense`, `puzzle`,
`simulation`, `survival-crafting`, `rpg`, `roguelike`, `multiplayer-competitive`, `idle`,
`casual` — a lista vigente está em `context.packs.genre.available`.

## Passos

1. **Contexto.** Resolva projeto e tarefa; execute `context <projeto> --focus <foco>`.
   Leia os AGENTS aplicáveis, `foundation.read_first`/`records`, os catálogos em
   `studies` e somente as referências em `read_next`. O núcleo é agnóstico;
   `read_next` inclui o [pacote de plataforma](packs/README.md) quando a engine foi
   identificada e o de gênero quando você passou `--genre`. Se `packs.genre.suggested`
   trouxer um gênero lido de documento, confirme com a conversa e repita o `context`
   com `--genre`; pacotes são convenções a confirmar no código, não capacidades. Se o pacote recusa que teste unitário prove o navegador, o `context` nomeia o navegador que o pacote já recusa provar. Pacote no disco não é comportamento no aparelho. Sem chave `navegador`. Se o índice recusa que o pacote certifique capacidade, o `context` nomeia a capacidade que o índice já recusa. Pacote no disco não é comportamento. Sem chave `capacidade`. Se o mapa recusa que o pacote seja extração, o `context` nomeia a extração que o mapa já recusa. Convenção no disco não é repositório executado. Sem chave `extração`. Se o mapa recusa que a menção seja mecânica obrigatória, o `genre_mentions[n]` nomeia a mecânica que o mapa já recusa. Campo no disco não é regra do jogo. Sem chave `mecânica`. Se a receita recusa que o nome seja API, o `context` nomeia a API que a receita já recusa. Vocabulário no disco não é runtime. Sem chave `api`. Se a barra recusa que o determinismo seja capacidade, o `capabilities` desconhecido nomeia o determinismo que a barra já recusa. Lista no disco não é ciclo demonstrado. Sem chave `determinismo`.
   `capabilities.mentioned` aponta
   arquivo local; não prova pause, reset, seed nem determinismo. Confira `basis`,
   `via` e os limites. Se o processo recusa que o hash seja leitura, o `git` nomeia a leitura que o processo já recusa. Identidade no disco não é inspeção. Sem chave `leitura`. `context` já executa `scan`: se `foundation.audit.required`
   for verdadeiro, avise as lacunas com `audit.notice` e comece o levantamento conforme
   [auditoria de projeto](references/project-audit.md), sem pedir um segundo
   consentimento; respeite restrição explícita na conversa atual. Se
   `foundation.audit.deferred` for verdadeiro, o destino já abre — jogue
   primeiro; lacuna de rascunho depois do `start` não é auditoria neste
   turno. Se o README aponta o serve, o `scan` nomeia o serve que o README já aponta. Página no disco não é partida jogada. Sem chave `serve`. Se o roteiro pede documentar sem consentimento, o `context` nomeia o audit que o roteiro já pede. Roteiro no disco não é base escrita. Sem chave `audit`. Se o roteiro recusa que a checagem seja daemon, o `audit` nomeia o daemon que o roteiro já recusa. Roteiro no disco não é interceptação. Sem chave `daemon`. Se o roteiro recusa que o local não percorrido seja inexistente, o `scan` nomeia a inexistência que o roteiro já recusa. Contagem no disco não é inventário. Sem chave `inexistente`. Se o mapa recusa que a cobertura desigual seja acidente, o `issues[n]` da coverage nomeia o acidente que o mapa já recusa. Recorte no disco não é falha. Sem chave `acidente`. Se a guia recusa que preencher linhas certifique o jogo, o `non_current_documents[n]` nomeia as linhas que a guia já recusa. Documento no disco não é o jogo. Sem chave `linhas`. Se o processo recusa que a etapa certifique o progresso, o `context` nomeia o progresso que o processo já recusa. Contexto no disco não é degrau. Sem chave `progresso`. `--event direction-approved` e `--stage audit` continuam
   pedindo a base. Sem projeto
   identificável, não invente um alvo. Em retomada, fonte encontrada não é tarefa
   validada: siga [continuidade e retomada](references/process.md#continuidade-e-retomada). Se o processo nega que documento pronto seja PoC, o `context` nomeia a PoC que o processo já nega. Fonte no disco não é jogo implementado. Sem chave `process`. Se o processo recusa que sources_found comprove a fila, o `sources[n]` do continuity nomeia a fila que o processo já recusa. Fonte no disco não é backlog. Sem chave `fila`. Se a memória recusa o adjetivo, o `scan` nomeia o AAA que a memória já recusa. Memória no disco não é acabamento. Sem chave `agents`.
2. **Intenção e prontidão.** Defina fantasia, verbo central, plataforma, cenário,
   restrições, a maior incerteza e a prova de conclusão; assuma o resto com registro e
   pergunte só o que impede de jogar. A escala (jam/conto, produto, AA / Triple-I)
   vive no brief e muda a quantidade de documentos, não o piso do verbo
   ([ambição](references/ambition.md)). Leia [processo](references/process.md)
   — com tela, a primeira superfície é a porta; `play` aponta sem executar —
   e [qualidade](references/quality.md). Para criação ou pré-produção, siga
   [o ciclo criativo](references/preproduction.md): Game Brief, MDA/GDD, PoC, PRD/TDD,
   vertical slice, MVP, QA/playtest e release. `--stage <etapa>` carrega só o template
   pertinente; `template <etapa> --project <projeto>` imprime um rascunho. Se o molde recusa publicar, o `template` nomeia a publicação que o molde já recusa. Molde no disco não é autorização. Sem chave `publicar`.
   Reaproveite
   documentos existentes; um jogo pequeno reúne tudo em `game-design`. O design system
   do jogo (`art-bible`) é conteúdo mínimo; o arquivo separado é opcional se outro
   canônico cobrir. Contrato: [design system do jogo](references/game-design-system.md). Se o sistema recusa que o scanner certifique tokens, o `scan` nomeia os tokens que o sistema já recusa. Documento no disco não é aprovação artística. Sem chave `tokens`. Se o roteiro recusa que o recibo presente seja licença válida, o `scan` nomeia a licença que o roteiro já recusa. Área no disco não é concessão. Sem chave `licença`. Se o roteiro recusa prescrever quantas pessoas, o `scan` nomeia as pessoas que o roteiro já recusa. Área no disco não é censo. Sem chave `pessoas`. Se o roteiro recusa que reconstruir documentos comprove intenções, o `scan` nomeia as intenções que o roteiro já recusa. Candidato no disco não é autoria. Sem chave `intenções`.
   Direção aprovada: `--event direction-approved` e base mínima sincronizada no mesmo
   turno, mesmo com nove candidatos encontrados.
3. **REUSE → ADAPT → CREATE.** Busque no jogo, no acervo e nas fontes pertinentes.
   `doctor` lista os starters disponíveis; começar por um deles é REUSE, escrever um
   loop do zero é CREATE. Se o laboratório tiver `shared/sfx` com sons, use
   `sfx search` antes de baixar. Sem acervo, o starter já fala em
   `public/sfx`; `sfx search` nomeia o stem que casa com o termo. Se o `tools/design-sfx.*` desloca a voz, o `sfx search` nomeia o deslocamento que o sfx já oferece. Arquivo no disco não é mix ouvida. Sem chave `sfx`.
   `sfx info` lê a chave e nomeia o stem que o recibo lista e o
   disco perdeu, `roles --fill` nomeia o mesmo stem. Se o processo recusa o reuso automático, o `roles --fill` nomeia o reuso que o processo já recusa. Arquivo no disco não é licença. Sem chave `reuso`. Se o mapa recusa que o catálogo ouça o starter, o `context` nomeia a escuta que o mapa já recusa. Acervo no disco não é mix ouvida. Sem chave `ouve`.
   `sfx verify` nomeia os stems sem cruzar
   o que não existe e nomeia o stem que o recibo lista e o
   disco perdeu. Se o check cruza a integridade, o `sfx verify` nomeia a integridade que o check já cruza. Hash no disco não é mix ouvida. Sem chave `sha256`. `sfx summary` lista todos. Se o `tools/peak.*` relata o pico do arquivo, o `sfx summary` nomeia o pico que o peak já relata. Relato no disco não é mix ouvida. Sem chave `peak`. `sfx serve`
   recusa catálogo vazio.
   Com sons no acervo, `sfx serve` abre a página de escuta — se
   `shared/sfx/ui` faltar, o harness gera a lista e nomeia o som
   que o catálogo lista e o disco perdeu. `sfx verify`
   nomeia o som que o catálogo lista e o disco perdeu —
   não despeja errno. Tocar nessa
   página não é mix ouvida no jogo. Arquivo no disco não é mix ouvido. Crescer o acervo é
   `sfx import ARQUIVO --metadata JSON` (ffmpeg); se a receita recusa improvisar licença, o `sfx import` nomeia a improvisação que a receita já recusa. Importar no disco não é licença. Sem chave `improvisar`. `sfx seed` lê
   `selection.json` local. `sfx info ID` lê a ficha do acervo ou a
   chave do stem do starter — o recibo que lista um stem e o
   disco perdeu não é id desconhecido; se o inspect já mediu o pico, o `sfx info` nomeia o pico que o inspect já mede.
   Pico no recibo não é mix ouvida. `sfx export ID
   --to PASTA` copia bytes e créditos do acervo ou do stem —
   o recibo que lista um stem e o disco perdeu não é id
   desconhecido; exportar não inventa bytes. Se o export recusa processamento, o `sfx export` nomeia o processamento que o export já recusa. Bytes no disco não são mix ouvida. Sem chave `processamento`.
   `sfx copy` leva o stem do starter. Importar e exportar não é
   ouvir. Sem 8-bit,
   chiptune, jsfxr ou Kenney arcade como padrão. Leia candidatos e consumidores.
   CREATE exige lacuna explícita. Para trabalho novo sem registro, use
   [o contrato](assets/work.example.json); `check-plan` valida a estrutura, não o mérito. Se o processo recusa garantir o mérito, o `check-plan` nomeia o mérito que o processo já recusa. Forma no disco não é adequação. Sem chave `mérito`. Se a guia recusa que a checagem seja validador semântico, o `metadata_issues[n]` nomeia o semântico que a guia já recusa. Parse no disco não é o jogo. Sem chave `semântico`.
4. **Arquitetura e fatia jogável.** Ligue intenção/GDD → requisitos/aceite → decisões
   técnicas → tarefas → evidência. Se a mudança afetar responsabilidades, contratos,
   estado/tempo, saves, renderização ou integrações, aplique
   [arquitetura](recipes/architecture.md) (`--focus architecture` ou `--stage tdd`). Se a receita recusa que o harness infira dependências, o `scan` nomeia as dependências que a receita já recusa. Receita no disco não é decisão. Sem chave `dependências`.
   Implemente uma fatia jogável que atravesse regra, apresentação e conteúdo: perceber
   → decidir → agir → consequência → reinício. Em seguida o feel e o áudio **desse**
   verbo (`--focus feel`, `--focus audio`); título e cores novos não demonstram
   experiência nova. Não acrescente um runtime comum, uma hierarquia de agentes ou IA
   por quadro.
5. **Verificar.** Use os validadores existentes e o cenário real. `verify` registra
   comandos explícitos e logs (scripts de `package.json` ou alvos Cargo; outras engines
   por `--command`). Build verde não comprova diversão, arte, reinício, rede, direitos
   de assets nem aprovação humana. Se o roteiro recusa aprovar a criatividade, o `verify` nomeia a criatividade que o roteiro já recusa. Recibo verde não é aprovação. Sem chave `criatividade`. Se a ambição recusa que o recibo comprove diversão, o `verify` nomeia a diversão que a ambição já recusa. Log no disco não é experiência. Sem chave `diversão`. O que uma pessoa observou em movimento, uma medição
   de orçamento ou uma decisão de marco entra por `record`, com `role=human` ou
   `role=agent`; avaliação do agente não é aprovação do usuário. Capacidade
   desconhecida permanece desconhecida até ser demonstrada: `context` só sabe dizer
   `mentioned` sobre as oito capacidades conhecidas (pause, reset, seed, observe, act,
   advance, capture, dispose), porque lê arquivos sem executá-los. Quando os testes do
   projeto de fato exercitarem alguma delas, anexe a alegação ao recibo com
   `verify --proves <capacidade>`: sai como `claimed`, com autor, argv e log, nunca
   como verificada; declare só o que os comandos cobrirem. Se o processo recusa que claimed seja verified, o `verify` nomeia a verificação que o processo já recusa. Alegação no disco não é cobertura. Sem chave `verified`. `experience_status`
   continua `not_assessed` até haver observação em movimento.
6. **Comparar, registrar, continuar.** Compare antes/depois em condições equivalentes
   e em movimento quando houver efeito visual. Corrija regressões, registre decisões e
   hipóteses descartadas, cumpra `continuity.before_close` e
   `documentation.before_close`. Não promova scaffold a slice nem slice a jogo
   concluído. Não chame o recorte de AAA — nem de “quase AAA” — se o perfil em
   `finish` (núcleo; produto se a escala pedir; promessas só se o brief as tiver) não
   foi observado; na slice ou em “está AAA?”, leia `finish` e
   [o guia](references/aaa-checklist.md) e grave no canônico — completar linhas não
   certifica e `N/A` exige motivo. Se a guia recusa preencher o checklist, o `context` nomeia o checklist que a guia já recusa preencher. Guia no disco não é observação. Sem chave `checklist`. Não publique nem delegue sem autorização aplicável.
7. **Produzir até o acabamento, pela dimensão mais baixa.** Quando o recorte já
   demonstrou a experiência, siga [produção](recipes/production.md): plano de produção
   com marcos com critérios de evidência (first playable → vertical slice → alpha → beta →
   gold → live), lentes de disciplina, orçamentos medidos na plataforma alvo, pipeline
   de conteúdo e estabilidade. Aplique [feel](recipes/feel.md) ao verbo central. Os
   marcos são o calendário; `context` devolve `production_bar` com as dimensões
   pertinentes ao foco, e o degrau percebido de um jogo é o **mínimo** entre elas, não
   a média — antes de melhorar o que já está alto, procure o que está baixo
   ([barra de acabamento](references/production-bar.md)). Declare em tabela, uma linha
   por dimensão, com degrau atual, seguinte e o critério que falta; `bar <projeto>` lê
   e diz o piso, `next` propõe subir a dimensão pelo nome. Se a prosa declara o mínimo, o `bar` nomeia o mínimo que a barra já declara. Degrau no disco não é acabamento observado. Sem chave `mínimo`. Se a barra recusa que o degrau seja prazo, o `bar` nomeia os prazos que a barra já recusa. Linha no disco não é calendário. Sem chave `prazos`. Se a barra recusa que o nome seja uma das dez, o `bar` nomeia a dimensão que a barra já recusa. Linha no disco não é acabamento. Sem chave `dimensão`. Se a barra recusa que duas linhas discordantes se resolvam por precedência, o `conflicts[n]` do `bar` nomeia a precedência que a barra já recusa. Linha no disco não é acabamento. Sem chave `precedência`. Se a barra recusa promover o degrau, o `context` nomeia a promoção que a barra já recusa. Guia no disco não é acabamento. Sem chave `promove`. Nenhum comando atribui
   degrau; ao declarar um, declare dispositivo, versão, cena e quem observou.
   **A barra descreve, o gate recusa.** [Os dez gates](references/gates.md) formalizam
   as linhas “Pronto para…” do ciclo: ao pedir a próxima permissão, declare uma linha
   por critério com `met`/`unmet`/`waived`/`out_of_scope` e o que sustenta o estado; `gate <projeto>`
   lê. Se a tabela declara o gate, o `gate` nomeia o gate que a tabela já declara. Linha no disco não é passagem concedida. Sem chave `gate`. Se o roteiro recusa que o silêncio seja aprovação, o `gate` nomeia o silêncio que o roteiro já recusa. Linha vazia no disco não é passagem. Sem chave `silêncio`. Se o roteiro recusa que must_meet seja dispensável, o `gate` nomeia a dispensa que o roteiro já recusa. Linha no disco não é passagem. Sem chave `dispensa`. Se o roteiro recusa que fora de escopo seja dispensa, o `gate` nomeia o escopo que o roteiro já recusa. Linha no disco não é passagem. Sem chave `escopo`. Critério sem linha é pendente. As três saídas são passar, cortar escopo e
   abandonar — proponha a terceira quando for a honesta. Dispensa exige motivo; quatro
   critérios de `readiness` não se dispensam. `out_of_scope` é o critério que nunca
   incidiu: exige motivo e não entra na conta das dispensas. Três critérios são
   `must_meet` — perguntam se ainda vale o que custa, não se o trabalho está feito;
   pendência neles não se resolve trabalhando mais. Esses três também não se dispensam,
   e os sete recusam saída de escopo. `granted` é sempre falso. Nenhum comando promove marco,
   mede orçamento ou certifica acabamento; a passagem é declarada por pessoa com a
   prova ligada (`record --kind milestone`, recibos de `verify`, `observation` e
   `budget`). Exemplo: [da trilha ao capítulo acabado](examples/era-uma-vez-production.md).
   **`origins <projeto>` lê o disco**, não a tabela: lista mídia embarcada sem
   recibo de origem. Nomeia a mídia que o recibo lista e o disco perdeu.
   Nomear não devolve o arquivo. Nomeia `form` e `fields`. `--declare` escreve
   o sidecar `.credits.txt`. Sem `then`. Não valida licença. Recibo no disco
   não é licença válida. JSON sem origem, autor e licença não declara.
   Sidecar sem os três rótulos também não.
   Se o sidecar declara `Consumidor:`, o `origins` nomeia o consumidor que o sidecar já declara. Consumidor no disco não é licença válida. Sem chave `consumer`. Se o roteiro recusa que o sidecar sem rótulos declare, o `origins` nomeia os rótulos que o roteiro já recusa. Recibo no disco não é licença. Sem chave `rótulos`.
   Arquivo sem recibo conta como licença
   desconhecida, e `next` aponta `--declare` antes de seguir.
   **`craft <projeto>`** lê checklists de ofício (paleta, perdão, percentil,
   regra de parada) — conformidade com o que o projeto declarou, sem limiar
   importado. Se a tabela declara saída de escopo, o `craft` nomeia a saída de escopo que a tabela já declara. Linha no disco não é ofício observado. Sem chave `out_of_scope`. Se a pesquisa recusa ser escada de acabamento, o `craft` nomeia a escada que a pesquisa já recusa. Pesquisa no disco não é ofício observado. Sem chave `escada`. Se a pesquisa recusa que o número sem definição seja critério, o `craft` nomeia a definição que a pesquisa já recusa. Pesquisa no disco não é ofício observado. Sem chave `definição`. `observed` é sempre falso. Só levanta o gate que o projeto pediu.
   Depois de um `init` fresco ou de um `start` sem rascunhos, `next` propõe
   **abrir o ciclo** antes de documentar o que falta: o starter já é um jogo que abre. Com tela,
   o avanço abre a porta; no campo o aviso ensina mover, avançar,
   coletar, guardar e o mapa da superfície que falou. No fecho, corrente
   viva pede guardar de novo; pad e toque não voltam. Art-bible vigente.
   O `init` não o reescreve.
   **`guide [<projeto>]`** devolve os três passos ideia→ciclo (start,
   jogar, note) sem executar nenhum. Sem subcomando, o harness é o
   próprio `guide`; `--idea` no mapa (com ou sem o verbo `guide`) só
   entra no comando do start. Sem destino, a frase nomeia a pasta —
   ao lado do framework se o mapa corre de dentro desta árvore.
   Destino existente preenche o comando que abre o jogo e o `kind`
   do passo de jogar. `open` é o comando de agora; `prompt` o nomeia
   e também sai em stderr — o JSON fica no stdout.
   Se o starter declara o verbo, o prompt e o passo 2 o
   nomeiam — `Fantasia:` à parte de `Verbo:` quando há `--idea` ou
   `copy.json`; a frase não muda o verbo — e a porta, se o manifesto a declara; se o manifesto declara o relógio, o `guide` nomeia o relógio que o manifesto já declara. Frase no disco não é partida observada. Sem chave `speed`. Se o roteiro recusa que o mural seja onboarding, o `guide` nomeia o onboarding que o roteiro já recusa. Texto no disco não é a primeira ação. Sem chave `onboarding`. Se a receita recusa que o screenshot comprove feel, o `guide` nomeia o screenshot que a receita já recusa. Recibo no disco não é peso percebido. Sem chave `screenshot`. Se o processo recusa que o comando abra o jogo, o `guide` nomeia a abertura que o processo já recusa. Nome no disco não é partida. Sem chave `abertura`. `then` nomeia par, look, chuva e voz quando o projeto — ou o
   starter, se o destino ainda não existe — as declara; se declara
   `session`, `then` a aponta e o prompt a nomeia; se o disco tem last-run com seed,
   `then` aponta a partida (número, chuva e look quando o candidato os nomeia) e o convite; nomear o endereço não observa; se o serve tenta abrir o navegador, o prompt nomeia a tentativa; sem o marcador, pede Abrir; nomear não abre; `executed` fica `false`. `runtime` lê o `node` do PATH se o play pede npm ou node. O autor do
   `note` é sugestão do git ou do ambiente, não quem jogou. Nomear o
   ofício não pinta. `next` fica em `then.lost`.
   **`start [<projeto>]`** cria se o destino estiver livre e devolve
   `open` (= `play`) + `then.note` e os mesmos `steps` do `guide`, com
   o passo 1 feito. Se o `tools/new-pair.*` nasce look e chuva, o `start` nomeia o par que o pair já nasce. Ferramenta no disco não é alguém de fora. Sem chave `pair` no recibo. Sem caminho, `--idea` nomeia e cria a pasta —
   ao lado do framework se o start corre de dentro desta árvore.
   `guide --idea` continua só no comando, não no disco. Se o starter declara o verbo e as teclas, o
   prompt as nomeia — inclusive a porta, o cluster de uma mão, o toque, o
   controle e as queries de look, chuva, par, seed, relógio e convite, se o starter as declara. Se o
   projeto declara `pair`/`look`/`table`/`sfx`, `then` as nomeia; se o disco
   tem last-run com seed, `then` aponta a partida e o convite; depois de um
   recibo, o prompt aponta o segundo ciclo. O `prompt` também sai em
   stderr; o JSON fica no stdout. Não executa o jogo. `--idea` entra na
   abertura se houver `data/copy.json`. O `start` não planta os rascunhos;
   `--docs` os cria. O `init` continua plantando e agora devolve o mesmo
   `open`, `url` e `prompt` do ciclo — não executa. A frase na tela não muda o verbo.
   `runtime` lê o `node` do PATH se o play pede npm ou node; sem 20+ o prompt
   avisa. `session` aponta a partida simulada se o manifesto a declara; o
   prompt a nomeia. Não executa e não observa. Nomear não serve.
   Se o serve tenta abrir o navegador, o prompt nomeia a tentativa.
   Sem o marcador, pede Abrir. Nomear não abre.
   **`play [<projeto>]`** (também `open`) aponta o comando que abre o
   jogo. Não executa, não cria e não serve. Sem caminho, usa o
   diretório atual se ele for um jogo fora desta árvore; se o
   laboratório tem um único jogo, esse basta; dois pedem o caminho.
   `open` é o play. Com tela, o avanço abre a porta. Depois de uma
   partida, a página grava o recibo se você escrever; o próximo
   comando do harness continua `note`. O prompt nomeia o `playtest`
   que o `AGENTS.md` já cita. Só lê. Sem os quatro não é achado.
   Sem `then.playtest`. Nomear o leitor não observa. `note`, `next`, `feel` e
   `playtest` sem caminho usam o mesmo resolvedor. Se o disco tem
   last-run com seed, `then` aponta a partida (número, chuva e look
   quando o candidato os nomeia) e o convite; nomear o endereço não
   observa. `executed` fica `false`. `runtime` lê o `node` do PATH se o
   play pede npm ou node; sem 20+ o prompt avisa. `session` aponta a
   partida simulada se o manifesto a declara; o prompt a nomeia. Não
   executa e não observa. Nomear não serve.
   Se o serve tenta abrir o navegador, o prompt nomeia a tentativa.
   Sem o marcador, pede Abrir. Nomear não abre.
   O `prompt` também sai em stderr;
   o JSON fica no stdout.
   **`roles <projeto>`** lê os papéis de áudio que o código declara, o
   `duckMs` que a tabela já lista, e os arquivos que os preenchem.
   Sem duck a chave some. Nomear não é mix ouvida. Se o
   `tools/mix.*` soma as vozes, o `roles` nomeia a soma. Soma no
   disco não é mix ouvida. Sem chave `mix`. Se o `tools/design-sfx.*`
   desloca a voz, o `roles` nomeia a voz que o sfx já desloca.
   Arquivo no disco não é mix ouvida. Sem chave `sfx`. Se o `tools/wav.*` lê o PCM, o `roles` nomeia o PCM que o wav já lê. Bytes no disco não são mix ouvida. Sem chave `wav`. Se a receita recusa que áudio AAA seja quantidade de arquivos, o `roles` nomeia a quantidade que a receita já recusa. Lista no disco não é mix. Sem chave `quantidade`. `--fill` sugere o acervo ou a ficha
   do stem do starter; `--apply` copia o id do acervo ou o stem
   do starter com créditos — e recoloca o WAV se o recibo já está
   e origem e licença casam. `sfx copy` continua o caminho explícito. Se o sidecar declara licença, o `sfx copy` nomeia os créditos que o copy já leva. Créditos no disco não são mix ouvida. Sem chave `sidecar`. Crescer o acervo é `sfx import` / `sfx seed`
   (ffmpeg); `sfx info` lê a ficha do acervo ou a chave do stem
   do starter — o recibo que lista um stem e o disco perdeu não
   é id desconhecido; se o inspect já mediu o pico, o `sfx info` nomeia o pico que o inspect já mede.
   Pico no recibo não é mix ouvida.    `sfx verify` nomeia os stems sem cruzar o que não
   existe e nomeia o stem que o recibo lista e o disco perdeu. Se o check cruza a integridade, o `sfx verify` nomeia a integridade que o check já cruza. Hash no disco não é mix ouvida. Sem chave `sha256`.
   `sfx verify` nomeia o som que o catálogo lista e o disco
   perdeu — não despeja errno;
   `sfx export` copia bytes e
   créditos e nomeia o stem que o recibo lista e o disco perdeu —
   exportar não inventa bytes. Se o export recusa processamento, o `sfx export` nomeia o processamento que o export já recusa. Bytes no disco não são mix ouvida. Sem chave `processamento`. Importar e exportar não é ouvir. `heard` é sempre falso. Papel vazio
   entra no `next` como `audio.roles` — o verbo mudo não espera os
   rascunhos.
   **`feel [<projeto>]`** lê constantes de perdão/hitstop/câmera no `CONFIG`,
   o peso do passo (`player.speed`, o avanço),
   as janelas da chuva (`practiceTicks`, `recoveryTicks`, o fecho) — o
   campo já as marca; o comando calava o passo — e o rumo que o
   coil do dash marca no corpo. Se o laço declara `attractMove`, o
   `feel` nomeia o corpo que a porta já desloca. Pose no disco
   não é peso percebido. Sem chave `attract`. Se o laço declara
   `lookAhead`, o `feel` nomeia a inclinação que o lookAhead já marca.
   Lean no disco não é peso percebido. Sem chave `lookAhead`. Se o `tools/probe.*`
   exercita as janelas de perdão, o `feel` nomeia o perdão que o probe já exercita.
   Conta no disco não é peso percebido. Sem chave `probe`. Se o laço senta a guarda, o `feel` nomeia o sit que a guarda já senta. Pose no disco não é peso percebido. Sem chave `bank`. Se o laço emite o término, o `feel` nomeia o land que o dash já emite. Pose no disco não é peso percebido. Sem chave `land`. Se a receita recusa que o autor sugerido seja quem jogou, o `feel` nomeia o autor que a receita já recusa. Recibo no disco não é sessão. Sem chave `autor`. Se a receita recusa que o valor seja constante universal, o `feel` nomeia o universal que a receita já recusa. Número no disco não é lei. Sem chave `universais`. Traço no disco não é peso percebido. Lê o
   recibo de observação no disco. Nomeia `then.play` e `then.note` sem
   executar. Com last-run, nomeia `then.seed` e `then.invite` — o mesmo
   endereço que `play` / `guide`. Sem comando de abrir, `then.play` some.
   Sem last-run, seed e invite somem. Não tem `prompt`. `felt` é sempre
   falso. Sem recibo, `next` propõe `feel.unobserved` e aponta o mesmo
   `note` que `then.note` — com `--from-run` se last-run existir. Sem
   caminho, o único jogo do laboratório basta.
   **`note [<projeto>]`** grava o recibo curto (cenário e papel por omissão)
   em `docs/playtest/<utc>/`. Sem caminho, o único jogo do laboratório
   basta; dois pedem o caminho. O comando do mapa sugere `--author` a partir
   do git ou do ambiente; não é quem jogou. `--from-run` anexa `docs/playtest/last-run.json`
   (resumo e, se houver, a curva) como candidato de medição e não fecha o
   achado. Nomeia `finding` (os quatro no recibo), `form` e `needed`.
   Sem `then`. Recibo sem os quatro não é achado. Os quatro no disco
   não observam. Se o disco tem last-run e o comando veio sem --from-run, o note nomeia o last-run que o disco já guarda. Sem o arquivo a frase some. Nomear não anexa. Não joga e não sente. Achar o único jogo não é ter sentido.
   **`access` / `save` / `budget`** leem opção de alcance (incluindo
   uiScale, remapeamento das seis ações do teclado na página — a escuta
   come a tecla que escolhe o verbo e o botão focado não dispara o
   ofício —, faixas que nomeiam o percentual vigente, pedido do sistema
   no meio da sessão (desligar o SO não apaga a caixa), preset de
   uma mão (desligar devolve o remap; save antigo não inventa tecla), assistência, velocidade da partida, tinta estável, região viva e pulso no aparelho), versão de save e artefato
   de orçamento. `save` relata `warned` se o disco nomeia sessão volátil
   (`persistLine`, `title_volatile`, `title_unsaved`) ou preferências
   ilegíveis (`settings_recovered`, `settings.broken`). Se o canvas
   pinta `settingsLine`, o `save` nomeia a recuperação. A pausa não.
   Texto no disco não é aba fechada. Sem chave `recovery`. Se o disco
   escuta `beforeunload`, o `save` nomeia o fechamento que o disco já grava.
   Gancho no disco não é aba fechada. Sem chave `beforeunload`. Se o disco verifica a gravação, o `save` nomeia a gravação que o storage já verifica. Escrita no disco não é aba fechada. Sem chave `storage`. A receita
   de persistência e alcance ensina o canvas da porta e do fim; a
   pausa não.    Na porta e no fim o canvas nomeia a lacuna do som
   que o painel já mostra. Se a casca declara `:focus-visible`,
   o `access` nomeia o foco que a receita já pede. Outline no
   disco não é sessão com o teclado. Se o `tools/contrast.*`
   amostra o stub, o `access` nomeia o contraste. Stub no
   disco não é sessão com o modo ativo. Sem chave `contrast`.
   Se o live anuncia o perigo à frente, o `access` nomeia o perigo que o live já anuncia.
   Texto no DOM não é sessão. Sem chave `threat`.
   Se o disco declara `paintCommands`, o `access` nomeia as teclas que a tabela já lista.
   Tabela no disco não é sessão. Sem chave `commands`.
   Se a porta lê a legenda que o mixer ainda guarda, o `access` nomeia a legenda que a porta já lê. Texto no disco não é sessão. Sem chave `caption`. Se a pesquisa recusa que acessibilidade seja gate de certificação, o `access` nomeia a certificação que a pesquisa já recusa. Opção no disco não é certificação. Sem chave `certificação`.
   Texto no disco não é mix ouvido.
   Nomear não é
   `trusted`. Trocar no stub não é sessão observada.
   Se o `tools/budget.*` declara `title.attract`, o `budget`
   nomeia a porta que a receita já cronometra. Stub no disco
   não é dispositivo. Sem chave `door`. Se o `tools/size.*`
   declara sem teto, o `budget` nomeia os bytes que o size já relata.
   Bytes no disco não são o quadro medido. Sem chave `size`. Se o `tools/budget.*` relata o pior percentil, o `budget` nomeia o percentil que a receita já pede.
   Relato no disco não é dispositivo. Sem chave `percentile`.
   `verified`/`trusted`/`measured` são sempre falsos.
   Falta no disco entra no `next` antes dos rascunhos.
   **`art` / `content` / `ship`** leem paleta ou art-bible vigente, mesas
   de chuva (`intervalTicks` e `fallSpeed` em data/tables/content), conteúdo
   fora do código (`palettes.json` e `tokens.json` não extraem) e passo de empacotar. Se o
   `tools/new-look.*` nasce o look, o `art` nomeia o look que o disco já nasce.
   Ferramenta no disco não é comparação em movimento. Sem chave `look`. Se o look recusa contraste, o `art` nomeia o contraste que o look já recusa. Alcance no disco não é comparação em movimento. Sem chave `contrast`. Se o canvas declara `drawTelegraph`, o `art` nomeia o trilho que o telegraph já marca.
   Marca no disco não é comparação em movimento. Sem chave `telegraph`. Se o canvas declara `drawVignette`, o `art` nomeia a vinheta que o recorte já marca. Recorte no disco não é comparação em movimento. Sem chave `vignette`. Se o sistema recusa que a paleta compartilhada seja o contrato, o `art` nomeia a paleta que o sistema já recusa. Lista no disco não é contrato. Sem chave `paleta`. Se a receita recusa que a mesa seja volume, o `art` nomeia o volume que a receita já recusa. Lista no disco não é comparação. Sem chave `volume`. Se o disco declara `listMoods`, o `content` nomeia o par. Nome no disco não é volume. Sem chave `moods`. Se o `tools/new-table.*` nasce a mesa, o `content` nomeia a mesa que o disco já nasce. Ferramenta no disco não é volume. Sem chave `table`. Se o disco declara `migrateTable`, o `content` nomeia a migração que as mesas já compartilham. Arquivo no disco não é volume. Sem chave `migrate`. Se `dist/VERSION.json` existe,
   `ship` relata nome e versão. Se `dist/` de um jogo web existe, relata
   árvore e HEAD. `consistent`/`enough`/`shipped`/`elsewhere` são
   sempre falsos. Sem declaração, o `next` nomeia `art.missing`,
   `content.inline` e `ship.unpacked` antes dos rascunhos. Árvore
   incompleta é `ship.incomplete`; artefato de outro commit é `ship.stale`.
   Nomeia a árvore que perdeu o `src/` que o projeto já tem. Se o
   `tools/size.*` declara sem teto, o `ship` nomeia o tamanho. Bytes
   no disco não são outra máquina. Sem chave `size`. Se o
   `tools/serve.*` nomeia a árvore exportada, o `ship` nomeia o banner que o serve já imprime.
   Banner no disco não é outra máquina. Sem chave `serve`. Se o `tools/export.*` declara o empacote, o `ship` nomeia o passo que o export já declara.
   Empacotar no disco não é outra máquina. Sem chave `export`. Se o `tools/export.*` recusa `file://`, o `ship` nomeia o file:// que o export já recusa. Recusar no disco não é outra máquina. Sem chave `file`. Se a receita recusa que a identidade seja outra máquina, o `tree` do ship nomeia a identidade que a receita já recusa. Árvore no disco não é entrega. Sem chave `identidade`. Se a receita recusa que o teste no editor demonstre o jogo exportado, o `artifact` do ship nomeia o editor que a receita já recusa. Manifesto no disco não é o jogo exportado. Sem chave `editor`. Nomear não
   devolve o jogo. Árvore completa no HEAD atual ganha `artifact_open` e o
   `next` nomeia `ship.artifact_open`. Nomear não executa. `elsewhere`
   continua falso.
   **`playtest [<projeto>]`** lê se o achado tem problema, evidência, hipótese
   e medição. Sem caminho, o único jogo do laboratório basta.
   `observed` e `outsider` são sempre falsos. `--invite` escreve
   a página para quem nunca viu o jogo; depois do fim a página mostra
   seed, pontos, eixos, a curva que o last-run já traçou e se o
   candidato foi simulado (`nearest-orb` vira `simulada`; `played`
   some). A faixa não leva a conta nem o relógio. Simulada não é
   alguém de fora. Oferece os quatro nomes para copiar ou gravar.
   Depois do fim a página rola até o painel. Rolar não é alguém de fora.
   Número na faixa não preenche os quatro. O achado copiado e
   gravado leva a faixa do last-run (seed, pontos, eixos e se
   foi simulado). Sem tally nem relógio. Markdown no disco não
   é alguém de fora. Copiar não grava. O
   Copiar nomeia o destino. Gravar já virava Achado no disco;
   o botão calava. Nomear não é alguém de fora. Sem a
   área de transferência, o Copiar baixa o markdown. Gravar anexa
   o candidato se last-run existir. Gravado não é alguém de fora.
   `next` aponta o convite depois do recibo de quem fez. O serve anuncia
   localhost e, se a máquina tiver outro endereço IPv4, a URL da rede —
   compartilhar essa URL não é alguém de fora. Se o serve prende o bind, o convite nomeia o bind que o serve já prende. Bind no disco não é alguém de fora. Sem chave `HOST`.
   A partida no serve grava
   o candidato em `docs/playtest/last-run.json`; a simulação também.
   Se o `tools/session.*` grava a simulação, o `playtest` nomeia a simulação.
   Traço no disco não é alguém de fora. Sem chave `session`.
   Se o `tools/serve.*` grava o recado, o `playtest` nomeia o recado que o serve já grava. Texto no disco não é alguém de fora. Sem chave `note`.
   Se o candidato nomeia a seed, `playtest` relata `candidate_seed`
   e `?seed=` abre essa partida, ignorando o hold. Se nomeia a
   chuva, relata `candidate_spawn`; se nomeia o look, relata
   `candidate_look`; se nomeia a curva, relata `candidate_curve`;
   se nomeia a origem, relata `candidate_policy` (`played` ou
   `nearest-orb`); se nomeia a conta, relata `candidate_tally`
   (pontos, coletas, quedas, erros e guardas). Se a pesquisa recusa que cinco playtesters sejam critério, o `candidate_tally` nomeia o cinco que a pesquisa já recusa. Conta no disco não é sessão observada. Sem chave `cinco`. Se a receita recusa que o aperto seja curva observada, o `candidate_curve` nomeia o aperto que a receita já recusa. Número no disco não é sessão. Sem chave `aperto`. A simulação não
   sobrescreve `played` sem `--force`.
   O convite junta mesa e paleta. Nenhum dos
   dois é sessão observada.    Recibo sem forma entra no
   `next` como `playtest.unstructured`: a proposta aponta a
   página (`/?invite=1#finding` ou a url do serve com o
   convite) e `note --field`. O comando nomeia o endereço;
   o serve nu não abre o painel. Sem o
   convite o âncora some. `playtest` só lê.
   Nomeia `finding_open` (a url do serve com o convite, ou o
   mesmo endereço sem serve), `form` (esqueleto dos quatro) e
   `fields`. Sem `then`. Esqueleto no disco não é achado.

Fontes detalhadas sob demanda: [mapa dos estudos](references/sources.md).
Comandos, limites e adoção: [README](README.md).