Files
selfphoneng/docs/v1-checklist.md
T
iamdoubz 90b3081368
ci / check (push) Successful in 57s
ci / images (push) Successful in 1m11s
docs: update.sh tested on a throwaway compose install
2026-10-21 11:53:25 -05:00

83 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ready for v1 checklist
v1.0 ships when every box is ticked. It gathers the roadmap's definition of done
([09](spec/09-roadmap.md)) 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
- [x] Milestones M0–M11 built and tested (simulated phones and a simulated voip.ms).
- [x] Security review (M11-T8), with an independent review (08 §6).
## Real voip.ms account (M3)
- [x] The trunk shows **Registered** in the UI (2026-10-21: green, voip.ms, the sub-account at
its POP).
- [x] A mobile → DID call rings a phone. 2026-10-21: DID → digital receptionist → browser
phone; the DID came in the Request-URI. Still to do: write that down in 06 §3.
- [x] 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)
- [x] Linphone on a real phone registers by scanning the QR (2026-10-20, iPhone).
- [x] 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.
- [ ] A backup restores on a second VM.
On hold (2026-10-21).
## A week on the owner's server
- [ ] 7 days handling real calls with no crash or restart of the api or Asterisk.
- [ ] Nightly backups restore cleanly.
In progress on the owner's server (v0.0.2, from 2026-10-21).
## Updating
Docker only, never bare metal (owner, 2026-10-21).
- [x] The api backs up before it changes the database, and stops if it can't (2026-10-21).
- [x] `scripts/update.sh` for compose installs, and the admin guide's "Updating" section for
compose and Portainer (2026-10-21).
- [x] `scripts/update.sh` on a throwaway compose install (Docker in Docker, 2026-10-21):
`install.sh` at 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.
## Security leftovers (08 §6)
Owner's decision (2026-10-21): fix all of them. Each is in 08 §6 with its test.
- [x] Asterisk no longer loads `app_system`, `func_shell`, `app_disa`, `res_agi` or
`app_externalivr`; `pnpm test:asterisk` passes.
- [x] Turning two-step sign-in on asks for the password again.
- [x] `*97`/`*98`: one voicemail login at a time per phone, 10 an hour.
- [x] An unknown MAC answers `/prov` like a known one (401).
- [x] 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](../CHANGELOG.md).
- [ ] The release builds and pushes images to both the Gitea registry and ghcr.io. (Gitea works.
ghcr.io: the api image pushes; the asterisk package exists, empty, and refuses the push.)
## Not needed for v1
More SIP providers (Telnyx, Flowroute, Twilio), SMS, push notifications for phone apps, and the
M12 list in the roadmap.