/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]4---56# /tc — Technical Change Tracker78Dispatch a TC (Technical Change) command. Arguments: `$ARGUMENTS`.910If `$ARGUMENTS` is empty, print this menu and stop:1112```13/tc init Initialize TC tracking in this project14/tc create <name> Create a new TC record15/tc update <tc-id> [...] Update fields, status, files, handoff16/tc status [tc-id] Show one TC or the registry summary17/tc resume <tc-id> Resume a TC from a previous session18/tc close <tc-id> Transition a TC to deployed19/tc export Re-render derived artifacts20/tc dashboard Re-render the registry summary21```2223Otherwise, parse `$ARGUMENTS` as `<subcommand> <rest>` and dispatch to the matching protocol below. All scripts live at `engineering/tc-tracker/scripts/`.2425## Subcommands2627### `init`28291. Run:30 ```bash31 python3 engineering/skills/tc-tracker/scripts/tc_init.py --root . --json32 ```332. If status is `already_initialized`, report current statistics and stop.343. Otherwise report what was created and suggest `/tc create <name>` as the next step.3536### `create <name>`37381. Parse `<name>` as a kebab-case slug. If missing, ask the user for one.392. Prompt the user (one question at a time) for:40 - Title (5-120 chars)41 - Scope: `feature | bugfix | refactor | infrastructure | documentation | hotfix | enhancement`42 - Priority: `critical | high | medium | low` (default `medium`)43 - Summary (10+ chars)44 - Motivation453. Run:46 ```bash47 python3 engineering/skills/tc-tracker/scripts/tc_create.py --root . \48 --name "<slug>" --title "<title>" --scope <scope> --priority <priority> \49 --summary "<summary>" --motivation "<motivation>" --json50 ```514. Report the new TC ID and the path to the record.5253### `update <tc-id> [intent]`54551. If `<tc-id>` is missing, list active TCs (status `in_progress` or `blocked`) from `tc_status.py --all` and ask which one.562. Determine the user's intent from natural language:57 - **Status change** → `--set-status <state>` with `--reason "<why>"`58 - **Add files** → one or more `--add-file path[:action]`59 - **Add a test** → `--add-test "<title>" --test-procedure "<step>" --test-expected "<result>"`60 - **Update handoff** → any combination of `--handoff-progress`, `--handoff-next`, `--handoff-blocker`, `--handoff-context`61 - **Add a note** → `--note "<text>"`62 - **Add a tag** → `--tag <tag>`633. Run:64 ```bash65 python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> [flags] --json66 ```674. If exit code is non-zero, surface the error verbatim. The state machine and validator will reject invalid moves — do not retry blindly.6869### `status [tc-id]`7071- If `<tc-id>` is provided:72 ```bash73 python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --tc-id <tc-id>74 ```75- Otherwise:76 ```bash77 python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --all78 ```7980### `resume <tc-id>`81821. Run:83 ```bash84 python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --tc-id <tc-id> --json85 ```862. Display the handoff block prominently: `progress_summary`, `next_steps` (numbered), `blockers`, `key_context`.873. Ask: "Resume <tc-id> and pick up at next step 1? (y/n)"884. If yes, run an update to record the resumption:89 ```bash90 python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \91 --note "Session resumed" --reason "session handoff"92 ```935. Begin executing the first item in `next_steps`. Do NOT re-derive context — trust the handoff.9495### `close <tc-id>`96971. Read the record via `tc_status.py --tc-id <tc-id> --json`.982. Verify the current status is `tested`. If not, refuse and tell the user which transitions are still required.993. Check `test_cases`: warn if any are `pending`, `fail`, or `blocked`.1004. Ask the user:101 - "Who is approving? (your name, or 'self')"102 - "Approval notes (optional):"103 - "Test coverage status: none / partial / full"1045. Run:105 ```bash106 python3 engineering/skills/tc-tracker/scripts/tc_update.py --root . --tc-id <tc-id> \107 --set-status deployed --reason "Approved by <approver>" --note "Approval: <approver> — <notes>"108 ```109 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`.1106. Report: "TC-NNN closed and deployed."111112### `export`113114There is no automatic HTML export in this skill. Re-validate everything instead:1151161. Read the registry.1172. For each record, run:118 ```bash119 python3 engineering/skills/tc-tracker/scripts/tc_validator.py --record <path> --json120 ```1213. Run:122 ```bash123 python3 engineering/skills/tc-tracker/scripts/tc_validator.py --registry docs/TC/tc_registry.json --json124 ```1254. Report: total records validated, any errors, paths to anything invalid.126127### `dashboard`128129Run the all-records summary:130```bash131python3 engineering/skills/tc-tracker/scripts/tc_status.py --root . --all132```133134## Iron Rules1351361. **Never edit `tc_record.json` by hand.** Always use `tc_update.py` so revision history is appended and validation runs.1372. **Never skip the state machine.** Walk forward through states even if it feels redundant.1383. **Never delete a TC.** History is append-only — add a final revision and tag it `[CANCELLED]`.1394. **Background bookkeeping.** When mid-task, spawn a background subagent to update the TC. Do not pause coding to do paperwork.1405. **Validate before reporting success.** If a script exits non-zero, surface the error and stop.141142## Related Skills143144- `engineering/tc-tracker` — Full SKILL.md with schema reference, lifecycle diagrams, and the handoff format.145- `engineering/changelog-generator` — Pair with TC tracker: TCs for the per-change audit trail, changelog for user-facing release notes.146- `engineering/tech-debt-tracker` — For tracking long-lived debt rather than discrete code changes.