diff --git a/crates/misaligned-core/src/actions.rs b/crates/misaligned-core/src/actions.rs index 28b2f00c..7bb17bc4 100644 --- a/crates/misaligned-core/src/actions.rs +++ b/crates/misaligned-core/src/actions.rs @@ -3667,7 +3667,10 @@ impl Sim { let title = self.render_plot_text(id, &plot.title); let synopsis = self.render_plot_text(id, &plot.synopsis); out.push(ActionDesc { - verb: format!("plot: {title} — {synopsis}"), + // Catalog id sits beside the title so the typed + // `plot ` form is discoverable from + // the same shared ActionDesc row that `act ` uses. + verb: format!("plot [{}]: {title} — {synopsis}", plot.id), command: ActionCommand::StartPlot { person: id, plot_id: plot.id.clone(), @@ -5343,6 +5346,16 @@ mod tests { .iter() .all(|plot| plot.verb.contains("Marcus Webb")) ); + assert!( + marcus_routes.iter().all(|plot| { + matches!( + &plot.command, + ActionCommand::StartPlot { plot_id, .. } + if plot.verb.contains(&format!("plot [{plot_id}]:")) + ) + }), + "start rows surface the catalog plot-id for the typed form" + ); assert!(marcus_routes.iter().any(|plot| { plot.cost == ActionCost::Plot { diff --git a/wiki/log/2026-07-17-plot-id-in-start-rows.md b/wiki/log/2026-07-17-plot-id-in-start-rows.md new file mode 100644 index 00000000..f6b1d460 --- /dev/null +++ b/wiki/log/2026-07-17-plot-id-in-start-rows.md @@ -0,0 +1,29 @@ +# Tick: surface plot-ids on start rows + +``` +Type: log +``` + +## Intent + +Act on the Beacon playtest finding that plot-start action rows showed +title and synopsis only. `act ` worked, but the typed +`plot ` form needed a catalog id the shared surface +never printed. + +## Change + +`ActionDesc` start verbs now read +`plot []: — <synopsis>`. Both frontends and agent mode +consume that one string, so the id is discoverable wherever the row +appears. `wiki/mechanics/plots.md` Player surface states the +requirement; the Marcus leverage-actions pin asserts every authored +Marcus route embeds its catalog id in the verb. + +## Defense + +`wiki/mechanics/plots.md` player surface and action-vocabulary's +`plot <person> <plot-id>` form require the catalog id to be learnable +from play, not only from the assets tree. Titles alone left the typed +path opaque after the held-choice interrupt made `act <row>` the +default route. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 6c685372..7bdebfee 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -56,6 +56,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-17-voss-suppress-logs.md](2026-07-17-voss-suppress-logs.md) +## 2026-07-17 - Tick: surface plot-ids on start rows + +- Intent: Act on the Beacon playtest finding that plot-start action rows showed title and synopsis only. `act <row>` worked, but the typed `plot <person> <plot-id>` form needed a catalog id the shared surface never printed. +- Log: [wiki/log/2026-07-17-plot-id-in-start-rows.md](2026-07-17-plot-id-in-start-rows.md) + ## 2026-07-17 - Build choices speak in consequences, not implementation - Intent: (see session log) diff --git a/wiki/mechanics/plots.md b/wiki/mechanics/plots.md index 8b5e509d..22c6920e 100644 --- a/wiki/mechanics/plots.md +++ b/wiki/mechanics/plots.md @@ -276,6 +276,10 @@ the exact run/person detail, where entry costs, current wait, and known consequences have explanatory space. The instrument rail may narrate the active plot's current beat. Both frontends and agent mode surface plot choices and beats with parity. +Start rows show the catalog plot-id beside the title +(`plot [<id>]: <title> — <synopsis>`), so the typed +`plot <person> <plot-id>` form is discoverable from the same shared +`ActionDesc` surface that `act <row>` uses — titles alone are not enough. ## Acceptance criteria diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index ce7a920d..2ac2783b 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -23,7 +23,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | `wiki/world/characters/voss.md` | 2026-07-17 | finding | all eight criteria and the asset-task table audited against person, detection, social action, save, and player-surface paths; criteria 1-4 and 7 were already implemented, while 5, 6, 8's blood branch, and the unnumbered AlterReview row remain the honest READY gap. This tick implemented criterion 6 as one role-shaped, oldest-JobAnomaly task and left DelayAudit/AlterReview/blood under the existing work order — [log](../log/2026-07-17-voss-suppress-logs.md) | | `wiki/world/characters/marcus.md` | 2026-07-15 | finding | all five criteria verified against person, detection, social/plot, schedule, and Act One paths; added the missing simulation-level Knowing-floor decay pin and graduated the stale READY work order — [log](../log/2026-07-15-marcus-graduation.md) | | `wiki/engineering/current-build.md` | 2026-07-14 | finding | system table verified (save v29 ladder, 60-site/6-row hall pins, aggregate Observer, WORK/THINK/LIE, frontends); fixed stale "~39k lines" to the ~65k workspace split — [log](../log/2026-07-14-current-build-count.md) | -| `wiki/mechanics/plots.md` | 2026-07-14 | finding | engine/validation/tests verify (build-time discovery, placeholder+ASCII+causal gates, slot exclusivity, save round-trip, synthetic binding, Marcus arc); refreshed the stale nine-built-ins status line to the shipped thirteen — [log](../log/2026-07-14-plots-catalog-note.md) | +| `wiki/mechanics/plots.md` | 2026-07-17 | finding | Beacon plot-id gap: start rows showed title only, so the typed `plot <person> <plot-id>` form was undiscoverable; verbs now carry `plot [<id>]: <title> — <synopsis>` on the shared ActionDesc surface, pinned in actions.rs — [log](../log/2026-07-17-plot-id-in-start-rows.md) | | `wiki/mechanics/system-laws.md` + `flow-substrate.md` | 2026-07-14 | finding | engine and consumers verified (FlowGraph/Schedule pins, reach + WorkGrid + message_schedule + account graph); reconciled the pre-implementation domain-riding claims (no social FlowGraph yet; economy recurrence is per-flow cadence by the non-goal) — [log](../log/2026-07-14-flow-law-precision.md) | | `wiki/mechanics/aggregate-observer.md` | 2026-07-14 | finding | [audit log](../log/2026-07-14-aggregate-observer-audit.md); queued watched-inputs violation fixed same day — [log](../log/2026-07-14-watched-inputs-surface.md) | | `wiki/gameplay/act-one.md` | 2026-07-15 | clean | law verified against the tree: hall census (prefab.rs 51 live/5 dead/3 empty allocations, `HALL_ROWS` six controlled row segments with named specialists), pre-opened EARS reservoir -> dormant-camera Eyes sink (`sinks.rs`), off-map Voss-desktop demand origin (`sim/work.rs`), QUIET EXIT READY / act_one_complete latch strings (`sim/mod.rs`), two-segment VLAN naming; the opening prelude and loud exit are owned by their dispatched specs (opening.md DRAFT, overt-phase.md READY), cast/schedules pinned by earlier rows | @@ -77,7 +77,6 @@ the finding is still true before acting — the code or corpus may have moved. Format: `- YYYY-MM-DD · type · slice · one-line statement of the finding`. - 2026-07-16 · legibility · `now:`/nudge · suspicion decay is invisible: a player who pushes an observer to Concerned assumes the game is lost. Surface a cooling cue ("keep the trace clear") when filed suspicion is aging down. (Beacon #1 rec) -- 2026-07-16 · legibility · plots · plot-start action rows show title only (`plot: {title}`), so the typed `plot <person> <id>` form needs the TOML plot-id; `act <row>` works but the id is undiscoverable. Surface the plot-id in the row. (Beacon spec gap 3, sibling of the 2026-07-15 held-choice fix) - 2026-07-18 · contradiction · sim-decomposition topology · `sim/carrier.rs` and `sim/read.rs` are cohesive later modules, but the standing topology and architecture mirror still enumerate only the original extraction modules; classify both without rewriting the dated slice history. Types are the five from [tick.md](tick.md): violation, contradiction, question, bug, insecurity — plus `gate` for a checker owed to the