@codyswann/lisa 3.32.1 → 3.33.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/cli/doctor-serialize-legs-contract.d.ts +4 -2
- package/dist/cli/doctor-serialize-legs-contract.d.ts.map +1 -1
- package/dist/cli/doctor-serialize-legs-contract.js +50 -7
- package/dist/cli/doctor-serialize-legs-contract.js.map +1 -1
- 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
|
@@ -7,7 +7,9 @@ import type { DoctorCheck } from "./doctor.js";
|
|
|
7
7
|
* discarded at the reusable-workflow boundary no matter where it is placed.
|
|
8
8
|
* While this is false, `serialize_platform_legs` cannot order anything in ANY
|
|
9
9
|
* repository, and reporting a fully configured caller as `ok` would certify a
|
|
10
|
-
* configuration measured to fail.
|
|
10
|
+
* configuration measured to fail. It is now TRUE: the reusable workflow
|
|
11
|
+
* declares `actions: read` for itself, so a fully configured caller can
|
|
12
|
+
* genuinely order its legs and `ok` is an honest verdict again.
|
|
11
13
|
*
|
|
12
14
|
* Measured 2026-08-17 against a caller granting `actions: read` at BOTH job and
|
|
13
15
|
* workflow level: the job's own token grant showed `Contents: read` and
|
|
@@ -26,7 +28,7 @@ import type { DoctorCheck } from "./doctor.js";
|
|
|
26
28
|
* install can disagree with what actually runs. That is a property of `@main`
|
|
27
29
|
* refs, not of this check.
|
|
28
30
|
*/
|
|
29
|
-
export declare const CALLEE_GRANTS_ACTIONS_READ =
|
|
31
|
+
export declare const CALLEE_GRANTS_ACTIONS_READ = true;
|
|
30
32
|
/** Which of the three required parts a caller declares. */
|
|
31
33
|
export interface SerializeContract {
|
|
32
34
|
/** `serialize_platform_legs: true` in the `with:` block. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-serialize-legs-contract.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-serialize-legs-contract.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C
|
|
1
|
+
{"version":3,"file":"doctor-serialize-legs-contract.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-serialize-legs-contract.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,MAAM,EAAE,CAQ3E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAEtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAyEtB;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAoB9D"}
|
|
@@ -14,7 +14,9 @@ const CHECK_NAME = "Maestro leg serialization wired?";
|
|
|
14
14
|
* discarded at the reusable-workflow boundary no matter where it is placed.
|
|
15
15
|
* While this is false, `serialize_platform_legs` cannot order anything in ANY
|
|
16
16
|
* repository, and reporting a fully configured caller as `ok` would certify a
|
|
17
|
-
* configuration measured to fail.
|
|
17
|
+
* configuration measured to fail. It is now TRUE: the reusable workflow
|
|
18
|
+
* declares `actions: read` for itself, so a fully configured caller can
|
|
19
|
+
* genuinely order its legs and `ok` is an honest verdict again.
|
|
18
20
|
*
|
|
19
21
|
* Measured 2026-08-17 against a caller granting `actions: read` at BOTH job and
|
|
20
22
|
* workflow level: the job's own token grant showed `Contents: read` and
|
|
@@ -33,7 +35,7 @@ const CHECK_NAME = "Maestro leg serialization wired?";
|
|
|
33
35
|
* install can disagree with what actually runs. That is a property of `@main`
|
|
34
36
|
* refs, not of this check.
|
|
35
37
|
*/
|
|
36
|
-
export const CALLEE_GRANTS_ACTIONS_READ =
|
|
38
|
+
export const CALLEE_GRANTS_ACTIONS_READ = true;
|
|
37
39
|
/**
|
|
38
40
|
* Which required parts are missing from a declared opt-in.
|
|
39
41
|
*
|
|
@@ -144,9 +146,10 @@ export async function checkSerializeLegsContract(targetPath) {
|
|
|
144
146
|
"green. `actions: read` must sit on the CALLING workflow's own " +
|
|
145
147
|
"`permissions:`, not on the job: a called workflow requesting a scope " +
|
|
146
148
|
"its caller never held is a startup_failure for the entire run. " +
|
|
147
|
-
"
|
|
148
|
-
"CodySwannGT/lisa#2662,
|
|
149
|
-
"
|
|
149
|
+
"The reusable workflow now declares `actions: read` for itself " +
|
|
150
|
+
"(CodySwannGT/lisa#2662), so completing these parts is what makes " +
|
|
151
|
+
"ordering work — and a caller that has NOT granted the scope gets a " +
|
|
152
|
+
"startup_failure for its whole run, opted in or not",
|
|
150
153
|
};
|
|
151
154
|
}
|
|
152
155
|
/**
|
|
@@ -165,15 +168,55 @@ export function readContract(source) {
|
|
|
165
168
|
.split("\n")
|
|
166
169
|
.filter(line => !line.trim().startsWith("#"))
|
|
167
170
|
.join("\n");
|
|
171
|
+
const call = callingJob(source);
|
|
168
172
|
return {
|
|
169
|
-
|
|
170
|
-
|
|
173
|
+
// Read from the CALLING JOB when the file parses, because the three parts
|
|
174
|
+
// only mean anything together. Whole-file matching reported `ok` for a
|
|
175
|
+
// workflow with `serialize_platform_legs` in one job and `LEG_ORDER_TOKEN`
|
|
176
|
+
// in another — the actual call then omits the token and releases Android
|
|
177
|
+
// regardless, which is the check saying yes without binding its evidence.
|
|
178
|
+
optedIn: call
|
|
179
|
+
? call.with?.serialize_platform_legs === true
|
|
180
|
+
: /serialize_platform_legs:\s*true/u.test(uncommented),
|
|
181
|
+
forwardsToken: call
|
|
182
|
+
? Object.hasOwn(call.secrets ?? {}, "LEG_ORDER_TOKEN")
|
|
183
|
+
: /LEG_ORDER_TOKEN:/u.test(uncommented),
|
|
171
184
|
grantsActionsRead: hasWorkflowActionsRead(source, uncommented),
|
|
172
185
|
};
|
|
173
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* The job that calls Lisa's reusable Maestro workflow, when the file parses.
|
|
189
|
+
*
|
|
190
|
+
* `null` when the YAML will not parse or no job calls it — the caller then
|
|
191
|
+
* falls back to whole-file matching, which is weaker but still answers on a
|
|
192
|
+
* workflow this cannot read. A file with a syntax error elsewhere still
|
|
193
|
+
* deserves the check.
|
|
194
|
+
* @param source - Raw workflow YAML.
|
|
195
|
+
* @returns The calling job, or `null`.
|
|
196
|
+
*/
|
|
197
|
+
function callingJob(source) {
|
|
198
|
+
try {
|
|
199
|
+
const doc = loadYaml(source);
|
|
200
|
+
const jobs = Object.values(doc?.jobs ?? {});
|
|
201
|
+
return (jobs.find(job => typeof job?.uses === "string"
|
|
202
|
+
? job.uses.includes("maestro-native-e2e.yml")
|
|
203
|
+
: false) ?? null);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
174
209
|
/**
|
|
175
210
|
* Whether `actions: read` sits on the WORKFLOW's own permissions, not a job's.
|
|
176
211
|
*
|
|
212
|
+
* A job-level grant on the calling job is deliberately NOT accepted here, and
|
|
213
|
+
* the reason is a measurement: on 2026-08-17 a caller declaring `actions: read`
|
|
214
|
+
* at job level produced HTTP 403 from the jobs API, the ordering job released
|
|
215
|
+
* Android anyway, and both platform legs started within the same second. The
|
|
216
|
+
* top-level block is what reached the token. Counting a job-level grant would
|
|
217
|
+
* make this check pass for the exact configuration that was measured to fail —
|
|
218
|
+
* which is the defect this file was rewritten to stop doing.
|
|
219
|
+
*
|
|
177
220
|
* Placement is the whole point, and a text match cannot tell the two apart. The
|
|
178
221
|
* measured failure on 2026-08-17 was `actions: read` declared at JOB level: the
|
|
179
222
|
* scope is not inherited by the reusable workflow's ordering job, so the API
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-serialize-legs-contract.js","sourceRoot":"","sources":["../../src/cli/doctor-serialize-legs-contract.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,UAAU,GAAG,kCAAkC,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"doctor-serialize-legs-contract.js","sourceRoot":"","sources":["../../src/cli/doctor-serialize-legs-contract.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
"ws": ">=8.21.0"
|
|
132
132
|
},
|
|
133
133
|
"name": "@codyswann/lisa",
|
|
134
|
-
"version": "3.
|
|
134
|
+
"version": "3.33.0",
|
|
135
135
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
136
136
|
"main": "dist/index.js",
|
|
137
137
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.33.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": "3.
|
|
3
|
+
"version": "3.33.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": "3.
|
|
3
|
+
"version": "3.33.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": "3.
|
|
3
|
+
"version": "3.33.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": "3.
|
|
3
|
+
"version": "3.33.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"
|