Outcome
Replace scripted guild, house, apartment, storage, fee, guard, and jail behavior with explicit Go authorization and persistence domains.
Scope and invariants
- Define stable guild/property/storage identities, membership/roles, ownership, access grants, fees, expiry, eviction, and audit rules.
- Implement guild lifecycle and storage, houses/apartments, fee collection, guards, jail state, and relevant map admission hooks as typed services.
- Keep authored NPC dialogue and locations in compiled content; services return structured permitted actions/state.
- Use account/character roles and transactional item/currency services; never encode authorization only in map scripts or UI.
- Bound membership, storage, permission entries, scheduled work, and historical/audit retention.
Acceptance criteria
- Tests cover owner/member/guest access, role changes, overdue fees, eviction, concurrent storage, disconnect, transfer/deletion, map admission, and persistence failure.
- Apartment ownership metadata supports the preserved client presentation issue without leaking hidden account data.
- One representative property/community interaction is available by M3; complete corpus migration is M5.
- Manifest rows for guild/house/apartment/guard/jail scripts have explicit mappings.
- Operator overrides require typed permissions and audit events.
Dependencies and parallelization
Depends on #38-#41, #44, #49, and commerce #52 where fees apply. Guild and property subdomains can be implemented in parallel after shared authorization types freeze.
Independent implementation
Implement from the preserved issue-level/product behavior and independently authored fixtures. Do not copy or mechanically translate GPL server/Python code or tests. Replacement code is MIT; consumed content and assets keep their own licenses.
Outcome
Replace scripted guild, house, apartment, storage, fee, guard, and jail behavior with explicit Go authorization and persistence domains.
Scope and invariants
Acceptance criteria
Dependencies and parallelization
Depends on #38-#41, #44, #49, and commerce #52 where fees apply. Guild and property subdomains can be implemented in parallel after shared authorization types freeze.
Independent implementation
Implement from the preserved issue-level/product behavior and independently authored fixtures. Do not copy or mechanically translate GPL server/Python code or tests. Replacement code is MIT; consumed content and assets keep their own licenses.