@workser/cli 0.3.0 → 0.6.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.
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  topic: sdlc-entities
3
- title: Board cards, decisions, requirements, and docs
3
+ title: Board cards, decisions and requirements
4
4
  summary: Read what this project already tracks and decided, keep the Board honest as you work, and record what a future maintainer will need.
5
- commands: [board, decision, requirement, doc]
5
+ commands: [board, decision, requirement]
6
6
  ---
7
7
 
8
- # Board cards, decisions, requirements, and docs
8
+ # Board cards, decisions and requirements
9
9
 
10
10
  These are the project's memory across sessions. They write to the **same tables**
11
- the Orbit desktop's Board, Project Memory, and Docs panels use, so anything here
12
- appears there too — and (when this CLI runs inside an Orbit-spawned agent run)
13
- as an inline card in the conversation you're working in.
11
+ the Orbit desktop's Board and Project Memory panels use, so anything here appears
12
+ there too — and, inside an Orbit-spawned run, as an inline card in the
13
+ conversation. Documents have their own guide: `workser help docs`.
14
14
 
15
15
  ```
16
16
  workser board list [--status <value>] [--label <value>] [--limit <n>]
@@ -33,11 +33,6 @@ workser requirement show <id>
33
33
  workser requirement create <title> --body <text> [--status <text>]
34
34
  workser requirement update <id> [--title <text>] [--body <text>] [--status <text>]
35
35
 
36
- workser doc list [--work-item <id>]
37
- workser doc show <id> [--markdown]
38
- workser doc create <title> [--work-item <id>] [--markdown <text>]
39
- [--content-json <json>]
40
- workser doc update <id> [--title <text>] [--markdown <text>]
41
36
  ```
42
37
 
43
38
  ## Read first — this is the part that matters
@@ -66,7 +61,6 @@ workser board create "Phase 1 — schema + migration" \
66
61
  --description "Add orders/line_items tables and the migration." \
67
62
  --status in-progress --json
68
63
  workser board create "Phase 2 — checkout API" --description "…" --json
69
- workser board create "Phase 3 — cart UI" --description "…" --json
70
64
 
71
65
  # the plan itself, ONE doc, deliberately NOT linked to a card
72
66
  workser doc create "Checkout — implementation plan" --markdown "$(cat plan.md)" --json
@@ -76,8 +70,8 @@ workser decision create "Carts live server-side" --context "…" --decision "…
76
70
  ```
77
71
 
78
72
  **Don't pass `--work-item` for a multi-phase plan.** A linked document renders on
79
- its card and is *hidden* from the Docs panel; a plan spanning three phases belongs
80
- to the project, not to phase 1.
73
+ its card and is *hidden* from the Docs panel; a plan spanning three phases
74
+ belongs to the project, not to phase 1.
81
75
 
82
76
  The bar: if the user closed this conversation now, the Board should still show
83
77
  what's left and the doc should still explain the plan to whoever continues it.
@@ -103,22 +97,19 @@ workser board create "Fix the login bug" --status in-progress --priority high \
103
97
  ```
104
98
 
105
99
  `board update` replaces the labels you pass rather than merging them, and
106
- touches only the fields you name. There is no `board delete` `done` is the
107
- terminal state for finished work, and removing a card the user filed is theirs
108
- to do in Orbit.
100
+ touches only the fields you name. There is no `board delete`: `done` is the
101
+ terminal state, and removing a card the user filed is theirs to do in Orbit.
109
102
 
110
103
  ## Decisions are append-only
111
104
 
112
105
  `decision create` is for something with real tradeoffs worth a paper trail:
113
- `--context` is why it came up, `--decision` is what was decided,
114
- `--consequences` is the follow-on effects. There is deliberately **no
115
- `decision update`** — a decision record states what was decided at a point in
116
- time. When it stops being right, record a new decision that supersedes it and
117
- say so in its `--context`. Editing the history is how a decision log stops
118
- being worth reading.
106
+ `--context` is why it came up, `--decision` what was decided, `--consequences`
107
+ the follow-on effects. There is deliberately **no `decision update`** — a record
108
+ states what was decided at a point in time. When it stops being right, record a
109
+ new decision that supersedes it and say so in its `--context`. Editing the
110
+ history is how a decision log stops being worth reading.
119
111
 
120
- Requirements are different: they legitimately move along, so they do have
121
- `update`.
112
+ Requirements legitimately move along, so they do have `update`.
122
113
 
123
114
  ```
124
115
  workser requirement create "Support SSO" --body "Enterprise customers need SAML." \
@@ -129,22 +120,8 @@ workser requirement update <id> --status done
129
120
  ## Docs
130
121
 
131
122
  `--markdown` is the normal way to write one. The body is stored both as the
132
- rich-text content the Docs panel renders and as a git-tracked markdown mirror
133
- at `.workser/docs/<id>.md` `workser doc show <id> --markdown` reports that
134
- path so you can read the file with your normal tools.
123
+ rich text the Docs panel renders and as a git-tracked mirror at
124
+ `.workser/docs/<id>.md`; `workser doc show <id> --markdown` reports that path so
125
+ you can read the file with your normal tools.
135
126
 
136
- Revise the page that exists rather than creating a second copy of it:
137
-
138
- ```
139
- workser doc list --json # is there already a page for this?
140
- workser doc update <id> --markdown "$(cat updated.md)"
141
- ```
142
-
143
- `--work-item <id>` links a document to a Board card (a card has at most one).
144
-
145
- ## When to record, and when not to
146
-
147
- Record what a future maintainer would need: follow-up work you found but didn't
148
- do, a choice between real alternatives, a behaviour worth writing down. Don't
149
- narrate every small step — and never treat filing a card as a substitute for the
150
- work. A card saying "fix the bug" is not fixing the bug.
127
+ Revise trd saying "fix the bug" is not fixing the bug.
@@ -22,6 +22,7 @@ workser task subtask add <title> [--role <value>] [--kind <value>]
22
22
  workser task subtask list [taskId]
23
23
  workser task subtask update <id> [--title|--note|--role|--kind|--scope]
24
24
  workser task subtask remove <id>
25
+ workser task subtask send-back <id> --note <text> # redo it, and say why
25
26
 
26
27
  workser task can-start [id] # may work begin? refuses until approved
27
28
  workser task approval request # tell the owner the plan is ready
@@ -80,3 +81,23 @@ workser task done --summary "The report now shows cost per KOL, with six months
80
81
  ```
81
82
 
82
83
  Write the summary for someone who runs a business and does not read code.
84
+
85
+ ## Sending a step back
86
+
87
+ A step that finished but is not good enough is **sent back**, not replaced:
88
+
89
+ ```
90
+ workser task subtask send-back 3f2a… --note "The totals ignore refunds."
91
+ ```
92
+
93
+ That puts it in the queue again as a **second attempt** on the same step. Two
94
+ reasons it matters that this is not a new step:
95
+
96
+ - The owner's screen can then say *"1 send-back, fixed — 2nd run passed"*. A
97
+ replacement step says only that two steps exist, which tells them nothing
98
+ about whether their team caught its own mistake.
99
+ - `--note` is the reason, and it is recorded against the attempt being
100
+ rejected. Without it the history can say a step ran twice but not why.
101
+
102
+ It refuses a step that is still working. Let it finish first — the run is
103
+ still writing to it.
@@ -0,0 +1,48 @@
1
+ ---
2
+ topic: usage
3
+ title: Usage — what is being used, against the plan
4
+ summary: How much database, file storage, projects and apps are in use, and how close that is to what the plan allows.
5
+ commands: [usage]
6
+ ---
7
+
8
+ # Usage — what is being used, against the plan
9
+
10
+ ```
11
+ workser usage # storage, projects, apps — and how close each is to the limit
12
+ ```
13
+
14
+ Run it before you propose anything that adds to a count. "Create another
15
+ project" is a plan you can only sensibly make if you know the plan allows two
16
+ and two already exist.
17
+
18
+ ## Two scopes in one answer, on purpose
19
+
20
+ * **Database and files are ORGANISATION-wide.** One pool across every project.
21
+ There is no per-project storage limit, and reporting one would invent it.
22
+ * **Projects, and apps in this project, are counted where they apply.** These
23
+ are the limits people actually hit.
24
+
25
+ ## Two kinds of limit, which do not mean the same thing
26
+
27
+ * **Hard cap** — projects, apps. Going over is **refused**. `workser usage`
28
+ exits non-zero when one is reached, so a step can gate on it.
29
+ * **Soft allowance** — database, files. Going over is **billed as extra**,
30
+ never blocked. It does not fail the command, because a customer growing past
31
+ their allowance should not have their automation start breaking that day.
32
+
33
+ ## "not measured" is not zero
34
+
35
+ A figure that could not be read prints as `not measured`, with the reason, and
36
+ draws no bar. Do not report it as `0`, and do not tell the user they have room
37
+ based on it — nobody looked.
38
+
39
+ If a scan comes back with a figure missing, say which one and why. "Your
40
+ database is using 2.5 GB of 10; the file total could not be read" is a useful
41
+ sentence. "You are using 2.5 GB of 20" is not, and it is wrong.
42
+
43
+ ## What to do with it
44
+
45
+ - Near a **soft** limit: tell the owner what the extra will cost them, and what
46
+ is taking the space. Do not delete anything to make a number look better.
47
+ - At a **hard** cap: say which plan raises it. Do not attempt the create — it
48
+ will be refused, and a failed attempt reads to the owner as a broken product.