@codyswann/lisa 4.27.6 → 4.27.8
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/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +507 -11
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +102 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/project-config-nightly-e2e.d.ts +21 -0
- package/dist/core/project-config-nightly-e2e.d.ts.map +1 -0
- package/dist/core/project-config-nightly-e2e.js +43 -0
- package/dist/core/project-config-nightly-e2e.js.map +1 -0
- package/dist/core/project-config.d.ts +4 -0
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +3 -0
- package/dist/core/project-config.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +56 -12
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/opencode/plugin-templates/lisa-block-direct-issue-create.ts +180 -19
- package/expo/create-only/.github/nightly-e2e-policy.json +16 -0
- package/expo/create-only/.github/workflows/nightly-e2e-health.yml +33 -8
- package/expo/create-only/.github/workflows/nightly-e2e-tracking.yml +30 -0
- package/package.json +3 -3
- 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 +10 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +18 -13
- package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +13 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +10 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +10 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +10 -6
- package/plugins/lisa/hooks/block-direct-issue-create.sh +507 -11
- package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +10 -6
- package/plugins/lisa/skills/lisa-intake/SKILL.md +18 -13
- package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +13 -7
- package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-monitor/SKILL.md +10 -6
- package/plugins/lisa/skills/lisa-project-ideation/SKILL.md +10 -6
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +10 -6
- package/plugins/lisa-agy/hooks/block-direct-issue-create.sh +507 -11
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +10 -6
- package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +18 -13
- package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +13 -7
- package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +10 -6
- package/plugins/lisa-agy/skills/lisa-project-ideation/SKILL.md +10 -6
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +10 -6
- 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/hooks/block-direct-issue-create.sh +507 -11
- package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +10 -6
- package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +18 -13
- package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +13 -7
- package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +10 -6
- package/plugins/lisa-copilot/skills/lisa-project-ideation/SKILL.md +10 -6
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +10 -6
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-direct-issue-create.sh +507 -11
- package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +10 -6
- package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +18 -13
- package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +13 -7
- package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +10 -6
- package/plugins/lisa-cursor/skills/lisa-project-ideation/SKILL.md +10 -6
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +10 -6
- 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/hooks/block-direct-issue-create.sh +507 -11
- package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +10 -6
- package/plugins/src/base/skills/lisa-intake/SKILL.md +18 -13
- package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +13 -7
- package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-monitor/SKILL.md +10 -6
- package/plugins/src/base/skills/lisa-project-ideation/SKILL.md +10 -6
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +10 -6
- package/scripts/two-channel-couplings.json +70 -5
- package/typescript/copy-overwrite/.prettierignore +7 -0
- package/typescript/copy-overwrite/scripts/nightly-e2e-provider-action.mjs +70 -0
- package/typescript/copy-overwrite/scripts/nightly-e2e-provider-github-jira.mjs +296 -0
- package/typescript/copy-overwrite/scripts/nightly-e2e-provider-linear-sentry.mjs +283 -0
- package/typescript/copy-overwrite/scripts/nightly-e2e-provider-support.mjs +55 -0
- package/typescript/copy-overwrite/scripts/nightly-e2e-tracking-config.mjs +149 -0
- package/typescript/copy-overwrite/scripts/reconcile-nightly-e2e-tracking-cli.mjs +56 -0
- package/typescript/copy-overwrite/scripts/reconcile-nightly-e2e-tracking.mjs +208 -0
|
@@ -145,33 +145,38 @@ Record **exactly one** outcome per invocation through the run-record CLI, naming
|
|
|
145
145
|
specific, actionable, e.g. `Scanned 12 ready items; nothing to propose.` for `nothing-needed`):
|
|
146
146
|
|
|
147
147
|
```bash
|
|
148
|
-
node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
|
|
148
|
+
node "${CLAUDE_PLUGIN_ROOT:-node_modules/@codyswann/lisa/plugins/lisa}/scripts/automation-run-record.mjs" \
|
|
149
149
|
--loop-id intake-tickets --outcome candidate-proposed \
|
|
150
150
|
--summary "Routed PRD #1810 to Blocked with clarifying questions; the run succeeded." \
|
|
151
151
|
--runbook .lisa/automations/intake-tickets.runbook.md [--ref <item-url>]...
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
**A dry build lane must say what it looked in.** A `nothing-needed` run on `intake-tickets`
|
|
155
|
-
additionally passes `--denominator` — the JSON from `buildIntakeDenominator()` in
|
|
156
|
-
`
|
|
157
|
-
|
|
158
|
-
pre-work rows, and every one of those
|
|
159
|
-
|
|
160
|
-
set is what turns the silent wrong
|
|
155
|
+
additionally passes `--denominator` — the JSON from `buildIntakeDenominator()` in the plugin
|
|
156
|
+
scripts directory's `intake-prework-denominator.mjs`, resolved exactly like the recorder below —
|
|
157
|
+
and the recorder **refuses the row without it**. This is not decoration: 31 consecutive cycles
|
|
158
|
+
reported a dry lane against a queue holding 61 unswept pre-work rows, and every one of those
|
|
159
|
+
records was honest. A missing row is noisy on inspection; a wrong denominator is silent forever
|
|
160
|
+
and looks exactly like a healthy dry queue. Stating the swept set is what turns the silent wrong
|
|
161
|
+
answer into an inspectable one (#2657).
|
|
161
162
|
|
|
162
163
|
```bash
|
|
163
|
-
node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
|
|
164
|
+
node "${CLAUDE_PLUGIN_ROOT:-node_modules/@codyswann/lisa/plugins/lisa}/scripts/automation-run-record.mjs" \
|
|
164
165
|
--loop-id intake-tickets --outcome nothing-needed \
|
|
165
166
|
--summary "Nothing ready to build on team ENG. Looked in every lane holding work that has not started — Backlog (20), Todo (17), Ready (2), Blocked (61) — 100 items checked out of 343 still open." \
|
|
166
167
|
--denominator "$DENOMINATOR_JSON" \
|
|
167
168
|
--runbook .lisa/automations/intake-tickets.runbook.md
|
|
168
169
|
```
|
|
169
170
|
|
|
170
|
-
|
|
171
|
-
`
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
171
|
+
The `:-` default in that command is load-bearing, not decoration. `CLAUDE_PLUGIN_ROOT` is **not
|
|
172
|
+
exported into an agent's Bash tool environment**, so the bare `"${CLAUDE_PLUGIN_ROOT}/scripts/…"`
|
|
173
|
+
form expands to an absolute `/scripts/…` and exits 1. The default names the installed package copy,
|
|
174
|
+
which resolves from the **consumer repository root** — which is where the recorder is actually
|
|
175
|
+
invoked. Never substitute a bare `plugins/lisa/scripts/…` or `plugins/src/base/scripts/…` path:
|
|
176
|
+
those are relative to the **Lisa package root**, not the repository you are standing in, and exit 1
|
|
177
|
+
from there. If recording still fails, **degrade, never abort** (per `automation-runbook-contract`):
|
|
178
|
+
note the recording failure in the run output and finish the cycle — a recording failure is a
|
|
179
|
+
degradation to report, never a reason to block the loop.
|
|
175
180
|
|
|
176
181
|
**Retirement evaluation (every run).** Both loop-ids this skill backs are **structural to the
|
|
177
182
|
factory — they do not retire.** Their runbooks say so plainly instead of leaving the Retirement
|
|
@@ -368,18 +368,24 @@ loop's runbook (the `--summary` is the operator-readable one-liner in the
|
|
|
368
368
|
contract's exemplar voice — plain, specific, actionable):
|
|
369
369
|
|
|
370
370
|
```bash
|
|
371
|
-
node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
|
|
371
|
+
node "${CLAUDE_PLUGIN_ROOT:-node_modules/@codyswann/lisa/plugins/lisa}/scripts/automation-run-record.mjs" \
|
|
372
372
|
--loop-id learnings-audit --outcome candidate-proposed \
|
|
373
373
|
--summary "Proposed 2 promotions and 1 batch confirm; awaiting your flip to ready." \
|
|
374
374
|
--runbook .lisa/automations/learnings-audit.runbook.md [--ref <ticket-url>]...
|
|
375
375
|
```
|
|
376
376
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
the
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
377
|
+
The `:-` default in that command is load-bearing, not decoration.
|
|
378
|
+
`CLAUDE_PLUGIN_ROOT` is **not exported into an agent's Bash tool
|
|
379
|
+
environment**, so the bare `"${CLAUDE_PLUGIN_ROOT}/scripts/…"` form expands
|
|
380
|
+
to an absolute `/scripts/…` and exits 1. The default names the installed
|
|
381
|
+
package copy, which resolves from the **consumer repository root** — which
|
|
382
|
+
is where the recorder is actually invoked. Never substitute a bare
|
|
383
|
+
`plugins/lisa/scripts/…` or `plugins/src/base/scripts/…` path: those are
|
|
384
|
+
relative to the **Lisa package root**, not the repository you are standing
|
|
385
|
+
in, and exit 1 from there. If recording still fails, **degrade, never
|
|
386
|
+
abort** (per `automation-runbook-contract`): note the recording failure in
|
|
387
|
+
the run output and finish the run — a recording failure is a degradation to
|
|
388
|
+
report, never a reason to block the loop.
|
|
383
389
|
|
|
384
390
|
## Retirement condition
|
|
385
391
|
|
|
@@ -140,13 +140,15 @@ Build the denominator with the shared helper, which owns the type vocabulary so
|
|
|
140
140
|
|
|
141
141
|
```bash
|
|
142
142
|
node -e '
|
|
143
|
-
import("'"${CLAUDE_PLUGIN_ROOT
|
|
143
|
+
import("'"${CLAUDE_PLUGIN_ROOT:-./node_modules/@codyswann/lisa/plugins/lisa}"'/scripts/intake-prework-denominator.mjs").then(m => {
|
|
144
144
|
const d = m.buildIntakeDenominator({ lanes: JSON.parse(process.argv[1]), totalOpen: Number(process.argv[2]) });
|
|
145
145
|
console.log(JSON.stringify(d));
|
|
146
146
|
console.log(m.summarizeDryLane(d, { queue: process.argv[3] }));
|
|
147
147
|
});' "$LANES_JSON" "$TOTAL_OPEN" "team $TEAM_KEY"
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
+
The `./` on that default is load-bearing and is not the same as the recorder's. `import()` reads a bare `node_modules/…` as a **package specifier** named `node_modules` and fails with `ERR_MODULE_NOT_FOUND: Cannot find package 'node_modules'`; only `./`, `../`, `/` or a `file:` URL is a path. A `node <path>` command line has no such rule, which is why the run-recorder default alongside this one carries no `./`.
|
|
151
|
+
|
|
150
152
|
`$LANES_JSON` is `[{"name":"<state>","type":"<state.type>","position":<state.position>,"count":<open rows>}, …]` for **every** state on the team, pre-work and not — the helper does the selecting.
|
|
151
153
|
|
|
152
154
|
**Candidate order.** Work `$READY` first (it is the human-flipped signal), then the remaining pre-work lanes oldest-first. Every candidate outside `$READY` must clear Phase 2.5 before it is treated as a candidate at all.
|
|
@@ -171,17 +171,21 @@ plain, specific, actionable, e.g. `Health green; audit clean — nothing to prop
|
|
|
171
171
|
unreachable during the decline check — restore credentials; nothing was filed this run.`):
|
|
172
172
|
|
|
173
173
|
```bash
|
|
174
|
-
node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
|
|
174
|
+
node "${CLAUDE_PLUGIN_ROOT:-node_modules/@codyswann/lisa/plugins/lisa}/scripts/automation-run-record.mjs" \
|
|
175
175
|
--loop-id monitor --outcome candidate-proposed \
|
|
176
176
|
--summary "Filed #1810 for the p99 latency spike; awaiting your flip to ready." \
|
|
177
177
|
--runbook .lisa/automations/monitor.runbook.md [--ref <ticket-url>]...
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
-
|
|
181
|
-
`
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
180
|
+
The `:-` default in that command is load-bearing, not decoration. `CLAUDE_PLUGIN_ROOT` is **not
|
|
181
|
+
exported into an agent's Bash tool environment**, so the bare `"${CLAUDE_PLUGIN_ROOT}/scripts/…"`
|
|
182
|
+
form expands to an absolute `/scripts/…` and exits 1. The default names the installed package copy,
|
|
183
|
+
which resolves from the **consumer repository root** — which is where the recorder is actually
|
|
184
|
+
invoked. Never substitute a bare `plugins/lisa/scripts/…` or `plugins/src/base/scripts/…` path:
|
|
185
|
+
those are relative to the **Lisa package root**, not the repository you are standing in, and exit 1
|
|
186
|
+
from there. If recording still fails, **degrade, never abort** (per `automation-runbook-contract`):
|
|
187
|
+
note the recording failure in the run output and finish the cycle — a recording failure is a
|
|
188
|
+
degradation to report, never a reason to block the loop.
|
|
185
189
|
|
|
186
190
|
**Retirement evaluation (every run).** Evaluate this loop's runbook **Retirement condition** on
|
|
187
191
|
every standalone run, exactly as the `automation-runbook-contract` rule's Retirement section defines
|
|
@@ -321,17 +321,21 @@ propose.` for `nothing-needed`; and for a `recovery-required` from an unreadable
|
|
|
321
321
|
`Tracker unreachable during the decline check — restore credentials; nothing was filed this run.`):
|
|
322
322
|
|
|
323
323
|
```bash
|
|
324
|
-
node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
|
|
324
|
+
node "${CLAUDE_PLUGIN_ROOT:-node_modules/@codyswann/lisa/plugins/lisa}/scripts/automation-run-record.mjs" \
|
|
325
325
|
--loop-id exploratory-prds --outcome candidate-proposed \
|
|
326
326
|
--summary "Created PRD #1810 for offline export; awaiting your flip to ready." \
|
|
327
327
|
--runbook .lisa/automations/exploratory-prds.runbook.md [--ref <prd-url>]...
|
|
328
328
|
```
|
|
329
329
|
|
|
330
|
-
|
|
331
|
-
`
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
330
|
+
The `:-` default in that command is load-bearing, not decoration. `CLAUDE_PLUGIN_ROOT` is **not
|
|
331
|
+
exported into an agent's Bash tool environment**, so the bare `"${CLAUDE_PLUGIN_ROOT}/scripts/…"`
|
|
332
|
+
form expands to an absolute `/scripts/…` and exits 1. The default names the installed package copy,
|
|
333
|
+
which resolves from the **consumer repository root** — which is where the recorder is actually
|
|
334
|
+
invoked. Never substitute a bare `plugins/lisa/scripts/…` or `plugins/src/base/scripts/…` path:
|
|
335
|
+
those are relative to the **Lisa package root**, not the repository you are standing in, and exit 1
|
|
336
|
+
from there. If recording still fails, **degrade, never abort** (per `automation-runbook-contract`):
|
|
337
|
+
note the recording failure in the run output and finish the run — a recording failure is a
|
|
338
|
+
degradation to report, never a reason to block the loop.
|
|
335
339
|
|
|
336
340
|
**Retirement evaluation (every run).** Evaluate this loop's runbook **Retirement condition** on
|
|
337
341
|
every run, exactly as the `automation-runbook-contract` rule's Retirement section defines it — this
|
|
@@ -1218,17 +1218,21 @@ specific, actionable, e.g. `Examined 14 items; all active or in backoff — noth
|
|
|
1218
1218
|
`nothing-needed`):
|
|
1219
1219
|
|
|
1220
1220
|
```bash
|
|
1221
|
-
node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
|
|
1221
|
+
node "${CLAUDE_PLUGIN_ROOT:-node_modules/@codyswann/lisa/plugins/lisa}/scripts/automation-run-record.mjs" \
|
|
1222
1222
|
--loop-id intake-repair --outcome change-proved \
|
|
1223
1223
|
--summary "Recovered 3 stalled builds and closed out 2 rollups; all confirmed." \
|
|
1224
1224
|
--runbook .lisa/automations/intake-repair.runbook.md [--ref <item-url>]...
|
|
1225
1225
|
```
|
|
1226
1226
|
|
|
1227
|
-
|
|
1228
|
-
`
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1227
|
+
The `:-` default in that command is load-bearing, not decoration. `CLAUDE_PLUGIN_ROOT` is **not
|
|
1228
|
+
exported into an agent's Bash tool environment**, so the bare `"${CLAUDE_PLUGIN_ROOT}/scripts/…"`
|
|
1229
|
+
form expands to an absolute `/scripts/…` and exits 1. The default names the installed package copy,
|
|
1230
|
+
which resolves from the **consumer repository root** — which is where the recorder is actually
|
|
1231
|
+
invoked. Never substitute a bare `plugins/lisa/scripts/…` or `plugins/src/base/scripts/…` path:
|
|
1232
|
+
those are relative to the **Lisa package root**, not the repository you are standing in, and exit 1
|
|
1233
|
+
from there. If recording still fails, **degrade, never abort** (per `automation-runbook-contract`):
|
|
1234
|
+
note the recording failure in the run output and finish the cycle — a recording failure is a
|
|
1235
|
+
degradation to report, never a reason to block the loop.
|
|
1232
1236
|
|
|
1233
1237
|
**Retirement evaluation (every run).** The `intake-repair` loop is **structural to the
|
|
1234
1238
|
factory — it does not retire.** Its runbook says so plainly instead of leaving the Retirement
|