@codyswann/lisa 4.27.4 → 4.27.6
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-enforcement-fallback.sh +27 -4
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +167 -2
- package/dist/cli/doctor-enforcement-coverage.d.ts +14 -0
- package/dist/cli/doctor-enforcement-coverage.d.ts.map +1 -0
- package/dist/cli/doctor-enforcement-coverage.js +103 -0
- package/dist/cli/doctor-enforcement-coverage.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +9 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/core/enforcement-census-report.d.ts +19 -0
- package/dist/core/enforcement-census-report.d.ts.map +1 -0
- package/dist/core/enforcement-census-report.js +198 -0
- package/dist/core/enforcement-census-report.js.map +1 -0
- package/dist/core/enforcement-census.d.ts +177 -0
- package/dist/core/enforcement-census.d.ts.map +1 -0
- package/dist/core/enforcement-census.js +252 -0
- package/dist/core/enforcement-census.js.map +1 -0
- package/dist/core/enforcement-coverage.d.ts +168 -0
- package/dist/core/enforcement-coverage.d.ts.map +1 -0
- package/dist/core/enforcement-coverage.js +342 -0
- package/dist/core/enforcement-coverage.js.map +1 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +10 -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 +25 -7
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-push-default-safe.d.ts +50 -0
- package/dist/migrations/ensure-push-default-safe.d.ts.map +1 -0
- package/dist/migrations/ensure-push-default-safe.js +159 -0
- package/dist/migrations/ensure-push-default-safe.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 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +8 -1
- package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa/skills/lisa-sync-down/SKILL.md +8 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa-agy/skills/lisa-sync-down/SKILL.md +8 -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/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa-copilot/skills/lisa-sync-down/SKILL.md +8 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa-cursor/skills/lisa-sync-down/SKILL.md +8 -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/plugins/src/base/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/src/base/skills/lisa-sync-down/SKILL.md +8 -1
- package/scripts/lisa-commit-and-pr-local.sh +22 -6
- package/scripts/lisa-enforcement-census.mjs +168 -0
- package/scripts/lisa-enforcement-fallback.sh +27 -4
- package/typescript/copy-contents/.husky/pre-push +70 -0
|
@@ -127,8 +127,15 @@ source-only work downward.
|
|
|
127
127
|
If residue remains after applying the appropriate pattern, abort that hop and
|
|
128
128
|
report the unresolved files and the evidence gathered. Do not silently choose
|
|
129
129
|
source-wins when the target may already contain the change or has moved the code.
|
|
130
|
-
5. **Push** the sync branch
|
|
130
|
+
5. **Push** the sync branch with a fully qualified destination refspec:
|
|
131
|
+
`git push origin sync/<source>-to-<target>:refs/heads/sync/<source>-to-<target> --force-with-lease`.
|
|
131
132
|
Only ever force-push the sync branch — never the target environment branch.
|
|
133
|
+
The refspec is not decoration. `push -u origin <branch>` names only a
|
|
134
|
+
source, so git resolves the destination from the branch's upstream; where
|
|
135
|
+
`push.default` is `upstream` and the sync branch was created from the
|
|
136
|
+
target, that resolves to the TARGET ENVIRONMENT BRANCH and a force-push
|
|
137
|
+
lands there (CodySwannGT/lisa#3495). Naming the destination in full is
|
|
138
|
+
what makes the sentence above enforceable rather than advisory.
|
|
132
139
|
6. **Open or update the PR.** Check for an existing open PR
|
|
133
140
|
(`gh pr list --head sync/<source>-to-<target> --base <target> --state open`).
|
|
134
141
|
Update its body if it exists, otherwise create it
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.27.
|
|
3
|
+
"version": "4.27.6",
|
|
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.27.
|
|
3
|
+
"version": "4.27.6",
|
|
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.27.
|
|
3
|
+
"version": "4.27.6",
|
|
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.27.
|
|
3
|
+
"version": "4.27.6",
|
|
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.27.
|
|
3
|
+
"version": "4.27.6",
|
|
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"
|
|
@@ -207,6 +207,29 @@ project: the per-check marker dedupe converges under a single scheduled runner,
|
|
|
207
207
|
and two concurrent runs can both observe an empty open-ticket set and both
|
|
208
208
|
file. Tear-down removes it with the rest of the `lisa-auto-<project>-*` set.
|
|
209
209
|
|
|
210
|
+
**Optional automation — the fleet enforcement census.** Register
|
|
211
|
+
`lisa-auto-<project>-enforcement-census` running `/lisa:enforcement-census`
|
|
212
|
+
once a **day** only when BOTH are true of the repository being set up: it
|
|
213
|
+
maintains a fleet roster (`.lisa.workspaces.json`, the machine-local list of
|
|
214
|
+
host checkouts), and it provides the `/lisa:enforcement-census` command. Both
|
|
215
|
+
hold in the Lisa monorepo and in no ordinary host project, which is the point —
|
|
216
|
+
the census measures OTHER checkouts on the same machine, so only the workstation
|
|
217
|
+
holding the roster has a fleet to measure. Where either is absent, register
|
|
218
|
+
nothing — a host project has no fleet, and scheduling a command it does not
|
|
219
|
+
have would be a loop that fails every night — and report the census as SKIPPED
|
|
220
|
+
naming which prerequisite was missing, per the report contract. Registering
|
|
221
|
+
nothing is correct; omitting it from the report is not, because a silently
|
|
222
|
+
absent loop is indistinguishable from one that was never asked for.
|
|
223
|
+
|
|
224
|
+
It **reports and never gates**: no finding about the fleet changes an exit
|
|
225
|
+
status, and no run files a ticket. Enforcement resolves from the checkout an
|
|
226
|
+
agent is working in, so a checkout resolving no guard is protected by nothing
|
|
227
|
+
while looking identical, from inside a session, to one protected by an old
|
|
228
|
+
policy — and nothing was re-measuring that (CodySwannGT/lisa#3490). The
|
|
229
|
+
per-checkout half of the same finding is carried by `lisa doctor`, which every
|
|
230
|
+
host does get. Tear-down removes it with the rest of the `lisa-auto-<project>-*`
|
|
231
|
+
set.
|
|
232
|
+
|
|
210
233
|
**Exploratory PRD pressure gate.** `auto-start-prds=true` means "create PRDs in the ready PRD
|
|
211
234
|
lifecycle when the PRD queue has capacity," not "always create a new ready PRD." The
|
|
212
235
|
`exploratory-prds` automation uses the same PRD source queue and pressure roles reported by
|
|
@@ -127,8 +127,15 @@ source-only work downward.
|
|
|
127
127
|
If residue remains after applying the appropriate pattern, abort that hop and
|
|
128
128
|
report the unresolved files and the evidence gathered. Do not silently choose
|
|
129
129
|
source-wins when the target may already contain the change or has moved the code.
|
|
130
|
-
5. **Push** the sync branch
|
|
130
|
+
5. **Push** the sync branch with a fully qualified destination refspec:
|
|
131
|
+
`git push origin sync/<source>-to-<target>:refs/heads/sync/<source>-to-<target> --force-with-lease`.
|
|
131
132
|
Only ever force-push the sync branch — never the target environment branch.
|
|
133
|
+
The refspec is not decoration. `push -u origin <branch>` names only a
|
|
134
|
+
source, so git resolves the destination from the branch's upstream; where
|
|
135
|
+
`push.default` is `upstream` and the sync branch was created from the
|
|
136
|
+
target, that resolves to the TARGET ENVIRONMENT BRANCH and a force-push
|
|
137
|
+
lands there (CodySwannGT/lisa#3495). Naming the destination in full is
|
|
138
|
+
what makes the sentence above enforceable rather than advisory.
|
|
132
139
|
6. **Open or update the PR.** Check for an existing open PR
|
|
133
140
|
(`gh pr list --head sync/<source>-to-<target> --base <target> --state open`).
|
|
134
141
|
Update its body if it exists, otherwise create it
|
|
@@ -148,9 +148,18 @@ while IFS=$'\t' read -r project_path target_branch; do
|
|
|
148
148
|
continue
|
|
149
149
|
fi
|
|
150
150
|
|
|
151
|
-
# Create branch
|
|
151
|
+
# Create branch.
|
|
152
|
+
#
|
|
153
|
+
# `--no-track` is load-bearing, not tidiness. Without it the new branch
|
|
154
|
+
# inherits "$target_branch" as its upstream, and in any repository where
|
|
155
|
+
# push.default is "upstream" or "tracking" git resolves a push's destination
|
|
156
|
+
# from that upstream rather than from the branch name — so the push below
|
|
157
|
+
# would land on the environment branch itself, bypassing branch protection
|
|
158
|
+
# and every required check, while reporting success (CodySwannGT/lisa#3495).
|
|
159
|
+
# This script runs across a whole fleet of repositories at once, so it cannot
|
|
160
|
+
# assume any one of them has a safe push.default.
|
|
152
161
|
log_info "Creating branch: $branch_name"
|
|
153
|
-
if ! git -C "$expanded_path"
|
|
162
|
+
if ! git -C "$expanded_path" switch -c "$branch_name" --no-track "$target_branch" 2>&1; then
|
|
154
163
|
log_error "Failed to create branch $branch_name in $expanded_path"
|
|
155
164
|
((fail_count++)) || true
|
|
156
165
|
continue
|
|
@@ -169,17 +178,24 @@ while IFS=$'\t' read -r project_path target_branch; do
|
|
|
169
178
|
continue
|
|
170
179
|
fi
|
|
171
180
|
|
|
172
|
-
# Push
|
|
181
|
+
# Push with a FULLY QUALIFIED destination refspec. `push -u origin <branch>`
|
|
182
|
+
# names only a source, which leaves the destination for push.default to
|
|
183
|
+
# resolve; `<branch>:refs/heads/<branch>` states it, so no config can move it.
|
|
184
|
+
# Belt and braces with --no-track above: either alone closes the hole, and
|
|
185
|
+
# this script has no way to verify which of them a given host repository
|
|
186
|
+
# needed.
|
|
173
187
|
log_info "Pushing to origin/$branch_name..."
|
|
174
|
-
if ! GIT_SSH_COMMAND="ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=5" git -C "$expanded_path" push
|
|
188
|
+
if ! GIT_SSH_COMMAND="ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=5" git -C "$expanded_path" push origin "$branch_name:refs/heads/$branch_name" 2>&1; then
|
|
175
189
|
log_error "Failed to push $branch_name in $expanded_path"
|
|
176
190
|
((fail_count++)) || true
|
|
177
191
|
continue
|
|
178
192
|
fi
|
|
179
193
|
|
|
180
|
-
# Create PR
|
|
194
|
+
# Create PR. `--head` is explicit because the push above deliberately does not
|
|
195
|
+
# set an upstream, and without one `gh` would fall back to guessing (or
|
|
196
|
+
# prompting for) the head branch.
|
|
181
197
|
log_info "Creating pull request..."
|
|
182
|
-
if ! (cd "$expanded_path" && gh pr create --title "chore: update Lisa configuration" --base "$target_branch" --body "Automated Lisa configuration update applied on $DATE_STAMP."); then
|
|
198
|
+
if ! (cd "$expanded_path" && gh pr create --title "chore: update Lisa configuration" --base "$target_branch" --head "$branch_name" --body "Automated Lisa configuration update applied on $DATE_STAMP."); then
|
|
183
199
|
log_error "Failed to create PR for $expanded_path"
|
|
184
200
|
((fail_count++)) || true
|
|
185
201
|
continue
|