Skip to content

v0.8 [4/4]: Tests + release readiness #75

@ashu17706

Description

@ashu17706

Release-tracking issue for v0.8.0. The acceptance criteria below are the real-hardware tests that have to pass before tagging.

See `docs/internal/release-flow.md` for the broader release process this issue plugs into.

Acceptance checklist

Each row is a real-hardware test that has to pass before we tag v0.8.0. Tick a box when verified. If a row fails, open a sub-issue, fix on `feat/daemon-core` with a small commit, and re-test.

Lifecycle (macOS)

  • `smriti daemon install` writes `~/Library/LaunchAgents/dev.zero8.smriti.plist` and registers it
  • `launchctl list | grep smriti` shows the service after install
  • `smriti daemon status` reports running with a sensible uptime
  • Reboot test: reboot the machine → log back in → `smriti daemon status` still shows running, no manual intervention
  • `smriti daemon stop` exits the daemon cleanly; `smriti daemon status` reports not-running
  • `smriti daemon uninstall` removes the plist and unregisters the service
  • Post-uninstall reboot: daemon does NOT come back up; no orphaned files in `~/.cache/smriti/`

Lifecycle (Linux)

  • `smriti daemon install` writes `~/.config/systemd/user/smriti.service` and `systemctl --user enable --now smriti`
  • `systemctl --user status smriti` shows active
  • Reboot test: reboot → log in → daemon is running (need linger enabled for non-graphical sessions: `loginctl enable-linger`)
  • `smriti daemon stop` exits cleanly
  • `smriti daemon uninstall` runs `systemctl --user disable --now` and removes the unit file

Capture (functional)

  • Use Cursor on a new project for 30+ minutes without running any smriti command → `smriti search` returns the session content within 60 seconds of finishing
  • Use Claude Code with the new Stop-hook template → poke arrives at the daemon (verify via `smriti daemon logs`)
  • Use Codex CLI → sessions appear in `smriti search` after the debounce window
  • Use Cline → sessions captured
  • Multiple agents in parallel: open Claude + Cursor in two terminals; both sessions appear in `smriti search` without crosstalk

Robustness

  • SIGKILL recovery: `kill -9 $(cat ~/.cache/smriti/daemon.pid)` → no stale socket blocks the next `smriti daemon` start
  • 24-hour soak: leave daemon running for a day, mix of real agent usage; RSS stays under ~200MB; no zombie processes; no segfaults in `smriti daemon logs`
  • Idempotent install: run `smriti daemon install` twice → no duplicate `launchctl list` entries; same service file content
  • `smriti share` unchanged: existing share flow produces the same output as on `main` (regression check)
  • Hook fallback: stop the daemon, fire the Stop hook → `lockf` path activates, ingest still happens

Performance

  • Stop-hook poke completes in <50ms (`time : | nc -U ~/.cache/smriti/daemon.sock`)
  • First flush after daemon start completes within expected window (depends on existing log volume)
  • `smriti search` cold-start latency unchanged from v0.7 (daemon is write-side only; reads are unaffected)

Documentation

  • `CLAUDE.md` quick-reference includes the daemon block
  • `docs/internal/daemon-prd.md` reflects the shipped behavior
  • Release notes at `docs/internal/release-notes-v0.8.0.md` are polished and ready for `gh release create`
  • `package.json` version is `0.8.0` (already done)

When all rows are green

  1. Final sanity: `bun test` clean on `feat/daemon-core`
  2. `gh pr merge 76 --squash --delete-branch` (or `--merge` to preserve commit history)
  3. `git checkout main && git pull && git tag -a v0.8.0 -m "v0.8.0 — cross-agent capture daemon" && git push origin v0.8.0`
  4. `gh release create v0.8.0 --notes-file docs/internal/release-notes-v0.8.0.md --latest`

Known follow-ups for v0.8.1

Out of scope for this release but worth tracking after tag:

  • Teach `smriti upgrade` to detect a running daemon and restart it after pulling new code
  • File the Bun ingest segfault (from smoke-test finding 3) upstream with a minimal repro
  • Promotion of `lockf` mitigation to permanent fallback path documentation

Refs #71, #72, #73, #74. PR #76.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions