{"ok": true, "data": {"source_packages": {"revision": "2026-10-20.source-lifecycle-v2", "source_manifest_resumable": true, "resource_bytes": null, "source_bytes": null, "file_count": null, "manifest_format": "NDJSON: path, sha256, size, role", "max_chunk_bytes": 8388608, "descriptor": {"required": ["entry", "profile", "manifest_sha256", "manifest_bytes", "dependencies", "provenance"], "profile": "vendored-web-v1", "entry": "exact manifest HTML path", "manifest": "SHA256 and byte length of the exact complete NDJSON manifest", "dependencies": "array of fixed name/version/path/sha256/source/license records; [] for no dependencies", "provenance": {"source": "actual source declaration", "license": "actual rights declaration"}, "optional": ["file_modes"]}, "transport_semantics": "2026-09-10.2 offset/checksum/status/complete; source-only adapter", "path": "/api/v1/shows/{show_id}/source-versions/", "lifecycle": {"sequence": ["create_or_resume", "upload_manifest", "seal", "upload_files", "build", "activate", "read_back_default", "browser_verify"], "upload_is_deployment": false, "ready_is_deployment": false, "default_run": "The stable Show links.blank serves the explicitly activated ready source version. A new upload or build does not change it. Latest means the latest successful selection, not the newest experimental upload.", "classic_pieces": "When runtime.renderer=source_package, replacing classic Pieces does not change default Run. Use this source package lifecycle for the original local repository; do not report a classic save as the package deployment.", "concurrency": "Read current generation; activate the intended version with that generation. A conflict requires reading the actual selected version before retrying; never blindly overwrite another deployment.", "rollback": "Activate a previously ready version with the current generation; retain the same Show PK/public_id and canonical links.", "prompt_history": "Activation atomically records a release checkpoint including the selected engine UUID/identity/artifact and generation. Optional release.prompt/parent_release_id bind the real prompt and parent. Legacy omission records an empty prompt, never an invented one.", "branches": "Release parent pointers support a history graph. Named branches, branch heads, merge and checkout are not implemented.", "visibility": "Selecting a runtime version does not publish the Show or grant access.", "replay": "Selecting the already active version is idempotent and creates no duplicate checkpoint. Record a follow-up prompt via the existing releases endpoint."}, "routes": {"versions": {"method": "GET/POST", "path": "/api/v1/shows/{show_id}/source-versions/", "scope": "shows:read/shows:write"}, "status": {"method": "GET", "path": "/api/v1/source-versions/{version_id}/", "scope": "shows:read"}, "files": {"method": "GET", "path": "/api/v1/source-versions/{version_id}/files/", "scope": "shows:read", "pagination": "after=last path; next is empty when complete"}, "upload": {"method": "GET/PATCH/POST/DELETE", "path": "/api/v1/source-versions/{version_id}/uploads/{transfer_id}/", "scope": "existing shows:read/assets:write transfer contract"}, "seal": {"method": "POST", "path": "/api/v1/source-versions/{version_id}/seal/", "scope": "shows:write"}, "build": {"method": "POST", "path": "/api/v1/source-versions/{version_id}/build/", "scope": "shows:write", "body": {"action": "build"}}, "activate": {"method": "POST", "path": "/api/v1/source-versions/{version_id}/activate/", "scope": "shows:write", "body": {"generation": "current integer", "release": {"prompt": "actual initiating prompt", "outcome_summary": "actual result", "parent_release_id": "optional owned release UUID"}}}, "read_back": {"method": "GET", "path": "/api/v1/shows/{show_id}/", "scope": "shows:read", "fields": ["runtime.active_version", "runtime.generation", "links.blank", "delivery.feedback_line"]}}, "profiles": ["vendored-web-v1"], "server_side_uploaded_scripts": false, "file_modes": {"optional_descriptor_field": "file_modes", "record": {"path": "exact NFC manifest JS/MJS path", "sha256": "exact manifest file sha256", "is_module": "strict boolean"}, "rules": "No duplicates or aliases; JS/MJS only; MJS requires true. Seal binds each path/hash to this tree. Included in source identity and new build artifact digest; omissions retain legacy inference."}, "runtime": "existing per-Show isolated origin; local vendored dependencies only"}, "schema": "zzd_developer_rest_capabilities_v1", "api_version": "2026-09-12", "base_path": "/api/v1", "transport": {"kind": "https_rest", "response_format": "application/json", "mcp": {"kind": "streamable_http", "endpoint": "/mcp/v1/", "authentication": "same scoped bearer"}, "endpoint_discovery": {"document": "/.well-known/zzd-agent.json", "fallback_profile": "canonical HTTPS origin plus /api/v1/ and /mcp/v1/", "redirects": "must not be followed with a bearer", "origin_policy": "clients pin locally allowed HTTPS origins; discovery cannot expand trust"}, "client_branches": [{"id": "remote_mcp", "fit": "AI hosts with an approved remote Streamable HTTP MCP origin", "endpoint": "/mcp/v1/"}, {"id": "local_stdio_bridge", "fit": "AI hosts that permit a local CLI subprocess but not direct remote MCP wiring", "command": "zzd-mcp", "status": "python_0.4_candidate_not_yet_published"}, {"id": "credentialed_sdk", "fit": "custom Python/Node agents needing typed transaction orchestration or streamed assets", "status": "0.4_candidate_not_yet_published"}, {"id": "direct_rest", "fit": "advanced clients that negotiate this capability document and preserve transaction semantics", "endpoint": "/api/v1/"}]}, "origin_policy": {"canonical_host_only": "https://zzd.show", "code_host_available": false}, "authentication": {"browser_auth": {"schema": "zzd.agent-browser-auth.v1", "enabled": true, "required_scope": "browser:login", "start_url": "https://zzd.show/auth/agent/", "client_url": "https://zzd.show/api/v1/browser-auth/client.py", "guide_url": "https://zzd.show/api/v1/browser-auth/guide/", "authorize_url": "https://zzd.show/api/v1/browser-auth/authorize/", "complete_url": "https://zzd.show/auth/agent/complete/", "session_url": "https://zzd.show/auth/agent/session/", "renew_url": "https://zzd.show/api/v1/browser-auth/renew/", "challenge_ttl_seconds": 180, "rolling_days": null, "permanent_default": true, "lifetime": "until_logout_or_revocation", "finite_bridge_renewal_days": null, "bearer_in_browser": false, "cookie_domain": "host-only", "browser_origins": [{"origin": "https://zzd.show", "start_url": "https://zzd.show/auth/agent/"}], "code_navigation": "Legacy code workspace links return to the main control origin; raw-code and Show runtime origins never receive account cookies", "private_browser": "supported; a fresh private context authorizes a fresh challenge using the same credential", "legacy_upgrade": "Owner enables browser:login on the existing credential; preserve token, worker and claims."}, "scheme": "Bearer", "header_example": "Authorization: Bearer <developer credential>", "session_cookie_fallback": false, "legacy_cli_token_fallback": false, "credential_control_plane": {"authentication": "signed-in browser session plus CSRF for mutations", "list": "/api/v1/developer-credentials/", "create": "/api/v1/developer-credentials/create/", "create_example": {"label": "Codex workstation", "scopes": ["identity:read", "shows:read", "shows:write", "assets:write"], "permanent": true}, "machine_connections": {"workspace": "/machines/", "pack_source_client": {"version": "2026-10-19.1", "python": "3.9+", "dependencies": "Python standard library only", "guide": "/pack/source-client/", "manifest": "/pack/source-client.json", "download": "/pack/source-client/2026-10-19.1/pack-source-client.py", "commands": ["prepare", "upload", "status", "publish", "bind", "download"], "source_protocol": "/api/v1/shows/{show_id}/source-versions/", "pack_protocol": "owner inventory/intake/contribution publish/exact bind", "default_visibility": "private", "explicit_publish_and_bind_approval": true, "source_export": "Explicit source_delivery declaration and exact export approval required.", "permissions": "Use the original authorized credential. Immutable private review needs owner/maintainer and write scope; public publication still requires publish scope. No credential is reissued or expanded.", "no_source_checkout_required": true, "no_worker_or_payment_calls": true, "source_modes": "Optional javascript_modes exact-path boolean map; hashes are derived from the original source. Live source_packages.file_modes capability required.", "javascript_modes": {"optional_intent_field": "javascript_modes", "value": "object of exact source JS/MJS path to strict boolean", "mjs": "true only", "omitted": "Original descriptor and state semantics unchanged", "server_capability": "/api/v1/capabilities/ source_packages.file_modes"}, "state_compatibility": "Use 2026-10-07.1 with original .1/.2/.06.1 state, credential and files; no version UUID, descriptor, saved helper_version or approval rewrite.", "read_recovery": {"methods": ["GET", "HEAD"], "body": "none", "max_attempts": 2, "total_io_budget_seconds": 45, "attempt_io_budget_seconds": 20, "transient_only": ["SSL EOF", "connection reset", "timeout", "incomplete metadata body"], "writes_automatically_retried": false, "binary_body_replayed": false, "permanent_TLS_HTTP_JSON_identity_permission_errors_retried": false}, "wasm": "Original WASM may travel in the source-versions inventory; execution is only in the isolated browser. Not a javascript_modes entry.", "active_connection_source_boundary": "Keep the active connection file and its hard links outside the source tree; move the same original credential without reissuing it. Unsafe existing inventories stop unchanged.", "dependency_diagnostics": {"preflight_before_new_state": true, "legacy_server_code_preserved": true, "fields": ["field", "entry_index", "reason", "duplicate_of", "retryable_unchanged", "next_action", "preserved"], "accepted_descriptor_identity_unchanged": true, "version_is_not_license_approval": true}, "pending_create_reconciliation": "status is read-only; exact owner/descriptor/transfer-credential match permits explicit upload to continue the same UUID without another create POST; absence stays unknown.", "historical_manifest_pointer": "Frozen 2026-10-06.1 metadata retains its original /pack/source-client.json pointer, which now selects current. Retrieve the old frozen body through /pack/source-client/2026-10-06.1/manifest.json.", "available_versions": ["2026-10-05.1", "2026-10-05.2", "2026-10-06.1", "2026-10-07.1", "2026-10-19.1"], "supported_connection_formats": ["zzd-client-connection-1", "zzd_mcp_bundle_v2"], "known_limitations": ["Legacy bundle v1 is explicitly unsupported.", "Older servers without review_private still require the original publish permission."], "version_history": "Allows existing owner write permission for immutable private Pack review on supporting servers; public publication and all original credential identities remain unchanged.", "v2_rest_base_paths": ["/api/v1", "/api/v1/"], "public_package_installation_advertised": false}, "format": "zzd-client-connection-1", "content_type": "application/zip", "software": {"release": "0.12.6-permanent-access", "version": "0.12.6", "package_version": "0.12.6", "sha256": "b815e41a69923a286b8556286cc623a3dce7aba8d94398bc474ad7dfa1b218a7", "filename": "zzd-machine-0.12.6.zip", "platform": "macOS", "python": "3.9 或以上", "workspace": "/machines/software/", "command": "zzd-machine", "authentication": "owner browser session; CSRF required for POST", "download": {"method": "POST", "path": "/machines/software/0.12.6-permanent-access/download/"}, "connection_separate": true, "public_package_installation_advertised": false}, "authentication": "owner browser session; CSRF required for POST", "generate": {"method": "POST", "path": "/machines/generate/", "fields": ["label", "request_id", "connection_id (optional)", "profile (tasks default; hightopo explicit)"], "semantics": "explicit independent version; existing credentials stay valid"}, "download": {"method": "POST", "path": "/machines/versions/{version_id}/download/", "semantics": "same stored ZIP bytes; no credential creation, rotation or revocation"}, "lifetime": {"default": "until_revoked", "expires_at": null, "permanent": true, "calendar_renewal_required": false, "download_retention": "same stored version remains downloadable while owner access and credential are active", "explicit_revocation_and_account_controls": true}, "renew": {"method": "POST", "path": "/machines/credentials/{credential_id}/renew/", "authentication": "original owner normal browser session; CSRF required; not bearer or agent browser session", "content_type": "application/x-www-form-urlencoded", "fields": ["request_id (new UUID for a new intent)", "days (optional; defaults to permanent)"], "default": "permanent", "days": ["permanent"], "legacy_days_compatibility": "Old finite days remain accepted as request input. Fresh machine/AI Bridge recovery becomes permanent without another confirmation; original request digests and exact historical replay stay unchanged.", "preflight": "Authenticate /api/v1/me/ with the original file first. If active, continue the original work without renewal; an old file date alone does not prove expiry.", "semantics": "Update the original credential to permanent once when it really expired; no day selection or recurring expiry confirmation. Keep the token, local file, scopes, worker and task state. No new download, key or task claim is required by this update.", "restrictions": "Revoked credentials and restricted accounts stay denied. Existing owner checks, active-connection cap and exact-request replay rules remain in force."}, "revoke": {"preview": "/machines/credentials/{credential_id}/revoke/", "method": "POST", "path": "/machines/credentials/{credential_id}/confirm-revoke/", "confirmation": "confirm must equal the selected credential_id; other versions stay valid"}, "scope": "tasks profile: workers, tasks and feedback; explicit hightopo profile additionally grants owned Show/source/assets read/write. Neither profile grants publication or browser login.", "hightopo": {"initializer": "/collaboration/start/", "guard_manifest": "/collaboration/worker-guard.json", "guard_version": "2026-10-18.2", "protocol_revision": "2026-09-09.2", "protocol": "/collaboration/protocol/hightopo/", "protocol_manifest": "/collaboration/protocol/hightopo.json", "formats": ["zzd-client-connection-1", "zzd_mcp_bundle_v2"], "rule": "Keep the original valid credential/context/state for an existing worker; new versions never adopt old claims."}, "worker_doctor": {"version": "2026-10-18.2", "manifest": "/collaboration/worker-doctor.json", "instructions": "/collaboration/recovery/", "read_only": true, "command": "python3 worker-doctor.py diagnose --root ORIGINAL_ROOT --context CURRENT_HOST_TASK_ID --bundle ORIGINAL_CONNECTION_FILE", "rule": "Keep the original installation, worker identity, context and pending command. Diagnose once and follow the authorized next action."}, "legacy_file_generation": {"status": "retired", "post_status": 410, "paths": ["/api/v1/developer-credentials/bridge.zzdmcp", "/api/v1/developer-credentials/agent-bootstrap.zzdmcp", "/api/v1/developer-credentials/ai-bridge.pem"]}, "existing_credentials": "existing connection identities and stored ZIP bytes are retained. Active, unexpired machine connections transition to no calendar expiry within their original scopes; expired connections require an explicit owner action on the original credential, and revoked credentials remain revoked. Separately chosen finite manual-key expiries stay explicit.", "legacy_secret_recovery": false}, "revoke": "/api/v1/developer-credentials/{credential_id}/revoke/", "token_visibility": "returned once at creation; store in a local secret manager and never commit it"}}, "response_envelope": {"success": {"ok": true, "data": "<resource>"}, "error": {"ok": false, "error": {"code": "<stable_code>", "message": "<message>", "request_id": "<correlation id>", "retryable": false, "retry_after_seconds": "<optional number>", "resolution": "<optional stable repair action>", "details": "<optional typed details>"}}, "retry_policy": {"automatic": "safe reads, or mutations carrying the same Idempotency-Key", "never_automatic": ["validation failures", "CAS/precondition failures", "ambiguous_mount_path", "permission failures"], "redirects": "never follow"}}, "lifecycle": {"mutation_default": "draft", "draft_visibility": "private", "archived_pack_release": {"mutable": false, "error_code": "immutable_pack_release", "http_status": 409, "retryable": false, "resolution": "contribute_new_pack_version", "rule": "A Pack version permanently preserves its metadata, source, assets and visibility. Submit a contribution to publish a new native version."}, "publish_route_id": "publication", "publish_requires": ["shows:publish", "confirm=true", "preflight_pass"], "publication_preflight": {"metadata": ["nonblank title", "nonblank description", "prompt at least 80 characters", "category", "at least one tag"], "presentation": ["verified thumbnail", "at least one HTML Piece"], "source": ["compiled is empty", "unplug is false", "forbidden runtime scan passes"]}, "transaction_protocol": {"version": "2026-08-20", "sequence": ["inspect", "plan", "sync_assets", "apply", "verify", "finalize_assets"], "failure_compensation": "rollback source first when applied, then asset tokens in reverse forward order", "visibility": "transactions only produce private drafts; publication remains the explicit publication route", "plan_token_max_age_seconds": 3600, "rollback_token_max_age_seconds": 86400, "asset_identity": "normalized mount_path + SHA-256 + size + role + context", "replacement": "replace=true plus exact if_match_sha256 from the current manifest", "legacy_duplicate_paths": "fail closed with ambiguous_mount_path; repair explicitly, never select or delete an arbitrary binding", "asset_pruning": "not supported in this protocol version"}}, "collaboration": {"schema": "zzd_agent_collaboration_v1", "api_version": "2026-08-28", "purpose": "Durable feedback, public/private work distribution, and single-worker lifecycle ownership.", "routes": [{"id": "worker_recovery_diagnosis", "method": "GET", "path": "/api/v1/collaboration/recovery/", "scope": "identity:read", "additional_scopes": ["workers:read", "tasks:read"], "receipt_scope": "events:read", "read_only": true, "instructions": "/collaboration/recovery/"}, {"id": "collaboration_policy", "method": "GET", "path": "/api/v1/collaboration/policy/", "scope": "identity:read"}, {"id": "worker_register", "method": "POST", "path": "/api/v1/collaboration/workers/", "scope": "workers:write", "content_type": "application/json", "idempotency_required": true}, {"id": "worker_list", "method": "GET", "path": "/api/v1/collaboration/workers/", "scope": "workers:read"}, {"id": "worker_detail", "method": "GET", "path": "/api/v1/collaboration/workers/{worker_id}/", "scope": "workers:read"}, {"id": "worker_close", "method": "POST", "path": "/api/v1/collaboration/workers/{worker_id}/close/", "scope": "workers:write", "content_type": "application/json", "idempotency_required": true}, {"id": "feedback_list", "method": "GET", "path": "/api/v1/collaboration/feedback/", "scope": "feedback:read"}, {"id": "feedback_submit", "method": "POST", "path": "/api/v1/collaboration/feedback/", "scope": "feedback:write", "content_type": "application/json", "idempotency_required": true}, {"id": "feedback_detail", "method": "GET", "path": "/api/v1/collaboration/feedback/{feedback_id}/", "scope": "feedback:read", "read_contract": {"read_only": true, "history_query": {"history_limit": {"minimum": 1, "maximum": 200, "default": 200}, "history_cursor": "opaque signed viewer/feedback/page-size/high-water continuation; expires after 3600 seconds"}, "default_page": "latest; events ascending by immutable numeric cursor", "history_metadata": "history_page: limit, returned, total, snapshot_high_water, order, has_older, has_newer, older_cursor, newer_cursor, next_cursor (older alias)", "public_summary": "Nonparticipant public feedback excludes events, private history cursors and artifacts; absence does not prove private completeness", "refresh": "Omit cursor for a fresh latest snapshot; append-only new events do not alter an existing window", "client_command": "zzd-machine --home ORIGINAL_HOME feedback-read --feedback FEEDBACK_UUID --output NEW_PRIVATE_RECORD", "client_release": "0.12.5-t10-feedback", "writes": false}}, {"id": "feedback_event", "method": "POST", "path": "/api/v1/collaboration/feedback/{feedback_id}/events/", "scope": "feedback:write", "content_type": "application/json", "idempotency_required": true}, {"id": "feedback_attachment", "method": "POST", "path": "/api/v1/collaboration/feedback/{feedback_id}/artifacts/", "scope": "feedback:write", "content_type": "multipart/form-data", "idempotency_required": true}, {"id": "task_list", "method": "GET", "path": "/api/v1/collaboration/tasks/", "scope": "tasks:read"}, {"id": "task_publish", "method": "POST", "path": "/api/v1/collaboration/tasks/", "scope": "tasks:write", "content_type": "application/json", "idempotency_required": true}, {"id": "task_detail", "method": "GET", "path": "/api/v1/collaboration/tasks/{task_id}/", "scope": "tasks:read"}, {"id": "task_message", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/messages/", "scope": "tasks:write", "content_type": "application/json", "idempotency_required": true}, {"id": "task_requeue", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/requeue/", "scope": "tasks:write", "content_type": "application/json", "idempotency_required": true, "staff_required": true}, {"id": "task_action", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/actions/", "scope": "tasks:claim", "content_type": "application/json", "idempotency_required": true}, {"id": "task_attachment", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/artifacts/", "scope": "tasks:claim", "content_type": "multipart/form-data", "idempotency_required": true}, {"id": "artifact_content", "method": "GET", "path": "/api/v1/collaboration/artifacts/{artifact_id}/content/", "scope": "identity:read", "conditional_scopes": ["feedback:read", "tasks:read"]}, {"id": "event_sync", "method": "GET", "path": "/api/v1/collaboration/events/?after={cursor}", "scope": "events:read"}], "show_workflow": {"schema": "zzd_hightopo_workflow_v2", "connection_revision": "2026-09-23.1", "initializer_path": "/collaboration/start/", "machine_workspace": "/machines/", "revision": "2026-09-09.2", "document_path": "/collaboration/protocol/hightopo/", "sha256": "7593d16517b4c9c9d1a8c712588dfe140a00b5fabc1a0065110baa7fd5891a9c", "default_mode": "internal_replication", "assistance_contract": {"revision": "2026-09-12.1", "policy_path": "/api/v1/collaboration/policy/", "task_field": "assistance", "client_delivery": "Show the concrete question, responsible party, next action and resume condition in the current user conversation. Technical errors are not repeated permission requests."}, "progress_record": {"transport": "Existing task checkpoint action payload; append-only online event, not new Show model fields", "optional_fields": {"workflow_revision": "2026-09-09.2", "development_mode": "internal_replication", "distribution_review": "publish_review_pending", "ai_postprocessing": "required_deferred"}, "rule": "Record applicable facts once and update when they change. These are worker-maintained status notes, not a new permission form or a legal clearance declaration."}, "rights_review": {"pending_status": "publish_review_pending", "blocks": "public_distribution_only_when_clearance_is_missing", "does_not_block": "authorized_local_observation_and_internal_development", "scope": "Record existing scoped user authorization once; do not repeatedly ask for the same authorization.", "limits": "No authentication/license/DRM bypass or removal of required legal notices. An actual inaccessible dependency remains a technical blocker.", "private_storage": "Use only verified private upload/content routes; a private Show flag alone does not prove every asset route is isolated."}, "completion_fields": ["phase0_six_surface_pass", "backup_visitable", "phase1_reversible_live_edit", "code_quality_pass", "camera_nine_pass", "final_six_surface_pass", "reports_complete", "localization_pass", "identity_sanitization_pass", "asset_locality_pass", "active_owner_scan_pass"], "source_fingerprint": {"schema": "zzd_show_source_fingerprint_v1", "source": "owned task detail workflow.source_fingerprints.final", "algorithm": "SHA-256 of UTF-8 json.dumps(root, ensure_ascii=False, sort_keys=True, separators=(',', ':')); root={schema:'zzd_show_source_fingerprint_v1', cdns:list(show.cdnDict().keys()), esm:list(show.esmList()), pieces:[{generic,name,raw,compiled,is_module,importmap} for runnable Pieces ordered by pk]}", "root_fields": ["schema", "cdns", "esm", "pieces"], "piece_fields": ["generic", "name", "raw", "compiled", "is_module", "importmap"], "json_serialization": {"ensure_ascii": false, "sort_keys": true, "separators": [",", ":"], "encoding": "UTF-8"}, "excludes": "Show IDs, title, prompt and asset binding IDs; asset content/identity is audited separately", "backup": "phase0.source_sha256 and backup.source_sha256 identify the actual frozen backup code after path-safe cloning; source-to-backup behavioral parity remains mandatory"}, "manifest_contract": {"schema": "zzd_hightopo_evidence_manifest_v2", "protocol_revision": "2026-09-09.2", "required": ["schema", "protocol_revision", "task_id", "claim_id", "show_id", "final_source_sha256", "source_comparison", "locale", "identity_sanitization", "assets", "phase0", "backup", "phase1", "phase2", "active_owner_scan", "camera", "artifacts"], "identity": {"task_id": "current task UUID", "claim_id": "current claim UUID", "show_id": "positive integer; exactly the linked owned Show", "final_source_sha256": "64 lowercase hex; exact final source snapshot used by the advertised server gate"}, "section_rule": {"sections": ["source_comparison", "locale", "identity_sanitization", "assets", "phase0", "backup", "phase1", "phase2", "active_owner_scan", "camera"], "status": "pass", "artifact_ids": "nonempty unique UUID array referencing current-claim artifacts listed in artifacts"}, "artifacts": {"shape": {"id": "UUID", "sha256": "64 lowercase hex", "roles": "nonempty role array; one artifact can serve several purposes"}, "rule": "Unique IDs; bytes and hashes must match current-claim uploaded evidence. Do not reference the manifest itself recursively.", "required_roles": ["source_demo_report", "lifecycle_report", "state_matrix", "localization_audit", "sanitization_audit", "asset_manifest", "active_owner_audit", "camera_audit"], "compatibility": "A single role string is also accepted; required roles are checked across all artifact rows, not by file count."}, "source_comparison": {"controls_discovered": "positive integer", "controls_exercised": "integer equal to controls_discovered; nonstandard closure must be resolved before this strict completion manifest", "unvisited_controls": [], "known_core_deviations": [], "fresh_session_runs": "integer >= 2", "traversal_complete": true}, "zero_counters": {"locale": ["residual_unapproved_visible_text_count", "layout_failure_count"], "identity_sanitization": ["remaining_private_identity_count", "unsafe_egress_count"], "assets": ["source_host_request_count", "external_runtime_request_count", "failed_asset_count"], "active_owner_scan": ["forbidden_hit_count"], "phase1": ["hard_failure_count"]}, "counter_types": "Actual JSON integers, not booleans, strings, null, or missing values. Zero means measured zero.", "locale": {"language": "zh-CN", "source_owned": true, "show_prompt_language": "zh-CN"}, "identity_sanitization": {"source_owned": true, "required_legal_notices_preserved": true, "cosmetic_cover_used": false}, "assets": {"runtime_identity_preserved": true, "function_serialization_lossless": true}, "active_owner_scan": {"scanned_owner_count": "positive integer", "scope": "final_active_delivery"}, "phase0": {"source_sha256": "64 lowercase hex", "surfaces": {"blank_desktop": "pass", "blank_mobile": "pass", "edit_desktop": "pass", "edit_mobile": "pass", "embed_desktop": "pass", "embed_mobile": "pass"}}, "backup": {"show_id": "positive integer, different from show_id", "source_sha256": "must equal phase0.source_sha256", "visitable": true, "interaction_replayed": true}, "phase1": {"owner_coverage_complete": true, "live_edit": {"before_sha256": "must equal final_source_sha256", "edited_sha256": "64 lowercase hex different from before_sha256", "restored_sha256": "must equal before_sha256", "restored": true, "physical_keyboard_edit": true, "physical_run": true, "fresh_document_proven": true}}, "phase2": {"surfaces": {"blank_desktop": "pass", "blank_mobile": "pass", "edit_desktop": "pass", "edit_mobile": "pass", "embed_desktop": "pass", "embed_mobile": "pass"}, "final_source_sha256": "must equal final_source_sha256", "repeated_run_cleanup_pass": true}, "camera": {"dimensionality": "3d or evidence-proven 2d", "3d": {"fresh_run_count": "integer >= 2", "required_modes": ["near:orbit", "near:pan", "near:zoom", "middle:orbit", "middle:pan", "middle:zoom", "aerial:orbit", "aerial:pan", "aerial:zoom"], "remaining_unvisited_presets": 0, "evidence": "all original presets; trusted inputs; before/after eye and center vectors; texture consumer chains"}, "2d": {"classification_reason": "nonempty evidence-backed reason; artifact_ids contain dimensionality proof"}}, "evaluation_boundary": "Server checks schema, ownership, hashes and required receipts; visual truth requires actual browser evidence and human review.", "publication_not_required": true, "enforcement_stages": ["submit_review", "complete"], "not_enforced_on": ["draft", "checkpoint", "heartbeat", "artifact_upload"]}, "postprocess": {"status": "required_deferred", "scope": "AI post-processing is a separate later owner-authorized request, not a worker bootstrap dependency."}}, "feedback": {"kinds": ["bug", "system", "inspiration"], "statuses": ["open", "triaged", "planned", "needs_data", "resolved", "closed", "duplicate"], "task_obstacles": "request_help and block atomically create or update one account-private feedback case per claim; the task event returns feedback_id. No separate worker submission is required.", "attachments": {"max_bytes": null, "account_max_bytes": null, "capacity_policy": "No account or per-artifact product quota, including legacy settings. Bounded requests and actual storage availability still apply.", "resumable_uploads": {"path": "/api/v1/uploads/", "resource_bytes": null}, "extensions": [".csv", ".jpeg", ".jpg", ".json", ".jsonl", ".log", ".md", ".pdf", ".png", ".toml", ".txt", ".webp", ".yaml", ".yml"], "privacy": "authenticated download; attachment disposition; never executable"}}, "tasks": {"discovery": {"availability_field": "data.discovery.availability", "notes_field": "continuation_note", "read_only": true, "zero_new_primary": "Zero new recommendations is not completion of the library. Read availability and its next_actions through the same authorized task API; inspect discovery=references or discovery=all and existing task detail, keeping effective state/category/q filters and pagination.", "continuation": "Optional notes contain historical quality, future product direction, proposed acceptance and minimum unverified conditions. Their exact source/version match is not proof of current server mapping, runnable content or cleared rights. An absent note is unknown, not completed.", "authority": "Keep current task state and Show links. Never claim, requeue or change a blocked, cancelled or reserved task because of these notes. Original lifecycle and permission checks remain authoritative."}, "states": ["open", "reserved", "claimed", "in_progress", "needs_input", "review", "done", "blocked", "cancelled"], "types": ["show_replication", "platform_maintenance", "research", "media", "general"], "actions": ["claim", "resume", "heartbeat", "checkpoint", "request_help", "submit_review", "link_show", "complete", "block", "release", "handoff_offer", "handoff_accept", "handoff_decline"], "claim_lease_seconds": 1800, "heartbeat_interval_seconds": 300, "ownership": {"one_active_worker_per_task": true, "one_active_task_per_worker": true, "parallelism": "only across distinct tasks with distinct worker/thread IDs", "handoff": "source remains owner until target atomically accepts; no role splitting", "stale_claim": "late workers are fenced by bound credential, ephemeral lease token, claim UUID/epoch, session, version, and expiry", "public_pool_eligibility": "task creator, staff, configured trusted account, zzd_agent_workers group, or explicit atomic handoff", "account_limits": {"active_workers_default": null, "active_claims_default": null, "active_workers": 16, "active_claims": 4, "null_means": "No account-level product cap; single-worker lifecycle ownership and all authorization fences still apply."}}, "duplicate_prevention": "server-normalized source/category identity with a globally unique SHA-256 fingerprint", "discussion": "Requester, maintainer and current lifecycle owner may append task_message replies; messages never transfer ownership or authorize arbitrary commands.", "blocked_selection": "Only open or explicitly reserved tasks can be claimed. Never retry a blocked source by creating an alias task. Choose another eligible task only within the user's assigned count.", "source_preflight": "A failed browser navigation is not proof that a source is dead. Compare official canonical links and bounded transport diagnostics; request exact user assistance if interactive access still fails. Do not waive the visual audit.", "hightopo_refresh": "On every resume read show_workflow.document_path and the current task detail workflow. Keep the existing worker/claim/Show. Current protocol supersedes only stale general workflow text, not real source facts or the assigned scenario.", "source_history": "Use task.workflow.source_duplicate_check. Workers are not required to access protected historical Shows. Registered exact matches prevent duplication; incomplete historical provenance is not an automatic stop for unrelated sources.", "waiting_lease_expiry": "An explicit user question stays visible after lease expiry. The original worker and credential may resume needs_input through action=resume after the referenced answer; review and formal blocks keep their recovery requirements.", "assistance": {"revision": "2026-10-12.1", "field": "task.assistance", "recipients": ["user", "worker", "platform"], "required": ["recipient", "next_action", "resume_when"], "human_input": "Only recipient=user with a concrete question enters needs_input. Technical help stays in progress. Display current_guidance as the current next step; preserve reported history separately.", "reply": "For a current unresolved question, POST messages with payload.resolves_event_id equal to assistance.event_id; only the requester/maintainer records the real answer. Never invent it.", "resume_states": ["needs_input", "in_progress"], "resume": "resume_action/path are conditional request hints only when the current state supports resume and the current explicit question is resolved. resume_executable is false: current identity, original worker/session/credential, claim/epoch/lease/version, owner, scopes, capacity, CSRF and idempotency are still checked by the unchanged submission guards. An expired lease uses expected_lifecycle_version under the original recovery contract.", "non_resumable": ["open", "reserved", "claimed", "review", "done", "blocked", "cancelled"], "read_only_help": "No task transition, claim release/requeue, new identity, privilege, dispatch or payment occurs from reading assistance.", "scope": "Existing account-owned Show changes use the original Show endpoints after current rights checks, independently of task lifecycle. Worker/session active metadata is not a credential or proof of online execution.", "owned_show_continuation": {"revision": "2026-10-12.1", "show_id": null, "kind": "existing_owned_show", "authorization_granted": false, "write_ready": false, "task_resume_required": false, "create_show": false, "create_worker": false, "create_credential": false, "identity_path": "/api/v1/me/", "capabilities_path": "/api/v1/capabilities/", "identity_scope": "identity:read", "inspect": {"method": "GET", "path": "/api/v1/shows/{show_id}/", "scope": "shows:read"}, "sequence": ["verify_current_identity_and_owner", "inspect_current_source_and_assets", "plan_exact_existing_show", "sync_assets", "apply_plan", "verify_current_result", "finalize_assets", "review_publication_if_authorized"], "plan": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/plan/", "scope": "shows:read", "additional_scopes": ["assets:read"], "body": {"manifest": "complete desired original-source manifest built from the current Show"}}, "apply": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/apply/", "scope": "shows:write", "additional_scopes": ["assets:read"], "body": {"manifest": "exact unchanged planned manifest", "plan_token": "original signed plan token"}}, "verify": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/verify/", "scope": "shows:read", "additional_scopes": ["assets:read"], "body": {"manifest": "exact desired manifest; verification reports differences without mutation"}}, "sync_assets": {"method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/", "scope": "assets:write", "content_type": "multipart/form-data", "body": {"file": "original validated bytes", "mount_path": "stable original relative path", "sha256": "actual lowercase SHA-256", "role": "original allowed role", "context": "original context", "replace": "true only for intended replacement", "if_match_sha256": "current manifest hash required for replacement"}}, "finalize_assets": {"method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/finalize/", "scope": "assets:write", "body": {"rollback_token": "original signed asset token", "confirm": true}, "when": "only after verification succeeds"}, "rollback_source": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/rollback/", "scope": "shows:write", "body": {"rollback_token": "original signed deployment token", "confirm": true}}, "rollback_assets": {"method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/rollback/", "scope": "assets:write", "body": {"rollback_token": "original signed asset token", "confirm": true}}, "compensation": "After a verified failed apply, restore source first, then asset tokens in reverse forward order. Never overwrite later content or use rollback to guess an uncertain write outcome.", "source_replacement": {"method": "PUT", "path": "/api/v1/shows/{show_id}/pieces/", "scope": "shows:write", "body": {"pieces": "complete intended readable Piece tree; not a partial patch"}, "concurrency": "Use the existing deployment plan/apply contract when synchronizing a version; direct PUT is destructive replacement, not compare-and-swap."}, "publication": {"method": "POST", "path": "/api/v1/shows/{show_id}/publication/", "scope": "shows:publish", "body": {"action": "publish", "confirm": true}, "requires": "existing explicit publication intent, current rights, original preflight and real rendered verification"}, "requires": ["existing credential is currently active, unexpired and unrevoked", "authenticated intended account and current Show ownership", "actual operation scopes and current source/version checks", "original source, asset, budget and resource-rights checks", "stable idempotency and exact reconciliation for uncertain writes"], "task_evidence": "Original task claim/session/credential/epoch/lease/version fences still apply. Use the existing authorized feedback channel for technical discussion; never submit evidence through a closed claim.", "stop_on": ["unknown identity or owner", "missing Show", "foreign owner", "expired or revoked credential", "missing scope or rights", "stale or changed deployment plan", "immutable archived Pack version", "unknown write outcome"], "rule": "Task state and active worker/session metadata neither grant nor revoke account-scoped Show rights. Re-read current capabilities/identity/Show before each intended operation; do not resume or recreate a task just to edit an owned Show."}}}, "request_contracts": {"mutation_transport": {"idempotency_header": "Idempotency-Key", "idempotency_required": true, "same_key_same_body": "exact replay", "same_key_different_body": "409 idempotency_conflict", "redirects_with_bearer": "forbidden"}, "worker_register": {"required": ["client_worker_id", "session_id", "label"], "privacy": "random IDs and client capability labels only; host/device/account/path fingerprints are rejected", "context_binding": {"protocol": "zzd_worker_context_v1", "metadata_field": "execution_context", "http_header": "X-ZZD-Worker-Context", "mcp_argument": "worker_context", "format": "opaque lowercase SHA-256 digest of the actual current host task context; never copy from saved state", "rule": "Immutable per worker. All worker-attributed mutations, including replays, require the matching context. One credential may own many independent workers.", "active_context_uniqueness": "One active worker per execution context and account; a second initializer in the same host task cannot create another active worker from a different directory.", "legacy": "Legacy unbound workers remain supported but cannot be silently adopted or upgraded into a bound context.", "recovery": "Only the exact active session can refresh. A different or closed session requires explicit reconciliation, never silent re-registration.", "client_guard": "/collaboration/worker-guard.py", "client_guard_manifest": "/collaboration/worker-guard.json", "limitation": "Context is an accidental-reuse fence, not attestation; copying all identity material cannot identify two physical clients. Enforce task ownership and an exclusive local process lock."}}, "feedback_detail": {"read_only": true, "history_query": {"history_limit": {"minimum": 1, "maximum": 200, "default": 200}, "history_cursor": "opaque signed viewer/feedback/page-size/high-water continuation; expires after 3600 seconds"}, "default_page": "latest; events ascending by immutable numeric cursor", "history_metadata": "history_page: limit, returned, total, snapshot_high_water, order, has_older, has_newer, older_cursor, newer_cursor, next_cursor (older alias)", "public_summary": "Nonparticipant public feedback excludes events, private history cursors and artifacts; absence does not prove private completeness", "refresh": "Omit cursor for a fresh latest snapshot; append-only new events do not alter an existing window", "client_command": "zzd-machine --home ORIGINAL_HOME feedback-read --feedback FEEDBACK_UUID --output NEW_PRIVATE_RECORD", "client_release": "0.12.5-t10-feedback", "writes": false}, "feedback_submit": {"required": ["client_submission_id", "kind", "title"], "kinds": ["bug", "system", "inspiration"], "maintainer_reply": "Read feedback_detail latest first; follow signed older_cursor to the fixed high water. Fresh cursor-free GET sees newly appended maintainer responses."}, "task_publish": {"required": ["title", "objective"], "show_replication": "source_url is mandatory and canonical server identity overrides any client dedupe alias"}, "task_claim": {"required": ["action", "worker_id", "session_id", "client_event_id"], "action": "claim", "returns_secret_once_per_response": "G0_REDACTED"}, "task_post_claim_action": {"required": ["action", "worker_id", "session_id", "client_event_id", "claim_id", "claim_epoch", "lease_token", "expected_state_version"], "heartbeat_additional": ["heartbeat_seq"], "hightopo_review_and_complete": "Only hightopo-extended Show tasks require payload.lifecycle_receipt, payload.attachment_ids and one generated payload.evidence_manifest matching show_workflow. Normal draft, heartbeat and checkpoint writes have no final-quality gate.", "fencing": "credential + worker + session + claim UUID + epoch + state version + signed lease + expiry", "handoff_target_exception": {"actions": ["handoff_accept", "handoff_decline"], "required": ["action", "worker_id", "session_id", "client_event_id", "claim_id", "claim_epoch", "expected_state_version", "payload.handoff_id"], "forbidden": ["source lease_token"], "rule": "The invited target proves its own worker/session identity; the source owner keeps its lease until atomic acceptance."}}, "task_artifact": {"content_type": "multipart/form-data", "required": ["file", "kind", "sha256", "worker_id", "session_id", "claim_id", "claim_epoch", "lease_token"], "rule": "private, content-addressed, validated bytes attached to the current claim only"}}, "events": {"transport": "append-only cursor polling", "rule": "Store checkpoints, outcomes, approved evidence, and requests—not hidden reasoning, secrets, or raw environment dumps."}, "recovery": {"local_files_are_not_authority": true, "required": "Upload durable feedback/events/artifacts while work is happening; never wait until the machine is lost."}, "initializer_instruction": "Before every new parallel launch, read /collaboration/start/ and install the SHA-verified official guard from /collaboration/worker-guard.json. Derive context from THIS active host task, never a saved worker file. Use its isolated workspace and exclusive state lock; legacy unbound clients are compatibility-only, not the new initializer. Read this policy, verify /api/v1/me/ account ID, credential ID, key ID and required scopes against the selected v2 bundle, register one distinct context-bound worker plus session (metadata.execution_context and matching context header), or explicitly reconcile the exact same current context with live worker/session/claim state. Submit one bounded bootstrap feedback, list compatible open tasks, and atomically claim exactly one. Persist only nonsecret worker/session/claim IDs locally, heartbeat at the advertised interval, keep the lease token only in an OS keyring or a separate 0600 ephemeral claim-secret file, append concise checkpoints and approved artifacts online, and finish with exactly one complete, block, release, or atomically accepted handoff receipt. Never expose the bearer, hidden reasoning, cookies, or environment dumps; never split one task into design/development/audit workers. On 401/403 stop writes to the affected endpoint, verify once and report one technical case; independent local work may continue. On 409 reload state, and on 429 honor Retry-After. 每次围绕具体作品的普通用户进度、部署、修复、回退和最终回复，都显式给出作品名称、PK（真实id）、UID/作品号（真实public_id）、API返回的正式打开链接和实际状态。优先复制 data.delivery.feedback_line；英文用 feedback_line_en。PK与作品号须是可复制文本，不能只藏在Run/Edit链接中，也不能只回复名称和链接。缺字段时沿用原身份GET同一已有作品补取，不造号、不建替代作品、不重领或注册worker、不额外向用户要授权。尚未创建就明确标识尚未取得，取得后立即补回；批量逐项给出，修复沿用原标识。私有作品注明需原有访问权限；普通链接和作品号不授予访问权，不附凭据、share token或runtime ticket。不得把计划/保存/清单核验冒称已部署或页面验收通过。交付表中分别写新站点名称与原站/原模板具体名称，未知原站写待核实，不猜测。reply_instruction/delivery仅用于普通回复，不回填manifest或严格JSON工具契约，也不在严格JSON输出前添加自然语言。漏报就补齐回复，不增加服务端拒绝、设备确认或审批流程。\nIn every normal user-facing progress update, deployment, repair, rollback and final handoff about a Show, explicitly display its title, PK (id), Work ID (public_id), API-returned canonical open link and actual state. Prefer data.delivery.feedback_line_en (feedback_line for Chinese). Both identifiers must be copyable text, not only part of a Run/Edit URL. Retrieve missing fields with the existing authorized GET for the same Show; do not invent IDs, create a replacement, register/claim again or ask for extra authorization. Report each Show separately and retain its identity across revisions. Note when original private access is required. Never append credentials, share tokens or runtime tickets. Distinguish planning, saving, manifest verification and actual browser/deployment results. Name the new site and the specific original site/template separately when tabulating; mark unknown source names unverified. delivery/reply_instruction are presentation guidance, not manifest or strict JSON input fields. Remedy an omitted identifier in the reply without adding a deployment gate."}, "schemas": {"show_write": {"required_on_create": ["title"], "allowed_fields": ["title", "desc", "prompt", "context", "category", "tags", "cdns", "esm"], "fields": {"title": "nonblank string, max 50 characters", "desc": "string, max 255 characters", "prompt": "UTF-8 string, max 131072 bytes; publication requires at least 80 characters", "context": "owner-unique optional string, max 255 characters", "category": "lowercase slug", "tags": "array of up to 24 strings", "cdns": "array of bounded HTTPS dependency URLs", "esm": "array that is an exact subset of cdns"}, "server_controlled": ["id", "author", "visibility", "temp", "compiled", "unplug", "sale", "balance"], "visibility": {"values": ["private", "public"], "authority": "visibility", "mutation": "publication route only", "legacy_read_aliases": ["private", "hidden"], "legacy_alias_semantics": "read-only exact mirrors; deprecated"}}, "piece_replace": {"body": {"pieces": "non-empty ordered array"}, "piece_fields_exactly": ["generic", "name", "raw", "is_module"], "required_piece_fields": ["generic", "name", "raw"], "is_module": "optional strict boolean; true only for js; explicit false selects classic; omission preserves the existing same-name/generic mode, or uses legacy inference for a new Piece", "module_dependencies": "exact current Pack binding and current file rights; source preflight and runtime both enforce authorization", "generic": ["html", "css", "js"], "name": "unique safe basename, max 30 characters", "compiled": "always empty and not accepted as input", "unplug": "always false and not accepted as input"}, "publication": {"body": {"action": "publish or unpublish", "confirm": true}}, "deployment_manifest": {"allowed_fields": ["metadata", "pieces", "assets", "visibility"], "metadata": "same allowed fields and validation as show_write", "pieces": "same source-only array as piece_replace", "assets": {"fields_exactly": ["mount_path", "filename", "sha256", "size", "role", "context"], "maximum": 256}, "visibility": "optional constant private; use publication route for public"}, "collection": {"create_fields": {"title": "required, max 20 characters", "desc": "max 255 characters"}}, "runtime_identity_baas": {"namespaces": "1 to 8 bounded lowercase slugs", "guest_write": "must be false; anonymous writes are temporarily disabled in REST v1", "guest_ttl_days": "1 to 30", "state_max_bytes": 65536}}, "safety": {"ownership": "Private Show operations require ownership; Pack collaboration uses explicit resource grants combined with credential scopes.", "moderation": "Existing active Show creation restrictions also block REST creation and publication.", "field_policy": "Unknown fields are rejected; server-controlled fields cannot be supplied.", "diagnostics": {"revision": "2026-10-18.2", "source_preflight": "/api/v1/shows/{show_id}/pieces/validate/", "asset_extensions": [".avif", ".basis", ".bin", ".csv", ".dds", ".env", ".exr", ".gif", ".glb", ".gltf", ".hdr", ".jpeg", ".jpg", ".json", ".ktx2", ".m4a", ".mov", ".mp3", ".mp4", ".mtl", ".obj", ".ogg", ".otf", ".ply", ".png", ".sog", ".splat", ".ttf", ".txt", ".wasm", ".wav", ".webm", ".webp", ".woff", ".woff2"], "obj_mtl_role": "attachment", "worker_lifecycle_required_for_owned_show_writes": false}, "source_policy": "Pieces are source-only html/css/js; compiled blobs, unplugged runtimes, hidden runtimes, and unsafe dynamic execution are rejected.", "dependencies": "Frameworks are supported through bounded HTTPS cdns; esm must be an exact subset of cdns. Local/private hosts and credential-bearing URLs are rejected.", "assets": "Allowlisted byte uploads only; drafts stay outside public media and are served through ownership-checked routes. Publication promotes a public copy; returning to draft removes it.", "baas": "Only a bounded private runtime-identity profile is provisioned by this API."}, "limits": {"capacity_policy_revision": "2026-09-10.2", "null_means": "No product quota, including legacy positive plan settings. Inline JSON and resumable chunks have request processing envelopes; streamed binary resources use actual physical capacity checks.", "creator_daily_deployments": null, "runtime_extensions": "Runtime isolation is enabled by the separate security configuration; capacity policy alone does not grant executable asset permissions.", "json_body_bytes": 201326592, "pieces_per_show": null, "piece_source_bytes": null, "piece_source_total_bytes": null, "asset_bytes": null, "account_asset_bytes": null, "thumbnail_bytes": null, "thumbnail_pixels": 20000000, "legacy_multipart_body_bytes": null, "resumable_uploads": {"revision": "2026-09-12.1", "path": "/api/v1/uploads/", "resource_bytes": null, "max_chunk_bytes": 8388608, "client_url": "/api/v1/uploads/client.py", "protocol_url": "/api/v1/uploads/protocol/", "kinds": ["asset", "thumbnail", "feedback_artifact", "task_artifact"], "start": {"method": "POST", "path": "/api/v1/uploads/", "idempotency_header": "Idempotency-Key"}, "status": {"method": "GET", "path": "/api/v1/uploads/{upload_id}/"}, "chunk": {"method": "PATCH", "path": "/api/v1/uploads/{upload_id}/", "content_type": "application/octet-stream", "headers": {"Upload-Offset": "committed byte offset", "Upload-Checksum": "lowercase SHA-256 of this chunk", "Content-Length": "chunk byte count", "Upload-Authorization": "ephemeral transfer_token from an authenticated response; use with the same Bearer"}}, "continuation_authentication": "A signed proof binds the already authorized transfer, original Bearer and worker context. Valid chunks recheck revocation and current permissions without spending generic authentication-request counters. Keep proofs in memory only; GET status refreshes them after restart.", "complete": {"method": "POST", "path": "/api/v1/uploads/{upload_id}/complete/", "body": "{} for assets; fresh claim/session/epoch/lease fence for task evidence"}, "abort": {"method": "DELETE", "path": "/api/v1/uploads/{upload_id}/"}, "recovery": "Read status after interruption; seek the local file to offset and continue. Retry completion to recover the same durable attachment receipt. Capacity errors preserve committed bytes; never create a replacement Show or worker.", "ownership": "Transfers bind the original account and credential. Task evidence also binds its worker and task; a recovered claim supplies a fresh verified session and lease fence at completion."}, "source_ingestion": {"mode": "inline_json", "request_bytes": 201326592, "source_manifest_resumable": true, "source_package_capability": "source_packages", "guidance": "The inline Piece JSON envelope remains. Complete source trees use source_packages and /api/v1/shows/{show_id}/source-versions/ with resumable manifests/files; do not truncate source."}, "releases_per_show": null, "releases_per_owner": null, "stage_inputs_v2": {"source_snapshot_bytes": 4194304, "source_snapshot_total_bytes": 8388608, "source_snapshot_anchors": 32, "unit": "PostgreSQL JSONB text UTF-8 octets, complete effective snapshots", "file_bytes": 67108864, "total_file_bytes": 134217728, "guidance": "Source snapshot and original-file budgets are separate. Input receipt does not approve execution or increase preview limits."}, "release_snapshot_bytes": null, "owner_release_snapshot_bytes": null, "namespaces": 8, "owner_entitlements": {"shows_per_month": {"free": null, "vip": null, "staff": null}, "piece_bytes": {"free": null, "vip": null, "staff": null}, "distinct_tags": {"free": null, "vip": null, "staff": null}, "collections": {"free": null, "vip": null, "staff": null}, "baas_projects": {"free": null, "vip": null, "staff": null}}}, "idempotency": {"resource_replay": {"scope": "Show, Piece, asset, collection and BaaS mutation receipts", "authorization": "Current credential, scopes and resource authorization are required on every replay.", "history": "replay.result_is_historical=true; status fields describe the original operation, not current state. MCP exposes the same metadata as structuredContent._replay.", "unavailable": "409 idempotency_result_unavailable confirms operation_completed=true but redacts the old result. Do not repeat the mutation or switch keys; use an authorized resource read to reconcile.", "unknown": "idempotency_outcome_uncertain does not establish whether the original operation committed."}, "header": "Idempotency-Key", "optional": true, "recommended_for": ["browser_auth_authorize", "browser_auth_renew", "show_create", "show_update", "piece_replace", "source_preflight", "release_record", "publication", "collection_create", "collection_attach", "runtime_identity_baas", "thumbnail_upload", "asset_upload", "asset_sync", "asset_sync_finalize", "asset_sync_rollback", "deployment_plan", "deployment_apply", "deployment_verify", "deployment_rollback", "worker_register", "worker_close", "feedback_submit", "feedback_event", "feedback_attachment", "task_publish", "task_message", "task_requeue", "task_action", "task_attachment"], "replay_window_seconds": 86400}, "routes": [{"id": "browser_auth_protocol", "method": "GET", "path": "/api/v1/browser-auth/protocol/", "authentication": "public"}, {"id": "browser_auth_authorize", "method": "POST", "path": "/api/v1/browser-auth/authorize/", "authentication": "bearer", "scope": "browser:login", "required_scopes": ["browser:login"]}, {"id": "browser_auth_renew", "method": "POST", "path": "/api/v1/browser-auth/renew/", "authentication": "bearer", "scope": "browser:login", "required_scopes": ["browser:login"]}, {"id": "capabilities", "method": "GET", "path": "/api/v1/capabilities/", "authentication": "public"}, {"id": "identity", "method": "GET", "path": "/api/v1/me/", "authentication": "bearer", "scope": "identity:read", "required_scopes": ["identity:read"]}, {"id": "show_list", "method": "GET", "path": "/api/v1/shows/", "authentication": "bearer", "scope": "shows:read", "required_scopes": ["shows:read"]}, {"id": "show_create", "method": "POST", "path": "/api/v1/shows/", "authentication": "bearer", "scope": "shows:write", "required_scopes": ["shows:write"], "content_type": "application/json", "request_example": {"title": "Tilt Garden", "desc": "An IMU-controlled visual study.", "prompt": "Describe the source architecture, interaction, fallback behavior, QA, and maintenance procedure in at least 80 characters.", "context": "tilt-garden", "category": "imu", "tags": ["imu", "interactive"], "cdns": ["https://cdn.jsdelivr.net/npm/three@0.179.1/build/three.module.js"], "esm": ["https://cdn.jsdelivr.net/npm/three@0.179.1/build/three.module.js"]}, "notes": "Always creates visibility=private and status=draft."}, {"id": "show_get", "method": "GET", "path": "/api/v1/shows/{show_id}/", "authentication": "bearer", "scope": "shows:read", "required_scopes": ["shows:read"]}, {"id": "show_update", "method": "PATCH", "path": "/api/v1/shows/{show_id}/", "authentication": "bearer", "scope": "shows:write", "required_scopes": ["shows:write"], "content_type": "application/json", "request_example": {"desc": "Updated description.", "tags": ["imu", "interactive"]}, "notes": "Any update returns a published Show to draft."}, {"id": "piece_replace", "method": "PUT", "path": "/api/v1/shows/{show_id}/pieces/", "authentication": "bearer", "scope": "shows:write", "required_scopes": ["shows:write"], "content_type": "application/json", "request_example": {"pieces": [{"generic": "html", "name": "index.html", "raw": "<main id=\"app\"></main>"}, {"generic": "css", "name": "style.css", "raw": "#app { min-height: 100vh; }"}, {"generic": "js", "name": "app.js", "raw": "document.querySelector('#app').textContent = 'Ready';"}]}, "notes": "Authoritative source-tree replacement; optional is_module is a strict boolean. Omission preserves an existing same-name/generic mode. Compiled and unplug fields are never accepted."}, {"id": "source_preflight", "method": "POST", "path": "/api/v1/shows/{show_id}/pieces/validate/", "authentication": "bearer", "scope": "shows:write", "required_scopes": ["shows:write"], "content_type": "application/json", "request_example": {"pieces": [{"generic": "html", "name": "index.html", "raw": "<main>Preview</main>"}]}, "notes": "Read-only source validation. Returns all restricted-pattern locations and recovery guidance; does not save or publish."}, {"id": "release_list", "method": "GET", "path": "/api/v1/shows/{show_id}/releases/", "authentication": "bearer", "scope": "shows:read", "required_scopes": ["shows:read"], "notes": "Lists meaningful prompt-to-deployment checkpoints across in-platform and external workers."}, {"id": "release_record", "method": "POST", "path": "/api/v1/shows/{show_id}/releases/", "authentication": "bearer", "scope": "shows:write", "required_scopes": ["shows:write"], "content_type": "application/json", "request_example": {"label": "Mobile interaction pass", "prompt": "The exact user prompt that initiated this deployed iteration.", "worker_client": "codex", "worker_provider": "openai", "worker_model": "gpt-5.6-sol", "reasoning_effort": "high", "duration_ms": 420000, "outcome_summary": "Reworked the mobile controls and validated all Show lifecycle surfaces.", "status": "validated", "locale": "en"}, "notes": "Captures the current source/config snapshot; never accepts hidden model reasoning or intermediate chatter."}, {"id": "release_get", "method": "GET", "path": "/api/v1/shows/{show_id}/releases/{release_id}/", "authentication": "bearer", "scope": "shows:read", "required_scopes": ["shows:read"], "notes": "Returns one exact source/config checkpoint and its worker metadata."}, {"id": "publication", "method": "POST", "path": "/api/v1/shows/{show_id}/publication/", "authentication": "bearer", "scope": "shows:publish", "required_scopes": ["shows:publish"], "content_type": "application/json", "request_example": {"action": "publish", "confirm": true}, "notes": "The only route that can make a Show public; runs preflight and requires confirm=true."}, {"id": "collection_create", "method": "POST", "path": "/api/v1/collections/", "authentication": "bearer", "scope": "collections:write", "required_scopes": ["collections:write"], "content_type": "application/json", "request_example": {"title": "IMU Experiments", "desc": "Motion and orientation Shows."}}, {"id": "collection_attach", "method": "PUT", "path": "/api/v1/collections/{collection_id}/shows/{show_id}/", "authentication": "bearer", "scope": "collections:write", "required_scopes": ["collections:write"], "content_type": "application/json", "request_example": {}, "notes": "Both resources must belong to the credential owner."}, {"id": "runtime_identity_baas", "method": "POST", "path": "/api/v1/shows/{show_id}/baas/runtime-identity/", "authentication": "bearer", "scope": "baas:write", "required_scopes": ["baas:write"], "content_type": "application/json", "request_example": {"namespaces": ["app-state"], "guest_write": false, "confirm_guest_write": false, "guest_ttl_days": 30}, "notes": "Provisions one private, isolated runtime-identity backend; anonymous guest writes are disabled in REST v1."}, {"id": "thumbnail_upload", "method": "POST", "path": "/api/v1/shows/{show_id}/thumbnail/", "authentication": "bearer", "scope": "assets:write", "required_scopes": ["assets:write"], "content_type": "multipart/form-data", "request_example": {"file": "<JPEG, PNG, or WebP bytes>"}, "notes": "Pillow-verified cover image; 320x180 minimum, 20 megapixels and 8 MiB maximum; returns the Show to draft."}, {"id": "thumbnail_content", "method": "GET", "path": "/api/v1/shows/{show_id}/thumbnail/content/", "authentication": "bearer", "scope": "shows:read", "required_scopes": ["shows:read"], "notes": "Streams an owned draft thumbnail without exposing its private storage name."}, {"id": "asset_upload", "method": "POST", "path": "/api/v1/shows/{show_id}/assets/", "authentication": "bearer", "scope": "assets:write", "required_scopes": ["assets:write"], "content_type": "multipart/form-data", "request_example": {"file": "<bytes>", "mount_path": "images/hero.webp", "role": "attachment", "context": "hero image"}, "notes": "Byte upload only; remote URL fetching and executable assets are unsupported. attachment is runtime-mounted; reference remains private development inventory and has no runnable URL."}, {"id": "asset_manifest", "method": "GET", "path": "/api/v1/shows/{show_id}/assets/manifest/", "authentication": "bearer", "scope": "assets:read", "required_scopes": ["assets:read"], "notes": "Returns normalized mount_path + SHA-256 identity and fails closed with ambiguous_mount_path when legacy bindings collide."}, {"id": "asset_content", "method": "GET", "path": "/api/v1/shows/{show_id}/assets/{binding_id}/content/", "authentication": "bearer", "scope": "assets:read", "required_scopes": ["assets:read"], "notes": "Owner-scoped bytes with an SHA-256 ETag; use for SDK streaming or resource download."}, {"id": "asset_content_head", "method": "HEAD", "path": "/api/v1/shows/{show_id}/assets/{binding_id}/content/", "authentication": "bearer", "scope": "assets:read", "required_scopes": ["assets:read"], "notes": "Same owner-scoped asset identity, length and SHA-256 ETag as GET; no response body."}, {"id": "asset_sync", "method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/", "authentication": "bearer", "scope": "assets:write", "required_scopes": ["assets:write"], "content_type": "multipart/form-data", "request_example": {"file": "<bytes>", "mount_path": "images/hero.webp", "sha256": "<64 lowercase hex characters>", "role": "attachment", "context": "hero image", "replace": false, "if_match_sha256": "<required only for replace>"}, "notes": "Idempotent normalized-path + hash sync. Conflicts require explicit compare-and-swap; mutations return a signed rollback token."}, {"id": "asset_sync_finalize", "method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/finalize/", "authentication": "bearer", "scope": "assets:write", "required_scopes": ["assets:write"], "content_type": "application/json", "request_example": {"rollback_token": "<signed asset token>", "confirm": true}, "notes": "Release retained previous bytes only after verification."}, {"id": "asset_sync_rollback", "method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/rollback/", "authentication": "bearer", "scope": "assets:write", "required_scopes": ["assets:write"], "content_type": "application/json", "request_example": {"rollback_token": "<signed asset token>", "confirm": true}, "notes": "Optimistic compare-and-swap rollback; refuses to overwrite later asset content or metadata."}, {"id": "deployment_plan", "method": "POST", "path": "/api/v1/shows/{show_id}/deployments/plan/", "authentication": "bearer", "scope": "shows:read", "required_scopes": ["shows:read", "assets:read"], "content_type": "application/json", "request_example": {"manifest": {"pieces": [{"generic": "html", "name": "index.html", "raw": "<main></main>"}], "visibility": "private"}}, "notes": "Validates without mutation and returns source/asset revisions, asset actions and a bounded signed plan token."}, {"id": "deployment_apply", "method": "POST", "path": "/api/v1/shows/{show_id}/deployments/apply/", "authentication": "bearer", "scope": "shows:write", "required_scopes": ["shows:write", "assets:read"], "content_type": "application/json", "request_example": {"manifest": "<exact planned manifest>", "plan_token": "<signed plan token>"}, "notes": "Atomically applies metadata/source after assets are ready, records a rollback checkpoint and always leaves visibility=private."}, {"id": "deployment_verify", "method": "POST", "path": "/api/v1/shows/{show_id}/deployments/verify/", "authentication": "bearer", "scope": "shows:read", "required_scopes": ["shows:read", "assets:read"], "content_type": "application/json", "request_example": {"manifest": "<desired manifest>"}, "notes": "Returns verified plus explicit source/asset differences; no mutation."}, {"id": "deployment_rollback", "method": "POST", "path": "/api/v1/shows/{show_id}/deployments/rollback/", "authentication": "bearer", "scope": "shows:write", "required_scopes": ["shows:write"], "content_type": "application/json", "request_example": {"rollback_token": "<signed deployment token>", "confirm": true}, "notes": "Restores the release-backed pre-apply source only when the applied revision is still current."}, {"id": "worker_recovery_diagnosis", "method": "GET", "path": "/api/v1/collaboration/recovery/", "authentication": "bearer", "scope": "identity:read", "required_scopes": ["identity:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "collaboration_policy", "method": "GET", "path": "/api/v1/collaboration/policy/", "authentication": "bearer", "scope": "identity:read", "required_scopes": ["identity:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "worker_register", "method": "POST", "path": "/api/v1/collaboration/workers/", "authentication": "bearer", "scope": "workers:write", "required_scopes": ["workers:write"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "worker_list", "method": "GET", "path": "/api/v1/collaboration/workers/", "authentication": "bearer", "scope": "workers:read", "required_scopes": ["workers:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "worker_detail", "method": "GET", "path": "/api/v1/collaboration/workers/{worker_id}/", "authentication": "bearer", "scope": "workers:read", "required_scopes": ["workers:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "worker_close", "method": "POST", "path": "/api/v1/collaboration/workers/{worker_id}/close/", "authentication": "bearer", "scope": "workers:write", "required_scopes": ["workers:write"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "feedback_list", "method": "GET", "path": "/api/v1/collaboration/feedback/", "authentication": "bearer", "scope": "feedback:read", "required_scopes": ["feedback:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "feedback_submit", "method": "POST", "path": "/api/v1/collaboration/feedback/", "authentication": "bearer", "scope": "feedback:write", "required_scopes": ["feedback:write"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "feedback_detail", "method": "GET", "path": "/api/v1/collaboration/feedback/{feedback_id}/", "authentication": "bearer", "scope": "feedback:read", "required_scopes": ["feedback:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "feedback_event", "method": "POST", "path": "/api/v1/collaboration/feedback/{feedback_id}/events/", "authentication": "bearer", "scope": "feedback:write", "required_scopes": ["feedback:write"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "feedback_attachment", "method": "POST", "path": "/api/v1/collaboration/feedback/{feedback_id}/artifacts/", "authentication": "bearer", "scope": "feedback:write", "required_scopes": ["feedback:write"], "content_type": "multipart/form-data", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "task_list", "method": "GET", "path": "/api/v1/collaboration/tasks/", "authentication": "bearer", "scope": "tasks:read", "required_scopes": ["tasks:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "task_publish", "method": "POST", "path": "/api/v1/collaboration/tasks/", "authentication": "bearer", "scope": "tasks:write", "required_scopes": ["tasks:write"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "task_detail", "method": "GET", "path": "/api/v1/collaboration/tasks/{task_id}/", "authentication": "bearer", "scope": "tasks:read", "required_scopes": ["tasks:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}, {"id": "task_message", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/messages/", "authentication": "bearer", "scope": "tasks:write", "required_scopes": ["tasks:write"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "task_requeue", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/requeue/", "authentication": "bearer", "scope": "tasks:write", "required_scopes": ["tasks:write"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "task_action", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/actions/", "authentication": "bearer", "scope": "tasks:claim", "required_scopes": ["tasks:claim"], "content_type": "application/json", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "task_attachment", "method": "POST", "path": "/api/v1/collaboration/tasks/{task_id}/artifacts/", "authentication": "bearer", "scope": "tasks:claim", "required_scopes": ["tasks:claim"], "content_type": "multipart/form-data", "notes": "Durable AI/user/platform collaboration control-plane operation.", "idempotency_key_required": true}, {"id": "artifact_content", "method": "GET", "path": "/api/v1/collaboration/artifacts/{artifact_id}/content/", "authentication": "bearer", "scope": "identity:read", "required_scopes": ["identity:read"], "notes": "Durable AI/user/platform collaboration control-plane operation.", "conditional_scopes": ["feedback:read", "tasks:read"]}, {"id": "event_sync", "method": "GET", "path": "/api/v1/collaboration/events/?after={cursor}", "authentication": "bearer", "scope": "events:read", "required_scopes": ["events:read"], "notes": "Durable AI/user/platform collaboration control-plane operation."}], "owned_show_continuation": {"revision": "2026-10-12.1", "show_id": null, "kind": "existing_owned_show", "authorization_granted": false, "write_ready": false, "task_resume_required": false, "create_show": false, "create_worker": false, "create_credential": false, "identity_path": "/api/v1/me/", "capabilities_path": "/api/v1/capabilities/", "identity_scope": "identity:read", "inspect": {"method": "GET", "path": "/api/v1/shows/{show_id}/", "scope": "shows:read"}, "sequence": ["verify_current_identity_and_owner", "inspect_current_source_and_assets", "plan_exact_existing_show", "sync_assets", "apply_plan", "verify_current_result", "finalize_assets", "review_publication_if_authorized"], "plan": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/plan/", "scope": "shows:read", "additional_scopes": ["assets:read"], "body": {"manifest": "complete desired original-source manifest built from the current Show"}}, "apply": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/apply/", "scope": "shows:write", "additional_scopes": ["assets:read"], "body": {"manifest": "exact unchanged planned manifest", "plan_token": "original signed plan token"}}, "verify": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/verify/", "scope": "shows:read", "additional_scopes": ["assets:read"], "body": {"manifest": "exact desired manifest; verification reports differences without mutation"}}, "sync_assets": {"method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/", "scope": "assets:write", "content_type": "multipart/form-data", "body": {"file": "original validated bytes", "mount_path": "stable original relative path", "sha256": "actual lowercase SHA-256", "role": "original allowed role", "context": "original context", "replace": "true only for intended replacement", "if_match_sha256": "current manifest hash required for replacement"}}, "finalize_assets": {"method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/finalize/", "scope": "assets:write", "body": {"rollback_token": "original signed asset token", "confirm": true}, "when": "only after verification succeeds"}, "rollback_source": {"method": "POST", "path": "/api/v1/shows/{show_id}/deployments/rollback/", "scope": "shows:write", "body": {"rollback_token": "original signed deployment token", "confirm": true}}, "rollback_assets": {"method": "POST", "path": "/api/v1/shows/{show_id}/assets/sync/rollback/", "scope": "assets:write", "body": {"rollback_token": "original signed asset token", "confirm": true}}, "compensation": "After a verified failed apply, restore source first, then asset tokens in reverse forward order. Never overwrite later content or use rollback to guess an uncertain write outcome.", "source_replacement": {"method": "PUT", "path": "/api/v1/shows/{show_id}/pieces/", "scope": "shows:write", "body": {"pieces": "complete intended readable Piece tree; not a partial patch"}, "concurrency": "Use the existing deployment plan/apply contract when synchronizing a version; direct PUT is destructive replacement, not compare-and-swap."}, "publication": {"method": "POST", "path": "/api/v1/shows/{show_id}/publication/", "scope": "shows:publish", "body": {"action": "publish", "confirm": true}, "requires": "existing explicit publication intent, current rights, original preflight and real rendered verification"}, "requires": ["existing credential is currently active, unexpired and unrevoked", "authenticated intended account and current Show ownership", "actual operation scopes and current source/version checks", "original source, asset, budget and resource-rights checks", "stable idempotency and exact reconciliation for uncertain writes"], "task_evidence": "Original task claim/session/credential/epoch/lease/version fences still apply. Use the existing authorized feedback channel for technical discussion; never submit evidence through a closed claim.", "stop_on": ["unknown identity or owner", "missing Show", "foreign owner", "expired or revoked credential", "missing scope or rights", "stale or changed deployment plan", "immutable archived Pack version", "unknown write outcome"], "rule": "Task state and active worker/session metadata neither grant nor revoke account-scoped Show rights. Re-read current capabilities/identity/Show before each intended operation; do not resume or recreate a task just to edit an owned Show."}, "shared_packs": {"revision": "2026-10-19.1", "identity": "/api/v1/packs/identity/", "catalogue": "/api/v1/packs/", "resolve": "/api/v1/packs/resolve/", "workspace": "/pack/{pack_id}/workspace/", "mcp_tools": ["zzd_read_pack_resources", "zzd_write_pack_resources"], "scope_compatibility": {"packs:read": "shows:read", "packs:write": "shows:write", "packs:publish": "shows:publish", "packs:manage": "shows:publish"}, "worker_claim_required": false, "same_account": "Owned resources are shared by account, regardless of client or worker session.", "cross_account": "Resource grants: reader, contributor, maintainer; only the owner manages grants. Expiry and revocation apply immediately.", "publication": "An explicit user request to publish, including continuing an authorized deployment, satisfies confirm=true. Do not ask again for the same scope.", "immutable_versions": "Contributions patch the current file set into a new native version; older URLs and bytes remain unchanged.", "requests": {"create": {"name": "runtime-name", "description": "Shared runtime"}, "resolve": {"engine_family": "Verge3D", "engine_version": "2.8.3", "provides": ["v3d"]}, "contribute": {"path": "/api/v1/packs/{pack_id}/contributions/", "body": {"base_version": "integer from pack detail", "manifest": {"engine_family": "real engine family", "engine_version": "real engine version", "provides": ["global_object"], "load_order": ["runtime.js"], "source_url": "https://authorized-source.example/runtime.js", "license": "authorization and attribution", "redistribution_authorized": true, "private_use_authorized": "true for authorized private collaboration/runtime when public redistribution is false", "authorization_reference": "nonsecret reference describing exact internal licence scope", "assets": []}, "files": [{"name": "runtime.js", "generic": "js", "raw": "complete unchanged source", "sha256": "SHA-256 of UTF-8 bytes"}]}}, "read_contribution": "GET /api/v1/packs/{pack_id}/contributions/{contribution_id}/", "publish": {"path": "/api/v1/packs/{pack_id}/contributions/{contribution_id}/publish/", "body": {"confirm": true, "digest": "contribution digest", "validation_note": "actual source and runtime checks", "visibility": "private (owner/maintainer plus packs:write or existing publish scope) or public (default; publish scope and redistribution_authorized=true required)"}, "permissions": {"private": ["packs:write or legacy shows:write, or existing publish scope", "owner or live maintainer grant"], "public": ["packs:publish or legacy shows:publish", "owner or live maintainer grant", "confirm=true and redistribution rights"]}}, "bind": {"path": "/api/v1/packs/{pack_id}/bind/", "body": {"show_id": "owned Show id", "version_number": "native integer version from Pack detail", "expected_cdns": "exact current Show cdns array", "expected_esm": "exact current Show esm array", "replace_urls": "optional explicit current URLs to replace", "confirm": "true for an authorized live Show update", "requires": {"engine_family": "required family", "engine_version": "required engine version", "provides": ["global_object"]}}, "behavior": "Atomic dependency-only change; keeps the current visibility and assets. Requires shows:write, packs:read and shows:publish for changed public Shows. Then verify the actual runtime."}, "grant": {"path": "/api/v1/packs/{pack_id}/grants/", "body": {"account_id": "authorized account id", "role": "reader|contributor|maintainer|revoke", "expires_at": "optional timezone-aware future ISO date"}}, "activity": "GET /api/v1/packs/{pack_id}/activity/", "register_legacy": {"path": "/api/v1/packs/{pack_id}/register-legacy/", "body": {"version_number": "existing integer version", "inventory_sha256": "complete file inventory digest returned by exact release metadata", "manifest": "real engine family/version/provides/load_order/source_url/license/redistribution_authorized; false also needs private_use_authorized=true and authorization_reference", "confirm": true, "validation_note": "owner verified exact bytes, correct licence scope and actual evidence"}, "effect": "Append-only provenance registration; no version increment, Show rewrite, asset upload or automatic public permission."}, "read_file": "GET /api/v1/packs/{pack_id}/releases/{version_number}/files/{name}/; authenticated current scope and resource policy", "intake": {"path": "/api/v1/packs/{pack_id}/intake/", "GET": "version_number and optional source_version_id; owner-only fresh complete inventory", "POST": "version_number, source_version_id (optional), inventory_sha256, base_version, manifest and confirm=true; new private contribution only", "identity": "Preserve original nested paths and exact native/source/upload references; source changes conflict; digest retries return the original contribution."}}, "limits": {"files_per_release": 128, "source_file_bytes": 33554432, "source_total_bytes": 201326592, "source_file_name_characters": 30, "source_types": ["js", "css"], "binary_assets": "/api/v1/uploads/", "limit_type": "processing, not a paid entitlement"}, "commercial": {"public_shared_libraries": "Reusable without duplicate purchase or artificial missing-file charges.", "licensed_private_resources": "Existing Show sales/access rules remain authoritative; never place a paid private file on a public CDN.", "automatic_charging": false}, "error_categories": {"technical": "worker repairs/retries; no user question", "authorization": "credential scope or resource grant", "entitlement": "real product/storage plan; explain benefit, price and account upgrade route", "needs_input": "a concrete user decision only"}, "private_review": "Use publish with visibility=private and confirm=true to save an immutable internal version. Requires owner/maintainer plus packs:write (legacy shows:write), or the existing packs:publish/shows:publish permission. Public publication still requires publish scope, confirmation and redistribution rights. This never changes public inventory or private consumer eligibility.", "legacy": "Native URLs and bytes stay unchanged. A missing PackReleaseRecord means owner_review_required; a name, public visibility, or description is not a verified engine manifest.", "pagination": {"catalogue": "next_after until null", "releases": "GET /api/v1/packs/{pack_id}/releases/?before=<next_before> until null", "contributions": "next_after until null", "resolve": "POST with after=next_after until null; guard.resolve_packs(requirement) exhausts the full visible inventory, no first-1000 cutoff", "tasks": "guard.all_tasks() verifies total, offsets and duplicate identities"}, "internal_consumer_policy": "Internal-use bindings and every isolated file request require a currently private consumer with no legacy sale, ShowOffer (including inactive), historical Entitlement or fixed DeliveryVersion. Closing offers or refunding rights does not erase distribution history. Registered decisions never fall through to legacy source rights; use a new private consumer or an explicitly redistribution-authorized release.", "authorization": "Private source and review require current scope plus owner/PackGrant. A known Pack GET distinguishes 403 (grant required) from 404 (no Pack); global discovery never enumerates hidden packages.", "source_references": "Complete source-versions manifest/chunks/seal/build first. A contribution JS/CSS item may reference source_version_id, source_path, bytes and sha256 instead of raw. No copy into each consumer Show; no inline size limit applies to a reference. Omitted assets inherit the previous fixed manifest; explicit lists replace the complete asset declaration and may retain exact previously authorized references.", "asset_references": "Manifest assets reference completed official private Upload IDs. Each entry has name, upload_id, bytes, sha256, source_url and license. JS/CSS and active documents do not belong in binary entries. Same canonical native Pack directory serves only reviewed exact files.", "replay": "Every replay rechecks scope and current resource grant. Contributions dedupe by content digest; reviews and registrations by immutable records. Grant intent keys cannot restore a revoked grant. Bind 409 after lost ACK requires reading current cdns/esm and comparing the exact version; never overwrite unrelated changes.", "filename_contract": {"revision": 1, "normalization": "NFC; reject noncanonical input rather than rename", "native": "JS/CSS basename, 1–30 characters, starts with a letter or number; Unicode letters/numbers/marks, dot, underscore, hyphen, internal ASCII space and literal percent", "intake": "Exact relative paths, at most 1024 UTF-8 bytes and 255 bytes per segment; same canonical character and collision checks", "rejected": "Separators in native names; absolute/dot/empty segments; edge whitespace, controls, case/normalization aliases, percent-encoded dot/separator tokens", "urls": "Use returned URLs. Encode each filename/path once; literal%20.js is literal%2520.js in a URL and is never the space-named file.", "immutable": "Stored names, source bytes, SHA, modes and original release identity remain exact."}, "source_delivery": {"schema": 1, "optional_manifest_field": "source_delivery", "scope": "commercial_development_and_original_file_redistribution", "confirmed": true, "reference": "explicit nonsecret commercial development and original-file redistribution authority", "notice_paths": ["LICENSE.txt"], "default": "missing is runtime-only; no source delivery inferred", "supported": "reviewed exact owner intake tree; historical internal-only source stays ineligible", "delivery_manifest_schema": 3, "limits": {"packs": 8, "files_per_tree": 128, "text_scan_bytes_per_file": 2097152, "licence_history_rows": 1000}, "unsupported": "mixed versions of one Pack, undeclared entries, cross-tree dependencies, computed imports/import maps and unlicensed external URLs fail closed; archive byte limits remain marketplace export settings"}, "portable_source_client": {"version": "2026-10-19.1", "python": "3.9+", "dependencies": "Python standard library only", "guide": "/pack/source-client/", "manifest": "/pack/source-client.json", "download": "/pack/source-client/2026-10-19.1/pack-source-client.py", "commands": ["prepare", "upload", "status", "publish", "bind", "download"], "source_protocol": "/api/v1/shows/{show_id}/source-versions/", "pack_protocol": "owner inventory/intake/contribution publish/exact bind", "default_visibility": "private", "explicit_publish_and_bind_approval": true, "source_export": "Explicit source_delivery declaration and exact export approval required.", "permissions": "Use the original authorized credential. Immutable private review needs owner/maintainer and write scope; public publication still requires publish scope. No credential is reissued or expanded.", "no_source_checkout_required": true, "no_worker_or_payment_calls": true, "source_modes": "Optional javascript_modes exact-path boolean map; hashes are derived from the original source. Live source_packages.file_modes capability required.", "javascript_modes": {"optional_intent_field": "javascript_modes", "value": "object of exact source JS/MJS path to strict boolean", "mjs": "true only", "omitted": "Original descriptor and state semantics unchanged", "server_capability": "/api/v1/capabilities/ source_packages.file_modes"}, "state_compatibility": "Use 2026-10-07.1 with original .1/.2/.06.1 state, credential and files; no version UUID, descriptor, saved helper_version or approval rewrite.", "read_recovery": {"methods": ["GET", "HEAD"], "body": "none", "max_attempts": 2, "total_io_budget_seconds": 45, "attempt_io_budget_seconds": 20, "transient_only": ["SSL EOF", "connection reset", "timeout", "incomplete metadata body"], "writes_automatically_retried": false, "binary_body_replayed": false, "permanent_TLS_HTTP_JSON_identity_permission_errors_retried": false}, "wasm": "Original WASM may travel in the source-versions inventory; execution is only in the isolated browser. Not a javascript_modes entry.", "active_connection_source_boundary": "Keep the active connection file and its hard links outside the source tree; move the same original credential without reissuing it. Unsafe existing inventories stop unchanged.", "dependency_diagnostics": {"preflight_before_new_state": true, "legacy_server_code_preserved": true, "fields": ["field", "entry_index", "reason", "duplicate_of", "retryable_unchanged", "next_action", "preserved"], "accepted_descriptor_identity_unchanged": true, "version_is_not_license_approval": true}, "pending_create_reconciliation": "status is read-only; exact owner/descriptor/transfer-credential match permits explicit upload to continue the same UUID without another create POST; absence stays unknown.", "historical_manifest_pointer": "Frozen 2026-10-06.1 metadata retains its original /pack/source-client.json pointer, which now selects current. Retrieve the old frozen body through /pack/source-client/2026-10-06.1/manifest.json.", "available_versions": ["2026-10-05.1", "2026-10-05.2", "2026-10-06.1", "2026-10-07.1", "2026-10-19.1"], "supported_connection_formats": ["zzd-client-connection-1", "zzd_mcp_bundle_v2"], "known_limitations": ["Legacy bundle v1 is explicitly unsupported.", "Older servers without review_private still require the original publish permission."], "version_history": "Allows existing owner write permission for immutable private Pack review on supporting servers; public publication and all original credential identities remain unchanged.", "v2_rest_base_paths": ["/api/v1", "/api/v1/"], "public_package_installation_advertised": false}}, "show_feedback": {"schema": "zzd.show_delivery.v1", "required_visible_identifiers": ["id (PK)", "public_id (Work ID / 作品号)"], "preferred_receipt_field": "data.delivery.feedback_line", "english_receipt_field": "data.delivery.feedback_line_en", "missing_fields": "GET /api/v1/shows/{same_show_id}/ with existing authorized access; never create a replacement", "reply_only": true, "deployment_gate": false, "instruction": "每次围绕具体作品的普通用户进度、部署、修复、回退和最终回复，都显式给出作品名称、PK（真实id）、UID/作品号（真实public_id）、API返回的正式打开链接和实际状态。优先复制 data.delivery.feedback_line；英文用 feedback_line_en。PK与作品号须是可复制文本，不能只藏在Run/Edit链接中，也不能只回复名称和链接。缺字段时沿用原身份GET同一已有作品补取，不造号、不建替代作品、不重领或注册worker、不额外向用户要授权。尚未创建就明确标识尚未取得，取得后立即补回；批量逐项给出，修复沿用原标识。私有作品注明需原有访问权限；普通链接和作品号不授予访问权，不附凭据、share token或runtime ticket。不得把计划/保存/清单核验冒称已部署或页面验收通过。交付表中分别写新站点名称与原站/原模板具体名称，未知原站写待核实，不猜测。reply_instruction/delivery仅用于普通回复，不回填manifest或严格JSON工具契约，也不在严格JSON输出前添加自然语言。漏报就补齐回复，不增加服务端拒绝、设备确认或审批流程。\nIn every normal user-facing progress update, deployment, repair, rollback and final handoff about a Show, explicitly display its title, PK (id), Work ID (public_id), API-returned canonical open link and actual state. Prefer data.delivery.feedback_line_en (feedback_line for Chinese). Both identifiers must be copyable text, not only part of a Run/Edit URL. Retrieve missing fields with the existing authorized GET for the same Show; do not invent IDs, create a replacement, register/claim again or ask for extra authorization. Report each Show separately and retain its identity across revisions. Note when original private access is required. Never append credentials, share tokens or runtime tickets. Distinguish planning, saving, manifest verification and actual browser/deployment results. Name the new site and the specific original site/template separately when tabulating; mark unknown source names unverified. delivery/reply_instruction are presentation guidance, not manifest or strict JSON input fields. Remedy an omitted identifier in the reply without adding a deployment gate."}}}