Skip to content

Implement the approved classic-state importer #62

Description

@zoeyrose

Outcome

Build a one-way, independently implemented, dry-run-first importer only for domains approved by #5; close this issue without code if the decision is a fresh start.

Scope and invariants

  • Read a frozen copy/export of classic state and never modify the source.
  • Validate source version, schema, record bounds, credentials/privacy, stable-ID mappings, content digest compatibility, duplicate handling, and unsupported domains.
  • Map into canonical Go domain commands/transactions rather than writing replacement SQLite tables directly.
  • Produce per-record results, summary counts, warnings/errors, deterministic digests, and a machine-readable approval report with secrets redacted.
  • Support idempotent rehearsal, explicit operator confirmation, backup, abort thresholds, and rollback before replacement activity begins.

Acceptance criteria

  • Golden fixtures are independently constructed or explicitly relicensed; GPL migration code/tests are not copied.
  • Dry runs are the default and make no destination mutation.
  • Repeated approved imports cannot duplicate accounts/items/currency/progress or overwrite newer destination state.
  • Malformed/hostile/oversized input, mapping gaps, disk failure, and interruption are fuzzed/fault-injected.
  • A production-like rehearsal meets Decide classic account, character, and world-state migration policy #5's acceptance/rollback thresholds before use.

Dependencies and parallelization

Strictly gated by #5, canonical schemas, and #39/#40. It is not allowed to influence the replacement domain model.

Licensing and migration rule

Replacement Go code is MIT and independently implemented. Preserve existing gameplay/content design choices and separately licensed data; do not translate GPL runtime source or tests unless an exact contribution has a documented rights-holder MIT grant.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions