diff --git a/.dockerignore b/.dockerignore
index 24924a4bf..9f2cc3750 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -12,3 +12,12 @@ __pycache__
web/.next
web/node_modules
web/.env
+
+# Documentation site dependencies and generated output
+docs/node_modules/
+docs/.next/
+docs/dist/
+docs/.fumapress/
+docs/.waku/
+docs/content/
+docs/public/
diff --git a/.github/workflows/docs-tests.yml b/.github/workflows/docs-tests.yml
new file mode 100644
index 000000000..2aa5f0366
--- /dev/null
+++ b/.github/workflows/docs-tests.yml
@@ -0,0 +1,29 @@
+name: Docs tests
+
+on:
+ pull_request:
+ paths: ['docs/**', '.github/workflows/*docs*.yml', '.github/workflows/sync-*.yml']
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ docs:
+ name: Fumapress docs build
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ defaults:
+ run:
+ working-directory: docs
+ steps:
+ - uses: actions/checkout@v7
+ - uses: actions/setup-node@v7
+ with:
+ node-version: '24'
+ cache: npm
+ cache-dependency-path: docs/package-lock.json
+ - run: npm ci
+ - run: npm run typecheck
+ - run: npm test
+ - run: npm run build
diff --git a/.github/workflows/sync-blog-articles.yml b/.github/workflows/sync-blog-articles.yml
new file mode 100644
index 000000000..c7ccf0668
--- /dev/null
+++ b/.github/workflows/sync-blog-articles.yml
@@ -0,0 +1,62 @@
+name: Sync LangBot Blog articles
+
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: '17 2 * * *'
+
+permissions:
+ contents: read
+
+concurrency:
+ group: sync-langbot-blog-articles
+ cancel-in-progress: false
+
+jobs:
+ sync:
+ if: github.repository == 'langbot-app/LangBot' && github.ref == 'refs/heads/main' && vars.DOCS_MIRROR_ENABLED == 'true'
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ defaults:
+ run:
+ working-directory: docs
+ steps:
+ - name: Check out main
+ uses: actions/checkout@v5
+ with:
+ ref: main
+ fetch-depth: 0
+ # A PAT push triggers the mirror and Wiki workflows; GITHUB_TOKEN does not.
+ token: ${{ secrets.LANGBOT_WIKI_PUSH_TOKEN }}
+ - uses: actions/setup-node@v7
+ with:
+ node-version: '24'
+ cache: npm
+ cache-dependency-path: docs/package-lock.json
+ - run: npm ci
+ - name: Check out LangBot landing page
+ uses: actions/checkout@v5
+ with:
+ repository: langbot-app/langbot-landing-page
+ token: ${{ secrets.LANGBOT_WIKI_PUSH_TOKEN }}
+ path: .article-source
+ persist-credentials: false
+ - name: Synchronize articles and images
+ run: node scripts/sync-blog-articles.mjs --source ../.article-source
+ - name: Validate generated articles
+ run: |
+ node scripts/sync-blog-articles.mjs --check --source ../.article-source
+ node scripts/sync-blog-articles.mjs --check
+ npm test
+ npm run build
+ - name: Commit synchronized content
+ run: |
+ git add docs.json en/articles zh/articles ja/articles images/articles scripts/blog-articles-manifest.json
+ if git diff --cached --quiet; then
+ echo 'LangBot Blog articles are already synchronized.'
+ exit 0
+ fi
+ git config user.name 'langbot-docs-bot'
+ git config user.email 'actions@users.noreply.github.com'
+ git commit -m 'docs(articles): sync LangBot Blog'
+ git push origin HEAD:main
diff --git a/.github/workflows/sync-github-wiki.yml b/.github/workflows/sync-github-wiki.yml
new file mode 100644
index 000000000..03140de9e
--- /dev/null
+++ b/.github/workflows/sync-github-wiki.yml
@@ -0,0 +1,90 @@
+name: Sync GitHub Wiki
+
+on:
+ push:
+ branches: [main]
+ paths:
+ - "docs/en/**"
+ - "docs/zh/**"
+ - "docs/ja/**"
+ - "docs/scripts/build-github-wiki.py"
+ - ".github/workflows/sync-github-wiki.yml"
+ pull_request:
+ paths:
+ - "docs/en/**"
+ - "docs/zh/**"
+ - "docs/ja/**"
+ - "docs/scripts/build-github-wiki.py"
+ - "docs/tests/test_build_github_wiki.py"
+ - ".github/workflows/sync-github-wiki.yml"
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: sync-langbot-github-wiki
+ cancel-in-progress: false
+
+jobs:
+ build:
+ defaults:
+ run:
+ working-directory: docs
+ name: Build Wiki mirror
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ steps:
+ - uses: actions/checkout@v7
+ - uses: actions/setup-python@v7
+ with:
+ python-version: "3.12"
+ - name: Run converter tests
+ run: python -m unittest tests/test_build_github_wiki.py
+ - name: Build Wiki pages
+ run: python scripts/build-github-wiki.py --output dist/github-wiki
+ - name: Validate generated pages
+ run: |
+ test -f dist/github-wiki/Home.md
+ test -f dist/github-wiki/_Sidebar.md
+ test "$(find dist/github-wiki -maxdepth 1 -name '*.md' | wc -l)" -gt 250
+ - name: Upload generated Wiki
+ uses: actions/upload-artifact@v7
+ with:
+ name: github-wiki
+ path: docs/dist/github-wiki
+ if-no-files-found: error
+
+ sync:
+ name: Publish to LangBot Wiki
+ if: github.event_name != 'pull_request' && github.repository == 'langbot-app/LangBot' && github.ref == 'refs/heads/main' && vars.DOCS_MIRROR_ENABLED == 'true'
+ needs: build
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ steps:
+ - uses: actions/download-artifact@v8
+ with:
+ name: github-wiki
+ path: generated
+ - name: Clone target Wiki
+ env:
+ WIKI_PUSH_TOKEN: ${{ secrets.LANGBOT_WIKI_PUSH_TOKEN }}
+ run: |
+ test -n "$WIKI_PUSH_TOKEN"
+ git clone "https://x-access-token:${WIKI_PUSH_TOKEN}@github.com/langbot-app/LangBot.wiki.git" target
+ - name: Replace and publish Wiki contents
+ env:
+ SOURCE_SHA: ${{ github.sha }}
+ run: |
+ find target -mindepth 1 -maxdepth 1 ! -name .git -exec rm -rf {} +
+ cp -a generated/. target/
+ cd target
+ git add -A
+ if git diff --cached --quiet; then
+ echo "GitHub Wiki is already up to date."
+ exit 0
+ fi
+ git config user.name "langbot-docs-sync[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git commit -m "docs: sync from LangBot/docs@${SOURCE_SHA::7}"
+ git push origin HEAD:master
diff --git a/.github/workflows/sync-landing-submodule.yml b/.github/workflows/sync-landing-submodule.yml
new file mode 100644
index 000000000..e4d736a93
--- /dev/null
+++ b/.github/workflows/sync-landing-submodule.yml
@@ -0,0 +1,44 @@
+name: Sync docs mirror and landing submodule
+
+on:
+ push:
+ branches: [main]
+ paths: ['docs/**', '.github/workflows/sync-landing-submodule.yml']
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: sync-landing-docs-main
+ cancel-in-progress: false
+
+jobs:
+ sync:
+ if: github.repository == 'langbot-app/LangBot' && github.ref == 'refs/heads/main' && vars.DOCS_MIRROR_ENABLED == 'true'
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v7
+ with:
+ ref: main
+ fetch-depth: 0
+ persist-credentials: false
+ - name: Test synchronization contracts
+ working-directory: docs
+ run: python3 -m unittest discover -s tests -p test_sync_landing_submodule.py -v
+ - name: Publish docs subtree (fast-forward only)
+ env:
+ GH_TOKEN: ${{ secrets.LANGBOT_WIKI_PUSH_TOKEN }}
+ run: |
+ gh auth setup-git
+ git remote add docs-mirror https://github.com/langbot-app/langbot-docs.git
+ git fetch docs-mirror main
+ docs_sha=$(git subtree split --prefix=docs)
+ git merge-base --is-ancestor docs-mirror/main "$docs_sha"
+ git push docs-mirror "$docs_sha:refs/heads/main"
+ - name: Update landing submodule and production fork
+ working-directory: docs
+ env:
+ GH_TOKEN: ${{ secrets.LANGBOT_WIKI_PUSH_TOKEN }}
+ run: python3 scripts/sync-landing-submodule.py
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 32f4cde68..9088647f6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -5,19 +5,23 @@ repos:
hooks:
# Run the linter of backend.
- id: ruff
+ exclude: ^docs/
args: [--fix]
# Run the formatter of backend.
- id: ruff-format
+ exclude: ^docs/
- repo: local
hooks:
- id: prettier
+ exclude: ^docs/
name: prettier
entry: npx --prefix web prettier --write --ignore-unknown
language: system
types_or: [javascript, jsx, ts, tsx, css, scss]
- id: lint-staged
+ exclude: ^docs/
name: lint-staged
entry: cd web && pnpm lint-staged
language: system
diff --git a/AGENTS.md b/AGENTS.md
index 938eef4d9..3abf8259d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -44,12 +44,13 @@ Run tests in Linux to match CI; on Windows, use Linux containers through `wslc`
## Where to Look
+- Public documentation source: `docs/`; published at https://langbot.app/docs/. `langbot-app/langbot-docs` is a generated subtree mirror; edit here.
- Architecture map: `ARCHITECTURE.md`.
- Dev environment guide: https://langbot.app/docs/zh/develop/dev-config.
- Plugin runtime / CLI / SDK debugging: https://langbot.app/docs/zh/develop/plugin-runtime.
-- API-key auth: `docs/API_KEY_AUTH.md`.
+- API-key auth: `dev-docs/API_KEY_AUTH.md`.
- Service API CLI: [`langbot-cli`](https://github.com/langbot-app/langbot-cli) (`lbctl`) manages running Workspaces; it is separate from the SDK's `lbp` CLI.
-- Box deep-dive notes: `docs/review/box-architecture.md` and related files.
+- Box deep-dive notes: `dev-docs/review/box-architecture.md` and related files.
- In-repo skills: `skills/` is the single source of truth for LangBot agent skills.
- SDK repo: `../langbot-plugin-sdk/` when changing shared entities, plugin APIs, action protocol, `lbp rt`, or `lbp box`.
@@ -105,7 +106,7 @@ Config keys to verify in `data/config.yaml` / `src/langbot/templates/config.yaml
- China-only adapters and configuration/field validation diagnostics do not require localization. An adapter also serving international users is not exempt merely because it supports a Chinese platform.
- Preserve raw provider/plugin diagnostics, tracebacks, protocol values, and machine-readable error/status codes. Translate LangBot's own category or explanation around them; do not translate arbitrary errors with substring replacement. Plugin-authored messages remain the plugin's localization responsibility.
- Keep changes small and maintainable. Reuse existing persistence and response boundaries; delete obsolete fields only after verifying they have no remaining readers, including compatibility paths.
-- When changing language behavior, verify catalog/placeholder parity, Workspace isolation and permissions, and Pipeline inheritance/custom overrides. Update affected configuration snapshots and API/MCP documentation. Implementation details and focused test locations: [Backend message language](docs/architecture/backend-i18n.md).
+- When changing language behavior, verify catalog/placeholder parity, Workspace isolation and permissions, and Pipeline inheritance/custom overrides. Update affected configuration snapshots and API/MCP documentation. Implementation details and focused test locations: [Backend message language](dev-docs/architecture/backend-i18n.md).
## Runtime Pitfalls
diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md
index 913fc982b..350968ea8 100644
--- a/ARCHITECTURE.md
+++ b/ARCHITECTURE.md
@@ -162,7 +162,7 @@ In this repo:
- `pkg/plugin/handler.py` exposes LangBot actions to the runtime and calls runtime actions for plugin operations.
- `pkg/provider/tools/loaders/plugin.py` exposes plugin Tool components to LLM runners.
- Pipeline handlers emit SDK events such as normal-message events and prompt-processing events.
-- [Certified plugin policy](docs/architecture/certified-plugins.md) defines Core's archive-fact, admission, and tenant-log-visibility boundary; the SDK remains responsible for certificate verification.
+- [Certified plugin policy](dev-docs/architecture/certified-plugins.md) defines Core's archive-fact, admission, and tenant-log-visibility boundary; the SDK remains responsible for certificate verification.
In `langbot-plugin-sdk`:
@@ -201,7 +201,7 @@ Box is the optional sandbox subsystem used by native execution tools, stdio MCP
In this repo:
- `pkg/box/service.py` is the application-facing facade for exec, sessions, managed processes, status, reconnects, quotas, generic mounts, and sandbox profiles.
-- [Outbox export failures](docs/BOX_OUTBOX_EXPORT.md) documents bounded reads, permission fallback, and cleanup after Runner acceptance.
+- [Outbox export failures](dev-docs/BOX_OUTBOX_EXPORT.md) documents bounded reads, permission fallback, and cleanup after Runner acceptance.
- `pkg/box/connector.py` connects to the Box Runtime over stdio, Windows subprocess+WebSocket, or remote WebSocket.
- `pkg/provider/tools/loaders/native.py` is the Core orchestration seam: the
Skill loader supplies generic read-only mounts to Box execution. `mcp_stdio.py`
@@ -345,3 +345,7 @@ When one of these changes, update the others if the behavior or contract changed
- Prefer small, explicit agent surfaces over exposing every internal API.
- Treat cross-repo contracts with the SDK as public interfaces.
- Test behavior at the narrowest useful layer first, then add integration/e2e coverage for runtime or platform changes.
+
+## Documentation repositories
+
+The public documentation site lives in `docs/` and is built with Node.js 24 and Fumapress. Internal design and review notes live in `dev-docs/`. The `langbot-app/langbot-docs` repository is a fast-forward subtree mirror for the landing site submodule and Context7. See `dev-docs/DOCS_MIGRATION.md` for publication and cutover details.
diff --git a/README.md b/README.md
index caf8a4a86..199ddbb8a 100644
--- a/README.md
+++ b/README.md
@@ -188,3 +188,5 @@ Thanks to all [contributors](https://github.com/langbot-app/LangBot/graphs/contr
+
+[Documentation source](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_CN.md b/README_CN.md
index 33b92645e..18a7d3426 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -212,3 +212,5 @@ LangBot **从设计上就对 Agent 友好** —— 你的编码 Agent(Claude C
If you're a code agent based on LLM, you should read [AGENTS.md](AGENTS.md) to understand the project structure and development process before you start any development.
-->
+
+[文档源码](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_ES.md b/README_ES.md
index d6749d5bb..f0fc684e9 100644
--- a/README_ES.md
+++ b/README_ES.md
@@ -186,3 +186,5 @@ Gracias a todos los [colaboradores](https://github.com/langbot-app/LangBot/graph
+
+[Código fuente de la documentación](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_FR.md b/README_FR.md
index 71cda2887..33c6bcc82 100644
--- a/README_FR.md
+++ b/README_FR.md
@@ -186,3 +186,5 @@ Merci à tous les [contributeurs](https://github.com/langbot-app/LangBot/graphs/
+
+[Sources de la documentation](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_JP.md b/README_JP.md
index d410e6efa..a76774e67 100644
--- a/README_JP.md
+++ b/README_JP.md
@@ -186,3 +186,5 @@ LangBot をより良くするために貢献してくださったすべての[
+
+[ドキュメントのソース](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_KO.md b/README_KO.md
index df06da4ab..bcc9c32f7 100644
--- a/README_KO.md
+++ b/README_KO.md
@@ -186,3 +186,5 @@ LangBot을 더 나은 프로젝트로 만들어 주신 모든 [기여자](https:
+
+[문서 소스](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_RU.md b/README_RU.md
index ca65b6556..a8fd8e65c 100644
--- a/README_RU.md
+++ b/README_RU.md
@@ -186,3 +186,5 @@ LangBot **дружелюбен к агентам по своей архитек
+
+[Исходники документации](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_TW.md b/README_TW.md
index 36d3c765a..0b9fc1ae6 100644
--- a/README_TW.md
+++ b/README_TW.md
@@ -204,3 +204,5 @@ LangBot **從設計上就對 Agent 友善** —— 你的編碼 Agent(Claude C
+
+[文件原始碼](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/README_VI.md b/README_VI.md
index 2a412d992..60f5354cc 100644
--- a/README_VI.md
+++ b/README_VI.md
@@ -186,3 +186,5 @@ Cảm ơn tất cả [người đóng góp](https://github.com/langbot-app/LangB
+
+[Mã nguồn tài liệu](https://github.com/langbot-app/LangBot/tree/main/docs) · [langbot-docs mirror](https://github.com/langbot-app/langbot-docs)
diff --git a/docs/API_KEY_AUTH.md b/dev-docs/API_KEY_AUTH.md
similarity index 100%
rename from docs/API_KEY_AUTH.md
rename to dev-docs/API_KEY_AUTH.md
diff --git a/docs/BOX_OUTBOX_EXPORT.md b/dev-docs/BOX_OUTBOX_EXPORT.md
similarity index 100%
rename from docs/BOX_OUTBOX_EXPORT.md
rename to dev-docs/BOX_OUTBOX_EXPORT.md
diff --git a/docs/CODEX_SUBSCRIPTION.md b/dev-docs/CODEX_SUBSCRIPTION.md
similarity index 100%
rename from docs/CODEX_SUBSCRIPTION.md
rename to dev-docs/CODEX_SUBSCRIPTION.md
diff --git a/docs/DEPENDENCY_CONTRACT_TESTS.md b/dev-docs/DEPENDENCY_CONTRACT_TESTS.md
similarity index 100%
rename from docs/DEPENDENCY_CONTRACT_TESTS.md
rename to dev-docs/DEPENDENCY_CONTRACT_TESTS.md
diff --git a/dev-docs/DOCS_MIGRATION.md b/dev-docs/DOCS_MIGRATION.md
new file mode 100644
index 000000000..1f361328e
--- /dev/null
+++ b/dev-docs/DOCS_MIGRATION.md
@@ -0,0 +1,61 @@
+# Documentation subtree and publication
+
+Public docs live in `LangBot/docs/`. The former internal `docs/` directory is
+`dev-docs/` (27 top-level entries, 87 tracked files at migration). Do not merge
+this migration using GitHub squash or rebase: use a merge commit to retain the
+subtree parent and original signed commits. Imported history is reachable through
+the subtree merge's second parent; `git log --follow docs/` or
+`git log ` exposes original authors. A plain path-limited log
+need not show pre-import paths.
+
+## Local checks
+
+With Node.js 24, run `npm ci`, `npm run typecheck`, `npm test`, and `npm run build`
+inside `docs/`. Output is `docs/dist/`. The site remains mounted at `/docs/` with
+canonical URL `https://langbot.app/docs`.
+
+## Cutover after the PR is reviewed and merged
+
+1. Pause the legacy `sync-blog-articles.yml` workflow in `langbot-app/langbot-docs`
+ and let any running writer finish. Freeze direct commits to that repository.
+ Pause its legacy Wiki and landing sync workflows too, avoiding duplicate
+ publishers while switching ownership. Do not push disabling commits directly
+ to the mirror.
+2. Fetch mirror `main` and confirm it is an ancestor of the new subtree split.
+ If it advanced since import, integrate it with an **unsquashed**
+ `git subtree pull --prefix=docs main` through another reviewed PR
+ before cutover; reapply the inert mirror workflow files if necessary. Never
+ force-push or rewrite the mirror history.
+3. Verify `LANGBOT_WIKI_PUSH_TOKEN` is configured in LangBot with existing access
+ to the docs mirror, LangBot Wiki, landing upstream and production fork. The
+ blog job additionally needs to push to LangBot main and trigger workflows.
+ Repository workflow-file updates must be permitted by that token. Do not
+ weaken branch protection to accommodate this migration; use a separately
+ reviewed publication approach if the current token cannot perform the push.
+4. Set LangBot repository variable `DOCS_MIRROR_ENABLED=true`. Dispatch
+ `sync-landing-submodule.yml` on main. It fetches full main history, runs
+ `git subtree split --prefix=docs`, verifies the current mirror head is an
+ ancestor, pushes without force, then advances only landing's `docs` gitlink.
+ The first split replaces legacy mirror workflows with inert manual stubs.
+5. Dispatch `sync-github-wiki.yml` and `sync-blog-articles.yml` in LangBot.
+ The blog job now commits only docs article paths to LangBot main using the
+ dedicated token, so its push triggers the mirror and Wiki workflows.
+6. Confirm the `docs` gitlink in `langbot-app/langbot-landing-page`, then confirm
+ production fork `RockChinQ/LangBot-LandingPage-Vue` matches upstream. This is
+ the actual fork in the existing sync script (not the similarly named fork
+ mentioned in the original migration proposal). Observe Cloudflare Pages
+ deployment and check `https://langbot.app/docs/`, localized pages, assets,
+ sitemap and canonical URLs. Verify Wiki pages after publication.
+
+The four root workflows own publication and validation. Nested workflow stubs
+are intentionally inert when split into the mirror. No direct writes should be
+made to the mirror after cutover; all edits belong in LangBot `docs/`.
+
+`docs/context7.json` continues to identify `langbot-app/langbot-docs` because that
+repository remains available with the same tree layout and original history.
+Verify Context7 ingestion after the first mirror update; no library re-registration
+is needed merely to relocate the authoring source.
+
+Disable `DOCS_MIRROR_ENABLED` to pause publishers if cutover fails. A failed
+mirror ancestry check must be investigated and reconciled, never bypassed by a
+force push. Do not restore direct mirror writers while LangBot is authoritative.
diff --git a/docs/HTTP_BOT_ADAPTER_DESIGN.md b/dev-docs/HTTP_BOT_ADAPTER_DESIGN.md
similarity index 98%
rename from docs/HTTP_BOT_ADAPTER_DESIGN.md
rename to dev-docs/HTTP_BOT_ADAPTER_DESIGN.md
index d0826f2b5..9ef2cde25 100644
--- a/docs/HTTP_BOT_ADAPTER_DESIGN.md
+++ b/dev-docs/HTTP_BOT_ADAPTER_DESIGN.md
@@ -15,8 +15,8 @@
> - `src/langbot/pkg/platform/sources/http_bot.py` — `HttpBotAdapter`
> - `src/langbot/pkg/platform/sources/http_bot_signing.py` — HMAC helpers
> - `src/langbot/pkg/platform/sources/http_bot.svg` — icon
-> - `docs/platforms/http-bot.md` — integration guide
-> - `docs/http-bot-openapi.json` — machine-readable contract
+> - `dev-docs/platforms/http-bot.md` — integration guide
+> - `dev-docs/http-bot-openapi.json` — machine-readable contract
> - `examples/http-bot/` — Python + TypeScript reference clients
>
> **Final decisions (resolving the original open questions):**
@@ -489,13 +489,13 @@ time so replies always have a destination even if config later changes).
The whole point of a standalone adapter is that **integrating is pleasant**. v1
ships:
-1. **`docs/platforms/http-bot.md`** — task-oriented integration guide:
+1. **`dev-docs/platforms/http-bot.md`** — task-oriented integration guide:
create the bot → copy inbound URL → set secret → stand up a callback
endpoint → send first message → handle 1→M.
2. **Copy-paste curl** for the first message (with a working signing one-liner).
3. **Reference clients** (≤50 LOC each) in `examples/http-bot/`:
`client.py` (push + a Flask/Quart callback receiver) and `client.ts`.
-4. **OpenAPI fragment** `docs/http-bot-openapi.json` describing inbound +
+4. **OpenAPI fragment** `dev-docs/http-bot-openapi.json` describing inbound +
callback shapes, so integrators can codegen.
5. **Local echo recipe**: a one-command callback server that prints every
reply, so a developer sees N→1 and 1→M working in under five minutes.
@@ -542,7 +542,7 @@ curl -sS -X POST "$BOT" \
| 2 | `HttpBotAdapter` (inbound verify, event build, outbound queue) | `platform/sources/http_bot.py` |
| 3 | Signing helper module (shared) | `platform/sources/` or `utils/` |
| 4 | i18n strings (en/zh/ja) | adapter yaml + web locale |
-| 5 | Integration docs `docs/platforms/http-bot.md` | `docs/` |
+| 5 | Integration docs `dev-docs/platforms/http-bot.md` | `docs/` |
| 6 | OpenAPI fragment + reference clients | `docs/`, `examples/http-bot/` |
| 7 | Tests: signature verify, N→1 aggregation, 1→M ordering, retry | `tests/` |
| 8 | (opt) SSRF guard for callback_url | adapter |
diff --git a/docs/LLM_LATENCY_BENCHMARK.md b/dev-docs/LLM_LATENCY_BENCHMARK.md
similarity index 100%
rename from docs/LLM_LATENCY_BENCHMARK.md
rename to dev-docs/LLM_LATENCY_BENCHMARK.md
diff --git a/docs/LLM_REQUEST_E2E.md b/dev-docs/LLM_REQUEST_E2E.md
similarity index 100%
rename from docs/LLM_REQUEST_E2E.md
rename to dev-docs/LLM_REQUEST_E2E.md
diff --git a/docs/LLM_REQUEST_POLICY.md b/dev-docs/LLM_REQUEST_POLICY.md
similarity index 100%
rename from docs/LLM_REQUEST_POLICY.md
rename to dev-docs/LLM_REQUEST_POLICY.md
diff --git a/docs/MIGRATION_SUMMARY.md b/dev-docs/MIGRATION_SUMMARY.md
similarity index 100%
rename from docs/MIGRATION_SUMMARY.md
rename to dev-docs/MIGRATION_SUMMARY.md
diff --git a/docs/POSTGRES_CONTRACT_TESTS.md b/dev-docs/POSTGRES_CONTRACT_TESTS.md
similarity index 100%
rename from docs/POSTGRES_CONTRACT_TESTS.md
rename to dev-docs/POSTGRES_CONTRACT_TESTS.md
diff --git a/docs/PYPI_INSTALLATION.md b/dev-docs/PYPI_INSTALLATION.md
similarity index 100%
rename from docs/PYPI_INSTALLATION.md
rename to dev-docs/PYPI_INSTALLATION.md
diff --git a/docs/SEEKDB_INTEGRATION.md b/dev-docs/SEEKDB_INTEGRATION.md
similarity index 100%
rename from docs/SEEKDB_INTEGRATION.md
rename to dev-docs/SEEKDB_INTEGRATION.md
diff --git a/docs/TESTING_SUMMARY.md b/dev-docs/TESTING_SUMMARY.md
similarity index 100%
rename from docs/TESTING_SUMMARY.md
rename to dev-docs/TESTING_SUMMARY.md
diff --git a/docs/VALKEY_SEARCH_INTEGRATION.md b/dev-docs/VALKEY_SEARCH_INTEGRATION.md
similarity index 100%
rename from docs/VALKEY_SEARCH_INTEGRATION.md
rename to dev-docs/VALKEY_SEARCH_INTEGRATION.md
diff --git a/docs/WEBSOCKET_README.md b/dev-docs/WEBSOCKET_README.md
similarity index 100%
rename from docs/WEBSOCKET_README.md
rename to dev-docs/WEBSOCKET_README.md
diff --git a/docs/agent-runner-pluginization/AGENT_CONTEXT_PROTOCOL.md b/dev-docs/agent-runner-pluginization/AGENT_CONTEXT_PROTOCOL.md
similarity index 100%
rename from docs/agent-runner-pluginization/AGENT_CONTEXT_PROTOCOL.md
rename to dev-docs/agent-runner-pluginization/AGENT_CONTEXT_PROTOCOL.md
diff --git a/docs/agent-runner-pluginization/AGENT_RUNNER_QA_GUIDE.md b/dev-docs/agent-runner-pluginization/AGENT_RUNNER_QA_GUIDE.md
similarity index 100%
rename from docs/agent-runner-pluginization/AGENT_RUNNER_QA_GUIDE.md
rename to dev-docs/agent-runner-pluginization/AGENT_RUNNER_QA_GUIDE.md
diff --git a/docs/agent-runner-pluginization/EVENT_BASED_AGENT.md b/dev-docs/agent-runner-pluginization/EVENT_BASED_AGENT.md
similarity index 100%
rename from docs/agent-runner-pluginization/EVENT_BASED_AGENT.md
rename to dev-docs/agent-runner-pluginization/EVENT_BASED_AGENT.md
diff --git a/docs/agent-runner-pluginization/EVENT_DEBUG_E2E_2026-09-05.md b/dev-docs/agent-runner-pluginization/EVENT_DEBUG_E2E_2026-09-05.md
similarity index 100%
rename from docs/agent-runner-pluginization/EVENT_DEBUG_E2E_2026-09-05.md
rename to dev-docs/agent-runner-pluginization/EVENT_DEBUG_E2E_2026-09-05.md
diff --git a/docs/agent-runner-pluginization/EVENT_DEBUG_FULL_QA_2026-09-05.md b/dev-docs/agent-runner-pluginization/EVENT_DEBUG_FULL_QA_2026-09-05.md
similarity index 100%
rename from docs/agent-runner-pluginization/EVENT_DEBUG_FULL_QA_2026-09-05.md
rename to dev-docs/agent-runner-pluginization/EVENT_DEBUG_FULL_QA_2026-09-05.md
diff --git a/docs/agent-runner-pluginization/EXTENSION_SCOPE_MATRIX.md b/dev-docs/agent-runner-pluginization/EXTENSION_SCOPE_MATRIX.md
similarity index 100%
rename from docs/agent-runner-pluginization/EXTENSION_SCOPE_MATRIX.md
rename to dev-docs/agent-runner-pluginization/EXTENSION_SCOPE_MATRIX.md
diff --git a/docs/agent-runner-pluginization/HOST_SDK_INFRASTRUCTURE.md b/dev-docs/agent-runner-pluginization/HOST_SDK_INFRASTRUCTURE.md
similarity index 100%
rename from docs/agent-runner-pluginization/HOST_SDK_INFRASTRUCTURE.md
rename to dev-docs/agent-runner-pluginization/HOST_SDK_INFRASTRUCTURE.md
diff --git a/docs/agent-runner-pluginization/OFFICIAL_RUNNER_PLUGINS.md b/dev-docs/agent-runner-pluginization/OFFICIAL_RUNNER_PLUGINS.md
similarity index 100%
rename from docs/agent-runner-pluginization/OFFICIAL_RUNNER_PLUGINS.md
rename to dev-docs/agent-runner-pluginization/OFFICIAL_RUNNER_PLUGINS.md
diff --git a/docs/agent-runner-pluginization/PLATFORM_ACTION_TOOLS.md b/dev-docs/agent-runner-pluginization/PLATFORM_ACTION_TOOLS.md
similarity index 100%
rename from docs/agent-runner-pluginization/PLATFORM_ACTION_TOOLS.md
rename to dev-docs/agent-runner-pluginization/PLATFORM_ACTION_TOOLS.md
diff --git a/docs/agent-runner-pluginization/PROTOCOL_V1.md b/dev-docs/agent-runner-pluginization/PROTOCOL_V1.md
similarity index 100%
rename from docs/agent-runner-pluginization/PROTOCOL_V1.md
rename to dev-docs/agent-runner-pluginization/PROTOCOL_V1.md
diff --git a/docs/agent-runner-pluginization/README.md b/dev-docs/agent-runner-pluginization/README.md
similarity index 100%
rename from docs/agent-runner-pluginization/README.md
rename to dev-docs/agent-runner-pluginization/README.md
diff --git a/docs/agent-runner-pluginization/RUNTIME_CONTROL_PLANE_V2.md b/dev-docs/agent-runner-pluginization/RUNTIME_CONTROL_PLANE_V2.md
similarity index 100%
rename from docs/agent-runner-pluginization/RUNTIME_CONTROL_PLANE_V2.md
rename to dev-docs/agent-runner-pluginization/RUNTIME_CONTROL_PLANE_V2.md
diff --git a/docs/agent-runner-pluginization/RUN_STEERING_AND_CHECKPOINT.md b/dev-docs/agent-runner-pluginization/RUN_STEERING_AND_CHECKPOINT.md
similarity index 100%
rename from docs/agent-runner-pluginization/RUN_STEERING_AND_CHECKPOINT.md
rename to dev-docs/agent-runner-pluginization/RUN_STEERING_AND_CHECKPOINT.md
diff --git a/docs/agent-runner-pluginization/SECURITY_HARDENING.md b/dev-docs/agent-runner-pluginization/SECURITY_HARDENING.md
similarity index 100%
rename from docs/agent-runner-pluginization/SECURITY_HARDENING.md
rename to dev-docs/agent-runner-pluginization/SECURITY_HARDENING.md
diff --git a/docs/agent-runner-pluginization/STATUS.md b/dev-docs/agent-runner-pluginization/STATUS.md
similarity index 97%
rename from docs/agent-runner-pluginization/STATUS.md
rename to dev-docs/agent-runner-pluginization/STATUS.md
index 4d6686e2b..70acf22ae 100644
--- a/docs/agent-runner-pluginization/STATUS.md
+++ b/dev-docs/agent-runner-pluginization/STATUS.md
@@ -1,6 +1,6 @@
# Runner Pluginization Status
-本文档是 `docs/agent-runner-pluginization/` 的状态事实源。协议 schema 仍以 [PROTOCOL_V1.md](./PROTOCOL_V1.md) 为准;测试步骤以 [RUNNER_QA_GUIDE.md](./RUNNER_QA_GUIDE.md) 为准;安全发布门槛以 [SECURITY_HARDENING.md](./SECURITY_HARDENING.md) 为准。
+本文档是 `dev-docs/agent-runner-pluginization/` 的状态事实源。协议 schema 仍以 [PROTOCOL_V1.md](./PROTOCOL_V1.md) 为准;测试步骤以 [RUNNER_QA_GUIDE.md](./RUNNER_QA_GUIDE.md) 为准;安全发布门槛以 [SECURITY_HARDENING.md](./SECURITY_HARDENING.md) 为准。
状态快照日期:2026-09-05。代码基线为 LangBot `dev/4.11.x` / `a4d36aa2d` 和 SDK `dev/4.11.x` / `f1da058`;本文是本地检视快照,不代表远端最新状态或正式发布批准。
diff --git a/docs/agent-runner-pluginization/eba-productization-release.md b/dev-docs/agent-runner-pluginization/eba-productization-release.md
similarity index 100%
rename from docs/agent-runner-pluginization/eba-productization-release.md
rename to dev-docs/agent-runner-pluginization/eba-productization-release.md
diff --git a/docs/architecture/backend-i18n.md b/dev-docs/architecture/backend-i18n.md
similarity index 100%
rename from docs/architecture/backend-i18n.md
rename to dev-docs/architecture/backend-i18n.md
diff --git a/docs/architecture/certified-plugins.md b/dev-docs/architecture/certified-plugins.md
similarity index 100%
rename from docs/architecture/certified-plugins.md
rename to dev-docs/architecture/certified-plugins.md
diff --git a/docs/architecture/cloud-plan-revisions.md b/dev-docs/architecture/cloud-plan-revisions.md
similarity index 100%
rename from docs/architecture/cloud-plan-revisions.md
rename to dev-docs/architecture/cloud-plan-revisions.md
diff --git a/docs/assets/pr-2336/after.png b/dev-docs/assets/pr-2336/after.png
similarity index 100%
rename from docs/assets/pr-2336/after.png
rename to dev-docs/assets/pr-2336/after.png
diff --git a/docs/assets/pr-2336/before.png b/dev-docs/assets/pr-2336/before.png
similarity index 100%
rename from docs/assets/pr-2336/before.png
rename to dev-docs/assets/pr-2336/before.png
diff --git a/docs/assets/pr-2363/oauth-required-state.png b/dev-docs/assets/pr-2363/oauth-required-state.png
similarity index 100%
rename from docs/assets/pr-2363/oauth-required-state.png
rename to dev-docs/assets/pr-2363/oauth-required-state.png
diff --git a/docs/event-based-agents/00-overview.md b/dev-docs/event-based-agents/00-overview.md
similarity index 100%
rename from docs/event-based-agents/00-overview.md
rename to dev-docs/event-based-agents/00-overview.md
diff --git a/docs/event-based-agents/01-event-system.md b/dev-docs/event-based-agents/01-event-system.md
similarity index 100%
rename from docs/event-based-agents/01-event-system.md
rename to dev-docs/event-based-agents/01-event-system.md
diff --git a/docs/event-based-agents/02-platform-api.md b/dev-docs/event-based-agents/02-platform-api.md
similarity index 100%
rename from docs/event-based-agents/02-platform-api.md
rename to dev-docs/event-based-agents/02-platform-api.md
diff --git a/docs/event-based-agents/03-adapter-structure.md b/dev-docs/event-based-agents/03-adapter-structure.md
similarity index 100%
rename from docs/event-based-agents/03-adapter-structure.md
rename to dev-docs/event-based-agents/03-adapter-structure.md
diff --git a/docs/event-based-agents/04-event-routing.md b/dev-docs/event-based-agents/04-event-routing.md
similarity index 100%
rename from docs/event-based-agents/04-event-routing.md
rename to dev-docs/event-based-agents/04-event-routing.md
diff --git a/docs/event-based-agents/05-plugin-sdk.md b/dev-docs/event-based-agents/05-plugin-sdk.md
similarity index 100%
rename from docs/event-based-agents/05-plugin-sdk.md
rename to dev-docs/event-based-agents/05-plugin-sdk.md
diff --git a/docs/event-based-agents/06-migration-plan.md b/dev-docs/event-based-agents/06-migration-plan.md
similarity index 100%
rename from docs/event-based-agents/06-migration-plan.md
rename to dev-docs/event-based-agents/06-migration-plan.md
diff --git a/docs/event-based-agents/07-agent-orchestration.md b/dev-docs/event-based-agents/07-agent-orchestration.md
similarity index 100%
rename from docs/event-based-agents/07-agent-orchestration.md
rename to dev-docs/event-based-agents/07-agent-orchestration.md
diff --git a/docs/event-based-agents/08-agent-page-and-event-orchestration.md b/dev-docs/event-based-agents/08-agent-page-and-event-orchestration.md
similarity index 100%
rename from docs/event-based-agents/08-agent-page-and-event-orchestration.md
rename to dev-docs/event-based-agents/08-agent-page-and-event-orchestration.md
diff --git a/docs/event-based-agents/09-event-processors.md b/dev-docs/event-based-agents/09-event-processors.md
similarity index 100%
rename from docs/event-based-agents/09-event-processors.md
rename to dev-docs/event-based-agents/09-event-processors.md
diff --git a/docs/event-based-agents/adapters/00-index.md b/dev-docs/event-based-agents/adapters/00-index.md
similarity index 100%
rename from docs/event-based-agents/adapters/00-index.md
rename to dev-docs/event-based-agents/adapters/00-index.md
diff --git a/docs/event-based-agents/adapters/acceptance-checklist.md b/dev-docs/event-based-agents/adapters/acceptance-checklist.md
similarity index 100%
rename from docs/event-based-agents/adapters/acceptance-checklist.md
rename to dev-docs/event-based-agents/adapters/acceptance-checklist.md
diff --git a/docs/event-based-agents/adapters/acceptance-report.md b/dev-docs/event-based-agents/adapters/acceptance-report.md
similarity index 100%
rename from docs/event-based-agents/adapters/acceptance-report.md
rename to dev-docs/event-based-agents/adapters/acceptance-report.md
diff --git a/docs/event-based-agents/adapters/aiocqhttp.md b/dev-docs/event-based-agents/adapters/aiocqhttp.md
similarity index 100%
rename from docs/event-based-agents/adapters/aiocqhttp.md
rename to dev-docs/event-based-agents/adapters/aiocqhttp.md
diff --git a/docs/event-based-agents/adapters/dingtalk.md b/dev-docs/event-based-agents/adapters/dingtalk.md
similarity index 100%
rename from docs/event-based-agents/adapters/dingtalk.md
rename to dev-docs/event-based-agents/adapters/dingtalk.md
diff --git a/docs/event-based-agents/adapters/discord.md b/dev-docs/event-based-agents/adapters/discord.md
similarity index 100%
rename from docs/event-based-agents/adapters/discord.md
rename to dev-docs/event-based-agents/adapters/discord.md
diff --git a/docs/event-based-agents/adapters/kook.md b/dev-docs/event-based-agents/adapters/kook.md
similarity index 100%
rename from docs/event-based-agents/adapters/kook.md
rename to dev-docs/event-based-agents/adapters/kook.md
diff --git a/docs/event-based-agents/adapters/lark.md b/dev-docs/event-based-agents/adapters/lark.md
similarity index 100%
rename from docs/event-based-agents/adapters/lark.md
rename to dev-docs/event-based-agents/adapters/lark.md
diff --git a/docs/event-based-agents/adapters/officialaccount.md b/dev-docs/event-based-agents/adapters/officialaccount.md
similarity index 100%
rename from docs/event-based-agents/adapters/officialaccount.md
rename to dev-docs/event-based-agents/adapters/officialaccount.md
diff --git a/docs/event-based-agents/adapters/qqofficial.md b/dev-docs/event-based-agents/adapters/qqofficial.md
similarity index 100%
rename from docs/event-based-agents/adapters/qqofficial.md
rename to dev-docs/event-based-agents/adapters/qqofficial.md
diff --git a/docs/event-based-agents/adapters/slack.md b/dev-docs/event-based-agents/adapters/slack.md
similarity index 100%
rename from docs/event-based-agents/adapters/slack.md
rename to dev-docs/event-based-agents/adapters/slack.md
diff --git a/docs/event-based-agents/adapters/telegram.md b/dev-docs/event-based-agents/adapters/telegram.md
similarity index 100%
rename from docs/event-based-agents/adapters/telegram.md
rename to dev-docs/event-based-agents/adapters/telegram.md
diff --git a/docs/event-based-agents/adapters/wecom.md b/dev-docs/event-based-agents/adapters/wecom.md
similarity index 100%
rename from docs/event-based-agents/adapters/wecom.md
rename to dev-docs/event-based-agents/adapters/wecom.md
diff --git a/docs/event-based-agents/adapters/wecombot.md b/dev-docs/event-based-agents/adapters/wecombot.md
similarity index 100%
rename from docs/event-based-agents/adapters/wecombot.md
rename to dev-docs/event-based-agents/adapters/wecombot.md
diff --git a/docs/event-based-agents/adapters/wecomcs.md b/dev-docs/event-based-agents/adapters/wecomcs.md
similarity index 100%
rename from docs/event-based-agents/adapters/wecomcs.md
rename to dev-docs/event-based-agents/adapters/wecomcs.md
diff --git a/docs/http-bot-openapi.json b/dev-docs/http-bot-openapi.json
similarity index 100%
rename from docs/http-bot-openapi.json
rename to dev-docs/http-bot-openapi.json
diff --git a/docs/llm-latency-2026-10-15.json b/dev-docs/llm-latency-2026-10-15.json
similarity index 100%
rename from docs/llm-latency-2026-10-15.json
rename to dev-docs/llm-latency-2026-10-15.json
diff --git a/docs/multi-tenant/DATABASE_MIGRATION_GUIDE.md b/dev-docs/multi-tenant/DATABASE_MIGRATION_GUIDE.md
similarity index 100%
rename from docs/multi-tenant/DATABASE_MIGRATION_GUIDE.md
rename to dev-docs/multi-tenant/DATABASE_MIGRATION_GUIDE.md
diff --git a/docs/multi-tenant/cloud-runtime-soak-gate.md b/dev-docs/multi-tenant/cloud-runtime-soak-gate.md
similarity index 100%
rename from docs/multi-tenant/cloud-runtime-soak-gate.md
rename to dev-docs/multi-tenant/cloud-runtime-soak-gate.md
diff --git a/docs/multi-tenant/cloud-v2-pending-verification.md b/dev-docs/multi-tenant/cloud-v2-pending-verification.md
similarity index 100%
rename from docs/multi-tenant/cloud-v2-pending-verification.md
rename to dev-docs/multi-tenant/cloud-v2-pending-verification.md
diff --git a/docs/multi-tenant/implementation-checklist.md b/dev-docs/multi-tenant/implementation-checklist.md
similarity index 100%
rename from docs/multi-tenant/implementation-checklist.md
rename to dev-docs/multi-tenant/implementation-checklist.md
diff --git a/docs/multi-tenant/implementation-decisions.md b/dev-docs/multi-tenant/implementation-decisions.md
similarity index 100%
rename from docs/multi-tenant/implementation-decisions.md
rename to dev-docs/multi-tenant/implementation-decisions.md
diff --git a/docs/multi-tenant/pending-architecture-decisions.md b/dev-docs/multi-tenant/pending-architecture-decisions.md
similarity index 100%
rename from docs/multi-tenant/pending-architecture-decisions.md
rename to dev-docs/multi-tenant/pending-architecture-decisions.md
diff --git a/docs/multi-tenant/runtime-resource-audit-2026-07-28.md b/dev-docs/multi-tenant/runtime-resource-audit-2026-07-28.md
similarity index 100%
rename from docs/multi-tenant/runtime-resource-audit-2026-07-28.md
rename to dev-docs/multi-tenant/runtime-resource-audit-2026-07-28.md
diff --git a/docs/multi-tenant/verification-report.md b/dev-docs/multi-tenant/verification-report.md
similarity index 100%
rename from docs/multi-tenant/verification-report.md
rename to dev-docs/multi-tenant/verification-report.md
diff --git a/docs/multi-tenant/workspace-multi-user-architecture.md b/dev-docs/multi-tenant/workspace-multi-user-architecture.md
similarity index 100%
rename from docs/multi-tenant/workspace-multi-user-architecture.md
rename to dev-docs/multi-tenant/workspace-multi-user-architecture.md
diff --git a/docs/pipeline-migration-config-map.zh-CN.md b/dev-docs/pipeline-migration-config-map.zh-CN.md
similarity index 100%
rename from docs/pipeline-migration-config-map.zh-CN.md
rename to dev-docs/pipeline-migration-config-map.zh-CN.md
diff --git a/docs/platforms/http-bot.md b/dev-docs/platforms/http-bot.md
similarity index 99%
rename from docs/platforms/http-bot.md
rename to dev-docs/platforms/http-bot.md
index 94117bca2..aa07e162f 100644
--- a/docs/platforms/http-bot.md
+++ b/dev-docs/platforms/http-bot.md
@@ -248,7 +248,7 @@ Watch Terminal 1 print each reply part (`[part ]` / `[FINAL]`) with its
sequence number — that's 1→M working, signatures verified.
A machine-readable contract is in
-[`docs/http-bot-openapi.json`](../http-bot-openapi.json).
+[`dev-docs/http-bot-openapi.json`](../http-bot-openapi.json).
---
diff --git a/docs/qa-message-routing-acceptance.md b/dev-docs/qa-message-routing-acceptance.md
similarity index 100%
rename from docs/qa-message-routing-acceptance.md
rename to dev-docs/qa-message-routing-acceptance.md
diff --git a/docs/review/box-architecture.md b/dev-docs/review/box-architecture.md
similarity index 100%
rename from docs/review/box-architecture.md
rename to dev-docs/review/box-architecture.md
diff --git a/docs/review/box-issues.md b/dev-docs/review/box-issues.md
similarity index 100%
rename from docs/review/box-issues.md
rename to dev-docs/review/box-issues.md
diff --git a/docs/review/box-session-scope.md b/dev-docs/review/box-session-scope.md
similarity index 100%
rename from docs/review/box-session-scope.md
rename to dev-docs/review/box-session-scope.md
diff --git a/docs/review/box-test-coverage.md b/dev-docs/review/box-test-coverage.md
similarity index 100%
rename from docs/review/box-test-coverage.md
rename to dev-docs/review/box-test-coverage.md
diff --git a/docs/review/box-tob-analysis.md b/dev-docs/review/box-tob-analysis.md
similarity index 100%
rename from docs/review/box-tob-analysis.md
rename to dev-docs/review/box-tob-analysis.md
diff --git a/docs/review/box-vs-plugin-runtime.md b/dev-docs/review/box-vs-plugin-runtime.md
similarity index 100%
rename from docs/review/box-vs-plugin-runtime.md
rename to dev-docs/review/box-vs-plugin-runtime.md
diff --git a/docs/review/mcp-resources-pr-2215-review.md b/dev-docs/review/mcp-resources-pr-2215-review.md
similarity index 100%
rename from docs/review/mcp-resources-pr-2215-review.md
rename to dev-docs/review/mcp-resources-pr-2215-review.md
diff --git a/docs/review/model-reasoning-control-design.md b/dev-docs/review/model-reasoning-control-design.md
similarity index 100%
rename from docs/review/model-reasoning-control-design.md
rename to dev-docs/review/model-reasoning-control-design.md
diff --git a/docs/review/omni-mainline-sync-2026-09-10.md b/dev-docs/review/omni-mainline-sync-2026-09-10.md
similarity index 100%
rename from docs/review/omni-mainline-sync-2026-09-10.md
rename to dev-docs/review/omni-mainline-sync-2026-09-10.md
diff --git a/docs/review/telegram-4.11-acceptance.md b/dev-docs/review/telegram-4.11-acceptance.md
similarity index 100%
rename from docs/review/telegram-4.11-acceptance.md
rename to dev-docs/review/telegram-4.11-acceptance.md
diff --git a/docs/service-api-openapi.json b/dev-docs/service-api-openapi.json
similarity index 100%
rename from docs/service-api-openapi.json
rename to dev-docs/service-api-openapi.json
diff --git a/src/langbot/pkg/platform/sources/http_bot.py b/src/langbot/pkg/platform/sources/http_bot.py
index c7c7652a6..72c99d1c8 100644
--- a/src/langbot/pkg/platform/sources/http_bot.py
+++ b/src/langbot/pkg/platform/sources/http_bot.py
@@ -22,7 +22,7 @@ Design notes:
(``pkg/api/http/controller/groups/webhooks.py``) calls
``handle_unified_webhook`` on this adapter.
-See docs/platforms/http-bot.md for the full integration guide.
+See dev-docs/platforms/http-bot.md for the full integration guide.
"""
from __future__ import annotations
diff --git a/src/langbot/pkg/platform/sources/http_bot_signing.py b/src/langbot/pkg/platform/sources/http_bot_signing.py
index 0578721c4..035d34ee1 100644
--- a/src/langbot/pkg/platform/sources/http_bot_signing.py
+++ b/src/langbot/pkg/platform/sources/http_bot_signing.py
@@ -7,7 +7,7 @@ A dependency-free, symmetric HMAC-SHA256 scheme used in *both* directions:
Inbound requests are signed by the caller and verified here; outbound
callbacks are signed here and verified by the caller. The scheme is trivial to
-reproduce in any language (see docs/platforms/http-bot.md for JS/curl).
+reproduce in any language (see dev-docs/platforms/http-bot.md for JS/curl).
"""
from __future__ import annotations
diff --git a/src/langbot/pkg/vector/vdbs/valkey_search.py b/src/langbot/pkg/vector/vdbs/valkey_search.py
index dd50e4189..b1f9699f8 100644
--- a/src/langbot/pkg/vector/vdbs/valkey_search.py
+++ b/src/langbot/pkg/vector/vdbs/valkey_search.py
@@ -493,7 +493,7 @@ class ValkeySearchVectorDatabase(VectorDatabase):
self.ap.logger.warning(
'Valkey Search backend does not honor vector_weight: hybrid search uses '
'filter-then-KNN without weighted score fusion. The vector_weight value '
- 'is ignored. See docs/VALKEY_SEARCH_INTEGRATION.md.'
+ 'is ignored. See dev-docs/VALKEY_SEARCH_INTEGRATION.md.'
)
self._vector_weight_warned = True
diff --git a/tests/README.md b/tests/README.md
index f3fd35f44..4f5205313 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -178,7 +178,7 @@ The test suite uses a centralized fixture system that provides:
3. **Coverage**: Tests cover happy paths, edge cases, and error conditions
4. **Extensibility**: Easy to add new tests by reusing existing fixtures
-See [provisioned dependency contracts](../docs/DEPENDENCY_CONTRACT_TESTS.md) for
+See [provisioned dependency contracts](../dev-docs/DEPENDENCY_CONTRACT_TESTS.md) for
the real compiled CLI, pinned official plugin identity helpers, and embedded
SeekDB CI jobs, including local prerequisites and verification boundaries.
@@ -315,7 +315,7 @@ Note: PostgreSQL tests are **not** included in fast integration gate because the
A separate **PostgreSQL Contract Tests** job provisions a disposable database for
pipeline admission, RAG recovery, migration convergence, and timestamp/lease contracts.
-See [the PostgreSQL contract guide](../docs/POSTGRES_CONTRACT_TESTS.md) for scope,
+See [the PostgreSQL contract guide](../dev-docs/POSTGRES_CONTRACT_TESTS.md) for scope,
local commands, and remaining optional prerequisites.
CI workflow `.github/workflows/test-migrations.yml` runs: