@codyswann/lisa 3.45.4 → 3.45.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/all/copy-overwrite/scripts/check-state-classification.mjs +61 -9
- package/all/copy-overwrite/scripts/lisa-environment-prepare.mjs +25 -2
- package/all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh +12 -2
- 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 +6 -5
- package/dist/core/upstream-evidence-manifest.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/hooks/block-managed-file-edits.sh +12 -2
- 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-copilot/hooks/block-managed-file-edits.sh +12 -2
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-managed-file-edits.sh +12 -2
- 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/plugins/src/base/hooks/block-managed-file-edits.sh +12 -2
- package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +25 -1
package/package.json
CHANGED
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
"ws": ">=8.21.0"
|
|
133
133
|
},
|
|
134
134
|
"name": "@codyswann/lisa",
|
|
135
|
-
"version": "3.45.
|
|
135
|
+
"version": "3.45.5",
|
|
136
136
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
137
137
|
"main": "dist/index.js",
|
|
138
138
|
"exports": {
|
|
@@ -141,14 +141,24 @@ lisaignored() {
|
|
|
141
141
|
;;
|
|
142
142
|
esac
|
|
143
143
|
if [ "$selected" -ne 0 ]; then
|
|
144
|
-
#
|
|
144
|
+
# The pattern is a glob on purpose, so it is deliberately unquoted.
|
|
145
|
+
#
|
|
146
|
+
# The reason sits on its own line because a shellcheck directive is
|
|
147
|
+
# `key=value` pairs and NOTHING else. Written as
|
|
148
|
+
# `disable=SC2254 -- <prose>`, the trailing words are read as more
|
|
149
|
+
# directive keys: the directive fails with SC1072/SC1073, shellcheck
|
|
150
|
+
# stops checking the rest of THIS FILE, and SC2254 is left unsuppressed
|
|
151
|
+
# as well. Measured with shellcheck 0.11.0. Do not rejoin these lines.
|
|
152
|
+
# shellcheck disable=SC2254
|
|
145
153
|
case "$rel" in $pattern) selected=0 ;; esac
|
|
146
154
|
fi
|
|
147
155
|
if [ "$selected" -ne 0 ]; then
|
|
148
156
|
case "$pattern" in
|
|
149
157
|
*/*) ;;
|
|
150
158
|
*)
|
|
151
|
-
#
|
|
159
|
+
# Ditto, matched against the basename — and ditto about the reason
|
|
160
|
+
# living on its own line rather than after the directive.
|
|
161
|
+
# shellcheck disable=SC2254
|
|
152
162
|
case "${rel##*/}" in $pattern) selected=0 ;; esac
|
|
153
163
|
;;
|
|
154
164
|
esac
|
|
@@ -141,14 +141,24 @@ lisaignored() {
|
|
|
141
141
|
;;
|
|
142
142
|
esac
|
|
143
143
|
if [ "$selected" -ne 0 ]; then
|
|
144
|
-
#
|
|
144
|
+
# The pattern is a glob on purpose, so it is deliberately unquoted.
|
|
145
|
+
#
|
|
146
|
+
# The reason sits on its own line because a shellcheck directive is
|
|
147
|
+
# `key=value` pairs and NOTHING else. Written as
|
|
148
|
+
# `disable=SC2254 -- <prose>`, the trailing words are read as more
|
|
149
|
+
# directive keys: the directive fails with SC1072/SC1073, shellcheck
|
|
150
|
+
# stops checking the rest of THIS FILE, and SC2254 is left unsuppressed
|
|
151
|
+
# as well. Measured with shellcheck 0.11.0. Do not rejoin these lines.
|
|
152
|
+
# shellcheck disable=SC2254
|
|
145
153
|
case "$rel" in $pattern) selected=0 ;; esac
|
|
146
154
|
fi
|
|
147
155
|
if [ "$selected" -ne 0 ]; then
|
|
148
156
|
case "$pattern" in
|
|
149
157
|
*/*) ;;
|
|
150
158
|
*)
|
|
151
|
-
#
|
|
159
|
+
# Ditto, matched against the basename — and ditto about the reason
|
|
160
|
+
# living on its own line rather than after the directive.
|
|
161
|
+
# shellcheck disable=SC2254
|
|
152
162
|
case "${rel##*/}" in $pattern) selected=0 ;; esac
|
|
153
163
|
;;
|
|
154
164
|
esac
|
|
@@ -141,14 +141,24 @@ lisaignored() {
|
|
|
141
141
|
;;
|
|
142
142
|
esac
|
|
143
143
|
if [ "$selected" -ne 0 ]; then
|
|
144
|
-
#
|
|
144
|
+
# The pattern is a glob on purpose, so it is deliberately unquoted.
|
|
145
|
+
#
|
|
146
|
+
# The reason sits on its own line because a shellcheck directive is
|
|
147
|
+
# `key=value` pairs and NOTHING else. Written as
|
|
148
|
+
# `disable=SC2254 -- <prose>`, the trailing words are read as more
|
|
149
|
+
# directive keys: the directive fails with SC1072/SC1073, shellcheck
|
|
150
|
+
# stops checking the rest of THIS FILE, and SC2254 is left unsuppressed
|
|
151
|
+
# as well. Measured with shellcheck 0.11.0. Do not rejoin these lines.
|
|
152
|
+
# shellcheck disable=SC2254
|
|
145
153
|
case "$rel" in $pattern) selected=0 ;; esac
|
|
146
154
|
fi
|
|
147
155
|
if [ "$selected" -ne 0 ]; then
|
|
148
156
|
case "$pattern" in
|
|
149
157
|
*/*) ;;
|
|
150
158
|
*)
|
|
151
|
-
#
|
|
159
|
+
# Ditto, matched against the basename — and ditto about the reason
|
|
160
|
+
# living on its own line rather than after the directive.
|
|
161
|
+
# shellcheck disable=SC2254
|
|
152
162
|
case "${rel##*/}" in $pattern) selected=0 ;; esac
|
|
153
163
|
;;
|
|
154
164
|
esac
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.45.
|
|
3
|
+
"version": "3.45.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": "3.45.
|
|
3
|
+
"version": "3.45.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": "3.45.
|
|
3
|
+
"version": "3.45.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": "3.45.
|
|
3
|
+
"version": "3.45.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": "3.45.
|
|
3
|
+
"version": "3.45.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"
|
|
@@ -141,14 +141,24 @@ lisaignored() {
|
|
|
141
141
|
;;
|
|
142
142
|
esac
|
|
143
143
|
if [ "$selected" -ne 0 ]; then
|
|
144
|
-
#
|
|
144
|
+
# The pattern is a glob on purpose, so it is deliberately unquoted.
|
|
145
|
+
#
|
|
146
|
+
# The reason sits on its own line because a shellcheck directive is
|
|
147
|
+
# `key=value` pairs and NOTHING else. Written as
|
|
148
|
+
# `disable=SC2254 -- <prose>`, the trailing words are read as more
|
|
149
|
+
# directive keys: the directive fails with SC1072/SC1073, shellcheck
|
|
150
|
+
# stops checking the rest of THIS FILE, and SC2254 is left unsuppressed
|
|
151
|
+
# as well. Measured with shellcheck 0.11.0. Do not rejoin these lines.
|
|
152
|
+
# shellcheck disable=SC2254
|
|
145
153
|
case "$rel" in $pattern) selected=0 ;; esac
|
|
146
154
|
fi
|
|
147
155
|
if [ "$selected" -ne 0 ]; then
|
|
148
156
|
case "$pattern" in
|
|
149
157
|
*/*) ;;
|
|
150
158
|
*)
|
|
151
|
-
#
|
|
159
|
+
# Ditto, matched against the basename — and ditto about the reason
|
|
160
|
+
# living on its own line rather than after the directive.
|
|
161
|
+
# shellcheck disable=SC2254
|
|
152
162
|
case "${rel##*/}" in $pattern) selected=0 ;; esac
|
|
153
163
|
;;
|
|
154
164
|
esac
|
|
@@ -2342,6 +2342,19 @@ export async function fetchAllJobs(api, runId, wait) {
|
|
|
2342
2342
|
export async function fetchRequiredness(api, branch, gateContext, wait) {
|
|
2343
2343
|
const unknown = detail =>
|
|
2344
2344
|
Object.freeze({ state: REQUIREDNESS.unknown, detail, contexts: [] });
|
|
2345
|
+
// No context, no measurement. `resolveSettings` can no longer produce an
|
|
2346
|
+
// empty one, but this is the place where an empty one does its damage, and a
|
|
2347
|
+
// guard belongs where the harm lands as well as where it originates: matching
|
|
2348
|
+
// every required check against `""` yields zero matches, which is
|
|
2349
|
+
// indistinguishable from a branch that genuinely does not require this gate.
|
|
2350
|
+
// It is not a throw — §10.4 forbids the reporter becoming an outage — and it
|
|
2351
|
+
// is not `not_required`, because "nobody told me which check to look for" is
|
|
2352
|
+
// the third state this function already has.
|
|
2353
|
+
if (typeof gateContext !== "string" || gateContext.trim().length === 0) {
|
|
2354
|
+
return unknown(
|
|
2355
|
+
"no gate context was configured, so there is nothing to match required checks against — an unmatched empty context is not evidence that this gate is unrequired"
|
|
2356
|
+
);
|
|
2357
|
+
}
|
|
2345
2358
|
let result;
|
|
2346
2359
|
try {
|
|
2347
2360
|
result = await apiGet(
|
|
@@ -2931,7 +2944,18 @@ export function resolveSettings(env) {
|
|
|
2931
2944
|
// configured into silence by omitting a variable is the shape this file
|
|
2932
2945
|
// refuses, but the REPORTER's equivalent risk is the opposite one: a
|
|
2933
2946
|
// missing decoration must not stop the notification going out.
|
|
2934
|
-
|
|
2947
|
+
// TRIMMED BEFORE THE FALLBACK, never after. `(env.X || DEFAULT).trim()`
|
|
2948
|
+
// read `NIGHTLY_GATE_CONTEXT=" "` as a configured value — whitespace is
|
|
2949
|
+
// truthy — so the fallback never fired and the context resolved to `""`.
|
|
2950
|
+
// An empty context matches no required check (`contextMatchesGate` can
|
|
2951
|
+
// satisfy neither half of its ` / ` test against it), so `fetchRequiredness`
|
|
2952
|
+
// answered `not_required` for a branch the gate really does guard, and the
|
|
2953
|
+
// run still exited successfully: a gate switching itself off and printing
|
|
2954
|
+
// green. Unset and whitespace-only come from the same place — an unfilled
|
|
2955
|
+
// workflow input — and now resolve the same way, which is what `branch` and
|
|
2956
|
+
// `suites` above already do.
|
|
2957
|
+
gateContext:
|
|
2958
|
+
(env.NIGHTLY_GATE_CONTEXT ?? "").trim() || DEFAULT_GATE_CONTEXT,
|
|
2935
2959
|
// Opt-in. Pinning writes to a repository-wide, three-slot surface that
|
|
2936
2960
|
// nothing else in this file touches, so it stays off until a caller asks.
|
|
2937
2961
|
pinIssues: /^(1|true|yes)$/i.test(String(env.NIGHTLY_PIN_ISSUES ?? "")),
|