# report_issue

> **Tool `tools/triage/report_issue.py`** (program, Triage). List a port's reports, and file one as a GitHub issue, once per place.

Run it with `./gameframe run report_issue ARGS` or `python3 tools/triage/report_issue.py`. [Source on GitHub](https://github.com/tanepiper/game-frame/blob/main/tools/triage/report_issue.py).

## Its own help

This is the help text in the tool itself, as `./gameframe tool report_issue` prints it.

```text
List a port's reports, and file one as a GitHub issue, once per place.

A port built with GameFrame's `gameframe-report` crate writes a report the first time the game
reaches a path it has not ported, or crashes: `<id>.json` and `<id>.md` in its reports folder
(`unported-3f2a19c0.json`). The Markdown is the issue's body, laid out for an agent to debug from.
Any other tool may write the same JSON (the crate's README has its fields).

Usage:
  report_issue.py list [DIR]                    the reports, most frequent first (default DIR: reports)
  report_issue.py show REPORT                   the issue's title and body
  report_issue.py file REPORT [--repo OWNER/NAME] [--dry-run]

  REPORT     a report's .json file, or its id in the reports folder
  --repo     where the issue goes; default the report's own `meta.issues`, then gh's current repo
  --dry-run  print the gh commands instead of running them

`file` looks for an open issue whose body holds the report's id
(`<!-- gameframe-report: ID -->`). When there is one, it adds a comment with the new count.
Otherwise it opens an issue with the labels `gameframe-report` and the report's kind, making the
labels when the repository lacks them. It needs `gh`, signed in.

What it does not do: it does not read a running game, and it does not post anything in `list`
or `show`. Filing is up to you: a report in Dev mode stays on this machine until you run `file`.
Standard library only.
```

## Named by

Skills: [re-start](/skills/re-start).
