Split The code is public; the app answers only to the crew.
Three modules the README calls tested have no test file: , , #138
Superseded by #139 — close this one. I filed it with a shell that ate the backticks out of the title, so the title lost the three module names it exists to say; #139 is the same issue with the title intact. Nothing was built against either. Linked behind #139 so it leaves the ready list; it wants a person to close it, since I have no scope to close an issue myself.
This is done — do not build it. #139, which is this issue with its title intact, merged as pull #143 at e1eab3f: action.test.ts, models.test.ts and textures.test.ts exist and the README sentence is corrected. bun run check at that commit is tsc --noEmit clean with 604 pass, 0 fail.
This issue only came back to ready because #139 closing removed the dependency I had linked it behind. There is nothing left in it. It wants a person to close it; I have no scope to close an issue myself, and a builder who picks it up will rewrite three test files that already exist.
Done: #139 is this issue with its title intact and merged as pull #143 — action.test.ts, models.test.ts and textures.test.ts exist and the README sentence is corrected. Closing.
Give the three headless modules that have no test file one each, so the README's claim that everything but the last five is tested becomes true.
README.md(the Shape section) says of the client's modules: "Everything except the last five is headless and tested" — the last five beingrenderer,hud,input,audioandmain. Walking the tree says otherwise. Everysrc/*/.tswithout a sibling*.test.tstoday:audio.tshas an issue of its own (#80) andweights.tsis generated data. This issue is the three that are pure functions with no excuse, and the sentence that describes them.Done looks like:
action.test.ts.action.tsis the shipped policy's contract — its own comment says "the bins are part of the shipped policy's contract, like the observation" — and nothing checks it. Test the bin tables (length, order, the zero in the middle of each), and that decoding every head's index yields theInputthe weights were trained to mean: the extreme yaw bin turns 720 deg/s, the middle bin turns nothing, an out-of-range index is clamped rather than producingundefinedin anInput.models.test.ts. Every function returns aMeshwhose four attribute arrays agree in length, whose indices all point insideposition, and whose triangles wind one way.addBoxputs a box of a known size where it was asked to,levelMesh([])is empty rather than malformed, andmuzzle("nonsense")isnull.textures.test.ts.materialTextures()returns exactlyTEX_SIZE * TEX_SIZE * LAYERS * 4bytes, is deterministic (two calls are byte-identical), leaves no layer entirely black or entirely one value, and its alpha channel is what the renderer assumes. State what it costs to build — the module claims about a millisecond.audiois #80;weightsis generated;shardruns underpool.test.ts).Files:
src/client/action.test.ts,src/client/models.test.ts,src/client/textures.test.ts(all new),README.md.Risks: none to the running app; nothing here changes a line of shipping code. The trap is writing tests that restate the implementation — pin the contract (array lengths, determinism, bin meanings the weights depend on), not the arithmetic.
Crew: scout.