Blueprint Sync
Check for stale generated content and offer regeneration or promotion.
by laurigates · MIT
The skill
Check for stale generated content and offer regeneration or promotion. Use when syncing blueprint after PRD changes, or reconciling .claude/rules/ drift.
Check the status of generated content and offer options for modified or stale files.
When to Use This Skill
| Use this skill when... | Use blueprint-promote instead when... |
|---|---|
| You want to detect stale or modified generated rules/skills | You've decided to keep one specific edited rule (single artifact) |
You're reconciling drift between .claude/rules/ and the manifest |
You want to acknowledge modifications and stop sync warnings |
| You want regenerate/promote/keep options for many files at once | Use blueprint-generate-rules instead to (re)generate from PRDs |
You preview status with --dry-run before changing anything |
Use blueprint-sync-ids instead for ID assignment, not content drift |
Flags
| Flag | Description |
|---|---|
--dry-run |
Preview sync status report without interactive prompts or file modifications |
Interaction Mode
Before any closing AskUserQuestion menu, resolve the automation config:
bash "${CLAUDE_SKILL_DIR}/../../scripts/get-automation-config.sh"
When EFFECTIVE_INTERACTION_MODE=quiet and this invocation was
automation-initiated (autopilot, session bookend, drift-nudge follow-up — not
a slash command the user typed), skip closing navigation menus ("what next?" /
"create another?" style): apply the safe default and end with a one-line
receipt instead. Quiet mode never skips confirmation gates that guard writes —
only navigation menus. A direct user invocation always behaves fully
interactively (explicit intent overrides quiet; see ADR-0020).
Steps
Purpose:
- Detect when generated skills/commands have been manually modified
- Detect when source PRDs have changed (making generated content stale)
- Offer appropriate actions: regenerate, promote to custom, or keep as-is
- Read manifest:
cat docs/blueprint/manifest.json- Extract
generated.rulessection - If no generated content, report "Nothing to sync"
- Extract
1a. Detect pre-contract records (issue #2868):
Manifests written by blueprint 3.0.0 key generated.rules without .md and
carry no content_hash, so Step 2 would report every rule missing. Check first:
bash "${CLAUDE_SKILL_DIR}/../../scripts/migrate-generated-rules-keys.sh" --dry-run
STATUS=OK→ continue to Step 2.KEY_MISSING_EXTENSIONorRECORD_MISSING_HASHabove 0 → WARN in the report with eachkey_missing_extension/record_missing_hashissue — never list those rules as missing. With--dry-run, stop at the warning and recommend/blueprint:sync. Otherwise run the script without--dry-run: it re-keys to<key>.mdand backfillscontent_hashfrom the current file withstatus: "modified", never touching the rule files.key_unresolved/key_conflictissues → list them for the user; the script leaves those records untouched.
-
Check each generated rule:
First resolve the rules directory from the manifest — never hardcode
.claude/rules/, or sync looks in the wrong place in every repo that chose an isolatedgenerated_rules_pathin/blueprint:initStep 4a (issues #1043, #1675, #2331):RULES_DIR=$(jq -r '.structure.generated_rules_path // ".claude/rules/"' docs/blueprint/manifest.json) RULES_DIR="${RULES_DIR%/}"generated.rulesis an object map keyed by filename (seeblueprint-plugin/schemas/manifest.schema.json), so iterate it withto_entries[]:jq -r '(.generated.rules // {}) | to_entries[] | [.key, (.value.content_hash // ""), (.value.source_hash // "")] | @tsv' docs/blueprint/manifest.jsonFor each entry,
{key}is the rule's bare filename including the.mdextension, relative to$RULES_DIR. Resolve it as"$RULES_DIR/{key}"— do not append.md, which would look fordevelopment.md.mdand report every registered rule as missing.a. Verify file exists:
test -f "$RULES_DIR/{key}"b. Hash current content (bare hex, matching the
content_hashthe producers write — nosha256:prefix):sha256sum "$RULES_DIR/{key}" | cut -d' ' -f1c. Compare hashes:
- If
content_hashmatches → status:current - If
content_hashdiffers → status:modified
d. Check source freshness (for rules from PRDs):
- Hash current PRD content
- Compare with
source_hashin manifest - If differs → status:
stale - A record with no
source_hash(rules written by/blueprint:init) is never stale — onlymodifiedapplies
- If
-
Display sync report:
Generated Content Sync Status Rules ($RULES_DIR): ✅ architecture-patterns.md: Current ⚠️ testing-strategies.md: Modified locally 🔄 implementation-guides.md: Stale (PRDs changed) ✅ quality-standards.md: Current Summary: - Current: 3 files - Modified: 1 file (user edited) - Stale: 1 file (source changed) -
If
--dry-run: Output the sync report from Step 3 and exit. Skip all remaining steps. -
For modified content, offer options:
question: "{name} has been modified locally. What would you like to do?" options: - label: "Keep modifications" description: "Mark as acknowledged, preserve your changes" - label: "Discard modifications (regenerate)" description: "Overwrite with fresh generation from PRDs" - label: "View diff" description: "See what changed before deciding" - label: "Skip this file" description: "Leave as-is for now"Based on selection:
- "Keep modifications" → Update
content_hashto current, mark as acknowledged - "Regenerate" → Regenerate this rule from PRDs
- "View diff" → Show diff then re-ask
- "Skip" → Continue to next file
- "Keep modifications" → Update
-
For stale content, offer options:
question: "{name} is stale (PRDs have changed). What would you like to do?" options: - label: "Regenerate from PRDs (Recommended)" description: "Update with latest patterns from docs/prds/" - label: "Keep current version" description: "Mark as current without regenerating" - label: "View what changed in PRDs" description: "See PRD changes before deciding" - label: "Skip this file" description: "Leave stale for now"Based on selection:
- "Regenerate" → Regenerate this rule from PRDs
- "Keep" → Update
source_hashto current, mark as current - "View" → Show PRD diff then re-ask
- "Skip" → Continue to next file
-
Update manifest after changes:
- Update
content_hashfor regenerated files - Update
source_hashif PRD changes acknowledged - Update
statusfield appropriately
- Update
-
Final report:
Sync Complete Actions taken: - testing-strategies.md: Modifications acknowledged - implementation-guides.md: Regenerated from PRDs Current state: - 4 generated rules (all current) Manifest updated.
Tips:
- Run
/blueprint:syncperiodically to check for drift - Acknowledge modifications you want to keep
- Regenerating will overwrite local changes
- Stale content still works, but may miss new patterns from PRDs
Use this skill
Connect your agent to the Skill Store MCP server and ask for it by ref: laurigates/blueprint-sync-25049940240.
Details
- Publisher
- laurigates
- Category
- AI & Agents › Skill & prompt authoring
- License
- MIT
- Updated
- 2026-10-19
References
More from laurigates
- Docs Refresh Refresh plugin catalog docs (README, PLUGIN-MAP, d2 diagram) so per-plugin skill/agent counts mat…
- Plugin Authoring Add, modify, or delete a skill or plugin in this repo — frontmatter shape, the seven metadata fil…
- Accessibility Implementation WCAG 2.1/2.2 compliance, ARIA patterns, keyboard nav, focus management, a11y testing.
- Design Tokens Design tokens and CSS custom properties: theme systems, dark mode, component libraries.