Skip to content

Remember saying five to Aksel on the strip on the last page - #16

Merged
dmccoystephenson merged 1 commit into
mainfrom
feature/ending-remembers-strip-refusal
Oct 7, 2026
Merged

dmccoystephenson merged 1 commit into
mainfrom
feature/ending-remembers-strip-refusal

Conversation

@dmccoystephenson

Copy link
Copy Markdown
Member

Summary

  • endings._aksel now reads flags.BACKED_AKSEL_STAYING. If the player said five when Aksel asked them on the strip to say four, the five-on-the-plane page adds a sentence on what that cost him: the hut, the holes, the August ship and the last winter he had asked for. The "He had his winter" clauses are dropped in that case, because the page used to say he had his winter right after he was refused it.
  • BACKED_AKSEL_STAYING is added to people.REMEMBERED, alongside every other choice that ends in "X will remember that". achievements._rememberedSomething loses its special case, and the import it no longer needs goes with it. The flag is set on the strip and not during a conversation, so Scene.talk cannot fire a second "will remember" beat.
  • docs/STORY.md updates the five-on-the-plane line to mention the refusal.
  • version.txt goes from 0.1.0 to 0.1.1, because the change is visible to players.

The save format, state.py, schemas/save.json, the calendar and the RNG are not changed.

Test plan

  • python3 -m pytest: 69 passed (67 before, plus 2 new)
  • New tests/test_ending_pages.py::test_saying_five_on_the_strip_is_remembered_and_takes_back_his_winter covers all four ways Aksel can reach the table, with and without the refusal
  • New test_the_strip_choice_is_one_people_remember
  • FULL_RUN (test_the_winter_can_be_finished_with_five_on_the_plane) now asserts that the refusal sentence is shown. Every solve still passes and no script changed.
  • Stash-and-run: with endings.py, people.py and achievements.py reverted, the 3 new or changed tests fail. With the fix restored, they pass.
  • black --check passes on the changed Python files

Closes #15

This PR description was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener).

🤖 Generated with Claude Code


drafted by Claude on behalf of Daniel Stephenson

"He's coming with us" told the player Aksel would remember it, but the
five-on-the-plane page never did, and two of its Aksel paragraphs still
said "He had his winter". The refusal now has its own sentence and drops
that clause, and BACKED_AKSEL_STAYING is in people.REMEMBERED like every
other remembered choice, so achievements no longer special-cases it.

Closes #15

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dmccoystephenson

Copy link
Copy Markdown
Member Author

Self-review rubric (anchored on CI run 37428899792: docker, test (3.8) and test (3.12) all pass on the PR head):

  • Scope: PASS. Every changed file belongs to Five-on-the-plane page ignores saying five to Aksel on the strip, and contradicts it #15: the ending text, the REMEMBERED entry, removing the achievements special case that entry makes redundant (together with its now-unused import), tests, the STORY.md line and the version bump.
  • Tests-new: PASS. No public functions were added. _aksel's new branch is covered for all four ways Aksel reaches the table, both with and without the refusal.
  • Tests-fix: PASS. Verified with stash-and-run. With endings.py, people.py and achievements.py stashed, 3 tests fail: the two new ones and test_the_winter_can_be_finished_with_five_on_the_plane. With the fix restored, all 30 tests in those files pass.
  • Sibling structure: PASS. The new tests follow the _ended / _starting pattern used throughout test_ending_pages.py.
  • Sibling renames: PASS (not applicable). Nothing was renamed.
  • Docs: PASS. The five-on-the-plane line in docs/STORY.md now mentions the refusal. README's "on the strip ... answer him" was already accurate. version.txt is bumped to 0.1.1 because the change is visible to players.
  • Issue resolution: PASS. All three points in Five-on-the-plane page ignores saying five to Aksel on the strip, and contradicts it #15 are fixed: the ending reads the flag, the "He had his winter" contradiction is gone, and the flag is in people.REMEMBERED.
  • CI: PASS. All three jobs are green.

Repo-specific:

  • Knowledge-gated: PASS. No new condition or menu row, and no state.day read.
  • Calendar in one place: PASS. No day or food numbers were touched.
  • Save format: PASS (not applicable). state.py and schemas/save.json are unchanged. The flag already round-trips as a free-form flags entry.
  • One RNG: PASS. random. matches only state.py.
  • Solvable: PASS. FULL_RUN and every tests/test_endings.py solve pass, and no script changed. FULL_RUN gained one extra assertion.
  • Flags and endings: PASS. No new flag key. The remembered strip choice is now in people.REMEMBERED and has its sentence in endings.py.
  • Vendored client untouched: PASS. trace_client.py is not in the diff.

Notes:

  • src/overwinter/people.py:593: adding the flag to REMEMBERED cannot double the "[Aksel will remember that.]" beat. Scene.talk only reacts to flags set during a conversation, and strip.akselAsks sets this flag outside one and calls remember itself.
  • src/overwinter/endings.py:148: the refusal sentence deliberately echoes the strip's own line ("does not look at the bay again"), so the player recognises the moment. The wording is a judgment call for the author.
  • The PR touches nothing on the do-not-auto-merge list (state.py, schemas/save.json, requirements.txt, config.py, Dockerfile, workflows). It is still left for a human to merge, because this run is not authorized to merge.

This review was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener).


drafted by Claude on behalf of Daniel Stephenson

@dmccoystephenson
dmccoystephenson merged commit ff358d1 into main Oct 7, 2026
3 checks passed
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.

Five-on-the-plane page ignores saying five to Aksel on the strip, and contradicts it

1 participant