Skip to content
Open
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
5f673dc
refactor(repo): move xstate's guard evaluation into transitionGuards.…
systemfsoftware-maker Oct 9, 2026
529d193
build(repo): enrol transitionGuards.ts in lint, tsgo and XS1 (WIP, pa…
systemfsoftware-maker Oct 9, 2026
3cb23a1
Merge remote-tracking branch 'origin/main' into xs/xstate-guards
systemfsoftware-maker Oct 9, 2026
cd4a6f6
refactor(repo): import isStateId and guard admission from transitionG…
systemfsoftware-maker Oct 9, 2026
e7063e9
test(repo): test xstate's guard evaluation as a conformance spec
systemfsoftware-maker Oct 9, 2026
c381345
ci(repo): cap each mutation test runner isolate at a 2 GiB heap
systemfsoftware-maker Oct 9, 2026
b285484
Merge remote-tracking branch 'origin/xs/release-gate-runner-heap' int…
systemfsoftware-maker Oct 9, 2026
81c0115
ci(repo): print a failed shard's logs before its diagnostics re-run
systemfsoftware-maker Oct 9, 2026
da75edb
Merge remote-tracking branch 'origin/xs/release-gate-runner-heap' int…
systemfsoftware-maker Oct 9, 2026
930de0a
ci(repo): run mutation shards with one checker and one test runner
systemfsoftware-maker Oct 9, 2026
d0d03d7
Merge remote-tracking branch 'origin/xs/release-gate-runner-heap' int…
systemfsoftware-maker Oct 9, 2026
3e1f34f
ci(repo): print the failed shard's progress streams instead of stryke…
systemfsoftware-maker Oct 9, 2026
6d07817
Merge remote-tracking branch 'origin/xs/release-gate-runner-heap' int…
systemfsoftware-maker Oct 9, 2026
7cd18c2
ci(repo): run each shard project's stryker child with its output kept
systemfsoftware-maker Oct 9, 2026
ba4af50
Merge remote-tracking branch 'origin/xs/release-gate-runner-heap' int…
systemfsoftware-maker Oct 9, 2026
d7f31aa
ci(repo): take #82's release-gate commits back out of the guards branch
systemfsoftware-maker Oct 9, 2026
c514d52
Merge remote-tracking branch 'origin/main' into xs/xstate-guards
systemfsoftware-maker Oct 9, 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
5 changes: 5 additions & 0 deletions .changeset/guards-capability.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@systemfsoftware/xstate": minor
---

`checkStateIn(stateValue)` returns a function of the snapshot, for use in `pipe`; `checkStateIn(snapshot, stateValue)` is unchanged.
8 changes: 4 additions & 4 deletions packages/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Root `AGENTS.md` governs; these are the facts no default gate reports.

Forked from statelyai/xstate, branch `next` at `2146ae26ebfc7e6a624b3a1f237f9e6ddc30b9f5` (MIT). Members are owned (`REPO-O1`); upstream is a reference, never a merge source. Plan: systemfsoftware's `docs/plans/2026-10-05-2317-feat-xstate-v6-fork-plan.md`. Not forked (no consumer in this program): the Solid, Svelte, Vue, Angular and Preact bindings, `@xstate/codemod`, `@xstate/scxml`; core's `bin/xstate.js` only ran `@xstate/codemod` through `npx`, so it is not shipped.

| ID | Rule | Gate |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **XS1** | A member gains `stryker.config.ts`, `oxlint.config.ts` (extending the root `oxlint.shared.ts`) and its `mutation` and `lint` scripts with its first capability PR, and its debt-ledger entry goes in that PR: `scripts/stryker-plan-gate.ts` (`exemption`) reads any `XS1` entry for a member as leave to schedule no mutants. Until its last capability PR, a member whose `src` tsconfig lacks `@effect/language-service` points `lint:tsgo` at `tsconfig.tsgo.json`, which turns the plugin on for the enrolled `src` files only. Each capability PR adds the `src` files it covers to `mutate`, to the `lint` script and to `tsconfig.tsgo.json`, with its test files, and fixes their diagnostics without disable comments. The last capability PR turns the plugin on for the whole `src` tsconfig and deletes `tsconfig.tsgo.json`. Remaining debt: in `@systemfsoftware/xstate`, every `src` file outside `mutate` is unmutated, unlinted and unchecked by the Effect plugin until its capability PR (enrolled: `src/assert.ts`, `src/stateMatching.ts`, `src/mapState.ts`, `src/fsm.ts`, `src/graph/`; the `lint` script and `tsconfig.tsgo.json` name the whole folder, and `mutate` names its seven files with runtime logic, leaving out `types.ts` and `index.ts`). | `review` — wrong: a PR mutates `src/assert.ts` and leaves it out of the `lint` script or `tsconfig.tsgo.json`, or keeps a ledger entry for an enrolled member; right: `mutate`, the `lint` script, `tsconfig.tsgo.json` and this row's enrolled list all name `src/assert.ts`, and `lint:tsgo` prints a nonzero `Checked N files` |
| **XS2** | The persisted snapshot wire format is upstream v6's (actor refs `{ xstate$type: 'actorRef', id }`, children by logical address, timers with `startedAt`); it changes only through a versioned machine migration. | `review` — wrong: an encoder emits `{ _tag: 'ActorRef', id }`; right: the encoder writes `{ xstate$type: 'actorRef', id }` and the tagged class exists only after decode |
| ID | Rule | Gate |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **XS1** | A member gains `stryker.config.ts`, `oxlint.config.ts` (extending the root `oxlint.shared.ts`) and its `mutation` and `lint` scripts with its first capability PR, and its debt-ledger entry goes in that PR: `scripts/stryker-plan-gate.ts` (`exemption`) reads any `XS1` entry for a member as leave to schedule no mutants. Until its last capability PR, a member whose `src` tsconfig lacks `@effect/language-service` points `lint:tsgo` at `tsconfig.tsgo.json`, which turns the plugin on for the enrolled `src` files only. Each capability PR adds the `src` files it covers to `mutate`, to the `lint` script and to `tsconfig.tsgo.json`, with its test files, and fixes their diagnostics without disable comments. The last capability PR turns the plugin on for the whole `src` tsconfig and deletes `tsconfig.tsgo.json`. Remaining debt: in `@systemfsoftware/xstate`, every `src` file outside `mutate` is unmutated, unlinted and unchecked by the Effect plugin until its capability PR (enrolled: `src/assert.ts`, `src/stateMatching.ts`, `src/mapState.ts`, `src/fsm.ts`, `src/graph/`, `src/transitionGuards.ts`; the `lint` script and `tsconfig.tsgo.json` name the whole folder, and `mutate` names its seven files with runtime logic, leaving out `types.ts` and `index.ts`). | `review` — wrong: a PR mutates `src/assert.ts` and leaves it out of the `lint` script or `tsconfig.tsgo.json`, or keeps a ledger entry for an enrolled member; right: `mutate`, the `lint` script, `tsconfig.tsgo.json` and this row's enrolled list all name `src/assert.ts`, and `lint:tsgo` prints a nonzero `Checked N files` |
| **XS2** | The persisted snapshot wire format is upstream v6's (actor refs `{ xstate$type: 'actorRef', id }`, children by logical address, timers with `startedAt`); it changes only through a versioned machine migration. | `review` — wrong: an encoder emits `{ _tag: 'ActorRef', id }`; right: the encoder writes `{ xstate$type: 'actorRef', id }` and the tagged class exists only after decode |
2 changes: 0 additions & 2 deletions packages/unguarded-tests.json
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@
"packages/xstate/test/examples.cd.test.ts",
"packages/xstate/test/final.test.ts",
"packages/xstate/test/firstTenMinutes.v6.test.ts",
"packages/xstate/test/guards.test.ts",
"packages/xstate/test/history.test.ts",
"packages/xstate/test/id.test.ts",
"packages/xstate/test/initial.test.ts",
Expand Down Expand Up @@ -149,7 +148,6 @@
"packages/xstate/test/spawn.types.test.ts",
"packages/xstate/test/spawnChild.test.ts",
"packages/xstate/test/state.test.ts",
"packages/xstate/test/stateIn.test.ts",
"packages/xstate/test/stateInput.persistence.test.ts",
"packages/xstate/test/stateInput.test.ts",
"packages/xstate/test/strictTargets.types.test.ts",
Expand Down
10 changes: 5 additions & 5 deletions packages/xstate/etc/xstate-actors.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -491,11 +491,11 @@ export class TimeoutError extends Error {

// Warnings were encountered during analysis:
//
// dist/index-DpYRYoBT.d.ts:36:5 - (ae-forgotten-export) The symbol "ActorSystemRuntime" needs to be exported by the entry point actors.d.ts
// dist/index-DpYRYoBT.d.ts:71:3 - (ae-forgotten-export) The symbol "LogicTransition" needs to be exported by the entry point actors.d.ts
// dist/index-DpYRYoBT.d.ts:171:3 - (ae-forgotten-export) The symbol "Receiver" needs to be exported by the entry point actors.d.ts
// dist/index-DpYRYoBT.d.ts:298:3 - (ae-forgotten-export) The symbol "Subscription" needs to be exported by the entry point actors.d.ts
// dist/index-DpYRYoBT.d.ts:362:3 - (ae-forgotten-export) The symbol "ObservableActor" needs to be exported by the entry point actors.d.ts
// dist/index-BMYfZluc.d.ts:36:5 - (ae-forgotten-export) The symbol "ActorSystemRuntime" needs to be exported by the entry point actors.d.ts
// dist/index-BMYfZluc.d.ts:71:3 - (ae-forgotten-export) The symbol "LogicTransition" needs to be exported by the entry point actors.d.ts
// dist/index-BMYfZluc.d.ts:171:3 - (ae-forgotten-export) The symbol "Receiver" needs to be exported by the entry point actors.d.ts
// dist/index-BMYfZluc.d.ts:298:3 - (ae-forgotten-export) The symbol "Subscription" needs to be exported by the entry point actors.d.ts
// dist/index-BMYfZluc.d.ts:362:3 - (ae-forgotten-export) The symbol "ObservableActor" needs to be exported by the entry point actors.d.ts

// (No @packageDocumentation comment for this package)

Expand Down
8 changes: 4 additions & 4 deletions packages/xstate/etc/xstate-validation.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,10 @@ export interface StandardSchemaValidatorOptions {

// Warnings were encountered during analysis:
//
// dist/types-Dlyzn8C_.d.ts:873:3 - (ae-forgotten-export) The symbol "AnyActorLogic" needs to be exported by the entry point validation.d.ts
// dist/types-Dlyzn8C_.d.ts:878:3 - (ae-forgotten-export) The symbol "AnyEventObject" needs to be exported by the entry point validation.d.ts
// dist/types-Dlyzn8C_.d.ts:883:3 - (ae-forgotten-export) The symbol "Snapshot" needs to be exported by the entry point validation.d.ts
// dist/types-Dlyzn8C_.d.ts:884:3 - (ae-forgotten-export) The symbol "ExecutableActionObject" needs to be exported by the entry point validation.d.ts
// dist/types-DNQON1bi.d.ts:873:3 - (ae-forgotten-export) The symbol "AnyActorLogic" needs to be exported by the entry point validation.d.ts
// dist/types-DNQON1bi.d.ts:878:3 - (ae-forgotten-export) The symbol "AnyEventObject" needs to be exported by the entry point validation.d.ts
// dist/types-DNQON1bi.d.ts:883:3 - (ae-forgotten-export) The symbol "Snapshot" needs to be exported by the entry point validation.d.ts
// dist/types-DNQON1bi.d.ts:884:3 - (ae-forgotten-export) The symbol "ExecutableActionObject" needs to be exported by the entry point validation.d.ts

// (No @packageDocumentation comment for this package)

Expand Down
Loading
Loading