Thing 2.0 target: rationale, shape and the consumer contract
Campaign thing2. Rulings thing2-one-solver-taffy, thing2-thing-owns-text, wire-rename-freeze-fold. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
9a2a5d0736
commit
b7d154bc2f
1 changed files with 69 additions and 0 deletions
69
docs/thing2-target.md
Normal file
69
docs/thing2-target.md
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
# Thing 2.0 target
|
||||||
|
|
||||||
|
Campaign `thing2` in the eureka mind. This page holds the rationale and the
|
||||||
|
design truths the rebuild produces. The typed `thing2:target` holds the
|
||||||
|
invariants, the not-in-scope list and the canonical implementations; the
|
||||||
|
rulings are in the mind and are cited here by id, never restated.
|
||||||
|
|
||||||
|
## Why
|
||||||
|
|
||||||
|
Thing 1 handed layout to each host's own engine (CSS flexbox in the browser,
|
||||||
|
Flutter widgets, Unity UI Toolkit's Yoga), so there were as many layout specs
|
||||||
|
as renderers and the browser was the oracle in practice. Its contract grew
|
||||||
|
domain kinds (`inventory.grid`, `vn.stage`, 41 kinds in the fixtures) that every
|
||||||
|
lowerer in five languages had to implement. Parity was screenshots and gap
|
||||||
|
ledgers, not geometry. Live state binding, pointer resolution and command
|
||||||
|
results lived in each renderer, which is where the July failures came from
|
||||||
|
(views that had to reload, failing commands, schema-rejected results). Evidence:
|
||||||
|
`docs/research/thing2-foundation-prior-art.md`.
|
||||||
|
|
||||||
|
Operator, 2026-10-10: "More Things, fewer things."
|
||||||
|
|
||||||
|
- **More Things:** every surface is a composition of Things, published as Thing
|
||||||
|
Script. An inventory grid, a VN stage or an Odin wall is a composition, not a
|
||||||
|
contract kind.
|
||||||
|
- **Fewer things:** a small closed primitive set, one layout solver, one closed
|
||||||
|
render-command list, thin backends, far fewer repos.
|
||||||
|
|
||||||
|
## Shape
|
||||||
|
|
||||||
|
```
|
||||||
|
typed retained document (Thing Script, bound to typed CultMesh state)
|
||||||
|
-> Thing core: Taffy layout, Parley text, focus, editing/IME state, AccessKit tree
|
||||||
|
-> closed render-command list (+ accessibility tree)
|
||||||
|
-> thin backends: draw, and bridge input/IME/accessibility to the platform
|
||||||
|
```
|
||||||
|
|
||||||
|
Rulings in force: `thing:ruling:thing2-one-solver-taffy`,
|
||||||
|
`thing:ruling:thing2-thing-owns-text`, `thing:ruling:wire-rename-freeze-fold`,
|
||||||
|
`thing:ruling:operator-compat-rebuild`, `thing:ruling:hold-renames-for-thing2`.
|
||||||
|
Text, IME and accessibility evidence:
|
||||||
|
`docs/research/thing2-text-input-a11y-prior-art.md`.
|
||||||
|
|
||||||
|
## The consumer contract
|
||||||
|
|
||||||
|
Consumers (provider daemons, Verse daemons, CultLib runtimes, game hosts) never
|
||||||
|
see Taffy, Parley or render commands. They depend on four things only:
|
||||||
|
|
||||||
|
1. **Thing Script** — the typed documents they publish: primitives plus shared
|
||||||
|
compositions.
|
||||||
|
2. **Binding** — how a surface points at typed CultMesh state and receives
|
||||||
|
live updates.
|
||||||
|
3. **Commands** — how input returns as a typed command with a schema-checked
|
||||||
|
result.
|
||||||
|
4. **Advertisement** — how a provider announces itself to Odin.
|
||||||
|
|
||||||
|
Each waiting consumer migrates by one port cut onto this contract, which also
|
||||||
|
carries its rename to `gamecult.thing.*` (rename table T and edge table E1-E7 in
|
||||||
|
`docs/thing-campaign.md`). The consumer census sizes the floor of Thing Script;
|
||||||
|
Thing is a general library, so capability a reasonable consumer would expect is
|
||||||
|
not cut for lack of a current caller.
|
||||||
|
|
||||||
|
## Open before any cut is mapped
|
||||||
|
|
||||||
|
- The identity, lifecycle and authority table for every persistent kind
|
||||||
|
(model page in the prose map).
|
||||||
|
- The consumer census: what each waiting consumer publishes, binds and commands
|
||||||
|
today.
|
||||||
|
- Where Thing 2.0's code lives (a fork, to be put with prior art).
|
||||||
|
- Which backend lands first for cutover: at minimum web, plus TUI for agents.
|
||||||
Loading…
Reference in a new issue