Files
Pier_v1/.hmcmkit/tools/scaffold.py
T
ahnyongjooandClaude Sonnet 5.5 964a841de1 chore(rebar): Pier_T_rebar 작업 폴더 초기 구성 및 외부 의존 파일 통합
- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환
- Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용
- pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관)
- worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md)
- D:\Rhino-MCP 경로 참조를 새 위치로 치환

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:20:18 +09:00

97 lines
3.2 KiB
Python

import os
import sys
import shutil
import json
import datetime
# Configuration
HMCMKIT_ROOT = ".hmcmkit"
CONFIG_PATH = os.path.join(HMCMKIT_ROOT, "config.json")
TEMPLATE_DIR = os.path.join(HMCMKIT_ROOT, "knowledge", "templates")
def load_config():
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
return json.load(f)
def get_target_path(config, phase, feature_name):
"""
Resolves the target path based on config.json 'pdca' section.
"""
pdca_config = config.get('pdca', {})
path_key = f"{phase.lower()}DocPaths" # e.g. planDocPaths
paths = pdca_config.get(path_key, [])
if not paths:
# Fallback defaults
defaults = {
"plan": f"docs/01-plan/{feature_name}.plan.md",
"design": f"docs/02-design/{feature_name}.design.md",
"gap-analysis": f"docs/03-check/{feature_name}.gap.md",
"report": f"docs/04-act/{feature_name}.report.md"
}
return defaults.get(phase.lower(), f"docs/{phase}/{feature_name}.md")
# Use the first configured path
first_path = paths[0]
return first_path.replace("{feature}", feature_name).replace("{type}", phase)
def scaffold(phase, feature_name):
config = load_config()
# 1. Identify Template
template_types = config.get('templates', {}).get('types', {})
template_file = template_types.get(phase.lower())
if not template_file:
print(f"❌ Error: No template defined for phase '{phase}'")
return False
template_path = os.path.join(TEMPLATE_DIR, template_file)
if not os.path.exists(template_path):
# Try looking for Level Variants (e.g. plan-starter.template.md)
# For now, just error
print(f"❌ Error: Template file not found at {template_path}")
return False
# 2. Identify Target Path
target_path = get_target_path(config, phase, feature_name)
# 3. Create Directory
os.makedirs(os.path.dirname(target_path), exist_ok=True)
if os.path.exists(target_path):
print(f"⚠️ Target file already exists: {target_path}")
# v1.0.1: Auto Snapshot
try:
from snapshot import create_snapshot
create_snapshot(target_path)
print(f" (Backup created before potential overwrite)")
except ImportError:
pass
return False
# 4. Read & process Template
with open(template_path, 'r', encoding='utf-8') as f:
content = f.read()
# Simple Variable Replacement
content = content.replace("{{feature}}", feature_name)
content = content.replace("{{date}}", datetime.datetime.now().strftime("%Y-%m-%d"))
# 5. Write File
with open(target_path, 'w', encoding='utf-8') as f:
f.write(content)
print(f"✅ Created {phase.upper()} document: {target_path}")
return True
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: python scaffold.py <phase> <feature_name>")
print("Phases: plan, design, gap-analysis, report")
sys.exit(1)
phase = sys.argv[1]
feature = sys.argv[2]
scaffold(phase, feature)