@codyswann/lisa 4.58.1 → 4.59.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/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/project-config-starter.d.ts +48 -0
- package/dist/core/project-config-starter.d.ts.map +1 -0
- package/dist/core/project-config-starter.js +113 -0
- package/dist/core/project-config-starter.js.map +1 -0
- package/dist/core/project-config.d.ts +3 -0
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +3 -0
- package/dist/core/project-config.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +11 -6
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/sync/config-sync.d.ts.map +1 -1
- package/dist/sync/config-sync.js +7 -0
- package/dist/sync/config-sync.js.map +1 -1
- package/dist/sync/registry.d.ts.map +1 -1
- package/dist/sync/registry.js +13 -0
- package/dist/sync/registry.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/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +9 -5
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +26 -24
- package/plugins/lisa/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa/scripts/lifecycle-label-trust.mjs +23 -20
- package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +9 -5
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +26 -24
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/lifecycle-label-trust.mjs +23 -20
- package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +9 -5
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +26 -24
- 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/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa-copilot/scripts/lifecycle-label-trust.mjs +23 -20
- package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +9 -5
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +26 -24
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/leaf-only-lifecycle-reference.mdc +1 -1
- package/plugins/lisa-cursor/scripts/lifecycle-label-trust.mjs +23 -20
- package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +9 -5
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +26 -24
- 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/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/src/base/scripts/lifecycle-label-trust.mjs +23 -20
- package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +9 -5
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +26 -24
- package/ui/README.md +11 -9
- package/ui/index.html +76 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../../src/sync/config-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../../src/sync/config-sync.ts"],"names":[],"mappings":"AAkCA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAE1B,MAAM,oBAAoB,CAAC;AAK5B,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;AAEjE,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,eAAe,EAAE,SAAS;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxE,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAsMD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAwDrB"}
|
package/dist/sync/config-sync.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import * as fse from "fs-extra";
|
|
18
18
|
import * as path from "node:path";
|
|
19
|
+
import { validateStarterConfig } from "../core/project-config-starter.js";
|
|
19
20
|
import { deepMerge, readJsonOrNull, writeJson } from "../utils/index.js";
|
|
20
21
|
import { fillMissing, getAtPath, isJsonObject, jsonEquals, setAtPath, } from "./json-path.js";
|
|
21
22
|
import { REQUIRED_KEYS, SYNC_REGISTRY, } from "./registry.js";
|
|
@@ -176,6 +177,12 @@ export async function runConfigSync(destDir, options = {}) {
|
|
|
176
177
|
const localRaw = await reads.readJson(".lisa.config.local.json");
|
|
177
178
|
const committed = isJsonObject(committedRaw) ? committedRaw : {};
|
|
178
179
|
const local = isJsonObject(localRaw) ? localRaw : {};
|
|
180
|
+
// Validate each source before child-path population can replace a malformed
|
|
181
|
+
// starter container, even when an overlay would hide it in the merged view.
|
|
182
|
+
if (committed.starter !== undefined)
|
|
183
|
+
validateStarterConfig(committed.starter);
|
|
184
|
+
if (local.starter !== undefined)
|
|
185
|
+
validateStarterConfig(local.starter);
|
|
179
186
|
const initial = {
|
|
180
187
|
committed,
|
|
181
188
|
actions: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-sync.js","sourceRoot":"","sources":["../../src/sync/config-sync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config-sync.js","sourceRoot":"","sources":["../../src/sync/config-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAS,GAGV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,aAAa,GAEd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,aAAa,EACb,kBAAkB,GAKnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,oCAAoC,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAsB5E;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAAkB,EAAE,SAAiB;IAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,SAAS,CAAC;IACpD,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,OAAO,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CACjB,MAAkB,EAClB,YAA2C;IAE3C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,iBAAiB,CAC9B,KAAoB,EACpB,KAA2B;IAE3B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC,CAAC,CACH,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CACjB,KAAgB,EAChB,SAAqB,EACrB,MAAkB;IAElB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,KAAgB,EAChB,KAAoB,EACpB,aAAoC;IAEpC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,kBAAkB,CACjC,KAAK,EACL,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAC/C,CAAC;QACF,OAAO,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;YACxE,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,uBAAuB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,EAAE;SAC1E,CAAC,CAAC;IACL,CAAC;IACD,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,gBAAgB,CAChC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,EACnD,KAAK,CAAC,GAAG,EACT,YAAY,CACb,CAAC;IACF,OAAO,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE;QAClC,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,+CAA+C;KACxD,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CACpB,KAAgB,EAChB,KAAoB,EACpB,MAAkB,EAClB,KAAiB,EACjB,aAAoC;IAEpC,MAAM,mBAAmB,GAAG,oCAAoC,CAC9D,KAAK,EACL,KAAK,CAAC,GAAG,CACV,CAAC;IACF,MAAM,oBAAoB,GACxB,mBAAmB,KAAK,KAAK;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAE,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAgB,CAAC;IACtE,MAAM,cAAc,GAAG,SAAS,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC,mBAAmB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9E,MAAM,cAAc,GAClB,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;IACnE,IACE,QAAQ,KAAK,SAAS;QACtB,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC;QACpC,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC;QAC/C,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,EAChD,CAAC;QACD,MAAM,SAAS,GAAG,gBAAgB,CAChC,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,EACvE,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,YAAY,CACnB,CAAC;QACF,OAAO,UAAU,CAAC,mBAAmB,EAAE,SAAS,EAAE;YAChD,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,6DAA6D;SACtE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,iBAAiB,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3E,IAAI,iBAAiB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC;IACpE,MAAM,QAAQ,GAAG,iBAAiB;QAChC,CAAC,CAAC,sBAAsB,CACpB,WAAW,EACX,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,CACpB;QACH,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IACvB,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,UAAU,CACf,mBAAmB,EACnB,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAC3D;YACE,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,uCAAuC;SAChD,CACF,CAAC;IACJ,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAC1B,MAAkB;IAElB,OAAO,aAAa,CAAC,MAAM,CACzB,QAAQ,CAAC,EAAE,CACT,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC;QACzC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAChD,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,4EAA4E;IAC5E,4EAA4E;IAC5E,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;QAAE,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAc;QACzB,SAAS;QACT,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,UAAU,EAAE,SAAS;KACtB,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,MAAM,CAC3C,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;QACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAe,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,aAAa,CAC7B,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,aAAa,CACd,CAAC;QACF,OAAO,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC,EACD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CACzB,CAAC;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,0BAA0B;IAC1B,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E;IAC1E,8CAA8C;IAC9C,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,UAAU,CAAC,UAAU,CAAC;IAC9B,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAe,CAAC;IACzE,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;IACD,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,eAAe,EAAE,mBAAmB,CAAC,WAAW,CAAC;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;KAChC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAwB,EAAE,CAAC,CAAC;IACnE,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC1E,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;CAC7E,CAAC,CAAC;AAEH;;;;;GAKG;AACH,KAAK,UAAU,YAAY,CACzB,OAAe,EACf,iBAA6B,EAC7B,KAAgB;IAEhB,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CACjE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAC7C,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/sync/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/sync/registry.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAO9D;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvD,uEAAuE;IACvE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAChD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,sDAAsD;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AASD,iDAAiD;AACjD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC;IACjD,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAC5D,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;CAC5D,CAkCA,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,aAAa,EAsLjD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA0C/C,CAAC"}
|
package/dist/sync/registry.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @module sync/registry
|
|
12
12
|
*/
|
|
13
13
|
import { validateHealthSchedule } from "../health/contract.js";
|
|
14
|
+
import { STARTER_SYNC_DEFAULTS, validateStarterSync, validateStarterTemplates, } from "../core/project-config-starter.js";
|
|
14
15
|
import { BUILD_LABEL_DEFAULTS, LINEAR_WORKFLOW_DEFAULTS, PRD_LABEL_DEFAULTS, } from "./lifecycle-defaults.js";
|
|
15
16
|
const WHEN_TRACKER_JIRA = "tracker=jira";
|
|
16
17
|
const WHEN_TRACKER_GITHUB = "tracker=github";
|
|
@@ -67,6 +68,18 @@ const COVERAGE_DEFAULTS = {
|
|
|
67
68
|
* that belong in `.lisa.config.local.json`.
|
|
68
69
|
*/
|
|
69
70
|
export const SYNC_REGISTRY = [
|
|
71
|
+
{
|
|
72
|
+
key: "starter.templates",
|
|
73
|
+
defaultValue: [],
|
|
74
|
+
validate: validateStarterTemplates,
|
|
75
|
+
description: "Declared starter origins and independent sync provenance",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
key: "starter.sync",
|
|
79
|
+
defaultValue: STARTER_SYNC_DEFAULTS,
|
|
80
|
+
validate: validateStarterSync,
|
|
81
|
+
description: "Starter sync preferences (engine not yet available)",
|
|
82
|
+
},
|
|
70
83
|
{
|
|
71
84
|
key: "harness",
|
|
72
85
|
defaultValue: "claude",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sync/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sync/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"zod-validation-error": "^4.0.0"
|
|
188
188
|
},
|
|
189
189
|
"name": "@codyswann/lisa",
|
|
190
|
-
"version": "4.
|
|
190
|
+
"version": "4.59.1",
|
|
191
191
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
192
192
|
"main": "dist/index.js",
|
|
193
193
|
"exports": {
|
|
@@ -336,7 +336,7 @@
|
|
|
336
336
|
"test": "tests"
|
|
337
337
|
},
|
|
338
338
|
"types": "./dist/index.d.ts",
|
|
339
|
-
"lisaReleaseCommit": "
|
|
340
|
-
"gitHead": "
|
|
341
|
-
"lisaReleaseTag": "v4.
|
|
339
|
+
"lisaReleaseCommit": "57d2652ca9c31fce079c238ec4fca388bac0231b",
|
|
340
|
+
"gitHead": "57d2652ca9c31fce079c238ec4fca388bac0231b",
|
|
341
|
+
"lisaReleaseTag": "v4.59.1"
|
|
342
342
|
}
|
|
@@ -491,7 +491,11 @@ Before the claim mutation, apply `claim-time-guards` — **Value before claim**,
|
|
|
491
491
|
1. **`two-failed-attempts` valve.** Count `[lisa-build-attempt]` markers on the issue from the read bundle's comments (match on the marker, never the title), applying both filters from `claim-time-guards`: count a marker only when it carries `measures=work` (a marker with no `measures=` counts as `work`), and only when its `createdAt` is **after the issue most recently gained the ready label**. The ready-lane entry comes from the read bundle's `LabeledEvent` stream, which is already fetched — no extra call. If that history is `unknown`, count every `measures=work` marker regardless of age and say so in the comment. With two or more surviving markers, do **not** claim: relabel to the configured blocked role (`gh issue edit <number> --repo <org>/<repo> --remove-label "$READY" --add-label "$BLOCKED"`, resolved from `github.labels.build.blocked` per `config-resolution`), post the operator-readable comment naming both attempts, and **stop the cycle** at Phase 3e. Every non-success terminal outcome recorded in 3c/3d also appends a fresh `<!-- [lisa-build-attempt] n=<N> outcome=<outcome> measures=<work|machine> -->` marker so the next cycle can count it — `measures=machine` when the run was terminated by a signal or its outcome was `recovery-required`, `measures=work` when the build ran and did not satisfy the issue.
|
|
492
492
|
2. **`already-implemented` check.** Probe for this issue's own key — `git log --all --grep "<org>/<repo>#<number>"` and `gh pr list --repo <org>/<repo> --state all --search "<org>/<repo>#<number>" --json number,state,mergedAt,url`. On a hit, claim as normal but route 3c to **verify-and-close** instead of `lisa-implement`: verify what shipped against the issue's acceptance criteria, post evidence via `lisa-github-evidence` naming the shipping PR/commit, then run the ordinary 3d transition and 3d.1 rollup. A partial hit implements only the remaining gap. An unreadable history degrades to "no hit" and the ordinary path proceeds — the guard never blocks the claim. This is not `DUPLICATE_ALREADY_FIXED` (a *different* canonical issue) and not `claim-archaeology` (a *different* ancestor issue); it is this issue's own work already having shipped without a transition.
|
|
493
493
|
|
|
494
|
+
Immediately before claiming, re-read native state. If it is closed, skip it without
|
|
495
|
+
relabeling or dispatching; an unreadable state holds the candidate.
|
|
496
|
+
|
|
494
497
|
```bash
|
|
498
|
+
gh issue view <number> --repo <org>/<repo> --json state -q '.state' # must be OPEN
|
|
495
499
|
gh issue edit <number> --repo <org>/<repo> --remove-label "$READY" --add-label "$CLAIMED"
|
|
496
500
|
# Assign to the authenticated user ONLY when the issue is currently unassigned (attributable claim;
|
|
497
501
|
# do not pile a second assignee onto an issue that already has an owner):
|
|
@@ -536,7 +540,7 @@ The lifecycle run returns one of the following outcomes; resume this scanner wit
|
|
|
536
540
|
|
|
537
541
|
- **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the issue to a `done` env status.
|
|
538
542
|
- **Blocked by github-verify pre-flight gate** — the pre-flight gate (github-agent workflow step 2) relabels the issue to `status:blocked` (or removes `$CLAIMED` and reassigns to the original author). This is correct and expected — let it stand. Record and move on.
|
|
539
|
-
- **Duplicate already fixed** — `lisa-ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical issue reference and empirical base-branch evidence.
|
|
543
|
+
- **Duplicate already fixed** — `lisa-ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical issue reference and empirical base-branch evidence. Follow 3c.1 to link the duplicate, remove lifecycle roles, and close it as not planned without adding a done label or opening a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical issue promotes and that recurrence is tracked by the canonical issue; do not reopen this duplicate for that recurrence.
|
|
540
544
|
- **Blocked by ticket-triage ambiguities** — triage posts findings and the lifecycle stops. The issue stays in `$CLAIMED`. Surface to human; do not auto-relabel. Record under "Errors".
|
|
541
545
|
- **Errored** — exception, missing config, etc. Leave the issue in `$CLAIMED` for human investigation. Record under "Errors".
|
|
542
546
|
|
|
@@ -547,12 +551,12 @@ Run this only when the returned triage verdict is exactly `DUPLICATE_ALREADY_FIX
|
|
|
547
551
|
1. Verify the structured result includes a canonical issue reference, the canonical PR/commit, and empirical evidence that the canonical fix is present on the base branch. If any piece is missing, treat the outcome as Held instead of closing.
|
|
548
552
|
2. Post or preserve the triage-finding comment that explains why this issue is a duplicate and names the canonical issue.
|
|
549
553
|
3. Ensure a native `duplicates <canonical>` link exists when GitHub exposes issue relationships; if this installation cannot create that relationship, leave an explicit issue cross-reference comment/body link and record the limitation in the summary.
|
|
550
|
-
4. Resolve
|
|
551
|
-
5.
|
|
554
|
+
4. Resolve the configured lifecycle role set, including every environment's done value.
|
|
555
|
+
5. Remove every lifecycle role the issue currently carries. Add no done label: this duplicate is being declined, and the canonical issue records delivery. Close as duplicate/not-planned:
|
|
552
556
|
|
|
553
557
|
```bash
|
|
554
558
|
gh issue view <number> --repo <org>/<repo> --json labels -q '[.labels[].name] | join(" ")'
|
|
555
|
-
gh issue edit <number> --repo <org>/<repo>
|
|
559
|
+
gh issue edit <number> --repo <org>/<repo> <one --remove-label "<role>" per lifecycle role the issue CURRENTLY carries; skip when none>
|
|
556
560
|
gh issue close <number> --repo <org>/<repo> --reason "not planned"
|
|
557
561
|
```
|
|
558
562
|
|
|
@@ -562,7 +566,7 @@ gh issue close <number> --repo <org>/<repo> --reason "not planned"
|
|
|
562
566
|
gh issue view <number> --repo <org>/<repo> --json state,stateReason,labels
|
|
563
567
|
```
|
|
564
568
|
|
|
565
|
-
It must read `state: CLOSED` with `stateReason: NOT_PLANNED
|
|
569
|
+
It must read `state: CLOSED` with `stateReason: NOT_PLANNED` and carry **no** lifecycle role, including `$DONE`. Anything else is an Error naming what is still present. Post the closeout comment only after that passes:
|
|
566
570
|
|
|
567
571
|
```bash
|
|
568
572
|
gh issue comment <number> --repo <org>/<repo> --body "[claude-build-intake] Closed as duplicate of <canonical>. Canonical fix: <PR-or-commit>. Evidence: <base-branch-proof>."
|
|
@@ -683,7 +683,8 @@ LISA_BLOCKER_NODE
|
|
|
683
683
|
invoke `resolveBlockerEdges` as shown above; never create a second resolver in the host.
|
|
684
684
|
It returns `dissolve` / `keep` / `escalate` per edge.
|
|
685
685
|
**Dissolve the edge in the SAME write that records the ruling, then read the relation back and
|
|
686
|
-
confirm it is gone.** Only when
|
|
686
|
+
confirm it is gone.** Only when the parsed edge set is non-empty and the resolver returns
|
|
687
|
+
`proceed: true` with every edge dissolved → move `blocked → claimed`, then run the
|
|
687
688
|
same agent-dispatch + post-agent `claimed → done` sequence as the stalled-`claimed` path above
|
|
688
689
|
(one-cycle recovery). If the agent re-blocks, move back to `blocked` — a valid outcome.
|
|
689
690
|
|
|
@@ -773,22 +774,16 @@ native-open / active / unresolved:
|
|
|
773
774
|
4. Post a compact `[lisa-repair-intake]` note only when the native close-out changed state or when
|
|
774
775
|
an actionable setup error must be surfaced. Do not spam already-closed terminal items.
|
|
775
776
|
|
|
776
|
-
### Lifecycle label contradicts native state — walk
|
|
777
|
+
### Lifecycle label contradicts native state — walk every direction
|
|
777
778
|
|
|
778
|
-
|
|
779
|
+
Use the existing detector to check native state and closure reason together.
|
|
780
|
+
`directionsWalked` reports all three repair directions:
|
|
779
781
|
|
|
780
|
-
|
|
|
782
|
+
| Label | Native state | Repair |
|
|
781
783
|
|---|---|---|
|
|
782
|
-
|
|
|
783
|
-
|
|
|
784
|
-
|
|
785
|
-
A pass that walks one direction leaves the other accumulating silently. Measured on the Linear TUN
|
|
786
|
-
board: **TUN-556 and TUN-503 both carry a terminal `status:done` while still natively open in
|
|
787
|
-
`On Dev`** — invisible to intake and indistinguishable from handled, exactly like a bot-applied
|
|
788
|
-
`status:in-progress` on GitHub.
|
|
789
|
-
|
|
790
|
-
Resolve both directions in one pass with the shipped detector, which always reports
|
|
791
|
-
`directionsWalked` covering both, so a "clean" verdict is an assertion that both were examined.
|
|
784
|
+
| Terminal `done` role | Open / active | Follow `Build terminal-open` above |
|
|
785
|
+
| Non-terminal lifecycle role | Closed as `COMPLETED` or reason absent | Advance to the configured terminal role |
|
|
786
|
+
| Non-terminal lifecycle role | Closed as `NOT_PLANNED` | Remove the stale role and add nothing |
|
|
792
787
|
|
|
793
788
|
**Build the classifier input inside this cycle. Never consume a temp file another skill wrote.**
|
|
794
789
|
repair-intake runs as its own cycle, so borrowing `lisa-github-build-intake`'s scratch file fails
|
|
@@ -801,6 +796,9 @@ silent-clean verdict this section promises cannot happen.
|
|
|
801
796
|
TRUST_DIR=$(mktemp -d)
|
|
802
797
|
trap 'rm -rf "$TRUST_DIR"' EXIT
|
|
803
798
|
|
|
799
|
+
# REST, not `gh issue view`: this payload carries `state_reason`, and the reason is
|
|
800
|
+
# what separates the two closed directions. A read that drops it makes a NOT_PLANNED
|
|
801
|
+
# closure indistinguishable from a completion at the exact moment one of them WRITES.
|
|
804
802
|
gh api "repos/<org>/<repo>/issues/<n>" > "$TRUST_DIR/issue.json"
|
|
805
803
|
|
|
806
804
|
# --paginate emits ONE ARRAY PER PAGE; --slurp + `add` flattens all of them so a
|
|
@@ -835,14 +833,18 @@ The `excluded` array reports what was held back; surface it, do not repair it.
|
|
|
835
833
|
1. **`terminal-label-open-state`** → hand to the `Build terminal-open → native close` section above.
|
|
836
834
|
Do not restate its rules; the terminality test lives there (intermediate env rungs like
|
|
837
835
|
`status:on-dev` / `status:on-stg` are **not** terminal).
|
|
838
|
-
2. **`open-label-closed-state`** → the previously unowned direction. The item is natively closed
|
|
839
|
-
completed while still wearing a non-terminal lifecycle role. Advance the label to the
|
|
840
|
-
terminal `done` role and post one idempotent `[lisa-repair-intake]` note. This is a
|
|
841
|
-
**Lisa's own** lifecycle surface, not a contest with another writer.
|
|
836
|
+
2. **`open-label-closed-state`** → the previously unowned direction. The item is natively closed as
|
|
837
|
+
**completed** while still wearing a non-terminal lifecycle role. Advance the label to the
|
|
838
|
+
env-resolved terminal `done` role and post one idempotent `[lisa-repair-intake]` note. This is a
|
|
839
|
+
write on **Lisa's own** lifecycle surface, not a contest with another writer.
|
|
842
840
|
Apply the leaf/container check from the **Lifecycle ownership guard** section *before* this
|
|
843
841
|
branch: repair-intake owns container repair, so a natively-closed `ready` **leaf** is skipped
|
|
844
842
|
here and left to the build lane rather than claimed by this pass.
|
|
845
|
-
3.
|
|
843
|
+
3. **`open-label-abandoned-state`** → closed as **`NOT_PLANNED`**. Remove the stale
|
|
844
|
+
non-terminal role and add nothing: declined work has not shipped. Post one idempotent
|
|
845
|
+
`[lisa-repair-intake]` note naming the closure reason. This removal also applies to closed
|
|
846
|
+
ready leaves, before the ordinary ready-leaf skip; it never claims or dispatches them.
|
|
847
|
+
4. **Vendor caveat — Linear.** On Linear the lifecycle surface is the native workflow **state**, not a
|
|
846
848
|
`status:*` label (see `config-resolution`). A `status:*` label there is leftover cruft that no
|
|
847
849
|
repair direction reads, which is precisely why TUN-556 and TUN-503 rotted. Treat Linear's native
|
|
848
850
|
state as authoritative and remove the contradicting stale label; never move the state to match a
|
|
@@ -1417,8 +1419,9 @@ It MAY:
|
|
|
1417
1419
|
terminal `done`.
|
|
1418
1420
|
- Reconcile a **container** wrongly carrying the build-ready `ready` role (a leaf-only-invariant
|
|
1419
1421
|
violation) by rolling it up from its children and removing the `ready`, with a
|
|
1420
|
-
`[lisa-repair-intake]` audit note.
|
|
1421
|
-
|
|
1422
|
+
`[lisa-repair-intake]` audit note.
|
|
1423
|
+
- Remove stale lifecycle labels from a natively closed `NOT_PLANNED` item, including a ready
|
|
1424
|
+
leaf. Add no done label and do not claim or dispatch it.
|
|
1422
1425
|
- Move a PRD with fully terminal generated work to `shipped` and close/archive the source artifact
|
|
1423
1426
|
where the source vendor supports native close-out, per `prd-lifecycle-rollup`.
|
|
1424
1427
|
- Repair missing native GitHub child links by replaying the same-repo, idempotent `addSubIssue`
|
|
@@ -1439,9 +1442,8 @@ It MUST NOT:
|
|
|
1439
1442
|
(empty parent token / `Top-level work:` entries) may become PRD children.
|
|
1440
1443
|
- Apply a build `done` value other than via the env-resolution rules, or close a native item at
|
|
1441
1444
|
any value other than the true terminal `done` (see `leaf-only-lifecycle`).
|
|
1442
|
-
- Touch `ready` **leaves**
|
|
1443
|
-
|
|
1444
|
-
invariant violation, not the human "claim this leaf" signal intake owns.
|
|
1445
|
+
- Touch `ready` **leaves** except to remove stale labels from a natively closed `NOT_PLANNED`
|
|
1446
|
+
item as above. Open ready leaves remain `lisa-intake`'s lane.
|
|
1445
1447
|
- Move a GitHub issue that already carries a configured lifecycle label back to `ready` merely
|
|
1446
1448
|
because some other label looks stale. Official lifecycle labels remain authoritative.
|
|
1447
1449
|
|
|
@@ -67,7 +67,7 @@ Three constraints on how it is done:
|
|
|
67
67
|
|
|
68
68
|
- **Remove only roles the item actually carries.** Naming an absent label is a 404, which fails a clean closure and makes a repeat run fail where the first one succeeded.
|
|
69
69
|
- **Verify by re-reading.** Confirm the final closed state and the unique terminal role from a **fresh read of the item**, never from the write's own response. A write that reports success is not evidence of the state it intended to produce — asserting otherwise is the same defect as the drift being repaired, one layer up.
|
|
70
|
-
- **Never re-complete an abandoned item.**
|
|
70
|
+
- **Never re-complete an abandoned item.** Refuse to apply a terminal `done` role to work closed as not-planned. Duplicate closeout below remains allowed, but removes lifecycle labels without adding a done label; verify that no lifecycle role remains.
|
|
71
71
|
|
|
72
72
|
Trackers with a native lifecycle field (JIRA, Linear) get exclusivity for free: the field that closes the item is the field a queue scan filters on, so the two cannot disagree. GitHub Issues has no lifecycle beyond open/closed, so Lisa synthesizes one in labels and inherits a reconciliation duty the others do not have. That asymmetry is tracked separately in `CodySwannGT/lisa#3479`; this section is the obligation, not the redesign.
|
|
73
73
|
|
|
@@ -66,18 +66,16 @@ export const DEFAULT_TERMINAL_LIFECYCLE_LABEL = "status:done";
|
|
|
66
66
|
*/
|
|
67
67
|
export const IMPLAUSIBLE_CLAIM_WINDOW_SECONDS = 300;
|
|
68
68
|
|
|
69
|
-
/**
|
|
70
|
-
* Both directions a lifecycle label can contradict native state.
|
|
71
|
-
*
|
|
72
|
-
* Emitted on every drift result so a repair pass cannot walk one direction and
|
|
73
|
-
* silently leave the other accumulating — the asymmetry that let TUN-556 and
|
|
74
|
-
* TUN-503 sit on a terminal `status:done` while still natively open.
|
|
75
|
-
*/
|
|
69
|
+
/** Report each contradiction; abandoned closures must not earn a done label. */
|
|
76
70
|
export const LIFECYCLE_DRIFT_DIRECTIONS = [
|
|
77
71
|
"terminal-label-open-state",
|
|
78
72
|
"open-label-closed-state",
|
|
73
|
+
"open-label-abandoned-state",
|
|
79
74
|
];
|
|
80
75
|
|
|
76
|
+
/** The closure reason that means the work will deliberately NOT be done. */
|
|
77
|
+
const NOT_PLANNED = "not_planned";
|
|
78
|
+
|
|
81
79
|
/**
|
|
82
80
|
* @typedef {{ readonly login?: string, readonly type?: string }} Actor
|
|
83
81
|
*
|
|
@@ -277,22 +275,13 @@ export function resolveClaimability({ trusted, config }) {
|
|
|
277
275
|
}
|
|
278
276
|
|
|
279
277
|
/**
|
|
280
|
-
* Detect
|
|
281
|
-
*
|
|
282
|
-
* `directionsWalked` is always the full direction list, so a caller reporting
|
|
283
|
-
* "clean" is asserting it looked at both — the failure mode refinement #1 of
|
|
284
|
-
* issue #2539 describes, where only the auto-complete direction was ever
|
|
285
|
-
* repaired and the reverse rotted unobserved.
|
|
286
|
-
*
|
|
287
|
-
* `excludeLabels` removes labels from consideration entirely. Callers MUST pass
|
|
288
|
-
* the untrusted set here: `open-label-closed-state` is a repair direction that
|
|
289
|
-
* WRITES (it advances the label to the terminal `done` role), so without this a
|
|
290
|
-
* bot-applied label the classifier just refused to believe would still drive a
|
|
291
|
-
* real label write — the guard would launder the very input it rejected.
|
|
278
|
+
* Detect every native-state contradiction, excluding untrusted labels.
|
|
279
|
+
* Only an explicit not-planned reason selects the retire-only repair.
|
|
292
280
|
*
|
|
293
281
|
* @param {{
|
|
294
282
|
* readonly labels?: readonly (string | { readonly name?: string })[]
|
|
295
283
|
* readonly state?: string
|
|
284
|
+
* readonly stateReason?: string
|
|
296
285
|
* readonly terminalLabels?: readonly string[]
|
|
297
286
|
* readonly excludeLabels?: readonly string[]
|
|
298
287
|
* }} input
|
|
@@ -317,6 +306,11 @@ export function detectLifecycleDrift(input = {}) {
|
|
|
317
306
|
String(input.state ?? "")
|
|
318
307
|
.trim()
|
|
319
308
|
.toLowerCase() === "closed";
|
|
309
|
+
const abandoned =
|
|
310
|
+
closed &&
|
|
311
|
+
String(input.stateReason ?? "")
|
|
312
|
+
.trim()
|
|
313
|
+
.toLowerCase() === NOT_PLANNED;
|
|
320
314
|
const allLifecycleLabels = normalizeLabelNames(input.labels).filter(
|
|
321
315
|
isLifecycleLabel
|
|
322
316
|
);
|
|
@@ -333,7 +327,14 @@ export function detectLifecycleDrift(input = {}) {
|
|
|
333
327
|
return [{ direction: "terminal-label-open-state", label }];
|
|
334
328
|
}
|
|
335
329
|
if (!isTerminal && closed) {
|
|
336
|
-
return [
|
|
330
|
+
return [
|
|
331
|
+
{
|
|
332
|
+
direction: abandoned
|
|
333
|
+
? "open-label-abandoned-state"
|
|
334
|
+
: "open-label-closed-state",
|
|
335
|
+
label,
|
|
336
|
+
},
|
|
337
|
+
];
|
|
337
338
|
}
|
|
338
339
|
return [];
|
|
339
340
|
});
|
|
@@ -538,6 +539,8 @@ async function main() {
|
|
|
538
539
|
const drift = detectLifecycleDrift({
|
|
539
540
|
labels: issue.labels,
|
|
540
541
|
state: issue.state,
|
|
542
|
+
// REST and GitHub CLI use different field names for the same reason.
|
|
543
|
+
stateReason: issue.state_reason ?? issue.stateReason,
|
|
541
544
|
terminalLabels: terminalLifecycleLabels(payload.config),
|
|
542
545
|
excludeLabels: trust.untrusted.map(entry => entry.label),
|
|
543
546
|
});
|
|
@@ -491,7 +491,11 @@ Before the claim mutation, apply `claim-time-guards` — **Value before claim**,
|
|
|
491
491
|
1. **`two-failed-attempts` valve.** Count `[lisa-build-attempt]` markers on the issue from the read bundle's comments (match on the marker, never the title), applying both filters from `claim-time-guards`: count a marker only when it carries `measures=work` (a marker with no `measures=` counts as `work`), and only when its `createdAt` is **after the issue most recently gained the ready label**. The ready-lane entry comes from the read bundle's `LabeledEvent` stream, which is already fetched — no extra call. If that history is `unknown`, count every `measures=work` marker regardless of age and say so in the comment. With two or more surviving markers, do **not** claim: relabel to the configured blocked role (`gh issue edit <number> --repo <org>/<repo> --remove-label "$READY" --add-label "$BLOCKED"`, resolved from `github.labels.build.blocked` per `config-resolution`), post the operator-readable comment naming both attempts, and **stop the cycle** at Phase 3e. Every non-success terminal outcome recorded in 3c/3d also appends a fresh `<!-- [lisa-build-attempt] n=<N> outcome=<outcome> measures=<work|machine> -->` marker so the next cycle can count it — `measures=machine` when the run was terminated by a signal or its outcome was `recovery-required`, `measures=work` when the build ran and did not satisfy the issue.
|
|
492
492
|
2. **`already-implemented` check.** Probe for this issue's own key — `git log --all --grep "<org>/<repo>#<number>"` and `gh pr list --repo <org>/<repo> --state all --search "<org>/<repo>#<number>" --json number,state,mergedAt,url`. On a hit, claim as normal but route 3c to **verify-and-close** instead of `lisa-implement`: verify what shipped against the issue's acceptance criteria, post evidence via `lisa-github-evidence` naming the shipping PR/commit, then run the ordinary 3d transition and 3d.1 rollup. A partial hit implements only the remaining gap. An unreadable history degrades to "no hit" and the ordinary path proceeds — the guard never blocks the claim. This is not `DUPLICATE_ALREADY_FIXED` (a *different* canonical issue) and not `claim-archaeology` (a *different* ancestor issue); it is this issue's own work already having shipped without a transition.
|
|
493
493
|
|
|
494
|
+
Immediately before claiming, re-read native state. If it is closed, skip it without
|
|
495
|
+
relabeling or dispatching; an unreadable state holds the candidate.
|
|
496
|
+
|
|
494
497
|
```bash
|
|
498
|
+
gh issue view <number> --repo <org>/<repo> --json state -q '.state' # must be OPEN
|
|
495
499
|
gh issue edit <number> --repo <org>/<repo> --remove-label "$READY" --add-label "$CLAIMED"
|
|
496
500
|
# Assign to the authenticated user ONLY when the issue is currently unassigned (attributable claim;
|
|
497
501
|
# do not pile a second assignee onto an issue that already has an owner):
|
|
@@ -536,7 +540,7 @@ The lifecycle run returns one of the following outcomes; resume this scanner wit
|
|
|
536
540
|
|
|
537
541
|
- **Success** — the build flow completed and a PR exists; evidence posted. The PR may already be **merged** or still **open** (auto-merge enabled, awaiting checks/merge). "Success" means the build work is sound — it does **not** assert the change reached an environment. The env transition in 3d gates on the PR actually being merged; an open PR does not advance the issue to a `done` env status.
|
|
538
542
|
- **Blocked by github-verify pre-flight gate** — the pre-flight gate (github-agent workflow step 2) relabels the issue to `status:blocked` (or removes `$CLAIMED` and reassigns to the original author). This is correct and expected — let it stand. Record and move on.
|
|
539
|
-
- **Duplicate already fixed** — `lisa-ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical issue reference and empirical base-branch evidence.
|
|
543
|
+
- **Duplicate already fixed** — `lisa-ticket-triage` returned `DUPLICATE_ALREADY_FIXED` with a canonical issue reference and empirical base-branch evidence. Follow 3c.1 to link the duplicate, remove lifecycle roles, and close it as not planned without adding a done label or opening a PR. If the canonical fix is merged but not yet on the production branch, the close comment must say the production error can recur until the canonical issue promotes and that recurrence is tracked by the canonical issue; do not reopen this duplicate for that recurrence.
|
|
540
544
|
- **Blocked by ticket-triage ambiguities** — triage posts findings and the lifecycle stops. The issue stays in `$CLAIMED`. Surface to human; do not auto-relabel. Record under "Errors".
|
|
541
545
|
- **Errored** — exception, missing config, etc. Leave the issue in `$CLAIMED` for human investigation. Record under "Errors".
|
|
542
546
|
|
|
@@ -547,12 +551,12 @@ Run this only when the returned triage verdict is exactly `DUPLICATE_ALREADY_FIX
|
|
|
547
551
|
1. Verify the structured result includes a canonical issue reference, the canonical PR/commit, and empirical evidence that the canonical fix is present on the base branch. If any piece is missing, treat the outcome as Held instead of closing.
|
|
548
552
|
2. Post or preserve the triage-finding comment that explains why this issue is a duplicate and names the canonical issue.
|
|
549
553
|
3. Ensure a native `duplicates <canonical>` link exists when GitHub exposes issue relationships; if this installation cannot create that relationship, leave an explicit issue cross-reference comment/body link and record the limitation in the summary.
|
|
550
|
-
4. Resolve
|
|
551
|
-
5.
|
|
554
|
+
4. Resolve the configured lifecycle role set, including every environment's done value.
|
|
555
|
+
5. Remove every lifecycle role the issue currently carries. Add no done label: this duplicate is being declined, and the canonical issue records delivery. Close as duplicate/not-planned:
|
|
552
556
|
|
|
553
557
|
```bash
|
|
554
558
|
gh issue view <number> --repo <org>/<repo> --json labels -q '[.labels[].name] | join(" ")'
|
|
555
|
-
gh issue edit <number> --repo <org>/<repo>
|
|
559
|
+
gh issue edit <number> --repo <org>/<repo> <one --remove-label "<role>" per lifecycle role the issue CURRENTLY carries; skip when none>
|
|
556
560
|
gh issue close <number> --repo <org>/<repo> --reason "not planned"
|
|
557
561
|
```
|
|
558
562
|
|
|
@@ -562,7 +566,7 @@ gh issue close <number> --repo <org>/<repo> --reason "not planned"
|
|
|
562
566
|
gh issue view <number> --repo <org>/<repo> --json state,stateReason,labels
|
|
563
567
|
```
|
|
564
568
|
|
|
565
|
-
It must read `state: CLOSED` with `stateReason: NOT_PLANNED
|
|
569
|
+
It must read `state: CLOSED` with `stateReason: NOT_PLANNED` and carry **no** lifecycle role, including `$DONE`. Anything else is an Error naming what is still present. Post the closeout comment only after that passes:
|
|
566
570
|
|
|
567
571
|
```bash
|
|
568
572
|
gh issue comment <number> --repo <org>/<repo> --body "[claude-build-intake] Closed as duplicate of <canonical>. Canonical fix: <PR-or-commit>. Evidence: <base-branch-proof>."
|
|
@@ -683,7 +683,8 @@ LISA_BLOCKER_NODE
|
|
|
683
683
|
invoke `resolveBlockerEdges` as shown above; never create a second resolver in the host.
|
|
684
684
|
It returns `dissolve` / `keep` / `escalate` per edge.
|
|
685
685
|
**Dissolve the edge in the SAME write that records the ruling, then read the relation back and
|
|
686
|
-
confirm it is gone.** Only when
|
|
686
|
+
confirm it is gone.** Only when the parsed edge set is non-empty and the resolver returns
|
|
687
|
+
`proceed: true` with every edge dissolved → move `blocked → claimed`, then run the
|
|
687
688
|
same agent-dispatch + post-agent `claimed → done` sequence as the stalled-`claimed` path above
|
|
688
689
|
(one-cycle recovery). If the agent re-blocks, move back to `blocked` — a valid outcome.
|
|
689
690
|
|
|
@@ -773,22 +774,16 @@ native-open / active / unresolved:
|
|
|
773
774
|
4. Post a compact `[lisa-repair-intake]` note only when the native close-out changed state or when
|
|
774
775
|
an actionable setup error must be surfaced. Do not spam already-closed terminal items.
|
|
775
776
|
|
|
776
|
-
### Lifecycle label contradicts native state — walk
|
|
777
|
+
### Lifecycle label contradicts native state — walk every direction
|
|
777
778
|
|
|
778
|
-
|
|
779
|
+
Use the existing detector to check native state and closure reason together.
|
|
780
|
+
`directionsWalked` reports all three repair directions:
|
|
779
781
|
|
|
780
|
-
|
|
|
782
|
+
| Label | Native state | Repair |
|
|
781
783
|
|---|---|---|
|
|
782
|
-
|
|
|
783
|
-
|
|
|
784
|
-
|
|
785
|
-
A pass that walks one direction leaves the other accumulating silently. Measured on the Linear TUN
|
|
786
|
-
board: **TUN-556 and TUN-503 both carry a terminal `status:done` while still natively open in
|
|
787
|
-
`On Dev`** — invisible to intake and indistinguishable from handled, exactly like a bot-applied
|
|
788
|
-
`status:in-progress` on GitHub.
|
|
789
|
-
|
|
790
|
-
Resolve both directions in one pass with the shipped detector, which always reports
|
|
791
|
-
`directionsWalked` covering both, so a "clean" verdict is an assertion that both were examined.
|
|
784
|
+
| Terminal `done` role | Open / active | Follow `Build terminal-open` above |
|
|
785
|
+
| Non-terminal lifecycle role | Closed as `COMPLETED` or reason absent | Advance to the configured terminal role |
|
|
786
|
+
| Non-terminal lifecycle role | Closed as `NOT_PLANNED` | Remove the stale role and add nothing |
|
|
792
787
|
|
|
793
788
|
**Build the classifier input inside this cycle. Never consume a temp file another skill wrote.**
|
|
794
789
|
repair-intake runs as its own cycle, so borrowing `lisa-github-build-intake`'s scratch file fails
|
|
@@ -801,6 +796,9 @@ silent-clean verdict this section promises cannot happen.
|
|
|
801
796
|
TRUST_DIR=$(mktemp -d)
|
|
802
797
|
trap 'rm -rf "$TRUST_DIR"' EXIT
|
|
803
798
|
|
|
799
|
+
# REST, not `gh issue view`: this payload carries `state_reason`, and the reason is
|
|
800
|
+
# what separates the two closed directions. A read that drops it makes a NOT_PLANNED
|
|
801
|
+
# closure indistinguishable from a completion at the exact moment one of them WRITES.
|
|
804
802
|
gh api "repos/<org>/<repo>/issues/<n>" > "$TRUST_DIR/issue.json"
|
|
805
803
|
|
|
806
804
|
# --paginate emits ONE ARRAY PER PAGE; --slurp + `add` flattens all of them so a
|
|
@@ -835,14 +833,18 @@ The `excluded` array reports what was held back; surface it, do not repair it.
|
|
|
835
833
|
1. **`terminal-label-open-state`** → hand to the `Build terminal-open → native close` section above.
|
|
836
834
|
Do not restate its rules; the terminality test lives there (intermediate env rungs like
|
|
837
835
|
`status:on-dev` / `status:on-stg` are **not** terminal).
|
|
838
|
-
2. **`open-label-closed-state`** → the previously unowned direction. The item is natively closed
|
|
839
|
-
completed while still wearing a non-terminal lifecycle role. Advance the label to the
|
|
840
|
-
terminal `done` role and post one idempotent `[lisa-repair-intake]` note. This is a
|
|
841
|
-
**Lisa's own** lifecycle surface, not a contest with another writer.
|
|
836
|
+
2. **`open-label-closed-state`** → the previously unowned direction. The item is natively closed as
|
|
837
|
+
**completed** while still wearing a non-terminal lifecycle role. Advance the label to the
|
|
838
|
+
env-resolved terminal `done` role and post one idempotent `[lisa-repair-intake]` note. This is a
|
|
839
|
+
write on **Lisa's own** lifecycle surface, not a contest with another writer.
|
|
842
840
|
Apply the leaf/container check from the **Lifecycle ownership guard** section *before* this
|
|
843
841
|
branch: repair-intake owns container repair, so a natively-closed `ready` **leaf** is skipped
|
|
844
842
|
here and left to the build lane rather than claimed by this pass.
|
|
845
|
-
3.
|
|
843
|
+
3. **`open-label-abandoned-state`** → closed as **`NOT_PLANNED`**. Remove the stale
|
|
844
|
+
non-terminal role and add nothing: declined work has not shipped. Post one idempotent
|
|
845
|
+
`[lisa-repair-intake]` note naming the closure reason. This removal also applies to closed
|
|
846
|
+
ready leaves, before the ordinary ready-leaf skip; it never claims or dispatches them.
|
|
847
|
+
4. **Vendor caveat — Linear.** On Linear the lifecycle surface is the native workflow **state**, not a
|
|
846
848
|
`status:*` label (see `config-resolution`). A `status:*` label there is leftover cruft that no
|
|
847
849
|
repair direction reads, which is precisely why TUN-556 and TUN-503 rotted. Treat Linear's native
|
|
848
850
|
state as authoritative and remove the contradicting stale label; never move the state to match a
|
|
@@ -1417,8 +1419,9 @@ It MAY:
|
|
|
1417
1419
|
terminal `done`.
|
|
1418
1420
|
- Reconcile a **container** wrongly carrying the build-ready `ready` role (a leaf-only-invariant
|
|
1419
1421
|
violation) by rolling it up from its children and removing the `ready`, with a
|
|
1420
|
-
`[lisa-repair-intake]` audit note.
|
|
1421
|
-
|
|
1422
|
+
`[lisa-repair-intake]` audit note.
|
|
1423
|
+
- Remove stale lifecycle labels from a natively closed `NOT_PLANNED` item, including a ready
|
|
1424
|
+
leaf. Add no done label and do not claim or dispatch it.
|
|
1422
1425
|
- Move a PRD with fully terminal generated work to `shipped` and close/archive the source artifact
|
|
1423
1426
|
where the source vendor supports native close-out, per `prd-lifecycle-rollup`.
|
|
1424
1427
|
- Repair missing native GitHub child links by replaying the same-repo, idempotent `addSubIssue`
|
|
@@ -1439,9 +1442,8 @@ It MUST NOT:
|
|
|
1439
1442
|
(empty parent token / `Top-level work:` entries) may become PRD children.
|
|
1440
1443
|
- Apply a build `done` value other than via the env-resolution rules, or close a native item at
|
|
1441
1444
|
any value other than the true terminal `done` (see `leaf-only-lifecycle`).
|
|
1442
|
-
- Touch `ready` **leaves**
|
|
1443
|
-
|
|
1444
|
-
invariant violation, not the human "claim this leaf" signal intake owns.
|
|
1445
|
+
- Touch `ready` **leaves** except to remove stale labels from a natively closed `NOT_PLANNED`
|
|
1446
|
+
item as above. Open ready leaves remain `lisa-intake`'s lane.
|
|
1445
1447
|
- Move a GitHub issue that already carries a configured lifecycle label back to `ready` merely
|
|
1446
1448
|
because some other label looks stale. Official lifecycle labels remain authoritative.
|
|
1447
1449
|
|