Final-review fold-ins (READY-WITH-NITS):
- facade resolveRender typed RunProjectRender; the flagship runProject() call site
drops 'as never' (one localized assertion in resolveRender suppresses only the
exactOptionalPropertyTypes spread-widening).
- fix stale N2-offline-boundary comments naming pre-reshape specifiers
(/run-project, /adapters/agent-compile) -> the real /run and /agents homes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Guardrail-review fold-ins on the 0.3.0 reshape:
- reactor({ adapters: { renderBackend } }) now threads the custom backend through
resolveRender -> runProject -> createAgentRender (the model-swap seam is reachable
from the headline facade, not just the low-level path); README snippet compiles.
- readme-snippets test exercises the real swap-a-backend invocation.
- facade bootResults: readonly unknown[] -> readonly ReconcileResult[].
- re-home InMemoryMemoStore + WorldModelWorkspaceKind onto /adapters (additive).
- export RenderUsage + RenderOutputSignal from /agents for backend authors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The published 0.2.0/0.1.0 hold the pre-fix code; this branch can't republish those
versions. Minor bump (behavior changed: B5 read-only openStateDir, trigger --data
delivery, --example expansion, receipts cost --rate). workspace:* keeps interdeps
auto-resolved; copy 'live on npm' version strings synced. Adjust the numbers before
publishing if you prefer a different semver.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
pnpm publish does not support npm's OIDC token exchange, so the tag-triggered
publish job would have no auth in CI. Switch to pnpm pack (which rewrites each
package's workspace:* SDK dep to the concrete version + runs prepack) then
npm publish the tarball, which npm >=11.5.1 publishes via the GitHub Actions
OIDC token + provenance. Order, per-package version, and idempotent skip are
unchanged. Release runbook lives in the private platform docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Get the Reactor packages mergeable + publishable and the launch surfaces coherent.
CI / publish (ci-reactor-package.yml):
- Drop the deleted reactor-cradle from the workflow and remove the obsolete .mjs
release-gate suite (.github/scripts/*reactor*.mjs + tests) entirely.
- Add per-package pack + publish jobs for @openprose/reactor, @openprose/reactor-cli,
and @openprose/reactor-devtools (idempotent, version-from-package.json,
reactor-v* tag-gated, provenance). The two CLI packages now have a release path.
- Fix the dangling cradle reference in tools/cli build-release-tarball.mjs;
regenerate pnpm-lock.yaml.
Install / first-run:
- reactor-cli: @openprose/reactor moved peer -> dependency (a global install now
pulls the SDK); @openai/agents + zod become optional peers (keyless install stays light).
- SDK README: replace non-existent *V0 imports with the real exports
(verifyReceipt / LedgerReceipt / inspectReceiptProof / projectReceiptProof).
- CLI README + http-server comment: correct the trigger route to POST /trigger/<node>.
Front-door + taxonomy:
- Promote the Reactor-forward launch README; add the technical report at
docs/reactor/v0.1/report.md (replacing the stale v0.1).
- Migrate SKILL.md and all packages/std + packages/co contracts off the retired
taxonomy (kind: service -> function, kind: system deleted, ### Ensures -> ### Maintains,
### Criteria/### Services folded) onto the Reactor model.
Prune the dead cradle-importing examples: drop flat-tokens and
release-readiness/reactor-package-example (keeping release-readiness/src, which is tested).
Gates: build, test:reactor:offline, test:examples (10/0), test:skill (252/252) all green offline.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Realigns spec/00-04: Part I (Ideal) rewritten to the compile-once-intelligent /
dumb-run / gateCommit / no-judge model; Part II (Current) + Part III (Roadmap)
updated against shipped reality. Verified by two agent passes (Ideal consistency,
then per-file Part II/III accuracy vs the codebase).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Background workflow fleet (one update + one verify agent per file, pipelined)
rewrote Part II/III of 01-04 against the actual shipped surface — the reactor /
reactor-cli / reactor-devtools packages, the open-prose SKILL, std/co, and the
plans' as-built notes — removing judge-era content and stating honest gaps. Part I
(the Ideal) untouched. Then applied the verify-pass fixes:
- 01: std/co migration is at ZERO renamed kinds (not "a handful") — 25 service,
18 system, 62 ### Ensures files; only the unchanged pattern/test remain.
(Examples ARE migrated: 39 function, 11 responsibility, verified.) Corrected the
--poll-interval attribution (it's the `reactor serve` flag; `prose serve`
delegates the continuity loop to @openprose/reactor).
- 02: verifyReceiptV0 -> verifyReceiptChain/verifyReceipt (the real exports, 2
places); "eleven" -> the actual fifteen exported subpaths (+ note `.` /
run-project / evidence-plan); "peers" -> "host-supplied deps" (they're
dev-declared, no peerDependencies block).
- 03, 04: verify came back clean (informational LOW notes only; no edits needed).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5-agent consistency review (internal + cross-file + vs the planning docs).
Confirmed gateCommit, facets, memo key, receipt statuses, the metaphor, the
continuity clock, and the fixpoint are consistent across all five files and with
the plans. Applied the residual-leak / stale-xref fixes the agents surfaced:
- 02: drop retired "confidence" from the where-it-excels list; make valid_until
facet-level in quiescence #2 (was node-level).
- 01: drop "passes artifacts through declared bindings" (push/bindings vocab ->
subscription/by-reference); enumerate the canonical ### section set inline
(Part I no longer leans on the still-stale Part II); "manifests/read models"
-> "other projections".
- 03: front-matter framing — "kernel" -> "the reconciler", "variable-depth
judging" -> "deterministic commit-gating"; "the commit gate is the verdict" ->
"gateCommit is the admissibility check"; fix an invariant-8 -> invariant-1
miscite.
- 04: stale "(02 §6.1)" -> "(02 Open specification items, item 1)"; drop the
over-attributed `agent-compile`/`agent-render` identifiers from a citation.
Left intentionally (plan-sanctioned / valid): "forecast" as a layer/term (the
plans use it; the mechanism described is the zero-token clock, not the retired
learned-forecast); 03's "(quiescence behavior N)" refs (02 has the numbered list).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrites Part I of every spec file to the compile-once-intelligent / dumb-run /
gateCommit / no-judge model from the 2026-05-28 intelligent-react + 2026-05-31
reactor-devtools plans. Retires the judge / verdict / status / pressure /
fulfillment loop, the model-authored policy-compile loop + deterministic kernel,
and judge calibration/ensembles. Part II (Current) + Part III (Roadmap) are
untouched here — a later pass updates them against what's actually shipped.
Decisions applied (per review): worked example -> competitor-activity monitor;
dropped ideas (policy-compile, BYO-correctness-truth, learned forecast,
typed-interrupts) memorialized as "paths set aside" / future notes; the fixpoint
kept as the closing recursion; Evals Claim B re-anchored on render + canonicalizer
fit; Tenet 2 "judgment/policy" retired; `### Constraints` actuation boundary ->
`### Invariants`.
- 00-Tenets: Tenet 2 -> the two intelligent layers (compile + render); preamble
precedence-stack grounded in compile gates + the fail-safe commit gate.
- 01-Language: 6 kinds -> 5 (service->function, system deleted); the two semantic
sections -> `### Requires`/`### Maintains`/`### Continuity` + faceting; stable
identity -> the compiled canonicalizer fingerprint.
- 02-ReactorHarness: unification thesis -> render-atom recursion + fixpoint;
two compiles -> one compile phase on contract change; quiescence -> memo key
(contract_fp,input_fps) + deterministic continuity clock; invariants 2/5/6;
architecture layer table; failure model -> deterministic + published/workspace
privacy; metaphor table; composition -> Forme subscription + valid_until;
open items -> as-built receipt + real deferrals.
- 03-ReactorPattern: structural rewrite of the authoring rules + anti-patterns;
worked example swapped to the competitor-activity monitor.
- 04-Evals: Claim B + Claim-A sub-rows re-anchored off judge/calibration onto
cost/memoization/replay; canonical artifact named (keyless --describe + Cradle).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Layer-correct cleanup verified offline: reactor-cli 87/0, skill-docs 242/242.
See planning/plans/2026-05-31-reactor-devtools/DEFERRALS-ASSESSMENT.md for the
full disposition (done + deferred-with-handoff).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Part of the v0.2 launch-surface cleanup (the non-high-risk subset of the
cross-check DEFERRALS assessment). Each change is layer-correct and verified.
- skills/open-prose/SKILL.md (#3): remove the two dead
`runtime/judge-responsibility.prose.md` routes (file genuinely missing; the
judge loop is retired per changelog), drop retired "pressure" from
`prose status`, and refresh the `concepts/reactor.md` + `state/responsibilities/`
descriptions to the no-judge model. Current language taxonomy
(### Requires/### Ensures/### Services) is preserved — it is current, not
retired. Skill-doc gate stays green (242/242).
- README.md (#5, safe subset): remove retired judge -> status -> pressure ->
fulfillment loop residue — the `prose serve` paragraph (rewritten to the dumb
reconciler), the `state/responsibilities/` + `prose status` "pressure"
descriptions, and "judge drift" as an event. The in-flux kind/section taxonomy
migration is left to a coordinated owner pass.
- reactor-cli compile (#8c): `cacheReport` now reads the REAL entry_points +
acyclic from the persisted topology.json via a new keyless
`ir-cache.readTopologyShape()`, instead of hardcoding `entry_points: []` /
`acyclic: true`. A warm `compile --json` over a cyclic graph no longer
misreports it as acyclic. Forme diagnostics stay empty on a hit (not yet
persisted — tracked follow-on). Offline gate: reactor-cli 87/0 (+1 test).
Deferred with precise hand-offs (see planning trackers): the CI/cradle cluster
(#1/#4 — actively owned by another agent + Actions-unverifiable), the
freshness projector (#7 — unpinned valid_until convention), spec/02 (vision
doc) + the taxonomy migration (#5 remainder), and #8a/#8b observability.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blind-onboarding cycle-5 doc polish:
- reactor-cli README: a "Deploying reactor serve" section — the HTTP endpoints
(GET /health|/status|/cost, POST /<node>/trigger), the 127.0.0.1-default bind,
the v1 no-auth posture (expose only behind a proxy / network policy), a k8s
liveness/readiness snippet, and a reference Dockerfile.
- README + cli README: the contributor offline commit gate (frozen-lockfile +
the offline tests) and an honest receipts-verify scope note (proves chain
consistency; v1 does not bind world-model artifacts).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Blind-onboarding cycle-5:
- reactor-cli and reactor-devtools package.json shipped with NO `license` field —
license scanners (FOSSA, license-checker) flag UNKNOWN and block adoption. Add
`"license": "MIT"` (the repo + the SDK package are already MIT).
- add a root `test:reactor:offline` script chaining the three reactor packages'
offline gates (the plain root `pnpm test` includes LIVE tests that 402 on a
keyless box — the contributor commit gate should be the hermetic one).
- EVALS.md: state up front that driving the SDK needs it as a LOCAL dependency
(`npm i ./tarball` / `npm link`), not the global binary install — a bare
import/require against a global install fails ERR_MODULE_NOT_FOUND.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Blind-onboarding cycle-5 (a security-final-audit + ci-pipeline-builder pass):
- serve --http bound ALL interfaces (server.listen(port) with no host) while v1
ships NO auth — an unauthenticated POST /<node>/trigger can cause model spend.
It now binds 127.0.0.1 by default; `--host <addr>` is required to expose it,
and binding a non-loopback address prints a no-auth warning. (DEFAULT_HTTP_HOST.)
- doctor --live exited 0 even when the live smoke FAILED (e.g. a 402), which
broke the documented CI-composable exit-code table. A requested `--live` that
fails now exits non-zero, while a live-only failure still never flips the
offline-health verdict.
Gates: reactor-cli 86/0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Blind-onboarding cycle-4:
- README/cli README: an un-piped exit-code example (`reactor compile --check;
echo "exit=$?"`) with a note that a pipe reports the LAST command's exit, not
reactor's — for the CI audience the feature targets; surface the keyless
browser DAG viewer (`reactor-devtools --example masked-relay`, no --describe).
- CONTRIBUTING.md: a Reactor section for the pnpm monorepo, documenting the
OFFLINE gate (`test:offline` / REACTOR_OFFLINE=1) as the default contributor
command — the plain `pnpm test` includes LIVE tests that go red without a key
or on a 402.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>