wordpress/wp-71-release-metadata
Populate or refresh 7-1-dev-notes/release-metadata.json from every JSON file in 7-1-dev-notes/components/ and validate it against release-metadata.schema.json. Use when asked to build, update, synchronize, reconcile, or validate WordPress 7.1 release metadata from the local component files.
npx skills add https://github.com/WordPress/Documentation-Issue-Tracker --skill wp-71-release-metadata
Work only from repository files. Do not fetch Trac or GitHub data for this task.
Read:
7-1-dev-notes/components/*.json7-1-dev-notes/release-metadata.schema.json7-1-dev-notes/release-metadata.json, when it is non-empty and valid JSONWrite only:
7-1-dev-notes/release-metadata.jsonTreat the schema as authoritative. Never modify it to make generated data pass.
Before writing, parse every component file and build the complete output in memory or in a temporary file. If any source, reconciliation, or schema check fails, leave release-metadata.json unchanged and report all failures.
Do not modify component files, classify tickets, invent review data, or infer whether a GitHub issue exists.
Support both repository component formats.
A raw file contains top-level count and tickets fields. Require:
tickets to be an array;count to be a non-negative integer equal to tickets.length;id, a non-empty component, and a schema-supported type.When no tickets in a raw file have classification, derive:
tickets[].component value;ticket_count from tickets.length;reviewed_count: 0;status: "not_started";issue_candidates: 0;0.When tickets are classified, require every ticket in the file to have exactly one of dev-note, misc-dev-note, field-guide, or exclude; do not accept a partially classified file. Require create_issue: false for exclude and create_issue: true for the other three classifications. Derive:
reviewed_count from the number of classified tickets, including exclusions;status: "complete" when all tickets are classified;issue_candidates from dev-note + misc-dev-note + field-guide, excluding exclude.If a raw file has no tickets, require a usable component name in its metadata; otherwise stop because the display name cannot be derived safely.
A reviewed file contains top-level metadata and tickets fields. Read:
metadata.component;metadata.ticket_count and verify it equals tickets.length;metadata.reviewed_count;metadata.status;metadata.statistics.by_classification for dev-note, misc-dev-note, field-guide, and exclude;metadata.statistics.issue_candidates.Require all counts to be non-negative integers. Require reviewed_count <= ticket_count. Require status to be one of not_started, in_progress, or complete. Require:
issue_candidates = dev-note + misc-dev-note + field-guide
Record exclude in component and release classification statistics, but never include it in issue_candidates.
For either format, require every ticket in a file to identify the same component. Use id as the ticket identifier in raw exports and ticket in reviewed files. Require integer identifiers and reject duplicates within or across files.
Derive the slug from the component filename by removing .json. Allow lowercase letters, numbers, hyphens, and underscores: ^[a-z0-9]+(?:[-_][a-z0-9]+)*$.
Create exactly one entry per component file:
{
"name": "Component display name",
"slug": "component-slug",
"file": "components/component-slug.json",
"ticket_count": 0,
"reviewed_count": 0,
"status": "not_started",
"issue_candidates": 0,
"issues_created_count": 0,
"statistics": {
"dev-note": 0,
"misc-dev-note": 0,
"field-guide": 0,
"exclude": 0
}
}
When populating metadata:
Set file relative to 7-1-dev-notes/, not the repository root. Sort entries by name using case-insensitive comparison. Reject duplicate names, slugs, or file paths.
Derive issues_created_count from the number of distinct github_issue_number values on that component's tickets. Require github_issue_number and github_issue_url to appear together, require the number to be a positive integer, and require the URL to identify that number in WordPress/Documentation-Issue-Tracker. Excluded tickets must not have GitHub issue fields. Never discover issue data from ticket prose.
Set metadata as follows:
release: "7.1"schema_version: 2updated_at: the actual write time as an ISO 8601 date-time with an explicit timezone offsetsource_query: preserve it from an existing valid target; otherwise use the common non-empty metadata.source_query from reviewed component files; if neither exists, use the repository's canonical query belowfiltering.excluded_components: ["Build/Test Tools", "Bundled Theme", "WordPress.org Site"]filtering.excluded_focuses: ["tests"]filtering.resolution: ["fixed"]filtering.excluded_types: []https://core.trac.wordpress.org/query?component=!Build%2FTest+Tools&component=!Bundled+Theme&component=!WordPress.org+Site&focuses=!tests&milestone=7.1&resolution=fixed&type=!&group=component&max=300&order=priority&col=id&col=summary&col=type&col=focuses&col=owner&col=time&col=changetime&col=keywords
If reviewed component files contain conflicting source queries, stop and report them. Do not fetch the query; it is provenance metadata only.
Calculate release statistics from the component entries and their tickets:
tickets_total_count_in_query: sum of component ticket_counttickets_indexed_in_component_files: sum of component reviewed_counttickets_reviewed: sum of component reviewed_counttickets_pending_review: total tickets minus reviewed ticketscomponents_total: number of component entriescomponents_completed: count whose status is completecomponents_not_started: count whose status is not_startedby_classification: sum each of the four component classification counts, including excludeby_type: count every ticket by its exact typegithub_issue_candidates: sum of component issue_candidatesgithub_issues_created_count: number of distinct github_issue_number values across all component ticketsA grouped issue may cover tickets in multiple components. Count it once in each affected component's issues_created_count, but only once in the release-level github_issues_created_count. Therefore, the release count is not required to equal the sum of component counts.
Accept any non-empty set of ticket type keys in by_type. Every key must map to a non-negative integer.
Before replacing the target, verify:
count or metadata.ticket_count equals its ticket array length.tickets_total_count_in_query.tickets_total_count_in_query.tickets_indexed_in_component_files equals tickets_reviewed.dev-note, misc-dev-note, and field-guide counts; exclude is not an issue candidate.10. Global classification totals equal their component sums.
11. Every component's created count equals its distinct referenced issues and does not exceed its candidate count.
12. The global created count equals the number of distinct referenced issues across all tickets and does not exceed global candidates.
13. Names, slugs, and file paths are unique.
Validate the complete document against 7-1-dev-notes/release-metadata.schema.json with a JSON Schema Draft 2020-12 validator. Enable format validation so date-time and URI formats are checked. Do not claim schema validation based only on parsing JSON. If no compatible validator is available, stop without writing and report that validation could not be completed.
After every check passes:
7-1-dev-notes/release-metadata.json from the validated temporary file.release-metadata.json changed as a result of this task.Do not commit, push, create a branch, or open a pull request unless the user explicitly requests it.
Report the target path, component count, ticket total, reviewed and pending totals, type totals, classification totals, issue candidate and created counts, and confirmation that the final on-disk file passed schema and reconciliation validation. On failure, state that the target was not modified and list the exact files and checks involved.
Take wordpress/wp-71-release-metadata from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.