Skip to content

Commit c79ecb0

Browse files
committed
docs(compound-engineering): capture review promotion contract
1 parent 5c74d8b commit c79ecb0

2 files changed

Lines changed: 83 additions & 0 deletions

File tree

docs/solutions/skill-design/beta-skills-framework.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ severity: medium
1313
description: "Pattern for trialing new skill versions alongside stable ones using a -beta suffix. Covers naming, plan file naming, internal references, and promotion path."
1414
related:
1515
- docs/solutions/skill-design/compound-refresh-skill-improvements.md
16+
- docs/solutions/skill-design/review-skill-promotion-orchestration-contract.md
1617
---
1718

1819
## Problem
@@ -79,6 +80,8 @@ When the beta version is validated:
7980
8. Verify `lfg`/`slfg` work with the promoted skill
8081
9. Verify `ce:work` consumes plans from the promoted skill
8182

83+
If the beta skill changed its invocation contract, promotion must also update all orchestration callers in the same PR instead of relying on the stable default behavior. See [review-skill-promotion-orchestration-contract.md](./review-skill-promotion-orchestration-contract.md) for the concrete review-skill example.
84+
8285
## Validation
8386

8487
After creating a beta skill, search its SKILL.md for references to the stable skill name it replaces. Any occurrence of the stable name without `-beta` is a missed rename — it would cause output collisions or route to the wrong skill.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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

Comments
 (0)