Skip to content

Re-baseline to ruflo 3.28.0 / aqe 3.12.2: daemon default-on, MCP family picker, prune superseded patches, archive stale docs, heal #2670 - #12

Merged
pacphi merged 5 commits into
mainfrom
upgrade-3.28
Jul 14, 2026
Merged

Re-baseline to ruflo 3.28.0 / aqe 3.12.2: daemon default-on, MCP family picker, prune superseded patches, archive stale docs, heal #2670#12
pacphi merged 5 commits into
mainfrom
upgrade-3.28

Conversation

@pacphi

@pacphi pacphi commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Summary

Re-baselines the kit from ruflo 3.10.x-era assumptions to ruflo 3.28.0 / agentic-qe 3.12.2, prunes everything upstream has absorbed, flips the daemon and MCP posture now that upstream governance makes them safe, archives completed investigations, and heals a new 3.28 security regression found (and filed) during verification.

Upgrade & policy changes

  • Daemon default-on (local-only workers): ruflo-setup-project now starts a daemon; token-spending AI workers stay opt-in (RUFLO_DAEMON_AI_WORKERS=1) behind ruflo 3.27/3.28's machine-wide launch budget (#2661: daemon budget show|pause|resume, daemon stop --all, native 12h TTL #2356). Kit reapers (ruflo-daemon-gc, shell auto-reap, ⚙ statusline count — yellow now at ≥4) remain as an independent backstop.
  • MCP re-enabled by default: ruflo-setup-machine registers claude-flow once at user scope (#2206) with a tool-family picker — the inventory (276 tools / 35 families on 3.28) is enumerated live from the installed package, and excluded families become exact permissions.deny rules (proven end-to-end). Rationale: Claude Code now defers MCP tool schemas, so the historical ~84k-token argument for MCP-off no longer holds. ruflo-remove-mcp handles both keys and cleans deny rules; ruflo-onboard offers the step.
  • Pruned as superseded upstream: bin/ruflo-patch-route-learning (F2 fixed in 3.10.6 #2222; legacy cleanup kept in uninstall.sh); the statusline global-version-probe injection (3.28 ships it, #2221 — only the kit-unique Δ‖W‖/RL/QE footer remains); the stale ruflo@3.5.18 MCP pin.

New failure modes found & fixed

Docs & templates

  • 11 completed docs (superpowers plans/specs, F1–F6 upstream findings, both token-consumption incident reports) moved to a flat, date-prefixed docs/archive/ with an index README explaining what each was and which upstream release superseded it; all inbound/internal links repointed.
  • README, BACKGROUND, TROUBLESHOOTING, and the CLAUDE.md templates re-baselined: fixed-upstream bugs in past tense, new MCP/daemon posture, aqe 3.12.x deltas (non-destructive init, aqe quality-gate, AQE_LLM_PROVIDER/AQE_MAX_BUDGET_USD billing knobs), target line now 3.28.x/3.12.x.

Verification (all on ruflo 3.28.0 / aqe 3.12.2, Node 26, macOS)

  • ruflo-parity-test 20/20 (twice — including the new daemon-started-by-setup behavior)
  • ruflo-learning-verify ✓ (patterns 0→7 on disk); ruflo-patch-native --check all native
  • ruflo-verify-aqe ✓ (after live FLVR repair); ruflo-security-verify 5/5 post-heal
  • statusline segment tests 20/20; live render shows V3.28.0 + full footer
  • MCP claude-flow registered user-scope and connected; family-exclusion deny rules exercised and reverted
  • ruflo daemon status: AI Workers off (local-only, default); daemon budget show 0/2 hourly, 0/12 daily
  • link check: no references to the pre-archive doc paths outside the archive index

🤖 Generated with Claude Code

pacphi added 5 commits July 14, 2026 08:39
…ly picker, prune superseded patches

- ruflo-setup-project now starts a local-only daemon by default (AI workers stay
  opt-in behind RUFLO_DAEMON_AI_WORKERS=1 + upstream global budget, #2661)
- ruflo-setup-machine: user-scope MCP registration under the claude-flow key
  (#2206) with a tool-family picker; exclusions enforced via permissions.deny;
  ruflo-remove-mcp handles both keys and cleans kit deny rules; onboard offers it
- drop bin/ruflo-patch-route-learning (fixed upstream 3.10.6 #2222) + legacy cleanup
- statusline: drop global version-probe injection (upstream #2221 ships it);
  footer security probe follows @claude-flow/security (aidefence absorbed in 3.28);
  ⚙ alarm recalibrated for default-on (yellow at >=4)
- security-verify: aidefence optional; detect 3.28 defend banner-only regression
- repair-rvf: quarantine FLVR-magic .rvf.lock + truncated sibling (FsyncFailed fix)
- uninstall: daemon stop --all before --remove-ruflo; remove stale ruflo@3.5.18 pin
…date-prefix)

Move docs/{superpowers,upstream,usage} (11 files) into a flat docs/archive/ with
date+origin names, add an index README explaining each file's purpose and which
upstream release superseded it, rewrite internal cross-links to same-dir targets,
and repoint inbound links from README/BACKGROUND.
…28 / aqe 3.12.2

- README: MCP default-on with family picker, daemon default-on local-only,
  fixed-upstream bugs moved to past tense, statusline sample refreshed, target
  line now 3.28.x/3.12.x; drop patch-route-learning from the tree
- TROUBLESHOOTING: new MCP family/opt-out section, daemon section rewritten
  around upstream budget controls, FLVR corrupt-lock FsyncFailed mode, aqe
  3.12.1 merge behavior, 3.28.0 defend regression, billing-aware QE knobs
- BACKGROUND: dateline (all root causes fixed upstream), security package
  reality on 3.28, MCP cost framing marked historical
- templates: ruflo-reference(-full) MCP/daemon rewrites + daemon budget
  commands + defend regression; aqe-reference 3.12.x deltas; preamble stamp
- root CLAUDE.md: real test command, max-agents consistency
…correct the aidefence story

Root cause established while filing upstream: ruflo 3.28 DROPPED
@claude-flow/aidefence from its dependency tree (not absorbed —
@claude-flow/security has no detection API) while 'security defend' still
imports it, and the import-failure message is swallowed → silent banner-only
no-op. Filed as ruvnet/ruflo#2670 with a verified workaround; commented our
3.28 data point + client-side deny workaround on the existing tool-group
feature request ruvnet/ruflo#952 instead of filing a duplicate.

- new _ruflo_ensure_aidefence heal in ruflo-resync: installs the package
  --no-save into the global ruflo tree; verified to restore exit 1=threat /
  0=clean (fs-existence probe — the package exports map blocks require.resolve
  of ./package.json)
- statusline 🛡 segment reverted to aidefence-only probe (honest: no shield on
  a bare 3.28 install until healed)
- ruflo-security-verify: aidefence required again, failure points at resync +
  #2670; banner-only signature diagnosed with the fix
- README/BACKGROUND/TROUBLESHOOTING/full-reference: 'absorbed' claim corrected
  everywhere; heal + issue links documented
@pacphi
pacphi merged commit 62a460b into main Jul 14, 2026
@pacphi
pacphi deleted the upgrade-3.28 branch July 14, 2026 16:23
pacphi added a commit that referenced this pull request Jul 14, 2026
…itignore RVF caches (#13)

agentdb.rvf (162 bytes) + agentdb.rvf.lock (FLVR-content, i.e. corrupt interrupted
write) were runtime droppings from 'ruflo mcp start' running in the repo cwd during
MCP registration, swept in by git add -A. RVF stores are derived caches — never
repo content.
pacphi added a commit that referenced this pull request Aug 7, 2026
…reclaimables

The collectors from the previous run were built and tested but never called —
index.mjs had no owner, so nothing composed them into the payload. Wiring them
up is most of this change; the rest is what wiring them exposed.

Now live (verified against GET /api/system, not asserted):
  - projects: 50 ever seen / 25 on disk / 21 git repos, de-duped across hosts by
    resolved real path. Was 4, because discovery reused discoverRuvfloProjects()
    — which requires .claude-flow/neural/ state and answers a different question
    that Intelligence still depends on, so it is left alone.
  - consumers: 80 roots, top 20 ranked, grouped by ecosystem. The panel called
    npx cache the #1 consumer at 6 GB; it is #12. The real leaders were entirely
    unscanned — Ollama 141 GB, LM Studio 49 GB, Hugging Face 36 GB, npm's
    _cacache 22 GB. Overlapping roots collapse by path so the list cannot go
    self-similar (~/.npm never appears beside its own _cacache).
  - snapshot persists consumers; runtime is still absent, and that allow-list is
    what structurally enforces the ephemeral-census invariant.
  - refreshDeep finally takes includeProjectTrees, which the caller was already
    passing into a zero-arity function. Sticky across rescans; default off,
    because one repository here is 175 GB and flattens every other row.

A HARD HANG, found only because the wider discovery reached it: the deep scan
parked forever at 0% CPU inside a Dropbox tree. Cloud providers leave evicted
placeholders — stat returns instantly, read blocks in the kernel until the
provider materializes the bytes, which never happens while it is signed out.
There is no timeout, so the scan never completed and the dashboard served a
17-hour-old snapshot. Worse, reading them silently pulls the file down. Guarded
by the allocated-blocks basis the DDD already names (blocks === 0 && size > 0):
placeholders are stat-ed, never opened. Zero false positives across 3,667 files
here, including sub-2KB files that APFS stores inline. The tree that hung
forever now returns in 50ms; a full scan takes 204s.

Also: Playwright was invisible on macOS (the scan looked only at the XDG and
Windows paths, so 1.86 GB read as a measured zero), and the RuvNet Brain was
under-reported by 85% because only kb/ was measured — the other 11 GB is five
dated kb.bak snapshots, now broken out rather than silently folded in.

Reclaimables grew from two detectors to cover those backups, npm's regenerable
cache, orphaned transcripts, and browser downloads — split into two safety
tiers that never sum: 'regenerable' for caches a tool refetches on demand, and
'review' for things like mise's 8 node versions, where recommending deletion of
a live runtime would be worse than saying nothing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant