Claude-skills tc
Track technical changes with structured records, a state machine, and session handoff. Usage: /tc <init|create|update|status|resume|close|export|dashboard> [args]
install
source · Clone the upstream repo
git clone https://github.com/alirezarezvani/claude-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/alirezarezvani/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.gemini/skills/tc" ~/.claude/skills/alirezarezvani-claude-skills-tc && rm -rf "$T"
manifest:
.gemini/skills/tc/SKILL.mdsource content
/tc — Technical Change Tracker
Dispatch a TC (Technical Change) command. Arguments:
$ARGUMENTS.
If
$ARGUMENTS is empty, print this menu and stop:
/tc init Initialize TC tracking in this project /tc create <name> Create a new TC record /tc update <tc-id> [...] Update fields, status, files, handoff /tc status [tc-id] Show one TC or the registry summary /tc resume <tc-id> Resume a TC from a previous session /tc close <tc-id> Transition a TC to deployed /tc export Re-render derived artifacts /tc dashboard Re-render the registry summary
Otherwise, parse
$ARGUMENTS as <subcommand> <rest> and dispatch to the matching protocol below. All scripts live at engineering/tc-tracker/scripts/.
Subcommands
init
init- Run:
python3 engineering/tc-tracker/scripts/tc_init.py --root . --json - If status is
, report current statistics and stop.already_initialized - Otherwise report what was created and suggest
as the next step./tc create <name>
create <name>
create <name>- Parse
as a kebab-case slug. If missing, ask the user for one.<name> - Prompt the user (one question at a time) for:
- Title (5-120 chars)
- Scope:
feature | bugfix | refactor | infrastructure | documentation | hotfix | enhancement - Priority:
(defaultcritical | high | medium | low
)medium - Summary (10+ chars)
- Motivation
- Run:
python3 engineering/tc-tracker/scripts/tc_create.py --root . \ --name "<slug>" --title "<title>" --scope <scope> --priority <priority> \ --summary "<summary>" --motivation "<motivation>" --json - Report the new TC ID and the path to the record.
update <tc-id> [intent]
update <tc-id> [intent]- If
is missing, list active TCs (status<tc-id>
orin_progress
) fromblocked
and ask which one.tc_status.py --all - Determine the user's intent from natural language:
- Status change →
with--set-status <state>--reason "<why>" - Add files → one or more
--add-file path[:action] - Add a test →
--add-test "<title>" --test-procedure "<step>" --test-expected "<result>" - Update handoff → any combination of
,--handoff-progress
,--handoff-next
,--handoff-blocker--handoff-context - Add a note →
--note "<text>" - Add a tag →
--tag <tag>
- Status change →
- Run:
python3 engineering/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> [flags] --json - If exit code is non-zero, surface the error verbatim. The state machine and validator will reject invalid moves — do not retry blindly.
status [tc-id]
status [tc-id]- If
is provided:<tc-id>python3 engineering/tc-tracker/scripts/tc_status.py --root . --tc-id <tc-id> - Otherwise:
python3 engineering/tc-tracker/scripts/tc_status.py --root . --all
resume <tc-id>
resume <tc-id>- Run:
python3 engineering/tc-tracker/scripts/tc_status.py --root . --tc-id <tc-id> --json - Display the handoff block prominently:
,progress_summary
(numbered),next_steps
,blockers
.key_context - Ask: "Resume <tc-id> and pick up at next step 1? (y/n)"
- If yes, run an update to record the resumption:
python3 engineering/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \ --note "Session resumed" --reason "session handoff" - Begin executing the first item in
. Do NOT re-derive context — trust the handoff.next_steps
close <tc-id>
close <tc-id>- Read the record via
.tc_status.py --tc-id <tc-id> --json - Verify the current status is
. If not, refuse and tell the user which transitions are still required.tested - Check
: warn if any aretest_cases
,pending
, orfail
.blocked - Ask the user:
- "Who is approving? (your name, or 'self')"
- "Approval notes (optional):"
- "Test coverage status: none / partial / full"
- Run:
Then directly edit thepython3 engineering/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \ --set-status deployed --reason "Approved by <approver>" --note "Approval: <approver> — <notes>"
block via a follow-up update if your script version supports it; otherwise instruct the user to record approval inapproval
.notes - Report: "TC-NNN closed and deployed."
export
exportThere is no automatic HTML export in this skill. Re-validate everything instead:
- Read the registry.
- For each record, run:
python3 engineering/tc-tracker/scripts/tc_validator.py --record <path> --json - Run:
python3 engineering/tc-tracker/scripts/tc_validator.py --registry docs/TC/tc_registry.json --json - Report: total records validated, any errors, paths to anything invalid.
dashboard
dashboardRun the all-records summary:
python3 engineering/tc-tracker/scripts/tc_status.py --root . --all
Iron Rules
- Never edit
by hand. Always usetc_record.json
so revision history is appended and validation runs.tc_update.py - Never skip the state machine. Walk forward through states even if it feels redundant.
- Never delete a TC. History is append-only — add a final revision and tag it
.[CANCELLED] - Background bookkeeping. When mid-task, spawn a background subagent to update the TC. Do not pause coding to do paperwork.
- Validate before reporting success. If a script exits non-zero, surface the error and stop.
Related Skills
— Full SKILL.md with schema reference, lifecycle diagrams, and the handoff format.engineering/tc-tracker
— Pair with TC tracker: TCs for the per-change audit trail, changelog for user-facing release notes.engineering/changelog-generator
— For tracking long-lived debt rather than discrete code changes.engineering/tech-debt-tracker