@codyswann/lisa 4.60.4 → 4.60.5
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/{scripts/check-workflow-load-failures.ts → all/copy-overwrite/scripts/check-workflow-load-failures.mjs} +36 -76
- package/all/copy-overwrite/scripts/lib/reusable-workflow-load-adapter.d.mts +21 -0
- package/{dist/core/reusable-workflow-load-adapter.js → all/copy-overwrite/scripts/lib/reusable-workflow-load-adapter.mjs} +50 -41
- package/all/copy-overwrite/scripts/lib/reusable-workflow-load-failure.d.mts +29 -0
- package/all/copy-overwrite/scripts/lib/reusable-workflow-load-failure.mjs +124 -0
- package/all/copy-overwrite/scripts/lib/reusable-workflow-load-scan.d.mts +36 -0
- package/all/copy-overwrite/scripts/lib/reusable-workflow-load-scan.mjs +102 -0
- package/all/create-only/.github/workflows/workflow-load-failure-sweep.yml +42 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +64 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +21 -7
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +5 -5
- 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/scripts/check-workflow-load-failures.mjs +4 -0
- package/scripts/two-channel-couplings.json +1 -1
- package/typescript/copy-overwrite/.prettierignore +1 -0
- package/dist/core/reusable-workflow-load-adapter.d.ts +0 -78
- package/dist/core/reusable-workflow-load-adapter.d.ts.map +0 -1
- package/dist/core/reusable-workflow-load-adapter.js.map +0 -1
- package/dist/core/reusable-workflow-load-failure.d.ts +0 -144
- package/dist/core/reusable-workflow-load-failure.d.ts.map +0 -1
- package/dist/core/reusable-workflow-load-failure.js +0 -184
- package/dist/core/reusable-workflow-load-failure.js.map +0 -1
- package/dist/core/reusable-workflow-load-scan.d.ts +0 -92
- package/dist/core/reusable-workflow-load-scan.d.ts.map +0 -1
- package/dist/core/reusable-workflow-load-scan.js +0 -108
- package/dist/core/reusable-workflow-load-scan.js.map +0 -1
package/package.json
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"prepublishOnly": "$npm_execpath run build",
|
|
46
46
|
"check:plugins": "bash scripts/check-plugins-sync.sh",
|
|
47
47
|
"check:learnings-budget": "bun scripts/check-learnings-budget.ts",
|
|
48
|
-
"check:workflow-load-failures": "
|
|
48
|
+
"check:workflow-load-failures": "node scripts/check-workflow-load-failures.mjs",
|
|
49
49
|
"check:ui-demo-data": "node scripts/check-ui-demo-data.mjs",
|
|
50
50
|
"check:behavior-contract": "BDD_COVERAGE_ROOT=. node expo/copy-overwrite/scripts/check-bdd-coverage.mjs",
|
|
51
51
|
"bdd:coverage": "bun run check:behavior-contract",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"zod-validation-error": "^4.0.0"
|
|
188
188
|
},
|
|
189
189
|
"name": "@codyswann/lisa",
|
|
190
|
-
"version": "4.60.
|
|
190
|
+
"version": "4.60.5",
|
|
191
191
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
192
192
|
"main": "dist/index.js",
|
|
193
193
|
"exports": {
|
|
@@ -336,7 +336,7 @@
|
|
|
336
336
|
"test": "tests"
|
|
337
337
|
},
|
|
338
338
|
"types": "./dist/index.d.ts",
|
|
339
|
-
"lisaReleaseCommit": "
|
|
340
|
-
"gitHead": "
|
|
341
|
-
"lisaReleaseTag": "v4.60.
|
|
339
|
+
"lisaReleaseCommit": "0a6db7b0b7d219f3496e4c43e715c260a7b15c3e",
|
|
340
|
+
"gitHead": "0a6db7b0b7d219f3496e4c43e715c260a7b15c3e",
|
|
341
|
+
"lisaReleaseTag": "v4.60.5"
|
|
342
342
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.60.
|
|
3
|
+
"version": "4.60.5",
|
|
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.60.
|
|
3
|
+
"version": "4.60.5",
|
|
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.60.
|
|
3
|
+
"version": "4.60.5",
|
|
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.60.
|
|
3
|
+
"version": "4.60.5",
|
|
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.60.
|
|
3
|
+
"version": "4.60.5",
|
|
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"
|
|
@@ -77,6 +77,7 @@ scripts/check-third-party-action-pins.mjs
|
|
|
77
77
|
scripts/check-third-party-review-evidence.mjs
|
|
78
78
|
scripts/check-threshold-ratchet.mjs
|
|
79
79
|
scripts/check-verification-coverage.mjs
|
|
80
|
+
scripts/check-workflow-load-failures.mjs
|
|
80
81
|
scripts/classify-maestro-failures.mjs
|
|
81
82
|
scripts/lisa-command-envelope.mjs
|
|
82
83
|
scripts/lisa-commit-msg-gates.mjs
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Turn GitHub's run endpoints into the pages `core/reusable-workflow-load-scan`
|
|
3
|
-
* expects (CodySwannGT/lisa#3581).
|
|
4
|
-
*
|
|
5
|
-
* The HTTP request is injected. That keeps the endpoint shapes, the paging
|
|
6
|
-
* parameters and the response handling under test against a stub, which is the
|
|
7
|
-
* only way to prove this wiring without a live call whose rate limit decides
|
|
8
|
-
* whether the suite passes — the lesson a sibling lane paid twenty minutes of
|
|
9
|
-
* held-dirty tree to learn.
|
|
10
|
-
*
|
|
11
|
-
* ## Why this needs three endpoints and not one
|
|
12
|
-
*
|
|
13
|
-
* The run LIST gives id, caller path, timestamp and conclusion. It does not
|
|
14
|
-
* give the two facts the verdict actually turns on: `referenced_workflows`
|
|
15
|
-
* comes from the single-run endpoint, and the job count from the run's jobs
|
|
16
|
-
* endpoint. So a full scan is inherently N+1, and reading every run's detail
|
|
17
|
-
* across a wide window is the kind of request volume that gets a scheduled job
|
|
18
|
-
* rate-limited into a false green.
|
|
19
|
-
*
|
|
20
|
-
* The narrowing that makes it affordable is sound rather than convenient: a
|
|
21
|
-
* load failure is only reachable from a conclusion GitHub can produce BEFORE
|
|
22
|
-
* creating a job. Detail is therefore fetched only for those, and a run with
|
|
23
|
-
* any other conclusion keeps zeroes it never fetched.
|
|
24
|
-
*
|
|
25
|
-
* **Those zeroes are not measurements.** For a `success` run they are simply
|
|
26
|
-
* absent evidence, and the classifier's label for such a run is not meaningful
|
|
27
|
-
* — the only verdict this adapter's output supports is `load-failure`, which
|
|
28
|
-
* is the one the scan filters for. Anything that starts reporting per-verdict
|
|
29
|
-
* counts from these pages must fetch detail unconditionally first.
|
|
30
|
-
* @module core/reusable-workflow-load-adapter
|
|
31
|
-
*/
|
|
32
|
-
import type { RunPage } from "./reusable-workflow-load-scan.js";
|
|
33
|
-
/** GitHub's default and maximum page size for the runs endpoint. */
|
|
34
|
-
export declare const RUNS_PER_PAGE = 100;
|
|
35
|
-
/** Performs one authenticated GET and returns the decoded JSON body. */
|
|
36
|
-
export type GithubRequest = (path: string) => Promise<unknown>;
|
|
37
|
-
/** What the fetcher needs to address a repository. */
|
|
38
|
-
export interface AdapterOptions {
|
|
39
|
-
/** Repository in `owner/name` form. */
|
|
40
|
-
readonly repo: string;
|
|
41
|
-
/** The injected request function. */
|
|
42
|
-
readonly request: GithubRequest;
|
|
43
|
-
/** Page size; defaults to `RUNS_PER_PAGE`. */
|
|
44
|
-
readonly perPage?: number;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Path for one page of run history, newest first.
|
|
48
|
-
* @param repo - Repository in `owner/name` form
|
|
49
|
-
* @param page - 1-based page number
|
|
50
|
-
* @param perPage - Page size
|
|
51
|
-
* @returns The API path to request
|
|
52
|
-
*/
|
|
53
|
-
export declare function runsPath(repo: string, page: number, perPage: number): string;
|
|
54
|
-
/**
|
|
55
|
-
* Path for one run's detail, which is where `referenced_workflows` lives.
|
|
56
|
-
* @param repo - Repository in `owner/name` form
|
|
57
|
-
* @param id - The run id
|
|
58
|
-
* @returns The API path to request
|
|
59
|
-
*/
|
|
60
|
-
export declare function runPath(repo: string, id: number): string;
|
|
61
|
-
/**
|
|
62
|
-
* Path for one run's jobs, read only for its `total_count`.
|
|
63
|
-
* @param repo - Repository in `owner/name` form
|
|
64
|
-
* @param id - The run id
|
|
65
|
-
* @returns The API path to request
|
|
66
|
-
*/
|
|
67
|
-
export declare function jobsPath(repo: string, id: number): string;
|
|
68
|
-
/**
|
|
69
|
-
* Build the page fetcher `scanForLoadFailures` consumes.
|
|
70
|
-
*
|
|
71
|
-
* `hasMore` is derived from a full page rather than from `total_count`,
|
|
72
|
-
* because a run created while the scan is paging shifts `total_count` under
|
|
73
|
-
* it. A full page means "ask again"; a short page means the history ended.
|
|
74
|
-
* @param options - Repository, request function and page size
|
|
75
|
-
* @returns A fetcher for one 1-based page of run history
|
|
76
|
-
*/
|
|
77
|
-
export declare function createRunPageFetcher(options: AdapterOptions): (page: number) => Promise<RunPage>;
|
|
78
|
-
//# sourceMappingURL=reusable-workflow-load-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reusable-workflow-load-adapter.d.ts","sourceRoot":"","sources":["../../src/core/reusable-workflow-load-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,kCAAkC,CAAC;AAY5E,oEAAoE;AACpE,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,wEAAwE;AACxE,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/D,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzD;AA8ED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,GACtB,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAqBpC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reusable-workflow-load-adapter.js","sourceRoot":"","sources":["../../src/core/reusable-workflow-load-adapter.ts"],"names":[],"mappings":"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"}
|