mirror of
https://github.com/razzant/ouroboros.git
synced 2026-08-04 16:19:50 +00:00
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).
|
||
|---|---|---|
| .. | ||
| benchmarks | ||
| __init__.py | ||
| README.md | ||
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
devtoolsonly through a separate reviewed runtime plan.