Linear: https://linear.app/engineereddev/issue/ENG-256
What's in this PR:
scripts/pneumo-dev.ts+scripts/pneumo-dev/**, run aspnpm dev-client <cmd>(tsx), built only on@pneumo/protocoland@pneumo/crypto:setup,login,pair-uri,claim,send note|link|file,listen,wait-for,download,smoke.- Session files are written atomically with mode 600; nothing prints the token or MK except
pair-uri's documented URI. Files stream encrypted and decrypted. smoke: setup or login → pair + claim → note → link → 2 MB file byte-equal → delete/push_deleted→ revoke/4401, with PASS/FAIL per step.mise run e2e:servernow also runs the smoke against the built server + MinIO in direct and proxy modes;check:serveralso checks, type-checks and tests the dev client.- Root
package.json:dev-clientscript.
Verify (lead, rebased on 62b77a1):
pnpm install --frozen-lockfile→ exit 0mise run check:server→ exit 0 (server Tests 229 passed; dev-client Tests 54 passed)mise run e2e:server→ exit 0 (Tests 17 passed, including both smoke modes)- Implementer's live check against
mise run dev:listenprinted decrypted note, link and file;wait-formatched (exit 0) and timed out (exit 1);pair-uriprinted only the URI. - No
pneumo-e2e-*containers left.
Deviations:
smoke --setup-tokenuses a documented fixed fake passphrase unless--passphraseis given.mise.toml[env]gainspnpm_config_loglevel = "silent"so pnpm doesn't echo credential-bearing script arguments. This applies to every mise task.
🤖 Generated with Claude Code