Skip to content

Implement native player and operator command registries #46

Description

@zoeyrose

Outcome

Replace Python command discovery/dispatch with typed Go registries that reuse the same services as protocol and gameplay actions.

Scope and invariants

  • Define command IDs, aliases, typed arguments, permission/role metadata, contexts, help/localization keys, audit policy, and rate limits.
  • Separate player chat commands, operator/admin commands, console commands, and automation APIs while sharing parsing and authorization primitives.
  • Handlers submit typed service/action requests; they cannot bypass simulation ownership, persistence transactions, or disclosure rules.
  • Generate discoverable help and machine-readable command catalogs without leaking hidden commands or internal data.
  • Define deterministic quoting/escaping, error categories, cancellation, pagination, and remote-console security.

Acceptance criteria

  • Inventory maps all current runtime Python commands to native command, protocol action, tooling command, or explicit retirement.
  • Tests cover ambiguous prefixes, malformed arguments, permission changes, injection/escaping, rate limits, audit redaction, disconnect, and transaction failure.
  • Critical operator commands require auditable identities and cannot be invoked through player context.
  • Command help and automation schemas derive from the registry rather than hand-maintained duplicates.
  • M3 exercises representative player and operator commands with zero Python.

Dependencies and parallelization

Depends on #33, #40, and #41. Individual command batches can migrate in parallel after the registry contract freezes.

Independent implementation

New code and tests are MIT-licensed independent work. Preserve public behavior and issue-level design choices, but do not copy or mechanically translate GPL server/Python implementation or tests. Mixed-license content remains external data with its own notices.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions