mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-19 03:12:21 +02:00
docs: sync every doc surface with the v1.63 release
/document-release audit (4-lane, all claims verified against branch code): - README: gstack-egress + gstack-context-bill rows in the standalone-binaries table; Privacy & Telemetry gains the receipted-egress bullet (attempted- egress framing per the shipped threat model). - ARCHITECTURE: /health is liveness-only, POST /extension-token endpoint row + bootstrap mechanics paragraph; new Egress receipt ledger subsection under Security model; eval persistence covers the sharded runner, GSTACK_EVAL_DIR, and the finalized-run baseline rule. - CLAUDE.md: sharded test scripts in Commands; sharded semantics in the detached-evals section; PTY skill seeding in the hermetic section; egress invariant block beside the other server-egress invariants; catalog-budget ceiling beside the 160KB token ceiling; project-tree entries for lib/egress-receipt.ts, lib/context-bill.ts, scripts/test-paid-shards.ts. - CONTRIBUTING: seedSkills + live-tree seeding in the hermetic paragraph; sharded runner in detached runs; catalog-budget in the Tier 1 list. - BROWSER: extension token bootstrap section, tunnel egress receipts section, identity-pin migration note in manual install. - REMOTE_BROWSER_ACCESS: tunnel-start receipt bullet in the security model. - gbrain docs: /sync-gbrain + brain-sync egress-receipt behavior documented; dead consumer-token instructions removed (consumer machinery deleted this release); new fail-closed refusal added to the error catalog. - CHANGELOG: measured-vs-ceiling catalog numbers, contributor notes for the external-service tier move and the PTY single-line AskUserQuestion parser, release date. - TODOS: /health token-distribution TODO resolved by this release, removed; port-wave follow-up sections re-labeled to the shipped version. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
562273d793
commit
e7110aac93
+26
@@ -705,6 +705,10 @@ Or do it manually: `chrome://extensions` → toggle Developer mode → Load
|
||||
unpacked → navigate to `~/.claude/skills/gstack/extension` → pin the
|
||||
extension → enter the port from `$B status`.
|
||||
|
||||
v1.63 pinned the extension identity via the manifest `key` field, so existing
|
||||
unpacked installs get a new extension ID and panel-local state (saved port)
|
||||
resets once — a one-time in-product notice explains this.
|
||||
|
||||
---
|
||||
|
||||
## Pair-agent
|
||||
@@ -758,6 +762,15 @@ remote agent that tries them gets a 403 plus a fresh entry in the denial log.
|
||||
+ domain only (no raw IP, no full request body), rotates at 10MB with 5
|
||||
generations. Per-device salt at `~/.gstack/security/device-salt` (mode 0600).
|
||||
|
||||
### Tunnel egress receipts (v1.63+)
|
||||
|
||||
Every tunnel session open writes a hash-chained egress receipt (sink
|
||||
`browse-tunnel`) to `~/.gstack/security/egress.jsonl` BEFORE ngrok forwards
|
||||
anything. Fail-closed: if the receipt can't be written, the tunnel listener
|
||||
is torn down and the start is refused. Inspect the ledger with
|
||||
`bin/gstack-egress list` and verify chain integrity with
|
||||
`bin/gstack-egress verify` (exit 3 on tamper).
|
||||
|
||||
See [`docs/REMOTE_BROWSER_ACCESS.md`](docs/REMOTE_BROWSER_ACCESS.md) for the
|
||||
full operator guide.
|
||||
|
||||
@@ -800,6 +813,19 @@ The Terminal pane uses a separate session cookie, `gstack_pty`, minted via
|
||||
PTY, can't dispatch arbitrary `/command` calls. `/health` endpoint MUST NOT
|
||||
surface this token.
|
||||
|
||||
### Extension token bootstrap (v1.63+)
|
||||
|
||||
`GET /health` is liveness/status only — it never carries a token, in any
|
||||
mode. The Side Panel extension bootstraps the root token via
|
||||
`POST /extension-token` on the local listener. The server releases the
|
||||
token only when the caller's Origin is exactly
|
||||
`chrome-extension://<GSTACK_EXTENSION_ID>` — the `key` field in
|
||||
`extension/manifest.json` pins the extension ID (`GSTACK_EXTENSION_ID` in
|
||||
`browse/src/server.ts`; derivation reproducible via
|
||||
`bun browse/scripts/extension-id.ts`) — AND the parsed Host hostname is
|
||||
loopback. Anything else gets a detail-free 403. The endpoint is never
|
||||
added to `TUNNEL_PATHS`, so the tunnel surface 404s it by default-deny.
|
||||
|
||||
### Token registry
|
||||
|
||||
`browse/src/token-registry.ts` handles mint/validate/revoke for all three
|
||||
|
||||
Reference in New Issue
Block a user