@codyswann/lisa 4.69.5 → 4.70.1
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/lib/history-secret-git.mjs +212 -0
- package/all/copy-overwrite/scripts/lib/history-secret-policy.mjs +39 -0
- package/all/copy-overwrite/scripts/lib/history-secret-scanner.mjs +353 -0
- package/all/copy-overwrite/scripts/lisa-gates.mjs +26 -10
- package/all/copy-overwrite/scripts/lisa-history-secrets.mjs +122 -0
- package/all/copy-overwrite/scripts/lisa-rails-prepush.mjs +90 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +46 -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 +28 -4
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-required-history-secret-gate.d.ts +19 -0
- package/dist/migrations/ensure-required-history-secret-gate.d.ts.map +1 -0
- package/dist/migrations/ensure-required-history-secret-gate.js +94 -0
- package/dist/migrations/ensure-required-history-secret-gate.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/package.json +4 -4
- 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/copy-overwrite/lefthook.yml +2 -1
- package/scripts/two-channel-couplings.json +31 -7
- package/typescript/copy-overwrite/.prettierignore +2 -0
|
@@ -33,7 +33,8 @@ commit-msg:
|
|
|
33
33
|
pre-push:
|
|
34
34
|
commands:
|
|
35
35
|
work-item:
|
|
36
|
-
run:
|
|
36
|
+
run: >-
|
|
37
|
+
node --input-type=module -e 'try { const { main } = await import("./scripts/lisa-rails-prepush.mjs"); process.exitCode = await main(process.argv.slice(1)); } catch { console.error("Managed Rails push tooling is unavailable or damaged. Run full Lisa apply and retry; raw bootstrap errors are withheld."); process.exitCode = 1; }' {1}
|
|
37
38
|
use_stdin: true
|
|
38
39
|
rspec:
|
|
39
40
|
# One supervisor boundary: run-scoped scratch, an outside cleanup
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
"quality.yml::scripts/generate-nightly-e2e-guard-certificate.mjs": "Lisa-source-only branch. Both reusable jobs require `github.repository == 'CodySwannGT/lisa'` before the step can start, and the run body repeats that exact repository guard before checking this artifact path. Ordinary and private host callers therefore skip the step without reading or fetching from their own tree. The scoped branch fetches only the immutable refs needed to behavior-test Lisa's own retained certificate inputs. Ratified because the caller-tree read is unreachable outside this repository, not because an undelivered host dependency is tolerated."
|
|
5
5
|
},
|
|
6
6
|
"staleness": {
|
|
7
|
+
"history-secrets.yml::scripts/lib/history-secret-policy.mjs": {
|
|
8
|
+
"decision": "warranted",
|
|
9
|
+
"reason": "Verdict-bearing required route delivered through full Lisa apply. An absent policy helper fails its import with static actionable guidance; the existence test chooses the emitted or Lisa-source directory and does not measure age. A successful historyPolicy import and required builtin resolution establish capability only. Neither the reusable workflow's contract major nor the pinned Gitleaks binary checksum/version establishes the installed policy/range helper's contract version. A superseded helper could interpret the declaration or required facade differently, so an artifact version handshake is warranted and remains an open obligation rather than a claimed handshake or exemption."
|
|
10
|
+
},
|
|
7
11
|
"create-github-issue-on-failure.yml::scripts/nightly-e2e-provider-action.mjs": {
|
|
8
12
|
"decision": "not-needed",
|
|
9
13
|
"reason": "Advisory transport, not a verdict. The script files and reconciles a tracker issue about a nightly run that has ALREADY failed; it posts no check context and no job depends on its answer. A superseded copy files a differently-shaped issue, which lands in front of a human who can see it — the visible failure, not the believed-red one this dimension exists to catch. A handshake here would gate issue filing on a version comparison and buy no cover."
|
|
@@ -94,14 +98,14 @@
|
|
|
94
98
|
}
|
|
95
99
|
},
|
|
96
100
|
"inspected": {
|
|
97
|
-
"workflows":
|
|
98
|
-
"steps":
|
|
99
|
-
"couplings":
|
|
100
|
-
"inventory":
|
|
101
|
+
"workflows": 24,
|
|
102
|
+
"steps": 789,
|
|
103
|
+
"couplings": 34,
|
|
104
|
+
"inventory": 95
|
|
101
105
|
},
|
|
102
106
|
"counts": {
|
|
103
107
|
"package-backed": 10,
|
|
104
|
-
"apply-lagged":
|
|
108
|
+
"apply-lagged": 22,
|
|
105
109
|
"never-delivered": 0,
|
|
106
110
|
"undelivered": 2
|
|
107
111
|
},
|
|
@@ -109,13 +113,13 @@
|
|
|
109
113
|
"version-handshake": 4,
|
|
110
114
|
"capability-probe": 0,
|
|
111
115
|
"existence-only": 5,
|
|
112
|
-
"no-probe":
|
|
116
|
+
"no-probe": 13,
|
|
113
117
|
"unchecked": 2
|
|
114
118
|
},
|
|
115
119
|
"decisionCounts": {
|
|
116
120
|
"handshake": 4,
|
|
117
121
|
"not-needed": 11,
|
|
118
|
-
"warranted":
|
|
122
|
+
"warranted": 9
|
|
119
123
|
},
|
|
120
124
|
"couplings": [
|
|
121
125
|
{
|
|
@@ -190,6 +194,26 @@
|
|
|
190
194
|
],
|
|
191
195
|
"detail": "`create-sentry-issue-on-failure.yml` is delivered at `@main`, so this step is live in every consumer on their next run. It reads `scripts/nightly-e2e-provider-action.mjs` from the CALLER's tree with no package-relative candidate, and Lisa delivers that path on the `lisa apply` channel (typescript/copy-overwrite). The two halves land in the wrong order: this step is live everywhere immediately, the file it needs is live only where somebody applied. No existence test guards the read, which is ALL this scan examined of the step's control flow: it did not read anything that could absorb the failure. An absent path most likely fails the job loudly — the better of the two failures, because it is visible — but that is inferred from the missing guard, NOT MEASURED. The step's text carries none of the tokens this scan can see (`else-branch`, `exit-zero`, `exit-nonzero`, `error-annotation`, `notice-annotation`, `failure-suppression`), which is a statement about those names and not about the step's behaviour. STALENESS (a separate dimension from the delivery verdict above): `no-probe`. Neither an existence test nor a version probe bears on this read, so nothing here distinguishes a current artifact from an absent or a superseded one. None of the staleness tokens this scan can see (`artifact-declares-version`, `artifact-answers-version`, `step-requests-version`, `workflow-requests-version`) were found."
|
|
192
196
|
},
|
|
197
|
+
{
|
|
198
|
+
"key": "history-secrets.yml::scripts/lib/history-secret-policy.mjs",
|
|
199
|
+
"workflow": "history-secrets.yml",
|
|
200
|
+
"path": "scripts/lib/history-secret-policy.mjs",
|
|
201
|
+
"channel": "apply",
|
|
202
|
+
"verdict": "apply-lagged",
|
|
203
|
+
"remedy": "run-lisa-apply",
|
|
204
|
+
"guarded": false,
|
|
205
|
+
"handling": [
|
|
206
|
+
"else-branch"
|
|
207
|
+
],
|
|
208
|
+
"detection": "no-probe",
|
|
209
|
+
"stalenessSignals": [],
|
|
210
|
+
"decision": "warranted",
|
|
211
|
+
"reason": "Verdict-bearing required route delivered through full Lisa apply. An absent policy helper fails its import with static actionable guidance; the existence test chooses the emitted or Lisa-source directory and does not measure age. A successful historyPolicy import and required builtin resolution establish capability only. Neither the reusable workflow's contract major nor the pinned Gitleaks binary checksum/version establishes the installed policy/range helper's contract version. A superseded helper could interpret the declaration or required facade differently, so an artifact version handshake is warranted and remains an open obligation rather than a claimed handshake or exemption.",
|
|
212
|
+
"lanes": [
|
|
213
|
+
"all/copy-overwrite"
|
|
214
|
+
],
|
|
215
|
+
"detail": "`history-secrets.yml` is delivered at `@main`, so this step is live in every consumer on their next run. It reads `scripts/lib/history-secret-policy.mjs` from the CALLER's tree with no package-relative candidate, and Lisa delivers that path on the `lisa apply` channel (all/copy-overwrite). The two halves land in the wrong order: this step is live everywhere immediately, the file it needs is live only where somebody applied. No existence test guards the read, which is ALL this scan examined of the step's control flow: it did not read anything that could absorb the failure. An absent path most likely fails the job loudly — the better of the two failures, because it is visible — but that is inferred from the missing guard, NOT MEASURED. The step's text does carry `else-branch` — located in the step, deliberately NOT related to this read, and enough to make \"it skips silently\" a claim to check rather than assume. STALENESS (a separate dimension from the delivery verdict above): `no-probe`. Neither an existence test nor a version probe bears on this read, so nothing here distinguishes a current artifact from an absent or a superseded one. None of the staleness tokens this scan can see (`artifact-declares-version`, `artifact-answers-version`, `step-requests-version`, `workflow-requests-version`) were found."
|
|
216
|
+
},
|
|
193
217
|
{
|
|
194
218
|
"key": "maestro-native-e2e.yml::scripts/classify-maestro-failures.mjs",
|
|
195
219
|
"workflow": "maestro-native-e2e.yml",
|
|
@@ -86,9 +86,11 @@ scripts/lisa-destructive-guard.mjs
|
|
|
86
86
|
scripts/lisa-environment-prepare.mjs
|
|
87
87
|
scripts/lisa-floor-collisions.mjs
|
|
88
88
|
scripts/lisa-gates.mjs
|
|
89
|
+
scripts/lisa-history-secrets.mjs
|
|
89
90
|
scripts/lisa-lint-staged-preflight.mjs
|
|
90
91
|
scripts/lisa-mutation.mjs
|
|
91
92
|
scripts/lisa-postinstall.mjs
|
|
93
|
+
scripts/lisa-rails-prepush.mjs
|
|
92
94
|
scripts/lisa-reconcile-policy.mjs
|
|
93
95
|
scripts/lisa-run-gates.mjs
|
|
94
96
|
scripts/lisa-schema-validate.mjs
|