Roadmap

Plan

Plan

The order of work. Each phase ends with something a person can run. Decisions and their reasons are in design/architecture.md; this file is the sequence.

0 · Extraction (done, 2026-10-10)

3 of 5 done

The prototype grew on a branch of Thought Control (crates/scene, called thc-scene) and moved here with its history.

  • Own repo, crate and binary: fictty, MIT
  • Renamed throughout (fictty binary, FICTTY_* environment variables, fictty.sock)
  • README, guide, architecture, time-travel proposal, identity explorations, agent files
  • Close the Thought Control draft PR that carried the prototype, and drop crates/scene there
  • Move the Thought Control examples (examples/thc/, the Today screens in examples/pixels/) to the Thought Control repo as a consumer; replace them here with app-neutral demos

1 · Design system (next)

0 of 8 done

The identity is the glass direction: every stroke a pane of tinted glass, overlapping like the panes and layers of a terminal UI, generated on the terminal’s cell grid from a seed. Explorations are in design/identity/ (open explorations.html); the light version is the reference, the dark version isn’t there yet.

  • Push the glass direction further: the mark, the wordmark’s legibility at full scatter, motion
  • A dark version that works as well as the light one (screen blending on night, edge light)
  • The wordmark generator as code: one seeded generator that emits SVG and PNG, and the chosen seed
  • Favicon and small sizes; the social card
  • Brand tokens: grounds, tints, neutrals, semantic colours, type for docs and site
  • fictty’s default theme: the same palette as an in-terminal theme (ANSI 16 and truecolor), written in the theme format of phase 2, so the brand and the product’s default look are one thing
  • fictty.com: a one-page site with the live wordmark and the README’s story
  • Vocabulary: names for theme, throw/shape (push/patch) and the escape hatch, if the glass direction wants different words than the clay ones

2 · Alphabet, theme and layout

0 of 8 done
  • Themes as data in the state: tokens plus a skin per primitive; push and patch them
  • Layout on flexbox (a subset, via taffy): direction, size, grow, gap, padding, alignment
  • input and textarea on caretline (single_line mode), values written to the data model
  • Project components: JSON with named parameters, loaded from the project, {"use": "kpi", …}
  • Review the drawing-only components (gauge, big, bars, sparkline, chart, map): keep what’s compact and degrades well, move the rest to recipes
  • A catalog: what this screen can render (alphabet, project components, registered widgets)
  • Widget registry: any ratatui widget, registered by an embedding app (the escape hatch)
  • fictty as a library crate an app embeds, not only a binary

3 · The agent loop

0 of 7 done
  • watch: wait for events (a submit, a click on a named action, a key) without polling
  • Keep unchanged data sources on push (today every push restarts all of them)
  • Validated batches: several edits applied together, or none, naming the bad ones
  • Command policy: data-only by default for pushed UIs; commands from an allowlist; allow/ask/deny
  • The skill: the alphabet, one full example, and the rules (“check with screen”, “bind data to commands, never relay it”)
  • Rasterise pictures on a worker thread (a 15 Hz plot costs ~7 ms a frame on the main thread)
  • The test: rebuild the ownpurse walkthrough on fictty

4 · History

As proposed in design/time-travel.md: record inputs, snapshot sparsely, then history, state_at, screen_at, diff, seek, fork, replay, marks, export and import; if_seq on every write. First release: reproducible agent sessions. Tours come after.

5 · Standards

0 of 3 done
  • MCP server: a thin adapter over the socket; semantic tools first, raw keys and mouse as the fallback; the screen as an image
  • A2UI input adapter onto assembly, once the spec reaches 1.0
  • JSON Patch (RFC 6902) as the patch dialect

6 · Apps

0 of 3 done
  • Thought Control builds a screen on fictty
  • ownpurse’s walkthrough runs on fictty
  • Publish the crate