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 +149 -3
- package/dist/cli.js +82 -65
- package/docs/api-coverage.md +74 -0
- package/package.json +2 -1
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
|
-
|
|
|
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
|