mirror of
https://github.com/openprose/prose.git
synced 2026-09-19 05:55:05 +08:00
4bc41a93bb
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>
2.5 KiB
2.5 KiB
name, kind
| name | kind |
|---|---|
| dialectic | pattern |
Dialectic
Thesis and antithesis argue positions. Disagreement IS the output.
Description
Thesis and antithesis argue opposing positions; the unresolved tension is the output.
Metadata
version: 0.1.0
Slots
thesis- requires: task_brief, prior antithesis argument (if not first round)
- ensures: argument for the position
antithesis- requires: task_brief, prior thesis argument
- ensures: argument against the position
Config
rounds(integer, default: 2): Number of exchange rounds
Invariants
- Neither service knows it is part of a dialectic
- The full exchange is the output — the pattern never resolves the tension
- Each service sees only the other's prior argument, not its reasoning
Shape
self: manage argument rounds, pass each service the other's prior argumentdelegates:thesis: argue for a positionantithesis: argue against it
prohibited: none
Parameters
- Pattern instance receives: thesis: string -- function or responsibility name for thesis service antithesis: string -- function or responsibility name for antithesis service task_brief: string -- the question or proposition to argue rounds: number -- (optional, default 2)
Returns
- Round 1: thesis argues first, antithesis responds
- Subsequent rounds: each service sees the other's prior argument
- This pattern does NOT resolve the tension — the full exchange is the output
- The instantiating system extracts insight from the tension
result: the full exchangeexchange: structured round-by-round arguments
Delegation
let exchange = []
let last_thesis = null
let last_antithesis = null
repeat rounds as round:
let last_thesis = call thesis
task_brief: task_brief
prior_antithesis: last_antithesis
prompt: "Argue for the position, responding to the prior counterargument if present."
let last_antithesis = call antithesis
task_brief: task_brief
prior_thesis: last_thesis
prompt: "Argue against the position, directly countering the thesis argument."
record { round: round, thesis: last_thesis, antithesis: last_antithesis } in exchange
return {
result: exchange,
exchange: exchange
}
Notes
This is a seed pattern. Neither service knows it is part of a dialectic. Each receives a brief asking it to argue a position. The structural value is in the tension between positions — premature consensus is more dangerous than unresolved disagreement.