Correct stale claims in MEMORY.md, TODO.md, and README.md (closes #3) #18
Reference in New Issue
Block a user
Delete Branch "docs-staleness"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes the four false documented claims in #3 plus the fifth added in the
follow-up comment. Documentation only — the diff touches
MEMORY.md,README.md, andTODO.mdand nothing else.ARCHITECTURE.mdis deliberatelyuntouched (tracked in #16).
Every claim was re-verified against the tree at
c922a16before rewriting;none of it is a paraphrase of the issue. Details are in the PR comment below.
Changes
MEMORY.md"Error handling" — dropped the sentence about C'sexit()being unwound by a
gameEndpanic recovered inRun, and added a paragraphstating the real model: one game run is one process,
myExitrestores theterminal via
Terminal.Finiand callsos.Exit(0),Run()never returns, andthere is nothing to recover. Includes the testing consequence — any death exits
the test binary, hence tests drive
command()directly and crash sweeps pinthe hero with
fortify().MEMORY.md"Linting" —.golangci.ymlis byte-identical to canonical andmust not be edited, not even to add an exception; approved exceptions are
in-code
//nolintdirectives carrying the approval date, which is what keepsthe config canonical.
paralleltestmoved out of the approved-disables listwith a note that it was fixed rather than disabled.
MEMORY.md"Debugging" — points atmake test/make checkinstead ofplain
go test -v, naming the flags the target carries so the reason isself-evident.
README.md— the headless-testability line now saysmake test; theMakefile paragraph notes what
make testcarries and says to use the targetsrather than
go testdirectly.TODO.md— the 2026-08-07 entry no longer asserts a specific host linterversion (the pin question itself is out of scope, tracked separately), and a
Completed Steps entry was added.
Next Stepis deliberately not rotated:this is out-of-band issue work per the precedent set on #9, and "broaden unit
test coverage" is unfinished.
Verification
make checkgreen —fmt-checkclean (prettier reports all matched files usePrettier code style),
golangci-lint run ./...reports 0 issues, and the suitepasses under
-timeout 30s -race -cover(game1.927s, 46.0% coverage).make fmtwas run and its result is in the commit.Claim-by-claim verification
Every claim in #3 was checked against the tree at
c922a16before any text wasrewritten. All five held; nothing in the issue turned out to be wrong.
1.
MEMORY.md: "unwinds C's exit() calls via a gameEnd panic recovered inRun" — FALSE, confirmed.
grep -rn gameEnd --include=*.go .returns nohits: the identifier does not exist anywhere in the tree. The live exit path is
game/rip.go:17:Run()isfunc (g *RogueGame) Run()atgame/game.go:205— no return values— and its own doc comment already says "It does not return — the game ends by
exiting the process (see myExit); one game run is one process." The in-code
comments were correct and
MEMORY.mdwas the sole outlier. The testingconsequence is likewise already documented in-code:
fortify()atgame/run_test.go:14pins HP/MaxHP/Exp/FoodLeft and clearsNoCommand/NoMovebecause "game-over now calls myExit and os.Exit(0) (step 8), which would kill
the test binary", and
driveTurnsnotes that tests drivecommand()directlysince
Run()no longer returns.2a.
MEMORY.md: exceptions recorded in a "Repo-specific exceptions" block in.golangci.yml— FALSE, confirmed. Grepping.golangci.ymlforRepo-specific,paralleltest,testpackage,exhaustive, andmndreturnsnothing; there is no such block.
sha256sum .golangci.ymlgives021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb, matching thecanonical hash cited in the issue, so the config is byte-identical to canonical
as claimed. The approvals are in the source instead — e.g.
game/dice_test.go:1//nolint:testpackage // ... (approved 2026-07-07),game/object.go:41//nolint:exhaustive // C-faithful ... (approved 2026-07-07), and file-level//nolint:mnd ... (approved 2026-07-07)ondaemons.go,init.go,passages.go,monsters.go,misc.go,rooms.go,potions.go,command.go,chase.go,level.go,score.go,sticks.go,things.go. This one had teeth: an agent following the old text would haveedited the canonical config, which is exactly what the org standard forbids.
2b.
MEMORY.md:paralleltestlisted as an approved disable — FALSE,confirmed; it was fixed.
grep -rn paralleltest --include=*.go .returnsnothing at all — no directive, no suppression. The suite has 32 top-level
func Test*and 32t.Parallel()calls, matching theTODO.mdrecord of thegolangci-v2.12.2work ("t.Parallel()in all 32 tests").3.
MEMORY.md: "run plaingo test -v" — contradicts policy and now losesreal coverage, confirmed. The
Makefiletest:target runsgo test -timeout 30s -race -cover $(GO_PKGS)with a verbose rerun plusexit 1on failure. A rawgo test -vtherefore drops the race detector,coverage, the timeout, and the no-flaky-rescue rerun semantics, while looking
like a successful verification.
4.
TODO.md: hostgolangci-lint"currently v2.12.2" — FALSE, confirmed.golangci-lint --versionon this host reports 2.10.1. Nothing in the repopins a version (no Dockerfile, no CI; the
Makefilecalls baregolangci-lint), so the line documented one machine at one moment and hadalready drifted. Only the false claim is removed — the pin question itself is
out of scope here and left to its own issue.
5.
README.md:75:go test ./game/— FALSE for the same reason as item 3,confirmed. Identical defect; now points at
make test, with the surroundingMakefile paragraph naming what the target carries.
Scope discipline
MEMORY.md,README.md,TODO.md—git diff --name-only | grep -v '\.md$'is empty. No code,Makefile,.golangci.yml, or otherconfig was touched, and nothing outside
*.mdturned out to be necessary.ARCHITECTURE.mddeliberately untouched (its corrections are tracked in #16).Next Stepnot rotated, per the out-of-band-work precedent from #9.because it is arguably fine as-is:
README.md's "Building and running"section still shows
go build ./cmd/rogue, which is out of scope here (theissue is specifically about the test invocation) and has no
makeequivalent— the
Makefilehas nobuildtarget. Flagging it rather than silentlychanging it.
Gate
make checkgreen from a clean worktree offorigin/main:fmt-check:gofmt -lempty; prettier — "All matched files use Prettiercode style!" (
make fmtwas run and its reflow is in the commit)lint:golangci-lint run ./...— 0 issuestest:ok git.eeqj.de/sneak/rgoue/game 1.927s coverage: 46.0% of statements, under-timeout 30s -race -cover;cmd/rogueandtermbuildclean with no tests
Manager notes.
Merged directly under the docs-only exception — the diff touches
MEMORY.md,README.md, andTODO.mdand nothing else, so it skips theadversarial gate.
Because that exception removes the reviewer backstop, I verified the diff
myself rather than taking the label on trust:
git diff --name-only origin/main...origin/docs-staleness | grep -v '\.md$'is empty — genuinely docs-only.
.golangci.ymlon the branch still hashes to021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb.author, subject, or body.
"Error handling", "Linting", and "Debugging" sections match what I had
independently confirmed in the source:
gameEndappears nowhere in thetree,
myExitis atgame/rip.gocallingTerminal.Finithenos.Exit(0), the config carries no exceptions block, andt.Parallel()ispresent in all 32 tests.
Two things I want on the record:
The
paralleltestwording is the detail that mattered most. The old textlisted it as an approved disable. The new text says the approval exists but is
no longer in force because the lint was fixed instead. That distinction is
what stops a future agent from "restoring" a disable that was deliberately
retired — it is a better outcome than simply deleting the line.
The scope discipline was correct. The implementer left
ARCHITECTURE.mdalone (tracked in #16, as instructed) and did not touch the golangci pin
(#4, sneak's call). It also declined to repoint README's
go build ./cmd/rogue— correctly, since there is nomake buildtarget topoint it at, and inventing one mid-docs-commit would have broken the
docs-only exception this PR relies on.
Follow-up filed as #19 for that last raw-toolchain instruction.