Luigit
repositories / smith

smith

There are many coding harnesses - but this one is fast

owned by admin

.pi/skills/e2e-binary/SKILL.md

Raw
Rendered preview

name: e2e-binary description: "Use when user-visible behavior of a CLI, eval, or RPC binary is added or changed: prove it end to end through the built binary with real files and sockets."

End to end through the binary

One workflow, one test, the real executable.

Shape

  • Spawn the built binary (assert_cmd); never call library fns from an e2e test.
  • Isolate: own temp dir per test, XDG_* pointed at it, every credential and selection env var removed, then set only what the scenario needs.
  • Real inputs: files on disk, a loopback socket, stdin bytes; providers scripted (--mock or a fixture server), never live.
  • Assert outcomes a user sees: exit status, stdout, stderr wording, files left behind, permissions. Not internals.
  • Name the test after the workflow: eval_json_reports_cost, rpc_abort_ends_the_running_prompt.
  • RPC: drive stdin line by line, read stdout until the expected event, then close stdin and assert clean exit.

Rules

  • Every user-visible workflow has exactly one e2e owner; unit tests cover the branches.
  • No sleeps; wait on output with a deadline.
  • Secrets never appear in stdout, stderr, or files; assert their absence.
  • Keep e2e binaries in their own tier (e2e_*); they are slower and run per push.

Sources

---
name: e2e-binary
description: "Use when user-visible behavior of a CLI, eval, or RPC binary is added or changed: prove it end to end through the built binary with real files and sockets."
---

# End to end through the binary

One workflow, one test, the real executable.

## Shape

- Spawn the built binary (`assert_cmd`); never call library fns from an e2e test.
- Isolate: own temp dir per test, `XDG_*` pointed at it, every credential and selection env var removed, then set only what the scenario needs.
- Real inputs: files on disk, a loopback socket, stdin bytes; providers scripted (`--mock` or a fixture server), never live.
- Assert outcomes a user sees: exit status, stdout, stderr wording, files left behind, permissions. Not internals.
- Name the test after the workflow: `eval_json_reports_cost`, `rpc_abort_ends_the_running_prompt`.
- RPC: drive stdin line by line, read stdout until the expected `event`, then close stdin and assert clean exit.

## Rules

- Every user-visible workflow has exactly one e2e owner; unit tests cover the branches.
- No sleeps; wait on output with a deadline.
- Secrets never appear in stdout, stderr, or files; assert their absence.
- Keep e2e binaries in their own tier (`e2e_*`); they are slower and run per push.

## Sources

- [assert_cmd](https://docs.rs/assert_cmd), [predicates](https://docs.rs/predicates)
- [nextest filtersets](https://nexte.st/docs/filtersets/)