@codyswann/lisa 2.109.0 → 2.110.1
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/skills/github-write-prd/SKILL.md +44 -3
- package/plugins/lisa/skills/prd-source-write/SKILL.md +17 -0
- package/plugins/lisa/skills/project-ideation/SKILL.md +7 -1
- package/plugins/lisa/skills/research/SKILL.md +11 -2
- 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/lisa-wiki/scripts/lint-wiki.mjs +5 -1
- package/plugins/src/base/skills/github-write-prd/SKILL.md +44 -3
- package/plugins/src/base/skills/prd-source-write/SKILL.md +17 -0
- package/plugins/src/base/skills/project-ideation/SKILL.md +7 -1
- package/plugins/src/base/skills/research/SKILL.md +11 -2
- package/plugins/src/wiki/scripts/lint-wiki.mjs +5 -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.
|
|
85
|
+
"version": "2.110.1",
|
|
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": {
|
|
@@ -10,7 +10,8 @@ Create (or update) a PRD issue in the configured source repo. Invoked by `lisa:p
|
|
|
10
10
|
when `source = github`; do not call directly from a vendor-neutral caller.
|
|
11
11
|
|
|
12
12
|
`$ARGUMENTS` carries the `lisa:prd-source-write` spec: `title`, `body` (full PRD markdown),
|
|
13
|
-
`initial_role` (`draft` | `ready`, default `draft`), `dedupe_key`, `marker`, optional `source_ref
|
|
13
|
+
`initial_role` (`draft` | `ready`, default `draft`), `dedupe_key`, `marker`, optional `source_ref`,
|
|
14
|
+
and optional `ideation_ledger_payload` from `lisa:project-ideation` via `lisa:research`.
|
|
14
15
|
|
|
15
16
|
## Phase 1 — Resolve repo and PRD lifecycle labels
|
|
16
17
|
|
|
@@ -63,6 +64,40 @@ the single instance. If the live issue body already contains the canonical manag
|
|
|
63
64
|
section, preserve it verbatim unless the caller intentionally supplied an updated canonical section;
|
|
64
65
|
use the shared `usage-accounting` serializer/merge path rather than hand-editing ledger rows.
|
|
65
66
|
|
|
67
|
+
**Exploratory ideation run ledger (both paths).** When the write was initiated by
|
|
68
|
+
`lisa:project-ideation`, carries a project-ideation marker, or includes
|
|
69
|
+
`ideation_ledger_payload`, persist a managed `## Exploratory Ideation Run Ledger` section in the PRD
|
|
70
|
+
body. Prefer the managed section over a comment so the PRD itself remains the operator's source of
|
|
71
|
+
truth; use a managed comment only if the body cannot be updated. Populate the fields from
|
|
72
|
+
`ideation_ledger_payload` when present, falling back to `marker`, `initial_role`, repo config, and
|
|
73
|
+
runtime metadata only for missing fields. Keep one managed section by replacing the content between
|
|
74
|
+
stable markers:
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
## Exploratory Ideation Run Ledger
|
|
78
|
+
<!-- lisa:exploratory-ideation-run-ledger:start -->
|
|
79
|
+
- timestamp: <ISO-8601 run timestamp>
|
|
80
|
+
- automation_id: <Codex/Claude automation id or unavailable>
|
|
81
|
+
- repo: <org>/<repo>
|
|
82
|
+
- prd_ready: true|false
|
|
83
|
+
- persona_evidence_refs: <comma-separated source refs or unavailable>
|
|
84
|
+
- selected_idea: <selected idea title/key>
|
|
85
|
+
- dedupe_marker: <MARKER>
|
|
86
|
+
- prd_url: <created or reused PRD URL>
|
|
87
|
+
- outcome: created|reused
|
|
88
|
+
- lifecycle_role_after_write: draft|ready|in_review|blocked|ticketed|shipped|verified
|
|
89
|
+
- rejected_overlap_candidates: <issue refs/titles considered and rejected, or none>
|
|
90
|
+
- expected_empirical_verification_artifact: <artifact ref or unavailable>
|
|
91
|
+
<!-- lisa:exploratory-ideation-run-ledger:end -->
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
On CREATE, write a ledger entry with `outcome: created`, the selected marker, the created PRD URL,
|
|
95
|
+
and the lifecycle role applied by this write. On UPDATE/reuse, write `outcome: reused`, preserve the
|
|
96
|
+
same dedupe marker, record the reused PRD URL, and report the lifecycle role that remains after
|
|
97
|
+
reconciliation. If the live PRD has progressed past ready, do not downgrade it while recording the
|
|
98
|
+
reuse ledger; the `lifecycle_role_after_write` value must be the existing progressed role. Preserve
|
|
99
|
+
exactly one PRD lifecycle label in the same pass as the ledger write.
|
|
100
|
+
|
|
66
101
|
**CREATE** (no existing issue):
|
|
67
102
|
|
|
68
103
|
1. Write the marker-normalized PRD body to a temp file.
|
|
@@ -70,7 +105,11 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
|
|
|
70
105
|
gh issue create --repo "$ORG/$REPO" --title "$TITLE" --body-file /tmp/prd-body.md --label "$ROLE_LABEL"
|
|
71
106
|
```
|
|
72
107
|
3. Capture the returned issue number/URL.
|
|
73
|
-
4.
|
|
108
|
+
4. Rewrite the PRD body with the managed `## Exploratory Ideation Run Ledger` section populated for
|
|
109
|
+
`outcome: created` when the caller supplied project-ideation ledger inputs, then
|
|
110
|
+
`gh issue edit <n> --body-file /tmp/prd-body.md`. This second write is allowed because the URL is
|
|
111
|
+
not known until after creation.
|
|
112
|
+
5. If `github.projects.v2` is enabled, resolve the created PRD issue node id and invoke
|
|
74
113
|
`lisa:github-project-v2` with `operation: ensure-item` and `content_node_id: <issue-node-id>`.
|
|
75
114
|
- `outcome: disabled` → continue normally.
|
|
76
115
|
- `outcome: added` or `reused` → continue normally; membership is now present.
|
|
@@ -80,7 +119,9 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
|
|
|
80
119
|
**UPDATE** (existing issue or `source_ref`):
|
|
81
120
|
|
|
82
121
|
1. `gh issue edit <n> --repo "$ORG/$REPO" --body-file /tmp/prd-body.md` with the **marker-normalized**
|
|
83
|
-
body (regenerate in place; never drop the marker
|
|
122
|
+
body (regenerate in place; never drop the marker, the managed `## Exploratory Ideation Run Ledger`
|
|
123
|
+
section, or an existing managed `## Lisa Usage` section). When the caller supplied
|
|
124
|
+
project-ideation ledger inputs, replace the managed ledger content with an `outcome: reused` entry.
|
|
84
125
|
2. Reconcile the lifecycle label to **exactly one**: add `$ROLE_LABEL`, remove every other label in
|
|
85
126
|
the resolved `${ALL_PRD_LABELS[@]}` set (the config-resolved names — not a hard-coded list) via
|
|
86
127
|
`gh issue edit <n> --add-label / --remove-label`. Never leave a PRD carrying two lifecycle labels.
|
|
@@ -27,6 +27,17 @@ dedupe_key: "<stable-key>" # e.g. project-ideation's idea key
|
|
|
27
27
|
marker: "[lisa-project-ideation] idea=<stable-key>" # embedded in the PRD body for dedupe
|
|
28
28
|
origin: { tool: project-ideation | research | manual }
|
|
29
29
|
source_ref: "<optional existing PRD ref to force an update>"
|
|
30
|
+
ideation_ledger_payload: # optional; forwarded unchanged to the vendor writer
|
|
31
|
+
selected_marker: "<same value as marker>"
|
|
32
|
+
automation_id: "<Codex/Claude automation id or unavailable>"
|
|
33
|
+
automation_memory_path: "<path or unavailable>"
|
|
34
|
+
repo: "<org>/<repo or detected repo identity>"
|
|
35
|
+
prd_ready: true|false
|
|
36
|
+
persona_names: ["<derived persona name>"]
|
|
37
|
+
persona_evidence_refs: ["<file/doc/table/release ref>"]
|
|
38
|
+
selected_idea: "<selected idea title/key>"
|
|
39
|
+
rejected_overlap_candidates: ["<issue refs/titles considered and rejected>"]
|
|
40
|
+
expected_empirical_verification_artifact: "<artifact ref or unavailable>"
|
|
30
41
|
```
|
|
31
42
|
|
|
32
43
|
`initial_role` semantics are uniform across vendors (the role STRINGS resolve per vendor from
|
|
@@ -72,6 +83,10 @@ prior PRD-source-write behavior to preserve, so omitted means `draft`.
|
|
|
72
83
|
the applied role (`draft`/`ready`), the dedupe marker, and whether it was created or reused.
|
|
73
84
|
Downstream callers (research, project-ideation) parse this — do not paraphrase.
|
|
74
85
|
|
|
86
|
+
When `ideation_ledger_payload` is present, this shim still does not render or interpret it. Forward
|
|
87
|
+
the object verbatim to the selected vendor writer so source-specific rendering remains behind the
|
|
88
|
+
configured writer and the dispatch layer never bypasses source selection.
|
|
89
|
+
|
|
75
90
|
## Rules
|
|
76
91
|
|
|
77
92
|
- Never bypass dispatch — a vendor-neutral caller calling a `*-write-prd` skill directly defeats the
|
|
@@ -80,5 +95,7 @@ prior PRD-source-write behavior to preserve, so omitted means `draft`.
|
|
|
80
95
|
and fallback behavior belongs in the vendor writers and follows the `usage-accounting` contract.
|
|
81
96
|
- Never accept a source outside `{notion, confluence, github, linear}`. `jira` and `file` fail loudly.
|
|
82
97
|
- Never mutate the spec between layers. The vendor writers define their own create/dedupe contract.
|
|
98
|
+
- Never drop, rename, or vendor-render `ideation_ledger_payload`; it is a pass-through payload for
|
|
99
|
+
the configured writer.
|
|
83
100
|
- Never invent a PRD lifecycle role string — resolve every role from `config-resolution` per vendor.
|
|
84
101
|
- Idempotency is the vendor writer's job (marker search before create); this shim only routes.
|
|
@@ -155,7 +155,13 @@ For each idea in the creation set, invoke `/lisa:research` with:
|
|
|
155
155
|
grounding and the empirical verification plan),
|
|
156
156
|
- `prd_ready` (this run's flag — `lisa:research` maps it to draft vs prd-ready),
|
|
157
157
|
- a stable **dedupe marker** (see below) so a re-run references the existing PRD instead of creating
|
|
158
|
-
a duplicate
|
|
158
|
+
a duplicate,
|
|
159
|
+
- a structured `ideation_ledger_payload` handoff containing the selected marker, automation id and
|
|
160
|
+
memory path when available, persona names, persona evidence references, rejected overlap
|
|
161
|
+
candidates, repo identity, `prd_ready`, selected idea title/key, and the expected empirical
|
|
162
|
+
verification artifact. This payload is the only ideation-run metadata channel between
|
|
163
|
+
`project-ideation`, `research`, `prd-source-write`, and the vendor writer; keep GitHub-specific
|
|
164
|
+
rendering out of this skill.
|
|
159
165
|
|
|
160
166
|
`lisa:research` synthesizes the PRD and creates it in the configured source via
|
|
161
167
|
`lisa:prd-source-write`. `project-ideation` never writes to the source directly — it delegates, so
|
|
@@ -16,6 +16,12 @@ Produce a PRD for the problem in `$ARGUMENTS`, then create it in the configured
|
|
|
16
16
|
- `dedupe_key` / `marker` (optional) — a stable dedupe marker (e.g. supplied by
|
|
17
17
|
`lisa:project-ideation`) embedded in the created PRD so re-runs reference the existing PRD rather
|
|
18
18
|
than creating a duplicate.
|
|
19
|
+
- `ideation_ledger_payload` (optional, required when invoked by `lisa:project-ideation`) — a
|
|
20
|
+
structured metadata object to forward unchanged to `lisa:prd-source-write`. It carries the
|
|
21
|
+
selected marker, automation id/path when available, persona names, persona evidence references,
|
|
22
|
+
rejected overlap candidates, repo identity, `prd_ready`, selected idea title/key, and expected
|
|
23
|
+
empirical verification artifact. `research` may use these fields to inform the PRD body, but must
|
|
24
|
+
not discard, rename, or vendor-render them.
|
|
19
25
|
|
|
20
26
|
## Orchestration: agent team
|
|
21
27
|
|
|
@@ -55,5 +61,8 @@ source — there is no loose document artifact.** Before handing the synthesized
|
|
|
55
61
|
`lisa:usage-accounting` so the PRD body carries the canonical `## Lisa Usage` ledger from creation
|
|
56
62
|
time onward. If the runtime does not expose trustworthy usage, the direct entry must still be
|
|
57
63
|
written with `source: unavailable` and nullable token/cost fields rather than silently omitting the
|
|
58
|
-
Research row.
|
|
59
|
-
|
|
64
|
+
Research row. If the call includes `ideation_ledger_payload`, pass that object through in the
|
|
65
|
+
`lisa:prd-source-write` spec unchanged alongside `marker`, `dedupe_key`, and `initial_role`; this is
|
|
66
|
+
the vendor-neutral handoff that lets the configured writer render an auditable run ledger without
|
|
67
|
+
`research` bypassing source selection. A `source` must be configured; if it is not, stop and report
|
|
68
|
+
it rather than emitting a document. The Plan flow consumes the created PRD next.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.110.1",
|
|
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.
|
|
3
|
+
"version": "2.110.1",
|
|
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"
|
|
@@ -317,4 +317,8 @@ if (asJson) {
|
|
|
317
317
|
);
|
|
318
318
|
}
|
|
319
319
|
|
|
320
|
-
process.exit(
|
|
320
|
+
// Set exitCode instead of calling process.exit() so a large `--json` payload
|
|
321
|
+
// written to a pipe (e.g. captured via spawnSync by verify-migration) is fully
|
|
322
|
+
// flushed before the process exits. process.exit() can truncate async stdout
|
|
323
|
+
// writes at the OS pipe buffer (~64KB), corrupting the JSON for the reader.
|
|
324
|
+
process.exitCode = blocking === 0 ? 0 : 1;
|
|
@@ -10,7 +10,8 @@ Create (or update) a PRD issue in the configured source repo. Invoked by `lisa:p
|
|
|
10
10
|
when `source = github`; do not call directly from a vendor-neutral caller.
|
|
11
11
|
|
|
12
12
|
`$ARGUMENTS` carries the `lisa:prd-source-write` spec: `title`, `body` (full PRD markdown),
|
|
13
|
-
`initial_role` (`draft` | `ready`, default `draft`), `dedupe_key`, `marker`, optional `source_ref
|
|
13
|
+
`initial_role` (`draft` | `ready`, default `draft`), `dedupe_key`, `marker`, optional `source_ref`,
|
|
14
|
+
and optional `ideation_ledger_payload` from `lisa:project-ideation` via `lisa:research`.
|
|
14
15
|
|
|
15
16
|
## Phase 1 — Resolve repo and PRD lifecycle labels
|
|
16
17
|
|
|
@@ -63,6 +64,40 @@ the single instance. If the live issue body already contains the canonical manag
|
|
|
63
64
|
section, preserve it verbatim unless the caller intentionally supplied an updated canonical section;
|
|
64
65
|
use the shared `usage-accounting` serializer/merge path rather than hand-editing ledger rows.
|
|
65
66
|
|
|
67
|
+
**Exploratory ideation run ledger (both paths).** When the write was initiated by
|
|
68
|
+
`lisa:project-ideation`, carries a project-ideation marker, or includes
|
|
69
|
+
`ideation_ledger_payload`, persist a managed `## Exploratory Ideation Run Ledger` section in the PRD
|
|
70
|
+
body. Prefer the managed section over a comment so the PRD itself remains the operator's source of
|
|
71
|
+
truth; use a managed comment only if the body cannot be updated. Populate the fields from
|
|
72
|
+
`ideation_ledger_payload` when present, falling back to `marker`, `initial_role`, repo config, and
|
|
73
|
+
runtime metadata only for missing fields. Keep one managed section by replacing the content between
|
|
74
|
+
stable markers:
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
## Exploratory Ideation Run Ledger
|
|
78
|
+
<!-- lisa:exploratory-ideation-run-ledger:start -->
|
|
79
|
+
- timestamp: <ISO-8601 run timestamp>
|
|
80
|
+
- automation_id: <Codex/Claude automation id or unavailable>
|
|
81
|
+
- repo: <org>/<repo>
|
|
82
|
+
- prd_ready: true|false
|
|
83
|
+
- persona_evidence_refs: <comma-separated source refs or unavailable>
|
|
84
|
+
- selected_idea: <selected idea title/key>
|
|
85
|
+
- dedupe_marker: <MARKER>
|
|
86
|
+
- prd_url: <created or reused PRD URL>
|
|
87
|
+
- outcome: created|reused
|
|
88
|
+
- lifecycle_role_after_write: draft|ready|in_review|blocked|ticketed|shipped|verified
|
|
89
|
+
- rejected_overlap_candidates: <issue refs/titles considered and rejected, or none>
|
|
90
|
+
- expected_empirical_verification_artifact: <artifact ref or unavailable>
|
|
91
|
+
<!-- lisa:exploratory-ideation-run-ledger:end -->
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
On CREATE, write a ledger entry with `outcome: created`, the selected marker, the created PRD URL,
|
|
95
|
+
and the lifecycle role applied by this write. On UPDATE/reuse, write `outcome: reused`, preserve the
|
|
96
|
+
same dedupe marker, record the reused PRD URL, and report the lifecycle role that remains after
|
|
97
|
+
reconciliation. If the live PRD has progressed past ready, do not downgrade it while recording the
|
|
98
|
+
reuse ledger; the `lifecycle_role_after_write` value must be the existing progressed role. Preserve
|
|
99
|
+
exactly one PRD lifecycle label in the same pass as the ledger write.
|
|
100
|
+
|
|
66
101
|
**CREATE** (no existing issue):
|
|
67
102
|
|
|
68
103
|
1. Write the marker-normalized PRD body to a temp file.
|
|
@@ -70,7 +105,11 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
|
|
|
70
105
|
gh issue create --repo "$ORG/$REPO" --title "$TITLE" --body-file /tmp/prd-body.md --label "$ROLE_LABEL"
|
|
71
106
|
```
|
|
72
107
|
3. Capture the returned issue number/URL.
|
|
73
|
-
4.
|
|
108
|
+
4. Rewrite the PRD body with the managed `## Exploratory Ideation Run Ledger` section populated for
|
|
109
|
+
`outcome: created` when the caller supplied project-ideation ledger inputs, then
|
|
110
|
+
`gh issue edit <n> --body-file /tmp/prd-body.md`. This second write is allowed because the URL is
|
|
111
|
+
not known until after creation.
|
|
112
|
+
5. If `github.projects.v2` is enabled, resolve the created PRD issue node id and invoke
|
|
74
113
|
`lisa:github-project-v2` with `operation: ensure-item` and `content_node_id: <issue-node-id>`.
|
|
75
114
|
- `outcome: disabled` → continue normally.
|
|
76
115
|
- `outcome: added` or `reused` → continue normally; membership is now present.
|
|
@@ -80,7 +119,9 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
|
|
|
80
119
|
**UPDATE** (existing issue or `source_ref`):
|
|
81
120
|
|
|
82
121
|
1. `gh issue edit <n> --repo "$ORG/$REPO" --body-file /tmp/prd-body.md` with the **marker-normalized**
|
|
83
|
-
body (regenerate in place; never drop the marker
|
|
122
|
+
body (regenerate in place; never drop the marker, the managed `## Exploratory Ideation Run Ledger`
|
|
123
|
+
section, or an existing managed `## Lisa Usage` section). When the caller supplied
|
|
124
|
+
project-ideation ledger inputs, replace the managed ledger content with an `outcome: reused` entry.
|
|
84
125
|
2. Reconcile the lifecycle label to **exactly one**: add `$ROLE_LABEL`, remove every other label in
|
|
85
126
|
the resolved `${ALL_PRD_LABELS[@]}` set (the config-resolved names — not a hard-coded list) via
|
|
86
127
|
`gh issue edit <n> --add-label / --remove-label`. Never leave a PRD carrying two lifecycle labels.
|
|
@@ -27,6 +27,17 @@ dedupe_key: "<stable-key>" # e.g. project-ideation's idea key
|
|
|
27
27
|
marker: "[lisa-project-ideation] idea=<stable-key>" # embedded in the PRD body for dedupe
|
|
28
28
|
origin: { tool: project-ideation | research | manual }
|
|
29
29
|
source_ref: "<optional existing PRD ref to force an update>"
|
|
30
|
+
ideation_ledger_payload: # optional; forwarded unchanged to the vendor writer
|
|
31
|
+
selected_marker: "<same value as marker>"
|
|
32
|
+
automation_id: "<Codex/Claude automation id or unavailable>"
|
|
33
|
+
automation_memory_path: "<path or unavailable>"
|
|
34
|
+
repo: "<org>/<repo or detected repo identity>"
|
|
35
|
+
prd_ready: true|false
|
|
36
|
+
persona_names: ["<derived persona name>"]
|
|
37
|
+
persona_evidence_refs: ["<file/doc/table/release ref>"]
|
|
38
|
+
selected_idea: "<selected idea title/key>"
|
|
39
|
+
rejected_overlap_candidates: ["<issue refs/titles considered and rejected>"]
|
|
40
|
+
expected_empirical_verification_artifact: "<artifact ref or unavailable>"
|
|
30
41
|
```
|
|
31
42
|
|
|
32
43
|
`initial_role` semantics are uniform across vendors (the role STRINGS resolve per vendor from
|
|
@@ -72,6 +83,10 @@ prior PRD-source-write behavior to preserve, so omitted means `draft`.
|
|
|
72
83
|
the applied role (`draft`/`ready`), the dedupe marker, and whether it was created or reused.
|
|
73
84
|
Downstream callers (research, project-ideation) parse this — do not paraphrase.
|
|
74
85
|
|
|
86
|
+
When `ideation_ledger_payload` is present, this shim still does not render or interpret it. Forward
|
|
87
|
+
the object verbatim to the selected vendor writer so source-specific rendering remains behind the
|
|
88
|
+
configured writer and the dispatch layer never bypasses source selection.
|
|
89
|
+
|
|
75
90
|
## Rules
|
|
76
91
|
|
|
77
92
|
- Never bypass dispatch — a vendor-neutral caller calling a `*-write-prd` skill directly defeats the
|
|
@@ -80,5 +95,7 @@ prior PRD-source-write behavior to preserve, so omitted means `draft`.
|
|
|
80
95
|
and fallback behavior belongs in the vendor writers and follows the `usage-accounting` contract.
|
|
81
96
|
- Never accept a source outside `{notion, confluence, github, linear}`. `jira` and `file` fail loudly.
|
|
82
97
|
- Never mutate the spec between layers. The vendor writers define their own create/dedupe contract.
|
|
98
|
+
- Never drop, rename, or vendor-render `ideation_ledger_payload`; it is a pass-through payload for
|
|
99
|
+
the configured writer.
|
|
83
100
|
- Never invent a PRD lifecycle role string — resolve every role from `config-resolution` per vendor.
|
|
84
101
|
- Idempotency is the vendor writer's job (marker search before create); this shim only routes.
|
|
@@ -155,7 +155,13 @@ For each idea in the creation set, invoke `/lisa:research` with:
|
|
|
155
155
|
grounding and the empirical verification plan),
|
|
156
156
|
- `prd_ready` (this run's flag — `lisa:research` maps it to draft vs prd-ready),
|
|
157
157
|
- a stable **dedupe marker** (see below) so a re-run references the existing PRD instead of creating
|
|
158
|
-
a duplicate
|
|
158
|
+
a duplicate,
|
|
159
|
+
- a structured `ideation_ledger_payload` handoff containing the selected marker, automation id and
|
|
160
|
+
memory path when available, persona names, persona evidence references, rejected overlap
|
|
161
|
+
candidates, repo identity, `prd_ready`, selected idea title/key, and the expected empirical
|
|
162
|
+
verification artifact. This payload is the only ideation-run metadata channel between
|
|
163
|
+
`project-ideation`, `research`, `prd-source-write`, and the vendor writer; keep GitHub-specific
|
|
164
|
+
rendering out of this skill.
|
|
159
165
|
|
|
160
166
|
`lisa:research` synthesizes the PRD and creates it in the configured source via
|
|
161
167
|
`lisa:prd-source-write`. `project-ideation` never writes to the source directly — it delegates, so
|
|
@@ -16,6 +16,12 @@ Produce a PRD for the problem in `$ARGUMENTS`, then create it in the configured
|
|
|
16
16
|
- `dedupe_key` / `marker` (optional) — a stable dedupe marker (e.g. supplied by
|
|
17
17
|
`lisa:project-ideation`) embedded in the created PRD so re-runs reference the existing PRD rather
|
|
18
18
|
than creating a duplicate.
|
|
19
|
+
- `ideation_ledger_payload` (optional, required when invoked by `lisa:project-ideation`) — a
|
|
20
|
+
structured metadata object to forward unchanged to `lisa:prd-source-write`. It carries the
|
|
21
|
+
selected marker, automation id/path when available, persona names, persona evidence references,
|
|
22
|
+
rejected overlap candidates, repo identity, `prd_ready`, selected idea title/key, and expected
|
|
23
|
+
empirical verification artifact. `research` may use these fields to inform the PRD body, but must
|
|
24
|
+
not discard, rename, or vendor-render them.
|
|
19
25
|
|
|
20
26
|
## Orchestration: agent team
|
|
21
27
|
|
|
@@ -55,5 +61,8 @@ source — there is no loose document artifact.** Before handing the synthesized
|
|
|
55
61
|
`lisa:usage-accounting` so the PRD body carries the canonical `## Lisa Usage` ledger from creation
|
|
56
62
|
time onward. If the runtime does not expose trustworthy usage, the direct entry must still be
|
|
57
63
|
written with `source: unavailable` and nullable token/cost fields rather than silently omitting the
|
|
58
|
-
Research row.
|
|
59
|
-
|
|
64
|
+
Research row. If the call includes `ideation_ledger_payload`, pass that object through in the
|
|
65
|
+
`lisa:prd-source-write` spec unchanged alongside `marker`, `dedupe_key`, and `initial_role`; this is
|
|
66
|
+
the vendor-neutral handoff that lets the configured writer render an auditable run ledger without
|
|
67
|
+
`research` bypassing source selection. A `source` must be configured; if it is not, stop and report
|
|
68
|
+
it rather than emitting a document. The Plan flow consumes the created PRD next.
|
|
@@ -317,4 +317,8 @@ if (asJson) {
|
|
|
317
317
|
);
|
|
318
318
|
}
|
|
319
319
|
|
|
320
|
-
process.exit(
|
|
320
|
+
// Set exitCode instead of calling process.exit() so a large `--json` payload
|
|
321
|
+
// written to a pipe (e.g. captured via spawnSync by verify-migration) is fully
|
|
322
|
+
// flushed before the process exits. process.exit() can truncate async stdout
|
|
323
|
+
// writes at the OS pipe buffer (~64KB), corrupting the JSON for the reader.
|
|
324
|
+
process.exitCode = blocking === 0 ? 0 : 1;
|