i-plane 1.0.1 → 1.1.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/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,140 @@ 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
+ ```bash
132
+ i-plane project update KB --cycles --modules --intake
133
+ i-plane cycle create "Sprint 1" --project KB --start 2026-10-01 --end 2026-10-14
134
+ i-plane cycle create "Sprint 2" --project KB --start 2026-10-15 --end 2026-10-28
135
+ i-plane cycles KB
136
+ i-plane cycle add KB-2 KB-3 --project KB --cycle "Sprint 1"
137
+ i-plane cycle issues "Sprint 1" --project KB
138
+ # After Sprint 1 has ended:
139
+ i-plane cycle transfer "Sprint 1" "Sprint 2" --project KB
140
+
141
+ i-plane module create Documentation --project KB --status planned
142
+ i-plane modules KB
143
+ i-plane module add KB-2 KB-3 --project KB --module Documentation
144
+ i-plane module issues Documentation --project KB
145
+
146
+ i-plane intake create "Investigate a reported problem" --project KB --priority high
147
+ i-plane intake list KB --status pending
148
+ # Use the work item reference returned by intake create:
149
+ i-plane intake show KB-4 --project KB
150
+ i-plane intake update KB-4 --project KB --status accepted
151
+ ```
152
+
153
+ A cycle groups work by time; a module groups related work independently of sprint
154
+ dates. Names and unique prefixes resolve within `--project`; UUIDs also work.
155
+ Adding work items resolves all references and checks project membership before
156
+ writing. A work item belongs to one cycle, so adding it to another cycle moves it.
157
+ `cycle transfer` uses the API's unfinished-work transfer: completed and cancelled
158
+ work stays in the source cycle. Plane rejects transfers from a dated cycle that
159
+ has not ended yet.
160
+
161
+ Cycle creation accepts both `--start` and `--end`, or neither for a draft. The owner
162
+ defaults to the token's user; `--owner` accepts a name, email or UUID. `cycle update`
163
+ changes the name, description, owner or both dates. Passing `--start none --end none`
164
+ clears the dates; either flag alone is rejected even when its value is `none`.
165
+ Updating other fields preserves the existing cycle owner. Cycle dates are shown
166
+ in the project timezone; JSON retains the original timestamps and includes that
167
+ timezone. Module creation accepts `--start`, `--due`, `--description` and
168
+ `--status backlog|planned|in-progress|paused|completed|cancelled`.
169
+
170
+ The project switches `--cycles`, `--modules` and `--intake` enable these features;
171
+ `--intake=false` (and likewise for the others) disables a feature. They work during
172
+ both project creation and update. On creation, `--intake` also initializes the
173
+ queue through a project update: setting the creation flag alone leaves the queue
174
+ missing on some servers. If this follow-up step fails, the project remains created
175
+ and a warning gives the `project update --intake` command to retry.
176
+
177
+ Intake statuses are `pending`, `rejected`, `snoozed`, `accepted` and `duplicate`.
178
+ `--status snoozed` requires `--snooze-until YYYY-MM-DD` (midnight UTC);
179
+ `--status duplicate` requires `--duplicate-of KB-2`. Other status changes clear
180
+ stale snooze and duplicate metadata. `intake update` also accepts `--name`,
181
+ `--priority` and a Markdown `--description`. Accepting a request moves its work item
182
+ from triage into the project's default state.
183
+
184
+ Intake commands accept readable work item references or the underlying work item
185
+ UUID, exposed as `issueId` in JSON. The intake entry's own `id` is different and is
186
+ not the detail endpoint's key. Some servers hide expired snoozes from both intake
187
+ GET and the normal work item lookup. In that case, use the saved `issueId` for
188
+ `intake update` or `intake rm`: UUID writes do not require a preliminary intake GET.
189
+ A readable reference still works for entries visible in the queue.
190
+
191
+ `intake rm <ID> --project KB --yes` removes the intake
192
+ entry; it deletes the underlying work item only if it has not been accepted.
193
+
194
+ ## Verify changes
195
+
196
+ From a repository checkout:
197
+
198
+ ```bash
199
+ bun test
200
+ bun run check
201
+ bun run lint
202
+ bun run build
203
+ node scripts/acceptance.mjs --live
204
+ node scripts/planning-acceptance.mjs --live
205
+ ```
206
+
207
+ The live acceptance script uses the normal credentials and the built CLI. It
208
+ creates a temporary project containing an epic and nine children, checks labels,
209
+ assignment, dates, comments, states and archive, then deletes the project in a
210
+ `finally` block. It spaces commands to respect the API request budget and takes
211
+ several minutes. A forced process termination can interrupt cleanup; the script
212
+ reports the project ID if normal cleanup fails.
213
+
214
+ The planning acceptance script creates another temporary project and verifies
215
+ cycle membership and unfinished-work transfer, module membership, and the intake
216
+ lifecycle including deletion behavior. Both scripts use only CLI commands and
217
+ clean up their own projects.
218
+
219
+ The registry tests compare registered commands with executable handlers, parse every
220
+ declared option, exercise each command through the CLI, and verify request payloads
221
+ and output. The supported API surface and remaining gaps are in
222
+ [docs/api-coverage.md](docs/api-coverage.md).
223
+
83
224
  ## Descriptions are Markdown
84
225
 
85
226
  Write them as Markdown; read them back as Markdown. Plane stores HTML, and the
@@ -94,7 +235,7 @@ dig +short example.com @127.0.0.1
94
235
 
95
236
  | Node | Role | Status |
96
237
  | ---- | ---- | ------ |
97
- | pi5 | DNS | broken |
238
+ | cache | DNS | broken |
98
239
 
99
240
  1. check the cache
100
241
  2. check the routes'
@@ -117,6 +258,11 @@ could not be reached. Useful in scripts.
117
258
  address, it is used; `NO_PROXY` is honoured the way curl honours it, including
118
259
  CIDR ranges. On a network without a proxy none of this runs.
119
260
 
261
+ If a call reports `EPERM` or `EACCES`, the operating system denied the connection
262
+ before an HTTP response arrived. The diagnostic shows whether the CLI selected a
263
+ proxy. Check the execution sandbox's network permission and local firewall rules;
264
+ changing the API token does not resolve a socket permission error.
265
+
120
266
  ## Contributing
121
267
 
122
268
  `AGENTS.md` has the working rules: the invariants, the checks to run, and the