Skip to content

feat(droid-control): render callouts in Showcase; decouple tctl --cwd#32

Merged
factory-ain3sh merged 2 commits into
masterfrom
ainesh/mb-17-callout-overlay
Jul 23, 2026
Merged

feat(droid-control): render callouts in Showcase; decouple tctl --cwd#32
factory-ain3sh merged 2 commits into
masterfrom
ainesh/mb-17-callout-overlay

Conversation

@factory-ain3sh

@factory-ain3sh factory-ain3sh commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Description

What

Two droid-control gaps, one per ticket:

  • callout effects validate against the Showcase schema but the composition never renders them — compose workers write annotation pills that silently vanish from the final video (MB-17).
  • tctl launch rejects --cwd unless it equals --repo-root, so running one worktree's droid-dev from a different project directory (e.g., a scratch project carrying repro hooks) requires a sh -c 'cd … && exec droid-dev' shim that bypasses provenance (MB-18).

How

  • New CalloutOverlay component renders palette-aware text pills at percent anchors, visible t → t+dur in content-local seconds, in both single and side-by-side layouts. Showcase now also warns at render time for any schema-valid-but-unrendered effect type (fade-in/fade-out remain unrendered).
  • --cwd now independently sets the child working directory on both backends, defaults to --repo-root when unset, and is recorded as a cwd= line in launch provenance. The droid-control skill gains the degraded-tail repro recipe this unlocks (slow PreToolUse hook in a scratch project; interrupt-mid-hook strands live rows, steer-mid-hook queues the message; /hooks dev-scope toggle gotcha).

Visual Evidence

Stills from the MB-17 ticket fixture (factory palette, 6 callouts), rendered post-change:

Callout active (t=10s) Callout active (t≈30s) No callout (control)

Repro Recipe

Callouts (uses the MB-17 fixture shape — any props JSON with effects: [{"fx":"callout","t":10,"dur":4,"text":"…","at":{"x":"12%","y":"88%"}}]):

cd plugins/droid-control/remotion && npm install
npx remotion still Showcase --props=<props.json> --frame=405 /tmp/callout.png   # t=10s → frame 10*30 + 105 title offset

cwd decoupling:

plugins/droid-control/bin/tctl launch "pwd; sleep 30" -s t --cwd /tmp --repo-root <any-worktree>
plugins/droid-control/bin/tctl -s t snapshot --trim    # prints /tmp
plugins/droid-control/bin/tctl -s t provenance          # repo_root=…, branch=…, commit=…, cwd=/tmp
plugins/droid-control/bin/tctl -s t close

Related Issue

Closes MB-17
Closes MB-18

Reviewer Guide

Diff shape: ~50% Remotion (CalloutOverlay.tsx + Showcase.tsx wiring), ~20% bin/tctl, ~30% skill/docs prose.
Review depth: Standard — two independent additive changes, no shared surface.
Read order:

  1. plugins/droid-control/remotion/src/components/CalloutOverlay.tsx — timing (t*fps content-local frames) and pill styling
  2. plugins/droid-control/remotion/src/compositions/Showcase.tsxcallouts filter, overlay placement in the main-content sequence, warnUnrenderedEffects
  3. plugins/droid-control/bin/tctlcmd_launch cwd/repo-root resolution and write_provenance third parameter
  4. plugins/droid-control/skills/droid-control/SKILL.md — degraded-tail recipe section

Open for pushback: callouts render as anchored pills without an arrow — the schema's at:{x,y} is an anchor, not a target, so there is nothing to point at (CalloutOverlay.tsx:47).

Risk & Impact

Low risk. Both changes are additive: props without callouts render byte-identically, and every previously-valid tctl launch invocation resolves to the same cwd as before (the only removed behavior is the hard error on --cwd--repo-root). Provenance files gain a cwd= line; the only reader (cmd_provenance) cats the file verbatim.

Verification

Behavior verified. Stills from the MB-17 ticket fixture (6 callouts, factory palette) at content frames 405 and 1015 show pills at the expected percent anchors; frame 855 (no active callout) is clean. Render of the fixture plus an injected fade-in effect prints Showcase: effect fx='fade-in' is schema-valid but not rendered by this composition. tctl live repro on both backends (tuistory + true-input/cage): child pwd prints the --cwd value, provenance records repo_root+cwd, cwd-only launches write cwd=-only provenance, relative and nonexistent --cwd die with clear messages. verified @ 5654245

Regression coverage. None added — neither the Remotion package nor bin/tctl has a test harness (no vitest/jest/bats anywhere in the plugin); consolidate-test-suites skip bar: no harness for the owning layer. Fallback is the manual repro above.

Not tested. fade-in/fade-out rendering (out of scope — MB-17 covers the warning only). Warning visibility on remotion still (browser console routes to an ephemeral progress buffer; it surfaces on remotion render, the production path via render-showcase.sh).

Standard validators. tsc --noEmit clean; bash -n clean; shellcheck reports only pre-existing SC2016 (intentional single-quoted tmux template).

Implementation Notes
  • Unrendered-fx warning is invisible on remotion still (rolling 3-entry progress buffer) but prints per worker tab on remotion render. Kept console.warn in the composition rather than duplicating a rendered-effects list in render-showcase.sh, which would drift.
  • Verification used a stub mp4 clip (ffmpeg color source) with the ticket fixture's real effects; the stub was never committed.

factory-ain3sh and others added 2 commits July 23, 2026 00:42
…MB-17)

Schema-valid callout effects were silently dropped by the Showcase
composition. Adds CalloutOverlay (palette-aware text pill at percent
anchors, content-local timing) and a render-time warning for any
remaining schema-valid-but-unrendered effect types (fade-in/fade-out).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…graded-tail recipe (MB-18)

--cwd now sets the child working directory independently on both
backends (defaulting to --repo-root when unset) and is recorded in
launch provenance, replacing the sh -c 'cd ... && exec' shim. Documents
the degraded-tail repro recipe (slow PreToolUse hook in a scratch
project) in the droid-control skill.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@factory-ain3sh factory-ain3sh changed the title feat(droid-control): render callouts in Showcase; decouple tctl --cwd (MB-17, MB-18) feat(droid-control): render callouts in Showcase; decouple tctl --cwd Jul 23, 2026
@factory-ain3sh factory-ain3sh self-assigned this Jul 23, 2026
@factory-ain3sh factory-ain3sh added the enhancement New feature or request label Jul 23, 2026
@factory-ain3sh
factory-ain3sh merged commit 131c72e into master Jul 23, 2026
1 check passed
@factory-ain3sh
factory-ain3sh deleted the ainesh/mb-17-callout-overlay branch July 23, 2026 08:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants