application · active

TopoloDocs

Canonical documentation, system registry, machine-readable platform evidence, and docs validation surface for the Topolo Platform.

Documentation map

  • TopoloDocs — Canonical documentation, system registry, and machine-readable launch evidence for the Topolo Platform.

Authority and runtime

System ID
topolo-docs
App IDs
app_topolo_docs
Owners
platform
Repositories
system-apps/TopoloDocs
Hosts
https://docs.topolo.app, https://docs.topolo.dev, https://docs.stg.topolo.us
Dependencies
topolo-auth, cloud-control

Security and data ownership

Risk tier
high
Tenant isolation
mixed
Privacy classification
restricted
Storage
d1, r2, kv, source_control
Export and deletion
implemented
Enterprise ready
yes

Source-derived capability inventory

Source revisions: system-apps/TopoloDocs@content-sha256:f1156f3f8bfa67eea5ea769c2e21502bf7883b145bf30212f0ea11cc6a2b1140

Declared actions: 34 · API routes: 11 · UI routes: 11

{
  "id": "topolo-docs",
  "name": "TopoloDocs",
  "slug": "topolo-docs",
  "kind": "application",
  "visibility": "public",
  "repo_paths": [
    "system-apps/TopoloDocs"
  ],
  "source_revisions": [
    {
      "source_path": "system-apps/TopoloDocs",
      "repository": "system-apps/TopoloDocs",
      "revision": "content-sha256:f1156f3f8bfa67eea5ea769c2e21502bf7883b145bf30212f0ea11cc6a2b1140",
      "ref": "working-tree"
    }
  ],
  "source_counts": {
    "source_files": 98,
    "test_files": 70,
    "test_cases": 0,
    "migration_files": 7,
    "database_tables": 0,
    "manifests": 1,
    "deploy_targets": 2,
    "actions": 34,
    "mobile_contracts": 0,
    "notifications": 4,
    "package_manifests": 3,
    "deployment_configs": 0
  },
  "manifests": [
    {
      "source_path": "system-apps/TopoloDocs/topolo.app.json",
      "service_slug": "topolo-docs",
      "name": "topolo-docs",
      "app_id": "app_topolo_docs",
      "compatibility_date": "2026-05-01",
      "primary_target": "web",
      "environments": [
        "development",
        "production",
        "staging"
      ],
      "targets": [
        {
          "name": "api",
          "kind": "worker",
          "directory": "apps/api",
          "main": "src/worker.ts",
          "worker_name": "topolo-docs-api",
          "subdomain": null,
          "healthcheck_path": "/health",
          "variable_names": [
            "APP_ID",
            "AUTH_API_URL",
            "AUTH_ORIGIN",
            "DOCS_PUBLIC_BASE_URL",
            "ENVIRONMENT",
            "NEXUS_GATEWAY_URL",
            "TOPOLO_NOTIFY_URL",
            "VITE_TOPOLO_APP_ID"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "d1",
              "binding": "DOCS_CONTROL_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "DOCS_CONTENT_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "DOCS_OPERATIONS_DB",
              "target": null
            },
            {
              "kind": "r2",
              "binding": "DOCS_PUBLICATIONS",
              "target": null
            },
            {
              "kind": "kv",
              "binding": "DOCS_PUBLISHED_KV",
              "target": null
            }
          ]
        },
        {
          "name": "web",
          "kind": "worker",
          "directory": "apps/web",
          "main": "src/worker.ts",
          "worker_name": "topolo-docs",
          "subdomain": "docs",
          "healthcheck_path": "/health",
          "variable_names": [
            "AUTH_API_URL",
            "AUTH_ORIGIN",
            "ENVIRONMENT",
            "INSIGHTS_SITE_KEY"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "services",
              "binding": "API",
              "target": null
            }
          ]
        }
      ],
      "notifications": [
        "docs.catalog.drift_detected",
        "docs.link_check.failed",
        "docs.publish.completed",
        "docs.publish.failed"
      ],
      "notification_contract": {
        "source_path": "topolo.notification-contracts.json",
        "role": "producer",
        "schema_version": 1,
        "owner_app_id": "app_topolo_docs",
        "events": [
          {
            "type": "docs.catalog.drift_detected",
            "version": 1,
            "description": "A persisted Docs catalog validation run detected a source digest mismatch.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "source",
                "expected_digest",
                "actual_digest",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "source": {
                  "type": "string",
                  "minLength": 1
                },
                "expected_digest": {
                  "type": "string",
                  "minLength": 1
                },
                "actual_digest": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Documentation catalog drift detected",
                "body": "Auth permissions no longer match their published documentation catalog.",
                "object_id": "docsrun_123",
                "source": "Auth permissions",
                "expected_digest": "sha256:expected",
                "actual_digest": "sha256:actual",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^docs:catalog-drift-detected:"
            }
          },
          {
            "type": "docs.link_check.failed",
            "version": 1,
            "description": "A persisted Docs link validation run recorded an unreachable documentation URL.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "checked_url",
                "status_code",
                "reason",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "checked_url": {
                  "type": "string",
                  "format": "uri"
                },
                "status_code": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 100,
                  "maximum": 599
                },
                "reason": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Documentation link check failed",
                "body": "https://docs.stg.topolo.us/reference/missing failed documentation link validation.",
                "object_id": "docsrun_124",
                "checked_url": "https://docs.stg.topolo.us/reference/missing",
                "status_code": 404,
                "reason": "Expected a successful response.",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^docs:link-check-failed:"
            }
          },
          {
            "type": "docs.publish.completed",
            "version": 1,
            "description": "A documentation revision was durably recorded as published to an environment.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "revision",
                "environment",
                "published_url",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "revision": {
                  "type": "string",
                  "minLength": 1
                },
                "environment": {
                  "type": "string",
                  "enum": [
                    "development",
                    "staging",
                    "production"
                  ]
                },
                "published_url": {
                  "type": "string",
                  "format": "uri"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Documentation publish completed",
                "body": "abc123 was published to staging.",
                "object_id": "docsrun_125",
                "revision": "abc123",
                "environment": "staging",
                "published_url": "https://docs.stg.topolo.us",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^docs:publish-completed:"
            }
          },
          {
            "type": "docs.publish.failed",
            "version": 1,
            "description": "A documentation revision was durably recorded as failed during publication.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "revision",
                "environment",
                "reason",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "revision": {
                  "type": "string",
                  "minLength": 1
                },
                "environment": {
                  "type": "string",
                  "enum": [
                    "development",
                    "staging",
                    "production"
                  ]
                },
                "reason": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Documentation publish failed",
                "body": "abc124 failed to publish to staging.",
                "object_id": "docsrun_126",
                "revision": "abc124",
                "environment": "staging",
                "reason": "The publication validation gate failed.",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "sensitiveFields": [],
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^docs:publish-failed:"
            }
          }
        ]
      },
      "actions": [
        {
          "name": "widget.get",
          "title": "Get widget summary",
          "description": "Get the TopoloOne widget summary for Docs.",
          "method": "GET",
          "path": "/api/widget",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/widget",
              "body": null
            },
            "effects": "Reads state through GET /api/widget without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/widget",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "workspace.bootstrap",
          "title": "Get application bootstrap",
          "description": "Get the authenticated Docs user and organization context.",
          "method": "GET",
          "path": "/api/bootstrap",
          "permission": "workspace:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/bootstrap",
              "body": null
            },
            "effects": "Reads state through GET /api/bootstrap without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/bootstrap",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "workspace.get",
          "title": "Get Docs workspace",
          "description": "Get the active Docs workspace projection.",
          "method": "GET",
          "path": "/api/docs/workspace",
          "permission": "workspace:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/workspace",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/workspace without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/workspace",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "workspaces.archive",
          "title": "Archive Docs workspace",
          "description": "Archive an empty Docs workspace and purge its archived Docs data.",
          "method": "DELETE",
          "path": "/api/docs/workspaces/{workspaceId}",
          "permission": "workspace:delete",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "workspaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "workspaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "workspaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "DELETE",
              "path": "/api/docs/workspaces/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/docs/workspaces/{workspaceId}. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "DELETE /api/docs/workspaces/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.list",
          "title": "List documentation spaces",
          "description": "List active documentation spaces in the selected workspace.",
          "method": "GET",
          "path": "/api/docs/spaces",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/spaces",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/spaces without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/spaces",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.create",
          "title": "Create documentation space",
          "description": "Create a tenant-isolated documentation space.",
          "method": "POST",
          "path": "/api/docs/spaces",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "visibility": {
                "type": "string",
                "enum": [
                  "private",
                  "workspace",
                  "public"
                ]
              },
              "defaultLocale": {
                "type": "string",
                "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
              },
              "brand": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "title": "example",
              "slug": "example",
              "description": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/spaces",
              "body": {
                "title": "example",
                "slug": "example",
                "description": "example"
              }
            },
            "effects": "May change state through POST /api/docs/spaces. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/spaces",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.get",
          "title": "Get documentation space",
          "description": "Get one documentation space from the selected workspace.",
          "method": "GET",
          "path": "/api/docs/spaces/{spaceId}",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "spaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "spaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/spaces/example",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/spaces/{spaceId} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/spaces/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.update",
          "title": "Update documentation space",
          "description": "Update a documentation space, visibility, locale, or brand configuration.",
          "method": "PATCH",
          "path": "/api/docs/spaces/{spaceId}",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "title": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "visibility": {
                "type": "string",
                "enum": [
                  "private",
                  "workspace",
                  "public"
                ]
              },
              "defaultLocale": {
                "type": "string",
                "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
              },
              "brand": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "spaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "spaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "PATCH",
              "path": "/api/docs/spaces/example",
              "body": {
                "spaceId": "example"
              }
            },
            "effects": "May change state through PATCH /api/docs/spaces/{spaceId}. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "PATCH /api/docs/spaces/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.archive",
          "title": "Archive documentation space",
          "description": "Archive a documentation space and remove it from active workspace navigation.",
          "method": "DELETE",
          "path": "/api/docs/spaces/{spaceId}",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "spaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "spaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "DELETE",
              "path": "/api/docs/spaces/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/docs/spaces/{spaceId}. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "DELETE /api/docs/spaces/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.documents.list",
          "title": "List space documents",
          "description": "List active documents in one documentation space.",
          "method": "GET",
          "path": "/api/docs/spaces/{spaceId}/documents",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "spaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "spaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/spaces/example/documents",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/spaces/{spaceId}/documents without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/spaces/*/documents",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.documents.create",
          "title": "Create document",
          "description": "Create a document and its first immutable locale version.",
          "method": "POST",
          "path": "/api/docs/spaces/{spaceId}/documents",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "parentId": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              },
              "bodyMarkdown": {
                "type": "string"
              },
              "locale": {
                "type": "string",
                "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
              },
              "sourceKind": {
                "type": "string",
                "enum": [
                  "native",
                  "platform_repo",
                  "repository_sync",
                  "generated"
                ]
              },
              "sourceRevision": {
                "type": "string"
              },
              "sourcePath": {
                "type": "string"
              }
            },
            "required": [
              "spaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "spaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/spaces/example/documents",
              "body": {
                "spaceId": "example"
              }
            },
            "effects": "May change state through POST /api/docs/spaces/{spaceId}/documents. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/spaces/*/documents",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.sections.list",
          "title": "List space sections",
          "description": "List the configurable top-level sections a documentation space is organized into.",
          "method": "GET",
          "path": "/api/docs/spaces/{spaceId}/sections",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "spaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "spaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/spaces/example/sections",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/spaces/{spaceId}/sections without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/spaces/*/sections",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.sections.create",
          "title": "Create section",
          "description": "Create a top-level navigation section in one documentation space.",
          "method": "POST",
          "path": "/api/docs/spaces/{spaceId}/sections",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "title": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              }
            },
            "required": [
              "spaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "spaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/spaces/example/sections",
              "body": {
                "spaceId": "example"
              }
            },
            "effects": "May change state through POST /api/docs/spaces/{spaceId}/sections. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/spaces/*/sections",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "spaces.sections.reorder",
          "title": "Reorder space sections",
          "description": "Set the display order of every section in one documentation space.",
          "method": "POST",
          "path": "/api/docs/spaces/{spaceId}/sections/reorder",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "sectionIds": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 160
                },
                "minItems": 1
              }
            },
            "required": [
              "spaceId",
              "sectionIds"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "agentContract": {
            "docsUrl": "https://docs.topolo.app/applications/docs",
            "resource": {
              "kind": "documentation_section_order",
              "idPath": "$.spaceId"
            },
            "effects": [
              "Replaces the complete section display order for one documentation space."
            ],
            "errors": [
              {
                "status": 400,
                "code": "invalid_section_order",
                "recovery": "List the space sections and submit every section id exactly once."
              },
              {
                "status": 403,
                "code": "forbidden",
                "recovery": "Use a credential with docs:write access to the selected Docs workspace."
              }
            ],
            "verify": [
              "Call spaces.sections.list for the same spaceId and confirm the returned section order matches sectionIds."
            ],
            "examples": [
              {
                "input": {
                  "spaceId": "space_example",
                  "sectionIds": [
                    "section_intro",
                    "section_reference"
                  ]
                },
                "expected": "The space sections are returned in the requested display order."
              }
            ]
          },
          "documentation": {
            "example_input": {
              "spaceId": "space_example",
              "sectionIds": [
                "section_intro",
                "section_reference"
              ]
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/spaces/space_example/sections/reorder",
              "body": {
                "spaceId": "space_example",
                "sectionIds": [
                  "section_intro",
                  "section_reference"
                ]
              }
            },
            "effects": "Replaces the complete section display order for one documentation space.",
            "verification": [
              "Call spaces.sections.list for the same spaceId and confirm the returned section order matches sectionIds."
            ],
            "recovery": [
              "400 invalid_section_order: List the space sections and submit every section id exactly once.",
              "403 forbidden: Use a credential with docs:write access to the selected Docs workspace."
            ],
            "docs_url": "https://docs.topolo.app/applications/docs",
            "resource": {
              "kind": "documentation_section_order",
              "idPath": "$.spaceId"
            },
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/spaces/*/sections/reorder",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "sections.update",
          "title": "Rename section",
          "description": "Rename a documentation section or change its slug.",
          "method": "PATCH",
          "path": "/api/docs/sections/{sectionId}",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "sectionId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "title": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              }
            },
            "required": [
              "sectionId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "sectionId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "PATCH",
              "path": "/api/docs/sections/example",
              "body": {
                "sectionId": "example"
              }
            },
            "effects": "May change state through PATCH /api/docs/sections/{sectionId}. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "PATCH /api/docs/sections/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "sections.delete",
          "title": "Delete section",
          "description": "Delete a documentation section; its documents become unassigned rather than being deleted.",
          "method": "DELETE",
          "path": "/api/docs/sections/{sectionId}",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "sectionId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "sectionId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "sectionId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "DELETE",
              "path": "/api/docs/sections/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/docs/sections/{sectionId}. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "DELETE /api/docs/sections/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.section.set",
          "title": "File document into a section",
          "description": "Move a document into a section of its space, or unassign it, and set its position within that section.",
          "method": "PUT",
          "path": "/api/docs/documents/{documentId}/section",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "sectionId": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "position": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "documentId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "PUT",
              "path": "/api/docs/documents/example/section",
              "body": {
                "documentId": "example"
              }
            },
            "effects": "May change state through PUT /api/docs/documents/{documentId}/section. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "PUT /api/docs/documents/*/section",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.list",
          "title": "List workspace documents",
          "description": "List active documents across the selected workspace.",
          "method": "GET",
          "path": "/api/docs/documents",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/documents",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/documents without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/documents",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.get",
          "title": "Get document",
          "description": "Get one document and its immutable version history.",
          "method": "GET",
          "path": "/api/docs/documents/{documentId}",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "documentId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/documents/example",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/documents/{documentId} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/documents/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.update",
          "title": "Update document metadata",
          "description": "Update native document metadata and review state.",
          "method": "PATCH",
          "path": "/api/docs/documents/{documentId}",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "parentId": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 160
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "draft",
                  "review"
                ]
              }
            },
            "required": [
              "documentId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "PATCH",
              "path": "/api/docs/documents/example",
              "body": {
                "documentId": "example"
              }
            },
            "effects": "May change state through PATCH /api/docs/documents/{documentId}. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "PATCH /api/docs/documents/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.archive",
          "title": "Archive document",
          "description": "Archive a native document and remove its publication pointer.",
          "method": "DELETE",
          "path": "/api/docs/documents/{documentId}",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "documentId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "DELETE",
              "path": "/api/docs/documents/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/docs/documents/{documentId}. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "DELETE /api/docs/documents/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.versions.list",
          "title": "List document versions",
          "description": "List immutable versions for one document.",
          "method": "GET",
          "path": "/api/docs/documents/{documentId}/versions",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "documentId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/documents/example/versions",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/documents/{documentId}/versions without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/documents/*/versions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.versions.create",
          "title": "Create document version",
          "description": "Create an immutable locale-specific version and update full-text retrieval.",
          "method": "POST",
          "path": "/api/docs/documents/{documentId}/versions",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "title": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              },
              "bodyMarkdown": {
                "type": "string"
              },
              "locale": {
                "type": "string",
                "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
              },
              "sourceRevision": {
                "type": "string"
              },
              "sourcePath": {
                "type": "string"
              }
            },
            "required": [
              "documentId",
              "bodyMarkdown"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "documentId": "example",
              "bodyMarkdown": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/documents/example/versions",
              "body": {
                "documentId": "example",
                "bodyMarkdown": "example"
              }
            },
            "effects": "May change state through POST /api/docs/documents/{documentId}/versions. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/documents/*/versions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.publish",
          "title": "Publish document version",
          "description": "Publish one exact document version as an immutable public snapshot.",
          "method": "POST",
          "path": "/api/docs/documents/{documentId}/publish",
          "permission": "docs:publish",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "versionId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "documentId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/documents/example/publish",
              "body": {
                "documentId": "example"
              }
            },
            "effects": "May change state through POST /api/docs/documents/{documentId}/publish. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/documents/*/publish",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "documents.unpublish",
          "title": "Unpublish document",
          "description": "Remove public lookup pointers for a document.",
          "method": "POST",
          "path": "/api/docs/documents/{documentId}/unpublish",
          "permission": "docs:publish",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "documentId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/documents/example/unpublish",
              "body": {
                "documentId": "example"
              }
            },
            "effects": "May change state through POST /api/docs/documents/{documentId}/unpublish. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/documents/*/unpublish",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "search.query",
          "title": "Search workspace documents",
          "description": "Run tenant-filtered full-text search across current locale versions.",
          "method": "GET",
          "path": "/api/docs/search",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "q": {
                "type": "string",
                "minLength": 1,
                "maxLength": 500
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 50
              }
            },
            "required": [
              "q"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "q": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/search",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/search without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/search",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "public_search.query",
          "title": "Search a published documentation space",
          "description": "Search titles, summaries, and published body text in one public documentation space. Anonymous; only published versions are matched.",
          "method": "GET",
          "path": "/api/public/docs/{spaceSlug}/search.json",
          "authorizationMode": "public",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "spaceSlug": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "q": {
                "type": "string",
                "minLength": 1,
                "maxLength": 500
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 50
              }
            },
            "required": [
              "spaceSlug",
              "q"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {
              "spaceSlug": "example",
              "q": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/public/docs/example/search.json",
              "body": null
            },
            "effects": "Reads state through GET /api/public/docs/{spaceSlug}/search.json without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/public/docs/*/search.json",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "search.ask",
          "title": "Ask workspace documentation",
          "description": "Answer from tenant-filtered retrieved versions and return immutable citations.",
          "method": "POST",
          "path": "/api/docs/ask",
          "permission": "docs:read",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "query": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1000
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 50
              }
            },
            "required": [
              "query"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "query": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/ask",
              "body": {
                "query": "example"
              }
            },
            "effects": "May change state through POST /api/docs/ask. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/ask",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "workspace.export",
          "title": "Export workspace documentation",
          "description": "Export spaces, documents, versions, and publication metadata for the selected workspace.",
          "method": "GET",
          "path": "/api/docs/export",
          "permission": "docs:export",
          "authorizationMode": "static",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/docs/export",
              "body": null
            },
            "effects": "Reads state through GET /api/docs/export without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/docs/export",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "platform_corpus.sync",
          "title": "Sync canonical platform documentation",
          "description": "Project the revisioned Topolo platform corpus into its platform-owned Docs workspace in an idempotent batch.",
          "method": "POST",
          "path": "/api/docs/platform-corpus/sync",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "cursor": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 25
              }
            },
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "cursor": 1,
              "limit": 1
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/docs/platform-corpus/sync",
              "body": {
                "cursor": 1,
                "limit": 1
              }
            },
            "effects": "May change state through POST /api/docs/platform-corpus/sync. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/docs/platform-corpus/sync",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "operations.catalog_drift.record",
          "title": "Record documentation catalog drift",
          "description": "Persist a catalog drift result and notify the platform operator.",
          "method": "POST",
          "path": "/api/operations/catalog-drift",
          "permission": "validation:invoke",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "runId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "source": {
                "type": "string",
                "minLength": 1,
                "maxLength": 240
              },
              "expectedDigest": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "actualDigest": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              }
            },
            "required": [
              "runId",
              "source",
              "expectedDigest",
              "actualDigest"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "runId": "example",
              "source": "example",
              "expectedDigest": "example",
              "actualDigest": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/operations/catalog-drift",
              "body": {
                "runId": "example",
                "source": "example",
                "expectedDigest": "example",
                "actualDigest": "example"
              }
            },
            "effects": "May change state through POST /api/operations/catalog-drift. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/operations/catalog-drift",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "operations.link_checks.fail",
          "title": "Record failed documentation link check",
          "description": "Persist a failed link validation result and notify the platform operator.",
          "method": "POST",
          "path": "/api/operations/link-checks/failed",
          "permission": "validation:invoke",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "runId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "checkedUrl": {
                "type": "string",
                "maxLength": 2048,
                "format": "uri"
              },
              "statusCode": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 100,
                    "maximum": 599
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "reason": {
                "type": "string",
                "minLength": 1,
                "maxLength": 2000
              }
            },
            "required": [
              "runId",
              "checkedUrl",
              "reason"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "runId": "example",
              "checkedUrl": "https://example.com",
              "reason": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/operations/link-checks/failed",
              "body": {
                "runId": "example",
                "checkedUrl": "https://example.com",
                "reason": "example"
              }
            },
            "effects": "May change state through POST /api/operations/link-checks/failed. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/operations/link-checks/failed",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "operations.publishes.complete",
          "title": "Record completed documentation publish",
          "description": "Persist a completed documentation publish and notify the platform operator.",
          "method": "POST",
          "path": "/api/operations/publishes/completed",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "runId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "revision": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "environment": {
                "type": "string",
                "enum": [
                  "development",
                  "staging",
                  "production"
                ]
              },
              "publishedUrl": {
                "type": "string",
                "maxLength": 2048,
                "format": "uri"
              }
            },
            "required": [
              "runId",
              "revision",
              "environment",
              "publishedUrl"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "runId": "example",
              "revision": "example",
              "environment": "development",
              "publishedUrl": "https://example.com"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/operations/publishes/completed",
              "body": {
                "runId": "example",
                "revision": "example",
                "environment": "development",
                "publishedUrl": "https://example.com"
              }
            },
            "effects": "May change state through POST /api/operations/publishes/completed. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/operations/publishes/completed",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "operations.publishes.fail",
          "title": "Record failed documentation publish",
          "description": "Persist a failed documentation publish and notify the platform operator.",
          "method": "POST",
          "path": "/api/operations/publishes/failed",
          "permission": "docs:write",
          "authorizationMode": "static",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "runId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "revision": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "environment": {
                "type": "string",
                "enum": [
                  "development",
                  "staging",
                  "production"
                ]
              },
              "reason": {
                "type": "string",
                "minLength": 1,
                "maxLength": 2000
              }
            },
            "required": [
              "runId",
              "revision",
              "environment",
              "reason"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "runId": "example",
              "revision": "example",
              "environment": "development",
              "reason": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-docs --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "POST",
              "path": "/api/operations/publishes/failed",
              "body": {
                "runId": "example",
                "revision": "example",
                "environment": "development",
                "reason": "example"
              }
            },
            "effects": "May change state through POST /api/operations/publishes/failed. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/operations/publishes/failed",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        }
      ],
      "action_coverage": {
        "status": "ok",
        "served_routes": 40,
        "matched_actions": 34,
        "declared_unserved_actions": [],
        "coverage_excluded_actions": [],
        "uncatalogued_routes": [],
        "ignored_routes": 6,
        "configured_exclusions": 3,
        "configuration_findings": [],
        "notes": [
          "5 manually-declared route(s)"
        ]
      },
      "runtime_contract_audit": {
        "status": "verified",
        "actions": 34,
        "contracts": 34,
        "contract_module": "topolo.action-contracts.mjs",
        "validator_sources": [
          "apps/api/src/worker.ts"
        ],
        "authorization_sources": [
          "apps/api/src/worker.ts"
        ],
        "findings": []
      }
    }
  ],
  "mobile_contracts": [],
  "package_manifests": [],
  "deployment_configs": [],
  "source_signals": {
    "api_routes": [
      {
        "method": "ALL",
        "path": "*",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/health",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/health",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/app-identity",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/auth/callback",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/internal",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/bootstrap",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/widget",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/docs",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/api/docs/platform-corpus/sync",
        "source_path": "system-apps/TopoloDocs/apps/api/src/worker.ts"
      },
      {
        "method": "LITERAL",
        "path": "/",
        "source_path": "system-apps/TopoloDocs/apps/web/src/worker.ts"
      }
    ],
    "ui_routes": [
      {
        "path": "/app",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/spaces",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/spaces/:spaceId",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/read/:spaceId",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/read/:spaceId/:documentId",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/documents/:documentId",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/documents/:documentId/edit",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/search",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/app/settings",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/s/:spaceSlug/:documentSlug?",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      },
      {
        "path": "/reference/actions",
        "source_path": "system-apps/TopoloDocs/apps/web/src/App.tsx"
      }
    ],
    "test_cases": [],
    "database_tables": []
  },
  "documentation": {
    "declared_paths": [
      "applications/docs",
      "internal/apps/docs"
    ],
    "present_paths": [
      "applications/docs",
      "internal/apps/docs"
    ],
    "missing_paths": [],
    "human_reference": "/systems/topolo-docs",
    "machine_reference": "/machine/systems/topolo-docs.json",
    "action_examples": 34,
    "action_schemas": 34
  },
  "source_findings": []
}