fix(content): keep coordination notes off dev_notes / quick_context

Two agent-authored fields were leaking non-developer content into the
human note columns the panel renders:

- apply_escalation appended '[ESCALATED] From X to Y\nReason: ...' to
  dev_notes (the developer's space). On a re-escalation loop a stuck cell
  PM grew one task's dev_notes to ~8KB across 5 escalations. It now writes
  a structured orchestration_markers['escalation'] record; the target
  still learns the reason from the escalate notification.
- approve_and_start string-packed 'approve_and_start_notes:<text>' into
  quick_context (raw key:value soup). It now writes
  orchestration_markers['approve_and_start_notes'], leaving quick_context
  for the human ResumptionNote only.

Adds typed marker accessors (get/set_escalation, get/set_approve_and_start_notes)
and refactors _record_pr_review under the complexity bound by extracting
_compose_review_body. Documents update_task_with_message as the legacy
A2A-protocol log (dev_notes is intentional there, not pollution).
This commit is contained in:
Renn F
2026-06-21 05:36:50 +02:00
parent 4c85cc6dfa
commit 3ff6967b9d
6 changed files with 98 additions and 20 deletions
+8 -1
View File
@@ -539,7 +539,14 @@ class A2AService:
@staticmethod
def update_task_with_message(task: TaskTable, message: A2AMessage) -> None:
"""Update an existing task's dev_notes with new message content."""
"""Append A2A-protocol message text to the task's A2A log (dev_notes).
NOTE: this is the *legacy A2A-protocol* message store — A2A-protocol
tasks carry their request/response thread in ``dev_notes`` (keyed by the
``"A2A Request"`` marker that ``_notify_original_requester`` checks).
It is NOT the gateway agent flow (those use the A2AConversation tables),
so it does not pollute normal delivery tasks' developer notes.
"""
text_parts = [p for p in message.parts if p.type == "text"]
if not text_parts:
return