Skip to content

Commit c9e09fb

Browse files
docs(droid-control): make single the default layout; gate side-by-side to real comparisons
The skill guidance was tipping droids toward before/after side-by-side as the canonical video shape — primary JSON example used side-by-side with BEFORE/AFTER labels, Demo-mode goal was phrased as 'before/after comparison', delegation table led with 'Capture before branch / Capture after branch'. Result: droids were reaching for side-by-side even on brand-new features where there is no meaningful 'before', sometimes synthesizing a fake baseline. Fix (guidance only, no schema change — layoutSchema already supports both): - droid-control/SKILL.md: new 'Layout default' table under Workflow shape calling out single as the default with the specific cases that warrant side-by-side. Explicit 'do not synthesize a before' rule. - droid-control/SKILL.md: delegation table collapses the two pre-framed before/after rows into 'Capture clip' (single) + 'Capture both clips' (comparison). Parallel capture section heading/gate updated to read 'comparison flows only'. - compose/SKILL.md: primary JSON example now renders a single clip with labels: []. One-line note shows how to flip to side-by-side when a real comparison exists. Showcase-vs-Demo 'Goal' cell no longer pre-supposes before/after. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
1 parent 845a113 commit c9e09fb

2 files changed

Lines changed: 33 additions & 11 deletions

File tree

plugins/droid-control/skills/compose/SKILL.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ Both use the same Remotion pipeline but target different visual registers.
5555

5656
| | Showcase | Demo |
5757
|---|---|---|
58-
| **Goal** | Cinematic, high-polish marketing material | Clear, utilitarian before/after comparison |
58+
| **Goal** | Cinematic, high-polish marketing material | Clear, utilitarian demonstration — single or comparison, whichever the story calls for |
5959
| **Preset** | `factory`, `factory-hero`, or `hero` | `macos`, `minimal`, or `presentation` |
6060
| **Effects tier** | **Full** -- spotlight, zoom, callout, keystroke overlay. Go all out. | **Utilitarian** -- zoom for readability, keystroke overlay for user actions |
6161
| **Audience** | External — landing pages, social, marketing | Internal — PR reviews, docs, QA |
@@ -146,6 +146,12 @@ This checkpoint is not optional. A video that lands outside the target range fai
146146

147147
## Step 2: Build props
148148

149+
### Choose layout
150+
151+
**Default: `single`.** One clip of the target/final state. New features, bug-fix proofs, walkthroughs, and README heroes all belong here.
152+
153+
Use `side-by-side` only when the story is fundamentally a comparison: regression (broken vs fixed), behavior-preserving refactor, or an explicit user request. Never fabricate a "before" clip to justify the side-by-side shape.
154+
149155
Save the `showcaseSchema` JSON to a temp file:
150156

151157
```bash
@@ -154,10 +160,10 @@ PROPS="${DEMO_TMP}/showcase-props.json"
154160

155161
cat > "$PROPS" << 'EOF'
156162
{
157-
"clips": ["before.cast", "after.cast"],
158-
"layout": "side-by-side",
163+
"clips": ["demo.cast"],
164+
"layout": "single",
159165
"fidelity": "auto",
160-
"labels": ["BEFORE (dev)", "AFTER (PR #11621)"],
166+
"labels": [],
161167
"speed": 3,
162168
"title": "PR #11621 — Prevent session freezes",
163169
"subtitle": "Bash Mode blocks interactive commands and supports ESC cancellation",
@@ -167,17 +173,16 @@ cat > "$PROPS" << 'EOF'
167173
{"t": 5.5, "label": "sleep 100"},
168174
{"t": 8.0, "label": "Esc"}
169175
],
170-
"sections": [
171-
{"t": 2.0, "title": "Testing basic echo"},
172-
{"t": 10.0, "title": "Testing long loop"}
173-
],
176+
"sections": [],
174177
"effects": [],
175178
"speedNote": "3x speed",
176179
"windowTitle": "droid demo"
177180
}
178181
EOF
179182
```
180183

184+
For a comparison flow, swap `"clips"` to two paths, `"layout"` to `"side-by-side"`, and populate `"labels"` (e.g., `["BEFORE (main)", "AFTER (PR #11621)"]`).
185+
181186
Use a run-scoped props path like `$PROPS`; do not reuse a global `/tmp/showcase-props.json` across rerenders or concurrent demos.
182187

183188
**CRITICAL: `clipDuration` handling.** The render script auto-detects clip duration via ffprobe when `clipDuration` is omitted from the props. If you set it manually, it **must** match the actual clip duration or you get blank frames (too long) or truncation (too short). When in doubt, omit it and let the script auto-detect.

plugins/droid-control/skills/droid-control/SKILL.md

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,21 @@ Command (intent + commitments)
7171

7272
Commands declare **what** to produce. Atoms own **how**.
7373

74+
### Layout default
75+
76+
**Default: `single`.** One clip showing the target/final state. Pick this unless the deliverable is fundamentally a comparison.
77+
78+
| Case | Layout |
79+
|---|---|
80+
| Brand-new feature (no meaningful prior state) | `single` |
81+
| Bug fix, single-clip proof of the working path | `single` |
82+
| Walkthrough / tutorial / readme hero | `single` |
83+
| Regression proof (broken vs fixed) | `side-by-side` |
84+
| Behavior-preserving refactor (visual parity is the point) | `side-by-side` |
85+
| User explicitly asks for a comparison | `side-by-side` |
86+
87+
Do not synthesize a "before" state to justify `side-by-side`. If there is no real baseline, use `single`.
88+
7489
## Delegation
7590

7691
The parent agent plans and orchestrates. Mechanical work runs in **worker subagents** via the Task tool. This keeps the parent's context clean and enables parallelism.
@@ -79,8 +94,8 @@ The parent agent plans and orchestrates. Mechanical work runs in **worker subage
7994

8095
| Task | Delegate? | Why |
8196
|---|---|---|
82-
| **Capture before branch** | YES `run_in_background=true` | Independent from after branch; run both in parallel |
83-
| **Capture after branch** | YES — `run_in_background=true` | Independent from before branch |
97+
| **Capture clip** (single layout) | YES | Worker runs the interaction script end-to-end and returns the `.cast` path |
98+
| **Capture both clips** (comparison layout) | YES — `run_in_background=true` for each | Branches are independent; run in parallel |
8499
| **Remotion render** | YES | Needs only props JSON, clip paths, output path. Runs `render-showcase.sh` (handles .cast conversion, fidelity profiles, duration detection, cleanup) |
85100
| Planning, interaction scripting | NO — parent | Requires PR context and editorial judgment |
86101
| Layout and prop construction | NO — parent | Requires editorial decisions about effects, timing, labels |
@@ -125,7 +140,9 @@ Task prompt for a Remotion render worker:
125140
/tmp/droid-run-1712345678-42-xxxx/before.cast /tmp/droid-run-1712345678-42-xxxx/after.cast"
126141
```
127142

128-
### Parallel capture pattern
143+
### Parallel capture pattern (comparison flows only)
144+
145+
Only applicable when the Layout default table above selects `side-by-side`. For a `single` layout, launch one capture worker and skip this section.
129146

130147
For before/after comparison demos, launch both capture workers simultaneously:
131148

0 commit comments

Comments
 (0)