Skip to content

feat(scripts): personal opt-out via --skip and private profiles dir#4

Merged
RevealUIStudio merged 1 commit intomainfrom
feat/personal-flow-opt-out
May 2, 2026
Merged

feat(scripts): personal opt-out via --skip and private profiles dir#4
RevealUIStudio merged 1 commit intomainfrom
feat/personal-flow-opt-out

Conversation

@RevealUIStudio
Copy link
Copy Markdown
Owner

Summary

Two additive opt-outs in revcon's scripts that let an operator separate their proprietary workflow from the agnostic editor configs that ship to users. Defaults are unchanged — every supported editor still links by default.

  • --skip <editor> flag + REVCON_SKIP_EDITORS env var in link.sh, unlink.sh, and status.sh. Per-invocation flag is repeatable; env var takes a comma-separated list.
  • REVCON_PRIVATE_PROFILES_DIR env var points at an external directory. --profile <name> resolves there first and falls back to in-repo profiles/<name>/. --list shows both with (private) markers. unlink.sh knows to remove symlinks pointing into the private dir (otherwise they'd orphan). status.sh tags private sources as private:<rel-path>.
  • README gets a "Personal Opt-Out" section documenting both mechanisms.

Test plan

  • bash -n syntax-clean across link.sh / unlink.sh / status.sh
  • ./link.sh --help shows new flags + env-var section
  • ./link.sh --list baseline (in-repo profiles only)
  • REVCON_PRIVATE_PROFILES_DIR=… ./link.sh --list shows in-repo + private with (private) markers
  • Baseline ./link.sh --dry-run --target X --profile revealui still links all 5 editors
  • --skip cursor --skip agents --skip vscode correctly skips named editors
  • REVCON_SKIP_EDITORS=cursor,vscode env var works the same way
  • Private profile resolution: --profile joshua resolves to the private dir when env var is set
  • Real link creates symlinks pointing into the private dir; find -type l confirms targets
  • status.sh reports (profile: joshua (private)) and private:joshua/zed/settings.json source
  • unlink.sh removes the private symlinks too (the key fix — would orphan otherwise)
  • Negative: --profile does-not-exist prints error + profile listing and exits 1 (verified via bash -x trace)

Add two additive opt-outs to link.sh, unlink.sh, and status.sh so an
operator can separate their proprietary workflow from the agnostic
editor configs that ship to users:

  --skip <editor>             skip a specific editor (repeatable)
  REVCON_SKIP_EDITORS=...     comma-separated default skip list

  REVCON_PRIVATE_PROFILES_DIR additional search location for
                              --profile <name>; private profiles
                              take precedence over in-repo ones.

Defaults are unchanged. The product still ships configs for every
supported editor; this just lets an individual operator opt out of
editors they don't use and layer in private profiles that never
enter the public repo.

unlink.sh strips symlinks pointing into the private dir as well
(otherwise it would orphan them). status.sh tags private-profile
sources as private:<rel-path> and marks profile names with
"(private)" in human + JSON output.

link.sh splits its profile-listing into a print_profiles helper
plus the --list entry point so error paths can list profiles and
still exit 1.

README documents both mechanisms under a new "Personal Opt-Out"
section.
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 422495457a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread unlink.sh
is_revcon_link() {
local dest="$1"
[[ "$dest" == "$SCRIPT_DIR"* ]] && return 0
[[ -n "$PRIVATE_PROFILES_DIR" && "$dest" == "$PRIVATE_PROFILES_DIR"* ]] && return 0
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Match private-dir links with a path boundary

The private-profile check treats any path that merely shares the same prefix as managed ([[ "$dest" == "$PRIVATE_PROFILES_DIR"* ]]), so with REVCON_PRIVATE_PROFILES_DIR=/home/me/private a symlink to /home/me/private-backups/... is incorrectly considered revcon-owned. In unlink.sh this can delete unrelated symlinks from a project, and the same matcher in status.sh will misreport unrelated links as revcon-managed. Restrict matching to the directory boundary (for example "$PRIVATE_PROFILES_DIR/"*, optionally plus exact-dir handling) to avoid false positives.

Useful? React with 👍 / 👎.

@RevealUIStudio RevealUIStudio merged commit b478a77 into main May 2, 2026
5 checks passed
@RevealUIStudio RevealUIStudio deleted the feat/personal-flow-opt-out branch May 2, 2026 00:33
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