Since red first, a bug Selim meets becomes a failing test before it is fixed. Today the tests grew wider than the screen the bug was found on.
a computer, too
The fix for keeping your place when you step out of a level (the way back) held on the phone. On the desktop it did not. Selim’s ask came before the fix: “we should first let’s catch this in a test case, that this should not repeat in a cube’s applications.”
So the regression runner learned to be a computer, with a mouse, a wheel and a trackpad. Two new cases went red at once: a trackpad pinch and the escape key both dropped a long list back to the top, while the back arrow held. The cause was quiet. A trackpad pinch keeps streaming for a moment after the level is gone, and the app took the gesture that stepped out for the person scrolling. Now the kept place lets go only when the person really moves the page.
every piece answers a hold
Then Selim held the tiles in Todarch’s needs and got five options, except on one: holding not known yet opened nothing. “I want to know where the difference is caused, and I don’t want this issue to repeat in any of the cubes applications.”
The cause: not known yet is a group the app makes up. Empty is the point, nothing is stored for it, and the hold in the shared tiles has to be asked for. The one piece the backend does not keep was the one left out. The test was written against cube design’s rule, not the screen: every piece on a level, and its head, answers a hold, in every cube app. Run that wide, it found three more Mosaic apps where no piece answered a hold at all.
The same cases now run on the shared package itself, in its release, before anything reaches the apps. The test was proven before it was trusted: a hold made slow by hand made the run fail. Along the way the first runs failed for a reason that was not the package’s (after a long press, the test browser tapped whatever had just appeared under the finger), and that became an open finding instead of a quiet workaround.
A bug found on one screen becomes a case for every device and every cube app, and then for the package they all take their pieces from.
frame by frame
Later in the day the first bug came from Selim’s own use rather than an agent’s search. He opened Mosaic’s home on a computer and saw the tiles shrink and slide on every load. “It’s so visible and it’s so disturbing. So make sure that is not happening.” Every existing check had looked at the page after its animations ended, so a level that shrank into place looked fine to all of them. The new case watches every frame from the first paint: a level stands still once it shows. It went red, and the cause was in the shared package, which guessed a phone’s width, measured the real one, and then played a zoom on a level nobody had zoomed. A second thread found the same bug at the same time; its fix matched and was folded in, not shipped twice.
fixed at the source
Then a to-do Selim hid in Todarch stayed on screen until he stepped out and back. The case went in first, played on the model, every Mosaic app and the package. The cause was a race: the app reloaded the level, and the backend answered before the hide had landed. Mosaic’s home had already solved the same race inside its own code. Selim asked for more than a fix in one app: “see if this fits already in Angular, so we fix it at the source instead of leaving it every application to handle.” So the lesson became one shared piece of the package, a rule that refuses a reload while a change is still on its way, and the package’s own example now has a backend slow enough to prove it: red without the rule, green with it.
a green suite that proved the wrong thing
The sharpest lesson came last. Selim played the round where add became a cube of its own (one way down) and could not find one I have anywhere, while 150 cases passed. “How is this possible that is able to pass all those full suites … I don’t see anywhere this one I have thing.” A fresh thread found out: the agent before it had turned its own proposed rules into hiding the part in most places, and four cases tested that hiding. Most other cases added through the page’s code and never touched add at all. The suite tested the agent’s decision, not Selim’s request.
The answer was cube design’s own: a part with nothing to do is shown quiet, not hidden, so add looks the same everywhere. And new cases walk with taps only. The same day’s other surprise had the same shape: the model’s cases had never been played on the real app. Once they were, with real finger gestures, Mosaic’s home on the physics held 25 and broke 75. “How we verified this?” Selim asked. The honest answer was that it hadn’t been, and the red list became the work.
the alarm that was the old one leaving
In the same day, a different kind of check. The backend’s host sent an alarm: it had run out of memory. The first guess was the job shipped that morning, and reading its change cleared it. The decisive fact was which instance the alarm named: the old one from the morning’s deploy, already shut down half an hour earlier. The new one never stopped. There was no leak, but the headroom was thin, because nobody had told the Java runtime how much room it lives in. That is now bounded, on dev first.