Skip to content

fix(checkpoints): standardize on target/pattern schema, broaden cosign formats#20

Merged
CybotTM merged 2 commits intomainfrom
feature/standardize-checkpoint-schema
May 5, 2026
Merged

fix(checkpoints): standardize on target/pattern schema, broaden cosign formats#20
CybotTM merged 2 commits intomainfrom
feature/standardize-checkpoint-schema

Conversation

@CybotTM
Copy link
Copy Markdown
Member

@CybotTM CybotTM commented May 5, 2026

Summary

  • Convert legacy path: / content: / command: fields to target: / pattern:. The runner expects target/pattern (per references/checkpoints-schema.md) — the old fields meant every GR-* check returned "Target file not found"; after this change all GR checkpoints actually run.
  • GR-10 (cosign signature) now accepts .bundle (Sigstore) OR .sig + .pem — the format actually produced by netresearch/skill-repo-skill release workflow.
  • GR-5 (workflow_dispatch) demoted to info: the netresearch skill-repo release workflow is intentionally tag-push-only.

Test plan

  • Verified locally with bash /home/sme/p/automated-assessment-skill/main/skills/automated-assessment/scripts/run-checkpoints.sh --skill github-release — GR-* checkpoints now produce real PASS/FAIL results instead of "Target file not found"
  • GR-10 PASS on a real netresearch skill release with .sig + .pem artifacts; PASS on a Sigstore .bundle
  • GR-5 surfaces as info, not failure, on tag-push-only workflows
  • All commits SSH-signed and DCO Signed-off-by present

Copilot AI review requested due to automatic review settings May 5, 2026 09:52
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the checkpoints.yaml file for the GitHub release skill, standardizing property names like target and pattern, updating script paths to vendor/bin/, and introducing new checks for reusable workflows and changelog link integrity. Feedback focuses on logic errors in the command patterns: the tag integrity check (GR-6) appears to have inverted exit logic that would cause false positives, and the jq filters for release assets (GR-9, GR-10) require the -e flag to correctly communicate success or failure via exit codes.

Comment thread skills/github-release/checkpoints.yaml Outdated
Comment thread skills/github-release/checkpoints.yaml Outdated
Comment thread skills/github-release/checkpoints.yaml Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the github-release skill’s checkpoint definitions to match the runner’s expected target/pattern schema (instead of legacy path/content/command), and adjusts a few release-related checks (notably cosign signature formats and workflow_dispatch severity) so checkpoints produce meaningful PASS/FAIL results.

Changes:

  • Standardize checkpoint field names to target / pattern so mechanical checks execute correctly.
  • Broaden GR-10 to accept additional cosign artifact naming conventions, and demote GR-5 (workflow_dispatch) to info.
  • Add new release-pipeline integrity checks (GR-12, GR-13) and adjust several command-based checks.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
skills/github-release/checkpoints.yaml Converts legacy checkpoint fields to target/pattern, tweaks severities, expands cosign artifact handling, and adds new command-based integrity checks.
docs/superpowers/specs/2026-04-16-unified-eval-schema-design.md Removed the unified eval schema design spec document.
docs/superpowers/plans/2026-04-16-unified-eval-schema.md Removed the unified eval schema implementation plan document.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread skills/github-release/checkpoints.yaml Outdated
Comment thread skills/github-release/checkpoints.yaml Outdated
CybotTM added 2 commits May 5, 2026 12:00
…n formats

The runner expects field names target: and pattern: (with command: as alias
for type=command). github-release was using path:/content:/command:, so
the runner skipped every check with 'Target file not found:'. Convert all
13 checkpoints to the standard schema and they actually run again.

Side fixes:
- GR-1..GR-13 now run against repos that delegate to the netresearch
  skill-repo-skill release workflow, because the local release.yml grants
  id-token + attestations + tag triggers (which is exactly what the
  reusable workflow needs). Inline patterns that match the local file
  prove the local file is correctly wired into the reusable workflow.
- GR-5 demoted to info: the upstream skill-repo-skill release workflow
  is intentionally tag-push-only because workflow_dispatch + auto-bump
  produced unsigned tags. Inline workflows that opt in are fine, but
  it's not required.
- GR-6 reformulated without $() / ; / && (forbidden by the runner's
  command whitelist). Still asserts no lightweight tags.
- GR-7 / GR-12 / GR-13 reference vendor/bin/ paths (the runner only
  whitelists vendor/bin/* — $CLAUDE_PLUGIN_ROOT/scripts is rejected).
  These checkpoints work when the validator scripts are installed there.
- GR-10 (cosign signature) now accepts .bundle (modern Sigstore) OR
  .sig + .pem (the detached format actually produced by the netresearch
  skill-repo-skill release workflow).

Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
…duplicates

Address reviewer findings on the checkpoint schema standardization:

- GR-6: wrap the lightweight-tag detector in `test -z "$(...)"` so the
  command exits 0 only when no offenders are found. The bare `grep -v`
  pattern inverted the meaning (exit 0 when offenders exist) and exited 1
  on empty output (no tags at all). Now: annotated-only -> 0, any
  lightweight -> 1, empty repo -> 0.

- GR-9: add `jq -e` so a missing SBOM asset produces a non-zero exit
  instead of printing the literal string "false" with exit 0, which the
  runner would treat as success.

- GR-10: same `jq -e` fix, plus tighten the predicate to require either
  a `.bundle` OR the pair (`.sig` AND `.pem`). The previous regex
  `\\.(bundle|sig|pem)$` accepted a lone `.sig` or lone `.pem`, which is
  not a valid cosign signature set.

- Drop the legacy old-schema GR-12/GR-13 entries that re-appeared after
  rebasing onto main (main introduced them with path:/command:; this
  branch already carries the target:/pattern: replacements). Removing
  the duplicates resolves the validator's "duplicate checkpoint IDs"
  failure.

Verified locally:
- `python3 -c "yaml.safe_load(...)"` + dup-id check from
  netresearch/skill-repo-skill validate.yml: 13 mechanical + 3 llm
  checkpoints, no duplicates.
- `yamllint` (with the validator's inline config) clean.
- Manual jq/test runs cover bundle-only, sig+pem, lone-sig, lone-pem,
  none, annotated-only tags, lightweight tags, and empty repo.

Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
@CybotTM CybotTM force-pushed the feature/standardize-checkpoint-schema branch from 28a5393 to 88972c1 Compare May 5, 2026 10:03
@CybotTM CybotTM merged commit d1e305c into main May 5, 2026
7 checks passed
@CybotTM CybotTM deleted the feature/standardize-checkpoint-schema branch May 5, 2026 10:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants