Point the agent instructions at the issue tracker for outstanding work
Some checks failed
akbasic CI Build / cmake_build (push) Failing after 3m36s
akbasic CI Build / sanitizers (push) Failing after 4m39s
akbasic CI Build / coverage (push) Failing after 4m36s
akbasic CI Build / mutation_test (push) Failing after 3m57s
akbasic CI Build / akgl_build (push) Failing after 4m51s
Some checks failed
akbasic CI Build / cmake_build (push) Failing after 3m36s
akbasic CI Build / sanitizers (push) Failing after 4m39s
akbasic CI Build / coverage (push) Failing after 4m36s
akbasic CI Build / mutation_test (push) Failing after 3m57s
akbasic CI Build / akgl_build (push) Failing after 4m51s
This repository has no AGENTS.md; CLAUDE.md and MAINTENANCE.md carry the same rules, so both are updated. Outstanding work is an issue on the forge now, with the file and line, the functional consequence, and what closing it would touch. TODO.md is the record -- settled design decisions, the deviation register, defects already fixed, and the reasoning behind the measurements -- and its row in CLAUDE.md's reading table says so, with the tracker listed above it. The dependency rule gains the correction this migration produced. 'Never work around a missing dependency capability here' now says to open an issue in that repository's tracker, and says plainly that recording it here instead is not filing it: two akgl_ui gaps sat in TODO.md for a release on the reasoning that changing a submodule is that repository's decision, which is true of changing it and not of reporting it. Both are libakgl issues now. Cross-repository citations of deps/*/TODO.md sections point at the trackers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -38,8 +38,8 @@ the idiom of the `ak*` C libraries it builds on.
|
||||
|
||||
2. **Finish the language.** The full Dartmouth BASIC and Commodore 128 BASIC 7.0 verb and
|
||||
function set. `deps/basicinterpret/README.md` ends with the original's list of what was
|
||||
unimplemented, and that list was the work queue. What remains is in `TODO.md` and is
|
||||
summarised for a BASIC programmer in `docs/13-differences.md`. A few entries are
|
||||
unimplemented, and that list was the work queue. Every group of it is done; what remains is
|
||||
in the issue tracker and is summarised for a BASIC programmer in `docs/13-differences.md`. A few entries are
|
||||
deliberately out of scope on a modern PC — `BANK`, `FAST`, `MONITOR`, and `SPRDEF`, which
|
||||
is an interactive editor rather than a programmable verb. Keep that reasoning rather than
|
||||
reviving them.
|
||||
@@ -60,9 +60,12 @@ the idiom of the `ak*` C libraries it builds on.
|
||||
### Missing capabilities get filed upstream, not worked around
|
||||
|
||||
**When `libakgl` — or `libakstdlib` — cannot supply something a verb needs, do not work
|
||||
around it here.** Add a numbered item to that repository's `TODO.md` describing the missing
|
||||
API: what the BASIC verb requires, what the `akgl_*` or `aksl_*` entry point should look
|
||||
like, and what tests would cover it. Follow the prose-paragraph style of the entries already
|
||||
around it here.** Open an issue in that repository's tracker on
|
||||
<https://source.starfort.tech> describing the missing API: what the BASIC verb requires, what
|
||||
the `akgl_*` or `aksl_*` entry point should look like, and what tests would cover it.
|
||||
**Recording it in this repository instead is not filing it** — two `akgl_ui` gaps sat in
|
||||
`TODO.md` for a release on the reasoning that changing a submodule is that repository's
|
||||
decision, which is true of *changing* it and not of *reporting* it. Follow the prose-paragraph style of the entries already
|
||||
there. Growing the dependency to serve the interpreter is a wanted outcome, not a detour.
|
||||
|
||||
It works. Four gaps were filed this way — text measurement, immediate-mode drawing, audio,
|
||||
@@ -324,7 +327,7 @@ parameters but not all of them fails the run. Every public declaration under
|
||||
|
||||
`CMakeLists.txt` declares `AKBASIC_TESTS`, `AKBASIC_WILL_FAIL_TESTS` and
|
||||
`AKBASIC_KNOWN_FAILING_TESTS`. The first must exit 0. The second aborts by design. The
|
||||
third **asserts the correct contract for a defect that is documented in `TODO.md`** and is
|
||||
third **asserts the correct contract for a defect that has an open issue** and is
|
||||
expected to fail.
|
||||
|
||||
A green `ctest` therefore does not mean defect-free. When a known-failing test starts
|
||||
@@ -336,7 +339,7 @@ there when it is next needed.
|
||||
|
||||
The dependencies use the same split under their own prefixes: `AKSL_TESTS` /
|
||||
`AKSL_WILL_FAIL_TESTS` / `AKSL_KNOWN_FAILING_TESTS`, and `AKERR_TESTS` /
|
||||
`AKERR_WILL_FAIL_TESTS`. `libakstdlib` 0.2.0 fixed all six defects its `TODO.md` §2.1 listed
|
||||
`AKERR_WILL_FAIL_TESTS`. `libakstdlib` 0.2.0 fixed all six defects it had confirmed
|
||||
and left `AKSL_KNOWN_FAILING_TESTS` empty.
|
||||
|
||||
### Test target names
|
||||
@@ -351,7 +354,8 @@ name. That is not cosmetic: `add_executable` creates a dependency's targets even
|
||||
`tests/reference/` is the Go implementation's own acceptance suite, byte-compared.
|
||||
**Nothing in it is ever edited to suit this interpreter.** If a case fails, either this
|
||||
interpreter is wrong or the divergence is deliberate — and a deliberate one goes in
|
||||
`TODO.md` and `docs/13-differences.md`, not into the expectation file. `tests/reference/README.md`
|
||||
`tests/reference/README.md`'s divergence table and `docs/13-differences.md`, not into the
|
||||
expectation file. `tests/reference/README.md`
|
||||
says the same thing at more length.
|
||||
|
||||
`tests/language/` is ours and may be changed freely. A new language feature needs a
|
||||
@@ -463,7 +467,8 @@ is there so the question "between them *where*" has an answer.
|
||||
Breakout reaches the high end of that bracket for a reason worth knowing: two of its eight
|
||||
sprites *are the screen*, a captured HUD strip and a captured play field, so the field's box
|
||||
covers everything and the bounding-box reject can never throw those pairs out. That is
|
||||
`TODO.md` §9 item 9, and fixing it would take this row down as a side effect.
|
||||
the sprite-slot cost recorded in `TODO.md` §9 item 9, and fixing it — issue #23 — would take
|
||||
this row down as a side effect.
|
||||
|
||||
**Read a benchmark as a gap between two rows of the same run, not as an absolute.** libakgl's
|
||||
`PERFORMANCE.md` records a whole laptop reading 15% high on a later run, including rows nothing
|
||||
@@ -553,7 +558,7 @@ stale:
|
||||
| `__AKERR_ERROR_NAMES` | `akerr_name_for_status()`; the table is private to the library now |
|
||||
| `AKERR_STATUS_RANGE_OK` / `AKERR_STATUS_NAME_OK` | success is a `NULL` `akerr_ErrorContext *`, like everything else |
|
||||
|
||||
`libakerror`'s own `TODO.md` §2 says the limit plainly: ownership enforcement covers *naming*,
|
||||
`libakerror`'s own tracker says the limit plainly (its issue #4): ownership enforcement covers *naming*,
|
||||
which is the part the library mediates. It cannot detect two components compiling the same
|
||||
integer into a `HANDLE` `case` label without ever registering a name — that never reaches the
|
||||
registry. §3 adds that there is no way to ask who owns a status or to enumerate reservations,
|
||||
|
||||
Reference in New Issue
Block a user