> For the complete documentation index, see [llms.txt](https://docs.kouch.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kouch.dev/docs/go_public_checklist.md).

# Go-public checklist

Kouch is private while it contains local test data and an unreviewed brand blocklist (see `CLAUDE.md` ground rules 1 and 6). Complete every item below before flipping the GitHub repository from private to public.

* [ ] **Scrub `profiles/`.** `profiles/` is excluded from `brand-lint` and contains real local paths, real emulator names, and possibly real ROM/BIOS folder locations from contributors' machines. Either remove every profile except `profiles/example.generic.json`, or rewrite each one to use placeholder paths and generic names. If any sensitive value ever reached a **past** commit, `git filter-repo` (or equivalent history rewrite) is required — a plain deletion in a new commit is not enough, since the repo's full history goes public too. Any controller-type icons the private profiles carry (ADR 0024) go with them.
* [ ] **Choose a license.** Replace the "all rights reserved" placeholder in `LICENSE` with the license the owner has actually chosen, and update `CONTRIBUTING.md`'s contributor-assignment note to match (either a CLA/DCO process or a statement that contributions are licensed under the new terms).
* [ ] **Review and finalize `docs/brand-blocklist.txt`.** Confirm the owner has reviewed the draft (see `docs/brand-blocklist.README.md`) and the "DRAFT" header has been removed or replaced with a reviewed-by note.
* [ ] **Run brand-lint in blocking mode.** In `.github/workflows/ci.yml`, remove `BRAND_LINT_MODE=warn` from the `npm run brand-lint` step so CI fails on any hit, then fix or explicitly `allow:` every result until the workspace (`app/**`, `crates/**`, `docs/**`, `README.md`, `CLAUDE.md`) is clean. Also run it once by hand over the full repo, not just `app/ui/`, since CI only lints what its steps cover.
* [ ] **Review screenshots and recorded media.** Check every image in `docs/`, issue/PR history, and any devlog posts for window titles, file paths, ROM/game names, or anything else that would leak local machine details or brand names once public.
* [ ] **Remove local paths from docs.** Search `docs/**`, `README.md`, and `CLAUDE.md` for anything that looks like a contributor's local filesystem path (`C:\Users\...`, `/home/...`, Dropbox folder names) and replace it with a placeholder.
* [ ] **Rotate any tokens.** Any API token, webhook secret, or credential that was ever pasted into an issue, PR, commit message, or committed file (even temporarily) must be rotated/revoked before the history goes public, since history becomes visible along with the current tree.
* [ ] **Confirm `steam_appid.txt` was never committed.** It's generated by `app/src-tauri/build.rs` and gitignored (`**/steam_appid.txt`); check git history for an accidental commit and purge it if found.
* [ ] **Neutral controller names everywhere, not the SDK's.** `ControllerKind` (`crates/kouch-core`) still has variants named after the SDK's input types for some third-party pads (the pro-style pads were already renamed `MotionPro`/`MotionPro2`). The same names travel as strings in the UI contract: `DeviceType` in `app/ui/src/ipc/types.ts`, the `device_type` of `nav:input`/`pointer:input` and `Player`, the i18n `devices.*` keys, and the glyph family keys. brand-lint doesn't catch these. Rename them to Kouch's neutral classes (the silhouette names in `app/ui/src/lib/devices.ts`: `pad-standard`, `pad-touchpad`, …) in one coordinated change across `kouch-core`, `kouch-input`, the shell and the UI. Already neutral: the report's `pads[].class` and the "controller connected" log line (`input::device_class`).
* [ ] **The rumble upgrade's branded pad name (ADR 0023).** The ViGEmBus second target shows the emulator a branded device name, and private binding templates under `profiles/` may carry it. Rewrite or remove those bindings. Confirm the brand term in code is still only the one aliased `use` line in `crates/kouch-vpad/src/vigem.rs`, allowed by one `allow:` rule in `docs/brand-blocklist.txt`.
* [ ] **Realistic controller icons (ADR 0025).** Re-inspect every realistic icon at full size for marks (logos, wordmarks, lettering). The store page, trailers and screenshots use the Simple set or no controller imagery.
* [ ] **Re-read `CLAUDE.md` ground rules 1 and 2** one more time against the current tree as a final sanity pass before flipping visibility.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.kouch.dev/docs/go_public_checklist.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
