docs: update project documentation for v1.78.0.0

README.md: the persistent timeline Stop hook opt-out (#2677) — flag,
env var, and config key with resolution order. BROWSER.md: browse stop
against a dead daemon now reaps the recorded headless Chromium child,
identity-verified (#2709). CLAUDE.md + CONTRIBUTING.md: free-suite test
count ~7,000 → ~8,700 (8,660 as of this wave).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-09-01 16:39:12 +00:00
co-authored by Claude Fable 5
parent 3df8e98ca4
commit bd4a7216e0
4 changed files with 13 additions and 6 deletions
+4 -1
View File
@@ -193,7 +193,10 @@ for the full design + decision trail.
Only an explicit `--force-restart` replaces a live-but-unresponsive
daemon (tabs, cookies, and logins are lost). `browse stop` against a
daemon that already died is success: the desired end state holds, so it
cleans the stale state file instead of booting a daemon just to stop it.
cleans the stale state file instead of booting a daemon just to stop it
and reaps the headless Chromium child recorded in that state file if one
survived. The reap verifies the recorded start time AND a Chromium-looking
cmdline before sending any signal, so a recycled PID is never killed.
### Multi-workspace isolation
+1 -1
View File
@@ -71,7 +71,7 @@ in sync.
## Testing
```bash
bun run test # run before every commit — free, ~90-100s for the full ~7,000-test suite
bun run test # run before every commit — free, ~90-100s for the full ~8,700-test suite
bun run test:evals # run before shipping — paid, diff-based (~$4.35/run max)
```
+1 -1
View File
@@ -154,7 +154,7 @@ Bun auto-loads `.env` — no extra config. Conductor workspaces inherit `.env` f
| 2+3 | `bun run test:evals` | ~$4 combined | E2E + LLM-as-judge (runs both) |
```bash
bun run test # Tier 1 only (run before every commit, ~90-100s for the full ~7,000-test suite)
bun run test # Tier 1 only (run before every commit, ~90-100s for the full ~8,700-test suite)
bun run test:e2e # Tier 2: E2E only (needs EVALS=1, can't run inside Claude Code)
bun run test:evals # Tier 2 + 3 combined (~$4.35/run)
```
+7 -3
View File
@@ -275,9 +275,13 @@ Beyond the slash-command skills, gstack ships standalone CLIs for workflows that
`./setup` also registers one default-on Stop hook in `~/.claude/settings.json`:
`gstack-timeline-stop` (closes dangling session-timeline entries when a session
is interrupted; fail-open — 2s internal budget, always exits 0, can never block
a session). Skip it with `./setup --no-team`, remove it with
`gstack-settings-hook remove-source --source gstack-timeline-stop`;
`gstack-uninstall` removes it too.
a session). Opt out persistently with `./setup --no-timeline-stop-hook`the
choice lands in the `timeline_stop_hook` config key, survives upgrades, and an
explicit "no" removes a live registration. `GSTACK_TIMELINE_STOP_HOOK=no` and
`gstack-config set timeline_stop_hook no` work too (flag > env > config).
`./setup --no-team` skips it for that run, `gstack-settings-hook remove-source
--source gstack-timeline-stop` removes it by hand, and `gstack-uninstall`
removes it too.
Hook registration is canonical-only: every hook command points at the stable
`~/.claude/skills/gstack` install, never the tree setup ran from, so deleting