---
name: semantic-diff-review
description: Inspect staged, unstaged, and untracked Git changes or the diff introduced by the latest or a specified commit; assign deterministic IDs to individual diff hunks; semantically group hunks by purpose; and generate a self-contained dark HTML review dashboard. Use when asked to review, organize, explain, or split local changes or a commit into semantic units without staging, reverting, committing, checking out revisions, or otherwise changing Git state.
---

# Semantic Diff Review

Create `.semantic-review/review.html` from real Git output. Review either current Git changes or one commit against its first parent. Keep Codex responsible only for semantic classification; delegate collection, validation, and HTML generation to the bundled deterministic Python scripts.

## Safety boundary

- Never run commands that change Git state, including `git add`, `git restore`, `git checkout`, `git reset`, `git commit`, `git stash`, `git clean`, `git update-index`, or temporary worktree/branch manipulation.
- Never hand-author, reconstruct, shorten, or correct patch text.
- Never generate HTML, CSS, or JavaScript during a review. Use `scripts/render_review.py` unchanged.
- Write only `.semantic-review/classification.json`; the collector writes `changes.json` and the renderer writes `review.html`.
- Treat `.semantic-review/changes.json` as immutable Git-derived evidence. Re-run the collector instead of editing it.

## Workflow

Set `SKILL_DIR` to this skill's directory and run every command from anywhere inside the target repository.

1. Choose exactly one review target and collect it:

   Current staged, unstaged, and untracked changes:

   ```bash
   python3 "$SKILL_DIR/scripts/collect_changes.py" --repo .
   ```

   Latest commit (`HEAD`):

   ```bash
   python3 "$SKILL_DIR/scripts/collect_changes.py" --repo . --commit
   ```

   Specific commit hash or revision:

   ```bash
   python3 "$SKILL_DIR/scripts/collect_changes.py" --repo . --commit <revision>
   ```

   Use commit mode whenever the user asks for the latest commit, a commit hash, or a named revision. The collector resolves the revision to a commit and diffs it against its first parent; for a root commit it uses Git's empty tree. Commit mode ignores working-tree changes. Never check out, reset, stage, or otherwise expose a commit through working-tree mutation.

   The collector finds the repository root, excludes `.semantic-review/`, assigns stable content-derived hunk IDs, and writes `.semantic-review/changes.json`. It uses only read-only Git commands and preserves patches directly from Git output.

2. Read `.semantic-review/changes.json`. Semantically classify every entry in `hunks` exactly once. Base grouping on intent and purpose, not merely file proximity. Keep separable concerns in separate groups; keep tests, docs, migrations, and configuration with the implementation they directly support when they form one coherent change.

3. Write `.semantic-review/classification.json` with exactly this shape:

   ```json
   {
     "schema_version": 1,
     "groups": [
       {
         "title": "Concise semantic group title",
         "purpose": "What this change accomplishes and why",
         "risk": {
           "level": "low",
           "rationale": "Concrete failure modes or reasons risk is limited"
         },
         "review_points": [
           "A specific behavior, edge case, or integration to verify"
         ],
         "suggested_commit_message": "type(scope): concise imperative subject",
         "hunk_ids": ["H-0123456789ABCDEF"]
       }
     ]
   }
   ```

   Use only `low`, `medium`, or `high` for `risk.level`. Use `groups: []` when `hunks` is empty. Do not add patch, diff, source, code, HTML, CSS, or JavaScript fields. Do not copy source lines into semantic prose.

4. Render and validate the review:

   ```bash
   python3 "$SKILL_DIR/scripts/render_review.py" \
     --changes .semantic-review/changes.json \
     --classification .semantic-review/classification.json \
     --output .semantic-review/review.html
   ```

   If validation reports missing, duplicate, or unknown hunk IDs, fix only `classification.json` and render again. If it reports changed or invalid collected evidence, re-run collection and classification.

5. Report the reviewed target, absolute path to `.semantic-review/review.html`, the number of semantic groups and hunks, and that Git state was left untouched. Do not open a browser unless the user asks.

## Classification guidance

- Describe purpose at the behavioral or architectural level.
- Assess risk from observable failure modes, compatibility, data handling, security boundaries, concurrency, migrations, and test coverage.
- Make review points actionable questions or checks rather than generic advice.
- Suggest one commit message per semantic group. Do not claim a commit was created.
- Prefer a small number of coherent groups, but never force unrelated hunks together.
- Preserve the collector's hunk IDs verbatim. They are the only link between semantic judgments and source patches.

The renderer rejects incomplete classifications and obtains every displayed patch exclusively from `changes.json`; model-authored text is inserted only as escaped semantic metadata.
