CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/speaker-toolkit

Seven-skill presentation system: ingest talks into a rhetoric vault, run interactive clarification, generate a speaker profile, create presentations that match your documented patterns, produce the deck illustrations + thumbnail visual layer, publish talk pages to a Jekyll shownotes site, and verify a recorded screencast against its storyboard. Includes a 113-entry Presentation Patterns taxonomy (83 observable: 64 patterns + 19 antipatterns; 30 unobservable: 21 patterns + 9 antipatterns) for scoring, brainstorming, and go-live preparation.

74

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

sequence-contract.mdskills/screencast-recorder/references/

Sequence contract

Input and output for scripts/verify-storyboard.py. The verifier reads structured state only; it never opens media.

Why the input is structured

The approved storyboard (e.g. SCREEN-PLAN.md in a demo repo) is prose, on purpose — a human approves visual intent, and conditions like "leave room for the laugh" are judgments, not predicates. The recording rig emits the machine-checkable half as the JSON below. Parsing prose pass-conditions is out of scope (rules/script-delegation.md The Regex Trap).

Input

{
  "delivery":  { "width": 1920, "height": 1080, "min_label_px": 14, "scale": 1.0 },
  "narration": { "source": "actual_word_timestamps",
                 "words": [ { "word": " Hi,", "start": 0.0, "end": 0.62 } ] },
  "clips":     [ { "id": "a0-hook", "entry": {manifest}, "exit": {manifest},
                   "events": [ {event} ] } ],
  "rows":      [ { "id": "a0-hook-r1", "clip": "a0-hook", "phrase": "...",
                   "proof_frame_t": 3.1, "require": {…} } ],
  "seam_tolerances": { "scroll": 2, "transform": 2 }
}

narration.source must be actual_word_timestamps. Any other value fails the time axis: WPM predicts whether a script is deliverable, never that a visual and a phrase coincide.

delivery.scale converts a recorded label height to its delivered height, and is required whenever min_label_px is set — defaulting it would assume the conversion. A label readable in the browser and unreadable in the encode is the case min_label_px exists to catch.

Manifest

route, data_fingerprint, viewport {width,height}, zoom, scroll {x,y}, transform {pan_x,pan_y,zoom}, tabs (ordered), active_tab, cursor [x,y], labels [{text, height_px}].

Events

{"type":"pan","axis":"x","delta":-640,"t":2.0} · {"type":"click","t":3.1,"pointer":[x,y],"target_rect":[x,y,w,h]}

Row requirements

A phrase spoken more than once is matched at every occurrence; a proof frame inside any of them passes.

Every declared requirement is type-checked: route and data_fingerprint are strings, visible_labels a list of strings, click_on_target a boolean. A rect — content_bounds or an event's target_rect — must describe a region with positive width and height; four numbers enclosing no area contain no point.

route · data_fingerprint · visible_labels · content_bounds [x,y,w,h] · margin_px · pan {axis, min_abs_delta} · click_on_target

A declared pan must carry a positive min_abs_delta. A threshold of zero, or an absent one, is satisfied by a take that never panned.

Output

{ "ok": false,
  "axes": {"semantic":"fail","geometry":"pass","motion":"pass","time":"pass",
           "pixels":"unverified"},
  "unverified_axes": {"pixels": "requires encoded frames; not checked by the manifest lane"},
  "finding_count": 1,
  "findings": [ {"code":"stale_data","axis":"semantic","subject":"a0-hook-r1",
                 "message":"...", "expected":"…","actual":"…"} ],
  "counts": {"rows":1,"clips":2,"seams":1} }

An axis is unverified for either of two reasons, and neither is a pass:

  • pixels, always — this lane cannot examine encoded frames.
  • Any axis no row exercised — a sequence that asserts nothing about geometry has not passed geometry.

unverified_axes says which case applies. An axis reported as passing without being examined is a false assurance, which is the failure the verification doctrine exists to prevent — and which the first draft of this script committed by passing an empty sequence on every axis.

Evidence is required before judgement

A requirement whose evidence the take does not carry is refused, never passed: require.content_bounds with no entry.viewport, visible_labels with no entry.labels, click_on_target with a click lacking pointer/target_rect, or proof_frame_t with no narration.words. Each yields evidence_missing naming the requirement and the absent field, on the axis that requirement is judged on — a missing viewport fails geometry, not semantic, so an axis can never read pass while its own evidence is absent.

A seam field absent from either manifest is refused for the same reason: two absences compare equal, and equality between nothing and nothing is not agreement.

A document that does not satisfy the contract exits 2 with the violation named, rather than failing later on a missing key. Validation covers structure (clips/rows as lists of objects with unique, non-empty string ids), completeness (scroll carries x/y, transform carries pan_x/pan_y/zoom, a proof_frame_t has a phrase), and finiteness of every number. Dimensions and thresholds must also be positive: min_label_px <= 0 makes readability vacuously true, a zero scale erases the measurement it converts, and a content_bounds with non-positive width or height describes no region. An explicit null is refused wherever a value is declared — it is not the same as an absent key, and accepting it let a requirement skip both its validation and the check it gates.

Finiteness is not pedantry: JSON admits NaN, and every comparison against NaN is false, so a NaN measurement or threshold satisfies whatever it is tested against. A bool is an int in Python and is rejected as a coordinate. A Python int is unbounded, so a value with no float representation (10**400) counts as non-finite rather than raising.

Exit 0 when every checked axis passes, 1 on any finding, 2 on usage error.

Finding codes

codeaxismeans
route_mismatchsemanticclip is not on the required route
stale_datasemanticroute correct, rendered data is the wrong revision
required_label_absentsemantica label the phrase names is not in the frame
seam_state_mismatchsemantica seam does not carry a field across unchanged
seam_tab_mismatchsemantictab set or active tab changed across a seam
content_clippedgeometryrequired content not fully inside the viewport at margin
label_below_readable_sizegeometrya required label is under min_label_px at delivery scale
pan_not_performedmotiona required deliberate pan is absent
click_absentmotiona required visible click is absent
cursor_off_targetmotionthe pointer was not on the target when the click fired
timing_not_from_actual_wordstimesynchronisation asserted without transcribed timestamps
phrase_not_spokentimethe row's phrase is absent from the narration
proof_outside_phrasetimethe proof frame falls outside every spoken occurrence
evidence_missingvariesa requirement cannot be judged; the take lacks its evidence
sequence_emptysemanticthe sequence declares no rows, so it verifies nothing

Coverage against the #369 negative tests

Seven of ten are checked here. Three need encoded frames and are not:

#negative testhere
1correct route but wrong/stale datastale_data
2workflow present but partly clippedcontent_clipped
3missing horizontal panpan_not_performed
4labels below readable sizelabel_below_readable_size (from recorded measurement; pixels must confirm)
5cursor off the clicked targetcursor_off_target
6click not visible in encoded framespixel lane — not checked
7scroll/pan/zoom mismatch across a seamseam_state_mismatch
8different tab set or active tab across a seamseam_tab_mismatch
9menu bar / system clock in croppixel lane — not checked
10timing from predicted WPMtiming_not_from_actual_words

skills

README.md

tile.json