Repository navigation
Persona edits silently leave linked instance parallelism and ACP command stale #5508
Description
Activity
I think this is the same ownership problem being worked on in #5328. Blindly cascading persona values into every linked record would overwrite deliberate instance choices.
The durable rule should be: the template owns defaults, an agent stores only explicit overrides, and runtime resolution records what the current generation actually applied. The edit flow must also say whether the owner is editing this agent or its template, show which agents the template change affects, and show restart or redeploy required until applied state matches.
Agreed, and thanks for the pointer — I read through #5328 and you are right that this is the same ownership problem. Linking it explicitly: this issue is the runtime-side half of the blocker you have been holding #5328 on. Your durable rule is the right one, so let me add what the persona path specifically breaks under it, because I do not think it is covered by the dialog work yet.
1. There is no record of what the running generation applied — for these two fields there cannot be one today.
Your third bullet — runtime resolution records what the current generation actually applied — is exactly what is missing here.
BUZZ_ACP_AGENTSis computed from rawrecord.parallelismat spawn (runtime.rs:677-678) andacp_commandis read raw atruntime.rs:476-477, neither throughresolve_effective_config. Nothing writes the applied value back, so there is no state to compare the saved value against. "Restart or redeploy required" cannot be surfaced for these two fields until that resolution goes through the effective-config path that model, provider, prompt and persona env already use.2. Under your rule, these fields are currently neither a default nor an explicit override.
The instance's
parallelismandacp_commandare snapshots seeded at link time, not choices the owner made. If #5328 lands the template/override model and treats every existing instance value as an explicit override, every already-linked agent keeps a phantom override, and template edits go on appearing to do nothing — the same silent divergence, now with a UI that claims field ownership is settled. So this needs a migration call: an instance value that still equals the persona value it was seeded from should resolve as inherit, not as a frozen override.3.
acp_commandis the worst case because there is no way out of it.In
desktop-v0.5.8the instance-edit dialog is not reachable for an agent linked to a persona, so a staleacp_commandis a phantom override the owner cannot see or correct from any UI path — only by editing the instance record directly. Whatever object-choice UI #5328 settles on, this field needs an escape hatch on day one.One smaller overlap worth flagging: the parallelism validation gap in your last review at
8cc6e5a11(no maximum, nonblank0/negatives silently reverting) is the same field as this one. If validation lands on the definition form while the value is still resolved raw from the instance record at spawn, a valid definition value and an invalid instance snapshot can still coexist. Validating where the value is resolved, not only where it is typed, would close both.Happy to fold this into #5328 as a review comment instead if you would rather keep it in one place — the reproduction and the code references are in the issue body above.
Keep this issue open. It gives #5328 a concrete runtime acceptance test, and I would not bury it in that PR.
One correction after checking current
main: local processes already stampacp_commandand effectiveparallelisminSpawnConfigSnapshot, so the applied-state seam exists. The missing piece is desired resolution. Parallelism still comes from the copied record, so a template change produces no prospective diff.acp_commandis different:AgentDefinitionhas no such field. The definition owns the agent runtime, whilebuzz-acpremains instance and target launch plumbing.For migration, equality can safely become inherit. A different legacy value is ambiguous, so I would preserve it as a legacy override and ask the owner rather than guess. I will use this issue as the runtime dependency for #5328.
Adding a Windows confirmation and one data point I have not seen in the thread, which bears on @wolfyy970's last point about desired resolution.
The desired value is stored — it just is not the field the spawn path reads.
On a persona-linked setup where the persona parallelism was changed from 10 to 5, the saved state is:
- each definition record:
parallelism: 10,definition_parallelism: 5 - each instance record:
parallelism: 10,definition_parallelismunset
So the edit is not discarded. It lands in
definition_parallelism, and every consumer that matters ignores it.agent_snapshot.rs:214resolvesrecord.definition_parallelism.or(Some(record.parallelism)), so the exportedAgentDefinitionreflects the change and a newly minted instance would inherit 5 — whileruntime.rs:680computesBUZZ_ACP_AGENTSfrom rawrecord.parallelismand every existing instance keeps 10 indefinitely.If that reading is right, a prospective diff for parallelism may not need a new field:
definition_parallelismversus the instance'sparallelismis already a desired-versus-applied pair for exactly the fields under discussion. Worth confirming againstmainbefore it is designed around — I am reading af88cda9clone.Windows, v0.5.17. Reproduces nine minor versions after the report, on a different platform.
A restart that isolates the propagation path. After changing parallelism on all four agents and restarting one, its startup line reads:
buzz-acp starting: ... idle_timeout=900s max_turn=7200s agents=10 ... context_limit=20 max_turns_per_session=0 ...context_limit=20in the same line is a change made in the same dialog, in the same session, that did propagate. Same restart, same record, same form — one setting arrives and the other does not. That may be a useful control when testing a fix.Sibling report. #5400 describes the same field from the instance-edit side and concludes the value is "being dropped from the record." If the
definition_parallelismbehaviour above is what is happening there too, it is not dropped but misfiled, which would make these two reports the same root cause seen from either end of the link.- each definition record:
cristiansotogarciaxatech commented
on Oct 10, 2026 More actionsSame bug here on Windows 11 (Buzz Desktop, 2026-10-10), on more than one agent.
- Edit agent > Advanced > Parallelism changed from blank (app default 10) to
3, Save changes. - Restarted the agent, then a full Buzz Desktop restart.
- buzz-acp startup line still reads
agents=10.
In
%APPDATA%\xyz.block.buzz.app\agents\managed-agents.jsonafter saving:- persona/definition row (
persona_idset, nopubkey):"definition_parallelism": 3,"parallelism": 10 - linked instance row (
pubkeyset):"parallelism": 10
The runtime launches from the instance row, so the saved value never takes effect, and nothing in the dialog shows the divergence. Setting
parallelismon the instance row by hand and restarting the agent is the workaround. #5400 looks like the same root cause.- Edit agent > Advanced > Parallelism changed from blank (app default 10) to
Summary
In
desktop-v0.5.8, editing a persona does not propagateparallelismoracp_commandto already-linked instances, while neighboring persona-backed fields do update. The UI gives no indication that the persisted instance has diverged from the values shown in the persona dialog.This is a consistency bug rather than a feature request: these two fields bypass the effective-config/live-persona paths used by adjacent settings, and the mismatch is silent.
Evidence
For a linked record,
resolve_effective_configmatchesrecord.persona_id;resolve_linkedthen resolves model, provider, and system prompt from the persona. Those fields therefore reflect persona edits.Persona environment variables are also live at spawn: the descriptor is documented and applied as
definition ... -> global -> live persona -> per-agenton every spawn (runtime.rs:801-810). I also confirmed this at runtime by adding a variable only to the persona definition and observing the child process read it.parallelismandacp_commandbypass those paths:runtime.rs:677-678computesBUZZ_ACP_AGENTSfrom rawrecord.parallelism.runtime.rs:476-477resolves rawrecord.acp_command.The persona update path does not refresh either snapshot. Its helper explicitly propagates only a
display_namerename (personas/update.rs:31-35), and the update path only considers avatar/display-name propagation (personas/update.rs:140-184).Reproduction observed
parallelism = 3.BUZZ_ACP_AGENTS=10.User impact
The displayed configuration and actual runtime configuration disagree without a warning.
acp_commandis especially difficult to recover from because the instance-edit dialog is not reachable for an agent linked to a persona, so there is no UI path to correct the stale instance value.Possible resolutions
Either approach would make the behavior coherent:
parallelismandacp_commandthrough the effective-config/live-persona resolution used by neighboring fields; orI am not prescribing which ownership model is preferable; the key requirement is to avoid silently showing persona values that the linked instance will not run.