بنقرة واحدة
rename
Rename a feature across specs, proofs, markers, and references
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Rename a feature across specs, proofs, markers, and references
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Evaluate proof quality — STRONG/WEAK/HOLLOW assessments
Reverse-engineer 3-section specs from existing code
Scaffold or edit feature specs in 3-section format
Initialize a project for Purlin
Inject spec rules into context, then implement
Run all tests, issue verification receipts
| name | rename |
| description | Rename a feature across specs, proofs, markers, and references |
Rename a feature across all Purlin artifacts in one atomic operation.
purlin:rename <old-name> <new-name> Rename a feature
specs/**/<old-name>.md → specs/**/<new-name>.md<old-name>.proofs-*.json → <new-name>.proofs-*.json (same directory)<old-name>.receipt.json → <new-name>.receipt.json (if exists)@pytest.mark.proof("old-name", → @pytest.mark.proof("new-name",[proof:old-name: → [proof:new-name:purlin_proof "old-name" → purlin_proof "new-name"# Feature: old_name → # Feature: new_name> Requires: references in other specs: grep all specs/**/*.md for > Requires: lines containing the old name, replace with new name"feature" field in each entry from old name to new nameSearch specs/**/<old-name>.md.
No spec found for '<old-name>'. Verify the spec exists in specs/.> Source: (external): Stop with: Cannot rename anchor '<old-name>'. Anchors with external sources are read-only and synced from that source. Rename at the source and re-sync.AskUserQuestion to ask the user which one.Scan for all artifacts that reference the old name and present a summary:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚡ RENAME: <old-name> → <new-name>
Files to rename:
specs/auth/login.md → specs/auth/authentication.md
specs/auth/login.proofs-unit.json → specs/auth/authentication.proofs-unit.json
Proof markers to update:
tests/test_login.py: 5 markers
tests/test_auth_integration.py: 2 markers
Specs referencing this feature (> Requires:):
specs/auth/session.md
specs/auth/password_reset.md
[y] Proceed [n] Cancel
Waiting for your response...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Use AskUserQuestion to pause and wait. Do NOT auto-proceed.
Perform all changes in this order:
a. Rename files — use git mv for spec, proof, and receipt files:
git mv specs/auth/login.md specs/auth/authentication.md
git mv specs/auth/login.proofs-unit.json specs/auth/authentication.proofs-unit.json
git mv specs/auth/login.receipt.json specs/auth/authentication.receipt.json # if exists
b. Update proof markers in test files — search and replace marker strings only:
@pytest.mark.proof("old-name", → @pytest.mark.proof("new-name",[proof:old-name: → [proof:new-name:purlin_proof "old-name" → purlin_proof "new-name"c. Update feature name inside the spec file:
# Feature: old_name → # Feature: new_named. Update > Requires: in other specs:
> Requires: lines across all specs/**/*.mdlogin must not corrupt login_oauth → newname_oauth). Match on the exact comma-separated entry.e. Rename screenshot files (if the spec has > Visual-Reference:):
specs/<category>/screenshots/<old-name>.png → specs/<category>/screenshots/<new-name>.png (using git mv)> Visual-Reference: path inside the spec filef. Update "feature" field in proof JSON entries:
"feature": "old-name" with "feature": "new-name"g. Run sync_status to verify everything still resolves.
h. Commit per references/commit_conventions.md: rename(<old-name>): rename to <new-name>
If sync_status shows issues after rename, warn the user and show the directives. Do not silently ignore resolution failures.
test_login_valid() stays as-is; only proof("login", changes.> Requires:).specs/**/login.md matches multiple files, list them and ask the user which one.> Source: (external): refuse to rename — anchors with external sources are read-only and synced from that source. The rename must happen at the external source.> Requires: partial matches: use word-boundary matching when replacing in > Requires: lines. The old name must match as a complete comma-separated entry, not as a substring of another name.