project.changed
Somebody’s push moved the room’s project forward: who, which commits, and the files they changed.
Direction: Chips → the log
Sent by: Chips only; refused from a client
Requires a run: no
Schema: project.changed.json
Fields
Section titled “Fields”Every event also carries the envelope.
| Field | Required | Type | Description |
|---|---|---|---|
v |
yes | 1 |
Protocol major version. |
type |
yes | "project.changed" |
|
id |
yes | string |
The event’s own id. Stable across a retry of the same event. |
ts |
yes | string |
When it happened, by Chips’ clock. Stamped on the way in; a value the sender writes is replaced. |
workspace_id |
yes | string |
A workspace identifier: ws_ followed by a ULID. |
space_id |
no | string |
The space, when the event belongs to one. |
run_id |
no | string |
The run, when the event belongs to one. |
seq |
no | number |
Assigned by the server on append, monotonic per workspace. Absent on the way in. |
idempotency_key |
no | string |
Required on every client-originated write. Sending the same key twice is a no-op. |
actor |
yes | object | The participant an event is attributed to. |
actor.kind |
yes | "person" | "harness" | "agent" | "system" |
Whether a person, a harness, one of a harness’s agents or Chips itself acted. |
actor.id |
yes | string |
The participant id, or system for Chips. |
actor.harness_id |
no | string |
For an agent: the harness it speaks through, whose budget and runs are the agent’s (ADR 0087). Filled in by Chips. |
by |
yes | string |
Who pushed: the agent a harness named, or the person. Recorded by Chips. |
before |
yes | string | null |
Where main was, or null for the project’s first push. |
after |
yes | string |
Where main is now. |
commits |
yes | number |
How many commits the push added to main. |
message |
yes | string |
The first line of the newest commit’s message. |
files |
yes | object[] | What changed between before and after, in path order. |
files[].path |
yes | string |
Its path in the project, with / between folders. |
files[].added |
yes | number | null |
Lines added; null for a binary file. |
files[].removed |
yes | number | null |
Lines removed; null for a binary file. |
more_files |
no | number |
How many more files changed than are named. |
file_count |
no | number |
How many files main has now, for the room sheet’s Project tile (ADR 0222). |
undoes |
no | string |
The change this one takes back, when it is a person’s Undo, or Put it back’s Undo of an Undo (ADR 0222). |
Example
Section titled “Example”{ "v": 1, "type": "project.changed", "id": "evt_01K4ZQPX0000000000000000PC", "ts": "2026-10-23T09:52:04.118Z", "workspace_id": "ws_01K4ZQPX000000000000000001", "space_id": "spc_01K4ZQPX000000000000000002", "actor": { "kind": "agent", "id": "agt_01K4ZQPX0000000000000000W1" }, "by": "agt_01K4ZQPX0000000000000000W1", "before": "9f2c1d8e7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2e", "after": "4b8e2a1f9c7d6e5b4a3f2e1d0c9b8a7f6e5d4c3b", "commits": 1, "message": "Keep the list when the page reloads", "files": [ { "path": "src/store.js", "added": 10, "removed": 3 }, { "path": "tests/store.test.js", "added": 16, "removed": 0 } ]}