@codyswann/lisa 3.45.6 → 3.45.8
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/all/copy-overwrite/scripts/lisa-floor-collisions.mjs +50 -3
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +5 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +9 -9
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-playwright-dedicated-caller.d.ts +77 -0
- package/dist/migrations/ensure-playwright-dedicated-caller.d.ts.map +1 -0
- package/dist/migrations/ensure-playwright-dedicated-caller.js +370 -0
- package/dist/migrations/ensure-playwright-dedicated-caller.js.map +1 -0
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +3 -0
- package/dist/migrations/index.js.map +1 -1
- package/expo/create-only/.github/workflows/nightly-e2e-report.yml +2 -2
- 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/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +5 -6
- package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +23 -16
- package/harper-fabric/copy-overwrite/.github/dependabot.yml +0 -47
- package/typescript/copy-overwrite/.github/dependabot.yml +0 -43
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.45.
|
|
3
|
+
"version": "3.45.8",
|
|
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.45.
|
|
3
|
+
"version": "3.45.8",
|
|
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.45.
|
|
3
|
+
"version": "3.45.8",
|
|
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.45.
|
|
3
|
+
"version": "3.45.8",
|
|
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.45.
|
|
3
|
+
"version": "3.45.8",
|
|
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"
|
|
@@ -653,12 +653,11 @@ with:
|
|
|
653
653
|
│ ├── claude-nightly-code-complexity.yml # Nightly code complexity
|
|
654
654
|
│ ├── auto-update-pr-branches.yml # Auto-update PRs from base
|
|
655
655
|
│ └── .env.example # Secrets template
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
└── dependabot.yml # Dependency updates
|
|
656
|
+
└── k6/
|
|
657
|
+
├── scripts/ # Test scripts
|
|
658
|
+
├── scenarios/ # Test configurations
|
|
659
|
+
├── thresholds/ # Performance thresholds
|
|
660
|
+
└── README.md # K6 documentation
|
|
662
661
|
```
|
|
663
662
|
|
|
664
663
|
## Troubleshooting
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
*
|
|
70
70
|
* ## Inherited from three implementations, with one path closed
|
|
71
71
|
*
|
|
72
|
-
* `DECISIVE_CONCLUSIONS` comes from
|
|
73
|
-
* because it is the right vocabulary. What is NOT kept is
|
|
72
|
+
* `DECISIVE_CONCLUSIONS` comes from acmeorgb's `check-nightly-e2e.mjs` and is
|
|
73
|
+
* kept because it is the right vocabulary. What is NOT kept is acmeorgb's
|
|
74
74
|
* `unknown`-passes-with-a-warning: that is a fail-open path, and here `unknown`
|
|
75
75
|
* fails once bootstrap closes. The bypass model and the context-pinning
|
|
76
76
|
* discipline come from acmeorgd (TUN-525 / TUN-402). The job-name filter comes from
|
|
@@ -236,7 +236,7 @@ export const ISSUE_ACTIONS = Object.freeze({
|
|
|
236
236
|
*
|
|
237
237
|
* The reporter used to state, in every issue it filed, that "pull requests into
|
|
238
238
|
* `<branch>` are blocked". That sentence was a hardcoded claim about somebody
|
|
239
|
-
* else's branch ruleset, and in
|
|
239
|
+
* else's branch ruleset, and in one measured adopter it was measurably FALSE: not
|
|
240
240
|
* one required context on `dev` matched this gate, so the suite blocked nothing
|
|
241
241
|
* — while people burned audited bypass labels to clear a gate that was not
|
|
242
242
|
* gating. An issue that misstates its own consequences is worse than one that
|
|
@@ -265,8 +265,8 @@ export const REQUIREDNESS = Object.freeze({
|
|
|
265
265
|
* easily these two strings drift apart.
|
|
266
266
|
*
|
|
267
267
|
* Overridable via the `gate_context` input, because a repo that has not yet
|
|
268
|
-
* converged onto the template publishes a different string
|
|
269
|
-
* publishes the bare `🌙 Nightly E2E Health`, with no job suffix
|
|
268
|
+
* converged onto the template publishes a different string — one adopter's fork
|
|
269
|
+
* publishes the bare `🌙 Nightly E2E Health`, with no job suffix.
|
|
270
270
|
*/
|
|
271
271
|
export const DEFAULT_GATE_CONTEXT = "🌙 Nightly E2E Health / 🌙 Gate";
|
|
272
272
|
|
|
@@ -1243,7 +1243,7 @@ export function resolveSuiteGrace(suite, maxDays, now) {
|
|
|
1243
1243
|
}
|
|
1244
1244
|
|
|
1245
1245
|
// ---------------------------------------------------------------------------
|
|
1246
|
-
// 4. Bypass — maintainers only,
|
|
1246
|
+
// 4. Bypass — maintainers only, reason required, auto-expiring, self-service
|
|
1247
1247
|
// ---------------------------------------------------------------------------
|
|
1248
1248
|
|
|
1249
1249
|
/**
|
|
@@ -1251,8 +1251,21 @@ export function resolveSuiteGrace(suite, maxDays, now) {
|
|
|
1251
1251
|
* the caller gathered.
|
|
1252
1252
|
*
|
|
1253
1253
|
* Every rejection carries a stable `reason` token so the audit says WHICH
|
|
1254
|
-
* condition failed.
|
|
1255
|
-
*
|
|
1254
|
+
* condition failed.
|
|
1255
|
+
*
|
|
1256
|
+
* The bypass is deliberately SELF-SERVICE: the PR's own author may apply the
|
|
1257
|
+
* label and have it honoured. It did not start that way — a `self_bypass`
|
|
1258
|
+
* rejection used to require a second person — and the measurement that removed
|
|
1259
|
+
* it is worth keeping next to the code. Across one portfolio repository, 93
|
|
1260
|
+
* pull requests carried the label and exactly ONE waiver was ever honoured,
|
|
1261
|
+
* because on a small team (and on any repo where an agent opens the PR) the
|
|
1262
|
+
* author and the only available labeller are the same party. A control that
|
|
1263
|
+
* fires on 1% of attempts is not protecting anything; it is routing the other
|
|
1264
|
+
* 99% onto the unaudited admin merge, which records nothing at all. The value
|
|
1265
|
+
* of this mechanism is the AUDIT RECORD, not the second pair of eyes, so every
|
|
1266
|
+
* arm that produces the record is kept and only the second-party requirement
|
|
1267
|
+
* is gone. `prAuthor` is therefore still carried onto the audit — recorded,
|
|
1268
|
+
* never used to reject. (Owner ruling, 2026-08-19.)
|
|
1256
1269
|
*
|
|
1257
1270
|
* `extraReasonPattern` is an ADDITIONAL requirement, never a replacement for
|
|
1258
1271
|
* `REQUIRED_BYPASS_REASON_PATTERN`. An override that could replace the built-in
|
|
@@ -1307,10 +1320,6 @@ export function evaluateBypass(request) {
|
|
|
1307
1320
|
detail: actorPermission ?? "unknown",
|
|
1308
1321
|
});
|
|
1309
1322
|
}
|
|
1310
|
-
if (prAuthor && labelEvent.actor.toLowerCase() === prAuthor.toLowerCase()) {
|
|
1311
|
-
return reject("self_bypass");
|
|
1312
|
-
}
|
|
1313
|
-
|
|
1314
1323
|
const cappedHours = Math.min(maxHours, BYPASS_ABSOLUTE_MAX_HOURS);
|
|
1315
1324
|
const appliedMs = Date.parse(labelEvent.createdAt);
|
|
1316
1325
|
if (Number.isNaN(appliedMs)) return reject("no_attributable_actor");
|
|
@@ -1368,8 +1377,6 @@ const BYPASS_REJECTIONS = Object.freeze({
|
|
|
1368
1377
|
"nobody can be shown to have applied it (the PR timeline was unreadable — this is normal on a fork PR). An unattributable bypass is not an audited bypass.",
|
|
1369
1378
|
actor_not_maintainer:
|
|
1370
1379
|
"the person who applied it does not have `admin` or `maintain` on this repository. Bypasses are maintainers only.",
|
|
1371
|
-
self_bypass:
|
|
1372
|
-
"it was applied by the PR's own author. A bypass one person can both request and grant is not a control.",
|
|
1373
1380
|
bypass_expired:
|
|
1374
1381
|
"it was applied longer ago than `bypass_max_hours` allows. Bypasses auto-expire so a label nobody removes cannot become a permanent hole.",
|
|
1375
1382
|
no_reason_or_ticket:
|
|
@@ -1595,7 +1602,7 @@ export function formatReport(verdict, context) {
|
|
|
1595
1602
|
` 2. Re-run the suite from the Actions tab against \`${context.branch}\`, running the WHOLE suite. A \`workflow_dispatch\` run counts exactly like a scheduled one, so a green dispatch clears this gate immediately — no waiting for tomorrow. What does not count is a NARROWED re-run: leave any platform / tag / shard picker on its "all" default, because a run that skipped an arm says nothing about that arm.`,
|
|
1596
1603
|
" 3. Re-run this check on your PR.",
|
|
1597
1604
|
"",
|
|
1598
|
-
`If the failure is in the harness rather than the app — or this IS the PR that fixes the red nightly —
|
|
1605
|
+
`If the failure is in the harness rather than the app — or this IS the PR that fixes the red nightly — waive the gate yourself: add a \`Nightly-E2E-Bypass: <TICKET> <reason>\` line to the PR body, then apply the \`${context.bypassLabel}\` label. You may apply it to your own PR; anyone with \`admin\` or \`maintain\` here can. The waiver auto-expires a bounded number of hours after the label goes on (\`bypass_max_hours\`, 24 by default, hard-capped at 72), so it cannot become a permanent hole. Prefer this route: it is the only way past this gate that records who waived it, under which ticket, and when the waiver expires. An admin merge may also be available — that is a property of this repository's own ruleset rather than of this gate, so read its bypass actors rather than assuming either way — but it leaves no such record.`
|
|
1599
1606
|
);
|
|
1600
1607
|
} else {
|
|
1601
1608
|
lines.push(
|
|
@@ -1851,7 +1858,7 @@ function meaningParagraph(claim, branch) {
|
|
|
1851
1858
|
* A bypass recipe printed unconditionally is how people end up applying an
|
|
1852
1859
|
* audited waiver label to a check that was never required — burning the audit
|
|
1853
1860
|
* trail the label exists to create, to buy a merge that was never blocked. That
|
|
1854
|
-
* happened in
|
|
1861
|
+
* happened in a measured adopter repository.
|
|
1855
1862
|
*
|
|
1856
1863
|
* @param {{state: string}} claim - Effective claim
|
|
1857
1864
|
* @param {{branch: string, bypassLabel: string}} context - Reporting context
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
2
|
-
# Do not edit directly — durable changes belong upstream in Lisa.
|
|
3
|
-
|
|
4
|
-
# Harper/Fabric override of the TypeScript dependabot template.
|
|
5
|
-
# A fresh Harper/Fabric repo ships with only a `main` branch, so this file
|
|
6
|
-
# omits `target-branch` — Dependabot then opens PRs against the repository's
|
|
7
|
-
# default branch instead of a `dev` branch that does not exist. If a project
|
|
8
|
-
# adopts a long-lived integration branch, set `target-branch` back per updater.
|
|
9
|
-
|
|
10
|
-
version: 2
|
|
11
|
-
updates:
|
|
12
|
-
# JavaScript/Node.js dependencies
|
|
13
|
-
- package-ecosystem: npm
|
|
14
|
-
directory: /
|
|
15
|
-
schedule:
|
|
16
|
-
interval: weekly
|
|
17
|
-
day: monday
|
|
18
|
-
open-pull-requests-limit: 10
|
|
19
|
-
groups:
|
|
20
|
-
production-dependencies:
|
|
21
|
-
dependency-type: production
|
|
22
|
-
update-types:
|
|
23
|
-
- minor
|
|
24
|
-
- patch
|
|
25
|
-
development-dependencies:
|
|
26
|
-
dependency-type: development
|
|
27
|
-
update-types:
|
|
28
|
-
- minor
|
|
29
|
-
- patch
|
|
30
|
-
labels:
|
|
31
|
-
- dependencies
|
|
32
|
-
commit-message:
|
|
33
|
-
prefix: 'chore(deps)'
|
|
34
|
-
prefix-development: 'chore(deps-dev)'
|
|
35
|
-
|
|
36
|
-
# GitHub Actions
|
|
37
|
-
- package-ecosystem: github-actions
|
|
38
|
-
directory: /
|
|
39
|
-
schedule:
|
|
40
|
-
interval: weekly
|
|
41
|
-
day: monday
|
|
42
|
-
open-pull-requests-limit: 5
|
|
43
|
-
labels:
|
|
44
|
-
- dependencies
|
|
45
|
-
- github-actions
|
|
46
|
-
commit-message:
|
|
47
|
-
prefix: 'ci(deps)'
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
2
|
-
# Do not edit directly — durable changes belong upstream in Lisa.
|
|
3
|
-
|
|
4
|
-
version: 2
|
|
5
|
-
updates:
|
|
6
|
-
# JavaScript/Node.js dependencies
|
|
7
|
-
- package-ecosystem: npm
|
|
8
|
-
directory: /
|
|
9
|
-
schedule:
|
|
10
|
-
interval: weekly
|
|
11
|
-
day: monday
|
|
12
|
-
target-branch: dev
|
|
13
|
-
open-pull-requests-limit: 10
|
|
14
|
-
groups:
|
|
15
|
-
production-dependencies:
|
|
16
|
-
dependency-type: production
|
|
17
|
-
update-types:
|
|
18
|
-
- minor
|
|
19
|
-
- patch
|
|
20
|
-
development-dependencies:
|
|
21
|
-
dependency-type: development
|
|
22
|
-
update-types:
|
|
23
|
-
- minor
|
|
24
|
-
- patch
|
|
25
|
-
labels:
|
|
26
|
-
- dependencies
|
|
27
|
-
commit-message:
|
|
28
|
-
prefix: 'chore(deps)'
|
|
29
|
-
prefix-development: 'chore(deps-dev)'
|
|
30
|
-
|
|
31
|
-
# GitHub Actions
|
|
32
|
-
- package-ecosystem: github-actions
|
|
33
|
-
directory: /
|
|
34
|
-
schedule:
|
|
35
|
-
interval: weekly
|
|
36
|
-
day: monday
|
|
37
|
-
target-branch: dev
|
|
38
|
-
open-pull-requests-limit: 5
|
|
39
|
-
labels:
|
|
40
|
-
- dependencies
|
|
41
|
-
- github-actions
|
|
42
|
-
commit-message:
|
|
43
|
-
prefix: 'ci(deps)'
|