@codyswann/lisa 4.14.0 → 4.15.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/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +7 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/health/deterministic.d.ts +3 -0
- package/dist/health/deterministic.d.ts.map +1 -1
- package/dist/health/deterministic.js +6 -0
- package/dist/health/deterministic.js.map +1 -1
- package/dist/health/ruleset-inspection.d.ts +14 -0
- package/dist/health/ruleset-inspection.d.ts.map +1 -1
- package/dist/health/ruleset-inspection.js +19 -8
- package/dist/health/ruleset-inspection.js.map +1 -1
- package/dist/health/ruleset-reach-inspection.d.ts +68 -0
- package/dist/health/ruleset-reach-inspection.d.ts.map +1 -0
- package/dist/health/ruleset-reach-inspection.js +209 -0
- package/dist/health/ruleset-reach-inspection.js.map +1 -0
- 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 +31 -0
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +31 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +31 -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 +31 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +31 -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 +31 -0
- package/scripts/lisa-github-rulesets.sh +149 -29
- package/scripts/lisa-ruleset-reach.mjs +512 -0
|
@@ -629,6 +629,37 @@ choice at all — the value is whatever GitHub's default happens to be. Declarin
|
|
|
629
629
|
and makes it visible to the reconciler; declaring nothing keeps the payload byte-for-byte what it
|
|
630
630
|
was, parameter absent.
|
|
631
631
|
|
|
632
|
+
### A ruleset that governs no branch
|
|
633
|
+
|
|
634
|
+
Reconciliation asks whether the required LIST matches. It never asks whether the ruleset carrying
|
|
635
|
+
that list matches any ref the repository actually has, and GitHub does not ask either: a
|
|
636
|
+
`conditions.ref_name.include` entry is a pattern, not a reference, so `refs/heads/dev` is accepted
|
|
637
|
+
and stays live on a repository whose only branch is `main`. Everything that ruleset requires is then
|
|
638
|
+
required nowhere — the gate still runs and posts its context, and no pull request waits on it.
|
|
639
|
+
|
|
640
|
+
Every surface read that as healthy. `compareRulesets` in `lisa health` compares the include list
|
|
641
|
+
against Lisa's template by string equality, and both say `refs/heads/dev`, therefore no drift; the
|
|
642
|
+
repo-map row parses includes but matches the literal `~DEFAULT_BRANCH` and ORs across rows, so one
|
|
643
|
+
governing ruleset makes the whole answer green. Nothing enumerated the repository's branches.
|
|
644
|
+
|
|
645
|
+
The `github.ruleset-reach` check in `lisa health` now does, and so does
|
|
646
|
+
`scripts/lisa-github-rulesets.sh` at the end of every apply, dry run included. Both load one shipped
|
|
647
|
+
detector, `scripts/lisa-ruleset-reach.mjs`, so the two surfaces cannot disagree about which rulesets
|
|
648
|
+
govern nothing. Not in doctor: doctor makes no network call, and which branches exist is a live
|
|
649
|
+
read — the same split that puts the template half of the declaration comparison in doctor and the
|
|
650
|
+
live half in health.
|
|
651
|
+
|
|
652
|
+
Three answers, never two. A ruleset that matches at least one branch is silent. One that matches
|
|
653
|
+
none is named with the patterns that matched nothing. One this run could not classify — an
|
|
654
|
+
unreadable branch list, a `~DEFAULT_BRANCH` whose default branch could not be resolved, an fnmatch
|
|
655
|
+
bracket expression the detector does not model — is `undetermined` and says so, because an unread
|
|
656
|
+
branch list is not an empty repository and reporting it as one would name every ruleset present.
|
|
657
|
+
|
|
658
|
+
**Report only, and neither obvious repair is Lisa's to make.** Creating the missing branch
|
|
659
|
+
manufactures the very ref the ruleset was written to protect; disabling the ruleset gives up a
|
|
660
|
+
protection somebody chose. An automated actor may narrow a control, never loosen one. Point the
|
|
661
|
+
ruleset at a branch the repository has, or retire it deliberately.
|
|
662
|
+
|
|
632
663
|
## Secrets configuration
|
|
633
664
|
|
|
634
665
|
Run the secrets health checks through the skill that owns the contract, rather than reimplementing
|
|
@@ -629,6 +629,37 @@ choice at all — the value is whatever GitHub's default happens to be. Declarin
|
|
|
629
629
|
and makes it visible to the reconciler; declaring nothing keeps the payload byte-for-byte what it
|
|
630
630
|
was, parameter absent.
|
|
631
631
|
|
|
632
|
+
### A ruleset that governs no branch
|
|
633
|
+
|
|
634
|
+
Reconciliation asks whether the required LIST matches. It never asks whether the ruleset carrying
|
|
635
|
+
that list matches any ref the repository actually has, and GitHub does not ask either: a
|
|
636
|
+
`conditions.ref_name.include` entry is a pattern, not a reference, so `refs/heads/dev` is accepted
|
|
637
|
+
and stays live on a repository whose only branch is `main`. Everything that ruleset requires is then
|
|
638
|
+
required nowhere — the gate still runs and posts its context, and no pull request waits on it.
|
|
639
|
+
|
|
640
|
+
Every surface read that as healthy. `compareRulesets` in `lisa health` compares the include list
|
|
641
|
+
against Lisa's template by string equality, and both say `refs/heads/dev`, therefore no drift; the
|
|
642
|
+
repo-map row parses includes but matches the literal `~DEFAULT_BRANCH` and ORs across rows, so one
|
|
643
|
+
governing ruleset makes the whole answer green. Nothing enumerated the repository's branches.
|
|
644
|
+
|
|
645
|
+
The `github.ruleset-reach` check in `lisa health` now does, and so does
|
|
646
|
+
`scripts/lisa-github-rulesets.sh` at the end of every apply, dry run included. Both load one shipped
|
|
647
|
+
detector, `scripts/lisa-ruleset-reach.mjs`, so the two surfaces cannot disagree about which rulesets
|
|
648
|
+
govern nothing. Not in doctor: doctor makes no network call, and which branches exist is a live
|
|
649
|
+
read — the same split that puts the template half of the declaration comparison in doctor and the
|
|
650
|
+
live half in health.
|
|
651
|
+
|
|
652
|
+
Three answers, never two. A ruleset that matches at least one branch is silent. One that matches
|
|
653
|
+
none is named with the patterns that matched nothing. One this run could not classify — an
|
|
654
|
+
unreadable branch list, a `~DEFAULT_BRANCH` whose default branch could not be resolved, an fnmatch
|
|
655
|
+
bracket expression the detector does not model — is `undetermined` and says so, because an unread
|
|
656
|
+
branch list is not an empty repository and reporting it as one would name every ruleset present.
|
|
657
|
+
|
|
658
|
+
**Report only, and neither obvious repair is Lisa's to make.** Creating the missing branch
|
|
659
|
+
manufactures the very ref the ruleset was written to protect; disabling the ruleset gives up a
|
|
660
|
+
protection somebody chose. An automated actor may narrow a control, never loosen one. Point the
|
|
661
|
+
ruleset at a branch the repository has, or retire it deliberately.
|
|
662
|
+
|
|
632
663
|
## Secrets configuration
|
|
633
664
|
|
|
634
665
|
Run the secrets health checks through the skill that owns the contract, rather than reimplementing
|
|
@@ -629,6 +629,37 @@ choice at all — the value is whatever GitHub's default happens to be. Declarin
|
|
|
629
629
|
and makes it visible to the reconciler; declaring nothing keeps the payload byte-for-byte what it
|
|
630
630
|
was, parameter absent.
|
|
631
631
|
|
|
632
|
+
### A ruleset that governs no branch
|
|
633
|
+
|
|
634
|
+
Reconciliation asks whether the required LIST matches. It never asks whether the ruleset carrying
|
|
635
|
+
that list matches any ref the repository actually has, and GitHub does not ask either: a
|
|
636
|
+
`conditions.ref_name.include` entry is a pattern, not a reference, so `refs/heads/dev` is accepted
|
|
637
|
+
and stays live on a repository whose only branch is `main`. Everything that ruleset requires is then
|
|
638
|
+
required nowhere — the gate still runs and posts its context, and no pull request waits on it.
|
|
639
|
+
|
|
640
|
+
Every surface read that as healthy. `compareRulesets` in `lisa health` compares the include list
|
|
641
|
+
against Lisa's template by string equality, and both say `refs/heads/dev`, therefore no drift; the
|
|
642
|
+
repo-map row parses includes but matches the literal `~DEFAULT_BRANCH` and ORs across rows, so one
|
|
643
|
+
governing ruleset makes the whole answer green. Nothing enumerated the repository's branches.
|
|
644
|
+
|
|
645
|
+
The `github.ruleset-reach` check in `lisa health` now does, and so does
|
|
646
|
+
`scripts/lisa-github-rulesets.sh` at the end of every apply, dry run included. Both load one shipped
|
|
647
|
+
detector, `scripts/lisa-ruleset-reach.mjs`, so the two surfaces cannot disagree about which rulesets
|
|
648
|
+
govern nothing. Not in doctor: doctor makes no network call, and which branches exist is a live
|
|
649
|
+
read — the same split that puts the template half of the declaration comparison in doctor and the
|
|
650
|
+
live half in health.
|
|
651
|
+
|
|
652
|
+
Three answers, never two. A ruleset that matches at least one branch is silent. One that matches
|
|
653
|
+
none is named with the patterns that matched nothing. One this run could not classify — an
|
|
654
|
+
unreadable branch list, a `~DEFAULT_BRANCH` whose default branch could not be resolved, an fnmatch
|
|
655
|
+
bracket expression the detector does not model — is `undetermined` and says so, because an unread
|
|
656
|
+
branch list is not an empty repository and reporting it as one would name every ruleset present.
|
|
657
|
+
|
|
658
|
+
**Report only, and neither obvious repair is Lisa's to make.** Creating the missing branch
|
|
659
|
+
manufactures the very ref the ruleset was written to protect; disabling the ruleset gives up a
|
|
660
|
+
protection somebody chose. An automated actor may narrow a control, never loosen one. Point the
|
|
661
|
+
ruleset at a branch the repository has, or retire it deliberately.
|
|
662
|
+
|
|
632
663
|
## Secrets configuration
|
|
633
664
|
|
|
634
665
|
Run the secrets health checks through the skill that owns the contract, rather than reimplementing
|
|
@@ -629,6 +629,37 @@ choice at all — the value is whatever GitHub's default happens to be. Declarin
|
|
|
629
629
|
and makes it visible to the reconciler; declaring nothing keeps the payload byte-for-byte what it
|
|
630
630
|
was, parameter absent.
|
|
631
631
|
|
|
632
|
+
### A ruleset that governs no branch
|
|
633
|
+
|
|
634
|
+
Reconciliation asks whether the required LIST matches. It never asks whether the ruleset carrying
|
|
635
|
+
that list matches any ref the repository actually has, and GitHub does not ask either: a
|
|
636
|
+
`conditions.ref_name.include` entry is a pattern, not a reference, so `refs/heads/dev` is accepted
|
|
637
|
+
and stays live on a repository whose only branch is `main`. Everything that ruleset requires is then
|
|
638
|
+
required nowhere — the gate still runs and posts its context, and no pull request waits on it.
|
|
639
|
+
|
|
640
|
+
Every surface read that as healthy. `compareRulesets` in `lisa health` compares the include list
|
|
641
|
+
against Lisa's template by string equality, and both say `refs/heads/dev`, therefore no drift; the
|
|
642
|
+
repo-map row parses includes but matches the literal `~DEFAULT_BRANCH` and ORs across rows, so one
|
|
643
|
+
governing ruleset makes the whole answer green. Nothing enumerated the repository's branches.
|
|
644
|
+
|
|
645
|
+
The `github.ruleset-reach` check in `lisa health` now does, and so does
|
|
646
|
+
`scripts/lisa-github-rulesets.sh` at the end of every apply, dry run included. Both load one shipped
|
|
647
|
+
detector, `scripts/lisa-ruleset-reach.mjs`, so the two surfaces cannot disagree about which rulesets
|
|
648
|
+
govern nothing. Not in doctor: doctor makes no network call, and which branches exist is a live
|
|
649
|
+
read — the same split that puts the template half of the declaration comparison in doctor and the
|
|
650
|
+
live half in health.
|
|
651
|
+
|
|
652
|
+
Three answers, never two. A ruleset that matches at least one branch is silent. One that matches
|
|
653
|
+
none is named with the patterns that matched nothing. One this run could not classify — an
|
|
654
|
+
unreadable branch list, a `~DEFAULT_BRANCH` whose default branch could not be resolved, an fnmatch
|
|
655
|
+
bracket expression the detector does not model — is `undetermined` and says so, because an unread
|
|
656
|
+
branch list is not an empty repository and reporting it as one would name every ruleset present.
|
|
657
|
+
|
|
658
|
+
**Report only, and neither obvious repair is Lisa's to make.** Creating the missing branch
|
|
659
|
+
manufactures the very ref the ruleset was written to protect; disabling the ruleset gives up a
|
|
660
|
+
protection somebody chose. An automated actor may narrow a control, never loosen one. Point the
|
|
661
|
+
ruleset at a branch the repository has, or retire it deliberately.
|
|
662
|
+
|
|
632
663
|
## Secrets configuration
|
|
633
664
|
|
|
634
665
|
Run the secrets health checks through the skill that owns the contract, rather than reimplementing
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.15.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": "4.
|
|
3
|
+
"version": "4.15.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": "4.
|
|
3
|
+
"version": "4.15.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": "4.
|
|
3
|
+
"version": "4.15.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": "4.
|
|
3
|
+
"version": "4.15.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"
|