Xinmin Zeng 2a97ec3e58
docs: turn README into an index and move reference detail to docs/guide (#8113)
* docs: turn README into an index and move reference detail to docs/guide

The README had grown to 393 KB because every change appended its notes there. The text moves verbatim into 18 topic guides under docs/guide/; only headings are re-leveled and relative links re-pointed. The README keeps the introduction, a quick start and a guide index. Contributor test notes move to CONTRIBUTING.md.

* docs: send user docs to topic guides and budget the root README

The rule 'update README.md for user-facing changes' is what grew the README. Guidance now points to docs/guide/, and check_agent_guidance.py fails when the root README exceeds 16 KiB (AG003).

* chore: remove unreferenced screenshots and finished plan notes

pr-build/ holds two PR screenshots (3 MB) from #1986. plans/ holds the plan for the merged #4049. docs/SKILL_NAME_CONFLICT_FIX.md is a February change note. Nothing references them.

* docs: route always-loaded AGENTS.md files to scoped guides

* docs(agents): cut scoped guides to scope, verify, traps, decisions

Each AGENTS.md keeps four kinds of content: the scope of the directory, the
verification commands, traps a local test run does not show, and decisions the
code cannot state. Values, field lists, function inventories, test names, issue
numbers and history are deleted, because the code, the tests and git state them.

Search and fetch providers share one community guide. Four guides with no
remaining content are removed. The size check now allows 6 KiB per file (hard
limit 8 KiB) and 24 KiB per chain (hard limit 32 KiB).

* style: format frontend guide table and guidance test imports

---------

Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-11-11 13:26:17 +08:00

2.4 KiB

Knowledge management example

An optional, separately installed extension that holds the management business logic, the provider configuration and the HTTP API. Core retrieval never depends on it. It uses the public principal and plugin authorization APIs and imports nothing host-internal. Real validation results are in VALIDATION.md.

cd backend && python -m pytest tests -q -k "knowledge_management"
make test-blocking-io

Live tests need both DEER_FLOW_RUN_LIVE_TESTS and KNOWLEDGE_MANAGEMENT_ALLOW_WRITES, a dedicated synthetic base and credentials the caller supplies. Record mock coverage and real validation separately.

Authorization

  • Administration is opt-in. It needs an explicit grant for the exact user, base and operation, on top of the host administrator floor and the upstream authorization. A retrieval binding grants no write.
  • Identities come from the session. Do not accept a user, tenant, agent or space identity from the client, widen a resource selection, follow a redirect that carries credentials, or fall back to other credentials.
  • Check document and base membership before a mutation.
  • routes_enabled: false keeps the plugin namespace for downstream authorization and mounts no route and no Provider. Disabling the whole install removes the namespace too.

Writes and states

  • A write is never retried or cleaned up automatically. Keep the native IDs, so an uncertain write can be reconciled.
  • A processing capability describes upstream configuration, not an observed success. Unknown states stay unknown. A terminal parse status does not prove that Wiki or graph processing finished.
  • The WeKnora mappings are pinned to one upstream release. On a parent-child base, reject chunk size and overlap overrides before the mutation, because upstream derives them on its own. Empty reparse options keep the stored policy.
  • Capability options reflect the fetched base. Omit graph controls without graph support, and omit chunk overrides when the base has no chunking config or uses parent-child chunking.
  • Request bodies never carry credential, model or parser configuration.
  • A local credential failure returns 503 before any HTTP call, without reconciliation guidance, because no write was sent.
  • Failure logs hold the exception type, the numeric HTTP status and a fixed failure category. Exception text, payloads, URLs and credentials stay out.