[Feat]: Add a task-state-invariants agent skill for sibling-surface propagation

未關閉
#1,413 3 則留言 0 個 reaction 已指派 1 人 在 GitHub 檢視

維護者通常 2 天內回覆

@Linux2010 已經在處理了。

開始於 2026年11月2日。

  • #1414 來自 @Linux2010 —— 未關閉

評估

這個 Issue 還沒有評估資料。

描述

component: tooling status:awaiting response
Is your feature request related to a problem? Please describe

The agent rule layer in this repo is good at three things: code style
(docs/ai/coding_conventions.md), the pre-done gate
(docs/ai/mandatory_checks.md), and post-mortem capture
(.agents/skills/mistake-reflection). What none of them state is which
surfaces a task-state write has to reach
. That gap keeps producing the same
class of defect: a value that is correct on one surface and missing or stale
on another.

Recent instances, all in this class:

  • #1276 (closed): status.timestamp was mapped by
    src/a2a/compat/v0_3/conversions.py (JSON-RPC/REST compat) but not by
    src/a2a/compat/v0_3/proto_utils.py (gRPC compat) — the same field appeared
    or disappeared depending on transport.
  • #1331 (open): a framework-written FAILED status carried no
    status.timestamp, and src/a2a/server/tasks/database_task_store.py:152-157
    derives last_updated from it, so the row persisted NULL and dropped out
    of ListTasks ordering.
  • #1188 (open) / #1409 (open): the handler resumes or returns from a snapshot
    that disagrees with what later reaches the store and the stream.
  • #1206 (closed as stale) → #1411 (open): contextId inference makes events
    disagree with the stored Task.
  • Review findings on #1346: stamping the local copy after
    task.status.CopyFrom(event.status) leaves the published event unstamped
    (src/a2a/server/tasks/task_manager.py:285), and the CANCELED paths at
    src/a2a/server/agent_execution/active_task.py:971-973 keep the previous
    state's timestamp. These were caught by review, not by any documented rule.

The same confusion shows up in the discussion forum, where it has no issue
tracker to land in: #248 ("Should Message events terminate…", 6 comments),
#435, #40 ("What's the purpose of EventQueue?"), and the multi-replica thread
#1224 / #336.

Describe the solution you'd like

A new skill, .agents/skills/task-state-invariants/SKILL.md, in the same
shape as mistake-reflection (trigger list → procedure → anti-patterns),
covering:

  1. the invariant set, each claim anchored to current main (terminal states
    need a timestamp; stamp the event before CopyFrom; CopyFrom inherits
    the old timestamp; push delivery is best-effort; zero events means a hung
    caller; store and stream must agree; v0.3 compat has two independent
    mappers; continuation identity is inferred per spec §3.4.3);
  2. a sibling-surface checklist to run before declaring such a change done
    (persisted store, streaming subscribers, push notification, cluster
    task_events table, both compat mappers);
  3. a test map naming the existing file per surface, so coverage lands where
    the surface is;
  4. the evidence a PR in this area should carry, consistent with
    docs/ai/evidence_rules.md.

Plus a one-line pointer in AGENTS.md "Mandatory workflow". That pointer
matters: AGENTS.md is the only file in the repo that routes to
.agents/skills/, so a skill without a route is never loaded.

Describe alternatives you considered
  • A docs/ai/ rules page. Rejected as the primary form: docs/ai/* is
    read at task start, while this knowledge is only useful at the moment you
    touch a status write
    — which is how mistake-reflection is structured.
    Happy to have both if maintainers prefer the rule text to live in docs/ai
    with the skill as a thin pointer.
  • Encoding it only in tests. Partially useful, but tests cannot tell a
    change agent which sibling surface they forgot.
  • Fixing each bug as it arrives. Six-plus in about six weeks suggests the
    per-bug loop is not converging.
Additional context

Scouting the rule layer, .agents/skills/ has exactly one skill today and it
was introduced internally by #1059 — I found no precedent for an externally
contributed skill, so raising this first rather than assuming. A draft
implementation (skill + the one-line router pointer, markdown-only, no
runtime code) is ready and filed as a PR linked to this issue. Easy to trim:
drop the AGENTS.md line, or scope the skill to the compat-mapper and
timestamp rules only.

Code of Conduct
  • I agree to follow this project's Code of Conduct
主要語言
Python
星號
2.2k
分支
532
平均合併
3 天 2 小時
30 天內合併 PR
46

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

a2aproject/a2a-python 的其他 Issue

查看 a2aproject/a2a-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。