@codyswann/lisa 2.257.2 → 2.258.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 (109) 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 +41 -0
  5. package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +8 -0
  6. package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +44 -7
  7. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +41 -0
  8. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +45 -2
  9. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +8 -0
  10. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +20 -7
  11. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +34 -3
  12. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/agents/openai.yaml +2 -2
  13. package/plugins/lisa/rules/eager/automation-runbook-contract.md +2 -1
  14. package/plugins/lisa/rules/reference/automation-runbook-contract.md +9 -2
  15. package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +41 -0
  16. package/plugins/lisa/skills/lisa-intake/SKILL.md +8 -0
  17. package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +44 -7
  18. package/plugins/lisa/skills/lisa-monitor/SKILL.md +41 -0
  19. package/plugins/lisa/skills/lisa-project-ideation/SKILL.md +45 -2
  20. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +8 -0
  21. package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +20 -7
  22. package/plugins/lisa/skills/lisa-tear-down-automations/SKILL.md +34 -3
  23. package/plugins/lisa/skills/lisa-tear-down-automations/agents/openai.yaml +2 -2
  24. package/plugins/lisa-agy/plugin.json +1 -1
  25. package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +41 -0
  26. package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +8 -0
  27. package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +44 -7
  28. package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +41 -0
  29. package/plugins/lisa-agy/skills/lisa-project-ideation/SKILL.md +45 -2
  30. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +8 -0
  31. package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +20 -7
  32. package/plugins/lisa-agy/skills/lisa-tear-down-automations/SKILL.md +34 -3
  33. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  36. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-copilot/rules/eager/automation-runbook-contract.md +2 -1
  40. package/plugins/lisa-copilot/rules/reference/automation-runbook-contract.md +9 -2
  41. package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +41 -0
  42. package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +8 -0
  43. package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +44 -7
  44. package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +41 -0
  45. package/plugins/lisa-copilot/skills/lisa-project-ideation/SKILL.md +45 -2
  46. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +8 -0
  47. package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +20 -7
  48. package/plugins/lisa-copilot/skills/lisa-tear-down-automations/SKILL.md +34 -3
  49. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-cursor/rules/automation-runbook-contract-reference.mdc +9 -2
  51. package/plugins/lisa-cursor/rules/automation-runbook-contract.mdc +2 -1
  52. package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +41 -0
  53. package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +8 -0
  54. package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +44 -7
  55. package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +41 -0
  56. package/plugins/lisa-cursor/skills/lisa-project-ideation/SKILL.md +45 -2
  57. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +8 -0
  58. package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +20 -7
  59. package/plugins/lisa-cursor/skills/lisa-tear-down-automations/SKILL.md +34 -3
  60. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-expo-agy/plugin.json +1 -1
  63. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  68. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  73. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  78. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  82. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  83. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-agy/plugin.json +1 -1
  88. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  93. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  98. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/src/base/rules/eager/automation-runbook-contract.md +2 -1
  101. package/plugins/src/base/rules/reference/automation-runbook-contract.md +9 -2
  102. package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +41 -0
  103. package/plugins/src/base/skills/lisa-intake/SKILL.md +8 -0
  104. package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +44 -7
  105. package/plugins/src/base/skills/lisa-monitor/SKILL.md +41 -0
  106. package/plugins/src/base/skills/lisa-project-ideation/SKILL.md +45 -2
  107. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +8 -0
  108. package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +20 -7
  109. package/plugins/src/base/skills/lisa-tear-down-automations/SKILL.md +34 -3
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lisa-tear-down-automations
3
- description: "Remove every recurring Lisa automation that /setup-automations registered for this project — whatever is actually registered under the lisa-auto-<project>-* prefix, including the opt-in learnings-audit gardener — using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Carries no fixed list of loops: the registration set is the roster. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. Leaves checked-in runbook files on disk. The inverse of /setup-automations."
3
+ description: "Remove recurring Lisa automations that /setup-automations registered for this project — either the whole lisa-auto-<project>-* fleet by default, or one named loop registration when approving a policy-obsolete proposal — using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Carries no fixed list of loops for fleet teardown: the registration set is the roster. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. Leaves checked-in runbook files on disk. The inverse of /setup-automations."
4
4
  allowed-tools: ["Skill", "Bash", "Read"]
5
5
  ---
6
6
 
@@ -8,7 +8,9 @@ allowed-tools: ["Skill", "Bash", "Read"]
8
8
 
9
9
  This skill is a **specification, not a script.** It tells the current runtime which recurring Lisa
10
10
  automations to remove — the ones `/setup-automations` created for THIS project — and the runtime
11
- removes them with its **native** scheduling mechanism.
11
+ removes them with its **native** scheduling mechanism. With no loop argument it removes the whole
12
+ project fleet. With a loop id argument (for example `monitor` or `learnings-audit`) it removes only
13
+ that one registered loop.
12
14
 
13
15
  ## Runtime scheduler (branch on the current runtime)
14
16
 
@@ -21,11 +23,15 @@ removes them with its **native** scheduling mechanism.
21
23
 
22
24
  ## Scope (remove only what setup created)
23
25
 
24
- - Remove **every** automation `/setup-automations` registered for the current project — the whole
26
+ - By default, remove **every** automation `/setup-automations` registered for the current project — the whole
25
27
  set found under the stable `lisa-auto-<project>-` name prefix, whatever it currently contains.
26
28
  **Membership is registration, not a roster** (`automation-runbook-contract`): sweep the prefix and
27
29
  remove what is there. Do **not** work from a fixed list of loop names — a list drifts the moment a
28
30
  loop is added, which is exactly how the opt-in gardener came to be orphaned.
31
+ - When `$ARGUMENTS` names a loop id from a `policy-obsolete` teardown proposal, remove only that
32
+ loop's registration under the same prefix, e.g. `lisa-auto-<project>-monitor`. Report every other
33
+ project automation left in place. If the named loop is absent, that single-loop teardown is a clean
34
+ no-op; do not widen it into a fleet teardown.
29
35
  - This explicitly includes the opt-in **`learnings-audit`** gardener when it is registered:
30
36
  `/setup-automations learnings-audit=true` registers it under the same prefix, so teardown removes
31
37
  it with the rest. A conditionally-skipped loop (e.g. `exploratory-bugs` on a stack without
@@ -40,6 +46,31 @@ removes them with its **native** scheduling mechanism.
40
46
  loops did. Teardown removes scheduler registrations only; it never deletes, edits, or moves a
41
47
  runbook file. An operator who wants them gone removes them deliberately, in git.
42
48
 
49
+ ## Answering a `policy-obsolete` teardown proposal
50
+
51
+ Running this skill with the proposing loop id is the **approve** answer to a loop's own retirement
52
+ proposal. When a registered loop's runbook **Retirement condition** trips, that loop records the
53
+ `policy-obsolete` run outcome and files exactly one ticket recommending its own teardown
54
+ (`automation-runbook-contract`) — and then keeps running at its normal cadence, because a loop never
55
+ removes its own registration.
56
+ Teardown is **always human-invoked**: it is never
57
+ triggered by a loop, on any schedule, for any outcome. The operator has three answers, and only the
58
+ first brings you here. The proposal authorizes only that loop's registration unless the human
59
+ explicitly asks for fleet teardown.
60
+
61
+ 1. **Approve** — run this skill with the proposal's loop id, e.g.
62
+ `/lisa:tear-down-automations monitor`. When it has run, close the proposal as **Completed**: the
63
+ loop-scoped teardown it asked for actually happened, and Completed is the close reason that says
64
+ so.
65
+ 2. **Decline** — close the proposal as **Not planned** (that close reason is what stops the loop
66
+ re-raising it; **Completed** would leave a later re-file open). The loop simply continues at its
67
+ normal cadence, and nothing is removed.
68
+ 3. **Re-cadence** — you pick the longer cadence and re-register the loop with
69
+ `/lisa:setup-automations`; the loop never adjusts its own schedule. The proposal's evidence
70
+ carries the loop's **current cadence** as the baseline to choose against, plus a one-line summary
71
+ of its recent runs. Then close the proposal as **Completed** — the schedule change is the action
72
+ it asked for.
73
+
43
74
  ## Report
44
75
 
45
76
  List each automation removed by name. For "already absent", compare against the one source of truth
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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.257.2",
3
+ "version": "2.258.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"
@@ -34,7 +34,8 @@ Health and operator action are **orthogonal** — a healthy run can still need a
34
34
  capability, then close the escalation item.
35
35
  - `policy-obsolete` — the loop's own retirement policy (the retirement condition written in its
36
36
  runbook) tripped, so it proposed its own teardown. **Healthy.** Operator action: approve the
37
- teardown, decline it (close the proposal; the loop keeps running at cadence), or re-cadence it.
37
+ teardown, decline it (close the proposal as **Not planned**; the loop keeps running at cadence),
38
+ or re-cadence it.
38
39
 
39
40
  ## A run outcome is NOT a work-item lifecycle terminal state (CRITICAL)
40
41
 
@@ -84,6 +84,11 @@ Retirement condition
84
84
  cadence until someone approves, declines, or re-cadences it.
85
85
  ```
86
86
 
87
+ That example's 30-day retirement row is **illustration of the shape, not the shipped default**: the
88
+ seed `lisa-setup-automations` writes declares the three `intake-*` loops structural to the factory,
89
+ whose runbooks state plainly that they do not retire. The mechanism below is normative; the numbers
90
+ above are only a filled-in example.
91
+
87
92
  ## The six run outcomes
88
93
 
89
94
  Exactly one per run. The one-line operator summary is not optional — it is what the status surface
@@ -99,7 +104,7 @@ only `recovery-required` means the machinery itself is broken.
99
104
  | `change-proved` | The loop made a change and proved it with evidence. | Healthy | None — informational. | What changed and the evidence that proves it. |
100
105
  | `approval-requested` | The loop reached its autonomous/approval boundary and asked a human. | Healthy | Answer the approval question. | What is waiting, on whom, and what happens if nobody answers. |
101
106
  | `recovery-required` | The loop itself could not complete: access, tooling, or substrate is broken. | **Not healthy** — needs a human | Restore the named capability, then close the escalation item. | What broke, and the escalation item to act on. |
102
- | `policy-obsolete` | The loop's own retirement policy — the retirement condition written in its runbook — tripped, so it proposed its own teardown. | Healthy | Decide: approve the teardown, decline it (close the proposal; the loop continues at cadence), or re-cadence it. | Why it looks obsolete and the teardown-proposal item. |
107
+ | `policy-obsolete` | The loop's own retirement policy — the retirement condition written in its runbook — tripped, so it proposed its own teardown. | Healthy | Decide: approve the teardown, decline it (close the proposal as **Not planned**; the loop continues at cadence), or re-cadence it. | Why it looks obsolete and the teardown-proposal item. |
103
108
 
104
109
  ### Exemplar one-line summaries
105
110
 
@@ -189,7 +194,9 @@ teardown-proposal item — matched on the marker, never the title — carrying t
189
194
  result and this run's summary as evidence, and proposing either a longer cadence or
190
195
  `lisa-tear-down-automations`. The loop **keeps running at its normal cadence** until an operator
191
196
  flips that proposal one of three ways: **approve** it (`lisa-tear-down-automations` runs and the
192
- registration goes away), **decline** it (close the proposal the loop simply continues), or
197
+ registration goes away), **decline** it (close the proposal as **Not planned** closing it as
198
+ **Completed** leaves a later re-file open, per `rejection-detection`'s proposal rejection memory;
199
+ either way the loop simply continues), or
193
200
  **re-cadence** it (register it at the longer cadence instead of tearing it down). Retirement is a
194
201
  recommendation like any other, **never a self-executed exit**: a loop never deletes its own
195
202
  registration, and a proposal nobody answers changes nothing.
@@ -104,8 +104,13 @@ and records it, so a quiet run and a broken run are never mistaken for each othe
104
104
  | Findings filed — one or more `Bug` / `Improvement` tickets created or referenced (§6) | `candidate-proposed` |
105
105
  | Clean pass — explored the personas and surfaces, nothing worth filing — **or** every candidate was suppressed by a prior decline (`rejection-detection` **Proposal rejection memory**): the summary MUST name the suppression count | `nothing-needed` |
106
106
  | Tracker unconfigured — the §1 stop path; findings cannot be filed — **or** the open-and-closed rejection-memory marker search could not run (tracker unreachable / credentials revoked): a memory check that could not run is a broken loop, never a silent `nothing-needed` | `recovery-required` |
107
+ | The runbook's **Retirement condition** tripped — the trailing quiet window is empty AND this pass found nothing to file AND the project no longer ships an exploratory-qa surface — this row supersedes the `nothing-needed` row when it applies | `policy-obsolete` |
107
108
  | A degradation that still let the pass explore (e.g. Kane unavailable, one persona unreachable) | the outcome it actually reached above, with the summary **leading with the degradation** — degradation never mints a seventh token |
108
109
 
110
+ Before invoking the run-record CLI, evaluate the **Retirement condition** first. If it applies,
111
+ select `policy-obsolete` as the sole outcome and do not record a prior `nothing-needed` result;
112
+ otherwise select the ordinary outcome from the table.
113
+
109
114
  Record **exactly one** outcome per invocation through the run-record CLI, naming this loop's runbook
110
115
  (the `--summary` is the operator-readable one-liner in the contract's exemplar voice — plain,
111
116
  specific, actionable, e.g. `Explored 4 personas; nothing confusing to file.` — or, when a decline suppressed the only candidates, `Explored 4 personas; 2 candidates suppressed by a prior decline — nothing new to propose.` — for `nothing-needed`; and for a `recovery-required` from an unreadable decline check, `Tracker unreachable during the decline check — restore credentials; nothing was filed this run.`):
@@ -123,6 +128,42 @@ If `${CLAUDE_PLUGIN_ROOT}` is unset, resolve the plugin scripts directory direct
123
128
  abort** (per `automation-runbook-contract`): note the recording failure in the run output and finish
124
129
  the cycle — a recording failure is a degradation to report, never a reason to block the loop.
125
130
 
131
+ **Retirement evaluation (every run).** Evaluate this loop's runbook **Retirement condition** on
132
+ every run, exactly as the `automation-runbook-contract` rule's Retirement section defines it — this
133
+ skill conforms to that text and never restates or diverges from it. On top of the contract's two
134
+ conditions the runbook seeds a third **domain conjunct** — the project no longer ships an
135
+ exploratory-qa command surface to explore — which only tightens the test and never replaces it: a
136
+ quiet month on a product nobody broke is quality holding, not a reason to stop looking. Evaluate all
137
+ three. When all three hold, record `policy-obsolete` and file **exactly ONE** marker-deduped
138
+ teardown proposal through `lisa-tracker-write` (per `tracked-work` + `integration-access-layer`):
139
+
140
+ - **Marker** `<!-- [lisa-automation-retire] key=exploratory-bugs -->` plus a visible prose line;
141
+ matched on the marker, never the title; searched **open AND closed** per `rejection-detection`'s
142
+ **Proposal rejection memory**. Treat matches by close state: **open** suppresses another proposal;
143
+ **Not planned** suppresses another proposal unless new evidence postdates the rejection;
144
+ **Completed** means the prior approved action happened, so a later recurrence may be re-filed.
145
+ When an existing proposal suppresses filing, **the run still records `policy-obsolete` and files
146
+ nothing** — the outcome describes this run, while the ticket is filed exactly once.
147
+ - **Labels** `status:blocked` + `human-needed`, carrying the contract's decision-ready packet. The
148
+ `human-needed` label marks the proposal human-owned: `lisa-repair-intake` recognizes it and never
149
+ re-dispatches it as stalled work.
150
+ - **Evidence** the date-filtered search result, this run's summary, **the loop's current cadence**
151
+ (the baseline an operator needs to choose a longer one), and a one-line summary of recent runs
152
+ read from `.lisa/automations/runs/exploratory-bugs.jsonl`. Fill the rest of the packet the same
153
+ way every time: *Work already attempted* is the searches this run ran, and *Risk of inaction* is
154
+ that the loop keeps consuming schedule slots and tokens for nothing.
155
+ - **How to answer** names the three operator responses: **approve** — run
156
+ `/lisa:tear-down-automations exploratory-bugs` and only that loop registration goes away;
157
+ **decline** — close the proposal as
158
+ **Not planned** (closing it as **Completed** leaves a later re-file open) and the loop simply
159
+ continues; **re-cadence** — pick a longer cadence off that evidence and re-register with
160
+ `/lisa:setup-automations` instead of tearing down.
161
+ - **Operator footer**, verbatim, as on every loop-filed proposal (`rejection-detection`):
162
+ > To stop this from being raised again, close it as **Not planned**. Close it as **Completed** if it was fixed — a later recurrence may be re-filed as a regression.
163
+
164
+ The loop **keeps running at its normal cadence** until a human acts, and never deletes its own
165
+ registration.
166
+
126
167
  ## Quality bar
127
168
 
128
169
  - Explore as a true first-time user — judge clarity, not whether you (who can read the code) can figure it out.
@@ -131,6 +131,7 @@ matches the mode this cycle ran in: **`intake-prd`** (PRD-side dispatch) or **`i
131
131
  | A build cycle that shipped and verified (merged PR + evidence), or a shipped PRD moved to `verified` | `change-proved` |
132
132
  | A protected deployment (or other autonomy boundary the lifecycle hits) waiting on a human approval | `approval-requested` |
133
133
  | The queue itself is misconfigured or unreadable — missing required input (step 1) or an unreachable Status/workflow (step 2/`3` misconfig) so the cycle could not run | `recovery-required` |
134
+ | The runbook's **Retirement condition** tripped | `policy-obsolete` — **never reached by design for either intake loop-id** (see Retirement evaluation below) |
134
135
 
135
136
  **Seam warning (the #1 misread in this ticket).** A run outcome describes this *cycle*; `Blocked` is
136
137
  a *work item's* lifecycle terminal state — the two never merge in the summary. When Intake correctly
@@ -156,6 +157,13 @@ If `${CLAUDE_PLUGIN_ROOT}` is unset, resolve the plugin scripts directory direct
156
157
  abort** (per `automation-runbook-contract`): note the recording failure in the run output and finish
157
158
  the cycle — a recording failure is a degradation to report, never a reason to block the loop.
158
159
 
160
+ **Retirement evaluation (every run).** Both loop-ids this skill backs are **structural to the
161
+ factory — they do not retire.** Their runbooks say so plainly instead of leaving the Retirement
162
+ condition blank, so the `automation-runbook-contract` rule's two-part retirement test never fires
163
+ here: neither `intake-prd` nor `intake-tickets` ever records `policy-obsolete`, and neither ever
164
+ files a teardown proposal. An operator who wants intake to stop runs `/lisa:tear-down-automations`
165
+ themselves — the loop never removes its own registration.
166
+
159
167
  ## Schedule examples
160
168
 
161
169
  ```text