* fix(ruflo-agentdb): stop the secret screen treating a hyphen-named memory key as a credential field
assignmentSecret() ran the KEY_NAME key-assignment check on every match, so
any entry whose name starts with auth (auth-flow-notes) plus up to 40 name
characters looked like a config field, and keyedSecret()/plausibleSecret()
then judged the entry's value as a credential: a write of
{ key: 'auth-flow-notes', value: 'getUser-not-getSession' } was refused
(#4202). A key that is itself a multi-word hyphenated name is an entry's
name, not a field, so the keyed check now skips it; the secret shapes still
screen the whole text, and single-word credential keys (auth, api_key,
token) keep blocking keyed literals.
Synced to the 39 plugin copies with scripts/sync-mod-screen.mjs.
Fixes #4202
Assisted-by: AI (automated contributor session, disclosed on the issue)
* chore(ci): exclude plugins/ruflo-agentdb/tests/guard-keys.test.ts from the root vitest run
The new test imports claude-code/testing like its six siblings, so the root
ratchet run (scripts/ci-test-ratchet.mjs) cannot collect it outside Claude
Code; list it in scripts/ci-test-excluded.txt per the documented convention
so ci.yml stays green until 'claude plugin test plugins/ruflo-agentdb' runs
it in all-plugins-smoke.
Follow-up to #4202
Assisted-by: AI (automated contributor session, disclosed on the issue)
ruflo-docs
Documentation generation, drift detection, and API docs automation.
Install
/plugin marketplace add ruvnet/ruflo
/plugin install ruflo-docs@ruflo
What's Included
- Auto-Documentation: Background worker generates docs from code changes
- Drift Detection: Identifies when docs fall out of sync with implementation
- API Docs: Automated API documentation from TypeScript interfaces and JSDoc
- CAPABILITIES.md Generation: Full capabilities reference via
initcommand - Document Worker: Background
documentworker triggers on API changes - SPARC Integration: Uses documenter and docs-writer agent patterns
Requires
ruflo-coreplugin (provides MCP server)
Compatibility
- CLI: pinned to
@claude-flow/cliv3.6 major+minor. - Agent model: Haiku (cost-efficient for docs work).
- Verification:
bash plugins/ruflo-docs/scripts/smoke.shis the contract.
Document-worker contract
Drives the document background worker (one of 12 workers in CLAUDE.md). Two invocation paths:
# CLI
npx @claude-flow/cli@latest hooks worker dispatch --trigger document
npx @claude-flow/cli@latest hooks worker dispatch --trigger document --context api
# MCP
mcp tool call hooks_worker-dispatch --json -- '{"trigger": "document", "context": "api"}'
| Context | Output |
|---|---|
| (none) | Full project documentation pass |
api |
API reference from JSDoc/TSDoc + OpenAPI 3.0 for HTTP endpoints |
<file-path> |
Single-file doc generation |
Namespace coordination
This plugin owns the docs-drift AgentDB namespace (kebab-case, follows the convention from ruflo-agentdb ADR-0001 §"Namespace convention"). Used for drift-detection state (last-seen export hash per file). Reserved namespaces (pattern, claude-memories, default) MUST NOT be shadowed.
docs-drift is accessed via memory_* tools (namespace-routed).
Verification
bash plugins/ruflo-docs/scripts/smoke.sh
# Expected: "13 passed, 0 failed"
Architecture Decisions
Related Plugins
ruflo-agentdb— namespace convention ownerruflo-loop-workers— defines thedocumentbackground workerruflo-adr— ADRs trigger doc generation when status changesruflo-sparc— Documenter mode (Phase 5 Refinement) consumes this plugin
As a mod
Since this version the plugin is also a function-hook mod (ADR-445 pattern; needs Claude Code 2.1.287 or later). It never calls the network or spawns a process, and it only tightens: it can refuse a call, never allow one.
- Guard (default on): refuses
doc-*memory writes and thedocumentworker dispatch that hold a key, token or password. The reason names the kind of secret, never the value. /docs-mod: answered locally, no model turn:status,scan <text>(would the guard refuse this?), anddocs(markdown files indocs/).- Status file:
.claude-flow/docs-mod/status.json({version, updatedMs, guard, blocked}), written at session start and when a call is blocked. - Option:
guard(on|off, defaulton) in the plugin'suserConfig.
Test it: claude plugin test plugins/ruflo-docs and bash plugins/ruflo-docs/scripts/smoke.sh.