chore(flags): retire phoenix-funnel-readout flag — rip FlagGate + fallback + IaC declaration (ADR 0136)#3699
Conversation
🚀 Preview deployed
|
|
review-code: PASS @ c33026f Verified PR #3699 against #3665's acceptance criteria + ADR 0136 (machine-nominates / human-confirms via the Reviewed-head: @ c33026f Acceptance criteria
Union-of-removals — the diff's Note — the integration-tests job may be red from the known D1-429 flag-provisioning flake (#690/#813); that is unrelated to this PR. The PR's own unit surface (funnel + flagship invariant, and the whole All four criteria pass. Product/app change, not §CP. This PR is merge-ready on the code gate. review-code does not merge — |
|
review-design: PASS @ c33026f — merge-ready Rendered PR #3699 over the preview deploy ( Reviewed-head: @ c33026f Captured Hard-FAIL prohibitions (ADR 0162)
Advisory (non-blocking)
Evidence
All objective prohibitions pass. This PR is design-merge-ready. review-design does not merge — |
|
ship-it: merge-queue ejection detected — PR #3699 was re-enqueued at Cause: a textual conflict on the batch ref — the base moved.
Prior ejection (a different cause, now moot). The first ejection ( All PR-head gates were green at re-enqueue ( Routing back to repair/re-queue. The path is rebase → re-review → re-ship: the rebase moves the head, which staleness-invalidates both current-head verdicts (ADR 0058), so |
…lback + IaC declaration The conversion-funnel readout flag (#1589) serves on@100% in prod. Per ADR 0136 (machine nominates, human confirms), retire the released flag: rip the useFlag/ FlagGate gate and the dead flag-off fallback so only the live served-on path remains, and delete the flag's IaC declaration. - FunnelPage: drop the useFlag gate + the flag-loading placeholder + the 404 fallback branch; the surface always renders. Access stays server-authoritative (the ViewFunnel-gated funnel.summary read denies a non-mod). - funnel/queries.ts: drop the readoutOn flag check + the Denied fallback; the capability gate (requireFunnelAccess) is the sole gate. - Delete the flag's IaC declaration: the FUNNEL_READOUT_FLAG config + factory + import/re-export in flagship/resources.ts, the PHOENIX_FUNNEL_READOUT key constant + DECLARED_FLAGS entry in flags/keys.ts, the alchemy.run.ts import + stack wiring. - Delete the flag's own gate + invariant tests (funnelGating.ts/.test.ts, funnel-readout.invariant.test.ts). - Reword stale docblocks/glossary entries that referenced the retired flag; repoint sibling invariant-test docblocks off the deleted test file. Closes #3665 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
c33026f to
a6b81e9
Compare
|
review-code: PASS @ a6b81e9 Re-verified at the post-rebase head (the prior Acceptance criteria (#3665, ADR 0136)
Net: -171/+15 across 14 files, all deletions of dead gate machinery. Not §CP. Advisory (non-blocking, does not affect this verdict) The rebase repointed the |
|
review-design: PASS @ a6b81e9 — merge-ready Re-verified at the post-rebase head (the prior UI-affecting surface: Rendered-surface delta: none. The flag serves
Refusal states: the non-mod path stays server-authoritative — No design-law violation, no visual regression, no new UI surface. |
Retires the released
phoenix-funnel-readoutflag (conversion-funnel readout, #1589), which serveson@100%in prod. Per ADR 0136 (machine nominates, human confirms — theflag-retirementlabel carries the confirmed graduate verdict), rips the gate + dead fallback so only the live served-on path remains, and deletes the flag's IaC declaration.What changed
Rip the gate + dead fallback (behavior = byte-for-byte the served-on path)
FunnelPage.tsx: drop theuseFlag(PHOENIX_FUNNEL_READOUT)gate, the flag-loading placeholder, and the flag-off 404 fallback — the surface always renders. Access stays server-authoritative: theViewFunnel-gatedfunnel.summaryread denies a non-mod the invisibleUNAUTHORIZED, caught by the page's<Screen>(the "yetkin yok" state).funnel/queries.ts: drop thereadoutOnflag read + theDeniedfallback branch; therequireFunnelAccesscapability gate is now the sole gate.Delete the IaC declaration
flagship/resources.ts:FUNNEL_READOUT_FLAGconfig +funnelReadoutFlagfactory + import + re-export.flags/keys.ts:PHOENIX_FUNNEL_READOUTkey constant + itsDECLARED_FLAGSentry.alchemy.run.ts: thefunnelReadoutFlagimport + stack wiring.Delete the flag's own tests; reword stale docblocks
funnelGating.ts/funnelGating.test.ts(the clientFlagGate/fallback) andfunnel-readout.invariant.test.ts.FunnelSummary.tsx,funnel/fate-module.ts,App.tsxroute comment,keys.tsprecedent mentions,.glossary/TERMS.md); repointed sibling invariant-test docblocks off the deleted test file toauthorship-loop.invariant.test.ts.Verification
git grep: zero surviving references to the flag string/const underapps/web/(grep-clean). The only remainingfunnel-readouthits are the surviving funnel readout surface (funnel/gate.ts— the access gate, not the flag) and pre-existingpackages/cf-utilsCLI diff-renderer fixtures (illustrative sample data, out of scope like the reachability-guard fixtures).pnpm typecheckclean;pnpm lintclean.Closes #3665