PROPOSAL — Product Manager role for Mentor

Give a non-technical mentee real product control, on hard $50/mo guardrails

2026-08-23 · Claude Code (Mia) · status: proposal — nothing built until Byron's go

Live app: https://mentor.arnao.ai · Canonical state: [file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/CANONICAL-STATE.md](file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/CANONICAL-STATE.md)


1. The idea in one paragraph

A new server-verified role, pm (user-facing: Product Manager), lets a chosen mentee — no programming skill required — run the product: triage the incoming feedback/PR queue, email the user base, schedule Google Meet sessions, propose and prioritize features, watch an AI worker build them, test the preview, and drive the rollout (with Byron's 30-second tap gating each production promote in v1) — all inside guardrails that make it impossible for them to spend past a hard monthly cap, touch auth/roles/secrets, or steer the product off its mission. The expensive model (Opus 4.8) is their thinking partner; a cheap model (GLM via Z.ai's $10/mo coding plan) does the actual building. Total worst-case cost: ≤ $37/month, under the $50 ceiling with headroom.

Why this is cheap to build: Mentor already has ~70% of the chassis. Server-verified Google-email roles (meta/roles.json), an admin Controller with a Backlog & Releases queue (feedback auto-imports as MEN-NNN items; "Create PR" bundles a release brief), a working Gmail sender, per-user spend caps, and a global cost ledger are all live today. The PM role is mostly scoping existing power down, not building new power up.


2. What the PM can and cannot do

CapabilityPMHow it's enforced
Review incoming feedback / feature requests / "PRs"✅ approve · decline · prioritize · bundle releasesbacklog.js gate widens from admin-only to admin-or-pm
See users (names, activity, tier, last-active)✅ read-only?list / ?activity accept viewer.pm
Invite new users✅ within existing 20/day capexisting invite action, gate widened
Email the whole user group✅ 4 blasts/month, charter-linted, BCC Byronnew broadcast action (§4)
Schedule Google Meet sessionsnew meet action → gog calendar create --with-meet (§4)
Plan features with an AI copilot✅ Opus 4.8, hard $15/mo budgetnew pmplan AI mode charged to PM's own rec.cap (§5)
Trigger builds✅ via "Create PR" → GLM worker builds to a preview URLexecutor on Mia, never deploys prod (§6)
Promote a build to production🔶 every promote needs Byron's 30-sec tap in v1 (graduation path defined) · PM-alone rollback always allowedpromote broker (§6)
Feature flags / A/B tests✅ create flag, set %, read resultsnew flags engine (§7)
Edit roles, budgets, tiers, configroles/config/tier/setcap/settier stay admin-only
Disable/delete a user❌ (can propose → needs-Byron)actions stay admin-only
Touch secrets, env vars, auth codeprotected-path list + executor sandbox
Spend past capserver-enforced, not honor-systemsame rec.cap machinery that already 429s users today

The "sell drugs" case: a Product Charter (§8) is the constitution. The copilot won't plan against it, the broadcast linter won't send against it, and any charter-flagged item lands in a needs-Byron queue instead of executing. The PM has autonomy inside the charter, a request path outside it — never silent power.


3. Role plumbing (the one genuinely fiddly part)

The codebase audit found a role string grants nothing unless wired in exactly four places — miss one and pm silently no-ops:

  1. expandRoles()_store.js:373 (pm expands to just pm)
  2. roleFromReq() two-vocabulary collapse — _store.js:324 (pm maps to mentor-level for legacy checks, and never to admin)
  3. viewerFromReq()_store.js:461 (adds a viewer.pm boolean alongside admin/orchestrator)
  4. ROLE_ACTIONS + per-action gates — user.js:308 (new second-stage pm_allowed check per §2's table)

Client side: the hardcoded 3-entry role modal (index.html:930) and loginGo() mapping gain a 4th entry → a PM console view: the existing Controller, minus the Cost-config/Users-admin controls, plus the new Comms / Copilot / Flags tabs. Granting the role = one line in meta/roles.json via the existing runtime roles action — no redeploy, revocable in seconds.


4. Comms: email the group, book the meetings

Broadcast — new admin-or-pm action broadcast {subject, body, audience}:

Meetings — new action meet {title, when, durationMin, audience}:


5. The PM Copilot (planner = expensive, capped)

New AI mode pmplan in ai.js (mode #19, alongside the existing 18):


6. The worker (builder = cheap) and deploy control

The PM's "Create PR" already produces a release brief and Telegram-pings ops. Today a human agent picks it up. The new piece is an executor daemon on Mia (launchd, like Security Sentinel):

  1. Polls /api/backlog for queued releases (admin token, existing pickup contract).
  2. Runs a headless Claude-Code-compatible coding harness pointed at Z.ai's GLM Coding Plan — Lite, $10/mo flat (plan docs, pricing). It exposes an Anthropic-compatible endpoint, so the harness needs only a base-URL + key swap; GLM-5.x benchmarks within ~4% of Opus on SWE-bench. Fallback tier for trivial tasks: z-ai/glm-5.2:free on OpenRouter — $0, ~200 req/day.
  3. Builds on a branch, deploys a Vercel preview (never --prod), posts the preview URL + a server-computed deterministic diff (git diff --stat + changed-file list — never a model-written summary, since a compromised model would summarize its own backdoor honestly-sounding), marks picked_up.
  4. PM tests the preview link (a non-coder can click a URL), then hits Promote → which in v1 always routes to Byron.

Executor security (the prompt-injection chain, taken seriously). Feedback items are attacker-authored text that flows into a coding model — so the pipeline assumes a hostile brief:

Promote flow (v1, per the Fable adjudication): every promote requires Byron's tap — including "UI-only." Rationale: in this codebase "UI-only" is fictional — client auth, the role modal, and SW registration all live inside index.html, so no PM-promotable path exists that provably can't touch security behavior; and the tap is the only human checkpoint in the injection chain that can actually read code. It's ~30 seconds on Telegram a few times a week — and the minutes where Byron explains a hesitation are the highest-value mentorship in the whole design. Asymmetry kept: PM-alone one-tap Rollback to the auto-snapshotted prior deploy is always allowed (reverting to known-good never waits on anyone). Graduation criteria, published up front so it isn't paternalism: after ~10 clean promotes and once true static assets (copy, handbook, images) are split out of the index.html monolith into files with no executable surface, the PM earns autonomous promotes for that narrow real path.


7. Feature flags + A/B testing

Today the flag surface is literally one boolean (showCostbar). Extend meta/config.json:

flags: { "new-landing-cta": { on: true, pct: 50, salt: "a1b2", goal: "register" } }

7b. Notifications (platform gap, PM's first real project)

Out-of-app notification is today only: welcome email, invite email, Telegram-to-Byron. Proposed v1 — all reusing sendGmail + the existing weekly cron: (a) weekly board-review email digest ("your review is ready"), (b) drift nudge when quietDays ≥ 5 (the in-app cue, escalated to email, opt-out honored), (c) "your feedback shipped" email. Web push (service worker has no push handler) = phase 2. This is deliberately scoped as the PM's first end-to-end run: they spec it with the copilot, the GLM worker builds it, they A/B the nudge copy with §7, and promote it — the whole loop exercised on a real, safe feature.


8. The Product Charter (mission lock)

A short human-readable doc, CHARTER.md, mirrored to meta/charter.json, editable only by owner:

8b. Apprenticeship, not theater (incentive design)

The Fable pass called the sharpest risk: without accountability, the role degrades into "a human approval button between three AIs" filling use-it-or-lose-it quotas. Countermeasures, all cheap:


9. Cost model — worst case ≤ $37/mo

Line$ / monthEnforcement
GLM Coding Plan Lite (worker, flat)$10fixed subscription — cannot overrun
PM copilot, Opus 4.8≤ $15 hard capserver-side rec.cap → 429, then flash downgrade
Charter lint + flag rollups (flash-lite)< $1per-mode caps
Broadcasts, Meet, flags, notifications$0Gmail/Calendar/Blob/Plausible — all existing
OpenRouter free tier (overflow worker)$0200 req/day platform limit
Optional: monthly product review on Fable 5~$11 call/month, pinned
Headroom vs. $50 ceiling~$13–23

The PM's spend is structurally capped: one flat sub + one server-enforced cap. There is no action in their permission set that can create new spend categories. (The app's own user-facing AI budget — dailyBudget: 10 in config — is a separate, pre-existing line and stays admin-only.)

10. Build phases (each independently shippable)

Open items needing Byron: (1) go/no-go + which mentee; (2) Z.ai Lite signup ($10/mo) at P4; (3) approve CHARTER.md text; (4) pick the PM's north-star metric (proposal: weekly active mentees); (5) dedicated sender mailbox/alias for broadcasts; (6) confirm the PM's Google account has passkey/2FA.


11. Self-critique — Fable adversarial pass

Run 2026-08-23 (claude-fable-5, lenses: blast radius / incentive design / security / cost realism, plus a definitive call on promote autonomy). What it found and what changed:

Full critique text: https://mentor-pm.arnao.ai/critique.html (source on disk: [file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/FABLE-CRIT-pm-role.md](file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/FABLE-CRIT-pm-role.md))


Links

WhatLink
Live apphttps://mentor.arnao.ai
Fable critique (full text)https://mentor-pm.arnao.ai/critique.html
This proposal (source)[file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/PROPOSAL-pm-role.md](file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/PROPOSAL-pm-role.md)
Canonical architecture state[file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/CANONICAL-STATE.md](file:///Users/byronarnao/openclaw-gia/config/workspace/projects/mentor-app/CANONICAL-STATE.md)
GLM Coding Plan (worker model)https://docs.z.ai/devpack/overview
GLM plan pricing reviewhttps://codingplan.run/plans/glm-coding-plan
OpenRouter free models (incl. glm-5.2:free)https://openrouter.ai/collections/free-models
CAN-SPAM compliance (broadcast rules)https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business