1 Commits

Author SHA1 Message Date
8477ea698b Repoint every stale TODO.md citation in the tree
Some checks failed
libakgl CI Build / cmake_build (push) Successful in 7m48s
libakgl CI Build / memory_check (push) Successful in 12m49s
libakgl CI Build / performance (push) Failing after 41m22s
libakgl CI Build / mutation_test (push) Successful in 27m0s
A sweep of all 265 tracked files, not just the ones the migration touched.

Two cross-repository citations named deps/libakerror/TODO.md item 8, a
numbering that has not existed for two releases; both now name libakerror
issue #18. Three tutorial and plan references pointed at TODO.md for defects
that are tracked: the invisible-on-frame-one actor is #39, the control map
traps are #81, and the pkg-config gap is #17.

plan.md is a live instruction document for writing the manual and still told
its reader to file findings in TODO.md; it says the tracker now.

Filed while sweeping: a zeroed akgl_ControlMap matches gamepad South, because
SDL_GAMEPAD_BUTTON_SOUTH is 0 and the two arms of the match are one
expression, and handler_on/handler_off are called without a NULL check. Both
are documented as workarounds in chapter 21 and neither had an issue. #81.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Andrew Kesterson <andrew@aklabs.net>
2026-08-02 22:01:27 -04:00
5 changed files with 14 additions and 15 deletions

View File

@@ -297,8 +297,8 @@ backend vtable entry or an SDL callback must match a signature whether it reads
every argument or not, and 4 `-Wimplicit-fallthrough` from libakerror's own every argument or not, and 4 `-Wimplicit-fallthrough` from libakerror's own
`PROCESS`/`HANDLE`/`HANDLE_GROUP`, which fall through between `case` labels by `PROCESS`/`HANDLE`/`HANDLE_GROUP`, which fall through between `case` labels by
design. Adopting it today would mean disabling both permanently to gain 5 design. Adopting it today would mean disabling both permanently to gain 5
`-Wsign-compare`. The fallthrough half is filed upstream as `-Wsign-compare`. The fallthrough half is filed upstream as `libakerror` issue #18;
`deps/libakerror/TODO.md` item 8; revisit when that lands. revisit when that lands.
**Vendored code is exempt, not fixed.** `deps/semver/semver.c` is listed **Vendored code is exempt, not fixed.** `deps/semver/semver.c` is listed
directly in `add_library(akgl ...)`, so the target's `PRIVATE` options reach it; directly in `add_library(akgl ...)`, so the target's `PRIVATE` options reach it;

View File

@@ -62,7 +62,7 @@ endif()
# reads every argument or not, and 4 -Wimplicit-fallthrough from libakerror's # reads every argument or not, and 4 -Wimplicit-fallthrough from libakerror's
# own PROCESS/HANDLE/HANDLE_GROUP, which fall through between case labels by # own PROCESS/HANDLE/HANDLE_GROUP, which fall through between case labels by
# design. Adopting it would mean disabling both permanently to gain 5 # design. Adopting it would mean disabling both permanently to gain 5
# -Wsign-compare. See deps/libakerror/TODO.md item 8. # -Wsign-compare. See libakerror issue #18.
if(AKGL_COVERAGE) if(AKGL_COVERAGE)
if(NOT CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") if(NOT CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")

View File

@@ -1064,8 +1064,7 @@ Add one line where you set up the player:
The default facing logic clears every facing bit and sets one from the *movement* bits — so The default facing logic clears every facing bit and sets one from the *movement* bits — so
an actor that stops moving is left facing nowhere. Its state drops to bare `ALIVE`, which an actor that stops moving is left facing nowhere. Its state drops to bare `ALIVE`, which
your character has no sprite for, and it stops being drawn. Clearing this field leaves the your character has no sprite for, and it stops being drawn. Clearing this field leaves the
facing bits wherever the control handlers put them. Making the default behave is tracked in facing bits wherever the control handlers put them. Making the default behave is issue #39.
`TODO.md`.
Run now. The arrow keys walk the player, the run animation plays, and the player stops at Run now. The arrow keys walk the player, the run animation plays, and the player stops at
walls. walls.

View File

@@ -997,10 +997,10 @@ Three things to get right, all of them cheap:
- **Zero the struct first.** A binding is a struct copied into the map, so a stack local is - **Zero the struct first.** A binding is a struct copied into the map, so a stack local is
fine — but an uninitialized field is a match against garbage. fine — but an uninitialized field is a match against garbage.
- **`handler_off` must be non-`NULL`.** `akgl_controller_handle_event` calls it without - **`handler_off` must be non-`NULL`.** `akgl_controller_handle_event` calls it without
checking. `jrpg_cmhf_ignore` is a handler that does nothing, which is what you want on the checking, which is the other half of issue #81. `jrpg_cmhf_ignore` is a handler that does nothing, which is what you want on the
release of a key whose press is the whole action. release of a key whose press is the whole action.
- **Set `button` to `SDL_GAMEPAD_BUTTON_INVALID`.** The keyboard and gamepad arms of the - **Set `button` to `SDL_GAMEPAD_BUTTON_INVALID`.** The keyboard and gamepad arms of the
match are evaluated together, and 0 is a real button. Recorded in `TODO.md`; until it is match are evaluated together, and 0 is a real button. That is issue #81; until it is
settled, name a button no gamepad reports. settled, name a button no gamepad reports.
Run now. Standing near the elder and pressing Space opens their line; pressing it again Run now. Standing near the elder and pressing Space opens their line; pressing it again

16
plan.md
View File

@@ -45,7 +45,7 @@ JRPG — with akbasic's harness ported so no sample in it can rot.
| Tutorial assets | Vendor a curated Kenney.nl **CC0** subset, with `LICENSE`, a provenance manifest, and a refresh script | | Tutorial assets | Vendor a curated Kenney.nl **CC0** subset, with `LICENSE`, a provenance manifest, and a refresh script |
| Tutorial code | Real compiling, runnable targets under `examples/`, built by default and in CI | | Tutorial code | Real compiling, runnable targets under `examples/`, built by default and in CI |
| Existing `README.md` | Split: the FAQ half seeds `docs/` (corrected); the developer-process half stays | | Existing `README.md` | Split: the FAQ half seeds `docs/` (corrected); the developer-process half stays |
| Known defects | Documented inline in the owning chapter, cross-referenced to `TODO.md` | | Known defects | Documented inline in the owning chapter, cross-referenced to the issue that tracks it |
--- ---
@@ -188,7 +188,7 @@ cannot anticipate:
`include/akgl/error.h`. `include/akgl/error.h`.
- **`akgl.pc` names no dependencies at all** — no `Requires:` — despite `akerror.h` being - **`akgl.pc` names no dependencies at all** — no `Requires:` — despite `akerror.h` being
part of libakgl's public interface. Chapter 03 says so and gives the flags to add by part of libakgl's public interface. Chapter 03 says so and gives the flags to add by
hand. (`TODO.md`.) hand. (Issue #17.)
--- ---
@@ -352,7 +352,7 @@ a hazard. Exercises arcade physics, `physics.gravity.y`, `AKGL_ACTOR_STATE_MOVIN
tilemap layers, and a custom `movementlogicfunc` (which is where `AKGL_ERR_LOGICINTERRUPT` tilemap layers, and a custom `movementlogicfunc` (which is where `AKGL_ERR_LOGICINTERRUPT`
stops being a table row and becomes something the reader writes). stops being a table row and becomes something the reader writes).
This game forces the chapter to make three honest statements, all from `TODO.md`: This game forces the chapter to make three honest statements, all from the defect record:
- **`akgl_physics_arcade_collide` is not implemented** — it raises `AKERR_API`, and - **`akgl_physics_arcade_collide` is not implemented** — it raises `AKERR_API`, and
`akgl_physics_simulate` never calls `collide` at all. `arcade_move` does no clamping and `akgl_physics_simulate` never calls `collide` at all. `arcade_move` does no clamping and
@@ -433,7 +433,7 @@ covers.
This plan does not fix it — replacing test fixtures is a separate change with its own blast This plan does not fix it — replacing test fixtures is a separate change with its own blast
radius, and it is not blocking the docs. It does two things: the tutorial assets get a clean radius, and it is not blocking the docs. It does two things: the tutorial assets get a clean
provenance story that does not depend on those files, and the finding goes into `TODO.md` provenance story that does not depend on those files, and the finding goes into the tracker
with file, functional consequence and blast radius, per the house practice of documenting with file, functional consequence and blast radius, per the house practice of documenting
defects against yourself. defects against yourself.
@@ -473,12 +473,12 @@ project exists to fix is documentation asserting things nobody checked:
`norun` block is a decision that has to be justified. `norun` block is a decision that has to be justified.
4. **Do not restate signatures** — link the Doxygen reference, or `excerpt=` the header. 4. **Do not restate signatures** — link the Doxygen reference, or `excerpt=` the header.
5. **Note the known defect where a reader would hit it**, with the guard to apply, linked 5. **Note the known defect where a reader would hit it**, with the guard to apply, linked
to `TODO.md`. to its issue.
Wave 2 is the integration pass, and the only genuinely serial step: build the TOC, insert Wave 2 is the integration pass, and the only genuinely serial step: build the TOC, insert
cross-references between chapters and both tutorials, verify no chapter re-teaches upstream cross-references between chapters and both tutorials, verify no chapter re-teaches upstream
material, reconcile terminology, cut the README's FAQ half, add the `TODO.md` entries, then material, reconcile terminology, cut the README's FAQ half, file the issues the writing turned
run the full gate. up, then run the full gate.
## Verification ## Verification
@@ -516,7 +516,7 @@ Specific things that must hold before this is done:
## Out of scope, deliberately ## Out of scope, deliberately
- Replacing the RPG-Maker-named test fixtures (recorded in `TODO.md` instead). - Replacing the RPG-Maker-named test fixtures (issue #52 instead).
- Fixing the false claims in `physics.h` and `registry.h`. The chapters document what the - Fixing the false claims in `physics.h` and `registry.h`. The chapters document what the
code *does*; correcting the header comments is a separate commit, since `AGENTS.md` code *does*; correcting the header comments is a separate commit, since `AGENTS.md`
requires style and behaviour changes to stay unbundled. requires style and behaviour changes to stay unbundled.