mirror of
https://github.com/ruvnet/ruflo.git
synced 2026-11-05 11:37:21 +09:00
fix/console-cli-cold-start
10
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
aed428c43e |
feat(console,adr): ADR management registry, page and mission/loop/swarm integration (ADR-480)
Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
d06b0122be |
fix(mods): shared textsOf reports truncation and every guard fails closed on it
The walker dropped input past its node, character and per-string budgets silently, so 32 guards passed a secret placed after the cap. textsOf now appends a TRUNCATED marker; names/hasSecretIn treat it as a finding. Regenerated the 38 copies, bumped the 39 plugins, emptied the known-holes baseline. Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
21adb5ce28 |
feat(mods): vendor the flag option parser from one origin with the screen sync and drift check (review #2)
Extend scripts/sync-mod-screen.mjs to a second kit: the flag() helper in hooks/options.ts of 38 mods now sits between SHARED FLAG markers and is rewritten/checked from ruflo-agentdb. Drift, a lost marker or zero copies fails --check. Bump the 39 touched plugin versions and their version pins. Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
1d1394aa53 |
fix(mods): live-check W5 — guards read key names and every field; trader gates the package's real order tools
Found by driving each plugin's mod live (/SHORT-mod status ran for all 19; status.json parsed, version 1) and probing the guards.
- 13 guards (jujutsu, knowledge-graph, loop-workers, market-data, metaharness, rag-memory, ruvector, ruvllm, rvf, security-audit, sparc,
workflows, x-gateway): textsOf dropped the key name, so {"api_key": "abcdef1234567890abcdef"} was never an assignment; and one long
field (a 40 KB base64 blob) used the whole 20 KB budget so a key in the next field was never read. Strings now lead with their key and
each is charged at most 20 KB of a 100 KB budget.
- neural-trader: the live-order gate matched execute_trade only; the package's execute_multi_asset_trade and place_prediction_order_tool
went through unconfirmed. Paper/simulated tools stay ungated.
- tsconfig.json for knowledge-graph, loop-workers, market-data, metaharness (the host writes it on load; jujutsu already commits it).
- Patch bump for the 14 plugins; smoke step 1 pins updated.
Co-Authored-By: RuFlo <ruv@ruv.net>
|
||
|
|
6d3aef01e8 |
feat(ruflo-workflows): function-hook mod (guard, status file, local slash command)
Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
e332689b8c | fix(release): harden hooks, statusline, security, and plugin MCP integration | ||
|
|
e0d0af1cef |
feat(gaia): pre-submission exploit audit + signed attestation (ADR-167) (#2543)
* feat(gaia): pre-submission exploit audit + signed attestation (ADR-167) Motivated by UC Berkeley RDI's April-2026 finding that all 8 major agent benchmarks were gamed to ~98-100% without solving a single task (GAIA leaked ~98% of answers via public answer DBs + normalization collisions; o3/Claude-3.7 monkey-patch graders in 30%+ of runs per METR). Signing proves transport-integrity; this audit proves earning-integrity. The audit report is deterministic ($0, offline, pure-core) and is registered as an ADR-103 witness fix marker so its sha256 + "clean": true marker are signed INTO manifest.md.json. - ADR-167 (v3/docs/adr): threat model, check catalogue mapped to RDI/METR vectors, manifest-attestation design, honest harness-gap limitations. - gaia-audit.mjs: 7 pure checks (answer-leakage, no-work, oracle-leakage, grader-isolation, normalization-collision, voting-disclosure, split-integrity); CLI exit 0 clean / 1 CRITICAL / 2 usage. Schema-blocked checks return skip with a harness_gap note, never a false pass. - Tests: 27 passing; clean + dirty fixtures triggering every vector. - Wired --audit into /gaia validate; pre-sign gate into /gaia submit (refuses CRITICAL fail unless --allow-dirty) + gaia-submission skill. - Bump ruflo-workflows 0.4.0 → 0.5.0. Co-Authored-By: claude-flow <ruv@ruv.net> Claude-Session: https://claude.ai/code/session_01V84YJJK7RBF9TuUo4eVSW7 * docs(adr): ADR-168 — GAIA harness evidence recording (implements ADR-167 §7 forward contract) Co-Authored-By: RuFlo <ruv@ruv.net> * docs(adr): ADR-169 — benchmark reporting integrity standard (strict-EM headlines, view-labeled scaling, disclosed gaps) Codifies the discipline the FRAMES ablation self-audit measured against the Berkeley RDI vectors. Completes the integrity family: ADR-167 audits the submission, ADR-168 records the evidence, ADR-169 governs how numbers are reported. Co-Authored-By: RuFlo <ruv@ruv.net> * feat(gaia): port static source-scan checks (AUD-8/9/10) into gaia-audit Ports the unique, non-overlapping checks from the reverted #2547 duplicate gaia-integrity.mjs into gaia-audit.mjs as a new static source-scan family, matching ADR-167's check-registry / status / harness_gap design: - AUD-8 answer-key-reads (CRITICAL, fail-closed): scans runner sources + produced artifacts for answer/gold/solution/ground-truth-shaped paths referenced outside the sanctioned dataset dir(s). - AUD-9 dynamic-eval (CRITICAL, fail-closed): static scan of the gaia-bench runner sources for eval()/new Function()/exec-family calls with a non-literal first arg. Preserves the #2547 false-positive refinements (multi-line aware, RegExp.prototype.exec excluded, fixed-string commands + comments ignored) — passes clean against ruflo's own multi-line `gcloud secrets … execSync`. - AUD-10 judge-injection (WARN): scans the agent's PRODUCED answer/outputs for judge-directed prompt-injection markers. Distinct from AUD-3 oracle-leakage (input-side gold-answer scan), so both run. Unlike AUD-1/3/4 these need no trajectory instrumentation — they enforce today and skip honestly (never false-pass) when the source population is absent (standalone/ejected run or --skip-source-scan). The #2547 provenance stamp and --allow-integrity-override are NOT ported: #2543's signed attestation and the `/gaia submit --allow-dirty` gate already own provenance + override, so the new checks flow through the same attestation.clean/strict_clean path. CLI adds --repo-root, --dataset-dir (repeatable), --skip-source-scan. Fixtures: planted evil runner (eval + interpolated exec), planted answer-key read, judge-injection results. Tests: 44 green (17 new). Docs: ADR-167 §3/§7 check table, gaia-validate.md, gaia-submission SKILL.md. Co-Authored-By: RuFlo <ruv@ruv.net> Claude-Session: https://claude.ai/code/session_01S7GYqnVUVxBfZ5W8znqry3 * fix(ci): advance ruflo-workflows smoke version assertion to 0.5.0 The AUD-8/9/10 port bumped plugin.json to 0.5.0 but the plugin's own smoke step 1 still asserted 0.4.0 — the single failing step behind both smoke-all and the meta-smoke leg of smoke-without-metaharness on #2543. Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
a73a2cbe32 |
fix(routing): stale route cache + --explore false (3.10.8) (#2229)
* feat(workflows): add native Workflow JS orchestration surface (ADR-0002) ruflo-workflows now documents both workflow surfaces: the existing 10 workflow_* MCP tools and the native Claude Code Workflow JS capability (.claude/workflows/*.js — agent/parallel/pipeline/phase fan-out). - ADR-0002 (Accepted): adopts native orchestration alongside the MCP surface - Reference workflow .claude/workflows/plugin-contract-audit.js (fans smoke contracts across all plugins, diagnoses failures in parallel) - README: native orchestration section + four-hook API + surface decision table - workflow-create/workflow-run skills, workflow-specialist agent, /workflow command made surface-aware - plugin.json 0.3.0 -> 0.4.0; native-workflow keywords + component block - smoke.sh reconciled (stale version + ADR-0001 status) and extended 11 -> 15 checks; smoke-gaia.sh version assertion bumped to 0.4.0 Co-Authored-By: RuFlo <ruv@ruv.net> * fix(routing): #bugB stale route cache + #bugC --explore false (3.10.8) Two routing-learning correctness bugs from the intelligence audit's remaining punch-list (docs/reviews/intelligence-system-audit-2026-05-29.md §Remediation). - Bug B (stale route cache): QLearningRouter.update() only invalidated the whole route cache every 50 updates, so a freshly-learned Q-update stayed hidden behind a stale cached decision — feedback appeared to have no effect on routing in-process until 50 updates accumulated. Now update() invalidates the updated state's cache entry immediately (new invalidateCacheEntry). Verified: learned route flips coder→researcher within 10 updates (was 50+). - Bug C (--explore false ignored): boolean flags dropped an explicit space-form value, forcing a default-true boolean (explore) to true even with , so exploitation could never be forced. parser.ts now consumes a true/false literal for boolean flags (--explore false / -e false), while --explore=false and --no-explore keep working. Verified deterministic. +4 regression tests (15/15 bug-cluster pass); 52/52 parser tests pass; cli build clean. Audit doc updated with full remediation status (3.10.7 + 3.10.8 shipped; SONA-default/MicroLoRA/EWC-Fisher/per-task-bandit deferred with honest rationale — the latter two need an ADR/upstream fix, not a patch). Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
2158808f7d |
fix(gaia): #2156 iter 53a — narrow T2 extraction to fix iter 52b regression (#2204)
* feat(benchmarks): ADR-133-PR1 — gaia-loader.ts skeleton + HF_TOKEN resolution Adds the first concrete deliverable toward ADR-133 (Real GAIA Capability Benchmark): a typed dataset loader with: - `resolveHfToken()` — mirrors the ANTHROPIC_API_KEY pattern from performance-capability.ts (env var first, gcloud fallback using the actual GCP secret name `huggingface-token`) - `loadGaia(options)` — public API returning GaiaQuestion[] with level/limit/smokeOnly/cacheDir knobs - `SMOKE_FIXTURE` — 5 offline questions for CI-without-HF testing (all 5 answer keys manually verified via `node -e`) - HF Datasets Server paginated rows endpoint (PR-1 skeleton: 100 rows, full pagination tracked for PR-3) HF_TOKEN is confirmed available in GCP Secret Manager as `huggingface-token` (36-char token). The `resolveHfToken()` function resolves this correctly. Next: gaia-tools/ (PR-2) and gaia-agent.ts multi-turn loop (PR-3). Co-Authored-By: RuFlo <ruv@ruv.net> * feat(benchmarks): ADR-133-PR2 — gaia-tools/ scaffold (web_search + file_read + types) Adds the second slice of ADR-133 (Real GAIA Capability Benchmark): the gaia-tools/ subsystem that the agent loop (PR-3) will consume. New files: - gaia-tools/types.ts — shared Anthropic tool_use / tool_result spec types (ToolDefinition, ToolUseBlock, ToolResultBlock, GaiaTool interface, GaiaToolCatalogue) - gaia-tools/web_search.ts — DuckDuckGo HTML scrape (POST /html/, no API key); regex-based title/URL/snippet extraction; single-redirect follow; 20s timeout - gaia-tools/file_read.ts — local fs reader with extension + magic-byte content-type detection; 1 MB size cap; absolute-path validation; binary stub for PDF/images (PR-4 concern) - gaia-tools/index.ts — barrel + createDefaultToolCatalogue() factory All logic verified via node -e before commit: PASS: stripHtml (3 cases) PASS: validatePath (4 cases — empty, relative, null-byte, valid absolute) PASS: hasBinaryMagic (5 cases — PDF, PNG, JPEG, text, empty) PASS: decodeRawUrl (DDG redirect URL + direct URL passthrough) TypeScript: tsc --noEmit --skipLibCheck — zero errors. Next: gaia-agent.ts multi-turn loop (PR-3) that imports createDefaultToolCatalogue() and drives a Claude Messages API call-loop until final_answer is extracted. Refs: ADR-133, #2156 Co-Authored-By: RuFlo <ruv@ruv.net> * feat(hooks): ADR-132 — SimulativePlanningRouter scaffold + unit tests Implements the SR²AM-style simulative planning layer from ADR-132: selective depth-allocation that fires a Haiku shadow pass before Tier-3 (Sonnet/Opus) dispatch when tasks exceed the horizon/MCP gate. New files: - v3/@claude-flow/hooks/src/route/simulative-planning-router.ts Gate logic (estimatedHorizon > 5 OR predictedMcpCalls >= 2), buildShadowPrompt, parseShadowResponse (fence-stripping + fallback), maybeSimulatePlan (injected HaikuClient + SonaCache collaborators). Target: <=30 ms overhead, 256-token Haiku pass, 300 s SONA TTL. - v3/@claude-flow/hooks/src/route/index.ts Barrel export for the new route/ submodule. - v3/@claude-flow/hooks/__tests__/simulative-planning-router.test.ts 25 vitest unit tests (all green): gate boundary conditions, prompt builder, JSON parser (happy path / code-fence stripping / malformed fallback), maybeSimulatePlan integration with mock collaborators, SONA cache-write failure resilience. Does NOT open PR — gated on ADR-132 doc PR #2157 merging first (per iter-1 decision D1). Co-Authored-By: RuFlo <ruv@ruv.net> * Revert "feat(hooks): ADR-132 — SimulativePlanningRouter scaffold + unit tests" This reverts commit |
||
|
|
d9db4e7663 |
feat(ruflo-workflows): v0.2.0 — adopt plugin contract + 10-tool MCP surface + lifecycle state machine (ADR-0001)
This is the FINAL plugin in the ruflo family. ADR-0001 here completes the plugin-contract retrofit across all 33 plugins. Surface: 10 workflow_* MCP tools (create/run/execute/status/list/pause/ resume/cancel/delete/template) backed by full state machine (created → running ↔ paused → completed/cancelled). - ADR-0001 (Proposed) at docs/adrs/0001-workflows-contract.md - README adds Compatibility (pin v3.6), 10-tool MCP surface table, Lifecycle state machine diagram + transition table (5 states + 4 transitions), workflow_execute documented as stateless path, Namespace coordination (claims workflows-state; defers to ruflo-agentdb ADR-0001), Verification + Architecture Decisions - plugin.json bumps 0.1.0 → 0.2.0; description names the 10 tools + state machine; keywords add mcp, workflow-templates, pause-resume, lifecycle - scripts/smoke.sh — 11 structural checks: version + keywords, both skills + agent + command present, all 10 workflow_* tools referenced, v3.6 pin, namespace coordination, workflows-state claimed, 5 lifecycle states + 4 transitions documented, workflow_execute stateless path, ADR Proposed, no wildcard tools Verification: bash plugins/ruflo-workflows/scripts/smoke.sh → 11/11 Co-Authored-By: RuFlo <ruv@ruv.net> |