First five tickets
PHI-001: Repositories, CI/CD and deployment skeleton
Scope: four repositories (platform, UI, docs, devops); Cargo workspace; multi-stage Dockerfiles; migrations; GitHub Actions; Kubernetes manifests; Argo CD application.
Done when:
-
cargo fmt,clippy -D warningsandcargo testrun in CI, with a PostGIS service for the migration test. - UI CI runs typecheck, tests, build and the container build; docs CI builds the site.
- Images for platform, UI and docs build from their Dockerfiles.
- Namespace
phimi, PostgreSQL database with PostGIS, Secrets, migration Job, ingest/API/UI/docs workloads, probes and metrics inphimi-devops. - CI pushes images and bumps digests automatically (today: operator workflow, as for aidj).
PHI-002: phimi-protocol
Scope: frame codec, escaping, checksum, BCD, header, all V53 uplinks and the downlinks Phimi sends.
Done when:
- Every frame in
V53-Protocol-Data-Example_V1.1.pdfdecodes, with field-level assertions (coordinates, time, battery, satellites, Wi-Fi, cells, batch entries). - Every platform reply Phimi encodes for those exchanges is byte-identical to the
vendor's (
8100,8001,8900,8300). - A stream of all frames split at 1, 2, 3, 7 and 64 bytes yields every message.
- Bad checksums, wrong lengths, invalid escapes, oversized frames and encrypted bodies are rejected; unknown message ids are kept with their raw body.
PHI-003: V53 simulator
Scope: a virtual tracker that registers, authenticates with the issued code, replays registration, positions, batch and heartbeat under its own terminal id, and answers commands.
Done when:
-
phimi-simulator --devices 4 --hold 60drives four trackers against a server. - Integration tests run the simulator against the real listener: full handshake, duplicate flagging, authentication required, allowlist refusal, command round trip, reconnection replacing the old socket.
PHI-004: Deploy phimi-ingest on Kubernetes
Scope: public TCP endpoint, diagnostics and metrics.
Done when:
- Deployment with one replica,
Recreate, non-root, probes on the internal port. - NodePort 30888 for trackers; ClusterIP for the internal HTTP port.
- Allowlist and auth secret from Kubernetes Secrets.
- Router forwards public TCP 8888 to the node's 30888 (manual, outside the cluster).
- From outside the LAN,
nc -vz 85.195.196.223 8888connects, and the simulator completes a handshake through the public address.
PHI-005: Connect the first real tracker
Scope: redirect one V53 to Phimi and receive its first GPS position.
Done when: the first-tracker runbook is completed:
0x0100, 0x0102, 0x0200 and heartbeats are seen from the real device, the clock offset
and charging byte are confirmed, and the device can be sent back to iGPS123.
Storing that first position in PostgreSQL depends on phase 3 persistence.