| A file sent to a second real machine landed with its hash checked on the receiving side, and a transfer that stalled resumed from its exact offset | UM.75 (part) | \1, \1 (go/cmd/tagii-mesh/transfer_test.go), \1 (go/internal/meshcore/filesrw_test.go) | Live |
| A file was pulled from a second real machine, hash exact, no partial left behind | UM.75 (part) | \1, \1 (go/internal/meshcore/filesrw_test.go) | Live |
| A clipboard round trip between two real machines came back byte-identical, in both directions | UM.14, UM.75 (part) | \1, \1 (go/cmd/tagii-mesh/relay_test.go) | Live |
| The program on a running device was replaced and the device kept its identity, checked from the other machine over the wire | UM.15 | \1 (go/internal/meshcore/install_test.go), \1 (go/internal/meshcore/install_test.go) | Live |
| Two nodes relay the clipboard both ways, with no echo, secrets withheld and logged, and delivery after the far side returns | UM.14 | \1 (go/cmd/tagii-mesh/relay_test.go), \1 (go/internal/meshcore/queue_test.go), \1 (go/internal/meshcore/queue_test.go), \1 (go/internal/meshcore/queue_test.go), \1 (go/internal/meshcore/queue_test.go), \1 (go/internal/meshcore/queue_test.go), \1 (go/internal/meshcore/watch_test.go), \1 (go/internal/meshcore/watch_test.go) | Built |
| The node binds the loopback and the private network address only, never a wildcard | UM.10 | \1 (go/internal/meshcore/bind_test.go), \1 (go/internal/meshcore/bind_test.go) | Built |
| A peer whose certificate changed is refused on the transfer path | UM.10 | \1 (go/internal/meshcore/tailnet_test.go) | Built |
| Certificate creation under concurrent first runs produces one identity, never a mismatched pair | 2026-08-29 defect 3 | \1 (go/cmd/tagii-mesh/certrace_test.go), \1 | Built |
| An update that is wrong in any way is refused whole, with the program on disk unchanged | UM.41, UM.55 | \1 (go/internal/meshcore/update_test.go), \1 (go/internal/meshrelease/meshrelease_test.go), \1 (go/internal/meshrelease/meshrelease_test.go) | Built |
| Waking a device: ask first, then send the signal, directly or through another of your devices | UM.23 | \1 (go/cmd/tagii-mesh/wake_test.go), \1 (go/cmd/tagii-mesh/wake_test.go) | Built |
| A screen session refuses a device outside your set and its audit row never carries content | UM.20, UM.24 | \1 (go/internal/meshcore/stream_test.go), \1 (go/internal/meshcore/stream_test.go), \1 (go/internal/streamhost/streamhost_test.go) | Built |
| A view of the screen goes only to a paired device; paused means no picture leaves; a stream carries distinct frames | R7 | \1 (go/internal/meshcore/view_test.go), \1 (go/internal/meshcore/view_test.go), \1 (go/internal/meshcore/view_test.go), \1 (go/internal/meshcore/night_test.go) | Built |
| A file you fetch carries a hash you can check, and nothing outside what you shared is reachable | R7 | \1 (go/internal/meshcore/files_test.go), \1 (go/internal/meshcore/files_test.go), \1 (go/internal/meshcore/files_test.go) | Built |
| Every file in the product explains itself, and the tools that check and write the header ship in the binary | L.1, L.2, UM.62 | \1 (go/internal/headers/stamp_test.go), \1 (go/internal/headers/stamp_test.go), \1 (go/internal/headers/stamp_test.go), \1 (go/internal/headers/stamp_test.go), \1 (go/internal/headers/embed_test.go), \1 (go/internal/headers/diff_test.go), \1 (go/internal/meshcore/codediff_test.go), \1 | Built |
| Deploy sends the files that changed to the device and path each file's own header names, and nowhere else | L.4 | \1 (go/internal/meshcore/deploy_test.go), \1 (go/internal/headers/deploy_test.go), \1 | Built |
| A watched folder lands every save on another device, one way, and nothing on the far side is deleted | L.3 | \1 (go/internal/meshcore/folderwatch_test.go), \1 (go/internal/meshcore/folderwatch_test.go), \1 (go/internal/meshcore/folderwatch_test.go), \1 | Built |
| The phone receives files only while its own switch is on, off by default, and the switch turns itself off when the socket dies underneath it | UM.104 | \1 (go/internal/meshphone/lanreceive_test.go), \1 (go/internal/meshphone/lanreceive_test.go), \1 (go/internal/meshphone/lanreceive_test.go), \1 | Built |
| An incoming file is a question on the phone: nothing is taken until Accept, Decline takes nothing and the sender knows, silence expires into a decline, and quick save is per device | UM.44, UM.52 | \1 (go/internal/meshphone/offers_test.go), \1 (go/internal/meshphone/offers_test.go), \1 (go/internal/meshphone/offers_test.go), \1 (go/internal/meshphone/offers_test.go), \1 (go/internal/meshcore/payloadbind_test.go), \1, \1 | Built |
| Progress is shown both ways and the bytes arrive; received files have a page | UM.106, UM.107 | \1 (go/internal/meshphone/progress_test.go), \1 | Built |
| No screen reachable from the Upload Mesh entry point is a registration surface, and the guard has its own positive control | UM.90, UM.92 | \1 | Built |
| The phone's identity opens only after its owner is asked, and seals when the app leaves the front | UM.93, UM.96 | \1, \1 | Built |
| Who is at the other end is visible wherever an action is taken, by the device's pinned fingerprint | UM.97 | \1, \1 | Built |
| A risky act asks the approval phone first: bound to the requester, expiring, single-use, and no answer is a no; the ordinary acts never ask | UM.56, UM.95 | \1 (go/internal/meshcore/approval_test.go), \1 (go/internal/meshcore/approval_test.go), \1 (go/internal/meshcore/approval_test.go), \1 (go/internal/meshcore/approval_test.go), \1 (go/internal/meshcore/approvalstep_test.go), \1 (go/internal/meshcore/approvalstep_test.go), \1 (go/internal/meshphone/approve_test.go), \1 | Built |
| Ringing a device never touches its mixer, carries a Stop on the device itself, and has a hard time limit | UM.46 | \1 (go/internal/meshcore/ringsafety_test.go), \1 (go/internal/meshcore/ringsafety_test.go), \1 (go/internal/meshcore/ringsafety_test.go), \1 (go/internal/meshcore/ringsafety_test.go) | Built |
| Revoking a device reaches it on the wire and is named as a revocation; peer credentials are never cleartext at rest | F13, key lifecycle | \1 (go/internal/meshcore/revoke_test.go), \1 (go/internal/meshcore/revoke_test.go), \1 (go/internal/meshcore/tokenseal_test.go), \1 (go/internal/meshcore/tokenseal_test.go) | Built |
| The pinned link between devices negotiates a hybrid post-quantum key exchange by default, and the guard can tell classical from hybrid | UM.38 | \1 (go/internal/meshcore/tlspq_test.go), \1 (go/internal/meshcore/tlspq_test.go), \1 (go/internal/meshcore/tlspq_test.go) | Built |
| Settings are served on an owner-only socket; every switch has a page; the diagnostics bundle carries no secrets | UM.70, L.6 | \1 (go/internal/meshcore/settingsapi_test.go), \1 (go/internal/meshcore/settingsapi_test.go), \1 (go/internal/meshcore/settingsapi_test.go), \1, \1 | Built |
| A phone's own notifications cross to a paired desktop only for the apps a person turned on, one by one, off for every app by default | UM.57 | \1, \1, \1 | Built |
| Remote input into a desktop is off unless turned on, refuses while the session is locked, expires on its own, and admits only the peers on its list | UM.19 | \1 (go/internal/meshcore/input_test.go), \1 (go/internal/meshcore/input_test.go), \1 (go/internal/meshcore/input_test.go), \1 (go/internal/meshcore/input_test.go), \1 (go/internal/meshcore/input_test.go) | Built |
| A stock KDE Connect device on the same network becomes visible and never trusted; the listener is off by default | UM.14b | \1 (go/internal/meshcore/kdeconnect_discovery_test.go), \1 (go/internal/meshcore/kdeconnect_discovery_test.go), \1 (go/internal/meshcore/kdeconnect_discovery_test.go) | Built |
| A one-shot door serves exactly one file over exactly one connection and is then gone; no command or screen opens it yet | UM.53, UM.54 | \1 (go/internal/meshguest/door_test.go), \1 (go/internal/meshguest/door_test.go), \1 (go/internal/meshguest/door_test.go), \1 (go/internal/meshguest/door_test.go) | Built |
| A device can join by a code that never crosses the wire; a wrong code is refused at the first step | D13 (not on any screen) | \1 (go/internal/meshpake/pake_test.go), \1 (go/internal/meshpake/pake_test.go), \1 (go/internal/meshphone/pake_join_seam_test.go), \1 (go/internal/meshphone/pake_join_seam_test.go) | Built |
| A folder can be kept in sync by a bundled Syncthing driven over its own interface, and the driver never touches a folder a person configured by hand | UM.48, D5 | \1 (go/internal/syncfolder/syncthing_test.go), \1 (go/internal/syncfolder/syncthing_test.go), \1 (go/internal/syncfolder/syncthing_test.go), \1 | Built |
| A generated project passes the header audit and one with an unfinished field fails it | UM.21 | \1 (go/cmd/tagii-devkit/devkit_test.go), \1 (go/cmd/tagii-devkit/devkit_test.go), \1 (go/cmd/tagii-devkit/devkit_test.go) | Built |
| A signed Android early-access package and its published SHA-256 digest are present in the release directory | UploadMesh Android early access | \1, \1 | Built |
| A 64-bit Linux package contains the product, its licences, its parts list and a checked installer that opens pairing | UploadMesh Linux early access | \1, \1, \1 | Built |
| The current build between two real machines: view, alert, revoke, and a re-run of files and clipboard | UM.75 | \1 | Not yet |
| A person using the app on a phone | UM.11, UM.12, UM.104 | \1 | Not yet |
| Two real phones, phone to phone | UM.105 | \1 | Not yet |
| The install door (a phone scanning a code, downloading and installing the app) | UM.22 | \1 | Not yet |
| Across the internet, away from one network | UM.09 | \1 | Not yet |
| Our own relay applied and in the path | UM.08 | \1 | Not yet |
| An actual video stream on a viewer | UM.20 | \1 | Not yet |
| A real machine woken | UM.23 | \1 | Not yet |
| A release reproduced byte for byte on two independent machines, with a transparency log checked before updating | UM.73, UG14 | \1, \1, \1 | Not yet |
| Everything returns after a restart | UM.16 | \1 | Not yet |
| Apple platforms | workbook section 7 item 1 | \1 | Not yet |
| Windows beyond a cross compile | UM.15 | \1 (go/internal/meshcore/platform_test.go) | Not yet |
| Clipboard from a phone, in the background | workbook section 7 item 5, D9 | \1 | Not yet |
| Public repository, on a self hosted forge | workbook section 5 | \1 | Not yet |
| Licence: AGPL-3.0-or-later | D1 | \1 | Decided, not a proof state |