Skip to content
Back to skills

Sync Readme

ASecurity

Fix drift between the root README.md and its sources of truth — the marketing hero tagline (apps/marketing/src/i18n.ts), the workspace layout (apps/* + packages/*), and the generated metrics badge block (code health, test coverage, permissions, license, and verified product promises). Use when `pnpm check:readme` fails, when the README parity guard reports a tagline, monorepo-layout, or broken-product-promise mismatch, or after you add / remove / rename a workspace package or change the marke...

  • 34 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 10, 2026
testing

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add rejifald/movar --skill sync-readme --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Sync Readme?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Sync Readme
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rejifald-sync-readme/badge)](https://www.skillsdirectory.com/skills/rejifald-sync-readme)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: sync-readme
description: |
  Fix drift between the root README.md and its sources of truth — the
  marketing hero tagline (apps/marketing/src/i18n.ts), the workspace layout
  (apps/* + packages/*), and the generated metrics badge block (code health,
  test coverage, permissions, license, and verified product promises). Use when
  `pnpm check:readme` fails, when the README parity guard reports a tagline,
  monorepo-layout, or broken-product-promise mismatch, or after you add
  / remove / rename a workspace package or change the marketing tagline and the
  README must follow. Also use when manually auditing README.md for drift from
  the product or marketing site. Do NOT use for before/after screenshot use
  cases (that's add-before-after-case) or for editing marketing copy itself —
  the README mirrors the marketing app, not the other way around — see movar-copy.
---

# Keep README.md in sync with marketing + the workspace

`README.md` is hand-written prose that must not contradict the product. Several
facts are machine-enforced by a guard; the rest is your judgment.

## The guard

`pnpm check:readme` runs in `pnpm validate`, lefthook pre-commit, and CI's
`verify` job. It chains two scripts (`scripts/check-readme-parity.mts` and
`scripts/gen-readme-metrics.mts --check`) and fails the commit/build on any of
four machine-checkable mismatches:

1. **Tagline** — the README's first blockquote must equal the marketing hero
   headline.
2. **Monorepo layout** — the `## Monorepo layout` block must list every
   `apps/*` and `packages/*` member (each dir with a `package.json`), and
   nothing that no longer exists.
3. **Metrics block** — the generated `<!-- METRICS:START … -->` badge row must
   match a fresh render from its committed sources. Unlike 1 & 2, drift here is
   **auto-fixed**: just run `pnpm gen:readme` (then `pnpm metrics` to refresh the
   snapshotted health + coverage numbers).
4. **Product promises** — marketing claims from `i18n.ts` are verified against
   the code (LICENSE, the extension manifest + source, `defaultSettings`). A
   **broken** promise is NOT auto-fixable: `pnpm gen:readme` renders the ✗, but
   `--check` still fails until you restore the invariant — or update the
   promise/marketing copy if the product genuinely changed.

## Sources of truth

| README element       | Canonical source                                                                                                                                      |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Tagline (blockquote) | `strings.en.hero.headlineLine1 + ' ' + headlineLine2` in `apps/marketing/src/i18n.ts`                                                                 |
| Monorepo layout      | `apps/*` + `packages/*` dirs on disk                                                                                                                  |
| Feature claims, copy | `docs/copy.md` (voice + claims) and the marketing `i18n.ts`                                                                                           |
| Default behaviours   | `packages/settings/src/index.ts` (`defaultSettings`)                                                                                                  |
| Tech stack / deps    | the actual `package.json` dependency trees                                                                                                            |
| Metrics badges       | `pnpm gen:readme` ← wxt manifest permissions + LICENSE (live); fallow health + Vitest coverage (snapshot via `pnpm metrics`)                          |
| Product promises     | `collectPromises()` in `gen-readme-metrics.mts` ← marketing claims (`i18n.ts`) checked vs LICENSE, the extension manifest + source, `defaultSettings` |

## Procedure

1. Run `pnpm check:readme` and read exactly what it reports.
2. **Tagline mismatch** → set the README blockquote to the marketing hero
   headline verbatim. If `design-brief.md`'s tagline diverges too, fix it in
   the same pass (it's the brand spec; not machine-checked).
3. **Layout mismatch** → add every missing `apps/<x>` / `packages/<x>`, drop
   any that no longer exist, and keep the comment column aligned.
4. Re-run `pnpm check:readme` until green.

## Not machine-checked — eyeball these too

The guard can't catch prose drift. While you're in the README, confirm:

- **Feature list matches reality.** Off-by-default capabilities (e.g.
  `contentModification` in `packages/settings`) must say "off by default".
  Don't list features that were removed (the old "usefulness dashboard" was).
- **Tech stack lists only real deps.** If a library isn't in any
  `package.json` / lockfile (Tremor was a stale entry), drop it.
- **Browser targets match the marketing download buttons** (Chrome, Firefox,
  Edge, Opera, Brave, Safari).
- **Claims match `docs/copy.md`** — it's the copy authority.

## Verify

`pnpm check:readme` is green, and `pnpm exec prettier --check README.md` passes.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.