@codyswann/lisa 2.200.0 → 2.201.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/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-doctor/SKILL.md +56 -0
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +56 -0
- 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/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +56 -0
- 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/skills/lisa-doctor/SKILL.md +56 -0
package/package.json
CHANGED
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"ws": ">=8.20.1"
|
|
96
96
|
},
|
|
97
97
|
"name": "@codyswann/lisa",
|
|
98
|
-
"version": "2.
|
|
98
|
+
"version": "2.201.0",
|
|
99
99
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
100
100
|
"main": "dist/index.js",
|
|
101
101
|
"exports": {
|
|
@@ -291,6 +291,62 @@ without turning the base doctor into a second `lisa-wiki-doctor`.
|
|
|
291
291
|
- Never require a wiki plugin surface when `wiki/` is absent.
|
|
292
292
|
- Never let wiki-specific checks downgrade unrelated non-wiki repositories.
|
|
293
293
|
|
|
294
|
+
### Upstream Lisa change-history diagnosis
|
|
295
|
+
|
|
296
|
+
A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
|
|
297
|
+
upstream** since this project last updated. Doctor must distinguish them instead of blaming the
|
|
298
|
+
project by default. Whenever findings need explanation — and always before proposing repairs —
|
|
299
|
+
pull Lisa's own git history and read what actually changed:
|
|
300
|
+
|
|
301
|
+
1. **Resolve the version window.** Determine the project's installed Lisa version (the
|
|
302
|
+
`@codyswann/lisa` entry in `package.json`/lockfile, or the plugin version stamp on the active
|
|
303
|
+
runtime) and the latest published version (`npm view @codyswann/lisa version`, or the update
|
|
304
|
+
check's cached result).
|
|
305
|
+
2. **Pull the upstream history for that window** (read-only; no clone required when `gh` is
|
|
306
|
+
available):
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
gh api "repos/CodySwannGT/lisa/compare/v<installed>...v<latest>" \
|
|
310
|
+
--paginate --slurp \
|
|
311
|
+
--jq '{total_commits: .[0].total_commits, files: [.[0].files[]?.filename], commits: [.[].commits[]? | .commit.message | split("\n")[0]]}'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`--paginate` fetches every page of commits, and `--slurp` gathers those pages into a single
|
|
315
|
+
array before `--jq` runs — without `--slurp`, `--jq` applies per page and prints one JSON object
|
|
316
|
+
per page instead of one merged result. `total_commits` and `files` only need the first page
|
|
317
|
+
(files are capped at 300 and not repeated on later pages); `commits` flattens across all pages.
|
|
318
|
+
|
|
319
|
+
The compare endpoint paginates commits (250 without `--paginate`) and only lists changed files
|
|
320
|
+
on the first page, capped at 300 total — a large version window can silently drop commits or
|
|
321
|
+
files. If `total_commits` or the file count looks truncated, re-run with the
|
|
322
|
+
`application/vnd.github.diff` accept header (`gh api ... -H "Accept: application/vnd.github.diff"`)
|
|
323
|
+
to pull the full patch text, or fall back to the shallow-clone `git log` below. When completeness
|
|
324
|
+
still can't be established, say so in the finding and mark it `WARN` rather than attributing
|
|
325
|
+
drift with unverified confidence.
|
|
326
|
+
|
|
327
|
+
Fallbacks, in order: `gh api repos/CodySwannGT/lisa/commits?path=<template-path>` for a
|
|
328
|
+
path-scoped view — note this endpoint has no way to bound results to the `v<installed>..v<latest>`
|
|
329
|
+
window, so treat its output as best-effort context only, not authoritative attribution; a shallow
|
|
330
|
+
clone (`git clone --filter=blob:none --no-checkout` then `git log v<installed>..v<latest> --
|
|
331
|
+
<paths>`), which *is* bounded to the window and should be preferred for definitive attribution; or
|
|
332
|
+
the local marketplace/plugin cache checkout when the runtime has one. If none are reachable, or
|
|
333
|
+
only the unbounded path-scoped fallback is reachable, report the gap as a `WARN`-level
|
|
334
|
+
observability note — never fail the audit because history was unavailable or incomplete.
|
|
335
|
+
3. **Scope the reading to what the finding touches.** Filter the commit list to the paths that
|
|
336
|
+
generate the failing surface: the detected stacks' template dirs (`typescript/`, `expo/`, …),
|
|
337
|
+
`plugins/src/base/` for skills/hooks/rules, `scripts/` for governance scripts, and the shipped
|
|
338
|
+
config factories (`src/configs/`). A finding about a lint rule failure reads the lint-config
|
|
339
|
+
commits, not the whole log.
|
|
340
|
+
4. **Attribute the finding.** When the upstream history shows Lisa changed the contract (a
|
|
341
|
+
tightened lint rule, a renamed check context, a new required config key), say so in `Observed:`
|
|
342
|
+
with the commit subject/version, and let `Remediation:` point at the sanctioned adoption path
|
|
343
|
+
(e.g. `lisa update` + re-apply, a documented config opt-out) rather than hand-editing managed
|
|
344
|
+
files. When history shows no relevant upstream change, the project drifted — remediate on the
|
|
345
|
+
project side.
|
|
346
|
+
|
|
347
|
+
This history pull is part of doctor's read-only contract: it reads Lisa's repository, never writes
|
|
348
|
+
to it, and repair suggestions stay suggestions.
|
|
349
|
+
|
|
294
350
|
## Output contract
|
|
295
351
|
|
|
296
352
|
The final report must:
|
|
@@ -291,6 +291,62 @@ without turning the base doctor into a second `lisa-wiki-doctor`.
|
|
|
291
291
|
- Never require a wiki plugin surface when `wiki/` is absent.
|
|
292
292
|
- Never let wiki-specific checks downgrade unrelated non-wiki repositories.
|
|
293
293
|
|
|
294
|
+
### Upstream Lisa change-history diagnosis
|
|
295
|
+
|
|
296
|
+
A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
|
|
297
|
+
upstream** since this project last updated. Doctor must distinguish them instead of blaming the
|
|
298
|
+
project by default. Whenever findings need explanation — and always before proposing repairs —
|
|
299
|
+
pull Lisa's own git history and read what actually changed:
|
|
300
|
+
|
|
301
|
+
1. **Resolve the version window.** Determine the project's installed Lisa version (the
|
|
302
|
+
`@codyswann/lisa` entry in `package.json`/lockfile, or the plugin version stamp on the active
|
|
303
|
+
runtime) and the latest published version (`npm view @codyswann/lisa version`, or the update
|
|
304
|
+
check's cached result).
|
|
305
|
+
2. **Pull the upstream history for that window** (read-only; no clone required when `gh` is
|
|
306
|
+
available):
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
gh api "repos/CodySwannGT/lisa/compare/v<installed>...v<latest>" \
|
|
310
|
+
--paginate --slurp \
|
|
311
|
+
--jq '{total_commits: .[0].total_commits, files: [.[0].files[]?.filename], commits: [.[].commits[]? | .commit.message | split("\n")[0]]}'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`--paginate` fetches every page of commits, and `--slurp` gathers those pages into a single
|
|
315
|
+
array before `--jq` runs — without `--slurp`, `--jq` applies per page and prints one JSON object
|
|
316
|
+
per page instead of one merged result. `total_commits` and `files` only need the first page
|
|
317
|
+
(files are capped at 300 and not repeated on later pages); `commits` flattens across all pages.
|
|
318
|
+
|
|
319
|
+
The compare endpoint paginates commits (250 without `--paginate`) and only lists changed files
|
|
320
|
+
on the first page, capped at 300 total — a large version window can silently drop commits or
|
|
321
|
+
files. If `total_commits` or the file count looks truncated, re-run with the
|
|
322
|
+
`application/vnd.github.diff` accept header (`gh api ... -H "Accept: application/vnd.github.diff"`)
|
|
323
|
+
to pull the full patch text, or fall back to the shallow-clone `git log` below. When completeness
|
|
324
|
+
still can't be established, say so in the finding and mark it `WARN` rather than attributing
|
|
325
|
+
drift with unverified confidence.
|
|
326
|
+
|
|
327
|
+
Fallbacks, in order: `gh api repos/CodySwannGT/lisa/commits?path=<template-path>` for a
|
|
328
|
+
path-scoped view — note this endpoint has no way to bound results to the `v<installed>..v<latest>`
|
|
329
|
+
window, so treat its output as best-effort context only, not authoritative attribution; a shallow
|
|
330
|
+
clone (`git clone --filter=blob:none --no-checkout` then `git log v<installed>..v<latest> --
|
|
331
|
+
<paths>`), which *is* bounded to the window and should be preferred for definitive attribution; or
|
|
332
|
+
the local marketplace/plugin cache checkout when the runtime has one. If none are reachable, or
|
|
333
|
+
only the unbounded path-scoped fallback is reachable, report the gap as a `WARN`-level
|
|
334
|
+
observability note — never fail the audit because history was unavailable or incomplete.
|
|
335
|
+
3. **Scope the reading to what the finding touches.** Filter the commit list to the paths that
|
|
336
|
+
generate the failing surface: the detected stacks' template dirs (`typescript/`, `expo/`, …),
|
|
337
|
+
`plugins/src/base/` for skills/hooks/rules, `scripts/` for governance scripts, and the shipped
|
|
338
|
+
config factories (`src/configs/`). A finding about a lint rule failure reads the lint-config
|
|
339
|
+
commits, not the whole log.
|
|
340
|
+
4. **Attribute the finding.** When the upstream history shows Lisa changed the contract (a
|
|
341
|
+
tightened lint rule, a renamed check context, a new required config key), say so in `Observed:`
|
|
342
|
+
with the commit subject/version, and let `Remediation:` point at the sanctioned adoption path
|
|
343
|
+
(e.g. `lisa update` + re-apply, a documented config opt-out) rather than hand-editing managed
|
|
344
|
+
files. When history shows no relevant upstream change, the project drifted — remediate on the
|
|
345
|
+
project side.
|
|
346
|
+
|
|
347
|
+
This history pull is part of doctor's read-only contract: it reads Lisa's repository, never writes
|
|
348
|
+
to it, and repair suggestions stay suggestions.
|
|
349
|
+
|
|
294
350
|
## Output contract
|
|
295
351
|
|
|
296
352
|
The final report must:
|
|
@@ -291,6 +291,62 @@ without turning the base doctor into a second `lisa-wiki-doctor`.
|
|
|
291
291
|
- Never require a wiki plugin surface when `wiki/` is absent.
|
|
292
292
|
- Never let wiki-specific checks downgrade unrelated non-wiki repositories.
|
|
293
293
|
|
|
294
|
+
### Upstream Lisa change-history diagnosis
|
|
295
|
+
|
|
296
|
+
A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
|
|
297
|
+
upstream** since this project last updated. Doctor must distinguish them instead of blaming the
|
|
298
|
+
project by default. Whenever findings need explanation — and always before proposing repairs —
|
|
299
|
+
pull Lisa's own git history and read what actually changed:
|
|
300
|
+
|
|
301
|
+
1. **Resolve the version window.** Determine the project's installed Lisa version (the
|
|
302
|
+
`@codyswann/lisa` entry in `package.json`/lockfile, or the plugin version stamp on the active
|
|
303
|
+
runtime) and the latest published version (`npm view @codyswann/lisa version`, or the update
|
|
304
|
+
check's cached result).
|
|
305
|
+
2. **Pull the upstream history for that window** (read-only; no clone required when `gh` is
|
|
306
|
+
available):
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
gh api "repos/CodySwannGT/lisa/compare/v<installed>...v<latest>" \
|
|
310
|
+
--paginate --slurp \
|
|
311
|
+
--jq '{total_commits: .[0].total_commits, files: [.[0].files[]?.filename], commits: [.[].commits[]? | .commit.message | split("\n")[0]]}'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`--paginate` fetches every page of commits, and `--slurp` gathers those pages into a single
|
|
315
|
+
array before `--jq` runs — without `--slurp`, `--jq` applies per page and prints one JSON object
|
|
316
|
+
per page instead of one merged result. `total_commits` and `files` only need the first page
|
|
317
|
+
(files are capped at 300 and not repeated on later pages); `commits` flattens across all pages.
|
|
318
|
+
|
|
319
|
+
The compare endpoint paginates commits (250 without `--paginate`) and only lists changed files
|
|
320
|
+
on the first page, capped at 300 total — a large version window can silently drop commits or
|
|
321
|
+
files. If `total_commits` or the file count looks truncated, re-run with the
|
|
322
|
+
`application/vnd.github.diff` accept header (`gh api ... -H "Accept: application/vnd.github.diff"`)
|
|
323
|
+
to pull the full patch text, or fall back to the shallow-clone `git log` below. When completeness
|
|
324
|
+
still can't be established, say so in the finding and mark it `WARN` rather than attributing
|
|
325
|
+
drift with unverified confidence.
|
|
326
|
+
|
|
327
|
+
Fallbacks, in order: `gh api repos/CodySwannGT/lisa/commits?path=<template-path>` for a
|
|
328
|
+
path-scoped view — note this endpoint has no way to bound results to the `v<installed>..v<latest>`
|
|
329
|
+
window, so treat its output as best-effort context only, not authoritative attribution; a shallow
|
|
330
|
+
clone (`git clone --filter=blob:none --no-checkout` then `git log v<installed>..v<latest> --
|
|
331
|
+
<paths>`), which *is* bounded to the window and should be preferred for definitive attribution; or
|
|
332
|
+
the local marketplace/plugin cache checkout when the runtime has one. If none are reachable, or
|
|
333
|
+
only the unbounded path-scoped fallback is reachable, report the gap as a `WARN`-level
|
|
334
|
+
observability note — never fail the audit because history was unavailable or incomplete.
|
|
335
|
+
3. **Scope the reading to what the finding touches.** Filter the commit list to the paths that
|
|
336
|
+
generate the failing surface: the detected stacks' template dirs (`typescript/`, `expo/`, …),
|
|
337
|
+
`plugins/src/base/` for skills/hooks/rules, `scripts/` for governance scripts, and the shipped
|
|
338
|
+
config factories (`src/configs/`). A finding about a lint rule failure reads the lint-config
|
|
339
|
+
commits, not the whole log.
|
|
340
|
+
4. **Attribute the finding.** When the upstream history shows Lisa changed the contract (a
|
|
341
|
+
tightened lint rule, a renamed check context, a new required config key), say so in `Observed:`
|
|
342
|
+
with the commit subject/version, and let `Remediation:` point at the sanctioned adoption path
|
|
343
|
+
(e.g. `lisa update` + re-apply, a documented config opt-out) rather than hand-editing managed
|
|
344
|
+
files. When history shows no relevant upstream change, the project drifted — remediate on the
|
|
345
|
+
project side.
|
|
346
|
+
|
|
347
|
+
This history pull is part of doctor's read-only contract: it reads Lisa's repository, never writes
|
|
348
|
+
to it, and repair suggestions stay suggestions.
|
|
349
|
+
|
|
294
350
|
## Output contract
|
|
295
351
|
|
|
296
352
|
The final report must:
|
|
@@ -291,6 +291,62 @@ without turning the base doctor into a second `lisa-wiki-doctor`.
|
|
|
291
291
|
- Never require a wiki plugin surface when `wiki/` is absent.
|
|
292
292
|
- Never let wiki-specific checks downgrade unrelated non-wiki repositories.
|
|
293
293
|
|
|
294
|
+
### Upstream Lisa change-history diagnosis
|
|
295
|
+
|
|
296
|
+
A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
|
|
297
|
+
upstream** since this project last updated. Doctor must distinguish them instead of blaming the
|
|
298
|
+
project by default. Whenever findings need explanation — and always before proposing repairs —
|
|
299
|
+
pull Lisa's own git history and read what actually changed:
|
|
300
|
+
|
|
301
|
+
1. **Resolve the version window.** Determine the project's installed Lisa version (the
|
|
302
|
+
`@codyswann/lisa` entry in `package.json`/lockfile, or the plugin version stamp on the active
|
|
303
|
+
runtime) and the latest published version (`npm view @codyswann/lisa version`, or the update
|
|
304
|
+
check's cached result).
|
|
305
|
+
2. **Pull the upstream history for that window** (read-only; no clone required when `gh` is
|
|
306
|
+
available):
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
gh api "repos/CodySwannGT/lisa/compare/v<installed>...v<latest>" \
|
|
310
|
+
--paginate --slurp \
|
|
311
|
+
--jq '{total_commits: .[0].total_commits, files: [.[0].files[]?.filename], commits: [.[].commits[]? | .commit.message | split("\n")[0]]}'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`--paginate` fetches every page of commits, and `--slurp` gathers those pages into a single
|
|
315
|
+
array before `--jq` runs — without `--slurp`, `--jq` applies per page and prints one JSON object
|
|
316
|
+
per page instead of one merged result. `total_commits` and `files` only need the first page
|
|
317
|
+
(files are capped at 300 and not repeated on later pages); `commits` flattens across all pages.
|
|
318
|
+
|
|
319
|
+
The compare endpoint paginates commits (250 without `--paginate`) and only lists changed files
|
|
320
|
+
on the first page, capped at 300 total — a large version window can silently drop commits or
|
|
321
|
+
files. If `total_commits` or the file count looks truncated, re-run with the
|
|
322
|
+
`application/vnd.github.diff` accept header (`gh api ... -H "Accept: application/vnd.github.diff"`)
|
|
323
|
+
to pull the full patch text, or fall back to the shallow-clone `git log` below. When completeness
|
|
324
|
+
still can't be established, say so in the finding and mark it `WARN` rather than attributing
|
|
325
|
+
drift with unverified confidence.
|
|
326
|
+
|
|
327
|
+
Fallbacks, in order: `gh api repos/CodySwannGT/lisa/commits?path=<template-path>` for a
|
|
328
|
+
path-scoped view — note this endpoint has no way to bound results to the `v<installed>..v<latest>`
|
|
329
|
+
window, so treat its output as best-effort context only, not authoritative attribution; a shallow
|
|
330
|
+
clone (`git clone --filter=blob:none --no-checkout` then `git log v<installed>..v<latest> --
|
|
331
|
+
<paths>`), which *is* bounded to the window and should be preferred for definitive attribution; or
|
|
332
|
+
the local marketplace/plugin cache checkout when the runtime has one. If none are reachable, or
|
|
333
|
+
only the unbounded path-scoped fallback is reachable, report the gap as a `WARN`-level
|
|
334
|
+
observability note — never fail the audit because history was unavailable or incomplete.
|
|
335
|
+
3. **Scope the reading to what the finding touches.** Filter the commit list to the paths that
|
|
336
|
+
generate the failing surface: the detected stacks' template dirs (`typescript/`, `expo/`, …),
|
|
337
|
+
`plugins/src/base/` for skills/hooks/rules, `scripts/` for governance scripts, and the shipped
|
|
338
|
+
config factories (`src/configs/`). A finding about a lint rule failure reads the lint-config
|
|
339
|
+
commits, not the whole log.
|
|
340
|
+
4. **Attribute the finding.** When the upstream history shows Lisa changed the contract (a
|
|
341
|
+
tightened lint rule, a renamed check context, a new required config key), say so in `Observed:`
|
|
342
|
+
with the commit subject/version, and let `Remediation:` point at the sanctioned adoption path
|
|
343
|
+
(e.g. `lisa update` + re-apply, a documented config opt-out) rather than hand-editing managed
|
|
344
|
+
files. When history shows no relevant upstream change, the project drifted — remediate on the
|
|
345
|
+
project side.
|
|
346
|
+
|
|
347
|
+
This history pull is part of doctor's read-only contract: it reads Lisa's repository, never writes
|
|
348
|
+
to it, and repair suggestions stay suggestions.
|
|
349
|
+
|
|
294
350
|
## Output contract
|
|
295
351
|
|
|
296
352
|
The final report must:
|
|
@@ -291,6 +291,62 @@ without turning the base doctor into a second `lisa-wiki-doctor`.
|
|
|
291
291
|
- Never require a wiki plugin surface when `wiki/` is absent.
|
|
292
292
|
- Never let wiki-specific checks downgrade unrelated non-wiki repositories.
|
|
293
293
|
|
|
294
|
+
### Upstream Lisa change-history diagnosis
|
|
295
|
+
|
|
296
|
+
A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
|
|
297
|
+
upstream** since this project last updated. Doctor must distinguish them instead of blaming the
|
|
298
|
+
project by default. Whenever findings need explanation — and always before proposing repairs —
|
|
299
|
+
pull Lisa's own git history and read what actually changed:
|
|
300
|
+
|
|
301
|
+
1. **Resolve the version window.** Determine the project's installed Lisa version (the
|
|
302
|
+
`@codyswann/lisa` entry in `package.json`/lockfile, or the plugin version stamp on the active
|
|
303
|
+
runtime) and the latest published version (`npm view @codyswann/lisa version`, or the update
|
|
304
|
+
check's cached result).
|
|
305
|
+
2. **Pull the upstream history for that window** (read-only; no clone required when `gh` is
|
|
306
|
+
available):
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
gh api "repos/CodySwannGT/lisa/compare/v<installed>...v<latest>" \
|
|
310
|
+
--paginate --slurp \
|
|
311
|
+
--jq '{total_commits: .[0].total_commits, files: [.[0].files[]?.filename], commits: [.[].commits[]? | .commit.message | split("\n")[0]]}'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`--paginate` fetches every page of commits, and `--slurp` gathers those pages into a single
|
|
315
|
+
array before `--jq` runs — without `--slurp`, `--jq` applies per page and prints one JSON object
|
|
316
|
+
per page instead of one merged result. `total_commits` and `files` only need the first page
|
|
317
|
+
(files are capped at 300 and not repeated on later pages); `commits` flattens across all pages.
|
|
318
|
+
|
|
319
|
+
The compare endpoint paginates commits (250 without `--paginate`) and only lists changed files
|
|
320
|
+
on the first page, capped at 300 total — a large version window can silently drop commits or
|
|
321
|
+
files. If `total_commits` or the file count looks truncated, re-run with the
|
|
322
|
+
`application/vnd.github.diff` accept header (`gh api ... -H "Accept: application/vnd.github.diff"`)
|
|
323
|
+
to pull the full patch text, or fall back to the shallow-clone `git log` below. When completeness
|
|
324
|
+
still can't be established, say so in the finding and mark it `WARN` rather than attributing
|
|
325
|
+
drift with unverified confidence.
|
|
326
|
+
|
|
327
|
+
Fallbacks, in order: `gh api repos/CodySwannGT/lisa/commits?path=<template-path>` for a
|
|
328
|
+
path-scoped view — note this endpoint has no way to bound results to the `v<installed>..v<latest>`
|
|
329
|
+
window, so treat its output as best-effort context only, not authoritative attribution; a shallow
|
|
330
|
+
clone (`git clone --filter=blob:none --no-checkout` then `git log v<installed>..v<latest> --
|
|
331
|
+
<paths>`), which *is* bounded to the window and should be preferred for definitive attribution; or
|
|
332
|
+
the local marketplace/plugin cache checkout when the runtime has one. If none are reachable, or
|
|
333
|
+
only the unbounded path-scoped fallback is reachable, report the gap as a `WARN`-level
|
|
334
|
+
observability note — never fail the audit because history was unavailable or incomplete.
|
|
335
|
+
3. **Scope the reading to what the finding touches.** Filter the commit list to the paths that
|
|
336
|
+
generate the failing surface: the detected stacks' template dirs (`typescript/`, `expo/`, …),
|
|
337
|
+
`plugins/src/base/` for skills/hooks/rules, `scripts/` for governance scripts, and the shipped
|
|
338
|
+
config factories (`src/configs/`). A finding about a lint rule failure reads the lint-config
|
|
339
|
+
commits, not the whole log.
|
|
340
|
+
4. **Attribute the finding.** When the upstream history shows Lisa changed the contract (a
|
|
341
|
+
tightened lint rule, a renamed check context, a new required config key), say so in `Observed:`
|
|
342
|
+
with the commit subject/version, and let `Remediation:` point at the sanctioned adoption path
|
|
343
|
+
(e.g. `lisa update` + re-apply, a documented config opt-out) rather than hand-editing managed
|
|
344
|
+
files. When history shows no relevant upstream change, the project drifted — remediate on the
|
|
345
|
+
project side.
|
|
346
|
+
|
|
347
|
+
This history pull is part of doctor's read-only contract: it reads Lisa's repository, never writes
|
|
348
|
+
to it, and repair suggestions stay suggestions.
|
|
349
|
+
|
|
294
350
|
## Output contract
|
|
295
351
|
|
|
296
352
|
The final report must:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.201.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.201.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.201.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.201.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.201.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"
|
|
@@ -291,6 +291,62 @@ without turning the base doctor into a second `lisa-wiki-doctor`.
|
|
|
291
291
|
- Never require a wiki plugin surface when `wiki/` is absent.
|
|
292
292
|
- Never let wiki-specific checks downgrade unrelated non-wiki repositories.
|
|
293
293
|
|
|
294
|
+
### Upstream Lisa change-history diagnosis
|
|
295
|
+
|
|
296
|
+
A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
|
|
297
|
+
upstream** since this project last updated. Doctor must distinguish them instead of blaming the
|
|
298
|
+
project by default. Whenever findings need explanation — and always before proposing repairs —
|
|
299
|
+
pull Lisa's own git history and read what actually changed:
|
|
300
|
+
|
|
301
|
+
1. **Resolve the version window.** Determine the project's installed Lisa version (the
|
|
302
|
+
`@codyswann/lisa` entry in `package.json`/lockfile, or the plugin version stamp on the active
|
|
303
|
+
runtime) and the latest published version (`npm view @codyswann/lisa version`, or the update
|
|
304
|
+
check's cached result).
|
|
305
|
+
2. **Pull the upstream history for that window** (read-only; no clone required when `gh` is
|
|
306
|
+
available):
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
gh api "repos/CodySwannGT/lisa/compare/v<installed>...v<latest>" \
|
|
310
|
+
--paginate --slurp \
|
|
311
|
+
--jq '{total_commits: .[0].total_commits, files: [.[0].files[]?.filename], commits: [.[].commits[]? | .commit.message | split("\n")[0]]}'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
`--paginate` fetches every page of commits, and `--slurp` gathers those pages into a single
|
|
315
|
+
array before `--jq` runs — without `--slurp`, `--jq` applies per page and prints one JSON object
|
|
316
|
+
per page instead of one merged result. `total_commits` and `files` only need the first page
|
|
317
|
+
(files are capped at 300 and not repeated on later pages); `commits` flattens across all pages.
|
|
318
|
+
|
|
319
|
+
The compare endpoint paginates commits (250 without `--paginate`) and only lists changed files
|
|
320
|
+
on the first page, capped at 300 total — a large version window can silently drop commits or
|
|
321
|
+
files. If `total_commits` or the file count looks truncated, re-run with the
|
|
322
|
+
`application/vnd.github.diff` accept header (`gh api ... -H "Accept: application/vnd.github.diff"`)
|
|
323
|
+
to pull the full patch text, or fall back to the shallow-clone `git log` below. When completeness
|
|
324
|
+
still can't be established, say so in the finding and mark it `WARN` rather than attributing
|
|
325
|
+
drift with unverified confidence.
|
|
326
|
+
|
|
327
|
+
Fallbacks, in order: `gh api repos/CodySwannGT/lisa/commits?path=<template-path>` for a
|
|
328
|
+
path-scoped view — note this endpoint has no way to bound results to the `v<installed>..v<latest>`
|
|
329
|
+
window, so treat its output as best-effort context only, not authoritative attribution; a shallow
|
|
330
|
+
clone (`git clone --filter=blob:none --no-checkout` then `git log v<installed>..v<latest> --
|
|
331
|
+
<paths>`), which *is* bounded to the window and should be preferred for definitive attribution; or
|
|
332
|
+
the local marketplace/plugin cache checkout when the runtime has one. If none are reachable, or
|
|
333
|
+
only the unbounded path-scoped fallback is reachable, report the gap as a `WARN`-level
|
|
334
|
+
observability note — never fail the audit because history was unavailable or incomplete.
|
|
335
|
+
3. **Scope the reading to what the finding touches.** Filter the commit list to the paths that
|
|
336
|
+
generate the failing surface: the detected stacks' template dirs (`typescript/`, `expo/`, …),
|
|
337
|
+
`plugins/src/base/` for skills/hooks/rules, `scripts/` for governance scripts, and the shipped
|
|
338
|
+
config factories (`src/configs/`). A finding about a lint rule failure reads the lint-config
|
|
339
|
+
commits, not the whole log.
|
|
340
|
+
4. **Attribute the finding.** When the upstream history shows Lisa changed the contract (a
|
|
341
|
+
tightened lint rule, a renamed check context, a new required config key), say so in `Observed:`
|
|
342
|
+
with the commit subject/version, and let `Remediation:` point at the sanctioned adoption path
|
|
343
|
+
(e.g. `lisa update` + re-apply, a documented config opt-out) rather than hand-editing managed
|
|
344
|
+
files. When history shows no relevant upstream change, the project drifted — remediate on the
|
|
345
|
+
project side.
|
|
346
|
+
|
|
347
|
+
This history pull is part of doctor's read-only contract: it reads Lisa's repository, never writes
|
|
348
|
+
to it, and repair suggestions stay suggestions.
|
|
349
|
+
|
|
294
350
|
## Output contract
|
|
295
351
|
|
|
296
352
|
The final report must:
|