You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This YAML is a recommendation derived from the v8 interface and fleet evidence. It is not an approved standard.
131
+
Issue [#514](https://github.com/PSModule/Process-PSModule/issues/514) must record agreement on the following structural
132
+
decisions before canonical guides, templates, or consumer workflows adopt it:
133
+
134
+
| Decision | Candidate | Alternatives still open |
135
+
| --- | --- | --- |
136
+
| Wrapper scope | Exactly one reusable-workflow job. | Permit repository-specific jobs in the same file, or define pre/post extension jobs. |
137
+
| Trigger ownership | The caller owns manual, schedule, default-branch push, and pull-request triggers. | Move some trigger policy into separate workflows or omit selected event classes. |
138
+
| Pull-request activities | Keep all six listed activity types. | Reduce the activity list if a v8 behavior is intentionally unsupported. |
139
+
| Concurrency | Use the PR-number-or-ref key and never cancel a release-capable run. | Use separate groups per event class or permit cancellation for non-mutating paths. |
140
+
| Permissions | Declare the five current scopes at workflow level. | Introduce settings-based least-privilege profiles or split read-only validation from release work. |
141
+
| Fork behavior | Skip fork-originated pull requests in this credentialed wrapper. | Add a separate secret-free workflow or define another supported fork-validation design. |
142
+
| Credentials | Explicitly map the three v8 credentials. | Define a narrower credential profile for repositories that cannot publish. |
143
+
| Optional surface | Permit only documented `TestData`, workflow inputs, schedule timing, and presentation metadata. | Allow additional extension points after naming and compatibility rules are agreed. |
144
+
130
145
The `v8` reference is the controlled moving major tag for this PSModule-owned workflow. On 2026-08-15, `v8`, `v8.0`,
131
146
and the immutable `v8.0.0` release tag all resolve to commit `5a11e8e8b018faf97017e0416f136a751c026713`.
132
147
`Release-GHRepository`creates and advances major and minor tags by default, while the organization tag ruleset prevents
@@ -147,25 +162,25 @@ to `@v8`; until then, consumers must retain immutable SHA references.
147
162
A major tag never crosses a breaking boundary. `v8` remains on the latest compatible `8.x` release; `v9` begins a new
148
163
fleet campaign. Branch names, `latest`, floating minor tags, and unqualified targets are not accepted pins.
149
164
150
-
## Required elements
165
+
## Candidate common elements
151
166
152
-
| Element | Requirement | Reason |
167
+
| Element | Candidate requirement | Reason |
153
168
| --- | --- | --- |
154
-
| Identity | Keep the standard file, workflow, and job names shown above. | Stable discovery, status checks, and fleet maintenance. |
169
+
| Identity | Keep the candidate file, workflow, and job names shown above. | Stable discovery, status checks, and fleet maintenance. |
155
170
| Pull requests | Target `main` and keep all six listed activity types. | CI, prerelease publication, label changes, and closed-PR cleanup depend on them. |
156
171
| Default-branch push | Keep `push.branches: [main]`. | `v8` authorizes stable releases from the tested default-branch push. |
157
172
| Manual dispatch | Keep `workflow_dispatch`. | Provides the documented default-branch manual release and recovery path. |
158
173
| Schedule | Keep a scheduled health run. | Exercises current dependencies even when repository code is unchanged. |
159
174
| Concurrency | Use the PR-number-or-ref key with `cancel-in-progress: false`. | Cleanup and stable release runs stay distinct; release mutations queue instead of being interrupted. |
160
175
| Permissions | Declare the five documented permissions explicitly. | The called workflow cannot elevate caller permissions. |
161
176
| Fork guard | Skip pull requests whose head repository differs from `github.repository`. | GitHub withholds the required repository secrets from fork pull requests. |
162
-
| Reference | Use the approved internal floating major tag (`v8`). | Compatible owned releases roll out centrally; breaking releases require a new major and campaign. |
177
+
| Reference | Use the intended internal floating major tag (`v8`) after tag governance is enforced. | Compatible owned releases roll out centrally; breaking releases require a new major and campaign. |
163
178
| Credentials | Explicitly map the three required secrets. | Satisfies the `v7+` contract and prevents unrelated secret inheritance. |
164
179
| Scope | Keep the caller as a single delegation job. | Repository-specific automation remains independently understandable and maintainable. |
165
180
166
-
## Supported optional elements
181
+
## Candidate optional elements
167
182
168
-
Optional elements are supported contract variations, not permission to retain historical drift.
183
+
These are evidence-based candidate variations, not approved policy.
169
184
170
185
| Option | When it is appropriate | Constraint |
171
186
| --- | --- | --- |
@@ -177,31 +192,33 @@ Optional elements are supported contract variations, not permission to retain hi
177
192
| Schedule time | Health runs need staggering or a repository-specific maintenance window. | Keep at least one documented schedule unless the repository records why health runs are unnecessary. |
178
193
| `run-name` | A repository needs clearer run presentation. | Presentation must not change job names or routing behavior. |
179
194
180
-
## Out-of-standard variations
195
+
## Variations requiring a decision
181
196
182
-
The following are migration defects or require a documented exception:
197
+
The following differ from the candidate. They are inventory classifications, not policy violations, until #514 records
198
+
an approved structure:
183
199
184
200
- `secrets: inherit`;
185
201
- `APIKey`or `APIKEY` mappings from the pre-`v7` contract;
186
-
- any Process-PSModule reference other than the approved major tag (`v8`), including a branch, `latest`, minor tag,
202
+
- any Process-PSModule reference other than the intended major tag (`v8`), including a branch, `latest`, minor tag,
187
203
exact patch tag, or full commit SHA;
188
204
- missing `push` or `unlabeled` triggers;
189
205
- `cancel-in-progress: true` or the old ref-only concurrency key;
190
206
- trigger-level path filters that bypass Process-PSModule important-file evaluation;
191
207
- unrelated additional jobs in the caller wrapper;
192
208
- omitted documented permissions without a verified settings-based least-privilege profile.
193
209
194
-
Fork-originated pull requests are skipped by the standard caller because reusable-workflow caller jobs cannot select a
210
+
Fork-originated pull requests are skipped by the candidate caller because reusable-workflow caller jobs cannot select a
195
211
GitHub Environment and repository secrets are unavailable to forks. Supporting fork CI requires a separate, secret-free,
196
-
read-only validation workflow; removing the guard is not a supported shortcut.
212
+
read-only validation workflow under this candidate; #514 must approve that boundary.
197
213
198
-
Repository-specific automation should normally use a separate workflow file. That keeps the Process-PSModule wrapper
214
+
The candidate keeps repository-specific automation in a separate workflow file. That keeps the Process-PSModule wrapper
199
215
identical enough for automated comparison while allowing modules to own unrelated schedules, generation, or integration
200
216
tasks.
201
217
202
218
## Rollout boundary
203
219
204
-
This research does not change consumer repositories. The campaign should use the stable slug
220
+
This research does not approve or change consumer repositories. If #514 approves the candidate, the campaign would use
221
+
the stable slug
205
222
`process-v8-major-tag`, one delivery issue, branch, and early draft pull request per repository, and these waves:
206
223
207
224
| Wave | Repositories | Change profile |
@@ -214,17 +231,18 @@ This research does not change consumer repositories. The campaign should use the
214
231
215
232
Before opening leaves:
216
233
217
-
1. Confirm `v8` and `v8.0.0` resolve to the same tested release commit.
218
-
2. Restrict moving major-tag updates to the controlled release identity. Do not start the consumer rollout while another
234
+
1. Record approval of every structural decision above in #514 and update the canonical guides and template.
235
+
2. Confirm `v8` and `v8.0.0` resolve to the same tested release commit.
236
+
3. Restrict moving major-tag updates to the controlled release identity. Do not start the consumer rollout while another
219
237
identity can move `v8`; retain immutable SHA references until this gate is enforced.
220
-
3. Have an organization administrator confirm `PSGALLERY_API_KEY`, `SHELLY_CLIENT_ID`, and `SHELLY_PRIVATE_KEY` coverage
238
+
4. Have an organization administrator confirm `PSGALLERY_API_KEY`, `SHELLY_CLIENT_ID`, and `SHELLY_PRIVATE_KEY` coverage
221
239
in Actions and Dependabot scope. The inventory token can list repository-local secrets but receives `403` for
222
240
organization secret visibility, so inherited coverage is currently unresolved.
223
-
4. Refresh the inventory with `-TargetReference v8`; the starting target count should be `0/60`.
224
-
5. Confirm workflow-only changes are not important release changes. The fleet defaults match only `src/` and
241
+
5. Refresh the inventory with `-TargetReference v8`; the starting target count should be `0/60`.
242
+
6. Confirm workflow-only changes are not important release changes. The fleet defaults match only `src/` and
225
243
`README.md`; `Yaml` explicitly matches `src/`, `tests/`, and `README.md`, so this campaign should not publish modules.
226
244
227
-
Each leaf applies the common caller, retains only the supported optional mappings, and proves the PR path before merge.
228
-
Advance one wave only after the previous wave's push run completes without an unintended release. Completion requires a
229
-
fresh inventory showing `60/60` on `v8`, the complete trigger/concurrency contract, explicit credentials, no inherited
230
-
secrets or old API-key mappings, and no unresolved review or CI failures.
245
+
After approval, each leaf would apply the agreed caller, retain the agreed optional mappings, and prove the PR path
246
+
before merge. Advance one wave only after the previous wave's push run completes without an unintended release.
247
+
Completion would require a fresh inventory showing `60/60` on `v8`, the agreed trigger and concurrency contract,
248
+
the agreed credential mapping, and no unresolved review or CI failures.
Name the caller file `Process-PSModule.yml`, matching [`PSModule/Template-PSModule`](https://github.com/PSModule/Template-PSModule) and every existing module repository. `workflow.yml` is the reusable workflow's own filename inside `PSModule/Process-PSModule` and belongs only in the `uses:` reference.
134
-
135
-
`Process-PSModule`is PSModule-owned automation. Pin it to the approved floating major tag (`v8`) so compatible patch
136
-
and minor releases move across the fleet without one pull request per release. The release workflow owns movement of
137
-
the major tag; an incompatible release creates a new major tag and requires a deliberate fleet campaign. Do not use a
138
-
branch, `latest`, a floating minor tag, or an exact release/commit for the standard caller.
139
-
140
-
This internal-major-tag policy does not apply to third-party actions. External actions remain pinned to their full
141
-
immutable commit SHA with the release version in a trailing comment.
132
+
Name the caller file `Process-PSModule.yml`, matching [`PSModule/Template-PSModule`](https://github.com/PSModule/Template-PSModule) and every existing module repository. `workflow.yml` is the reusable workflow's own filename inside `PSModule/Process-PSModule` and belongs only in the `uses:` reference. Pin the reference to a commit SHA with the version tag in a trailing comment so Dependabot can update it.
142
133
143
134
## Required common files
144
135
@@ -202,11 +193,7 @@ For PSModule module repositories, the requirements are:
202
193
203
194
Every module repository must include `.github/dependabot.yml`. Dependabot is part of the repository supply-chain control, not an optional convenience.
204
195
205
-
Configure the `github-actions` ecosystem. It keeps external SHA-pinned actions current and proposes intentional major
206
-
updates when supported. Compatible Process-PSModule patch and minor releases arrive through its controlled major tag
207
-
instead of a Dependabot pull request. This is what
208
-
[`PSModule/Template-PSModule`](https://github.com/PSModule/Template-PSModule) ships, and it is the default for new
209
-
repositories:
196
+
Configure the `github-actions` ecosystem. It keeps the pinned actions current, including the pinned `PSModule/Process-PSModule` reference in the [caller workflow](#caller-workflow-and-reusable-workflow). This is what [`PSModule/Template-PSModule`](https://github.com/PSModule/Template-PSModule) ships, and it is the default for new repositories:
0 commit comments