@codyswann/lisa 2.257.1 → 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.
- package/all/create-only/scripts/remote-agent-aws-setup.sh +4 -2
- 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/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +41 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +8 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +44 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +41 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +45 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +8 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +20 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +34 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/agents/openai.yaml +2 -2
- package/plugins/lisa/rules/eager/automation-runbook-contract.md +2 -1
- package/plugins/lisa/rules/reference/automation-runbook-contract.md +9 -2
- package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +41 -0
- package/plugins/lisa/skills/lisa-intake/SKILL.md +8 -0
- package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +44 -7
- package/plugins/lisa/skills/lisa-monitor/SKILL.md +41 -0
- package/plugins/lisa/skills/lisa-project-ideation/SKILL.md +45 -2
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +8 -0
- package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +20 -7
- package/plugins/lisa/skills/lisa-tear-down-automations/SKILL.md +34 -3
- package/plugins/lisa/skills/lisa-tear-down-automations/agents/openai.yaml +2 -2
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +41 -0
- package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +8 -0
- package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +44 -7
- package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +41 -0
- package/plugins/lisa-agy/skills/lisa-project-ideation/SKILL.md +45 -2
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +8 -0
- package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +20 -7
- package/plugins/lisa-agy/skills/lisa-tear-down-automations/SKILL.md +34 -3
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/rules/eager/automation-runbook-contract.md +2 -1
- package/plugins/lisa-copilot/rules/reference/automation-runbook-contract.md +9 -2
- package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +41 -0
- package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +8 -0
- package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +44 -7
- package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +41 -0
- package/plugins/lisa-copilot/skills/lisa-project-ideation/SKILL.md +45 -2
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +8 -0
- package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +20 -7
- package/plugins/lisa-copilot/skills/lisa-tear-down-automations/SKILL.md +34 -3
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/automation-runbook-contract-reference.mdc +9 -2
- package/plugins/lisa-cursor/rules/automation-runbook-contract.mdc +2 -1
- package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +41 -0
- package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +8 -0
- package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +44 -7
- package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +41 -0
- package/plugins/lisa-cursor/skills/lisa-project-ideation/SKILL.md +45 -2
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +8 -0
- package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +20 -7
- package/plugins/lisa-cursor/skills/lisa-tear-down-automations/SKILL.md +34 -3
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-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-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-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-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-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-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-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-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-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-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-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-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/rules/eager/automation-runbook-contract.md +2 -1
- package/plugins/src/base/rules/reference/automation-runbook-contract.md +9 -2
- package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +41 -0
- package/plugins/src/base/skills/lisa-intake/SKILL.md +8 -0
- package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +44 -7
- package/plugins/src/base/skills/lisa-monitor/SKILL.md +41 -0
- package/plugins/src/base/skills/lisa-project-ideation/SKILL.md +45 -2
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +8 -0
- package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +20 -7
- 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
|
|
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
|
-
-
|
|
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-openclaw",
|
|
3
|
-
"version": "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.
|
|
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.
|
|
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.
|
|
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.
|
|
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"
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|