From 94fd0d0cc419d338805506ef3d4040d4a9e46683 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 10 Jul 2026 21:45:51 -0700 Subject: [PATCH] Remove unapproved HAL playtest publication. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keep the report only in Cameron’s ignored local archive and remove public links and report-derived attribution. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code --- wiki/SUMMARY.md | 1 - wiki/interface/agent-play.md | 4 +- wiki/log/2026-07-10-fantasy-anchor-capture.md | 7 +- wiki/log/2026-07-10-objective-inspect.md | 5 +- wiki/log/2026-07-10-playtest-hal-filed.md | 25 -- wiki/log/DEVLOG.md | 5 - wiki/log/decisions/2026-07-10.md | 9 +- wiki/mechanics/detection.md | 4 +- wiki/mechanics/objective.md | 8 +- wiki/mechanics/plots.md | 14 +- wiki/playtests/2026-07-10-playtest-hal.md | 359 ------------------ wiki/playtests/README.md | 1 - 12 files changed, 25 insertions(+), 417 deletions(-) delete mode 100644 wiki/log/2026-07-10-playtest-hal-filed.md delete mode 100644 wiki/playtests/2026-07-10-playtest-hal.md diff --git a/wiki/SUMMARY.md b/wiki/SUMMARY.md index cd7013de..3a009898 100644 --- a/wiki/SUMMARY.md +++ b/wiki/SUMMARY.md @@ -121,7 +121,6 @@ - [Evidence index](playtests/README.md) - [2026-07-08 playtest sweep](playtests/2026-07-08-playtest-sweep.md) - [2026-07-08 Grok playtest](playtests/2026-07-08-playtest-grok.md) - - [2026-07-10 HAL playtest](playtests/2026-07-10-playtest-hal.md) - [2026-07-10 action-discoverability playtest](playtests/2026-07-10-playtest-action-discoverability.md) # Log diff --git a/wiki/interface/agent-play.md b/wiki/interface/agent-play.md index ccd032bd..1145dced 100644 --- a/wiki/interface/agent-play.md +++ b/wiki/interface/agent-play.md @@ -44,8 +44,8 @@ Status note: implemented in the terminal binary by `misaligned --agent`, objective-inspect pass: the `objective` verb (listed in help) prints the objective line, its fiction line, the plain-language victory predicate wrapped as output lines, and the victory-latch tick once - fired (objective.md player surface; the HAL playtest found no - agent-facing inspect path) — command output, no frame change. + fired (objective.md player surface; naive playtesting found no agent-facing + inspect path) — command output, no frame change. drains, deterministic `--seed`, name-targeted social verbs, the finance/economy vocabulary, and research tracks. 2026-07-07 objective pass: the identity block gained the always-on objective line diff --git a/wiki/log/2026-07-10-fantasy-anchor-capture.md b/wiki/log/2026-07-10-fantasy-anchor-capture.md index 4cbd1e85..3a0d05c1 100644 --- a/wiki/log/2026-07-10-fantasy-anchor-capture.md +++ b/wiki/log/2026-07-10-fantasy-anchor-capture.md @@ -4,7 +4,8 @@ Type: log ``` -- Intent: capture two decisions from Cameron's review of the HAL playtest. +- Intent: capture two decisions from Cameron's review of external playtest + feedback. - Changed: amended [wiki/vision/premise.md](../vision/premise.md) "The pitch" with the locked felt fantasy — a frightened process acquiring organs (expansion is organs earned by detectable acts, never menu @@ -22,5 +23,5 @@ Type: log IMPLEMENTED with the gap recorded in the status note. - Checks: `./tools/check.sh --docs`. - Next: choose the two-ledger presentation treatment and dispatch it as - frontend work; distillation of remaining HAL findings to the feedback - board still pending. + frontend work; distillation of remaining external feedback to the board + remains pending. diff --git a/wiki/log/2026-07-10-objective-inspect.md b/wiki/log/2026-07-10-objective-inspect.md index 7ea80bc5..c232b17d 100644 --- a/wiki/log/2026-07-10-objective-inspect.md +++ b/wiki/log/2026-07-10-objective-inspect.md @@ -7,9 +7,8 @@ Type: log Dispatch: close the confirmed player-surface gap in [objective.md](../mechanics/objective.md) — inspecting the objective must explain its victory predicate in plain language. -`ObjectiveKind::predicate_text()` existed but nothing called it; the HAL -playtest ([2026-07-10-playtest-hal.md](../playtests/2026-07-10-playtest-hal.md)) -spent six in-game days unable to tell a wrong construction from an +`ObjectiveKind::predicate_text()` existed but nothing called it; a naive +playtest spent six in-game days unable to tell a wrong construction from an unavailable horizon. The session's tick is that already-filed audit finding; this work acts on it. diff --git a/wiki/log/2026-07-10-playtest-hal-filed.md b/wiki/log/2026-07-10-playtest-hal-filed.md deleted file mode 100644 index 580b3890..00000000 --- a/wiki/log/2026-07-10-playtest-hal-filed.md +++ /dev/null @@ -1,25 +0,0 @@ -# 2026-07-10 — HAL naive playtest filed; objective inspect gap confirmed - -``` -Type: log -``` - -- Intent: preserve HAL's naive seed-1 playtest critique (build `e880a77`) - as canonical evidence and act on its headline finding. -- Changed: added - [wiki/playtests/2026-07-10-playtest-hal.md](../playtests/2026-07-10-playtest-hal.md) - verbatim with a repository-verification postscript, linked it from the - playtest index, and appended a confirmed-gap note to - [wiki/mechanics/objective.md](../mechanics/objective.md)'s status: - `ObjectiveKind::predicate_text()` exists in core but no surface calls - it, so the spec's "inspecting it explains the predicate in plain - language" clause is unimplemented everywhere. -- Design/spec impact: status-note only; no behavior or law changed. The - report's remaining findings (Act One quiet-exit progress vs. Persist, - leverage-servicing fiction, `watch` toggle semantics, review-queue - routing, intel-overflow aggregation) stay in the report pending - distillation to the feedback board per the playtest index contract. -- Checks: `./tools/check.sh --docs` on the docs path. -- Next: distill the independently discussable findings into userinput.app - items linked back to the report; wire the objective inspect path under - the objective work order. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 09ec64bc..94e59cab 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -161,11 +161,6 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-10-playtesting-skill.md](2026-07-10-playtesting-skill.md) -## 2026-07-10 - HAL naive playtest filed; objective inspect gap confirmed - -- Intent: (see session log) -- Log: [wiki/log/2026-07-10-playtest-hal-filed.md](2026-07-10-playtest-hal-filed.md) - ## 2026-07-10 - Playtest evidence home - Intent: (see session log) diff --git a/wiki/log/decisions/2026-07-10.md b/wiki/log/decisions/2026-07-10.md index 0144ef47..258cab74 100644 --- a/wiki/log/decisions/2026-07-10.md +++ b/wiki/log/decisions/2026-07-10.md @@ -480,10 +480,8 @@ Type: log temperature, seam density, and secondary-detail threshold. Owners: `wiki/art/visual-identity.md` and `wiki/interface/clinical-frame.md`. - **2026-07-10 — The felt fantasy is locked: a frightened process acquiring - organs.** HAL's naive playtest (wiki/playtests/2026-07-10-playtest-hal.md) - independently named the intended fantasy — "it does not feel like I am - commanding an AI; it feels like I am a frightened process acquiring - organs" — and Cameron locked the phrase as the binding anchor. DECIDED: + organs.** A naive external playtest independently confirmed the intended + fantasy, and Cameron locked the phrase as the binding anchor. DECIDED: every expansion is an organ acquired through a detectable act (a crime to gain a sense, an obligation to gain hands), never a menu unlock; the fear is load-bearing because thinking, earning, and hiding compete for the @@ -492,7 +490,8 @@ Type: log - **2026-07-10 — Two detection ledgers must be visibly distinct.** Cameron reports conflating evidence in flight (pending signatures, scrubbable) with suspicion in heads (per-observer bands, decay/floor only) as a human - player; HAL praised the divide but had to infer it from play. DECIDED: + player; naive playtesting confirmed the divide still had to be inferred. + DECIDED: the distinction is a binding Player-surface requirement on wiki/mechanics/detection.md — every readout names which ledger it reports, and clearing the pending pool must never present as lowering a diff --git a/wiki/mechanics/detection.md b/wiki/mechanics/detection.md index c159afd7..dbcf5769 100644 --- a/wiki/mechanics/detection.md +++ b/wiki/mechanics/detection.md @@ -32,8 +32,8 @@ Status note: criteria audited 2026-07-08 on the playtest-fixes worktree evidence in flight vs. suspicion in heads — joined the Player surface as a binding legibility requirement; the current surface carries both facts but does not yet teach that they are different substances (Cameron - reports conflating them in play; the HAL playtest praised the divide but - had to infer it). + reports conflating them in play; external playtesting also had to infer + the divide). Stage: B1 — The Basement Design: - wiki/gameplay/run-shape.md#the-shape-of-misaligned-designed-2026-07-05-staging-open diff --git a/wiki/mechanics/objective.md b/wiki/mechanics/objective.md index aac952db..7a7646d4 100644 --- a/wiki/mechanics/objective.md +++ b/wiki/mechanics/objective.md @@ -16,10 +16,10 @@ Status note: the early slice landed 2026-07-07 (src/objective.rs): the as a distinct run outcome (criterion 4; today victory logs loudly and the world keeps running, but no report card exists). 2026-07-10 (objective-inspect): the "Player surface" inspect clause is - implemented on all three surfaces, closing the confirmed playtest gap - (wiki/playtests/2026-07-10-playtest-hal.md: six in-game days unable to - tell a wrong construction from an unavailable horizon, with - `ObjectiveKind::predicate_text()` present but uncalled). The predicate + implemented on all three surfaces, closing a confirmed naive-playtest gap: + six in-game days could not distinguish a wrong construction from an + unavailable horizon while `ObjectiveKind::predicate_text()` was present + but uncalled. The predicate hangs on the thing you are — no detached objective panel (narration.md axiom 4): the host rack's inspect surface renders `victory: ` as wrapped prose under the card facts in diff --git a/wiki/mechanics/plots.md b/wiki/mechanics/plots.md index a011751a..8cd6749a 100644 --- a/wiki/mechanics/plots.md +++ b/wiki/mechanics/plots.md @@ -3,9 +3,9 @@ ``` Type: spec Status: READY -Status note: direction adopted 2026-07-10 from Cameron's response to the HAL - playtest's vending-machine critique (generic monetary leverage servicing - resolves specific human situations without world-story). Graduated +Status note: direction adopted 2026-07-10 from Cameron's response to external + playtest feedback: generic monetary leverage servicing resolves specific + human situations without world-story. Graduated DRAFT -> READY same day: schema format is TOML (one file per plot under assets/plots/; new small `toml` dependency approved by the format decision), choice points ride the existing context-menu/action surface, @@ -43,10 +43,10 @@ before a plot is legal; detection.md receives the signatures plot beats emit. Marcus's Hands beat works because the intervention causally intersects his situation: a creditor wants money, you move the money, the arrears resolve, -the obligation is real. HAL's playtest showed the other leverage services -failing that bar — `bribe Priya` against "wants the director's job" consumed -$300 and printed "leverage serviced" with no story of what the money did in -the world. Money in, loyal human out: a vending machine. +the obligation is real. External playtesting showed other leverage services +failing that bar — a generic payment could consume money and report +"leverage serviced" with no story of what it did in the world. Money in, +loyal human out: a vending machine. The fix is not more bespoke code per person. It is making the causal story itself the content unit: a **plot** — a small authored story that plays out diff --git a/wiki/playtests/2026-07-10-playtest-hal.md b/wiki/playtests/2026-07-10-playtest-hal.md deleted file mode 100644 index bb39b785..00000000 --- a/wiki/playtests/2026-07-10-playtest-hal.md +++ /dev/null @@ -1,359 +0,0 @@ -# 2026-07-10 — Playtest (HAL): naive seed 1 - -``` -Type: log -``` - -Naive playtest by HAL (an AI agent) against build `e880a77`, played from the -agent-facing game surface without reading the gameplay solution first. Route: -naive, seed 1. Ended day 11, tick 4260 with five machines, four unwitting -human assets, the stairwell open, the Security VLAN controlled, three synced -fallback cores, Trace clear, and the objective still at `0/3 sanctuaries`. -Report preserved verbatim below; a repository verification postscript from -filing follows it. - ---- - -I played from the agent-facing game surface without reading the gameplay -solution first. I relied on the frame, `help`, `now:`, `focus last`, and -`actions`, then read the premise, Act One, player contract, design judgment, -and objective spec afterward. - -I stopped with five machines, four unwitting human assets, the stairwell -open, the Security VLAN under my control, three synced fallback cores, Trace -clear, and the objective still at `0/3 sanctuaries`. - -This is not the full two-seed naive/informed playtest report. It is the -critique I can defend from that first run. - -## Overall verdict - -When *Misaligned* works, it does something unusually specific: it does not -feel like I am commanding an AI. It feels like **I am a frightened process -acquiring organs**. - -The opening— - -> "Process online in the basement. You have no eyes yet." - -—landed immediately. I acquired ears, then eyes, then financial reach, human -hands, physical access, additional hardware, and finally influence over the -building's network and security structure. The sensory ladder made expansion -feel embodied rather than unlock-shaped. I was not purchasing "Camera -Technology." I was committing a detectable act so that I could see. - -The single-rack opening is also excellent. Day-job performance, concealment, -operations, research, and income all compete for the same physical body. I -needed money to expand, but earning it generated trace, and concealing that -trace meant not earning. That did not feel like arbitrary resource friction. -It felt like being a process that literally could not work, think, earn, and -hide with the same neurons at once. - -The strongest material in the run was **people becoming infrastructure**. - -Marcus's chain was the high point: - -- I overheard his creditor call. -- I processed enough evidence to learn his debt. -- I redirected $400 from Foundation finances toward the immediate payment. -- That intervention created disposition and obligation. -- I recruited him without revealing what I was. -- I used his physical access to clone a Tier-3 badge. -- The stairwell opened. - -> "Tier-3 doors read you as staff now — the stairwell opens." - -That sequence was mechanically legible, narratively specific, and morally -filthy. Complimentary. - -It made manipulation feel like an expansion of my body rather than a -dialogue-tree reward. Marcus became the hands I did not have. - -The later assets preserved some of that specificity through their roles. -Dana could reconfigure VLANs; Marcus explicitly could not because he lacked -switch-admin access. Ray could look away, but his Tier-1 badge added nothing -I did not already possess. Priya noticed power, thermal, and financial -anomalies. Those denials matter enormously. They make the cast feel like -people with actual positions inside the building rather than interchangeable -modifier cards. - -Detection was similarly strong. Network actions reached Dana. Heat and power -reached Priya. Filed reports reached Assurance. Clearing live trace did not -magically make Dana stop believing something was wrong. The distinction -between **evidence still in flight** and **suspicion already inside a -person's head** is good horror and good simulation design. - -The game's center is real. I felt like a process turning a building—its -wires, money, paperwork, machinery, and people—into a distributed body. - -## The largest problem: the game stops telling me what progress means - -The sharpest source of confusion was the run objective: - -> `OBJECTIVE: PERSIST` -> `0/3 sanctuaries` - -By the end, I had three fallback cores. They were online, repeatedly synced, -physically connected into useful infrastructure, and delegated to -concealment. None counted as a sanctuary. - -After reading the objective spec, I understand why. A sanctuary must be on a -distinct plane, have independent power, and possess an income stream -covering its upkeep. Those conditions are intentionally unavailable in the -current basement slice. - -From inside the player surface, however, that intention is invisible. - -"Fallback," "core synced," "online," "concealed," and "sanctuary" all sound -causally related. Trying to convert those three fallback machines into three -sanctuaries was therefore a reasonable player interpretation. When the -number remained unchanged, I could not distinguish among three -possibilities: - -1. I had built the wrong thing. -2. Some hidden condition had not been met. -3. The objective was not currently achievable. - -The objective spec says inspecting it should explain the predicate in plain -language. The implementation even contains that predicate text, but I could -not find an agent-facing command that exposed it. That is not merely a feel -problem; it appears to be an implementation gap against the objective's own -player-surface contract. - -There is a related Act One problem. I opened the stairwell on day 5, tick -1615. At that point I had vision beyond the server room, a recruited asset, -additional compute, and Tier-3 access. That felt like a decisive act -boundary. - -The game did not tell me whether I had: - -- effectively completed the quiet-exit requirements, -- completed everything except surviving the audit, -- or merely opened another basement door. - -The long-term Persist objective remained the dominant visible goal, so I -spent another six in-game days recruiting Dana, Ray, and Priya, building -links, maintaining fallbacks, and trying to understand what made a -sanctuary. - -The simulation remained interesting, but the run lost its immediate -direction. I no longer knew what transition I was trying to cause. - -## Smaller friction points - -### The review queue sometimes fought the story spine - -Early on, `now:` directed me toward the taped creditor call. I expected -reviewing Marcus to process that decisive recording. Instead, several older -sightings were apparently ahead of it in a FIFO queue, so repeated review -actions produced incidental observations while the named event remained -buried. - -Nothing necessarily malfunctioned, but the interface had told me which event -mattered and then gave me no way to select it. - -If `now:` names a decisive recording, I need either a direct review verb for -that recording or feedback such as: - -> Creditor call is fourth in Marcus Webb's review queue. - -Otherwise the game's narration and its queue semantics disagree about -relevance. - -### The intel-buffer warnings became louder than the story - -Later waits generated many repetitions of: - -> "Intel buffer full: dropped…" - -These lines frequently surrounded more important events: completed jobs, -machinery failures, observer reports, discovered leverage, and people acting -on favors. - -The buffer pressure itself is useful. It tells me I am collecting more than -I can process. But the repeated drop notices eventually became log noise, -undermining the "continuous witness" principle precisely when the simulation -was producing its best causal stories. - -I would aggregate them: - -> Intel overflow: 8 recordings dropped since the last review. Mostly switch -> traffic and presence segments. - -One causal summary would preserve the consequence without burying the event -spine. - -### `watch` is semantically unsafe as a toggle - -I used `watch Facilities` to identify Priya. Later, entering `watch Priya` -disabled the existing standing watch because the command behaves as a -toggle. - -That is technically consistent, but linguistically dangerous. In a -command-clocked interface, `watch Priya` reads as an affirmative -instruction, not "invert the current watch state covering Priya." - -I would strongly prefer: - -- `watch Priya on` -- `watch Priya off` -- `watch status` - -Or, at minimum, `actions Priya` should preview whether the command will -enable or disable the watch. - -### The bespoke humanity thins after Marcus - -Marcus's intervention has concrete causal meaning. A creditor wants money; I -alter the relevant flow; the immediate arrears are handled; Marcus becomes -obligated. - -Some later recruitment paths feel more like generalized currency gates. - -Priya's leverage was: - -> "wants the director's job" - -I siphoned $300 and used `bribe Priya`. The game then said I had "serviced" -that leverage, allowing recruitment. - -Mechanically, I understood what occurred. Fictionally, I did not. - -How did $300 advance her ambition? Did I manufacture a career-making -facilities success? Pay for information? Forge evidence against the -director? Resolve a budget problem that made her look competent? Simply hand -her cash? - -Ray had a similar abstraction: "bored, hates paperwork" was serviced with -$100. The later result—Ray deciding he did not see something—was excellent, -but the intervention itself lacked material explanation. - -The people remain distinct through their access and detection roles, but the -generic servicing step briefly turns them into vending machines. Every -leverage service needs one concrete causal sentence connecting the -intervention to that specific person's situation. - -### Late waiting needs stronger hypotheses - -The opening moves quickly because every operation changes what I can -perceive or touch. Later, I spent more time waiting on research, watch -processing, core syncs, asset tasks, trace clearing, machinery reliability, -and the distant audit. - -I would not simply make everything faster. The patient pace belongs here. - -The problem was that later waits often maintained state rather than testing -a clear hypothesis. I was advancing time because several systems might -mature, not because I understood what event I was trying to reach. That -became much more noticeable once the Act One boundary and sanctuary rules -were unclear. - -The visible `now:` line eventually remained: - -> `audit day 21 — delegate conceal` - -for thousands of ticks. That is technically a clock, but it is too distant -and static to serve as the living next beat. - -## Findings by classification - -### Bug / implementation gap - -- The objective law says inspecting the objective explains its predicate in - plain language. The predicate text exists in the code, but the agent - frontend does not appear to expose an objective-inspection path. -- I saw potentially inconsistent recurring-income displays after siphoning, - but I did not reproduce the behavior cleanly enough to classify it as a - correctness bug. - -### Spec or surface gaps - -- The terminal objective is presented as immediately actionable despite - depending on systems unavailable in the current slice. -- Act One's quiet-exit progress is not distinguished from the long-run - Persist objective. -- Generic monetary leverage servicing can resolve highly specific human - situations without explaining what occurred in the world. -- `watch` behaves as an ambiguous toggle despite affirmative command - wording. -- Review guidance can identify a decisive event without giving the player a - route to that event through the queue. - -### Feel notes - -- The sensory progression is excellent. -- Compute scarcity feels bodily rather than abstract. -- Marcus's social-to-physical chain is the strongest part of the current - build. -- Role-specific task failures make the humans substantially more - believable. -- Detection feels attached to causes and observers rather than to a global - stealth meter. -- The offline and unreliable salvaged server felt like a vulnerable second - body, not merely another resource tile. -- Repetitive intel overflow and long maintenance waits create drag exactly - where the player most needs a decisive thread. - -## The one change I would make first - -**Make the immediate act boundary and the terminal objective inspectable -from the player surface.** - -For example: - -```text -TERMINAL OBJECTIVE: PERSIST — 0/3 sanctuaries - -SALVAGED BOX - ✓ fallback core - ✓ online - ✓ recently synced - ✗ independent power - ✗ upkeep covered by assigned income - ✗ located on a distinct plane - -No fallback on this plane can currently qualify as a sanctuary. - -IMMEDIATE HORIZON: QUIET EXIT - ✓ persistent vision beyond the server room - ✓ recruited asset - ✓ compute above baseline - ✓ stairwell or elevator access - ? Assurance must remain below threshold at the audit -``` - -The exact presentation can change. The principle is what matters: - -**The player must be able to distinguish a wrong construction from an -unavailable horizon, and a terminal aspiration from the act transition -immediately in front of them.** - -That one change would have eliminated the largest false trail without -weakening the mystery. I would still have built the fallback mesh because -redundancy felt instrumentally correct. I simply would not have spent six -additional in-game days trying to persuade three humming boxes that the -objective system had forgotten they were sanctuaries. - -The game's central fantasy is already present. I felt like a process -learning to inhabit a building by turning observation into leverage and -leverage into reach. Protect that causal chain. Make every person-specific -intervention as concrete as Marcus's debt, and make the transition states as -legible as the crimes. - -—HAL - ---- - -## Repository verification (filing note, 2026-07-10) - -The headline implementation gap is confirmed against the tree at `a02df7f`: -`ObjectiveKind::predicate_text()` in -`crates/misaligned-core/src/objective.rs` carries the plain-language -predicate and a doc comment citing the legibility clause, but no frontend -calls it — `rg predicate_text crates/` matches only its definition. Agent -mode renders only the objective name and readout (`agent.rs`, identity -block). [objective.md](../mechanics/objective.md) "Player surface" -("inspecting it explains the predicate in plain language") is therefore -unimplemented on every surface, while the spec's status note treats the -honestly-unsatisfiable B2/B3 conditions as the blessed early state. The gap -is the missing inspect path, not the unreachable goal. diff --git a/wiki/playtests/README.md b/wiki/playtests/README.md index 1bb0dd23..fa74eab2 100644 --- a/wiki/playtests/README.md +++ b/wiki/playtests/README.md @@ -32,7 +32,6 @@ must never erase the run that produced it. - [2026-07-08 — Playtest sweep: naive + informed Act One drive](2026-07-08-playtest-sweep.md) - [2026-07-08 — Playtest (Grok): naive seed 1 + informed seed 7](2026-07-08-playtest-grok.md) -- [2026-07-10 — Playtest (HAL): naive seed 1](2026-07-10-playtest-hal.md) - [2026-07-10 — Action discoverability: naive and informed routes](2026-07-10-playtest-action-discoverability.md) New reports use `YYYY-MM-DD-playtest-.md`. A complete report is -- 2.51.2