Skip to content

Commit efbf0ab

Browse files
test(client): note future ceiling coverage
2 parents dd3bef4 + ac20490 commit efbf0ab

38 files changed

Lines changed: 1319 additions & 245 deletions

‎.config/dotnet-tools.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"isRoot": true,
44
"tools": {
55
"docfx": {
6-
"version": "2.78.5",
6+
"version": "2.81.0",
77
"commands": [
88
"docfx"
99
],

‎.github/agents/release-manager.agent.md‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,31 @@ Stage 5 Verify [verify-release skill, orch
138138

139139
## Operating rules
140140

141+
- **Separate package and docs provenance.** Packages remain pinned to the exact approved release
142+
tag/SHA. Release events and default manual docs runs use each major's discovered release tag.
143+
Manual `docs_source=latest-branches` instead selects `origin/release/{MAJOR}.x` for every
144+
published major, enabling post-release docs updates without a new product release/tag.
145+
Resolve each selected content ref once, validate its major, and log its immutable SHA separately
146+
from orchestration; missing refs/mismatches fail without fallback. Servicing follows the latest
147+
shipped MINOR, preserving ancestry on promotion. Docs orchestration/scripts/tests/picker assets
148+
always come from current `main`, regardless of the triggering ref. Keep shared AI release skills/instructions on
149+
`main`, which supports ongoing next-version feature development rather than a fixed next-MAJOR
150+
plan. Requiring AI release instructions from trusted `main` prevents an unprotected or untrusted
151+
invoking/work branch from overriding the release process. Runtime docs orchestration also uses
152+
current `main`, independently of the selected tag/branch content. Follow the shared release branch reference.
153+
- **PR-only servicing changes.** Initial release-branch establishment starts at an explicitly
154+
approved baseline and may require separate creation/push authorization. Every later `release/*` change, including docs,
155+
infrastructure, versions, and promotion, must use a reviewed work-branch PR. Never commit/push
156+
changes directly to servicing branches or reset/force-push for promotion. Give servicing children
157+
the current main-based instructions/reference SHA, not stale forked skills; do not copy shared
158+
process files into release content. See [delegation](release-manager/references/delegation.md).
159+
- **Coordinated releases are opt-in.** When requested, keep per-line targets, versions, PRs,
160+
audits, approved SHAs, and CI evidence separate. All approved SHA-pinned drafts must exist before
161+
any human publication; publication is not atomic. Agree on the publication order and GitHub Latest
162+
designation separately from the docs publication-date default.
163+
Require a successful deployed combined run covering all intended labels/content SHAs,
164+
not merely a cancelled earlier run. Follow the
165+
[shared guidance](../skills/shared-resources/release-branches.md#coordinated-releases-opt-in).
141166
- **Human-gated and sequential.** Complete stages strictly in order. Never start a stage whose
142167
predecessor's gate has not been satisfied. If the user asks to skip ahead, say what is unmet and
143168
ask them to confirm before proceeding.

‎.github/agents/release-manager/references/delegation.md‎

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,30 @@ The release-manager session is an **orchestrator**. It stays on whatever branch
44
never checks out or mutates a release branch. Work that creates commits happens in a **child session
55
on its own worktree**, based on the target release branch.
66

7-
This mirrors how [`docs.yml`](../../../workflows/docs.yml) already works: the orchestration scripts run
8-
from a single fixed checkout, while each version's content is built from its own tag in a separate
9-
worktree.
7+
In [`docs.yml`](../../../workflows/docs.yml), orchestration/scripts/tests/picker assets come
8+
from current `main`. Content is built in separate worktrees at immutable full SHAs resolved once
9+
from each discovered published tag by default, or from `origin/release/{MAJOR}.x` for every major
10+
when a manual `latest-branches` refresh is selected. Missing refs and major mismatches fail without
11+
silently substituting another source or `main` content.
12+
13+
Shared AI release instructions also remain on trusted `main`; the child handoff below must not
14+
substitute stale or untrusted skills from a servicing fork. Do not copy AI process files into
15+
servicing content merely to propagate runtime infrastructure.
16+
17+
`main` supports ongoing next-version development as well as shared AI release instructions, not a permanent
18+
next-MAJOR-only plan. Initial release-branch establishment starts at an explicitly approved baseline
19+
and may require separate creation/push authorization. Every subsequent servicing change, including
20+
docs/infrastructure and promotion, must use a reviewed work-branch PR into `release/*`; never commit
21+
or push changes directly there. Promotion preserves ancestry, never reset/force-push. See the
22+
[shared branch policy](../../../skills/shared-resources/release-branches.md#servicing-branch-changes).
1023

1124
## Why
1225

13-
- **Current orchestration.** The agent runs from the checkout it was launched in, so a servicing
14-
release for an older branch still uses the process as it exists in that checkout, not the process
15-
as it existed when the release branch forked.
26+
- **Trusted, current instructions.** AI release skills/instructions come from trusted `main`,
27+
including the version handed to servicing children, not from an unprotected/untrusted work
28+
branch or stale servicing fork. This prevents those branches from overriding the release
29+
process. Runtime docs infrastructure also uses current `main`. Selecting release-branch content
30+
for a manual refresh allows docs updates after publication without a new product release or tag.
1631
- **A clean working tree.** The orchestrator holds long-lived session state -- stage timings, gate
1732
interactions, the progress rail. Checking out branches underneath it risks losing that context
1833
and makes "which branch am I on?" a source of error at exactly the moment precision matters.
@@ -89,6 +104,18 @@ The child's kickoff prompt must carry everything it needs, because it does not s
89104
the previous release tag is not an ancestor of the target.
90105
7. The requirement to **stop at the skill's Step 10b gate** and bring the categorization table and
91106
acknowledgements roster back to you, so the user reviews notes content before a PR exists.
107+
8. The current **main-based release instructions and reference version**: record the full
108+
orchestration SHA and provide the relevant skill/reference content or read-only paths from that
109+
main checkout. Require the child to follow that version, not blindly invoke stale skills in its
110+
servicing fork. If main references are inaccessible, report the blocker instead of substituting
111+
old instructions. Do not copy shared process files into servicing content.
112+
113+
For user-requested coordinated releases, apply the
114+
[opt-in coordination guidance](../../../skills/shared-resources/release-branches.md#coordinated-releases-opt-in).
115+
Keep each child's target/version/PR/audit/CI evidence separate; all approved SHA-pinned drafts
116+
must exist before any human publication. Agree on the order and intended GitHub Latest designation
117+
separately from the docs publication-date default. Publication is not atomic, and a superseding
118+
combined docs deployment must prove coverage of all intended releases.
92119

93120
If app-native child sessions are not available in the current environment, fall back to a git
94121
worktree created from the source/base branch and run the skill there, keeping the orchestrator's

‎.github/agents/release-manager/references/monitoring.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,13 @@ If the user says they published but the API still reports a draft, trust the API
161161

162162
### Stage 4 handoff
163163

164+
Before inviting publication, confirm the planned tag's content major matches. Release-triggered
165+
docs use discovered tags for all published majors; manual runs can select `latest-branches` instead.
166+
Missing selected refs and major mismatches fail without fallback. A missing branch blocks branch-mode
167+
refreshes, not tag-mode publication; obtain separate approval for any branch creation/push.
168+
Runtime scripts/tests/picker assets and trusted AI release instructions come from current `main`,
169+
independent of the triggering tag or manual ref.
170+
164171
Hand off with the action and the watch, so the user knows they do not need to come back and report:
165172

166173
> The draft release for **v2.1.0** is ready. Review the notes line by line, set the prerelease flag

‎.github/agents/release-manager/references/summary-template.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Release Wrap-Up Summary
22

33
Present this summary when the release is complete: the GitHub release is published, both the release
4-
and docs workflows have succeeded, the packages are listed on NuGet.org, and the docs site reflects
5-
the release.
4+
and docs workflows have succeeded, the exact released package version is listed on NuGet.org, and
5+
the docs site reflects the release.
66

77
The tone is short and celebratory. It is a chat message to the user -- **do not commit it, do not
88
post it to GitHub, and do not write it to a file** unless the user explicitly asks.
@@ -27,6 +27,7 @@ Build the timing sections from the `release_stages`, `release_interactions`, `re
2727
| Release | {release URL} |
2828
| Release workflow | {run URL} — {conclusion} |
2929
| Docs workflow | {run URL} — {conclusion} |
30+
| Docs provenance | Orchestration: `main` at `{HEAD-SHA}`; selected source: `{release-tags or latest-branches}`; content: `{ref}` at `{SHA}` for each published major |
3031
| NuGet | {listed package versions, or the package listing URL} |
3132
| Docs | https://csharp.sdk.modelcontextprotocol.io/{version-slug}/ — live |
3233

‎.github/release-process.md‎

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,25 @@ Review the draft release on GitHub, check 'Set as a pre-release' if appropriate,
3030

3131
## Branching
3232

33-
The `main` branch is the next-MAJOR preview and development line; currently, it produces the `2.0.0-preview.*` series. Nightly `cron` CI on `main` publishes CI-suffixed packages to GitHub Packages.
34-
Long-lived `release/{MAJOR}.x` branches are created on demand when a shipped MAJOR needs servicing releases. Every push to a `release/*` branch publishes a CI-suffixed package to GitHub Packages, so servicing CI packages are commit-driven rather than clock-driven.
33+
The `main` branch supports ongoing next-version feature development and owns shared AI release-process instructions; this does not prescribe a next-MAJOR version plan. Nightly `cron` CI on `main` publishes CI-suffixed packages to GitHub Packages.
34+
Long-lived `release/{MAJOR}.x` branches track the latest shipped MINOR within each MAJOR and supply documentation content when a branch refresh is selected. Every push to a `release/*` branch publishes a CI-suffixed package to GitHub Packages, so servicing CI packages are commit-driven rather than clock-driven.
35+
Initial release-branch establishment starts at an explicitly approved baseline and may require separate creation/push authorization. Every subsequent change to `release/*` — fixes, docs, infrastructure, versions, or promotions — goes through a reviewed work-branch PR, never direct commits/pushes to the servicing branch. Promotion to an approved newer MINOR preserves servicing ancestry through that PR, not reset/recreation or force-push.
36+
Keep shared AI release automation skills and instructions on trusted `main`; servicing children follow the current main-based instructions, not stale or untrusted forked skills. Do not copy shared process files into release content. Runtime docs scripts, fixture tests, and picker assets also come from current `main`, independent of the triggering workflow ref.
3537
Short-lived `release-{version}` branches are local prepare-release work branches that become pull requests, such as `release-2.0.0-preview.1` or `release-1.3.1`.
3638
Official NuGet.org publishes occur only when a GitHub Release is created from a branch's tag.
3739
The prepare-release skill asks for the source/base branch first so the release PR targets the same line it assessed.
3840
For the agent-facing, structured version of these rules, see [release-branches.md](skills/shared-resources/release-branches.md).
3941

42+
### Coordinated releases (opt-in)
43+
44+
When the user requests multiple lines ship together, keep each line's targets, versions, approved
45+
SHAs, PRs, audits, and CI evidence separate, and prepare all approved SHA-pinned drafts before
46+
any human publication. Publication is not atomic; agree on the publication order and intended
47+
GitHub Latest designation. A newer combined docs deployment must demonstrably
48+
cover all intended labels and recorded selected-content SHAs; a cancelled earlier run alone is not
49+
success. Package checks remain exact-tag checks, and GitHub Latest is distinct from the docs default
50+
by publication date. See the [shared coordinated-release guidance](skills/shared-resources/release-branches.md#coordinated-releases-opt-in).
51+
4052
## 4. Verify the release
4153

4254
Publishing the release triggers two workflows in parallel. Invoke the `verify-release` skill to
@@ -45,11 +57,15 @@ monitor both and confirm their published outputs:
4557
- **Release** — produces build artifacts and publishes the NuGet packages to NuGet.org. If the job
4658
fails, troubleshoot and re-run the workflow as needed. Verify the package version becomes listed
4759
at [nuget.org/packages/ModelContextProtocol](https://www.nuget.org/packages/ModelContextProtocol).
48-
- **[Publish Docs](workflows/docs.yml)** — rebuilds the versioned documentation site from the
49-
published release tags and deploys it to
60+
- **[Publish Docs](workflows/docs.yml)** — discovers published majors, labels, and default ordering
61+
from GitHub releases, then rebuilds every major's selected content and deploys it to
5062
[csharp.sdk.modelcontextprotocol.io](https://csharp.sdk.modelcontextprotocol.io). Verify the new
51-
version appears in the version picker and that its major-version path serves the updated content.
52-
A content-only docs refresh can be run later via manual dispatch. Its `docs_source` input defaults
53-
to `release-tags` to mirror a release deployment; select `latest-branches` to refresh every
54-
published major from its current `release/{MAJOR}.x` branch, using `main` for its
55-
matching major.
63+
version appears in the picker and its path reflects the selected source. Orchestration/scripts/
64+
tests/picker assets always come from current `main`, with its HEAD SHA logged separately from
65+
content SHAs. Release events and default manual runs use `release-tags`; a manual
66+
`docs_source=latest-branches` refresh uses `origin/release/{MAJOR}.x` for every published major.
67+
All selected refs resolve once to full SHAs and their `VersionPrefix` majors must match; missing
68+
refs or mismatches fail without fallback. After explicit approval, refresh with
69+
`gh workflow run docs.yml --ref main --field docs_source=latest-branches`, or select `release-tags`
70+
to rebuild published tag content. Branch mode permits post-release docs updates without a new
71+
release/tag. Package verification remains against the exact released tag/SHA.

‎.github/skills/prepare-release/SKILL.md‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,15 @@ Generate a human-readable diff of the public API surface between the previous re
169169
170170
### Step 9: Review and Update Documentation
171171

172+
Published docs use discovered release tags by default; a manual `latest-branches` selection uses
173+
`origin/release/{MAJOR}.x` for every published major. Scripts/tests/picker assets always come from
174+
current `main`, as do trusted AI release instructions. Review selected content and orchestration
175+
separately. Selected content refs are pinned once and their `VersionPrefix` majors validated, with
176+
no fallback for missing refs or mismatches. Servicing tracks the latest
177+
shipped MINOR and promotes to an approved newer MINOR through a reviewed, ancestry-preserving PR.
178+
Shared release automation skills remain on `main`. See
179+
[release-branches.md](../shared-resources/release-branches.md#documentation-content-and-orchestration).
180+
172181
Review repository documentation for changes needed to compensate for or adapt to this release:
173182

174183
1. **NuGet package READMEs** -- Run the README content checklist from [references/readme-content.md](references/readme-content.md) and validate code samples:

0 commit comments

Comments
 (0)