Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions .github/standards/github-actions-conventions/vocabulary.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"intake": [
{ "name": "label", "status": "in-use" },
{ "name": "label-needs-triage", "status": "in-use" },
{ "name": "reenter", "status": "in-use" },
{ "name": "triage", "status": "in-use" }
],
"plan": [],
Expand Down Expand Up @@ -47,6 +48,7 @@
},
{ "name": "lint-dockerfile", "status": "in-use" },
{ "name": "merge", "status": "reserved", "purpose": "Merge the pull request." },
{ "name": "rate-merge-risk", "status": "in-use" },
{
"name": "refine",
"status": "reserved",
Expand Down Expand Up @@ -75,11 +77,13 @@
],
"post-merge": [
{ "name": "detect-silent-revert", "status": "in-use" },
{ "name": "select-mutation-range", "status": "in-use" },
{
"name": "sweep-comments",
"status": "reserved",
"purpose": "File late review comments as issues."
},
{ "name": "test-mutation", "status": "in-use" },
{
"name": "verify",
"status": "reserved",
Expand All @@ -99,21 +103,29 @@
],
"maintenance": [
{ "name": "audit-code-review-rules", "status": "in-use" },
{ "name": "audit-lane-runs", "status": "in-use" },
{ "name": "audit-link-check-excludes", "status": "in-use" },
{ "name": "audit-org-architecture-pointer", "status": "in-use" },
{ "name": "audit-pr-convention-pins", "status": "in-use" },
{ "name": "audit-test-selection", "status": "in-use" },
{ "name": "bump-pinned-versions", "status": "in-use" },
{
"name": "check-links",
"status": "in-use",
"purpose": "Check every Markdown link with the network on."
},
{ "name": "check-upstream-drift", "status": "in-use" },
{ "name": "delete-stale-branches", "status": "in-use" },
{ "name": "file-dead-links", "status": "in-use" },
{ "name": "file-recurring-issues", "status": "in-use" },
{ "name": "file-upstream-drift-issues", "status": "in-use" },
{
"name": "measure-skill-edit",
"status": "reserved",
"purpose": "Measure one proposed skill edit against the merged skill on a person's dispatch, and open a draft pull request when it wins."
},
{ "name": "monitor-signals", "status": "in-use" },
{ "name": "reconcile-lost-runs", "status": "in-use" },
{ "name": "reconcile-pr-creation-policy", "status": "in-use" },
{ "name": "repin-account-rotation", "status": "in-use" },
{ "name": "repin-ci-workflows", "status": "in-use" },
Expand Down Expand Up @@ -148,6 +160,7 @@
"clean",
"collect",
"compare",
"delete",
"deploy",
"detect",
"download",
Expand All @@ -161,12 +174,17 @@
"install",
"label",
"lint",
"log",
"measure",
"merge",
"monitor",
"notify",
"open",
"prune",
"publish",
"rate",
"reconcile",
"reenter",
"refine",
"regenerate",
"repin",
Expand All @@ -178,6 +196,7 @@
"review",
"run",
"scan",
"seal",
"select",
"setup",
"sign",
Expand Down Expand Up @@ -258,7 +277,75 @@
"wip": "WIP",
"yq": "yq"
},
"properNouns": [
"App",
"Bash",
"Biome",
"Bun",
"Buildx",
"Chromium",
"Claude",
"Claude Code",
"Dependabot",
"Docker",
"Gitleaks",
"Go",
"Lefthook",
"Markdown",
"Node",
"Pester",
"Playwright",
"Pulumi",
"Pulumi Cloud",
"Python",
"Ruff",
"Windows"
],
"displayNameLevel": "warning",
"jobNameExceptions": [
{
"jobId": "report-ci-status",
"name": "ci-status",
"reason": "Keeps the required context `ci-status` reporting, with the `CI Status` job's conclusion, until the github-iac ci-gate ruleset requires `CI Status`; removed once it does."
}
],
"exemptions": [
{
"path": ".github/workflows/dependabot-fragments.yml",
"repository": "melodic-software/claude-code-plugins",
"rules": ["workflow-filename"],
"reason": "The file name has no stage word; its rename is tracked in melodic-software/claude-code-plugins#15394, which removes this entry."
},
{
"path": ".github/workflows/eval-browser-dispatch.yml",
"repository": "melodic-software/claude-code-plugins",
"rules": ["workflow-filename"],
"reason": "The file name has no stage word; its rename is tracked in melodic-software/claude-code-plugins#15394, which removes this entry."
},
{
"path": ".github/workflows/eval-hill-climb-pass.yml",
"repository": "melodic-software/claude-code-plugins",
"rules": ["workflow-filename"],
"reason": "The file name has no stage word; its rename is tracked in melodic-software/claude-code-plugins#15394, which removes this entry."
},
{
"path": ".github/workflows/security-outside-actor.yml",
"repository": "melodic-software/claude-code-plugins",
"rules": ["workflow-filename"],
"reason": "The file name has no stage word; its rename is tracked in melodic-software/claude-code-plugins#15394, which removes this entry."
},
{
"path": ".github/workflows/pr-feedback-dispatch.yml",
"repository": "melodic-software/claude-code-plugins",
"rules": ["workflow-filename"],
"reason": "The file name is not verb-first after its stage; its rename is tracked in melodic-software/claude-code-plugins#15394, which removes this entry."
},
{
"path": ".github/workflows/post-merge-demotion-alert.yml",
"repository": "melodic-software/claude-code-plugins",
"rules": ["workflow-filename"],
"reason": "The file name is not verb-first after its stage; its rename is tracked in melodic-software/claude-code-plugins#15394, which removes this entry."
},
{
"path": ".github/workflows/release-deploy.yml",
"repository": "melodic-software/github-iac",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
"reservedJobIds",
"activityGrammar",
"displayWords",
"properNouns",
"displayNameLevel",
"jobNameExceptions",
"exemptions",
"apps"
],
Expand Down Expand Up @@ -108,6 +111,30 @@
"propertyNames": { "pattern": "^[a-z][a-z0-9]*$" },
"additionalProperties": { "type": "string", "minLength": 1 }
},
"properNouns": {
"description": "Capitalized words and phrases a sentence-case step name may carry after its first word: product, tool and platform names. A mixed-case word (`GitHub`) or an acronym needs no entry.",
"type": "array",
"uniqueItems": true,
"items": { "type": "string", "pattern": "^\\S+( \\S+)*$" }
},
"displayNameLevel": {
"description": "Level of the job-name and step-name findings: `warning` while the org's repositories adopt the display-name rules, then `error`.",
"enum": ["warning", "error"]
},
"jobNameExceptions": {
"description": "Jobs whose display name is fixed by something outside the convention, each with its exact name and the reason.",
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["jobId", "name", "reason"],
"properties": {
"jobId": { "$ref": "#/$defs/kebab" },
"name": { "type": "string", "minLength": 1 },
"reason": { "$ref": "#/$defs/text" }
}
}
},
"exemptions": {
"description": "The complete exemption list. Nothing else is exempt.",
"type": "array",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Maintenance Check Links Online Claude Code Plugins
name: Maintenance Check Links Online

# SYNC-MANAGED FILE: DO NOT EDIT IN THE CONSUMING REPOSITORY.
# Source of truth: melodic-software/standards,
Expand Down Expand Up @@ -27,12 +27,14 @@ permissions: {}

jobs:
check-links:
name: Check Links
permissions:
contents: read
uses: melodic-software/ci-workflows/.github/workflows/maintenance-check-links-online.yml@main
with:
runner: ubuntu-24.04
# Test data, not links to check: intentionally broken fixtures.
# Test data, not links to check: intentionally broken fixtures, and eval
# cases, whose prompts and graders cite made-up URLs by design.
extra-args: >-
--exclude-path '(^|/)plugins/attribution/skills/audit/evals/fixtures/golden/'
--exclude-path '(^|/)plugins/[^/]+/(skills/[^/]+/)?evals/'
--exclude-path '(^|/)scripts/fixtures/hooks-lifecycle-table\.md$'
6 changes: 3 additions & 3 deletions .github/workflows/pr-check-managed-files-hosted.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,9 @@ concurrency:

jobs:
pr-check-managed-files:
# Equal to the job id so the check context is `pr-check-managed-files`;
# zizmor's pedantic `anonymous-definition` audit flags an unnamed job.
name: pr-check-managed-files
# The check context is this Title Case name (org naming lint, job-name);
# zizmor's pedantic `anonymous-definition` audit also flags an unnamed job.
name: PR Check Managed Files
runs-on: ubuntu-24.04
timeout-minutes: 10
# No checkout step: the action checks out this repository itself, with
Expand Down
Loading