# Shipping Across Surfaces

Land a change everywhere the same fact is stated, enumerating the full surface...

- Repository: https://github.com/kajisho5/ffmpeg-skill (4279 stars)
- Category: Design
- License: MIT
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add kajisho5/ffmpeg-skill --skill shipping-across-surfaces -g -a claude-code -y`
Codex: `npx skills add kajisho5/ffmpeg-skill --skill shipping-across-surfaces -g -a codex -y`
Cursor: `npx skills add kajisho5/ffmpeg-skill --skill shipping-across-surfaces -g -a cursor -y`
Gemini CLI: `npx skills add kajisho5/ffmpeg-skill --skill shipping-across-surfaces -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add kajisho5/ffmpeg-skill`

## Description

Land a change everywhere the same fact is stated, enumerating the full surface inventory (landing copy, docs, machine-readable summaries, changelog badges repeated across every page, sitemap, README, descriptions embedded in code, and untyped frontend consumers of typed responses), generating a surface instead of restating it, drift tests where you cannot generate, never hand-maintaining a copy of a surface another codebase owns, shipping a paired PR when you change a format a different codebase decodes, and keeping overloaded product words apart. Use when adding or renaming a user-facing feature, editing product/marketing copy or docs, renaming a serialized response field, changing a serialization or share-link format, wiring one repo's output into another's checks, or reviewing a PR that touched only one place a fact appears.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Shipping Across Surfaces

Most product facts are stated more than once. The feature exists in code, is
described on a landing page, summarized for agents, listed in a changelog,
repeated in a nav badge, restated in a README, and embedded again in the
description string of every tool or endpoint that exposes it. Each copy drifts
independently, and none of them are covered by tests.

The failure is never loud. Nothing goes red; the product simply describes itself
inaccurately in the four places you didn't edit, and the one place a reader
happened to look is the stale one.

## Enumerate the surface inventory once, in the repo

"I'll remember the other places" does not survive the second feature. Write the
list down, in `CONTRIBUTING.md`, a PR template, or the skill/guide the project
already keeps, and treat it as the definition of done for a user-facing change.
A realistic inventory for a product with a public site:

- Landing page: hero, section ledes, the feature cards, the free/paid list
- `<meta>` / OG / Twitter tags, and the structured data (`SoftwareApplication`
  description, `FAQPage` entries), search engines read the copy you forgot
- Docs page, and any machine-readable summary for agents (`llms.txt`)
- Changelog entry **and** the version badge repeated in the nav of every page
- Sitemap, and the footer product column present on every page
- README, comparison pages, onboarding/skill files
- **The descriptions embedded in code**, every tool, command, or endpoint
  description, not just the primary one

That last bullet is the one that gets missed. A rename lands in the tool it was
named after and stays wrong in the three sibling tools that mention it in
passing. Grep for the old string across the whole tree, not just the docs
directory, before calling the change done.

All of these ship in the **same PR**. A follow-up "update docs" commit means the
interval between them shipped a product that contradicted itself.

The rest: https://github.com/kajisho5/ffmpeg-skill/blob/HEAD/.claude/skills/cross-surface-changes/SKILL.md
