{"ok":true,"generatedAt":"2026-05-30T11:01:48.081Z","version":"0.3.2","environment":"production","deployment":{"source":"cloudflare_version_metadata","workerVersionId":"32e3dc37-3073-4332-a6a3-d1f83ac0d76a","workerVersionTag":"","workerVersionTimestamp":"2026-05-17T23:41:33.341995Z","environment":"production"},"noExternalPublishingPerformed":true,"project":{"projectId":"agent-publish-control-plane","projectName":"Agent Publish Control Plane","version":"0.3.2","git":{"remote":"https://github.com/fkx2016/agent-publish-control-plane.git","branch":"main"},"cloudflare":{"stagingUrl":"https://agent-publish-control-plane-staging.fkurka.workers.dev","productionUrl":"https://agent-publish-control-plane.fkurka.workers.dev"},"hereNow":{"drivePrefix":"projects/agent-publish-control-plane"}},"routes":[{"method":"GET","path":"/","surface":"public","access":"public","writes":false,"description":"Public landing page with status and destination summary.","demoSafe":false},{"method":"GET","path":"/demo","surface":"demo","access":"public","writes":false,"description":"Outside-in new visitor demo for previewing artifact destinations with no external publishing.","demoSafe":true},{"method":"GET","path":"/demo/technical","surface":"demo","access":"public","writes":false,"description":"Preserved technical demo preview with route plan JSON and public checks.","demoSafe":true},{"method":"GET","path":"/demo/walkthrough","surface":"demo","access":"public","writes":false,"description":"Presenter walkthrough for the hosted demo path.","demoSafe":true},{"method":"GET","path":"/demo/readiness","surface":"demo","access":"public","writes":false,"description":"Live public readiness check for the demo surfaces and catalog.","demoSafe":true},{"method":"GET","path":"/demo/changelog","surface":"demo","access":"public","writes":false,"description":"Public demo release notes and safe-change history.","demoSafe":true},{"method":"GET","path":"/demo/visual-qa","surface":"demo","access":"public","writes":false,"description":"Static visual QA checklist for the hosted demo pages.","demoSafe":true},{"method":"GET","path":"/demo/auth","surface":"demo","access":"public","writes":false,"description":"Hosted auth readiness panel for Access activation and SaaS authorization shape.","demoSafe":true},{"method":"GET","path":"/demo/operator","surface":"demo","access":"public_demo","writes":false,"description":"Seeded read-only operator demo on an Access-separable path.","demoSafe":true},{"method":"GET","path":"/operator","surface":"web-ui","access":"public_shell","writes":false,"description":"Operator console shell; private data loads require a token.","demoSafe":false},{"method":"GET","path":"/operator/intake","surface":"web-ui","access":"public_shell","writes":false,"description":"Protected staging intake console for real text submissions and post-submit attachment upload.","demoSafe":false},{"method":"GET","path":"/operator?demo=1","surface":"web-ui","access":"legacy_public_demo","writes":false,"description":"Legacy seeded read-only operator demo query route; prefer /demo/operator for Access compatibility.","demoSafe":false},{"method":"GET","path":"/health","surface":"http-api","access":"public","writes":false,"description":"Service, environment, storage, and manifest-count health check.","demoSafe":true},{"method":"GET","path":"/v1/project","surface":"http-api","access":"public","writes":false,"description":"Project identity and hosted environment metadata.","demoSafe":false},{"method":"GET","path":"/v1/catalog","surface":"http-api","access":"public","writes":false,"description":"Read-only route catalog and destination taxonomy.","demoSafe":true},{"method":"GET","path":"/v1/access-policy-plan","surface":"http-api","access":"public","writes":false,"description":"Read-only Cloudflare Access protection plan for hosted operator and API routes.","demoSafe":true},{"method":"GET","path":"/v1/capabilities","surface":"http-api","access":"public","writes":false,"description":"Interfaces, artifact kinds, review profiles, adapters, and workspace model.","demoSafe":false},{"method":"GET","path":"/v1/destinations","surface":"http-api","access":"public","writes":false,"description":"Built-in destination registry with filters for kind, mode, status, and operation.","demoSafe":false},{"method":"GET","path":"/v1/destinations/:destinationId","surface":"http-api","access":"public","writes":false,"description":"One destination definition with adapter operations and credential requirements.","demoSafe":false},{"method":"GET","path":"/v1/status","surface":"http-api","access":"public","writes":false,"description":"Public manifest and target summary.","demoSafe":false},{"method":"GET","path":"/v1/demo/showcase","surface":"demo-api","access":"public","writes":false,"description":"Browser-safe hosted demo preview JSON.","demoSafe":true},{"method":"GET","path":"/v1/demo/operator-state","surface":"demo-api","access":"public","writes":false,"description":"Sanitized seeded operator-console state for the hosted demo.","demoSafe":true},{"method":"GET","path":"/v1/demo/release-notes","surface":"demo-api","access":"public","writes":false,"description":"Release notes and deployment metadata for the current demo build.","demoSafe":true},{"method":"GET","path":"/v1/demo/transcript","surface":"demo-api","access":"public","writes":false,"description":"Short, technical, or agent-facing demo transcript data.","demoSafe":true},{"method":"GET","path":"/v1/demo/visual-qa","surface":"demo-api","access":"public","writes":false,"description":"Static visual QA manifest and expected page anchors.","demoSafe":true},{"method":"GET","path":"/v1/workspaces","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"List hosted workspaces.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/access-readiness","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"Summarize Access identity, membership, and trust-gate readiness for one workspace.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/access-activation-status","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"Summarize the Cloudflare Access activation lifecycle phase, blockers, timeline, and next safe command for one workspace.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/membership-seeding-plan","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"Plan non-mutating workspace membership seeds for Cloudflare Access user and service identities.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/memberships","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"List workspace memberships.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/membership-invitations","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Validate a future workspace member invitation without sending email.","demoSafe":false},{"method":"PATCH","path":"/v1/workspaces/:workspaceId/memberships/:userId","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Validate a future workspace member role change without mutating membership state.","demoSafe":false},{"method":"DELETE","path":"/v1/workspaces/:workspaceId/memberships/:userId","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Validate a future workspace member disable request without mutating membership state.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/destinations","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"Workspace-enabled destinations and proposals.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/destinations/:destinationId/override","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Update destination availability and priority for a workspace.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/destination-proposals","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"List agent or operator destination proposals.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/destination-proposals","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Propose a destination for operator review.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/destination-proposals/:destinationId/decision","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Approve or reject a destination proposal.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/provider-connections","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"List provider connection records and non-secret readiness requirements.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/provider-connections","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Record provider connection metadata using secret references only.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/provider-readiness","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"Check configured, local-only, assisted, and missing-setup destination readiness.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/provider-setup-actions","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Turn a readiness gap into a planned non-secret provider setup record.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/provider-setup-validations","surface":"workspace-api","access":"operator_or_write_token","writes":true,"description":"Validate or record non-secret evidence for provider setup.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/routing-policies","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"List built-in and workspace routing policies.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/routing-policies","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Create or update a workspace routing policy.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/target-plan","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"Plan destinations for an artifact kind, risk, and review profile.","demoSafe":false},{"method":"POST","path":"/v1/workspaces/:workspaceId/intake-submissions","surface":"workspace-api","access":"manifest_write_token","writes":true,"description":"Staging-only protected text intake that stores the submitted artifact and returns a dry-run destination plan.","demoSafe":false},{"method":"GET","path":"/v1/workspaces/:workspaceId/audit-logs","surface":"workspace-api","access":"operator_read_token","writes":false,"description":"List workspace audit log rows with optional action, actor, and resource filters.","demoSafe":false},{"method":"GET","path":"/v1/events","surface":"operator-api","access":"operator_read_token","writes":false,"description":"List publish event ledger entries.","demoSafe":false},{"method":"GET","path":"/v1/publish-runs","surface":"operator-api","access":"operator_read_token","writes":false,"description":"List first-class publish runs and queue state.","demoSafe":false},{"method":"POST","path":"/v1/publish-runs/:runId/lifecycle","surface":"operator-api","access":"manifest_write_token","writes":true,"description":"Move a publish run through claim, running, waiting-local, retry, or terminal states.","demoSafe":false},{"method":"POST","path":"/v1/operator-submissions","surface":"operator-api","access":"manifest_write_token","writes":true,"description":"Submit an artifact to the control plane and optionally apply target planning.","demoSafe":false},{"method":"GET","path":"/v1/manifests","surface":"operator-api","access":"operator_read_token","writes":false,"description":"List manifests for the selected workspace.","demoSafe":false},{"method":"POST","path":"/v1/manifests","surface":"operator-api","access":"manifest_write_token","writes":true,"description":"Sync or upsert a manifest.","demoSafe":false},{"method":"GET","path":"/v1/manifests/:manifestId","surface":"operator-api","access":"operator_read_token","writes":false,"description":"Read one manifest.","demoSafe":false},{"method":"GET","path":"/v1/manifests/:manifestId/events","surface":"operator-api","access":"operator_read_token","writes":false,"description":"Read one manifest's event ledger.","demoSafe":false},{"method":"POST","path":"/v1/manifests/:manifestId/approval","surface":"operator-api","access":"manifest_write_token","writes":true,"description":"Request, approve, or reject manifest approval.","demoSafe":false},{"method":"POST","path":"/v1/manifests/:manifestId/publish-run","surface":"operator-api","access":"manifest_write_token","writes":true,"description":"Request a publish run for local or hosted execution.","demoSafe":false},{"method":"PUT","path":"/v1/manifests/:manifestId/media","surface":"operator-api","access":"manifest_write_token","writes":true,"description":"Upload a media artifact to R2 and update the manifest ledger.","demoSafe":false}],"routeCounts":{"total":59,"writeRoutes":17,"bySurface":{"public":1,"demo":8,"web-ui":3,"http-api":8,"demo-api":5,"workspace-api":23,"operator-api":11},"byAccess":{"public":21,"public_demo":1,"public_shell":2,"legacy_public_demo":1,"operator_read_token":17,"manifest_write_token":16,"operator_or_write_token":1}},"consistency":{"ok":true,"implementedRouteCount":54,"catalogRouteCount":59,"missingFromCatalog":[],"extraInCatalog":[]},"destinationTaxonomy":{"modes":["deploy","distribute","handoff"],"statuses":["assisted","planned","working"],"operations":["publish","render","revoke","status","sync","upload_media","validate"],"artifactKinds":["article","note","idea","code","app","image","video","dataset","workflow","conversation-branch"],"readinessStates":["configured","local_only","missing_setup","assisted"],"accessBoundaries":["public","public_demo","legacy_public_demo","public_shell","operator_read_token","operator_or_write_token","manifest_write_token"]},"destinations":[{"id":"here-now-drive","label":"here.now Drive","mode":"handoff","status":"working","supportedArtifactKinds":["article","note","idea","code","app","image","video","dataset","workflow","conversation-branch"],"requiresApproval":false,"operations":["validate","render","upload_media","sync","status"],"providers":["here.now"]},{"id":"r2-media","label":"Cloudflare R2 Media","mode":"handoff","status":"working","supportedArtifactKinds":["image","video","dataset","app"],"requiresApproval":false,"operations":["validate","render","upload_media","sync","status"],"providers":["cloudflare-r2"]},{"id":"here-now-sites","label":"here.now Sites","mode":"deploy","status":"working","supportedArtifactKinds":["article","note","idea","image","video","app"],"requiresApproval":true,"operations":["validate","render","publish","sync","status","revoke"],"providers":["here.now"]},{"id":"github","label":"GitHub Source Ledger","mode":"handoff","status":"working","supportedArtifactKinds":["article","note","idea","code","app","image","video","dataset","workflow","conversation-branch"],"requiresApproval":false,"operations":["validate","render","upload_media","sync","status"],"providers":["github"]},{"id":"github-release","label":"GitHub Release","mode":"distribute","status":"working","supportedArtifactKinds":["article","note","code","app","image","video","dataset","workflow"],"requiresApproval":true,"operations":["validate","render","publish","status"],"providers":["github"]},{"id":"kurka-labs-papers","label":"Kurka Labs Papers","mode":"deploy","status":"working","supportedArtifactKinds":["article","note","idea","conversation-branch"],"requiresApproval":true,"operations":["validate","render","publish","sync","status","revoke"],"providers":["github-cloudflare-pages"]},{"id":"substack-post","label":"Substack Post","mode":"distribute","status":"assisted","supportedArtifactKinds":["article","note"],"requiresApproval":true,"operations":["validate","render","publish","status"],"providers":["substack"]},{"id":"medium-post","label":"Medium Post","mode":"distribute","status":"assisted","supportedArtifactKinds":["article","note"],"requiresApproval":true,"operations":["validate","render","publish","status"],"providers":["medium"]},{"id":"linkedin-post","label":"LinkedIn Post","mode":"distribute","status":"assisted","supportedArtifactKinds":["article","note","idea"],"requiresApproval":true,"operations":["validate","render","publish","status"],"providers":["linkedin"]},{"id":"x-thread","label":"X Thread","mode":"distribute","status":"assisted","supportedArtifactKinds":["article","note","idea"],"requiresApproval":true,"operations":["validate","render","publish","status"],"providers":["x"]},{"id":"cloudflare","label":"Cloudflare","mode":"deploy","status":"planned","supportedArtifactKinds":["code","app","workflow"],"requiresApproval":true,"operations":["validate","render","publish","sync","status","revoke"],"providers":["cloudflare"]}],"demoReadiness":{"page":"/demo/readiness","smokeCommand":"npm run demo:smoke","showcaseCommand":"npm run demo:showcase","visualQaCommand":"npm run demo:visual-qa","publicChecks":["/health","/demo","/demo/technical","/demo/walkthrough","/demo/readiness","/demo/changelog","/demo/visual-qa","/demo/auth","/demo/operator","/v1/catalog","/v1/access-policy-plan","/v1/demo/showcase","/v1/demo/operator-state","/v1/demo/release-notes","/v1/demo/transcript","/v1/demo/visual-qa"],"safetyBoundary":["Read-only public demo endpoints only.","No provider setup records are written.","No secrets are read or returned.","No external publishing, queueing, or deployment is performed."]}}