Point AGENTS.md at the issue tracker for outstanding work
Some checks failed
libakgl CI Build / cmake_build (push) Successful in 11m45s
libakgl CI Build / memory_check (push) Successful in 14m58s
libakgl CI Build / performance (push) Failing after 33m46s
libakgl CI Build / mutation_test (push) Successful in 26m43s

The rules section now says where new work goes: an issue on the forge, with the
file and line, the functional consequence, and what closing it would touch,
carrying status::grooming until its scope is settled. TODO.md is the record of
decisions and measurements, and adding outstanding items back to it is what the
split exists to prevent -- a description of work still to do goes stale the
moment somebody does it.

Two rules go with it. Say what you learn about an open issue in the issue,
because an issue nobody has re-checked is worth what an unverified comment is
worth. And file a dependency's defect against that dependency rather than
working around it here.

The 'do not trust a comment, a TODO entry, or a CI exclusion' lesson keeps its
evidence and gains the three entries found stale during the migration.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-02 19:24:20 -04:00
parent eabb9ad376
commit 963d511224

View File

@@ -124,7 +124,7 @@ Every suite runs in every job. The `character` suite used to be excluded from
the coverage and memory-check jobs on the grounds that it failed deliberately. the coverage and memory-check jobs on the grounds that it failed deliberately.
It did not: it was reporting success while running one of its four tests, for It did not: it was reporting success while running one of its four tests, for
two independent reasons, and both are fixed. See TODO.md, "Test suites that two independent reasons, and both are fixed. See TODO.md, "Test suites that
could not fail". could not fail", which is the record of how that happened.
## Coding Style ## Coding Style
@@ -549,12 +549,13 @@ cheap to check and expensive to assume.
a bit that is **not** set whose value is **not** 1. The obvious test passes a bit that is **not** set whose value is **not** 1. The obvious test passes
either way. either way.
- **Do not trust a comment, a TODO entry, or a CI exclusion that states a - **Do not trust a comment, an issue, or a CI exclusion that states a
premise.** Verify it. `tests/character.c` was excluded from two CI jobs and premise.** Verify it. `tests/character.c` was excluded from two CI jobs and
from the mutation harness because it "fails deliberately". It did not: it was from the mutation harness because it "fails deliberately". It did not: it was
exiting 0 while running one of its four tests. `TODO.md` carried eleven exiting 0 while running one of its four tests. `TODO.md`, when it still held
entries describing code that had already changed. A premise nobody has outstanding work, carried eleven entries describing code that had already
re-checked is where the next defect is hiding. changed, and three more were found stale when it was migrated to the tracker.
A premise nobody has re-checked is where the next defect is hiding.
- **When a measurement moves, say what you measured.** Absolute benchmark - **When a measurement moves, say what you measured.** Absolute benchmark
numbers drift with the machine. The `akgl_game_update` fix is recorded as the numbers drift with the machine. The `akgl_game_update` fix is recorded as the
@@ -564,6 +565,19 @@ cheap to check and expensive to assume.
## Rules ## Rules
- **Outstanding work goes in the issue tracker, not in a file.** Open an issue at
<https://source.starfort.tech/andrew/libakgl/issues> — `tea issues create --repo andrew/libakgl`
— with the file and line it touches, the functional consequence, and what closing it would
touch. Label it by kind and blast radius, and leave `status::grooming` on it until its scope
and approach are settled. **Do not add outstanding items to `TODO.md`**; that file is the
record of decisions, measurements and defects already closed, and the reason for the split is
that a description of work still to do goes stale the moment somebody does it.
- **When you learn something about an open issue, say so in the issue** — including that it is
worse than recorded, that it is already fixed, or that its premise has expired. An issue
nobody has re-checked is worth what an unverified comment is worth.
- **A defect in a dependency is filed against that dependency**, not worked around here.
`libakerror`, `libakstdlib` and `akbasic` all have trackers on the same forge. Comment the
workaround at its site with the words "filed upstream" and delete it when the fix lands.
- Add yourself (agent program name, model name and version) as a co-author on every commit message - Add yourself (agent program name, model name and version) as a co-author on every commit message
- Avoid dynamic memory allocation. Use the `akgl_heap_*` methods to retrieve necessary objects at runtime, and to release them when done. If the akgl heap facilities don't provide the kind of object needed, create a new heap layer to support that type of object. - Avoid dynamic memory allocation. Use the `akgl_heap_*` methods to retrieve necessary objects at runtime, and to release them when done. If the akgl heap facilities don't provide the kind of object needed, create a new heap layer to support that type of object.