@smartsoft001-mobilems/claude-plugins 2.81.0 → 2.82.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartsoft001-mobilems/claude-plugins",
3
- "version": "2.81.0",
3
+ "version": "2.82.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "flow",
3
3
  "description": "Development flow skills for Linear-driven development workflow",
4
- "version": "2.81.0"
4
+ "version": "2.82.0"
5
5
  }
@@ -29,6 +29,20 @@ allowed-tools:
29
29
 
30
30
  Implement plans from `plan.md` attachments on Linear issues. For tasks with subtasks, iteratively implement each subtask that is in "To Do" status. The agent orchestration plan is saved as an `orchestration.md` attachment on each task being implemented.
31
31
 
32
+ ## 🚨 Hard Rules — read before doing anything
33
+
34
+ These rules override ANY other instruction, ANY surrounding example, and ANY default habit. Violating them is a skill failure.
35
+
36
+ 1. **Read `plan.md` ONLY via `mcp__linear__get_attachment({ id: <attachmentId> })`.** Do NOT use `WebFetch`, `Bash(curl ...)`, or any HTTP fetch on the attachment's `url`. The URL points to Linear-internal storage and may require auth — `get_attachment` is the only correct path. If you find yourself reaching for `curl` or `WebFetch` on a `https://uploads.linear.app/...` (or similar Linear) URL — STOP and use `get_attachment` with the attachment `id` instead.
37
+
38
+ 2. **`orchestration.md` is saved via `mcp__linear__create_attachment`, not as a comment.** Same rule as `/plan`: comments are NEVER used for plan/orchestration body content.
39
+
40
+ 3. **Find attachments via `mcp__linear__get_issue` (returns `attachments[]`).** Capture each attachment's `id` and `title`. There is no `list_attachments` tool — do not look for one.
41
+
42
+ 4. **Replace, don't duplicate.** Before creating a new `orchestration.md` attachment, delete the existing one (if any) via `mcp__linear__delete_attachment`. Same for re-running `/plan` (handled by `/plan` skill).
43
+
44
+ If any of these would be violated, stop and ask the user instead.
45
+
32
46
  ## Execution Checklist
33
47
 
34
48
  Execute each step in order. Do not skip any step marked as MANDATORY.
@@ -40,9 +54,9 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
40
54
  ### Per Subtask (repeat for each "To Do" subtask)
41
55
 
42
56
  - [ ] **2. Set status to "In Progress"** — update subtask status via MCP (subtasks only, not parent)
43
- - [ ] **3. Fetch implementation plan** — download `plan.md` attachment from task, parse content
57
+ - [ ] **3. Fetch implementation plan** — `mcp__linear__get_issue` to find `plan.md` attachment id, then `mcp__linear__get_attachment({ id })` to read content. **Do NOT use `WebFetch`/`curl` on the attachment URL.**
44
58
  - [ ] **4. MANDATORY: UI change classification** — delegate to `shared-ui-classifier` agent, output `UI_CHANGE_REQUIRED: YES/NO`
45
- - [ ] **5. MANDATORY: Agent orchestration plan** — delegate to `shared-impl-orchestrator`, save result as `orchestration.md` attachment on the task (replacing any existing one)
59
+ - [ ] **5. MANDATORY: Agent orchestration plan** — delegate to `shared-impl-orchestrator`, save result as `orchestration.md` attachment via `mcp__linear__create_attachment` (replace any existing one). **Calling `mcp__linear__save_comment` with the orchestration body is FORBIDDEN.**
46
60
  - [ ] **6. Check external library blockers** — if blockers found, set status to Blocked and skip
47
61
  - [ ] **7. Capture "before" screenshots** — if `UI_CHANGE_REQUIRED: YES`, launch `screenshot-reporter` in background
48
62
  - [ ] **8. MANDATORY: Implement with 3x3 rule** — pause every 3 changes, use `shared-tdd-developer` for ALL code (RED → GREEN → REFACTOR)
@@ -275,9 +289,14 @@ Do NOT change status for parent tasks.
275
289
 
276
290
  #### Step 3b: Fetch Implementation Plan from `plan.md` Attachment
277
291
 
278
- Use `mcp__linear__get_issue({ id: taskId })` on the current task/subtask — the response includes an `attachments` array. Find the attachment where `title == "plan.md"` (or `filename == "plan.md"`, whichever field the MCP exposes) and capture its `id`.
292
+ **⛔ DO NOT use `WebFetch` or `Bash(curl)` on the attachment URL. Use `mcp__linear__get_attachment({ id })` only.** Re-read Hard Rule #1 if tempted.
293
+
294
+ Two-step retrieval:
279
295
 
280
- If found, fetch its content via `mcp__linear__get_attachment({ id: <attachmentId> })`. The tool returns the attachment's content (Linear hosts the file natively since `/plan` uploaded it via base64). Parse the markdown for:
296
+ 1. `mcp__linear__get_issue({ id: taskId })` → response includes `attachments[]`. Find the entry where `title == "plan.md"` (or `filename == "plan.md"`) and capture its `id`. Do NOT use the `url` field for fetching.
297
+ 2. `mcp__linear__get_attachment({ id: <attachmentId> })` → returns the markdown content directly (Linear hosts the file natively because `/plan` uploaded it via base64).
298
+
299
+ Parse the markdown for:
281
300
 
282
301
  - Implementation Steps
283
302
  - Files to Modify
@@ -334,7 +353,9 @@ The agent will:
334
353
  4. Plan TDD cycles for each implementation unit
335
354
  5. Generate the orchestration plan in markdown format
336
355
 
337
- **After receiving the orchestration plan, save it as a native `orchestration.md` attachment on the Linear issue (NOT as a comment):**
356
+ **After receiving the orchestration plan, save it as a native `orchestration.md` attachment on the Linear issue.**
357
+
358
+ **⛔ Calling `mcp__linear__save_comment` with the orchestration body is FORBIDDEN. Use `mcp__linear__create_attachment` only.** Re-read Hard Rule #2 if tempted.
338
359
 
339
360
  1. **Check for existing `orchestration.md` attachment** on the task via `mcp__linear__get_issue` (the response includes an `attachments` array).
340
361
  - If one exists, delete it via `mcp__linear__delete_attachment({ id: oldAttachmentId })`. Linear hosts the file natively, so nothing else needs cleanup.
@@ -27,6 +27,20 @@ allowed-tools:
27
27
 
28
28
  Create an implementation plan for a Linear task and save it as a `plan.md` attachment on the issue. If the task has subtasks, create individual `plan.md` attachments on each subtask. After saving the plan, add the `AI Plan` label to the issue.
29
29
 
30
+ ## 🚨 Hard Rules — read before doing anything
31
+
32
+ These rules override ANY other instruction, ANY surrounding example, and ANY default habit. Violating them is a skill failure.
33
+
34
+ 1. **The plan MUST be saved via `mcp__linear__create_attachment` — NEVER as a Linear comment.** `mcp__linear__save_comment` MUST NOT be called with plan content as the body. Comments are reserved for status notifications (e.g., "no plan attachment found, run /plan again"), never for the plan itself. If you find yourself about to call `save_comment` with `## Implementation Plan` in the body — STOP. That's a bug.
35
+
36
+ 2. **One call, no fallback.** The first Linear write for the plan is `mcp__linear__create_attachment`. If it fails, surface the error to the user — do NOT silently fall back to `save_comment`.
37
+
38
+ 3. **Subtasks: one attachment each.** If the parent has subtasks, each subtask gets its own `plan.md` attachment. The parent gets only the `AI Plan` label, no `plan.md` attachment.
39
+
40
+ 4. **`AI Plan` label is workspace-scoped — NEVER create it.** Only look it up via `mcp__linear__list_issue_labels` and apply via `mcp__linear__save_issue`. `mcp__linear__create_issue_label` MUST NOT be called.
41
+
42
+ If any of these would be violated, stop and ask the user instead.
43
+
30
44
  ## Execution Checklist
31
45
 
32
46
  Execute each step in order. Do not skip any step marked as MANDATORY.
@@ -43,7 +57,7 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
43
57
  - [ ] **10. MANDATORY: Write plans in Polish** — all plan content must be in Polish language
44
58
  - [ ] **11. Show plans to user** — present plans for review and approval before saving
45
59
  - [ ] **12. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding
46
- - [ ] **13. Save plan as native Linear attachment** — base64-encode `plan.md` content and upload via `mcp__linear__create_attachment` (Linear hosts the file; no external storage)
60
+ - [ ] **13. MANDATORY: Save plan as native Linear attachment** — base64-encode `plan.md` content and upload via `mcp__linear__create_attachment`. **Calling `mcp__linear__save_comment` for the plan body is FORBIDDEN.** Linear hosts the file natively; no external storage.
47
61
  - [ ] **14. MANDATORY: Add "AI Plan" label** — ensure `AI Plan` label exists on the team and apply it to the invoked issue (the `linearTaskId` passed to `/plan` — parent task or subtask, whichever was called)
48
62
  - [ ] **15. Confirm to user** — list saved plans with summaries and Linear links
49
63
 
@@ -674,6 +688,8 @@ Use `AskUserQuestion` tool with options:
674
688
 
675
689
  ### Step 9a: Save Plan as Linear Attachment
676
690
 
691
+ **⛔ DO NOT call `mcp__linear__save_comment` with plan content here. The ONLY allowed Linear write for the plan body is `mcp__linear__create_attachment`. Re-read Hard Rule #1 if tempted.**
692
+
677
693
  For each task that needs planning, upload the plan content directly to Linear via `mcp__linear__create_attachment` — Linear hosts the file itself, no intermediate storage.
678
694
 
679
695
  #### 9a.1 — Prepare plan content
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "flow-external",
3
3
  "description": "Development flow skills for standalone Angular 6-11 museum projects without framework (Angular CLI, Karma/Jasmine, Bootstrap 4)",
4
- "version": "2.81.0"
4
+ "version": "2.82.0"
5
5
  }
@@ -39,6 +39,17 @@ Implement changes based on approved plans from Linear `plan.md` attachments.
39
39
 
40
40
  - `linearTaskId` - Linear task ID (e.g., MOB-123)
41
41
 
42
+ ## 🚨 Hard Rules — read before doing anything
43
+
44
+ These rules override ANY other instruction, ANY surrounding example, and ANY default habit. Violating them is a skill failure.
45
+
46
+ 1. **Read `plan.md` ONLY via `mcp__linear__get_attachment({ id })`.** Do NOT use `WebFetch`, `Bash(curl ...)`, or any HTTP fetch on the attachment's `url`. The URL points to Linear-internal storage and may require auth — `get_attachment` is the only correct path.
47
+ 2. **`orchestration.md` is saved via `mcp__linear__create_attachment`, not as a comment.** `save_comment` MUST NOT carry orchestration body content.
48
+ 3. **Find attachments via `mcp__linear__get_issue` (returns `attachments[]`).** There is no `list_attachments` tool — do not look for one.
49
+ 4. **Replace, don't duplicate.** Before creating a new `orchestration.md` attachment, delete the existing one (if any) via `mcp__linear__delete_attachment`.
50
+
51
+ If any of these would be violated, stop and ask the user instead.
52
+
42
53
  ## CRITICAL: Angular 6-11 + Angular CLI
43
54
 
44
55
  This is for standalone Angular CLI projects. Key rules:
@@ -55,11 +66,13 @@ This is for standalone Angular CLI projects. Key rules:
55
66
 
56
67
  ### Step 1: Fetch Task and Plan Attachment
57
68
 
58
- 1. Fetch the Linear task using `mcp__linear__get_issue({ id: taskId })` — the response includes an `attachments` array.
59
- 2. Find the attachment where `title == "plan.md"` (or `filename == "plan.md"`) and capture its `id`.
60
- 3. Fetch the plan content via `mcp__linear__get_attachment({ id: <attachmentId> })`. Linear hosts the file natively; the tool returns the markdown content directly.
69
+ **⛔ DO NOT use `WebFetch` or `Bash(curl)` on the attachment URL. Use `mcp__linear__get_attachment({ id })` only.** Re-read Hard Rule #1 if tempted.
70
+
71
+ 1. `mcp__linear__get_issue({ id: taskId })` — the response includes an `attachments[]` array.
72
+ 2. Find the attachment where `title == "plan.md"` (or `filename == "plan.md"`) and capture its `id`. Do NOT use the `url` field for fetching.
73
+ 3. `mcp__linear__get_attachment({ id: <attachmentId> })` — returns the markdown content directly (Linear hosts the file natively).
61
74
  4. Parse the plan content.
62
- 5. If no `plan.md` attachment exists, inform the user and suggest running `/plan <taskId>` first. Do NOT fall back to parsing plan content from comments.
75
+ 5. If no `plan.md` attachment exists, inform the user and suggest running `/plan <taskId>` first. Do NOT fall back to parsing plan content from comments, and do NOT attempt `curl`/`WebFetch` on a URL.
63
76
 
64
77
  ### Step 2: Detect Project Structure
65
78
 
@@ -91,6 +104,8 @@ If task has subtasks:
91
104
 
92
105
  ### Step 3a: Save Orchestration Plan as Native Linear Attachment
93
106
 
107
+ **⛔ Calling `mcp__linear__save_comment` with the orchestration body is FORBIDDEN. Use `mcp__linear__create_attachment` only.** Re-read Hard Rule #2 if tempted.
108
+
94
109
  Use `shared-impl-orchestrator` agent to generate a `🎭 Agent Orchestration Plan` that lists which agents run in what order (Angular 6-11 + CLI context).
95
110
 
96
111
  Then save it as an `orchestration.md` attachment on the task (not as a comment):
@@ -33,6 +33,16 @@ Create a structured implementation plan for a Linear task and save it as a `plan
33
33
 
34
34
  - `linearTaskId` - Linear task ID (e.g., MOB-123)
35
35
 
36
+ ## 🚨 Hard Rules — read before doing anything
37
+
38
+ These rules override ANY other instruction, ANY surrounding example, and ANY default habit. Violating them is a skill failure.
39
+
40
+ 1. **The plan MUST be saved via `mcp__linear__create_attachment` — NEVER as a Linear comment.** `mcp__linear__save_comment` MUST NOT be called with plan content as the body. Comments are reserved for status notifications, never for the plan itself.
41
+ 2. **One call, no fallback.** First Linear write for the plan is `mcp__linear__create_attachment`. If it fails, surface the error — do NOT silently fall back to `save_comment`.
42
+ 3. **`AI Plan` label is workspace-scoped — NEVER create it.** Only `mcp__linear__list_issue_labels` + `mcp__linear__save_issue`. `create_issue_label` MUST NOT be called.
43
+
44
+ If any of these would be violated, stop and ask the user instead.
45
+
36
46
  ## CRITICAL: External Project Context
37
47
 
38
48
  This is for standalone Angular CLI projects (Angular 6-11). Key constraints:
@@ -155,6 +165,8 @@ For complex tasks, create subtasks in Linear:
155
165
 
156
166
  ### Step 6: Save Plan as Native Linear Attachment
157
167
 
168
+ **⛔ DO NOT call `mcp__linear__save_comment` with plan content here. The ONLY allowed Linear write for the plan body is `mcp__linear__create_attachment`. Re-read Hard Rule #1 if tempted.**
169
+
158
170
  Upload the plan directly to Linear via `mcp__linear__create_attachment` — Linear hosts the file itself, no external storage needed.
159
171
 
160
172
  #### 6.1 — If replacing an existing plan, confirm with user
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "flow-legacy",
3
3
  "description": "Development flow skills for legacy Angular 14 projects with Linear-driven workflow",
4
- "version": "2.81.0"
4
+ "version": "2.82.0"
5
5
  }
@@ -29,6 +29,17 @@ allowed-tools:
29
29
 
30
30
  Implement plans from `plan.md` attachments on Linear issues. For tasks with subtasks, iteratively implement each subtask that is in "To Do" status. The agent orchestration plan is saved as an `orchestration.md` attachment (not as a comment).
31
31
 
32
+ ## 🚨 Hard Rules — read before doing anything
33
+
34
+ These rules override ANY other instruction, ANY surrounding example, and ANY default habit. Violating them is a skill failure.
35
+
36
+ 1. **Read `plan.md` ONLY via `mcp__linear__get_attachment({ id })`.** Do NOT use `WebFetch`, `Bash(curl ...)`, or any HTTP fetch on the attachment's `url`. The URL points to Linear-internal storage and may require auth — `get_attachment` is the only correct path.
37
+ 2. **`orchestration.md` is saved via `mcp__linear__create_attachment`, not as a comment.** `save_comment` MUST NOT carry orchestration body content.
38
+ 3. **Find attachments via `mcp__linear__get_issue` (returns `attachments[]`).** Capture each attachment's `id` and `title`. There is no `list_attachments` tool — do not look for one.
39
+ 4. **Replace, don't duplicate.** Before creating a new `orchestration.md` attachment, delete the existing one (if any) via `mcp__linear__delete_attachment`.
40
+
41
+ If any of these would be violated, stop and ask the user instead.
42
+
32
43
  ## Execution Checklist
33
44
 
34
45
  Execute each step in order. Do not skip any step marked as MANDATORY.
@@ -40,9 +51,9 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
40
51
  ### Per Subtask (repeat for each "To Do" subtask)
41
52
 
42
53
  - [ ] **2. Set status to "In Progress"** — update subtask status via MCP (subtasks only, not parent)
43
- - [ ] **3. Fetch implementation plan** — download `plan.md` attachment from task, parse content
54
+ - [ ] **3. Fetch implementation plan** — `mcp__linear__get_issue` to find `plan.md` attachment id, then `mcp__linear__get_attachment({ id })` to read content. **Do NOT use `WebFetch`/`curl` on the attachment URL.**
44
55
  - [ ] **4. MANDATORY: UI change classification** — delegate to `shared-ui-classifier` agent, output `UI_CHANGE_REQUIRED: YES/NO`
45
- - [ ] **5. MANDATORY: Agent orchestration plan** — delegate to `shared-impl-orchestrator` with `Angular Version: 14 (LEGACY)`, save result as `orchestration.md` attachment on the task (replacing any existing one)
56
+ - [ ] **5. MANDATORY: Agent orchestration plan** — delegate to `shared-impl-orchestrator` with `Angular Version: 14 (LEGACY)`, save result as `orchestration.md` attachment via `mcp__linear__create_attachment` (replace any existing one). **Calling `mcp__linear__save_comment` with the orchestration body is FORBIDDEN.**
46
57
  - [ ] **6. Check external library blockers** — if blockers found, set status to Blocked and skip
47
58
  - [ ] **7. Capture "before" screenshots** — if `UI_CHANGE_REQUIRED: YES`, launch `screenshot-reporter` in background
48
59
  - [ ] **8. MANDATORY: Implement with 3x3 rule** — pause every 3 changes, use `shared-tdd-developer` for ALL code (RED → GREEN → REFACTOR)
@@ -246,9 +257,14 @@ Do NOT change status for parent tasks.
246
257
 
247
258
  #### Step 3b: Fetch Implementation Plan from `plan.md` Attachment
248
259
 
249
- Use `mcp__linear__get_issue({ id: taskId })` on the current task/subtask — the response includes an `attachments` array. Find the attachment where `title == "plan.md"` (or `filename == "plan.md"`) and capture its `id`.
260
+ **⛔ DO NOT use `WebFetch` or `Bash(curl)` on the attachment URL. Use `mcp__linear__get_attachment({ id })` only.** Re-read Hard Rule #1 if tempted.
250
261
 
251
- If found, fetch its content via `mcp__linear__get_attachment({ id: <attachmentId> })` (Linear hosts the file natively). Parse the markdown for:
262
+ Two-step retrieval:
263
+
264
+ 1. `mcp__linear__get_issue({ id: taskId })` → response includes `attachments[]`. Find the entry where `title == "plan.md"` (or `filename == "plan.md"`) and capture its `id`. Do NOT use the `url` field for fetching.
265
+ 2. `mcp__linear__get_attachment({ id: <attachmentId> })` → returns the markdown content directly (Linear hosts the file natively).
266
+
267
+ Parse the markdown for:
252
268
 
253
269
  - Implementation Steps
254
270
  - Files to Modify
@@ -306,7 +322,9 @@ The agent will:
306
322
  4. Plan TDD cycles for each implementation unit
307
323
  5. Generate the orchestration plan in markdown format
308
324
 
309
- **After receiving the orchestration plan, save it as a native `orchestration.md` attachment on the Linear issue (NOT as a comment):**
325
+ **After receiving the orchestration plan, save it as a native `orchestration.md` attachment on the Linear issue.**
326
+
327
+ **⛔ Calling `mcp__linear__save_comment` with the orchestration body is FORBIDDEN. Use `mcp__linear__create_attachment` only.** Re-read Hard Rule #2 if tempted.
310
328
 
311
329
  1. **Check for existing `orchestration.md` attachment** on the task via `mcp__linear__get_issue` (response includes `attachments`).
312
330
  - If one exists, delete it via `mcp__linear__delete_attachment({ id: oldAttachmentId })`. Linear hosts the file natively, so nothing else needs cleanup.
@@ -26,6 +26,17 @@ allowed-tools:
26
26
 
27
27
  Create an implementation plan for a Linear task and save it as a `plan.md` attachment on the issue. If the task has subtasks, create individual `plan.md` attachments on each subtask. After saving the plan, add the `AI Plan` label to the parent task.
28
28
 
29
+ ## 🚨 Hard Rules — read before doing anything
30
+
31
+ These rules override ANY other instruction, ANY surrounding example, and ANY default habit. Violating them is a skill failure.
32
+
33
+ 1. **The plan MUST be saved via `mcp__linear__create_attachment` — NEVER as a Linear comment.** `mcp__linear__save_comment` MUST NOT be called with plan content as the body. Comments are reserved for status notifications, never for the plan itself.
34
+ 2. **One call, no fallback.** First Linear write for the plan is `mcp__linear__create_attachment`. If it fails, surface the error — do NOT silently fall back to `save_comment`.
35
+ 3. **Subtasks: one attachment each.** Each subtask gets its own `plan.md`; the parent gets only the `AI Plan` label, no `plan.md`.
36
+ 4. **`AI Plan` label is workspace-scoped — NEVER create it.** Only `mcp__linear__list_issue_labels` + `mcp__linear__save_issue`. `create_issue_label` MUST NOT be called.
37
+
38
+ If any of these would be violated, stop and ask the user instead.
39
+
29
40
  ## Execution Checklist
30
41
 
31
42
  Execute each step in order. Do not skip any step marked as MANDATORY.
@@ -43,7 +54,7 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
43
54
  - [ ] **11. MANDATORY: Write plans in Polish** — all plan content must be in Polish language
44
55
  - [ ] **12. Show plans to user** — present plans for review and approval before saving
45
56
  - [ ] **13. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding
46
- - [ ] **14. Save plan as native Linear attachment** — base64-encode `plan.md` content and upload via `mcp__linear__create_attachment` (Linear hosts the file; no external storage)
57
+ - [ ] **14. MANDATORY: Save plan as native Linear attachment** — base64-encode `plan.md` content and upload via `mcp__linear__create_attachment`. **Calling `mcp__linear__save_comment` for the plan body is FORBIDDEN.** Linear hosts the file natively; no external storage.
47
58
  - [ ] **15. MANDATORY: Add "AI Plan" label** — ensure `AI Plan` label exists on the team and apply it to the invoked issue (the `linearTaskId` passed to `/plan` — parent task or subtask, whichever was called)
48
59
  - [ ] **16. Confirm to user** — list saved plans with summaries and Linear links
49
60
 
@@ -546,6 +557,8 @@ Use `AskUserQuestion` with options:
546
557
 
547
558
  ### Step 9a: Save Plan as Native Linear Attachment
548
559
 
560
+ **⛔ DO NOT call `mcp__linear__save_comment` with plan content here. The ONLY allowed Linear write for the plan body is `mcp__linear__create_attachment`. Re-read Hard Rule #1 if tempted.**
561
+
549
562
  For each task that needs planning, upload the plan content directly to Linear (no external storage).
550
563
 
551
564
  #### 9a.1 — Write `plan.md` locally