@codyswann/lisa 2.109.0 → 2.110.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/package.json CHANGED
@@ -82,7 +82,7 @@
82
82
  "lodash": ">=4.18.1"
83
83
  },
84
84
  "name": "@codyswann/lisa",
85
- "version": "2.109.0",
85
+ "version": "2.110.0",
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": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -63,6 +63,37 @@ the single instance. If the live issue body already contains the canonical manag
63
63
  section, preserve it verbatim unless the caller intentionally supplied an updated canonical section;
64
64
  use the shared `usage-accounting` serializer/merge path rather than hand-editing ledger rows.
65
65
 
66
+ **Exploratory ideation run ledger (both paths).** When the write was initiated by
67
+ `lisa:project-ideation` or carries a project-ideation marker, persist a managed `## Exploratory
68
+ Ideation Run Ledger` section in the PRD body. Prefer the managed section over a comment so the PRD
69
+ itself remains the operator's source of truth; use a managed comment only if the body cannot be
70
+ updated. Keep one managed section by replacing the content between stable markers:
71
+
72
+ ```markdown
73
+ ## Exploratory Ideation Run Ledger
74
+ <!-- lisa:exploratory-ideation-run-ledger:start -->
75
+ - timestamp: <ISO-8601 run timestamp>
76
+ - automation_id: <Codex/Claude automation id or unavailable>
77
+ - repo: <org>/<repo>
78
+ - prd_ready: true|false
79
+ - persona_evidence_refs: <comma-separated source refs or unavailable>
80
+ - selected_idea: <selected idea title/key>
81
+ - dedupe_marker: <MARKER>
82
+ - prd_url: <created or reused PRD URL>
83
+ - outcome: created|reused
84
+ - lifecycle_role_after_write: draft|ready|in_review|blocked|ticketed|shipped|verified
85
+ - rejected_overlap_candidates: <issue refs/titles considered and rejected, or none>
86
+ - expected_empirical_verification_artifact: <artifact ref or unavailable>
87
+ <!-- lisa:exploratory-ideation-run-ledger:end -->
88
+ ```
89
+
90
+ On CREATE, write a ledger entry with `outcome: created`, the selected marker, the created PRD URL,
91
+ and the lifecycle role applied by this write. On UPDATE/reuse, write `outcome: reused`, preserve the
92
+ same dedupe marker, record the reused PRD URL, and report the lifecycle role that remains after
93
+ reconciliation. If the live PRD has progressed past ready, do not downgrade it while recording the
94
+ reuse ledger; the `lifecycle_role_after_write` value must be the existing progressed role. Preserve
95
+ exactly one PRD lifecycle label in the same pass as the ledger write.
96
+
66
97
  **CREATE** (no existing issue):
67
98
 
68
99
  1. Write the marker-normalized PRD body to a temp file.
@@ -70,7 +101,11 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
70
101
  gh issue create --repo "$ORG/$REPO" --title "$TITLE" --body-file /tmp/prd-body.md --label "$ROLE_LABEL"
71
102
  ```
72
103
  3. Capture the returned issue number/URL.
73
- 4. If `github.projects.v2` is enabled, resolve the created PRD issue node id and invoke
104
+ 4. Rewrite the PRD body with the managed `## Exploratory Ideation Run Ledger` section populated for
105
+ `outcome: created` when the caller supplied project-ideation ledger inputs, then
106
+ `gh issue edit <n> --body-file /tmp/prd-body.md`. This second write is allowed because the URL is
107
+ not known until after creation.
108
+ 5. If `github.projects.v2` is enabled, resolve the created PRD issue node id and invoke
74
109
  `lisa:github-project-v2` with `operation: ensure-item` and `content_node_id: <issue-node-id>`.
75
110
  - `outcome: disabled` → continue normally.
76
111
  - `outcome: added` or `reused` → continue normally; membership is now present.
@@ -80,7 +115,9 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
80
115
  **UPDATE** (existing issue or `source_ref`):
81
116
 
82
117
  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 or an existing managed `## Lisa Usage` section).
118
+ body (regenerate in place; never drop the marker, the managed `## Exploratory Ideation Run Ledger`
119
+ section, or an existing managed `## Lisa Usage` section). When the caller supplied
120
+ project-ideation ledger inputs, replace the managed ledger content with an `outcome: reused` entry.
84
121
  2. Reconcile the lifecycle label to **exactly one**: add `$ROLE_LABEL`, remove every other label in
85
122
  the resolved `${ALL_PRD_LABELS[@]}` set (the config-resolved names — not a hard-coded list) via
86
123
  `gh issue edit <n> --add-label / --remove-label`. Never leave a PRD carrying two lifecycle labels.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
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.109.0",
3
+ "version": "2.110.0",
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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.109.0",
3
+ "version": "2.110.0",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base 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(blocking === 0 ? 0 : 1);
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;
@@ -63,6 +63,37 @@ the single instance. If the live issue body already contains the canonical manag
63
63
  section, preserve it verbatim unless the caller intentionally supplied an updated canonical section;
64
64
  use the shared `usage-accounting` serializer/merge path rather than hand-editing ledger rows.
65
65
 
66
+ **Exploratory ideation run ledger (both paths).** When the write was initiated by
67
+ `lisa:project-ideation` or carries a project-ideation marker, persist a managed `## Exploratory
68
+ Ideation Run Ledger` section in the PRD body. Prefer the managed section over a comment so the PRD
69
+ itself remains the operator's source of truth; use a managed comment only if the body cannot be
70
+ updated. Keep one managed section by replacing the content between stable markers:
71
+
72
+ ```markdown
73
+ ## Exploratory Ideation Run Ledger
74
+ <!-- lisa:exploratory-ideation-run-ledger:start -->
75
+ - timestamp: <ISO-8601 run timestamp>
76
+ - automation_id: <Codex/Claude automation id or unavailable>
77
+ - repo: <org>/<repo>
78
+ - prd_ready: true|false
79
+ - persona_evidence_refs: <comma-separated source refs or unavailable>
80
+ - selected_idea: <selected idea title/key>
81
+ - dedupe_marker: <MARKER>
82
+ - prd_url: <created or reused PRD URL>
83
+ - outcome: created|reused
84
+ - lifecycle_role_after_write: draft|ready|in_review|blocked|ticketed|shipped|verified
85
+ - rejected_overlap_candidates: <issue refs/titles considered and rejected, or none>
86
+ - expected_empirical_verification_artifact: <artifact ref or unavailable>
87
+ <!-- lisa:exploratory-ideation-run-ledger:end -->
88
+ ```
89
+
90
+ On CREATE, write a ledger entry with `outcome: created`, the selected marker, the created PRD URL,
91
+ and the lifecycle role applied by this write. On UPDATE/reuse, write `outcome: reused`, preserve the
92
+ same dedupe marker, record the reused PRD URL, and report the lifecycle role that remains after
93
+ reconciliation. If the live PRD has progressed past ready, do not downgrade it while recording the
94
+ reuse ledger; the `lifecycle_role_after_write` value must be the existing progressed role. Preserve
95
+ exactly one PRD lifecycle label in the same pass as the ledger write.
96
+
66
97
  **CREATE** (no existing issue):
67
98
 
68
99
  1. Write the marker-normalized PRD body to a temp file.
@@ -70,7 +101,11 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
70
101
  gh issue create --repo "$ORG/$REPO" --title "$TITLE" --body-file /tmp/prd-body.md --label "$ROLE_LABEL"
71
102
  ```
72
103
  3. Capture the returned issue number/URL.
73
- 4. If `github.projects.v2` is enabled, resolve the created PRD issue node id and invoke
104
+ 4. Rewrite the PRD body with the managed `## Exploratory Ideation Run Ledger` section populated for
105
+ `outcome: created` when the caller supplied project-ideation ledger inputs, then
106
+ `gh issue edit <n> --body-file /tmp/prd-body.md`. This second write is allowed because the URL is
107
+ not known until after creation.
108
+ 5. If `github.projects.v2` is enabled, resolve the created PRD issue node id and invoke
74
109
  `lisa:github-project-v2` with `operation: ensure-item` and `content_node_id: <issue-node-id>`.
75
110
  - `outcome: disabled` → continue normally.
76
111
  - `outcome: added` or `reused` → continue normally; membership is now present.
@@ -80,7 +115,9 @@ use the shared `usage-accounting` serializer/merge path rather than hand-editing
80
115
  **UPDATE** (existing issue or `source_ref`):
81
116
 
82
117
  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 or an existing managed `## Lisa Usage` section).
118
+ body (regenerate in place; never drop the marker, the managed `## Exploratory Ideation Run Ledger`
119
+ section, or an existing managed `## Lisa Usage` section). When the caller supplied
120
+ project-ideation ledger inputs, replace the managed ledger content with an `outcome: reused` entry.
84
121
  2. Reconcile the lifecycle label to **exactly one**: add `$ROLE_LABEL`, remove every other label in
85
122
  the resolved `${ALL_PRD_LABELS[@]}` set (the config-resolved names — not a hard-coded list) via
86
123
  `gh issue edit <n> --add-label / --remove-label`. Never leave a PRD carrying two lifecycle labels.
@@ -317,4 +317,8 @@ if (asJson) {
317
317
  );
318
318
  }
319
319
 
320
- process.exit(blocking === 0 ? 0 : 1);
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;