v2.1.2 signup rebrand + hands-free /heal recovery#6
Merged
mrdulasolutions merged 5 commits intomainfrom Apr 21, 2026
Merged
Conversation
A valid signup token alone isn't enough — the token is shared in a group chat, and a leak would hand out Rev A workspace keys to random accounts. Add a fail-closed email domain allowlist on the server and mirror it in the browser form so typos are caught before the POST. - `REVA_ALLOWED_EMAIL_DOMAINS` env var, default `revamfg.com,mrdula.solutions`. Override per tenant. - `_email_domain_allowed()` is strict: empty allowlist => deny all, case-insensitive match on the exact domain (subdomain spoofs like `eve@fake.revamfg.com` are rejected). - Server check runs after the token check (so a random attacker who guesses the domain but not the token still sees `invalid signup token`, not a leaked hint about the allowlist). - HTML form shows the allowed domains inline under the email field and blocks submission client-side with a regex the server injects — same contract on both sides. Tested in prod against the live deploy: `@gmail.com` and `@fake.revamfg.com` both return 403 "email domain not allowed" with a valid signup token. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Three user-facing fixes from PM feedback: 1. **README stopped lying to PMs.** The "For end users" section still said "Claude prompts for mcp_url and api_key" — 2.1.1 removed the userConfig block, so Desktop no longer prompts for anything. Rewrote the section with the literal Rev A signup URL, the /connect flow, the email allowlist (@revamfg.com / @mrdula.solutions), and a note about BYO CRM. 2. **Friendlier branding.** Added `displayName: "RevAOps Plugin"` to plugin.json and rewrote the description as product copy instead of changelog. Release titles follow suit. 3. **Bring-your-own CRM.** Nakatomi + AutoMem stay as zero-config defaults, but teams that already use HubSpot / Salesforce / Attio / Pipedrive in Claude Desktop can now make that their system of record via `/integrate <slug>`. Nakatomi + AutoMem always shadow-write so the shared Rev A timeline stays complete, and reads fall back to Nakatomi if the primary is unreachable. New surface: - `reva_set_primary_crm` router tool — admin-escalated PATCH of `workspace.data.primary_crm` with a 10-entry audit trail (`primary_crm_history`). - `reva_whoami` + `reva_get_workspace_config` now return `primary_crm` and `connector_registry` so skills can route writes correctly. - Seed populates `workspace.data.connector_registry` with 5 options (nakatomi + 4 external) and defaults primary to `nakatomi`. - `/integrate` inline command in revmyengine with detection of installed connectors via MCP tool-prefix matching. - `docs/CONNECTORS.md` documents the shadow-write contract for skill authors — primary write → Nakatomi shadow with source tags → AutoMem linked to the Nakatomi ID → return the primary's record to the PM. Signup HTML gains a "Already using HubSpot…" panel so new PMs see the BYO-CRM story during onboarding. Tested: re-seeded against prod, verified workspace.data has `primary_crm: nakatomi` and 5 connector slugs; company_profile and user_roles untouched (non-destructive seed). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Rebuild SIGNUP_HTML with the palette from revamfg.com (warm near-black
bg, cream copy, #bf6a3f copper CTA, warm-stone step pills). Mirrors the
homepage's data-theme="dark" look so the signup flow reads as an
extension of the brand rather than a separate tool. Adds warm
radial-gradient vignette, uppercase-tracked section heads,
brand-matching footer.
- Strengthen Step 2 with a hero "uninstall first" callout. Claude
Desktop's plugin uploader does NOT overwrite existing installs, so
PMs on v2.0.x stay stuck on the pre-launcher mcpServers config. The
only fix is Plugins → Installed → Remove, quit Cmd-Q, reinstall.
- Teach reva-turbo-update-check to detect stale plugin.json (greps for
reva-mcp-launch.sh reference + absence of ${user_config.*} template)
and print a loud banner with the recovery steps. Healthy installs
stay silent. Runs on every engine start, so existing stale installs
surface the warning the first time the PM runs /reva-turbo:revmyengine
after pulling the update.
- README: same uninstall-first callout under Step 3 for the link-first
(no-terminal) install path.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
PMs without a token previously just saw static "one-time code from your
admin" text and had to guess who the admin is. Turn the helper text
into a mailto: to matt@mrdula.solutions with a prefilled subject
("RevAOps signup token request") and a body template that asks for
name / work email / role — matches what Matt actually needs to mint a
token.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…talls The stale-install problem needs more than a "here are 5 manual steps" banner. This adds a canonical recovery script that Claude Cowork can run end-to-end, plus the skill + signup glue to surface it. - plugin/scripts/desktop-install.sh (new, hosted at raw.githubusercontent.com): * Quits Claude Desktop via osascript (idempotent) * Detects the plugins root (Library path OR ~/.claude/plugins) * Downloads the latest release zip (follows /releases/latest redirect) * Removes the stale install dir, extracts fresh * Writes ~/.reva-turbo/state/mcp-credentials.env mode-600 with the key * Pings the router to catch bad keys BEFORE the restart * Relaunches Desktop via `open -a Claude` Exits non-zero on: missing key (2), download fail (3), fs fail (4) so Cowork can report the exact failure to the PM. - plugin/skills/revmyengine/SKILL.md: new `/heal` section + command- registry row. Spells out the capability check (Bash | osascript | Filesystem-only fallback) so Cowork picks the right path. If no viable capability exists the skill tells the PM exactly which connector to enable, then run /heal again — smooth and hands-free when connectors are present, graceful degradation when they're not. - plugin/bin/reva-turbo-update-check: stale banner now leads with `/heal` + the Terminal one-liner + documents the connector needed, keeps the manual 5-step as a last resort. - services/mcp-router/router/signup.py: Step 2 becomes two explicit options — Option A (curl | bash, hands-free) with prominent copper- accent panel, Option B (manual upload) as a neutral fallback. The minted-key success banner now includes a ready-to-paste one-liner with the PM's actual key baked in, so Option A is literally copy- paste-enter. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
mrdulasolutions
pushed a commit
that referenced
this pull request
Apr 21, 2026
All the install-UX work that landed since the v2.1.2 tag (signup rebrand, mailto for token requests, email allowlist enforcement, hands-free /heal recovery, BYO CRM /integrate) shipped to `main` via PR #6 but the v2.1.2 tag still points at the older commit — anyone eyeballing the Releases page sees stale source. Bump to v2.1.3 so the new tag actually matches what the release asset zip contains. - plugin/VERSION, plugin/.claude-plugin/plugin.json: 2.1.2 → 2.1.3 - revmyengine/SKILL.md: frontmatter + /heal fallback threshold - signup.py: footer + Option B download line Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ships v2.1.2 to
mainso the PM-facingraw.githubusercontent.com/.../main/plugin/scripts/desktop-install.shURL resolves (it 404s today and the signup page +/healskill both reference it)./integrate hubspot|salesforce|attio|pipedriveputs the user's connector at the primary while Nakatomi + AutoMem shadow-write. Full contract indocs/CONNECTORS.md.plugin/scripts/desktop-install.sh— quits Desktop, downloads the latest zip, replaces the stale dir, writes creds, pings router, relaunches. Exits 2/3/4 on distinct failures so Cowork can report precisely.revmyengineskill has a/healsection: detects capability (Bash tool |mcp__Control_your_Mac__osascript| Filesystem fallback), runs the script, or tells the PM which connector to enable.reva-turbo-update-checkbanner leads with/heal, Terminal one-liner second, manual 5-step last.Test plan
/signuppage serves the re-themed HTML (verified on Railway)raw.githubusercontent.com/mrdulasolutions/RevOps-RevAMfg/main/plugin/scripts/desktop-install.shreturns 200 after merge/healflow end-to-end on a PM's Mac with Control-your-Mac enabled${user_config.*}plugin.json🤖 Generated with Claude Code