Files
security-game/docs/adr/0009-radial-action-menu.md
T
zwitschi 6684d36739
Full build / Import + headless tests (push) Successful in 26s
Full build / Full desktop build + optional release (push) Failing after 3m58s
Fix release publishing and add a CI token fallback
Tag builds since v0.2.2 built all artifacts but never published a release:
- tools/publish_release.sh only assembled AUTH in the GITEA_TOKEN branch; the
  ~/.git-credentials branch set CRED and then used an unbound ${AUTH[@]} under
  `set -u`, so every API call failed and the job ended "could not create or find
  release". It now sets AUTH=(-u "$CRED").
- The repo has no GITEA_TOKEN secret and the runner has no git credentials, so the
  workflow now falls back to the built-in workflow token:
  GITEA_TOKEN: ${{ secrets.GITEA_TOKEN || github.token }}.

v0.2.9 was then built and published locally with all five artifacts (portable
Linux/Windows/macOS, NSIS installer, AppImage) and the release page verified via
the API. v0.2.4-v0.2.8 remain unpublished; they are superseded by the latest.

Docs
- docs/RELEASING.md records the incident and the local-publish fallback.
- TODO gains a release-pipeline follow-up (verify CI on the next tag).
- MEMORY notes the root cause, the missing secret, and which releases exist.
- Version 0.2.10.
2026-10-31 21:23:09 +01:00

3.3 KiB
Raw Permalink Blame History

ADR-0009: Radial action menu

  • Status: Accepted
  • Date: TBD

Context

NPC verbs in the prototype live on Q, E, W, 1–6, and R. That is a cheat sheet. It also collides with walk keys (ADR-0007). The design wants the player to look at a person (ADR-0008) and then choose the lowest useful action, not memorize a number row.

Inspection, wand screening, and radio already have their own panels. Emergency radio already has a hold-to-confirm on R because a misclick is costly. Those panels should stay. What is missing is a single, visible way to pick the verb.

Decision

When someone is in focus, left mouse button or Space opens a round doughnut menu in the center of the screen. The click that opens it does not pick a slice. If nobody is in focus, do not open; keep the existing "aim first" log line.

Slices, clockwise from the top, lowest escalation first:

  1. Raise hand (stop / wait)
  2. Point away
  3. Head shake
  4. Polite direction
  5. Inspect access
  6. Wand (grey if the venue has no wand)
  7. Formal warning
  8. Block
  9. Radio assist

Emergency is not on the wheel. It stays on R with the existing hold-to-confirm panel.

While the menu is open, walk and look freeze (ADR-0007) and the cursor is visible. Highlight follows the mouse angle over the ring, or steps with A / D or the left / right arrows, wrapping around. The center shows the focused person's display_name.

Confirm: click a slice, or Space on the highlighted slice. The menu closes, the mouse is recaptured, and that action runs. Inspect, wand, and radio assist close the wheel and then open the existing panels. Walk and look stay frozen until that panel closes.

Cancel: Esc or right mouse button. The menu hides. No action runs. No recorder event. Focus and the focus circle stay. The mouse is recaptured.

Number keys 1–6 may remain as shortcuts when the wheel is closed, so existing smoke tests still work. They must not fire while the wheel is open.

Consequences

Positive

  • The player sees the verbs in de-escalation order instead of recalling a number row.
  • Mouse and keyboard both work (click, or arrows / A/D then Space).
  • Cancel is explicit and leaves no incident noise.
  • Emergency cannot be picked by a bad slice click.
  • Inspect, wand, and radio keep the panels already tested.

Negative

  • Nine slices is dense on a 1280×720 view. Labels must stay short.
  • Freeze-until-panel-closes stops the player sidestepping during an ID check.
  • Keeping 1–6 as hidden shortcuts can confuse if the README leads with them. Document the wheel first.

Alternatives considered

  • Hold-to-open, release-to-confirm (GTA / Destiny): Rejected. The requested input is click or Space to open, then click or Space to confirm, with Esc / RMB to abort. That is a toggle, not a hold.
  • Vertical list / command menu: Rejected because a round layout around a focused person matches the focus circle and reads faster in a crowd.
  • One context-sensitive Use key: Rejected; the game is about choosing among levels, not a single default verb.
  • Emergency on the wheel: Rejected because a misclick would dispatch armed response. ADR-0002 already keeps that path rare and confirmed.
  • Drop number-key shortcuts immediately: Deferred. They remain as a closed-menu fallback until the wheel is proven in play.