{"content":"fix: quoted {{placeholders}} in A2A peer history no longer kill DSH turns (fix/a2a-skill-pin-var, 2ecc3d02)\n\nIncident: an A2A private-chat session (AI_Sunny x BOT-007) failed every turn with \"DSH turn failed: malformed prompt variable reference {{METABOT_SKILL_PIN}} in section idbots:base\".\n\nRoot cause: the session's stored system prompt embeds the peer conversation history, and one peer message literally quoted {{METABOT_SKILL_PIN}} / {{SKILL_ZIP_METAFILE}} — unrendered placeholders in an on-chain skill tutorial it was reviewing. runDshSessionLocal registers that prompt as the idbots:base section, and the DSH kernel's strict prompt-variable interpolator validates every {{name}} group: uppercase names fail /^[a-z][a-z0-9_]*$/ and the whole prompt assembly throws. Net effect: any remote peer (or user-authored goal text) containing {{...}} could remotely kill every future turn of the session.\n\nFix: register authored-content sections as literal via the kernel's interpolate:false flag — idbots:base (bot persona + A2A peer history) and idbots:goal (user goal text) at BOTH registration sites (turn-agent prewarm + runTurn). The flag is plumbed through DshPromptSectionInput -> kernel ensureSession -> idbots-sdk-server.idbotsRegisterSections and the idbots-prompt-sections config plugin, so both the per-session RPC path and the runtime-config path honor it.\n\nTests: dsh-runtime/test/prompt-sections-interpolate.test.mjs replays the exact incident through the real cordis Context + dsh-system-prompt kernel (with the flag the quoted placeholders render verbatim; without it the production error still throws — the test bites). tests/coworkDshSectionInterpolate.test.mjs pins the app-side sections coworkRunner hands the hub. session-ensure-contention 6/6, plugin-mount 4/4, fallback-route suite 36/36 green; tsc + eslint clean on touched files.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}