Commit graph

13 commits

Author SHA1 Message Date
Ouroboros
f5076c50fd fix: preserve canonical task evidence roots
Co-authored-by: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com>
2026-08-11 10:07:48 +03:00
Ouroboros
6fcef89c3d fix: release v6.53.2 with stable timeout tests 2026-07-01 10:57:45 +03:00
Ouroboros
f08552f60c fix: release v6.53.1 after tag CI path fix 2026-07-01 10:52:18 +03:00
Ouroboros
49f6d142b3 feat: harden benchmark-derived task evidence and runtime reality 2026-07-01 10:32:18 +03:00
Ouroboros
fab3e8ddc4 release: Ouroboros v6.45.5 credential-gate CI expectation fix-forward 2026-06-24 07:16:12 +03:00
Anton
09b4219567 iteration-2: lighten review (1+low), timeout SSOT hygiene, native view_image (+ gauntlet fixes)
THREE changes from the TB2.1 trace-deepdive follow-up, plus all real fixes from the 3-way review
gauntlet (Ouroboros triad+scope, codex gpt-5.5, adversarial multimodel).

#1 (devtools/run_tb.apply_all_model): --all-model now defaults to ONE reviewer at low effort
   (3 identical = monoculture, no diversity); configurable via --review-slots / --review-effort.
   Bench env only; no config default change.

#2 (ouroboros/tools/shell._resolve_effective_timeout): SSOT hygiene. OUROBOROS_TOOL_TIMEOUT_SEC=600
   was silently dropped to the in-code 360 (the `!= default_setting` skip). Rewritten as one
   normalized pipeline (override>env>settings>config>fallback -> ceiling -> deadline-clamp -> >=1);
   env/settings no longer bypass the clamp. + diagnostic TOOL_TIMEOUT message (start_service /
   timeout_sec= / best-effort-before-deadline; no command-keyword classifier). RELEASE NOTE: ex-360
   installs now get 600. (0 TOOL_TIMEOUT events in the TB run -- hygiene, not the benchmark fix.)

#3 (ouroboros/tools/vision.view_image + prompts/SYSTEM.md): new tool injecting a LOCAL image NATIVELY
   into the active model's context (reusing _inject_native_screenshot + supports_vision + K=3
   eviction). LOCAL PATHS ONLY (no URL/base64); reuses vlm_query's EXACT trust checks via shared
   _load_local_image_payload. Registered OUTSIDE _WEB_TOOLS so allowed_resources.web=false no longer
   blocks local vision. Resource class: local_file_to_model.

GAUNTLET FIXES (all verified real; rejected items were decided tradeoffs / cosmetic / pre-existing):
- CRITICAL (triad+adversarial): view_image was missing from the tool-visibility allowlists, so it was
  INVISIBLE in workspace_mode (the benchmark!) and to subagents. Added to
  registry._WORKSPACE_ALLOWED_TOOLS + tool_capabilities.{CORE,LOCAL_READONLY_SUBAGENT,ACTING_SUBAGENT}
  (matching vlm_query/analyze_screenshot). (_EPHEMERAL_ALLOWED_TOOLS intentionally NOT added — vlm_query
  isn't there either.)
- CRITICAL (triad): view_image had no safety.TOOL_POLICY entry (breaks the coverage invariant test).
  Added "view_image": POLICY_SKIP (matches vlm_query/analyze_screenshot; a local-read tool, no shell/net).
- codex+adversarial: the K=3 image-eviction placeholder pointed re-view at vlm_query (web-blocked under
  web=false); changed to view_image (loop.py).
- codex: view_image saved re-view copies with a doubled extension (chart.png.png); use stem + actual
  (downscaled) mime ext.
- BLOCKER (codex+adversarial): stale tests updated to the new behavior — test_run_tb_methodology.py
  (1 reviewer + low + a review_slots=3 case), test_shell_run_shell.py (360->600 SSOT), and
  test_multimodal_chat.py (view_image re-view placeholder).
- adversarial: the new timeout tests now stub load_settings() for determinism.
- triad: documented view_image in docs/ARCHITECTURE.md (vision-tools paragraph).
Declined (evidence-based): shared native-injection helper extraction (advisory; eviction is already
centralized in _evict_stale_image_blocks so no drift; ~8-line duplication; no-overengineering);
rename _RUN_SHELL_DEFAULT_TIMEOUT_SEC (cosmetic); vlm_query message wording (cosmetic, no test breaks);
symlink-deny (confirmed safe: resolve()-then-contain). Version bump (6.40.1) happens at MERGE.

Tests: 275 focused tests green (vision, multimodal, shell, safety-policy invariant, tool_capabilities,
devtools, iteration-2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 22:09:02 +03:00
Ouroboros
db479b44ed feat(core): v6.35.0 — real-usage quality meta-fixes from a benchmark forensic audit
Structural, additive, default-on fixes derived from a forensic analysis of three
benchmark runs (SWE-bench-Pro, SWE-Pro, Terminal-bench). The coding quality was
already high; the score drag was a handful of real-usage defects. Each fix is a
meta-solution per BIBLE (P2 meta-over-patch, P5 LLM-first, P7 minimalism), not a
per-bug prompt crutch.

T1 — honest task-acceptance review:
- `outcome_tier` + `completion_coach` are now REQUIRED reviewer JSON keys (the
  best_effort completion-coach branch was dead because models ignored the prose).
- EVIDENCE-INDEPENDENCE and ENVIRONMENT-vs-DELIVERABLE reviewer directives (pure
  LLM judgment, no regex on test paths).
- Host-forced `required` review is LABEL-ONLY: it records the verdict/tier on the
  objective axis but no longer injects the review into the transcript or forces an
  extra model round (that re-loop made the agent rewrite its deliverable into a
  meta-essay and tanked metrics). `auto` stays truly auto.
- Aggregation splits parse_degraded vs actor_error so one bad slot can't drop a
  clean quorum; the objective axis aggregates outcome_tier from only the
  CONTRIBUTING PASS actors on a PASS run.
- The reviewer is fed a host-collected turn diff (tracked + untracked new files;
  secrets redacted; any agent-supplied diff kept only under a labeled
  non-independent key so EVIDENCE-INDEPENDENCE can't be steered).

T2 — path normalization for any external workspace:
- One shared `normalize_root_relative(root, path)` helper (relative string only,
  never widens access) applied ONCE at the dispatch boundary so the handler and
  every guard (protected-path, protected-artifact, shrink guard) resolve the same
  target — closing a normalize-vs-guard desync class. Covers
  search_code/list_files/query_code/read_file/write_file/edit_text.

T3 — per-call shell timeout:
- run_command/run_script accept `timeout_sec` (alias `timeout`), clamped by the
  deadline and `OUROBOROS_PER_CALL_TIMEOUT_CEILING_SEC`; the outer tool-execution
  timeout rises to match so long approved commands aren't cut at the static cap.

T4 — outcome-axis honesty:
- A one-shot `run_command`/`run_script` non-zero exit/shell error becomes a
  non-degrading `execution.cosmetic_tool_errors` record (timeout stays blocking);
  the execution axis means harness/capability health, while "did it work?" lives
  on the objective/review axis. A structural `objective.warning =
  residual_tool_errors_without_review` is surfaced (UI severity → warn) when
  cosmetic errors exist and no review judged the objective.

T7 — core workspace.patch hygiene:
- Untracked build binaries, >5 MiB blobs, and junk artifacts are excluded and
  recorded in the manifest (never silently lost); `_PATCH_EXCLUDE_RULES_VERSION`
  bumped to 2.

Verification: targeted + broad isolated pytest green; Ouroboros's own triad
(gpt-5.5 + gemini-3.5-flash + opus-4.8) and scope (gpt-5.5) review converged clean
after fixing 6 review-surfaced edge cases; claudexor codex (gpt-5.5) final review.
All version carriers synced to 6.35.0.
2026-06-17 04:09:28 +03:00
Ouroboros
2103957251 git-policy: block self-repo git from task workspaces
Allow full local git inside a task workspace while deterministically blocking
any git that targets the Ouroboros self-repo/data via cwd, -C, --git-dir/
--work-tree, GIT_DIR/GIT_WORK_TREE env, positional path, or glued/newline/
backtick-separated segments. Adds segment-aware shell parsing helpers.
2026-06-11 16:09:56 +03:00
Ouroboros
7b7aa9e39e Prepare Ouroboros v6.5.0-rc.1
Light mode now permits external user deliverables through user_files, task_drive, artifact_store, process outputs, and claude_code_edit while preserving self-repo/control-plane protection.

Add auditable artifact collection, typed tool/outcome failures, task-status reconciliation, runtime docs/checklist updates, and regression coverage for light-mode artifact boundaries.
2026-05-28 15:03:56 +03:00
Ouroboros
72f6686d72 Prepare Ouroboros v6.4.0-rc.1 2026-05-28 05:47:56 +03:00
Ouroboros
a538688218 Adapt filesystem observability to Tool API v2 2026-05-28 05:23:58 +03:00
Ouroboros
8ef5bb3f98 feat(tools): introduce Tool API v2 and services 2026-05-27 05:42:39 +03:00
Ouroboros
a8cac05981 v5.15.0-rc.9: test-suite structural consolidation pass
Refactor pass on the test suite: 24 file deletes, 7 cross-file merges,
~-1.7k LOC, 3399 tests passing (up from 3396 after adversarial review
caught 3 wrongly-removed tests during merge B.11 and restored them).

Outright deletes (7 files, -353 LOC):
- test_constitution.py: self-contained spec/DSL, no production code
  exercised; BIBLE.md numbering spine guard remains in
  test_smoke.py::test_bible_exists_and_has_principles
- test_module_size_gate.py / test_no_port_collision_8767.py: literal
  constant pins; real gates live in test_smoke.test_no_oversized_modules
  and DEFAULT_HOST_SERVICE_PORT use sites
- test_git_imports.py: redundant with test_smoke.test_import parametrize
- test_lmstudio_cached_tokens.py: comment archaeology in llm.py
- test_fixtures_mock_clawhub.py / test_fixtures_mock_llm.py: fixture
  self-tests

Cross-file merges (13 groups, 17 source files → 7 target/new files):
- test_advisory_workflow.py absorbs test_advisory_workflow_ext.py
- test_plan_review.py absorbs test_plan_review_quorum.py
- test_shell_run_shell.py NEW: test_shell_recovery + test_shell_regex_hint
  + test_shell_no_match_semantics merged
- test_web_search.py NEW: test_search_tool + test_web_search_streaming
- test_loop_misc.py NEW: test_loop_incoming_messages + test_loop_skill_finalization
- test_runtime_mode_core.py NEW: test_runtime_mode + test_runtime_mode_gating
  (test_runtime_mode_elevation.py kept separate per its 50+ attack vectors)
- test_build_scripts.py absorbs test_packaging_assets + test_release_workflow
  CI parts
- test_skills_marketplace_ui.py NEW: test_skills_ui_static
  + test_marketplace_ui_static + test_skill_toggle_smart_ui
- test_page_chrome_static.py NEW: test_page_header_ui_static
  + test_settings_and_page_layout_static + test_evolution_ui_guards
- test_skill_dependencies.py absorbs test_skill_token
  + test_skill_requested_secret_keys + test_skill_dependency_specs
- test_context.py absorbs test_context_memory_overhaul.py
- test_launcher_sync.py absorbs test_launcher_host_service_cleanup.py
- test_chat_logs_ui.py / test_chat_js_contracts.py: dedup
  TestVisualViewportListener + remove vacuous L317 assert

Rename: test_phase7_pipeline.py -> test_git_review_pipeline.py.
Production-code surface (2 lines):
- ouroboros/tools/review.py:110: comment now references the renamed file
- docs/ARCHITECTURE.md:1222: reference now points at test_plan_review.py
  (test_plan_review_quorum.py was merged into it)

In-place trims across ~28 files:
- Inspect-only source-string pin tests dropped under delete_trust_behavioral
  (test_review_v4_33 TestBuildReviewContextRelaxed/CircuitBreakerHintThreshold,
  test_review_synthesis 3 import tests, test_block1_review_pipeline
  TestRepoWriteCommitScopeReview, test_bughunt_fixes test_chat_id_zero,
  test_review_observability dataclass-only + manual mirror)
- Parametrize wins: test_browser_isolation 13 tests -> 2 tables;
  test_provider_integration 8 tests -> 2 tables; test_advisory_observability
  SDK-break readonly+edit collapsed; test_budget_tracking
  TestProviderAttributionHelper 7 tests -> 1 table; test_block1_review_pipeline
  TestIsProbablyBinary 5 tests -> 1 table; test_marketplace_adapter OS-field
  pair -> 1 table; test_skill_loader fail-closed pair -> 1 table
- Cosmetic CSS literal pins removed from test_chat_logs_ui
- Declarative-schema enumeration in test_widgets_ui_static collapsed to
  4 sentinels (was 15+ markers)
- test_contracts.py: 5 paranoid manifest YAML edge cases removed
- test_commit_gate test_auto_tag_function_exists / test_credential_helper_exists
  / test_auto_push_function_exists / triad-prompt substring pins dropped
- Settings explainer copy pins removed from test_settings_ui_guards
- test_settings_updates_ui::test_update_panel_contract_exists shortened

Preserved per P3 immune system + user constraints:
- All AST smoke walkers (test_no_oversized_modules, test_no_bare_except_pass,
  test_no_extremely_oversized_functions, test_function_count_reasonable,
  test_no_env_dumping)
- test_runtime_mode_elevation.py 50+ self-elevation attack vectors
- test_safety_policy.py::test_tool_policy_covers_all_builtin_tools
- test_platform_guard.py AST scan
- tests/fixtures/chat_logs_ui_static_checks.json (167 rows untouched)
- test_skill_exec.py and test_extensions_api.py kept as separate layers

Adversarial multi-model review (gemini-critic + gpt-critic + opus-critic,
round 1) caught two blockers: (1) the agent had wrongly removed 3 tests
from test_context.py during merge B.11 due to bad copy-paste and
misdiagnosed the failures as "consolidator API drift"; round 2 restored
them verbatim from git show HEAD:tests/test_context_memory_overhaul.py.
(2) docs/ARCHITECTURE.md:1222 still referenced a deleted regression-guard
test; fixed in same commit per P6.

Plus 5 stale audit-comment cleanups across test_contracts, test_tool_capabilities,
test_skill_exec, test_bughunt_fixes, test_chat_logs_ui, test_browser_isolation,
test_git_review_pipeline pointing at the new file layout.
2026-05-11 18:36:08 +03:00