application · active

Topolo Roadmapper

Roadmap and project management application in the Topolo portfolio with AI onboarding, scoped project-chat planning sessions, hierarchy-wide guest sharing and guest edit auditability, and narrative presentation delivery.

Documentation map

  • Topolo Roadmapper — Public overview of Roadmapper, including AI-assisted project onboarding, durable planning sessions, and stakeholder presentation delivery.

Authority and runtime

System ID
topolo-roadmapper
App IDs
app_topolo_roadmapper
Owners
product-platform
Repositories
apps/TopoloRoadmapper
Hosts
https://roadmapper.topolo.app, https://roadmapper-api.topolo.app, https://roadmapper-api.stg.topolo.us, https://roadmapper.stg.topolo.us
Dependencies
topolo-auth, topolo-nexus, topolo-notify, applications-packages

Security and data ownership

Risk tier
standard
Tenant isolation
organization_scoped
Privacy classification
restricted
Storage
d1, external_provider, r2
Export and deletion
planned
Enterprise ready
no

Source-derived capability inventory

Source revisions: apps/TopoloRoadmapper@4d949b9e65b36e73fd832edcf0a142205a1db5bd

Declared actions: 74 · API routes: 3 · UI routes: 26

{
  "id": "topolo-roadmapper",
  "name": "Topolo Roadmapper",
  "slug": "topolo-roadmapper",
  "kind": "application",
  "visibility": "public",
  "repo_paths": [
    "apps/TopoloRoadmapper"
  ],
  "source_revisions": [
    {
      "source_path": "apps/TopoloRoadmapper",
      "repository": "apps/TopoloRoadmapper",
      "revision": "4d949b9e65b36e73fd832edcf0a142205a1db5bd",
      "ref": "origin/staging"
    }
  ],
  "source_counts": {
    "source_files": 222,
    "test_files": 140,
    "test_cases": 0,
    "migration_files": 10,
    "database_tables": 0,
    "manifests": 1,
    "deploy_targets": 2,
    "actions": 74,
    "mobile_contracts": 1,
    "notifications": 8,
    "package_manifests": 5,
    "deployment_configs": 0
  },
  "manifests": [
    {
      "source_path": "apps/TopoloRoadmapper/topolo.app.json",
      "service_slug": "topolo-roadmapper",
      "name": "topolo-roadmapper",
      "app_id": "app_topolo_roadmapper",
      "compatibility_date": "2026-04-10",
      "primary_target": null,
      "environments": [
        "development",
        "production",
        "staging"
      ],
      "targets": [
        {
          "name": "web",
          "kind": "worker",
          "directory": "apps/web",
          "main": "src/worker.ts",
          "worker_name": "topolo-roadmapper",
          "subdomain": "roadmapper",
          "healthcheck_path": null,
          "variable_names": [
            "AUTH_API_URL",
            "INSIGHTS_SITE_KEY"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "services",
              "binding": "API",
              "target": null
            }
          ]
        },
        {
          "name": "api",
          "kind": "worker",
          "directory": "apps/api",
          "main": "src/index.ts",
          "worker_name": "topolo-roadmapper-api",
          "subdomain": null,
          "healthcheck_path": "/health",
          "variable_names": [
            "ENVIRONMENT",
            "FRONTEND_URL",
            "TOPOLO_AUTH_API_URL",
            "TOPOLO_NOTIFY_URL"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "d1",
              "binding": "ROADMAP_CORE_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "ROADMAP_COLLAB_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "ROADMAP_PLANNING_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "ROADMAP_EXPORT_DB",
              "target": null
            },
            {
              "kind": "r2",
              "binding": "ATTACHMENTS_BUCKET",
              "target": null
            }
          ]
        }
      ],
      "notifications": [
        "roadmapper.comment.mention",
        "roadmapper.dependency.blocked",
        "roadmapper.guest_share.invited",
        "roadmapper.item.assigned",
        "roadmapper.item.due",
        "roadmapper.presentation.ready",
        "roadmapper.project.created",
        "roadmapper.roadmap.created"
      ],
      "notification_contract": {
        "source_path": "topolo.notification-contracts.json",
        "role": "producer",
        "schema_version": 1,
        "owner_app_id": "app_topolo_roadmapper",
        "events": [
          {
            "type": "roadmapper.comment.mention",
            "version": 1,
            "description": "A Roadmapper comment durably mentioned an organization member.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "comment_id",
                "item_id",
                "item_name",
                "comment_excerpt",
                "object_id",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "comment_id": {
                  "type": "string",
                  "minLength": 1
                },
                "item_id": {
                  "type": "string",
                  "minLength": 1
                },
                "item_name": {
                  "type": "string",
                  "minLength": 1
                },
                "comment_excerpt": {
                  "type": "string",
                  "maxLength": 240
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "actor_id": {
                  "type": "string"
                },
                "actor_display_name": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            },
            "examples": [
              {
                "title": "Ada mentioned you in a comment",
                "body": "Ada mentioned you on Launch API.",
                "comment_id": "comment_123",
                "item_id": "item_123",
                "item_name": "Launch API",
                "comment_excerpt": "Please review this dependency.",
                "object_id": "comment_123",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:comment-mention:"
            },
            "sensitiveFields": []
          },
          {
            "type": "roadmapper.dependency.blocked",
            "version": 1,
            "description": "A persisted blocks or requires dependency blocked an assigned Roadmapper item.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "dependency_id",
                "dependency_type",
                "blocked_item_id",
                "blocked_item_name",
                "blocking_item_id",
                "blocking_item_name",
                "object_id",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "dependency_id": {
                  "type": "string",
                  "minLength": 1
                },
                "dependency_type": {
                  "enum": [
                    "blocks",
                    "requires"
                  ]
                },
                "blocked_item_id": {
                  "type": "string",
                  "minLength": 1
                },
                "blocked_item_name": {
                  "type": "string",
                  "minLength": 1
                },
                "blocking_item_id": {
                  "type": "string",
                  "minLength": 1
                },
                "blocking_item_name": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": true
            },
            "examples": [
              {
                "title": "Roadmap item blocked",
                "body": "Launch API is blocked by Authentication rollout.",
                "dependency_id": "dependency_123",
                "dependency_type": "blocks",
                "blocked_item_id": "item_123",
                "blocked_item_name": "Launch API",
                "blocking_item_id": "item_456",
                "blocking_item_name": "Authentication rollout",
                "object_id": "item_123",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:dependency-blocked:"
            },
            "sensitiveFields": []
          },
          {
            "type": "roadmapper.guest_share.invited",
            "version": 1,
            "description": "Roadmapper recorded the durable guest share invited transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "recipient_email",
                "resource_label",
                "resource_name",
                "share_url",
                "access_mode",
                "allow_item_navigation",
                "occurred_at"
              ],
              "properties": {
                "recipient_email": {
                  "type": "string",
                  "format": "email"
                },
                "resource_label": {
                  "type": "string",
                  "minLength": 1
                },
                "resource_name": {
                  "type": "string",
                  "minLength": 1
                },
                "share_url": {
                  "type": "string",
                  "format": "uri"
                },
                "access_mode": {
                  "enum": [
                    "view",
                    "edit"
                  ]
                },
                "allow_item_navigation": {
                  "type": "boolean"
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "actor_id": {
                  "type": "string"
                }
              }
            },
            "examples": [
              {
                "recipient_email": "guest@example.com",
                "resource_label": "Roadmap",
                "resource_name": "Product launch",
                "share_url": "https://roadmapper.topolo.app/roadmaps/guest/share_123",
                "access_mode": "view",
                "allow_item_navigation": true,
                "occurred_at": "2026-07-17T12:00:00.000Z"
              }
            ],
            "dataClassification": "confidential",
            "sensitiveFields": [
              "recipient_email",
              "share_url"
            ],
            "recipients": {
              "modes": [
                "external"
              ],
              "externalAddress": "required"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:guest-share-invited:"
            }
          },
          {
            "type": "roadmapper.item.assigned",
            "version": 1,
            "description": "A Roadmapper item durably acquired a new member assignee.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "item_id",
                "item_name",
                "assignee_user_id",
                "object_id",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "item_id": {
                  "type": "string",
                  "minLength": 1
                },
                "item_name": {
                  "type": "string",
                  "minLength": 1
                },
                "assignee_user_id": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "actor_id": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            },
            "examples": [
              {
                "title": "Roadmap item assigned to you",
                "body": "Ada assigned Launch API to you.",
                "item_id": "item_123",
                "item_name": "Launch API",
                "assignee_user_id": "usr_123",
                "object_id": "item_123",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:item-assigned:"
            },
            "sensitiveFields": []
          },
          {
            "type": "roadmapper.item.due",
            "version": 1,
            "description": "A persisted assigned Roadmapper item reached its due date and had not completed.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "item_id",
                "item_name",
                "due_date",
                "assignee_user_id",
                "object_id",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "item_id": {
                  "type": "string",
                  "minLength": 1
                },
                "item_name": {
                  "type": "string",
                  "minLength": 1
                },
                "due_date": {
                  "type": "string",
                  "format": "date"
                },
                "assignee_user_id": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": true
            },
            "examples": [
              {
                "title": "Roadmap item is due",
                "body": "Launch API is due on 2026-07-20.",
                "item_id": "item_123",
                "item_name": "Launch API",
                "due_date": "2026-07-20",
                "assignee_user_id": "usr_123",
                "object_id": "item_123",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:item-due:"
            },
            "sensitiveFields": []
          },
          {
            "type": "roadmapper.presentation.ready",
            "version": 1,
            "description": "A Roadmapper presentation deck was durably generated in ready state.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "presentation_id",
                "presentation_title",
                "project_id",
                "object_id",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "presentation_id": {
                  "type": "string",
                  "minLength": 1
                },
                "presentation_title": {
                  "type": "string",
                  "minLength": 1
                },
                "project_id": {
                  "type": "string",
                  "minLength": 1
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "additionalProperties": true
            },
            "examples": [
              {
                "title": "Presentation ready",
                "body": "Launch review is ready to review.",
                "presentation_id": "presentation_123",
                "presentation_title": "Launch review",
                "project_id": "project_123",
                "object_id": "presentation_123",
                "occurred_at": "2026-07-20T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:presentation-ready:"
            },
            "sensitiveFields": []
          },
          {
            "type": "roadmapper.project.created",
            "version": 1,
            "description": "A roadmap project was created.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "enum": [
                    "notification",
                    "action"
                  ]
                },
                "action_kind": {
                  "enum": [
                    "open",
                    "review",
                    "approve",
                    "resolve",
                    "complete"
                  ]
                },
                "action_status": {
                  "type": "string"
                },
                "priority": {
                  "enum": [
                    "low",
                    "normal",
                    "high",
                    "urgent"
                  ]
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "severity": {
                  "enum": [
                    "info",
                    "success",
                    "warning",
                    "critical"
                  ]
                },
                "object_type": {
                  "type": "string"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "actor_id": {
                  "type": "string"
                },
                "actor_display_name": {
                  "type": "string"
                },
                "recipient_email": {
                  "type": "string",
                  "format": "email"
                },
                "thread_key": {
                  "type": "string"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "action_context": {
                  "type": "object"
                }
              },
              "additionalProperties": true
            },
            "examples": [
              {
                "title": "A roadmap project was created.",
                "body": "Open the owning app to review this event.",
                "object_id": "object_123",
                "occurred_at": "2026-07-17T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:project-created:"
            },
            "sensitiveFields": []
          },
          {
            "type": "roadmapper.roadmap.created",
            "version": 1,
            "description": "A roadmap was created.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "object_id",
                "occurred_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "enum": [
                    "notification",
                    "action"
                  ]
                },
                "action_kind": {
                  "enum": [
                    "open",
                    "review",
                    "approve",
                    "resolve",
                    "complete"
                  ]
                },
                "action_status": {
                  "type": "string"
                },
                "priority": {
                  "enum": [
                    "low",
                    "normal",
                    "high",
                    "urgent"
                  ]
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "severity": {
                  "enum": [
                    "info",
                    "success",
                    "warning",
                    "critical"
                  ]
                },
                "object_type": {
                  "type": "string"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "actor_id": {
                  "type": "string"
                },
                "actor_display_name": {
                  "type": "string"
                },
                "recipient_email": {
                  "type": "string",
                  "format": "email"
                },
                "thread_key": {
                  "type": "string"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "action_context": {
                  "type": "object"
                }
              },
              "additionalProperties": true
            },
            "examples": [
              {
                "title": "A roadmap was created.",
                "body": "Open the owning app to review this event.",
                "object_id": "object_123",
                "occurred_at": "2026-07-17T00:00:00.000Z"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^roadmapper:roadmap-created:"
            },
            "sensitiveFields": []
          }
        ]
      },
      "actions": [
        {
          "name": "organizations.data.export",
          "title": "Export organization data",
          "description": "Export all Roadmapper data owned by the authenticated organization across four D1 stores and linked attachment metadata.",
          "method": "GET",
          "path": "/api/organizations/data/export",
          "permission": "privacy:read",
          "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",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/organizations/data/export",
              "body": null
            },
            "effects": "Reads state through GET /api/organizations/data/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/organizations/data/export",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "organizations.data.erase",
          "title": "Erase organization data",
          "description": "Permanently erase all Roadmapper data owned by the authenticated organization while retaining backups under policy.",
          "method": "DELETE",
          "path": "/api/organizations/data/erase",
          "permission": "privacy:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "confirmation": {
                "type": "string",
                "const": "ERASE"
              }
            },
            "required": [
              "confirmation"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "confirmation": "ERASE"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/organizations/data/erase",
              "body": null
            },
            "effects": "May change state through DELETE /api/organizations/data/erase. 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/organizations/data/erase",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.list",
          "title": "Projects List",
          "description": "Execute Projects List in Topolo Roadmapper.",
          "method": "GET",
          "path": "/api/projects",
          "permission": "projects:read",
          "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",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects",
              "body": null
            },
            "effects": "Reads state through GET /api/projects 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/projects",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.create",
          "title": "Projects Create",
          "description": "Call POST /projects.",
          "method": "POST",
          "path": "/api/projects",
          "permission": "projects:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "description": {
                "type": "string",
                "maxLength": 500
              },
              "status": {
                "type": "string",
                "enum": [
                  "active",
                  "on_hold",
                  "completed",
                  "cancelled",
                  "archived"
                ]
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "name": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects",
              "body": {
                "name": "example"
              }
            },
            "effects": "May change state through POST /api/projects. 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/projects",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.update",
          "title": "Projects Update",
          "description": "Call PUT /projects/{id}.",
          "method": "PUT",
          "path": "/api/projects/{id}",
          "permission": "projects:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "description": {
                "type": "string",
                "maxLength": 500
              },
              "status": {
                "type": "string",
                "enum": [
                  "active",
                  "on_hold",
                  "completed",
                  "cancelled",
                  "archived"
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Update.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/projects/{id}. 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/projects/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.delete",
          "title": "Projects Delete",
          "description": "Call DELETE /projects/{id}.",
          "method": "DELETE",
          "path": "/api/projects/{id}",
          "permission": "projects:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/projects/{id}. 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/projects/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.archive",
          "title": "Projects Archive",
          "description": "Call POST /projects/{id}/archive.",
          "method": "POST",
          "path": "/api/projects/{id}/archive",
          "permission": "projects:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "archive": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "archive"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Archive.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "archive": true
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/archive",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "archive": true
              }
            },
            "effects": "May change state through POST /api/projects/{id}/archive. 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/projects/*/archive",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.guest_shares.create",
          "title": "Projects Guest Shares Create",
          "description": "Execute Projects Guest Shares Create in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/projects/{id}/share-guest",
          "permission": "projects:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "expiresInHours": {
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 1,
                    "maximum": 720
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "accessMode": {
                "type": "string",
                "enum": [
                  "view",
                  "edit"
                ]
              },
              "allowItemNavigation": {
                "type": "boolean"
              },
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/share-guest",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/projects/{id}/share-guest. 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/projects/*/share-guest",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.guest_shares.list",
          "title": "Projects Guest Shares List",
          "description": "Execute Projects Guest Shares List in Topolo Roadmapper.",
          "method": "GET",
          "path": "/api/projects/{id}/share-guest",
          "permission": "projects:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/share-guest",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/{id}/share-guest 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/projects/*/share-guest",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.guest_shares.revoke",
          "title": "Projects Guest Shares Revoke",
          "description": "Execute Projects Guest Shares Revoke in Topolo Roadmapper.",
          "method": "DELETE",
          "path": "/api/projects/{id}/share-guest/{token}",
          "permission": "projects:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "token": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id",
              "token"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "token": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/share-guest/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/projects/{id}/share-guest/{token}. 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/projects/*/share-guest/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.guest_shares.invite",
          "title": "Projects Guest Shares Invite",
          "description": "Execute Projects Guest Shares Invite in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/projects/{id}/share-guest/{token}/invite-email",
          "permission": "projects:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "token": {
                "type": "string",
                "minLength": 1
              },
              "recipientEmail": {
                "type": "string",
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              }
            },
            "required": [
              "id",
              "token",
              "recipientEmail"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "token": "example",
              "recipientEmail": "user@example.com"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/share-guest/example/invite-email",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "token": "example",
                "recipientEmail": "user@example.com"
              }
            },
            "effects": "May change state through POST /api/projects/{id}/share-guest/{token}/invite-email. 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/projects/*/share-guest/*/invite-email",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.presentations.generate",
          "title": "Projects Presentations Generate",
          "description": "Call POST /projects/{id}/presentations/generate.",
          "method": "POST",
          "path": "/api/projects/{id}/presentations/generate",
          "permission": "reports:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "template": {
                "type": "string",
                "enum": [
                  "executive_status_update",
                  "steering_committee_review",
                  "program_increment_review",
                  "customer_safe_roadmap_update",
                  "delivery_risk_review"
                ]
              },
              "scenarioId": {
                "type": "string"
              },
              "liveLinked": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Presentations Generate.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/presentations/generate",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/projects/{id}/presentations/generate. 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/projects/*/presentations/generate",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.planning_sessions.create",
          "title": "Projects Planning Sessions Create",
          "description": "Call POST /projects/{id}/planning/sessions.",
          "method": "POST",
          "path": "/api/projects/{id}/planning/sessions",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "scopeType": {
                "type": "string",
                "enum": [
                  "project",
                  "roadmap",
                  "item"
                ]
              },
              "scopeRecordId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128
              },
              "impactMode": {
                "type": "string",
                "enum": [
                  "project_wide",
                  "selected_only",
                  "selected_with_descendants"
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Planning Sessions Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/planning/sessions",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/projects/{id}/planning/sessions. 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/projects/*/planning/sessions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_draft.create",
          "title": "Projects Ai Draft Create",
          "description": "Call POST /projects/ai/draft.",
          "method": "POST",
          "path": "/api/projects/ai/draft",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "messages": {
                "minItems": 1,
                "maxItems": 40,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "role": {
                      "type": "string",
                      "enum": [
                        "user",
                        "assistant"
                      ]
                    },
                    "content": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 4000
                    }
                  },
                  "required": [
                    "role",
                    "content"
                  ],
                  "additionalProperties": false
                }
              },
              "currentDraft": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "project": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 100
                          },
                          "description": {
                            "type": "string",
                            "maxLength": 500
                          }
                        },
                        "required": [
                          "name"
                        ],
                        "additionalProperties": false
                      },
                      "roadmaps": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            },
                            "description": {
                              "type": "string",
                              "maxLength": 500
                            },
                            "startDate": {
                              "type": "string",
                              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                            },
                            "endDate": {
                              "type": "string",
                              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                            },
                            "items": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 255
                                  },
                                  "description": {
                                    "type": "string"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "planned",
                                      "in_progress",
                                      "completed",
                                      "blocked"
                                    ]
                                  },
                                  "priority": {
                                    "type": "string",
                                    "enum": [
                                      "low",
                                      "medium",
                                      "high",
                                      "critical"
                                    ]
                                  },
                                  "startDate": {
                                    "type": "string",
                                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                                  },
                                  "endDate": {
                                    "type": "string",
                                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                                  },
                                  "assignee": {
                                    "type": "string",
                                    "maxLength": 255
                                  },
                                  "children": {
                                    "type": "array",
                                    "items": {}
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "additionalProperties": false
                              }
                            }
                          },
                          "required": [
                            "name",
                            "items"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "project",
                      "roadmaps"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "messages"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Draft Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "messages": [
                {
                  "role": "user",
                  "content": "example"
                }
              ]
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/draft",
              "body": {
                "messages": [
                  {
                    "role": "user",
                    "content": "example"
                  }
                ]
              }
            },
            "effects": "May change state through POST /api/projects/ai/draft. 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/projects/ai/draft",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_apply",
          "title": "Projects Ai Apply",
          "description": "Call POST /projects/ai/apply.",
          "method": "POST",
          "path": "/api/projects/ai/apply",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "draft": {
                "type": "object",
                "properties": {
                  "project": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "description": {
                        "type": "string",
                        "maxLength": 500
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "additionalProperties": false
                  },
                  "roadmaps": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "description": {
                          "type": "string",
                          "maxLength": 500
                        },
                        "startDate": {
                          "type": "string",
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                        },
                        "endDate": {
                          "type": "string",
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                        },
                        "items": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 255
                              },
                              "description": {
                                "type": "string"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "planned",
                                  "in_progress",
                                  "completed",
                                  "blocked"
                                ]
                              },
                              "priority": {
                                "type": "string",
                                "enum": [
                                  "low",
                                  "medium",
                                  "high",
                                  "critical"
                                ]
                              },
                              "startDate": {
                                "type": "string",
                                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                              },
                              "endDate": {
                                "type": "string",
                                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                              },
                              "assignee": {
                                "type": "string",
                                "maxLength": 255
                              },
                              "children": {
                                "type": "array",
                                "items": {}
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "name",
                        "items"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "project",
                  "roadmaps"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "draft"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Apply.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "draft": {
                "project": {
                  "name": "example"
                },
                "roadmaps": [
                  {
                    "name": "example",
                    "items": [
                      {
                        "name": "example"
                      }
                    ]
                  }
                ]
              }
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/apply",
              "body": {
                "draft": {
                  "project": {
                    "name": "example"
                  },
                  "roadmaps": [
                    {
                      "name": "example",
                      "items": [
                        {
                          "name": "example"
                        }
                      ]
                    }
                  ]
                }
              }
            },
            "effects": "May change state through POST /api/projects/ai/apply. 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/projects/ai/apply",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_sessions.create",
          "title": "Projects Ai Sessions Create",
          "description": "Call POST /projects/ai/sessions.",
          "method": "POST",
          "path": "/api/projects/ai/sessions",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Sessions Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/sessions",
              "body": {}
            },
            "effects": "May change state through POST /api/projects/ai/sessions. 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/projects/ai/sessions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_sessions.update",
          "title": "Projects Ai Sessions Update",
          "description": "Call PATCH /projects/ai/sessions/{id}.",
          "method": "PATCH",
          "path": "/api/projects/ai/sessions/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "draft": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "project": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 100
                          },
                          "description": {
                            "type": "string",
                            "maxLength": 500
                          }
                        },
                        "required": [
                          "name"
                        ],
                        "additionalProperties": false
                      },
                      "roadmaps": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            },
                            "description": {
                              "type": "string",
                              "maxLength": 500
                            },
                            "startDate": {
                              "type": "string",
                              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                            },
                            "endDate": {
                              "type": "string",
                              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                            },
                            "items": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 255
                                  },
                                  "description": {
                                    "type": "string"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "planned",
                                      "in_progress",
                                      "completed",
                                      "blocked"
                                    ]
                                  },
                                  "priority": {
                                    "type": "string",
                                    "enum": [
                                      "low",
                                      "medium",
                                      "high",
                                      "critical"
                                    ]
                                  },
                                  "startDate": {
                                    "type": "string",
                                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                                  },
                                  "endDate": {
                                    "type": "string",
                                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                                  },
                                  "assignee": {
                                    "type": "string",
                                    "maxLength": 255
                                  },
                                  "children": {
                                    "type": "array",
                                    "items": {}
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "additionalProperties": false
                              }
                            }
                          },
                          "required": [
                            "name",
                            "items"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "project",
                      "roadmaps"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "draft"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Sessions Update.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "draft": {
                "project": {
                  "name": "example"
                },
                "roadmaps": [
                  {
                    "name": "example",
                    "items": []
                  }
                ]
              }
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/sessions/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "draft": {
                  "project": {
                    "name": "example"
                  },
                  "roadmaps": [
                    {
                      "name": "example",
                      "items": []
                    }
                  ]
                }
              }
            },
            "effects": "May change state through PATCH /api/projects/ai/sessions/{id}. 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/projects/ai/sessions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_sessions.delete",
          "title": "Projects Ai Sessions Delete",
          "description": "Call DELETE /projects/ai/sessions/{id}.",
          "method": "DELETE",
          "path": "/api/projects/ai/sessions/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Sessions Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/sessions/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/projects/ai/sessions/{id}. 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/projects/ai/sessions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_sessions.turns.create",
          "title": "Projects Ai Sessions Turns Create",
          "description": "Call POST /projects/ai/sessions/{id}/turns.",
          "method": "POST",
          "path": "/api/projects/ai/sessions/{id}/turns",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "message": {
                "type": "string",
                "minLength": 1,
                "maxLength": 4000
              }
            },
            "required": [
              "id",
              "message"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Sessions Turns Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "message": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/sessions/00000000-0000-4000-8000-000000000000/turns",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "message": "example"
              }
            },
            "effects": "May change state through POST /api/projects/ai/sessions/{id}/turns. 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/projects/ai/sessions/*/turns",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_sessions.apply",
          "title": "Projects Ai Sessions Apply",
          "description": "Call POST /projects/ai/sessions/{id}/apply.",
          "method": "POST",
          "path": "/api/projects/ai/sessions/{id}/apply",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Sessions Apply.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/sessions/00000000-0000-4000-8000-000000000000/apply",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/projects/ai/sessions/{id}/apply. 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/projects/ai/sessions/*/apply",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.create",
          "title": "Items Create",
          "description": "Call POST /items.",
          "method": "POST",
          "path": "/api/items",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "roadmapId": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              "description": {
                "type": "string",
                "maxLength": 1000
              },
              "status": {
                "type": "string",
                "enum": [
                  "planned",
                  "in_progress",
                  "completed",
                  "blocked"
                ]
              },
              "priority": {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              },
              "startDate": {
                "type": "string"
              },
              "endDate": {
                "type": "string"
              },
              "assignee": {
                "type": "string",
                "maxLength": 255
              },
              "assigneeUserId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              "parentItemId": {
                "type": "string"
              }
            },
            "required": [
              "roadmapId",
              "name",
              "status",
              "priority"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Items Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "roadmapId": "example",
              "name": "example",
              "status": "planned",
              "priority": "low"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items",
              "body": {
                "roadmapId": "example",
                "name": "example",
                "status": "planned",
                "priority": "low"
              }
            },
            "effects": "May change state through POST /api/items. 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/items",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.update",
          "title": "Items Update",
          "description": "Call PATCH /items/{id}.",
          "method": "PATCH",
          "path": "/api/items/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              "description": {
                "type": "string",
                "maxLength": 1000
              },
              "status": {
                "type": "string",
                "enum": [
                  "planned",
                  "in_progress",
                  "completed",
                  "blocked"
                ]
              },
              "priority": {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              },
              "startDate": {
                "type": "string"
              },
              "endDate": {
                "type": "string"
              },
              "assignee": {
                "type": "string",
                "maxLength": 255
              },
              "assigneeUserId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              "parentItemId": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Items Update.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PATCH /api/items/{id}. 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/items/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.delete",
          "title": "Items Delete",
          "description": "Call DELETE /items/{id}.",
          "method": "DELETE",
          "path": "/api/items/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Items Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/items/{id}. 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/items/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.presentations.generate",
          "title": "Items Presentations Generate",
          "description": "Call POST /items/{id}/presentations/generate.",
          "method": "POST",
          "path": "/api/items/{id}/presentations/generate",
          "permission": "reports:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "template": {
                "type": "string",
                "enum": [
                  "executive_status_update",
                  "steering_committee_review",
                  "program_increment_review",
                  "customer_safe_roadmap_update",
                  "delivery_risk_review"
                ]
              },
              "scenarioId": {
                "type": "string"
              },
              "liveLinked": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Items Presentations Generate.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000/presentations/generate",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/items/{id}/presentations/generate. 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/items/*/presentations/generate",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.guest_shares.create",
          "title": "Items Guest Shares Create",
          "description": "Execute Items Guest Shares Create in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/items/{id}/share-guest",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "expiresInHours": {
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 1,
                    "maximum": 720
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "accessMode": {
                "type": "string",
                "enum": [
                  "view",
                  "edit"
                ]
              },
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000/share-guest",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/items/{id}/share-guest. 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/items/*/share-guest",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.guest_shares.list",
          "title": "Items Guest Shares List",
          "description": "Execute Items Guest Shares List in Topolo Roadmapper.",
          "method": "GET",
          "path": "/api/items/{id}/share-guest",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000/share-guest",
              "body": null
            },
            "effects": "Reads state through GET /api/items/{id}/share-guest 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/items/*/share-guest",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.guest_shares.revoke",
          "title": "Items Guest Shares Revoke",
          "description": "Execute Items Guest Shares Revoke in Topolo Roadmapper.",
          "method": "DELETE",
          "path": "/api/items/{id}/share-guest/{token}",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "token": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id",
              "token"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "token": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000/share-guest/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/items/{id}/share-guest/{token}. 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/items/*/share-guest/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.guest_shares.invite",
          "title": "Items Guest Shares Invite",
          "description": "Execute Items Guest Shares Invite in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/items/{id}/share-guest/{token}/invite-email",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "token": {
                "type": "string",
                "minLength": 1
              },
              "recipientEmail": {
                "type": "string",
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              }
            },
            "required": [
              "id",
              "token",
              "recipientEmail"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "token": "example",
              "recipientEmail": "user@example.com"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000/share-guest/example/invite-email",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "token": "example",
                "recipientEmail": "user@example.com"
              }
            },
            "effects": "May change state through POST /api/items/{id}/share-guest/{token}/invite-email. 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/items/*/share-guest/*/invite-email",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.guest_scope.create",
          "title": "Items Guest Scope Create",
          "description": "Execute Items Guest Scope Create in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/items/guest/{scope}/items",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "scope": {
                "type": "string",
                "minLength": 1
              },
              "roadmapId": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              "description": {
                "type": "string",
                "maxLength": 1000
              },
              "status": {
                "type": "string",
                "enum": [
                  "planned",
                  "in_progress",
                  "completed",
                  "blocked"
                ]
              },
              "priority": {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              },
              "startDate": {
                "type": "string"
              },
              "endDate": {
                "type": "string"
              },
              "assignee": {
                "type": "string",
                "maxLength": 255
              },
              "parentItemId": {
                "type": "string"
              }
            },
            "required": [
              "scope",
              "roadmapId",
              "name",
              "status",
              "priority"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "scope": "example",
              "roadmapId": "example",
              "name": "example",
              "status": "planned",
              "priority": "low"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/guest/example/items",
              "body": {
                "scope": "example",
                "roadmapId": "example",
                "name": "example",
                "status": "planned",
                "priority": "low"
              }
            },
            "effects": "May change state through POST /api/items/guest/{scope}/items. 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/items/guest/*/items",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.guest_scope.update",
          "title": "Items Guest Scope Update",
          "description": "Execute Items Guest Scope Update in Topolo Roadmapper.",
          "method": "PATCH",
          "path": "/api/items/guest/{scope}/items/{id}",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "scope": {
                "type": "string",
                "minLength": 1
              },
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              "description": {
                "type": "string",
                "maxLength": 1000
              },
              "status": {
                "type": "string",
                "enum": [
                  "planned",
                  "in_progress",
                  "completed",
                  "blocked"
                ]
              },
              "priority": {
                "type": "string",
                "enum": [
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              },
              "startDate": {
                "type": "string"
              },
              "endDate": {
                "type": "string"
              },
              "assignee": {
                "type": "string",
                "maxLength": 255
              },
              "parentItemId": {
                "type": "string"
              }
            },
            "required": [
              "scope",
              "id"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "scope": "example",
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/guest/example/items/00000000-0000-4000-8000-000000000000",
              "body": {
                "scope": "example",
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PATCH /api/items/guest/{scope}/items/{id}. 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/items/guest/*/items/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.list",
          "title": "Roadmaps List",
          "description": "Execute Roadmaps List in Topolo Roadmapper.",
          "method": "GET",
          "path": "/api/roadmaps",
          "permission": "roadmaps:read",
          "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",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps",
              "body": null
            },
            "effects": "Reads state through GET /api/roadmaps 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/roadmaps",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.create",
          "title": "Roadmaps Create",
          "description": "Call POST /roadmaps.",
          "method": "POST",
          "path": "/api/roadmaps",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "projectId": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "description": {
                "type": "string",
                "maxLength": 500
              },
              "startDate": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              "endDate": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              }
            },
            "required": [
              "projectId",
              "name"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Roadmaps Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "projectId": "example",
              "name": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps",
              "body": {
                "projectId": "example",
                "name": "example"
              }
            },
            "effects": "May change state through POST /api/roadmaps. 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/roadmaps",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.update",
          "title": "Roadmaps Update",
          "description": "Call PUT /roadmaps/{id}.",
          "method": "PUT",
          "path": "/api/roadmaps/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "projectId": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "description": {
                "type": "string",
                "maxLength": 500
              },
              "startDate": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              "endDate": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              "status": {
                "type": "string",
                "enum": [
                  "active",
                  "completed",
                  "archived"
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Roadmaps Update.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/roadmaps/{id}. 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/roadmaps/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.delete",
          "title": "Roadmaps Delete",
          "description": "Call DELETE /roadmaps/{id}.",
          "method": "DELETE",
          "path": "/api/roadmaps/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Roadmaps Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/roadmaps/{id}. 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/roadmaps/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.presentations.generate",
          "title": "Roadmaps Presentations Generate",
          "description": "Call POST /roadmaps/{id}/presentations/generate.",
          "method": "POST",
          "path": "/api/roadmaps/{id}/presentations/generate",
          "permission": "reports:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "template": {
                "type": "string",
                "enum": [
                  "executive_status_update",
                  "steering_committee_review",
                  "program_increment_review",
                  "customer_safe_roadmap_update",
                  "delivery_risk_review"
                ]
              },
              "scenarioId": {
                "type": "string"
              },
              "liveLinked": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Roadmaps Presentations Generate.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000/presentations/generate",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/roadmaps/{id}/presentations/generate. 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/roadmaps/*/presentations/generate",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.guest_shares.create",
          "title": "Roadmaps Guest Shares Create",
          "description": "Execute Roadmaps Guest Shares Create in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/roadmaps/{id}/share-guest",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "expiresInHours": {
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 1,
                    "maximum": 720
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "accessMode": {
                "type": "string",
                "enum": [
                  "view",
                  "edit"
                ]
              },
              "allowItemNavigation": {
                "type": "boolean"
              },
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000/share-guest",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/roadmaps/{id}/share-guest. 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/roadmaps/*/share-guest",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.guest_shares.list",
          "title": "Roadmaps Guest Shares List",
          "description": "Execute Roadmaps Guest Shares List in Topolo Roadmapper.",
          "method": "GET",
          "path": "/api/roadmaps/{id}/share-guest",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000/share-guest",
              "body": null
            },
            "effects": "Reads state through GET /api/roadmaps/{id}/share-guest 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/roadmaps/*/share-guest",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.guest_shares.revoke",
          "title": "Roadmaps Guest Shares Revoke",
          "description": "Execute Roadmaps Guest Shares Revoke in Topolo Roadmapper.",
          "method": "DELETE",
          "path": "/api/roadmaps/{id}/share-guest/{token}",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "token": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id",
              "token"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "token": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000/share-guest/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/roadmaps/{id}/share-guest/{token}. 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/roadmaps/*/share-guest/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.guest_shares.invite",
          "title": "Roadmaps Guest Shares Invite",
          "description": "Execute Roadmaps Guest Shares Invite in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/roadmaps/{id}/share-guest/{token}/invite-email",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "token": {
                "type": "string",
                "minLength": 1
              },
              "recipientEmail": {
                "type": "string",
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              }
            },
            "required": [
              "id",
              "token",
              "recipientEmail"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "token": "example",
              "recipientEmail": "user@example.com"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000/share-guest/example/invite-email",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "token": "example",
                "recipientEmail": "user@example.com"
              }
            },
            "effects": "May change state through POST /api/roadmaps/{id}/share-guest/{token}/invite-email. 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/roadmaps/*/share-guest/*/invite-email",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "dependencies.create",
          "title": "Dependencies Create",
          "description": "Call POST /dependencies.",
          "method": "POST",
          "path": "/api/dependencies",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "fromItemId": {
                "type": "string",
                "minLength": 1
              },
              "toItemId": {
                "type": "string",
                "minLength": 1
              },
              "type": {
                "type": "string",
                "enum": [
                  "blocks",
                  "requires",
                  "related"
                ]
              }
            },
            "required": [
              "fromItemId",
              "toItemId",
              "type"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Dependencies Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "fromItemId": "example",
              "toItemId": "example",
              "type": "blocks"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/dependencies",
              "body": {
                "fromItemId": "example",
                "toItemId": "example",
                "type": "blocks"
              }
            },
            "effects": "May change state through POST /api/dependencies. 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/dependencies",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "dependencies.delete",
          "title": "Dependencies Delete",
          "description": "Call DELETE /dependencies/{id}.",
          "method": "DELETE",
          "path": "/api/dependencies/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Dependencies Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/dependencies/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/dependencies/{id}. 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/dependencies/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "comments.create",
          "title": "Comments Create",
          "description": "Call POST /comments.",
          "method": "POST",
          "path": "/api/comments",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "roadmapItemId": {
                "type": "string",
                "minLength": 1
              },
              "content": {
                "type": "string",
                "minLength": 1
              },
              "mentionedUserIds": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 255
                },
                "maxItems": 50
              }
            },
            "required": [
              "roadmapItemId",
              "content"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Comments Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "roadmapItemId": "example",
              "content": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/comments",
              "body": {
                "roadmapItemId": "example",
                "content": "example"
              }
            },
            "effects": "May change state through POST /api/comments. 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/comments",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "comments.update",
          "title": "Comments Update",
          "description": "Call PUT /comments/{commentId}.",
          "method": "PUT",
          "path": "/api/comments/{commentId}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "commentId": {
                "type": "string",
                "minLength": 1
              },
              "content": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "commentId",
              "content"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Comments Update.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "commentId": "example",
              "content": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/comments/example",
              "body": {
                "commentId": "example",
                "content": "example"
              }
            },
            "effects": "May change state through PUT /api/comments/{commentId}. 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/comments/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "comments.delete",
          "title": "Comments Delete",
          "description": "Call DELETE /comments/{commentId}.",
          "method": "DELETE",
          "path": "/api/comments/{commentId}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "commentId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "commentId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Comments Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "commentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/comments/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/comments/{commentId}. 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/comments/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.upload",
          "title": "Attachments Upload",
          "description": "Call POST /attachments/upload.",
          "method": "POST",
          "path": "/api/attachments/upload",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "roadmapItemId": {
                "type": "string",
                "minLength": 1
              },
              "fileName": {
                "type": "string",
                "minLength": 1
              },
              "contentType": {
                "type": "string",
                "minLength": 1
              },
              "base64": {
                "type": "string",
                "minLength": 1,
                "maxLength": 14000000
              }
            },
            "required": [
              "roadmapItemId",
              "fileName",
              "contentType",
              "base64"
            ],
            "additionalProperties": false
          },
          "agentContract": {
            "upload": {
              "profile": "inline-base64",
              "contentField": "base64",
              "contentTypeField": "contentType",
              "fileNameField": "fileName",
              "maxBytes": 10485760,
              "acceptedContentTypes": [
                "*/*"
              ]
            }
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Attachments Upload.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "roadmapItemId": "example",
              "fileName": "example",
              "contentType": "example",
              "base64": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/attachments/upload",
              "body": {
                "roadmapItemId": "example",
                "fileName": "example",
                "contentType": "example",
                "base64": "example"
              }
            },
            "effects": "May change state through POST /api/attachments/upload. 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/attachments/upload",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.delete",
          "title": "Attachments Delete",
          "description": "Call DELETE /attachments/{attachmentId}.",
          "method": "DELETE",
          "path": "/api/attachments/{attachmentId}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "attachmentId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "attachmentId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Attachments Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "attachmentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/attachments/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/attachments/{attachmentId}. 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/attachments/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "reports.generate",
          "title": "Reports Generate",
          "description": "Call POST /reports/generate.",
          "method": "POST",
          "path": "/api/reports/generate",
          "permission": "reports:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string"
              },
              "filters": {
                "type": "object",
                "properties": {
                  "projectIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "roadmapIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "statuses": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "priorities": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "dateRange": {
                    "type": "object",
                    "properties": {
                      "start": {
                        "type": "string"
                      },
                      "end": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "start",
                      "end"
                    ],
                    "additionalProperties": false
                  },
                  "assignees": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "title",
              "filters"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Reports Generate.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "title": "example",
              "filters": {
                "projectIds": [
                  "example"
                ],
                "roadmapIds": [
                  "example"
                ],
                "statuses": [
                  "example"
                ]
              }
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/reports/generate",
              "body": {
                "title": "example",
                "filters": {
                  "projectIds": [
                    "example"
                  ],
                  "roadmapIds": [
                    "example"
                  ],
                  "statuses": [
                    "example"
                  ]
                }
              }
            },
            "effects": "May change state through POST /api/reports/generate. 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/reports/generate",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "imports.csv",
          "title": "Imports Csv",
          "description": "Execute Imports Csv in Topolo Roadmapper.",
          "method": "POST",
          "path": "/api/import",
          "permission": "roadmaps:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "csv": {
                "type": "string",
                "minLength": 1
              },
              "importType": {
                "type": "string",
                "enum": [
                  "roadmaps",
                  "projects",
                  "combined"
                ]
              }
            },
            "required": [
              "csv"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "csv": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/import",
              "body": {
                "csv": "example"
              }
            },
            "effects": "May change state through POST /api/import. 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/import",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "planning.sessions.delete",
          "title": "Planning Sessions Delete",
          "description": "Call DELETE /planning/sessions/{id}.",
          "method": "DELETE",
          "path": "/api/planning/sessions/{id}",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Planning Sessions Delete.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/planning/sessions/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/planning/sessions/{id}. 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/planning/sessions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "planning.turns.create",
          "title": "Planning Turns Create",
          "description": "Call POST /planning/sessions/{id}/turns.",
          "method": "POST",
          "path": "/api/planning/sessions/{id}/turns",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "message": {
                "type": "string",
                "minLength": 1,
                "maxLength": 4000
              },
              "document": {}
            },
            "required": [
              "id",
              "message"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Planning Turns Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "message": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/planning/sessions/00000000-0000-4000-8000-000000000000/turns",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "message": "example"
              }
            },
            "effects": "May change state through POST /api/planning/sessions/{id}/turns. 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/planning/sessions/*/turns",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "planning.scenarios.create",
          "title": "Planning Scenarios Create",
          "description": "Call POST /planning/sessions/{id}/scenarios.",
          "method": "POST",
          "path": "/api/planning/sessions/{id}/scenarios",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "document": {}
            },
            "required": [
              "id",
              "name"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Planning Scenarios Create.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "name": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/planning/sessions/00000000-0000-4000-8000-000000000000/scenarios",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "name": "example"
              }
            },
            "effects": "May change state through POST /api/planning/sessions/{id}/scenarios. 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/planning/sessions/*/scenarios",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "planning.apply",
          "title": "Planning Apply",
          "description": "Call POST /planning/sessions/{id}/apply.",
          "method": "POST",
          "path": "/api/planning/sessions/{id}/apply",
          "permission": "roadmaps:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "document": {}
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Planning Apply.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/planning/sessions/00000000-0000-4000-8000-000000000000/apply",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/planning/sessions/{id}/apply. 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/planning/sessions/*/apply",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "presentations.update",
          "title": "Presentations Update",
          "description": "Call PATCH /presentations/{id}.",
          "method": "PATCH",
          "path": "/api/presentations/{id}",
          "permission": "reports:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "maxLength": 160
              },
              "summary": {
                "type": "string",
                "maxLength": 1200
              },
              "slides": {
                "type": "array",
                "items": {}
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Presentations Update.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/presentations/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PATCH /api/presentations/{id}. 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/presentations/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "presentations.export",
          "title": "Presentations Export",
          "description": "Call POST /presentations/{id}/export.",
          "method": "POST",
          "path": "/api/presentations/{id}/export",
          "permission": "reports:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "format": {
                "type": "string",
                "enum": [
                  "web",
                  "pptx"
                ]
              }
            },
            "required": [
              "id",
              "format"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Presentations Export.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "format": "web"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/presentations/00000000-0000-4000-8000-000000000000/export",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "format": "web"
              }
            },
            "effects": "May change state through POST /api/presentations/{id}/export. 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/presentations/*/export",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "workspaces.delete",
          "title": "Workspaces Archive",
          "description": "Archive an empty Roadmapper workspace: Roadmapper confirms it holds no planning data, then asks the platform to archive it.",
          "method": "DELETE",
          "path": "/api/roadmapper/workspaces/{workspaceId}",
          "permission": "workspace:delete",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "workspaceId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "workspaceId"
            ],
            "additionalProperties": false
          },
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "target": "api",
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "workspaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmapper/workspaces/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/roadmapper/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/roadmapper/workspaces/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "widget.get",
          "title": "Get widget summary",
          "description": "Get the TopoloOne widget summary for this service.",
          "method": "GET",
          "path": "/api/widget",
          "permission": "projects:read",
          "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",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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": "projects.get",
          "title": "Projects Get",
          "description": "Call GET /projects/{id}.",
          "method": "GET",
          "path": "/api/projects/{id}",
          "permission": "projects:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/{id} 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/projects/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.dashboard.get",
          "title": "Projects Dashboard Get",
          "description": "Call GET /projects/{id}/dashboard.",
          "method": "GET",
          "path": "/api/projects/{id}/dashboard",
          "permission": "projects:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Dashboard Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/dashboard",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/{id}/dashboard 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/projects/*/dashboard",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.planning_feed.get",
          "title": "Projects Planning Feed Get",
          "description": "Call GET /projects/{id}/planning-feed.",
          "method": "GET",
          "path": "/api/projects/{id}/planning-feed",
          "permission": "projects:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Planning Feed Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/planning-feed",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/{id}/planning-feed 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/projects/*/planning-feed",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.planning_sessions.list",
          "title": "Projects Planning Sessions List",
          "description": "Call GET /projects/{id}/planning/sessions.",
          "method": "GET",
          "path": "/api/projects/{id}/planning/sessions",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Planning Sessions List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/00000000-0000-4000-8000-000000000000/planning/sessions",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/{id}/planning/sessions 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/projects/*/planning/sessions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_status.get",
          "title": "Projects Ai Status Get",
          "description": "Call GET /projects/ai/status.",
          "method": "GET",
          "path": "/api/projects/ai/status",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Status Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/status",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/ai/status 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/projects/ai/status",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_sessions.list",
          "title": "Projects Ai Sessions List",
          "description": "Call GET /projects/ai/sessions.",
          "method": "GET",
          "path": "/api/projects/ai/sessions",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Sessions List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/sessions",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/ai/sessions 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/projects/ai/sessions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "projects.ai_sessions.get",
          "title": "Projects Ai Sessions Get",
          "description": "Call GET /projects/ai/sessions/{id}.",
          "method": "GET",
          "path": "/api/projects/ai/sessions/{id}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Projects Ai Sessions Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/projects/ai/sessions/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/projects/ai/sessions/{id} 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/projects/ai/sessions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "items.get",
          "title": "Items Get",
          "description": "Call GET /items/{id}.",
          "method": "GET",
          "path": "/api/items/{id}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Items Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/items/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/items/{id} 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/items/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.get",
          "title": "Roadmaps Get",
          "description": "Call GET /roadmaps/{id}.",
          "method": "GET",
          "path": "/api/roadmaps/{id}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Roadmaps Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/roadmaps/{id} 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/roadmaps/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "roadmaps.items.list",
          "title": "Roadmaps Items List",
          "description": "Call GET /roadmaps/{id}/items.",
          "method": "GET",
          "path": "/api/roadmaps/{id}/items",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Roadmaps Items List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/roadmaps/00000000-0000-4000-8000-000000000000/items",
              "body": null
            },
            "effects": "Reads state through GET /api/roadmaps/{id}/items 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/roadmaps/*/items",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "dependencies.item.list",
          "title": "Dependencies Item List",
          "description": "Call GET /dependencies/item/{id}.",
          "method": "GET",
          "path": "/api/dependencies/item/{id}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Dependencies Item List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/dependencies/item/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/dependencies/item/{id} 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/dependencies/item/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "comments.by_roadmap_item.list",
          "title": "Comments By Roadmap Item List",
          "description": "Call GET /comments/roadmap-item/{roadmapItemId}.",
          "method": "GET",
          "path": "/api/comments/roadmap-item/{roadmapItemId}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "roadmapItemId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "roadmapItemId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Comments By Roadmap Item List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "roadmapItemId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/comments/roadmap-item/example",
              "body": null
            },
            "effects": "Reads state through GET /api/comments/roadmap-item/{roadmapItemId} 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/comments/roadmap-item/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.by_roadmap_item.list",
          "title": "Attachments By Roadmap Item List",
          "description": "Call GET /attachments/roadmap-item/{roadmapItemId}.",
          "method": "GET",
          "path": "/api/attachments/roadmap-item/{roadmapItemId}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "roadmapItemId": {
                "type": "string",
                "minLength": 1
              },
              "includeDescendants": {
                "type": "string",
                "enum": [
                  "true",
                  "false"
                ]
              }
            },
            "required": [
              "roadmapItemId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Attachments By Roadmap Item List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "roadmapItemId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/attachments/roadmap-item/example",
              "body": null
            },
            "effects": "Reads state through GET /api/attachments/roadmap-item/{roadmapItemId} 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/attachments/roadmap-item/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.by_roadmap.list",
          "title": "Attachments By Roadmap List",
          "description": "Call GET /attachments/roadmap/{roadmapId}.",
          "method": "GET",
          "path": "/api/attachments/roadmap/{roadmapId}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "roadmapId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "roadmapId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Attachments By Roadmap List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "roadmapId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/attachments/roadmap/example",
              "body": null
            },
            "effects": "Reads state through GET /api/attachments/roadmap/{roadmapId} 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/attachments/roadmap/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.download",
          "title": "Attachments Download",
          "description": "Call GET /attachments/{attachmentId}/download.",
          "method": "GET",
          "path": "/api/attachments/{attachmentId}/download",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "attachmentId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "attachmentId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Attachments Download.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "attachmentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/attachments/example/download",
              "body": null
            },
            "effects": "Reads state through GET /api/attachments/{attachmentId}/download 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/attachments/*/download",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "planning.sessions.get",
          "title": "Planning Sessions Get",
          "description": "Call GET /planning/sessions/{id}.",
          "method": "GET",
          "path": "/api/planning/sessions/{id}",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Planning Sessions Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/planning/sessions/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/planning/sessions/{id} 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/planning/sessions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "planning.revisions.list",
          "title": "Planning Revisions List",
          "description": "Call GET /planning/sessions/{id}/revisions.",
          "method": "GET",
          "path": "/api/planning/sessions/{id}/revisions",
          "permission": "roadmaps:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Planning Revisions List.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/planning/sessions/00000000-0000-4000-8000-000000000000/revisions",
              "body": null
            },
            "effects": "Reads state through GET /api/planning/sessions/{id}/revisions 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/planning/sessions/*/revisions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "presentations.get",
          "title": "Presentations Get",
          "description": "Call GET /presentations/{id}.",
          "method": "GET",
          "path": "/api/presentations/{id}",
          "permission": "reports:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Presentations Get.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-roadmapper --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/presentations/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/presentations/{id} 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/presentations/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        }
      ],
      "action_coverage": {
        "status": "ok",
        "served_routes": 84,
        "matched_actions": 74,
        "declared_unserved_actions": [],
        "coverage_excluded_actions": [],
        "uncatalogued_routes": [],
        "ignored_routes": 10,
        "configured_exclusions": 6,
        "configuration_findings": [],
        "notes": [
          "5 manually-declared route(s)"
        ]
      },
      "runtime_contract_audit": {
        "status": "verified",
        "actions": 74,
        "contracts": 74,
        "contract_module": "topolo.action-contracts.mjs",
        "validator_sources": [
          "apps/api/src/index.ts"
        ],
        "authorization_sources": [
          "apps/api/src/index.ts"
        ],
        "findings": []
      }
    }
  ],
  "mobile_contracts": [
    {
      "source_path": "apps/TopoloRoadmapper/topolo.mobile-experience.json",
      "contract": {
        "version": "1.0.0",
        "status": "published",
        "mode": "native_capability",
        "appId": "app_topolo_roadmapper",
        "localizationNamespace": "roadmapper",
        "permissions": [
          "projects:read",
          "projects:write",
          "roadmaps:read",
          "roadmaps:write"
        ],
        "offlinePolicy": "read_through_cache",
        "fallbackPath": "/projects",
        "auth": {
          "audience": "topolo-roadmapper",
          "scopes": [
            "projects:read",
            "projects:write",
            "roadmaps:read",
            "roadmaps:write"
          ]
        },
        "routes": [
          {
            "path": "/projects",
            "apiPath": "/api/projects",
            "title": "Projects",
            "titleKey": "roadmapper.nav.projects",
            "template": "record.list",
            "dataSource": "roadmapper.projects.list",
            "detailRoute": "/projects/:id"
          },
          {
            "path": "/projects/:id",
            "apiPath": "/api/projects/:id",
            "title": "Project",
            "titleKey": "roadmapper.pages.projects.id.project",
            "template": "record.detail",
            "dataSource": "roadmapper.projects.detail"
          },
          {
            "path": "/roadmaps",
            "apiPath": "/api/roadmaps",
            "title": "Roadmaps",
            "titleKey": "roadmapper.nav.roadmaps",
            "template": "record.list",
            "dataSource": "roadmapper.roadmaps.list",
            "detailRoute": "/roadmaps/:id"
          },
          {
            "path": "/roadmaps/:id",
            "apiPath": "/api/roadmaps/:id",
            "title": "Roadmap",
            "titleKey": "roadmapper.pages.roadmaps.roadmap",
            "template": "record.detail",
            "dataSource": "roadmapper.roadmaps.detail"
          }
        ]
      }
    }
  ],
  "package_manifests": [],
  "deployment_configs": [],
  "source_signals": {
    "api_routes": [
      {
        "method": "ALL",
        "path": "/health",
        "source_path": "apps/TopoloRoadmapper/apps/api/src/index.ts"
      },
      {
        "method": "ALL",
        "path": "/api/widget",
        "source_path": "apps/TopoloRoadmapper/apps/api/src/index.ts"
      },
      {
        "method": "ALL",
        "path": "/",
        "source_path": "apps/TopoloRoadmapper/apps/api/src/index.ts"
      }
    ],
    "ui_routes": [
      {
        "path": "/dashboard",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/calendar",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/projects",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/projects/new",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/projects/new/manual",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/projects/:id",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/projects/:id/dashboard",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/roadmaps",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/roadmaps/new",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/roadmaps/:id",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/roadmap-items/:id",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/presentations/:id",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/settings",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/settings/:section",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/import",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/export",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/reports",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/getting-started",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/projects/guest/:token",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/roadmaps/guest/:token",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/roadmap-items/guest/:token",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/App.tsx"
      },
      {
        "path": "/dashboard",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/app-routes.tsx"
      },
      {
        "path": "/calendar",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/app-routes.tsx"
      },
      {
        "path": "/projects",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/app-routes.tsx"
      },
      {
        "path": "/roadmaps",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/app-routes.tsx"
      },
      {
        "path": "/reports",
        "source_path": "apps/TopoloRoadmapper/apps/web/src/app-routes.tsx"
      }
    ],
    "test_cases": [],
    "database_tables": []
  },
  "documentation": {
    "declared_paths": [
      "applications/roadmapper",
      "internal/apps/roadmapper"
    ],
    "present_paths": [
      "applications/roadmapper",
      "internal/apps/roadmapper"
    ],
    "missing_paths": [],
    "human_reference": "/systems/topolo-roadmapper",
    "machine_reference": "/machine/systems/topolo-roadmapper.json",
    "action_examples": 74,
    "action_schemas": 74
  },
  "source_findings": []
}