Commit Graph

4 Commits

Author SHA1 Message Date
leetcrypt 6c2bcebc12 docs: add project CLAUDE.md — rotation directive + safety guardrails
Operational directive for Claude sessions: the headless two-mode rotation
goal, current phase, and the non-negotiable guardrails (backup-before-rotate,
verify-before-revoke, no-plaintext-on-disk / browser worklist not dump,
GOPASS_HOMEDIR test isolation, self-owned-accounts scope, PGP passphrase =
root of trust). Chosen stack: Bubble Tea + go-rod + .well-known/change-password.

docs/ROTATION.md Part II (capability matrix, TUI walkthrough, link gen, browser
worklist, automation tiers) is updated on disk but stays gitignored (local-only).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 13:29:56 -07:00
leetcrypt 5c4727d1e6 rotate: safety-spine scaffold + mandatory backup gate (NO rotation)
Design-phase foundation for v2 rotation. Changes NO credential at any service.

- internal/rotate: Rotator interface + registry + PlanAll (zero drivers
  registered, so every credential plans as "(none)")
- internal/rotate.Snapshot: the MANDATORY backup gate — seals the gopass
  prefix into an authenticated bundle, re-opens it, and confirms the entry
  count matches before returning; any failure blocks rotation
- internal/sink.CountBundleRecords: read-only bundle completeness check
- cmd: `incredigo rotate` runs the backup gate + prints the plan; it is
  dry-run only and refuses --execute (design phase)
- tests: backup gate happy path, no-overwrite, tamper detection; race-clean

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 10:39:45 -07:00
leetcrypt a7bcbed8ce chore: keep docs/ROTATION.md local-only (gitignore from upstream)
Rotation design stays on disk for local reference but is excluded from the
pushed repo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 10:34:10 -07:00
leetcrypt 425c299359 Initial commit: Incredigo — local-first RAM-only credential custody
v1: discover → migrate → expiry tracking → sealed export/import.

- vault: memguard mlock/DONTDUMP arena, handle indirection, zeroize-on-drop
- discover: registry + 8 read-only scanners (aws, env, netrc, ssh, docker,
  kube, git) and a file/dir harvester (--path)
- sink: gopass streaming insert; length-prefixed bundle framing; Sealer
  interface with three impls — age (default, authenticated), hmac
  (authenticated, openssl-only encrypt-then-MAC), openssl (CBC fallback,
  unauthenticated; OpenSSL 3.x enc refuses AEAD)
- policy: local expiry engine, 60d/8w threshold parser
- audit: redacted append-only JSONL, injectable clock
- export/import: passphrase from no-echo prompt or $INCREDIGO_PASSPHRASE into
  locked memory; secrets stream gopass<->Sealer as bytes, never Go strings
- tests: scanner leak-checks, vault zeroize, bundle round-trip via fake gopass;
  go test ./... green, -race clean

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 07:57:34 -07:00