@codyswann/lisa 4.4.15 → 4.4.17

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 (114) hide show
  1. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  2. package/dist/core/lisa-owned-hash-ledger.js +2 -0
  3. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  4. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  5. package/dist/core/upstream-evidence-manifest.js +18 -14
  6. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  7. package/package.json +2 -1
  8. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  9. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  10. package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/SKILL.md +4 -1
  11. package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/SKILL.md +4 -1
  12. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/SKILL.md +10 -2
  13. package/plugins/lisa/hooks/threshold-ratchet-compare.mjs +7 -0
  14. package/plugins/lisa/hooks/threshold-ratchet-families.mjs +53 -0
  15. package/plugins/lisa/rules/eager/falsifiable-checks.md +16 -1
  16. package/plugins/lisa/rules/reference/falsifiable-checks.md +74 -1
  17. package/plugins/lisa/skills/lisa-improve-test-coverage/SKILL.md +4 -1
  18. package/plugins/lisa/skills/lisa-improve-tests/SKILL.md +4 -1
  19. package/plugins/lisa/skills/lisa-nightly-lower-code-complexity/SKILL.md +10 -2
  20. package/plugins/lisa-agy/plugin.json +1 -1
  21. package/plugins/lisa-agy/skills/lisa-improve-test-coverage/SKILL.md +4 -1
  22. package/plugins/lisa-agy/skills/lisa-improve-tests/SKILL.md +4 -1
  23. package/plugins/lisa-agy/skills/lisa-nightly-lower-code-complexity/SKILL.md +10 -2
  24. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  27. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-copilot/hooks/threshold-ratchet-compare.mjs +7 -0
  31. package/plugins/lisa-copilot/hooks/threshold-ratchet-families.mjs +53 -0
  32. package/plugins/lisa-copilot/rules/eager/falsifiable-checks.md +16 -1
  33. package/plugins/lisa-copilot/rules/reference/falsifiable-checks.md +74 -1
  34. package/plugins/lisa-copilot/skills/lisa-improve-test-coverage/SKILL.md +4 -1
  35. package/plugins/lisa-copilot/skills/lisa-improve-tests/SKILL.md +4 -1
  36. package/plugins/lisa-copilot/skills/lisa-nightly-lower-code-complexity/SKILL.md +10 -2
  37. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-cursor/hooks/threshold-ratchet-compare.mjs +7 -0
  39. package/plugins/lisa-cursor/hooks/threshold-ratchet-families.mjs +53 -0
  40. package/plugins/lisa-cursor/rules/falsifiable-checks-reference.mdc +74 -1
  41. package/plugins/lisa-cursor/rules/falsifiable-checks.mdc +16 -1
  42. package/plugins/lisa-cursor/skills/lisa-improve-test-coverage/SKILL.md +4 -1
  43. package/plugins/lisa-cursor/skills/lisa-improve-tests/SKILL.md +4 -1
  44. package/plugins/lisa-cursor/skills/lisa-nightly-lower-code-complexity/SKILL.md +10 -2
  45. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-expo-agy/plugin.json +1 -1
  48. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  53. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  58. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  63. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  68. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/SKILL.md +4 -1
  73. package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/SKILL.md +4 -1
  74. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/SKILL.md +30 -1
  75. package/plugins/lisa-rails/skills/improve-code-complexity/SKILL.md +4 -1
  76. package/plugins/lisa-rails/skills/improve-test-coverage/SKILL.md +4 -1
  77. package/plugins/lisa-rails/skills/ops-verify-telemetry/SKILL.md +30 -1
  78. package/plugins/lisa-rails-agy/plugin.json +1 -1
  79. package/plugins/lisa-rails-agy/skills/improve-code-complexity/SKILL.md +4 -1
  80. package/plugins/lisa-rails-agy/skills/improve-test-coverage/SKILL.md +4 -1
  81. package/plugins/lisa-rails-agy/skills/ops-verify-telemetry/SKILL.md +30 -1
  82. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-rails-copilot/skills/improve-code-complexity/SKILL.md +4 -1
  84. package/plugins/lisa-rails-copilot/skills/improve-test-coverage/SKILL.md +4 -1
  85. package/plugins/lisa-rails-copilot/skills/ops-verify-telemetry/SKILL.md +30 -1
  86. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-cursor/skills/improve-code-complexity/SKILL.md +4 -1
  88. package/plugins/lisa-rails-cursor/skills/improve-test-coverage/SKILL.md +4 -1
  89. package/plugins/lisa-rails-cursor/skills/ops-verify-telemetry/SKILL.md +30 -1
  90. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  93. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  98. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/src/base/hooks/threshold-ratchet-compare.mjs +7 -0
  101. package/plugins/src/base/hooks/threshold-ratchet-families.mjs +53 -0
  102. package/plugins/src/base/rules/eager/falsifiable-checks.md +16 -1
  103. package/plugins/src/base/rules/reference/falsifiable-checks.md +74 -1
  104. package/plugins/src/base/skills/lisa-improve-test-coverage/SKILL.md +4 -1
  105. package/plugins/src/base/skills/lisa-improve-tests/SKILL.md +4 -1
  106. package/plugins/src/base/skills/lisa-nightly-lower-code-complexity/SKILL.md +10 -2
  107. package/plugins/src/rails/skills/improve-code-complexity/SKILL.md +4 -1
  108. package/plugins/src/rails/skills/improve-test-coverage/SKILL.md +4 -1
  109. package/plugins/src/rails/skills/ops-verify-telemetry/SKILL.md +30 -1
  110. package/rails/copy-overwrite/scripts/threshold-ratchet-compare.mjs +7 -0
  111. package/rails/copy-overwrite/scripts/threshold-ratchet-families.mjs +53 -0
  112. package/scripts/check-pipeline-status-reads.mjs +684 -0
  113. package/typescript/copy-overwrite/scripts/threshold-ratchet-compare.mjs +7 -0
  114. package/typescript/copy-overwrite/scripts/threshold-ratchet-families.mjs +53 -0
@@ -80,8 +80,61 @@ export const FAMILIES = [
80
80
  match: /(^|\/)\.lisa\.config\.json$/,
81
81
  kind: "allow-list",
82
82
  },
83
+ {
84
+ id: "lighthouse",
85
+ match: /(^|\/)lighthouserc-config\.json$/,
86
+ kind: "lighthouse",
87
+ },
83
88
  ];
84
89
 
90
+ /**
91
+ * Which way each Lighthouse assertion key ratchets.
92
+ *
93
+ * Lighthouse mixes floors and ceilings in one file, so assigning one direction
94
+ * to the whole family would silently approve half of the possible weakenings.
95
+ * Unknown keys stay unwatched until their direction is explicit here.
96
+ * @type {Readonly<Record<string, "min"|"max">>}
97
+ */
98
+ export const LIGHTHOUSE_ASSERTION_DIRECTIONS = {
99
+ minScore: "min",
100
+ maxNumericValue: "max",
101
+ maxLength: "max",
102
+ };
103
+
104
+ /**
105
+ * Extract numeric Lighthouse assertions with a direction chosen per key.
106
+ *
107
+ * A malformed array is deliberately ignored instead of being walked as an
108
+ * object whose numeric indices look like audit names.
109
+ * @param {unknown} conf Parsed lighthouserc-config.json
110
+ * @returns {Map<string, { value: number, direction: "min"|"max" }>} Dotted
111
+ * `assertion.key` path to numeric constraint
112
+ */
113
+ export function extractLighthouseAssertions(conf) {
114
+ const out = new Map();
115
+ const assertions =
116
+ conf && typeof conf === "object" && !Array.isArray(conf)
117
+ ? /** @type {Record<string, unknown>} */ (conf).assertions
118
+ : undefined;
119
+ if (
120
+ !assertions ||
121
+ typeof assertions !== "object" ||
122
+ Array.isArray(assertions)
123
+ ) {
124
+ return out;
125
+ }
126
+ for (const [audit, spec] of Object.entries(assertions)) {
127
+ if (!spec || typeof spec !== "object" || Array.isArray(spec)) continue;
128
+ for (const [key, value] of Object.entries(spec)) {
129
+ const direction = LIGHTHOUSE_ASSERTION_DIRECTIONS[key];
130
+ if (direction && typeof value === "number" && Number.isFinite(value)) {
131
+ out.set(`${audit}.${key}`, { value, direction });
132
+ }
133
+ }
134
+ }
135
+ return out;
136
+ }
137
+
85
138
  /**
86
139
  * Find the family a repo-relative path belongs to.
87
140
  * @param {string} relPath Repo-relative path (forward slashes)