SIGNAL//LOST is an asymmetric cooperative browser mystery for two to six players. Every operator connects to the same station, but the server exposes different evidence to each role.
The project is in Phase 0: Protocol Boot. The repository foundation, first public interface, protocol boundary, and a small deterministic contradiction-engine slice are under active development.
The protocol, scenario format, and save compatibility may change before 1.0. There is no public server or published release yet.
ORPHEUS-17 is an abandoned deep-space communications station transmitting again after eleven years. Operations may see an open bulkhead while Archives has a record showing that the same bulkhead was permanently sealed. Neither client receives the complete canonical state.
The current engine slice focuses on one contradiction:
- Operations sees
DOOR C03: OPEN. - Archives sees
DOOR C03: SEALED SINCE 11 YEARS. - The reducer accepts an Operations intent to close the door.
- Server-only game logic decides the canonical result and produces a new role-specific projection.
This flow is covered at the engine and protocol boundaries. The invite-only lobby, live WebSocket session, reconnect path, and multi-browser delivery are Phase 1 work; they are not represented as working multiplayer yet.
The implemented schemas and engine enforce the intended trust boundary: clients may describe validated intents, while server-only code mutates canonical game state, advances revisions, evaluates permissions, and generates player projections. Canonical facts, scenario seeds, private drift values, and other players' evidence must never be placed in browser payloads. Wiring that boundary to authenticated live sessions is the next milestone.
The workspace is intentionally small:
apps/web public site and role interfaces
apps/server secured Fastify foundation and health endpoints
packages/protocol client-safe versioned wire schemas
packages/game-engine deterministic server-only state transitions
packages/scenario-sdk declarative scenario validation
scenarios versioned mission data
See Architecture and Security model for the current boundaries.
Requirements:
- Node.js 24 LTS
- Corepack
- pnpm 11.21.0
corepack enable pnpm
pnpm install
pnpm setup
pnpm dev
pnpm setup creates an ignored .env.local with a cryptographically random local session secret. PostgreSQL is optional for the Phase 0 slice. When Docker Compose is available, the setup command starts the declared local database service.
pnpm lint
pnpm typecheck
pnpm test
pnpm scenario:validate
pnpm legal:check
pnpm privacy:check
pnpm assets:check
pnpm brand:check
pnpm build
pnpm smoke:server
pnpm test:e2e
pnpm release:check is intentionally stricter than a development build. It must fail while required operator information remains unresolved.
The browser application loads no advertising, behavioral analytics, remote fonts, remote media, or third-party runtime scripts. The current Phase 0 interface does not require an account and does not use browser storage. These statements describe the current implementation, not a legal certification.
See PRIVACY.md and the privacy data map.
Scenarios are declarative data validated by the Scenario SDK. Scenario packages cannot execute arbitrary JavaScript. Mission source contains spoilers by design; runtime secrecy is enforced through server-side projection, not source obfuscation.
See Scenario authoring.
Read CONTRIBUTING.md before proposing changes. Do not report suspected vulnerabilities through a public issue; follow SECURITY.md.
SIGNAL//LOST is licensed under the MIT License. Third-party components retain their own licenses; see THIRD_PARTY_NOTICES.md.
