/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
- Run:
python3 engineering/skills/tc-tracker/scripts/tc_init.py --root . --json
- If status is
already_initialized, report current statistics and stop.
- Otherwise report what was created and suggest
/tc create <name> as the next step.
create <name>
- Parse
<name> as a kebab-case slug. If missing, ask the user for one.
- Prompt the user (one question at a time) for:
- Title (5-120 chars)
- Scope:
feature | bugfix | refactor | infrastructure | documentation | hotfix | enhancement
- Priority:
critical | high | medium | low (default medium)
- Summary (10+ chars)
- Motivation
- Run:
python3 engineering/skills/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]
- If
<tc-id> is missing, list active TCs (status in_progress or blocked) from tc_status.py --all and ask which one.
- Determine the user's intent from natural language:
- Status change →
--set-status <state> with --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>
- Run:
python3 engineering/skills/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]
resume <tc-id>
- Run:
python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --tc-id <tc-id> --json
- Display the handoff block prominently:
progress_summary, next_steps (numbered), blockers, key_context.
- Ask: "Resume and pick up at next step 1? (y/n)"
- If yes, run an update to record the resumption:
python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \
--note "Session resumed" --reason "session handoff"
- Begin executing the first item in
next_steps. Do NOT re-derive context — trust the handoff.
close <tc-id>
- Read the record via
tc_status.py --tc-id <tc-id> --json.
- Verify the current status is
tested. If not, refuse and tell the user which transitions are still required.
- Check
test_cases: warn if any are pending, fail, or blocked.
- Ask the user:
- "Who is approving? (your name, or 'self')"
- "Approval notes (optional):"
- "Test coverage status: none / partial / full"
- Run:
python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \
--set-status deployed --reason "Approved by <approver>" --note "Approval: <approver> — <notes>"
Then directly edit the approval block via a follow-up update if your script version supports it; otherwise instruct the user to record approval in notes.
- Report: "TC-NNN closed and deployed."
export
There is no automatic HTML export in this skill. Re-validate everything instead:
- Read the registry.
- For each record, run:
python3 engineering/skills/tc-tracker/scripts/tc_validator.py --record <path> --json
- Run:
python3 engineering/skills/tc-tracker/scripts/tc_validator.py --registry docs/TC/tc_registry.json --json
- Report: total records validated, any errors, paths to anything invalid.
dashboard
Run the all-records summary:
python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --all
Iron Rules
- Never edit
tc_record.json by hand. Always use tc_update.py so revision history is appended and validation runs.
- 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
engineering/tc-tracker — Full SKILL.md with schema reference, lifecycle diagrams, and the handoff format.
engineering/changelog-generator — Pair with TC tracker: TCs for the per-change audit trail, changelog for user-facing release notes.
engineering/tech-debt-tracker — For tracking long-lived debt rather than discrete code changes.
1---2name: tc3description: Track technical changes with structured records, a state machine, and session handoff. Usage: /tc <init|create|update|status|resume|close|export|dashboard> [args]4license: MIT5---67# /tc — Technical Change Tracker89Dispatch a TC (Technical Change) command. Arguments: `$ARGUMENTS`.1011If `$ARGUMENTS` is empty, print this menu and stop:1213```14/tc init Initialize TC tracking in this project15/tc create <name> Create a new TC record16/tc update <tc-id> [...] Update fields, status, files, handoff17/tc status [tc-id] Show one TC or the registry summary18/tc resume <tc-id> Resume a TC from a previous session19/tc close <tc-id> Transition a TC to deployed20/tc export Re-render derived artifacts21/tc dashboard Re-render the registry summary22```2324Otherwise, parse `$ARGUMENTS` as `<subcommand> <rest>` and dispatch to the matching protocol below. All scripts live at `engineering/tc-tracker/scripts/`.2526## Subcommands2728### `init`29301. Run:31 ```bash32 python3 engineering/skills/tc-tracker/scripts/tc_init.py --root . --json33 ```342. If status is `already_initialized`, report current statistics and stop.353. Otherwise report what was created and suggest `/tc create <name>` as the next step.3637### `create <name>`38391. Parse `<name>` as a kebab-case slug. If missing, ask the user for one.402. Prompt the user (one question at a time) for:41 - Title (5-120 chars)42 - Scope: `feature | bugfix | refactor | infrastructure | documentation | hotfix | enhancement`43 - Priority: `critical | high | medium | low` (default `medium`)44 - Summary (10+ chars)45 - Motivation463. Run:47 ```bash48 python3 engineering/skills/tc-tracker/scripts/tc_create.py --root . \49 --name "<slug>" --title "<title>" --scope <scope> --priority <priority> \50 --summary "<summary>" --motivation "<motivation>" --json51 ```524. Report the new TC ID and the path to the record.5354### `update <tc-id> [intent]`55561. If `<tc-id>` is missing, list active TCs (status `in_progress` or `blocked`) from `tc_status.py --all` and ask which one.572. Determine the user's intent from natural language:58 - **Status change** → `--set-status <state>` with `--reason "<why>"`59 - **Add files** → one or more `--add-file path[:action]`60 - **Add a test** → `--add-test "<title>" --test-procedure "<step>" --test-expected "<result>"`61 - **Update handoff** → any combination of `--handoff-progress`, `--handoff-next`, `--handoff-blocker`, `--handoff-context`62 - **Add a note** → `--note "<text>"`63 - **Add a tag** → `--tag <tag>`643. Run:65 ```bash66 python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> [flags] --json67 ```684. If exit code is non-zero, surface the error verbatim. The state machine and validator will reject invalid moves — do not retry blindly.6970### `status [tc-id]`7172- If `<tc-id>` is provided:73 ```bash74 python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --tc-id <tc-id>75 ```76- Otherwise:77 ```bash78 python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --all79 ```8081### `resume <tc-id>`82831. Run:84 ```bash85 python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --tc-id <tc-id> --json86 ```872. Display the handoff block prominently: `progress_summary`, `next_steps` (numbered), `blockers`, `key_context`.883. Ask: "Resume <tc-id> and pick up at next step 1? (y/n)"894. If yes, run an update to record the resumption:90 ```bash91 python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \92 --note "Session resumed" --reason "session handoff"93 ```945. Begin executing the first item in `next_steps`. Do NOT re-derive context — trust the handoff.9596### `close <tc-id>`97981. Read the record via `tc_status.py --tc-id <tc-id> --json`.992. Verify the current status is `tested`. If not, refuse and tell the user which transitions are still required.1003. Check `test_cases`: warn if any are `pending`, `fail`, or `blocked`.1014. Ask the user:102 - "Who is approving? (your name, or 'self')"103 - "Approval notes (optional):"104 - "Test coverage status: none / partial / full"1055. Run:106 ```bash107 python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \108 --set-status deployed --reason "Approved by <approver>" --note "Approval: <approver> — <notes>"109 ```110 Then directly edit the `approval` block via a follow-up update if your script version supports it; otherwise instruct the user to record approval in `notes`.1116. Report: "TC-NNN closed and deployed."112113### `export`114115There is no automatic HTML export in this skill. Re-validate everything instead:1161171. Read the registry.1182. For each record, run:119 ```bash120 python3 engineering/skills/tc-tracker/scripts/tc_validator.py --record <path> --json121 ```1223. Run:123 ```bash124 python3 engineering/skills/tc-tracker/scripts/tc_validator.py --registry docs/TC/tc_registry.json --json125 ```1264. Report: total records validated, any errors, paths to anything invalid.127128### `dashboard`129130Run the all-records summary:131```bash132python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --all133```134135## Iron Rules1361371. **Never edit `tc_record.json` by hand.** Always use `tc_update.py` so revision history is appended and validation runs.1382. **Never skip the state machine.** Walk forward through states even if it feels redundant.1393. **Never delete a TC.** History is append-only — add a final revision and tag it `[CANCELLED]`.1404. **Background bookkeeping.** When mid-task, spawn a background subagent to update the TC. Do not pause coding to do paperwork.1415. **Validate before reporting success.** If a script exits non-zero, surface the error and stop.142143## Related Skills144145- `engineering/tc-tracker` — Full SKILL.md with schema reference, lifecycle diagrams, and the handoff format.146- `engineering/changelog-generator` — Pair with TC tracker: TCs for the per-change audit trail, changelog for user-facing release notes.147- `engineering/tech-debt-tracker` — For tracking long-lived debt rather than discrete code changes.