Expected. agent/instructions.md is the canonical prompt, and system/persona.md in the agent's memory is seeded from it. A merge that edits the prompt should leave the live agent answering from the edited text.
Actual. Two independent gaps, so a prompt change reaches the live agent only if a person remembers to run sync-persona by hand:
.github/workflows/deploy.yml filters on channels/http/**, channels/discord/**, lib/**, scripts/**, package.json, package-lock.json, and the workflow itself. agent/** is absent, so a prompt-only change triggers no deploy at all.
scripts/zo-deploy.ts fast-forwards the live checkout and restarts each service, but never runs sync-persona. Even a deploy that does run leaves system/persona.md on the previous text.
Cost. After #7 merged on 2026-09-26 the live persona was still the pre-cutover text. npm run sync-persona -- --dry-run reported system/persona.md differs from agent/instructions.md (5174 bytes rendered), and the agent only caught up when npm run sync-persona was run by hand (memory checkout commit 0a2928a). Nothing in CI or the deploy surfaces the drift.
Recommended fix. Add agent/instructions.md to the deploy path filter and run npm run sync-persona on the host in the same job, before the services restart. The deploy client already runs host commands (zo.callTool("bash", { cmd }), scripts/zo-deploy.ts:188), so this needs no new capability. A host-side automation that runs sync-persona when it drifts would close the same gap without touching CI.
Expected.
agent/instructions.mdis the canonical prompt, andsystem/persona.mdin the agent's memory is seeded from it. A merge that edits the prompt should leave the live agent answering from the edited text.Actual. Two independent gaps, so a prompt change reaches the live agent only if a person remembers to run
sync-personaby hand:.github/workflows/deploy.ymlfilters onchannels/http/**,channels/discord/**,lib/**,scripts/**,package.json,package-lock.json, and the workflow itself.agent/**is absent, so a prompt-only change triggers no deploy at all.scripts/zo-deploy.tsfast-forwards the live checkout and restarts each service, but never runssync-persona. Even a deploy that does run leavessystem/persona.mdon the previous text.Cost. After #7 merged on 2026-09-26 the live persona was still the pre-cutover text.
npm run sync-persona -- --dry-runreportedsystem/persona.md differs from agent/instructions.md (5174 bytes rendered), and the agent only caught up whennpm run sync-personawas run by hand (memory checkout commit0a2928a). Nothing in CI or the deploy surfaces the drift.Recommended fix. Add
agent/instructions.mdto the deploy path filter and runnpm run sync-personaon the host in the same job, before the services restart. The deploy client already runs host commands (zo.callTool("bash", { cmd }),scripts/zo-deploy.ts:188), so this needs no new capability. A host-side automation that runssync-personawhen it drifts would close the same gap without touching CI.