`hermes dashboard --stop` / `hermes update` signal only the backend PIDs. When the lifespan teardown wedges (stop_hosted_room_service, PTY close_all never reached) the 10s grace loses, SIGKILL lands mid-teardown, and the hosted ui-tui / tui_gateway.entry child is reparented to init still holding the state.db-wal inode; the next start refuses with DeletedWalGenerationError (#112631, residual of #111912). No finite root grace covers an unbounded teardown. _kill_pids_posix now snapshots the dashboard-owned descendant tree BEFORE the kill (the PPID link is gone once the root dies), and after the root phase SIGTERM→SIGKILLs the descendants that are still alive, waiting for the tree to be gone before returning. Descendants are re-checked against their snapshotted start-time fingerprint (the same PID-reuse guard _kill_pids_windows uses) — no `ps -o lstart` per system PID. Detached session leaders without a controlling terminal are pruned from the sweep with their subtrees: those are the messaging-gateway bots and profile actions the dashboard launched with start_new_session from /api/gateway/*, which belong to the user, not the dashboard. A hosted TUI is a session leader too (pty.fork) but owns the pts whose master the dashboard held, so its tty column is set and it is swept. The Desktop boot reaper (_reap_orphaned_desktop_local_serves) SIGKILLs the same class of backend after 1.5s and had the same hole; it now SIGKILLs the surviving snapshotted descendants (no second grace: the boot path runs under a 10s probe). Live: pyteman hermes-111912 wedged leg on origin/main `child_orphan_alive=True deleted_sidecar_holders=2 guard=FATAL DeletedWalGenerationError`, on this head `child_orphan_alive=False deleted_sidecar_holders=0 guard=clean`; the start_new_session control sibling survives on both.
Website
This website is built using Docusaurus, a modern static website generator.
Installation
yarn
Local Development
yarn start
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
Build
yarn build
This command generates static content into the build directory and can be served using any static contents hosting service.
Deployment
Using SSH:
USE_SSH=true yarn deploy
Not using SSH:
GIT_USER=<Your GitHub username> yarn deploy
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the gh-pages branch.
Diagram Linting
CI runs ascii-guard to lint docs for ASCII box diagrams. Use Mermaid (````mermaid`) or plain lists/tables instead of ASCII boxes to avoid CI failures.