mirror of
https://github.com/openprose/prose.git
synced 2026-09-19 05:55:05 +08:00
f12dcda4d8
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.
3.1 KiB
3.1 KiB
name, kind
| name | kind |
|---|---|
| oversight | pattern |
Oversight
Actor acts, observer watches outcomes independently, arbiter decides next step based on the observer's report — not the actor's self-assessment.
Description
Actor executes, observer independently analyzes outcomes, arbiter decides whether to continue, adjust, or abort.
Metadata
version: 0.1.0
Slots
actor(primary)- requires: task_brief, adjustment (if prior cycle was adjusted)
- ensures: execution outcome
observer- requires: task_brief, actor outcome
- ensures: independent analysis of the outcome
arbiter- requires: task_brief, observer report
- ensures: {'decision': 'continue'}, adjust, or abort
Config
max_cycles(integer, default: 3): Maximum oversight cycles
Invariants
- The observer sees only the outcome, never the actor's reasoning or self-assessment
- The actor does not know an observer is watching
- The observer does not know an arbiter will act on its report
- The arbiter decides solely from the observer's report, not from the actor
Shape
self: manage the cycle, route information between roles, enforce separationdelegates:actor: execute the current planobserver: independently analyze the outcomearbiter: decide: continue, adjust, or abort
prohibited: none
Requires
- Pattern instance receives: actor: string -- service or system name for the actor observer: string -- service or system name for the observer arbiter: string -- service or system name for the arbiter task_brief: string -- the task to execute max_cycles: number -- (optional, default 3)
Returns
- Actor receives the task brief (first cycle) or adjusted brief (subsequent cycles)
- Observer receives ONLY the outcome — not the actor's reasoning or self-assessment
- Arbiter receives the observer's report and decides: continue, adjust, or abort
- If arbiter says adjust: the adjustment is passed to the actor's next cycle
- If arbiter says abort: return immediately with the reason
- If arbiter says continue: actor runs another cycle with the same brief
result: the final outcomecycles: number of cycles runabort_reason: arbiter reason when the pattern aborts
Delegation
let current_brief = task_brief
let last_outcome = null
repeat max_cycles as cycle:
let last_outcome = call actor
task_brief: current_brief
let observation = call observer
task_brief: task_brief
outcome: last_outcome
let decision = call arbiter
task_brief: task_brief
observer_report: observation
if decision says abort:
return {
result: last_outcome,
cycles: cycle,
abort_reason: decision
}
if decision says adjust:
current_brief = decision.adjusted_brief
return {
result: last_outcome,
cycles: max_cycles
}
Notes
The actor does not know an observer is watching. The observer does not know an arbiter will act on its report. The information firewall between actor and observer is the structural guarantee — the observer's assessment cannot be contaminated by the actor's rationalization.