|
| 1 | +--- |
| 2 | +title: "Promoting review-beta to stable must update orchestration callers in the same change" |
| 3 | +category: skill-design |
| 4 | +date: 2026-03-23 |
| 5 | +module: plugins/compound-engineering/skills |
| 6 | +component: SKILL.md |
| 7 | +tags: |
| 8 | + - skill-design |
| 9 | + - beta-testing |
| 10 | + - rollout-safety |
| 11 | + - orchestration |
| 12 | + - review-workflow |
| 13 | +severity: medium |
| 14 | +description: "When ce:review-beta is promoted to stable, update lfg/slfg in the same PR so they pass the correct mode instead of inheriting the interactive default." |
| 15 | +related: |
| 16 | + - docs/solutions/skill-design/beta-skills-framework.md |
| 17 | + - docs/plans/2026-03-23-001-feat-ce-review-beta-pipeline-mode-beta-plan.md |
| 18 | +--- |
| 19 | + |
| 20 | +## Problem |
| 21 | + |
| 22 | +`ce:review-beta` introduces an explicit mode contract: |
| 23 | + |
| 24 | +- default `interactive` |
| 25 | +- `mode:autonomous` |
| 26 | +- `mode:report-only` |
| 27 | + |
| 28 | +That is correct for direct user invocation, but it creates a promotion hazard. If the beta skill is later promoted over stable `ce:review` without updating its orchestration callers, the surrounding workflows will silently inherit the interactive default. |
| 29 | + |
| 30 | +For the current review workflow family, that would be wrong: |
| 31 | + |
| 32 | +- `lfg` should run review in `mode:autonomous` |
| 33 | +- `slfg` should run review in `mode:report-only` during its parallel review/browser phase |
| 34 | + |
| 35 | +Without those caller changes, promotion would keep the skill name stable while changing its contract, which is exactly the kind of boundary drift that tends to escape manual review. |
| 36 | + |
| 37 | +## Solution |
| 38 | + |
| 39 | +Treat promotion as an orchestration contract change, not a file rename. |
| 40 | + |
| 41 | +When promoting `ce:review-beta` to stable: |
| 42 | + |
| 43 | +1. Replace stable `ce:review` with the promoted content |
| 44 | +2. Update every workflow that invokes `ce:review` in the same PR |
| 45 | +3. Hardcode the intended mode at each callsite instead of relying on the default |
| 46 | +4. Add or update contract tests so the orchestration assumptions are executable |
| 47 | + |
| 48 | +For the review workflow family, the expected caller contract is: |
| 49 | + |
| 50 | +- `lfg` -> `ce:review mode:autonomous` |
| 51 | +- `slfg` parallel phase -> `ce:review mode:report-only` |
| 52 | +- any mutating review step in `slfg` must happen later, sequentially, or in an isolated checkout/worktree |
| 53 | + |
| 54 | +## Why This Lives Here |
| 55 | + |
| 56 | +This is not a good `AGENTS.md` note: |
| 57 | + |
| 58 | +- it is specific to one beta-to-stable promotion |
| 59 | +- it is easy for a temporary repo-global reminder to become stale |
| 60 | +- future planning and review work is more likely to search `docs/solutions/skill-design/` than to rediscover an old ad hoc note in `AGENTS.md` |
| 61 | + |
| 62 | +The durable memory should live with the other skill-design rollout patterns. |
| 63 | + |
| 64 | +## Prevention |
| 65 | + |
| 66 | +- When a beta skill changes invocation semantics, its promotion plan must include caller updates as a first-class implementation unit |
| 67 | +- Promotion PRs should be atomic: promote the skill and update orchestrators in the same branch |
| 68 | +- Add contract coverage for the promoted callsites so future refactors cannot silently drop required mode flags |
| 69 | +- Do not rely on “remembering later” for orchestration mode changes; encode them in docs, plans, and tests |
| 70 | + |
| 71 | +## Lifecycle Note |
| 72 | + |
| 73 | +This note is intentionally tied to the `ce:review-beta` -> `ce:review` promotion window. |
| 74 | + |
| 75 | +Once that promotion is complete and the stable orchestrators/tests already encode the contract: |
| 76 | + |
| 77 | +- update or archive this doc if it no longer adds distinct value |
| 78 | +- do not leave it behind as a stale reminder for a promotion that already happened |
| 79 | + |
| 80 | +If the final stable design differs from the current expectation, revise this doc during the promotion PR so the historical note matches what actually shipped. |
0 commit comments