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:
26
CLAUDE.md
26
CLAUDE.md
@@ -23,7 +23,8 @@ scripting engine for game authors.
|
|||||||
| Read | For |
|
| Read | For |
|
||||||
|---|---|
|
|---|---|
|
||||||
| [`MAINTENANCE.md`](MAINTENANCE.md) | Everything above. Start here |
|
| [`MAINTENANCE.md`](MAINTENANCE.md) | Everything above. Start here |
|
||||||
| [`TODO.md`](TODO.md) | Outstanding defects, with file, line and consequence. §0.1 first — it retires the byte-for-byte fidelity constraint several later sections were written on |
|
| [the issue tracker](https://source.starfort.tech/andrew/akbasic/issues) | **Outstanding defects and gaps.** Labelled by kind and blast radius; `status::grooming` means the scope is not settled yet |
|
||||||
|
| [`TODO.md`](TODO.md) | The record: settled design decisions, the deviation register, defects already fixed, and the reasoning behind the measurements. §0.1 first — it retires the byte-for-byte fidelity constraint several later sections were written on |
|
||||||
| [`README.md`](README.md) | What the project is and why, for somebody who has not seen it |
|
| [`README.md`](README.md) | What the project is and why, for somebody who has not seen it |
|
||||||
| [`docs/`](docs/README.md) | The language itself: eighteen chapters, verb and function reference. [Chapter 14](docs/14-architecture.md) is the interpreter's architecture — the step loop, the pools, the two kinds of error, and how to debug it. [Chapter 15](docs/15-error-codes.md) is the error-code appendix. [Chapters 17](docs/17-tutorial-breakout.md) and [18](docs/18-tutorial-breakout-artwork.md) are tutorials that build the games in `examples/breakout/` |
|
| [`docs/`](docs/README.md) | The language itself: eighteen chapters, verb and function reference. [Chapter 14](docs/14-architecture.md) is the interpreter's architecture — the step loop, the pools, the two kinds of error, and how to debug it. [Chapter 15](docs/15-error-codes.md) is the error-code appendix. [Chapters 17](docs/17-tutorial-breakout.md) and [18](docs/18-tutorial-breakout-artwork.md) are tutorials that build the games in `examples/breakout/` |
|
||||||
| `deps/libakerror/AGENTS.md` | The `ATTEMPT`/`CLEANUP`/`PROCESS`/`HANDLE`/`FINISH` protocol, authoritatively |
|
| `deps/libakerror/AGENTS.md` | The `ATTEMPT`/`CLEANUP`/`PROCESS`/`HANDLE`/`FINISH` protocol, authoritatively |
|
||||||
@@ -44,19 +45,26 @@ repeating where you will see them:
|
|||||||
|
|
||||||
- **Add tests in the same commit as the behaviour change**, and assert the *correct* contract
|
- **Add tests in the same commit as the behaviour change**, and assert the *correct* contract
|
||||||
even where the code is currently wrong. A known-failing test goes in
|
even where the code is currently wrong. A known-failing test goes in
|
||||||
`AKBASIC_KNOWN_FAILING_TESTS` with a `TODO.md` entry; it does not get pinned to the buggy
|
`AKBASIC_KNOWN_FAILING_TESTS` with an open issue; it does not get pinned to the buggy
|
||||||
behaviour, because that turns the eventual fix into a test failure.
|
behaviour, because that turns the eventual fix into a test failure.
|
||||||
- **Never work around a missing dependency capability here.** File it in that repository's
|
- **Never work around a missing dependency capability here.** Open an issue in that
|
||||||
`TODO.md` — what the BASIC verb requires, what the entry point should look like, what tests
|
repository's tracker on <https://source.starfort.tech> — what the BASIC verb requires, what
|
||||||
would cover it. `MAINTENANCE.md` explains why, and names the four gaps this closed upstream.
|
the entry point should look like, what tests would cover it. `MAINTENANCE.md` explains why,
|
||||||
|
and names the four gaps this closed upstream. **Recording it here instead is not filing it**:
|
||||||
|
two `akgl_ui` gaps sat in `TODO.md` for a release because changing a submodule is that
|
||||||
|
repository's decision — which is true of changing it and not of reporting it.
|
||||||
- **Never edit generated output** — `build/` trees, the generated `akerror.h`, `akgl.pc`,
|
- **Never edit generated output** — `build/` trees, the generated `akerror.h`, `akgl.pc`,
|
||||||
`include/akgl/SDL_GameControllerDB.h`. Change the template or the generator script.
|
`include/akgl/SDL_GameControllerDB.h`. Change the template or the generator script.
|
||||||
- **Do not reformat code you are not otherwise changing.** Several files mix tabs and spaces
|
- **Do not reformat code you are not otherwise changing.** Several files mix tabs and spaces
|
||||||
and there is no repo-wide formatter; style conversions get their own commit.
|
and there is no repo-wide formatter; style conversions get their own commit.
|
||||||
- **Do not edit `tests/reference/`.** Those expectations came from the Go implementation and
|
- **Do not edit `tests/reference/`.** Those expectations came from the Go implementation and
|
||||||
are never edited to suit this interpreter. A deliberate divergence goes in `TODO.md` and
|
are never edited to suit this interpreter. A deliberate divergence goes in
|
||||||
`docs/13-differences.md`.
|
`tests/reference/README.md`'s divergence table and `docs/13-differences.md`.
|
||||||
- **Update `TODO.md` when you learn something about a defect**, including that it is worse or
|
- **Open an issue for outstanding work; do not add it to `TODO.md`.**
|
||||||
better than recorded. Publishing a problem you cannot fix yet is a contribution.
|
<https://source.starfort.tech/andrew/akbasic/issues>, or `tea issues create --repo
|
||||||
|
andrew/akbasic`. Name the file and line, the functional consequence, and what closing it would
|
||||||
|
touch. Publishing a problem you cannot fix yet is a contribution — and **when you learn
|
||||||
|
something about an open issue, say so in the issue**, including that it is worse than
|
||||||
|
recorded, already fixed, or resting on a premise that has expired.
|
||||||
- **Add yourself — program, model and version — as a commit co-author.** `libakgl`'s
|
- **Add yourself — program, model and version — as a commit co-author.** `libakgl`'s
|
||||||
`AGENTS.md` requires it and this repository follows the same rule.
|
`AGENTS.md` requires it and this repository follows the same rule.
|
||||||
|
|||||||
@@ -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
|
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
|
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
|
unimplemented, and that list was the work queue. Every group of it is done; what remains is
|
||||||
summarised for a BASIC programmer in `docs/13-differences.md`. A few entries are
|
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
|
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
|
is an interactive editor rather than a programmable verb. Keep that reasoning rather than
|
||||||
reviving them.
|
reviving them.
|
||||||
@@ -60,9 +60,12 @@ the idiom of the `ak*` C libraries it builds on.
|
|||||||
### Missing capabilities get filed upstream, not worked around
|
### Missing capabilities get filed upstream, not worked around
|
||||||
|
|
||||||
**When `libakgl` — or `libakstdlib` — cannot supply something a verb needs, do not work
|
**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
|
around it here.** Open an issue in that repository's tracker on
|
||||||
API: what the BASIC verb requires, what the `akgl_*` or `aksl_*` entry point should look
|
<https://source.starfort.tech> describing the missing API: what the BASIC verb requires, what
|
||||||
like, and what tests would cover it. Follow the prose-paragraph style of the entries already
|
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.
|
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,
|
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
|
`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
|
`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.
|
expected to fail.
|
||||||
|
|
||||||
A green `ctest` therefore does not mean defect-free. When a known-failing test starts
|
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` /
|
The dependencies use the same split under their own prefixes: `AKSL_TESTS` /
|
||||||
`AKSL_WILL_FAIL_TESTS` / `AKSL_KNOWN_FAILING_TESTS`, and `AKERR_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.
|
and left `AKSL_KNOWN_FAILING_TESTS` empty.
|
||||||
|
|
||||||
### Test target names
|
### 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.
|
`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
|
**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
|
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.
|
says the same thing at more length.
|
||||||
|
|
||||||
`tests/language/` is ours and may be changed freely. A new language feature needs a
|
`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
|
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
|
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
|
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
|
**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
|
`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_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 |
|
| `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
|
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
|
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,
|
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