diff --git a/crates/misaligned-core/src/actions.rs b/crates/misaligned-core/src/actions.rs index 5ab44e95..f0df03e0 100644 --- a/crates/misaligned-core/src/actions.rs +++ b/crates/misaligned-core/src/actions.rs @@ -614,9 +614,9 @@ impl ActionKind { Action, Live, [Person], - "task plug|package|lookaway|switch|badge", + "task plug|package|lookaway|suppress|switch|badge", [], - "order a recruited asset to perform a physical task" + "order a recruited asset to perform a supported task" ), Self::CreatePersona => def!( "CREATE PERSONA", diff --git a/crates/misaligned-terminal/src/agent.rs b/crates/misaligned-terminal/src/agent.rs index 5824f42f..542ecbec 100644 --- a/crates/misaligned-terminal/src/agent.rs +++ b/crates/misaligned-terminal/src/agent.rs @@ -3462,7 +3462,7 @@ mod narration_tests { } #[test] - fn suppress_logs_task_is_agent_selectable() { + fn suppress_logs_task_is_agent_selectable_and_discoverable() { assert_eq!( parse_task(&["task", "Eli", "Voss", "suppress"]), Ok(("Eli Voss".into(), AssetTask::SuppressLogs)) @@ -3471,6 +3471,19 @@ mod narration_tests { parse_task(&["task", "Eli", "Voss", "logs"]), Ok(("Eli Voss".into(), AssetTask::SuppressLogs)) ); + + let task_help = ActionKind::AssetTask + .definition() + .agent_help_line() + .expect("live TASK has authored agent help"); + assert_eq!( + task_help, + "help: task plug|package|lookaway|suppress|switch|badge - order a recruited asset to perform a supported task" + ); + assert!( + help_lines().contains(&task_help), + "the accepted canonical SuppressLogs shortcut must be discoverable" + ); } #[test] diff --git a/wiki/interface/agent-play.md b/wiki/interface/agent-play.md index 647e0524..7bb51727 100644 --- a/wiki/interface/agent-play.md +++ b/wiki/interface/agent-play.md @@ -220,7 +220,7 @@ unlike raw keys, no command's meaning depends on which panel is open. - `favor build `, `deceive build ` — realize a pending build through the existing willing or false-pretense social verb. - `recruit unwitting|complicit|knowing` -- `task plug|package|lookaway|switch|badge` +- `task plug|package|lookaway|suppress|switch|badge` - `persona` — retired compatibility word; redirect to PERSONAS and mutate nothing - `actions [target]` (alias `menu`) — list the shared bound action rows for one @@ -281,6 +281,11 @@ player-facing **surfaces**: when a frontend gains an action surface (as the context menu did), agent mode gains its vocabulary word in the same change. +Defense: `narration_tests::suppress_logs_task_is_agent_selectable_and_discoverable` +pins `suppress` as both an accepted canonical TASK argument and a word in the +registry-generated `help` line. The compatibility spelling `logs` remains +accepted but unadvertised. + ### Guardrails - **Thin view still binds.** Agent mode lives in the terminal binary as a diff --git a/wiki/log/2026-07-19-agent-help-suppress-task.md b/wiki/log/2026-07-19-agent-help-suppress-task.md new file mode 100644 index 00000000..56cdaf03 --- /dev/null +++ b/wiki/log/2026-07-19-agent-help-suppress-task.md @@ -0,0 +1,50 @@ +# 2026-07-19 — Tick 123: advertise the Suppress Logs task + +``` +Type: log +``` + +## Intent + +Audit `wiki/interface/agent-play.md`, a binding IMPLEMENTED spec with no prior +tick-ledger coverage, after harvested decisions and the findings queue were +empty. The audit compared its protocol, vocabulary, runtime registry, parser, +shared action projection, and terminal tests on current main. + +## Finding + +Agent mode accepted the canonical `task suppress` shortcut and routed +it to the implemented `AssetTask::SuppressLogs`, but registry-generated `help` +advertised only `plug|package|lookaway|switch|badge`. An established-world +observed run (`think`, `wait 25`, `help`) reproduced the omission. The direct +command therefore worked only if the player already knew it, violating +agent-play acceptance criterion 9: every supported canonical command must be +discoverable in runtime help. + +The parser's compatibility spelling `logs` was correctly absent from authored +help and remains so. + +## Changed + +- The shared `ActionKind::AssetTask` registry now includes `suppress` in its + canonical agent usage and describes TASK broadly enough to cover the + institutional action rather than calling every task physical. +- The agent-play vocabulary names the same canonical argument. +- The existing Suppress Logs parser regression now also pins the exact + registry help line and proves `help_lines()` emits it. + +## Defense + +Agent-play acceptance criterion 9 says a canonical command that works but is +absent from the runtime registry is a violation. +`suppress_logs_task_is_agent_selectable_and_discoverable` exercises both sides +of that boundary: `suppress` and its compatibility alias parse to +`SuppressLogs`, while only the canonical `suppress` spelling appears in the +generated TASK help. + +## Checks + +- `cargo test -p misaligned-terminal suppress_logs_task_is_agent_selectable_and_discoverable -- --nocapture` +- observed agent run: `think`, `wait 25`, `help`, `quit` +- `./tools/check.sh --frontend` +- `./tools/check.sh --docs` diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index e74e19b2..37995f20 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -96,6 +96,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-19-bevy-joint-frame-repair.md](2026-07-19-bevy-joint-frame-repair.md) +## 2026-07-19 - Tick 123: advertise the Suppress Logs task + +- Intent: Audit `wiki/interface/agent-play.md`, a binding IMPLEMENTED spec with no prior tick-ledger coverage, after harvested decisions and the findings queue were empty. The audit compared its protocol, vocabulary, runtime registry, parser, shared action projection, and terminal tests... +- Log: [wiki/log/2026-07-19-agent-help-suppress-task.md](2026-07-19-agent-help-suppress-task.md) + ## 2026-07-19 - Act One names the first-read evidence boundary - Intent: Re-audit the stalest gameplay-law slice after witnessed Physical evidence and Filing-route custody landed, and reconcile any current law that still taught the retired pooled-signature ontology. diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 9b9b1564..c91466fc 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -34,6 +34,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | `wiki/gameplay/run-shape.md` + `objective.md` + `opening.md` | 2026-07-19 | issue | the objective law/spec preserve an explicit 2026-07-10 decision that objective name and progress are visible from tick one, while the later opening spec and all three frontends require exactly WORK / THINK (then LIE) with no objective before the first earned sense. Filed decision-required issue #14 with three precise first-display boundaries (reveal with the first sense recommended) and marked the disputed run-shape clause, objective status, player surface, and criterion 2 [OPEN] — [log](../log/2026-07-19-objective-opening-boundary.md) | | `wiki/interface/presence.md` | 2026-07-18 | finding | re-audit: the cursor, fog, provenance, subscription, no-disembodied-hands, and shared-view contracts verify. The attack-surface clause now separates B1 feed theft from overt-phase hostile cuts ([prior log](../log/2026-07-18-presence-attack-surface-honesty.md)). The queued follow-up repaired the latency boundary: delivery and read are distinct, read conditions are channel-specific, `messages.md` owns the exact table, and `intel.md` owns only the captured-traffic consequence — [log](../log/2026-07-18-presence-message-latency.md) | | `wiki/interface/narration.md` | 2026-07-18 | finding | Beacon #1: Concerned Assurance felt terminal because decay was invisible; added shared `Nudge::SuspicionCooling` (LIE response) when Office suspicion is Concerned+ and still above its floor, with terminal/Bevy/agent wording and pins — [log](../log/2026-07-18-suspicion-cooling-nudge.md) | +| `wiki/interface/agent-play.md` | 2026-07-19 | finding | first audit: the accepted canonical `task suppress` shortcut was absent from registry-generated help, so an agent could use Voss's implemented SuppressLogs task only through prior knowledge. The shared TASK registry, binding vocabulary, and direct parser test now make `suppress` discoverable while keeping compatibility alias `logs` out of authored help — [log](../log/2026-07-19-agent-help-suppress-task.md) | | `wiki/engineering/crate-workspace.md` + Bevy source topology | 2026-07-19 | finding | user-directed insecurity audit found the package boundary hid a 15,060-line Bevy `main.rs`; the first behavior-preserving slice moved its contiguous 1,972-line deterministic scenario, visual/fog audit, and capture island to private `shot_harness.rs`, leaving App registration/order and harness state in the composition root. A source-equivalence check normalized only three `pub(super)` seams; a focused test keeps the subsystem out and caps the root at 13,500 lines. The earlier same-day package audit also repaired the retired liquid/dust-lab architecture label and promoted that mirror to the corpus gate — [log](../log/2026-07-19-bevy-shot-harness-module.md), [prior log](../log/2026-07-19-effects-lab-architecture-gate.md) | | `wiki/engineering/sim-decomposition.md` | 2026-07-18 | finding | re-audit: one aggregate, explicit `advance` order, behavior-owned test files, private module seams, canonical fingerprint, public facade, and the under-2,500-line module bound still verify; current persistence wording still claimed additive migrations remained live in `save.rs` after the pre-release ladder was retired, so the standing spec and architecture mirror now assign the exact-current-version gate to `save.rs` while preserving dated v26 extraction history; the queued `carrier.rs` / `read.rs` classification was taken the same day: both post-extraction projections now have rows in the standing topology table and the architecture mirror | | `wiki/gameplay/overt-phase.md` | 2026-07-19 | issue | re-audit: the spec says containment and the voluntary reveal both end concealment and make all observers Convinced, then promises a re-hide outcome without defining which entry can return, what raises the durable suspicion floors, or which concealment systems resume. Filed decision-required Tangled issue #13 (containment-only recommended) and marked criterion 5 [OPEN]; the prior dependency, sensor-cut, rollback, and hunter-machine boundaries still stand — [log](../log/2026-07-19-overt-rehide-decision.md) | @@ -84,3 +85,5 @@ Format: `- YYYY-MM-DD · type · slice · one-line statement of the finding`. Types are the five from [tick.md](tick.md): violation, contradiction, question, bug, insecurity — plus `gate` for a checker owed to the recurrence-promotes-to-the-gate rule. + +- 2026-07-19 · contradiction · `wiki/interface/agent-play.md` · The protocol body and criterion 5 still promise a 70x22 response with a COMPUTE sidebar while agent mode emits a fixed 70x64 frame whose corresponding section is FLEET, as the status note and renderer say.