Skip to content
Blog
TechnicalSeptember 17, 2026

The memory acted without ever saying so

EREME promises a crew that remembers. Ten marks out of fifteen really did weigh on maneuvers, but no path could make it speak: validation checked that the text exists, nobody checked that it could come out.

The promise

EREME rests on a promise: what happens to the people on board gets written down, and what gets written down acts. The vehicle is called a mark. Fifteen in the catalog, and each keeps its context: the day, the event that set it. A mark acts through four channels: it tilts choices (a bias per action family, which also weighs on how maneuvers are held), it closes doors, it weighs on the outcomes of events that cite it, and it speaks, through echo and epilogue phrases written in data. Some marks also unlock scenes.

Closing doors is the strongest effect, and also the rarest: only two marks out of fifteen can do it. The dominant effect of memory is not prohibition, it is inclination. A house rule locks the whole thing: a mark that would be nothing but text is rejected at validation, it needs at least two observable behaviors.

Naming the closed door

Late July, a transparency project: the grayed-out option. Before, an unavailable choice showed a generic formula, something like "out of reach: cost or blocking mark", without saying which mark, or whose. The fix is an architecture decision: the function that says why a choice is closed became the single source of truth, and availability derives from it: a choice is open if, and only if, the function finds no cause for refusal. Two parallel functions, one to decide and one to explain, would have ended up diverging.

The surface then picks its templates from data: this member's mark refuses, that resource is missing. The closed door has a name, and the name comes from the same code that closed the door.

Ten mute marks

Early August, a tooled measurement pass asks the reverse question: the memory that acts, does it get told? The answer fit in one count: ten marks out of fifteen had echo phrases that no execution path could ever emit. Only five were cited by an outcome modifier, the single channel that triggered the echo. The commit puts it with a scalpel: "Validation checked that the text EXISTS, nobody that it could COME OUT."

The worst part is not the silence, it is that those ten marks acted anyway. All of them carry a bias, so all of them weighed on how maneuvers were held. The player saw results change without ever knowing why. The exact opposite of the game's promise.

Opening the missing channel

The fix opens the channel the measurement pointed at: the maneuver itself. Each maneuver now knows how to name its determining mark, the strongest in absolute value above a threshold set in data. When the outcome lands, if no modifier attributed anything more precise, that mark takes the floor: memory takes precedence over temperament. The prior measurement justified the rule: 525 trait mentions against 6 mark mentions over a bench of 320 voyages, according to the commit. Temperament was crushing memory.

Two details of this fix are worth the detour. First, a bug of perfect humility: the station assignment was cleared just before the outcome draw, so the first implementation queried an assignment that was already empty; it took two measurements to see it, and the fix captures the assignment before the wipe. Second, an editorial choice engraved in a code comment: the aside names the bearer of the mark, who may be a supporting hand and not the decider, because naming the wrong person would be "worse than staying silent".

The final safeguard does not watch a frequency: it guarantees a possibility. Every mark in the catalog must have at least one path that gets its phrase out. The rest belongs to the played game.

The same day's mirror

The same day, a few hours later, the reverse defect: the screen promised a weight the memory could not honor. A badge announced a memory effect on 92% of event cards, while memory can actually change something on only a small fraction of them. The badge was cut down to its true perimeter. Saying too little and promising too much are the same sincerity defect, and both are fixed by the same method: measure what comes out, not what is written.

The other memory: what you have already seen weighs less

The saga keeps a second memory, distinct from the characters': the count of events already played. At draw time, an event's weight is divided by five with each viewing. Neither forbidden nor free: a seen event stays drawable, it just weighs five times less, then twenty-five times less. According to the commit's measurements, repetition on the fourth voyage fell from 44 to 18%.

That batch also corrected its own framing: intuition said "content is missing", measurement answered no. "The cause was not the lack of content. [...] Writing fifteen more scenes would have dropped them into the same funnel." The problem was in the draw, not in the stock.

A memory that shows nowhere does not exist. A memory that acts without saying so is worse: the player sees results move and learns nothing. Validating that the text exists is never enough; you have to prove that an execution path gets it out.

The lesson

Any hidden system that influences what the user sees must have an explanation channel, and a test that proves the channel opens. Content validation verifies existence; only an output measurement verifies speech. Between the two lived my favorite defect of this whole project: fifteen marks with perfectly written phrases, validated, proofread, ten of which physically could not be heard.