<feed xmlns='http://www.w3.org/2005/Atom'>
<title>vega/docs/design/001-first-component.md, branch master</title>
<subtitle>Surface runtime projecting Pure views across pixel, terminal, CLI, and web.
</subtitle>
<id>http://git.yeowoo.org/vega/atom?h=master</id>
<link rel='self' href='http://git.yeowoo.org/vega/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/'/>
<updated>2026-09-30T15:33:27Z</updated>
<entry>
<title>Show an i64 with every digit on every surface</title>
<updated>2026-09-30T15:33:27Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-30T15:33:21Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=49e0df31289956aa3fd627f851f8fb2b3e08aa13'/>
<id>urn:sha1:49e0df31289956aa3fd627f851f8fb2b3e08aa13</id>
<content type='text'>
vega_text reads an i64 view or column as an integer and prints all of
its digits, so an ID past 2^53 shows as it is on the CLI, the TUI,
speech and the web surface, where a number would round.
</content>
</entry>
<entry>
<title>Show a bool as true or false, and make the examples' flags bools</title>
<updated>2026-09-30T14:29:20Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-30T14:29:20Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=72ecae6b6eb1365e722bd6d45acae8a5ccb74b23'/>
<id>urn:sha1:72ecae6b6eb1365e722bd6d45acae8a5ccb74b23</id>
<content type='text'>
aup and Pure now have a bool (Pure 016): a view or column may be one.
vega_text writes it as true or false, as a string's interpolation does, so
every surface shows the same words: the CLI, the TUI's cells, speech and
the web surface's JSON (a value's text) and page. An app that wants other
words picks them with a conditional (if t.done { "done" } else { "" }).

The flags of the examples are bools: todo's done and urgent, today's done,
the stopwatch's running. vega.when takes the bool as it took the number.

bools checks a bool field and a bool column on the CLI, the TUI, speech
and the web surface: true and false, never 1 and 0.
</content>
</entry>
<entry>
<title>Say how a value is shown, and what a screen never lets it do</title>
<updated>2026-09-30T12:19:01Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-30T12:19:01Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=8fc6f35b30642f3a8ebbd7f5f47b70195c8ffea1'/>
<id>urn:sha1:8fc6f35b30642f3a8ebbd7f5f47b70195c8ffea1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Name Vega's parts: lib/, surfaces/ and symbols/</title>
<updated>2026-09-27T12:45:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T12:45:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=2920e389f624263efe515d9a5f33f6b822efff5e'/>
<id>urn:sha1:2920e389f624263efe515d9a5f33f6b822efff5e</id>
<content type='text'>
src/ held two parts, the surfaces that show modules to people and the
symbol format with its CPU and GPU drawing. As in Pure (design 009), top
level directories are now the parts, and the README says what each builds.

</content>
</entry>
<entry>
<title>Add a board used by people and programs alike</title>
<updated>2026-09-26T17:04:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T17:04:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=9c2d1eb1d423625672cb469af6bf708a48d3cb71'/>
<id>urn:sha1:9c2d1eb1d423625672cb469af6bf708a48d3cb71</id>
<content type='text'>
examples/board.aup is a kanban board: people add and move cards on
Vega's surfaces, programs post JSON to the same module served by
pure-serve, with no routes written. The checks write cards with the CLI
into a store, serve that store over HTTP where a program moves one and
adds another, and read it again with the CLI, the focus still on the
card it was on.

</content>
</entry>
<entry>
<title>Give live surfaces a clock and run timers; add a stopwatch</title>
<updated>2026-09-26T16:58:26Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T16:58:26Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=b466603358f8fa5a74551a9819fdd54ad124ef0c'/>
<id>urn:sha1:b466603358f8fa5a74551a9819fdd54ad124ef0c</id>
<content type='text'>
The terminal and the web page set the time events see to the wall clock
and tick an app's timers on time: each round ticks what is due, draws,
then waits for input, a frame or the next tick, and a tick is news to
every open page at once. Scripts have no clock: time MS sets the time
the next events see and tick TIMER ticks, so an app that uses time
replays exactly. A module swap reschedules the timers.

examples/stopwatch.aup runs on every surface; the checks drive it by
script, on a pseudo-terminal by the clock, and on the web page.

</content>
</entry>
<entry>
<title>Add a tally example: a keyed list on every surface</title>
<updated>2026-09-26T15:39:30Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T15:39:30Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=15c4616e19d997c64a983e39501289c7d9f50d0a'/>
<id>urn:sha1:15c4616e19d997c64a983e39501289c7d9f50d0a</id>
<content type='text'>
examples/tally.aup counts typed words in a list keyed by the word: the
screen stays sorted with each word once, typing a word again counts it
and moves the focus to it. It runs on the three surfaces with the other
examples, and vega check finds nothing in it.

</content>
</entry>
<entry>
<title>Swap a running app's module: --watch and the swap command</title>
<updated>2026-09-26T10:54:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T10:54:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=8e2b3ffadcf83dba74d58dbf9ee2c57cef5f1ad5'/>
<id>urn:sha1:8e2b3ffadcf83dba74d58dbf9ee2c57cef5f1ad5</id>
<content type='text'>
vega tui|web MODULE --watch replaces the running app's module when its
file is written again (aup watch writes it); states keep their values by
name through pure_app_replace and every web page hears of it. The file is
compared by the digest of its bytes, at most five times a second, so a
module of the same size written within the same second is not missed; a
module that does not load leaves the app as it was and is not tried
again. Modules alternate between two slots so a failed load never touches
the running one. Scripts get swap MODULE; whether a module runs frames is
now a property of the screen.

</content>
</entry>
<entry>
<title>Restate the bytes a changed frame sends</title>
<updated>2026-09-26T10:54:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T10:54:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=932df09ea211a83a24210d821dc3d0093ed73561'/>
<id>urn:sha1:932df09ea211a83a24210d821dc3d0093ed73561</id>
<content type='text'>
The todo example now counts its open tasks, so the field line changes
with more events; a changed frame sends 143 B on average, not 139 B.

</content>
</entry>
<entry>
<title>Show filtered lists and their shared focus</title>
<updated>2026-09-26T10:33:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T10:33:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=0d5effd6afe8808296a01db102ca4c247cdcd1af'/>
<id>urn:sha1:0d5effd6afe8808296a01db102ca4c247cdcd1af</id>
<content type='text'>
A list may now be filtered (each t in tasks where !t.done), and several
filtered lists over one list share one focus: the focus view names an
item, so Vega asks Pure which row shows it and highlights it only in the
list that holds it; the other lists have no focus (null in the web
surface's JSON, and the spoken surface names the item where it is). A
click or point on a row points at the item that row shows, and the wheel
on a list without the focus focuses the row under it. Pure's rows now
take a mutable app.

examples/today.aup shows what is open and what is done; its CLI output
matches a model over random adds, moves, toggles and points into either
list, and the web surface leaves the other list without a focus.

</content>
</entry>
</feed>
