@lumoai/cli 1.57.0 → 1.58.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/assets/skill/SKILL.md +40 -115
- package/assets/skill/references/criteria.md +49 -0
- package/assets/skill/references/ideas.md +82 -0
- package/assets/skill/references/initiatives.md +28 -0
- package/assets/skill/references/plan-runs.md +27 -0
- package/assets/skill/references/sessions.md +4 -2
- package/assets/skill/references/task-context.md +1 -1
- package/package.json +1 -1
package/assets/skill/SKILL.md
CHANGED
|
@@ -27,6 +27,9 @@ The command catalog below is a **map**: it lists every command grouped by domain
|
|
|
27
27
|
| `task context`, retrieval (`slack/web/figma context`, `comments list`, `pr show`) | [references/task-context.md](references/task-context.md) |
|
|
28
28
|
| `task create/update/list/show/comment`, `next` | [references/tasks.md](references/tasks.md) |
|
|
29
29
|
| `task deps add/list/confirm/dismiss/rm` (dependency edges) | [references/task-deps.md](references/task-deps.md) |
|
|
30
|
+
| `idea*` — capture pool, lifecycle, evidence, comments | [references/ideas.md](references/ideas.md) |
|
|
31
|
+
| `plan`, `plan status` — the idea→plan converter run | [references/plan-runs.md](references/plan-runs.md) |
|
|
32
|
+
| `initiative create/list` (`LUM-INIT-<n>`) | [references/initiatives.md](references/initiatives.md) |
|
|
30
33
|
| `task artifact*`, `task figma*` | [references/artifacts-figma.md](references/artifacts-figma.md) |
|
|
31
34
|
| `task criteria set/list`, drafting the acceptance contract | [references/criteria.md](references/criteria.md) |
|
|
32
35
|
| `verify`, `task status` — machine verification loop, claim-done flow, self-check/resume | [references/verify.md](references/verify.md) |
|
|
@@ -44,14 +47,14 @@ The command catalog below is a **map**: it lists every command grouped by domain
|
|
|
44
47
|
|
|
45
48
|
## Command catalog
|
|
46
49
|
|
|
47
|
-
|
|
50
|
+
### Onboarding / auth / update — see [onboarding.md](references/onboarding.md)
|
|
48
51
|
|
|
49
52
|
- `lumo setup [--user|--project] [--force] [--agent <token>]` — install skill files + hooks
|
|
50
53
|
- `lumo auth login` / `lumo auth logout` — paste an API key / clear credentials
|
|
51
54
|
- `lumo whoami` — show current identity (email, workspace, key)
|
|
52
55
|
- `lumo update` — upgrade the CLI to the latest npm release
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
### Task context & retrieval — see [task-context.md](references/task-context.md)
|
|
55
58
|
|
|
56
59
|
- `lumo task context <id>` — load task background (memory, source cards, PR review todos, prior sessions)
|
|
57
60
|
- `lumo task slack show <id> <contextId>` — full stored Slack thread
|
|
@@ -61,7 +64,7 @@ The command catalog below is a **map**: it lists every command grouped by domain
|
|
|
61
64
|
- `lumo task pr show <id> <number>` — synced PR metadata (v1)
|
|
62
65
|
- `lumo task lineage <id>` — read-only causal-trail audit: fragments that fed the task + each one's disclosure tag/outcome, the run's token/loop cost, a disclosure-funnel summary, and a Top-5 "operations by token cost"; `--signal` appends workspace-level usage signal-health (see [task-context.md](references/task-context.md))
|
|
63
66
|
|
|
64
|
-
|
|
67
|
+
### Tasks — see [tasks.md](references/tasks.md)
|
|
65
68
|
|
|
66
69
|
- `lumo task create <title> [flags]` — create a task. **Mid-task** (your session is bound to an in-flight task) it requires `--rework-of <id>` (redirects you to fix the existing task — creates nothing) or `--new-scope` (genuinely new, out-of-scope work). On a send-back, fix in place / amend the contract instead of spinning off a new task — see [verify.md](references/verify.md) and [criteria.md](references/criteria.md).
|
|
67
70
|
- `lumo task update <id> [flags]` — patch status/title/priority/assignee/milestone/sprint/tags; `--claimable`/`--not-claimable` set the agent-claimable marker (LUM-646)
|
|
@@ -70,79 +73,25 @@ The command catalog below is a **map**: it lists every command grouped by domain
|
|
|
70
73
|
- `lumo task show <id>` — print one task's detail
|
|
71
74
|
- `lumo task comment <id> <body>` — leave a comment
|
|
72
75
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- `lumo idea "<statement>" [--context <text>]` — capture
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
lumo idea update LUM-I42 --status dropped
|
|
93
|
-
```
|
|
94
|
-
- `lumo idea slack add/show/rm <idea> ...`, `lumo idea web add/show/rm <idea> ...`, `lumo idea figma add/list/rm/refresh/context <idea> ...` (LUM-681) — attach & inspect evidence (Slack threads, web links, Figma design links) on an idea, mirroring the `task slack/web/figma` source-card commands but hitting `/api/ideas/:id/...`. `<idea>` is the `LUM-I<n>` id. `show`/`context` are Tier-2 retrieval (stored snapshot / fetched body / cached design metadata, no live re-fetch) and stamp the disclosure funnel like their task-side counterparts; `figma refresh` re-fetches metadata for every link on the idea.
|
|
95
|
-
- **When to suggest**: the user wants to attach supporting evidence (a Slack discussion, a spec doc link, a Figma mock) to an idea before it goes through `lumo plan` — the converter carries this evidence forward into the resulting task/initiative. Prefer attaching to the idea over waiting until after conversion.
|
|
96
|
-
- **Example**:
|
|
97
|
-
```bash
|
|
98
|
-
lumo idea web add LUM-I42 https://example.com/spec
|
|
99
|
-
lumo idea web show LUM-I42 wl_1
|
|
100
|
-
lumo idea web rm LUM-I42 wl_1
|
|
101
|
-
lumo idea slack add LUM-I42 https://myteam.slack.com/archives/C1/p123
|
|
102
|
-
lumo idea slack show LUM-I42 ctx_1
|
|
103
|
-
lumo idea slack rm LUM-I42 ctx_1
|
|
104
|
-
lumo idea figma add LUM-I42 https://www.figma.com/file/abc/Mock
|
|
105
|
-
lumo idea figma list LUM-I42
|
|
106
|
-
lumo idea figma context LUM-I42 cfl_1
|
|
107
|
-
lumo idea figma refresh LUM-I42
|
|
108
|
-
lumo idea figma rm LUM-I42 cfl_1
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
- `lumo idea comment <id> <body>` — post a comment on an idea (LUM-680). `<id>` is the `LUM-I<n>` id (a bare number also resolves) or a cuid; the body is plain text — quote it to pass spaces/newlines. Ideas reuse the task Comment model via a polymorphic `ideaId`; the thread is flat (no replies). Posting also records a `COMMENT_ADDED` entry on the idea's activity timeline. Comments/activity also render on the Idea detail slide-over in web.
|
|
112
|
-
- `lumo idea comments list <id> [--full]` — print an idea's comment thread (oldest first), capped to the output budget like `task comments list`; `--full` prints every comment. Empty thread → `(no comments)`.
|
|
113
|
-
- **When to suggest**: the user wants to discuss or annotate a parked idea ("给这个想法加条评论", "comment on the idea"), or review an idea's discussion/history ("看看这个想法的评论/活动"). For the activity timeline (status changes, statement edits, materialisation) there is no CLI reader — it's shown on the Idea detail slide-over in web.
|
|
114
|
-
- **Example**:
|
|
115
|
-
```bash
|
|
116
|
-
lumo idea comment LUM-I42 "Let's scope this for next sprint"
|
|
117
|
-
lumo idea comments list LUM-I42
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
**Plan runs (design-thinking 转换器)**
|
|
121
|
-
|
|
122
|
-
- `lumo plan [--abandon-active]` — start a converter run that turns the team's captured idea pool + current priority into an executable plan through a 3-gate recoverable state machine (聚类→对齐→成计划). Freezes the input snapshot at start and enforces **one active run per team**: if a run is already active it refuses and points to `lumo plan status`; `--abandon-active` abandons the prior run first, then starts fresh. On success it prints (and opens) the **gate-A** web deep-link (`/workspace/<slug>/plan/<runId>`). The CLI only triggers — **all editing and gate confirmation happen in web**.
|
|
123
|
-
- `lumo plan status` — print the active run's current stage (working segment or the open `*_READY` gate) and the deep-link to act on its next gate; with no active run, prompts to run `lumo plan`.
|
|
124
|
-
- **When to suggest**: the user wants to turn the parked idea pool into a plan / "跑一下转换器" / "start a planning run" / "把想法变成计划"; or asks where an in-flight plan run stands ("plan 到哪一步了", "plan status"). The gate work itself is web-only — the CLI hands off the deep-link.
|
|
125
|
-
- **Example** — check where the active run stands:
|
|
126
|
-
```bash
|
|
127
|
-
lumo plan status
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**Initiatives (team-level, LUM-INIT-<n>)**
|
|
131
|
-
|
|
132
|
-
- `lumo initiative create "<goal>" [--assumption <text>]` — create a team-level Initiative **directly, no plan run required** (`planRunId=null`, status `ACTIVE`). Prints the `LUM-INIT-<n>` id; `--assumption` records the bet (赌注旁注) behind it. A blank goal is rejected (400). Converter-materialised initiatives (from `lumo plan`) live in the same list.
|
|
133
|
-
- **When to suggest**: the user wants to stand up a strategic initiative directly — "建一个 initiative" / "create an initiative" / "开一个举措" — without running the converter.
|
|
134
|
-
- **Example**:
|
|
135
|
-
```bash
|
|
136
|
-
lumo initiative create "Ship the initiatives browse surface" --assumption "teams curate initiatives directly"
|
|
137
|
-
```
|
|
138
|
-
- `lumo initiative list` — print the team's initiatives newest-first, one line per initiative: the `LUM-INIT-<n>` id, status (`ACTIVE` | `DONE` | `DROPPED`) and goal. Browsable in web at `/workspace/<slug>/initiatives` (sidebar → Initiatives), where each links to its lineage (consumed ideas + attached tasks).
|
|
139
|
-
- **When to suggest**: the user wants to see the team's initiatives / "看看 initiatives" / "list the initiatives".
|
|
140
|
-
- **Example**:
|
|
141
|
-
```bash
|
|
142
|
-
lumo initiative list
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
**Task dependencies** — see [task-deps.md](references/task-deps.md)
|
|
76
|
+
### Ideas (team-level capture pool) — see [ideas.md](references/ideas.md)
|
|
77
|
+
|
|
78
|
+
- `lumo idea "<statement>" [--context <text>]` — capture an un-triaged spark into the team pool (<10s); prints an **I-prefixed** id (`LUM-I42`) that cannot collide with task ids
|
|
79
|
+
- `lumo idea list` — the whole pool newest-first (every status); also browsable at `/workspace/<slug>/ideas`
|
|
80
|
+
- `lumo idea update <id> --status <captured|developing|planned|dropped>` — manual lifecycle move; `CAPTURED→PLANNED` is converter-only
|
|
81
|
+
- `lumo idea slack|web|figma …` — attach & inspect evidence on an idea, mirroring the task-side source cards
|
|
82
|
+
- `lumo idea comment <id> <body>` · `lumo idea comments list <id> [--full]` — flat comment thread on an idea
|
|
83
|
+
|
|
84
|
+
### Plan runs (design-thinking 转换器) — see [plan-runs.md](references/plan-runs.md)
|
|
85
|
+
|
|
86
|
+
- `lumo plan [--abandon-active]` — start a converter run (聚类→对齐→成计划) over the captured pool + current priority; one active run per team; prints the gate-A web deep-link
|
|
87
|
+
- `lumo plan status` — the active run's stage plus the deep-link to its next gate. Gate work is **web-only**
|
|
88
|
+
|
|
89
|
+
### Initiatives (team-level, `LUM-INIT-<n>`) — see [initiatives.md](references/initiatives.md)
|
|
90
|
+
|
|
91
|
+
- `lumo initiative create "<goal>" [--assumption <text>]` — create directly, no plan run required
|
|
92
|
+
- `lumo initiative list` — team initiatives newest-first; lineage browsable in web
|
|
93
|
+
|
|
94
|
+
### Task dependencies — see [task-deps.md](references/task-deps.md)
|
|
146
95
|
|
|
147
96
|
- `lumo task deps list <id>` — list dependency edges both directions, grouped CONFIRMED / SUGGESTED / DISMISSED (each row: short edge id + other task + detected evidence)
|
|
148
97
|
- `lumo task deps add <id> --blocked-by <LUM-N>` — declare a manual hard dependency (CONFIRMED)
|
|
@@ -151,52 +100,47 @@ The command catalog below is a **map**: it lists every command grouped by domain
|
|
|
151
100
|
- `lumo task deps rm <id> <edge> --yes` — delete an edge (refuses without `--yes`)
|
|
152
101
|
- `<edge>` = short edge-id prefix (≥6 chars) or the other task's identifier; ambiguous/unknown selectors list candidates and exit 1. See [tasks.md](references/tasks.md)
|
|
153
102
|
|
|
154
|
-
|
|
103
|
+
### Acceptance criteria (contract) — see [criteria.md](references/criteria.md)
|
|
155
104
|
|
|
156
105
|
- `lumo task criteria set <task> --file <criteria.json> [--human] [--cause <tag>]` — submit the whole contract (full-group replace). Default = agent draft (AGENT_DRAFT, editable until DONE); `--human` = a HUMAN_EDIT revision transcribed from the conversation; `--cause` annotates why the contract drifted. See [criteria.md](references/criteria.md)
|
|
157
106
|
- `lumo task criteria list <task>` — print the contract (id, MACHINE/HUMAN, provenance source@round, checkpointer)
|
|
158
107
|
|
|
159
|
-
|
|
108
|
+
### Verification (machine acceptance loop) — see [verify.md](references/verify.md)
|
|
160
109
|
|
|
161
110
|
- `lumo verify [task] --note "<self-report>" [--timeout <seconds>]` — run every MACHINE criterion's checkpointer locally and report a structured PASS/FAIL verdict per criterion. **`--note` is required** when a round will be posted: a one-line self-report ("我改了 X,因为 Y 可验收") frozen as your task's claim (source AGENT) the moment the round passes into IN_REVIEW, then checked against the diff for faithfulness. No note → no round posted (none burned). The round cap is the workspace's `verificationMaxRounds` (default 3) — read the actual budget off the `Round N/M` line the command prints, never assume a number. All-pass → task to IN_REVIEW (agent stops); a fail on the last round → escalate to human. **Run this before claiming a task is done.**
|
|
162
111
|
- `lumo task status [task] [--json]` — read-only acceptance self-check (no LLM): the contract with each criterion's latest verdict, verification history/round, last failure reasons, `nextActions` (the unmet criteria), and any OPEN boundary crossings (fails closed — `null`/`⚠` means "could not confirm", not safe). **Run it first when resuming a task or after a round was rejected.**
|
|
163
112
|
- `lumo verdict [task] --pass | --fail` — acceptance verdicts. `--pass` deep-links to the human verdict bar (records nothing). `--fail --reason <enum> …` records an AGENT send-back → IN_PROGRESS. **An unresolved send-back blocks the DONE transition with 409.**
|
|
164
113
|
- `lumo crossing explain <id> --note "<text>"` — append an agent self-explanation ("申辩") to a boundary crossing; append-only, **never clears the crossing or unblocks Done** (disposition stays web + human-only). A review aid, not a self-clear.
|
|
165
114
|
|
|
166
|
-
|
|
115
|
+
### Cost (per-operation token read-out) — see [task-context.md](references/task-context.md)
|
|
167
116
|
|
|
168
117
|
- `lumo cost [--task <id>|--session <id>|--since <date>] [--by tool|model|member|session] [--json]` — per-operation token cost read-out, attributing each model step's token delta to the tool(s) it ran. Scope is mutually exclusive (default = workspace last-30-days). For the per-task Top-5 inline, see `lumo task lineage`.
|
|
169
118
|
|
|
170
|
-
|
|
119
|
+
### Priority (team-level declaration) — see [priority.md](references/priority.md)
|
|
171
120
|
|
|
172
121
|
- `lumo priority [text]` — declare the team's current priority (a 1-3 sentence plain-text statement). With `text`, records it directly; with no argument, prompts interactively. **Append-only**: a new declaration supersedes the old by a later `effectiveFrom` — nothing is ever overwritten or deleted.
|
|
173
122
|
- `lumo priority list` — print the append history newest-first (the current declaration is marked `*`).
|
|
174
123
|
|
|
175
|
-
|
|
124
|
+
### Criteria audit — see [criteria.md](references/criteria.md)
|
|
176
125
|
|
|
177
126
|
- `lumo criteria audit` — workspace-level read-out: count of acceptance criteria by effective referent kind (EXTERNAL_FACT / AGENT_CONSTRUCTED_STATE / PENDING_OUTCOME / UNVERIFIED_ASSERTION / UNCLASSIFIED) + the self-confirming-green ratio
|
|
178
127
|
|
|
179
|
-
|
|
128
|
+
### Outcome well (post-hoc oracle) — see [outcome.md](references/outcome.md)
|
|
180
129
|
|
|
181
130
|
- `lumo outcome show <task>` — read the post-hoc outcome well: the **falsifier** verdict (`REJECTED` | `INCONCLUSIVE` — never a "pass") plus its backing rejection signals. `INCONCLUSIVE` = no rejection on record, **not** "satisfied".
|
|
182
131
|
- `lumo outcome record <task> --note "<what reality did>" [--kind <kind>]` — record a human-observed post-hoc **rejection** of a delivery (revert / rollback / CI regression / downstream redirect / bypass). Append-only; **there is no "mark satisfied" counterpart** — the well only asserts rejection. `--note` is required (the observed referent).
|
|
183
132
|
- `lumo outcome rate [--min N] [--json]` — workspace **trust × post-hoc-fate** join (LUM-603, LUM-606): per delivery-time **verification-friction** bucket (`no-verification` / `single-round` / `multi-round-or-sendback` — two raw counts frozen at delivery, replacing the saturating forecast-confidence axis), the post-hoc REJECTED rate from the well. Honest by construction — thin buckets read `insufficient` (no fabricated rate), the single-round-vs-multi comparison stays `inconclusive` until CIs separate, and the rate is a **lower bound** (no signal = INCONCLUSIVE, never satisfied). Bucket names are value-neutral — direction is decided by the correlation, never welded into the label. Under-sampled today by design — the skeleton produces real strata once the well fills.
|
|
184
133
|
|
|
185
|
-
|
|
134
|
+
### Fidelity read-out (mechanical change-pattern) — see [fidelity.md](references/fidelity.md)
|
|
186
135
|
|
|
187
136
|
- `lumo fidelity show <task> [--json]` — per delivery snapshot (LUM-609), a **composition table, not a single score**: (1) the **grounding** of the frozen contract — grounded (`EXTERNAL_FACT`, a machine-checkable upper bound) / self-confirming (`AGENT_CONSTRUCTED_STATE` + `UNVERIFIED_ASSERTION`) / inconclusive (`PENDING_OUTCOME` + `UNCLASSIFIED`, surfaced not swallowed) + the full effective-kind tally; (2) the **independence** signal — criteria `ADDED`/`UPDATED` at round>0 (after work started) that the delivery rode on = backward-inference suspects. Purely mechanical (timing + op + grounding) — **no direction verdict**. A no-snapshot task is reported explicitly (not a pass). Zero new storage — reads the snapshot + `CRITERION_CHANGED` trail.
|
|
188
137
|
|
|
189
|
-
|
|
190
|
-
lumo fidelity show LUM-42
|
|
191
|
-
lumo fidelity show LUM-42 --json
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
**Artifacts & Figma** — see [artifacts-figma.md](references/artifacts-figma.md)
|
|
138
|
+
### Artifacts & Figma — see [artifacts-figma.md](references/artifacts-figma.md)
|
|
195
139
|
|
|
196
140
|
- `lumo task artifact add/update/list/show/rm` — record spec/plan products on a task
|
|
197
141
|
- `lumo task figma add/list/rm/refresh` — attach & manage Figma designs
|
|
198
142
|
|
|
199
|
-
|
|
143
|
+
### Projects & milestones — see [milestones.md](references/milestones.md)
|
|
200
144
|
|
|
201
145
|
- `lumo project list` — list projects (slugs feed `--project`)
|
|
202
146
|
- `lumo milestone list/create/show/update/delete` — milestone CRUD (`show` includes a Sprint-coverage section)
|
|
@@ -208,7 +152,7 @@ lumo fidelity show LUM-42 --json
|
|
|
208
152
|
- `lumo milestone reorder/move` — manual ordering
|
|
209
153
|
- `lumo milestone criteria set/list/verdict` — milestone-level **exit criteria** (LUM-643): the close contract, drafted & adjudicated (裁定) by the steward (LUM-640) or a human. Unresolved criteria (pending or NOT_MET) block `--status completed` **and** the LUM-624 auto-rollup with 409/fail-closed; human override is web-only (`?force=1`, stamped as a persistent trail). `verdict --met` on `EXTERNAL_FACT` requires `--evidence` (422); `PENDING_OUTCOME` can never be MET
|
|
210
154
|
|
|
211
|
-
|
|
155
|
+
### Documents — CRUD/sharing → [docs.md](references/docs.md); **editing live docs** (raw/section/patch/append/diff/rebuild) → [doc-editing.md](references/doc-editing.md)
|
|
212
156
|
|
|
213
157
|
- `lumo doc create/update/show/list/delete` — document CRUD; `doc update` takes `--if-revision <n>` (mismatch → 409, re-read and retry) and is structure-guarded (drops to tables/rows/headings → 422 unless `--allow-shrink`)
|
|
214
158
|
- `lumo doc show <doc> --raw` / `--section "<heading>"` — print the byte-identical markdown source (the only legal edit base; never the lossy HTML→md render), whole or one heading-addressed slice
|
|
@@ -219,14 +163,14 @@ lumo fidelity show LUM-42 --json
|
|
|
219
163
|
- `lumo doc move/bind/unbind/share/unshare/share-list` — reparent · task linkage · member sharing
|
|
220
164
|
- `lumo doc import-gdoc` / `lumo doc sync` — Google Doc import & re-sync
|
|
221
165
|
|
|
222
|
-
|
|
166
|
+
### Sprints — see [sprints.md](references/sprints.md)
|
|
223
167
|
|
|
224
168
|
- `lumo sprint list/create/show/update/delete` — sprint CRUD (`show` includes Progress / Health / Blockers)
|
|
225
169
|
- `lumo sprint start/close` — status transitions (no `--status` flag)
|
|
226
170
|
- `lumo sprint add/remove <id> <task>` — bind/unbind a task
|
|
227
171
|
- `lumo sprint summary [--retry]` — AI retro
|
|
228
172
|
|
|
229
|
-
|
|
173
|
+
### Memory — see [memory.md](references/memory.md)
|
|
230
174
|
|
|
231
175
|
- `lumo task memory add/list` · `lumo project memory add/list` — record/curate Memory (TASK vs PROJECT)
|
|
232
176
|
- `lumo memory show <id>` — show one memory's full card (category + content) by id (progressive disclosure from a one-line index entry)
|
|
@@ -235,7 +179,7 @@ lumo fidelity show LUM-42 --json
|
|
|
235
179
|
- `lumo memory push [--dry-run]` — upsync locally-authored memories from `<memory-dir>/outbox/*.json` to the team
|
|
236
180
|
- `lumo memory fold [project-ref] --dry-run` — read-only PREVIEW of the autonomous topic-fold pass (folding runs via a daily cron; no manual apply, no `unfold`). See [memory.md](references/memory.md)
|
|
237
181
|
|
|
238
|
-
|
|
182
|
+
### Sessions — see [sessions.md](references/sessions.md)
|
|
239
183
|
|
|
240
184
|
- `lumo session attach <id>` — bind this session to a task (then run `task context`). **Lifetime lock**: re-attaching to the same task is a no-op; attaching to a _different_ task is refused with 409 — start a new Claude Code session instead. No `--force`, no `session detach`.
|
|
241
185
|
- `lumo session attach --steward <milestone>` — bind this session to a **milestone** as a **STEWARD (governance) session** (LUM-640): plan & accept only. Governance passes (task create/update, criteria set incl. `--human`, deps confirm/dismiss, `verdict --fail` with session provenance, milestone add/remove, milestone triage (LUM-646 claimable), all reads); implementation is gated (`lumo verify` → 409 **without burning a round**; moving a task to in_progress assigned to yourself → 409); commits/PRs produced anyway are recorded as milestone-scoped boundary crossings (fail-closed; disposition stays web+human-only, no CLI clear path). Same lifetime lock: same milestone idempotent, any other attach (a task, or a different milestone) → 409; multiple stewards per milestone are fine. See [sessions.md](references/sessions.md)
|
|
@@ -243,31 +187,12 @@ lumo fidelity show LUM-42 --json
|
|
|
243
187
|
- End-of-session housekeeping is fully automatic (no command). On DONE the server runs three best-effort silent passes: Layer-1 memory curation, fragment-usage audit, and blocked-tag automation. See [sessions.md](references/sessions.md)
|
|
244
188
|
- Git-suggest at session start (suggests `session attach`, never auto-binds) + Layer-2 project-memory review — see the reference
|
|
245
189
|
|
|
246
|
-
|
|
190
|
+
### Worktrees (local dev tooling) — see [worktree.md](references/worktree.md)
|
|
247
191
|
|
|
248
192
|
- `lumo worktree add <LUM-N> [slug]` — scaffold `.worktrees/<LUM-N>` + node_modules symlink off origin/main; run from the main checkout
|
|
249
193
|
- `lumo worktree rm <LUM-N> --yes` — remove a worktree (keeps the branch unless `--delete-branch`)
|
|
250
194
|
- `lumo worktree list` — list `.worktrees/` worktrees (task id, branch, dirty, node_modules link)
|
|
251
195
|
|
|
252
|
-
## Criteria audit
|
|
253
|
-
|
|
254
|
-
```bash
|
|
255
|
-
lumo criteria audit
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
`lumo criteria audit` — workspace-level acceptance-criteria analytics. Calls `GET /api/criteria/audit` and prints two things:
|
|
259
|
-
|
|
260
|
-
1. **Declared-kind distribution** — count of criteria by effective referent kind:
|
|
261
|
-
- `EXTERNAL_FACT` — declared as externally observable (git SHA, CI status, DB row) and the checkpointer invokes real external tooling
|
|
262
|
-
- `AGENT_CONSTRUCTED_STATE` — passes by checking output the agent itself produced
|
|
263
|
-
- `PENDING_OUTCOME` — deferred to post-hoc falsifier
|
|
264
|
-
- `UNVERIFIED_ASSERTION` — declared `EXTERNAL_FACT` but the checkpointer does **not** actually invoke external tooling (git/CI/HTTP); auto-downgraded. As of LUM-605 this is an **enforced gate, not just a label**: `lumo task criteria set` warns on it, and `lumo verify` blocks a PASS on it with **422 (no round burned)** until it's re-grounded or honestly re-declared `AGENT_CONSTRUCTED_STATE` (see references/criteria.md "referentKind")
|
|
265
|
-
- `UNCLASSIFIED` — legacy rows predating the `referentKind` field (null in DB)
|
|
266
|
-
|
|
267
|
-
2. **Self-confirming-green headline ratio** — `(AGENT_CONSTRUCTED_STATE + UNVERIFIED_ASSERTION) / classified`. Criteria in these two buckets pass by confirming only the agent's own work, not an independent external state.
|
|
268
|
-
|
|
269
|
-
**When to suggest**: when the user wants to audit how much of the workspace's "green" criteria are self-confirming vs externally anchored; when diagnosing whether acceptance criteria have real external hooks or are circular.
|
|
270
|
-
|
|
271
196
|
## Next-step hints (the trailing `Next:` block)
|
|
272
197
|
|
|
273
198
|
`task create`, `task update`, `session attach`, `task context` and `next` end with a short `Next:` block naming what to do now — attach an unbound session, draft a missing contract, run `lumo verify`, read `task status` after a rejected round, explain an open boundary crossing, or stop and wait when the task is IN_REVIEW.
|
|
@@ -300,7 +225,7 @@ Don't guess these:
|
|
|
300
225
|
|
|
301
226
|
1. `lumo session attach LUM-42` — bind this session (the binding is a lifetime lock; one session = one task)
|
|
302
227
|
2. `lumo task context LUM-42` — load background; review unresolved items, PR-review todos, the description
|
|
303
|
-
3. **If the task has no acceptance criteria** (context shows the draft reminder, not a contract): draft outcome-level criteria sized to the task (3–7 for a typical multi-file task; 1–2 for a micro task) and submit them with `lumo task criteria set` **before writing the first line of code
|
|
228
|
+
3. **If the task has no acceptance criteria** (context shows the draft reminder, not a contract): draft outcome-level criteria sized to the task (3–7 for a typical multi-file task; 1–2 for a micro task) and submit them with `lumo task criteria set` **before writing the first line of code**. When a `### Reference class (outside view)` block follows the reminder, draft against it — it lists how similar delivered tasks actually failed; treat it as material to reason from, never as a checklist to cover. See [criteria.md](references/criteria.md)
|
|
304
229
|
4. Do the work
|
|
305
230
|
5. **Before claiming done: `lumo verify`** — the machine half of the acceptance loop. Fix failures and re-run (the cap is workspace-configurable — see the `Round N/M` line in the output). All-pass → task moves to IN_REVIEW and you stop. See [verify.md](references/verify.md)
|
|
306
231
|
|
|
@@ -12,6 +12,35 @@ If `lumo task context` / session-start shows the draft reminder ("This task has
|
|
|
12
12
|
2. Draft **3–7 criteria** for a typical multi-file task (soft range — the server warns outside it but never rejects; if you genuinely need more, merge related checks instead). Scale the count down for small tasks (see "Scale the contract to the task size").
|
|
13
13
|
3. `lumo task criteria set <task> --file <criteria.json>` — submit.
|
|
14
14
|
|
|
15
|
+
### The reference-class block (outside view) — LUM-497
|
|
16
|
+
|
|
17
|
+
Below the draft reminder you may see a `### Reference class (outside view)` block: mechanical statistics over **similar delivered tasks** — the send-back reasons they hit, how often their contract was still being written after work started, and the boundary crossings they tripped. It exists because an agent drafting its own acceptance criteria is systematically optimistic: you write down what you intend to build, not what tasks like this one historically got sent back for.
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
### Reference class (outside view)
|
|
21
|
+
|
|
22
|
+
Based on: 14 delivered tasks in milestone "Trust and cognitive load"
|
|
23
|
+
|
|
24
|
+
· Most common send-back reasons: evidence insufficient 5/14 · work did not match the criterion 3/14
|
|
25
|
+
· Contract still being written after work started: 9/14 deliveries
|
|
26
|
+
· Most common boundary crossing: edited a file a checkpointer depends on 3/14
|
|
27
|
+
|
|
28
|
+
Tasks here most often come back for insufficient evidence — what will your key criteria point at as proof?
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**How to use it:** read the failure modes, then ask which of them this task can plausibly hit, and let that change what you write. "Evidence insufficient" leads the class → decide what your key criteria will actually point at as proof. "Work did not match the criterion" leads → check that your statements describe outcomes rather than the steps you plan to take.
|
|
32
|
+
|
|
33
|
+
**How NOT to use it — this is the failure mode the block itself is most likely to cause:** do not treat the lines as a checklist to be "covered". Adding one criterion per listed failure mode, or setting `evidenceRequired` on everything because evidence leads the distribution, inflates the criterion count without adding information and taxes every verification round. The trailing line is deliberately a **question, not an instruction** — answer it for this task.
|
|
34
|
+
|
|
35
|
+
Reading the numbers honestly:
|
|
36
|
+
|
|
37
|
+
- Counts are **raw fractions over a small class** (`5/14`), never percentages, on purpose — `5/14` is a handful of tasks, not a rate. Weight them accordingly.
|
|
38
|
+
- The block names its own class and sample size (`Based on: N delivered tasks in <scope>`) — a milestone-level class is far more relevant to your task than a team-level fallback. Check which one you got.
|
|
39
|
+
- **`Insufficient sample: …` is a correct, deliberate output**, not a failure or a missing feature. It means no scope reached the minimum class size (the block states the floor in its own message), and a distribution over fewer tasks would read as evidence while carrying none. Draft from the task itself and move on.
|
|
40
|
+
- A class with no recorded send-backs, post-start contract edits or crossings says so explicitly. That is a stated fact about the class, not missing data.
|
|
41
|
+
|
|
42
|
+
The block is derived server-side from delivery history; it is not a claim by any agent, and there is nothing to reply to or act on beyond your own drafting.
|
|
43
|
+
|
|
15
44
|
**The contract is editable until DONE — changes after work starts leave a recorded drift trail.** Behaviour changes at two thresholds tracked by `Task.workStartedAt` (set the first time the task leaves TODO; never resets even if the task bounces back to TODO):
|
|
16
45
|
|
|
17
46
|
| Stage | `criteria set` resubmit behaviour |
|
|
@@ -214,9 +243,29 @@ lumo task criteria list LUM-42
|
|
|
214
243
|
|
|
215
244
|
- **Session start** (bound task): the contract is the highest-priority section in the injection budget — ahead of memory/PR/Slack/Figma/web. If a still-open task has no criteria, the draft reminder is injected instead.
|
|
216
245
|
- **`lumo session attach`**: prints the contract (or the draft reminder) right after binding.
|
|
246
|
+
- **The reference-class block** rides on the draft reminder at all three of those surfaces, so it appears only when the task has no contract yet — the one moment it can still change what gets written. It is capped at a few lines, sits outside the injection budget, and is skipped silently if the read fails or the workspace has acceptance mode off.
|
|
217
247
|
- **`lumo task context`**: the `## Acceptance criteria (contract)` section appears after the task description, before memory.
|
|
218
248
|
- **Review-time gap findings** are appended at the round they surface and show up in the contract automatically — `REVIEW_ADDED` provenance via human review paths; findings a human raises in conversation are transcribed with `--human` + `--cause` (see verify.md "Review-time drift habits").
|
|
219
249
|
|
|
220
250
|
## After the contract: the verification loop
|
|
221
251
|
|
|
222
252
|
The contract is judged by `lumo verify` — run it before claiming the task is done. See [verify.md](verify.md) for the loop (a workspace-configurable round cap — `verificationMaxRounds`, default 3, shown as `Round N/M` in the output — IN_REVIEW on all-pass, escalation on a last-round fail).
|
|
253
|
+
|
|
254
|
+
## `lumo criteria audit` — workspace referent-kind analytics
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
lumo criteria audit
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
`lumo criteria audit` — workspace-level acceptance-criteria analytics. Calls `GET /api/criteria/audit` and prints two things:
|
|
261
|
+
|
|
262
|
+
1. **Declared-kind distribution** — count of criteria by effective referent kind:
|
|
263
|
+
- `EXTERNAL_FACT` — declared as externally observable (git SHA, CI status, DB row) and the checkpointer invokes real external tooling
|
|
264
|
+
- `AGENT_CONSTRUCTED_STATE` — passes by checking output the agent itself produced
|
|
265
|
+
- `PENDING_OUTCOME` — deferred to post-hoc falsifier
|
|
266
|
+
- `UNVERIFIED_ASSERTION` — declared `EXTERNAL_FACT` but the checkpointer does **not** actually invoke external tooling (git/CI/HTTP); auto-downgraded. As of LUM-605 this is an **enforced gate, not just a label**: `lumo task criteria set` warns on it, and `lumo verify` blocks a PASS on it with **422 (no round burned)** until it's re-grounded or honestly re-declared `AGENT_CONSTRUCTED_STATE` (see references/criteria.md "referentKind")
|
|
267
|
+
- `UNCLASSIFIED` — legacy rows predating the `referentKind` field (null in DB)
|
|
268
|
+
|
|
269
|
+
2. **Self-confirming-green headline ratio** — `(AGENT_CONSTRUCTED_STATE + UNVERIFIED_ASSERTION) / classified`. Criteria in these two buckets pass by confirming only the agent's own work, not an independent external state.
|
|
270
|
+
|
|
271
|
+
**When to suggest**: when the user wants to audit how much of the workspace's "green" criteria are self-confirming vs externally anchored; when diagnosing whether acceptance criteria have real external hooks or are circular.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Ideas (team-level capture pool)
|
|
2
|
+
|
|
3
|
+
An **idea** is an un-triaged spark parked above the project layer — not yet actionable work. Ideas are team-scoped (no project); the workspace's default team owns them. Ids are **I-prefixed** (`LUM-I42`) so they cannot collide with task ids (`LUM-42`) in the same team namespace.
|
|
4
|
+
|
|
5
|
+
The unprocessed (`CAPTURED`) pool is what the `lumo plan` converter consumes — see [plan-runs.md](plan-runs.md).
|
|
6
|
+
|
|
7
|
+
## `lumo idea "<statement>" [--context <text>]`
|
|
8
|
+
|
|
9
|
+
Capture an idea into the pool in under 10 seconds. Provenance is grabbed opportunistically and **never blocks the capture**: the current `CLAUDE_CODE_SESSION_ID` (→ `sourceSessionId`) and the session's bound task (→ `sourceTaskId`, null when nothing is bound). Prints `✓ 想法 LUM-I42 已入池`.
|
|
10
|
+
|
|
11
|
+
**When to suggest**: the user has a stray idea / thought / improvement they want to park without derailing the current task ("记一下这个想法", "capture this idea", "add to the backlog of ideas"). Prefer this over `task create` for un-triaged sparks — an idea is above projects and isn't yet actionable work.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
lumo idea "Add a quick-capture keyboard shortcut" --context "raised in standup"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## `lumo idea list`
|
|
18
|
+
|
|
19
|
+
Print the pool **newest-first**, one line per idea: the `LUM-I<n>` id, status and statement. Reads `GET /api/ideas`, which returns the **whole** pool (every status), not just the unprocessed slice. Empty pool prints `No ideas.`
|
|
20
|
+
|
|
21
|
+
The same pool is browsable/searchable in web at `/workspace/<slug>/ideas` (sidebar → Ideas), where a `PLANNED` idea links to the plan run that materialised it and the status filter hides `DROPPED` by default.
|
|
22
|
+
|
|
23
|
+
**When to suggest**: the user wants to see what's parked ("看看想法池", "list the ideas"), or is triaging before running `lumo plan`.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
lumo idea list
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## `lumo idea update <id> --status <captured|developing|planned|dropped>`
|
|
30
|
+
|
|
31
|
+
Move an idea through its lifecycle (LUM-679). `<id>` is the `LUM-I<n>` id (a bare number also resolves); `--status` is case-insensitive.
|
|
32
|
+
|
|
33
|
+
| State | Meaning |
|
|
34
|
+
| ------------ | -------------------------------- |
|
|
35
|
+
| `CAPTURED` | pooled, un-triaged |
|
|
36
|
+
| `DEVELOPING` | in triage / pre-work |
|
|
37
|
+
| `PLANNED` | consumed by an initiative / plan |
|
|
38
|
+
| `DROPPED` | terminal discard |
|
|
39
|
+
|
|
40
|
+
Allowed transitions: `CAPTURED ↔ DEVELOPING`, `DEVELOPING → PLANNED`, and **any non-terminal → DROPPED**. Nothing transitions out of `DROPPED`. `CAPTURED → PLANNED` is **not** a manual move — only the converter's materialisation lands an idea in `PLANNED`. An illegal move is rejected with a clear error (400); an unknown id → 404.
|
|
41
|
+
|
|
42
|
+
**When to suggest**: the user wants to triage by hand — start pre-work ("开始预研这个想法" → `developing`) or discard one ("废弃/丢掉这个想法" → `dropped`). The same control lives on the Idea detail page in web.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
lumo idea update LUM-I42 --status developing
|
|
46
|
+
lumo idea update LUM-I42 --status dropped
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Evidence on an idea — `slack` / `web` / `figma`
|
|
50
|
+
|
|
51
|
+
`lumo idea slack add|show|rm`, `lumo idea web add|show|rm`, `lumo idea figma add|list|rm|refresh|context` (LUM-681) attach and inspect supporting evidence, mirroring the `task slack/web/figma` source-card commands but hitting `/api/ideas/:id/...`. `<idea>` is the `LUM-I<n>` id.
|
|
52
|
+
|
|
53
|
+
`show` / `context` are **Tier-2 retrieval** (stored snapshot / fetched body / cached design metadata — no live re-fetch) and stamp the disclosure funnel like their task-side counterparts. `figma refresh` re-fetches metadata for every link on the idea.
|
|
54
|
+
|
|
55
|
+
**When to suggest**: the user wants to attach evidence (a Slack discussion, a spec link, a Figma mock) to an idea **before** it goes through `lumo plan` — the converter carries that evidence forward into the resulting task/initiative. Prefer attaching to the idea over waiting until after conversion.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
lumo idea web add LUM-I42 https://example.com/spec
|
|
59
|
+
lumo idea web show LUM-I42 wl_1
|
|
60
|
+
lumo idea web rm LUM-I42 wl_1
|
|
61
|
+
lumo idea slack add LUM-I42 https://myteam.slack.com/archives/C1/p123
|
|
62
|
+
lumo idea slack show LUM-I42 ctx_1
|
|
63
|
+
lumo idea slack rm LUM-I42 ctx_1
|
|
64
|
+
lumo idea figma add LUM-I42 https://www.figma.com/file/abc/Mock
|
|
65
|
+
lumo idea figma list LUM-I42
|
|
66
|
+
lumo idea figma context LUM-I42 cfl_1
|
|
67
|
+
lumo idea figma refresh LUM-I42
|
|
68
|
+
lumo idea figma rm LUM-I42 cfl_1
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Comments — `lumo idea comment` / `lumo idea comments list`
|
|
72
|
+
|
|
73
|
+
`lumo idea comment <id> <body>` posts a comment (LUM-680). `<id>` is the `LUM-I<n>` id (a bare number or a cuid also resolves); the body is plain text — quote it to pass spaces/newlines. Ideas reuse the task `Comment` model via a polymorphic `ideaId`; the thread is **flat** (no replies). Posting also records a `COMMENT_ADDED` entry on the idea's activity timeline.
|
|
74
|
+
|
|
75
|
+
`lumo idea comments list <id> [--full]` prints the thread oldest-first, capped to the output budget like `task comments list`; `--full` prints every comment. Empty thread → `(no comments)`.
|
|
76
|
+
|
|
77
|
+
**When to suggest**: the user wants to discuss or annotate a parked idea ("给这个想法加条评论"), or review its discussion/history ("看看这个想法的评论/活动"). For the **activity timeline** (status changes, statement edits, materialisation) there is no CLI reader — it renders on the Idea detail slide-over in web.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
lumo idea comment LUM-I42 "Let's scope this for next sprint"
|
|
81
|
+
lumo idea comments list LUM-I42
|
|
82
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Initiatives (team-level, `LUM-INIT-<n>`)
|
|
2
|
+
|
|
3
|
+
An **Initiative** is a team-level strategic goal that tasks roll up to. Two origins land in the same list:
|
|
4
|
+
|
|
5
|
+
- **Direct** — `lumo initiative create`, no plan run required (`planRunId = null`, status `ACTIVE`).
|
|
6
|
+
- **Materialised** — produced by the `lumo plan` converter's gate C, carrying its lineage (see [plan-runs.md](plan-runs.md)).
|
|
7
|
+
|
|
8
|
+
## `lumo initiative create "<goal>" [--assumption <text>]`
|
|
9
|
+
|
|
10
|
+
Create an Initiative directly. Prints the `LUM-INIT-<n>` id. `--assumption` records the bet (赌注旁注) behind it — the thing that, if false, makes the initiative the wrong call. A blank goal is rejected (400).
|
|
11
|
+
|
|
12
|
+
**When to suggest**: the user wants to stand up a strategic initiative directly — "建一个 initiative", "create an initiative", "开一个举措" — without running the converter.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
lumo initiative create "Ship the initiatives browse surface" --assumption "teams curate initiatives directly"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## `lumo initiative list`
|
|
19
|
+
|
|
20
|
+
Print the team's initiatives newest-first, one line each: the `LUM-INIT-<n>` id, status (`ACTIVE` | `DONE` | `DROPPED`) and goal.
|
|
21
|
+
|
|
22
|
+
Browsable in web at `/workspace/<slug>/initiatives` (sidebar → Initiatives), where each links to its lineage — the ideas it consumed and the tasks attached to it.
|
|
23
|
+
|
|
24
|
+
**When to suggest**: the user wants to see the team's initiatives ("看看 initiatives", "list the initiatives").
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
lumo initiative list
|
|
28
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Plan runs (design-thinking 转换器)
|
|
2
|
+
|
|
3
|
+
A **plan run** turns the team's captured idea pool + the current priority declaration into an executable plan, through a 3-gate recoverable state machine: **聚类 → 对齐 → 成计划**.
|
|
4
|
+
|
|
5
|
+
The CLI only **triggers and reports**. All editing and gate confirmation happen in **web** — the CLI hands off a deep-link.
|
|
6
|
+
|
|
7
|
+
Inputs come from [ideas.md](ideas.md) (the `CAPTURED` pool) and [priority.md](priority.md) (the current declaration). Materialisation produces tasks plus, when the plan calls for one, an Initiative — see [initiatives.md](initiatives.md).
|
|
8
|
+
|
|
9
|
+
## `lumo plan [--abandon-active]`
|
|
10
|
+
|
|
11
|
+
Start a converter run. Freezes the input snapshot at start and enforces **one active run per team**: if a run is already active it refuses and points to `lumo plan status`. `--abandon-active` abandons the prior run first, then starts fresh.
|
|
12
|
+
|
|
13
|
+
On success it prints (and opens) the **gate-A** web deep-link, `/workspace/<slug>/plan/<runId>`.
|
|
14
|
+
|
|
15
|
+
Invoked bare (`lumo plan`) it starts a run; `lumo plan --abandon-active` clears a stuck one first. The command is a parent with its own action — `status` below is a subcommand added on top of it, not a required one.
|
|
16
|
+
|
|
17
|
+
**When to suggest**: the user wants to turn the parked idea pool into a plan — "跑一下转换器", "start a planning run", "把想法变成计划".
|
|
18
|
+
|
|
19
|
+
## `lumo plan status`
|
|
20
|
+
|
|
21
|
+
Print the active run's current stage — either the working segment or the open `*_READY` gate — plus the deep-link to act on its next gate. With no active run, prompts to run `lumo plan`.
|
|
22
|
+
|
|
23
|
+
**When to suggest**: the user asks where an in-flight run stands ("plan 到哪一步了", "plan status"). The gate work itself is web-only.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
lumo plan status
|
|
27
|
+
```
|
|
@@ -91,7 +91,7 @@ What it does:
|
|
|
91
91
|
- Reads `CLAUDE_CODE_SESSION_ID` from the environment (Claude Code sets it automatically); errors out if unset — must run from inside a Claude Code session.
|
|
92
92
|
- Calls `POST /api/sessions/<session_id>/bind-task`, which sets the Session row's `taskId` and re-tags previously-untagged HookEvent rows in this session.
|
|
93
93
|
- The binding lives entirely on the server (`Session.taskId`); subsequent hooks read it back via the session row. The CLI keeps no local sentinel.
|
|
94
|
-
- Prints the task's **acceptance contract** (`## Acceptance criteria (contract)`) right after the bind confirmation — or, when a still-open task has none, the draft reminder to draft 3–7 criteria before the first line of code (see [criteria.md](criteria.md)). The same section is auto-injected at session start when already bound (highest priority in the injection budget, ahead of memory).
|
|
94
|
+
- Prints the task's **acceptance contract** (`## Acceptance criteria (contract)`) right after the bind confirmation — or, when a still-open task has none, the draft reminder to draft 3–7 criteria before the first line of code, followed by the `### Reference class (outside view)` block when history supports one (see [criteria.md](criteria.md)). The same section is auto-injected at session start when already bound (highest priority in the injection budget, ahead of memory).
|
|
95
95
|
|
|
96
96
|
After attaching, always run `lumo task context <identifier>` to load the task background.
|
|
97
97
|
|
|
@@ -176,7 +176,9 @@ The old end-of-session command was **removed**. The three passes it ran interact
|
|
|
176
176
|
- confidently-unused → `used=false`
|
|
177
177
|
- genuinely-uncertain edges stay `null` (honest "not voted", not "unused")
|
|
178
178
|
|
|
179
|
-
Already-voted sessions are skipped; a cron backstop drains any backlog. **Why:** upgrades the flywheel signal from "co-loaded" (constant) to "actually used" (discriminative)
|
|
179
|
+
Already-voted sessions are skipped; a cron backstop drains any backlog. **Why:** upgrades the flywheel signal from "co-loaded" (constant) to "actually used" (discriminative). `task context` then reports each fragment's **judged-used track record** — of the N tasks it appeared in, X were judged to have actually used it. That is a **lower bound** (never-audited appearances are excluded from the proven/retire calls), and it **replaced the retired merge-rate signal** (RFC LUM-535).
|
|
180
|
+
|
|
181
|
+
> Don't confuse this with the used-vs-base **merge rate** still reported by `lumo task lineage --signal` ([task-context.md](task-context.md)) — that is a different, live metric for workspace signal-health, not the retired fragment-usefulness one.
|
|
180
182
|
|
|
181
183
|
**3. Blocked-tag automation (server-side).** When a session crosses the same-tool failure threshold (**≥ 3** same-type failures, aggregated from `POST_TOOL_USE_FAILURE` grouped by tool name + `STOP_FAILURE` turn-level failures), the server **auto-applies the shared `blocked` tag** to the bound task. This inverts the old manual gate — no prompt, no human in the loop — and is safe via three safeguards:
|
|
182
184
|
|
|
@@ -13,7 +13,7 @@ lumo task context LUM-42
|
|
|
13
13
|
The command prints a markdown document to stdout with these sections, in order:
|
|
14
14
|
|
|
15
15
|
1. **Task header** — identifier, title, status, description.
|
|
16
|
-
2. **`## Acceptance criteria (contract)`** — shown right after the header. Each line `[MACHINE|HUMAN] statement`, with a `↳ check:` line for MACHINE checkpointers; HUMAN_EDIT / REVIEW_ADDED provenance tagged inline. A still-open task with none shows a draft reminder instead — draft 3–7 criteria **before writing code** (see [criteria.md](criteria.md)).
|
|
16
|
+
2. **`## Acceptance criteria (contract)`** — shown right after the header. Each line `[MACHINE|HUMAN] statement`, with a `↳ check:` line for MACHINE checkpointers; HUMAN_EDIT / REVIEW_ADDED provenance tagged inline. A still-open task with none shows a draft reminder instead — draft 3–7 criteria **before writing code** — followed by a `### Reference class (outside view)` block giving the failure modes of similar delivered tasks, to draft against rather than to copy (see [criteria.md](criteria.md)).
|
|
17
17
|
3. **Memory section** — cross-session learnings; trusted background context that persists, so you avoid re-learning decisions/constraints.
|
|
18
18
|
4. **Inline source cards** — Slack / web / Figma / artifacts / documents / comments / Pull Requests (see "Context Retrieval" below).
|
|
19
19
|
5. **`## PR review todos`** — mirrored PR review comments as a checkbox todo list. Each line-level comment shows `` `file:line` `` + reviewer's ask + GitHub comment link; each `changes_requested` review summary shows "🛑 Changes requested (whole PR)". Present only when the task's PR(s) have review comments. Each unchecked box is a TODO: resolve it, then reply on the PR (a Lumo comment mirrors back to GitHub).
|