Skip to content

Testing ​

Pond's tests run the real processes wherever they can, against fakes for everything that would touch your agents, your screen or the network.

Never the real thing ​

  • A fake Claude Code. End-to-end tests run pond task new with the real helper and the real pond CLI, and a small script stands in for claude. It draws an input box, so the launcher's wait-and-type path runs for real. No test starts a real agent.
  • A temp Pond folder. Every test uses its own POND_HOME, never ~/.pond.
  • No Keychain. Tests use a seal key store that serves temp folders only and refuses any other.
  • Fake backends. Pond Computer runs with --fake-backends: fake capture, input, Accessibility and apps. Nothing is captured or posted. The browser has a fake engine for tests that do not need WebKit. Notifications go to a fake centre.
  • A local relay. Relay tests run the relay on 127.0.0.1 only. Git pushes go to a bare repo in a temp folder.
  • No reports. The send guard blocks crash and usage reports under tests. The telemetry path is checked against a fake endpoint on loopback.

Time without sleeps ​

Timers and locks take an injected clock. Tests move a manual clock forward instead of sleeping, so a 120-second confirmation or a 20-second idle lease runs in milliseconds and gives the same result on a busy machine.

Security tests first ​

For security fixes, the test is written first and run against the old code, where it must fail. Examples: an agent's raw JSON written into a settings file, a stranger's request against the relay's quotas, or an agent's shell naming another agent's id.

Under load ​

A test that passes on a quiet machine can still hide a race. Pond's suites are also run with CPU load generators at load averages of 40 to 190, many times in a row. Each failure is traced to a cause before it is fixed.

Races found this way, each fixed in the product with a test that failed on the old code:

  • Worktree monitor. While git worktree add held its lock, a slow read under load re-created the file-event stream, and the event for the unlock was dropped with the old stream. A worktree could show as locked for 30 seconds. The fix schedules one more read after each re-watch.
  • Computer-use lock events. Two threads could deliver event batches out of order, so an agent showed as driving after its turn ended. Now one thread delivers at a time, in order.
  • Friends client. Two set requests to the relay could land in the wrong order, so the relay forgot a friend's drop or a group member. Every set request now holds a lock and reads its set inside it.

Budgets ​

Pond aims to stay light: under about 100 MB and about 0% CPU when idle. Measurement scripts start a release build with fake agents in a temp folder and record CPU, wakeups per minute and memory per process. Scenarios include idle, three agents streaming, and a browser tile opened and closed.

Release checks ​

A release smoke script checks the packaged app and the app inside its disk image: a valid signature on every binary, the hardened runtime, no debugging entitlement, no non-system libraries, and one version everywhere. It also runs the socket peer checks against a bundle signed the release way: Pond's own keys go in, and other callers are refused.

Pond is not released yet. These docs describe the current build.