Skip to content

feat(maps): persist the Incuna Sam objective - #63

Merged
zoeyrose merged 7 commits into
1.xfrom
feat/57-incuna-sam-objective
Aug 10, 2026
Merged

feat(maps): persist the Incuna Sam objective#63
zoeyrose merged 7 commits into
1.xfrom
feat/57-incuna-sam-objective

Conversation

@zoeyrose

@zoeyrose zoeyrose commented Aug 10, 2026

Copy link
Copy Markdown
Member

Summary

  • start a persistent Lost Memories / Speak with Sam Goodberry objective when a player first reaches Incuna after completing Escaping the Deserted Island
  • attach the guarded arrival event to both the initial tutorial lower deck and the later return-voyage deck
  • complete the new part only through Incuna's quest-bearing Sam, starting the existing The Priest part before completing the handoff
  • preserve missing, active, completed, and failed legacy 1.x quest state without duplicate parts or rewards
  • add real Classic Python-plugin coverage for both map triggers, collected Sam dialogue, reward idempotence, and legacy ordered dispatch

Compatibility

The arrival script requires both a completed Deserted Island quest and no existing Lost Memories object. The new speak_sam part is authored after every legacy part so InterfaceBuilder's first-match dispatch remains unchanged for existing saves. Repeated arrivals and active/completed/failed legacy records are no-ops.

Coordinates

  • Base: 1.x at 8b50df52355ae6ae4d529838272e41b5d678c84b
  • Head: feat/57-incuna-sam-objective at 5f9092bf45f7e36b6240bc6132ddd12fce09aeaa
  • Commits:
    • 00c01c00 feat(maps): persist the Incuna Sam objective
    • c1b91c52 fix(maps): preserve the Incuna Sam fallback
    • d7dcb25b fix(maps): protect active Lost Memories saves
    • 3bd9a55b fix(maps): trigger the first Incuna objective
    • 90ff5f77 test(maps): cover Lost Memories arrival triggers
    • ab1c8ba2 fix(maps): preserve legacy Lost Memories dispatch
    • 5f9092bf test(maps): harden Lost Memories compatibility

Validation

  • python3 tools/validate.py — 86 tests plus archetype, map, catalog, contract, collection, runtime, and release checks pass
  • python3 tools/world_content_audit.py quests — pass
  • python3 -m compileall -q maps/python tools — pass
  • ./atrinik build server --profile issue-57-incuna-sam --test — the managed CTest command reports 36/36, including worldmaker, server-assetspath-migration, and protocol checks
  • issue-owned embedded suite — 5/5 tests pass for both arrival maps, actual collected Incuna Sam, one-time reward, legacy dispatch, and active/completed/failed state preservation
  • git diff --check 8b50df52355ae6ae4d529838272e41b5d678c84b...HEAD — pass
  • final-head GitHub checks — Content validation, conventional title, Ubuntu syntax prototypes, and Windows syntax prototypes pass

Classic's existing Python-plugin CTest adapter currently returns success even though the full embedded log contains two unrelated baseline failures in unchanged tests. All five issue-owned cases are individually logged ok in that full run and pass together in a filtered run. The upstream result-propagation defect is outside this content diff; no passing claim here relies on those unrelated cases.

Gameplay verification

An isolated fresh basic-player scenario on the maintained 1.x stack completed the ordinary Deserted Island quest and voyage. Before speaking to Sam, the journal contained exactly one active Sam objective. It remained after 170 /time messages filled the 150-message window and after a clean QUIC relog. Talking to the Sam on /shattered_islands/world_4_85 completed that part and started The Priest.

The scenario used wrapper-owned runtime/assets/{data,client-maps} through --assetspath; region maps and client assets were delivered by the server's QUIC asset path. No legacy http/data state or HTTP runtime option was created or used. The server topology was stopped and the scenario reset after verification.

Review

Iterative complete-diff review found and fixed the missing first-arrival map trigger, missing-quest fallback, active-save protection, legacy InterfaceBuilder ordering, and durable compatibility-test gaps. The final fresh review pass at 5f9092bf found zero actionable content findings.

Closes #57

@zoeyrose
zoeyrose marked this pull request as ready for review August 10, 2026 10:20
@zoeyrose
zoeyrose merged commit ead72ef into 1.x Aug 10, 2026
6 checks passed
@github-project-automation github-project-automation Bot moved this from Review to Done in Atrinik work Aug 10, 2026
@zoeyrose
zoeyrose deleted the feat/57-incuna-sam-objective branch August 10, 2026 16:22
zoeyrose added a commit that referenced this pull request Aug 10, 2026
## Summary

- forward-port the reviewed Incuna arrival and Sam objective from `1.x`
PR #63
- start Lost Memories on both guarded Incuna arrival decks after
Escaping the Deserted Island
- preserve legacy quest dispatch, active/completed/failed saves, and
one-time Sam reward behavior
- carry the native arrival, transition, repeat-arrival, and legacy-save
regression suite to `main`

## Release-line relationship

This is the independently validated `main` companion to merged
maintenance PR #63. The patch ID and all six resulting file blobs are
identical to the merged `1.x` change, and the affected pre-change
content was already identical across the two release lines. No release
branch was merged wholesale and no generated output was copied.

`main` is the canonical issue-closing PR. The merged `1.x` companion is
#63.

## Validation

- `PYTHONDONTWRITEBYTECODE=1 python3 tools/validate.py` — 90 tests;
content core, schema, catalog, contracts, syntax, collection,
provenance, and runtime checks passed
- `python3 -m tools.content_catalog validate --root .`
- `python3 tools/world_content_audit.py quests`
- `python3 -m compileall -q maps/python tools`
- `git diff --check`

Gameplay validation for the byte-identical authored behavior was
completed on the Classic `1.x` companion before #63 merged, including
the full tutorial voyage, message-window churn, relog persistence, the
correct Incuna Sam transition, and repeat voyages. The replacement
`main` stack does not yet expose an integrated playable wrapper runtime,
so no incompatible Classic runtime was routed through this branch.

Closes #57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant