Repository navigation
Rename the skill and agent-facing docs to primitive and selector vocabulary - #3
Merged
Merged
Conversation
The category word on the playlist wire is primitive, not placement. Pages carry pages[].primitives, and each entry is flat: a primitive field naming image, video, iframe, or application, that family's own fields, then rect, layer, content_fit, and optional enter. The nested content object is gone. Image and video primitives require a selector (by is id, ids, all, or tag); iframe and application take none. media list filters with --primitive, and application.event details carry primitive_id. MIME --content-type, feedback --kind, and transition/enter/advance type are unrelated and unchanged. Examples follow screenrig/cli#2. No compat shim and no dual-read of the retired vocabulary. The generated plugins/screenrig/ bundle is intentionally left behind this canonical source: components.lock.json still pins a CLI that predates the rename, so the bundle regenerates when the lock advances. Co-authored-by: Gersham Meharg <gersham@users.noreply.github.com>
Name primitive as the category word, spell out the flat primitive shape and the selector split, and list the fields the rename deliberately leaves alone so a later agent does not re-introduce placement language. Co-authored-by: Gersham Meharg <gersham@users.noreply.github.com>
…undle components.lock.json now selects screenrig/cli PR 2 head a0890d226d3ec92916e314eeca094ec2edc1bf1e, whose CLI speaks the primitive and selector wire the skill teaches, so the bundled executable and the skill agree instead of the skill leading a CLI that only accepts --kind. Regenerating from that exact artifact carries the renamed SKILL.md and README into plugins/screenrig/ and updates the vendored dist: primitives[] with a flat primitive field, selectors on image and video only, media list --primitive, wire_primitives in the compose catalog, and primitive_id on application events. The artifact reproduces byte for byte from source at that commit through scripts/package-release.sh, which is the step CI runs before the bundle check. Co-authored-by: Gersham Meharg <gersham@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Moves the canonical skill source and the agent-facing docs in this repository to the locked primitive/selector vocabulary (Gersham lock 2026-08-30), advances
components.lock.jsonto a CLI that speaks that wire, and regenerates the bundle. Primitive-only: no compat shim, no dual-read, no old wire documented alongside the new one.Canonical inputs:
skills/screenrig/SKILL.md— playlist pages carrypages[].primitives; every entry is flat (id, aprimitivefield namingimage/video/iframe/application, that family's own fields, thenrect,layer,content_fit, optionalenter). The nestedcontentobject is gone from all four worked examples.selector(byisid,ids,all, ortag).iframeandapplicationtake none: an iframe carriessrc/title, an application pinsrelease_id.media list --kind image|video→media list --primitive image|video, in both the media section and the command list.application.eventdetails lead withcodeandprimitive_id.enter" → "objectenter"; "application placement" → "application primitive"; "HTML is not a placement" → "HTML is not a primitive".README.md— the "Four primitives" section names theprimitivefield and the selector split instead of "four wire kinds".AGENTS.md— records primitive as the category word, the flat shape, the selector split, and the fields the rename deliberately leaves alone.Left alone per the lock: MIME
--content-type,feedback --kind, and transition/enter/advancetype.CLI lock advance
components.lock.jsonmoves fromb2370125765cfbb4911f0a78c69ae37e92a34702toa0890d226d3ec92916e314eeca094ec2edc1bf1e, the head of screenrig/cli#2, with artifactscreenrig-cli.tgzat SHA-2568ca6feca8e9c8053fe16e033d68d6c5feef00de995923d59c8d19205f51c5e03.That head has all five
public CLI gateschecks green, and the digest matches the one CLI PR 2 states in its own description. Without this advance the skill would teach--primitivebeside a bundled CLI that only accepts--kind; the two now agree.plugins/screenrig/is regenerated from that exact artifact — never hand-edited, and no local or mutable CLI build was copied in. The regeneration carries the renamedSKILL.mdandREADME.mdinto the bundle and updates the vendoreddistto the primitive wire.Alignment with the in-flight PRs
Examples follow screenrig/cli#2:
primitives[], the flatprimitivefield,--primitiveforwarded toGET /api/v1/mediaas theprimitiveparameter,wire_primitivesin the compose catalog, andprimitive_idinformatEventLine.screenrig/backend#18was not readable from this environment (gh api repos/screenrig/backendreturns 404; the repository is not visible to this run's credentials). No endpoint, field, or shape was invented to fill that gap — everything here is attested by the CLI PR diff, the bundled CLI's own behavior, or the lock text. A reviewer with backend access should confirm the wire matches, particularly the optionalapplication_idownership assertion, which the CLI PR does not exercise.Verification
Artifact reproducibility, which is the step CI performs before the bundle check:
screenrig/cliata0890d226d3ec92916e314eeca094ec2edc1bf1e, rannpm ci,npm run build, thenscripts/package-release.sh.8ca6feca8e9c8053fe16e033d68d6c5feef00de995923d59c8d19205f51c5e03, matching the lock and matching the artifact published by that PR's own CI run.Repository gates, all passing on the final revision:
python3 scripts/build-plugin.py --check --cli-artifact <locked>—generated ScreenRig plugin is current(this is the check that was failing)python3 scripts/validate-plugin.py --cli-artifact <locked> --cli-source <cli@a0890d2>—ScreenRig plugin validation passedpython3 scripts/check-public-repo.py— passedBundled CLI behavior, run through the packaged launcher offline:
screenrig --json version— clean JSON envelope on stdout, empty stderrscreenrig --json compose catalog— reportswire_primitives: ["image","video","iframe","application"]; nowire_kindskey remainsscreenrig --help— listsmedia list [--tag TAG] [--primitive image|video]Stale-vocabulary scan across
skills/,README.md,AGENTS.md,build/,.claude-plugin/,.agents/, and the regenerated bundled skill: no remaining placement/kind/content.type/placement_idas the category word. The only matches arefeedback --kind(deliberately retained) and theAGENTS.mdrule text that names the retired words in order to forbid them.Regeneration diff is 27 modified files with no additions or deletions; outside
plugins/screenrig/cli/the only changes arecomponents.lock.json, the bundledREADME.md, and the bundledSKILL.md, both byte-identical to their canonical sources.Not verified here: the credential-gated rejection of the retired
media list --kindreturnsnot_enrolled(401) before the flag check is reached, so that usage error could not be observed offline; it is covered by the CLI PR's own test suite. Also not run and not claimed: marketplace installation or loading, live API use, native hardware or player playback, backend dispatch, and deployment.Scope
Do not merge. Eng lands this onto
mainas part of the one-cut Transmit, once backend, CLI, and players are in lockstep. Nothing was published, deployed, tagged, or dispatched;screenrig/webwas untouched; no enrollment; no$SRaliases (PATHprepend thenscreenrigthroughout).