diff --git a/.github/standards/github-actions-conventions/vocabulary.json b/.github/standards/github-actions-conventions/vocabulary.json index 8f5d96857a6..195cf7714e4 100644 --- a/.github/standards/github-actions-conventions/vocabulary.json +++ b/.github/standards/github-actions-conventions/vocabulary.json @@ -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": [], @@ -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", @@ -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", @@ -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" }, @@ -148,6 +160,7 @@ "clean", "collect", "compare", + "delete", "deploy", "detect", "download", @@ -161,12 +174,17 @@ "install", "label", "lint", + "log", "measure", "merge", + "monitor", "notify", + "open", "prune", "publish", + "rate", "reconcile", + "reenter", "refine", "regenerate", "repin", @@ -178,6 +196,7 @@ "review", "run", "scan", + "seal", "select", "setup", "sign", @@ -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", diff --git a/.github/standards/github-actions-conventions/vocabulary.schema.json b/.github/standards/github-actions-conventions/vocabulary.schema.json index 31b0b9bbf8c..d62599bb8ad 100644 --- a/.github/standards/github-actions-conventions/vocabulary.schema.json +++ b/.github/standards/github-actions-conventions/vocabulary.schema.json @@ -15,6 +15,9 @@ "reservedJobIds", "activityGrammar", "displayWords", + "properNouns", + "displayNameLevel", + "jobNameExceptions", "exemptions", "apps" ], @@ -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", diff --git a/.github/workflows/maintenance-check-links-online-claude-code-plugins.yml b/.github/workflows/maintenance-check-links-online-claude-code-plugins.yml index 43e28ec6aa7..b0dbbd94214 100644 --- a/.github/workflows/maintenance-check-links-online-claude-code-plugins.yml +++ b/.github/workflows/maintenance-check-links-online-claude-code-plugins.yml @@ -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, @@ -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$' diff --git a/.github/workflows/pr-check-managed-files-hosted.yml b/.github/workflows/pr-check-managed-files-hosted.yml index c620851039c..c43f4973942 100644 --- a/.github/workflows/pr-check-managed-files-hosted.yml +++ b/.github/workflows/pr-check-managed-files-hosted.yml @@ -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