i-plane 1.0.2 → 1.1.1

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/README.md CHANGED
@@ -64,11 +64,18 @@ summary projects and how much is in each
64
64
  list [project] work items, one line each --state --priority --limit
65
65
  show <ID> one work item, description included
66
66
  search <text> across the whole workspace
67
- create <title> --project --priority --state --description
68
- update <ID> --state --priority --name --description
67
+ create <title> --project --priority --state --description --label --parent --assignee --due --start
68
+ update <ID> --state --priority --name --description --label --labels --parent --assignee --due --start
69
69
  done <ID> move to the first completed state
70
70
  comment <ID> <text> add a comment
71
+ comments <ID> read comments; show <ID> --comments includes them too
71
72
  delete <ID> --yes delete; refuses without --yes
73
+ project create|update|archive|rm
74
+ label create|rm --project
75
+ state create|update|rm --project
76
+ cycles cycle create|update|add|issues|transfer
77
+ modules module create|add|issues
78
+ intake list|create|show|update|rm
72
79
  projects states labels members whoami config guide
73
80
  ```
74
81
 
@@ -80,6 +87,149 @@ Work items go by the name people say — `CLOUD-8`. Projects take an identifier
80
87
  Every command accepts `--json` and then prints the whole model, for when you need
81
88
  ids and timestamps rather than a readable line.
82
89
 
90
+ ## Set up a project
91
+
92
+ ```bash
93
+ i-plane project create "Knowledge Base" --identifier KB --description "Team notes"
94
+ i-plane label create epic --project KB --color '#8ED1FC'
95
+ i-plane label create task --project KB --color '#3B82F6'
96
+ i-plane create "Build the knowledge base" --project KB --label epic --priority high
97
+ # Use the identifier returned by create as the parent of each child:
98
+ i-plane create "Define the structure" --project KB --parent KB-1 --label task --priority urgent
99
+ i-plane update KB-2 --assignee "Reader" --start 2026-10-01 --due 2026-10-08
100
+ i-plane state create Review --project KB --group started --color '#336699'
101
+ i-plane update KB-2 --state Review
102
+ i-plane comments KB-2
103
+ i-plane show KB-2 --comments
104
+ ```
105
+
106
+ `project update` changes the name, identifier or description. Project names cannot
107
+ contain special characters, including hyphens; the CLI checks before sending a
108
+ request. Identifiers contain 1–12 letters or digits, start with a letter, and are
109
+ normalized to uppercase. `project archive` hides a project from active lists.
110
+ `project rm <project> --yes` permanently deletes it and its contents.
111
+
112
+ `--label task,review` adds labels and preserves the current ones. `--labels task`
113
+ replaces the entire list; `--labels none` clears it. Both flags accept names, unique
114
+ name prefixes or IDs and cannot be combined. Repeating a flag keeps its last
115
+ value, so use one comma-separated list for multiple labels. Addition reads the
116
+ current labels before writing the merged list; concurrent label edits can still
117
+ race because the API replaces the array.
118
+
119
+ `--parent` accepts a readable work item identifier, or a UUID in the same project.
120
+ `--assignee` replaces the list with comma-separated display names, emails or UUIDs.
121
+ Ambiguous names fail instead of selecting a match. `--parent none`, `--assignee none`,
122
+ `--due none` and `--start none` clear their fields. Dates use `YYYY-MM-DD`.
123
+
124
+ `label rm <label> --project KB --yes` removes a label. `state update` changes a
125
+ state's name, color, group or description; `state rm` requires `--yes`. State and
126
+ label names accept an exact match, unique prefix or ID. Descriptions of projects,
127
+ labels and states are plain text; work item descriptions and comments are Markdown.
128
+
129
+ ## Plan work and triage incoming requests
130
+
131
+ Use intake for a bug report, support request or idea that still needs a decision.
132
+ Use a module for a feature, milestone or workstream with a shared goal; its work
133
+ may span several cycles and belong to other modules too. Cycles define the time
134
+ window for planned work.
135
+
136
+ Command help includes required options, usage notes, examples and follow-up
137
+ calls. For the field-by-field distinction between Plane and CLI capabilities,
138
+ see [API coverage and concepts](docs/api-coverage.md#what-modules-and-intake-are-for).
139
+
140
+ ```bash
141
+ i-plane project update KB --cycles --modules --intake
142
+ i-plane cycle create "Sprint 1" --project KB --start 2026-10-01 --end 2026-10-14
143
+ i-plane cycle create "Sprint 2" --project KB --start 2026-10-15 --end 2026-10-28
144
+ i-plane cycles KB
145
+ i-plane cycle add KB-2 KB-3 --project KB --cycle "Sprint 1"
146
+ i-plane cycle issues "Sprint 1" --project KB
147
+ # After Sprint 1 has ended:
148
+ i-plane cycle transfer "Sprint 1" "Sprint 2" --project KB
149
+
150
+ i-plane module create Documentation --project KB --status planned
151
+ i-plane modules KB
152
+ i-plane module add KB-2 KB-3 --project KB --module Documentation
153
+ i-plane module issues Documentation --project KB
154
+
155
+ i-plane intake create "Investigate a reported problem" --project KB --priority high
156
+ i-plane intake list KB --status pending
157
+ # Use the work item reference returned by intake create:
158
+ i-plane intake show KB-4 --project KB
159
+ i-plane intake update KB-4 --project KB --status accepted
160
+ ```
161
+
162
+ A cycle groups work by time; a module groups related work independently of sprint
163
+ dates. Names and unique prefixes resolve within `--project`; UUIDs also work.
164
+ Adding work items resolves all references and checks project membership before
165
+ writing. A work item belongs to one cycle, so adding it to another cycle moves it.
166
+ `cycle transfer` uses the API's unfinished-work transfer: completed and cancelled
167
+ work stays in the source cycle. Plane rejects transfers from a dated cycle that
168
+ has not ended yet.
169
+
170
+ Cycle creation accepts both `--start` and `--end`, or neither for a draft. The owner
171
+ defaults to the token's user; `--owner` accepts a name, email or UUID. `cycle update`
172
+ changes the name, description, owner or both dates. Passing `--start none --end none`
173
+ clears the dates; either flag alone is rejected even when its value is `none`.
174
+ Updating other fields preserves the existing cycle owner. Cycle dates are shown
175
+ in the project timezone; JSON retains the original timestamps and includes that
176
+ timezone. Module creation accepts `--start`, `--due`, `--description` and
177
+ `--status backlog|planned|in-progress|paused|completed|cancelled`.
178
+
179
+ The project switches `--cycles`, `--modules` and `--intake` enable these features;
180
+ `--intake=false` (and likewise for the others) disables a feature. They work during
181
+ both project creation and update. On creation, `--intake` also initializes the
182
+ queue through a project update: setting the creation flag alone leaves the queue
183
+ missing on some servers. If this follow-up step fails, the project remains created
184
+ and a warning gives the `project update --intake` command to retry.
185
+
186
+ Intake statuses are `pending`, `rejected`, `snoozed`, `accepted` and `duplicate`.
187
+ `--status snoozed` requires `--snooze-until YYYY-MM-DD` (midnight UTC);
188
+ `--status duplicate` requires `--duplicate-of KB-2`. Other status changes clear
189
+ stale snooze and duplicate metadata. `intake update` also accepts `--name`,
190
+ `--priority` and a Markdown `--description`. Accepting a request moves its work item
191
+ from triage into the project's default state.
192
+
193
+ Intake commands accept readable work item references or the underlying work item
194
+ UUID, exposed as `issueId` in JSON. The intake entry's own `id` is different and is
195
+ not the detail endpoint's key. Some servers hide expired snoozes from both intake
196
+ GET and the normal work item lookup. In that case, use the saved `issueId` for
197
+ `intake update` or `intake rm`: UUID writes do not require a preliminary intake GET.
198
+ A readable reference still works for entries visible in the queue.
199
+
200
+ `intake rm <ID> --project KB --yes` removes the intake
201
+ entry; it deletes the underlying work item only if it has not been accepted.
202
+
203
+ ## Verify changes
204
+
205
+ From a repository checkout:
206
+
207
+ ```bash
208
+ bun test
209
+ bun run check
210
+ bun run lint
211
+ bun run build
212
+ node scripts/acceptance.mjs --live
213
+ node scripts/planning-acceptance.mjs --live
214
+ ```
215
+
216
+ The live acceptance script uses the normal credentials and the built CLI. It
217
+ creates a temporary project containing an epic and nine children, checks labels,
218
+ assignment, dates, comments, states and archive, then deletes the project in a
219
+ `finally` block. It spaces commands to respect the API request budget and takes
220
+ several minutes. A forced process termination can interrupt cleanup; the script
221
+ reports the project ID if normal cleanup fails.
222
+
223
+ The planning acceptance script creates another temporary project and verifies
224
+ cycle membership and unfinished-work transfer, module membership, and the intake
225
+ lifecycle including deletion behavior. Both scripts use only CLI commands and
226
+ clean up their own projects.
227
+
228
+ The registry tests compare registered commands with executable handlers, parse every
229
+ declared option, exercise each command through the CLI, and verify request payloads
230
+ and output. The supported API surface and remaining gaps are in
231
+ [docs/api-coverage.md](docs/api-coverage.md).
232
+
83
233
  ## Descriptions are Markdown
84
234
 
85
235
  Write them as Markdown; read them back as Markdown. Plane stores HTML, and the
@@ -94,7 +244,7 @@ dig +short example.com @127.0.0.1
94
244
 
95
245
  | Node | Role | Status |
96
246
  | ---- | ---- | ------ |
97
- | pi5 | DNS | broken |
247
+ | cache | DNS | broken |
98
248
 
99
249
  1. check the cache
100
250
  2. check the routes'
@@ -117,6 +267,11 @@ could not be reached. Useful in scripts.
117
267
  address, it is used; `NO_PROXY` is honoured the way curl honours it, including
118
268
  CIDR ranges. On a network without a proxy none of this runs.
119
269
 
270
+ If a call reports `EPERM` or `EACCES`, the operating system denied the connection
271
+ before an HTTP response arrived. The diagnostic shows whether the CLI selected a
272
+ proxy. Check the execution sandbox's network permission and local firewall rules;
273
+ changing the API token does not resolve a socket permission error.
274
+
120
275
  ## Contributing
121
276
 
122
277
  `AGENTS.md` has the working rules: the invariants, the checks to run, and the