Description
Declarative workflows treat a concatenation argument as literal text whenever it starts and ends with a double quote. A valid expression such as "a" & "b" is therefore emitted as source text instead of evaluated. Escaped double quotes inside a string are also left doubled.
This affects Concatenate and the declarative runtime's string Concat alias. For example:
| Formula |
Expected output |
Actual output |
| Concatenate("a" & "b", "c") |
abc |
a" & "bc |
| Concatenate("a""b", "c") |
a"bc |
a""bc |
| Concatenate("plain", "text") |
plaintext |
plaintext |
Code Sample
import asyncio
from agent_framework_declarative import WorkflowFactory
async def main():
workflow = WorkflowFactory().create_workflow_from_definition({
"name": "concat_repro",
"actions": [{
"kind": "SendActivity",
"id": "show",
"activity": {"text": '=Concatenate("a" & "b", "c")'},
}],
})
events = await workflow.run({})
print(events.get_outputs()) # Expected: ['abc']; actual: ['a" & "bc']
asyncio.run(main())
Error Messages / Stack Traces
No exception is raised; the workflow emits incorrect text.
Package Versions
Source checkout 636e8562d1db4e678e0bb88f602e0bbc7318f6a4: agent-framework-declarative 1.2.0 and agent-framework-core 1.20.0; powerfx 0.0.34.
Python Version
Python 3.12.14 on Windows x64.
Additional Context
The same expressions evaluated directly by the installed PowerFx engine return the expected strings. The PowerFx concatenation documentation describes evaluation of the string arguments and equivalence with the & operator.
I am working on a focused fix with workflow-level regressions. It will distinguish a complete quoted literal from an expression, decode doubled quotes, and preserve the existing literal-only path when PowerFx is unavailable. No external model or service is needed for this reproduction.
Description
Declarative workflows treat a concatenation argument as literal text whenever it starts and ends with a double quote. A valid expression such as "a" & "b" is therefore emitted as source text instead of evaluated. Escaped double quotes inside a string are also left doubled.
This affects Concatenate and the declarative runtime's string Concat alias. For example:
Code Sample
Error Messages / Stack Traces
No exception is raised; the workflow emits incorrect text.
Package Versions
Source checkout 636e8562d1db4e678e0bb88f602e0bbc7318f6a4: agent-framework-declarative 1.2.0 and agent-framework-core 1.20.0; powerfx 0.0.34.
Python Version
Python 3.12.14 on Windows x64.
Additional Context
The same expressions evaluated directly by the installed PowerFx engine return the expected strings. The PowerFx concatenation documentation describes evaluation of the string arguments and equivalence with the & operator.
I am working on a focused fix with workflow-level regressions. It will distinguish a complete quoted literal from an expression, decode doubled quotes, and preserve the existing literal-only path when PowerFx is unavailable. No external model or service is needed for this reproduction.