From c5d13f00f6fd2d6f4759d252b30165a533a1863e Mon Sep 17 00:00:00 2001 From: Tachikoma Date: Sun, 2 Aug 2026 22:01:28 -0400 Subject: [PATCH] Repoint the TODO.md citations that no longer resolve Its own SS0-SS9 structure survived the move to the tracker, so 133 citations still resolve and are left alone. Thirteen did not. Six named another repository's TODO.md by a section number: libakstdlib 1.6, 2.2.2 and 2.3, and libakgl's file. Those repositories dropped their numbering entirely, so each now names UPGRADING.md, an issue, or the tracker. Three cited 'TODO.md section 12', which has never existed here -- the defect list is SS6. TODO.md itself caught two others of that class earlier. The CMakeLists comment carried a stale premise with it: eleven defects 'deliberately reproduced and not yet fixed' stopped being the rule when SS0.1 retired the fidelity constraint. Four told a reader to record work in TODO.md; the scanner defect is issue #4, the audio_tables mutation gap is #25, and the UI gaps are libakgl #79 and #80. Verified: cmake --build build && ctest --test-dir build, 112/112. Co-Authored-By: Claude Opus 5 (1M context) Co-Authored-By: Andrew Kesterson --- .gitea/workflows/ci.yaml | 4 ++-- CMakeLists.txt | 10 +++++----- TODO.md | 2 +- docs/14-architecture.md | 6 +++--- include/akbasic/ui.h | 2 +- include/akbasic/value.h | 4 ++-- src/environment.c | 2 +- src/runtime.c | 2 +- src/runtime_commands.c | 2 +- src/runtime_disk.c | 2 +- src/symtab.c | 2 +- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index fc104ff..fc901c4 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -282,7 +282,7 @@ jobs: # avoid the file: almost every survivor is in akbasic_audio_state_init, # where nothing asserts that a freshly initialised audio state is actually # zeroed and defaulted -- the same gap this job's own history records - # closing for src/symtab.c. Recorded in TODO.md; add the file back when it + # closing for src/symtab.c. That is issue #25; add the file back when it # is closed. # # It was 73.1% before writing this job. The run's own findings closed the @@ -297,7 +297,7 @@ jobs: # # The 21 remaining survivors are listed in the published report. Most are # ICR mutants on loop and accumulator initialisers that a stronger - # placement assertion would catch. Recorded in TODO.md. + # placement assertion would catch. Issue #25. - name: mutation testing run: | python3 scripts/mutation_test.py \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b00526..21229cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,9 +3,9 @@ cmake_minimum_required(VERSION 3.10) # libakgl both use. It flows into the library SOVERSION and nothing else spells # a version number. # -# 0.x on purpose: TODO.md section 12 records eleven defects carried over from the -# Go reference that are deliberately reproduced and not yet fixed, so the -# language surface is not being promised yet. +# 0.x on purpose: the language surface is not being promised yet. TODO.md §6 +# records the defects inherited from the Go reference and what became of each; +# the ones still open are in the issue tracker. project(akbasic VERSION 0.1.0 LANGUAGES C) # Pre-1.0 the ABI may break on a minor bump, so the soname carries MAJOR.MINOR. @@ -56,7 +56,7 @@ option(AKBASIC_SANITIZE "Build with ASan + UBSan" OFF # coverage build collides on the `coverage` target and fails to configure at all. # Rename the dependency's on the way past. Remove this once libakerror applies # the same CMAKE_SOURCE_DIR test to `coverage` that it already applies to -# `mutation` -- filed in deps/libakstdlib/TODO.md section 2.3. +# `mutation` -- filed as libakerror issue #15. # # **Only one project in a tree may shadow add_test(), and this is that project.** # CMake exposes an overridden command as `_name` and chains exactly one level: a @@ -276,7 +276,7 @@ endif() # AKBASIC_TESTS must exit 0 # AKBASIC_WILL_FAIL_TESTS abort by design # AKBASIC_KNOWN_FAILING_TESTS assert the *correct* contract for a defect -# recorded in TODO.md and are expected to fail. +# tracked as issues and are expected to fail. # When one starts passing CTest reports # "unexpectedly passed" -- that is the cue to move # it into AKBASIC_TESTS along with the fix. diff --git a/TODO.md b/TODO.md index f52a2f1..ed0f753 100644 --- a/TODO.md +++ b/TODO.md @@ -2331,7 +2331,7 @@ gitignored is exactly what makes it invisible. **Keep build trees out of the sou and if a coverage number looks suspiciously unchanged, `find . -name '*.gcda'` before believing it. -Branch coverage reads 18.0% and is not a target, for the reason `libakgl/TODO.md` and +Branch coverage reads 18.0% and is not a target, for the reason `libakgl` and `libakstdlib` both give: the akerror control-flow macros expand into large branch trees at every call site, most of them unreachable in normal operation. Track line and function coverage. diff --git a/docs/14-architecture.md b/docs/14-architecture.md index 32bea0f..721f09b 100644 --- a/docs/14-architecture.md +++ b/docs/14-architecture.md @@ -458,7 +458,7 @@ Three consequences follow, and all three are things people report as bugs: `akbasic_Value` carries its string **inline**, not behind a pointer, so a copy is a struct assignment with no allocator, no refcount and no lifetime question. It costs 256 bytes per -value; that is the trade, and it is recorded in `TODO.md`. +value; that is the trade, and it is recorded in `TODO.md` §6. Type comes from the identifier's suffix and nothing else: `A#` integer, `A%` float, `A$` string, and a bare name with no suffix is a *label*. That is `akbasic_leaf_identifier_type()`, @@ -596,7 +596,7 @@ script's mistake into an error line are wrapped around *parsing* and *interpreta not around *scanning*. A line with more than 32 tokens therefore escapes as an interpreter error — the driver prints a stack trace and exits 1, and an embedding host is handed a context for what is really a script's mistake. It is the same shape as the -`VERIFY` defect above, on a path that fix did not cover. Filed in `TODO.md`; until it is +`VERIFY` defect above, on a path that fix did not cover. That is issue #4; until it is closed, a host that cannot tolerate that should refuse over-long lines itself. ## Devices, and how a capability is withheld @@ -808,7 +808,7 @@ by name when the pointer is `NULL`**, so an older host or a different backend ge error rather than silence. If `libakgl` cannot supply what the verb needs, **do not work around it here**. File it in -`deps/libakgl/TODO.md`: what the BASIC verb requires, what the `akgl_*` entry point should +`libakgl`'s issue tracker: what the BASIC verb requires, what the `akgl_*` entry point should look like, and what tests would cover it. Four gaps have gone upstream that way and all four landed. diff --git a/include/akbasic/ui.h b/include/akbasic/ui.h index 0137ebd..2c188f4 100644 --- a/include/akbasic/ui.h +++ b/include/akbasic/ui.h @@ -57,7 +57,7 @@ * These are akgl_UiAnchor's five values and its numbering, so the adaptor maps * them across without a table. **There is deliberately no top-centre or * bottom-centre**, because libakgl has neither and this repository does not edit - * its dependencies to add one; see TODO.md. + * its dependencies to add one; see libakgl issues #79 and #80. */ typedef enum { diff --git a/include/akbasic/value.h b/include/akbasic/value.h index ba4a083..ac65b08 100644 --- a/include/akbasic/value.h +++ b/include/akbasic/value.h @@ -3,8 +3,8 @@ * @brief Declares the strongly-typed BASIC value and its operators. * * Ported from the reference's basicvalue.go. The arithmetic is reproduced - * exactly, including the parts that look wrong -- see TODO.md section 12 for the - * catalogue and the reason they are not fixed yet. + * exactly, except where a defect has since been fixed on its own merits -- see + * TODO.md §6 for the catalogue and what became of each. * * **The left operand decides whether an operation is done in integers or in * floats**, and this is deliberate rather than an oversight: every operator diff --git a/src/environment.c b/src/environment.c index 6f6e8ec..a2f57e0 100644 --- a/src/environment.c +++ b/src/environment.c @@ -172,7 +172,7 @@ akerr_ErrorContext *akbasic_environment_stop_waiting(akbasic_Environment *obj, c "NULL argument in stop_waiting"); /* * The reference ignores `command` and clears unconditionally, which lets an - * inner block clear an outer block's wait (TODO.md section 12 item 3). The + * inner block clear an outer block's wait (TODO.md §6 item 3). The * argument is honoured here only to the extent of walking to the environment * that is actually waiting for it -- clearing the wrong one outright would * change observable control flow, so the search stops at the first match and diff --git a/src/runtime.c b/src/runtime.c index 779f785..d1ff8e7 100644 --- a/src/runtime.c +++ b/src/runtime.c @@ -1056,7 +1056,7 @@ akerr_ErrorContext *akbasic_runtime_call_function(akbasic_Runtime *obj, const ch * rule.** A multi-line function called at the REPL falls straight past this * loop and returns whatever is in the caller's return slot -- zero -- so * `PRINT TRIPLE(14)` answers "(UNDEFINED STRING REPRESENTATION FOR 0)" with - * no error and no diagnostic. Recorded as TODO.md section 6 item 41. + * no error and no diagnostic. Issue #8. * * Widening it to `mode != AKBASIC_MODE_QUIT` is the obvious fix and is * *wrong*: akbasic_runtime_process_line_run() does not advance a REPL-mode diff --git a/src/runtime_commands.c b/src/runtime_commands.c index 75766e6..4294e58 100644 --- a/src/runtime_commands.c +++ b/src/runtime_commands.c @@ -617,7 +617,7 @@ akerr_ErrorContext *akbasic_cmd_dload(akbasic_Runtime *obj, akbasic_ASTLeaf *exp /* * aksl_fopen does not NULL-check pathname or mode and fopen(NULL, ...) is * undefined, so the name is validated here before it is handed over -- - * deps/libakstdlib/TODO.md 2.2.2. + * libakstdlib's UPGRADING.md. */ PASS(errctx, filename_argument(obj, expr, filename, sizeof(filename))); diff --git a/src/runtime_disk.c b/src/runtime_disk.c index 2f5e6ca..a34b2f4 100644 --- a/src/runtime_disk.c +++ b/src/runtime_disk.c @@ -389,7 +389,7 @@ akerr_ErrorContext *akbasic_cmd_directory(akbasic_Runtime *obj, akbasic_ASTLeaf * Refused rather than half-built. Listing a directory needs opendir/readdir, * which `libakstdlib` does not wrap -- and this project's rule is that a * missing capability gets filed upstream rather than worked around here - * (MAINTENANCE.md). Filed in deps/libakstdlib/TODO.md. + * (MAINTENANCE.md). Filed as libakstdlib issue #10. * * The alternative was shelling out to `ls`, which a library has no business * doing, or calling readdir directly and stepping outside the error diff --git a/src/symtab.c b/src/symtab.c index 7b7e160..1de9aa5 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -15,7 +15,7 @@ * Probe for `key`. On success *slot points at either the slot holding the key or * the first free slot it could occupy; *found says which. Uses * aksl_strhash_djb2 rather than a private hash. That wrapper sign-extends char, - * so a high-bit byte hashes wrong (deps/libakstdlib/TODO.md 1.6) -- harmless + * so a high-bit byte hashes wrong (libakstdlib's UPGRADING.md) -- harmless * here because BASIC identifiers are 7-bit ASCII, and it would only ever cost * probe efficiency, never correctness, since the key comparison is a strcmp. */