Skip to content

Rename the skill and agent-facing docs to primitive and selector vocabulary - #3

Merged
gersham merged 3 commits into
mainfrom
cursor/rename-skill-to-primitive-vocabulary-d773
Aug 30, 2026
Merged

gersham merged 3 commits into
mainfrom
cursor/rename-skill-to-primitive-vocabulary-d773

Conversation

@gersham

@gersham gersham commented Aug 30, 2026 •

Copy link
Copy Markdown
Contributor

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.json to 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 carry pages[].primitives; every entry is flat (id, a primitive field naming image/video/iframe/application, that family's own fields, then rect, layer, content_fit, optional enter). The nested content object is gone from all four worked examples.
  • Image and video primitives require a selector (by is id, ids, all, or tag). iframe and application take none: an iframe carries src/title, an application pins release_id.
  • media list --kind image|video → media list --primitive image|video, in both the media section and the command list.
  • application.event details lead with code and primitive_id.
  • "placement enter" → "object enter"; "application placement" → "application primitive"; "HTML is not a placement" → "HTML is not a primitive".
  • README.md — the "Four primitives" section names the primitive field 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/advance type.

CLI lock advance

components.lock.json moves from b2370125765cfbb4911f0a78c69ae37e92a34702 to a0890d226d3ec92916e314eeca094ec2edc1bf1e, the head of screenrig/cli#2, with artifact screenrig-cli.tgz at SHA-256 8ca6feca8e9c8053fe16e033d68d6c5feef00de995923d59c8d19205f51c5e03.

That head has all five public CLI gates checks green, and the digest matches the one CLI PR 2 states in its own description. Without this advance the skill would teach --primitive beside 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 renamed SKILL.md and README.md into the bundle and updates the vendored dist to the primitive wire.

Alignment with the in-flight PRs

Examples follow screenrig/cli#2: primitives[], the flat primitive field, --primitive forwarded to GET /api/v1/media as the primitive parameter, wire_primitives in the compose catalog, and primitive_id in formatEventLine.

screenrig/backend#18 was not readable from this environment (gh api repos/screenrig/backend returns 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 optional application_id ownership assertion, which the CLI PR does not exercise.

Verification

Artifact reproducibility, which is the step CI performs before the bundle check:

  • Fetched screenrig/cli at a0890d226d3ec92916e314eeca094ec2edc1bf1e, ran npm ci, npm run build, then scripts/package-release.sh.
  • The result reproduces byte for byte at SHA-256 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 passed
  • python3 scripts/check-public-repo.py — passed

Bundled CLI behavior, run through the packaged launcher offline:

  • screenrig --json version — clean JSON envelope on stdout, empty stderr
  • screenrig --json compose catalog — reports wire_primitives: ["image","video","iframe","application"]; no wire_kinds key remains
  • screenrig --help — lists media 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_id as the category word. The only matches are feedback --kind (deliberately retained) and the AGENTS.md rule 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 are components.lock.json, the bundled README.md, and the bundled SKILL.md, both byte-identical to their canonical sources.

Not verified here: the credential-gated rejection of the retired media list --kind returns not_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 main as part of the one-cut Transmit, once backend, CLI, and players are in lockstep. Nothing was published, deployed, tagged, or dispatched; screenrig/web was untouched; no enrollment; no $SR aliases (PATH prepend then screenrig throughout).

Open in Web Open in Cursor 

cursoragent and others added 3 commits August 30, 2026 19:34
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>
@gersham
gersham marked this pull request as ready for review August 30, 2026 21:25
@gersham
gersham merged commit d7aa4c2 into main Aug 30, 2026
2 checks passed
@gersham
gersham deleted the cursor/rename-skill-to-primitive-vocabulary-d773 branch October 1, 2026 03:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants