@codyswann/lisa 4.13.2 → 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.
Files changed (83) hide show
  1. package/dist/core/lisa-owned-hash-ledger.d.ts +17 -0
  2. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  3. package/dist/core/lisa-owned-hash-ledger.js +601 -0
  4. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  5. package/dist/core/lisa-owned-provenance.d.ts +30 -0
  6. package/dist/core/lisa-owned-provenance.d.ts.map +1 -1
  7. package/dist/core/lisa-owned-provenance.js +28 -1
  8. package/dist/core/lisa-owned-provenance.js.map +1 -1
  9. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  10. package/dist/core/upstream-evidence-manifest.js +9 -3
  11. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  12. package/dist/health/deterministic.d.ts +3 -0
  13. package/dist/health/deterministic.d.ts.map +1 -1
  14. package/dist/health/deterministic.js +6 -0
  15. package/dist/health/deterministic.js.map +1 -1
  16. package/dist/health/ruleset-inspection.d.ts +14 -0
  17. package/dist/health/ruleset-inspection.d.ts.map +1 -1
  18. package/dist/health/ruleset-inspection.js +19 -8
  19. package/dist/health/ruleset-inspection.js.map +1 -1
  20. package/dist/health/ruleset-reach-inspection.d.ts +68 -0
  21. package/dist/health/ruleset-reach-inspection.d.ts.map +1 -0
  22. package/dist/health/ruleset-reach-inspection.js +209 -0
  23. package/dist/health/ruleset-reach-inspection.js.map +1 -0
  24. package/package.json +1 -1
  25. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +31 -0
  28. package/plugins/lisa/skills/lisa-doctor/SKILL.md +31 -0
  29. package/plugins/lisa-agy/plugin.json +1 -1
  30. package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +31 -0
  31. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  33. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  34. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +31 -0
  38. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +31 -0
  40. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-expo-agy/plugin.json +1 -1
  43. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  53. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  58. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  63. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-rails-agy/plugin.json +1 -1
  68. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  73. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  78. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/src/base/skills/lisa-doctor/SKILL.md +31 -0
  81. package/scripts/generate-lisa-owned-hash-ledger.mjs +455 -64
  82. package/scripts/lisa-github-rulesets.sh +149 -29
  83. 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