ouroboros/devtools
Ouroboros 34d16f956f feat(v6.60.0): answer protocol by contract, blocking widening, bytes-equal verification (Phase 4)
4.1 answer_protocol (owner quiz 16b, option C+B): the FINAL ANSWER doctrine
leaves the global prompt. New additive task_contract field answer_protocol
("" | "final_answer_line"; normalize_answer_protocol + answer_protocol_active
SSOT gate in contracts/task_contract.py, exported via contracts __init__),
propagated from /api/tasks (answer_protocol= body field, TaskCreateRequest +
api_types.js mirrors) and CLI --task-metadata-json, inherited by subagents
through the parent-contract spread. When declared, context.py injects the
protocol instruction (with the opt-in CANDIDATES ambiguity block) into the
task's runtime context; the P2 marker nudge and the pacing salvage phrases
(cost wrap-up, 10% deadline flush, intrinsic pacing) activate through the ONE
gate. Without it, ordinary chat/self tasks never see marker prompting: the
SYSTEM.md marker rule + CANDIDATES section are REMOVED; the latch + extractor
+ typed final_answer stay unconditional; final_answer_missing_sentinel keys on
the typed payload (latch-recovered answers are not "missing"); the no-op
nudge keys on expected_output semantics with marker wording only under the
protocol. GAIA's solver declares the field (--task-metadata-json); TB/SWE-Pro/
PB deliberately do NOT (their deliverables are container state / patches /
code, not an extracted line). The web UI renders a FINAL ANSWER line as a
labelled "Answer" chip (presentation only; stored text untouched).

4.2 blocking widening (S1-lite, owner quiz 18b): under required+blocking,
_collect_acceptance_obligations widens from critical-only to critical+HIGH
contributing findings with a concrete recommendation WHEN the aggregate
verdict itself is failing (signal FAIL or worst tier blocked_with_evidence) —
the PB case where reviewers converged on a concrete "misses X" at high
severity yet the task finalized clean. PASS (incl. PASS-with-dissent) keeps
the critical-only bar. The dead verdict_is_advisory request-policy key is
removed from both ReviewRequest sites — enforcement semantics live solely in
OUROBOROS_REVIEW_ENFORCEMENT. SWE-Pro settings_base flips to blocking (PB/TB
adapters already default blocking+required).

4.3 generalized verification: expected_match="bytes_equal" in
verify_and_record compares artifact_paths=[a, b] BYTE-FOR-BYTE after the
check, on the same surface as the check (executor cmp in-container, host
chunked read otherwise), recording a bounded hexdump of the first divergence
in the receipt (golden files, migration parity). schedule_subagent documents
the INDEPENDENT VERIFIER pattern (read-only memory_mode=empty child fed only
the deliverable + acceptance criteria, not the builder's own probes). The
acceptance checklist asks the SCOPE-CUT question explicitly (a silent or
unjustified narrowing is a high-severity finding; under blocking it becomes
an obligation). Effort-ceiling learning now requires the rejection text to
implicate an effort carrier (a generic parameter rejection cannot teach a
phantom ceiling).
2026-07-09 03:05:55 +03:00
..
benchmarks feat(v6.60.0): answer protocol by contract, blocking widening, bytes-equal verification (Phase 4) 2026-07-09 03:05:55 +03:00
__init__.py feat(devtools-benchmarks): add official benchmark harnesses and workspace executor 2026-06-06 12:03:30 +03:00
README.md feat(devtools-benchmarks): add official benchmark harnesses and workspace executor 2026-06-06 12:03:30 +03:00

Ouroboros Devtools

devtools/ contains operator-side and benchmark support code that should be versioned with Ouroboros without becoming part of the runtime core.

Rules:

  • Generated logs, datasets, run outputs, Docker layers, and secrets do not live here.
  • Default benchmark outputs go under /Users/anton/Ouroboros/bench_runs/.
  • Runtime modules must not import devtools.
  • This is not an immune-system bypass: touched files are reviewed normally.
  • Promote code out of devtools only through a separate reviewed runtime plan.