The outside install, restores, the week on the owner's server, Portainer updates and both registries are done. The mobile app is after v1.
3.5 KiB
3.5 KiB
Ready for v1 checklist
v1.0 ships when every box is ticked. It gathers the roadmap's definition of done (09) and its open real-hardware checks, plus the security leftovers (08 §6). Tick a box only with proof: a date and what was seen.
Built
- Milestones M0–M11 built and tested (simulated phones and a simulated voip.ms).
- Security review (M11-T8), with an independent review (08 §6).
Real voip.ms account (M3)
- The trunk shows Registered in the UI (2026-10-21: green, voip.ms, the sub-account at its POP).
- A mobile → DID call rings a phone. 2026-10-21: DID → digital receptionist → browser phone; the DID came in the Request-URI (written down in 06 §3).
- An outbound call shows the DID as caller ID on the mobile (2026-10-21, owner).
- Write down in 06 §4 whether per-call caller ID (Remote-Party-ID) is honored.
Real phones (M8, M10)
- Linphone on a real phone registers by scanning the QR (2026-10-20, iPhone).
- An incoming call rings that Linphone while the app is open (2026-10-21, v0.0.2: DID → receptionist → 100 rings the iPhone).
- A factory-reset Yealink pointed at the setup URL registers with the right name and BLF keys.
- A Grandstream gets its keys the same way.
- Paging auto-answers on a real Yealink or Grandstream.
On hold until the owner has the phones (2026-10-21).
Someone else installs it (M11)
- An outside tester follows only the admin guide and gets inbound and outbound calls working on a fresh VM (2026-10-28, owner).
- A backup restores on a second VM (2026-10-28, owner).
A week on the owner's server
- 7 days handling real calls with no crash or restart of the api or Asterisk (2026-10-28, owner).
- Nightly backups restore cleanly (2026-10-28, owner).
Updating
Docker only, never bare metal (owner, 2026-10-21).
- The api backs up before it changes the database, and stops if it can't (2026-10-21).
scripts/update.shfor compose installs, and the admin guide's "Updating" section for compose and Portainer (2026-10-21).scripts/update.shon a throwaway compose install (Docker in Docker, 2026-10-21):install.shat v0.0.2, then a test v0.0.3 with a migration (the api backed up, then migrated), then a test v0.0.4 whose api crashes after migrating: one backup despite the restarts, and the script went back to v0.0.3 with that backup restored.- A real compose install with the bundled Caddy updated with
scripts/update.sh, with calls and backups. - The owner's Portainer stack updated to a release that changes the database, several times (2026-10-28, owner).
Security leftovers (08 §6)
Owner's decision (2026-10-21): fix all of them. Each is in 08 §6 with its test.
- Asterisk no longer loads
app_system,func_shell,app_disa,res_agiorapp_externalivr;pnpm test:asteriskpasses. - Turning two-step sign-in on asks for the password again.
*97/*98: one voicemail login at a time per phone, 10 an hour.- An unknown MAC answers
/provlike a known one (401). - The login limiter forgets old entries.
The release
- Version 1.0.0 in every
package.json, and a v1.0.0 entry in the changelog. - The release builds and pushes images to both the Gitea registry and ghcr.io (2026-10-28, owner).
Not needed for v1
The mobile app (owner, 2026-10-28), more SIP providers (Telnyx, Flowroute, Twilio), SMS, push notifications for phone apps, and the M12 list in the roadmap.