mirror of
https://github.com/razzant/ouroboros.git
synced 2026-10-03 04:07:04 +00:00
2 commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
1a50e7a2c7 |
fix: triad-wave batch — Playwright-parity evaluate, starvation-free cursor, supersession replay, basis-gated density
Dispositions of the multi-model triad + scope wave (grok-4.6, fable-5,
gpt-5.6-sol; scope sol-xhigh), severity order:
- _evaluate_bounded lost Playwright's function-invocation semantics
(unanimous MAJOR, confirmed against the installed driver: UtilityScript
eval()s a raw-string expression and INVOKES a function-valued result
when isFunction is unset). page.evaluate(_MARKDOWN_JS), the health
snapshot and every '() =>' user evaluate serialized the uninvoked
function to undefined. The wrapper now evals and invokes exactly as the
driver does; the wrapper-shape test pins both halves.
- The settled-refresh cursor pinned its byte offset on the earliest
SETTLED row of a still-RUNNING task (grok/sol MAJOR): each tick re-read
the same 5MB window behind one long-lived parent and permanently starved
every later terminal-boundary settlement past the cap — the exact class
the cursor exists to heal. The offset now always advances; deferred
tasks ride a durable bounded map retried every tick (oldest-evicted at
500, disclosed), pinned by a starvation test.
- A superseded-by-revision acceptance run was excluded from the prior-run
lookup even on an identical paid identity (sol MAJOR): the resubmission
fell through to the wallet's binding_dispatch_already_claimed and
recorded a synthetic DEGRADED panel instead of the typed
identical_acceptance_refused terminal. Identity-matched superseded runs
now replay for free with a replayed_from_superseded disclosure —
evidence revision stays stale-detection, never a paid-cycle mint
(owner decision 5=A). Moved _prior_acceptance_run to
acceptance_dialogue.py (loop.py byte debt is shrink-only).
- The trailing-JSON scanner missed a real directive after an unmatched
brace/quote in the prose prefix (sol MAJOR with executed repro; fable
MINOR): the forced rail then leaked the raw protocol JSON — the original
O4 defect resurfacing on one input class. On primary-scan failure the
parser now retries from the last few line-start '{' anchors (bounded,
string-aware); the inline-after-unbalanced-prose case stays a disclosed
prose-degrade, pinned. The scope wave's fence-peel O(n*k) shortfall is
also fixed (no slicing per peel, 4-fence cap) and ARCHITECTURE's parser
description synced to the final implementation.
- Legacy/raw-basis density rows stayed authoritative for their 14-day TTL
after an upgrade (sol MAJOR, probe-confirmed): resolve_main_token_density
now calibrates ONLY on bounded_proxy rows (review/aggregate resolvers
keep all rows — their text-heavy witnesses measure the same on either
basis); a poisoned 0.55 image-route witness falls back to the neutral
1.0 instead of under-admitting by 45%. Tests seeding the main resolver
updated to the modern producer shape (the observer stamps the basis).
- acceptance_patch_dispositions computed the unreviewed_delegated_apply
headline AFTER truncation (fable MAJOR): a delegated apply among the
25-cap-omitted oldest rows false-negatived the one fact the attest
decision (4=A) exists to surface. Headline now derives from the complete
row set; pinned with a mixed-row scenario.
- write_patch_verdict treated custody.emit's False return as success
(grok/fable/sol): a lost attestation row was invisible — the packet's
empty section read as 'nothing recorded'. Both the exception AND the
False-return paths now disclose custody_row_write_failed on the verdict
artifact, and the row lands on the canonical custody root.
- find_child_tasks overlay test now pins CONTENT restoration (cost,
result, artifacts), not just the id (grok MINOR).
Also: reservation test keeps the read-surface pin with the offline
rationale (a cost-equality behavioral pin honestly returns None without a
live pricing route — fable m5 disposition); scope-wave (a)-items verified
against the ratified record (tools_on_path=11=A, salvage-rail in the O4
verdict, dialogue-history=R2, cycle accounting=O11 seams) — prompt gaps,
not drift.
Suites: 11775 parallel + 618 serial + 694 web green; ruff -F clean;
size-ratchet regenerated (loop.py net-shrinks further).
Co-authored-by: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com>
|
||
|
|
9f01912ed4 |
feat(delegate): attest patch apply/reject decisions into the acceptance packet (D-trace)
Phase O-F of the harness-health sprint (owner decision 4=A): integrate_delegated_patch applied a child's diff on five mechanical manifest fields with zero review facts anywhere on the path — and none exist to carry: the child is forbidden from reviewing its own diff and no host review of the captured bytes runs. Rather than dressing the child's own claim up as a review (a provenance lie) or gating the apply (a convergence tax the owner rejected), the APPLY itself is attested: - _write_verdict additionally lands a typed delegate_run_patch_verdict custody row (family-prefixed — an unprefixed spelling is invisible to _iter_rows, the known dead-letter class) carrying disposition, applied, bounded reason, patch sha and the pipeline (delegated run_<rid> subjects vs subagent children, classified at the one writer). A failed verdict- artifact write is disclosed on the row instead of dying as a silent "". - delegate_evidence.acceptance_patch_dispositions projects those rows as a bounded host-attested acceptance-packet section (capability_deltas shape: cap 20 + exact omitted count, newest kept) with the honest headline unreviewed_delegated_apply when a delegated patch landed. Absence = no disposition recorded, never "reviewed clean"; an unreadable log is the typed evidence_read_failed marker. - review_evidence wires the section beside capability_deltas/substrate. No gate on apply anywhere. The nanny-wake copy was considered and cut: at wake time no disposition exists yet, and a sometimes-present field recreates the absence-ambiguity this section exists to kill. Co-authored-by: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com> |