Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 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
daab435
docs(oracles-start): present findings as classes of bugs, never minim…
KyleAMathews Nov 12, 2026
9dbe4af
docs(oracles-start): the oracle captures and enforces design; walk-th…
KyleAMathews Nov 12, 2026
46cf2b8
docs(oracles): run the oracles through the gap check, not Vitest alone
KyleAMathews Nov 12, 2026
34365fb
Merge origin/main into docs/oracle-skills
KyleAMathews Nov 12, 2026
d6108fe
docs(oracles): act on gap-check results as they stream; a failing ora…
KyleAMathews Nov 12, 2026
59746e3
docs(oracles-setup): the agent owns production code and is an optimiz…
KyleAMathews Nov 12, 2026
c0139d9
Merge origin/main into docs/oracle-skills
KyleAMathews Nov 12, 2026
78fa1b7
docs(oracles): the gap check keeps its state and report in the OS tem…
KyleAMathews Nov 12, 2026
f7e99dc
docs(oracles-setup): stop a gap-check run by its recorded process ID,…
KyleAMathews Nov 12, 2026
8741068
docs(oracles-setup): code quality is an ethos, not a mode to switch into
KyleAMathews Nov 12, 2026
1079eb2
docs(oracles-setup): keep code improvements in proportion to the task
KyleAMathews Nov 12, 2026
3f4cebb
docs(oracles-setup): ship the oracle orientation in the AGENTS.md blo…
KyleAMathews Nov 12, 2026
8c900b2
docs(oracles): a gap the developer agrees is a gap-check bug goes in …
KyleAMathews Nov 12, 2026
2c5b2ce
docs(oracles): named default exports keep their name in owns; other r…
KyleAMathews Nov 12, 2026
79600f8
docs(oracles): oracles-start becomes oracles-explore, usable on any a…
KyleAMathews Nov 12, 2026
2546c6e
docs(oracles): opener first, narration without questions, milestones,…
KyleAMathews Nov 12, 2026
4c59e74
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 12, 2026
80964f6
docs(oracles): bind each calibration to the history it corrupts
KyleAMathews Nov 12, 2026
44f37f7
docs(oracles): opener before any other tool call, milestones only whe…
KyleAMathews Nov 12, 2026
9cc9392
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 12, 2026
cfabba8
docs(oracles): the lint plugin's testPackages and nonTestPackages for…
KyleAMathews Nov 12, 2026
81a9a8c
docs(oracles): never cite the skill or its instructions as the reason…
KyleAMathews Nov 12, 2026
52d7337
docs(oracles): a gap is never outside the oracle's scope; propose the…
KyleAMathews Nov 12, 2026
b22629f
docs(oracles): name the design grammar to the developer, with a one-l…
KyleAMathews Nov 12, 2026
6cf484d
docs(oracles): each gap-check log gets a path of its own, never a fix…
KyleAMathews Nov 12, 2026
a3667e1
docs(oracles): the install the prompt asks for comes before the opener
KyleAMathews Nov 12, 2026
a3afe8b
docs(oracles): a gap no input can tell apart is redundant code: simpl…
KyleAMathews Nov 13, 2026
e02659a
docs(oracles): the redundant-code rule does not apply to fast paths
KyleAMathews Nov 13, 2026
517443f
docs(oracles): problems.md covers a gap check that runs out of heap
KyleAMathews Nov 13, 2026
53b846a
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 13, 2026
f98b7cd
docs(oracles): read the gap check's oracle-gaps: prefixed stream and …
KyleAMathews Nov 13, 2026
32c95c8
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 13, 2026
8a1574f
docs(oracles): an extra-work gap is a fast path: keep it and declare …
KyleAMathews Nov 13, 2026
136f02e
Merge remote-tracking branch 'origin/main' into docs/oracle-skills
KyleAMathews Nov 13, 2026
30b2a93
docs(oracles): say search and look for, not hunt; the card is now the…
KyleAMathews Nov 13, 2026
61fe1b9
docs(oracles): usability fixes: say that probes only sample, give upd…
KyleAMathews Nov 13, 2026
522aa90
chore(changeset): list oracles-explore and the intro doc in the skill…
KyleAMathews Nov 13, 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 five skills: `oracles-explore` (the entry point: it probes a repository, shows what an oracle can find, and builds the first oracle with the developer), `oracles-setup`, `oracles-design`, `oracles-review`, and `oracles-evaluate-review`. It also includes `docs/`: an introduction to oracles, 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 @@ -530,12 +534,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-explore/SKILL.md in full,
and follow it. Use <sha> wherever a skill asks for the commit to pin.
```
Loading
Loading