@codyswann/lisa 3.13.0 → 3.13.2

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.
Files changed (61) hide show
  1. package/dist/core/lisa-owned-provenance.d.ts +1 -5
  2. package/dist/core/lisa-owned-provenance.d.ts.map +1 -1
  3. package/dist/core/lisa-owned-provenance.js +27 -10
  4. package/dist/core/lisa-owned-provenance.js.map +1 -1
  5. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  6. package/dist/core/upstream-evidence-manifest.js +7 -2
  7. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  8. package/package.json +2 -1
  9. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  10. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  11. package/plugins/lisa-agy/plugin.json +1 -1
  12. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  14. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  15. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  21. package/plugins/lisa-expo-agy/plugin.json +1 -1
  22. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  27. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  32. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  36. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  37. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  42. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  46. package/plugins/lisa-rails-agy/plugin.json +1 -1
  47. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  51. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  52. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  57. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  59. package/scripts/check-conflict-markers.mjs +312 -0
  60. package/scripts/generate-lisa-owned-hash-ledger.mjs +67 -14
  61. package/scripts/plugin-routing-validate.mjs +55 -14
@@ -11,14 +11,10 @@ export type ProvenanceVerdict =
11
11
  readonly kind: "host-ahead";
12
12
  readonly extraCapabilities: readonly string[];
13
13
  }
14
- /** Content Lisa never shipped, with nothing declared. Preserve and report. */
14
+ /** Content Lisa never shipped. Preserve and report. */
15
15
  | {
16
16
  readonly kind: "host-modified";
17
17
  }
18
- /** Declared hardening that upstream now also has. Safe to refresh. */
19
- | {
20
- readonly kind: "absorbed-upstream";
21
- }
22
18
  /** Hash matches a Lisa release. Genuinely stale, so refresh it. */
23
19
  | {
24
20
  readonly kind: "provably-stale";
@@ -1 +1 @@
1
- {"version":3,"file":"lisa-owned-provenance.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-provenance.ts"],"names":[],"mappings":"AAsDA,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAQrE,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB;AAC3B,iEAAiE;AAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE;AAChC,4EAA4E;GAC1E;IACE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AACH,8EAA8E;GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AACpC,sEAAsE;GACpE;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE;AACxC,mEAAmE;GACjE;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE;AACrC,gFAAgF;GAC9E;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,iBAAiB,EACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CAAA;CAAE,CAClD,CAAC;AAWF;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,UAAmC,GAC1C,iBAAiB,CAkBnB;AAWD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,IAAI,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAIR"}
1
+ {"version":3,"file":"lisa-owned-provenance.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-provenance.ts"],"names":[],"mappings":"AAyEA,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAQrE,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB;AAC3B,iEAAiE;AAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE;AAChC,4EAA4E;GAC1E;IACE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AACH,uDAAuD;GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AACpC,mEAAmE;GACjE;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE;AACrC,gFAAgF;GAC9E;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,iBAAiB,EACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CAAA;CAAE,CAClD,CAAC;AAWF;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,UAAmC,GAC1C,iBAAiB,CAiBnB;AAWD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,IAAI,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAIR"}
@@ -33,15 +33,34 @@
33
33
  * apply after the change is the one that clobbers — it fails exactly once, on the
34
34
  * case that matters most.
35
35
  *
36
+ * ## Why the ledger is the *only* proof of staleness
37
+ *
38
+ * An earlier draft let capability markers authorise an overwrite too: if the
39
+ * host declared capabilities and Lisa declared all of them, upstream had
40
+ * "absorbed" the hardening, so refreshing was assumed safe. Running it against
41
+ * the real ledger and a real guard showed that this reintroduces the original
42
+ * bug outright.
43
+ *
44
+ * A host hardening a Lisa guard edits a *copy of Lisa's file*, so it keeps
45
+ * Lisa's marker line. Its declared set therefore equals Lisa's while its bytes
46
+ * carry undeclared changes — and the shortcut overwrote them without ever
47
+ * consulting the ledger. That is precisely the propswap case, silently reverted
48
+ * again by the mechanism meant to prevent it.
49
+ *
50
+ * So capabilities may only ever justify *keeping* the host's copy. Declaring
51
+ * nothing is not evidence of having changed nothing, and no marker comparison
52
+ * can account for bytes nobody declared. Overwriting requires positive proof
53
+ * from the ledger, and nothing else.
54
+ *
36
55
  * ## How the standoff ends
37
56
  *
38
- * Refusing forever is its own failure: genuine drift would accumulate and never
39
- * be fixed. Capability markers are the release valve. When the host declares
40
- * capabilities and Lisa's copy declares all of them, upstream has absorbed the
41
- * host's hardening, so overwriting restores parity instead of removing
42
- * protection and refresh resumes automatically, with no operator action. A
43
- * host that hardened without declaring gets told to do one of the two things
44
- * that end the standoff: land it upstream, or declare it.
57
+ * Refusing forever would be its own failure, so the exits are explicit rather
58
+ * than automatic. A `provably-stale` copy always refreshes, which is the common
59
+ * case and keeps upgrades flowing. A `host-modified` copy is reported on every
60
+ * apply and by `lisa doctor` until someone resolves it — by landing the change
61
+ * upstream, or by taking Lisa's copy via `--refresh-templates`. Lisa does not
62
+ * end that standoff on its own, because every way of doing so amounts to
63
+ * deleting work it cannot account for.
45
64
  * @module core/lisa-owned-provenance
46
65
  */
47
66
  import { createHash } from "node:crypto";
@@ -79,8 +98,6 @@ export function classifyHostCopy(relativePath, hostBytes, lisaBytes, ledger = LI
79
98
  if (extraCapabilities.length > 0) {
80
99
  return { kind: HOST_AHEAD, extraCapabilities };
81
100
  }
82
- if (hostCapabilities.size > 0)
83
- return { kind: "absorbed-upstream" };
84
101
  const known = ledger[normalise(relativePath)];
85
102
  if (known === undefined || known.length === 0)
86
103
  return { kind: "unenrolled" };
@@ -121,7 +138,7 @@ export function mayRefreshLisaOwned(verdict) {
121
138
  */
122
139
  export function describePreserved(relativePath, verdict) {
123
140
  return verdict.kind === HOST_AHEAD
124
- ? `${relativePath}: your copy guards against ${verdict.extraCapabilities.join(", ")}, which Lisa's copy does not. Kept yours. To take Lisa's copy later, contribute your hardening upstream refresh resumes on its own once Lisa declares it too.`
141
+ ? `${relativePath}: your copy guards against ${verdict.extraCapabilities.join(", ")}, which Lisa's copy does not. Kept yours. Nothing to do unless you want Lisa's version instead contributing your hardening upstream is the way to get both, or run \`lisa apply\` with \`--refresh-templates\` to take Lisa's copy and drop yours.`
125
142
  : `${relativePath}: this file was edited in your project — its contents match no Lisa release, so Lisa cannot tell whether it is out of date or deliberately stronger. Kept yours. Review the difference, then either contribute the change upstream or add a \`lisa-guard-capabilities:\` line naming what it defends.`;
126
143
  }
127
144
  //# sourceMappingURL=lisa-owned-provenance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lisa-owned-provenance.js","sourceRoot":"","sources":["../../src/core/lisa-owned-provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAKrE,yEAAyE;AACzE,MAAM,aAAa,GAAG,eAAwB,CAAC;AAE/C,uEAAuE;AACvE,MAAM,UAAU,GAAG,YAAqB,CAAC;AAgCzC;;;;GAIG;AACH,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,SAAiB,EACjB,SAAiB,EACjB,SAAqB,sBAAsB;IAE3C,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAE9D,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,gBAAgB,EAChB,qBAAqB,CAAC,SAAS,CAAC,CACjC,CAAC;IACF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAEpE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC7E,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAC5B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,YAAoB;IACrC,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA0B;IAE1B,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;AACvE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,OAAyB;IAEzB,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU;QAChC,CAAC,CAAC,GAAG,YAAY,8BAA8B,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,iKAAiK;QACpP,CAAC,CAAC,GAAG,YAAY,uSAAuS,CAAC;AAC7T,CAAC"}
1
+ {"version":3,"file":"lisa-owned-provenance.js","sourceRoot":"","sources":["../../src/core/lisa-owned-provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAKrE,yEAAyE;AACzE,MAAM,aAAa,GAAG,eAAwB,CAAC;AAE/C,uEAAuE;AACvE,MAAM,UAAU,GAAG,YAAqB,CAAC;AA8BzC;;;;GAIG;AACH,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,SAAiB,EACjB,SAAiB,EACjB,SAAqB,sBAAsB;IAE3C,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAE9D,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,gBAAgB,EAChB,qBAAqB,CAAC,SAAS,CAAC,CACjC,CAAC;IACF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC7E,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAC5B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,YAAoB;IACrC,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA0B;IAE1B,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;AACvE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,OAAyB;IAEzB,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU;QAChC,CAAC,CAAC,GAAG,YAAY,8BAA8B,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,sPAAsP;QACzU,CAAC,CAAC,GAAG,YAAY,uSAAuS,CAAC;AAC7T,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgzEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAgjOjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
1
+ {"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkzEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAojOjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -1035,6 +1035,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1035
1035
  "rails/github-rulesets/quality-checks.json": "0ec1c366589edbaa6b8f45f940cef3ada5ed7b1a956d98d3fa6034b0f78fbc7c",
1036
1036
  "rails/merge/.claude/settings.json": "9c49f8c7c453f8749c90def3e22d412c3345c533d24b30dc7745ffa052ad6fa1",
1037
1037
  "scripts/build-plugins.sh": "b98f0e4789ce903ebf704abaa649c6d4a4721ce0cf2b5caf4ccddeb04fc0d5e0",
1038
+ "scripts/check-conflict-markers.mjs": "e2b25dd56eb3742f074ae5b8ece13ef194518e70e5bac4c2f49e3b819d3f7dc4",
1038
1039
  "scripts/check-duplicate-versions.mjs": "84d97e94eb834522848ddce951bb54ae9da1e4be252e2c51fed0c01c4f4d6b72",
1039
1040
  "scripts/check-learnings-budget.ts": "007430c2d6938efcc79ccbfd5717ebe2c7cf66b4de9a21a3e67b8db7f3600349",
1040
1041
  "scripts/check-plugins-sync.sh": "3a99cbff0e8ec5e7c944690eae003a6d51b51c85436d77bd37faea4d553728af",
@@ -1058,7 +1059,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1058
1059
  "scripts/generate-codex-plugin-artifacts.mjs": "1d1a362afb8dba408741a3eed9fe583296f6bcb048608979f73f359cd609c03d",
1059
1060
  "scripts/generate-copilot-plugin-artifacts.mjs": "70d283eed7cb7c1351d13cf0497f06dec175562c5918921c404393a76f11278f",
1060
1061
  "scripts/generate-cursor-plugin-artifacts.mjs": "d8806197a723f0c2b50a8155ffc5b6f0abc30c68dc2385cb80b0dd066d061231",
1061
- "scripts/generate-lisa-owned-hash-ledger.mjs": "0f2a5fffad380e85125d2e68ca43b8b12a0d93c710b8980fb8dc869e6b6da020",
1062
+ "scripts/generate-lisa-owned-hash-ledger.mjs": "977d447ff5bf1b5254a66a7386e4fd8e7bf9c8f3e7a5b8d61cedb771b97002f2",
1062
1063
  "scripts/generate-upstream-evidence-manifest.mjs": "de1eb5adaa6252b4abe5859933bff0ab2a52e19cc5a3fc5a41018fbb57b766d1",
1063
1064
  "scripts/github-status-check.sh": "c6a4a13ff5cf689fcbd7a6aca718f9e7d46d54ccb6687f662b055c1ca20e792f",
1064
1065
  "scripts/install-claude-plugins.sh": "0e96ebbae1e59304bb432286eccba38900a6008b80f2c53a1ec2c95801d4087c",
@@ -1084,7 +1085,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1084
1085
  "scripts/lisa-work-item.mjs": "51081847e980f314a764c2e50a7a121b1ced9ef4b980f33898057de4c7b852e6",
1085
1086
  "scripts/migrate-deploy-order.sh": "77d909b4cbbfc05169a79168d7868600ea7f56f846feefb7d5121618c54800c3",
1086
1087
  "scripts/plugin-parity-drift.mjs": "34235c4c75c8735aaca96e3e0a52073ba1dee8bad54c85af01c3cf9912d0ea57",
1087
- "scripts/plugin-routing-validate.mjs": "eb38cf139eb04a27dd6493ff6f766945060d5bf73a35856bd3da4c8e4110e2ba",
1088
+ "scripts/plugin-routing-validate.mjs": "ddb2fcd950cbd66ca642e946aef33fd0bb2e7c4081ee96c19d4628a7d45694b8",
1088
1089
  "scripts/probes/wave3-verification.sh": "c341c3682f2401339a433a48efc8b8dd80c9c190f12ec6287139bebd1e47c049",
1089
1090
  "scripts/remote-agent-aws-setup.sh": "f181062436c214c95fe15be8000cce18de0b553b3dab06b822a4fe55cb285ca6",
1090
1091
  "scripts/setup-deploy-key.sh": "2bed19346810b7af18a5225fd463c4d553a7bcc7b2f11a21bd47b93e6b5e1719",
@@ -6885,6 +6886,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6885
6886
  "rails/merge/.claude/settings.json": true,
6886
6887
  "scratchpad/decision-points.sh": true,
6887
6888
  "scripts/build-plugins.sh": true,
6889
+ "scripts/check-conflict-markers.mjs": true,
6888
6890
  "scripts/check-duplicate-versions.mjs": true,
6889
6891
  "scripts/check-learnings-budget.ts": true,
6890
6892
  "scripts/check-plugins-sync.sh": true,
@@ -7654,6 +7656,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7654
7656
  "tests/unit/hooks/inject-rules.test.ts": true,
7655
7657
  "tests/unit/hooks/install-pkgs-worktree-node-modules.test.ts": true,
7656
7658
  "tests/unit/hooks/lint-on-edit.test.ts": true,
7659
+ "tests/unit/hooks/parity-push-gate.test.ts": true,
7657
7660
  "tests/unit/hooks/parity-safety-net-guards.test.ts": true,
7658
7661
  "tests/unit/hooks/parity-safety-net-heredoc-body-quote-state.test.ts": true,
7659
7662
  "tests/unit/hooks/parity-safety-net-heredoc-continuation.test.ts": true,
@@ -7717,6 +7720,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7717
7720
  "tests/unit/scripts/bdd/sources.ts": true,
7718
7721
  "tests/unit/scripts/bdd/support.ts": true,
7719
7722
  "tests/unit/scripts/build-cursor-hooks-json.test.ts": true,
7723
+ "tests/unit/scripts/check-conflict-markers.test.ts": true,
7720
7724
  "tests/unit/scripts/check-duplicate-versions-helpers.ts": true,
7721
7725
  "tests/unit/scripts/check-duplicate-versions.test.ts": true,
7722
7726
  "tests/unit/scripts/check-duplicate-versions.units.test.ts": true,
@@ -7756,6 +7760,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7756
7760
  "tests/unit/scripts/per-agent-hook-filter.test.ts": true,
7757
7761
  "tests/unit/scripts/plugin-parity-drift-helpers.ts": true,
7758
7762
  "tests/unit/scripts/plugin-parity-drift.test.ts": true,
7763
+ "tests/unit/scripts/plugin-routing-validate-cache-visibility.test.ts": true,
7759
7764
  "tests/unit/scripts/plugin-routing-validate-helpers.ts": true,
7760
7765
  "tests/unit/scripts/plugin-routing-validate.test.ts": true,
7761
7766
  "tests/unit/scripts/plugin-sync-scripts.test.ts": true,