@codyswann/lisa 3.4.0 → 3.5.0

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 (206) hide show
  1. package/README.md +22 -0
  2. package/all/copy-contents/gitignore +7 -0
  3. package/all/copy-overwrite/scripts/lisa-command-envelope.mjs +44 -4
  4. package/all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh +31 -0
  5. package/all/copy-overwrite/scripts/lisa-schema-validate.mjs +125 -47
  6. package/all/copy-overwrite/scripts/lisa-work-item.mjs +24 -2
  7. package/cdk/merge/.oxlintrc.json +1 -1
  8. package/dist/cli/apply.d.ts.map +1 -1
  9. package/dist/cli/apply.js +48 -13
  10. package/dist/cli/apply.js.map +1 -1
  11. package/dist/cli/doctor-apply-freshness.d.ts +29 -0
  12. package/dist/cli/doctor-apply-freshness.d.ts.map +1 -0
  13. package/dist/cli/doctor-apply-freshness.js +194 -0
  14. package/dist/cli/doctor-apply-freshness.js.map +1 -0
  15. package/dist/cli/doctor-learnings-merge-driver.d.ts +23 -0
  16. package/dist/cli/doctor-learnings-merge-driver.d.ts.map +1 -0
  17. package/dist/cli/doctor-learnings-merge-driver.js +73 -0
  18. package/dist/cli/doctor-learnings-merge-driver.js.map +1 -0
  19. package/dist/cli/doctor-readiness-workflows.js +2 -2
  20. package/dist/cli/doctor-readiness-workflows.js.map +1 -1
  21. package/dist/cli/doctor.d.ts.map +1 -1
  22. package/dist/cli/doctor.js +13 -0
  23. package/dist/cli/doctor.js.map +1 -1
  24. package/dist/cli/ui-ci-quality-jobs-parse.js +2 -2
  25. package/dist/cli/ui-ci-quality-jobs-parse.js.map +1 -1
  26. package/dist/cli/ui-deploy-pipeline-model.d.ts +4 -0
  27. package/dist/cli/ui-deploy-pipeline-model.d.ts.map +1 -1
  28. package/dist/cli/ui-deploy-pipeline-model.js +2 -2
  29. package/dist/cli/ui-deploy-pipeline-model.js.map +1 -1
  30. package/dist/codex/agent-transformer.js +2 -2
  31. package/dist/codex/agent-transformer.js.map +1 -1
  32. package/dist/codex/command-skill-transformer.js +3 -3
  33. package/dist/codex/command-skill-transformer.js.map +1 -1
  34. package/dist/codex/scripts/block-no-verify.sh +53 -4
  35. package/dist/core/apply-receipt.d.ts +68 -0
  36. package/dist/core/apply-receipt.d.ts.map +1 -0
  37. package/dist/core/apply-receipt.js +107 -0
  38. package/dist/core/apply-receipt.js.map +1 -0
  39. package/dist/core/learnings-merge-driver-install.d.ts +34 -0
  40. package/dist/core/learnings-merge-driver-install.d.ts.map +1 -1
  41. package/dist/core/learnings-merge-driver-install.js +36 -0
  42. package/dist/core/learnings-merge-driver-install.js.map +1 -1
  43. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  44. package/dist/core/upstream-evidence-manifest.js +62 -39
  45. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  46. package/dist/migrations/ensure-lisa-postinstall.d.ts +33 -0
  47. package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
  48. package/dist/migrations/ensure-lisa-postinstall.js +47 -5
  49. package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
  50. package/dist/migrations/ensure-oxlint-base-configs.d.ts +42 -0
  51. package/dist/migrations/ensure-oxlint-base-configs.d.ts.map +1 -0
  52. package/dist/migrations/ensure-oxlint-base-configs.js +212 -0
  53. package/dist/migrations/ensure-oxlint-base-configs.js.map +1 -0
  54. package/dist/migrations/index.d.ts +1 -0
  55. package/dist/migrations/index.d.ts.map +1 -1
  56. package/dist/migrations/index.js +3 -0
  57. package/dist/migrations/index.js.map +1 -1
  58. package/dist/opencode/command-transformer.js +3 -3
  59. package/dist/opencode/command-transformer.js.map +1 -1
  60. package/dist/utils/yaml.d.ts +54 -0
  61. package/dist/utils/yaml.d.ts.map +1 -0
  62. package/dist/utils/yaml.js +124 -0
  63. package/dist/utils/yaml.js.map +1 -0
  64. package/expo/copy-overwrite/scripts/bdd/baseline.mjs +104 -19
  65. package/expo/copy-overwrite/scripts/bdd/contract.mjs +20 -1
  66. package/expo/copy-overwrite/scripts/bdd/discover.mjs +53 -10
  67. package/expo/copy-overwrite/scripts/bdd/parse.mjs +25 -3
  68. package/expo/copy-overwrite/scripts/bdd/render.mjs +2 -1
  69. package/expo/copy-overwrite/scripts/bdd/report.mjs +26 -12
  70. package/expo/copy-overwrite/scripts/bdd/validate.mjs +2 -2
  71. package/expo/copy-overwrite/scripts/bdd/waivers.mjs +19 -4
  72. package/expo/copy-overwrite/scripts/bdd-matrix.mjs +2 -2
  73. package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +58 -16
  74. package/expo/create-only/.github/required-checks.json +10 -4
  75. package/expo/merge/.oxlintrc.json +1 -1
  76. package/harper-fabric/merge/.oxlintrc.json +1 -1
  77. package/nestjs/create-only/.github/required-checks.json +57 -0
  78. package/nestjs/merge/.oxlintrc.json +1 -1
  79. package/package.json +1 -1
  80. package/phaser/merge/.oxlintrc.json +1 -1
  81. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  83. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +7 -0
  84. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +1 -1
  85. package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/SKILL.md +37 -2
  86. package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/SKILL.md +7 -0
  87. package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/SKILL.md +40 -3
  88. package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/SKILL.md +44 -3
  89. package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +56 -0
  90. package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +1 -1
  91. package/plugins/lisa/hooks/block-no-verify.agy.sh +53 -4
  92. package/plugins/lisa/hooks/block-no-verify.sh +31 -0
  93. package/plugins/lisa/rules/eager/credential-substrate-precedence.md +3 -1
  94. package/plugins/lisa/rules/eager/tracked-work.md +1 -1
  95. package/plugins/lisa/rules/reference/credential-substrate-precedence.md +20 -0
  96. package/plugins/lisa/rules/reference/tracked-work.md +4 -2
  97. package/plugins/lisa/skills/lisa-atlassian-access/SKILL.md +7 -0
  98. package/plugins/lisa/skills/lisa-implement/SKILL.md +1 -1
  99. package/plugins/lisa/skills/lisa-jam-access/SKILL.md +37 -2
  100. package/plugins/lisa/skills/lisa-notion-access/SKILL.md +7 -0
  101. package/plugins/lisa/skills/lisa-posthog-access/SKILL.md +40 -3
  102. package/plugins/lisa/skills/lisa-sentry-access/SKILL.md +44 -3
  103. package/plugins/lisa/skills/lisa-sonarcloud-access/SKILL.md +56 -0
  104. package/plugins/lisa/skills/lisa-track/SKILL.md +1 -1
  105. package/plugins/lisa-agy/hooks/block-no-verify.agy.sh +53 -4
  106. package/plugins/lisa-agy/plugin.json +1 -1
  107. package/plugins/lisa-agy/skills/lisa-atlassian-access/SKILL.md +7 -0
  108. package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +1 -1
  109. package/plugins/lisa-agy/skills/lisa-jam-access/SKILL.md +37 -2
  110. package/plugins/lisa-agy/skills/lisa-notion-access/SKILL.md +7 -0
  111. package/plugins/lisa-agy/skills/lisa-posthog-access/SKILL.md +40 -3
  112. package/plugins/lisa-agy/skills/lisa-sentry-access/SKILL.md +44 -3
  113. package/plugins/lisa-agy/skills/lisa-sonarcloud-access/SKILL.md +56 -0
  114. package/plugins/lisa-agy/skills/lisa-track/SKILL.md +1 -1
  115. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  116. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  117. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  118. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-copilot/hooks/block-no-verify.sh +31 -0
  122. package/plugins/lisa-copilot/rules/eager/credential-substrate-precedence.md +3 -1
  123. package/plugins/lisa-copilot/rules/eager/tracked-work.md +1 -1
  124. package/plugins/lisa-copilot/rules/reference/credential-substrate-precedence.md +20 -0
  125. package/plugins/lisa-copilot/rules/reference/tracked-work.md +4 -2
  126. package/plugins/lisa-copilot/skills/lisa-atlassian-access/SKILL.md +7 -0
  127. package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +1 -1
  128. package/plugins/lisa-copilot/skills/lisa-jam-access/SKILL.md +37 -2
  129. package/plugins/lisa-copilot/skills/lisa-notion-access/SKILL.md +7 -0
  130. package/plugins/lisa-copilot/skills/lisa-posthog-access/SKILL.md +40 -3
  131. package/plugins/lisa-copilot/skills/lisa-sentry-access/SKILL.md +44 -3
  132. package/plugins/lisa-copilot/skills/lisa-sonarcloud-access/SKILL.md +56 -0
  133. package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +1 -1
  134. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  135. package/plugins/lisa-cursor/hooks/block-no-verify.sh +31 -0
  136. package/plugins/lisa-cursor/rules/credential-substrate-precedence-reference.mdc +20 -0
  137. package/plugins/lisa-cursor/rules/credential-substrate-precedence.mdc +3 -1
  138. package/plugins/lisa-cursor/rules/tracked-work-reference.mdc +4 -2
  139. package/plugins/lisa-cursor/rules/tracked-work.mdc +1 -1
  140. package/plugins/lisa-cursor/skills/lisa-atlassian-access/SKILL.md +7 -0
  141. package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +1 -1
  142. package/plugins/lisa-cursor/skills/lisa-jam-access/SKILL.md +37 -2
  143. package/plugins/lisa-cursor/skills/lisa-notion-access/SKILL.md +7 -0
  144. package/plugins/lisa-cursor/skills/lisa-posthog-access/SKILL.md +40 -3
  145. package/plugins/lisa-cursor/skills/lisa-sentry-access/SKILL.md +44 -3
  146. package/plugins/lisa-cursor/skills/lisa-sonarcloud-access/SKILL.md +56 -0
  147. package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +1 -1
  148. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  149. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  150. package/plugins/lisa-expo-agy/plugin.json +1 -1
  151. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  152. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  153. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  154. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  155. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  156. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  157. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  158. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  159. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  160. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  161. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  162. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  163. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  164. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  165. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  166. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  167. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  168. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  169. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  170. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  171. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  172. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  173. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  174. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  175. package/plugins/lisa-rails-agy/plugin.json +1 -1
  176. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  177. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  178. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  179. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  180. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  181. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  182. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  183. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  184. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  185. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  186. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  187. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  188. package/plugins/src/base/hooks/block-no-verify.agy.sh +53 -4
  189. package/plugins/src/base/hooks/block-no-verify.sh +31 -0
  190. package/plugins/src/base/rules/eager/credential-substrate-precedence.md +3 -1
  191. package/plugins/src/base/rules/eager/tracked-work.md +1 -1
  192. package/plugins/src/base/rules/reference/credential-substrate-precedence.md +20 -0
  193. package/plugins/src/base/rules/reference/tracked-work.md +4 -2
  194. package/plugins/src/base/skills/lisa-atlassian-access/SKILL.md +7 -0
  195. package/plugins/src/base/skills/lisa-implement/SKILL.md +1 -1
  196. package/plugins/src/base/skills/lisa-jam-access/SKILL.md +37 -2
  197. package/plugins/src/base/skills/lisa-notion-access/SKILL.md +7 -0
  198. package/plugins/src/base/skills/lisa-posthog-access/SKILL.md +40 -3
  199. package/plugins/src/base/skills/lisa-sentry-access/SKILL.md +44 -3
  200. package/plugins/src/base/skills/lisa-sonarcloud-access/SKILL.md +56 -0
  201. package/plugins/src/base/skills/lisa-track/SKILL.md +1 -1
  202. package/scripts/install-claude-plugins.sh +5 -1
  203. package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +298 -26
  204. package/typescript/create-only/.github/required-checks.json +11 -6
  205. package/typescript/create-only/.github/workflows/required-checks-drift.yml +84 -0
  206. package/typescript/merge/.oxlintrc.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"command-skill-transformer.js","sourceRoot":"","sources":["../../src/codex/command-skill-transformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-skill-transformer.js","sourceRoot":"","sources":["../../src/codex/command-skill-transformer.ts"],"names":[],"mappings":"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"}
@@ -85,16 +85,65 @@ def disables_verification(token):
85
85
  and NO_VERIFY.startswith(token)
86
86
  )
87
87
 
88
+ # The only relocations that keep a repo's own hooks in play. Anything else —
89
+ # including "" and /dev/null, which are simply the two most obvious members of
90
+ # the blocked set rather than special cases — is refused.
91
+ PERMITTED_HOOKS_PATHS = {".husky", ".githooks"}
92
+
93
+
94
+ def is_permitted_hooks_path(value):
95
+ """Whether a core.hooksPath value relocates hooks rather than disabling them.
96
+
97
+ Args:
98
+ value: The raw core.hooksPath value as it appeared on the command line.
99
+
100
+ Returns:
101
+ True if the path is an established in-repo hooks directory.
102
+ """
103
+ cleaned = value.strip().strip("'\"")
104
+ if cleaned.startswith("./"):
105
+ cleaned = cleaned[2:]
106
+ return cleaned.rstrip("/") in PERMITTED_HOOKS_PATHS
107
+
108
+
88
109
  for i, token in enumerate(normalized_tokens):
89
110
  if disables_verification(token):
90
111
  sys.exit(1)
91
112
  if token == "HUSKY=0" or token.startswith("HUSKY_SKIP_HOOKS="):
92
113
  sys.exit(1)
93
- if token.startswith("core.hooksPath="):
94
- value = token.split("=", 1)[1]
95
- if value in ("", "/dev/null"):
114
+ # Allowlist the destinations, do not denylist the disabling ones: hooks are
115
+ # disabled just as completely by any directory that happens to contain none
116
+ # (`-c core.hooksPath=/tmp/empty`), so the set that DISABLES hooks is
117
+ # unbounded while the set that legitimately relocates them is tiny. Matched
118
+ # case-insensitively because git config names are.
119
+ lowered = token.lower()
120
+ if lowered.startswith("core.hookspath="):
121
+ if not is_permitted_hooks_path(token.split("=", 1)[1]):
122
+ sys.exit(1)
123
+ if lowered == "core.hookspath" and i + 1 < len(normalized_tokens):
124
+ if not is_permitted_hooks_path(normalized_tokens[i + 1]):
125
+ sys.exit(1)
126
+ # `--config-env=core.hooksPath=SOMEVAR` reads the path out of the named env
127
+ # var, so it is not in the command at all and cannot be allowlisted.
128
+ if lowered.startswith("--config-env="):
129
+ spec = token.split("=", 1)[1]
130
+ if spec.split("=", 1)[0].strip().lower() == "core.hookspath":
131
+ sys.exit(1)
132
+ # git also accepts `--config-env <name>=<envvar>` as two tokens. Guarding
133
+ # only the `=` spelling let the trailing `core.hooksPath=.husky` fall
134
+ # through to the allowlist above, which reads `.husky` as a path — but here
135
+ # it names an ENVIRONMENT VARIABLE, which can hold /dev/null. Checked at the
136
+ # `--config-env` token, which the loop reaches first.
137
+ if lowered == "--config-env" and i + 1 < len(normalized_tokens):
138
+ spec = normalized_tokens[i + 1]
139
+ if spec.split("=", 1)[0].strip().strip("'\"").lower() == "core.hookspath":
96
140
  sys.exit(1)
97
- if token == "core.hooksPath" and i + 1 < len(normalized_tokens) and normalized_tokens[i + 1] in ("", "/dev/null"):
141
+ # `GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=core.hooksPath
142
+ # GIT_CONFIG_VALUE_0=/dev/null git ...` sets the same command-scope config
143
+ # via env-var-style assignments. The index is arbitrary below
144
+ # GIT_CONFIG_COUNT, so it is matched as `\d+` rather than pinned to 0.
145
+ key_match = re.match(r"git_config_key_\d+=(.*)$", lowered, re.DOTALL)
146
+ if key_match and key_match.group(1).strip().strip("'\"") == "core.hookspath":
98
147
  sys.exit(1)
99
148
 
100
149
  sys.exit(0)
@@ -0,0 +1,68 @@
1
+ /** Directory-relative location of the receipt, for messages and gitignores. */
2
+ export declare const APPLY_RECEIPT_DISPLAY_PATH = ".lisa/apply-receipt.json";
3
+ /**
4
+ * Receipt schema version. Bump only alongside a reader change — an unknown
5
+ * version is treated as no receipt at all rather than being misread.
6
+ */
7
+ export declare const APPLY_RECEIPT_SCHEMA_VERSION = 1;
8
+ /**
9
+ * How complete the recorded apply was.
10
+ *
11
+ * `postinstall-safe` is the `--skip-git-check` path a package manager runs. It
12
+ * deliberately skips every agent emit (Codex, Claude, agy, Copilot, OpenCode)
13
+ * and the Sonar integration, because those rewrite host-owned files that must
14
+ * not change under an install. That is the right behaviour and the wrong
15
+ * silence: it means no `bun install` at any version can migrate `.codex/config.toml`
16
+ * — including the deprecated `codex_hooks` key — so a repo can sit on the
17
+ * newest Lisa and still be missing work only a full `lisa apply` performs.
18
+ * Recording the mode is what lets doctor say so.
19
+ *
20
+ * `unknown` covers receipts written before this field existed.
21
+ */
22
+ export type ApplyMode = "full" | "postinstall-safe" | "unknown";
23
+ /** The persisted `.lisa/apply-receipt.json` shape. */
24
+ export interface ApplyReceipt {
25
+ readonly schema_version: number;
26
+ /** Lisa version that completed the apply. */
27
+ readonly lisa_version: string;
28
+ /** ISO timestamp of that apply. */
29
+ readonly applied_at: string;
30
+ /** Harness the apply emitted artifacts for. */
31
+ readonly harness: string;
32
+ /** Whether that apply was a full one or the postinstall-safe subset. */
33
+ readonly apply_mode: ApplyMode;
34
+ }
35
+ /**
36
+ * Resolve the single path every reader and writer uses.
37
+ * @param root - Project root
38
+ * @returns Absolute path to the receipt
39
+ */
40
+ export declare function resolveApplyReceiptPath(root: string): string;
41
+ /**
42
+ * Read the receipt, returning null when it is missing, unparseable, or written
43
+ * by a schema this build does not understand.
44
+ * @param root - Project root
45
+ * @returns The receipt, or null when there is no usable one
46
+ */
47
+ export declare function readApplyReceipt(root: string): Promise<ApplyReceipt | null>;
48
+ /**
49
+ * Record that an apply completed successfully.
50
+ *
51
+ * Written atomically (temp file plus rename) so a reader never sees a partial
52
+ * document, and never throws: a receipt that could not be written must not turn
53
+ * a successful apply into a failed one. The cost of a silently missing receipt
54
+ * is one spurious doctor warning; the cost of throwing here is breaking installs.
55
+ * @param root - Project root that was applied to
56
+ * @param details - What completed
57
+ * @param details.lisaVersion - Lisa version that ran the apply
58
+ * @param details.harness - Harness the apply emitted for
59
+ * @param details.applyMode - Whether this was a full or postinstall-safe apply
60
+ * @param now - Clock, injectable for tests
61
+ * @returns True when the receipt was persisted
62
+ */
63
+ export declare function recordSuccessfulApply(root: string, details: {
64
+ readonly lisaVersion: string;
65
+ readonly harness: string;
66
+ readonly applyMode: ApplyMode;
67
+ }, now?: () => Date): Promise<boolean>;
68
+ //# sourceMappingURL=apply-receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-receipt.d.ts","sourceRoot":"","sources":["../../src/core/apply-receipt.ts"],"names":[],"mappings":"AA2BA,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAEhE,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;CAChC;AAYD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkB9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,EACD,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * The durable record that `lisa apply` actually succeeded here.
3
+ *
4
+ * The postinstall bootstrap is loud but non-fatal by design (see
5
+ * `migrations/ensure-lisa-postinstall`), and the detached reconciliation
6
+ * trampoline runs with `stdio: "ignore"` because it outlives the terminal that
7
+ * started it. Both are correct, and both mean a failed apply can leave no trace
8
+ * anyone will ever read. geminisportsai/frontend-v2 went months that way
9
+ * (CodySwannGT/lisa#2467).
10
+ *
11
+ * So success — not failure — is what gets recorded. A receipt is written only
12
+ * on a completed, non-dry-run apply, which makes absence and staleness both
13
+ * self-evident: no receipt means no apply has ever finished here, and an old
14
+ * version stamp means none has finished since that version. `lisa doctor` reads
15
+ * it (see `cli/doctor-apply-freshness`), so the failure is findable long after
16
+ * the install output has scrolled away, without anyone re-running apply by hand.
17
+ *
18
+ * The receipt is machine-local and gitignored: it describes this checkout, not
19
+ * the project. Committing it would churn on every version bump and conflict
20
+ * between developers on different Lisa versions, and a committed receipt would
21
+ * lie about a fresh clone that has never installed.
22
+ * @module core/apply-receipt
23
+ */
24
+ import { mkdir, rename, writeFile } from "node:fs/promises";
25
+ import * as path from "node:path";
26
+ import { readJsonOrNull } from "../utils/json-utils.js";
27
+ /** Directory-relative location of the receipt, for messages and gitignores. */
28
+ export const APPLY_RECEIPT_DISPLAY_PATH = ".lisa/apply-receipt.json";
29
+ /**
30
+ * Receipt schema version. Bump only alongside a reader change — an unknown
31
+ * version is treated as no receipt at all rather than being misread.
32
+ */
33
+ export const APPLY_RECEIPT_SCHEMA_VERSION = 1;
34
+ /**
35
+ * Narrow a persisted mode value, treating anything unrecognised — including a
36
+ * receipt written before the field existed — as `unknown` rather than guessing.
37
+ * @param value - Raw value from the receipt
38
+ * @returns A known apply mode
39
+ */
40
+ function toApplyMode(value) {
41
+ return value === "full" || value === "postinstall-safe" ? value : "unknown";
42
+ }
43
+ /**
44
+ * Resolve the single path every reader and writer uses.
45
+ * @param root - Project root
46
+ * @returns Absolute path to the receipt
47
+ */
48
+ export function resolveApplyReceiptPath(root) {
49
+ return path.join(root, ".lisa", "apply-receipt.json");
50
+ }
51
+ /**
52
+ * Read the receipt, returning null when it is missing, unparseable, or written
53
+ * by a schema this build does not understand.
54
+ * @param root - Project root
55
+ * @returns The receipt, or null when there is no usable one
56
+ */
57
+ export async function readApplyReceipt(root) {
58
+ const parsed = await readJsonOrNull(resolveApplyReceiptPath(root));
59
+ if (parsed?.schema_version !== APPLY_RECEIPT_SCHEMA_VERSION ||
60
+ typeof parsed.lisa_version !== "string" ||
61
+ typeof parsed.applied_at !== "string") {
62
+ return null;
63
+ }
64
+ return {
65
+ schema_version: parsed.schema_version,
66
+ lisa_version: parsed.lisa_version,
67
+ applied_at: parsed.applied_at,
68
+ harness: typeof parsed.harness === "string" ? parsed.harness : "unknown",
69
+ apply_mode: toApplyMode(parsed.apply_mode),
70
+ };
71
+ }
72
+ /**
73
+ * Record that an apply completed successfully.
74
+ *
75
+ * Written atomically (temp file plus rename) so a reader never sees a partial
76
+ * document, and never throws: a receipt that could not be written must not turn
77
+ * a successful apply into a failed one. The cost of a silently missing receipt
78
+ * is one spurious doctor warning; the cost of throwing here is breaking installs.
79
+ * @param root - Project root that was applied to
80
+ * @param details - What completed
81
+ * @param details.lisaVersion - Lisa version that ran the apply
82
+ * @param details.harness - Harness the apply emitted for
83
+ * @param details.applyMode - Whether this was a full or postinstall-safe apply
84
+ * @param now - Clock, injectable for tests
85
+ * @returns True when the receipt was persisted
86
+ */
87
+ export async function recordSuccessfulApply(root, details, now = () => new Date()) {
88
+ const receipt = {
89
+ schema_version: APPLY_RECEIPT_SCHEMA_VERSION,
90
+ lisa_version: details.lisaVersion,
91
+ applied_at: now().toISOString(),
92
+ harness: details.harness,
93
+ apply_mode: details.applyMode,
94
+ };
95
+ const receiptPath = resolveApplyReceiptPath(root);
96
+ try {
97
+ await mkdir(path.dirname(receiptPath), { recursive: true });
98
+ const tempPath = `${receiptPath}.tmp`;
99
+ await writeFile(tempPath, `${JSON.stringify(receipt, null, 2)}\n`, "utf8");
100
+ await rename(tempPath, receiptPath);
101
+ return true;
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ //# sourceMappingURL=apply-receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-receipt.js","sourceRoot":"","sources":["../../src/core/apply-receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AA+B9C;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,uBAAuB,CAAC,IAAI,CAAC,CAC9B,CAAC;IACF,IACE,MAAM,EAAE,cAAc,KAAK,4BAA4B;QACvD,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;QACvC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACxE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,OAIC,EACD,MAAkB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IAElC,MAAM,OAAO,GAAiB;QAC5B,cAAc,EAAE,4BAA4B;QAC5C,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,SAAS;KAC9B,CAAC;IACF,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,GAAG,WAAW,MAAM,CAAC;QACtC,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -32,6 +32,40 @@ export interface MergeDriverInstallDependencies {
32
32
  * @returns True when the directory is inside a git working tree
33
33
  */
34
34
  export declare function canInstallLearningsMergeDriver(projectRoot: string): Promise<boolean>;
35
+ /**
36
+ * Registration state of the driver command for one checkout.
37
+ *
38
+ * `unregistered` is the state this whole module exists to make visible: the
39
+ * `.gitattributes` mapping is committed, so every clone believes the ledger is
40
+ * union-merged, while the command that performs the union lives only in local
41
+ * git config. A clone that never ran apply is degraded, not broken — and says
42
+ * nothing about it.
43
+ */
44
+ export type MergeDriverRegistration = "registered" | "unregistered" | "not-a-repository" | "git-unavailable";
45
+ /**
46
+ * Report whether the driver command is registered for this checkout.
47
+ *
48
+ * Read-only, and deliberately scope-agnostic: registration is written to local
49
+ * config, but git resolves a merge driver from any config scope, so a global
50
+ * registration counts. Asking with `--local` would report a working driver as
51
+ * missing.
52
+ * @param projectRoot - Project directory to inspect
53
+ * @returns Closed registration state
54
+ */
55
+ export declare function probeLearningsMergeDriverRegistration(projectRoot: string): Promise<MergeDriverRegistration>;
56
+ /**
57
+ * Report whether git resolves one path's `merge` attribute to this driver.
58
+ *
59
+ * Asks git rather than parsing `.gitattributes`, because the answer depends on
60
+ * pattern precedence and on every attributes source git consults (the working
61
+ * tree file, `.git/info/attributes`, a configured `core.attributesFile`).
62
+ * Reading the root file alone would claim a mapping the repository may not
63
+ * actually have — or miss one it does.
64
+ * @param projectRoot - Project directory to inspect
65
+ * @param ledgerPath - Project-relative path to the learnings ledger
66
+ * @returns True when the path is mapped to the learnings merge driver
67
+ */
68
+ export declare function isLearningsPathMappedToDriver(projectRoot: string, ledgerPath: string): Promise<boolean>;
35
69
  /**
36
70
  * Register the union merge driver in one project's local git config.
37
71
  *
@@ -1 +1 @@
1
- {"version":3,"file":"learnings-merge-driver-install.d.ts","sourceRoot":"","sources":["../../src/core/learnings-merge-driver-install.ts"],"names":[],"mappings":"AAiCA;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAChE,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wEAAwE;AACxE,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAuFD;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,8BAAmC,GAChD,OAAO,CAAC,wBAAwB,CAAC,CAkDnC"}
1
+ {"version":3,"file":"learnings-merge-driver-install.d.ts","sourceRoot":"","sources":["../../src/core/learnings-merge-driver-install.ts"],"names":[],"mappings":"AAiCA;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAChE,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wEAAwE;AACxE,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAuFD;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAC/B,YAAY,GACZ,cAAc,GACd,kBAAkB,GAClB,iBAAiB,CAAC;AAEtB;;;;;;;;;GASG;AACH,wBAAsB,qCAAqC,CACzD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CASlC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,8BAAmC,GAChD,OAAO,CAAC,wBAAwB,CAAC,CAkDnC"}
@@ -107,6 +107,42 @@ function resolveLisaInvocation() {
107
107
  export async function canInstallLearningsMergeDriver(projectRoot) {
108
108
  return (await probeRepository(projectRoot)) === "repository";
109
109
  }
110
+ /**
111
+ * Report whether the driver command is registered for this checkout.
112
+ *
113
+ * Read-only, and deliberately scope-agnostic: registration is written to local
114
+ * config, but git resolves a merge driver from any config scope, so a global
115
+ * registration counts. Asking with `--local` would report a working driver as
116
+ * missing.
117
+ * @param projectRoot - Project directory to inspect
118
+ * @returns Closed registration state
119
+ */
120
+ export async function probeLearningsMergeDriverRegistration(projectRoot) {
121
+ const probe = await probeRepository(projectRoot);
122
+ if (probe !== "repository") {
123
+ // Both non-repository outcomes are already registration states; narrowing
124
+ // hands them through unchanged rather than restating the literals.
125
+ return probe;
126
+ }
127
+ const current = await tryGit(["config", "--get", DRIVER_KEY], projectRoot);
128
+ return current.ok && current.stdout !== "" ? "registered" : "unregistered";
129
+ }
130
+ /**
131
+ * Report whether git resolves one path's `merge` attribute to this driver.
132
+ *
133
+ * Asks git rather than parsing `.gitattributes`, because the answer depends on
134
+ * pattern precedence and on every attributes source git consults (the working
135
+ * tree file, `.git/info/attributes`, a configured `core.attributesFile`).
136
+ * Reading the root file alone would claim a mapping the repository may not
137
+ * actually have — or miss one it does.
138
+ * @param projectRoot - Project directory to inspect
139
+ * @param ledgerPath - Project-relative path to the learnings ledger
140
+ * @returns True when the path is mapped to the learnings merge driver
141
+ */
142
+ export async function isLearningsPathMappedToDriver(projectRoot, ledgerPath) {
143
+ const result = await tryGit(["check-attr", "merge", "--", ledgerPath], projectRoot);
144
+ return (result.ok && result.stdout.endsWith(`merge: ${LEARNINGS_MERGE_DRIVER_NAME}`));
145
+ }
110
146
  /**
111
147
  * Register the union merge driver in one project's local git config.
112
148
  *
@@ -1 +1 @@
1
- {"version":3,"file":"learnings-merge-driver-install.js","sourceRoot":"","sources":["../../src/core/learnings-merge-driver-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"learnings-merge-driver-install.js","sourceRoot":"","sources":["../../src/core/learnings-merge-driver-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,kCAAkC,EAClC,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,6BAA6B,CAAC;AAErC,MAAM,eAAe,GAAsB;IACzC,IAAI,EAAE,+BAA+B;CACtC,CAAC;AACF,MAAM,UAAU,GAAG,SAAS,2BAA2B,SAAS,CAAC;AACjE,MAAM,QAAQ,GAAG,SAAS,2BAA2B,OAAO,CAAC;AAC7D,MAAM,cAAc,GAAG,6BAA6B,CAAC;AASrD,MAAM,OAAO,GAAoB,kBAAkB,CAAC;AA4BpD;;;;;;;;;;GAUG;AACH,KAAK,UAAU,MAAM,CAAC,IAAuB,EAAE,GAAW;IACxD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACxD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;YAC7C,GAAG;YACH,GAAG,EAAE,eAAe;SACrB,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;YAC5D,CAAC,CAAC,KAAK,CAAC,IAAI;YACZ,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,CAAC,WAAW,EAAE,uBAAuB,CAAC,EACtC,WAAW,CACZ,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,WAAmB;IAEnB,OAAO,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC,KAAK,YAAY,CAAC;AAC/D,CAAC;AAiBD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,WAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,0EAA0E;QAC1E,mEAAmE;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;AAC7E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,WAAmB,EACnB,UAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EACzC,WAAW,CACZ,CAAC;IACF,OAAO,CACL,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,2BAA2B,EAAE,CAAC,CAC7E,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB,EACnB,eAA+C,EAAE;IAEjD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,iBAAiB,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,8BAA8B,cAAc,2DAA2D;SAChH,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,4CAA4C;SACrD,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,IAAI,qBAAqB,EAAE,CAAC;IACtE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,4CAA4C,cAAc,EAAE;SACrE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,gCAAgC,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,MAAM,CAC1B,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,EAC1C,WAAW,CACZ,CAAC;IACF,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,GAAG,2BAA2B,kCAAkC;SACzE,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,CACV,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,kCAAkC,CAAC,EACnE,WAAW,CACZ,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAC1C,WAAW,CACZ,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,sCAAsC,cAAc,EAAE;SAC/D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,kBAAkB,2BAA2B,eAAe;KACrE,CAAC;AACJ,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,CA4xEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CA49NjE,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,CAgyEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAi/NjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}