Both halves are built and shipped. The suite is 245 tests, 244 passing and 1 skipped, and the CI matrix runs it on ubuntu, macOS and Windows across Node 20 and Node 24, plus a Windows job that checks the repository out with CRLF line endings and a job that validates both manifests under --strict. All eight pass.
Proven by a test or a recorded run: two developers on one machine against one bare remote see each other's presence, raise a collision warning from a claim, exchange a message and receive a handoff, with neither working copy touched; a live Claude Code session quotes the guard's note back in the same turn it made the edit; a missing node leaves the session working and the plugin silent; and a claim made while the remote is unreachable queues locally and arrives once it is back. The background worker that carries all of this is itself covered end to end: a session spawns it, a second worker refuses to start beside it, and when the session closes it finishes a last tick, delivers a claim made moments earlier, then exits and releases its lock. That runs on all three operating systems in CI.
Still unverified, and so claimed nowhere: the permission prompt and the status line as a terminal renders them, plugin monitors, custom refs on GitLab, Bitbucket and Azure DevOps, branch protection rules refusing the state ref, the bare /audit short form in the command menu, and resolving package managers without a shell on Windows. The full ledger is docs/VERIFICATION.md, and a pull request that adds a capability adds its row there or the claim does not ship.
macOSWindowsLinuxrecorded run · macOS · claude 2.1.218
$ claude plugin validate plugins/synchrobuilder --strict
Validating plugin manifest: …/plugins/synchrobuilder/.claude-plugin/plugin.json
✔ Validation passed
$ claude -p "Create hello.txt … then list every SYNCHRO-TOKEN you can see" --plugin-dir …/plugin --output-format stream-json …
# result event, is_error: false, num_turns: 2
SESSIONSTART
PROMPT
PREEDIT
POSTEDIT
Those four tokens are markers the experiment hooks injected from SessionStart, UserPromptSubmit, PreToolUse and PostToolUse. Claude listing them back is what proves the hook context arrived. The full experiment log is in docs/research/experiments.md.