Files
ruflo/plugins/ruflo-docs
chaitanya-y20 13af5f1208 chore(plugins): give every plugin manifest a repository field
44 of the 48 `plugins/*/.claude-plugin/plugin.json` manifests had no
`repository`, while the four that do already point at the repo URL their
`homepage` names. The field is what the directory listing and
`npm view` read, and its absence is invisible until something reads it.

Add it to the 44 that lack it, then make `scripts/audit-plugin-manifest.mjs`
enforce it so the next plugin cannot ship without one:

- check 6 in the script header, the violation in `auditManifest`, and the
  clean-run summary line. A manifest may carry the repository as a string or
  as an object's `url`; anything else is reported as missing, and a value that
  is not an http(s) URL is reported separately.
- the required-field lists in `create-plugin` and `validate-plugin` skills, so
  a scaffolded plugin passes the gate it is told to satisfy.

Verified with the repo's own gates:

- `node scripts/audit-plugin-manifest.mjs` scans 48 manifests, clean.
- removing the field from one manifest reports `repository field: missing or
  empty` and exits 1; setting it to `ruvnet/ruflo` reports `repository is a URL`
  and exits 1; restoring it exits 0.
- `node scripts/check-plugin-manifests.mjs` is unchanged by this diff (its two
  nested-manifest findings belong to `ruflo-ai-team/directory` and
  `ruflo-x-gateway/directory`, which this change does not touch).
- `node scripts/audit-plugin-secrets.mjs` clean, 48 manifests.

No plugin version is bumped: the installed artifact's behaviour does not change
and no user-visible surface reads the field from an installed copy, so there is
nothing for a version bump to deliver. The `Plugin version bump` workflow will
flag the 44 manifests it sees as shipped files, and this PR needs the
`skip-plugin-version-check` label rather than 44 unrelated version bumps that
would collide with each plugin's own release cadence.

Closes #4774
2026-11-05 09:25:38 +05:30
..

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 init command
  • Document Worker: Background document worker triggers on API changes
  • SPARC Integration: Uses documenter and docs-writer agent patterns

Requires

  • ruflo-core plugin (provides MCP server)

Compatibility

  • CLI: pinned to @claude-flow/cli v3.6 major+minor.
  • Agent model: Haiku (cost-efficient for docs work).
  • Verification: bash plugins/ruflo-docs/scripts/smoke.sh is 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

  • ruflo-agentdb — namespace convention owner
  • ruflo-loop-workers — defines the document background worker
  • ruflo-adr — ADRs trigger doc generation when status changes
  • ruflo-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 the document worker 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?), and docs (markdown files in docs/).
  • 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, default on) in the plugin's userConfig.

Test it: claude plugin test plugins/ruflo-docs and bash plugins/ruflo-docs/scripts/smoke.sh.