Skip to content

fix: owner-only session exports and surfaced token-store persist errors - #50

Merged
jkyberneees merged 2 commits into
mainfrom
fix/export-perms-token-persist
Aug 30, 2026
Merged

fix: owner-only session exports and surfaced token-store persist errors#50
jkyberneees merged 2 commits into
mainfrom
fix/export-perms-token-persist

Conversation

@jkyberneees

Copy link
Copy Markdown
Contributor

Fixes S2 and S3 from the AI-slop / vulnerability audit:

  • S2 — session transcript exports (bodek-<id>.md/json) were written world-readable (0644) to a predictable CWD-relative path. Transcripts can carry sensitive tool output; exports are now owner-only (0600), matching the tokens/settings store standard. (internal/tui/panels.go)
  • S3 — the token store's persist() silently swallowed every failure (mkdir/marshal/write/rename), so a failed save broke session resume with no diagnostic and left an orphaned .tmp. persist() now returns an error; Set/Delete report failures on stderr while keeping best-effort semantics; the staged .tmp is removed when the final rename fails. (internal/tokens/tokens.go)

TDD: RED-first regression tests — internal/tui/export_test.go (pins 0600), internal/tokens/persist_errors_test.go (pins error surfacing + tmp cleanup) — both failed against the un-fixed code, green after.

Gate: go vet clean · golangci-lint 0 issues · go test -race ./... -count=1 7/7 packages ok.

Transcripts can carry sensitive tool output; the exported artifact now
matches the tokens/settings store standard instead of being world-readable.
persist() now returns an error instead of silently swallowing every
failure; Set/Delete report it on stderr while keeping best-effort
semantics. A failed rename no longer leaves the staged .tmp behind.
@jkyberneees
jkyberneees merged commit 06fd960 into main Aug 30, 2026
7 checks passed
@jkyberneees
jkyberneees deleted the fix/export-perms-token-persist branch August 30, 2026 19:40
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