Skip to content

feat(lore): track Resonance Papers with stable recoverable discovery state #151

Description

@zoeyrose

Architecture amendment — one authored content source (2026-08-13)

Initiative atrinik/atrinik#357 supersedes every future live-branch instruction below. atrinik/content@main is the sole mutable authored source for replacement and Classic targets. Future authored changes land only on main; supported Classic artifacts are deterministically derived from the same immutable main revision. Do not create, restore, author, backport, validate, or publish through a live 1.x branch.

Exact historical 1.x commits, tags, releases, assets, preserved local snapshots, provenance, parity records, and comparisons remain valid immutable evidence. This amendment changes no other feature, balance, lore, compatibility, licensing, validation, or ownership acceptance criterion.

Parent epic: #149. Canon prerequisite: #150. Reusable-system coordination: atrinik/server#31.

Outcome

Provide stable, per-character, recoverable discovery state for the six Resonance Papers and final page, with a spoiler-light journal view that shows progress without requiring permanent book items in ordinary inventory.

This issue owns the content contract and a bounded implementation for #149. It does not duplicate server#31's broader book/lore-topic discovery system.

Discovery model

Define stable IDs before placement, for example:

  • resonance_papers/first_observation
  • resonance_papers/charge
  • resonance_papers/contact
  • resonance_papers/tempering
  • resonance_papers/interference
  • resonance_papers/inversion
  • resonance_papers/final

Final names follow #150. IDs must not depend on item display names, coordinates, volume numbering, or one release branch.

On first valid read/apply:

  1. record discovery exactly once;
  2. keep the full text readable in place and through the journal/index;
  3. update n/6 plus the current synthesis stage;
  4. reveal a spoiler-light regional hint for at least one currently reachable paper;
  5. emit concise already-known feedback on repeat use.

Use character-local state unless a deliberate party-sharing rule is approved. Finding a physical page must not remove it for another player.

Implementation boundary

Preferred long-term implementation is server#31's stable lore-topic/book discovery IDs. If that is unavailable when content work begins, use an explicitly temporary hidden multipart-quest/content-state adapter that:

  • has the same stable semantic IDs;
  • can migrate forward without changing discovery meaning;
  • does not award generic lore achievements in parallel;
  • keeps persistence and duplicate handling in one helper rather than six unrelated map scripts.

Existing nested quest containers and quest-part state demonstrate that a Classic pilot is feasible, but normal inventory items are not the source of truth.

Progression and hints

  • Papers within an unlocked tier are order-independent.
  • Incuna's Contact paper is unavailable or context-safe until the relevant Lost Memories state.
  • High-level Glacial content is shown as an optional distant lead, not as the next instruction to an early character.
  • The journal distinguishes not yet reachable, regional lead known, and discovered without exposing exact coordinates by default.
  • Three early papers and two intermediate papers each produce a synthesis entry even before the full set.
  • The telescope reads stable discovery state, not possession of six items.

Recovery and migration

Document behavior for:

  • a page object destroyed, moved, looted, or missing after map reset;
  • a character that read content before tracking was added;
  • a character already past Lost Memories or Construction of Telescope;
  • duplicate legacy/branch IDs;
  • page text corrected after discovery;
  • moving a page to a better location;
  • rollback from content-local state to the reusable server system;
  • party members reading simultaneously;
  • offline/reconnect and server restart.

No unique page may be available only as a random monster drop. A deterministic readable or recovery path must always exist.

Acceptance criteria

  • All seven IDs and their version/migration policy are documented and reviewed before map placement.
  • First discovery is idempotent and persistent; repeated read/apply neither duplicates progress nor suppresses the text.
  • The journal/index shows n/6, discovered titles, synthesis stages, and spoiler-light hints appropriate to character progression.
  • Pages remain readable without occupying ordinary inventory permanently.
  • Lost/destroyed/moved/reset page objects cannot permanently block discovery.
  • Simultaneous readers and separate parties cannot consume or overwrite one another's progression.
  • Incuna and Glacial gates expose correct locked-state feedback without leaking spoilers or implying the route is mandatory.
  • Characters with pre-existing Lost Memories and Construction of Telescope completion can begin and finish the arc.
  • Telescope/final reward checks stable discovery IDs and awards completion exactly once.
  • Any temporary Classic/content adapter has a tested migration path to server#31 and does not create a competing global lore schema.
  • Focused unit/scenario coverage exercises arbitrary paper order, duplicate reads, missing object recovery, map reset, reconnect, server restart, old-character state, and migration.
  • Validation passes independently on main and 1.x.

Non-goals

Do not build a universal codex UI, rewrite every existing book, award broad lore achievements, or make the Papers mandatory for existing quests in this issue.

No activity

Activity on this issue will appear here.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Effort

    None yet

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions