RED->GREEN->REFACTOR cycle: - UI node has state store (key-value), action bindings (op/var), and local action handlers (inc/dec/set/toggle — no LLM round-trip) - Thinker self-model: knows its environment, that ACTIONS create real buttons, that UI handles state locally. Emits var/op payload for stateful actions. - Thinker's context includes UI state so it can report current values - /api/clear resets UI state, bindings, and controls - Test runner: action_match for fuzzy action names, persistent actions across steps, _stream_text restored - Counter test: 16/16 passed (create, read, inc, inc, dec, verify) - Pub test: 20/20 passed (conversation, language switch, tool use, mood) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
39 lines
986 B
Markdown
39 lines
986 B
Markdown
# Counter State
|
|
|
|
Tests that Thinker can instruct UI to create stateful controls,
|
|
and that UI handles local actions without round-tripping to Thinker.
|
|
|
|
## Setup
|
|
- clear history
|
|
|
|
## Steps
|
|
|
|
### 1. Create counter
|
|
- send: create a counter starting at 0 with increment and decrement buttons
|
|
- expect_response: contains "counter" or "count"
|
|
- expect_actions: length >= 2
|
|
- expect_actions: any action contains "increment" or "inc"
|
|
- expect_actions: any action contains "decrement" or "dec"
|
|
|
|
### 2. Check state
|
|
- expect_state: topic contains "counter" or "count" or "button"
|
|
|
|
### 3. Ask for current value
|
|
- send: what is the current count?
|
|
- expect_response: contains "0"
|
|
|
|
### 4. Increment
|
|
- action: first matching "inc"
|
|
- expect_response: contains "1"
|
|
|
|
### 5. Increment again
|
|
- action: first matching "inc"
|
|
- expect_response: contains "2"
|
|
|
|
### 6. Decrement
|
|
- action: first matching "dec"
|
|
- expect_response: contains "1"
|
|
|
|
### 7. Verify memorizer tracks it
|
|
- expect_state: topic contains "count"
|