Fable critique — adversarial pass

First, credit where due: the 4-site role plumbing audit (§3) is real engineering honesty, the "violations route to needs-byron instead of erroring" pattern (§8) is genuinely good design, and scoping notifications (§7b) as the PM's first full loop is the smartest incentive decision in the doc. Now the problems, which are serious.


1. Blast radius — what the guardrails miss

The charter lint checks for evil, not for incompetence. Flash-lite will catch "sell drugs." It will not catch a blast to 300 real users with a broken Meet link, a promised feature that doesn't exist, a condescending tone, or a factual error about the product. BCC to Byron is post-hoc — the reputational damage ships at send time. A new PM's most likely failure mode isn't malice, it's an embarrassing email, and nothing here stops it.

Byron's personal Gmail is the sending identity for bulk mail. 300 recipients at 1/sec from a consumer account, repeatedly, is how you get byron.arnao@gmail.com spam-classified or rate-limited — and every meeting invite the PM creates appears as Byron. The PM can socially impersonate the founder to the entire user base within the guardrails. That's the actual blast radius, and the doc doesn't name it.

Flags are a promote-side door. §7 says flags can gate "any client feature and select AI-prompt variants." So the PM can change the coaching prompts served to 50% of live users — the core product experience — with zero promote gate, zero protected-path check, because config isn't code. This is promote-equivalent power routed around your own promote controls. Biggest internal inconsistency in the document.

"UI-only" is not a real category here. index.html is a monolith containing loginGo(), the role modal, and service-worker registration (§3 says so itself). A diff that "touches only index.html copy/UI" can rewrite the login flow. The protected-path list protects api/* while the client half of auth lives in the file the PM can promote alone.

Segments need validation. If segments.json accepts raw strings rather than re-validating against the user list at send time, the PM (or their compromised account) can email arbitrary external addresses from Byron's Gmail. §4 asserts the constraint for meetings but not clearly for blasts.

Rollback rolls back deploys, not state. Flags and config live in Blob; one-tap rollback can leave prod code and config mutually incoherent.

2. Incentive design — growth or theater?

The structure risks making the PM a human approval button between three AIs: Opus forms the plan, GLM builds it, flash-lite exercises judgment, and the PM clicks. What does the mentee actually practice? The doc never says what the PM is accountable for. No north-star metric, no definition of good performance. Without one, the role optimizes for activity: quotas like 4 blasts and 8 meets/month are use-it-or-lose-it allowances that will get filled because they exist, not because users need them.

Worse, the feedback loop the PM is supposed to learn from is mush by the doc's own admission: A/B results are "directional, not significant" below n≈100/arm at a userbase of tens. You've built a role whose primary learning instrument can't produce signal at current scale. The PM will learn to narrate confidence over noise — the exact anti-skill.

Missing entirely: a review ritual. The needs-byron queue is exception-only. The growth happens in a weekly 30-minute review of the pmlog where Byron explains why a call was right or wrong. That's cheaper than any feature in this doc and worth more than most of them.

3. Security — the honest threat model

The prompt-injection chain to production is live and the doc's mitigations are prompts. Path: any user submits feedback → auto-imports as MEN-NNN → PM bundles it into a release brief → the cheapest injectable model consumes attacker-authored text with a coding harness → builds obfuscated exfil into index.html (localStorage tokens, session data) → the "diff summary" shown to the PM is written by the same possibly-compromised model → non-technical PM sees the visible feature works, promotes. §6's defenses — charter lint, rules "baked into the harness prompt" — are prompt-layer controls against a prompt-layer attack. That is not a control. Model-authored diff summaries must be replaced by a server-computed, deterministic diff, and even then a non-coder can't read it — which is the real argument in the promote question below.

The executor holds the admin token. The daemon polls /api/backlog with admin credentials while its brain is GLM consuming hostile text. If the agent process can read its own env, an injected agent exfiltrates the exact credential the entire PM design exists to keep away from non-admins. You need a broker split: a dumb poller holds the token and hands the agent only the brief; the agent gets egress-allowlisted network and no secrets.

Preview environment isolation is unaddressed. If Vercel previews inherit prod env (Blob token, provider keys), then GLM-authored code executes against production data with production write credentials before any human review. This must be answered before P4, not discovered during it.

The PM's Google account is now a high-value target with no stated hardening: it can email the userbase, read all user PII (?list), and deploy. Phish one mentee, own the product's voice. Minimum: mandatory 2FA/passkey as a condition of the role, anomaly checks (blast at 3am, promote outside review hours), and instant-revoke drilled once.

Meet watcher shell injection: attendee strings interpolated into a gog CLI invocation on the Gia container. Strict schema validation and argv-array execution, never string-built shell commands.

4. Cost realism

The dollar cap holds structurally — flat sub plus server-enforced rec.cap is sound, and "no action creates new spend categories" is a genuinely good property. But the estimates inside it are 2–4× optimistic:

Verdict: $37 worst case is credible in dollars. The throughput the doc implies for those dollars is not.


The promote question — resolved

v1 requires Byron's tap on every promote. No exceptions, including UI-only. Three reasons, in order:

  1. The "UI-only" boundary is fictional in this codebase. Client auth, the role modal, and SW registration live in index.html. Until the monolith is decomposed, there is no path a PM can promote that can't touch security-relevant behavior. You can't grant autonomy over a boundary that doesn't exist.
  2. The promote tap is the only human checkpoint in the prompt-injection chain, and it must be a checkpoint that can read code. A non-technical PM verifying "the preview looks right" validates exactly what an attacker wants validated.
  3. The cost is trivial and the tap is the mentorship. Expected volume is a few promotes a week; a Telegram approve is 30 seconds — or 5 minutes when Byron explains why he's hesitating, which is the highest-bandwidth teaching this role will ever produce.

Keep the asymmetry: PM-alone rollback stays (reverting to a known-good state should never wait on anyone). And publish graduation criteria so this isn't paternalism: after N clean promotes and after true static assets are separated from index.html, the PM earns autonomous promotes for that narrow, real path.


The 3 highest-leverage changes

  1. Byron-tap on every promote + isolate the pipeline: preview deploys get sandboxed env (no prod Blob/provider tokens), diffs are server-computed — never model-summarized — and flag changes that alter AI prompts go through the same needs-byron gate as code. Closes the injection-to-prod chain and the flags side door in one move.
  2. Broker the executor: a credential-holding poller separate from the GLM agent; agent gets the brief only, egress allowlist, no admin token or secrets in its readable environment; feedback text fenced/sanitized as untrusted before it enters any build prompt.
  3. Give the role a scoreboard and a ritual: one north-star metric (weekly activation or retention — pick one), a weekly 30-min Byron–PM pmlog review, first month of blasts Byron-approved, and move sending off Byron's personal Gmail to a dedicated product address. This converts the role from activity theater into an actual apprenticeship.

The bold idea you're missing

Turn the flags engine into a canary rollout system — and make it the path to real PM autonomy. Every promote ships dark, then the PM ramps it through an opt-in beta segment (10% → 50% → 100%) with automated health gates: onboarding completion rate, JS error rate, key-event throughput per arm, auto-rollback on regression. You already have deterministic bucketing (§7), segments (§4), per-user event logs, and one-tap rollback (§6) — this is a composition, not a build. It resolves the autonomy tension structurally: Byron gates the code, the PM owns the rollout, and the safety net is measured user behavior instead of anyone's judgment. That's also the only version of this role where the PM learns the actual craft — shipping carefully to real people and reading what they do.