Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
d011849
docs: symbol usage inventory for simplification
marcosluizfp Jul 29, 2026
1e9c42e
docs(inventory): note the ./testing subpath exports left out of scope
marcosluizfp Jul 29, 2026
6241438
docs(inventory): correct four verdicts and disclose the enumeration s…
marcosluizfp Jul 29, 2026
bdf6338
docs(inventory): apply the published-bin rule evenly to models
marcosluizfp Jul 29, 2026
aa9d3c7
docs: tutorial outline — the public API contract
marcosluizfp Jul 29, 2026
d2cc49d
docs: fix the tutorial contract after review — 89 taught symbols
marcosluizfp Jul 29, 2026
e2b5561
docs: reconcile round-4 demotions with the inventory's evidence sections
marcosluizfp Jul 29, 2026
5b5e30f
refactor(core)!: public API = tutorial contract; internals move to @l…
marcosluizfp Jul 29, 2026
e6860ec
fix(core): type-closure rider, honest barrel header, catchable GuardE…
marcosluizfp Jul 29, 2026
08fecd0
refactor(core): split guards.ts into per-category files + GUARD_CATAL…
marcosluizfp Jul 29, 2026
4b59968
fix(core): add hook axis to GuardCatalogEntry, sharpen when-to-use, h…
marcosluizfp Jul 29, 2026
55b8ac5
refactor(core)!: erase the coherence queries; the trunk fold goes mod…
marcosluizfp Jul 29, 2026
d56dc8e
docs(governance): correct the Task-5 case count, disclose the catalog…
marcosluizfp Jul 29, 2026
f985f18
chore(core): the runtime's dead exports go module-local
marcosluizfp Jul 29, 2026
199c012
refactor(mastra)!: LoopRunAgent facade only; split agent.ts
marcosluizfp Jul 29, 2026
a1f2a41
fix(mastra): pin the LoopRunResultMeta mirror; correct lock path + re…
marcosluizfp Jul 29, 2026
52fa552
refactor(models,eval,server)!: barrels converge to the tutorial contr…
marcosluizfp Jul 29, 2026
d33d5e5
chore(docs): tutorial snippet package — snippets compile or CI fails
marcosluizfp Jul 29, 2026
220c881
fix(docs): tutorial snippets — one-tool spec, guarded datetimes, real…
marcosluizfp Jul 29, 2026
62676c3
fix(docs): hello world passes a world FACTORY, not an instance
marcosluizfp Jul 29, 2026
c432a43
docs: tutorial chapters 01–03
marcosluizfp Jul 29, 2026
2610195
docs: review fixes for tutorial 01-03, and move worldFromTools/StateV…
marcosluizfp Jul 29, 2026
0d2a66e
docs: fix the copy-step file count in tutorial 02
marcosluizfp Jul 29, 2026
2b7d725
docs: chapter 04 guard catalog, generated from GUARD_CATALOG
marcosluizfp Jul 29, 2026
abcd735
docs: chapter 04 review fixes — maxCalls/canonArgs, compiled examples…
marcosluizfp Jul 29, 2026
e4ca952
docs: tutorial chapters 05–06
marcosluizfp Jul 29, 2026
f701f76
docs: review fixes for tutorial chapters 05–06
marcosluizfp Jul 29, 2026
7e4b427
docs: re-review wording fixes for chapter 05–06
marcosluizfp Jul 29, 2026
d0efe3c
docs: retire the superseded doc set; move the outline to specs
marcosluizfp Jul 29, 2026
c84fcbf
docs: rewrite README around the tutorial; correct stale API references
marcosluizfp Jul 29, 2026
771abcf
chore(release): major changeset, migration notes, Task 12 proof record
marcosluizfp Jul 29, 2026
0b472c0
docs: correct the migration notes against the real consumer repos
marcosluizfp Jul 29, 2026
ba6004f
fix(build): clean dist before building, so npm pack ships no orphans
marcosluizfp Jul 29, 2026
dcc824a
docs(core)!: GUARDS.md is maintainer internals; the catalog is the vo…
marcosluizfp Jul 29, 2026
281118d
docs(tutorial): chapter 05 works from the reader's own directory
marcosluizfp Jul 29, 2026
34542c7
docs: package READMEs, and four corrections that were overclaiming
marcosluizfp Jul 29, 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
52 changes: 52 additions & 0 deletions .changeset/simplification-major.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
'@looprun-ai/core': major
'@looprun-ai/mastra': major
'@looprun-ai/models': major
'@looprun-ai/eval': major
'@looprun-ai/server': major
'@looprun-ai/vercel': major
'looprun': major
---

**Breaking: the public API is now exactly what the tutorial teaches.**

Every package barrel was converged onto a single contract — the symbols taught by
`docs/tutorial/01`–`06`. Names that no package documented and no consumer imported were deleted;
names that only the runtime needs moved behind `@looprun-ai/core/internal`. Each barrel is now
pinned by a surface-lock test, so it cannot drift back — with one gap: the published `./testing`
subpaths of `@looprun-ai/core` and `@looprun-ai/mastra` re-export by wildcard (~27 symbols) and
carry no lock yet, so those two are the one surface that can still drift. Locking them is a
follow-up.

| package | public exports | before |
|---|---|---|
| `@looprun-ai/core` | 51 taught (+11 type-closure riders) | 107 named + 2 wildcard re-exports |
| `@looprun-ai/mastra` | 7 + core flow-through | 25 named + 1 wildcard |
| `@looprun-ai/models` | 8 (+2 riders) | 24 |
| `@looprun-ai/eval` | 19 (+9 riders) | 52 |
| `@looprun-ai/server` | 4 (+3 riders) | 13 |

**Why `looprun` and `@looprun-ai/vercel` are also major.** The `looprun` umbrella re-exports core, so
its root and `./core` barrels narrow exactly as core does — the break reaches consumers through the
facade, not only through the scoped package. `@looprun-ai/vercel` has no API change at all (its
factory still throws); it is major because the changeset config links `looprun` and `@looprun-ai/*`
into one version group, so the whole set moves together.

**What moved rather than vanished.** `@looprun-ai/core/internal` is a new, explicitly unstable
subpath carrying the runtime primitives (ledger, turn machine, trunk internals, `GUARD_CATALOG`,
`GuardExecutionError`). It exists so in-repo tooling and forks keep working; it carries no
compatibility promise across releases.

**What was cut outright.** The `coherence` guard family and its trunk section were removed
(-396 LOC); the trunk fold was proven byte-identical across the change. Runtime helpers that had
been exported from `@looprun-ai/core` without ever being documented or imported — including
`uploadDisplayLabels` and `isReplyOnly` — are now module-local to `renderTurnPrompt`. Package
`CHANGELOG.md` entries that announced them stay unedited: they are an accurate record of what those
versions shipped.

**Also in this release.** `packages/core/src/guards.ts` was split into `guards/` (30 catalogued
factories, all files ≤500 lines); `@looprun-ai/mastra`'s `agent.ts` was split; and the nine
superseded documents under `docs/` were replaced by the six-chapter tutorial, every code block of
which is compiled in CI against the published packages.

Migration table for external consumers: `docs/superpowers/specs/2026-07-28-migration-notes.md`.
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
- [ ] The coverage ratchet was **not lowered** (`proof completeness · <kind>` still complete)
- [ ] Proof record committed via `pnpm proofs:record` (`governance/proofs/*.md`, `verdict: PASS`)
- [ ] `governance/MATRIX.md` regenerated (`pnpm proofs:matrix`) and committed
- [ ] If a guard kind changed: `packages/core/GUARDS.md` **and** `skills/agentspec/references/guard-catalog.md` updated (the parity test enforces it)
- [ ] If a guard kind changed: its `GUARD_CATALOG` entry in `packages/core/src/guards/catalog.ts` added/updated and `pnpm docs:guards` re-run (the parity test enforces the entry; the drift gate enforces the regeneration)
- [ ] Drift lint clean (`node tests/no-bench-drift.test.mjs`)
- [ ] Docs-tooling-only change — no proof record needed

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ jobs:
# no-bench-drift) are ordinary vitest files — they RUN on every push/PR, not just exist.
- run: pnpm -r --if-present test
- run: node tests/no-bench-drift.test.mjs
# Tutorial chapter 04 is GENERATED from GUARD_CATALOG (needs the build above): a kind whose
# catalog entry changed without the chapter being re-rendered fails here.
- run: node scripts/gen-guards-chapter.mjs --check
# Governance: the deterministic guard-proof suite + the generated matrix must be in sync.
- run: pnpm test:proofs
- run: node scripts/proofs/gen-matrix.mjs --check
Expand Down
7 changes: 5 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,11 @@ Author the proof **before** the implementation — the proof cases are the spec.
new kind with **positive / negative / neutral** L1 cases plus at least one **L3 loop** case (and the
collective non-interference expectation). See
[`skills/looprun-governance/references/proof-case-authoring.md`](skills/looprun-governance/references/proof-case-authoring.md).
2. **Implement** the guard in `packages/core/src/guards.ts` until the cases pass.
3. **Update the catalog doc**: `packages/core/GUARDS.md`.
2. **Implement** the guard in the matching `packages/core/src/guards/<category>.ts` until the cases pass.
3. **Add the catalog entry**: a `GUARD_CATALOG` row in `packages/core/src/guards/catalog.ts` (name,
category, hook, summary, when-to-use, a compilable example), then `pnpm docs:guards` to regenerate
the tutorial's guard chapter and its compiled examples. The catalog is the vocabulary of record;
`packages/core/GUARDS.md` is maintainer internals and carries no kind list.
4. **Run the suite**: `pnpm test:proofs` (green, ratchet not lowered).
5. **Generate the record**:
```bash
Expand Down
Loading
Loading