Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .c8rc.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"include": [
"scripts/cli-args.mjs",
"scripts/build-diff-data.mjs",
"scripts/agent-note-output.mjs",
"scripts/generate-summaries.mjs",
"scripts/present.mjs",
"scripts/serve-built.mjs"
Expand Down
8 changes: 2 additions & 6 deletions .github/workflows/product-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,8 @@ permissions:

jobs:
product-gate:
name: Product gate (Node ${{ matrix.node-version }})
name: Product gate (Node 24.20.0)
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [22.13.0, 24.x]
steps:
- name: Check out repository
uses: actions/checkout@v6
Expand All @@ -22,7 +18,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
node-version: '24.20.0'
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install lockfile dependencies
Expand Down
21 changes: 1 addition & 20 deletions .github/workflows/test-lanes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,26 +49,7 @@ jobs:
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run Git and server tests
run: pnpm run test:integration

coverage:
if: github.event_name != 'schedule'
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v6
- name: Set up pnpm
uses: pnpm/action-setup@v4
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: 22.13.0
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Check core coverage
- name: Run core tests with coverage
run: pnpm run test:coverage
- name: Upload coverage report
if: always()
Expand Down
33 changes: 27 additions & 6 deletions docs/content/development.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ lint, builds the app, runs the Node unit and integration tests, checks and
builds the docs, then installs the packed package in a temporary folder and
runs its CLI. Each stage names its failure before the command stops.

Npm release verification skips docs and saves the tarball from that same
package smoke test. Publishing uses that verified tarball without rebuilding
it. PR checks and site deployment still check and build the docs.

Install Chromium once after setup, and again when Playwright changes:

```sh
Expand Down Expand Up @@ -85,19 +89,23 @@ corepack pnpm run test:platform
| Command | What it checks |
| --- | --- |
| `pnpm run test:unit` | Fast parser, provider, doctor, release, config, and path checks. It does not build the app. |
| `pnpm run test:integration` | The production build plus local Git, timing, agent note, presenter, and server checks. |
| `pnpm run test:coverage` | Per-file coverage for the CLI parser, target builder, agent note writer, and presenter. |
| `pnpm run test:integration` | The production build plus local Git, agent note, presenter, and server checks. |
| `pnpm run test:coverage` | Unit and integration tests once, with per-file coverage checks. |
| `pnpm run test:browser` | The review journey in Chromium. It does not download a browser. |
| `pnpm run test:platform` | Host command lookup and npm launcher rules with local fake tools. |
| `pnpm test` | All five lanes in order. |
| `pnpm test` | Unit and integration tests with coverage, then browser and platform tests. |

Coverage wraps `test:core`, which runs the unit and integration commands. It
does not repeat the integration tests. The fast unit job also runs on its own
in CI to report failures early.

The coverage lane writes text, JSON summary, and LCOV reports under
`coverage/`. Each covered file must keep at least 80% statement and line
coverage, 60% branch coverage, and 90% function coverage. The check applies
the floor to each file.

Pull request jobs run the unit, integration, coverage, and browser lanes from
a clean Ubuntu checkout. They use local Git repos, fake coding agents, and
Pull request jobs run a fast unit check, the combined core coverage check,
and browser tests from a clean Ubuntu checkout. They use local Git repos, fake coding agents, and
checked-in browser data. A weekly job runs the platform lane on macOS 15 and
Windows 2025. You can also start the **Test lanes** workflow by hand.

Expand Down Expand Up @@ -284,6 +292,19 @@ same bounded canary from an authenticated checkout with:
pnpm run benchmark:canary -- --runs 1 --reasoning minimal
```

## Measure live updates

Run the live-update benchmark by hand when changing event delivery or polling:

```sh
pnpm run benchmark:live-update -- --mode events
pnpm run benchmark:live-update -- --mode poll
```

These commands report timing samples. They do not enforce a speed threshold
and are not part of the test suite. Server and browser tests check live-update
behavior and recovery.

## Publish a release

Use the GitHub Actions `Release` workflow for normal releases. Run it from
Expand Down Expand Up @@ -355,7 +376,7 @@ corepack pnpm run release:verify
```

This command requires a clean tree and a `v<version>` tag on `HEAD`. It runs the
full product gate, installs and tests the exact tarball in a temporary consumer,
product gate without docs, installs and tests the exact tarball in a temporary consumer,
and records the commit and tarball hash in `.cache/`.

Sign in to npm when needed, then publish by naming the exact version again:
Expand Down
14 changes: 11 additions & 3 deletions fallow-baselines/health.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
"count": 1
}
},
"scripts/agent-note-output.mjs": {
"crap_high": {
"count": 1
},
"crap_moderate": {
"count": 3
}
},
"scripts/build-diff-data.mjs": {
"complexity_critical": {
"count": 1
Expand Down Expand Up @@ -80,10 +88,10 @@
"count": 2
},
"crap_high": {
"count": 4
"count": 3
},
"crap_moderate": {
"count": 4
"count": 1
}
},
"scripts/present.mjs": {
Expand Down Expand Up @@ -161,4 +169,4 @@
"scripts/build-diff-data.mjs:complexity",
"app/page.tsx:complexity"
]
}
}
13 changes: 8 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"scripts/access-token.mjs",
"scripts/agent-config.mjs",
"scripts/agent-exclusions.mjs",
"scripts/agent-note-output.mjs",
"scripts/agent-review.mjs",
"scripts/agent-usage.mjs",
"scripts/build-diff-data.mjs",
Expand Down Expand Up @@ -83,16 +84,18 @@
"prepack": "pnpm run build",
"setup": "pnpm install --frozen-lockfile",
"setup:smoke": "node scripts/setup-smoke.mjs",
"test": "pnpm run test:unit && pnpm run test:integration && pnpm run test:coverage && pnpm run test:browser && pnpm run test:platform",
"test:unit": "node --test tests/access-token.test.mjs tests/agent-config.test.mjs tests/agent-exclusions.test.mjs tests/agent-review.test.mjs tests/agent-usage.test.mjs tests/automation-trust.test.mjs tests/cache.test.mjs tests/cli-args.test.mjs tests/cli-docs.test.mjs tests/coding-agents.test.mjs tests/data-contract.test.mjs tests/doctor.test.mjs tests/landing-demo.test.mjs tests/package-manifest.test.mjs tests/plan-ledger.test.mjs tests/presenter-runtime.test.mjs tests/product-gate.test.mjs tests/release-workflow.test.mjs tests/release.test.mjs tests/review-chat.test.mjs tests/summary-path.test.mjs tests/support-record.test.mjs tests/test-lanes.test.mjs tests/tool-profiles.test.mjs",
"test:integration": "pnpm run build && node --test --test-concurrency=1 tests/dev.test.mjs tests/generate-summaries.test.mjs tests/live-update-speed.test.mjs tests/performance-gate.test.mjs tests/present-agent.test.mjs tests/present-help.test.mjs tests/present-instances.test.mjs tests/presenter-recovery.test.mjs tests/remote-targets.test.mjs tests/rendered-html.test.mjs tests/serve-built.test.mjs tests/setup-environments.test.mjs",
"test:coverage": "pnpm run build && c8 node --test --test-concurrency=1 tests/cli-args.test.mjs tests/generate-summaries.test.mjs tests/present-agent.test.mjs tests/present-help.test.mjs tests/present-instances.test.mjs tests/remote-targets.test.mjs tests/serve-built.test.mjs",
"test": "pnpm run test:coverage && pnpm run test:browser && pnpm run test:platform",
"test:unit": "node --test tests/access-token.test.mjs tests/agent-config.test.mjs tests/agent-exclusions.test.mjs tests/agent-note-output.test.mjs tests/agent-review.test.mjs tests/agent-usage.test.mjs tests/automation-trust.test.mjs tests/cache.test.mjs tests/cli-args.test.mjs tests/cli-docs.test.mjs tests/coding-agents.test.mjs tests/data-contract.test.mjs tests/doctor.test.mjs tests/landing-demo.test.mjs tests/package-manifest.test.mjs tests/plan-ledger.test.mjs tests/presenter-runtime.test.mjs tests/product-gate.test.mjs tests/release-workflow.test.mjs tests/release.test.mjs tests/review-chat.test.mjs tests/summary-path.test.mjs tests/support-record.test.mjs tests/test-lanes.test.mjs tests/tool-profiles.test.mjs",
"test:integration": "pnpm run build && node --test --test-concurrency=1 tests/dev.test.mjs tests/generate-summaries.test.mjs tests/performance-gate.test.mjs tests/present-agent.test.mjs tests/present-help.test.mjs tests/present-instances.test.mjs tests/presenter-recovery.test.mjs tests/remote-targets.test.mjs tests/rendered-html.test.mjs tests/serve-built.test.mjs tests/setup-environments.test.mjs",
"test:coverage": "c8 pnpm run test:core",
"test:browser": "pnpm run build && node --test tests/browser/*.test.mjs",
"test:browser:install": "playwright install chromium",
"test:cloud": "node --test tests/generate-summaries.test.mjs tests/present-agent.test.mjs",
"test:platform": "node --test tests/platform-shell.test.mjs",
"test:run": "node --test tests/*.test.mjs",
"lint": "tsc --noEmit && eslint ."
"lint": "tsc --noEmit && eslint .",
"test:core": "pnpm run test:unit && pnpm run test:integration",
"benchmark:live-update": "node benchmarks/live-update-speed.mjs"
},
"devDependencies": {
"@axe-core/playwright": "4.12.1",
Expand Down
Loading
Loading