Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
ab178cb
refactor(otters): relocate to packages/otters/src/ for proper monorep…
perasperaactual Apr 4, 2026
1888dc2
chore: bump prerelease versions [skip ci]
invalid-email-address Apr 4, 2026
7f7b23e
chore: refresh prerelease mode after v0.7.0 release [skip ci]
perasperaactual Apr 5, 2026
14b7031
fix(ci): add push trigger to release workflow for main branch
perasperaactual Apr 5, 2026
9f4e463
feat: add Turborepo for incremental builds and intelligent caching (#…
perasperaactual Apr 5, 2026
4832c80
docs: add architecture principles and CI philosophy (#301)
perasperaactual Apr 5, 2026
ef52308
feat: add Turborepo for incremental builds and intelligent caching (#…
perasperaactual Apr 5, 2026
d36e792
Merge origin/main into pr-306 to resolve conflicts with main branch
perasperaactual Apr 5, 2026
3eb0b71
fix: enable npm OIDC provenance and update branching docs
perasperaactual Apr 6, 2026
c801425
fix: merge duplicate env blocks in ci.yml
perasperaactual Apr 6, 2026
5e7dfa6
chore: clean up consumed changesets
perasperaactual Apr 6, 2026
6c0199c
chore: sync pnpm-lock.yaml with package.json
perasperaactual Apr 6, 2026
b7babc0
fix: add missing react-dom dependency to stackwright-docs
perasperaactual Apr 6, 2026
13f1b7e
docs: update CLAUDE.md and CONTRIBUTING.md, add .turbo/ to gitignore …
perasperaactual Apr 6, 2026
3d8a396
Merge branch 'main' into dev
perasperaactual Apr 7, 2026
8439ed6
fix: exclude @stackwright/ui-shadcn from test commands (#309)
perasperaactual Apr 7, 2026
03b27eb
fix: exclude examples from turbo lint in CI (#311)
perasperaactual Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@ env:
# Turborepo remote cache (Vercel)
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}



env:
TURBO_REMOTE_CACHE: ${{ vars.TURBO_REMOTE_CACHE || 'false' }}

jobs:
Expand Down
12 changes: 11 additions & 1 deletion .github/workflows/prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ jobs:
node-version: 20
registry-url: 'https://registry.npmjs.org'
cache: 'pnpm'
provenance: true

- run: pnpm install --frozen-lockfile
- name: Ensure Changeset prerelease mode is entered
Expand Down Expand Up @@ -68,4 +69,13 @@ jobs:
git push origin dev

- name: Publish prereleases with tag 'alpha'
run: pnpm publish -r --provenance --access public --tag alpha --no-git-checks
run: |
for dir in packages/*/; do
if [ -d "$dir/dist" ]; then
cd "$dir"
PKG_NAME=$(node -p "require('./package.json').name")
echo "Publishing $PKG_NAME..."
npm publish --provenance --access public --tag alpha || echo "Skipped $PKG_NAME (may already exist)"
cd - > /dev/null
fi
done
12 changes: 11 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ jobs:
node-version: 22
registry-url: 'https://registry.npmjs.org'
cache: 'pnpm'
provenance: true

- run: pnpm install --frozen-lockfile

Expand Down Expand Up @@ -89,7 +90,16 @@ jobs:

- name: Publish to npm
if: steps.check.outputs.skip != 'true'
run: pnpm publish -r --provenance --access public --no-git-checks
run: |
for dir in packages/*/; do
if [ -d "$dir/dist" ]; then
cd "$dir"
PKG_NAME=$(node -p "require('./package.json').name")
echo "Publishing $PKG_NAME..."
npm publish --provenance --access public || echo "Skipped $PKG_NAME"
cd - > /dev/null
fi
done

# -----------------------------------------------------------
# Push version bumps back, then sync dev
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ node_modules
packages/**/dist
www/
ISSUE-*-PLAN.md
.turbo/

# Coverage reports
coverage/
Expand Down
45 changes: 42 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,48 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## Branching & Commits

- **`dev`** is the integration branch; **`main`** is the release branch. Feature branches branch from `dev`, PRs target `dev`.
- `git fetch origin dev && git checkout -b feat/issue-XX-description origin/dev`
- Use conventional commit prefixes (`feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`). Commit early and often at logical checkpoints.
### ⚠️ IMPORTANT: Always Target `dev`


**ALL pull requests must target `dev` branch.** This is non-negotiable.

```
main (release) ← ← ← ← ← ← ← dev (integration)
\ ↗
\ /
PR #XX
```

- `dev` = integration branch where all work merges
- `main` = release branch (only updated during releases)
- Feature branches branch FROM `dev` and PRs target `dev`

### Quick Start

```bash
# ALWAYS start from dev
git fetch origin dev && git checkout -b feat/issue-XX-description origin/dev

# Or for fixes:
git fetch origin dev && git checkout -b fix/issue-XX-description origin/dev
```


### Commit Messages


Use conventional commit prefixes:
- `feat:` — new feature
- `fix:` — bug fix
- `refactor:` — code restructure (no behavior change)
- `test:` — adding/updating tests
- `docs:` — documentation only
- `chore:` — tooling, dependencies, config


Include issue numbers: `feat(cli): add --watch mode (fixes #42)`

Commit early and often at logical checkpoints.

## Commands

Expand Down
63 changes: 60 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,72 @@ Don't add tests or checks speculatively. Wait for a real failure, then automate

## Branching Workflow

- **`dev`** is the integration branch. Feature branches are created from `dev` and PRs target `dev`.
- **`main`** is the release branch. `dev` is merged to `main` only when cutting a release.
### ⚠️ ALWAYS Target `dev` Branch

Always pull the latest `dev` before creating a feature branch:
**This is the single most important rule of this repo:**

```
Feature Branch → PR to dev → Merge to main (release only)
```

| Branch | Purpose | Who Pushes To It |
|--------|---------|------------------|
| `dev` | Integration branch for all work | PRs from feature branches |
| `main` | Release/stable branch | Only during formal releases |

### The Rule

1. **Branch FROM `dev`**: `git checkout -b feat/issue-XX origin/dev`
2. **Target `dev` in PRs**: All pull requests target `dev`
3. **Only merge `dev` → `main`** during a formal release
4. **Never commit directly to `dev` or `main`**

### Standard Workflow

```bash
# 1. Start fresh from dev
git fetch origin dev && git checkout -b feat/issue-XX-description origin/dev

# 2. Make changes, commit with conventional messages
git commit -m "feat(cli): implement --watch mode (fixes #42)"

# 3. Push and create PR targeting dev
git push -u origin feat/issue-XX-description
gh pr create --base dev --title "feat(cli): implement --watch mode"

# 4. After review, merge to dev
# CI automatically publishes alpha prereleases from dev


# 5. During release, merge dev to main
# CI exits prerelease mode and publishes stable versions
```

### What Happens On Push To `dev`?

CI automatically:
1. Runs tests and builds
2. Bumps alpha versions (e.g., `0.1.0` → `0.1.1-alpha.0`)
3. Publishes to npm with `alpha` tag
4. Backs up version changes

### What Happens On Push To `main`?


CI automatically:
1. Exits prerelease mode
2. Publishes stable versions (e.g., `0.1.0-alpha.5` → `0.1.0`)
3. Back-merges version bumps to `dev`
4. Re-enters prerelease mode for next cycle

### Why This Structure?


- `dev` is always releasable (continuous delivery of alphas)
- `main` contains only stable, tested releases
- Changesets accumulate in `dev` until a release is cut
- No broken states ever reach `main`

## Commit Discipline

**Commit early and often at logical checkpoints.** Don't accumulate a large diff across an entire feature branch — break the work into meaningful, reviewable commits. Each commit should leave the codebase in a buildable state.
Expand Down
1 change: 0 additions & 1 deletion examples/stackwright-docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
"next": "^16.1.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"stackwright-docs": "link:",
"tailwind-merge": "^2.6.0"
},
"devDependencies": {
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
"changeset": "changeset",
"version-packages": "changeset version",
"release": "pnpm build && changeset publish",
"test": "pnpm -r --filter='!@stackwright/e2e' --filter='!launch-stackwright' --filter='!@stackwright/scaffold-core' test",
"test": "pnpm -r --filter='!@stackwright/e2e' --filter='!launch-stackwright' --filter='!@stackwright/scaffold-core' --filter='!@stackwright/ui-shadcn' test",
"test:core": "pnpm --filter @stackwright/core test",
"test:e2e": "pnpm --filter @stackwright/e2e test",
"test:coverage": "pnpm -r --filter='!@stackwright/e2e' --filter='!launch-stackwright' test:coverage && node scripts/merge-coverage.js",
"test:coverage": "pnpm -r --filter='!@stackwright/e2e' --filter='!launch-stackwright' --filter='!@stackwright/ui-shadcn' test:coverage && node scripts/merge-coverage.js",
"test:coverage:ui": "pnpm test:coverage && open coverage/merged/index.html",
"stackwright": "node packages/cli/dist/cli.js",
"stackwright-mcp": "node packages/mcp/dist/server.js",
Expand All @@ -38,7 +38,7 @@
"turbo:build": "turbo build",
"turbo:test": "turbo test",
"turbo:dev": "turbo dev",
"turbo:lint": "turbo lint",
"turbo:lint": "turbo lint --filter='!./examples/**'",
"turbo:format": "turbo format",
"turbo:build:core": "turbo build --filter=@stackwright/core",
"turbo:build:types": "turbo build --filter=@stackwright/types",
Expand Down
3 changes: 0 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading