Skip to content
cccskills
FreePublished on GitHub

Summarize testdata changes

Use this skill to write a complete report of changes in Carbon toolchain testdata. It shows how to identify diffs, extract input and output changes, group related edits, list affected files, and validate that every change is represented.

OriginalShow the original description

Instructions for summarizing changes to Carbon testdata files (`toolchain/*/testdata`).

carbon-language/carbon-lang33,929 stars(GitHub 33,929 + cccskills 0)
Works withGitHub

Run score Not tested

See how to install

Good for

  • Summarizing testdata changes in a code review
  • Grouping related test input and output edits
  • Listing every affected testdata file
  • Checking that a change report covers the full diff

Files included (2)

  • SKILL.md7.2 KB
  • scripts/parse_diff.py2.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Summarize testdata changes

<!-- Part of the Carbon Language project, under the Apache License v2.0 with LLVM Exceptions. See /LICENSE for license information. SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -->

This skill provides instructions for creating a comprehensive report summarizing changes to Carbon testdata files (toolchain/*/testdata) and associating them with related code changes.

This skill is about reporting a diff. For deciding whether the diff is correct in the first place, see the Review testdata changes skill.

Goals

Produce a report that:

  1. Summarizes code changes outside of testdata.
  2. Groups similar testdata changes together, listing all affected files for each group. Every change to testdata must be represented by at least one group. This includes changes to CHECK lines.
  3. Provides detailed breakdowns of test input changes and diagnostic output changes in the corresponding group. Every single change to inputs or to STDERR checks must be explicitly mentioned in the group, with either an inline diff or a link to the file.

Process

1. Identify Changes

Use your VCS (Git or Jujutsu) or query Github to identify changes. For large changes, it is recommended to use the included helper script to extract test input changes.

For Git Users:

  • Summarize code changes: git diff --stat -- ':!toolchain/*/testdata/*'
    • To see content of non-testdata changes: git diff -- ':!toolchain/*/testdata/*'
  • Identify testdata changes: git diff --name-only 'toolchain/*/testdata/*'

For Jujutsu (jj) Users:

  • Summarize code changes: jj --no-pager diff --stat '~toolchain/*/testdata'
    • Note: Quoting the fileset '~toolchain/*/testdata' is critical if it contains wildcards.
    • To see content of non-testdata changes, use --git to get standard unified diff format: jj --no-pager diff --git '~toolchain/*/testdata'
  • Identify testdata changes: jj --no-pager diff --name-only 'toolchain/*/testdata'

For Github Pull Requests:

  • Summarize code changes: gh pr diff
  • Identify testdata changes: gh pr diff --name-only | grep '^toolchain/.*/testdata'

Handling Specific Revisions:

If you are summarizing changes in a specific revision (for example, @-) or pull request (for example, #1234), add -r <rev> or <pr_number> to the commands:

  • git diff <rev>^ <rev> ... (or use git show <rev>)
  • jj --no-pager diff -r <rev> ...
  • gh pr diff <pr_number>

2. Extract Test Input Changes (Recommended)

To easily identify changes, use the included Python helper script to extract all text additions and removals from the diff, categorized by Input, STDERR, and STDOUT changes. This script reads a unified diff from stdin.

# For Git:
git diff -- 'toolchain/*/testdata/*' | python3 .agents/skills/summarize_testdata_changes/scripts/parse_diff.py

# For Jujutsu (jj):
jj diff --git 'toolchain/*/testdata' | python3 .agents/skills/summarize_testdata_changes/scripts/parse_diff.py

# For a specific revision with jj:
jj diff -r @- --git 'toolchain/*/testdata' | python3 .agents/skills/summarize_testdata_changes/scripts/parse_diff.py

# For a specific PR with Github:
gh pr diff 1234 | python3 .agents/skills/summarize_testdata_changes/scripts/parse_diff.py

3. Identify Patterns and Produce a List of Groups

  • Read the diff and produce a list of groups of changes that share a common theme or cause (for example, "Updated expected output for integer literals", "Added tests for new keyword").
  • CRITICAL: Every single change in the testdata diff must be represented by at least one group. Do not ignore changes to CHECK lines.
    • If it's not clear what group a change belongs to, create a new group for it.
  • For each group:
    • Provide a brief description of the group.
    • (Optional) Briefly note if the group appears to be an intended or unintended consequence of the code changes.
  • Divide the groups into sections:
    • Test Changes: Changes to test inputs (lines not prefixed with // CHECK), along with diagnostic output changes where relevant
    • Diagnostic Changes: Changes to diagnostic output (lines prefixed with // CHECK:STDERR) with no corresponding changes to test inputs
    • [Output Type] Changes: Changes to STDOUT (lines prefixed with // CHECK:STDOUT)
      • Create one section for each relevant kind of test. For example, parser tests should typically be in a "Parse Tree Changes" section, check tests should typically be in a "SemIR Changes" section, and lower tests should typically be in an "LLVM IR Changes" section.

4. Improve Grouping

  • Read the list of groups and check to see if any of them should be combined or split apart. If needed, do so.

5. Assign Changes to Groups

  • Read the diff again, and then for each change in the diff:
    • Add the change to the appropriate group (or, rarely, groups).
    • CRITICAL: Every single change in the testdata diff must be represented by at least one group. Do not ignore changes to CHECK lines.
    • If the change affects test inputs (lines not prefixed with // CHECK) or diagnostic output (lines prefixed with // CHECK:STDERR):
      • List the file within the group. Don't just give one or a few examples. Include every file.
      • Provide an inline diff if the change is small.
      • Provide a link to the file if the change is large.
    • Otherwise, if the change only affects STDOUT (lines prefixed with // CHECK:STDOUT):
      • Ensure the group contains a representative example that matches the current change.
      • The representative example should be an inline diff of the change.
    • CRITICAL: Every single change to test inputs and diagnostic outputs in the files being summarized must be explicitly listed in at least one group. Do not skip changes, even if they are similar to changes you've already seen, and do not just give examples.

6. Validation

As a final validation step:

  • Read through the testdata diff again.
  • Ensure that every change in the diff is reflected by at least one group in the report.

Report Template

Use the following template for the generated report:

# `testdata` Change Summary

## Code Changes

[One paragraph summarizing changes outside of testdata.]

## Test Changes

### [Group Name]

[Description of the group.]

[Change 1: diff context OR link]

[Change 2: diff context OR link]

...

## Diagnostic Changes

### [Group Name]

[Description of the group.]

[Change 1: diff context OR link]

[Change 2: diff context OR link]

...

## [Output Type] Changes

### [File Path]

[Description of the group.]

[Example diff context]

Changes of this kind were found in [Number] files. Examples: [List of files]

...

Skip sections that would be empty.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Use this skill to read GitHub issue details and comments from the command line with `gh`. It covers issues referenced by number or URL, including issues in other repositories, and keeps access read-only so issue state is not changed.

  • Reading an issue and its full comment history
  • Opening an issue referenced by URL
  • Viewing an issue from another repository
carbon-language/carbon-lang33.9KUpdated Oct 26, 2026

Agent tools

FreeSummary

Use this skill to guide an AI assistant working in the Carbon repository on viewing, searching, and editing files with specialized environment tools. It also sets rules for temporary files and when custom programs may be used.

  • Choosing approved tools to view, search, or edit files
  • Checking where temporary analysis and test files belong
  • Deciding when a custom transformation program is allowed
carbon-language/carbon-lang33.9KUpdated Oct 26, 2026

Bazel usage

FreeSummary

Follow the Carbon project's Bazel workflow through Bazelisk, a version-managing launcher. Learn commands for building targets, running tests and binaries, enabling AddressSanitizer, and refreshing cached state after system dependency changes.

  • Building a Carbon target
  • Running focused project tests
  • Launching a Bazel-built binary
carbon-language/carbon-lang33.9KUpdated Oct 26, 2026

Use this skill to implement builtin functions in the Carbon compiler, from registering a function name and checking its signature to evaluating constant calls and generating LLVM IR for runtime calls. It also covers prelude bindings and focused tests.

  • Registering a new Carbon builtin function
  • Adding compile-time evaluation behavior
  • Lowering runtime builtins to LLVM IR
carbon-language/carbon-lang33.9KUpdated Oct 26, 2026

Code style

FreeSummary

Apply Carbon toolchain conventions for formatting Bazel, C++, Carbon, Markdown, and Python files. The skill also covers clear comments and documentation, accurate names, design choices, and concise commit descriptions.

  • Formatting a changed source file
  • Writing or revising code comments
  • Choosing names that match their meaning
carbon-language/carbon-lang33.9KUpdated Oct 26, 2026

Diagnostics

FreeSummary

Use this skill to add or revise diagnostics in the Carbon toolchain. It explains how to register message kinds, format typed arguments, attach source labels and context, and verify that diagnostics follow the project’s wording and test coverage rules.

  • Adding an error or warning to the Carbon compiler
  • Attaching source locations and explanatory labels
  • Checking diagnostic wording and formatting conventions
carbon-language/carbon-lang33.9KUpdated Oct 26, 2026

See all skills by carbon-language

Report a problem with this skill