github Python analyzed 9bbf912

cpaumelle/docplane

github

A control plane for docs: pages live in PostgreSQL, published through an API — MkDocs site, version history, and MCP tools for AI agents included.

maintainer
cpaumelle
licence
first seen
2026-07-15
last seen
2026-09-17
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 23 tools
transport streamable-http · http counts 23 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • archive_doc
  • insert_doc_after_heading
  • insert_doc_before_heading
  • know_classify_doc
  • list_docs
  • patch_doc
  • read_doc
  • read_doc_outline
  • read_doc_section
  • replace_doc_section
  • resolve_concept
  • search_docs
  • work_capture
  • work_dispositions
  • work_get
  • work_inbox
  • work_link
  • work_list
  • work_note
  • work_promote
  • work_transition
  • work_triage
  • write_doc
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 9bbf912 · analyzer v33 · 1h ago

danger signals4

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 147

filesystem 54

  • fs cpaumelle-docplane-9bbf912/dashboard/app.py :4 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/dashboard/tests/test_authoring.py :3 from pathlib import Path
  • fs cpaumelle-docplane-9bbf912/docs-api/app/generator.py :9 import shutil
  • fs cpaumelle-docplane-9bbf912/docs-api/app/search.py :75 with open(tmp, "w") as f:
  • fs cpaumelle-docplane-9bbf912/docs-api/migrate.py :12 import pathlib
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_agent_cold_start_contract.py :4 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_ci_runs_every_test_file.py :28 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_closure_gates_contract.py :14 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_coverage_burndown_contract.py :1 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_domain_e2e.py :19 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_event_channel_vocabulary.py :18 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_fresh_contract.py :5 from pathlib import Path
show 28 more
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_generated_condition_derivation_contract.py :5 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_generated_condition_reconciler.py :5 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_generated_conditions.py :5 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_generated_pages_lifecycle.py :21 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_generated_release.py :25 import shutil
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_initiative_dependencies.py :30 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_knowledge_class_apply.py :6 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_knowledge_class_migration.py :7 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_knowledge_class_suggest.py :16 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_meter_list.py :16 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_migrate_compat.py :11 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_model_contract.py :11 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_observe_contract.py :13 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_redirect_serving.py :20 import shutil
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue.py :15 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue_links.py :5 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue_observer.py :9 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue_source.py :30 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_verification_requests_contract.py :12 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_work_capture_contract.py :10 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_work_catalogue.py :12 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_work_read_surfaces.py :18 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/examples/knowledge-classes/seed_examples.py :27 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/mcp/tests/test_allowed_hosts.py :15 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/mcp/tests/test_content_path.py :13 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/mcp/tests/test_docs_tools.py :13 from pathlib import Path
  • fs (weak) cpaumelle-docplane-9bbf912/mcp/tests/test_work_tools.py :10 from pathlib import Path
  • fs cpaumelle-docplane-9bbf912/mcp/tools/docs.py :13 from pathlib import Path

14 more not shown — this panel samples each group; the count above is the real total.

shell / exec 10

  • shell (weak) cpaumelle-docplane-9bbf912/dashboard/tests/test_authoring.py :4 import subprocess
  • shell cpaumelle-docplane-9bbf912/docs-api/app/generator.py :10 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_generated_release.py :26 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_meter_list.py :13 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_redirect_serving.py :21 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue.py :12 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue_observer.py :7 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue_source.py :28 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_work_catalogue.py :9 import subprocess
  • shell (weak) cpaumelle-docplane-9bbf912/migration/tests/test_links.py :15 import subprocess

network 11

  • net cpaumelle-docplane-9bbf912/dashboard/control_plane.py :13 import httpx
  • net cpaumelle-docplane-9bbf912/docs-api/app/runtime.py :13 import requests
  • net (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_generated_condition_reconciler.py :187 from urllib.parse import parse_qs, urlsplit
  • net (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue.py :59 "from urllib.parse import urlsplit\n"
  • net cpaumelle-docplane-9bbf912/mcp/tools/docs.py :17 import httpx
  • net cpaumelle-docplane-9bbf912/mcp/tools/work.py :11 import httpx
  • net cpaumelle-docplane-9bbf912/migration/links.py :49 from urllib.parse import unquote
  • net (weak) cpaumelle-docplane-9bbf912/scripts/knowledge_class_apply.py :60 from urllib.parse import urlencode
  • net (weak) cpaumelle-docplane-9bbf912/scripts/reconcile_generated_conditions.py :15 import urllib.error
  • net (weak) cpaumelle-docplane-9bbf912/scripts/schema_catalogue.py :39 import urllib.error
  • net (weak) cpaumelle-docplane-9bbf912/scripts/schema_catalogue_observer.py :14 import urllib.error

secrets 11

  • secrets cpaumelle-docplane-9bbf912/docs-api/app/agent_auth.py :124 configured = os.environ.get("DOCPLANE_BOOTSTRAP_TOKEN", "")
  • secrets cpaumelle-docplane-9bbf912/docs-api/app/event_cursor.py :15 value = os.environ.get("DOCPLANE_EVENT_CURSOR_SECRET", "")
  • secrets (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_domain_e2e.py :1429 bootstrap = {"X-DocPlane-Bootstrap-Token": os.environ["DOCPLANE_BOOTSTRAP_TOKEN"]}
  • secrets (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_principal_token_management.py :23 BOOTSTRAP = {"X-DocPlane-Bootstrap-Token": os.environ["DOCPLANE_BOOTSTRAP_TOKEN"]}
  • secrets (weak) cpaumelle-docplane-9bbf912/examples/knowledge-classes/seed_examples.py :58 token = os.environ.get("DOCPLANE_TOKEN")
  • secrets cpaumelle-docplane-9bbf912/mcp/common.py :7 DOCPLANE_TOKEN = os.environ.get("DOCPLANE_TOKEN", "")
  • secrets cpaumelle-docplane-9bbf912/mcp/server.py :21 MCP_API_KEY = os.environ.get("MCP_API_KEY", "")
  • secrets (weak) cpaumelle-docplane-9bbf912/scripts/knowledge_class_apply.py :180 token = os.environ.get("DOCPLANE_TOKEN")
  • secrets (weak) cpaumelle-docplane-9bbf912/scripts/knowledge_class_suggest.py :270 token = os.environ.get("DOCPLANE_TOKEN")
  • secrets (weak) cpaumelle-docplane-9bbf912/scripts/meter_list.py :623 source_key = os.environ.get("METER_SOURCE_KEY", "").strip()
  • secrets (weak) cpaumelle-docplane-9bbf912/scripts/schema_catalogue.py :587 db_key = os.environ["CATALOGUE_DB_KEY"]

database 24

  • db cpaumelle-docplane-9bbf912/docs-api/app/agent_access_api.py :10 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/app/agent_api.py :12 import psycopg2.errors
  • db cpaumelle-docplane-9bbf912/docs-api/app/agent_shortcuts_api.py :14 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/app/artifact_ownership.py :11 import psycopg2.errors
  • db cpaumelle-docplane-9bbf912/docs-api/app/db.py :7 import psycopg2
  • db cpaumelle-docplane-9bbf912/docs-api/app/event_store.py :9 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/app/model_api.py :9 import psycopg2.errors
  • db cpaumelle-docplane-9bbf912/docs-api/app/mutation_receipts.py :26 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/app/observe_api.py :16 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/app/publication.py :16 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/app/reorganisation_api.py :9 import psycopg2.errors
  • db cpaumelle-docplane-9bbf912/docs-api/app/trust_api.py :10 import psycopg2.extras
show 12 more
  • db cpaumelle-docplane-9bbf912/docs-api/app/verification_api.py :18 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/app/work_api.py :10 import psycopg2.errors
  • db cpaumelle-docplane-9bbf912/docs-api/app/work_conditions_api.py :14 import psycopg2.extras
  • db cpaumelle-docplane-9bbf912/docs-api/migrate.py :17 import psycopg2
  • db (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_domain_e2e.py :22 import psycopg2.errors
  • db (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_knowledge_class_migration.py :9 import psycopg2.errors
  • db (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_private_fabric_access.py :3 import psycopg2.extras
  • db (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue.py :1002 import psycopg2
  • db (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue_observer.py :180 import psycopg2
  • db (weak) cpaumelle-docplane-9bbf912/docs-api/tests/test_schema_catalogue_source.py :182 import psycopg2
  • db (weak) cpaumelle-docplane-9bbf912/scripts/schema_catalogue.py :45 import psycopg2
  • db (weak) cpaumelle-docplane-9bbf912/scripts/schema_catalogue_observer.py :20 import psycopg2

tool registrations 23

  • search_docs cpaumelle-docplane-9bbf912/mcp/tools/docs.py :349
  • read_doc cpaumelle-docplane-9bbf912/mcp/tools/docs.py :358
  • read_doc_outline cpaumelle-docplane-9bbf912/mcp/tools/docs.py :396
  • read_doc_section cpaumelle-docplane-9bbf912/mcp/tools/docs.py :405
  • patch_doc cpaumelle-docplane-9bbf912/mcp/tools/docs.py :414
  • replace_doc_section cpaumelle-docplane-9bbf912/mcp/tools/docs.py :456
  • insert_doc_before_heading cpaumelle-docplane-9bbf912/mcp/tools/docs.py :481
  • insert_doc_after_heading cpaumelle-docplane-9bbf912/mcp/tools/docs.py :501
  • list_docs cpaumelle-docplane-9bbf912/mcp/tools/docs.py :521
  • know_classify_doc cpaumelle-docplane-9bbf912/mcp/tools/docs.py :529
  • write_doc cpaumelle-docplane-9bbf912/mcp/tools/docs.py :575
  • archive_doc cpaumelle-docplane-9bbf912/mcp/tools/docs.py :673
show 11 more
  • resolve_concept cpaumelle-docplane-9bbf912/mcp/tools/docs.py :690
  • work_capture cpaumelle-docplane-9bbf912/mcp/tools/work.py :42
  • work_inbox cpaumelle-docplane-9bbf912/mcp/tools/work.py :66
  • work_triage cpaumelle-docplane-9bbf912/mcp/tools/work.py :75
  • work_list cpaumelle-docplane-9bbf912/mcp/tools/work.py :98
  • work_get cpaumelle-docplane-9bbf912/mcp/tools/work.py :106
  • work_note cpaumelle-docplane-9bbf912/mcp/tools/work.py :112
  • work_transition cpaumelle-docplane-9bbf912/mcp/tools/work.py :159
  • work_promote cpaumelle-docplane-9bbf912/mcp/tools/work.py :205
  • work_dispositions cpaumelle-docplane-9bbf912/mcp/tools/work.py :215
  • work_link cpaumelle-docplane-9bbf912/mcp/tools/work.py :231

declared dependencies 3

  • fastapi@==0.116.1
  • httpx@==0.27.2
  • uvicorn@[standard]==0.35.0