From 4c182d0b00503afbeb258d22636d73536f811650 Mon Sep 17 00:00:00 2001 From: Hongming Wang Date: Sat, 20 Jun 2026 22:50:28 -0700 Subject: [PATCH] chore(internal#33): template_assets is now consumed by the CP (sync contract SSOT) Sync the producer copy of provision_request.contract.json with the control-plane SSOT: template_assets flips cp_consumes false -> true. The CP now decodes the field and routes it to a WorkspaceTemplateAssetProvisioner backend (EC2 + LocalDocker) that materializes the concierge persona as /configs/system-prompt.md (molecule-controlplane). Previously a DEAD WIRE FIELD that left SaaS concierges booting identity-less (RFC #2843 #24 / project_saas_restart_re_stub_config). Doc-only; the producer pin test (cpProvisionRequest tags == fields keys) is unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../internal/provisioner/provision_request.contract.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workspace-server/internal/provisioner/provision_request.contract.json b/workspace-server/internal/provisioner/provision_request.contract.json index 5855c840..e6cff443 100644 --- a/workspace-server/internal/provisioner/provision_request.contract.json +++ b/workspace-server/internal/provisioner/provision_request.contract.json @@ -37,8 +37,8 @@ "config_files": {"type": "map", "cp_consumes": true}, "template_assets": { "type": "map", - "cp_consumes": false, - "note": "DEAD WIRE FIELD as of 2026-06-19: core fetches+sends template assets here (RFC #2843 #24) but the deployed CP wsProvisionRequest has no `template_assets` field, so it is silently dropped. config.yaml/prompts reach SaaS boxes via config_files instead. Follow-up: either remove this send from core OR add the consumer to the CP. Tracked alongside project_saas_restart_re_stub_config." + "cp_consumes": true, + "note": "CONSUMED as of internal#33 (2026-06-21): wsProvisionRequest now decodes `template_assets` and the workspace-provision handler routes it to a backend implementing provisioner.WorkspaceTemplateAssetProvisioner (EC2 + LocalDocker). The backend materializes the concierge persona as /configs/system-prompt.md -- what the claude-code executor's get_system_prompt actually reads (NOT config.yaml prompt_files) -- shipped through the same config-files channel. Previously DROPPED (RFC #2843 #24), which left SaaS concierges booting identity-less on create AND restart. See project_saas_restart_re_stub_config." } } } -- 2.52.0