Repository navigation
v1.0.0 — orquestração bidirecional adaptativa
1.0 replaces the 0.1 engine with an adaptive bidirectional orchestration. The plan runs as a graph, and reviewer feedback flows back through it with four decisions, all backed by evidence:
FIX_LOCAL: repair inside the affected node.REPLAN: a new plan, at most 2 per run.BLOCK: stop with a readable reason.DONE: only with passing real checks, an approving critic and the current contract identity.
New
- Five commands in a single runner:
plan,clarify,tasks,implementeandinit.- Each repository has one plan slot and one tasks slot (the current feature).
- Artifact reuse is checked; when it is refused, the reason goes to the journal.
- Effort is only
--effort low|medium|max. The budget is counted per role (bin/budget-policy.mjs). - Roles and models fixed per host, with no public flag:
- Claude: Opus for planner, plan/design reviewer and critic; Haiku for executor, verifier and synth.
- Codex:
gpt-6.1-solfor the strong roles,gpt-6-lunafor the operational ones.
- Engine contracts:
- resuming gives no budget credit;
- counters never go down;
- replans are capped at 2;
- DONE is denied without real checks, critic and current identity.
- Trusted checks:
- only
node --test, selected by the approvedinputs,outputsandfiles; - the whole suite runs at the final gate, with concurrency 2.
- only
- Validated node manifests:
- paths must be relative to the repository;
- an external input must exist and have a fingerprint (
external_inputs_unfingerprintable); - an output must be inside
files.
- Provenance window with a cause:
provenance_unsealed_window:<id> (cause: …). - runDir integrity, workspace lock and memory across runs, selected by node and contract.
- Isolated Claude host:
--strict-mcp-config,--disable-slash-commands,--setting-sources project,localand--permission-mode dontAsk;- writes only inside the cwd (
Edit(./**)); - a cwd under
.claudeis refused withCWD_PROTECTED_PATH; - permission denials come back in the result.
- Real smoke test with write proof (
write-probe.txtwith a nonce). It detects an executor that cannot write. - Real benchmark (
bin/graph-benchmark.mjs):- compares the normalized v1 logic with the adaptive one;
- grades with external acceptance tests;
- measures cost and tokens per call.
- Portable plugin for Claude Code (
.claude-plugin/) and Codex (.codex-plugin/).
Fixed
- The Claude executor wrote nothing:
dontAskwithoutallowedToolsdenied every write. - The smoke test gave a false PASS with a read-only worker.
- Context leaked from the user's environment into every call (about 75k tokens per turn). Isolation brought it down to about 6.5k, and the benchmark went from $88 to about $1.
APPROVEwithaffectedNodesfilled in was rejected: the schema now states the rule.- Research without a shell stayed
partialforever: research and design acceptance no longer require running commands. - Free text in manifests turned into "input changed" (
provenance_unsealed_window). - A Claude error without
result(is_error) lost the reason and the cost. The error now keeps subtype, messages, usage and model, and the benchmark records all of it. - In polish, a failed area without a seal let the next one hide the real reason. The following areas now stop with the first one's reason.
- The planner could return an effort different from the one requested (
plan_effort_mismatch). The schema only accepts the user's effort. - A node redone by the critic's
FIX_LOCALdid not get the critic's reason. It now gets it in the prompt. - Without web access, research acceptance could require an external URL and stay
partialforever. TheagentWebcapability removes that requirement from the planner and the worker. - Plan fixes and replans could rewrite
doneWhen(original_plan_criteria_changed).doneWhenis now locked in the prompt and the schema on every path, and the same list in a different order is accepted. - The critic could approve (
DONE) answering only some of the criteria (critic_done_evidence_invalid). The schema now requires one item per criterion, with the text locked. - The node verifier failed nodes for missing
npm testevidence, which only runs at the final gate. The prompt now says the whole suite is left for the final gate and the node is judged by its local checks. - A failed implement left the window unsealed, and polish in the other areas hid the reason behind
provenance_frontier_changed_before_window. Polish now does not run and shows which node did not finish. - In polish of an area with more than one node, each node was checked against the whole area's diff, and a neighbor's file counted as outside the grant. The window is now checked against the area's grant, and each node only by its own files.
- A dependent outside the area, revalidated in polish, inherited the old window's seal and its record won at the end (
node_record_stale_at_completion). Revalidation now drops the inherited seal and seals the new window.
Removed
- The 0.1
effort × ceilingflow:manual,auto,high,maxAgentsandeconomy. - The
graph-configandgraph-resumeCLIs. - The panel action queue: requests, listening session and the
POST /api/requests*routes. The panel is now a live view only.- Removed
bin/requests.mjs,bin/ui/actions.mjs,bin/ui/commands.mjs,GET /api/listenersand request consumption ingraph-watch. The run now stops only on silence, andeventsexits right after FINISHED. - The artifacts drawer stays, read only (
bin/ui/artifacts.mjs).
- Removed
- The old
graph-eng:graph-engskill and/graph-eng:painelcommand. Useinit.
Benchmark
- Real run f366 (Claude):
DONEwith 10/10 external acceptance and no false DONE, in 21 calls, for $0.80. The strong model accounts for about 95% of the cost. Details indocs/validation/graph-eng-2-benchmark.md.
Known limits
- The real Codex host (smoke and benchmark) has not been validated yet. Only Claude has real evidence.