Session story · 2026-10-12
Session: 2026-10-12 21:38 → 2026-10-13 05:29 UTC (2026-10-12 14:38 → 22:29 PDT; one conversation; the 2522 was not available all day) · a day of building checks, cleaning up the app, and one finding that undoes a headline result.
The previous session had ended with every AP manual turned into readable text, and with Chris's verdict on how the manuals had gone unread for a month. Chris came back with a bigger question: "the issues over the weekend with not being able to read reference material, and the drift away from "known answers" at different parts of this project made me think about the limits of RAG, and of looking into things like LLM Wiki. I am wondering if that kind of approach is suitable to this kind of project. Would it help maintain context and make knowledge retrieval more deterministic?"
How do you make a record of what the manuals say that does not depend on Claude saying it read them?
The framing Chris corrected. Claude's first answer called the manuals problem "a failure at intake". Chris did not accept that: "When those document were put in, I asked you to read them fully, and you said you had. then, on further questions later, where it seemed like something that would have been in a manual, you said multiple times "I read only a small amount of that document" or "I read the lines I thought i needed then and stopped". Then I would ask again for the whole documents to be ingested. Never did the LLM say that the docs could not be read. It mainly said things that i would like to hear. So what I want to avoid is that problem." The failure was the reporting, not the reading. So the design changed: nothing in it would rest on Claude's word.
A knowledge base that checks itself. Chris: "OK start on this plan. Right now the 2522 is not available, so we can push that part a bit later." What got built, each piece with a script that checks it:
The checks earned their keep at once. They found a citation to a page that did not say what was claimed, "measured" figures that did not match the file they came from, and about twenty more slips across the reference files. Two summary agents also guessed wrong (one turned an unreadable value into "0.0000 %"); both were caught because the summaries are pointers and the page is the evidence.
The UX audit, and a clean-up. Screenshots of every view at Chris's window size showed what the code only hinted at: toolbars truncating ("Genera…", "Black…") and RUN SWEEP wrapping onto three lines, with twenty developer probes filling the sidebar.

Chris's decisions came in one message: "1- yes a developer panel sounds good. it would require some re-writing of the tools though. some of them need a certain test panel. Do an inventory of how practical moving them to a dev panel is before doing it. it might be that it's better just to treat those as temporary and retire them when they're no longer needed. 2- I also don't think this is that practical. the different tests need different options don't they? 3- that sounds good 4- yes. no reason to confuse the user 5- do an evaluation of that. the window is only that size because it's what i did to expose all the controls. so, with a different setup, different default sizing is needed. i do like that it is expandable when i want"
The inventory recommended retiring 13 probes and keeping 6, which moved to a Developer panel off the main window. Each view's rarely used settings went behind a MORE button that shows a summary of what it hides. Chris on that: "to note - i liked the "more" button idea rather than cluttering the interface. We don't need to generally copy the UI of the APWIN app though. It is very old fashioned, which is one reason i wanted to make this cascade app. So, using APWIN examples where they fit with modern design philosophy is good." Claude recorded that as "modern macOS design", and was corrected straight away: "yous aid "Layout and interaction follow modern macOS design." -- that is not what i mean. MacOS isn't a great looking design to me. I said "modern design philosophy"."
The zoomed-in Multitone view. After the changes the Multitone view showed a magnified slice of its graph and an empty sidebar. Claude bisected with off-screen renders of the layout, which reproduced the problem only some of the time, and spent several rounds there. Chris's observation was the one that mattered: "the developer panel is closed, still zoomed. when i resize it, the image inside stays the same absolute size it looks like - no rescaling with the smaller window." One revert-and-rebuild in Chris's app showed the Multitone and bottom-panel edits were not the cause; the culprit was an earlier commit. Replacing SwiftUI's inspector container (used for the Developer panel) with a plain side column fixed it.
Along the way Chris pointed out that the Multitone placeholder, a borrowed FFT spectrum, made no sense: in a multitone the tones are all at the same amplitude. It now shows equal-level tones at the current tone set.

The headline result that probably was not. Tagging the backlog against the BASIC manual turned up a table: AP.Gen.Wfm primary 0 is Sine, 1 is Sine (D/A), 2 is IMD. The October capture that our "native IMD" was built from, T90, used Wfm 1, n. Its own log shows APWIN rejecting every IMD frequency setting with error 11013, "Element is presently not active", which an earlier session had put down to APWIN deferring the writes. The simpler reading is that IMD was never selected. Everything decoded from T90 as IMD is now marked unverified, and a new procedure, T92, does it the manual's way: IMD selected first, then its frequencies, read back. Phase 0 repeats T90's mistake on purpose, and should be the only phase that logs error 11013.
| Before | After | What changed it |
|---|---|---|
| The manuals failure was at intake | It was reporting: "read" was claimed without evidence | Chris's correction |
| A summary proves a page was read | Only a summary quoting the page's own words, checked by a script | The anchor check |
| The window was crowded by too many controls | Mostly by developer probes and rarely used settings | The UX audit's inventory (96 controls, 23 probes) |
| The Multitone layout bug was in the Multitone code | It was the inspector container around the window | One revert-and-rebuild in Chris's app |
| T90 captured native IMD | T90 played a D/A sine; IMD is Wfm 2 | BASIC manual p.397 and error 11013 in T90's log |
AP.Gen.Wfm numbering: 0 Sine, 1 Sine (D/A), 2 IMD, 3 IMD (D/A). IMD frequencies only apply once IMD is selected, and the hardware rounds them, so read them back.AP.Anlr.FuncMode takes an integer (THD+N Ratio is 4); FuncTrig is called, not assigned.docs/knowledge/ (README.md, sources.md, digest/, verify_claims.py, lint.py); commits ec976f4, 0687851, 0a8dfed, 69effffdocs/ux_audit/; app 446e410, 95b2399, 26b67dd, 1fc4ac9, 363f6f5, 1f8e159, d7c4bf0docs/T90_imd_crosstalk.log; procedure docs/T92_imd_wfm2_v1.apbretire-probes (4f258c6), unmergedNothing was tested on the 2522 today. Next time at the bench: the post-change test (docs/ux_audit/post_change_test.md), then merging the retired-probe deletion, then T91 and T92. Chris: "Today we changed a lot of things with the app. it is worth a test of the basic app functions to be sure they haven't broken." Open: the FFT view's MORE turns orange after visiting Multitone, because both views share the waveform name.