VexelRay
Framework docs

TODO

Work on this framework that is known about and not done, organised by what v1 means: an application built on v1 does not need a major refactor, and later releases add to the abstractions v1 already has. So the first question about an entry is not how big it is but whether landing it after v1 would break an application that compiled before. Most of it is what the ports turned up — what the text editor found, and what the designer found — where the gaps each port closed, and the reasoning behind each, are recorded — and, since October, what the applications generated from the template wrote in their own docs/framework-notes.md. Since 2026-10-22 each milestone of an application ends in a retrospective in its docs/retrospective.md, and its numbered proposals come here, under Found by <application>, each linking back to the section it came from.

Keep an entry short enough that it does not need editing, and delete it when it is done rather than ticking it. An entry whose fix belongs in a sibling repo says which one; the ones under Upstream cannot be fixed from here at all. An entry moves between sections when the answer to would landing it later break an app? changes, and says why.

A ruling carries its reason. Anything recorded as ruled here, in components.md, in threading.md or in v1.md says why in the same place: the constraint it comes from, the evidence that decided it, or the cost it knowingly accepted. A ruling with no stated reason is an idea that sounded good at the time, and a later reader cannot tell the two apart, so it has not been ruled yet. When the reason stops being true the ruling is re-argued, not kept for being old. A ruling that turns out to have been wrong is corrected in place and says what corrected it, as the capture rule’s entry does for components.md.

Two labels keep the difference visible. Ruled means the user weighed it and gave, or accepted, a reason. Accepted as recommended means a recommendation was adopted without discussion: it is sound as far as its stated reason goes, and has not been examined beyond that. Neither is permanent, and the second is the one to re-check first when something depends on it.

Blocks v1

Landing any of these after v1 would break an application that compiled before, or change what an application already depends on. Ordered as v1.md orders the work.

Can land after v1

Additive: a constructor parameter with a default, a test, a deletion that changes no behaviour, a new module behind a seam that already exists. Worth doing, and none of it waits for the freeze.

Found by Vexplore

The first application built on the generated template by someone other than its authors: a file explorer (../vexplore, with its own notes). Generating it, building it, reaching a screenshot and driving it with ottermate all worked, and the layout came out close to the design on the first build — so what follows is friction, not failure. Ordered by how early a newcomer meets it. None of it would break an application compiled before it lands, which is why it is here and not above; the first two are the ones a new project meets before it has written a line, and would be the first things to do if onboarding is the goal.

Second round (actions and modifier keys) — FN-12 to FN-15. Nothing here blocks v1, and one thing worked better than expected: the processor’s compile errors (a record behind @Provides; GuiApp injected into something that is not @MainThread) were each right and each named the fix.

Found by the rebuilt editor and calculator

Vex (the text editor, its notes) and the calculator (its notes) were generated from the template in October 2026 and rebuilt fresh. What took their requirements unmodified is the larger half (the generator, phase inference, one Settings, window memory, the title bar, the close gate’s place, Launch.rest(), the dialogs, the logging), and an editor with tabs, a navigator, a close gate and a remembered session has no line of application edge. What they found that touches a frozen surface is filed above: the Window seam’s three witnesses, TREE, the look, chords in key, and a third trip over one bus per Gui. Already closed: the editor’s icon (FN-2, now @VexelApp(icon)), the calculator’s crash on closing a second window (FN-4, see architecture.md, the frame loop is the lifecycle), Popout’s shared bus (calculator FN-2), the stall behind a file dialog on Windows (Vex FN-7’s update), and a generated project with no motion (FN-12: the template builds Motion). The rest:

Upstream

Cannot be fixed from this repo. The one that blocks v1 is under Blocks v1; these do not.