docs(SUP-1648): add v0.1.0 release lane and readiness gate - #35
Conversation
📝 WalkthroughWalkthroughThis PR establishes release management infrastructure for jarvOS v0.1.0 public preview. It adds release process documentation, a GitHub issue template for candidate intake, v0.1.0-specific release notes with readiness checklist, and a changelog entry documenting the new infrastructure. Changesv0.1.0 Public Preview Release
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint skipped: no ESLint configuration detected in root package.json. To enable, add Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/ISSUE_TEMPLATE/release-candidate.yml:
- Around line 4-7: The release-candidate issue template is missing the primary
release label; update the labels array in
.github/ISSUE_TEMPLATE/release-candidate.yml (the labels block defined in that
file) to include "jarvos-release" alongside "jarvos",
"jarvos-release-candidate", and "release-v0.1.0" so release-candidate issues get
the base release label used by release-management flows.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 16b6c385-d3e7-4f87-b522-5798a627ea2c
📒 Files selected for processing (5)
.github/ISSUE_TEMPLATE/config.yml.github/ISSUE_TEMPLATE/release-candidate.ymlCHANGELOG.mddocs/release-management.mddocs/releases/v0.1.0-public-preview.md
| labels: | ||
| - jarvos | ||
| - jarvos-release-candidate | ||
| - release-v0.1.0 |
There was a problem hiding this comment.
Add the primary release label for consistency with the documented lane.
At Line 4–7, the template applies jarvos, jarvos-release-candidate, and release-v0.1.0, but it does not apply jarvos-release (documented in docs/release-management.md Line 12). That can make release-candidate issues miss release dashboards/queries expecting the base release label.
Suggested fix
labels:
- jarvos
+ - jarvos-release
- jarvos-release-candidate
- release-v0.1.0📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| labels: | |
| - jarvos | |
| - jarvos-release-candidate | |
| - release-v0.1.0 | |
| labels: | |
| - jarvos | |
| - jarvos-release | |
| - jarvos-release-candidate | |
| - release-v0.1.0 |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/ISSUE_TEMPLATE/release-candidate.yml around lines 4 - 7, The
release-candidate issue template is missing the primary release label; update
the labels array in .github/ISSUE_TEMPLATE/release-candidate.yml (the labels
block defined in that file) to include "jarvos-release" alongside "jarvos",
"jarvos-release-candidate", and "release-v0.1.0" so release-candidate issues get
the base release label used by release-management flows.
dbed505 to
3f53c49
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
docs/release-management.md (1)
59-63: ⚡ Quick winUnify the canonical release-notes source across docs and checks.
This flow uses
docs/releases/v0.1.0-public-preview.md, while the release process/check script expectdocs/releases/v0.1.0.md. Pick one canonical file (or document an explicit copy/sync step) to avoid release-time mismatch.Suggested doc alignment
-2. Confirm the release notes body from - `docs/releases/v0.1.0-public-preview.md`. +2. Confirm the release notes body from + `docs/releases/v0.1.0.md`.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/release-management.md` around lines 59 - 63, The release notes source is inconsistent: the docs/release-management.md references docs/releases/v0.1.0-public-preview.md while the release/check script expects docs/releases/v0.1.0.md; pick one canonical file name (either docs/releases/vX.Y.Z.md or docs/releases/vX.Y.Z-public-preview.md), update release-management.md step text (the line that currently mentions docs/releases/v0.1.0-public-preview.md) to reference the chosen canonical file, and update the release process/check script (the script that validates/releases tags) to read the same canonical path (or add a clear copy/sync step in the workflow that copies the chosen preview file to the canonical path) so both docs and automation use the same source.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/release-readiness-check.js`:
- Around line 150-156: The current smoke-test step only runs npm test (via
run('npm', ['test'])) which doesn't execute the required scripts/smoke-test.sh;
update the smoke-test branch so when opts.skipSmoke is false it runs the actual
smoke script (e.g., run('bash', ['scripts/smoke-test.sh']) or
run('./scripts/smoke-test.sh')) and treat its exit/status like the existing
smoke variable (call pass('smoke test', ...) on success and fail('smoke test',
...) with the last 20 lines of stdout/stderr on failure); optionally keep the
existing npm test as a separate check by adding another run(...) call and
separate pass/fail handling.
- Around line 120-130: The release-notes check currently hard-fails when
docs/releases/${tag}.md is missing; update the block that uses releaseNotesPath
to also accept a preview draft when candidate mode/--allow-unreleased is
enabled: check for docs/releases/${tag}.md first, then if missing and an
allowUnreleased flag (e.g., allowUnreleased or similar CLI option used by the
script) is true, look for a preview path such as docs/releases/${tag}.preview.md
(or docs/releases/${tag}-preview.md if your project uses that convention) and
validate that file’s sections (using the same required array and placeholder
regex) and call pass/fail using the found path; otherwise keep the existing
failure behavior. Ensure you reference the same variables releaseNotesPath,
required, missing, and the fail/pass calls so the logic reuses the existing
checks.
---
Nitpick comments:
In `@docs/release-management.md`:
- Around line 59-63: The release notes source is inconsistent: the
docs/release-management.md references docs/releases/v0.1.0-public-preview.md
while the release/check script expects docs/releases/v0.1.0.md; pick one
canonical file name (either docs/releases/vX.Y.Z.md or
docs/releases/vX.Y.Z-public-preview.md), update release-management.md step text
(the line that currently mentions docs/releases/v0.1.0-public-preview.md) to
reference the chosen canonical file, and update the release process/check script
(the script that validates/releases tags) to read the same canonical path (or
add a clear copy/sync step in the workflow that copies the chosen preview file
to the canonical path) so both docs and automation use the same source.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 7e189fb2-e9a9-458f-97e9-37174eea148e
📒 Files selected for processing (11)
.github/ISSUE_TEMPLATE/config.yml.github/ISSUE_TEMPLATE/release-candidate.yml.github/release-template.md.github/workflows/codex-review.ymlCHANGELOG.mddocs/release-management.mddocs/release-process.mddocs/releases/v0.1.0-public-preview.mddocs/releases/v0.1.0.mdpackage.jsonscripts/release-readiness-check.js
✅ Files skipped from review due to trivial changes (7)
- .github/ISSUE_TEMPLATE/config.yml
- .github/ISSUE_TEMPLATE/release-candidate.yml
- .github/release-template.md
- package.json
- docs/releases/v0.1.0-public-preview.md
- docs/releases/v0.1.0.md
- .github/workflows/codex-review.yml
| const releaseNotesPath = `docs/releases/${tag}.md`; | ||
| if (exists(releaseNotesPath)) { | ||
| const notes = readText(releaseNotesPath); | ||
| const required = ['## Summary', "## What's Included", '## Known Limitations', '## Install / Update', '## Verification']; | ||
| const missing = required.filter((section) => !notes.includes(section)); | ||
| if (missing.length) fail('release notes draft', `Missing sections in ${releaseNotesPath}: ${missing.join(', ')}`); | ||
| else if (/ISSUE\b|VERSION\b/.test(notes)) fail('release notes draft', `${releaseNotesPath} still contains placeholders`); | ||
| else pass('release notes draft', releaseNotesPath); | ||
| } else { | ||
| fail('release notes draft', `${releaseNotesPath} missing`); | ||
| } |
There was a problem hiding this comment.
Candidate mode still hard-requires final release-notes path.
--allow-unreleased permits in-progress release state, but this block still requires docs/releases/vX.Y.Z.md. During candidate prep, that can fail even when the preview draft is present.
Proposed fix (allow preview draft in candidate mode)
- const releaseNotesPath = `docs/releases/${tag}.md`;
- if (exists(releaseNotesPath)) {
- const notes = readText(releaseNotesPath);
+ const releaseNotesCandidates = opts.allowUnreleased
+ ? [`docs/releases/${tag}-public-preview.md`, `docs/releases/${tag}.md`]
+ : [`docs/releases/${tag}.md`];
+ const releaseNotesPath = releaseNotesCandidates.find((p) => exists(p));
+ if (releaseNotesPath) {
+ const notes = readText(releaseNotesPath);
@@
- } else {
- fail('release notes draft', `${releaseNotesPath} missing`);
+ } else {
+ fail('release notes draft', `Missing any of: ${releaseNotesCandidates.join(', ')}`);
}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/release-readiness-check.js` around lines 120 - 130, The release-notes
check currently hard-fails when docs/releases/${tag}.md is missing; update the
block that uses releaseNotesPath to also accept a preview draft when candidate
mode/--allow-unreleased is enabled: check for docs/releases/${tag}.md first,
then if missing and an allowUnreleased flag (e.g., allowUnreleased or similar
CLI option used by the script) is true, look for a preview path such as
docs/releases/${tag}.preview.md (or docs/releases/${tag}-preview.md if your
project uses that convention) and validate that file’s sections (using the same
required array and placeholder regex) and call pass/fail using the found path;
otherwise keep the existing failure behavior. Ensure you reference the same
variables releaseNotesPath, required, missing, and the fail/pass calls so the
logic reuses the existing checks.
| if (opts.skipSmoke) { | ||
| pass('smoke test', 'skipped by --skip-smoke'); | ||
| } else { | ||
| const smoke = run('npm', ['test']); | ||
| if (smoke.status === 0) pass('smoke test', 'npm test passed'); | ||
| else fail('smoke test', String(smoke.stdout || smoke.stderr || '').split('\n').slice(-20).join('\n')); | ||
| } |
There was a problem hiding this comment.
Smoke-test gate is not actually executed.
This check reports smoke test but only runs npm test. That can mark readiness as green without running scripts/smoke-test.sh, which your release docs treat as required.
Proposed fix (run smoke-test script, keep npm test as separate check if desired)
- if (opts.skipSmoke) {
- pass('smoke test', 'skipped by --skip-smoke');
- } else {
- const smoke = run('npm', ['test']);
- if (smoke.status === 0) pass('smoke test', 'npm test passed');
- else fail('smoke test', String(smoke.stdout || smoke.stderr || '').split('\n').slice(-20).join('\n'));
- }
+ if (opts.skipSmoke) {
+ pass('smoke test', 'skipped by --skip-smoke');
+ } else {
+ const smoke = run('bash', ['scripts/smoke-test.sh']);
+ if (smoke.status === 0) pass('smoke test', 'scripts/smoke-test.sh passed');
+ else fail('smoke test', String(smoke.stdout || smoke.stderr || '').split('\n').slice(-20).join('\n'));
+ }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if (opts.skipSmoke) { | |
| pass('smoke test', 'skipped by --skip-smoke'); | |
| } else { | |
| const smoke = run('npm', ['test']); | |
| if (smoke.status === 0) pass('smoke test', 'npm test passed'); | |
| else fail('smoke test', String(smoke.stdout || smoke.stderr || '').split('\n').slice(-20).join('\n')); | |
| } | |
| if (opts.skipSmoke) { | |
| pass('smoke test', 'skipped by --skip-smoke'); | |
| } else { | |
| const smoke = run('bash', ['scripts/smoke-test.sh']); | |
| if (smoke.status === 0) pass('smoke test', 'scripts/smoke-test.sh passed'); | |
| else fail('smoke test', String(smoke.stdout || smoke.stderr || '').split('\n').slice(-20).join('\n')); | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/release-readiness-check.js` around lines 150 - 156, The current
smoke-test step only runs npm test (via run('npm', ['test'])) which doesn't
execute the required scripts/smoke-test.sh; update the smoke-test branch so when
opts.skipSmoke is false it runs the actual smoke script (e.g., run('bash',
['scripts/smoke-test.sh']) or run('./scripts/smoke-test.sh')) and treat its
exit/status like the existing smoke variable (call pass('smoke test', ...) on
success and fail('smoke test', ...) with the last 20 lines of stdout/stderr on
failure); optionally keep the existing npm test as a separate check by adding
another run(...) call and separate pass/fail handling.
Summary
Verification
Summary by CodeRabbit
Documentation
Chores