@eventmodelers/cli 1.0.77 → 1.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/cli.js +0 -1
  2. package/lib/adapters/spec-kitty-adapter.js +1 -1
  3. package/lib/fetch.js +1 -1
  4. package/package.json +1 -1
  5. package/shared/build-kit/lib/ralph.js +2 -2
  6. package/shared/skills/connect/SKILL.md +1 -3
  7. package/shared/skills/learn-eventmodelers-api/SKILL.md +2 -2
  8. package/shared/skills/load-slice/SKILL.md +0 -1
  9. package/shared/skills/request-feedback/SKILL.md +0 -2
  10. package/shared/skills/update-slice-status/SKILL.md +0 -2
  11. package/stacks/modeling-kit/templates/.claude/skills/analyze-existing-model/references/api-fallback.md +0 -6
  12. package/stacks/modeling-kit/templates/.claude/skills/attributes/references/api-fallback.md +1 -2
  13. package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/references/api-fallback.md +0 -2
  14. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/references/api-fallback.md +7 -7
  15. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/references/api-fallback.md +4 -4
  16. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-automation-chains/references/api-fallback.md +1 -1
  17. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/references/api-fallback.md +7 -7
  18. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/references/api-fallback.md +7 -7
  19. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/references/api-fallback.md +5 -5
  20. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-plotting-events/references/api-fallback.md +1 -1
  21. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/references/api-fallback.md +7 -7
  22. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models/references/api-fallback.md +3 -3
  23. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models-checklist/references/api-fallback.md +3 -3
  24. package/stacks/modeling-kit/templates/.claude/skills/examples/references/api-fallback.md +0 -1
  25. package/stacks/modeling-kit/templates/.claude/skills/handle-comment/references/api-fallback.md +4 -4
  26. package/stacks/modeling-kit/templates/.claude/skills/html-screen/references/api-fallback.md +1 -4
  27. package/stacks/modeling-kit/templates/.claude/skills/place-element/SKILL.md +1 -1
  28. package/stacks/modeling-kit/templates/.claude/skills/place-element/references/api-fallback.md +2 -7
  29. package/stacks/modeling-kit/templates/.claude/skills/storyboard/references/api-fallback.md +1 -3
  30. package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/references/api-fallback.md +1 -3
  31. package/stacks/modeling-kit/templates/.claude/skills/wdyt/SKILL.md +1 -1
  32. package/stacks/react/templates/build-kit/lib/ralph.js +2 -2
package/cli.js CHANGED
@@ -3535,7 +3535,6 @@ program
3535
3535
  headers: {
3536
3536
  'Content-Type': 'application/json',
3537
3537
  'x-token': cfg.token,
3538
- 'x-board-id': cfg.boardId,
3539
3538
  'x-user-id': 'cli-set-slice-status',
3540
3539
  ...agentHeaders(cfg),
3541
3540
  },
@@ -51,7 +51,7 @@ async function fetchFullSliceData(cfg, contextName) {
51
51
  const agentId = cfg.agentId || process.env.EVENTMODELERS_AGENT_ID || '';
52
52
  const res = await fetch(url, {
53
53
  headers: {
54
- 'x-token': cfg.token, 'x-board-id': cfg.boardId, 'x-user-id': 'spec-kitty-adapter',
54
+ 'x-token': cfg.token, 'x-user-id': 'spec-kitty-adapter',
55
55
  ...(agentId ? { 'x-agent-id': agentId } : {}),
56
56
  },
57
57
  });
package/lib/fetch.js CHANGED
@@ -76,7 +76,7 @@ export async function runFetch({ cwd, kitDir, cfg, opts = {} }) {
76
76
  // sending it everywhere keeps one rule instead of a per-call judgment about which calls count.
77
77
  const agentId = cfg.agentId || process.env.EVENTMODELERS_AGENT_ID || '';
78
78
  const headers = {
79
- 'x-token': cfg.token, 'x-board-id': cfg.boardId, 'x-user-id': 'cli-fetch',
79
+ 'x-token': cfg.token, 'x-user-id': 'cli-fetch',
80
80
  ...(agentId ? { 'x-agent-id': agentId } : {}),
81
81
  };
82
82
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventmodelers/cli",
3
- "version": "1.0.77",
3
+ "version": "1.0.78",
4
4
  "description": "Eventmodelers CLI — real-time Claude agent + skills for Claude Code, for any stack (Node, Supabase, Axon, OpenCQRS, UmaDB, Kurrent, or modeling-only)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -181,7 +181,7 @@ function slugify(str) {
181
181
  async function fetchAndPersistSlices(cfg, kitDir) {
182
182
  const url = `${cfg.baseUrl}/api/org/${cfg.organizationId}/boards/${cfg.boardId}/slicedata/slices`;
183
183
  const { slices } = await fetchJSON(url, {
184
- headers: { 'x-token': cfg.token, 'x-board-id': cfg.boardId, ...agentHeaders(cfg) },
184
+ headers: { 'x-token': cfg.token, ...agentHeaders(cfg) },
185
185
  });
186
186
  const slicesDir = join(kitDir, '.slices');
187
187
  mkdirSync(slicesDir, { recursive: true });
@@ -498,7 +498,7 @@ async function blockStuckSlice(kitDir, cfg, credentialed, planned, attempts) {
498
498
  try {
499
499
  await fetchJSON(`${cfg.baseUrl}/api/org/${cfg.organizationId}/boards/${cfg.boardId}/nodes/events`, {
500
500
  method: 'POST',
501
- headers: { 'Content-Type': 'application/json', 'x-token': cfg.token, 'x-board-id': cfg.boardId, 'x-user-id': 'ralph-loop', ...agentHeaders(cfg) },
501
+ headers: { 'Content-Type': 'application/json', 'x-token': cfg.token, 'x-user-id': 'ralph-loop', ...agentHeaders(cfg) },
502
502
  body: JSON.stringify([{
503
503
  id: randomUUID(),
504
504
  eventType: 'node:changed',
@@ -22,7 +22,7 @@ After running, the following variables are available for the rest of the session
22
22
  | Variable | Header sent to API | Description |
23
23
  |----------|--------------------|-------------|
24
24
  | `TOKEN` | `x-token` | API token UUID |
25
- | `BOARD_ID` | `x-board-id` | Target board UUID |
25
+ | `BOARD_ID` | | Target board UUID (used in all board-scoped URLs) |
26
26
  | `ORG_ID` | — | Organization UUID (used in all board-scoped URLs) |
27
27
  | `BASE_URL` | — | Base URL, e.g. `http://localhost:3000` |
28
28
  | `AGENT_ID` | `x-agent-id` | This agent process's own id, when running as one (Step 0.5). Optional — skip the header when there is no value. |
@@ -30,7 +30,6 @@ After running, the following variables are available for the rest of the session
30
30
  Every curl-fallback call in every skill must include these headers:
31
31
  ```
32
32
  x-token: <TOKEN>
33
- x-board-id: <BOARD_ID>
34
33
  x-user-id: <skill-name> ← set by each skill individually
35
34
  x-agent-id: <AGENT_ID> ← only when AGENT_ID resolved; omit the line entirely otherwise
36
35
  ```
@@ -243,7 +242,6 @@ Otherwise (no MCP tools visible yet this session), fall back to the equivalent c
243
242
  ```bash
244
243
  curl -s -o /dev/null -w "%{http_code}" \
245
244
  -H "x-token: <TOKEN>" \
246
- -H "x-board-id: <BOARD_ID>" \
247
245
  -H "x-user-id: connect-skill" \
248
246
  "<BASE_URL>/api/org/<ORG_ID>/boards/<BOARD_ID>/nodes?type=CHAPTER"
249
247
  ```
@@ -9,7 +9,7 @@ You now have complete knowledge of the eventmodelers platform API. This is a ref
9
9
 
10
10
  **Load this once per session, on demand — not as a mandatory preamble.** Every other skill already documents the exact API calls it needs inline; none of them require this full reference to be loaded before they can run. Reach for this skill only when you hit a specific endpoint, field, or element type that a skill's own instructions don't cover, and don't reload it again later in the same session once you have.
11
11
 
12
- **Two transports exist for board operations: MCP tools (preferred) and raw REST/curl (fallback).** The `connect` skill registers the MCP server in `.mcp.json`. Once `mcp__eventmodelers__*` tools are visible in your tool list, use them — they need no `x-token`/`x-board-id`/`x-user-id` headers (auth and org resolution happen server-side from the registered token) and return the same data as the REST endpoints below. Fall back to the numbered REST sections only when MCP tools aren't connected yet, or for the handful of endpoints (prompts lifecycle, snapshots, user management, board/extension CRUD) the MCP server intentionally doesn't expose — it only covers board-content operations (nodes, timelines, slices, comments, screens). This preference is about *which transport a skill's own instructions should use*, never about whether to invoke the skill in the first place.
12
+ **Two transports exist for board operations: MCP tools (preferred) and raw REST/curl (fallback).** The `connect` skill registers the MCP server in `.mcp.json`. Once `mcp__eventmodelers__*` tools are visible in your tool list, use them — they need no `x-token`/`x-user-id` headers (auth and org resolution happen server-side from the registered token) and return the same data as the REST endpoints below. Fall back to the numbered REST sections only when MCP tools aren't connected yet, or for the handful of endpoints (prompts lifecycle, snapshots, user management, board/extension CRUD) the MCP server intentionally doesn't expose — it only covers board-content operations (nodes, timelines, slices, comments, screens). This preference is about *which transport a skill's own instructions should use*, never about whether to invoke the skill in the first place.
13
13
 
14
14
  ---
15
15
 
@@ -996,7 +996,7 @@ The same `agent_id` belongs in the `x-agent-id` header of every board call this
996
996
  ---
997
997
 
998
998
  ### GET `/api/org/:orgId/boards/:boardId/agent-alive`
999
- Check whether an agent has pinged for a board within the last 45s. Auth: `x-token` (bot) or a Supabase JWT (`Authorization: Bearer`) — either works.
999
+ Check whether an agent has pinged for a board within the last 45s. Auth: Supabase JWT (`Authorization: Bearer`) — same as the heartbeat above; a raw `x-token` alone is not accepted here either.
1000
1000
 
1001
1001
  **Response**: `200` — `{ alive: boolean, agentTypes: string[], agents: { agentId: string, agentType: string, agentName: string | null }[] }` — one `agents` entry per live agent process, `agentTypes` the de-duplicated set of their types
1002
1002
 
@@ -43,7 +43,6 @@ mcp__eventmodelers__get_slice_data { "boardId": "<BOARD_ID>", "contextName": "<n
43
43
  ```bash
44
44
  curl -s \
45
45
  -H "x-token: <TOKEN>" \
46
- -H "x-board-id: <BOARD_ID>" \
47
46
  -H "x-user-id: load-slice-skill" \
48
47
  "<BASE_URL>/api/org/<ORG_ID>/boards/<BOARD_ID>/slicedata/slices"
49
48
  ```
@@ -72,7 +72,6 @@ mcp__eventmodelers__list_slices { "boardId": "<BOARD_ID>" }
72
72
  ```bash
73
73
  curl -s \
74
74
  -H "x-token: <TOKEN>" \
75
- -H "x-board-id: <BOARD_ID>" \
76
75
  -H "x-user-id: request-feedback-skill" \
77
76
  "<BASE_URL>/api/org/<ORG_ID>/boards/<BOARD_ID>/slicedata/slices"
78
77
  ```
@@ -124,7 +123,6 @@ SLICE_BORDER node's meta directly:
124
123
  curl -s -X POST "<BASE_URL>/api/org/<ORG_ID>/boards/<BOARD_ID>/nodes/events" \
125
124
  -H "Content-Type: application/json" \
126
125
  -H "x-token: <TOKEN>" \
127
- -H "x-board-id: <BOARD_ID>" \
128
126
  -H "x-user-id: request-feedback-skill" \
129
127
  -d '[{
130
128
  "id": "<new-random-uuid>",
@@ -48,7 +48,6 @@ mcp__eventmodelers__list_slices { "boardId": "<BOARD_ID>" }
48
48
  ```bash
49
49
  curl -s \
50
50
  -H "x-token: <TOKEN>" \
51
- -H "x-board-id: <BOARD_ID>" \
52
51
  -H "x-user-id: update-slice-status-skill" \
53
52
  "<BASE_URL>/api/org/<ORG_ID>/boards/<BOARD_ID>/slicedata/slices"
54
53
  ```
@@ -85,7 +84,6 @@ A slice that is being *created* takes its status straight from `create_slice`/`c
85
84
  curl -s -X POST "<BASE_URL>/api/org/<ORG_ID>/boards/<BOARD_ID>/nodes/events" \
86
85
  -H "Content-Type: application/json" \
87
86
  -H "x-token: <TOKEN>" \
88
- -H "x-board-id: <BOARD_ID>" \
89
87
  -H "x-user-id: update-slice-status-skill" \
90
88
  -d '[{
91
89
  "id": "<new-random-uuid>",
@@ -7,7 +7,6 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
7
7
  ```bash
8
8
  curl -s \
9
9
  -H "x-token: $TOKEN" \
10
- -H "x-board-id: $BOARD_ID" \
11
10
  -H "x-user-id: analyze-existing-model" \
12
11
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/slicedata/slices"
13
12
  ```
@@ -19,7 +18,6 @@ Response: `{ "slices": [{ "id": "<uuid>", "title": "<name>", "status": "<status>
19
18
  ```bash
20
19
  curl -s \
21
20
  -H "x-token: $TOKEN" \
22
- -H "x-board-id: $BOARD_ID" \
23
21
  -H "x-user-id: analyze-existing-model" \
24
22
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=MODEL_CONTEXT"
25
23
  ```
@@ -29,7 +27,6 @@ curl -s \
29
27
  ```bash
30
28
  curl -s \
31
29
  -H "x-token: $TOKEN" \
32
- -H "x-board-id: $BOARD_ID" \
33
30
  -H "x-user-id: analyze-existing-model" \
34
31
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/slicedata?contextName=<CONTEXT_NAME>"
35
32
  ```
@@ -46,21 +43,18 @@ Each response contains a `slices` array. Each slice entry includes:
46
43
  # 1. List slices
47
44
  curl -s \
48
45
  -H "x-token: $TOKEN" \
49
- -H "x-board-id: $BOARD_ID" \
50
46
  -H "x-user-id: analyze-existing-model" \
51
47
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/slicedata/slices"
52
48
 
53
49
  # 2. Fetch MODEL_CONTEXT nodes
54
50
  curl -s \
55
51
  -H "x-token: $TOKEN" \
56
- -H "x-board-id: $BOARD_ID" \
57
52
  -H "x-user-id: analyze-existing-model" \
58
53
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=MODEL_CONTEXT"
59
54
 
60
55
  # 3. Fetch full slice data for a context
61
56
  curl -s \
62
57
  -H "x-token: $TOKEN" \
63
- -H "x-board-id: $BOARD_ID" \
64
58
  -H "x-user-id: analyze-existing-model" \
65
59
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/slicedata?contextName=Ordering"
66
60
  ```
@@ -6,7 +6,7 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
6
6
 
7
7
  ```bash
8
8
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$EDGE_SOURCE_ID" \
9
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: attributes-skill"
9
+ -H "x-token: $TOKEN" -H "x-user-id: attributes-skill"
10
10
  ```
11
11
 
12
12
  ## Step 4 — Apply the Change to Each Node in the Chain
@@ -33,7 +33,6 @@ EOF
33
33
  curl -s -w "\n%{http_code}" -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
34
34
  -H "Content-Type: application/json" \
35
35
  -H "x-token: $TOKEN" \
36
- -H "x-board-id: $BOARD_ID" \
37
36
  -H "x-user-id: attributes-skill" \
38
37
  --data-binary @/tmp/attributes_payload.json
39
38
  ```
@@ -16,7 +16,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/chapters" \
16
16
  ```bash
17
17
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
18
18
  -H "x-token: $TOKEN" \
19
- -H "x-board-id: $BOARD_ID" \
20
19
  -H "x-user-id: discover-storyboard" \
21
20
  -H "Content-Type: application/json" \
22
21
  -d '[{
@@ -43,7 +42,6 @@ curl -s -H "x-token: $TOKEN" \
43
42
  ```bash
44
43
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_ID/columns" \
45
44
  -H "x-token: $TOKEN" \
46
- -H "x-board-id: $BOARD_ID" \
47
45
  -H "x-user-id: discover-storyboard" \
48
46
  -H "Content-Type: application/json" \
49
47
  -d '{}'
@@ -5,14 +5,14 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
5
5
  ## Board Context — Check existing EVENT nodes
6
6
 
7
7
  ```bash
8
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
8
+ curl -s -H "x-token: $TOKEN" \
9
9
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
10
10
  ```
11
11
 
12
12
  ## Board Context — Check existing CHAPTER nodes
13
13
 
14
14
  ```bash
15
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
15
+ curl -s -H "x-token: $TOKEN" \
16
16
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=CHAPTER"
17
17
  ```
18
18
 
@@ -20,7 +20,7 @@ curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
20
20
 
21
21
  ```bash
22
22
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/chapters" \
23
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
23
+ -H "x-token: $TOKEN" \
24
24
  -H "Content-Type: application/json" -d '{}'
25
25
  # → { timelineId: "<chapterId>", ... }
26
26
  ```
@@ -29,7 +29,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/chapters" \
29
29
 
30
30
  ```bash
31
31
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
32
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
32
+ -H "x-token: $TOKEN" \
33
33
  -H "x-user-id: brainstorming-events" -H "Content-Type: application/json" \
34
34
  -d '[{
35
35
  "id": "<uuid>",
@@ -45,7 +45,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
45
45
 
46
46
  ```bash
47
47
  curl -s -X PUT "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$TL/position" \
48
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
48
+ -H "x-token: $TOKEN" \
49
49
  -H "Content-Type: application/json" \
50
50
  -d '{"x": 0, "y": 1200}' # first chapter: y=0, second: y=1200, third: y=2400, …
51
51
  ```
@@ -56,7 +56,7 @@ No batch form exists over REST; one call per event:
56
56
 
57
57
  ```bash
58
58
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_ID/columns" \
59
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: brainstorming-events" \
59
+ -H "x-token: $TOKEN" -H "x-user-id: brainstorming-events" \
60
60
  -H "Content-Type: application/json" -d '{}'
61
61
  # → { "columnId": "<colUuid>", "index": <n>, "totalColumns": <n> }
62
62
  ```
@@ -64,7 +64,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_I
64
64
  ## Mode A — Step B: Fetch the chapter to find the swimlane row ID
65
65
 
66
66
  ```bash
67
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
67
+ curl -s -H "x-token: $TOKEN" \
68
68
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$CHAPTER_ID"
69
69
  # → node.meta.timelineData.rows — find the row where type === "swimlane"
70
70
  ```
@@ -6,17 +6,17 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
6
6
 
7
7
  ```bash
8
8
  # All nodes (events, commands, read models, screens)
9
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
9
+ curl -s -H "x-token: $TOKEN" \
10
10
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
11
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
11
+ curl -s -H "x-token: $TOKEN" \
12
12
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=COMMAND"
13
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
13
+ curl -s -H "x-token: $TOKEN" \
14
14
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=READMODEL"
15
15
  ```
16
16
 
17
17
  ## 4. Check Slice Coverage
18
18
 
19
19
  ```bash
20
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
20
+ curl -s -H "x-token: $TOKEN" \
21
21
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SLICE_BORDER"
22
22
  ```
@@ -10,7 +10,7 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
10
10
  4. Create the node:
11
11
  ```bash
12
12
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
13
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: designing-automation-chains" \
13
+ -H "x-token: $TOKEN" -H "x-user-id: designing-automation-chains" \
14
14
  -H "Content-Type: application/json" \
15
15
  -d '[{
16
16
  "id":"<event-uuid>","eventType":"node:created","nodeId":"<node-uuid>",
@@ -6,14 +6,14 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
6
6
 
7
7
  **Step A — Find the event's column ID.** Query the event node to read its current cell:
8
8
  ```bash
9
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
9
+ curl -s -H "x-token: $TOKEN" \
10
10
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$EVENT_NODE_ID"
11
11
  # → node.meta.cellId is "<someRowId>-<columnId>" — extract the columnId part
12
12
  ```
13
13
 
14
14
  **Step B — Fetch the chapter to find the interaction row ID:**
15
15
  ```bash
16
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
16
+ curl -s -H "x-token: $TOKEN" \
17
17
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$CHAPTER_ID"
18
18
  # → timelineData.rows — find the row where type === "interaction"
19
19
  ```
@@ -28,7 +28,7 @@ cellId = interactionRow.id + "-" + columnId
28
28
 
29
29
  ```bash
30
30
  curl -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
31
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: identifying-inputs" \
31
+ -H "x-token: $TOKEN" -H "x-user-id: identifying-inputs" \
32
32
  -H "Content-Type: application/json" \
33
33
  -d '[{
34
34
  "id": "<event-uuid>",
@@ -54,12 +54,12 @@ curl -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
54
54
 
55
55
  ```bash
56
56
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?cellId=<actorRowId>-<columnId>" \
57
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-inputs"
57
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-inputs"
58
58
  ```
59
59
  If a SCREEN node exists, connect it:
60
60
  ```bash
61
61
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
62
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-inputs" \
62
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-inputs" \
63
63
  -H "Content-Type: application/json" \
64
64
  -d '{"source":"<screenNodeId>","target":"<commandNodeId>"}'
65
65
  ```
@@ -68,12 +68,12 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
68
68
 
69
69
  ```bash
70
70
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?cellId=<swimlaneRowId>-<columnId>" \
71
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-inputs"
71
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-inputs"
72
72
  ```
73
73
  Connect command to its resulting event:
74
74
  ```bash
75
75
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
76
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-inputs" \
76
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-inputs" \
77
77
  -H "Content-Type: application/json" \
78
78
  -d '{"source":"<commandNodeId>","target":"<eventNodeId>"}'
79
79
  ```
@@ -6,21 +6,21 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
6
6
 
7
7
  1. Find the column where the consumer SCREEN or AUTOMATION lives. For an AUTOMATION, the read model's target column is always the one immediately **before** it (skip straight to inserting that column — its interaction row is guaranteed occupied by the automation's own COMMAND). For a SCREEN, target the screen's own column. Fetch the timeline to get the interaction row ID:
8
8
  ```bash
9
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
9
+ curl -s -H "x-token: $TOKEN" \
10
10
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$CHAPTER_ID"
11
11
  # → timelineData.rows — find the row where type === "interaction"
12
12
  ```
13
13
  2. Check if the target interaction cell is already occupied (existing COMMAND):
14
14
  ```bash
15
15
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?cellId=<interactionRowId>-<columnId>" \
16
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID"
16
+ -H "x-token: $TOKEN"
17
17
  ```
18
18
  If a COMMAND occupies that cell, insert a new column immediately **before** it (`{"index": currentIndex}` — this shifts the consumer's column, and everything after it, one to the right) and use that new column's ID instead. The read model must end up upstream of (to the left of) its consumer, never downstream of it.
19
19
  3. `cellId = interactionRow.id + "-" + columnId`
20
20
  4. Create the READMODEL:
21
21
  ```bash
22
22
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
23
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: identifying-outputs" \
23
+ -H "x-token: $TOKEN" -H "x-user-id: identifying-outputs" \
24
24
  -H "Content-Type: application/json" \
25
25
  -d '[{
26
26
  "id": "<event-uuid>",
@@ -38,12 +38,12 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
38
38
 
39
39
  ```bash
40
40
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?cellId=<swimlaneRowId>-<columnId>" \
41
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-outputs"
41
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-outputs"
42
42
  ```
43
43
  Connect it:
44
44
  ```bash
45
45
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
46
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-outputs" \
46
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-outputs" \
47
47
  -H "Content-Type: application/json" \
48
48
  -d '{"source":"<eventNodeId>","target":"<readmodelNodeId>"}'
49
49
  ```
@@ -52,7 +52,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
52
52
 
53
53
  ```bash
54
54
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
55
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-outputs" \
55
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-outputs" \
56
56
  -H "Content-Type: application/json" \
57
57
  -d '{"source":"<readmodelNodeId>","target":"<screenNodeId>"}'
58
58
  ```
@@ -61,7 +61,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
61
61
 
62
62
  ```bash
63
63
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/connections" \
64
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: eventmodeling-identifying-outputs" \
64
+ -H "x-token: $TOKEN" -H "x-user-id: eventmodeling-identifying-outputs" \
65
65
  -H "Content-Type: application/json" \
66
66
  -d '{"source":"<readmodelNodeId>","target":"<automationNodeId>"}'
67
67
  ```
@@ -6,7 +6,7 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
6
6
 
7
7
  ```bash
8
8
  for TYPE in EVENT COMMAND READMODEL SCREEN AUTOMATION; do
9
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
9
+ curl -s -H "x-token: $TOKEN" \
10
10
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=$TYPE"
11
11
  done
12
12
  ```
@@ -15,7 +15,7 @@ done
15
15
 
16
16
  ```bash
17
17
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
18
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: orchestrator" \
18
+ -H "x-token: $TOKEN" -H "x-user-id: orchestrator" \
19
19
  -H "Content-Type: application/json" \
20
20
  -d '[{"id":"<uuid>","eventType":"node:changed","nodeId":"<nodeId>","boardId":"<BOARD_ID>",
21
21
  "timestamp":1234567890,"chapterId":"<chapterId>","cellId":"<rowId>-<colId>",
@@ -26,14 +26,14 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
26
26
 
27
27
  ```bash
28
28
  curl -s -X DELETE "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/<nodeId>" \
29
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID"
29
+ -H "x-token: $TOKEN"
30
30
  ```
31
31
 
32
32
  ## Step 11 — Document Reasoning — Add a feedback lane
33
33
 
34
34
  ```bash
35
35
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_ID/lanes" \
36
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: orchestrator" \
36
+ -H "x-token: $TOKEN" -H "x-user-id: orchestrator" \
37
37
  -H "Content-Type: application/json" \
38
38
  -d '{"type":"feedback","label":"Notes"}'
39
39
  # → { laneId, type, label, index, totalLanes }
@@ -43,7 +43,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_I
43
43
 
44
44
  ```bash
45
45
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
46
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: orchestrator" \
46
+ -H "x-token: $TOKEN" -H "x-user-id: orchestrator" \
47
47
  -H "Content-Type: application/json" \
48
48
  -d '[{"id":"<event-uuid>","eventType":"node:created","nodeId":"<node-uuid>","boardId":"<BOARD_ID>",
49
49
  "timestamp":1234567890,"chapterId":"<CHAPTER_ID>","cellId":"<feedbackLaneId>-<firstColumnId>",
@@ -5,6 +5,6 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
5
5
  ## Chapters and Timelines — Resolve the Target Timeline
6
6
 
7
7
  ```bash
8
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
8
+ curl -s -H "x-token: $TOKEN" \
9
9
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=CHAPTER"
10
10
  ```
@@ -5,16 +5,16 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
5
5
  ## Board Integration — Check existing screen nodes
6
6
 
7
7
  ```bash
8
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
8
+ curl -s -H "x-token: $TOKEN" \
9
9
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=HTML_SCREEN"
10
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
10
+ curl -s -H "x-token: $TOKEN" \
11
11
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SCREEN"
12
12
  ```
13
13
 
14
14
  ## Resolve One Actor Lane Per Human Role — Step 1: Fetch the chapter's actor rows
15
15
 
16
16
  ```bash
17
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
17
+ curl -s -H "x-token: $TOKEN" \
18
18
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$CHAPTER_ID"
19
19
  ```
20
20
 
@@ -22,7 +22,7 @@ curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
22
22
 
23
23
  ```bash
24
24
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_ID/lanes" \
25
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
25
+ -H "x-token: $TOKEN" -H "x-user-id: storyboarding-events" \
26
26
  -H "Content-Type: application/json" \
27
27
  -d '{"type": "actor", "label": "<Role Name>"}'
28
28
  ```
@@ -31,7 +31,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_I
31
31
 
32
32
  ```bash
33
33
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/<node-uuid>" \
34
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
34
+ -H "x-token: $TOKEN" -H "x-user-id: storyboarding-events" \
35
35
  -H "Content-Type: application/json" \
36
36
  -d '{
37
37
  "chapterId": "<CHAPTER_ID>",
@@ -46,7 +46,7 @@ Then, over REST only (no `fields` param on the HTML-screen endpoint), still set
46
46
 
47
47
  ```bash
48
48
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
49
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
49
+ -H "x-token: $TOKEN" -H "x-user-id: storyboarding-events" \
50
50
  -H "Content-Type: application/json" \
51
51
  -d '[{
52
52
  "id": "<event-uuid>",
@@ -64,7 +64,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
64
64
 
65
65
  ```bash
66
66
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/images/$NODE_ID/sketch" \
67
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
67
+ -H "x-token: $TOKEN" -H "x-user-id: storyboarding-events" \
68
68
  -H "Content-Type: application/json" \
69
69
  -d '{
70
70
  "description": "<concise description of what this screen shows>",
@@ -5,10 +5,10 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
5
5
  ## Board Context
6
6
 
7
7
  ```bash
8
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
8
+ curl -s -H "x-token: $TOKEN" \
9
9
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
10
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
10
+ curl -s -H "x-token: $TOKEN" \
11
11
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=COMMAND"
12
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
12
+ curl -s -H "x-token: $TOKEN" \
13
13
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=READMODEL"
14
14
  ```
@@ -5,10 +5,10 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
5
5
  ## Board Context
6
6
 
7
7
  ```bash
8
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
8
+ curl -s -H "x-token: $TOKEN" \
9
9
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
10
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
10
+ curl -s -H "x-token: $TOKEN" \
11
11
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=COMMAND"
12
- curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
12
+ curl -s -H "x-token: $TOKEN" \
13
13
  "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=READMODEL"
14
14
  ```
@@ -112,7 +112,6 @@ EOF
112
112
  curl -s -w "\n%{http_code}" -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
113
113
  -H "Content-Type: application/json" \
114
114
  -H "x-token: $TOKEN" \
115
- -H "x-board-id: $BOARD_ID" \
116
115
  -H "x-user-id: examples-skill" \
117
116
  --data-binary @/tmp/examples_payload.json
118
117
  ```
@@ -6,7 +6,7 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
6
6
 
7
7
  ```bash
8
8
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$NODE_ID/comments" \
9
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
9
+ -H "x-token: $TOKEN" \
10
10
  -H "Content-Type: application/json" \
11
11
  -d '{"text":"<text>","type":"<type>","author":"<author>"}'
12
12
  ```
@@ -17,19 +17,19 @@ Response: `201 {"id":"<commentId>"}`
17
17
 
18
18
  ```bash
19
19
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$NODE_ID/comments" \
20
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID"
20
+ -H "x-token: $TOKEN"
21
21
  ```
22
22
 
23
23
  ## Action: resolve — Step B (resolve)
24
24
 
25
25
  ```bash
26
26
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$NODE_ID/comments/$COMMENT_ID/resolve" \
27
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID"
27
+ -H "x-token: $TOKEN"
28
28
  ```
29
29
 
30
30
  ## Action: delete — Step C (delete)
31
31
 
32
32
  ```bash
33
33
  curl -s -X DELETE "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$NODE_ID/comments/$COMMENT_ID" \
34
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID"
34
+ -H "x-token: $TOKEN"
35
35
  ```
@@ -7,7 +7,6 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
7
7
  ```bash
8
8
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$NODE_ID" \
9
9
  -H "x-token: $TOKEN" \
10
- -H "x-board-id: $BOARD_ID" \
11
10
  -H "x-user-id: agent"
12
11
  ```
13
12
 
@@ -16,7 +15,6 @@ curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$NODE_ID" \
16
15
  ```bash
17
16
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screens/$NODE_ID" \
18
17
  -H "x-token: $TOKEN" \
19
- -H "x-board-id: $BOARD_ID" \
20
18
  -H "x-user-id: agent" \
21
19
  -H "Content-Type: application/json" \
22
20
  -d '{"pages": ["<div>...</div>", "<div>...</div>"]}'
@@ -28,7 +26,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screens/$NODE_I
28
26
  NODE_ID=$(uuidgen)
29
27
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/$NODE_ID" \
30
28
  -H "x-token: $TOKEN" \
31
- -H "x-board-id: $BOARD_ID" \
32
29
  -H "x-user-id: agent" \
33
30
  -H "Content-Type: application/json" \
34
31
  -d '{"chapterId": "'"$CHAPTER_ID"'", "cellName": "'"$CELL_NAME"'", "title": "<Screen Title>", "pages": ["<div>...</div>"]}'
@@ -38,7 +35,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/$N
38
35
 
39
36
  ```bash
40
37
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
41
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: agent" \
38
+ -H "x-token: $TOKEN" -H "x-user-id: agent" \
42
39
  -H "Content-Type: application/json" \
43
40
  -d '[{
44
41
  "id": "<event-uuid>", "eventType": "node:changed", "nodeId": "<NODE_ID>",
@@ -309,7 +309,7 @@ Pass whichever cell reference you already resolved — `CELL_ID` from Step 6, or
309
309
 
310
310
  ### Step 7b — All other element types
311
311
 
312
- Include `x-token`, `x-board-id`, and `x-user-id: agent` on every call to `/nodes/events`.
312
+ Include `x-token` and `x-user-id: agent` on every call to `/nodes/events`.
313
313
 
314
314
  This step applies to `SCREEN` (view/output conflict case), `AUTOMATION`, `SCENARIO`-adjacent cleanup, and to `COMMAND`/`READMODEL`/`EVENT` whenever the "Prefer MCP — `place_element`" fast path above doesn't apply (explicit `cellName`, `"after <title>"` positioning, or conflict-insertion cases resolved manually in Step 6).
315
315
 
@@ -45,7 +45,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$TL/column
45
45
  ```bash
46
46
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$TIMELINE_ID/columns" \
47
47
  -H "x-token: $TOKEN" \
48
- -H "x-board-id: $BOARD_ID" \
49
48
  -H "x-user-id: agent" \
50
49
  -H "Content-Type: application/json" \
51
50
  -d '{}'
@@ -75,7 +74,7 @@ No relative-insertion equivalent over REST (unlike MCP's `afterNodeId`) — comp
75
74
 
76
75
  ```bash
77
76
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$TIMELINE_ID/columns" \
78
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: agent" \
77
+ -H "x-token: $TOKEN" -H "x-user-id: agent" \
79
78
  -H "Content-Type: application/json" \
80
79
  -d '{"index": <currentColumnIndex + 1>}'
81
80
  ```
@@ -89,7 +88,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$TIMELINE_
89
88
  ```bash
90
89
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/<node-uuid>" \
91
90
  -H "x-token: $TOKEN" \
92
- -H "x-board-id: $BOARD_ID" \
93
91
  -H "x-user-id: agent" \
94
92
  -H "Content-Type: application/json" \
95
93
  -d '{
@@ -105,7 +103,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/<n
105
103
  ```bash
106
104
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/image-nodes/<node-uuid>/sketch" \
107
105
  -H "x-token: $TOKEN" \
108
- -H "x-board-id: $BOARD_ID" \
109
106
  -H "x-user-id: agent" \
110
107
  -H "Content-Type: application/json" \
111
108
  -d '{
@@ -119,12 +116,11 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/image-nodes/<node-uu
119
116
 
120
117
  ## Step 7b — Create any other node type (normal path, `cellId`)
121
118
 
122
- Include `x-token`, `x-board-id`, and `x-user-id: agent` on every call to `/nodes/events`.
119
+ Include `x-token` and `x-user-id: agent` on every call to `/nodes/events`.
123
120
 
124
121
  ```bash
125
122
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
126
123
  -H "x-token: $TOKEN" \
127
- -H "x-board-id: $BOARD_ID" \
128
124
  -H "x-user-id: agent" \
129
125
  -H "Content-Type: application/json" \
130
126
  -d '[{
@@ -149,7 +145,6 @@ Same as above, but `cellName` replaces `cellId` — nothing else in the payload
149
145
  ```bash
150
146
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
151
147
  -H "x-token: $TOKEN" \
152
- -H "x-board-id: $BOARD_ID" \
153
148
  -H "x-user-id: agent" \
154
149
  -H "Content-Type: application/json" \
155
150
  -d '[{
@@ -33,7 +33,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_I
33
33
  ```bash
34
34
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/$SCREEN_NODE_ID" \
35
35
  -H "x-token: $TOKEN" \
36
- -H "x-board-id: $BOARD_ID" \
37
36
  -H "x-user-id: agent" \
38
37
  -H "Content-Type: application/json" \
39
38
  -d '{
@@ -49,7 +48,6 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/$S
49
48
  ```bash
50
49
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/image-nodes/$SCREEN_NODE_ID/sketch" \
51
50
  -H "x-token: $TOKEN" \
52
- -H "x-board-id: $BOARD_ID" \
53
51
  -H "x-user-id: agent" \
54
52
  -H "Content-Type: application/json" \
55
53
  -d '{
@@ -65,7 +63,7 @@ curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/image-nodes/$SCREEN_
65
63
 
66
64
  ```bash
67
65
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
68
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: agent" \
66
+ -H "x-token: $TOKEN" -H "x-user-id: agent" \
69
67
  -H "Content-Type: application/json" \
70
68
  -d '[{
71
69
  "id": "<event-uuid>", "eventType": "node:changed", "nodeId": "<SCREEN_NODE_ID>",
@@ -7,7 +7,6 @@ Only needed when MCP is not connected. Every call below has an MCP equivalent in
7
7
  ```bash
8
8
  curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/images/$NODE_ID/description" \
9
9
  -H "x-token: $TOKEN" \
10
- -H "x-board-id: $BOARD_ID" \
11
10
  -H "x-user-id: agent"
12
11
  ```
13
12
 
@@ -19,7 +18,6 @@ curl -s "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/images/$NODE_ID/description"
19
18
  ```bash
20
19
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/images/$NODE_ID/sketch" \
21
20
  -H "x-token: $TOKEN" \
22
- -H "x-board-id: $BOARD_ID" \
23
21
  -H "x-user-id: agent" \
24
22
  -H "Content-Type: application/json" \
25
23
  -d '{"description": "<what this screen shows>", "elements": [...]}'
@@ -31,7 +29,7 @@ Expect `204 No Content` on success.
31
29
 
32
30
  ```bash
33
31
  curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
34
- -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: agent" \
32
+ -H "x-token: $TOKEN" -H "x-user-id: agent" \
35
33
  -H "Content-Type: application/json" \
36
34
  -d '[{
37
35
  "id": "<event-uuid>", "eventType": "node:changed", "nodeId": "<NODE_ID>",
@@ -146,7 +146,7 @@ Only post questions that are **genuinely unclear or missing** — don't post obs
146
146
 
147
147
  **Prefer MCP:** `mcp__eventmodelers__create_drawing` — one call per drawing, no auth headers needed.
148
148
 
149
- **Fallback (no MCP):** `POST /api/org/{orgId}/boards/{boardId}/drawing/draw` (auth headers same as every other call — `x-token`, `x-board-id`, `x-user-id: wdyt`). Same fields as the tool args below.
149
+ **Fallback (no MCP):** `POST /api/org/{orgId}/boards/{boardId}/drawing/draw` (auth headers same as every other call — `x-token`, `x-user-id: wdyt`). Same fields as the tool args below.
150
150
 
151
151
  There are two kinds — no text-callout kind; a drawing never carries the question itself, only the shape of the concern:
152
152
 
@@ -178,7 +178,7 @@ function slugify(str) {
178
178
  async function fetchAndPersistSlices(cfg, kitDir) {
179
179
  const url = `${cfg.baseUrl}/api/org/${cfg.organizationId}/boards/${cfg.boardId}/slicedata/slices`;
180
180
  const { slices } = await fetchJSON(url, {
181
- headers: { 'x-token': cfg.token, 'x-board-id': cfg.boardId, ...agentHeaders(cfg) },
181
+ headers: { 'x-token': cfg.token, ...agentHeaders(cfg) },
182
182
  });
183
183
  const slicesDir = join(kitDir, '.slices');
184
184
  mkdirSync(slicesDir, { recursive: true });
@@ -400,7 +400,7 @@ async function blockStuckSlice(kitDir, cfg, credentialed, planned, attempts) {
400
400
  try {
401
401
  await fetchJSON(`${cfg.baseUrl}/api/org/${cfg.organizationId}/boards/${cfg.boardId}/nodes/events`, {
402
402
  method: 'POST',
403
- headers: { 'Content-Type': 'application/json', 'x-token': cfg.token, 'x-board-id': cfg.boardId, 'x-user-id': 'ralph-loop', ...agentHeaders(cfg) },
403
+ headers: { 'Content-Type': 'application/json', 'x-token': cfg.token, 'x-user-id': 'ralph-loop', ...agentHeaders(cfg) },
404
404
  body: JSON.stringify([{
405
405
  id: randomUUID(),
406
406
  eventType: 'node:changed',