@codyswann/lisa 4.33.8 → 4.33.10
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/README.md +22 -0
- package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +44 -1
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +361 -10
- package/dist/configs/vitest/base.d.ts +76 -11
- package/dist/configs/vitest/base.d.ts.map +1 -1
- package/dist/configs/vitest/base.js +121 -14
- package/dist/configs/vitest/base.js.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +12 -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/nightly-e2e-guard-behavior-certificate.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +12 -9
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts +26 -15
- package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.js +43 -20
- package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
- package/dist/opencode/plugin-templates/parity-safety-net.sh +44 -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/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +17 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa/hooks/parity-safety-net.sh +44 -1
- package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +17 -2
- package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa-agy/hooks/parity-safety-net.sh +44 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +17 -2
- package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +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/parity-safety-net.sh +44 -1
- package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +17 -2
- package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +44 -1
- package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +17 -2
- package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +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/plugins/src/base/hooks/parity-safety-net.sh +44 -1
- package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +17 -2
- package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +1 -1
- package/scripts/install-claude-plugins.sh +22 -4
- package/scripts/two-channel-couplings.json +1 -1
- package/typescript/copy-overwrite/scripts/lisa-mutation.mjs +96 -12
- package/typescript/copy-overwrite/scripts/reconcile-nightly-e2e-tracking.mjs +3 -2
|
@@ -1687,7 +1687,50 @@ fi
|
|
|
1687
1687
|
|
|
1688
1688
|
# 13. Dropping or truncating a database / schema / table (Lisa-only guard —
|
|
1689
1689
|
# upstream has no SQL protection; keep).
|
|
1690
|
-
|
|
1690
|
+
#
|
|
1691
|
+
# The two arms used to be asymmetric, and only the lopsided one produced false
|
|
1692
|
+
# positives (issue #3530). The `drop` arm requires a following keyword —
|
|
1693
|
+
# `drop database|schema|table` — so `drop the ball` never matched it. The
|
|
1694
|
+
# `truncate` arm made that keyword OPTIONAL:
|
|
1695
|
+
#
|
|
1696
|
+
# truncate[[:space:]]+(table[[:space:]]+)?[[:alnum:]_."`]+
|
|
1697
|
+
#
|
|
1698
|
+
# which reduces to "`truncate`, whitespace, any identifier-ish word", so
|
|
1699
|
+
# `truncate the board`, `truncate results` and `truncate output` all matched.
|
|
1700
|
+
# A session was refused for a bug-report TITLE describing a connection that
|
|
1701
|
+
# truncates results — and a title has no escape hatch, because the remedy this
|
|
1702
|
+
# hook prints at the wall (write the text to a file, pass it BY PATH) covers a
|
|
1703
|
+
# body, while the title flag of an issue-filing CLI is necessarily inline. The
|
|
1704
|
+
# only exit left was to reword, which is what trains people to route around a
|
|
1705
|
+
# guard.
|
|
1706
|
+
#
|
|
1707
|
+
# The fix keeps the coverage and drops the English, in three arms.
|
|
1708
|
+
#
|
|
1709
|
+
# ARM 1 — `drop`, byte-identical to before. It was already correct, and a
|
|
1710
|
+
# rewrite that unified the arms could only make it permissive.
|
|
1711
|
+
readonly SQL_DROP='\bdrop[[:space:]]+(database|schema|table)\b'
|
|
1712
|
+
# ARM 2 — `truncate` carrying its own evidence that it is a statement rather
|
|
1713
|
+
# than a verb: the TABLE keyword (what the drop arm demands), a
|
|
1714
|
+
# schema-qualified name, a quoted identifier, a trailing `;`, or one of the
|
|
1715
|
+
# tail keywords that only ever follow a TRUNCATE. English has none of these.
|
|
1716
|
+
readonly SQL_TRUNCATE_TAIL='(cascade|restrict|restart[[:space:]]+identity|continue[[:space:]]+identity)([^[:alnum:]_]|$)'
|
|
1717
|
+
readonly SQL_TRUNCATE_EVIDENCE='\btruncate[[:space:]]+(table[[:space:]]+[[:alnum:]_."`]+|(only[[:space:]]+)?([[:alnum:]_]+\.[[:alnum:]_."`]+|["`][[:alnum:]_. ]+["`]|[[:alnum:]_]+[[:space:]]*(;|'"$SQL_TRUNCATE_TAIL"')))'
|
|
1718
|
+
# ARM 3 — the permissive-dialect `TRUNCATE <name>` with none of that evidence.
|
|
1719
|
+
# Deleting this shape is what a lazy fix does: it passes every prose scenario
|
|
1720
|
+
# while silently removing the coverage a regression fixture already asserts
|
|
1721
|
+
# (`mysql -e 'TRUNCATE sessions'`). So it is recognized by CONTEXT instead —
|
|
1722
|
+
# the same command must also invoke a command-line database client. Prose in a
|
|
1723
|
+
# tracker filing or a commit message invokes none, which is exactly the
|
|
1724
|
+
# difference the text scan could not see on its own.
|
|
1725
|
+
readonly SQL_CLIENT='(^|[^[:alnum:]_./-])([[:alnum:]_./-]*/)?(psql|pgcli|mysql|mysqladmin|mysqlsh|mariadb|mycli|sqlite3|sqlcmd|cqlsh|clickhouse-client|cockroach|mongosh|duckdb|usql)([[:space:]]|$)'
|
|
1726
|
+
readonly SQL_TRUNCATE_BARE='\btruncate[[:space:]]+(only[[:space:]]+)?[[:alnum:]_."`]'
|
|
1727
|
+
# Residual, accepted and stated: a bare `TRUNCATE <name>` with no terminator,
|
|
1728
|
+
# no qualification and no recognized client in the same command goes unmatched
|
|
1729
|
+
# — the same trade the `drop` arm has always made for `drop the ball`. No DROP
|
|
1730
|
+
# shape is weakened, and the guard still fails in the safe direction.
|
|
1731
|
+
if matches "$SQL_DROP" \
|
|
1732
|
+
|| matches "$SQL_TRUNCATE_EVIDENCE" \
|
|
1733
|
+
|| { matches "$SQL_CLIENT" && matches "$SQL_TRUNCATE_BARE"; }; then
|
|
1691
1734
|
block "destructive SQL (DROP/TRUNCATE) detected"
|
|
1692
1735
|
fi
|
|
1693
1736
|
|
|
@@ -652,7 +652,7 @@ result: **27 of 27** open items carrying the claimed role in this repository had
|
|
|
652
652
|
a merged pull request — the claimed lane reported 27 things in flight when the
|
|
653
653
|
real number was one.
|
|
654
654
|
|
|
655
|
-
|
|
655
|
+
Four properties make the command safe to run unconditionally:
|
|
656
656
|
|
|
657
657
|
1. **The terminal role is RESOLVED, never assumed.** `lifecycleContract` reads
|
|
658
658
|
`github.labels.build.done` (or the Jira/Linear equivalent), which is
|
|
@@ -666,7 +666,22 @@ Three properties make the command safe to run unconditionally:
|
|
|
666
666
|
a real one afterwards. Cross-repository references do not count: a downstream
|
|
667
667
|
consumer's PR mentioning an upstream issue is not evidence the upstream issue
|
|
668
668
|
shipped.
|
|
669
|
-
3. **It
|
|
669
|
+
3. **It weighs the merged pull request's BASE BRANCH**, the same way step (c)
|
|
670
|
+
above does, and for the same reason. A merged pull request is not evidence
|
|
671
|
+
on its own: the writer resolves `<baseRefName>` through `.lisa.config.json`
|
|
672
|
+
`deploy.branches` and applies only the role that base earned. A merge into
|
|
673
|
+
the production deploy branch is terminal and closes the item; a merge into a
|
|
674
|
+
branch mapping to a lower env records that env's role and leaves the item
|
|
675
|
+
open; a merge into a branch the project does not deploy at all — an
|
|
676
|
+
integration/stack branch — records nothing, closes nothing, and reports the
|
|
677
|
+
base it observed. **Measured**: on a stacked-PR queue the previous writer
|
|
678
|
+
stamped the production terminal role and closed every ticket in the batch at
|
|
679
|
+
the moment its PR landed on the stacking branch, and one of those false
|
|
680
|
+
completions then made push gate 1 refuse a follow-up commit on the same
|
|
681
|
+
ticket, because there was no longer an open work item to bind. When the
|
|
682
|
+
command reports `work-item NOT completed`, that is the correct answer for a
|
|
683
|
+
stacked merge — re-run it after the stack reaches the deploy branch.
|
|
684
|
+
4. **It is idempotent**, so re-running after a retry converges rather than
|
|
670
685
|
accumulating.
|
|
671
686
|
|
|
672
687
|
It also removes the claimed role rather than only adding the terminal one.
|
|
@@ -539,7 +539,7 @@ gh issue comment <number> --repo <org>/<repo> --body "[claude-build-intake] Buil
|
|
|
539
539
|
|
|
540
540
|
The ordering is the point. Announcing before verifying leaves a public "Build complete" on an item whose lifecycle state was never confirmed, and a reader has no way to tell that claim apart from a verified one — the same indistinguishability the readback exists to prevent. On a failed readback, comment the Error instead.
|
|
541
541
|
|
|
542
|
-
`node scripts/lisa-work-item.mjs complete --ref <org>/<repo>#<number>` performs this whole terminal sequence — merged-PR evidence check, full role reconciliation, close, independent readback — in one step, and is the preferred path whenever `$DONE` is the terminal value.
|
|
542
|
+
`node scripts/lisa-work-item.mjs complete --ref <org>/<repo>#<number>` performs this whole terminal sequence — merged-PR evidence check, full role reconciliation, close, independent readback — in one step, and is the preferred path whenever `$DONE` is the terminal value. It also decides for itself whether `$DONE` is terminal here: it resolves each merged PR's base branch through `.lisa.config.json` `deploy.branches`, so a merge into an intermediate env branch records that env's role WITHOUT closing the issue, and a merge into a branch the project does not deploy records nothing and says which base it saw. The manual commands above remain available for an intermediate env transition performed without merge evidence.
|
|
543
543
|
|
|
544
544
|
For any non-Success outcome, do NOT transition. The issue sits in `$CLAIMED` (or wherever the lifecycle left it) — humans take it from there.
|
|
545
545
|
|
|
@@ -1687,7 +1687,50 @@ fi
|
|
|
1687
1687
|
|
|
1688
1688
|
# 13. Dropping or truncating a database / schema / table (Lisa-only guard —
|
|
1689
1689
|
# upstream has no SQL protection; keep).
|
|
1690
|
-
|
|
1690
|
+
#
|
|
1691
|
+
# The two arms used to be asymmetric, and only the lopsided one produced false
|
|
1692
|
+
# positives (issue #3530). The `drop` arm requires a following keyword —
|
|
1693
|
+
# `drop database|schema|table` — so `drop the ball` never matched it. The
|
|
1694
|
+
# `truncate` arm made that keyword OPTIONAL:
|
|
1695
|
+
#
|
|
1696
|
+
# truncate[[:space:]]+(table[[:space:]]+)?[[:alnum:]_."`]+
|
|
1697
|
+
#
|
|
1698
|
+
# which reduces to "`truncate`, whitespace, any identifier-ish word", so
|
|
1699
|
+
# `truncate the board`, `truncate results` and `truncate output` all matched.
|
|
1700
|
+
# A session was refused for a bug-report TITLE describing a connection that
|
|
1701
|
+
# truncates results — and a title has no escape hatch, because the remedy this
|
|
1702
|
+
# hook prints at the wall (write the text to a file, pass it BY PATH) covers a
|
|
1703
|
+
# body, while the title flag of an issue-filing CLI is necessarily inline. The
|
|
1704
|
+
# only exit left was to reword, which is what trains people to route around a
|
|
1705
|
+
# guard.
|
|
1706
|
+
#
|
|
1707
|
+
# The fix keeps the coverage and drops the English, in three arms.
|
|
1708
|
+
#
|
|
1709
|
+
# ARM 1 — `drop`, byte-identical to before. It was already correct, and a
|
|
1710
|
+
# rewrite that unified the arms could only make it permissive.
|
|
1711
|
+
readonly SQL_DROP='\bdrop[[:space:]]+(database|schema|table)\b'
|
|
1712
|
+
# ARM 2 — `truncate` carrying its own evidence that it is a statement rather
|
|
1713
|
+
# than a verb: the TABLE keyword (what the drop arm demands), a
|
|
1714
|
+
# schema-qualified name, a quoted identifier, a trailing `;`, or one of the
|
|
1715
|
+
# tail keywords that only ever follow a TRUNCATE. English has none of these.
|
|
1716
|
+
readonly SQL_TRUNCATE_TAIL='(cascade|restrict|restart[[:space:]]+identity|continue[[:space:]]+identity)([^[:alnum:]_]|$)'
|
|
1717
|
+
readonly SQL_TRUNCATE_EVIDENCE='\btruncate[[:space:]]+(table[[:space:]]+[[:alnum:]_."`]+|(only[[:space:]]+)?([[:alnum:]_]+\.[[:alnum:]_."`]+|["`][[:alnum:]_. ]+["`]|[[:alnum:]_]+[[:space:]]*(;|'"$SQL_TRUNCATE_TAIL"')))'
|
|
1718
|
+
# ARM 3 — the permissive-dialect `TRUNCATE <name>` with none of that evidence.
|
|
1719
|
+
# Deleting this shape is what a lazy fix does: it passes every prose scenario
|
|
1720
|
+
# while silently removing the coverage a regression fixture already asserts
|
|
1721
|
+
# (`mysql -e 'TRUNCATE sessions'`). So it is recognized by CONTEXT instead —
|
|
1722
|
+
# the same command must also invoke a command-line database client. Prose in a
|
|
1723
|
+
# tracker filing or a commit message invokes none, which is exactly the
|
|
1724
|
+
# difference the text scan could not see on its own.
|
|
1725
|
+
readonly SQL_CLIENT='(^|[^[:alnum:]_./-])([[:alnum:]_./-]*/)?(psql|pgcli|mysql|mysqladmin|mysqlsh|mariadb|mycli|sqlite3|sqlcmd|cqlsh|clickhouse-client|cockroach|mongosh|duckdb|usql)([[:space:]]|$)'
|
|
1726
|
+
readonly SQL_TRUNCATE_BARE='\btruncate[[:space:]]+(only[[:space:]]+)?[[:alnum:]_."`]'
|
|
1727
|
+
# Residual, accepted and stated: a bare `TRUNCATE <name>` with no terminator,
|
|
1728
|
+
# no qualification and no recognized client in the same command goes unmatched
|
|
1729
|
+
# — the same trade the `drop` arm has always made for `drop the ball`. No DROP
|
|
1730
|
+
# shape is weakened, and the guard still fails in the safe direction.
|
|
1731
|
+
if matches "$SQL_DROP" \
|
|
1732
|
+
|| matches "$SQL_TRUNCATE_EVIDENCE" \
|
|
1733
|
+
|| { matches "$SQL_CLIENT" && matches "$SQL_TRUNCATE_BARE"; }; then
|
|
1691
1734
|
block "destructive SQL (DROP/TRUNCATE) detected"
|
|
1692
1735
|
fi
|
|
1693
1736
|
|
|
@@ -652,7 +652,7 @@ result: **27 of 27** open items carrying the claimed role in this repository had
|
|
|
652
652
|
a merged pull request — the claimed lane reported 27 things in flight when the
|
|
653
653
|
real number was one.
|
|
654
654
|
|
|
655
|
-
|
|
655
|
+
Four properties make the command safe to run unconditionally:
|
|
656
656
|
|
|
657
657
|
1. **The terminal role is RESOLVED, never assumed.** `lifecycleContract` reads
|
|
658
658
|
`github.labels.build.done` (or the Jira/Linear equivalent), which is
|
|
@@ -666,7 +666,22 @@ Three properties make the command safe to run unconditionally:
|
|
|
666
666
|
a real one afterwards. Cross-repository references do not count: a downstream
|
|
667
667
|
consumer's PR mentioning an upstream issue is not evidence the upstream issue
|
|
668
668
|
shipped.
|
|
669
|
-
3. **It
|
|
669
|
+
3. **It weighs the merged pull request's BASE BRANCH**, the same way step (c)
|
|
670
|
+
above does, and for the same reason. A merged pull request is not evidence
|
|
671
|
+
on its own: the writer resolves `<baseRefName>` through `.lisa.config.json`
|
|
672
|
+
`deploy.branches` and applies only the role that base earned. A merge into
|
|
673
|
+
the production deploy branch is terminal and closes the item; a merge into a
|
|
674
|
+
branch mapping to a lower env records that env's role and leaves the item
|
|
675
|
+
open; a merge into a branch the project does not deploy at all — an
|
|
676
|
+
integration/stack branch — records nothing, closes nothing, and reports the
|
|
677
|
+
base it observed. **Measured**: on a stacked-PR queue the previous writer
|
|
678
|
+
stamped the production terminal role and closed every ticket in the batch at
|
|
679
|
+
the moment its PR landed on the stacking branch, and one of those false
|
|
680
|
+
completions then made push gate 1 refuse a follow-up commit on the same
|
|
681
|
+
ticket, because there was no longer an open work item to bind. When the
|
|
682
|
+
command reports `work-item NOT completed`, that is the correct answer for a
|
|
683
|
+
stacked merge — re-run it after the stack reaches the deploy branch.
|
|
684
|
+
4. **It is idempotent**, so re-running after a retry converges rather than
|
|
670
685
|
accumulating.
|
|
671
686
|
|
|
672
687
|
It also removes the claimed role rather than only adding the terminal one.
|
|
@@ -539,7 +539,7 @@ gh issue comment <number> --repo <org>/<repo> --body "[claude-build-intake] Buil
|
|
|
539
539
|
|
|
540
540
|
The ordering is the point. Announcing before verifying leaves a public "Build complete" on an item whose lifecycle state was never confirmed, and a reader has no way to tell that claim apart from a verified one — the same indistinguishability the readback exists to prevent. On a failed readback, comment the Error instead.
|
|
541
541
|
|
|
542
|
-
`node scripts/lisa-work-item.mjs complete --ref <org>/<repo>#<number>` performs this whole terminal sequence — merged-PR evidence check, full role reconciliation, close, independent readback — in one step, and is the preferred path whenever `$DONE` is the terminal value.
|
|
542
|
+
`node scripts/lisa-work-item.mjs complete --ref <org>/<repo>#<number>` performs this whole terminal sequence — merged-PR evidence check, full role reconciliation, close, independent readback — in one step, and is the preferred path whenever `$DONE` is the terminal value. It also decides for itself whether `$DONE` is terminal here: it resolves each merged PR's base branch through `.lisa.config.json` `deploy.branches`, so a merge into an intermediate env branch records that env's role WITHOUT closing the issue, and a merge into a branch the project does not deploy records nothing and says which base it saw. The manual commands above remain available for an intermediate env transition performed without merge evidence.
|
|
543
543
|
|
|
544
544
|
For any non-Success outcome, do NOT transition. The issue sits in `$CLAIMED` (or wherever the lifecycle left it) — humans take it from there.
|
|
545
545
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.33.
|
|
3
|
+
"version": "4.33.10",
|
|
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.33.
|
|
3
|
+
"version": "4.33.10",
|
|
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.33.
|
|
3
|
+
"version": "4.33.10",
|
|
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.33.
|
|
3
|
+
"version": "4.33.10",
|
|
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.33.
|
|
3
|
+
"version": "4.33.10",
|
|
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"
|