mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-16 18:05:31 +02:00
docs(memorable): silent skips vs logged refusals; payload class token; D21/D24 anchors
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
3b4f955181
commit
ed7b7888a0
@@ -552,7 +552,7 @@ row shape.
|
|||||||
**Effort:** L (human ~1.5 weeks / CC+gstack ~4 h). **Priority:** P3.
|
**Effort:** L (human ~1.5 weeks / CC+gstack ~4 h). **Priority:** P3.
|
||||||
**Depends on:** a second third-party hook actually wanting in.
|
**Depends on:** a second third-party hook actually wanting in.
|
||||||
|
|
||||||
### P2: Windows support for the Memorable bridge
|
### P2: Windows support for the Memorable bridge (D21)
|
||||||
|
|
||||||
**What:** `enable` refuses on Windows and the hook exits 0 there. Bring it up:
|
**What:** `enable` refuses on Windows and the hook exits 0 there. Bring it up:
|
||||||
descendant termination (`taskkill /T` or a job object) so a vendor process
|
descendant termination (`taskkill /T` or a job object) so a vendor process
|
||||||
@@ -596,7 +596,7 @@ the `--timeout 5` registration.
|
|||||||
|
|
||||||
**Effort:** S. **Priority:** P3. **Depends on:** the bridge in use.
|
**Effort:** S. **Priority:** P3. **Depends on:** the bridge in use.
|
||||||
|
|
||||||
### P3: consolidate the vendor resolvers and extract the canonical-root helper
|
### P3: consolidate the vendor resolvers and extract the canonical-root helper (D24)
|
||||||
|
|
||||||
**What:** The vendor CLI is resolved twice (bash in `bin/gstack-memorable`, TS
|
**What:** The vendor CLI is resolved twice (bash in `bin/gstack-memorable`, TS
|
||||||
in the hook); the canonical-root and `IS_WINDOWS` logic is copied from
|
in the hook); the canonical-root and `IS_WINDOWS` logic is copied from
|
||||||
@@ -640,9 +640,10 @@ only `GSTACK_HOME`; `bin/gstack-uninstall` deletes only
|
|||||||
the receipts under another; the tests pin all three variables to one temp dir,
|
the receipts under another; the tests pin all three variables to one temp dir,
|
||||||
so the drift is invisible to them. Found by the /ship red team.
|
so the drift is invisible to them. Found by the /ship red team.
|
||||||
|
|
||||||
**Context:** Uninstall already flips `memorable_recall` off unconditionally
|
**Context:** Uninstall already flips `memorable_recall` off whenever it reads
|
||||||
(through gstack-config's own resolution) so no config can say `on` after the
|
`on`, kept state or not (through gstack-config's own resolution), so no config
|
||||||
hook is gone; the remaining drift is observability, not consent.
|
can say `on` after the hook is gone; the remaining drift is observability, not
|
||||||
|
consent.
|
||||||
|
|
||||||
**Effort:** S (human ~3 h / CC+gstack ~20 min). **Priority:** P3.
|
**Effort:** S (human ~3 h / CC+gstack ~20 min). **Priority:** P3.
|
||||||
**Depends on:** none.
|
**Depends on:** none.
|
||||||
|
|||||||
@@ -74,27 +74,34 @@ proxy and TLS variables (`HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY`,
|
|||||||
`SSL_CERT_FILE`, `SSL_CERT_DIR`, `NODE_EXTRA_CA_CERTS`), the `XDG_*`
|
`SSL_CERT_FILE`, `SSL_CERT_DIR`, `NODE_EXTRA_CA_CERTS`), the `XDG_*`
|
||||||
directories, and every `MEMORABLE*` variable. No `ANTHROPIC_API_KEY`, no
|
directories, and every `MEMORABLE*` variable. No `ANTHROPIC_API_KEY`, no
|
||||||
`GSTACK_*`, no `CLAUDE_*` reaches it. Its stderr is kept out of
|
`GSTACK_*`, no `CLAUDE_*` reaches it. Its stderr is kept out of
|
||||||
`hook-errors.log` whenever the redaction engine finds a credential or PII
|
`hook-errors.log` whenever the redaction engine finds a HIGH- or MEDIUM-tier
|
||||||
shape in it, so a vendor that echoes its input on an error cannot copy your
|
shape in it (a credential, an email, a phone number), so a vendor that echoes
|
||||||
prompt into a log.
|
its input on an error cannot copy your prompt into a log. The receipt's
|
||||||
|
`payload_class` is the token `claude-user-prompt-json->local-vendor-cli`: the
|
||||||
|
prompt JSON, handed to the local vendor executable; the network destination is
|
||||||
|
unknown to gstack (Memorable states: its embed API, on a local recall miss).
|
||||||
|
|
||||||
The hook skips the hand-off entirely, with one rate-limited line in
|
The hook skips the hand-off silently (nothing was refused, so nothing is
|
||||||
|
logged) when the gate is off or `MEMORABLE=0` is set.
|
||||||
|
|
||||||
|
It refuses the hand-off, with one rate-limited line in
|
||||||
`~/.gstack/hook-errors.log`, when:
|
`~/.gstack/hook-errors.log`, when:
|
||||||
|
|
||||||
- the gate is off, `MEMORABLE=0` is set, or the vendor binary is missing;
|
- the vendor binary is missing;
|
||||||
- the prompt carries a HIGH-tier credential shape (checked on the raw bytes
|
- the prompt carries a HIGH-tier credential shape (checked on the raw bytes
|
||||||
and on the decoded string values, so a JSON-escaped key does not slip by),
|
and on the decoded string values, so a JSON-escaped key does not slip by),
|
||||||
or is larger than 1 MiB;
|
or is larger than 1 MiB;
|
||||||
- the repo's per-remote trust policy is `deny` or `read-only` (judged by the
|
- the repo's per-remote trust policy is `deny` or `read-only` (judged by the
|
||||||
session's working directory, so a session that touches other repositories
|
session's working directory, so a session that touches other repositories
|
||||||
is not covered);
|
is not covered), or that policy could not be looked up at all (git could
|
||||||
- the receipt cannot be written, or fewer than 500 ms remain of the hook's
|
not read the repository, the store is unreadable): the lookup fails closed;
|
||||||
4.5 s budget.
|
- the receipt cannot be written, or the hook's 4.5 s budget cannot afford the
|
||||||
|
next step (the secret scan of a very large prompt, or the vendor spawn).
|
||||||
|
|
||||||
A receipt whose outcome is missing means the host killed the hook or the clock
|
A receipt whose outcome is missing means the host killed the hook or the clock
|
||||||
ran out. Read it as unknown, never as success. An outcome of `output-written`
|
ran out. Read it as unknown, never as success. An outcome of `output-written`
|
||||||
means gstack wrote enveloped context to Claude Code's stdin; whether Claude used
|
means gstack wrote enveloped context on its stdout for Claude Code to inject;
|
||||||
it is not something a hook can know.
|
whether Claude used it is not something a hook can know.
|
||||||
|
|
||||||
## What gstack tests, and what is Memorable's claim
|
## What gstack tests, and what is Memorable's claim
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user