Skip to content

feat(skills): add release-readiness-gate skill and release-readiness collection#2422

Open
rekhako wants to merge 6 commits into
microsoft:mainfrom
rekhako:feat/release-readiness-gate
Open

feat(skills): add release-readiness-gate skill and release-readiness collection#2422
rekhako wants to merge 6 commits into
microsoft:mainfrom
rekhako:feat/release-readiness-gate

Conversation

@rekhako

@rekhako rekhako commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a release-readiness-gate skill and a new release-readiness collection. The gate consolidates specialist planner outputs (RAI, Security, Supply Chain, Performance, Privacy, Accessibility) into a single, evidence-grounded Go / Conditional-Go / No-Go decision with a RAG scorecard per pillar, a blocking-gap list, and a sign-off checklist. It decides; it does not remediate.

Changes

  • New skill .github/skills/release-readiness/release-readiness-gate/SKILL.md — documentation-driven playbook (Inputs, Default Pillars with per-pillar Evidence-source mapping, Procedure, Verdict Rules, Handoff, Output Format). No scripts.
  • New release-readiness collection (.yml + .md) bundling the gate skill plus shared governance instructions (disclaimer-language, untrusted-content-boundary, hve-core-location) for isolated-install portability.
  • Brought the gate's output folder under governance: added **/.copilot-tracking/release-readiness/** to the disclaimer-language and untrusted-content-boundary applyTo globs (matching every upstream planner it consolidates).
  • Registered the gate in the hve-core-all bundle; added the release-readiness plugin to marketplace.json (15 total).
  • Regenerated the release-readiness and hve-core-all plugin/collection docs only.

Notes

Validation

  • npm run lint:collections-metadata — 0 errors
  • npm run validate:skills — 0 errors / 0 warnings
  • npm run lint:marketplace — OK (15 plugins)
  • npm run lint:frontmatter — edited/new files pass (0 errors)

Closes #2421

@rekhako
rekhako requested a review from a team as a code owner July 8, 2026 00:26
@codecov-commenter

codecov-commenter commented Jul 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.75%. Comparing base (682b725) to head (b970c40).

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #2422      +/-   ##
==========================================
- Coverage   82.75%   82.75%   -0.01%     
==========================================
  Files         154      154              
  Lines       20844    20841       -3     
  Branches       13       13              
==========================================
- Hits        17250    17246       -4     
- Misses       3592     3593       +1     
  Partials        2        2              
Flag Coverage Δ
docusaurus 94.44% <ø> (ø)
pester 86.26% <ø> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds a new release-readiness collection and a release-readiness-gate skill intended to consolidate multiple planner artifacts into a single Go / Conditional-Go / No-Go release decision and scorecard, and wires it into the existing marketplace + hve-core-all bundle.

Changes:

  • Introduces the documentation-driven release-readiness-gate skill with default pillars, verdict rules, and a scorecard output format.
  • Adds a new release-readiness collection (YAML + docs) and registers it in the marketplace and hve-core-all.
  • Extends shared governance instructions (disclaimer-language, untrusted-content-boundary) to cover .copilot-tracking/release-readiness/**.

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
plugins/release-readiness/skills/release-readiness/release-readiness-gate Adds the plugin’s release-readiness-gate entry (currently as a 1-line pointer file).
plugins/release-readiness/scripts/lib Adds plugin scripts/lib entry (currently as a 1-line pointer file).
plugins/release-readiness/README.md Adds plugin README describing the release-readiness collection contents.
plugins/release-readiness/instructions/shared/untrusted-content-boundary.instructions.md Adds plugin instruction entry (currently as a 1-line pointer file).
plugins/release-readiness/instructions/shared/hve-core-location.instructions.md Adds plugin instruction entry (currently as a 1-line pointer file).
plugins/release-readiness/instructions/shared/disclaimer-language.instructions.md Adds plugin instruction entry (currently as a 1-line pointer file).
plugins/release-readiness/docs/templates Adds plugin docs/templates entry (currently as a 1-line pointer file).
plugins/release-readiness/.github/plugin/plugin.json Defines the new release-readiness plugin metadata and skills root.
plugins/hve-core-all/skills/release-readiness/release-readiness-gate Adds the release-readiness gate entry to the hve-core-all plugin (currently as a 1-line pointer file).
plugins/hve-core-all/README.md Regenerates the hve-core-all plugin README to include the new skill.
plugins/hve-core-all/.github/plugin/plugin.json Registers skills/release-readiness/ in the hve-core-all plugin.
collections/release-readiness.collection.yml Adds the new release-readiness collection manifest.
collections/release-readiness.collection.md Adds the new release-readiness collection documentation.
collections/hve-core-all.collection.yml Registers the new gate skill in the hve-core-all collection manifest.
collections/hve-core-all.collection.md Regenerates the hve-core-all collection documentation to include the new skill.
.github/skills/release-readiness/release-readiness-gate/SKILL.md Adds the release-readiness-gate skill playbook (inputs, pillars, verdict rules, output format, handoff).
.github/plugin/marketplace.json Registers the release-readiness plugin in the marketplace list.
.github/instructions/shared/untrusted-content-boundary.instructions.md Adds .copilot-tracking/release-readiness/** to the untrusted-content boundary applyTo globs.
.github/instructions/shared/disclaimer-language.instructions.md Adds .copilot-tracking/release-readiness/** to the disclaimer-language applyTo globs.

Comment thread .github/skills/release-readiness/release-readiness-gate/SKILL.md Outdated
Comment thread plugins/release-readiness/README.md Outdated
Comment thread collections/release-readiness.collection.md Outdated

| Pillar | Reads as ready when... | Evidence source |
|--------|------------------------|-----------------|
| Reliability & Performance | SLOs defined and load behavior characterized | performance-slo-planner (`performance-plans/`) |

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

performance-slo-planner is the companion skill in #2420, so the two land together. Keeping the reference so the routing stays actionable once #2420 merges.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Update: after weighing this against the merge-order risk raised in the companion thread, we went with the decouple option in dc6ce9a2 — the Reliability & Performance row now reads "No dedicated planner; codebase signals (CI, load-test results, performance-plans/ when available)", matching the existing Observability/Operational Readiness rows. This keeps #2422 self-contained rather than gating it on #2420. Superseding my earlier "keeping the reference" note above.


This skill produces a decision, not a fix. After writing the scorecard:

- **No-Go / Red blockers** — route each blocking gap back to the pillar's owning planner (for example a Security Red → Security Planner, a Privacy Red → Privacy Planner, a Reliability Red → performance-slo-planner). Do not remediate here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

performance-slo-planner is the companion skill in #2420, so the two land together. Keeping the reference so the routing stays actionable once #2420 merges.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Update: after weighing this against the merge-order risk raised in the companion thread, we went with the decouple option in dc6ce9a2 — the Reliability & Performance row now reads "No dedicated planner; codebase signals (CI, load-test results, performance-plans/ when available)", matching the existing Observability/Operational Readiness rows. This keeps #2422 self-contained rather than gating it on #2420. Superseding my earlier "keeping the reference" note above.

Comment thread plugins/release-readiness/scripts/lib Outdated
Comment thread plugins/release-readiness/docs/templates Outdated
Comment thread plugins/release-readiness/instructions/shared/hve-core-location.instructions.md Outdated
Comment thread plugins/release-readiness/instructions/shared/disclaimer-language.instructions.md Outdated

@katriendg katriendg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for this contribution — the skill logic and verdict rules are solid and the handoff contract is well-thought-out. There are a few things to address before merging, most are added inline where possible:

High — collection placement: The new release-readiness collection contains only one skill, and all its upstream planner dependencies (rai-planner, security-planning, privacy-standards, etc.) already live in project-planning. Please drop the standalone collection and add the skill to project-planning.collection.yml instead. We are trying to keep collection count minimal and related items together, and potentially diminish the amount of collections in future.

Medium — skill description verbosity: The description frontmatter is 259 words with USE FOR / DO NOT USE FOR blocks. This hurts Tier 1 semantic invocation precision. Please replace it with a single focused sentence — the content is still available in the skill body.

Medium — playbook section order: The skill body is missing canonical ## Success criteria, ## Constraints, and ## Stop rules sections, and ## Output Format appears before ## Handoff. The content is all there — it just needs to be reorganized into the named sections the prompt-builder template requires.

Low — progressive disclosure: The Default Pillars table and scorecard template are good candidates to extract into references/ and templates/ to keep the skill body compact.

You will also see there are still some issues already logged by Copilot around the plugin generation and symlinks.

Comment thread collections/release-readiness.collection.yml Outdated
Comment thread .github/skills/release-readiness/release-readiness-gate/SKILL.md Outdated
Comment thread .github/skills/release-readiness/release-readiness-gate/SKILL.md Outdated
2. **Specialist plan artifacts** — any existing planner outputs under `.copilot-tracking/` (for example `rai-plans/`, `security-plans/`, `sssc-plans/`, `performance-plans/`, `privacy-plans/`, `accessibility/`).
3. **Codebase signals** — CI config, test coverage, observability wiring, error handling, and any open backlog.

## Default Pillars

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

F4 [Standards] — Progressive disclosure opportunity (Low)

The Default Pillars table is detailed reference material that could live in a references/pillars.md file, loaded on demand rather than inline in SKILL.md. Similarly, the full scorecard template (line 65) is a good candidate for templates/scorecard.md. The prompt-builder guidance recommends keeping SKILL.md compact and using references/ and templates/ for detailed material.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good idea. Deferring to a follow-up (#2430) to keep this PR focused on the placement + structure changes; it moves Default Pillars to references/pillars.md and the scorecard to templates/scorecard.md. Please let me know if you would prefer it to land in this PR instead.

Comment thread .github/skills/release-readiness/release-readiness-gate/SKILL.md
…collection

Go/No-Go release gate consolidating specialist planner outputs into an evidence-grounded ship decision (RAG scorecard, blocking gaps, sign-off, Handoff). Adds a new release-readiness collection bundling the gate skill and shared governance instructions, brings the release-readiness output folder under the disclaimer and untrusted-content globs, registers the gate in hve-core-all, and adds the release-readiness plugin to marketplace.json.
- move collection registration into project-planning; delete standalone collection

- shorten description; restructure into Goal/Success criteria/Constraints/Stop rules

- add Accessibility to consolidated planners; remove em dashes

- regenerate plugins and marketplace

🚀 - Generated by Copilot
@rekhako

rekhako commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Thanks all for the thorough review. Summary of the latest changes:

  • F1 (collection placement): Moved release-readiness-gate into the project-planning collection and deleted the standalone release-readiness collection + plugin, per @katriendg's suggestion. Regenerated collections/plugins/marketplace via npm run plugin:generate. The skill directory stays at .github/skills/release-readiness/... (only the registration moved), consistent with how project-planning already aggregates skills from several directories.
  • F2: Shortened the description to a single line (adopted the suggested text).
  • F3: When to Use -> Goal; added Success criteria / Constraints / Stop rules; moved Output Format after Handoff.
  • Accessibility: added to the consolidated-planner prose and the description.
  • Removed em dashes throughout.
  • "Pointer file" comments: these are proper mode 120000 symlinks (same as every other plugin); GitHub renders a symlink blob as its target path, which is why they read as plain-text pointers. Details in the thread replies.

Deferred: F4 (progressive disclosure), tracked as follow-up #2430.


| Pillar | Reads as ready when... | Evidence source |
|---------------------------|----------------------------------------------------|---------------------------------------------------------------------------|
| Reliability & Performance | SLOs defined and load behavior characterized | performance-slo-planner (`performance-plans/`) |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Both the Default Pillars table (here) and the Handoff section (line 85) reference performance-slo-planner as the owning planner for Reliability & Performance, but that skill is in companion PR #2420 and has not yet merged. If this PR lands first, the routing guidance for that pillar is non-actionable.

Two options to consider:

Option A — enforce merge order. Merge #2420 before or alongside this PR. The reference is accurate from day one and requires no cleanup.

Option D — mirror the no-dedicated-planner pattern. The Observability and Operational Readiness rows already use "No dedicated planner; codebase signals (...)." Applying the same pattern to Reliability & Performance until #2420 lands is self-explanatory and requires no annotation cleanup afterward:

| Reliability & Performance | SLOs defined and load behavior characterized | No dedicated planner until #2420 lands; codebase signals (CI, load test results, `performance-plans/` when available) |

Once #2420 merges, the Evidence column for this row can be updated in that PR to point to the new planner. Option D has no time-bomb annotation to remove later.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Went with Option D in dc6ce9a2. The Reliability & Performance evidence source now reads No dedicated planner; codebase signals (CI, load-test results, performance-plans/ when available), matching the existing Observability and Operational Readiness rows. This keeps #2422 self-contained (no merge-order dependency on #2420) and, per your point, leaves no time-bomb annotation to remove later — I deliberately dropped the #2420 from the wording so it reads as a steady-state pattern rather than a dated placeholder. When #2420 lands it can update this row to point at the new planner as part of its own diff. I also fixed the Handoff example, which referenced the same non-existent planner, to route a Supply Chain Red -> SSSC Planner and added a line covering how no-dedicated-planner pillars are handed off. Thanks!

- **Go:** hand the signed-off scorecard to the launch owner as the go/no-go record.
- Re-run the gate whenever a routed gap closes or a specialist artifact changes, so the verdict reflects current evidence.

## Output Format

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The ## Constraints section correctly mandates carrying the professional-review disclaimer, but the output template here does not include a placeholder for it. This PR extends disclaimer-language.instructions.md to apply to .copilot-tracking/release-readiness/**, so the obligation is active. A user following the template verbatim will produce a scorecard missing the required disclaimer.

Suggested fix: add a blockquote disclaimer near the top of the template:

# Release Readiness Scorecard: <app> (<scope>)

> **AI-assisted assessment:** This scorecard was produced with AI assistance and requires review and validation by a qualified human reviewer before use in a launch decision. It does not constitute professional advice.

**Verdict:** Go | Conditional-Go | No-Go
**Date:** <date> · **Rubric:** <trust bar source or "default pillars">

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch — added the disclaimer to the scorecard template in dc6ce9a2, using the blockquote you suggested:

AI-assisted assessment: This scorecard was produced with AI assistance and requires review and validation by a qualified human reviewer before use in a launch decision. It does not constitute professional advice.

It now sits directly under the # Release Readiness Scorecard heading, so anyone following the template verbatim produces output that satisfies the disclaimer-language.instructions.md obligation this PR activates for .copilot-tracking/release-readiness/**. Thanks!

@jkim323

jkim323 commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

One observation I noticed: The verdict rules currently leave a reachable state with no computable result. Step 3 defines Red as either a launch-blocking gap or no evidence. However, Step 4 independently allows that gap to be tagged Non-blocking or Blocking. If all other pillars are Green, this state matches none of the verdicts:

  • Not No-Go, because there is no Blocking gap
  • Not Conditional-Go, because there are no Amber pillars
  • Not Go, because one pillar is Red

This conflicts with the success criterion that exactly one verdict is computed and with the “evidence or it didn’t happen” constraint.

Suggestion: Could we make the verdict partition exhaustive by treating Red as intrinsically launch-blocking? I this preserves scope awareness while ensuring missing evidence cannot accidentally become non-blocking. A small truth-table example covering this case would also help prevent regression.

  • Red: a launch-blocking gap or missing evidence; any Red produces No-Go
  • Amber: a known, bounded gap that is tolerable for the stated scope
  • Conditional-Go: no Red pillars and at least one Amber pillar with named conditions and owners
  • Go: all pillars Green or justified N/A

Any Red pillar (including Red for missing evidence) is now launch-blocking and yields No-Go, closing a reachable state that matched no verdict. Scope/tolerability is decided at RAG scoring time, so a Red gap can no longer be tagged non-blocking. Adds a worked truth-table example.

Addresses review feedback from @jkim323 on microsoft#2422.
@rekhako

rekhako commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

@jkim323 great catch, thank you. You're right that a Red-for-missing-evidence pillar tagged Non-blocking fell through all three verdicts. Fixed by making the partition exhaustive: any Red is launch-blocking (Red -> No-Go). I also moved the scope/tolerability decision into the RAG scoring itself (a gap tolerable for the stated scope is Amber; a launch-blocking one is Red), so a Red gap can no longer be tagged non-blocking. Added a worked truth-table example that includes the missing-evidence case. Pushed in 8dfd3aa. This keeps scope-awareness while guaranteeing exactly one verdict. Thanks again!

1 similar comment
@rekhako

rekhako commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

@jkim323 great catch, thank you. You're right that a Red-for-missing-evidence pillar tagged Non-blocking fell through all three verdicts. Fixed by making the partition exhaustive: any Red is launch-blocking (Red -> No-Go). I also moved the scope/tolerability decision into the RAG scoring itself (a gap tolerable for the stated scope is Amber; a launch-blocking one is Red), so a Red gap can no longer be tagged non-blocking. Added a worked truth-table example that includes the missing-evidence case. Pushed in 8dfd3aa. This keeps scope-awareness while guaranteeing exactly one verdict. Thanks again!

@rekhako

rekhako commented Jul 16, 2026

Copy link
Copy Markdown
Contributor Author

Hi @katriendg @rezatnoMsirhC — gentle follow-up on this one. I pushed an update on Jul 13 ( ix: make release-readiness-gate verdict rules exhaustive) that addresses the earlier feedback, and it's ready for another look. Could you please take a moment to re-review when you can? Thank you!

rekhako and others added 3 commits July 21, 2026 13:42
…lanner ref

L101: add AI-assisted professional-review disclaimer blockquote to the release-readiness scorecard template so output satisfies the disclaimer-language obligation this skill activates for .copilot-tracking/release-readiness/**.

L33: replace the not-yet-merged performance-slo-planner reference with the no-dedicated-planner codebase-signals pattern (matching Observability/Operational Readiness), decoupling this PR from microsoft#2420; update the Handoff example to a real planner (SSSC).
…s-gate

# Conflicts:
#	collections/hve-core-all.collection.md
#	plugins/hve-core-all/README.md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Before this merges, could you run the hve-builder skill in review mode against this SKILL.md and share or link the findings? New prompt-engineering artifacts in this repo are expected to go through a systematic rubric pass. A clean or addressed report would give the review a complete paper trail.

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.

feat(skills): release-readiness-gate skill + release-readiness collection

6 participants