Skip to content

chore: release v8.0.0#1314

Merged
sorccu merged 13 commits into
mainfrom
next/v8
May 22, 2026
Merged

chore: release v8.0.0#1314
sorccu merged 13 commits into
mainfrom
next/v8

Conversation

@sorccu
Copy link
Copy Markdown
Member

@sorccu sorccu commented May 22, 2026

Summary

Release branch for CLI v8.0.0. Merge commit (do not squash) to preserve individual commit history for changelog generation.

Breaking changes

Features

Fixes

sorccu and others added 12 commits May 22, 2026 17:39
Allow PRs targeting release branches (like next/v8) to trigger CI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat!: switch from npm to pnpm

BREAKING CHANGE: The project now uses pnpm as its package manager.

- Replace package-lock.json with pnpm-lock.yaml (imported via pnpm import)
- Add pnpm-workspace.yaml for workspace configuration
- Update all CI workflows to use pnpm
- Update all npm scripts to use pnpm equivalents
- Update simple-git-hooks to use pnpm exec
- Add pnpm.onlyBuiltDependencies for esbuild and simple-git-hooks
- Replace fixture npm lockfiles with pnpm lockfiles
- Update test expectations for pnpm-lock.yaml in bundled file lists

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use pnpm instead of npx in test fixtures

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): add string-width and ast-types as explicit dependencies

These were phantom dependencies (transitive via recast and other packages)
that worked with npm's flat node_modules but fail under pnpm's strict
dependency resolution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: serialize pnpm lifecycle scripts to prevent race conditions

Set child-concurrency=1 in .npmrc so pnpm runs workspace prepare
scripts sequentially. Remove the redundant `pnpm -r run prepare`
from the root prepare script (pnpm already runs each package's
prepare hook) and move prepare:ai-context to postprepare so it
runs after all packages are built.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(cli): convert check-parse-error e2e test to use FixtureSandbox

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(create-cli): log stderr when bootstrap e2e stdout is empty

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(create-cli): force npm in e2e tests to avoid pnpm workspace detection

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(create-cli): fix playwright config e2e test prompt injection

The test injected initializeGit=true but didn't account for when
.git already existed (skipping the prompt). Change to not init git
since it's not what the test is verifying, and add the missing
askCopyPlaywrightProject prompt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(create-cli): stop injecting jiti into scaffolded project dependencies

jiti is now bundled internally by the CLI and no longer needed as a
user-facing dependency.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): update pw-test e2e assertions for pnpm testCommand

Fixtures now detect pnpm as the package manager, so the generated
testCommand is 'pnpm playwright test' instead of 'npx playwright test'.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: decouple skills/ sync from prepare lifecycle

Move the root-level skills/ copy from a postprepare lifecycle hook to
an explicit sync:skills script. This eliminates the cross-package
dependency between root and packages/cli during pnpm install, removing
the need for child-concurrency=1 in .npmrc.

The AI context is still built as part of packages/cli's prepare script
(needed for the published tarball), but the root no longer races to
copy from its output.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* perf(cli): optimize test fixtures with FixtureTemplate

Introduce FixtureTemplate to pre-install dependencies once and share
them across fixtures via symlinks, reducing pnpm install calls from
53 to 1.

- Add FixtureTemplate class that caches pre-installed node_modules
- Add vitest globalSetup to build the playwright template once
- Migrate playwright-check, parse-files tests to use template
- Set installPackages: false for fixtures with no deps (agentic-check,
  api-check, browser-check, project-parser)
- Symlink workspace checkly package into all fixture node_modules
- Remove injectPackedSelf (dead code) and pnpm pack from test scripts
- Remove accidentally committed node_modules from test-bundling and
  test-shared-bundling fixtures

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* perf(cli): use FixtureTemplate in e2e tests

Share a single playwright install across all e2e fixture sandboxes
via symlinked node_modules. Fixtures with no dependencies use
installPackages: false instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use pnpm in e2e tests and add lockfiles to fixtures

Replace npx with pnpm in e2e test runners for consistency with the
pnpm-based fixtures. Add pnpm-lock.yaml to all e2e fixtures so
detectPackageManager reliably identifies pnpm.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(cli): add FixtureTemplate.use() and simplify template usage

Add FixtureTemplate.use() which looks up a cached template by name,
falling back to an env var set by globalSetup for cross-process
communication. Test files now pass template: 'playwright' as a string
instead of managing FixtureTemplate.create() calls directly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use dedicated template for pinned playwright version in pw-test

The test-pwt-native fixture pins @playwright/test to 1.53.1. The shared
playwright template installs ^1.59.1 which resolves to a newer version,
causing a version mismatch error at runtime.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* perf(cli): create fixture templates serially for better cache reuse

Sequential pnpm installs let the second template reuse packages
cached by the first (e.g. playwright-core), avoiding redundant
downloads on CI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(cli): prepare FixtureSandbox for runChecklyCli migration

- Make source param optional (empty sandbox when omitted)
- Add 'bare' template (checkly only, no other deps)
- Fix Windows .bin by writing a .cmd shim instead of a symlink
- Replace runChecklyCli with checklyEnv + runCheckly helpers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(cli): migrate all e2e tests from runChecklyCli to FixtureSandbox

Replace the raw child_process.spawn-based runChecklyCli with
FixtureSandbox + runCheckly helper across all 21 e2e test files.

Tests now use pnpm checkly via the .bin symlink instead of spawning
bin/run directly, which fixes Windows module resolution issues with
pnpm's node_modules layout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): write package.json in sourceless fixture sandboxes

pnpm requires a package.json in the working directory. When no source
is provided, write a minimal one so pnpm checkly can run.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): fix e2e test migration issues

- destroy: wrong project name exits 0, not failure
- login: remove trailing newline assertion (oclif line-wrapping)
- switch: remove trailing newline assertion
- env.rm: add explicit timeout for interactive prompt test
- Add missing package.json to fixtures that lacked one
- Write package.json in sourceless sandboxes for pnpm compat

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): unset CI env var in e2e test helper

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): force interactive CLI mode in e2e tests

Use CHECKLY_CLI_MODE=interactive instead of unsetting CI, since
the CLI also checks GITHUB_ACTIONS and other CI-specific env vars.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): add .js extension to oclif helpClass path

On Windows, oclif's module-loader uses require() to load the custom
help class. Without the .js extension, require() fails to resolve
the module in an ESM package because Node.js doesn't auto-append
extensions for require() in "type": "module" packages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): run CLI via node instead of pnpm in e2e tests

On Windows, pnpm's import() of oclif command modules fails with
MODULE_NOT_FOUND even when the files exist. Bypass pnpm's execution
layer by invoking node with the bin/run path directly, matching the
behavior of the old runChecklyCli helper.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use real CLI path instead of junction path in e2e tests

On Windows, Node.js import() fails when resolving through NTFS
junctions. Use CLI_PACKAGE_ROOT directly to avoid junction traversal.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use stripped env in e2e tests to match old runChecklyCli

Use extendEnv: false so the CLI subprocess gets only explicitly passed
env vars, matching the old child_process.spawn behavior. This prevents
CI runner env vars from interfering with the CLI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): pass API keys via checklyEnv in direct fixt.run callers

Tests using fixt.run directly need checklyEnv() to provide API keys
and other required env vars when extendEnv is false.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use dir symlinks instead of junctions on Windows

NTFS junctions cause Node.js ESM import() to fail when resolving
modules through the junction. Regular dir symlinks work correctly
on GitHub Actions runners which have the required permissions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): add missing deps to e2e fixture templates

Add uuid to the playwright template (used by deploy-project fixture).
Switch sync-playwright tests from bare to playwright template (fixture
loads playwright.config.ts which imports @playwright/test).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use shell on Windows in FixtureSandbox.run

Matches the old runChecklyCli behavior which used shell: true on
Windows for cmd.exe to handle process execution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): switch e2e tests back to pnpm checkly

Unit tests use pnpm checkly and pass on Windows. The node bin/run
approach fails because oclif's CJS module-loader can't import()
ESM command files using Windows absolute paths. With dir symlinks
(not junctions) now in place, pnpm checkly should work correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): remove extendEnv: false from e2e tests

Node.js on Windows needs system env vars (SYSTEMROOT, etc.) for
module resolution. Stripping the env caused import() to fail for
some files. Use the default extendEnv: true and rely on
CHECKLY_CLI_MODE: 'interactive' to handle CI detection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): install packed CLI tarball into templates instead of symlinking

Windows CI runners have broken pnpm junctions that cause import() to
fail. Install the packed CLI tarball into each FixtureTemplate via
pnpm install, giving real file copies instead of junctions.

- Add pnpm pack back to test scripts
- FixtureTemplate.create installs checkly tarball as devDependency
- Remove symlinkChecklyPackage and Windows .cmd shim
- Replace installPackages: false with template: 'bare'

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(cli): remove installPackages option, default template to bare

Every sandbox now uses a template (defaults to 'bare'). Remove
installPackages option and clean up redundant template: 'bare' from
all test files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(ci): split e2e tests into separate jobs per package

Prevents pnpm pack in CLI tests from deleting dist/ while create-CLI
tests run in parallel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ci: cancel in-progress workflow runs on new push

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ci: use 'e2e - <package> - <os>' job name format

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use extendEnv: false in e2e test helpers

Prevent CI env vars from leaking into CLI subprocesses.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(create-cli): add mock @playwright/test to playwright-project fixture

The fixture's playwright.config.ts imports from @playwright/test.
With extendEnv: false the subprocess can't resolve it from the
workspace. Add a minimal mock that implements defineConfig and devices.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): remove shell: true from FixtureSandbox.run

shell: true on Windows causes cmd.exe to mangle arguments with spaces.
Not needed since pnpm is invoked directly via execa.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): wait for port 4242 release between login e2e tests

The login command binds port 4242 for the OAuth callback. When tests
time out and kill the process, the port may not be immediately
available for the next test.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): force-kill login process after 1s grace period

Reduce forceKillAfterDelay from default 5s to 1s so the port is
released faster. Increase test timeouts to accommodate the afterEach
port wait.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): kill orphaned login process on Windows via taskkill

On Windows, execa kills pnpm but the grandchild node process holding
port 4242 survives. Use netstat + taskkill /T to find and kill it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): kill entire process tree in login e2e tests

Use detached process group + taskkill /T (Windows) or negative PID
SIGKILL (Unix) to kill pnpm and all its grandchild processes that
hold port 4242.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use detached only on Unix in login tests

detached: true on Windows breaks stdio for grandchild processes due
to DETACHED_PROCESS nullifying standard handles. Use detached only
on Unix (for process group kill) and taskkill /T on Windows.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): handle subprocess rejection in login tests

Attach rejection handler immediately to prevent unhandled rejection
when taskkill kills the process tree externally.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
)

* feat(cli)!: default --record to true on test and trigger commands

Recording is almost always desired, so make it the default. Users can
opt out with --no-record. This aligns test and trigger with pw-test,
which already defaults to recording.

Remove the now-dead "use --record" tip from list, ci and github
reporters, and update all documentation and examples.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): show [default: true] in --record help text

oclif doesn't render defaults for boolean flags automatically, so add
it to the description string like verify-runtime-dependencies does.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(cli): auto-load .env file for CLI configuration

Load a .env file from the current directory before any CLI commands run,
so users can set CHECKLY_API_KEY and CHECKLY_ACCOUNT_ID without exporting
them in their shell. Process env vars always take precedence. Opt out
with CHECKLY_NO_DOTENV=1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): fix login e2e test and skip chmod test on Windows

Update e2e login test to match the new warning message wording.
Skip the permission error test on Windows where fs.chmod(0o000)
does not restrict file reads.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): use shorter substrings in login e2e to handle line wrapping

The longer warning message gets line-wrapped by oclif's warn formatter,
inserting line break prefixes that break toContain checks on the full
string. Match shorter substrings instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(cli): add cancel REST client

* feat(cli): support cancellation status in reporters

* feat(cli): add --detach flag with SIGINT cancel flow

* feat(cli): wire cancel handler in test, pw-test, and trigger commands

* test(cli): add tests for cancellation flow

* feat(cli/reporters): suppress live panel while cancel prompt is open

Adds an isCancelling flag to AbstractListReporter so the live status panel
stops re-rendering while the cancel confirmation prompt is on screen, and
resumes when the prompt closes.

- onCancelPromptShown clears the panel and raises the flag.
- onCancelPromptHidden lowers the flag and repaints; runs on both confirm
  and decline so live updates resume during the cancellation drain.
- _printSummary and onStreamLogs short-circuit while the flag is up.
- _clearSummary becomes a no-op when there is nothing to erase, preserving
  the clear/print invariant if a guard skips the paired _printSummary.

* fix(cli/runner): close SIGINT race and add cancel feedback

PQueue.pause() does not interrupt an in-flight handler. A CHECK_INPROGRESS
handler that started before SIGINT could still emit and trigger a panel
re-render right under the cancel prompt, producing spurious project-tree
output.

- Emit CANCEL_PROMPT_SHOWN before queue.pause(); EventEmitter.emit is
  synchronous so reporters set their flag before any pending handler can
  render.
- Emit CANCEL_PROMPT_HIDDEN after the prompt resolves on both confirm and
  decline, restoring live updates.
- On confirm, print 'Cancelling test session...' so the user sees feedback
  while the backend cancellation completes.
- Always queue.start() after the prompt: drains MQTT results so
  allChecksFinished can resolve on confirm, resumes normal flow on decline.
- Use printLn instead of raw process.stdout.write to match the rest of the
  CLI.

* feat(cli/commands): forward cancel prompt events to reporters

Wires the runner's CANCEL_PROMPT_SHOWN and CANCEL_PROMPT_HIDDEN events to
each reporter for the test, pw-test, and trigger commands.

* test(cli/reporters): cover AbstractListReporter cancellation lifecycle

Covers happy paths (clear-then-repaint, normal render before/after the
prompt) and edge cases (empty _clearString no-op, double prompt-shown
idempotency, prompt-hidden without prior prompt-shown, suppression of
_printSummary and onStreamLogs while cancelling).

* fix(cli/runner): drain buffered ^C before opening cancel prompt

* fix: tests

* feat: rebuild

* fix: sigint handling

* fix: flip detached

* fix: skip question for non terminal

* fix: tests

* fix: prompt

* fix: tests

* chore: remove unused cancel-prompt e2e test and fixture

The fixture doesn't import any project code — it only tests prompts
library behavior, which is already covered by the abstract-check-runner
unit tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: add .js suffixes to ESM imports in new test files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ci: trigger CI after rebase onto next/v8

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: replace interactive cancel prompt with immediate cancellation

The interactive confirmation prompt on Ctrl+C broke on Windows due to
cmd.exe's competing "Terminate batch job" dialog and the `when-exit`
transitive dependency (conf → atomically → when-exit) preempting the
SIGINT handler.

Now Ctrl+C always cancels immediately and suggests --detach for keeping
checks running. Uses prependListener to run before when-exit's handler.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: always cancel immediately on SIGINT instead of showing interactive prompt

The interactive confirmation prompt on Ctrl+C conflicted with cmd.exe's
"Terminate batch job" prompt on Windows, and a transitive dependency
(when-exit via conf → atomically) preempted the SIGINT handler by
re-raising SIGINT, which is a hard kill on Windows.

Replace the prompt with immediate cancellation: first Ctrl+C emits
CANCEL and shows a message suggesting --detach, second Ctrl+C force
exits. The cancellation message is rendered by the reporter as part of
its live summary panel so it doesn't get overwritten. Pre-existing
SIGINT listeners are removed during the run and restored afterward to
prevent when-exit from terminating the process.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: show detach message on SIGINT when --detach is used

Ctrl+C with --detach now shows "Checks will continue running in the
cloud." before exiting, instead of silently terminating.

Also refactors the SIGINT handler setup: both detach and non-detach
modes share the same when-exit listener removal and registration code,
with the mode-specific behavior inside the handler body.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: handle 403 from /v1/cancel gracefully

The cancel endpoint returns 403 when the account doesn't have the
feature flag set. Silently ignore it since cancellation is best-effort.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: update cancel REST client for resource-oriented endpoints

The cancel API moved from a single POST /v1/cancel with a discriminated
union body to resource-oriented endpoints:
- POST /v1/test-sessions/{testSessionId}/cancel
- POST /v1/check-sessions/{checkSessionId}/cancel

The body is now optional and accepts { sequenceId?: string[] } to cancel
specific sequences. Omitting it cancels all in-progress sequences.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Simo Kinnunen <simo@checklyhq.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Drop @oclif/plugin-not-found entry removed in the ESM migration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…unCheckly

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ectory (#1309)

* fix(cli)!: resolve include patterns relative to Playwright config directory

Include glob patterns in bundlePlayWrightProject were resolved relative
to Session.basePath (workspace root) instead of the Playwright config
file's directory. This caused patterns like 'fixtures/**' to look in the
wrong location when the Playwright config lived in a subdirectory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(cli): add tests for include pattern resolution relative to Playwright config

Update getAutoIncludes unit tests for the new globCwd parameter and add
coverage for subdirectory scenarios. Add integration test with a fixture
where the Playwright config lives in a subdirectory to verify include
patterns resolve correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(cli): add integration tests for pnpm patches auto-inclusion in bundles

Verify that pnpm patch files are auto-included in Playwright check
bundles for both the root case and the subdirectory case where the
Playwright config lives in a nested directory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(cli): add integration test for absolute paths in include

Verify that absolute file paths in the PlaywrightCheck include property
are supported. Uses a .check.ts file with import.meta.url to compute
the absolute path dynamically at runtime.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): detect explicit include of ignored dirs regardless of path form

The skipIf checks for default node_modules and .git ignore patterns only
matched patterns starting with the directory name. This missed patterns
using parent traversal or absolute paths. Use a helper that checks for
the directory name as a path segment anywhere in the pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(cli): normalize include patterns to forward slashes for glob on Windows

path.join produces backslash paths on Windows, but glob requires forward
slashes. Normalize patterns in findFilesWithPattern before passing them
to glob.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add CLAUDE.md for Claude Code onboarding

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add /new-monitor and /new-alert-channel custom commands

Step-by-step checklists for adding new construct types, covering
all files that need changes (core construct, codegen, registry,
reporters, tests, examples).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…1313)

actionSuccess() already emits a trailing blank line after each progress
step. The reporters' onBegin duplicated this with beforeLnCount=1,
producing two blank lines instead of one.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sorccu sorccu merged commit ca6fb57 into main May 22, 2026
8 checks passed
@sorccu sorccu deleted the next/v8 branch May 22, 2026 09:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants