옵션

구조화된 JSON 기록, 강제 상태 기계, AI 연속성을 위한 세션 인계 형식과 함께 코드 변경을 추적합니다.

...모든 것을 확장하십시오
33
업데이트 된 시간 2026년 8월 27일

TC Tracker

구조화된 JSON 레코드로 모든 코드 변경을 추적하고, 강제된 상태 머신과 세션 인수인계 형식을 사용하여 이전 세션이 만료될 때 새 AI 세션이 작업을 깔끔하게 이어받을 수 있습니다.

개요

기술 변경(TC)은 무엇이 변경되었는지, 변경되었는지, 누가 변경했는지, 언제 변경되었는지, 어떻게 테스트되었는지, 그리고 다음 세션을 위해 작업이 어디까지 진행되었는지를 포착하는 구조화된 기록입니다. 레코드는 대상 프로젝트 내 docs/TC/ 폴더에 JSON 형식으로 저장되며, 엄격한 스키마와 상태 머신에 대해 검증됩니다.

다음과 같은 경우 이 스킬을 사용하세요:

  • "이 변경 사항을 추적해 줘"라고 요청하거나 코드 수정에 대한 감사 추적(Audit Trail)을 원하는 경우
  • 진행 중인 작업을 향후 AI 세션에 인수인계하려는 경우
  • 커밋 메시지 이상의 구조화된 릴리스 노트가 필요한 경우
  • 기존 프로젝트에 온보딩하며 사후 변경 문서를 작성하려는 경우
  • /tc init, /tc create, /tc update, /tc status, /tc resume, 또는 /tc close를 요청하는 경우

다음과 같은 경우에는 이 스킬을 사용하지 마세요:

  • 사용자가 git 히스토리에서 변경 로그만 원하는 경우 (engineering/changelog-generator 사용)
  • 사용자가 기술 부채 항목만 추적하려는 경우 (engineering/tech-debt-tracker 사용)
  • 변경 사항이 사소한 경우(오타, 포맷팅)이며 동작에 영향을 미치지 않는 경우

저장소 레이아웃

각 프로젝트는 {project_root}/docs/TC/ 경로에 TC를 저장합니다:

docs/TC/
├── tc_config.json          # 프로젝트 설정
├── tc_registry.json        # 마스터 인덱스 + 통계
├── records/
│   └── TC-001-04-05-26-user-auth/
│       └── tc_record.json  # 진실의 출처(Source of Truth)
└── evidence/
    └── TC-001/             # 로그 스니펫, 명령어 출력, 스크린샷

TC ID 규칙

  • 부모 TC: TC-NNN-MM-DD-YY-functionality-slug (예: TC-001-04-05-26-user-authentication)
  • 하위 TC: TC-NNN.A 또는 TC-NNN.A.1 (문자 = 수정 버전, 숫자 = 하위 수정 버전)
  • NNN은 순차적 번호, MM-DD-YY는 생성 날짜, slug은 케밥 케이스(Kebab-case)입니다.

상태 머신

planned -> in_progress -> implemented -> tested -> deployed
   |            |              |           |          |
   +-> blocked -+              +- in_progress  planned

전체 전이 테이블 및 복구 흐름은 references/lifecycle.md를 참조하십시오.

워크플로우 명령어

이 스킬은 TC 레코드에 대해 결정론적이고 stdlib 전용 연산을 수행하는 다섯 가지 Python 스크립트를 제공합니다. 각 스크립트는 --help--json 옵션을 지원합니다.

1. 프로젝트에서 추적 초기화

python3 scripts/tc_init.py --project "My Project" --root .

docs/TC/, docs/TC/records/, docs/TC/evidence/, tc_config.json, tc_registry.json을 생성합니다. 멱등성(Idempotent)을 가지며, 다시 실행하면 현재 통계와 함께 "이미 초기화됨" 메시지를 보고합니다.

2. 새 TC 레코드 생성

python3 scripts/tc_create.py \
  --root . \
  --name "user-authentication" \
  --title "Add JWT-based user authentication" \
  --scope feature \
  --priority high \
  --summary "Adds JWT login + middleware" \
  --motivation "Required for protected endpoints"

다음 순차적 TC ID를 생성하고, 레코드 디렉토리를 만들며, 상태가 planned이고 R1 생성 수정 버전인 완전히 채워진 tc_record.json을 작성한 후 레지스트리를 업데이트합니다.

3. TC 레코드 업데이트

# 상태 전이 (상태 머신에 대해 검증됨)
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --set-status in_progress --reason "Starting implementation"

# 파일 추가
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --add-file src/auth.py:created

# 인수인계 데이터 추가
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --handoff-progress "JWT middleware wired up" \
  --handoff-next "Write integration tests" \
  --handoff-next "Update README"

모든 변경 사항은 순차적인 R<n></n> 수정 버전 항목을 추가하고, updated 필드를 갱신한 후 원자적 쓰기(.tmp 생성 후 이름 변경) 전에 스키마에 대해 다시 검증합니다.

4. 상태 확인

# 단일 TC
python3 scripts/tc_status.py --root . --tc-id TC-001-04-05-26-user-auth

# 모든 TC (레지스트리 요약)
python3 scripts/tc_status.py --root . --all --json

5. 레코드 또는 레지스트리 검증

python3 scripts/tc_validator.py --record docs/TC/records/TC-001-.../tc_record.json
python3 scripts/tc_validator.py --registry docs/TC/tc_registry.json

검증기는 스키마를 강제하고, 상태 머신의 합법성을 확인하며, 순차적인 R<n></n>T<n></n> ID를 검증하고, 승인 일관성(approved=trueapproved_byapproved_date 필요)을 확인합니다.

전체 스키마는 references/tc-schema.md를 참조하십시오.

슬래시 명령어 디스패처

저장소에는 commands/tc.md/tc 슬래시 명령어가 포함되어 있으며, 하위 명령어에 따라 해당 스크립트로 디스패치합니다:

명령어동작
`/tc init`현재 프로젝트에 대해 `tc_init.py` 실행
`/tc create `필드 프롬프트 표시, `tc_create.py` 실행
`/tc update ``tc_update.py`를 통해 사용자 설명 변경 적용
`/tc status [tc-id]``tc_status.py` 실행
`/tc resume `인수인계 표시, 이전 세션 아카이브, 새 세션 시작
`/tc close ``deployed`로 전이, 승인 설정
`/tc export`모든 파생 아티팩트 다시 렌더링
`/tc dashboard`레지스트리 요약 다시 렌더링

슬래시 명령어는 사용자 인터페이스이며, Python 스크립트는 엔진입니다.

세션 인수인계 형식

인수인계 블록은 각 TC 내부의 session_context.handoff에 위치하며, AI 연속성을 위한 가장 중요한 단일 필드입니다. 여기에는 다음이 포함됩니다:

  • progress_summary — 수행된 작업
  • next_steps — 남은 작업의 순서 있는 목록
  • blockers — 진행을 방해하는 사항
  • key_context — 다음 봇이 알아야 할 중요한 결정, 주의사항, 패턴
  • files_in_progress — 편집 중인 파일 및 그 상태(editing, needs_review, partially_done, ready)
  • decisions_made — 근거와 타임스탬프가 있는 아키텍처 결정

전체 구조 및 작성 규칙은 references/handoff-format.md를 참조하십시오.

검증 규칙 (항상 강제 적용)

  1. 상태 머신 — 유효한 전이만 허용됩니다.
  2. 순차적 IDrevision_historyR1, R2, R3...를 사용하며, test_casesT1, T2, T3...를 사용합니다.
  3. 추가 전용 히스토리 — 수정 버전 항목은 수정되거나 삭제되지 않습니다.
  4. 승인 일관성approved=trueapproved_byapproved_date가 필요합니다.
  5. TC ID 형식TC-NNN-MM-DD-YY-slug와 일치해야 합니다.
  6. 하위 TC ID 형식TC-NNN.A 또는 TC-NNN.A.N과 일치해야 합니다.
  7. 원자적 쓰기 — JSON은 .tmp에 작성된 후 이름이 변경됩니다.
  8. 레지스트리 통계 — 레지스트리 작성 시마다 재계산됩니다.

차단되지 않는 기록 패턴

TC 추적은 주요 워크플로우를 중단해서는 안 됩니다.

  • 인라인으로 TC 레코드를 업데이트하려고 멈추지 마세요. 코딩을 계속하세요.
  • 자연스러운 마일스톤에서 백그라운드 하위 에이전트를 생성하여 레코드를 업데이트합니다.
  • 정말로 필요한 경우에만 질문을 표시합니다("이 작업은 활성 TC 중 어느 것과도 일치하지 않습니다 — 생성하시겠습니까?"), 세션당 한 번만 묻고 파일마다 묻지 마세요.
  • 세션 종료 시, 닫기 전에 최종 인수인계 블록을 작성합니다.

사후 대량 생성

문서화되지 않은 히스토리가 있는 기존 프로젝트에 온보딩하려면 retro_changelog.json(논리적 변경당 하나의 항목)을 작성하고 루프에서 tc_create.py에 피드하거나, 배치 모드를 위해 스크립트를 확장합니다. 파일별이 아닌 기능별로 커밋을 그룹화합니다.

안티 패턴

안티 패턴나쁜 이유대신 이렇게 하세요
`revision_history`를 편집하여 "오타 수정"히스토리는 추가 전용이므로 조작하면 감사 추적이 파괴됩니다필드를 수정하는 새 수정 버전 추가
상태 머신 건너뛰기 ("deployed로 상태 설정만")검증을 우회하고 건너뛴 단계를 숨깁니다`in_progress -> implemented -> tested -> deployed` 단계로 진행
변경된 파일당 하나의 TC 생성관련 작업을 파편화하고 레지스트리를 폭발시킵니다논리적 단위(기능, 수정, 리팩토링)당 하나의 TC
모든 코드 편집 사이에 인라인으로 TC 업데이트주요 에이전트를 느리게 하고 컨텍스트를 낭비합니다마일스톤에서 백그라운드 하위 에이전트 생성
`approved_by` 없이 `approved=true` 표시검증기가 거부하며 오해의 소지가 있는 감사 추적`approved_by` 및 `approved_date`를 항상 함께 설정
텍스트 편집기로 `tc_record.json`을 직접 덮어쓰기쓰기 중 손상 위험이 있으며 검증을 건너뜁니다`tc_update.py` 사용 (원자적 쓰기 + 스키마 확인)
`notes`나 증거에 비밀 정보 포함레코드는 저장소에 커밋됩니다환경 변수 또는 외부 비밀 저장소를 참조
삭제 후 TC ID 재사용순차적 보증을 깨고 히스토리를 혼란스럽게 합니다앞으로만 증가 — 절대 재활용하지 마세요
`next_steps`가 낡게 방치인수인계의 목적을 무효화합니다마일스톤마다 업데이트 (변경 사항이 없더라도)

크로스 참조

  • engineering/changelog-generator — Conventional Commits에서 Keep-a-Changelog 릴리스 노트를 생성합니다. TC 추적기와 함께 사용: 세밀한 변경별 감사 추적을 위한 TC, 사용자 대상 릴리스 노트를 위한 변경 로그.
  • engineering/tech-debt-tracker — 이산 코드 변경이 아닌 장기적인 부채 항목을 추적하는 데 사용됩니다.
  • engineering/focused-fix — 버그 수정에 체계적인 기능 전체 수리가 필요한 경우, 먼저 /focused-fix를 실행한 후 결과를 TC로 캡처합니다.
  • project-management/decision-log — TC의 decisions_made 블록 내에서 이루어진 아키텍처 결정은 프로젝트 전체의 결정 로그로 승격될 수 있습니다.
  • engineering-team/code-reviewer — 병합 전 검토는 tested -> deployed 전이에 자연스럽게 맞습니다; 검토자를 approval.approved_by에 캡처합니다.

이 스킬의 참조

  • references/tc-schema.md — TC 레코드 및 레지스트리의 전체 JSON 스키마.
  • references/lifecycle.md — 상태 머신, 유효한 전이 및 복구 흐름.
  • references/handoff-format.md — 세션 인수인계 구조 및 모범 사례.
GitHub에서 보기
---
name: tc-tracker
description: Track code changes with structured JSON records, an enforced state machine, and a session handoff format for AI continuity.
---

# TC Tracker

Track every code change with structured JSON records, an enforced state machine, and a session handoff format that lets a new AI session resume work cleanly when a previous one expires.

## Overview

A Technical Change (TC) is a structured record that captures **what** changed, **why** it changed, **who** changed it, **when** it changed, **how it was tested**, and **where work stands** for the next session. Records live as JSON in `docs/TC/` inside the target project, validated against a strict schema and a state machine.

**Use this skill when the user:**
- Asks to "track this change" or wants an audit trail for code modifications
- Wants to hand off in-progress work to a future AI session
- Needs structured release notes that go beyond commit messages
- Onboards an existing project and wants retroactive change documentation
- Asks for `/tc init`, `/tc create`, `/tc update`, `/tc status`, `/tc resume`, or `/tc close`

**Do NOT use this skill when:**
- The user only wants a changelog from git history (use `engineering/changelog-generator`)
- The user only wants to track tech debt items (use `engineering/tech-debt-tracker`)
- The change is trivial (typo, formatting) and won't affect behavior

## Storage Layout

Each project stores TCs at `{project_root}/docs/TC/`:

```
docs/TC/
├── tc_config.json          # Project settings
├── tc_registry.json        # Master index + statistics
├── records/
│   └── TC-001-04-05-26-user-auth/
│       └── tc_record.json  # Source of truth
└── evidence/
    └── TC-001/             # Log snippets, command output, screenshots
```

## TC ID Convention

- **Parent TC:** `TC-NNN-MM-DD-YY-functionality-slug` (e.g., `TC-001-04-05-26-user-authentication`)
- **Sub-TC:** `TC-NNN.A` or `TC-NNN.A.1` (letter = revision, digit = sub-revision)
- `NNN` is sequential, `MM-DD-YY` is the creation date, slug is kebab-case.

## State Machine

```
planned -> in_progress -> implemented -> tested -> deployed
   |            |              |           |          |
   +-> blocked -+              +- in_progress <-------+
        |                          (rework / hotfix)
        +-> planned
```

> See [references/lifecycle.md](references/lifecycle.md) for the full transition table and recovery flows.

## Workflow Commands

The skill ships five Python scripts that perform deterministic, stdlib-only operations on TC records. Each one supports `--help` and `--json`.

### 1. Initialize tracking in a project

```bash
python3 scripts/tc_init.py --project "My Project" --root .
```

Creates `docs/TC/`, `docs/TC/records/`, `docs/TC/evidence/`, `tc_config.json`, and `tc_registry.json`. Idempotent — re-running reports "already initialized" with current stats.

### 2. Create a new TC record

```bash
python3 scripts/tc_create.py \
  --root . \
  --name "user-authentication" \
  --title "Add JWT-based user authentication" \
  --scope feature \
  --priority high \
  --summary "Adds JWT login + middleware" \
  --motivation "Required for protected endpoints"
```

Generates the next sequential TC ID, creates the record directory, writes a fully populated `tc_record.json` (status `planned`, R1 creation revision), and updates the registry.

### 3. Update a TC record

```bash
# Status transition (validated against the state machine)
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --set-status in_progress --reason "Starting implementation"

# Add a file
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --add-file src/auth.py:created

# Append handoff data
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --handoff-progress "JWT middleware wired up" \
  --handoff-next "Write integration tests" \
  --handoff-next "Update README"
```

Every change appends a sequential `R<n>` revision entry, refreshes `updated`, and re-validates against the schema before writing atomically (`.tmp` then rename).

### 4. View status

```bash
# Single TC
python3 scripts/tc_status.py --root . --tc-id TC-001-04-05-26-user-auth

# All TCs (registry summary)
python3 scripts/tc_status.py --root . --all --json
```

### 5. Validate a record or registry

```bash
python3 scripts/tc_validator.py --record docs/TC/records/TC-001-.../tc_record.json
python3 scripts/tc_validator.py --registry docs/TC/tc_registry.json
```

Validator enforces the schema, checks state-machine legality, verifies sequential `R<n>` and `T<n>` IDs, and asserts approval consistency (`approved=true` requires `approved_by` and `approved_date`).

> See [references/tc-schema.md](references/tc-schema.md) for the full schema.

## Slash-Command Dispatcher

The repo ships a `/tc` slash command at `commands/tc.md` that dispatches to these scripts based on subcommand:

| Command | Action |
|---------|--------|
| `/tc init` | Run `tc_init.py` for the current project |
| `/tc create <name>` | Prompt for fields, run `tc_create.py` |
| `/tc update <tc-id>` | Apply user-described changes via `tc_update.py` |
| `/tc status [tc-id]` | Run `tc_status.py` |
| `/tc resume <tc-id>` | Display handoff, archive prior session, start a new one |
| `/tc close <tc-id>` | Transition to `deployed`, set approval |
| `/tc export` | Re-render all derived artifacts |
| `/tc dashboard` | Re-render the registry summary |

The slash command is the user interface; the Python scripts are the engine.

## Session Handoff Format

The handoff block lives at `session_context.handoff` inside each TC and is the single most important field for AI continuity. It contains:

- `progress_summary` — what has been done
- `next_steps` — ordered list of remaining actions
- `blockers` — anything preventing progress
- `key_context` — critical decisions, gotchas, patterns the next bot must know
- `files_in_progress` — files being edited and their state (`editing`, `needs_review`, `partially_done`, `ready`)
- `decisions_made` — architectural decisions with rationale and timestamp

> See [references/handoff-format.md](references/handoff-format.md) for the full structure and fill-out rules.

## Validation Rules (Always Enforced)

1. **State machine** — only valid transitions are allowed.
2. **Sequential IDs** — `revision_history` uses `R1, R2, R3...`; `test_cases` uses `T1, T2, T3...`.
3. **Append-only history** — revision entries are never modified or deleted.
4. **Approval consistency** — `approved=true` requires `approved_by` and `approved_date`.
5. **TC ID format** — must match `TC-NNN-MM-DD-YY-slug`.
6. **Sub-TC ID format** — must match `TC-NNN.A` or `TC-NNN.A.N`.
7. **Atomic writes** — JSON is written to `.tmp` then renamed.
8. **Registry stats** — recomputed on every registry write.

## Non-Blocking Bookkeeping Pattern

TC tracking must NOT interrupt the main workflow.

- **Never stop to update TC records inline.** Keep coding.
- At natural milestones, spawn a background subagent to update the record.
- Surface questions only when genuinely needed ("This work doesn't match any active TC — create one?"), and ask once per session, not per file.
- At session end, write a final handoff block before closing.

## Retroactive Bulk Creation

For onboarding an existing project with undocumented history, build a `retro_changelog.json` (one entry per logical change) and feed it to `tc_create.py` in a loop, or extend the script for batch mode. Group commits by feature, not by file.

## Anti-Patterns

| Anti-pattern | Why it's bad | Do this instead |
|--------------|--------------|-----------------|
| Editing `revision_history` to "fix" a typo | History is append-only — tampering destroys the audit trail | Add a new revision that corrects the field |
| Skipping the state machine ("just set status to deployed") | Bypasses validation and hides skipped phases | Walk through `in_progress -> implemented -> tested -> deployed` |
| Creating one TC per file changed | Fragments related work and explodes the registry | One TC per logical unit (feature, fix, refactor) |
| Updating TC inline between every code edit | Slows the main agent, wastes context | Spawn a background subagent at milestones |
| Marking `approved=true` without `approved_by` | Validator will reject; misleading audit trail | Always set `approved_by` and `approved_date` together |
| Overwriting `tc_record.json` directly with a text editor | Risks corruption mid-write and skips validation | Use `tc_update.py` (atomic write + schema check) |
| Putting secrets in `notes` or evidence | Records are committed to the repo | Reference an env var or external secret store |
| Reusing TC IDs after deletion | Breaks the sequential guarantee and confuses history | Increment forward only — never recycle |
| Letting `next_steps` go stale | Defeats the purpose of handoff | Update on every milestone, even if it's "nothing changed" |

## Cross-References

- `engineering/changelog-generator` — Generates Keep-a-Changelog release notes from Conventional Commits. Pair it with TC tracker: TC for the granular per-change audit trail, changelog for user-facing release notes.
- `engineering/tech-debt-tracker` — For tracking long-lived debt items rather than discrete code changes.
- `engineering/focused-fix` — When a bug fix needs systematic feature-wide repair, run `/focused-fix` first then capture the result as a TC.
- `project-management/decision-log` — Architectural decisions made inside a TC's `decisions_made` block can also be promoted to a project-wide decision log.
- `engineering-team/code-reviewer` — Pre-merge review fits naturally into the `tested -> deployed` transition; capture the reviewer in `approval.approved_by`.

## References in This Skill

- [references/tc-schema.md](references/tc-schema.md) — Full JSON schema for TC records and the registry.
- [references/lifecycle.md](references/lifecycle.md) — State machine, valid transitions, and recovery flows.
- [references/handoff-format.md](references/handoff-format.md) — Session handoff structure and best practices.

모든 파일

0개 파일

tc-tracker 설치

스킬 파일을 다운로드하여 .claude/skills/ 디렉토리에 추출하세요.

ZIP 다운로드

저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.

git clone https://github.com/alirezarezvani/claude-skills/tree/main/engineering/skills/tc-tracker # Copy SKILL.md to your .claude/skills/ directory

복사 복사
빠른 설정: 스킬 폴더를 .claude/skills/에 복사하세요. Claude가 자동으로 감지하고 사용합니다.

관련 스킬

golang-dependency-injection
업데이트 된 시간 2026년 6월 29일
nuxthub
업데이트 된 시간 2026년 8월 23일
code-quality
업데이트 된 시간 2026년 8월 22일
altimate-data-engineering-skills
업데이트 된 시간 2026년 8월 23일
OR