option

Suivez les modifications du code à l’aide d’enregistrements JSON structurés, d’une machine à états imposée et d’un format de transfert de session pour assurer la continuité de l’IA.

...Développer tout
33
Heure mise à jour 27 août 2026

TC Tracker

Suivez chaque modification de code grâce à des enregistrements JSON structurés, une machine à états imposée et un format de passation de session permettant à une nouvelle session IA de reprendre le travail proprement lorsqu'une session précédente expire.

Vue d'ensemble

Un Changement Technique (TC) est un enregistrement structuré qui capture ce qui a changé, pourquoi cela a changé, qui l'a modifié, quand cela a changé, comment cela a été testé et en est le travail pour la session suivante. Les enregistrements sont stockés sous forme de JSON dans docs/TC/ au sein du projet cible, validés selon un schéma strict et une machine à états.

Utilisez cette compétence lorsque l'utilisateur :

  • Demande de "suivre ce changement" ou souhaite une piste d'audit pour les modifications de code
  • Souhaite transférer un travail en cours à une session IA future
  • A besoin de notes de version structurées allant au-delà des messages de commit
  • Intègre un projet existant et souhaite une documentation rétrospective des changements
  • Demande /tc init, /tc create, /tc update, /tc status, /tc resume ou /tc close

N'utilisez PAS cette compétence lorsque :

  • L'utilisateur souhaite uniquement un journal des modifications issu de l'historique git (utilisez engineering/changelog-generator)
  • L'utilisateur souhaite uniquement suivre les éléments de dette technique (utilisez engineering/tech-debt-tracker)
  • Le changement est trivial (faute de frappe, formatage) et n'affectera pas le comportement

Disposition du stockage

Chaque projet stocke les TC à l'emplacement {project_root}/docs/TC/ :

docs/TC/
├── tc_config.json          # Paramètres du projet
├── tc_registry.json        # Index principal + statistiques
├── records/
│   └── TC-001-04-05-26-user-auth/
│       └── tc_record.json  # Source de vérité
└── evidence/
    └── TC-001/             # Extraits de journal, sortie de commande, captures d'écran

Convention d'identification des TC

  • TC parent : TC-NNN-MM-DD-YY-fonctionnalité-slug (ex. TC-001-04-05-26-user-authentication)
  • Sous-TC : TC-NNN.A ou TC-NNN.A.1 (lettre = révision, chiffre = sous-révision)
  • NNN est séquentiel, MM-DD-YY est la date de création, le slug est en kebab-case.

Machine à états

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

Voir references/lifecycle.md pour le tableau complet des transitions et les flux de récupération.

Commandes de flux de travail

La compétence fournit cinq scripts Python effectuant des opérations déterministes n'utilisant que la bibliothèque standard sur les enregistrements TC. Chacun prend en charge --help et --json.

1. Initialiser le suivi dans un projet

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

Crée docs/TC/, docs/TC/records/, docs/TC/evidence/, tc_config.json et tc_registry.json. Idempotent — le réexécution rapporte "déjà initialisé" avec les statistiques actuelles.

2. Créer un nouvel enregistrement TC

python3 scripts/tc_create.py \
  --root . \
  --name "user-authentication" \
  --title "Ajouter l'authentification utilisateur basée sur JWT" \
  --scope feature \
  --priority high \
  --summary "Ajoute la connexion JWT + middleware" \
  --motivation "Requis pour les points de terminaison protégés"

Génère le prochain ID TC séquentiel, crée le répertoire d'enregistrement, écrit un tc_record.json entièrement peuplé (statut planned, révision de création R1) et met à jour le registre.

3. Mettre à jour un enregistrement TC

# Transition d'état (validée contre la machine à états)
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --set-status in_progress --reason "Démarrage de l'implémentation"

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

# Ajouter des données de passation
python3 scripts/tc_update.py --root . --tc-id TC-001-04-05-26-user-auth \
  --handoff-progress "Middleware JWT connecté" \
  --handoff-next "Écrire les tests d'intégration" \
  --handoff-next "Mettre à jour le README"

Chaque modification ajoute une entrée de révision séquentielle R<n></n>, actualise updated et revalide selon le schéma avant d'écrire de manière atomique (.tmp puis renommage).

4. Afficher le statut

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

# Tous les TC (résumé du registre)
python3 scripts/tc_status.py --root . --all --json

5. Valider un enregistrement ou un registre

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

Le validateur applique le schéma, vérifie la légalité de la machine à états, vérifie les IDs séquentiels R<n></n> et T<n></n>, et affirme la cohérence des approbations (approved=true nécessite approved_by et approved_date).

Voir references/tc-schema.md pour le schéma complet.

Distributeur de commandes slash

Le dépôt fournit une commande slash /tc dans commands/tc.md qui dispatche vers ces scripts en fonction de la sous-commande :

CommandeAction
`/tc init`Exécuter `tc_init.py` pour le projet actuel
`/tc create `Demander les champs, exécuter `tc_create.py`
`/tc update `Appliquer les modifications décrites par l'utilisateur via `tc_update.py`
`/tc status [tc-id]`Exécuter `tc_status.py`
`/tc resume `Afficher la passation, archiver la session précédente, démarrer une nouvelle
`/tc close `Passer à `deployed`, définir l'approbation
`/tc export`Rérendu de tous les artefacts dérivés
`/tc dashboard`Rérendu du résumé du registre

La commande slash est l'interface utilisateur ; les scripts Python sont le moteur.

Format de passation de session

Le bloc de passation se trouve à session_context.handoff dans chaque TC et est le champ le plus important pour la continuité de l'IA. Il contient :

  • progress_summary — ce qui a été fait
  • next_steps — liste ordonnée des actions restantes
  • blockers — tout ce qui empêche la progression
  • key_context — décisions critiques, pièges, modèles que le prochain bot doit connaître
  • files_in_progress — fichiers en cours d'édition et leur état (editing, needs_review, partially_done, ready)
  • decisions_made — décisions architecturales avec justification et horodatage

Voir references/handoff-format.md pour la structure complète et les règles de remplissage.

Règles de validation (Toujours appliquées)

  1. Machine à états — seules les transitions valides sont autorisées.
  2. IDs séquentielsrevision_history utilise R1, R2, R3... ; test_cases utilise T1, T2, T3....
  3. Historique en append-only — les entrées de révision ne sont jamais modifiées ou supprimées.
  4. Cohérence des approbationsapproved=true nécessite approved_by et approved_date.
  5. Format de l'ID TC — doit correspondre à TC-NNN-MM-DD-YY-slug.
  6. Format de l'ID Sous-TC — doit correspondre à TC-NNN.A ou TC-NNN.A.N.
  7. Écritures atomiques — le JSON est écrit dans .tmp puis renommé.
  8. Statistiques du registre — recalculées à chaque écriture dans le registre.

Motif de comptabilité non bloquant

Le suivi TC ne doit PAS interrompre le flux de travail principal.

  • Ne jamais s'arrêter pour mettre à jour les enregistrements TC en ligne. Continuer à coder.
  • Aux jalons naturels, lancer un sous-agent en arrière-plan pour mettre à jour l'enregistrement.
  • Soulever des questions uniquement lorsque cela est véritablement nécessaire ("Ce travail ne correspond à aucun TC actif — en créer un ?"), et poser la question une fois par session, pas par fichier.
  • À la fin de la session, écrire un bloc de passation final avant de fermer.

Création en masse rétrospective

Pour l'intégration d'un projet existant avec un historique non documenté, créer un retro_changelog.json (une entrée par changement logique) et l'alimenter à tc_create.py dans une boucle, ou étendre le script pour le mode par lots. Regrouper les commits par fonctionnalité, pas par fichier.

Contre-motifs

Contre-motifPourquoi c'est mauvaisFaire ceci à la place
Modifier `revision_history` pour "corriger" une faute de frappeL'historique est en append-only — la falsification détruit la piste d'auditAjouter une nouvelle révision qui corrige le champ
Sauter la machine à états ("définir simplement le statut sur deployed")Bypass la validation et cache les phases sautéesPasser par `in_progress -> implemented -> tested -> deployed`
Créer un TC par fichier modifiéFragmente le travail lié et explose le registreUn TC par unité logique (fonctionnalité, correction, refactorisation)
Mettre à jour le TC en ligne entre chaque modification de codeRalentit l'agent principal, gaspille le contexteLancer un sous-agent en arrière-plan aux jalons
Marquer `approved=true` sans `approved_by`Le validateur rejettera ; piste d'audit trompeuseToujours définir `approved_by` et `approved_date` ensemble
Écraser `tc_record.json` directement avec un éditeur de texteRisque de corruption en cours d'écriture et saute la validationUtiliser `tc_update.py` (écriture atomique + vérification du schéma)
Mettre des secrets dans `notes` ou les preuvesLes enregistrements sont commités dans le dépôtRéférencer une variable d'environnement ou un magasin de secrets externe
Réutiliser les IDs TC après suppressionBrisse la garantie séquentielle et confond l'historiqueIncrémenter uniquement vers l'avant — ne jamais recycler
Laisser `next_steps` devenir obsolèteAnéantit l'objectif de la passationMettre à jour à chaque jalon, même si "rien n'a changé"

Références croisées

  • engineering/changelog-generator — Génère des notes de version Keep-a-Changelog à partir de Conventional Commits. Associez-le au suivi TC : TC pour la piste d'audit granulaire par changement, journal des modifications pour les notes de version destinées aux utilisateurs.
  • engineering/tech-debt-tracker — Pour le suivi des éléments de dette à long terme plutôt que des changements de code discrets.
  • engineering/focused-fix — Lorsqu'une correction de bug nécessite une réparation systématique à l'échelle de la fonctionnalité, exécuter /focused-fix d'abord, puis capturer le résultat comme un TC.
  • project-management/decision-log — Les décisions architecturales prises dans le bloc decisions_made d'un TC peuvent également être promues vers un journal de décision à l'échelle du projet.
  • engineering-team/code-reviewer — La revue avant fusion s'intègre naturellement dans la transition tested -> deployed ; capturer le réviseur dans approval.approved_by.

Références dans cette compétence

  • references/tc-schema.md — Schéma JSON complet pour les enregistrements TC et le registre.
  • references/lifecycle.md — Machine à états, transitions valides et flux de récupération.
  • references/handoff-format.md — Structure de passation de session et meilleures pratiques.
Voir sur 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.

Tous les fichiers

0 fichiers

Installer tc-tracker

Téléchargez et extrayez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

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

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera et utilisera automatiquement la compétence

Compétences similaires

golang-dependency-injection
Heure mise à jour 29 juin 2026
nuxthub
Heure mise à jour 23 août 2026
code-quality
Heure mise à jour 22 août 2026
altimate-data-engineering-skills
Heure mise à jour 23 août 2026
OR