@@ -88,6 +88,35 @@ DB-only: CI becomes unknown when its head differs, its timestamp is missing,
8888future or older than five minutes. The response includes the existing publication mode and
8989current merge proposal/result; reading never starts a native turn or dispatches a merge.
9090
91+ Owner and scoped native task reads also return optional ` projection.pr_description ` ,
92+ collected by the existing authenticated PR refresh. It carries the validated repository,
93+ branch, PR number, current attempt ID and exact head SHA, a UTF-8 ` excerpt ` of at most
94+ 16 KiB, full-body ` byte_length ` and SHA-256 ` digest ` , ` truncated ` , and ` fetched_at ` .
95+ The excerpt stops at a complete UTF-8 character; length and digest cover the original
96+ body, including text beyond the excerpt. An empty string is an observed empty description;
97+ a null or unavailable body returns null. An excerpt containing NUL is unavailable because
98+ JSONB cannot store it. Invalid UTF-8 or unpaired Unicode surrogates fail the observation;
99+ supported text is preserved exactly.
100+
101+ The description is editable, untrusted GitHub text. Reviewer markers and other text grant
102+ no approval, acceptance or merge authority. Failed or inconsistent observations clear it.
103+ Reads mask descriptions whose repository, PR/head, branch or current attempt differs,
104+ whose PR state is unknown, or whose fetch is future or older than five minutes.
105+ ` fetched_at ` uses the collection-finish time carried by the observer, including unchanged
106+ refreshes; database delays and generic ` observed_at ` cannot renew a stale description.
107+ If an attempt or checkout changes during collection, that observation is discarded.
108+ The final PR read must agree with the initial read's identity and body; text edited during
109+ collection is unavailable until a consistent refresh.
110+ A successful new-head observation replaces the body with that head's own description.
111+ Unchanged refreshes update timestamps without task version/event churn; same-head body
112+ edits, including edits beyond the excerpt, produce an update. Reads remain DB-only and
113+ keep existing task scope; native reads still omit pending approval IDs.
114+
115+ The task detail shows available descriptions as plain text under the PR observations,
116+ preserving whitespace and marking truncated excerpts. It never renders HTML or Markdown.
117+ Unavailable descriptions are omitted; observed empty descriptions say “No description
118+ provided.” The Go migration uses a fresh schema; cached descriptions default to null.
119+
91120Attempts pin Claude/Codex profile ID, revision and role AgentRef independently of registry
92121reloads. Each has a monotonic number, native/session/binding/workspace identity, writer generation,
93122state, brief delivery, lineage, results/evidence and retention audit. SQL rejects routing
0 commit comments