@codyswann/lisa 2.282.0 → 2.283.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 (63) hide show
  1. package/all/create-only/.lisa/DEPENDENCY_DECISIONS.md +175 -0
  2. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  3. package/dist/core/upstream-evidence-manifest.js +12 -0
  4. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  5. package/package.json +1 -1
  6. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  7. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  8. package/plugins/lisa/rules/eager/dependency-decision-records.md +32 -0
  9. package/plugins/lisa/rules/reference/dependency-decision-records.md +140 -0
  10. package/plugins/lisa-agy/plugin.json +1 -1
  11. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  13. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  14. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-copilot/rules/eager/dependency-decision-records.md +32 -0
  18. package/plugins/lisa-copilot/rules/reference/dependency-decision-records.md +140 -0
  19. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-cursor/rules/dependency-decision-records-reference.mdc +145 -0
  21. package/plugins/lisa-cursor/rules/dependency-decision-records.mdc +37 -0
  22. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-expo-agy/plugin.json +1 -1
  25. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  30. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  35. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  40. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  45. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-rails-agy/plugin.json +1 -1
  50. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  55. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  60. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/src/base/rules/eager/dependency-decision-records.md +32 -0
  63. package/plugins/src/base/rules/reference/dependency-decision-records.md +140 -0
@@ -0,0 +1,175 @@
1
+ # Dependency Decisions
2
+
3
+ <!-- lisa-dependency-decisions:v1 -->
4
+
5
+ This file is the project's record of **why we keep each material dependency**.
6
+
7
+ A *material* dependency is one whose failure, disappearance, or bad update would
8
+ break something a user can see, or would cost real time to replace. Not every
9
+ package in the lockfile belongs here — only the ones that own a capability.
10
+
11
+ You do not need to be an engineer to read this file. Every entry starts with a
12
+ plain-language explanation of what the dependency does for us, and every entry
13
+ names what evidence would catch a bad update. If an entry does not answer those
14
+ two questions in words a non-engineer understands, the entry is wrong — fix the
15
+ words, not the reader.
16
+
17
+ Lisa seeds this file once and never overwrites it. It is yours to maintain.
18
+
19
+ ## How to use this file
20
+
21
+ 1. Copy the **Entry template** below for each material dependency.
22
+ 2. Add the filled-in entry to the end of the **Records** section.
23
+ 3. Fill in every field. If you do not know the answer yet, write
24
+ `_Not yet decided_` — never leave a field blank and never guess. An
25
+ unanswered field is an honest question for the next review; a guess is a
26
+ wrong answer that nobody will re-check.
27
+ 4. Re-read an entry whenever that dependency is upgraded across a major version,
28
+ changes maintainers, or its detection evidence fails.
29
+ 5. Update `Last reviewed` every time someone actually re-reads the entry, even
30
+ if nothing else changed.
31
+
32
+ ### Entry format (stable, appendable)
33
+
34
+ Entries are deliberately uniform so they can be added by hand or appended by a
35
+ script without rewriting the rest of the file:
36
+
37
+ - Every entry is a level-3 heading (`### <name>`) followed by the nine field
38
+ bullets, always in the order shown in the **Entry template**.
39
+ - Entries live under `## Records`, which is the last section of this file, and
40
+ new entries are appended to the end. A `###` heading inside `## Records` is
41
+ always an entry and never guidance — that is what makes the section safe to
42
+ parse and append to.
43
+ - Nothing after `## Records` is guidance, so appending to the end of the file is
44
+ always safe.
45
+ - `_Not yet decided_` is the reserved marker for an unanswered field, so
46
+ unfilled entries are visibly honest rather than silently empty.
47
+
48
+ ## When to escalate
49
+
50
+ Reading an entry should end in a decision. Raise these to an owner rather than
51
+ letting them sit — each one means the project is carrying a risk nobody has
52
+ accepted on purpose:
53
+
54
+ - **Nothing would catch a bad update.** The detection-evidence field says
55
+ "nothing would catch it". We are trusting the dependency blind.
56
+ - **The review is older than the dependency.** `Last reviewed` predates the last
57
+ major upgrade of that dependency, so the record describes software we are no
58
+ longer running.
59
+ - **Nobody is behind it.** The trust basis names no maintainer, no owner, or no
60
+ release history — on our side or theirs.
61
+
62
+ An entry full of `_Not yet decided_` is not itself an escalation; it is a
63
+ to-do. The three items above are escalations because someone already looked and
64
+ the answer was bad.
65
+
66
+ ## What each field means
67
+
68
+ - **Why we keep it** — the plain-language reason, written for a non-technical
69
+ reader. Lead with the outcome it protects, not the mechanism.
70
+ - **What it is (dependency)** — the package or service name, and the version
71
+ range in use.
72
+ - **What it does for us (owned capability)** — the single capability this
73
+ dependency is responsible for. If you cannot name one capability, the
74
+ dependency is either not material or is doing too much.
75
+ - **Why we believe it's safe (trust basis)** — why we believe this dependency
76
+ will still be maintained and safe next quarter. Evidence, not vibes: who
77
+ maintains it, release cadence, security-response history, how widely it is
78
+ used, whether it is pinned.
79
+ - **What breaks if this is compromised (exposure)** — what it can reach and what
80
+ breaks if it misbehaves. Does it run at build time only, or in production?
81
+ Does it touch user data, secrets, the network, or CI credentials?
82
+ - **What it would take to replace (replacement cost)** — what it would actually
83
+ take to remove or swap it: rough effort, what would have to be rewritten, and
84
+ whether a viable alternative exists today.
85
+ - **What would catch a bad update (detection evidence)** — the specific check
86
+ that would **fail** if an update broke the owned capability. Name the test,
87
+ suite, workflow, or monitor. If the honest answer is "nothing would catch it",
88
+ write that down — it is the most valuable line in the entry. Use
89
+ `_Not yet decided_` only when nobody has looked yet, which is a different
90
+ statement from "we looked, and nothing covers this".
91
+ - **Who owns this and how often we recheck (owner / review cadence)** — who is
92
+ accountable for this entry and how often it gets re-read.
93
+ - **Last reviewed** — ISO date (`YYYY-MM-DD`) of the most recent review.
94
+
95
+ ## Entry template
96
+
97
+ Copy this block, fill it in, and append it to the end of **Records** below. Keep
98
+ the nine bullets in this order. Any field you cannot answer yet gets
99
+ `_Not yet decided_`.
100
+
101
+ ### <dependency name>
102
+
103
+ - **Why we keep it:** <plain-language reason a non-technical reader can follow>
104
+ - **What it is (dependency):** <package or service name> `<version range>`
105
+ - **What it does for us (owned capability):** <the one capability it owns>
106
+ - **Why we believe it's safe (trust basis):** <maintainer, cadence, adoption,
107
+ security history, pinning>
108
+ - **What breaks if this is compromised (exposure):** <build-time vs runtime;
109
+ data, secrets, network, CI reach>
110
+ - **What it would take to replace (replacement cost):** <effort to remove or
111
+ swap, and the alternative>
112
+ - **What would catch a bad update (detection evidence):** <the named check that
113
+ fails if an update breaks it>
114
+ - **Who owns this and how often we recheck (owner / review cadence):**
115
+ <accountable owner> / <cadence>
116
+ - **Last reviewed:** <YYYY-MM-DD>
117
+
118
+ ## Records
119
+
120
+ > **The two entries below are EXAMPLES.** They are here so you can see the shape
121
+ > of a good record — the first complete, the second still being filled in.
122
+ > Replace them with your own material dependencies, or delete them once you have
123
+ > written real entries.
124
+
125
+ ### ESLint (EXAMPLE — a complete entry)
126
+
127
+ - **Why we keep it:** It is the automatic reviewer that reads every change
128
+ before a human does and refuses the ones that break our agreed coding rules.
129
+ Without it, those rules become suggestions and the codebase drifts a little
130
+ with every change until nobody can predict how anything is written.
131
+ - **What it is (dependency):** `eslint` `^9`
132
+ - **What it does for us (owned capability):** Automated enforcement of
133
+ code-quality and style rules on every commit and every pull request.
134
+ - **Why we believe it's safe (trust basis):** Maintained by the OpenJS
135
+ Foundation with a published release cadence and a documented
136
+ security-disclosure process; used by a very large share of the JavaScript
137
+ ecosystem, so breakage is found by other people before it reaches us. The
138
+ major version is pinned, so an upgrade is a deliberate decision rather than
139
+ something that arrives on its own.
140
+ - **What breaks if this is compromised (exposure):** Build-time and CI only. It
141
+ never runs in production and never touches customer data. It does run inside
142
+ CI, so a compromised release could in principle read CI environment variables
143
+ — which is why the version is pinned and upgrades are reviewed.
144
+ - **What it would take to replace (replacement cost):** High. Every rule
145
+ configuration and every custom rule would have to be re-expressed in another
146
+ linter, and the pre-commit and CI wiring rebuilt. Alternatives exist (for
147
+ example Biome or oxlint) but none is a drop-in match for the current rule set
148
+ today.
149
+ - **What would catch a bad update (detection evidence):** The `lint` check in
150
+ CI. Warning sign: if lint passes a change we know breaks a rule, the checking
151
+ has silently stopped working — the rule tests exist to catch exactly that.
152
+ - **Who owns this and how often we recheck (owner / review cadence):** Platform
153
+ / engineering owner — reviewed each major version upgrade, and at least once
154
+ every 6 months.
155
+ - **Last reviewed:** _Not yet decided_ (example entry — never reviewed)
156
+
157
+ ### sharp (EXAMPLE — an entry still being filled in)
158
+
159
+ - **Why we keep it:** It resizes and re-encodes every image users upload, so
160
+ photos load quickly instead of being served at full camera resolution.
161
+ - **What it is (dependency):** `sharp` `^0.33`
162
+ - **What it does for us (owned capability):** Server-side image resizing and
163
+ format conversion on upload.
164
+ - **Why we believe it's safe (trust basis):** _Not yet decided_ — nobody has
165
+ checked who maintains it or how quickly security issues get fixed.
166
+ - **What breaks if this is compromised (exposure):** Runs in production and
167
+ processes files uploaded by users. It ships native code, so its reach is
168
+ wider than a pure-JavaScript package.
169
+ - **What it would take to replace (replacement cost):** _Not yet decided_
170
+ - **What would catch a bad update (detection evidence):** _Not yet decided_ —
171
+ this is the gap to close first, because nothing currently proves an upgrade
172
+ did not silently corrupt uploaded images.
173
+ - **Who owns this and how often we recheck (owner / review cadence):**
174
+ _Not yet decided_
175
+ - **Last reviewed:** _Not yet decided_
@@ -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,CAwgEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAupMjE,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,CA4gEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAiqMjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -310,6 +310,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
310
310
  "plugins/src/base/rules/eager/coding-philosophy.md": "cf2c52032e0368d81f17f002fed5c957ab350d01fc4a43f66b5f366516bac54a",
311
311
  "plugins/src/base/rules/eager/config-resolution.md": "2689c1f47903a5f6c84677fbfd2f1f148096faf122b7498b21d3b0f2345c6c87",
312
312
  "plugins/src/base/rules/eager/convergent-review.md": "ba4ba53863ef99be353c07c01195fa4ae2923ef2b2a5ad4427072802c260d208",
313
+ "plugins/src/base/rules/eager/dependency-decision-records.md": "e22888f107906992e863fca50f26c2c4b124da7132535cacfac71e4f3085728f",
313
314
  "plugins/src/base/rules/eager/documentation-source-paths.md": "3a7c2a6264654a3cc44dd326441ba211a39c1c267033cc189c1c635adb84b52b",
314
315
  "plugins/src/base/rules/eager/empirical-inquiry.md": "60d77a67cc0d3b6a0aad0ab8fe6de5dff0127b2a6c63fa46b021b7a711eb07d6",
315
316
  "plugins/src/base/rules/eager/factory-model.md": "dee39b4276926ee27a2614bf26b985fd33bb3d115313fa6e2893de12da13ed7c",
@@ -339,6 +340,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
339
340
  "plugins/src/base/rules/reference/coding-philosophy.md": "fed8381f16a5d6793a49d84d5813d62125808cb2f4981a558b119cf63e2586d9",
340
341
  "plugins/src/base/rules/reference/config-resolution.md": "071b2c91f3b661ee493ea6f37d78f0fdea8004b4e4e7b5e94dcf232df7eceda7",
341
342
  "plugins/src/base/rules/reference/convergent-review.md": "788a9d4dc2af7a928c3ccbb4d53a92856bb3544941ce512cfe38068d6b35850d",
343
+ "plugins/src/base/rules/reference/dependency-decision-records.md": "84f9fb8fa0a606307e828ec355ccbf2258beeeb88795dd113abe9bb2c37db39f",
342
344
  "plugins/src/base/rules/reference/documentation-source-paths.md": "555155889c9cf279865b9d8fc554bdd461c96a3ec76a5001dfeb361a71056999",
343
345
  "plugins/src/base/rules/reference/empirical-inquiry.md": "85f4552aa4c561677de40fd01bc6cccf5dbcf13865647db9df819d11f3cc3389",
344
346
  "plugins/src/base/rules/reference/factory-model.md": "b28a2ea4df7c33390111667a2807d9003cf8c9a14829f6fb0dbc929b05bfed3a",
@@ -2262,6 +2264,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
2262
2264
  "plugins/lisa-copilot/rules/eager/coding-philosophy.md": true,
2263
2265
  "plugins/lisa-copilot/rules/eager/config-resolution.md": true,
2264
2266
  "plugins/lisa-copilot/rules/eager/convergent-review.md": true,
2267
+ "plugins/lisa-copilot/rules/eager/dependency-decision-records.md": true,
2265
2268
  "plugins/lisa-copilot/rules/eager/documentation-source-paths.md": true,
2266
2269
  "plugins/lisa-copilot/rules/eager/empirical-inquiry.md": true,
2267
2270
  "plugins/lisa-copilot/rules/eager/factory-model.md": true,
@@ -2291,6 +2294,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
2291
2294
  "plugins/lisa-copilot/rules/reference/coding-philosophy.md": true,
2292
2295
  "plugins/lisa-copilot/rules/reference/config-resolution.md": true,
2293
2296
  "plugins/lisa-copilot/rules/reference/convergent-review.md": true,
2297
+ "plugins/lisa-copilot/rules/reference/dependency-decision-records.md": true,
2294
2298
  "plugins/lisa-copilot/rules/reference/documentation-source-paths.md": true,
2295
2299
  "plugins/lisa-copilot/rules/reference/empirical-inquiry.md": true,
2296
2300
  "plugins/lisa-copilot/rules/reference/factory-model.md": true,
@@ -2626,6 +2630,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
2626
2630
  "plugins/lisa-cursor/rules/config-resolution.mdc": true,
2627
2631
  "plugins/lisa-cursor/rules/convergent-review-reference.mdc": true,
2628
2632
  "plugins/lisa-cursor/rules/convergent-review.mdc": true,
2633
+ "plugins/lisa-cursor/rules/dependency-decision-records-reference.mdc": true,
2634
+ "plugins/lisa-cursor/rules/dependency-decision-records.mdc": true,
2629
2635
  "plugins/lisa-cursor/rules/documentation-source-paths-reference.mdc": true,
2630
2636
  "plugins/lisa-cursor/rules/documentation-source-paths.mdc": true,
2631
2637
  "plugins/lisa-cursor/rules/empirical-inquiry-reference.mdc": true,
@@ -4999,6 +5005,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
4999
5005
  "plugins/lisa/rules/eager/coding-philosophy.md": true,
5000
5006
  "plugins/lisa/rules/eager/config-resolution.md": true,
5001
5007
  "plugins/lisa/rules/eager/convergent-review.md": true,
5008
+ "plugins/lisa/rules/eager/dependency-decision-records.md": true,
5002
5009
  "plugins/lisa/rules/eager/documentation-source-paths.md": true,
5003
5010
  "plugins/lisa/rules/eager/empirical-inquiry.md": true,
5004
5011
  "plugins/lisa/rules/eager/factory-model.md": true,
@@ -5028,6 +5035,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
5028
5035
  "plugins/lisa/rules/reference/coding-philosophy.md": true,
5029
5036
  "plugins/lisa/rules/reference/config-resolution.md": true,
5030
5037
  "plugins/lisa/rules/reference/convergent-review.md": true,
5038
+ "plugins/lisa/rules/reference/dependency-decision-records.md": true,
5031
5039
  "plugins/lisa/rules/reference/documentation-source-paths.md": true,
5032
5040
  "plugins/lisa/rules/reference/empirical-inquiry.md": true,
5033
5041
  "plugins/lisa/rules/reference/factory-model.md": true,
@@ -5525,6 +5533,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
5525
5533
  "plugins/src/base/rules/eager/coding-philosophy.md": true,
5526
5534
  "plugins/src/base/rules/eager/config-resolution.md": true,
5527
5535
  "plugins/src/base/rules/eager/convergent-review.md": true,
5536
+ "plugins/src/base/rules/eager/dependency-decision-records.md": true,
5528
5537
  "plugins/src/base/rules/eager/documentation-source-paths.md": true,
5529
5538
  "plugins/src/base/rules/eager/empirical-inquiry.md": true,
5530
5539
  "plugins/src/base/rules/eager/factory-model.md": true,
@@ -5554,6 +5563,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
5554
5563
  "plugins/src/base/rules/reference/coding-philosophy.md": true,
5555
5564
  "plugins/src/base/rules/reference/config-resolution.md": true,
5556
5565
  "plugins/src/base/rules/reference/convergent-review.md": true,
5566
+ "plugins/src/base/rules/reference/dependency-decision-records.md": true,
5557
5567
  "plugins/src/base/rules/reference/documentation-source-paths.md": true,
5558
5568
  "plugins/src/base/rules/reference/empirical-inquiry.md": true,
5559
5569
  "plugins/src/base/rules/reference/factory-model.md": true,
@@ -6869,6 +6879,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6869
6879
  "tests/unit/strategies/copy-overwrite.test.ts": true,
6870
6880
  "tests/unit/strategies/create-only.test.ts": true,
6871
6881
  "tests/unit/strategies/debrief-reroute-contract.test.ts": true,
6882
+ "tests/unit/strategies/dependency-decision-records-rule-pair.test.ts": true,
6872
6883
  "tests/unit/strategies/distributed-content-round2-contract.test.ts": true,
6873
6884
  "tests/unit/strategies/doctor-automation-readiness.test.ts": true,
6874
6885
  "tests/unit/strategies/doctor-config-readiness.test.ts": true,
@@ -6992,6 +7003,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6992
7003
  "tests/unit/sync/config-sync.test.ts": true,
6993
7004
  "tests/unit/sync/health-schedule.test.ts": true,
6994
7005
  "tests/unit/sync/legacy-monitor-thresholds.test.ts": true,
7006
+ "tests/unit/templates/dependency-decisions-template.test.ts": true,
6995
7007
  "tests/unit/templates/project-learnings-template.test.ts": true,
6996
7008
  "tests/unit/templates/stack-tsconfig-shadowing.test.ts": true,
6997
7009
  "tests/unit/transaction/backup.test.ts": true,