Ships @openprose/reactor 0.3.0, @openprose/reactor-cli 0.2.0, @openprose/reactor-devtools 0.2.0: the Reactor harness (compile-once-intelligent then dumb reconciler, content-addressed receipts, cost scales with surprise) with the distilled ideal public API — curated front door, full @openai/agents passthrough, one typed handle, one Substrate, unified observe, branded ids, and additive forward seams for the fixpoint.
Compiler Prompt Fixtures
These fixtures exercise the pinned ProseScript compiler program, the compile-phase IR emission, and the Forme topology world-model.
The compiler output convention is:
<openprose-root>/dist/manifest.next.json: next generated compile-phase IR<openprose-root>/dist/manifest.active.json: active IR used byprose serve
The checked manifest stays intentionally small. Its exact schema is the
compile-phase IR defined in skills/open-prose/compiler/ir-v0.md and realized
in TypeScript by CompilePhaseIR in packages/reactor/src/shapes/index.ts. It
contains:
kind(literalopenprose.compile-phase-ir)version(integer2, tracking the SKILLruntime_contract)sourcestopology(nodes,edges,entry_points,acyclic)canonicalizerspostconditionscontract_fingerprintsdiagnostics
There is no judge, no verdict, no pressure, and no fulfillment activation. The IR carries the compile-phase OUTPUTS: the topology world-model (Forme's wiring), the per-node canonicalizers, the per-node postcondition validators, and the frozen per-node contract fingerprints. Commit-gating is compiled postcondition validators plus render self-attestation, never an LLM judging "did this change."
Source paths in IR are root-relative and ready to pass to prose run from
<openprose-root>.
There is no system kind and no service kind. Source kind values are
responsibility, function, gateway, pattern, test, or unknown. Only
responsibility and gateway sources become topology nodes; functions are
called helpers with no node identity and no world-model.
Advisory Prompts
Use these prompts in an agent session with the OpenProse skill loaded.
Compile Empty Source
Run prose compile against an empty temporary repository.
Expected shape:
- writes
<openprose-root>/dist/manifest.next.json - emits a valid compile-phase IR matching
expected/empty.manifest.next.json - reports no discovered sources as an informational diagnostic
Compile Stargazer Fixture
Run prose compile tests/open-prose/responsibility-runtime.
Expected shape:
- discovers the responsibility and the gateway
- emits a compile-phase IR shaped like
expected/stargazer.manifest.next.json - mounts the gateway as an external-driven entry point and the responsibility as an input-driven node subscribing to it
- folds the former fulfillment-system services into
kind: functionhelpers that the responsibility's render invokes via intra-nodecall— they are never topology nodes - emits a per-node canonicalizer and postcondition validator
- freezes a per-node contract fingerprint
- does not invent provider-specific auth, subscription setup, queue names, or payload schemas
Compile Multi-Facet Fixture
Run prose compile tests/open-prose/compiler/fixtures/multi-facet.
Expected shape:
- discovers a producer whose
### Maintainsdeclares three####parts —#### funding,#### hiring,#### product-launches— and a subscriber that### Requiresonlyfunding - lowers each
####part into a facet (facet name = heading text, paths = the part's material fields), default-material within the part, and binds the shared un-facettedname/last_corroboratedto the atomic facet only (the named-parts rule,architecture.md§3.2) - emits the producer canonicalizer with
facets: ["@atomic", "funding", "hiring", "product-launches"] - lowers the atomic-only subscriber
### Maintains(no####parts) tofacets: ["@atomic"]— the free default - draws a facet-granular edge
funding-brief.Requires.funding -> competitor-monitor.Maintains.fundingcarryingfacet: "funding", not@atomic - emits a compile-phase IR shaped like
expected/multi-facet.manifest.next.json
Compile Ambiguous Wiring Fixture
Run prose compile tests/open-prose/compiler/fixtures/ambiguous-fulfillment.
Expected shape:
- discovers one subscriber responsibility and multiple plausible producers that all maintain the requested facet
- emits a compile-phase IR shaped like
expected/ambiguous-fulfillment.manifest.next.json - emits a warning and leaves the subscription unwired instead of guessing the producer
- emits no edge for the ambiguous subscription
Compile Invalid Responsibility Fixture
Run prose compile tests/open-prose/compiler/fixtures/invalid-responsibility.
Expected shape:
- reports an error for the missing core
Maintainssection - refuses to write
manifest.next.jsonuntil deterministic validation passes
Reject Invalid IR
Validate invalid/missing-version.manifest.next.json.
Expected shape:
- fails deterministic validation
- says the
versionfield is missing or incorrect
Validate invalid/malformed-responsibility.manifest.next.json.
Expected shape:
- fails deterministic validation
- reports a malformed topology: an empty
contract_fingerprint, an invalidwake_source, an edge to a missing producer, an entry point that is not an external node, an empty canonicalizerfacetslist, an invalid postconditionmode, and acontract_fingerprintsmap missing the declared node
Validate invalid/malformed-forme.manifest.next.json.
Expected shape:
- fails deterministic validation
- reports the wrong
kind, a cyclic edge set whoseacyclicflag lies, an entry point referencing a missing node, a canonicalizer for an undeclared node, a retiredsystem/servicesource kind, and a retired judge-eraactivationsfield