IAT Design had grown to 600 classes. A handful of god objects updated the display, talked to the network, and touched the disk in the same method. The client worked — after a memory mistake that kept a gigabyte of Bitmap objects alive was fixed by caching the original JPEG and PNG bytes in an in-memory package. It worked until 4K monitors and Windows scaling. WinForms does not auto-scale to that. I spent a stretch making it pretend. People were still running the tests. I rewrote the client in WPF under rules the old code was never going to obey.
A reversible transform of the live test is a second document. I went through the WinForms client twice trying to get rid of those. The WPF client does not grow one while you edit. Save and open still round-trip the file. That is a boundary, not a second editor. If two tabs can disagree, the design is already wrong.
When you edited a block, the client took the Block apart for the display. Stimulus inherited DIBase so it could be previewed. Trial did not, so the stimuli were pulled out of their trials. There was no backreference. A select or a move fired an event; the parent found the trial by index and put the object back. The screen held one shape. The document held another. A trial now points at a stimulus by Guid. The preview binds. Nobody lifts the child out of the parent to put it on screen.
Previews were composites: images stamped onto a background and stored in the in-memory package. Change the layout or a key, and an en masse regeneration of the set ensued. That cache was another live copy of the test. The WPF preview does not keep one. It draws from the document — same keys, same instructions, same layout math the export will read. The administered test is still slides. The designer is not allowed a prettier geometry than the slide.
Those two bugs were the same bug. The screen had become a second document. The WPF stage is a projection of IatTest. Edit the document; the preview changes wherever that document is shown. A calculated composite is a print. We kept the negative. After generate, the editors on blocks 3–7 lock. You change practice. The derived labels follow.
Combined keys are a join, not a second styled object. Blocks 3–7 take text and style from the practice keys they were generated from. Instruction screens use the same style editor as block instructions; default black, because the stage is white. Image keys and the old dual-key layout are not on this stage.
Generate is Greenwald’s seven blocks. The client will not invent an eighth to make the tabs feel busy. IATExists is a hard stop — this designer does not deploy over a live test. Item analysis is not a button. Image keys and the dual-key layout stay in the old client until they can be a projection of the same document, not a new family of types.