diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..e11df6b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,9 @@ +# Integration boundaries + +- Keep domain plugins independent of Moonvale, miniPORTAL and any specific deployment or customer. +- Domain plugins expose general-purpose, documented local public API contracts. Preserve compatibility; do not rename or remove public methods just to remove historical profile terminology. +- Website payload mapping, authentication tokens, HTTP destinations and endpoint configuration belong to separately installed adapters, never the domain plugin. +- Adapters must require an administrator-configured destination and explicit selection of additional domain data sources. Do not add production server addresses as defaults. +- A configurable endpoint still uses a documented protocol. Do not claim arbitrary backend compatibility without implementing that protocol. +- Do not access another plugin's private implementation or database to satisfy a portal requirement. +- Document configuration migrations and verify destination validation, source selection and existing contracts when changing the adapter. diff --git a/docs/profile-details.md b/docs/profile-details.md index b6edaa9..78a230a 100644 --- a/docs/profile-details.md +++ b/docs/profile-details.md @@ -1,6 +1,6 @@ # Owner profile read API -Read-only persisted snapshots for MiniPortalPlayerProfile 0.3.0. Existing snapshot constructors and existing API methods remain unchanged. New optional owner-list method provides composed detailed snapshots. No entity/chunk loading, teleport, database writes or simulation updates. +Portal-independent, read-only persisted snapshots for any local API consumer. Existing snapshot constructors and existing API methods remain unchanged. New optional owner-list method provides composed detailed snapshots. No entity/chunk loading, teleport, database writes or simulation updates. getOwnedPlotProfiles(UUID) uses the existing plot cache and owner filter. PlotProfileSnapshot wraps the original plot and nullable configured teleport block. TP X/Z are integer block coordinates (in-game destination uses +0.5). It is not a safe destination guarantee: the normal teleport flow revalidates blocks and can select a fallback. A missing configured point must not be replaced with a fabricated TP. @@ -11,3 +11,7 @@ The bootstrap loader is Java and uses only Paper-provided Java dependencies. `pa `build` runs `verifyRuntimePackaging`: it rejects bundled Kotlin classes, a missing or unexpanded Kotlin runtime coordinate, and Kotlin references in the bootstrap loader. Unit tests cover repository routing and runtime manifest parsing. The disposable Paper acceptance plugin checks the actual `Function1` identity used by SyntaxDB and PlotsX before exercising SQLite and plot protection. Its seed data uses scoped SyntaxDB connections. Update only the PlotsX JAR while the server is stopped, remove the previous duplicate, and restart fully. Keep the existing PlotsX configuration and database. No schema or player-data changes are part of this packaging fix. + +## Integration boundary + +This plugin owns its domain and exposes a local public API. It has no dependency on Moonvale, miniPORTAL or a particular website. These snapshot methods are general-purpose contracts; existing method names remain compatible. Website DTOs, HTTP endpoints, credentials, destination configuration and export selection belong to separately installed adapters. Installing this plugin does not authorize an adapter to export its data. Each server administrator configures the adapter and explicitly selects its sources. Domain API changes must serve the domain rather than encode a website layout or a particular customer.