<feed xmlns='http://www.w3.org/2005/Atom'>
<title>claudomator.git/internal/storage/events_test.go, branch main</title>
<subtitle>claudomator — task automation server
</subtitle>
<id>https://git.terst.org/claudomator.git/atom?h=main</id>
<link rel='self' href='https://git.terst.org/claudomator.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/'/>
<updated>2026-05-24T08:19:23+00:00</updated>
<entry>
<title>feat(storage): emit subtask_spawned events on the parent stream</title>
<updated>2026-05-24T08:19:23+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-05-24T08:19:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=48a8e49cdda833f8af22e839ca3c102c40c97e17'/>
<id>urn:sha1:48a8e49cdda833f8af22e839ca3c102c40c97e17</id>
<content type='text'>
CreateTask is now transactional and, when a task has a parent_task_id,
records a subtask_spawned event (actor agent) on the parent's stream so
the parent's history shows the children it dispatched. Top-level task
creation (no parent) emits nothing.

This closes the one agent-originated signal that flows during a run today
(subtasks POSTed to the API per the planning preamble) but previously
left no trace in the event stream.

https://claude.ai/code/session_01SESwn7kQ7oP62trWw6pc39
</content>
</entry>
<entry>
<title>feat(storage): dual-write question/summary/interaction flows to events</title>
<updated>2026-05-23T08:10:03+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-05-23T08:10:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=b72978f4454235a00a2e5c92b5332b985cc08fa9'/>
<id>urn:sha1:b72978f4454235a00a2e5c92b5332b985cc08fa9</id>
<content type='text'>
The legacy task columns (question_json, summary, interactions_json) now
also emit events in the same transaction as the column update:

- UpdateTaskQuestion(non-empty) -&gt; clarification_request (agent); the
  empty-string clear-on-answer emits nothing
- UpdateTaskSummary -&gt; summary (agent)
- AppendTaskInteraction -&gt; clarification_answer (user)

This populates the event stream from the existing Q&amp;A and summary paths
without removing the old columns yet, setting up their eventual deletion
in the cleanup phase.

https://claude.ai/code/session_01SESwn7kQ7oP62trWw6pc39
</content>
</entry>
<entry>
<title>feat(storage): emit state_change events on task transitions</title>
<updated>2026-05-23T08:07:50+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-05-23T08:07:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=dc97d7ae00bd25668ba495fba249ceade0c6b100'/>
<id>urn:sha1:dc97d7ae00bd25668ba495fba249ceade0c6b100</id>
<content type='text'>
UpdateTaskState now writes a state_change event in the same transaction
as the row update, so the event stream and task state never diverge.
Adds UpdateTaskStateBy(id, newState, actor) for explicit actor
attribution; UpdateTaskState delegates with ActorSystem (correct for the
executor, which drives the state machine). RejectTask and
ResetTaskForRetry also emit state_change events attributed to the user.

API accept and cancel handlers now attribute their transitions to the
user via UpdateTaskStateBy. The executor's Store interface is unchanged,
so no test doubles needed updating.

https://claude.ai/code/session_01SESwn7kQ7oP62trWw6pc39
</content>
</entry>
<entry>
<title>feat(event,storage): add events table substrate for OSS redesign</title>
<updated>2026-05-22T09:08:52+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-05-22T09:08:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=39cc108b5f0bf3d0238a1707d657a77b7a3df184'/>
<id>urn:sha1:39cc108b5f0bf3d0238a1707d657a77b7a3df184</id>
<content type='text'>
New internal/event package defines the Event type with canonical Kind
and Actor constants. New events table is appended via additive migration
(id, task_id, seq, ts, kind, actor, payload_json) with seq as per-task
monotonic, assigned by the storage layer inside a transaction.

CreateEvent + ListEvents support the future migration of question_json,
interactions_json, summary, and elaboration_input off the tasks table
into a unified, replayable event stream. No existing code paths are
modified yet; this is pure substrate for Phase 1.

https://claude.ai/code/session_01SESwn7kQ7oP62trWw6pc39
</content>
</entry>
</feed>
