Skip to content

fix(deadline): distinguish "not found yet" from "never existed", and ship the missing migration - #16

Merged
tkgstrator merged 3 commits into
developfrom
fix/deadline-no-estimate
Sep 2, 2026
Merged

fix(deadline): distinguish "not found yet" from "never existed", and ship the missing migration#16
tkgstrator merged 3 commits into
developfrom
fix/deadline-no-estimate

Conversation

@tkgstrator

Copy link
Copy Markdown
Contributor

Two follow-ups to #15, one of them a genuine slip.

1. The migration for reveals_death_time never landed

#15 added the column to db/schema.ts and the compile step, but
db/migrations/0020_deadline-disclosure.sql and its snapshot were untracked when
that work was staged with git add -u, which only picks up files git already knows.
So develop currently describes a column that nothing creates. A deploy would have run
db:migrate:remote with nothing to apply and then queried a column that does not exist.

Committed here.

2. The board asked players to look for something that was never written

Counting the scenarios turned this up:

of 43
foundAt present 43
estimatedDeathAt present 10
of those, marked with revealsDeathTime 1

deadlineOf folded "no time in the scenario" and "time not yet discovered" into the same
unknown, so 33 cases drew a dotted window with a ? for an estimate nobody ever
wrote
. Dotted-and-question-mark is an invitation — it says there is something here to
find. Pointing it at nothing is the same fault this whole line of work set out to remove,
facing the other way: the board claiming knowledge it does not have.

ScenarioDetail.victim now carries hasEstimatedDeathAtthe boolean only, never the
time
. Cases without one draw the discovery line and nothing else. The leak is nil: the
remaining-clue hints already tell the player there is something left to find.

The authoring guide gains both halves of the trap, since neither is caught by validation:
omitting the time is now a decision rather than an oversight, and writing the time without
marking any evidence leaves an answer no route reaches.

Still open (data, not code)

Nine scenarios carry estimatedDeathAt with no revealsDeathTime anywhere — the answer
is written and unreachable. Which evidence should open it is an authoring judgement per
case, so it is not something to sweep through mechanically.

Test plan

  • bun run typecheck — clean
  • bun run lint — no errors
  • bun run test — 718 pass / 0 fail, including a new case for the no-estimate scenario
  • reviewer: worth confirming 0020 applies cleanly against a database that already
    ran 0019

tkgstrator and others added 3 commits September 2, 2026 18:44
Lets an evidence entry mark that it discloses the time of death, feeding the interrogation deadline disclosure logic.

Co-Authored-By: Claude <noreply@anthropic.com>
…mate

Add hasEstimatedDeathAt so the board can tell "not yet found" apart from
"this case has no death estimate at all", instead of showing the
searching-dashes-and-? mark for cases that never had one.

Co-Authored-By: Claude <noreply@anthropic.com>
Two cases the guide did not cover, both easy to get wrong and neither caught by
the validator.

Leaving `estimatedDeathAt` out is now a decision, not an omission: the board
draws no estimate mark at all. Dotted-and-question-mark means "there is
something here to find", so showing it where nothing was ever written asks the
player to search for what does not exist.

And writing the time without marking any evidence with `revealsDeathTime` is the
worst of the three: the answer exists, no route reaches it, and the board keeps
inviting a search that cannot end. Both halves validate fine on their own, so
nothing will tell the author but a playthrough.

Co-Authored-By: Claude <noreply@anthropic.com>
@tkgstrator
tkgstrator merged commit c4ca2b6 into develop Sep 2, 2026
9 of 10 checks passed
tkgstrator added a commit that referenced this pull request Sep 2, 2026
…e death estimate (#17)

Scenario data for the machinery #15 and #16 shipped. Places go from 2 cases to
17, and every case that names a death estimate now has evidence marked to
disclose it — the nine that had a time written and no route to it are gone.

Two migrations carry it to databases already seeded. The second rewrites only
the public half of each place entry, leaving the private findings alone: what
the roster and the nameplate show is public, what examining turns up is earned.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant