@codyswann/lisa 2.186.1 → 2.186.3
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/cdk/create-only/.github/workflows/ci.yml +1 -0
- package/expo/create-only/.github/workflows/ci.yml +1 -0
- package/nestjs/create-only/.github/workflows/ci.yml +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-agy/plugin.json +1 -1
- 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-cursor/.claude-plugin/plugin.json +1 -1
- 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/rails/create-only/.github/workflows/ci.yml +1 -0
- package/typescript/copy-overwrite/scripts/check-verification-coverage.mjs +78 -11
- package/typescript/create-only/.github/workflows/ci.yml +4 -0
|
@@ -2,6 +2,7 @@ name: 🔍 CI Quality Checks
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
pull_request:
|
|
5
|
+
types: [opened, synchronize, reopened, labeled, unlabeled]
|
|
5
6
|
workflow_dispatch:
|
|
6
7
|
# Optional knobs forwarded to the reusable quality workflow. Both default
|
|
7
8
|
# to values that preserve pre-SE-4551/SE-4552 behavior (single runner, no
|
package/package.json
CHANGED
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"ws": ">=8.20.1"
|
|
94
94
|
},
|
|
95
95
|
"name": "@codyswann/lisa",
|
|
96
|
-
"version": "2.186.
|
|
96
|
+
"version": "2.186.3",
|
|
97
97
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
98
98
|
"main": "dist/index.js",
|
|
99
99
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.186.
|
|
3
|
+
"version": "2.186.3",
|
|
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.186.
|
|
3
|
+
"version": "2.186.3",
|
|
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.186.
|
|
3
|
+
"version": "2.186.3",
|
|
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.186.
|
|
3
|
+
"version": "2.186.3",
|
|
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.186.
|
|
3
|
+
"version": "2.186.3",
|
|
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"
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
* VERIFY_BASE_REF base branch for the fallback range (default main)
|
|
16
16
|
* VERIFY_CHANGE_TYPES comma list of conventional-commit types in the change
|
|
17
17
|
* (e.g. "feat,chore"); if empty, derived from commit subjects
|
|
18
|
-
* VERIFY_LABELS comma list of PR labels (for `verification-exempt`)
|
|
18
|
+
* VERIFY_LABELS comma list of PR labels (fallback for `verification-exempt`)
|
|
19
|
+
* VERIFY_PR_NUMBER pull request number for live label lookup
|
|
20
|
+
* GITHUB_REPOSITORY owner/repo for live label lookup
|
|
21
|
+
* GITHUB_TOKEN token with pull-requests: read for live label lookup
|
|
19
22
|
*
|
|
20
23
|
* Exit 0 = satisfied / exempt / not-required. Exit 1 = required but missing.
|
|
21
24
|
* @module scripts/check-verification-coverage
|
|
@@ -30,6 +33,64 @@ const EXEMPT_LABEL = "verification-exempt";
|
|
|
30
33
|
// "e2e" segment (e.g. src/e2e/helpers.ts must not satisfy the gate).
|
|
31
34
|
const VERIFICATION_PATH = /^e2e\/|(^|\/)tests\/(e2e|verification)\//;
|
|
32
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Parse a comma-delimited label list.
|
|
38
|
+
* @param {string | undefined} value - Comma-delimited labels
|
|
39
|
+
* @returns {string[]} Parsed labels
|
|
40
|
+
*/
|
|
41
|
+
function parseLabels(value) {
|
|
42
|
+
return (value || "")
|
|
43
|
+
.split(",")
|
|
44
|
+
.map(label => label.trim())
|
|
45
|
+
.filter(Boolean);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Fetch the current PR label set from GitHub when CI provides PR context.
|
|
50
|
+
* @param {object} input - GitHub API context
|
|
51
|
+
* @param {string | undefined} input.repository - Repository in owner/name form
|
|
52
|
+
* @param {string | undefined} input.prNumber - Pull request number
|
|
53
|
+
* @param {string | undefined} input.token - GitHub token
|
|
54
|
+
* @param {typeof fetch} [input.fetchImpl] - Fetch implementation for tests
|
|
55
|
+
* @returns {Promise<string[] | null>} Live labels, or null when context is absent
|
|
56
|
+
*/
|
|
57
|
+
export async function fetchLivePullRequestLabels({
|
|
58
|
+
repository,
|
|
59
|
+
prNumber,
|
|
60
|
+
token,
|
|
61
|
+
fetchImpl = globalThis.fetch,
|
|
62
|
+
}) {
|
|
63
|
+
if (!repository || !prNumber || !token) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
if (typeof fetchImpl !== "function") {
|
|
67
|
+
throw new Error("Live label lookup requires a fetch implementation.");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const response = await fetchImpl(
|
|
71
|
+
`https://api.github.com/repos/${repository}/pulls/${prNumber}`,
|
|
72
|
+
{
|
|
73
|
+
headers: {
|
|
74
|
+
Accept: "application/vnd.github+json",
|
|
75
|
+
Authorization: `Bearer ${token}`,
|
|
76
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`Failed to fetch live PR labels: GitHub API returned ${response.status}.`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const pullRequest = await response.json();
|
|
87
|
+
return Array.isArray(pullRequest.labels)
|
|
88
|
+
? pullRequest.labels
|
|
89
|
+
.map(label => label?.name)
|
|
90
|
+
.filter(label => typeof label === "string" && label.length > 0)
|
|
91
|
+
: [];
|
|
92
|
+
}
|
|
93
|
+
|
|
33
94
|
/**
|
|
34
95
|
* Pure decision: is a verification-spec delta required, and is it satisfied?
|
|
35
96
|
* @param {object} input - Evaluation input
|
|
@@ -78,9 +139,9 @@ export function evaluateVerificationCoverage({
|
|
|
78
139
|
|
|
79
140
|
/**
|
|
80
141
|
* Gather the change context from git + env.
|
|
81
|
-
* @returns {{changedFiles: string[], changeTypes: string[], labels: string[]}} Context
|
|
142
|
+
* @returns {Promise<{changedFiles: string[], changeTypes: string[], labels: string[]}>} Context
|
|
82
143
|
*/
|
|
83
|
-
function gatherContext() {
|
|
144
|
+
async function gatherContext() {
|
|
84
145
|
const head = process.env.VERIFY_HEAD_SHA || "HEAD";
|
|
85
146
|
const baseRef = process.env.VERIFY_BASE_REF || "main";
|
|
86
147
|
const base = process.env.VERIFY_BASE_SHA || `origin/${baseRef}`;
|
|
@@ -117,20 +178,23 @@ function gatherContext() {
|
|
|
117
178
|
.filter(Boolean);
|
|
118
179
|
const changeTypes = [...new Set([...fromEnv, ...fromCommits])];
|
|
119
180
|
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
.
|
|
181
|
+
const fallbackLabels = parseLabels(process.env.VERIFY_LABELS);
|
|
182
|
+
const liveLabels = await fetchLivePullRequestLabels({
|
|
183
|
+
repository: process.env.GITHUB_REPOSITORY,
|
|
184
|
+
prNumber: process.env.VERIFY_PR_NUMBER,
|
|
185
|
+
token: process.env.GITHUB_TOKEN,
|
|
186
|
+
});
|
|
187
|
+
const labels = liveLabels ?? fallbackLabels;
|
|
124
188
|
|
|
125
189
|
return { changedFiles, changeTypes, labels };
|
|
126
190
|
}
|
|
127
191
|
|
|
128
192
|
/**
|
|
129
193
|
* CLI entry: evaluate and exit non-zero when a required verification delta is missing.
|
|
130
|
-
* @returns {void}
|
|
194
|
+
* @returns {Promise<void>}
|
|
131
195
|
*/
|
|
132
|
-
function main() {
|
|
133
|
-
const context = gatherContext();
|
|
196
|
+
async function main() {
|
|
197
|
+
const context = await gatherContext();
|
|
134
198
|
const result = evaluateVerificationCoverage(context);
|
|
135
199
|
console.log(
|
|
136
200
|
`[verification-coverage] types=[${context.changeTypes.join(
|
|
@@ -155,5 +219,8 @@ if (
|
|
|
155
219
|
process.argv[1] &&
|
|
156
220
|
import.meta.url === pathToFileURL(process.argv[1]).href
|
|
157
221
|
) {
|
|
158
|
-
main()
|
|
222
|
+
main().catch(error => {
|
|
223
|
+
console.error(`[verification-coverage] FAIL: ${error.message}`);
|
|
224
|
+
process.exit(1);
|
|
225
|
+
});
|
|
159
226
|
}
|
|
@@ -5,11 +5,15 @@ name: 🔍 CI Quality Checks
|
|
|
5
5
|
|
|
6
6
|
on:
|
|
7
7
|
pull_request:
|
|
8
|
+
types: [opened, synchronize, reopened, labeled, unlabeled]
|
|
8
9
|
workflow_dispatch:
|
|
9
10
|
|
|
10
11
|
jobs:
|
|
11
12
|
quality:
|
|
12
13
|
name: 🔍 Quality Checks
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
pull-requests: read
|
|
13
17
|
uses: CodySwannGT/lisa/.github/workflows/quality.yml@main
|
|
14
18
|
with:
|
|
15
19
|
node_version: '22.21.1'
|