@codyswann/lisa 2.115.1 → 2.115.3
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/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/scripts/queue-status-prd-readers.mjs +14 -0
- package/plugins/lisa/skills/project-ideation/SKILL.md +25 -3
- package/plugins/lisa/skills/setup-automations/SKILL.md +10 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/src/base/scripts/queue-status-prd-readers.mjs +14 -0
- package/plugins/src/base/skills/project-ideation/SKILL.md +25 -3
- package/plugins/src/base/skills/setup-automations/SKILL.md +10 -1
package/package.json
CHANGED
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"lodash": ">=4.18.1"
|
|
83
83
|
},
|
|
84
84
|
"name": "@codyswann/lisa",
|
|
85
|
-
"version": "2.115.
|
|
85
|
+
"version": "2.115.3",
|
|
86
86
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
87
87
|
"main": "dist/index.js",
|
|
88
88
|
"exports": {
|
|
@@ -65,6 +65,20 @@ const HIGHLIGHT_COPY = {
|
|
|
65
65
|
* }} snapshot
|
|
66
66
|
*/
|
|
67
67
|
export function evaluatePrdQueuePressure(snapshot = {}) {
|
|
68
|
+
if (
|
|
69
|
+
snapshot.queueResolved === false ||
|
|
70
|
+
snapshot.health?.verdict === "MISCONFIGURED"
|
|
71
|
+
) {
|
|
72
|
+
return {
|
|
73
|
+
allowed: false,
|
|
74
|
+
decisiveRole: "misconfigured",
|
|
75
|
+
blockerItem: null,
|
|
76
|
+
nextStep: snapshot.resolutionError
|
|
77
|
+
? `Fix PRD source queue configuration: ${snapshot.resolutionError}`
|
|
78
|
+
: "Fix PRD source queue configuration before creating auto-ready PRDs.",
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
68
82
|
const decisiveRole = ACTIONABLE_ROLE_ORDER.find(
|
|
69
83
|
role => normalizeCount(snapshot.counts?.[role]) > 0
|
|
70
84
|
);
|
|
@@ -20,7 +20,8 @@ cannot verify yourself is noise — demote it honestly.
|
|
|
20
20
|
- **`prd_ready=true|false`** (default **false**) — the PRD-lifecycle state for the PRDs this run
|
|
21
21
|
creates. `false` → created in the source's **draft** state for human review. `true` → created
|
|
22
22
|
**prd-ready** so the PRD side of `lisa:intake` auto-claims them. Passed straight through to
|
|
23
|
-
`lisa:research` (which maps it to `lisa:prd-source-write`'s `initial_role`)
|
|
23
|
+
`lisa:research` (which maps it to `lisa:prd-source-write`'s `initial_role`) only after the PRD queue
|
|
24
|
+
pressure gate allows auto-ready writes.
|
|
24
25
|
- **`max_prds=<n>|all`** (default **1**) — how many build-ready ideas become PRDs this run. Default
|
|
25
26
|
creates **one** PRD (the single top-ranked idea), because `lisa:research` is a heavy full flow.
|
|
26
27
|
`max_prds=3` creates the top three; `max_prds=all` creates one per build-ready idea. Discovery
|
|
@@ -159,9 +160,15 @@ the same PRD reader contract used by `/lisa:queue-status` and evaluate it with
|
|
|
159
160
|
the same way `lisa:intake` resolves the PRD side, and pass the matching queue argument in the
|
|
160
161
|
blocked outcome (for example, `github intake_mode=prd`).
|
|
161
162
|
|
|
163
|
+
Queue pressure is any unresolved PRD lifecycle work that would make another auto-ready PRD compete
|
|
164
|
+
with existing intake work. Treat at least these roles as pressure when the helper reports them:
|
|
165
|
+
`prd-ready`, `prd-in-review`, `prd-blocked`, unresolved `prd-ticketed`, and source-reader failures or
|
|
166
|
+
misconfiguration snapshots. `prd-shipped` / `prd-verified` terminal history is not pressure unless the
|
|
167
|
+
reader helper explicitly reports it as unresolved.
|
|
168
|
+
|
|
162
169
|
If the helper returns `allowed: false`, stop before any `lisa:research`, `lisa:prd-source-write`, or
|
|
163
|
-
vendor PRD writer invocation. Emit **PRDs Created** as a blocked outcome, not as an empty success
|
|
164
|
-
The blocked outcome must include:
|
|
170
|
+
vendor PRD writer invocation. Emit **PRDs Created** as a blocked outcome, not as an empty success or a
|
|
171
|
+
silent idle run. The blocked outcome must include:
|
|
165
172
|
|
|
166
173
|
- `source` and `tracker` from `.lisa.config.json`;
|
|
167
174
|
- the decisive PRD lifecycle `role`;
|
|
@@ -170,6 +177,21 @@ The blocked outcome must include:
|
|
|
170
177
|
`/lisa:intake <PRD queue>`;
|
|
171
178
|
- a clear statement that no research or PRD source write was invoked.
|
|
172
179
|
|
|
180
|
+
Use this output shape so recurring automations can surface a useful next step without digging through
|
|
181
|
+
debug logs:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
## PRDs Created
|
|
185
|
+
|
|
186
|
+
Blocked: PRD queue pressure prevents auto-ready creation.
|
|
187
|
+
- source: <source>
|
|
188
|
+
- tracker: <tracker>
|
|
189
|
+
- role: <decisive role>
|
|
190
|
+
- item: <ref or "unavailable"> <url when available>
|
|
191
|
+
- next action: <helper nextStep or /lisa:intake <PRD queue>>
|
|
192
|
+
- write invoked: no
|
|
193
|
+
```
|
|
194
|
+
|
|
173
195
|
If the helper returns `allowed: true`, continue to Step 6 normally and keep the existing draft/ready
|
|
174
196
|
creation behavior unchanged.
|
|
175
197
|
|
|
@@ -30,7 +30,10 @@ create them; invoke the runtime's automation tool with the spec below.
|
|
|
30
30
|
|
|
31
31
|
- `auto-start-prds` (default **false**) — passed as `prd_ready` to the **exploratory-prds**
|
|
32
32
|
automation. `true` → ideated PRDs are created `prd-ready` (auto-picked-up by PRD intake); `false` →
|
|
33
|
-
created as drafts for human review.
|
|
33
|
+
created as drafts for human review. When `true`, `/lisa:project-ideation` still checks the configured
|
|
34
|
+
PRD queue before writing: existing `prd-ready`, `prd-in-review`, `prd-blocked`, unresolved
|
|
35
|
+
`prd-ticketed`, or unresolved source-reader pressure can intentionally turn the automation cycle into
|
|
36
|
+
a blocked/idle outcome instead of creating another ready PRD.
|
|
34
37
|
- `auto-start-tickets` (default **false**) — passed as `ready` to the **exploratory-bugs**
|
|
35
38
|
automation. `true` → filed bug/usability tickets are created build-ready (auto-picked-up by ticket
|
|
36
39
|
intake); `false` → created in the backlog for human triage.
|
|
@@ -59,6 +62,12 @@ the rebase, leave queue state unchanged, and report the blocker instead of runni
|
|
|
59
62
|
For a Codex `rrule`: every 60 min → `FREQ=HOURLY;INTERVAL=1`; every 10 min →
|
|
60
63
|
`FREQ=MINUTELY;INTERVAL=10`; once a day → `FREQ=DAILY;INTERVAL=1`.
|
|
61
64
|
|
|
65
|
+
**Exploratory PRD pressure gate.** `auto-start-prds=true` means "create PRDs in the ready PRD
|
|
66
|
+
lifecycle when the PRD queue has capacity," not "always create a new ready PRD." The
|
|
67
|
+
`exploratory-prds` automation uses the same PRD source queue and pressure roles reported by
|
|
68
|
+
`/lisa:queue-status`; if pressure exists, the cycle should report the blocking role/ref and the
|
|
69
|
+
smallest next action, usually `/lisa:intake <PRD queue>`, without invoking research or writing a PRD.
|
|
70
|
+
|
|
62
71
|
**Queue resolution.** Resolve the intake/repair queue from `.lisa.config.json` — `source` for the
|
|
63
72
|
PRD queue, `tracker` for the build queue (for the common GitHub case these are `github
|
|
64
73
|
intake_mode=prd` and `github intake_mode=build`, matching how the existing Lisa intake automations
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.115.
|
|
3
|
+
"version": "2.115.3",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.115.
|
|
3
|
+
"version": "2.115.3",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -65,6 +65,20 @@ const HIGHLIGHT_COPY = {
|
|
|
65
65
|
* }} snapshot
|
|
66
66
|
*/
|
|
67
67
|
export function evaluatePrdQueuePressure(snapshot = {}) {
|
|
68
|
+
if (
|
|
69
|
+
snapshot.queueResolved === false ||
|
|
70
|
+
snapshot.health?.verdict === "MISCONFIGURED"
|
|
71
|
+
) {
|
|
72
|
+
return {
|
|
73
|
+
allowed: false,
|
|
74
|
+
decisiveRole: "misconfigured",
|
|
75
|
+
blockerItem: null,
|
|
76
|
+
nextStep: snapshot.resolutionError
|
|
77
|
+
? `Fix PRD source queue configuration: ${snapshot.resolutionError}`
|
|
78
|
+
: "Fix PRD source queue configuration before creating auto-ready PRDs.",
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
68
82
|
const decisiveRole = ACTIONABLE_ROLE_ORDER.find(
|
|
69
83
|
role => normalizeCount(snapshot.counts?.[role]) > 0
|
|
70
84
|
);
|
|
@@ -20,7 +20,8 @@ cannot verify yourself is noise — demote it honestly.
|
|
|
20
20
|
- **`prd_ready=true|false`** (default **false**) — the PRD-lifecycle state for the PRDs this run
|
|
21
21
|
creates. `false` → created in the source's **draft** state for human review. `true` → created
|
|
22
22
|
**prd-ready** so the PRD side of `lisa:intake` auto-claims them. Passed straight through to
|
|
23
|
-
`lisa:research` (which maps it to `lisa:prd-source-write`'s `initial_role`)
|
|
23
|
+
`lisa:research` (which maps it to `lisa:prd-source-write`'s `initial_role`) only after the PRD queue
|
|
24
|
+
pressure gate allows auto-ready writes.
|
|
24
25
|
- **`max_prds=<n>|all`** (default **1**) — how many build-ready ideas become PRDs this run. Default
|
|
25
26
|
creates **one** PRD (the single top-ranked idea), because `lisa:research` is a heavy full flow.
|
|
26
27
|
`max_prds=3` creates the top three; `max_prds=all` creates one per build-ready idea. Discovery
|
|
@@ -159,9 +160,15 @@ the same PRD reader contract used by `/lisa:queue-status` and evaluate it with
|
|
|
159
160
|
the same way `lisa:intake` resolves the PRD side, and pass the matching queue argument in the
|
|
160
161
|
blocked outcome (for example, `github intake_mode=prd`).
|
|
161
162
|
|
|
163
|
+
Queue pressure is any unresolved PRD lifecycle work that would make another auto-ready PRD compete
|
|
164
|
+
with existing intake work. Treat at least these roles as pressure when the helper reports them:
|
|
165
|
+
`prd-ready`, `prd-in-review`, `prd-blocked`, unresolved `prd-ticketed`, and source-reader failures or
|
|
166
|
+
misconfiguration snapshots. `prd-shipped` / `prd-verified` terminal history is not pressure unless the
|
|
167
|
+
reader helper explicitly reports it as unresolved.
|
|
168
|
+
|
|
162
169
|
If the helper returns `allowed: false`, stop before any `lisa:research`, `lisa:prd-source-write`, or
|
|
163
|
-
vendor PRD writer invocation. Emit **PRDs Created** as a blocked outcome, not as an empty success
|
|
164
|
-
The blocked outcome must include:
|
|
170
|
+
vendor PRD writer invocation. Emit **PRDs Created** as a blocked outcome, not as an empty success or a
|
|
171
|
+
silent idle run. The blocked outcome must include:
|
|
165
172
|
|
|
166
173
|
- `source` and `tracker` from `.lisa.config.json`;
|
|
167
174
|
- the decisive PRD lifecycle `role`;
|
|
@@ -170,6 +177,21 @@ The blocked outcome must include:
|
|
|
170
177
|
`/lisa:intake <PRD queue>`;
|
|
171
178
|
- a clear statement that no research or PRD source write was invoked.
|
|
172
179
|
|
|
180
|
+
Use this output shape so recurring automations can surface a useful next step without digging through
|
|
181
|
+
debug logs:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
## PRDs Created
|
|
185
|
+
|
|
186
|
+
Blocked: PRD queue pressure prevents auto-ready creation.
|
|
187
|
+
- source: <source>
|
|
188
|
+
- tracker: <tracker>
|
|
189
|
+
- role: <decisive role>
|
|
190
|
+
- item: <ref or "unavailable"> <url when available>
|
|
191
|
+
- next action: <helper nextStep or /lisa:intake <PRD queue>>
|
|
192
|
+
- write invoked: no
|
|
193
|
+
```
|
|
194
|
+
|
|
173
195
|
If the helper returns `allowed: true`, continue to Step 6 normally and keep the existing draft/ready
|
|
174
196
|
creation behavior unchanged.
|
|
175
197
|
|
|
@@ -30,7 +30,10 @@ create them; invoke the runtime's automation tool with the spec below.
|
|
|
30
30
|
|
|
31
31
|
- `auto-start-prds` (default **false**) — passed as `prd_ready` to the **exploratory-prds**
|
|
32
32
|
automation. `true` → ideated PRDs are created `prd-ready` (auto-picked-up by PRD intake); `false` →
|
|
33
|
-
created as drafts for human review.
|
|
33
|
+
created as drafts for human review. When `true`, `/lisa:project-ideation` still checks the configured
|
|
34
|
+
PRD queue before writing: existing `prd-ready`, `prd-in-review`, `prd-blocked`, unresolved
|
|
35
|
+
`prd-ticketed`, or unresolved source-reader pressure can intentionally turn the automation cycle into
|
|
36
|
+
a blocked/idle outcome instead of creating another ready PRD.
|
|
34
37
|
- `auto-start-tickets` (default **false**) — passed as `ready` to the **exploratory-bugs**
|
|
35
38
|
automation. `true` → filed bug/usability tickets are created build-ready (auto-picked-up by ticket
|
|
36
39
|
intake); `false` → created in the backlog for human triage.
|
|
@@ -59,6 +62,12 @@ the rebase, leave queue state unchanged, and report the blocker instead of runni
|
|
|
59
62
|
For a Codex `rrule`: every 60 min → `FREQ=HOURLY;INTERVAL=1`; every 10 min →
|
|
60
63
|
`FREQ=MINUTELY;INTERVAL=10`; once a day → `FREQ=DAILY;INTERVAL=1`.
|
|
61
64
|
|
|
65
|
+
**Exploratory PRD pressure gate.** `auto-start-prds=true` means "create PRDs in the ready PRD
|
|
66
|
+
lifecycle when the PRD queue has capacity," not "always create a new ready PRD." The
|
|
67
|
+
`exploratory-prds` automation uses the same PRD source queue and pressure roles reported by
|
|
68
|
+
`/lisa:queue-status`; if pressure exists, the cycle should report the blocking role/ref and the
|
|
69
|
+
smallest next action, usually `/lisa:intake <PRD queue>`, without invoking research or writing a PRD.
|
|
70
|
+
|
|
62
71
|
**Queue resolution.** Resolve the intake/repair queue from `.lisa.config.json` — `source` for the
|
|
63
72
|
PRD queue, `tracker` for the build queue (for the common GitHub case these are `github
|
|
64
73
|
intake_mode=prd` and `github intake_mode=build`, matching how the existing Lisa intake automations
|