원클릭으로
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.