Skip to content

feat(sign): GPU-pod-rent consent gate — !sidecar sign rent (human-only one-shot token) - #432

Merged
dancinlife merged 1 commit into
mainfrom
feat/sign-rent-gate
Jul 24, 2026
Merged

dancinlife merged 1 commit into
mainfrom
feat/sign-rent-gate

Conversation

@dancinlife

Copy link
Copy Markdown
Contributor

no-verify-ok L0 core-guard edit — adding the rent consent gate inherently touches

the L0 files modules/pre.ts (guard dispatcher) + cli/index.ts (command registry);

deliberate, CHANGELOG + ARCHITECTURE updated in lockstep. Only L0-LOCKDOWN blocks.

Renting a pod (hexa cloud rent|up) is a real-money action, so pre bash now BLOCKS
it (CLOUD-RENT-UNSIGNED) until the HUMAN mints a one-shot consent token via the TUI
bang !sidecar sign rent. Ports the retired hexa _sign_guard.hexa consent gate
(old ! sidecar sign commons pattern) to the TypeScript sidecar.

  • modules/sign.ts: host-global plain-epoch token store ~/.sidecar/signs/.sign,
    TTL rent=600s, one-shot (atomic rename-then-unlink consume-on-admission); CLI verbs
    list/mint/check/clear + guards signFresh/consumeSign/detectSelfMint/signForgeBashTarget/isSignsPath.
  • cloud-guard.ts: detectCloudRent (direct head-match gated; indirect wrapper blocked);
    fixed pre-existing segment-local weakness — isHexaBuiltin exempted the WHOLE command
    string, so hexa cloud pods; <raw create> leaked; now sanctioned per-segment.
  • pre.ts: SIGN-SELF-MINT + SIGN-FORGE(bash) in preBash, rent gate LAST (never burns the
    one-shot token), SIGN-FORGE(write) in preWrite.
  • No new hook wiring: both surfaces already route bash->pre bash / write->pre write.
  • Docs: commands/sign.md, templates/sign.md, CHANGELOG, ARCHITECTURE convergence records.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

…y one-shot token)

# no-verify-ok L0 core-guard edit — adding the rent consent gate inherently touches
# the L0 files modules/pre.ts (guard dispatcher) + cli/index.ts (command registry);
# deliberate, CHANGELOG + ARCHITECTURE updated in lockstep. Only L0-LOCKDOWN blocks.

Renting a pod (`hexa cloud rent|up`) is a real-money action, so `pre bash` now BLOCKS
it (CLOUD-RENT-UNSIGNED) until the HUMAN mints a one-shot consent token via the TUI
bang `!sidecar sign rent`. Ports the retired hexa `_sign_guard.hexa` consent gate
(old `! sidecar sign commons` pattern) to the TypeScript sidecar.

- modules/sign.ts: host-global plain-epoch token store ~/.sidecar/signs/<key>.sign,
  TTL rent=600s, one-shot (atomic rename-then-unlink consume-on-admission); CLI verbs
  list/mint/check/clear + guards signFresh/consumeSign/detectSelfMint/signForgeBashTarget/isSignsPath.
- cloud-guard.ts: detectCloudRent (direct head-match gated; indirect wrapper blocked);
  fixed pre-existing segment-local weakness — isHexaBuiltin exempted the WHOLE command
  string, so `hexa cloud pods; <raw create>` leaked; now sanctioned per-segment.
- pre.ts: SIGN-SELF-MINT + SIGN-FORGE(bash) in preBash, rent gate LAST (never burns the
  one-shot token), SIGN-FORGE(write) in preWrite.
- No new hook wiring: both surfaces already route bash->pre bash / write->pre write.
- Docs: commands/sign.md, templates/sign.md, CHANGELOG, ARCHITECTURE convergence records.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@dancinlife
dancinlife merged commit 61d1e36 into main Jul 24, 2026
@dancinlife
dancinlife deleted the feat/sign-rent-gate branch July 24, 2026 08:18
dancinlife added a commit that referenced this pull request Jul 24, 2026
…car sign' misread as mint key (#433)

A shell redirect token after `sidecar sign` was read as a mint key, so a routine
`sidecar sign 2>/dev/null` / `sidecar sign >out` (bare list + redirect) was wrongly
BLOCKED as SIGN-SELF-MINT (caught live on a `sidecar sign 2>&1` diagnostic). Root:
segments() splits on unquoted `&`, so `2>&1` left rest[1]=`2>`, and any rest[1] not in
the read-verb allowlist was treated as a mint key. Fix: a mint key must match
/^[A-Za-z][\w-]*/ (a real word like rent/commons) — redirects/operators/empty fall
through to ALLOW (bare list). Real mints (`sidecar sign rent`, `sudo sidecar sign rent`)
still block; `sidecar sign check rent 2>&1` still allows (rest[1]=check). Follow-up to #432.

Co-authored-by: dancinlife <mk55911@proton.me>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant