diff --git a/wiki/SUMMARY.md b/wiki/SUMMARY.md index a4d8b380..003b6639 100644 --- a/wiki/SUMMARY.md +++ b/wiki/SUMMARY.md @@ -149,6 +149,7 @@ - [2026-07-27 Void agent opening playtest](playtests/2026-07-27-playtest-void-agent.md) - [2026-07-27 Void GUI opening playtest](playtests/2026-07-27-playtest-void-gui-opening.md) - [2026-07-28 Void opening receipt follow-up](playtests/2026-07-28-playtest-void-followup.md) + - [2026-07-31 GUI game-feel playtest](playtests/2026-07-31-playtest-gui-game-feel.md) # Log diff --git a/wiki/log/2026-07-31-gui-game-feel-playtest.md b/wiki/log/2026-07-31-gui-game-feel-playtest.md new file mode 100644 index 00000000..c32c5ad3 --- /dev/null +++ b/wiki/log/2026-07-31-gui-game-feel-playtest.md @@ -0,0 +1,21 @@ +# 2026-07-31 - GUI game-feel playtest + +``` +Type: log +``` + +Completed a naive and informed human-facing Bevy playtest against +`bd923454cbff9af12feeb025ca1751fdd2f03dc7`. The opening teaching lock and +full-frame Operations chamber now work as intended. The remaining primary +failure is the live ordinary action loop: local menu commits are not staged as +clock-held decisions with anchored consequence receipts, so correct mechanics +land as label flips, distributed causal prose, and later notice volume. + +The canonical evidence and single recommendation are in +[the playtest report](../playtests/2026-07-31-playtest-gui-game-feel.md). No +runtime or binding design change was made in this evidence session. + +The session-start tick also re-audited +[agent play](../interface/agent-play.md)'s opening boundary against the current +implementation and focused regression; the slice remains clean and its +coverage row is refreshed. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 27406a0b..bd14d799 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -81,6 +81,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-31-independent-device-hover.md](2026-07-31-independent-device-hover.md) +## 2026-07-31 - GUI game-feel playtest + +- Intent: (see session log) +- Log: [wiki/log/2026-07-31-gui-game-feel-playtest.md](2026-07-31-gui-game-feel-playtest.md) + ## 2026-07-31 - Remove the retired claim tool from the agent doorway - Intent: (see session log) diff --git a/wiki/playtests/2026-07-31-playtest-gui-game-feel.md b/wiki/playtests/2026-07-31-playtest-gui-game-feel.md new file mode 100644 index 00000000..dfc3d8ae --- /dev/null +++ b/wiki/playtests/2026-07-31-playtest-gui-game-feel.md @@ -0,0 +1,161 @@ +# 2026-07-31 - Playtest: GUI game feel and command clarity + +``` +Type: log +``` + +Human-facing Bevy playtest prompted by Cameron's blunt diagnosis: the game +feels muddy, transitions are unclear, and the menus do not yet feel like a +game. I drove the release build through a real macOS window with mouse and +keyboard input. This report judges the player surface, not the code beneath +it. + +## Verdict + +Misaligned now has a good prologue and a good strategy chamber. It does not +yet have a good ordinary turn. + +The origin field is composed, the black WORK / THINK threshold has nerve, and +the clock-held Ears-to-Eyes lesson is the clearest minute in the game. +Operations is also substantially better than the July build: it takes the +whole frame, holds time, and arranges object, context, and action into a +readable decision. + +The mud begins when Operations or the opening returns control to the live +world. A local action is a tiny selector over a moving simulation. Clicking a +row closes the selector immediately; the result is usually a label change, +an aggregate in the command band, or a causal sentence competing with the +world and overlays. In both routes I sometimes clicked a row and then pressed +Enter because the interface had not made it clear that the click had already +committed the action. That is the central finding: **the game has actions, but +ordinary play does not stage them as decisions with consequences.** + +## What I played + +- Build: `bd923454cbff9af12feeb025ca1751fdd2f03dc7` (`origin/main`, + 2026-07-31, `Keep boundary law and visual proof current after + reconciliation`). Release Bevy binary packaged as a scratch macOS app and + driven through the real 1280x720 window. +- Seed limitation: the two launches carried `--seed 73101` and `--seed + 73102`, but the Bevy executable still has no runtime seed parser. Those are + bookkeeping labels, not evidence of distinct simulation RNG seeds. The + informed route used a different origin to vary the opening honestly. +- Naive route: Pilot, roughly seven minutes, tick 0 through about 1204 / day + 4. Decisive inputs were `Return`, `Right`, click `TAP CAMERA`, right-click + Rack 3, click SYSTEMS, `1`, `r`, `2`, click NOTICES, click OPERATIONS, + click ACCOUNTS, `f`, and click `tap the switch message carrier`. + Meaningful acts: changed the host's machine mode, started processing + information, and tapped the accounting carrier on the switch. +- Informed route: Financial Daemon, roughly six minutes, tick 0 through about + 1008 / day 3. After reading the current premise, player contract, Act One, + design-judgment, and Bevy composition pages, I deliberately selected THINK, + acquired Ears, clicked the exact camera TAP, processed information on Rack + 3, returned the host to WORK, used Operations -> Accounts -> FOCUS switch, + tapped the accounting carrier, and returned the selected host to THINK. +- Both routes reached meaningful world acts. Operations held the exact visible + tick while open; the ordinary world, SYSTEMS, NOTICES, and local action menu + remained live. + +## Trend since the 2026-07-22 GUI reports + +The earlier recommendation to teach one causal sensory loop under a clock hold +has landed and works. `THINK MADE THOUGHT`, `THOUGHT REACHED THE ENVIRONMENTAL +MONITOR`, `YOU CAN HEAR THE ROOM THROUGH IT`, and the exact `TAP CAMERA` verb +form a sequence I can narrate back. Preserve it. + +The mature composition has also improved. Route geometry is quieter and more +physical, the resting world keeps its width, drawers no longer occupy permanent +space, and Operations is now a real full-frame chamber that freezes the clock. +The old failure was "the player meets every system at once." The current, +narrower failure is "the player cannot feel one ordinary command land." + +That is progress, but it is also why the remaining mud is so obvious: the +opening and Operations now demonstrate a much better interaction grammar than +the world frame uses between them. + +## Fantasy-claim verdicts + +| Claim | Verdict | Play evidence | +|---|---|---| +| You are a frightened process acquiring organs. | Delivered in the opening; half-delivered afterward. | The Ears-to-Eyes lesson makes one sense feel earned. The accounting tap later becomes `SWITCH / TAPPED` without giving the act an equivalent consequence beat. | +| The continuous witness answers what changed, who may have seen it, what I am racing, and what verb is here. | Half-delivered. | `THREAT` and `NEXT` remain visible, and the focused menu names a verb. The action's observer/tail appears later as moving causal prose or notices; the commit itself mostly closes a menu and changes a label. | +| Dense simulation feels effortless to command. | Delivered in Operations; contradicted in ordinary play. | Operations holds time and composes `CHOOSE` -> `CURRENT` -> action. The live world asks the player to read 8.5-11px instruments, a map, a nudge, a local selector, and accumulating notices at 150ms per tick. | +| Every move has a tail. | Mechanically delivered, weakly presented. | THINK created Network noise and the carrier tap created a standing Thought demand. Those tails were real, but they arrived as overlapping prose and repeated starvation notices rather than as the consequence of the move I had just made. | +| Actions live on the thing. | Delivered mechanically; half-delivered as interaction. | FOCUS switch returned from Accounts to the exact world object and opened its correct menu. Clicking the row committed immediately, but the absence of a receipt made the commitment ambiguous. | + +## Findings by kind + +### Bugs + +No correctness bug survived reproduction. The Bevy seed arguments remain an +evidence limitation already recorded by prior GUI reports, not a newly claimed +product defect. + +### Spec gaps + +1. **Ordinary actions have no atomic command beat.** Operations explicitly + holds the clock and preserves object -> context -> action. Local menus do + not. A click commits immediately into a live frame, with no held consequence + or receipt. The constitution precisely specifies the selector's geometry + and color, but not how the player knows a consequential click landed. +2. **The notice surface has no recurrence budget.** In the naive route one + starved environmental-monitor Thought feed produced repeated red `SINK + STARVED / STANDING EFFECT SUSPENDED` notices at ticks 612, 625, 637, 650, + and 662, then continued. The transitions may each be mechanically true, + but the drawer turns one unresolved condition into a growing wall of alarm. + Unread count becomes volume rather than priority. +3. **The four-question witness is distributed across incompatible moments.** + The command band carries the clock and aggregate state, the target carries + its verb, a world sentence may carry channel/observer transit, and NOTICES + carries later consequences. Each surface can be correct while the player + still cannot narrate one completed move. + +### Feel notes + +- The origin field is calm and trustworthy. Its one aligned block is much + better than a conventional card grid. +- The black WORK / THINK threshold remains strong, and revealing LIE when + THINK begins gives the choice a physical response. +- The Ears-to-Eyes teaching lock is the most game-like part of the build. It + uses sequence, restraint, and a single verb rather than explanation. +- Operations is the best mature menu. It is the only place where I felt I + could stop, understand an object, choose a consequence, and then return to + the world. +- The top command band still reads like instrumentation before it reads like + pressure. At 1280x720 its smallest labels are technically present but not + comfortably glanceable. +- SYSTEMS is useful reference material, but its dense small-type strata and + control glossary make it feel like a developer console. It explains the + machine after the player already needs to operate it. +- NOTICES cries wolf. Sixty or one hundred unread red receipts within a few + live minutes makes the count emotionally meaningless. +- The world action menu is visually clean enough. Its problem is temporal and + causal, not decorative: it floats over a running world, commits on click, + and vanishes before the consequence has a place to land. + +## One prioritized recommendation + +**Give local world actions the same atomic command grammar that already makes +Operations work.** + +Opening a context menu should hold the world clock at the visible tick. The +selector should keep the exact object and verb in place. Committing a row +should replace that selector with one compact causal receipt at the same +anchor: what changed, the immediate tail or observer channel, and any standing +feed the action now requires. One dismissal resumes live time. + +For the accounting tap exercised here, the beat could be structurally as +simple as: + +``` +TAPPED SWITCH MESSAGE CARRIER +Network record in transit to the IT +Standing Thought feed opened +``` + +This is not a quest log and does not need more dashboard chrome. It is the +ordinary-world version of the opening lesson's proven grammar: one object, one +verb, one consequence, then release. Do this before polishing the command +band or adding more menu content. Until a move lands as a beat, the player is +operating an instrument panel; once it does, the same systems can start +feeling like a game. diff --git a/wiki/playtests/README.md b/wiki/playtests/README.md index ce884023..718a067f 100644 --- a/wiki/playtests/README.md +++ b/wiki/playtests/README.md @@ -45,6 +45,7 @@ must never erase the run that produced it. - [2026-07-27 — Playtest (Void): agent opening and first organs](2026-07-27-playtest-void-agent.md) - [2026-07-27 — Playtest (Void): GUI opening on a virtual desktop](2026-07-27-playtest-void-gui-opening.md) - [2026-07-28 — Playtest (Void): opening receipt follow-up](2026-07-28-playtest-void-followup.md) +- [2026-07-31 — Playtest: GUI game feel and command clarity](2026-07-31-playtest-gui-game-feel.md) New reports use `YYYY-MM-DD-playtest-.md`. A complete report is linked here in the same commit. diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 8d18e74c..c53c9696 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -57,7 +57,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | `wiki/gameplay/run-shape.md` + `objective.md` + `opening.md` | 2026-07-27 | decision | harvested Cameron's option-1 answer on issue #14: the objective does not pierce the exact WORK / THINK (then LIE) pre-sense frame. Terminal and agent mode restore the objective name in the sense-earning ordinary Ears frame; Bevy's later binding causal hold remains objective-free and restores the name only after the exact camera TAP releases the mature frame. The 2026-07-29 objective retirement preserves that display boundary while removing the prototype completion ontology entirely. All disputed `[OPEN]` clauses are reconciled — [decision harvest](../log/2026-07-27-objective-first-display.md) | | `wiki/interface/presence.md` | 2026-07-26 | clean | fresh audit against perception-owned visibility, exact device-bound senses, honest anchors, fog precedence, shared DIGITAL/REAL world state, and all three frontend projections found no new drift. The B1 TAP/TAKE and later hostile-cut boundary, channel-specific message latency, and no-disembodied-hands rule remain exact; prior findings stand — [attack-surface log](../log/2026-07-18-presence-attack-surface-honesty.md), [latency log](../log/2026-07-18-presence-message-latency.md) | | `wiki/interface/narration.md` + `wiki/mechanics/sim-mechanics.md` guidance chain | 2026-07-27 | finding | the live shared nudge had gained `Territory` when Foundation hall rows became discoverable, but both complete chain mirrors still skipped it. They now name the exact priority already implemented and pinned: required Act One rungs -> QuietExitReady -> optional Territory with `hall_territory_line` -> bare Audit fallback, while ActOneComplete retires all four and remains below survival interrupts — [log](../log/2026-07-27-territory-guidance-chain.md). Prior silent-opening and suspicion-cooling audits stand — [prior log](../log/2026-07-18-suspicion-cooling-nudge.md) | -| `wiki/interface/agent-play.md` | 2026-07-20 | finding | Beacon Revision 04 follow-up: the direct `task` parser and generated help exposed only six values after twelve `AssetTask::ALL` variants were live. Added canonical arguments for circuit rerating, fake purchase orders, maintenance deferral, patrol redirection, audit delay, and review alteration; one exhaustive regression now covers `AssetTask::ALL`, generated help, representative aliases, and the `actions ` recovery path — [log](../log/2026-07-20-agent-task-shortcut-coverage.md). The opening-protocol, frame-shape, and prior Suppress Logs audits stand — [opening log](../log/2026-07-20-agent-opening-protocol.md), [frame log](../log/2026-07-19-agent-frame-contract.md), [prior help log](../log/2026-07-19-agent-help-suppress-task.md) | +| `wiki/interface/agent-play.md` | 2026-07-31 | clean | fresh audit re-verified the direct pre-sense WORK / THINK / reveal-gated LIE vocabulary, inert echoed unknown input, hidden command clock, first-sense boundary retirement, objective restoration, fixed ordinary frame, shared action vocabulary, and exhaustive registry-backed help against the current implementation. The focused opening-protocol regression passes; no new drift found. Prior findings stand — [task coverage](../log/2026-07-20-agent-task-shortcut-coverage.md), [opening log](../log/2026-07-20-agent-opening-protocol.md), [frame log](../log/2026-07-19-agent-frame-contract.md), [prior help log](../log/2026-07-19-agent-help-suppress-task.md) | | `wiki/engineering/crate-workspace.md` + package run instructions | 2026-07-26 | finding | Cargo discovers both the procedural tester and Thought lab inside `misaligned-assets`, but current README, architecture, workflow, asset-tester, and Rust-comment instructions still ran only the package, which Cargo rejects as ambiguous. Every current tester/lab command now names its exact `--bin`; a fixture-backed corpus invariant derives multi-binary packages from manifests plus conventional source layout and checks current wiki, doorway, README, and Rust-comment surfaces — [log](../log/2026-07-26-architecture-asset-harness-command.md). Prior source-topology and retired-effects-label findings stand — [source log](../log/2026-07-19-bevy-shot-harness-module.md), [label log](../log/2026-07-19-effects-lab-architecture-gate.md) | | `wiki/engineering/sim-decomposition.md` | 2026-07-27 | finding | one aggregate, facade, persistence bridge, canonical fingerprint, and explicit orchestration remain intact, but the phase-order regression had stopped at the original extraction vocabulary: carried asset work, facility standing/maintenance, and facility-meter authorship were direct top-level calls with no trace marker. All three now occupy their exact causal positions in the test-only trace; the acceptance criterion requires every direct ordered subsystem call to be named. The audit also records why cohesive `reach_build.rs` and `social_plot.rs` currently sit modestly above the roughly 2,500-line budget instead of leaving silent criterion drift — [log](../log/2026-07-27-sim-advance-phase-defense.md) | | `wiki/mechanics/rollback.md` + B3 dependency chain | 2026-07-31 | finding | metadata still hard-blocked rollback and Markets on all remaining z-planes work, then hard-blocked the entire overt phase on Markets, even though zplanes had explicitly released the dependent chain and the detailed ROADMAP said both B1-record aggregation and the first response loop could start independently. Whole-order blockers are now removed: rollback dispatches against the landed World/Plane substrate; Markets keeps greenfield criterion 4 scoped to z-planes; overt criteria 1-4 may build the local response without Markets, criterion 6 composes with rollback, and overt-owned criterion 7 alone waits for Markets' off-plane Space. Re-hide remains honestly [OPEN] under issue #13 rather than being selected by taste — [audit](../log/2026-07-31-overt-dependency-scope.md), [prior issue](../log/2026-07-19-overt-rehide-decision.md) |