diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 9b30e8cb..f339a428 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -50,6 +50,9 @@ jobs: - name: Test suite (source) run: bun run test:fast + - name: Environment suite + run: bun run test:env + - name: Coverage suite (maintained source lane) run: bun run test:coverage:src diff --git a/backlog/tasks/task-286.2 - Assess-and-address-PR-49-next-CodeRabbit-review-round.md b/backlog/tasks/task-286.2 - Assess-and-address-PR-49-next-CodeRabbit-review-round.md new file mode 100644 index 00000000..20c7fd67 --- /dev/null +++ b/backlog/tasks/task-286.2 - Assess-and-address-PR-49-next-CodeRabbit-review-round.md @@ -0,0 +1,49 @@ +--- +id: TASK-286.2 +title: 'Assess and address PR #49 next CodeRabbit review round' +status: Done +assignee: [] +created_date: '2026-04-12 02:50' +updated_date: '2026-04-12 02:52' +labels: + - bug + - code-review + - release + - testing +dependencies: [] +references: + - .github/workflows/prerelease.yml + - src/prerelease-workflow.test.ts + - src/core/services/overlay-shortcut.ts +parent_task_id: TASK-286 +priority: high +--- + +## Description + + +Track the next unresolved CodeRabbit review threads on PR #49 after commit 62ad77dc and resolve the still-valid follow-up issues while documenting stale repeats. + + +## Acceptance Criteria + +- [x] #1 All still-actionable CodeRabbit comments in the latest PR #49 round are fixed or explicitly shown stale with evidence. +- [x] #2 Regression coverage is updated for any workflow or test changes made in this round. +- [x] #3 Relevant verification passes for the touched workflow and prerelease test changes. + + +## Implementation Notes + + +Assessed latest unresolved CodeRabbit round on PR #49. `src/core/services/overlay-shortcut.ts` comment is stale: `registerOverlayShortcuts()` returns `hasConfiguredOverlayShortcuts(shortcuts)`, so runtime registration is not hard-coded false. + +Added exact, line-ending-agnostic prerelease tag trigger assertions in `src/prerelease-workflow.test.ts` and a regression asserting `bun run test:env` sits in the prerelease quality gate before source coverage. + +Updated `.github/workflows/prerelease.yml` quality-gate to run `bun run test:env` after `bun run test:fast`. + + +## Final Summary + + +Assessed the latest CodeRabbit round for PR #49. Left the `overlay-shortcut.ts` thread open as stale with code evidence, tightened prerelease workflow trigger coverage, and added the missing `test:env` step to the prerelease quality gate. Verification: `bun test src/prerelease-workflow.test.ts`; `bun run typecheck`. + diff --git a/src/prerelease-workflow.test.ts b/src/prerelease-workflow.test.ts index 050564c1..51737fc4 100644 --- a/src/prerelease-workflow.test.ts +++ b/src/prerelease-workflow.test.ts @@ -4,7 +4,7 @@ import { readFileSync } from 'node:fs'; import { resolve } from 'node:path'; const prereleaseWorkflowPath = resolve(__dirname, '../.github/workflows/prerelease.yml'); -const prereleaseWorkflow = readFileSync(prereleaseWorkflowPath, 'utf8'); +const prereleaseWorkflow = readFileSync(prereleaseWorkflowPath, 'utf8').replace(/\r\n/g, '\n'); const packageJsonPath = resolve(__dirname, '../package.json'); const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as { scripts: Record; @@ -12,8 +12,12 @@ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as { test('prerelease workflow triggers on beta and rc tags only', () => { assert.match(prereleaseWorkflow, /name: Prerelease/); - assert.match(prereleaseWorkflow, /tags:\s*\n\s*-\s*'v\*-beta\.\*'/); - assert.match(prereleaseWorkflow, /tags:\s*\n(?:.*\n)*\s*-\s*'v\*-rc\.\*'/); + const tagsBlock = prereleaseWorkflow.match(/tags:\s*\n((?:\s*-\s*'[^']+'\s*\n?)+)/); + assert.ok(tagsBlock, 'Workflow tags block not found'); + const tagsText = tagsBlock[1]; + assert.ok(tagsText, 'Workflow tags entries not found'); + const tagPatterns = [...tagsText.matchAll(/-\s*'([^']+)'/g)].map(([, pattern]) => pattern); + assert.deepEqual(tagPatterns, ['v*-beta.*', 'v*-rc.*']); }); test('package scripts expose prerelease notes generation separately from stable changelog build', () => { @@ -28,6 +32,13 @@ test('prerelease workflow generates prerelease notes from pending fragments', () assert.doesNotMatch(prereleaseWorkflow, /bun run changelog:build --version/); }); +test('prerelease workflow includes the environment suite in the gate sequence', () => { + assert.match( + prereleaseWorkflow, + /Test suite \(source\)\n\s*run: bun run test:fast\n\s*\n\s*- name: Environment suite(?: \(source\))?\n\s*run: bun run test:env\n\s*\n\s*- name: Coverage suite \(maintained source lane\)/, + ); +}); + test('prerelease workflow publishes GitHub prereleases and keeps them off latest', () => { assert.match(prereleaseWorkflow, /gh release edit[\s\S]*--prerelease/); assert.match(prereleaseWorkflow, /gh release create[\s\S]*--prerelease/);