Files
EvolioHealth/AGENTS.md
T

3.0 KiB

EvolioHealth development instructions

These instructions apply to the entire repository.

Source of truth

Before designing or implementing a change, read docs/index.md, the documents it routes to, and the existing code and tests. The specifications under docs/ are authoritative. Do not silently contradict them. If a request conflicts with them, identify the conflict and update the specification only when explicitly authorized.

Use normative terms literally: MUST is mandatory, SHOULD requires a documented reason to deviate, and MAY is optional.

Product boundaries

  • EvolioHealth Server is a Go application that serves the business API and the bundled Flutter Web application.
  • EvolioHealth Companion is an Android Flutter application.
  • PocketBase is an internal persistence service. It MUST NOT be published on the host, exposed to the Internet, proxied, or called by a frontend.
  • The Go server is the only public application service and the only client of PocketBase.
  • references.db is a separate SQLite database, owned directly by the Go server and intended for replaceable reference data.
  • Keep the stack lightweight. Do not introduce Redis, Kafka, Elasticsearch, Vault, S3, a message broker, or additional services without an explicit architectural decision.

Security invariants

  • Treat health records, measurements, photos, notes, exports, credentials, and device identifiers as sensitive.
  • Enforce authorization server-side for every object. Never trust a client-supplied owner identifier.
  • Administrators manage the instance but MUST NOT gain access to another user's health data or photos.
  • Never log secrets, tokens, request bodies, health values, photo contents, or private notes.
  • Stored personal data and private media MUST be encrypted by the application. Host-volume encryption remains the instance administrator's responsibility.
  • Mobile secrets and device private keys MUST use Android Keystore. The local database MUST be encrypted.
  • Password login requires TOTP. Passkeys are a passwordless alternative.
  • Every security-sensitive change requires tests for cross-user isolation, failure paths, and audit events.

Engineering rules

  • Prefer simple, explicit, maintainable designs.
  • Keep API clients independent from PocketBase schemas.
  • Make synchronization offline-first, incremental, resumable, idempotent, and deletion-aware.
  • Store canonical values independently from language and display units; retain original import values and units.
  • Use UTC instants and retain the source timezone where local interpretation matters.
  • Add or update tests for every functional change.
  • Update relevant specifications when behavior changes.
  • Documentation and code identifiers MUST be in English. The UI MUST support French and English.
  • Build container images for linux/amd64 and linux/arm64.

Definition of done

A change is complete only when implementation, tests, authorization checks, migrations, error handling, documentation, and relevant security/privacy effects have been addressed. Never expose PocketBase as a shortcut.