cc-libs/docs/adrs/adr-0008-keep-tests-runnable-in-craftos-and-in-game.md
2026-06-08 05:10:31 +02:00

38 lines
1.9 KiB
Markdown

# ADR 0008: Keep Tests Runnable In CraftOS And In-Game
## Status
Accepted
## Date
2026-06-08
## Context
The initial CraftOS-PC harness proved that repository code can be tested locally, but the first shell recipe also owned too much suite behavior: explicit test lists, per-case rendering, and success formatting. That made the host shell script more complex than necessary and tied test orchestration to CraftOS-PC launch details.
At the same time, tests in this repository are still ComputerCraft programs. They should be useful in CraftOS-PC and in-game, not only inside a host-side shell loop.
## Decision
Keep `/apis/libtest.lua` focused on test cases and assertions. It must stay usable from normal ComputerCraft programs in CraftOS-PC or in-game.
Move suite orchestration into `/programs/runtest.lua`. The runner discovers tests under `/tests`, invokes each script with `shell.run`, renders grouped `--pretty` output, emits additional `--verbose` diagnostics, prints `__TRAPOS_TEST_OK__` only after the full suite passes, and can shut down when the host harness asks with `--shutdown`.
Keep the `Justfile` minimal. It launches CraftOS-PC, mounts repository directories, enforces the process timeout, checks for the success marker, and prints runner output files. It should not know about individual test files or cases.
## Consequences
- Tests using `libtest` remain plain ComputerCraft programs.
- `/programs/runtest.lua` can be run inside CraftOS-PC or in-game when `/tests` and dependencies are present.
- Pretty colors and grouped suite output are runner concerns, not `libtest` concerns.
- Verbose mode is reserved for debugging and agent work loops, while `--pretty` is the normal human-readable mode.
- Host-specific concerns remain outside production Lua code.
## Future Work
- Add test selection filters when the suite grows.
- Add runner-level timing if slow tests become hard to diagnose.
- Add more `libtest` assertions only when real tests need them.