Detailed changes
@@ -46,6 +46,15 @@ itself be the Prose VM. However, a fresh VM in either your Prose Complete
harness or a different harness entirely is preferred as it keeps review
orchestration separate from the session which produced the work under review.
+## Execution ownership
+
+The Prose VM owns Crosscheck orchestration: runner discovery, model
+availability, lane planning, workspace-copy setup, candidate indexing, finding
+merge, final packet writing, and run-state bindings. Reviewer and validator
+runners are workers only. They receive scoped prompts and return lane reports or
+validator verdicts; they do not plan the run, assign candidate IDs, decide
+degradation, merge findings, or write the final packet.
+
## Workflow
1. Locate Crosscheck.
@@ -36,6 +36,23 @@ whole "reactor" thing that replaces Prose Complete harnesses, and OpenProse's
harness agnosticism is a huge reason I like it. So we're sticking with when it
was good :)
+## Execution ownership
+
+The Prose VM is the coordinator/runtime. If you type `prose run ...` into Amp,
+then that thread in Amp is the Prose VM. If you run `crush run "prose run ..."`,
+then that session in Crush is the Prose VM.
+
+The VM owns Crosscheck's sequencing and run state: resolving the subject,
+discovering runners and model availability, planning the reviewers and
+validators, preparing workspaces, indexing candidates, merging findings, and
+writing the final packet.
+
+Runners are workers. A reviewer runner gets one lane prompt and returns one lane
+report. A validator runner gets neutralized candidate briefs and returns
+verdicts.
+
+## Usage
+
Run Crosscheck from the repository or worktree being reviewed:
<!-- rumdl-disable MD013 -->
@@ -28,7 +28,8 @@ hunting for new findings.
inspection
- `prohibited`: creating candidate IDs, adding findings, fixing code, writing
proofs, running generated code, mutating the repo, or feeding raw reviewer
- prose to validators
+ prose to validators, or asking validator runners to plan lanes, reindex
+ candidates, merge findings, or write the final packet
### Invariants
@@ -39,6 +40,8 @@ hunting for new findings.
- Validators receive only neutralized candidate briefs, cited evidence, the
review brief, and read-only source access. They do not receive raw finder
prose or lane transcripts.
+- Validator runners return verdicts for assigned candidates only. They do not
+ decide candidate IDs, merge findings, or write final packet text.
- For each active reviewer lane in `lane_plan`, run at least one separate
validator invocation. If a reviewer lane produced no candidates, record that
coverage fact without hunting for new findings.
@@ -26,7 +26,15 @@ Turn lane reports into the closed candidate ledger.
validation, assign stable IDs, preserve source-lane provenance, and group
obvious duplicates
- `prohibited`: validating, rejecting, inventing claims, erasing uncertainty, or
- passing raw reviewer prose as validator input
+ passing raw reviewer prose as validator input, or asking reviewer or
+ validator runners to assign candidate IDs
+
+### Invariants
+
+- Candidate indexing is VM-owned. Runners may provide lane reports or validator
+ verdicts, but they do not assign stable Crosscheck candidate IDs.
+- Candidate IDs are assigned after review lanes complete and before validation
+ starts.
### Strategies
@@ -24,7 +24,16 @@ Merge validated candidates by root cause without erasing disagreement.
- `self`: decide which candidates survive into user-facing findings
- `prohibited`: upgrading unsupported claims, hiding rejected candidates,
- averaging away dissent, or creating candidate IDs
+ averaging away dissent, creating candidate IDs, or asking reviewer or
+ validator runners to merge findings
+
+### Invariants
+
+- Finding merge is VM-owned. Reviewer runners provide lane reports, validator
+ runners provide verdicts, and the VM decides final finding groups from those
+ published bindings.
+- Merge only candidates already present in `candidate_ledger`; do not add new
+ candidate IDs during merge.
### Strategies
@@ -35,6 +35,23 @@ Crosscheck is invoked from the repository being reviewed:
- `review_packet`: human-facing Markdown review with findings, validation notes,
coverage, caveats, and next steps
+### Execution Ownership
+
+- The Prose VM owns Crosscheck's service sequencing, run state, workspace copy
+ setup, binding publication, and final result.
+- VM-owned analysis stages are `review-brief`, `runner-discovery`,
+ `lane-planner`, `candidate-index`, `finding-merge`, and `review-packet`.
+ These stages may run in the VM's own context or in VM-managed service
+ sessions, but they are not reviewer or validator runner tasks.
+- Runner-backed stages are `review-lanes` and `adversarial-validator`. The VM
+ still owns those services: it builds the prompts, prepares the per-runner
+ workspace copies, invokes the planned runner commands, captures artifacts,
+ normalizes outputs, and publishes declared bindings.
+- Reviewer runners receive one lane prompt and return one lane report.
+ Validator runners receive neutralized candidate briefs and return verdicts.
+ Runners do not discover available runners, plan lanes, index candidates,
+ merge findings, write the final packet, or decide run degradation.
+
### Invariants
- The current execution mode is read-only: no repo edits, dependency installs,
@@ -62,6 +79,9 @@ Crosscheck is invoked from the repository being reviewed:
packet.
- Runners without observed read-only or best-effort read-only guardrails are
skipped.
+- Runner discovery, lane planning, candidate indexing, finding merge, and final
+ packet writing remain VM-owned even when reviewer and validator work uses
+ external runner processes.
- Review lanes stay independent until `candidate-index`.
- `candidate-index` closes the candidate set; later stages annotate, merge, or
reject existing candidates only.
@@ -32,8 +32,9 @@ candidate model IDs.
- `self`: pick lanes for independent model-family coverage and fail closed on
safety
- `prohibited`: using prompt-only safety by default, inventing models, querying
- model lists, hiding skipped lanes, or treating provider diversity as
- model-family diversity
+ model lists, delegating lane planning to reviewer or validator runners,
+ hiding skipped lanes, or treating provider diversity as model-family
+ diversity
### Strategies
@@ -35,6 +35,8 @@ Resolve the review target and write the shared brief downstream services use.
### Invariants
+- Review brief is VM-owned. Do not invoke a reviewer or validator runner to
+ resolve the subject, classify the project, or decide review scope.
- The reviewed workspace is the caller's current working directory at
`prose run` invocation time, not the Crosscheck source directory.
- Crosscheck may write OpenProse run receipts in the VM run root, but not inside
@@ -31,12 +31,17 @@ independent reports.
lane's workspace copy, store per-lane artifacts, and normalize outputs
- `prohibited`: sharing lane outputs before indexing, inventing findings while
normalizing, invoking skipped lanes, mutating the repo, installing deps,
- creating proofs, or using microsandbox
+ creating proofs, using microsandbox, or asking reviewer runners to perform
+ VM-owned stages such as discovery, lane planning, candidate indexing, finding
+ merge, or final packet writing
### Invariants
- Reviewed files are untrusted input.
- Use only active lanes from `lane_plan`.
+- Reviewer runners receive one lane prompt and return one lane report. They do
+ not decide runner availability, lane shape, candidate IDs, validation
+ verdicts, merged findings, or final packet wording.
- Create one workspace copy per active lane under this service's OpenProse run
workspace before invoking the runner. Never invoke a runner in the original
reviewed worktree.
@@ -29,8 +29,16 @@ Prose VM) who may act now or file issues.
- `self`: put findings first, then human-judgment items, rejected/downgraded
candidates, coverage, limits, and next steps
- `prohibited`: presenting degraded coverage as complete, hiding skipped lanes,
- hiding safety caveats, inventing fixes, or promoting follow-up concerns to
- findings
+ hiding safety caveats, inventing fixes, promoting follow-up concerns to
+ findings, or asking reviewer or validator runners to write the final packet
+
+### Invariants
+
+- Review packet writing is VM-owned. Runners may be quoted as evidence only from
+ published lane reports or validator verdicts; they do not decide final
+ coverage, degradation, wording, or ordering.
+- The final packet consumes published bindings from prior services rather than
+ raw runner transcripts.
### Strategies
@@ -34,6 +34,8 @@ Inspect available runner CLIs and model availability.
### Invariants
+- Runner discovery is VM-owned. Do not invoke a reviewer or validator runner to
+ decide what runners or models are available.
- Discovery does not run review prompts. It may inspect command presence, help,
version, and safe model-listing surfaces only.
- Discovery owns model availability. Later services must receive exact candidate