Skip to content

fix: v0.7.3 hardening — Emacs local-only deploy, iTerm2 Restore guard, tmux coverage#7

Merged
REPPL merged 3 commits into
mainfrom
feat/v0.7.3-hardening
Jul 8, 2026
Merged

fix: v0.7.3 hardening — Emacs local-only deploy, iTerm2 Restore guard, tmux coverage#7
REPPL merged 3 commits into
mainfrom
feat/v0.7.3-hardening

Conversation

@REPPL

@REPPL REPPL commented Jul 8, 2026

Copy link
Copy Markdown
Owner

v0.7.3 — hardening (Emacs / iTerm2 / tmux)

Three self-contained follow-ups flagged during the v0.7.0 config-plugin work.

Fixes

  • Emacs local-only deploy — the Emacs domain now deploys the union of the shared
    emacs/ tree and the local/emacs/ overlay, so a hand-authored init.local.el with
    no shared counterpart deploys as a machine-only file (mirrors the iTerm2 Dynamic
    Profiles union walk). Excludes + symlink refusal apply to both trees; both-tree files
    resolve local-wins (incl. exec bit).
  • iTerm2 Restore running-guardRestore now refuses the defaults import/delete
    while iTerm2 is running (a live iTerm2 would discard the re-import on quit). The backup
    engine recognises the skip via a ResourceRestoreSkipper interface and continues
    restoring every other path — never aborts a multi-domain restore, never wedges the next
    apply's pre-plan rollback. Apple Terminal unaffected.
  • tmux recogniser coverage — now covers setw/set-window-option, trailing #
    comments, and unquoted values; every shape it can't isolate still degrades to a safe
    refusal (no partial redaction, no leak); ${ENV} stays verbatim.

Verification

gofmt/vet/build clean; go test ./... + full evals green — the iTerm2 restore guard
was exercised with iTerm2 actually running on the host. consistency-lint,
check-plan-shipped v0.7.3, docs-currency-lint all pass. Ruthless review: SHIP;
security review: PASS
on the restore-path change. One recorded known limitation (a tmux
trailing comment ending in a same-kind quote over-selects — non-leak, quotes stay
balanced; see the v0.7.3 plan).

After merge: scripts/release.sh v0.7.3.

Assisted-by: Claude:claude-opus-4-8

REPPL added 3 commits July 8, 2026 13:21
…, tmux coverage

- Emacs (internal/emacs): deploy the UNION of the shared emacs/ tree and the
  local/emacs/ overlay, so a local-only file (e.g. init.local.el with no shared
  counterpart) deploys as a machine-only file — mirrors the iTerm2 Dynamic
  Profiles union walk. Excludes + symlink refusal now cover both trees.
- iTerm2 (internal/terminal): PreferenceDomain.Restore now honours the same
  'iTerm2 running' guard as Apply (refuses import/delete into a live domain);
  the restore/rollback caller treats the skip as a warn-continue, never aborting
  a multi-domain restore or wedging the next apply. Apple Terminal unaffected.
- tmux (internal/tmux): the secret recogniser now covers setw/set-window-option,
  trailing comments, and unquoted values, still degrading to a safe refusal for
  shapes it cannot isolate (no leak, no whole-line clobber).
@REPPL REPPL merged commit b337314 into main Jul 8, 2026
12 checks passed
@REPPL REPPL deleted the feat/v0.7.3-hardening branch July 8, 2026 12:25
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