Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
64448e1
docs(oracles): ship setup, design, and review skills with the oracle …
KyleAMathews Nov 10, 2026
25b8bbe
chore: add changeset for the oracle skills and docs
KyleAMathews Nov 10, 2026
27a9ad7
docs(oracles): add one worked example per model style
KyleAMathews Nov 10, 2026
045347f
docs(oracles): use review and testing terms, not security terms
KyleAMathews Nov 10, 2026
db3eb66
docs(oracles): restore the design-grammar step and add its card
KyleAMathews Nov 10, 2026
15f03f6
docs(oracles): add oracles-evaluate-review and tighten the design loop
KyleAMathews Nov 10, 2026
8433d75
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 10, 2026
f5011b0
docs(oracles): follow #6 in setup, and require a fixed seed
KyleAMathews Nov 10, 2026
8baf6e2
docs(oracles): fix what two fresh-agent validation runs hit
KyleAMathews Nov 10, 2026
c165ff8
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 10, 2026
12ddccd
docs(oracles): address the external review of the skills
KyleAMathews Nov 10, 2026
5b4eb68
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 10, 2026
62e8c42
docs(oracles): mutant validity follows the TypeScript types
KyleAMathews Nov 10, 2026
76057d9
docs(oracles): fix what round-2 validation hit
KyleAMathews Nov 11, 2026
5f573b9
docs(oracles): point the refactor finding at design step 7
KyleAMathews Nov 11, 2026
7fe0578
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 11, 2026
6bf40d8
docs(oracles): the README example covers -0 and reaches zero gaps
KyleAMathews Nov 11, 2026
d6d4455
docs(oracles): fix what round-3 validation hit
KyleAMathews Nov 11, 2026
573c671
docs(oracles): write the general law down, and trigger the design gra…
KyleAMathews Nov 11, 2026
dfc1123
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 11, 2026
3ac23b9
docs(oracles): boundary-condition thinking and adjacent forms
KyleAMathews Nov 11, 2026
e50349e
docs(oracles): fill-in law sheet and round-4 validation fixes
KyleAMathews Nov 11, 2026
23de737
docs(oracles): interim rules for per-law kill credit and hoisted Type…
KyleAMathews Nov 11, 2026
949c4f7
docs(oracles): round-5 fixes, prose law blocks, and the ownership split
KyleAMathews Nov 11, 2026
c0a7e71
docs(oracles): write the oracle file's prose laws first, then the code
KyleAMathews Nov 11, 2026
91609b9
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 11, 2026
3dec7d5
docs(oracles): teach the gap CLI's exit codes, and round-5 setup fixes
KyleAMathews Nov 11, 2026
bd5b900
docs(oracles): interim rule for an unnamed default export in owns
KyleAMathews Nov 11, 2026
222a780
docs(oracles): xo inline disables, other source dirs, and calls typed…
KyleAMathews Nov 11, 2026
7ff006c
docs(oracles): put everything on oracleProperty, and do not call decl…
KyleAMathews Nov 11, 2026
e34ab01
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 11, 2026
9f255db
docs(oracles): follow main 1bb905a (#15 to #19)
KyleAMathews Nov 11, 2026
54f702c
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 11, 2026
c2a8757
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 11, 2026
27f5367
docs(oracles): pass --config for a non-default Vitest config name (#26)
KyleAMathews Nov 11, 2026
87cdf12
docs(oracles): a copy-and-paste prompt to try the package
KyleAMathews Nov 11, 2026
833f7ca
docs(oracles): open the law block with what the oracle owns, then a hook
KyleAMathews Nov 11, 2026
e08ad18
docs(oracles): sharper law block guidance from the round-6 rewrites
KyleAMathews Nov 11, 2026
d366330
docs(oracles): start the law block with the contract as a short code …
KyleAMathews Nov 11, 2026
1c3a2f0
docs(oracles): write the contract block as public calls and their res…
KyleAMathews Nov 11, 2026
86fd7c1
docs(oracles): write a shared call once in the contract block
KyleAMathews Nov 11, 2026
4284ba7
docs(oracles): count results, not lines, in the contract block
KyleAMathews Nov 11, 2026
714b3d6
docs(oracles): open the law block with what the oracle owns, then the…
KyleAMathews Nov 11, 2026
a05cbba
docs(oracles): keep the opening sentences to about 40 words
KyleAMathews Nov 11, 2026
9c5a3e2
docs(oracles): rewrap the opening-sentences item
KyleAMathews Nov 11, 2026
b5836fb
docs(oracles): write the law block for maintainers and serious users
KyleAMathews Nov 11, 2026
cf64491
docs(oracles): a guided first session, and the oracle file written once
KyleAMathews Nov 11, 2026
8c8311e
docs(oracles): rewrite the first session as a guided, probe-first wal…
KyleAMathews Nov 11, 2026
cc88112
docs(oracles): restore what the rewrite dropped, and align start, set…
KyleAMathews Nov 11, 2026
171bb54
docs(oracles-start): old or other test runners, private worksheet lab…
KyleAMathews Nov 11, 2026
7294946
docs(oracles-start): pick the spot when asked to, and how to run a probe
KyleAMathews Nov 11, 2026
3f1faf1
docs(oracles-start): show a design for sign-off in plain lines
KyleAMathews Nov 11, 2026
1a0f29b
docs(oracles-start): the opening says what the session will do before…
KyleAMathews Nov 11, 2026
a04abba
docs(oracles-design): the law block does not tell the story of the se…
KyleAMathews Nov 11, 2026
06706c6
docs(oracles-start): approved potential laws are laws; gloss framewor…
KyleAMathews Nov 11, 2026
e1085aa
docs(oracles-start): the walk-through follows one bug through the file
KyleAMathews Nov 11, 2026
5d44534
docs(oracles): probes import source when the build is missing; fix-hi…
KyleAMathews Nov 11, 2026
d614a44
docs(oracles): the private worksheet says backing, not status; decisi…
KyleAMathews Nov 11, 2026
1d32560
docs(oracles-start): list fast-check and vitest even when npm install…
KyleAMathews Nov 11, 2026
88c759f
docs(oracles-start): what to do when Node cannot load the source for …
KyleAMathews Nov 11, 2026
3b486ba
docs(oracles-start): a commit message that states an intent is an aut…
KyleAMathews Nov 11, 2026
84cdc75
docs(oracles-start): with no bug, show the oracle catching a planted …
KyleAMathews Nov 11, 2026
3dbf0eb
docs(oracles-start): the lint that waits is the oracles plugin, not t…
KyleAMathews Nov 11, 2026
4d421ca
docs(oracles-start): present the same way when the oracles found no bug
KyleAMathews Nov 11, 2026
00509ed
docs(oracles): one law per property; always show the contract; pin Vi…
KyleAMathews Nov 11, 2026
16426a7
docs(oracles): a decision as authority names who made it, with their …
KyleAMathews Nov 11, 2026
95d3b99
Merge origin/main into docs/oracle-skills
KyleAMathews Nov 11, 2026
fd3a799
docs(oracles): match main: declareOracle is deleted, legacyCampaigns …
KyleAMathews Nov 11, 2026
4a85561
docs(oracles): probes learn what the oracle needs; a passing first or…
KyleAMathews Nov 11, 2026
4749f61
docs(oracles-start): show the questions the probes will answer in the…
KyleAMathews Nov 11, 2026
5bc7e2f
docs(oracles): resolve cross-file drift from the day's edits
KyleAMathews Nov 11, 2026
da4d6da
docs(oracles-start): milestones to work toward; the engineer decides …
KyleAMathews Nov 11, 2026
8f7f134
docs(oracles-start): move install and probe special cases to referenc…
KyleAMathews Nov 11, 2026
9d16dbb
docs(oracles): developer and maintainer as the two roles; terms recon…
KyleAMathews Nov 11, 2026
1a9e80e
docs(oracles-start): keep the preview feedback log in the repository,…
KyleAMathews Nov 11, 2026
835ec4b
docs(oracles-start): link to the AGENTS.md block in oracles-setup step 4
KyleAMathews Nov 11, 2026
7d086f3
docs(oracles-start): when to ask for the GitHub login; create the fee…
KyleAMathews Nov 11, 2026
48ca60c
docs(oracles): examples that do not prime a validation repository; th…
KyleAMathews Nov 11, 2026
3512d0c
docs(oracles-start): before production the lint rule means the repo's…
KyleAMathews Nov 11, 2026
6001ec1
docs(oracles-design): lint in a first session is the repository's own
KyleAMathews Nov 11, 2026
0c2b7d7
docs(oracles-design): B6 does not forbid the check of a no-throw law
KyleAMathews Nov 11, 2026
68856a3
docs(oracles): always build the strongest model the laws need; never …
KyleAMathews Nov 11, 2026
0aff4dd
docs(oracles): the package README is one sentence and the prompt
KyleAMathews Nov 11, 2026
bc4544c
docs(oracles-start): talk about the developer's code in its own terms…
KyleAMathews Nov 11, 2026
2179c2f
docs(oracles-start): examples from a fictional retry helper, not a re…
KyleAMathews Nov 11, 2026
23af0bf
docs(oracles-start): present spots, explain every new word, oracle fi…
KyleAMathews Nov 11, 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
6 changes: 6 additions & 0 deletions .changeset/ship-oracle-skills.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@tanstack/oracles': patch
'@tanstack/eslint-plugin-oracles': patch
---

Ship agent skills and docs inside `@tanstack/oracles`. The package now includes `skills/` with `oracles-setup`, `oracles-design`, `oracles-review`, and `oracles-evaluate-review`. It also includes `docs/`: the oracle checklist (version 1, ORC-001 to ORC-016), a glossary, a techniques guide, model-style examples, and six instrument cards. A coding agent reads them from `node_modules`. `@tanstack/eslint-plugin-oracles` gains a README that lists its configs and rules.
15 changes: 7 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@ every commit with [pkg.pr.new](https://pkg.pr.new).

## Packages

- `packages/oracles` (`@tanstack/oracles`): the oracle framework, and the
`oracle-gaps` CLI. The CLI lists the production behaviour that a
To try it, paste the prompt in
[`packages/oracles/README.md`](packages/oracles/README.md) into your coding
agent.

- `packages/oracles` (`@tanstack/oracles`): the oracle framework, its skills
and docs, and the `oracle-gaps` CLI. The CLI lists the production behavior that a
project's owning oracles leave unexercised or unjudged. A project runs it as
`oracle-gaps --package <dir> --source <src/x.ts,...>`, with
`--env-prefix` set to the prefix that the project passes to
Expand Down Expand Up @@ -148,12 +152,7 @@ required. The rule reports:

A framework implementation module is exempt.

No other configuration exempts a file. `settings.oracles.legacyCampaigns`, the
old list of files that kept their raw campaigns while they migrated, is removed.
A configuration that still sets it, to any value, exempts nothing. The rule
reports it as `removedSetting` at line 1 of each oracle file that the
configuration reaches, since ESLint runs a rule once per file. Convert the
listed files to `oracleProperty`, then delete the setting.
No configuration exempts any other file.

A non-array `settings.oracles.implementationModules` or `replayWitnessModules` is
reported at line 1 as `malformedSetting`, and it is read as an empty list.
39 changes: 39 additions & 0 deletions packages/eslint-plugin-oracles/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# @tanstack/eslint-plugin-oracles

Lint rules for oracle files written with `@tanstack/oracles`. They report the
shortcuts that make an oracle pass without enforcing its law, wherever a
syntactic check can see them. They need no type information, so an agent's
post-edit hook can run them on one file quickly.

Install it at the same pkg.pr.new commit as `@tanstack/oracles`. The
`oracles-setup` skill in that package configures it.

## Configs

| Config | Files | Rules |
| --------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `configs.recommended` | Files whose names contain `oracle` (`.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`) | `no-disabled`, `no-oracle-disable`, `no-unit-test`, `oracle-property-only`, `pure-model`, `replayable-seed` |
| `configs.production` | `src/**` and `packages/*/src/**` | `probe-form` |

The `recommended` config also sets `linterOptions.noInlineConfig` for oracle
files, so a directive comment cannot switch a rule off there. Fix a report;
do not disable the rule.

The `production` config covers `src/**` and `packages/*/src/**`. For source
elsewhere, add `oracle/probe-form` with your own glob.

## Rules

| Rule | Reports |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `oracle/no-disabled` | An oracle test that stops running: `.only`, a skipped body, a switch-off condition, or one run with no fixed history. |
| `oracle/no-unit-test` | A test in an oracle file that reaches no declared check or model: an ordinary unit test. |
| `oracle/no-oracle-disable` | A directive comment that would silence an oracle rule. Oracle rules cannot be disabled inline. |
| `oracle/oracle-property-only` | A raw campaign (`fc.assert`, `fc.check`, or a `.prop` registration) or a legacy campaign API in an oracle file. Only `oracleProperty` declares a generated-history law. |
| `oracle/pure-model` | A model, check, or reach classifier that reads a clock, ambient randomness, or a timer. |
| `oracle/probe-form` | A state probe in production code that is not in the one form the production build strips. |
| `oracle/replayable-seed` | A property seed that the shared replay variables cannot select. |

The decided bans on snapshot matchers (B1), `fc.pre` (B3), production imports
in a model (B4), and identical comparison operands (B7) are not rules yet.
Reviews check them until they ship.
16 changes: 16 additions & 0 deletions packages/oracles/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# @tanstack/oracles

Oracle testing for TypeScript: an agent states what your code promises, then
checks your real code against an independent model of those promises.

```text
Show me what oracle testing with @tanstack/oracles can find in this repository.

1. Find the current commit of TanStack/oracles. Run
`git ls-remote https://github.com/TanStack/oracles refs/heads/main`, and use
the first 7 characters of the hash as <sha>.
2. Install https://pkg.pr.new/TanStack/oracles/@tanstack/oracles@<sha> as a dev
dependency, with this repository's package manager.
3. Read node_modules/@tanstack/oracles/skills/oracles-start/SKILL.md in full,
and follow it. Use <sha> wherever a skill asks for the commit to pin.
```
Loading
Loading