Replace granular change-level specs (001–036) with living feature specs: - 001-combatant-management (CRUD, persistence, clear, confirm buttons) - 002-turn-tracking (rounds, turn order, advance/retreat, top bar) - 003-combatant-state (HP, AC, conditions, concentration, initiative) - 004-bestiary (search, stat blocks, source management, panel UX) Workflow changes: - Add /integrate-issue command (replaces /issue-to-spec) for routing issues to existing specs or handing off to /speckit.specify - Update /sync-issue to list specs instead of requiring feature branch - Update /write-issue to reference /integrate-issue - Add RPI skills (research, plan, implement) to .claude/skills/ - Create docs/agents/ for RPI artifacts (research reports, plans) - Remove update-agent-context.sh call from /speckit.plan - Update CLAUDE.md with proportional scope-based workflow table - Bump constitution to 3.0.0 (specs describe features, not changes) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
40 lines
1.1 KiB
Python
Executable File
40 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Get git metadata for research documents."""
|
|
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
from datetime import datetime, timezone
|
|
from pathlib import Path
|
|
|
|
|
|
def run(cmd: list[str]) -> str:
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
return result.stdout.strip() if result.returncode == 0 else ""
|
|
|
|
|
|
def get_repo_name() -> str:
|
|
remote = run(["git", "remote", "get-url", "origin"])
|
|
if remote:
|
|
# Handle both HTTPS and SSH URLs
|
|
name = remote.rstrip("/").rsplit("/", 1)[-1]
|
|
return name.removesuffix(".git")
|
|
# Fall back to directory name
|
|
root = run(["git", "rev-parse", "--show-toplevel"])
|
|
return Path(root).name if root else Path.cwd().name
|
|
|
|
|
|
def main() -> None:
|
|
metadata = {
|
|
"date": datetime.now(timezone.utc).isoformat(),
|
|
"commit": run(["git", "rev-parse", "HEAD"]),
|
|
"branch": run(["git", "branch", "--show-current"]),
|
|
"repository": get_repo_name(),
|
|
}
|
|
json.dump(metadata, sys.stdout, indent=2)
|
|
print()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|