@codyswann/lisa 2.187.0 → 2.187.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/rules/reference/config-resolution.md +1 -1
- package/plugins/lisa/scripts/automation-status-expected-fleet.mjs +4 -3
- package/plugins/lisa/skills/repair-intake/SKILL.md +28 -11
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/automation-status-expected-fleet.mjs +4 -3
- package/plugins/lisa-agy/skills/repair-intake/SKILL.md +28 -11
- 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/reference/config-resolution.md +1 -1
- package/plugins/lisa-copilot/scripts/automation-status-expected-fleet.mjs +4 -3
- package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +28 -11
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +1 -1
- package/plugins/lisa-cursor/scripts/automation-status-expected-fleet.mjs +4 -3
- package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +28 -11
- 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/reference/config-resolution.md +1 -1
- package/plugins/src/base/scripts/automation-status-expected-fleet.mjs +4 -3
- package/plugins/src/base/skills/repair-intake/SKILL.md +28 -11
package/package.json
CHANGED
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"ws": ">=8.20.1"
|
|
94
94
|
},
|
|
95
95
|
"name": "@codyswann/lisa",
|
|
96
|
-
"version": "2.187.
|
|
96
|
+
"version": "2.187.2",
|
|
97
97
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
98
98
|
"main": "dist/index.js",
|
|
99
99
|
"exports": {
|
|
@@ -369,7 +369,7 @@ documented defaults, so existing projects need no config change.
|
|
|
369
369
|
|
|
370
370
|
| Key | Required | Default | Notes |
|
|
371
371
|
|-----|----------|---------|-------|
|
|
372
|
-
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may
|
|
372
|
+
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may sit after its last state-changing transition into the in-progress role, or after the last human / PR-side forward-progress activity, before repair-intake treats it as stalled and resumes it. Automation self-comments and Lisa audit notes do not reset this clock. `blocked` items are judged on blocker/answer state, not this threshold. Overridable per-run via `stale_after=<dur>` in `$ARGUMENTS` (which always wins). The same value is the default backoff window for loop-prevention notes. |
|
|
373
373
|
| `intake.repair.maxCandidates` | no | `100` | Upper bound on how many stuck items repair-intake enumerates while searching for the first actionable one. Bounds scan cost. Overridable per-run via `max_candidates=<n>`. |
|
|
374
374
|
|
|
375
375
|
### Monitor audit config (`monitor`)
|
|
@@ -263,9 +263,10 @@ function resolveRepairQueueArgument(config, source, tracker) {
|
|
|
263
263
|
return "github intake_mode=both";
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
const buildQueue = resolveBuildQueueArgument(config, tracker);
|
|
267
|
+
return buildQueue.includes("intake_mode=")
|
|
268
|
+
? buildQueue
|
|
269
|
+
: `${buildQueue} intake_mode=build`;
|
|
269
270
|
}
|
|
270
271
|
|
|
271
272
|
/**
|
|
@@ -80,7 +80,7 @@ lifecycle state with provider-native closure and rollup state.
|
|
|
80
80
|
|-------|---------|---------|
|
|
81
81
|
| `<queue>` | Same queue identifier `lisa:intake` accepts (see Source dispatch). Required. | — |
|
|
82
82
|
| `intake_mode` | `prd` \| `build` \| `both`. Only meaningful for a GitHub `org/repo` (or bare `github`) that hosts both PRD and build label namespaces. `both` is unique to repair — a repair sweep usefully covers both lifecycles in one schedule. Absent → `both` when both namespaces exist, else whichever lifecycle exists. | `both` for dual GitHub queues; otherwise infer |
|
|
83
|
-
| `stale_after` | How long
|
|
83
|
+
| `stale_after` | How long since the last state-changing transition into the in-progress role, or since the last human / PR-side forward-progress activity, before an in-progress item counts as stalled. Automation self-comments do not reset this clock. Accepts `24h`, `90m`, `2d`, or `0` (treat any in-progress item as stalled — manual recovery, also the only way to resume work on a provider that exposes no reliable timestamp). Overrides config. | `2h` |
|
|
84
84
|
| `max_candidates` | Cap on how many stuck/close-out candidates to enumerate and evaluate. Repair every materially actionable candidate within this bounded set, then stop. Overrides config. | `100` |
|
|
85
85
|
| `force` | `true` bypasses the loop-prevention backoff window (so a manual re-run re-attempts items even if their fingerprint is unchanged). It does **not** change the staleness rule — use `stale_after=0` for that. | `false` |
|
|
86
86
|
|
|
@@ -228,9 +228,19 @@ intakes use. Never call Atlassian MCP or `acli` directly — go through `lisa:at
|
|
|
228
228
|
|
|
229
229
|
## Staleness model
|
|
230
230
|
|
|
231
|
-
An in-progress item (build `claimed`, PRD `in_review`) is **stalled**
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
An in-progress item (build `claimed`, PRD `in_review`) is **stalled** when the last
|
|
232
|
+
state-changing transition into the in-progress role, or the last human / PR-side forward-progress
|
|
233
|
+
activity after that transition, is older than the `stale_after` threshold. `blocked` items are NOT
|
|
234
|
+
gated on staleness — their repairability is judged on current blocker/answer state, not elapsed
|
|
235
|
+
time.
|
|
236
|
+
|
|
237
|
+
Automation self-comments are not forward progress and must not reset the staleness clock. Status
|
|
238
|
+
comments like `[claude-build-intake] PR remains open...`, `[codex-build-intake] Follow-up pushed...`,
|
|
239
|
+
or `[lisa-repair-intake] ...` may be useful audit notes, but they cannot make a claimed item fresh
|
|
240
|
+
forever. If a provider exposes a changelog/history surface, prefer the timestamp of the last
|
|
241
|
+
transition into the claimed/In-Progress role over the item's generic `updated` timestamp. When the
|
|
242
|
+
history surface is unavailable, ignore comments whose author/marker clearly belongs to Lisa or its
|
|
243
|
+
automation agents, and use the newest human comment/edit or PR-side progress event instead.
|
|
234
244
|
|
|
235
245
|
A build `claimed` leaf whose linked PR has **already merged** (`state == MERGED`) is likewise NOT
|
|
236
246
|
gated on staleness. A merged PR is a settled terminal state, not in-flight work: the only thing
|
|
@@ -254,17 +264,24 @@ decision tree step 0, and the dedicated high-confidence ordering bucket).
|
|
|
254
264
|
`stale_after=0` means "treat any in-progress item as stalled" — a manual full-recovery lever,
|
|
255
265
|
and the only way to resume work on a provider that exposes no reliable activity timestamp.
|
|
256
266
|
|
|
257
|
-
### Activity signal (
|
|
267
|
+
### Activity signal (state-change first, portable across vendors)
|
|
258
268
|
|
|
259
|
-
Compute the item's newest activity timestamp from the highest-priority signal the vendor
|
|
269
|
+
Compute the item's newest eligible activity timestamp from the highest-priority signal the vendor
|
|
260
270
|
exposes, and compare it to `now - stale_after`:
|
|
261
271
|
|
|
262
|
-
1. Provider-native
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
272
|
+
1. Provider-native status/label **transition** time into the in-progress role, when the provider
|
|
273
|
+
exposes it cleanly (JIRA changelog transition to `claimed` / In Progress, GitHub label event,
|
|
274
|
+
Linear state/label history, Notion/Confluence page move/status history).
|
|
275
|
+
2. Latest human lifecycle/progress **comment** or edit on the item (and, for Linear PRDs, the
|
|
276
|
+
sentinel feedback issue). Exclude automation self-comments and Lisa audit markers such as
|
|
277
|
+
`[claude-build-intake]`, `[codex-build-intake]`, `[lisa-build-intake]`, and
|
|
278
|
+
`[lisa-repair-intake]`.
|
|
279
|
+
3. For build items, latest **PR-side forward-progress activity** on the linked PR: newest commit,
|
|
280
|
+
review, check-run,
|
|
266
281
|
or PR comment.
|
|
267
|
-
4.
|
|
282
|
+
4. Provider-native item `updatedAt` / `last_edited_time` / `updated` only when the provider cannot
|
|
283
|
+
expose transition/comment authorship and the timestamp is not known to be driven by automation
|
|
284
|
+
self-comments.
|
|
268
285
|
|
|
269
286
|
If ANY of these is newer than the threshold, the item is **active** → record it as `active` and
|
|
270
287
|
skip it (read-only). For build `claimed`, an open PR with recent commits/checks is active. For
|
|
@@ -263,9 +263,10 @@ function resolveRepairQueueArgument(config, source, tracker) {
|
|
|
263
263
|
return "github intake_mode=both";
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
const buildQueue = resolveBuildQueueArgument(config, tracker);
|
|
267
|
+
return buildQueue.includes("intake_mode=")
|
|
268
|
+
? buildQueue
|
|
269
|
+
: `${buildQueue} intake_mode=build`;
|
|
269
270
|
}
|
|
270
271
|
|
|
271
272
|
/**
|
|
@@ -80,7 +80,7 @@ lifecycle state with provider-native closure and rollup state.
|
|
|
80
80
|
|-------|---------|---------|
|
|
81
81
|
| `<queue>` | Same queue identifier `lisa:intake` accepts (see Source dispatch). Required. | — |
|
|
82
82
|
| `intake_mode` | `prd` \| `build` \| `both`. Only meaningful for a GitHub `org/repo` (or bare `github`) that hosts both PRD and build label namespaces. `both` is unique to repair — a repair sweep usefully covers both lifecycles in one schedule. Absent → `both` when both namespaces exist, else whichever lifecycle exists. | `both` for dual GitHub queues; otherwise infer |
|
|
83
|
-
| `stale_after` | How long
|
|
83
|
+
| `stale_after` | How long since the last state-changing transition into the in-progress role, or since the last human / PR-side forward-progress activity, before an in-progress item counts as stalled. Automation self-comments do not reset this clock. Accepts `24h`, `90m`, `2d`, or `0` (treat any in-progress item as stalled — manual recovery, also the only way to resume work on a provider that exposes no reliable timestamp). Overrides config. | `2h` |
|
|
84
84
|
| `max_candidates` | Cap on how many stuck/close-out candidates to enumerate and evaluate. Repair every materially actionable candidate within this bounded set, then stop. Overrides config. | `100` |
|
|
85
85
|
| `force` | `true` bypasses the loop-prevention backoff window (so a manual re-run re-attempts items even if their fingerprint is unchanged). It does **not** change the staleness rule — use `stale_after=0` for that. | `false` |
|
|
86
86
|
|
|
@@ -228,9 +228,19 @@ intakes use. Never call Atlassian MCP or `acli` directly — go through `lisa:at
|
|
|
228
228
|
|
|
229
229
|
## Staleness model
|
|
230
230
|
|
|
231
|
-
An in-progress item (build `claimed`, PRD `in_review`) is **stalled**
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
An in-progress item (build `claimed`, PRD `in_review`) is **stalled** when the last
|
|
232
|
+
state-changing transition into the in-progress role, or the last human / PR-side forward-progress
|
|
233
|
+
activity after that transition, is older than the `stale_after` threshold. `blocked` items are NOT
|
|
234
|
+
gated on staleness — their repairability is judged on current blocker/answer state, not elapsed
|
|
235
|
+
time.
|
|
236
|
+
|
|
237
|
+
Automation self-comments are not forward progress and must not reset the staleness clock. Status
|
|
238
|
+
comments like `[claude-build-intake] PR remains open...`, `[codex-build-intake] Follow-up pushed...`,
|
|
239
|
+
or `[lisa-repair-intake] ...` may be useful audit notes, but they cannot make a claimed item fresh
|
|
240
|
+
forever. If a provider exposes a changelog/history surface, prefer the timestamp of the last
|
|
241
|
+
transition into the claimed/In-Progress role over the item's generic `updated` timestamp. When the
|
|
242
|
+
history surface is unavailable, ignore comments whose author/marker clearly belongs to Lisa or its
|
|
243
|
+
automation agents, and use the newest human comment/edit or PR-side progress event instead.
|
|
234
244
|
|
|
235
245
|
A build `claimed` leaf whose linked PR has **already merged** (`state == MERGED`) is likewise NOT
|
|
236
246
|
gated on staleness. A merged PR is a settled terminal state, not in-flight work: the only thing
|
|
@@ -254,17 +264,24 @@ decision tree step 0, and the dedicated high-confidence ordering bucket).
|
|
|
254
264
|
`stale_after=0` means "treat any in-progress item as stalled" — a manual full-recovery lever,
|
|
255
265
|
and the only way to resume work on a provider that exposes no reliable activity timestamp.
|
|
256
266
|
|
|
257
|
-
### Activity signal (
|
|
267
|
+
### Activity signal (state-change first, portable across vendors)
|
|
258
268
|
|
|
259
|
-
Compute the item's newest activity timestamp from the highest-priority signal the vendor
|
|
269
|
+
Compute the item's newest eligible activity timestamp from the highest-priority signal the vendor
|
|
260
270
|
exposes, and compare it to `now - stale_after`:
|
|
261
271
|
|
|
262
|
-
1. Provider-native
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
272
|
+
1. Provider-native status/label **transition** time into the in-progress role, when the provider
|
|
273
|
+
exposes it cleanly (JIRA changelog transition to `claimed` / In Progress, GitHub label event,
|
|
274
|
+
Linear state/label history, Notion/Confluence page move/status history).
|
|
275
|
+
2. Latest human lifecycle/progress **comment** or edit on the item (and, for Linear PRDs, the
|
|
276
|
+
sentinel feedback issue). Exclude automation self-comments and Lisa audit markers such as
|
|
277
|
+
`[claude-build-intake]`, `[codex-build-intake]`, `[lisa-build-intake]`, and
|
|
278
|
+
`[lisa-repair-intake]`.
|
|
279
|
+
3. For build items, latest **PR-side forward-progress activity** on the linked PR: newest commit,
|
|
280
|
+
review, check-run,
|
|
266
281
|
or PR comment.
|
|
267
|
-
4.
|
|
282
|
+
4. Provider-native item `updatedAt` / `last_edited_time` / `updated` only when the provider cannot
|
|
283
|
+
expose transition/comment authorship and the timestamp is not known to be driven by automation
|
|
284
|
+
self-comments.
|
|
268
285
|
|
|
269
286
|
If ANY of these is newer than the threshold, the item is **active** → record it as `active` and
|
|
270
287
|
skip it (read-only). For build `claimed`, an open PR with recent commits/checks is active. For
|
|
@@ -369,7 +369,7 @@ documented defaults, so existing projects need no config change.
|
|
|
369
369
|
|
|
370
370
|
| Key | Required | Default | Notes |
|
|
371
371
|
|-----|----------|---------|-------|
|
|
372
|
-
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may
|
|
372
|
+
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may sit after its last state-changing transition into the in-progress role, or after the last human / PR-side forward-progress activity, before repair-intake treats it as stalled and resumes it. Automation self-comments and Lisa audit notes do not reset this clock. `blocked` items are judged on blocker/answer state, not this threshold. Overridable per-run via `stale_after=<dur>` in `$ARGUMENTS` (which always wins). The same value is the default backoff window for loop-prevention notes. |
|
|
373
373
|
| `intake.repair.maxCandidates` | no | `100` | Upper bound on how many stuck items repair-intake enumerates while searching for the first actionable one. Bounds scan cost. Overridable per-run via `max_candidates=<n>`. |
|
|
374
374
|
|
|
375
375
|
### Monitor audit config (`monitor`)
|
|
@@ -263,9 +263,10 @@ function resolveRepairQueueArgument(config, source, tracker) {
|
|
|
263
263
|
return "github intake_mode=both";
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
const buildQueue = resolveBuildQueueArgument(config, tracker);
|
|
267
|
+
return buildQueue.includes("intake_mode=")
|
|
268
|
+
? buildQueue
|
|
269
|
+
: `${buildQueue} intake_mode=build`;
|
|
269
270
|
}
|
|
270
271
|
|
|
271
272
|
/**
|
|
@@ -80,7 +80,7 @@ lifecycle state with provider-native closure and rollup state.
|
|
|
80
80
|
|-------|---------|---------|
|
|
81
81
|
| `<queue>` | Same queue identifier `lisa:intake` accepts (see Source dispatch). Required. | — |
|
|
82
82
|
| `intake_mode` | `prd` \| `build` \| `both`. Only meaningful for a GitHub `org/repo` (or bare `github`) that hosts both PRD and build label namespaces. `both` is unique to repair — a repair sweep usefully covers both lifecycles in one schedule. Absent → `both` when both namespaces exist, else whichever lifecycle exists. | `both` for dual GitHub queues; otherwise infer |
|
|
83
|
-
| `stale_after` | How long
|
|
83
|
+
| `stale_after` | How long since the last state-changing transition into the in-progress role, or since the last human / PR-side forward-progress activity, before an in-progress item counts as stalled. Automation self-comments do not reset this clock. Accepts `24h`, `90m`, `2d`, or `0` (treat any in-progress item as stalled — manual recovery, also the only way to resume work on a provider that exposes no reliable timestamp). Overrides config. | `2h` |
|
|
84
84
|
| `max_candidates` | Cap on how many stuck/close-out candidates to enumerate and evaluate. Repair every materially actionable candidate within this bounded set, then stop. Overrides config. | `100` |
|
|
85
85
|
| `force` | `true` bypasses the loop-prevention backoff window (so a manual re-run re-attempts items even if their fingerprint is unchanged). It does **not** change the staleness rule — use `stale_after=0` for that. | `false` |
|
|
86
86
|
|
|
@@ -228,9 +228,19 @@ intakes use. Never call Atlassian MCP or `acli` directly — go through `lisa:at
|
|
|
228
228
|
|
|
229
229
|
## Staleness model
|
|
230
230
|
|
|
231
|
-
An in-progress item (build `claimed`, PRD `in_review`) is **stalled**
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
An in-progress item (build `claimed`, PRD `in_review`) is **stalled** when the last
|
|
232
|
+
state-changing transition into the in-progress role, or the last human / PR-side forward-progress
|
|
233
|
+
activity after that transition, is older than the `stale_after` threshold. `blocked` items are NOT
|
|
234
|
+
gated on staleness — their repairability is judged on current blocker/answer state, not elapsed
|
|
235
|
+
time.
|
|
236
|
+
|
|
237
|
+
Automation self-comments are not forward progress and must not reset the staleness clock. Status
|
|
238
|
+
comments like `[claude-build-intake] PR remains open...`, `[codex-build-intake] Follow-up pushed...`,
|
|
239
|
+
or `[lisa-repair-intake] ...` may be useful audit notes, but they cannot make a claimed item fresh
|
|
240
|
+
forever. If a provider exposes a changelog/history surface, prefer the timestamp of the last
|
|
241
|
+
transition into the claimed/In-Progress role over the item's generic `updated` timestamp. When the
|
|
242
|
+
history surface is unavailable, ignore comments whose author/marker clearly belongs to Lisa or its
|
|
243
|
+
automation agents, and use the newest human comment/edit or PR-side progress event instead.
|
|
234
244
|
|
|
235
245
|
A build `claimed` leaf whose linked PR has **already merged** (`state == MERGED`) is likewise NOT
|
|
236
246
|
gated on staleness. A merged PR is a settled terminal state, not in-flight work: the only thing
|
|
@@ -254,17 +264,24 @@ decision tree step 0, and the dedicated high-confidence ordering bucket).
|
|
|
254
264
|
`stale_after=0` means "treat any in-progress item as stalled" — a manual full-recovery lever,
|
|
255
265
|
and the only way to resume work on a provider that exposes no reliable activity timestamp.
|
|
256
266
|
|
|
257
|
-
### Activity signal (
|
|
267
|
+
### Activity signal (state-change first, portable across vendors)
|
|
258
268
|
|
|
259
|
-
Compute the item's newest activity timestamp from the highest-priority signal the vendor
|
|
269
|
+
Compute the item's newest eligible activity timestamp from the highest-priority signal the vendor
|
|
260
270
|
exposes, and compare it to `now - stale_after`:
|
|
261
271
|
|
|
262
|
-
1. Provider-native
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
272
|
+
1. Provider-native status/label **transition** time into the in-progress role, when the provider
|
|
273
|
+
exposes it cleanly (JIRA changelog transition to `claimed` / In Progress, GitHub label event,
|
|
274
|
+
Linear state/label history, Notion/Confluence page move/status history).
|
|
275
|
+
2. Latest human lifecycle/progress **comment** or edit on the item (and, for Linear PRDs, the
|
|
276
|
+
sentinel feedback issue). Exclude automation self-comments and Lisa audit markers such as
|
|
277
|
+
`[claude-build-intake]`, `[codex-build-intake]`, `[lisa-build-intake]`, and
|
|
278
|
+
`[lisa-repair-intake]`.
|
|
279
|
+
3. For build items, latest **PR-side forward-progress activity** on the linked PR: newest commit,
|
|
280
|
+
review, check-run,
|
|
266
281
|
or PR comment.
|
|
267
|
-
4.
|
|
282
|
+
4. Provider-native item `updatedAt` / `last_edited_time` / `updated` only when the provider cannot
|
|
283
|
+
expose transition/comment authorship and the timestamp is not known to be driven by automation
|
|
284
|
+
self-comments.
|
|
268
285
|
|
|
269
286
|
If ANY of these is newer than the threshold, the item is **active** → record it as `active` and
|
|
270
287
|
skip it (read-only). For build `claimed`, an open PR with recent commits/checks is active. For
|
|
@@ -374,7 +374,7 @@ documented defaults, so existing projects need no config change.
|
|
|
374
374
|
|
|
375
375
|
| Key | Required | Default | Notes |
|
|
376
376
|
|-----|----------|---------|-------|
|
|
377
|
-
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may
|
|
377
|
+
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may sit after its last state-changing transition into the in-progress role, or after the last human / PR-side forward-progress activity, before repair-intake treats it as stalled and resumes it. Automation self-comments and Lisa audit notes do not reset this clock. `blocked` items are judged on blocker/answer state, not this threshold. Overridable per-run via `stale_after=<dur>` in `$ARGUMENTS` (which always wins). The same value is the default backoff window for loop-prevention notes. |
|
|
378
378
|
| `intake.repair.maxCandidates` | no | `100` | Upper bound on how many stuck items repair-intake enumerates while searching for the first actionable one. Bounds scan cost. Overridable per-run via `max_candidates=<n>`. |
|
|
379
379
|
|
|
380
380
|
### Monitor audit config (`monitor`)
|
|
@@ -263,9 +263,10 @@ function resolveRepairQueueArgument(config, source, tracker) {
|
|
|
263
263
|
return "github intake_mode=both";
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
const buildQueue = resolveBuildQueueArgument(config, tracker);
|
|
267
|
+
return buildQueue.includes("intake_mode=")
|
|
268
|
+
? buildQueue
|
|
269
|
+
: `${buildQueue} intake_mode=build`;
|
|
269
270
|
}
|
|
270
271
|
|
|
271
272
|
/**
|
|
@@ -80,7 +80,7 @@ lifecycle state with provider-native closure and rollup state.
|
|
|
80
80
|
|-------|---------|---------|
|
|
81
81
|
| `<queue>` | Same queue identifier `lisa:intake` accepts (see Source dispatch). Required. | — |
|
|
82
82
|
| `intake_mode` | `prd` \| `build` \| `both`. Only meaningful for a GitHub `org/repo` (or bare `github`) that hosts both PRD and build label namespaces. `both` is unique to repair — a repair sweep usefully covers both lifecycles in one schedule. Absent → `both` when both namespaces exist, else whichever lifecycle exists. | `both` for dual GitHub queues; otherwise infer |
|
|
83
|
-
| `stale_after` | How long
|
|
83
|
+
| `stale_after` | How long since the last state-changing transition into the in-progress role, or since the last human / PR-side forward-progress activity, before an in-progress item counts as stalled. Automation self-comments do not reset this clock. Accepts `24h`, `90m`, `2d`, or `0` (treat any in-progress item as stalled — manual recovery, also the only way to resume work on a provider that exposes no reliable timestamp). Overrides config. | `2h` |
|
|
84
84
|
| `max_candidates` | Cap on how many stuck/close-out candidates to enumerate and evaluate. Repair every materially actionable candidate within this bounded set, then stop. Overrides config. | `100` |
|
|
85
85
|
| `force` | `true` bypasses the loop-prevention backoff window (so a manual re-run re-attempts items even if their fingerprint is unchanged). It does **not** change the staleness rule — use `stale_after=0` for that. | `false` |
|
|
86
86
|
|
|
@@ -228,9 +228,19 @@ intakes use. Never call Atlassian MCP or `acli` directly — go through `lisa:at
|
|
|
228
228
|
|
|
229
229
|
## Staleness model
|
|
230
230
|
|
|
231
|
-
An in-progress item (build `claimed`, PRD `in_review`) is **stalled**
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
An in-progress item (build `claimed`, PRD `in_review`) is **stalled** when the last
|
|
232
|
+
state-changing transition into the in-progress role, or the last human / PR-side forward-progress
|
|
233
|
+
activity after that transition, is older than the `stale_after` threshold. `blocked` items are NOT
|
|
234
|
+
gated on staleness — their repairability is judged on current blocker/answer state, not elapsed
|
|
235
|
+
time.
|
|
236
|
+
|
|
237
|
+
Automation self-comments are not forward progress and must not reset the staleness clock. Status
|
|
238
|
+
comments like `[claude-build-intake] PR remains open...`, `[codex-build-intake] Follow-up pushed...`,
|
|
239
|
+
or `[lisa-repair-intake] ...` may be useful audit notes, but they cannot make a claimed item fresh
|
|
240
|
+
forever. If a provider exposes a changelog/history surface, prefer the timestamp of the last
|
|
241
|
+
transition into the claimed/In-Progress role over the item's generic `updated` timestamp. When the
|
|
242
|
+
history surface is unavailable, ignore comments whose author/marker clearly belongs to Lisa or its
|
|
243
|
+
automation agents, and use the newest human comment/edit or PR-side progress event instead.
|
|
234
244
|
|
|
235
245
|
A build `claimed` leaf whose linked PR has **already merged** (`state == MERGED`) is likewise NOT
|
|
236
246
|
gated on staleness. A merged PR is a settled terminal state, not in-flight work: the only thing
|
|
@@ -254,17 +264,24 @@ decision tree step 0, and the dedicated high-confidence ordering bucket).
|
|
|
254
264
|
`stale_after=0` means "treat any in-progress item as stalled" — a manual full-recovery lever,
|
|
255
265
|
and the only way to resume work on a provider that exposes no reliable activity timestamp.
|
|
256
266
|
|
|
257
|
-
### Activity signal (
|
|
267
|
+
### Activity signal (state-change first, portable across vendors)
|
|
258
268
|
|
|
259
|
-
Compute the item's newest activity timestamp from the highest-priority signal the vendor
|
|
269
|
+
Compute the item's newest eligible activity timestamp from the highest-priority signal the vendor
|
|
260
270
|
exposes, and compare it to `now - stale_after`:
|
|
261
271
|
|
|
262
|
-
1. Provider-native
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
272
|
+
1. Provider-native status/label **transition** time into the in-progress role, when the provider
|
|
273
|
+
exposes it cleanly (JIRA changelog transition to `claimed` / In Progress, GitHub label event,
|
|
274
|
+
Linear state/label history, Notion/Confluence page move/status history).
|
|
275
|
+
2. Latest human lifecycle/progress **comment** or edit on the item (and, for Linear PRDs, the
|
|
276
|
+
sentinel feedback issue). Exclude automation self-comments and Lisa audit markers such as
|
|
277
|
+
`[claude-build-intake]`, `[codex-build-intake]`, `[lisa-build-intake]`, and
|
|
278
|
+
`[lisa-repair-intake]`.
|
|
279
|
+
3. For build items, latest **PR-side forward-progress activity** on the linked PR: newest commit,
|
|
280
|
+
review, check-run,
|
|
266
281
|
or PR comment.
|
|
267
|
-
4.
|
|
282
|
+
4. Provider-native item `updatedAt` / `last_edited_time` / `updated` only when the provider cannot
|
|
283
|
+
expose transition/comment authorship and the timestamp is not known to be driven by automation
|
|
284
|
+
self-comments.
|
|
268
285
|
|
|
269
286
|
If ANY of these is newer than the threshold, the item is **active** → record it as `active` and
|
|
270
287
|
skip it (read-only). For build `claimed`, an open PR with recent commits/checks is active. For
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.187.
|
|
3
|
+
"version": "2.187.2",
|
|
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.187.
|
|
3
|
+
"version": "2.187.2",
|
|
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.187.
|
|
3
|
+
"version": "2.187.2",
|
|
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.187.
|
|
3
|
+
"version": "2.187.2",
|
|
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.187.
|
|
3
|
+
"version": "2.187.2",
|
|
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"
|
|
@@ -369,7 +369,7 @@ documented defaults, so existing projects need no config change.
|
|
|
369
369
|
|
|
370
370
|
| Key | Required | Default | Notes |
|
|
371
371
|
|-----|----------|---------|-------|
|
|
372
|
-
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may
|
|
372
|
+
| `intake.repair.staleAfterHours` | no | `2` | How long an in-progress item (build `claimed`, PRD `in_review`) may sit after its last state-changing transition into the in-progress role, or after the last human / PR-side forward-progress activity, before repair-intake treats it as stalled and resumes it. Automation self-comments and Lisa audit notes do not reset this clock. `blocked` items are judged on blocker/answer state, not this threshold. Overridable per-run via `stale_after=<dur>` in `$ARGUMENTS` (which always wins). The same value is the default backoff window for loop-prevention notes. |
|
|
373
373
|
| `intake.repair.maxCandidates` | no | `100` | Upper bound on how many stuck items repair-intake enumerates while searching for the first actionable one. Bounds scan cost. Overridable per-run via `max_candidates=<n>`. |
|
|
374
374
|
|
|
375
375
|
### Monitor audit config (`monitor`)
|
|
@@ -263,9 +263,10 @@ function resolveRepairQueueArgument(config, source, tracker) {
|
|
|
263
263
|
return "github intake_mode=both";
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
const buildQueue = resolveBuildQueueArgument(config, tracker);
|
|
267
|
+
return buildQueue.includes("intake_mode=")
|
|
268
|
+
? buildQueue
|
|
269
|
+
: `${buildQueue} intake_mode=build`;
|
|
269
270
|
}
|
|
270
271
|
|
|
271
272
|
/**
|
|
@@ -80,7 +80,7 @@ lifecycle state with provider-native closure and rollup state.
|
|
|
80
80
|
|-------|---------|---------|
|
|
81
81
|
| `<queue>` | Same queue identifier `lisa:intake` accepts (see Source dispatch). Required. | — |
|
|
82
82
|
| `intake_mode` | `prd` \| `build` \| `both`. Only meaningful for a GitHub `org/repo` (or bare `github`) that hosts both PRD and build label namespaces. `both` is unique to repair — a repair sweep usefully covers both lifecycles in one schedule. Absent → `both` when both namespaces exist, else whichever lifecycle exists. | `both` for dual GitHub queues; otherwise infer |
|
|
83
|
-
| `stale_after` | How long
|
|
83
|
+
| `stale_after` | How long since the last state-changing transition into the in-progress role, or since the last human / PR-side forward-progress activity, before an in-progress item counts as stalled. Automation self-comments do not reset this clock. Accepts `24h`, `90m`, `2d`, or `0` (treat any in-progress item as stalled — manual recovery, also the only way to resume work on a provider that exposes no reliable timestamp). Overrides config. | `2h` |
|
|
84
84
|
| `max_candidates` | Cap on how many stuck/close-out candidates to enumerate and evaluate. Repair every materially actionable candidate within this bounded set, then stop. Overrides config. | `100` |
|
|
85
85
|
| `force` | `true` bypasses the loop-prevention backoff window (so a manual re-run re-attempts items even if their fingerprint is unchanged). It does **not** change the staleness rule — use `stale_after=0` for that. | `false` |
|
|
86
86
|
|
|
@@ -228,9 +228,19 @@ intakes use. Never call Atlassian MCP or `acli` directly — go through `lisa:at
|
|
|
228
228
|
|
|
229
229
|
## Staleness model
|
|
230
230
|
|
|
231
|
-
An in-progress item (build `claimed`, PRD `in_review`) is **stalled**
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
An in-progress item (build `claimed`, PRD `in_review`) is **stalled** when the last
|
|
232
|
+
state-changing transition into the in-progress role, or the last human / PR-side forward-progress
|
|
233
|
+
activity after that transition, is older than the `stale_after` threshold. `blocked` items are NOT
|
|
234
|
+
gated on staleness — their repairability is judged on current blocker/answer state, not elapsed
|
|
235
|
+
time.
|
|
236
|
+
|
|
237
|
+
Automation self-comments are not forward progress and must not reset the staleness clock. Status
|
|
238
|
+
comments like `[claude-build-intake] PR remains open...`, `[codex-build-intake] Follow-up pushed...`,
|
|
239
|
+
or `[lisa-repair-intake] ...` may be useful audit notes, but they cannot make a claimed item fresh
|
|
240
|
+
forever. If a provider exposes a changelog/history surface, prefer the timestamp of the last
|
|
241
|
+
transition into the claimed/In-Progress role over the item's generic `updated` timestamp. When the
|
|
242
|
+
history surface is unavailable, ignore comments whose author/marker clearly belongs to Lisa or its
|
|
243
|
+
automation agents, and use the newest human comment/edit or PR-side progress event instead.
|
|
234
244
|
|
|
235
245
|
A build `claimed` leaf whose linked PR has **already merged** (`state == MERGED`) is likewise NOT
|
|
236
246
|
gated on staleness. A merged PR is a settled terminal state, not in-flight work: the only thing
|
|
@@ -254,17 +264,24 @@ decision tree step 0, and the dedicated high-confidence ordering bucket).
|
|
|
254
264
|
`stale_after=0` means "treat any in-progress item as stalled" — a manual full-recovery lever,
|
|
255
265
|
and the only way to resume work on a provider that exposes no reliable activity timestamp.
|
|
256
266
|
|
|
257
|
-
### Activity signal (
|
|
267
|
+
### Activity signal (state-change first, portable across vendors)
|
|
258
268
|
|
|
259
|
-
Compute the item's newest activity timestamp from the highest-priority signal the vendor
|
|
269
|
+
Compute the item's newest eligible activity timestamp from the highest-priority signal the vendor
|
|
260
270
|
exposes, and compare it to `now - stale_after`:
|
|
261
271
|
|
|
262
|
-
1. Provider-native
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
272
|
+
1. Provider-native status/label **transition** time into the in-progress role, when the provider
|
|
273
|
+
exposes it cleanly (JIRA changelog transition to `claimed` / In Progress, GitHub label event,
|
|
274
|
+
Linear state/label history, Notion/Confluence page move/status history).
|
|
275
|
+
2. Latest human lifecycle/progress **comment** or edit on the item (and, for Linear PRDs, the
|
|
276
|
+
sentinel feedback issue). Exclude automation self-comments and Lisa audit markers such as
|
|
277
|
+
`[claude-build-intake]`, `[codex-build-intake]`, `[lisa-build-intake]`, and
|
|
278
|
+
`[lisa-repair-intake]`.
|
|
279
|
+
3. For build items, latest **PR-side forward-progress activity** on the linked PR: newest commit,
|
|
280
|
+
review, check-run,
|
|
266
281
|
or PR comment.
|
|
267
|
-
4.
|
|
282
|
+
4. Provider-native item `updatedAt` / `last_edited_time` / `updated` only when the provider cannot
|
|
283
|
+
expose transition/comment authorship and the timestamp is not known to be driven by automation
|
|
284
|
+
self-comments.
|
|
268
285
|
|
|
269
286
|
If ANY of these is newer than the threshold, the item is **active** → record it as `active` and
|
|
270
287
|
skip it (read-only). For build `claimed`, an open PR with recent commits/checks is active. For
|