33 lines
2.0 KiB
Markdown
33 lines
2.0 KiB
Markdown
# AGENTS.md for platform
|
|
|
|
This file applies to `platform/`.
|
|
|
|
## Backend Structure
|
|
|
|
Keep definitions out of business logic:
|
|
|
|
- Request/response structs go in `dto/` or a dedicated contract package.
|
|
- Database tables go in `model/` with field comments and tags before migrations or repositories reference them.
|
|
- API route declarations and handlers go in `api/`.
|
|
- Business aggregates and value objects go in `domain/`.
|
|
- Protocol payloads go in `protocol/`.
|
|
- Shared helper functions go in `shared/` only when at least two packages need them.
|
|
|
|
## API Rules
|
|
|
|
Every HTTP/API handler must have OpenAPI-style comments when implemented. Request bodies, response bodies, and errors must reference named DTO structs.
|
|
|
|
## Database Rules
|
|
|
|
Prefer model-first table definitions. Do not define table schemas only inside migration SQL. Migrations may use raw DDL only when the model remains the source of truth.
|
|
|
|
## Platform Boundaries
|
|
|
|
Plugins and platform_web must never receive run credentials, raw host paths, or AI provider keys. All access must pass through platform authorization and bounded DTOs.
|
|
|
|
Platform may read plugin manifests, validate lifecycle/action declarations, package plugin-owned action assets into generated run distributions, and dispatch lifecycle jobs with typed inputs. Platform must not implement game-specific install/update/start behavior itself.
|
|
|
|
Do not add platform service code that hardcodes a game's executable path, Steam app ID, SteamCMD command line, process name, default launch flags, or update policy. For SCUM specifically, `SCUMServer.exe`, app `3792580`, `+app_update 3792580 validate`, `-port`, `-MaxPlayers`, and `-log` must come from the SCUM plugin action assets or plugin-declared startup fields.
|
|
|
|
If a lifecycle job requires checking whether game files exist, installing missing files, updating existing files, stopping before update, or building the final launch command, dispatch the plugin-owned action and keep platform limited to authorization, input validation, job creation, and result handling.
|