@codyswann/lisa 3.45.8 → 3.45.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.
Files changed (105) hide show
  1. package/all/copy-overwrite/scripts/lisa-floor-collisions.mjs +17 -1
  2. package/all/copy-overwrite/scripts/lisa-gates.mjs +2 -2
  3. package/all/copy-overwrite/scripts/lisa-work-item.mjs +54 -12
  4. package/dist/cli/doctor-traceability-gate.js +1 -1
  5. package/dist/cli/doctor-traceability-gate.js.map +1 -1
  6. package/dist/configs/eslint/slow.js +3 -3
  7. package/dist/configs/eslint/slow.js.map +1 -1
  8. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  9. package/dist/core/lisa-owned-hash-ledger.js +17 -0
  10. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  11. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  12. package/dist/core/upstream-evidence-manifest.js +18 -16
  13. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  14. package/dist/migrations/ensure-audit-ignore-local-exclusions.js +1 -1
  15. package/dist/migrations/ensure-audit-ignore-local-exclusions.js.map +1 -1
  16. package/dist/migrations/ensure-wiki-source-declared.js +2 -2
  17. package/dist/migrations/ensure-wiki-source-declared.js.map +1 -1
  18. package/expo/copy-overwrite/scripts/bdd/discover.mjs +20 -4
  19. package/expo/copy-overwrite/scripts/bdd/markdown-cell.mjs +7 -1
  20. package/expo/copy-overwrite/scripts/bdd/parse.mjs +9 -3
  21. package/expo/copy-overwrite/scripts/check-e2e-coverage.mjs +9 -3
  22. package/expo/copy-overwrite/scripts/classify-maestro-failures.mjs +91 -10
  23. package/package.json +1 -1
  24. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa/.codex-plugin/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +2 -2
  27. package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/surfaces.mjs +1 -1
  28. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +2 -2
  29. package/plugins/lisa/.codex-plugin/skills/lisa-setup-workstation/scripts/cli.mjs +1 -1
  30. package/plugins/lisa/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +2 -2
  31. package/plugins/lisa/skills/lisa-secrets-access/scripts/surfaces.mjs +1 -1
  32. package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +2 -2
  33. package/plugins/lisa/skills/lisa-setup-workstation/scripts/cli.mjs +1 -1
  34. package/plugins/lisa-agy/plugin.json +1 -1
  35. package/plugins/lisa-agy/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +2 -2
  36. package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/surfaces.mjs +1 -1
  37. package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +2 -2
  38. package/plugins/lisa-agy/skills/lisa-setup-workstation/scripts/cli.mjs +1 -1
  39. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  42. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-copilot/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +2 -2
  46. package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/surfaces.mjs +1 -1
  47. package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +2 -2
  48. package/plugins/lisa-copilot/skills/lisa-setup-workstation/scripts/cli.mjs +1 -1
  49. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-cursor/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +2 -2
  51. package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/surfaces.mjs +1 -1
  52. package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +2 -2
  53. package/plugins/lisa-cursor/skills/lisa-setup-workstation/scripts/cli.mjs +1 -1
  54. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-expo-agy/plugin.json +1 -1
  57. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  62. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  66. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  67. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  71. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  72. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  76. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  77. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  81. package/plugins/lisa-rails-agy/plugin.json +1 -1
  82. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  86. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  87. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  91. package/plugins/lisa-wiki/scripts/ensure-wiki.mjs +3 -3
  92. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  93. package/plugins/lisa-wiki-agy/scripts/ensure-wiki.mjs +3 -3
  94. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki-copilot/scripts/ensure-wiki.mjs +3 -3
  96. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-cursor/scripts/ensure-wiki.mjs +3 -3
  98. package/plugins/src/base/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +2 -2
  99. package/plugins/src/base/skills/lisa-secrets-access/scripts/surfaces.mjs +1 -1
  100. package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +2 -2
  101. package/plugins/src/base/skills/lisa-setup-workstation/scripts/cli.mjs +1 -1
  102. package/plugins/src/wiki/scripts/ensure-wiki.mjs +3 -3
  103. package/scripts/lisa-assert-eas-profile.mjs +1 -1
  104. package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +22 -6
  105. package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +10 -1
@@ -209,7 +209,7 @@ export class EnsureAuditIgnoreLocalExclusionsMigration {
209
209
  return { name: this.name, action: "noop" };
210
210
  }
211
211
  const merged = {
212
- ...(local ?? {}),
212
+ ...local,
213
213
  exclusions: [...retained, ...additions],
214
214
  };
215
215
  const addedIds = additions
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-audit-ignore-local-exclusions.js","sourceRoot":"","sources":["../../src/migrations/ensure-audit-ignore-local-exclusions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAO7E,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAC9C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AA8BzC;;;GAGG;AACH,MAAM,iBAAiB,GAA2B;IAChD,YAAY;IACZ,MAAM;IACN,KAAK;IACL,QAAQ;IACR,aAAa;CACd,CAAC;AAEF;;;;;;;;;GASG;AACH,KAAK,UAAU,sBAAsB,CACnC,OAAe,EACf,aAAqC;IAErC,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC3E,IAAI,MAAM,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAA4B;IAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;SACxB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SACtB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,aAAa,CAAI,QAAgB;IAC9C,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAI,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACjD,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CACtC,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,cAAc,CACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,CAAC,CACjE,CAAC;IACF,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,SAAS,EAAE,OAAO;QAC/B,WAAW,EAAE,WAAW,EAAE,OAAO;KAClC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CACL,qBAAqB;QACrB,GAAG,CAAC,SAAS,EAAE,OAAO,IAAI,OAAO,EAAE,uBAAuB,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,yCAAyC;IAC3C,IAAI,GAAG,sCAAsC,CAAC;IAC9C,WAAW,GAClB,uGAAuG,CAAC;IAElG,QAAQ,GAAyB,EAAE,CAAC;IAE5C;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,gBAAgB,CAAC,GAAqB;QAC1C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QAEnB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,aAAa,GACjB,MAAM,cAAc,CAAkB,iBAAiB,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAC/C,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,aAAa,CAClB,CAAC;QACF,MAAM,QAAQ,GAAG,YAAY;YAC3B,CAAC,CAAC,MAAM,cAAc,CAAkB,YAAY,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9D,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,GAAqB;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAkB,SAAS,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/D,IACE,cAAc;YACd,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC,EAC/D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc;YAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC;YAC9D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,GAAqB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAkB,SAAS,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,cAAc;YAC7B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC;YACzD,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC7C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IACE,OAAO,EAAE,KAAK,QAAQ;gBACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,CAAC,cAAc,IAAI,EAAE,KAAK,gBAAgB,CAAC,EAC3C,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAoB;YAC9B,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAChB,UAAU,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC;SACxC,CAAC;QAEF,MAAM,QAAQ,GAAG,SAAS;aACvB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;aACtB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG;YACd,SAAS,CAAC,MAAM,GAAG,CAAC;gBAClB,CAAC,CAAC,aAAa,SAAS,CAAC,MAAM,kBAAkB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACvE,CAAC,CAAC,EAAE;YACN,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,OAAO,+BAA+B,CAAC,CAAC,CAAC,EAAE;SACrE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC;QAEtE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,WAAW,CAAC;gBAC3B,OAAO;aACR,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,MAAM,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,CAAC,WAAW,CAAC;YAC3B,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"ensure-audit-ignore-local-exclusions.js","sourceRoot":"","sources":["../../src/migrations/ensure-audit-ignore-local-exclusions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAO7E,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAC9C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AA8BzC;;;GAGG;AACH,MAAM,iBAAiB,GAA2B;IAChD,YAAY;IACZ,MAAM;IACN,KAAK;IACL,QAAQ;IACR,aAAa;CACd,CAAC;AAEF;;;;;;;;;GASG;AACH,KAAK,UAAU,sBAAsB,CACnC,OAAe,EACf,aAAqC;IAErC,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC3E,IAAI,MAAM,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAA4B;IAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;SACxB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SACtB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,aAAa,CAAI,QAAgB;IAC9C,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAI,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACjD,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CACtC,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,cAAc,CACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,CAAC,CACjE,CAAC;IACF,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,SAAS,EAAE,OAAO;QAC/B,WAAW,EAAE,WAAW,EAAE,OAAO;KAClC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CACL,qBAAqB;QACrB,GAAG,CAAC,SAAS,EAAE,OAAO,IAAI,OAAO,EAAE,uBAAuB,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,yCAAyC;IAC3C,IAAI,GAAG,sCAAsC,CAAC;IAC9C,WAAW,GAClB,uGAAuG,CAAC;IAElG,QAAQ,GAAyB,EAAE,CAAC;IAE5C;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,gBAAgB,CAAC,GAAqB;QAC1C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QAEnB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,aAAa,GACjB,MAAM,cAAc,CAAkB,iBAAiB,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAC/C,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,aAAa,CAClB,CAAC;QACF,MAAM,QAAQ,GAAG,YAAY;YAC3B,CAAC,CAAC,MAAM,cAAc,CAAkB,YAAY,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9D,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,GAAqB;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAkB,SAAS,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/D,IACE,cAAc;YACd,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC,EAC/D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc;YAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC;YAC9D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,GAAqB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAkB,SAAS,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,cAAc;YAC7B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC;YACzD,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC7C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IACE,OAAO,EAAE,KAAK,QAAQ;gBACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,CAAC,cAAc,IAAI,EAAE,KAAK,gBAAgB,CAAC,EAC3C,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAoB;YAC9B,GAAG,KAAK;YACR,UAAU,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC;SACxC,CAAC;QAEF,MAAM,QAAQ,GAAG,SAAS;aACvB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;aACtB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG;YACd,SAAS,CAAC,MAAM,GAAG,CAAC;gBAClB,CAAC,CAAC,aAAa,SAAS,CAAC,MAAM,kBAAkB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACvE,CAAC,CAAC,EAAE;YACN,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,OAAO,+BAA+B,CAAC,CAAC,CAAC,EAAE;SACrE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC;QAEtE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,WAAW,CAAC;gBAC3B,OAAO;aACR,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,MAAM,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,CAAC,WAAW,CAAC;YAC3B,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
@@ -60,8 +60,8 @@ export class EnsureWikiSourceDeclaredMigration {
60
60
  }
61
61
  const { configPath, config, wikiRoot } = state;
62
62
  const merged = {
63
- ...(config ?? {}),
64
- wiki: { ...(config?.wiki ?? {}), source: { path: wikiRoot } },
63
+ ...config,
64
+ wiki: { ...config?.wiki, source: { path: wikiRoot } },
65
65
  };
66
66
  const message = `Declared wiki.source.path="${wikiRoot}" in ${LISA_CONFIG}`;
67
67
  if (ctx.dryRun) {
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-wiki-source-declared.js","sourceRoot":"","sources":["../../src/migrations/ensure-wiki-source-declared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ensure-wiki-source-declared.js","sourceRoot":"","sources":["../../src/migrations/ensure-wiki-source-declared.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,22 @@ import * as path from "node:path";
26
26
  import { byCodeUnit } from "./contract.mjs";
27
27
  import { listFiles, posix, resolveInsideRepo } from "./parse.mjs";
28
28
 
29
+ /**
30
+ * A path without its trailing slashes.
31
+ *
32
+ * An index scan rather than `.replace(/\/+$/, "")`. A quantified class pinned
33
+ * to `$` is re-attempted from every position before it can fail, which is
34
+ * super-linear in the path's length — S5852. Walking back from the end is one
35
+ * pass and cannot backtrack.
36
+ * @param {string} value - A repo-relative path or prefix.
37
+ * @returns {string} The same path with every trailing `/` removed.
38
+ */
39
+ const withoutTrailingSlashes = value => {
40
+ let end = value.length;
41
+ while (end > 0 && value[end - 1] === "/") end -= 1;
42
+ return value.slice(0, end);
43
+ };
44
+
29
45
  /**
30
46
  * Normalize a repo-relative path or path prefix to one comparable spelling.
31
47
  *
@@ -36,10 +52,10 @@ import { listFiles, posix, resolveInsideRepo } from "./parse.mjs";
36
52
  * @returns {string} Its canonical form; the empty string means the repo root.
37
53
  */
38
54
  const canonicalPath = value =>
39
- posix(String(value))
40
- .replace(/^\.\/+/, "")
41
- .replace(/\/+$/, "")
42
- .replace(/^\.$/, "");
55
+ withoutTrailingSlashes(posix(String(value)).replace(/^\.\/+/, "")).replace(
56
+ /^\.$/,
57
+ ""
58
+ );
43
59
 
44
60
  /**
45
61
  * Whether a repo-relative path lies at or under a path prefix, SEGMENT-WISE.
@@ -68,6 +68,12 @@ const escapePipeRun = (_match, backslashes) =>
68
68
  * failures are invisible in review:
69
69
  *
70
70
  * - Pipes are escaped by RUN, not one at a time — see {@link escapePipeRun}.
71
+ * - `(?<!\\)` in front of that run. Without it the engine may start a run
72
+ * part-way into a longer one, so every position in a backslash run is a
73
+ * fresh attempt and the scan is super-linear in the cell's length — S5852,
74
+ * on author-supplied text. The lookbehind removes no match: a run's
75
+ * leftmost backslash always wins under leftmost-match anyway, so the
76
+ * later starts it forbids were never the ones chosen.
71
77
  * - `/\r\n?|\n/` and not `/\r?\n/`. The latter only matches a CR that is
72
78
  * FOLLOWED by an LF, so a lone `\r` survives — and CommonMark treats a lone
73
79
  * CR as a line ending, which ends the row rather than the cell.
@@ -93,7 +99,7 @@ const escapePipeRun = (_match, backslashes) =>
93
99
  */
94
100
  export const cell = text =>
95
101
  String(text ?? "")
96
- .replace(/(\\*)\|/g, escapePipeRun)
102
+ .replace(/(?<!\\)(\\*)\|/g, escapePipeRun)
97
103
  .replace(/\r\n?|\n/g, " ");
98
104
 
99
105
  /**
@@ -163,7 +163,13 @@ export function parseFeatureSource(source, file, platforms) {
163
163
  pending.push(...tagsOf(trimmed));
164
164
  continue;
165
165
  }
166
- const featureMatch = /^Feature:\s*(.+)$/.exec(trimmed);
166
+ // `(\S.*)` and not `(.+)`, here and on the Scenario line below. `\s*(.+)`
167
+ // lets both halves claim the same run of spaces, so the engine has a
168
+ // choice at every one of them and the match is super-linear in the line's
169
+ // length — S5852, on feature files. `\S` makes the halves disjoint. The
170
+ // subject is already trimmed and the capture is trimmed again, so no line
171
+ // that used to match stops matching.
172
+ const featureMatch = /^Feature:\s*(\S.*)$/.exec(trimmed);
167
173
  if (featureMatch) {
168
174
  feature = featureMatch[1].trim();
169
175
  // Gherkin inherits Feature-level tags down to every scenario in the
@@ -181,7 +187,7 @@ export function parseFeatureSource(source, file, platforms) {
181
187
  backgroundSteps = [];
182
188
  continue;
183
189
  }
184
- if (/^Background:/.test(trimmed)) {
190
+ if (trimmed.startsWith("Background:")) {
185
191
  // Background is per-Feature, so it replaces any previous one rather than
186
192
  // accumulating, and its steps are collected instead of a scenario's.
187
193
  backgroundSteps = [];
@@ -189,7 +195,7 @@ export function parseFeatureSource(source, file, platforms) {
189
195
  current = null;
190
196
  continue;
191
197
  }
192
- const scenarioMatch = /^Scenario(?: Outline| Template)?:\s*(.+)$/.exec(
198
+ const scenarioMatch = /^Scenario(?: Outline| Template)?:\s*(\S.*)$/.exec(
193
199
  trimmed
194
200
  );
195
201
  if (scenarioMatch) {
@@ -382,7 +382,7 @@ export function isExcludedFlow(source, excluded) {
382
382
  */
383
383
  function flowTags(source) {
384
384
  const lines = source.split("\n");
385
- const start = lines.findIndex(line => /^tags:/u.test(line));
385
+ const start = lines.findIndex(line => line.startsWith("tags:"));
386
386
  if (start === -1) {
387
387
  return [];
388
388
  }
@@ -397,11 +397,17 @@ function flowTags(source) {
397
397
  for (const line of lines.slice(start + 1)) {
398
398
  // The block ends at the document separator, at a non-indented line, or at
399
399
  // anything that is not a list item. Each of those is what the regex missed.
400
- const item = line.match(/^\s+-\s*(.+?)\s*$/u);
400
+ // The whitespace either side of the item is trimmed in JS rather than by
401
+ // `\s*(.+?)\s*$`. There, three quantifiers compete for the same spaces, so
402
+ // the engine has a choice to make at each one and the match is
403
+ // super-linear in the line's length — S5852, on a workflow file. `(.+)`
404
+ // holds the same "at least one character after the dash" condition the
405
+ // lazy form did, so no line changes its verdict.
406
+ const item = line.match(/^\s+-(.+)$/u);
401
407
  if (!item || line.startsWith("---")) {
402
408
  break;
403
409
  }
404
- tags.push(item[1].replace(/^["']|["']$/gu, ""));
410
+ tags.push(item[1].trim().replace(/^["']|["']$/gu, ""));
405
411
  }
406
412
  return tags;
407
413
  }
@@ -149,6 +149,57 @@ const PLACEHOLDER_METHODS = new Set([
149
149
  "?",
150
150
  ]);
151
151
 
152
+ /**
153
+ * An `id:` line, with everything after the colon captured verbatim.
154
+ *
155
+ * Two deliberate spellings, both there to keep the match linear (S5852):
156
+ * `[ \t]` rather than `\s`, because this is applied to one already-split line
157
+ * and `\s`'s newline class only lets the indentation run overlap the next
158
+ * line's; and `(?:\S.*)?` rather than `.*`, because `[ \t]*(.*)` lets both
159
+ * halves claim the same spaces, which is a choice the engine has to make at
160
+ * every one of them.
161
+ */
162
+ const ID_LINE = /^[ \t]*id:[ \t]*((?:\S.*)?)$/;
163
+
164
+ /** A `text:` line, read the same way. */
165
+ const TEXT_LINE = /^[ \t]*text:[ \t]*((?:\S.*)?)$/;
166
+
167
+ /**
168
+ * A scalar value with one layer of matching quotes removed.
169
+ *
170
+ * Character comparison rather than `['"]?(...)['"]?`, because the regex form
171
+ * cannot express "the same quote at both ends" without a backreference, and
172
+ * the shape it settled for — a lazy capture between two optional quotes and a
173
+ * trailing `\s*$` — has three quantifiers competing for the same characters.
174
+ * That is super-linear in the line's length (S5852) on flow files.
175
+ * @param {string} value - An already-trimmed scalar.
176
+ * @returns {string} The value without its surrounding quote pair.
177
+ */
178
+ function unquote(value) {
179
+ const first = value.at(0);
180
+ const isQuote = first === "'" || first === '"';
181
+ return isQuote && value.length > 1 && value.at(-1) === first
182
+ ? value.slice(1, -1)
183
+ : value;
184
+ }
185
+
186
+ /**
187
+ * The selector a `key: value` line declares, or null when the line is not one.
188
+ *
189
+ * An empty value reads as "no selector here" rather than as the empty
190
+ * selector, which is what the previous `[^'"\n]+?` (one character minimum)
191
+ * also did.
192
+ * @param {string} line - One line of flow YAML.
193
+ * @param {RegExp} pattern - The key's line pattern.
194
+ * @returns {string|null} The selector, or null.
195
+ */
196
+ function scalarSelector(line, pattern) {
197
+ const match = pattern.exec(line);
198
+ if (!match) return null;
199
+ const value = unquote(match[1].trim());
200
+ return value === "" ? null : value;
201
+ }
202
+
152
203
  /**
153
204
  * Pull `id:`/`text:` selectors and their ceilings out of a flow's YAML source.
154
205
  *
@@ -178,7 +229,12 @@ export function extractGates(source) {
178
229
 
179
230
  for (const line of lines) {
180
231
  if (/^\s*#/.test(line) || line.trim() === "") continue;
181
- const command = line.match(/^(\s*)-?\s*(\w+):/);
232
+ // `(?:-\s*)?` rather than `-?\s*`: with two `\s*` runs either side of an
233
+ // optional dash, both can claim the same spaces and the engine has a
234
+ // choice at every one — super-linear in the line's length (S5852). Tying
235
+ // the dash to the whitespace that follows it removes the choice and
236
+ // recognises exactly the same lines.
237
+ const command = line.match(/^(\s*)(?:-\s*)?(\w+):/);
182
238
  if (command && GATE_COMMANDS.includes(command[2])) {
183
239
  if (inGate) flush();
184
240
  inGate = true;
@@ -198,18 +254,35 @@ export function extractGates(source) {
198
254
  timeout = Number(timeoutMatch[1]);
199
255
  continue;
200
256
  }
201
- const idMatch = line.match(/^\s*id:\s*['"]?([^'"\n]+?)['"]?\s*$/);
202
- if (idMatch) {
203
- pending.push({ kind: "id", selector: idMatch[1] });
257
+ const idSelector = scalarSelector(line, ID_LINE);
258
+ if (idSelector !== null) {
259
+ pending.push({ kind: "id", selector: idSelector });
204
260
  continue;
205
261
  }
206
- const textMatch = line.match(/^\s*text:\s*['"]?([^'"\n]+?)['"]?\s*$/);
207
- if (textMatch) pending.push({ kind: "text", selector: textMatch[1] });
262
+ const textSelector = scalarSelector(line, TEXT_LINE);
263
+ if (textSelector !== null)
264
+ pending.push({ kind: "text", selector: textSelector });
208
265
  }
209
266
  if (inGate) flush();
210
267
  return gates;
211
268
  }
212
269
 
270
+ /** The extension a referenced flow must carry to be followed. */
271
+ const YAML_SUFFIX = ".yaml";
272
+
273
+ /**
274
+ * A `runFlow: <path>` line, in the shorthand list-item form.
275
+ *
276
+ * `[ \t]` rather than `\s` throughout, and the dash tied to the whitespace
277
+ * that follows it. Under `m`, a `\s*` run can cross a newline into the next
278
+ * line's own `^`, so the scan re-attempts the same characters from many start
279
+ * positions — super-linear in the file's length (S5852).
280
+ */
281
+ const INLINE_RUN_FLOW = /^[ \t]*(?:-[ \t]*)?runFlow:[ \t]*['"]?([^'"\s]+)/gm;
282
+
283
+ /** The `file: <path>` line of the expanded `runFlow:` form. */
284
+ const NESTED_RUN_FLOW = /^[ \t]*file:[ \t]*['"]?([^'"\s]+)/gm;
285
+
213
286
  /**
214
287
  * Resolve the `runFlow:` targets a flow references, as absolute paths.
215
288
  * @param {string} source - Flow YAML source
@@ -219,10 +292,18 @@ export function extractGates(source) {
219
292
  export function extractRunFlowTargets(source, flowPath) {
220
293
  const dir = path.dirname(flowPath);
221
294
  const targets = [];
222
- const inline = source.matchAll(/^\s*-?\s*runFlow:\s*['"]?([^'"\s]+\.yaml)/gm);
223
- for (const match of inline) targets.push(path.resolve(dir, match[1]));
224
- const nested = source.matchAll(/^\s*file:\s*['"]?([^'"\s]+\.yaml)/gm);
225
- for (const match of nested) targets.push(path.resolve(dir, match[1]));
295
+ // The `.yaml` suffix is checked in JS rather than written as `[^'"\s]+\.yaml`.
296
+ // A greedy class that already contains `.` has to give characters back one at
297
+ // a time before the literal suffix can match, at every start position a `g`
298
+ // scan tries super-linear in the source's length (S5852), on flow files.
299
+ // The class stops at whitespace or a quote either way, so the token it
300
+ // captures is the same one; only the suffix test moved.
301
+ for (const match of source.matchAll(INLINE_RUN_FLOW))
302
+ if (match[1].endsWith(YAML_SUFFIX))
303
+ targets.push(path.resolve(dir, match[1]));
304
+ for (const match of source.matchAll(NESTED_RUN_FLOW))
305
+ if (match[1].endsWith(YAML_SUFFIX))
306
+ targets.push(path.resolve(dir, match[1]));
226
307
  return targets;
227
308
  }
228
309
 
package/package.json CHANGED
@@ -132,7 +132,7 @@
132
132
  "ws": ">=8.21.0"
133
133
  },
134
134
  "name": "@codyswann/lisa",
135
- "version": "3.45.8",
135
+ "version": "3.45.10",
136
136
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
137
137
  "main": "dist/index.js",
138
138
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -443,8 +443,8 @@ export function satisfiedByNpm(pkg, tool) {
443
443
  const viaNpm = KNOWN_TOOLS[tool]?.viaNpm;
444
444
  if (!viaNpm) return false;
445
445
  const declared = {
446
- ...(pkg?.dependencies ?? {}),
447
- ...(pkg?.devDependencies ?? {}),
446
+ ...pkg?.dependencies,
447
+ ...pkg?.devDependencies,
448
448
  };
449
449
  return Object.hasOwn(declared, viaNpm);
450
450
  }
@@ -308,7 +308,7 @@ export function readConfig(cwd = process.cwd(), env = process.env) {
308
308
  rotating: cfg.rotating ?? [],
309
309
  propagating: cfg.propagating ?? [],
310
310
  namespace,
311
- narrow: { ...DEFAULTS.narrow, ...(cfg.narrow ?? {}) },
311
+ narrow: { ...DEFAULTS.narrow, ...cfg.narrow },
312
312
  surface: cfg.surface ?? null,
313
313
  routing,
314
314
  configPath: path,
@@ -91,7 +91,7 @@ export function readRemoteEnvConfig(cwd = process.cwd()) {
91
91
  const cfg = JSON.parse(readFileSync(path, "utf8")).remoteEnv;
92
92
  if (!cfg) return defaults;
93
93
  return {
94
- tools: { require: [], install: [], ...(cfg.tools ?? {}) },
94
+ tools: { require: [], install: [], ...cfg.tools },
95
95
  hook: cfg.hook ?? null,
96
96
  surfaces: cfg.surfaces ?? {},
97
97
  };
@@ -879,7 +879,7 @@ export function pinEnvironment(environmentId, cwd = process.cwd()) {
879
879
  : {};
880
880
  const merged = {
881
881
  ...existing,
882
- remote: { ...(existing.remote ?? {}), defaultEnvironmentId: environmentId },
882
+ remote: { ...existing.remote, defaultEnvironmentId: environmentId },
883
883
  };
884
884
  writeFileSync(path, `${JSON.stringify(merged, null, 2)}\n`);
885
885
  return path;
@@ -204,7 +204,7 @@ export async function run(argv, io = {}) {
204
204
 
205
205
  let plan;
206
206
  try {
207
- plan = planWorkstation({ agents, tools, provider, ...(io.probes ?? {}) });
207
+ plan = planWorkstation({ agents, tools, provider, ...io.probes });
208
208
  } catch (error) {
209
209
  // A misspelled provider stops here rather than silently provisioning the
210
210
  // wrong credential manager.
@@ -443,8 +443,8 @@ export function satisfiedByNpm(pkg, tool) {
443
443
  const viaNpm = KNOWN_TOOLS[tool]?.viaNpm;
444
444
  if (!viaNpm) return false;
445
445
  const declared = {
446
- ...(pkg?.dependencies ?? {}),
447
- ...(pkg?.devDependencies ?? {}),
446
+ ...pkg?.dependencies,
447
+ ...pkg?.devDependencies,
448
448
  };
449
449
  return Object.hasOwn(declared, viaNpm);
450
450
  }
@@ -308,7 +308,7 @@ export function readConfig(cwd = process.cwd(), env = process.env) {
308
308
  rotating: cfg.rotating ?? [],
309
309
  propagating: cfg.propagating ?? [],
310
310
  namespace,
311
- narrow: { ...DEFAULTS.narrow, ...(cfg.narrow ?? {}) },
311
+ narrow: { ...DEFAULTS.narrow, ...cfg.narrow },
312
312
  surface: cfg.surface ?? null,
313
313
  routing,
314
314
  configPath: path,
@@ -91,7 +91,7 @@ export function readRemoteEnvConfig(cwd = process.cwd()) {
91
91
  const cfg = JSON.parse(readFileSync(path, "utf8")).remoteEnv;
92
92
  if (!cfg) return defaults;
93
93
  return {
94
- tools: { require: [], install: [], ...(cfg.tools ?? {}) },
94
+ tools: { require: [], install: [], ...cfg.tools },
95
95
  hook: cfg.hook ?? null,
96
96
  surfaces: cfg.surfaces ?? {},
97
97
  };
@@ -879,7 +879,7 @@ export function pinEnvironment(environmentId, cwd = process.cwd()) {
879
879
  : {};
880
880
  const merged = {
881
881
  ...existing,
882
- remote: { ...(existing.remote ?? {}), defaultEnvironmentId: environmentId },
882
+ remote: { ...existing.remote, defaultEnvironmentId: environmentId },
883
883
  };
884
884
  writeFileSync(path, `${JSON.stringify(merged, null, 2)}\n`);
885
885
  return path;
@@ -204,7 +204,7 @@ export async function run(argv, io = {}) {
204
204
 
205
205
  let plan;
206
206
  try {
207
- plan = planWorkstation({ agents, tools, provider, ...(io.probes ?? {}) });
207
+ plan = planWorkstation({ agents, tools, provider, ...io.probes });
208
208
  } catch (error) {
209
209
  // A misspelled provider stops here rather than silently provisioning the
210
210
  // wrong credential manager.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -443,8 +443,8 @@ export function satisfiedByNpm(pkg, tool) {
443
443
  const viaNpm = KNOWN_TOOLS[tool]?.viaNpm;
444
444
  if (!viaNpm) return false;
445
445
  const declared = {
446
- ...(pkg?.dependencies ?? {}),
447
- ...(pkg?.devDependencies ?? {}),
446
+ ...pkg?.dependencies,
447
+ ...pkg?.devDependencies,
448
448
  };
449
449
  return Object.hasOwn(declared, viaNpm);
450
450
  }
@@ -308,7 +308,7 @@ export function readConfig(cwd = process.cwd(), env = process.env) {
308
308
  rotating: cfg.rotating ?? [],
309
309
  propagating: cfg.propagating ?? [],
310
310
  namespace,
311
- narrow: { ...DEFAULTS.narrow, ...(cfg.narrow ?? {}) },
311
+ narrow: { ...DEFAULTS.narrow, ...cfg.narrow },
312
312
  surface: cfg.surface ?? null,
313
313
  routing,
314
314
  configPath: path,
@@ -91,7 +91,7 @@ export function readRemoteEnvConfig(cwd = process.cwd()) {
91
91
  const cfg = JSON.parse(readFileSync(path, "utf8")).remoteEnv;
92
92
  if (!cfg) return defaults;
93
93
  return {
94
- tools: { require: [], install: [], ...(cfg.tools ?? {}) },
94
+ tools: { require: [], install: [], ...cfg.tools },
95
95
  hook: cfg.hook ?? null,
96
96
  surfaces: cfg.surfaces ?? {},
97
97
  };
@@ -879,7 +879,7 @@ export function pinEnvironment(environmentId, cwd = process.cwd()) {
879
879
  : {};
880
880
  const merged = {
881
881
  ...existing,
882
- remote: { ...(existing.remote ?? {}), defaultEnvironmentId: environmentId },
882
+ remote: { ...existing.remote, defaultEnvironmentId: environmentId },
883
883
  };
884
884
  writeFileSync(path, `${JSON.stringify(merged, null, 2)}\n`);
885
885
  return path;
@@ -204,7 +204,7 @@ export async function run(argv, io = {}) {
204
204
 
205
205
  let plan;
206
206
  try {
207
- plan = planWorkstation({ agents, tools, provider, ...(io.probes ?? {}) });
207
+ plan = planWorkstation({ agents, tools, provider, ...io.probes });
208
208
  } catch (error) {
209
209
  // A misspelled provider stops here rather than silently provisioning the
210
210
  // wrong credential manager.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -443,8 +443,8 @@ export function satisfiedByNpm(pkg, tool) {
443
443
  const viaNpm = KNOWN_TOOLS[tool]?.viaNpm;
444
444
  if (!viaNpm) return false;
445
445
  const declared = {
446
- ...(pkg?.dependencies ?? {}),
447
- ...(pkg?.devDependencies ?? {}),
446
+ ...pkg?.dependencies,
447
+ ...pkg?.devDependencies,
448
448
  };
449
449
  return Object.hasOwn(declared, viaNpm);
450
450
  }
@@ -308,7 +308,7 @@ export function readConfig(cwd = process.cwd(), env = process.env) {
308
308
  rotating: cfg.rotating ?? [],
309
309
  propagating: cfg.propagating ?? [],
310
310
  namespace,
311
- narrow: { ...DEFAULTS.narrow, ...(cfg.narrow ?? {}) },
311
+ narrow: { ...DEFAULTS.narrow, ...cfg.narrow },
312
312
  surface: cfg.surface ?? null,
313
313
  routing,
314
314
  configPath: path,
@@ -91,7 +91,7 @@ export function readRemoteEnvConfig(cwd = process.cwd()) {
91
91
  const cfg = JSON.parse(readFileSync(path, "utf8")).remoteEnv;
92
92
  if (!cfg) return defaults;
93
93
  return {
94
- tools: { require: [], install: [], ...(cfg.tools ?? {}) },
94
+ tools: { require: [], install: [], ...cfg.tools },
95
95
  hook: cfg.hook ?? null,
96
96
  surfaces: cfg.surfaces ?? {},
97
97
  };
@@ -879,7 +879,7 @@ export function pinEnvironment(environmentId, cwd = process.cwd()) {
879
879
  : {};
880
880
  const merged = {
881
881
  ...existing,
882
- remote: { ...(existing.remote ?? {}), defaultEnvironmentId: environmentId },
882
+ remote: { ...existing.remote, defaultEnvironmentId: environmentId },
883
883
  };
884
884
  writeFileSync(path, `${JSON.stringify(merged, null, 2)}\n`);
885
885
  return path;
@@ -204,7 +204,7 @@ export async function run(argv, io = {}) {
204
204
 
205
205
  let plan;
206
206
  try {
207
- plan = planWorkstation({ agents, tools, provider, ...(io.probes ?? {}) });
207
+ plan = planWorkstation({ agents, tools, provider, ...io.probes });
208
208
  } catch (error) {
209
209
  // A misspelled provider stops here rather than silently provisioning the
210
210
  // wrong credential manager.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.45.8",
3
+ "version": "3.45.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"