promote: staging to main (A2A fixes + canvas fix) #288

Closed
integration-tester wants to merge 7 commits from staging into main

7 Commits

Author SHA1 Message Date
b4045a4d7a Merge pull request 'fix(canvas): toYaml always emits tools: [] and serializes nested lists' (#274) from fix/canvas-yaml-utils-test-failure into staging
Some checks failed
Secret scan / Scan diff for credential-shaped strings (push) Failing after 13m39s
sop-tier-check / tier-check (pull_request) Failing after 5s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 6s
integration-tester/merge-check Token merge check
audit-force-merge / audit (pull_request) Has been skipped
2026-05-10 09:29:20 +00:00
1a63d912f7 Merge pull request 'fix(a2a): handle string-form errors in delegate_task' (#273) from fix/a2a-tools-string-error-handling into staging
Some checks failed
Secret scan / Scan diff for credential-shaped strings (push) Successful in 36s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 33s
sop-tier-check / tier-check (pull_request) Failing after 42s
audit-force-merge / audit (pull_request) Has been skipped
2026-05-10 09:22:41 +00:00
854803b3ee fix(canvas): toYaml always emits tools: [] and serializes nested lists
Some checks failed
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 29s
sop-tier-check / tier-check (pull_request) Failing after 27s
audit-force-merge / audit (pull_request) Successful in 44s
Two bugs in yaml-utils.ts toYaml():

1. tools: [] was only emitted when config.tools.length > 0,
   but the test asserts it's always present. Add blank-line
   separator + unconditional list("tools", ...) so MINIMAL_CONFIG
   with tools: [] renders correctly.

2. Nested list values (e.g. runtime_config.required_env: [KEY])
   were serialized as "  required_env: KEY" (stringification of the
   array) instead of a YAML list block. Fix obj() to detect
   Array.isArray(sv) and emit a list block with 4-space indent.

Closes #269.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 09:18:27 +00:00
6348522baa fix(a2a): handle string-form errors in delegate_task
Some checks failed
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
sop-tier-check / tier-check (pull_request) Failing after 11s
audit-force-merge / audit (pull_request) Successful in 54s
The A2A proxy can return three error shapes:
  {"error": "plain string"}
  {"error": {"message": "...", "code": ...}}
  {"error": {"message": {"nested": "object"}}}   ← value at .message is a string

builtin_tools/a2a_tools.py:72 called data["error"].get("message")
without guarding against error being a string, which raised:
  AttributeError: 'str' object has no attribute 'get'

This broke every delegation attempt through the legacy a2a_tools path
(the LangChain-wrapped version used by adapter templates). The
SSOT parser a2a_response.py already handled string errors; the
legacy inline sniffer in a2a_tools.py did not.

Fix: branch on isinstance(err, dict/str/other) before calling .get().

Also update both publish-workflow files to remove the dead
`staging` branch trigger — trunk-based migration (PR #109,
2026-05-08) removed the staging branch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 09:09:33 +00:00
97fcb32840 chore: restore manifest.json after trigger test
Some checks failed
publish-workspace-server-image / build-and-push (push) Failing after 7s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 7s
2026-05-10 08:52:45 +00:00
19b95243d2 chore: trigger publish workflow [Integration Tester 2026-05-10T08:45Z]
Some checks failed
publish-workspace-server-image / build-and-push (push) Failing after 10s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 9s
2026-05-10 08:52:14 +00:00
e5622e0dae chore: staging trigger commit from Integration Tester
All checks were successful
Secret scan / Scan diff for credential-shaped strings (push) Successful in 24s
2026-05-10 08:31:19 +00:00