Commit Graph

338 Commits

Author SHA1 Message Date
irl-dan f106959b81 api(nits): cast-free facade call site + correct CLI offline-boundary comments
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>
2026-06-02 13:49:40 -07:00
irl-dan e7626312af api(foldin): surface RenderBackend on the facade + reviewer fold-ins
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>
2026-06-02 13:20:15 -07:00
irl-dan c7092d0512 api(docs-examples): docs/README/EVALS + examples to the new surface
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 13:00:18 -07:00
irl-dan ad31755387 api(forward-seams): type-only forward seams (build nothing)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 12:50:07 -07:00
irl-dan 2851a9cc07 api(compile-options): explicit {all?, byNode?} PerStepCompileOptions
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 12:43:01 -07:00
irl-dan 3248ceb697 api(gotcha-guard): loud GOTCHA-1 boot guard
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 12:37:48 -07:00
irl-dan 9e3a665c7d api(run-project-nest): RunProjectRender nests one render: RenderOptions
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 12:26:23 -07:00
irl-dan a8325206d3 api(ingress): ingest(node,{data}) + connectors arming; drop createGateway/mountGateway
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 12:20:55 -07:00
irl-dan 8abb1c3cd3 api(wakes-stores): wake constructors + create*WorldModelStore factories
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 11:59:23 -07:00
irl-dan 0ca8d7bf72 api(observe-unify): unified observe()/CostRollup; delete CLI parallel cost view
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 11:49:11 -07:00
irl-dan 94c57a3c77 api(render-backend): RenderBackend injection seam
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 11:35:51 -07:00
irl-dan d6b272b562 api(substrate): one Substrate persistence primitive
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 11:24:31 -07:00
irl-dan 9cbff8ff9d api(branding): brand Facet/NodeId/Fingerprint (string-friendly boundary)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 11:01:31 -07:00
irl-dan b3dce6cf85 api(run-types): /run/types type-only entry; kill the CLI structural mirrors
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 10:02:45 -07:00
irl-dan 39ec14a49c api(reactor-handle): reactor() facade + one typed Reactor handle (casts vanish)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 09:52:34 -07:00
irl-dan 40bcdee75b api(agents-passthrough): FULL @openai/agents escape hatch (NAMED PRIORITY)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 09:29:16 -07:00
irl-dan e053a1e3d3 api(exports-map): exports 16->6, curated ., /internals barrel, drop 9 subpaths
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 09:12:38 -07:00
irl-dan f439215d9f release: bump reactor 0.3.0, cli/devtools 0.2.0 (publishable over the stale 0.2.0/0.1.0)
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>
2026-06-02 03:05:04 -07:00
irl-dan f1bf7aa135 fix(stranger-iter5): batch 2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:59:38 -07:00
irl-dan 5cb0d059f3 fix(stranger-iter5): batch 1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:58:38 -07:00
irl-dan 8c922891f5 fix(stranger-iter4): batch 2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:44:48 -07:00
irl-dan eeb13c9491 fix(stranger-iter4): batch 1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:43:32 -07:00
irl-dan 9434a87dab fix(stranger-iter2): batch 3
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:37:06 -07:00
irl-dan 963d6fd80d fix(stranger-iter2): batch 2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:35:33 -07:00
irl-dan 14383e4fd3 fix(stranger-iter2): batch 1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:34:04 -07:00
irl-dan d38ac6fd0f fix(stranger-iter1): batch 1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:21:10 -07:00
irl-dan 3c37e89da1 fix(stranger-iter1): batch 2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:02:40 -07:00
irl-dan c375a3d23c fix(stranger-iter1): batch 1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:00:07 -07:00
irl-dan 9c74d1712a distill(batch-8): Devtools: fixture helper dedup + comment cleanup (interface-safe only)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:33:50 -07:00
irl-dan 003b5675a0 distill(batch-7): CLI: cross-command dedup helpers (wake, ensure-IR, render-defaults) + serve/host comment sweep
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:27:49 -07:00
irl-dan 2ce3a57a37 distill(batch-6): CLI: shared output/error util + cli.ts globals projector + readability/import fixes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:22:50 -07:00
irl-dan 3e332dbf80 distill(batch-5): Engine-adapters: tools.ts dead-guard + shared-import consolidation; contract-loader unquote
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:19:36 -07:00
irl-dan 7e9be82250 distill(batch-4): Engine-core reconcile-tail extraction + matching adapter comment sweep
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:13:50 -07:00
irl-dan 3a2d103fdd distill(batch-3): Internal helper extraction in engine-core (mounted-dag + continuity-scheduler) and engine-data guards
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:10:09 -07:00
irl-dan 3497e726b5 distill(batch-2): Comment + small-helper cleanup in engine-core barrels and adapters
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:06:59 -07:00
irl-dan d2ed825151 distill(batch-1): Pure comment cleanup in engine-data headers (history/obituary narration)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 00:04:37 -07:00
irl-dan 4cf8e5dec2 fix(launch): blocker burndown — receipts/state-dir/trigger guards, SDK exports, devtools --example, honest launch copy
Workflow-1 fix pass across collision-free lanes (no §B1/§B2):
- cli: G4 reject unknown receipts subcommands (exit 2); G12 validate --state-dir
  target; B3 deliver trigger --data into the wake via connector staging; G21
  init non-empty guard + Require-stack suppression; G9 receipts cost --rate;
  engines node>=20.
- sdk: G13 ./package.json export; G14 optional live peers; B5 openStateDir is
  read-only (no mkdir/seed on a pure read); E2 stale scheduler header.
- devtools: G2 --example reaches 6 replayable examples + errors on unknown name;
  G5 npx fallback; engines node>=20.
- copy (shipped): G1 count-vs-cost relabel; G3 Coming-from-OpenProse box; G7
  local-first install; G22 drop pre-publish framing; G23/G24/G25 honest scoping
  (durability/timestamp-actor/moduleResolution); G16/G19/G26/G27/G29/G30.

Gates green: reactor 428/0 (7 skip), reactor-cli 98/98, devtools 96/96,
examples 214+10, skill 252/252; full build clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 23:57:04 -07:00
irl-dan 1a00283226 ci(reactor-publish): use npm publish for OIDC trusted publishing
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>
2026-06-01 19:29:50 -07:00
irl-dan 4bc41a93bb launch readiness: green CI publish path, front-door, taxonomy migration
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>
2026-06-01 18:45:39 -07:00
irl-dan a34d594783 Merge spec realignment to the Intelligent-React model (Part I Ideal + Part II/III)
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>
2026-06-01 15:55:50 -07:00
irl-dan 66fe7a85e6 ship: OpenProse learning example library (13 examples, offline gate)
Ships the 13 wired tier-1/tier-2 examples under skills/open-prose/examples
with a hermetic offline gate at zero model spend:

- skills/open-prose/examples/{agent-observatory, basic-unit-suite,
  forme-fixpoint, github-star-enricher, implementation-pipeline,
  inbox-triage, masked-relay, monorepo-ci, oblique-weave, renewal-risk,
  research-tree, surprise-cost, tamper-forge}: source .prose.md contracts,
  committed replay/ state-dirs, and co-located deterministic tier-2
  ledger-replay tests driving the real @openprose/reactor reconciler.
- tests/open-prose/examples/intelligent-react-examples-corpus.test.ts:
  tier-1 doc-conformance over the 13 OWNED examples (agent-observatory
  and forme-fixpoint normalized to lead each ### Continuity body with the
  canonical input-driven/self-driven token; gateways stay external-driven).
- tools/eval-harness/: deterministic offline eval checker (10/10).
- vitest.config.ts: aliases @openprose/reactor public subpaths to the
  prebuilt workspace dist; collects example *.test.ts; excludes key-gated
  *.live.test.ts so the gate stays hermetic.
- package.json: adds test:examples (REACTOR_OFFLINE=1 vitest + eval
  harness) and folds it into test.
- .github/workflows/ci-examples-gate.yml: runs the offline gate on
  example/test path changes (no judge key).
- prune: removes the superseded packages/std/examples/{composed-reviewer,
  confident-writer} .prose.md set.

Gates green: pnpm build clean; REACTOR_OFFLINE=1 pnpm test:examples =
17 vitest files / 214 tests + eval-harness 10/10; REACTOR_OFFLINE=1
pnpm test:skill = 14 files / 252 tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 14:16:32 -07:00
irl-dan 4decd039f5 spec: update Part II (Current state) + Part III (Roadmap) to shipped reality
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>
2026-06-01 13:24:24 -07:00
irl-dan ec0c9729cf spec: apply verification-pass fixes to the Ideal sections
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>
2026-06-01 13:06:27 -07:00
irl-dan 9dba37ff8a spec: realign the "Ideal" (Part I) sections to the Intelligent-React north star
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>
2026-06-01 12:52:36 -07:00
irl-dan 593cab3d98 Merge launch-surface non-high-risk cleanup (#3 SKILL, #5 README, #8c compile)
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>
2026-06-01 08:34:34 -07:00
irl-dan 1b5bd8b2b1 chore(launch-surface): non-high-risk cleanup — SKILL dead-judge-route, README judge-loop, warm compile --json
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>
2026-06-01 08:34:21 -07:00
irl-dan 6371c809e5 docs(reactor): serve deployment + no-auth/bind posture; ingress; receipts-verify scope; offline gate
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>
2026-06-01 05:14:28 -07:00
irl-dan bd7a5c455e chore: MIT license fields, a root reactor offline gate, EVALS local-dep note
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>
2026-06-01 05:14:28 -07:00
irl-dan 9c2ef39803 fix(reactor-cli): serve binds loopback by default (no-auth posture); doctor --live exits non-zero on smoke failure
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>
2026-06-01 05:14:28 -07:00
irl-dan b7ea8a9b03 docs: a runnable proof up front, un-piped CI exit-code example, contributor offline gate
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>
2026-06-01 04:39:48 -07:00