code-foundry 1.9.6 → 1.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/CONTRIBUTING.md +27 -33
- package/.github/SECURITY.md +1 -2
- package/.github/code-foundry.yml +1 -1
- package/.github/workflows/opencode-security_self-ci.yml +2 -2
- package/.github/workflows/release_self-ci.yml +0 -1
- package/.github/workflows/validation.yml +7 -6
- package/AGENTS.md +3 -3
- package/CHANGELOG.md +8 -0
- package/package.json +1 -1
- package/src/commands/sync.mjs +33 -13
- package/src/lib/validation-policy.mjs +7 -9
package/.github/CONTRIBUTING.md
CHANGED
|
@@ -19,7 +19,7 @@ Agents must follow these rules before changing code:
|
|
|
19
19
|
1. Read this file, `AGENTS.md`, and the relevant project documentation.
|
|
20
20
|
2. Inspect the current branch, worktree, remotes, and existing changes before editing.
|
|
21
21
|
3. Preserve user-owned changes. Never discard or overwrite unrelated work.
|
|
22
|
-
4. Branch from `
|
|
22
|
+
4. Branch from `main` and target pull requests at `main`; do not push directly to `main`.
|
|
23
23
|
5. Keep the change focused. Do not expand scope without documenting why.
|
|
24
24
|
6. Run the applicable format, lint, type-check, build, unit, performance, integration, E2E, smoke, and security checks.
|
|
25
25
|
7. Report exact validation results, skipped checks, known limitations, and remaining risks.
|
|
@@ -35,22 +35,20 @@ Agents must not:
|
|
|
35
35
|
## Branching model
|
|
36
36
|
|
|
37
37
|
```text
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
feat/* fix/* chore/* ──PR──▶
|
|
42
|
-
docs/* test/* refactor/* │
|
|
43
|
-
|
|
44
|
-
└── integration branch
|
|
38
|
+
release PR
|
|
39
|
+
┌──────────────┐
|
|
40
|
+
│ ▼
|
|
41
|
+
feat/* fix/* chore/* ──PR──▶ main
|
|
42
|
+
docs/* test/* refactor/* │
|
|
43
|
+
└── protected release branch
|
|
45
44
|
```
|
|
46
45
|
|
|
47
|
-
| Branch | Purpose | Contribution rule
|
|
48
|
-
| -------------------------------------------------------------- | ------------------------ |
|
|
49
|
-
| `main` | Protected release branch | Merge through
|
|
50
|
-
| `
|
|
51
|
-
| `feat/*`, `fix/*`, `chore/*`, `refactor/*`, `docs/*`, `test/*` | Focused work | Branch from `staging`; keep changes small and reviewable. |
|
|
46
|
+
| Branch | Purpose | Contribution rule |
|
|
47
|
+
| -------------------------------------------------------------- | ------------------------ | ------------------------------------------------------ |
|
|
48
|
+
| `main` | Protected release branch | Merge through pull requests only. No direct pushes. |
|
|
49
|
+
| `feat/*`, `fix/*`, `chore/*`, `refactor/*`, `docs/*`, `test/*` | Focused work | Branch from `main`; keep changes small and reviewable. |
|
|
52
50
|
|
|
53
|
-
The Git workflow is `
|
|
51
|
+
The Git workflow is `direct`: topic branches **squash** directly into `main`, and the Release Please version PR **squashes** into `main` (`release_merge_strategy: squash`). Release automation never defaults to a merge method and never merges with `--admin`; `code-foundry doctor` and `code-foundry sync` fail closed on any other release merge strategy. This repository has one protected integration and release branch: `main`.
|
|
54
52
|
|
|
55
53
|
## Before you start
|
|
56
54
|
|
|
@@ -67,8 +65,8 @@ The Git workflow is `staging-release`: topic branches **squash** into `staging`,
|
|
|
67
65
|
```sh
|
|
68
66
|
git status --short --branch
|
|
69
67
|
git fetch origin
|
|
70
|
-
git switch
|
|
71
|
-
git pull --ff-only origin
|
|
68
|
+
git switch main
|
|
69
|
+
git pull --ff-only origin main
|
|
72
70
|
git switch -c feat/short-description
|
|
73
71
|
```
|
|
74
72
|
|
|
@@ -93,7 +91,7 @@ Run the checks relevant to the change. For a release or security-sensitive chang
|
|
|
93
91
|
|
|
94
92
|
For maintainers, trusted contributors, and automation agents:
|
|
95
93
|
|
|
96
|
-
1. Start from an up-to-date `
|
|
94
|
+
1. Start from an up-to-date `main` branch.
|
|
97
95
|
2. Create a focused branch with a descriptive prefix.
|
|
98
96
|
3. Inspect the relevant code and tests before making changes.
|
|
99
97
|
4. Implement the smallest complete change.
|
|
@@ -107,9 +105,9 @@ For maintainers, trusted contributors, and automation agents:
|
|
|
107
105
|
chore(ci): cache Rust dependencies
|
|
108
106
|
```
|
|
109
107
|
|
|
110
|
-
8. Push the branch and open a pull request into `
|
|
108
|
+
8. Push the branch and open a pull request into `main`.
|
|
111
109
|
9. Address review feedback and failed checks on the same branch.
|
|
112
|
-
10. Merge with a squash after required checks pass and the change is ready; feature PRs land on `
|
|
110
|
+
10. Merge with a squash after required checks pass and the change is ready; feature PRs land on `main` with squash merges.
|
|
113
111
|
|
|
114
112
|
### Internal agent handoff
|
|
115
113
|
|
|
@@ -130,11 +128,11 @@ For contributors who do not have direct write access:
|
|
|
130
128
|
|
|
131
129
|
1. Fork the repository on GitHub.
|
|
132
130
|
2. Add the upstream repository as `upstream`.
|
|
133
|
-
3. Branch from the upstream `
|
|
131
|
+
3. Branch from the upstream `main` branch.
|
|
134
132
|
4. Make a focused change and follow the local setup instructions.
|
|
135
133
|
5. Add tests and documentation for behavior changes.
|
|
136
134
|
6. Run all applicable checks locally.
|
|
137
|
-
7. Push to the fork and open a pull request targeting `
|
|
135
|
+
7. Push to the fork and open a pull request targeting `main`.
|
|
138
136
|
8. Explain the problem, proposed solution, validation, compatibility, and rollout impact.
|
|
139
137
|
9. Address maintainer feedback without rewriting unrelated history or scope.
|
|
140
138
|
|
|
@@ -157,17 +155,14 @@ Keep pull requests focused and reviewable. Include screenshots or recordings for
|
|
|
157
155
|
|
|
158
156
|
| Event | Expected automation |
|
|
159
157
|
| -------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
160
|
-
| Draft pull request targeting `
|
|
161
|
-
| Ready pull request targeting `
|
|
162
|
-
| Draft ordinary pull request targeting `main` | No runner-heavy validation; run local checks before requesting review |
|
|
163
|
-
| Ready ordinary pull request targeting `main` | Audit validation: CI, full tests, Security, and CodeQL, ending in `Validation / Gate` |
|
|
158
|
+
| Draft pull request targeting `main` | No runner-heavy validation; run local checks before requesting review |
|
|
159
|
+
| Ready pull request targeting `main` | Audit validation: CI, full tests, Security, and CodeQL, ending in `Validation / Gate` |
|
|
164
160
|
| Exact Release Please pull request targeting `main` | Release-policy validation only, ending in `Validation / Gate` |
|
|
165
161
|
| Scheduled or manual validation | Full audit tier |
|
|
166
162
|
| Push to a working branch | Draft PR workflow |
|
|
167
|
-
| Push to `staging` | Promotion PR workflow; canonical validation waits for the PR event |
|
|
168
163
|
| Push to `main` | Release workflow; canonical validation already ran on the merged PR |
|
|
169
164
|
|
|
170
|
-
Draft pull requests do not start
|
|
165
|
+
Draft pull requests do not start validation. Marking a pull request ready for review starts the applicable validation tier. Convert it back to draft after an update, then mark it ready again after every update so the required checks attach to the current head. Converting it to draft runs only the lightweight cancellation control.
|
|
171
166
|
|
|
172
167
|
Pull-request validation keys concurrency by event and pull-request head, so a newer update cancels its superseded run. Scheduled and manual audits use a separate caller pinned to the protected default branch; this prevents caller-selected runtime code from executing with default-branch cache access. Both callers use the mode-aware orchestrator, which fans out only the required jobs and concludes with the stable aggregate gate.
|
|
173
168
|
|
|
@@ -181,11 +176,10 @@ Security checks can be skipped when repository visibility or the GitHub plan doe
|
|
|
181
176
|
|
|
182
177
|
## Review and merge protocol
|
|
183
178
|
|
|
184
|
-
| Change
|
|
185
|
-
|
|
|
186
|
-
| Working branch
|
|
187
|
-
|
|
|
188
|
-
| Release Please version PR | `main` | Rebase (`release_merge_strategy`, fails closed) | Validation gate and release policy pass |
|
|
179
|
+
| Change | Target | Merge method | Merge gate |
|
|
180
|
+
| ------------------------- | ------ | --------------------------------- | --------------------------------------- |
|
|
181
|
+
| Working branch | `main` | Squash | All applicable required checks pass |
|
|
182
|
+
| Release Please version PR | `main` | Squash (`release_merge_strategy`) | Validation gate and release policy pass |
|
|
189
183
|
|
|
190
184
|
Reviewers focus on correctness, security, maintainability, test coverage, operational impact, and compatibility. Authors remain responsible for responding to feedback and verifying the final commit.
|
|
191
185
|
|
|
@@ -195,7 +189,7 @@ Report vulnerabilities privately using [SECURITY.md](./SECURITY.md), never in a
|
|
|
195
189
|
|
|
196
190
|
For an urgent production or security issue:
|
|
197
191
|
|
|
198
|
-
1. Create a focused branch from `
|
|
192
|
+
1. Create a focused branch from `main`.
|
|
199
193
|
2. Document the urgency and affected systems without exposing secrets.
|
|
200
194
|
3. Open a pull request and run the narrowest complete validation available.
|
|
201
195
|
4. Request the appropriate maintainer review.
|
package/.github/SECURITY.md
CHANGED
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
## Supported Versions
|
|
6
6
|
|
|
7
|
-
The latest commit on `
|
|
7
|
+
The latest commit on `main` receives security patches.
|
|
8
8
|
|
|
9
9
|
| Branch | Supported |
|
|
10
10
|
| ---------------- | --------- |
|
|
11
|
-
| `staging` | ✅ |
|
|
12
11
|
| `main` | ✅ |
|
|
13
12
|
| Feature branches | ❌ |
|
|
14
13
|
|
package/.github/code-foundry.yml
CHANGED
|
@@ -30,13 +30,13 @@ jobs:
|
|
|
30
30
|
id: detect
|
|
31
31
|
env:
|
|
32
32
|
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
|
|
33
|
-
|
|
33
|
+
OPENCODE_SECURITY: ${{ vars.OPENCODE_SECURITY }}
|
|
34
34
|
run: |
|
|
35
35
|
enabled=false
|
|
36
36
|
token=false
|
|
37
37
|
# OpenCode Security is controlled only by the repository or
|
|
38
38
|
# organization variable. An unset value is disabled.
|
|
39
|
-
if [ "$
|
|
39
|
+
if [ "$OPENCODE_SECURITY" = "true" ]; then
|
|
40
40
|
enabled=true
|
|
41
41
|
fi
|
|
42
42
|
if [ -n "$OPENCODE_API_KEY" ]; then token=true; fi
|
|
@@ -80,7 +80,7 @@ permissions:
|
|
|
80
80
|
jobs:
|
|
81
81
|
ci:
|
|
82
82
|
name: CI
|
|
83
|
-
if: vars.CI_BILLING_PAUSED != 'true' && (inputs.mode == 'fast' || inputs.mode == 'audit')
|
|
83
|
+
if: vars.CI_BILLING_PAUSED != 'true' && (inputs.mode == 'fast' || inputs.mode == 'audit' || inputs.mode == 'release')
|
|
84
84
|
uses: ./.github/workflows/ci.yml
|
|
85
85
|
with:
|
|
86
86
|
runtime-repository: ${{ inputs.runtime-repository }}
|
|
@@ -92,7 +92,7 @@ jobs:
|
|
|
92
92
|
|
|
93
93
|
test:
|
|
94
94
|
name: Test
|
|
95
|
-
if: vars.CI_BILLING_PAUSED != 'true' && (inputs.mode == 'fast' || inputs.mode == 'audit')
|
|
95
|
+
if: vars.CI_BILLING_PAUSED != 'true' && (inputs.mode == 'fast' || inputs.mode == 'audit' || inputs.mode == 'release')
|
|
96
96
|
uses: ./.github/workflows/test.yml
|
|
97
97
|
with:
|
|
98
98
|
runtime-repository: ${{ inputs.runtime-repository }}
|
|
@@ -106,7 +106,7 @@ jobs:
|
|
|
106
106
|
|
|
107
107
|
security:
|
|
108
108
|
name: Security
|
|
109
|
-
if: vars.CI_BILLING_PAUSED != 'true' && inputs.mode == 'audit'
|
|
109
|
+
if: vars.CI_BILLING_PAUSED != 'true' && (inputs.mode == 'audit' || inputs.mode == 'release')
|
|
110
110
|
uses: ./.github/workflows/security.yml
|
|
111
111
|
with:
|
|
112
112
|
runtime-repository: ${{ inputs.runtime-repository }}
|
|
@@ -129,9 +129,10 @@ jobs:
|
|
|
129
129
|
|
|
130
130
|
# Aggregate check: "Validation / Gate" (caller job name + this job name).
|
|
131
131
|
# Always evaluates; only jobs required for the mode must have succeeded.
|
|
132
|
-
# The release tier runs
|
|
133
|
-
#
|
|
134
|
-
#
|
|
132
|
+
# The release tier runs the full audit suite so Release Please pull requests
|
|
133
|
+
# expose no neutral suite checks. Its generated release diff policy executes
|
|
134
|
+
# as a conditional step below, so ordinary pull requests still render no
|
|
135
|
+
# skipped release-policy row.
|
|
135
136
|
gate:
|
|
136
137
|
name: Gate
|
|
137
138
|
needs: [ci, test, security, codeql]
|
package/AGENTS.md
CHANGED
|
@@ -71,11 +71,11 @@ Ask for clarification when a missing decision would materially change the implem
|
|
|
71
71
|
8. Run the broadest applicable validation available.
|
|
72
72
|
9. Report what changed, exact checks and results, skipped checks with reasons, risks, and remaining work.
|
|
73
73
|
|
|
74
|
-
For normal feature work, branch from `
|
|
74
|
+
For normal feature work, branch from `main` and target pull requests at `main`. Treat `main` as the protected release branch. Follow `.github/CONTRIBUTING.md` for the complete internal and external contribution flow.
|
|
75
75
|
|
|
76
76
|
## Git workflow and merging
|
|
77
77
|
|
|
78
|
-
This repository uses the `
|
|
78
|
+
This repository uses the `direct` workflow: topic branches **squash** directly into `main`, and the Release Please version PR **squashes** into `main` (`release_merge_strategy: squash`). Feature and release PRs land on `main` with squash merges. No integration branch exists; all pull requests target `main`.
|
|
79
79
|
|
|
80
80
|
Merge only with the repository's canonical method. Never merge with `--admin`, never default or auto-select a merge method, and never use a method the branch ruleset does not allow. When in doubt, prefer the merge button's configured method and verify the ruleset after merging. Check `.github/CONTRIBUTING.md` for the complete flow and merge table.
|
|
81
81
|
|
|
@@ -149,7 +149,7 @@ If a check cannot run, state the exact reason. A skipped check is not a passing
|
|
|
149
149
|
## GitHub workflows and configuration
|
|
150
150
|
|
|
151
151
|
- Keep workflows concise, independently runnable, and safe to re-run.
|
|
152
|
-
- Use `push` for `main
|
|
152
|
+
- Use `push` for `main` and `pull_request` for `main` unless a workflow has a documented event-specific reason.
|
|
153
153
|
- Give workflows clear names and jobs concise names; avoid repeating the workflow name in the job name.
|
|
154
154
|
- Use per-workflow concurrency groups that cancel superseded runs while allowing independent workflows to run in parallel.
|
|
155
155
|
- Keep setup language-aware and cache dependency downloads by lockfile; do not cache secrets, `node_modules`, virtual environments, or broad build output without a measured reason.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.9.7](https://github.com/0xPlayerOne/code-foundry/compare/v1.9.6...v1.9.7) (2026-09-08)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **ci:** run full validation on release PRs ([#517](https://github.com/0xPlayerOne/code-foundry/issues/517)) ([01a3555](https://github.com/0xPlayerOne/code-foundry/commit/01a355505d6372dc26e2d917e0e6d566ab25546c))
|
|
9
|
+
* **sync:** remove direct topology staging residue ([#515](https://github.com/0xPlayerOne/code-foundry/issues/515)) ([2765e6a](https://github.com/0xPlayerOne/code-foundry/commit/2765e6a6f66137d37f3d65f8eb8311ba28eeafd7))
|
|
10
|
+
|
|
3
11
|
## [1.9.6](https://github.com/0xPlayerOne/code-foundry/compare/v1.9.5...v1.9.6) (2026-09-08)
|
|
4
12
|
|
|
5
13
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "code-foundry",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.7",
|
|
4
4
|
"description": "A fast, language-aware repository factory for agent-ready workflows, testing, security, and release automation.",
|
|
5
5
|
"homepage": "https://github.com/0xPlayerOne/code-foundry#readme",
|
|
6
6
|
"bugs": {
|
package/src/commands/sync.mjs
CHANGED
|
@@ -551,6 +551,21 @@ function renderWorkflow(content, config, repository, ref, rustCodeql) {
|
|
|
551
551
|
// target main, so their callers trigger on main alone.
|
|
552
552
|
if (!isStagingRelease(config.git_workflow)) {
|
|
553
553
|
rendered = rendered.replace(/^(\s+branches:)\s*\[main,\s*staging\]\s*$/gm, `$1 [main]`)
|
|
554
|
+
// Direct repositories have no staging branch or release reconciliation,
|
|
555
|
+
// so their generated release caller must not expose the legacy deploy-key
|
|
556
|
+
// secret. Keep it in the staging-release template for repositories that
|
|
557
|
+
// still explicitly select that topology.
|
|
558
|
+
if (workflow === 'release') {
|
|
559
|
+
rendered = rendered.replace(
|
|
560
|
+
/^\s+STAGING_DEPLOY_KEY:\s+\$\{\{\s*secrets\.STAGING_DEPLOY_KEY\s*\}\}\s*\n/m,
|
|
561
|
+
''
|
|
562
|
+
)
|
|
563
|
+
}
|
|
564
|
+
} else if (workflow === 'release' && !rendered.includes('STAGING_DEPLOY_KEY')) {
|
|
565
|
+
rendered = rendered.replace(
|
|
566
|
+
/^(\s+)CODE_FOUNDRY_TOKEN:\s+\$\{\{\s*secrets\.CODE_FOUNDRY_TOKEN\s*\}\}\s*$/m,
|
|
567
|
+
'$&\n$1STAGING_DEPLOY_KEY: ${{ secrets.STAGING_DEPLOY_KEY }}'
|
|
568
|
+
)
|
|
554
569
|
}
|
|
555
570
|
if (workflow === 'draft-pr') {
|
|
556
571
|
// The draft PR caller states the PR base explicitly so the shared
|
|
@@ -657,21 +672,26 @@ function stripDependabotEcosystem(content, ecosystem) {
|
|
|
657
672
|
* @returns {string}
|
|
658
673
|
*/
|
|
659
674
|
export function renderContributionDocs(content, file, config) {
|
|
660
|
-
if (isStagingRelease(config.git_workflow)) {
|
|
661
|
-
if (configured(config.staging_validation_mode, 'fast') !== 'audit') return content
|
|
662
|
-
return content.replace(
|
|
663
|
-
'Fast validation: CI plus unit tests, ending in `Validation / Gate`',
|
|
664
|
-
'Audit validation: CI, full tests, Security, and CodeQL, ending in `Validation / Gate`'
|
|
665
|
-
)
|
|
666
|
-
}
|
|
667
675
|
const replacements = DIRECT_DOC_REPLACEMENTS[file]
|
|
668
676
|
if (!replacements) return content
|
|
669
677
|
let rendered = content
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
678
|
+
const stagingRelease = isStagingRelease(config.git_workflow)
|
|
679
|
+
for (const [staging, direct] of replacements) {
|
|
680
|
+
const from = stagingRelease ? direct : staging
|
|
681
|
+
const to = stagingRelease ? staging : direct
|
|
682
|
+
if (rendered.includes(from)) {
|
|
683
|
+
rendered = rendered.replace(from, to)
|
|
684
|
+
} else if (!rendered.includes(to)) {
|
|
685
|
+
throw new Error(
|
|
686
|
+
`Missing ${stagingRelease ? 'staging-release' : 'direct'} workflow template marker in ${file}: ${JSON.stringify(from)}`
|
|
687
|
+
)
|
|
673
688
|
}
|
|
674
|
-
|
|
689
|
+
}
|
|
690
|
+
if (stagingRelease && configured(config.staging_validation_mode, 'fast') === 'audit') {
|
|
691
|
+
rendered = rendered.replace(
|
|
692
|
+
'Fast validation: CI plus unit tests, ending in `Validation / Gate`',
|
|
693
|
+
'Audit validation: CI, full tests, Security, and CodeQL, ending in `Validation / Gate`'
|
|
694
|
+
)
|
|
675
695
|
}
|
|
676
696
|
return rendered
|
|
677
697
|
}
|
|
@@ -729,11 +749,11 @@ const DIRECT_DOC_REPLACEMENTS = {
|
|
|
729
749
|
],
|
|
730
750
|
[
|
|
731
751
|
'| Event | Expected automation |\n| -------------------------------------------------- | ------------------------------------------------------------------------------------- |\n| Draft pull request targeting `staging` | No runner-heavy validation; run local checks before requesting review |\n| Ready pull request targeting `staging` | Fast validation: CI plus unit tests, ending in `Validation / Gate` |\n| Draft ordinary pull request targeting `main` | No runner-heavy validation; run local checks before requesting review |\n| Ready ordinary pull request targeting `main` | Audit validation: CI, full tests, Security, and CodeQL, ending in `Validation / Gate` |\n| Exact Release Please pull request targeting `main` | Release-policy validation only, ending in `Validation / Gate` |\n| Scheduled or manual validation | Full audit tier |\n| Push to a working branch | Draft PR workflow |\n| Push to `staging` | Promotion PR workflow; canonical validation waits for the PR event |\n| Push to `main` | Release workflow; canonical validation already ran on the merged PR |\n',
|
|
732
|
-
'| Event
|
|
752
|
+
'| Event | Expected automation |\n| -------------------------------------------------- | ------------------------------------------------------------------------------------- |\n| Draft pull request targeting `main` | No runner-heavy validation; run local checks before requesting review |\n| Ready pull request targeting `main` | Audit validation: CI, full tests, Security, and CodeQL, ending in `Validation / Gate` |\n| Exact Release Please pull request targeting `main` | Release-policy validation only, ending in `Validation / Gate` |\n| Scheduled or manual validation | Full audit tier |\n| Push to a working branch | Draft PR workflow |\n| Push to `main` | Release workflow; canonical validation already ran on the merged PR |\n',
|
|
733
753
|
],
|
|
734
754
|
[
|
|
735
755
|
'| Change | Target | Merge method | Merge gate |\n| ---------------------------- | --------- | ----------------------------------------------- | --------------------------------------------------------- |\n| Working branch | `staging` | Squash | All applicable required checks pass |\n| `staging` → `main` promotion | `main` | Rebase (`merge_strategy`) | Current staging checks, release review, and rollout notes |\n| Release Please version PR | `main` | Rebase (`release_merge_strategy`, fails closed) | Validation gate and release policy pass |\n',
|
|
736
|
-
'| Change
|
|
756
|
+
'| Change | Target | Merge method | Merge gate |\n| ------------------------- | ------ | --------------------------------- | --------------------------------------- |\n| Working branch | `main` | Squash | All applicable required checks pass |\n| Release Please version PR | `main` | Squash (`release_merge_strategy`) | Validation gate and release policy pass |\n',
|
|
737
757
|
],
|
|
738
758
|
[
|
|
739
759
|
'Draft pull requests do not start runner-heavy validation. Marking a pull request ready for review starts the applicable validation tier; converting it back to draft cancels in-flight validation, and no replacement starts until it is ready again.',
|
|
@@ -19,9 +19,9 @@ export const RELEASE_PLEASE_PREFIX = 'release-please--branches--main'
|
|
|
19
19
|
|
|
20
20
|
/** Stable aggregate check name emitted by the validation orchestrator's gate job. */
|
|
21
21
|
export const AGGREGATE_CHECK_NAME = 'Validation / Gate'
|
|
22
|
-
/** Job ids owned by the validation orchestrator.
|
|
23
|
-
* suite
|
|
24
|
-
*
|
|
22
|
+
/** Job ids owned by the validation orchestrator. Release runs the full audit
|
|
23
|
+
* suite and validates its generated diff inside the gate, so no separate
|
|
24
|
+
* release-policy job id exists. */
|
|
25
25
|
export const VALIDATION_JOBS = ['ci', 'test', 'security', 'codeql']
|
|
26
26
|
|
|
27
27
|
/** Events that may trigger canonical validation. */
|
|
@@ -82,12 +82,10 @@ export function classifyValidationMode(input) {
|
|
|
82
82
|
const REQUIRED_JOBS_BY_MODE = {
|
|
83
83
|
fast: ['ci', 'test'],
|
|
84
84
|
audit: ['ci', 'test', 'security', 'codeql'],
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
// Please pull requests must not deadlock against that requirement.
|
|
90
|
-
release: ['codeql'],
|
|
85
|
+
// Release Please pull requests run the full audit suite so every registered
|
|
86
|
+
// validation check succeeds rather than appearing as an expected skip. The
|
|
87
|
+
// gate additionally validates the generated release diff.
|
|
88
|
+
release: ['ci', 'test', 'security', 'codeql'],
|
|
91
89
|
}
|
|
92
90
|
|
|
93
91
|
/**
|