@codyswann/lisa 2.253.0 → 2.255.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.
Files changed (100) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +30 -0
  5. package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +40 -0
  6. package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +46 -10
  7. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +36 -0
  8. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +36 -0
  9. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +34 -0
  10. package/plugins/lisa/rules/eager/automation-runbook-contract.md +4 -1
  11. package/plugins/lisa/rules/reference/automation-runbook-contract.md +16 -7
  12. package/plugins/lisa/scripts/automation-run-record.mjs +372 -0
  13. package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +30 -0
  14. package/plugins/lisa/skills/lisa-intake/SKILL.md +40 -0
  15. package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +46 -10
  16. package/plugins/lisa/skills/lisa-monitor/SKILL.md +36 -0
  17. package/plugins/lisa/skills/lisa-project-ideation/SKILL.md +36 -0
  18. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +34 -0
  19. package/plugins/lisa-agy/plugin.json +1 -1
  20. package/plugins/lisa-agy/scripts/automation-run-record.mjs +372 -0
  21. package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +30 -0
  22. package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +40 -0
  23. package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +46 -10
  24. package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +36 -0
  25. package/plugins/lisa-agy/skills/lisa-project-ideation/SKILL.md +36 -0
  26. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +34 -0
  27. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  30. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-copilot/rules/eager/automation-runbook-contract.md +4 -1
  34. package/plugins/lisa-copilot/rules/reference/automation-runbook-contract.md +16 -7
  35. package/plugins/lisa-copilot/scripts/automation-run-record.mjs +372 -0
  36. package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +30 -0
  37. package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +40 -0
  38. package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +46 -10
  39. package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +36 -0
  40. package/plugins/lisa-copilot/skills/lisa-project-ideation/SKILL.md +36 -0
  41. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +34 -0
  42. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-cursor/rules/automation-runbook-contract-reference.mdc +16 -7
  44. package/plugins/lisa-cursor/rules/automation-runbook-contract.mdc +4 -1
  45. package/plugins/lisa-cursor/scripts/automation-run-record.mjs +372 -0
  46. package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +30 -0
  47. package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +40 -0
  48. package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +46 -10
  49. package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +36 -0
  50. package/plugins/lisa-cursor/skills/lisa-project-ideation/SKILL.md +36 -0
  51. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +34 -0
  52. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-expo-agy/plugin.json +1 -1
  55. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  60. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  65. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  70. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  75. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  79. package/plugins/lisa-rails-agy/plugin.json +1 -1
  80. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  84. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  85. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  89. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  90. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  92. package/plugins/src/base/rules/eager/automation-runbook-contract.md +4 -1
  93. package/plugins/src/base/rules/reference/automation-runbook-contract.md +16 -7
  94. package/plugins/src/base/scripts/automation-run-record.mjs +372 -0
  95. package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +30 -0
  96. package/plugins/src/base/skills/lisa-intake/SKILL.md +40 -0
  97. package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +46 -10
  98. package/plugins/src/base/skills/lisa-monitor/SKILL.md +36 -0
  99. package/plugins/src/base/skills/lisa-project-ideation/SKILL.md +36 -0
  100. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +34 -0
@@ -139,3 +139,39 @@ After report, file what was found — **only when run standalone**, never under
139
139
  ## Output
140
140
 
141
141
  A single report: the health/anomaly summary (failures, warnings, no-issue confirmations) + the observability audit table (each in-scope dimension as `OK` / `WARN` / `MISSING` / `PRESENT (unverified)`) + the filing summary (tickets filed with refs + fingerprints, duplicates skipped, dropped count if the cap truncated; or would-file tickets under `--dry-run`). For post-deploy verification (when called from `lisa-verify`), the report-only summary becomes evidence on the originating work item.
142
+
143
+ ## Run outcome
144
+
145
+ As the registered `monitor` automation loop, the **standalone** cron run conforms to the
146
+ `automation-runbook-contract` rule: it ends in **exactly one** of the six run outcomes and records it,
147
+ so a quiet monitoring run and a broken one never look identical.
148
+
149
+ | This cycle's exit path | Run outcome |
150
+ |---|---|
151
+ | Anomalies or in-scope gaps filed — one or more `Bug` / `Task` / `Improvement` leaves created or referenced | `candidate-proposed` |
152
+ | Clean sweep — health/audit ran end to end, nothing over the bar and no in-scope gaps | `nothing-needed` |
153
+ | Provider/threshold resolution failure — threshold collection fails (a present-but-uninspectable config, an invalid configured threshold) or a signal provider is unreachable so the sweep could not run | `recovery-required` |
154
+ | A degradation that still let the sweep run (an optional `ops-specialist` overlay absent, Kane unavailable) | the outcome it actually reached above, with the summary **leading with the degradation** — degradation never mints a seventh token |
155
+
156
+ Only the **standalone** run records. The nested report-only modes do their own job and do not file or
157
+ record: `--report-only` (including the `lisa-verify` post-deploy call, whose summary is evidence on
158
+ the originating item) and `--dry-run` (a preview that creates nothing) are not registered-loop
159
+ invocations.
160
+
161
+ Record **exactly one** outcome per standalone invocation through the run-record CLI, naming this
162
+ loop's runbook (the `--summary` is the operator-readable one-liner in the contract's exemplar voice —
163
+ plain, specific, actionable, e.g. `Health green; audit clean — nothing to propose.` for
164
+ `nothing-needed`):
165
+
166
+ ```bash
167
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
168
+ --loop-id monitor --outcome candidate-proposed \
169
+ --summary "Filed #1810 for the p99 latency spike; awaiting your flip to ready." \
170
+ --runbook .lisa/automations/monitor.runbook.md [--ref <ticket-url>]...
171
+ ```
172
+
173
+ If `${CLAUDE_PLUGIN_ROOT}` is unset, resolve the plugin scripts directory directly — the built copy
174
+ `plugins/lisa/scripts/automation-run-record.mjs` or the source
175
+ `plugins/src/base/scripts/automation-run-record.mjs`. If recording still fails, **degrade, never
176
+ abort** (per `automation-runbook-contract`): note the recording failure in the run output and finish
177
+ the cycle — a recording failure is a degradation to report, never a reason to block the loop.
@@ -275,6 +275,42 @@ Emit two distinct in-session sections (do not write a report file):
275
275
  Always include the **Personas**, **What Already Exists**, **Discovery Spikes**, and **Rejected**
276
276
  sections (even if empty) so the user sees what was considered and filtered out.
277
277
 
278
+ ## Run outcome
279
+
280
+ As the registered `exploratory-prds` automation loop, this run conforms to the
281
+ `automation-runbook-contract` rule: it ends in **exactly one** of the six run outcomes and records it,
282
+ so a quiet ideation run and a broken one are never confused.
283
+
284
+ | This run's exit path | Run outcome |
285
+ |---|---|
286
+ | PRD(s) created or reused this run (Step 6/7 **PRDs Created**) | `candidate-proposed` |
287
+ | Nothing to ideate — no Practical Idea cleared the bar; nothing created | `nothing-needed` |
288
+ | The Step 5.5 **PRD-queue-pressure gate** blocked auto-ready creation — a human must drain the queue before another auto-ready PRD is added | `approval-requested` |
289
+ | The loop itself could not run — the PRD source reader failed or the queue is misconfigured (a source-reader failure snapshot, not queue pressure) | `recovery-required` |
290
+ | A degradation that still let ideation run (optional Codex automation memory unavailable, an inspiration source unreachable) | the outcome it actually reached above, with the summary **leading with the degradation** — degradation never mints a seventh token |
291
+
292
+ The pressure gate is `approval-requested`, **not** `recovery-required`: the loop ran fine and
293
+ correctly declined to add queue pressure — it is asking a human to drain the queue, not reporting a
294
+ broken machine. `recovery-required` is reserved for the loop failing to run at all.
295
+
296
+ Record **exactly one** outcome per invocation through the run-record CLI, naming this loop's runbook
297
+ (the `--summary` is the operator-readable one-liner in the contract's exemplar voice — plain,
298
+ specific, actionable, e.g. `Reviewed evidence; no practical idea cleared the bar — nothing to
299
+ propose.` for `nothing-needed`):
300
+
301
+ ```bash
302
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
303
+ --loop-id exploratory-prds --outcome candidate-proposed \
304
+ --summary "Created PRD #1810 for offline export; awaiting your flip to ready." \
305
+ --runbook .lisa/automations/exploratory-prds.runbook.md [--ref <prd-url>]...
306
+ ```
307
+
308
+ If `${CLAUDE_PLUGIN_ROOT}` is unset, resolve the plugin scripts directory directly — the built copy
309
+ `plugins/lisa/scripts/automation-run-record.mjs` or the source
310
+ `plugins/src/base/scripts/automation-run-record.mjs`. If recording still fails, **degrade, never
311
+ abort** (per `automation-runbook-contract`): note the recording failure in the run output and finish
312
+ the run — a recording failure is a degradation to report, never a reason to block the loop.
313
+
278
314
  ## Out of scope (hard rules)
279
315
 
280
316
  - **No fabricated personas.** No evidence citation → no persona; generic roles banned without
@@ -975,6 +975,40 @@ Report outcomes in these buckets:
975
975
  State every item repaired this cycle and the action taken. If the output would be long, group by
976
976
  bucket and show compact refs plus counts.
977
977
 
978
+ ## Run outcome
979
+
980
+ As the registered `intake-repair` automation loop, each cycle conforms to the
981
+ `automation-runbook-contract` rule: it ends in **exactly one** of the six run outcomes and records it,
982
+ so a cycle that found nothing stuck and a cycle where the repair machinery itself broke never look
983
+ alike. A run outcome describes this *cycle*; the Summary-report buckets above describe *what happened
984
+ to each item* — the two never merge in the one-line summary.
985
+
986
+ | This cycle's exit path | Run outcome |
987
+ |---|---|
988
+ | Nothing actionable — the idle case (walk step 5): examined N, all active or in backoff | `nothing-needed` |
989
+ | Repairs applied **and confirmed** this cycle — `resumed` / `resynced` / `recovered` / `unblocked` / `closed_out` / `rolled_up` / `relinked` / `normalized_ready` | `change-proved` |
990
+ | Repair produced new work for a human to pick up — e.g. an unmergeable PR or failed deploy filed as a **build-ready fix ticket** and left `blocked` | `candidate-proposed` |
991
+ | A repair reached an autonomy boundary needing a human (a protected-deploy approval before it can proceed) | `approval-requested` |
992
+ | The loop itself could not run — the queue is unreadable or tracker credentials are revoked | `recovery-required` |
993
+
994
+ Record **exactly one** outcome per invocation through the run-record CLI, naming this loop's runbook
995
+ (the `--summary` is the operator-readable one-liner in the contract's exemplar voice — plain,
996
+ specific, actionable, e.g. `Examined 14 items; all active or in backoff — nothing to repair.` for
997
+ `nothing-needed`):
998
+
999
+ ```bash
1000
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
1001
+ --loop-id intake-repair --outcome change-proved \
1002
+ --summary "Recovered 3 stalled builds and closed out 2 rollups; all confirmed." \
1003
+ --runbook .lisa/automations/intake-repair.runbook.md [--ref <item-url>]...
1004
+ ```
1005
+
1006
+ If `${CLAUDE_PLUGIN_ROOT}` is unset, resolve the plugin scripts directory directly — the built copy
1007
+ `plugins/lisa/scripts/automation-run-record.mjs` or the source
1008
+ `plugins/src/base/scripts/automation-run-record.mjs`. If recording still fails, **degrade, never
1009
+ abort** (per `automation-runbook-contract`): note the recording failure in the run output and finish
1010
+ the cycle — a recording failure is a degradation to report, never a reason to block the loop.
1011
+
978
1012
  ## Schedule examples
979
1013
 
980
1014
  ```text
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-expo",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-harper-fabric",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-harper-fabric",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-nestjs",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-nestjs",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-openclaw",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-openclaw",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-phaser",
3
- "version": "2.253.0",
3
+ "version": "2.255.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.253.0",
3
+ "version": "2.255.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.253.0",
3
+ "version": "2.255.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.253.0",
3
+ "version": "2.255.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.253.0",
3
+ "version": "2.255.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-rails",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-typescript",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-typescript",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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-wiki",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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.253.0",
3
+ "version": "2.255.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"
@@ -50,7 +50,10 @@ loop itself is broken, not that a work item was blocked.
50
50
 
51
51
  Every run — including a trivial early termination — ends by naming exactly one run outcome plus a
52
52
  one-line operator summary of what happened, recorded where the status surface can read it —
53
- there is no silent exit. Silence and health must never look identical to an operator.
53
+ there is no silent exit. The shared local substrate is
54
+ `plugins/src/base/scripts/automation-run-record.mjs`, which writes bounded JSONL records under
55
+ `.lisa/automations/runs/<loop-id>.jsonl`. Silence and health must never look identical to an
56
+ operator.
54
57
 
55
58
  ## Never block, always degrade
56
59
 
@@ -121,8 +121,17 @@ there is no silent exit for an operator to misread as health. A run that ends wi
121
121
  recorded outcome is indistinguishable from a crashed scheduler, which is exactly the ambiguity this
122
122
  contract removes. This generalizes `lisa-improve-harness`'s result-record discipline — every
123
123
  terminal step posts its result record before stopping, so there is no silent exit — from one flow to
124
- every registered loop. (The run-record substrate that stores outcomes and summaries is named here
125
- only; it ships with that ticket (#1797), do not assume its file is present in this branch.)
124
+ every registered loop.
125
+
126
+ The local storage substrate is `plugins/src/base/scripts/automation-run-record.mjs`. It writes one
127
+ bounded JSONL file per loop at `.lisa/automations/runs/<loop-id>.jsonl`, with one object per line:
128
+ `{ ts, loop_id, outcome, summary, runbook, refs[], run_id }`. The helper rejects any outcome outside
129
+ the closed six-value vocabulary, requires a non-empty operator-readable summary, suppresses duplicate
130
+ re-appends for the same `run_id`, skips corrupt/truncated lines on read, and trims to the newest
131
+ configured records on write. The default bound is 50 records per loop, overridable via
132
+ `.lisa.config.json` / `.lisa.config.local.json` `automations.runHistory.maxEntries`. These records
133
+ are local scheduler observations, not project knowledge, so `.lisa/automations/runs/` is ignored;
134
+ the runbooks under `.lisa/automations/*.runbook.md` remain checked-in knowledge.
126
135
 
127
136
  ## A run outcome is not a work-item lifecycle terminal state
128
137
 
@@ -209,8 +218,8 @@ packet above. A degraded run never blocks other work and never leaves the run un
209
218
 
210
219
  ## Citing adjacent work
211
220
 
212
- Cite these by name; each ships with its own ticket, do not assume its file is present in this
213
- branch: the runbook scaffolding that instantiates this template (#1796), the run-record substrate
214
- that stores outcomes and summaries (#1797), and the evidence packet defined by the evidence PRD
215
- (#1738) — named here, with no evidence format defined by this contract. Rejection memory
216
- extends `rejection-detection`; this contract neither restates nor overrides it.
221
+ Cite these by name. The run-record substrate ships with that ticket (#1797), do not assume its file
222
+ is present in older branches. The evidence packet ships with that ticket, do not assume its file is present in this branch. Other adjacent artifacts keep their own lifecycle: the runbook scaffolding
223
+ that instantiates this template (#1796), and the evidence packet defined by the evidence PRD (#1738)
224
+ — named here, with no evidence format defined by this contract. Rejection memory extends
225
+ `rejection-detection`; this contract neither restates nor overrides it.