loadout-ai 0.2.3 → 0.4.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.
- package/CHANGELOG.md +71 -0
- package/MASTER_PLAN.md +141 -33
- package/README.md +160 -255
- package/dashboard/app.js +4 -4
- package/dashboard/index.html +4 -4
- package/dist/src/cli.js +189 -32
- package/dist/src/core/active-set.js +37 -2
- package/dist/src/core/adapters.js +10 -0
- package/dist/src/core/adopt.js +165 -32
- package/dist/src/core/agent-health-score.js +2 -2
- package/dist/src/core/catalog-coverage.js +2 -1
- package/dist/src/core/catalog-install.js +8 -1
- package/dist/src/core/catalog-release.js +2 -1
- package/dist/src/core/cli-guide.js +101 -0
- package/dist/src/core/completion.js +3 -0
- package/dist/src/core/conformance.js +74 -0
- package/dist/src/core/install.js +36 -3
- package/dist/src/core/mcp-recipes.js +21 -0
- package/dist/src/core/profile-state.js +101 -0
- package/dist/src/core/profiles.js +9 -4
- package/dist/src/core/ranking.js +1 -1
- package/dist/src/core/readme-claims.js +10 -0
- package/dist/src/core/readme-facts.js +40 -0
- package/dist/src/core/recommend.js +9 -3
- package/dist/src/core/remove.js +6 -7
- package/dist/src/core/runtime-tools.js +10 -2
- package/dist/src/core/scheduler.js +4 -3
- package/dist/src/core/snapshot.js +58 -13
- package/dist/src/core/state.js +13 -3
- package/dist/src/core/transaction.js +2 -1
- package/dist/src/core/uninstall.js +133 -0
- package/dist/src/core/update.js +87 -58
- package/dist/src/dashboard.js +5 -2
- package/dist/src/shared/schemas.js +69 -0
- package/docs/FEATURE_TEST_MATRIX.md +16 -0
- package/docs/README_RESEARCH.md +36 -0
- package/docs/RELEASE_REVIEW.md +31 -5
- package/docs/REPOSITORY_STABILIZATION.md +190 -0
- package/docs/TESTING.md +75 -2
- package/docs/USER_TEST_GUIDE.md +202 -0
- package/docs/assets/loadout-hero.svg +259 -0
- package/docs/assets/loadout-mark.svg +54 -0
- package/docs/evidence/live-checks-2026-07-19.json +22 -0
- package/docs/evidence/live-checks.schema.json +28 -0
- package/docs/evidence/readme-claims.json +286 -0
- package/docs/superpowers/plans/2026-07-19-relatable-readme-hero.md +283 -0
- package/docs/superpowers/specs/2026-07-19-relatable-readme-hero-design.md +80 -0
- package/package.json +8 -4
- package/SIMPLE_PLAN.md +0 -44
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 960 300"
|
|
4
|
+
role="img"
|
|
5
|
+
aria-labelledby="loadout-hero-title loadout-hero-description"
|
|
6
|
+
>
|
|
7
|
+
<title id="loadout-hero-title">Choose an intentional agent loadout</title>
|
|
8
|
+
<desc id="loadout-hero-description">
|
|
9
|
+
A developer moves an extension from scattered configuration tiles into
|
|
10
|
+
organized managed equipment slots.
|
|
11
|
+
</desc>
|
|
12
|
+
<style>
|
|
13
|
+
svg {
|
|
14
|
+
color: #1f2328;
|
|
15
|
+
}
|
|
16
|
+
.quiet {
|
|
17
|
+
opacity: 0.48;
|
|
18
|
+
}
|
|
19
|
+
.soft {
|
|
20
|
+
opacity: 0.09;
|
|
21
|
+
}
|
|
22
|
+
.mid {
|
|
23
|
+
opacity: 0.72;
|
|
24
|
+
}
|
|
25
|
+
.line {
|
|
26
|
+
fill: none;
|
|
27
|
+
stroke: currentColor;
|
|
28
|
+
stroke-linecap: round;
|
|
29
|
+
stroke-linejoin: round;
|
|
30
|
+
}
|
|
31
|
+
@media (prefers-color-scheme: dark) {
|
|
32
|
+
svg {
|
|
33
|
+
color: #f0f6fc;
|
|
34
|
+
}
|
|
35
|
+
.soft {
|
|
36
|
+
opacity: 0.13;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
</style>
|
|
40
|
+
|
|
41
|
+
<!-- Loose, unmanaged configuration -->
|
|
42
|
+
<g class="line quiet" stroke-width="2">
|
|
43
|
+
<path d="M38 80C96 63 126 124 188 104S258 78 286 119" />
|
|
44
|
+
<path d="M47 221C96 183 128 235 179 202S247 174 286 204" />
|
|
45
|
+
<path d="M78 47C91 96 62 141 105 176S175 199 213 239" />
|
|
46
|
+
<path d="M205 53C177 91 219 133 187 158S122 167 88 211" />
|
|
47
|
+
</g>
|
|
48
|
+
<g class="line" stroke-width="2.5">
|
|
49
|
+
<g transform="rotate(-8 91 100)">
|
|
50
|
+
<rect
|
|
51
|
+
class="soft"
|
|
52
|
+
x="43"
|
|
53
|
+
y="72"
|
|
54
|
+
width="96"
|
|
55
|
+
height="56"
|
|
56
|
+
rx="10"
|
|
57
|
+
fill="currentColor"
|
|
58
|
+
/>
|
|
59
|
+
<rect x="43" y="72" width="96" height="56" rx="10" />
|
|
60
|
+
<path d="M61 99l9-8m-9 8l9 8m18-16h29" />
|
|
61
|
+
</g>
|
|
62
|
+
<g transform="rotate(7 197 83)">
|
|
63
|
+
<rect
|
|
64
|
+
class="soft"
|
|
65
|
+
x="153"
|
|
66
|
+
y="57"
|
|
67
|
+
width="88"
|
|
68
|
+
height="52"
|
|
69
|
+
rx="10"
|
|
70
|
+
fill="currentColor"
|
|
71
|
+
/>
|
|
72
|
+
<rect x="153" y="57" width="88" height="52" rx="10" />
|
|
73
|
+
<path d="M174 74v18m0-9h15m14-9v18m-7-9h14" />
|
|
74
|
+
</g>
|
|
75
|
+
<g transform="rotate(-5 113 190)">
|
|
76
|
+
<rect
|
|
77
|
+
class="soft"
|
|
78
|
+
x="64"
|
|
79
|
+
y="161"
|
|
80
|
+
width="98"
|
|
81
|
+
height="58"
|
|
82
|
+
rx="10"
|
|
83
|
+
fill="currentColor"
|
|
84
|
+
/>
|
|
85
|
+
<rect x="64" y="161" width="98" height="58" rx="10" />
|
|
86
|
+
<path d="M86 179l-8 11 8 11m53-22l8 11-8 11m-34 4l15-30" />
|
|
87
|
+
</g>
|
|
88
|
+
<g transform="rotate(9 213 193)">
|
|
89
|
+
<rect
|
|
90
|
+
class="soft"
|
|
91
|
+
x="170"
|
|
92
|
+
y="166"
|
|
93
|
+
width="86"
|
|
94
|
+
height="54"
|
|
95
|
+
rx="10"
|
|
96
|
+
fill="currentColor"
|
|
97
|
+
/>
|
|
98
|
+
<rect x="170" y="166" width="86" height="54" rx="10" />
|
|
99
|
+
<circle cx="190" cy="193" r="5" />
|
|
100
|
+
<circle cx="233" cy="181" r="5" />
|
|
101
|
+
<circle cx="233" cy="205" r="5" />
|
|
102
|
+
<path d="M195 191l33-9m-33 13l33 9" />
|
|
103
|
+
</g>
|
|
104
|
+
</g>
|
|
105
|
+
<g class="line" stroke-width="2.5">
|
|
106
|
+
<path d="M48 232v24h12" />
|
|
107
|
+
<path d="M64 232h12v24H64zM80 232h12v24H80z" />
|
|
108
|
+
<path d="M108 232H96v12h12v12H96" />
|
|
109
|
+
<path d="M124 232h-12v24h12m-12-12h10" />
|
|
110
|
+
</g>
|
|
111
|
+
|
|
112
|
+
<!-- Developer selecting one extension tile -->
|
|
113
|
+
<g class="line" stroke-width="3">
|
|
114
|
+
<circle class="soft" cx="333" cy="91" r="28" fill="currentColor" />
|
|
115
|
+
<circle cx="333" cy="91" r="28" />
|
|
116
|
+
<path d="M310 87c10-14 34-18 46-2M319 99c8 7 18 7 27 0" />
|
|
117
|
+
<path d="M331 119v61m-1-41l-40 3-28-17" />
|
|
118
|
+
<path d="M331 138l33-9 29 15" />
|
|
119
|
+
<path d="M315 180l-16 38m48-38l17 38" />
|
|
120
|
+
<path d="M282 125l-13 3 7 10" />
|
|
121
|
+
<rect
|
|
122
|
+
class="soft"
|
|
123
|
+
x="253"
|
|
124
|
+
y="111"
|
|
125
|
+
width="43"
|
|
126
|
+
height="31"
|
|
127
|
+
rx="7"
|
|
128
|
+
fill="currentColor"
|
|
129
|
+
/>
|
|
130
|
+
<rect x="253" y="111" width="43" height="31" rx="7" />
|
|
131
|
+
<path d="M265 127h19m-9-8v16" />
|
|
132
|
+
</g>
|
|
133
|
+
<g class="line mid" stroke-width="3">
|
|
134
|
+
<path d="M283 226h119l18-47h-97" />
|
|
135
|
+
<path d="M298 227v22m89-22v22" />
|
|
136
|
+
<path d="M351 165h48" />
|
|
137
|
+
</g>
|
|
138
|
+
|
|
139
|
+
<!-- Management boundary and placement cue -->
|
|
140
|
+
<path
|
|
141
|
+
class="line quiet"
|
|
142
|
+
d="M456 39v222"
|
|
143
|
+
stroke-width="2"
|
|
144
|
+
stroke-dasharray="7 10"
|
|
145
|
+
/>
|
|
146
|
+
<g class="line" stroke-width="3">
|
|
147
|
+
<path d="M403 125c30-18 48-23 72-13 14 6 22 18 31 28" />
|
|
148
|
+
<path d="M493 137l15 5-3-15" />
|
|
149
|
+
</g>
|
|
150
|
+
<g class="line" stroke-width="2.5">
|
|
151
|
+
<path d="M478 48V26l6 12 6-12v22" />
|
|
152
|
+
<path d="M494 48l6-22 6 22m-9-8h6" />
|
|
153
|
+
<path d="M510 48V26l12 22V26" />
|
|
154
|
+
<path d="M526 48l6-22 6 22m-9-8h6" />
|
|
155
|
+
<path d="M554 33v-7h-12v22h12V38h-6" />
|
|
156
|
+
<path d="M570 26h-12v22h12m-12-11h10" />
|
|
157
|
+
<path d="M574 26v22h5c9 0 9-22 0-22z" />
|
|
158
|
+
</g>
|
|
159
|
+
|
|
160
|
+
<!-- Calm, organized loadout rail -->
|
|
161
|
+
<rect
|
|
162
|
+
class="soft"
|
|
163
|
+
x="486"
|
|
164
|
+
y="75"
|
|
165
|
+
width="438"
|
|
166
|
+
height="154"
|
|
167
|
+
rx="25"
|
|
168
|
+
fill="currentColor"
|
|
169
|
+
/>
|
|
170
|
+
<rect
|
|
171
|
+
class="line mid"
|
|
172
|
+
x="486"
|
|
173
|
+
y="75"
|
|
174
|
+
width="438"
|
|
175
|
+
height="154"
|
|
176
|
+
rx="25"
|
|
177
|
+
stroke-width="2.5"
|
|
178
|
+
/>
|
|
179
|
+
<path class="line quiet" d="M508 244h394" stroke-width="2.5" />
|
|
180
|
+
<g class="line" stroke-width="3">
|
|
181
|
+
<g>
|
|
182
|
+
<rect
|
|
183
|
+
class="soft"
|
|
184
|
+
x="510"
|
|
185
|
+
y="103"
|
|
186
|
+
width="68"
|
|
187
|
+
height="96"
|
|
188
|
+
rx="13"
|
|
189
|
+
fill="currentColor"
|
|
190
|
+
/>
|
|
191
|
+
<rect x="510" y="103" width="68" height="96" rx="13" />
|
|
192
|
+
<path d="M530 141l10 10-10 10m18 0h12" />
|
|
193
|
+
</g>
|
|
194
|
+
<g>
|
|
195
|
+
<rect
|
|
196
|
+
class="soft"
|
|
197
|
+
x="591"
|
|
198
|
+
y="103"
|
|
199
|
+
width="68"
|
|
200
|
+
height="96"
|
|
201
|
+
rx="13"
|
|
202
|
+
fill="currentColor"
|
|
203
|
+
/>
|
|
204
|
+
<rect x="591" y="103" width="68" height="96" rx="13" />
|
|
205
|
+
<path
|
|
206
|
+
d="M620 132v12m11-12v12m-17 0h23v9c0 8-5 14-12 14s-12-6-12-14v-9m12 23v7"
|
|
207
|
+
/>
|
|
208
|
+
</g>
|
|
209
|
+
<g>
|
|
210
|
+
<rect
|
|
211
|
+
class="soft"
|
|
212
|
+
x="672"
|
|
213
|
+
y="103"
|
|
214
|
+
width="68"
|
|
215
|
+
height="96"
|
|
216
|
+
rx="13"
|
|
217
|
+
fill="currentColor"
|
|
218
|
+
/>
|
|
219
|
+
<rect x="672" y="103" width="68" height="96" rx="13" />
|
|
220
|
+
<circle cx="693" cy="151" r="6" />
|
|
221
|
+
<circle cx="720" cy="133" r="6" />
|
|
222
|
+
<circle cx="720" cy="169" r="6" />
|
|
223
|
+
<path d="M698 147l17-11m-17 19l17 11" />
|
|
224
|
+
</g>
|
|
225
|
+
<g>
|
|
226
|
+
<rect
|
|
227
|
+
class="soft"
|
|
228
|
+
x="753"
|
|
229
|
+
y="103"
|
|
230
|
+
width="68"
|
|
231
|
+
height="96"
|
|
232
|
+
rx="13"
|
|
233
|
+
fill="currentColor"
|
|
234
|
+
/>
|
|
235
|
+
<rect x="753" y="103" width="68" height="96" rx="13" />
|
|
236
|
+
<path
|
|
237
|
+
d="M785 128c-8 0-9 5-9 12v4c0 5-3 7-8 7 5 0 8 2 8 7v4c0 7 1 12 9 12m4-46c8 0 9 5 9 12v4c0 5 3 7 8 7-5 0-8 2-8 7v4c0 7-1 12-9 12"
|
|
238
|
+
/>
|
|
239
|
+
</g>
|
|
240
|
+
<g class="quiet">
|
|
241
|
+
<rect
|
|
242
|
+
x="834"
|
|
243
|
+
y="103"
|
|
244
|
+
width="68"
|
|
245
|
+
height="96"
|
|
246
|
+
rx="13"
|
|
247
|
+
stroke-dasharray="7 7"
|
|
248
|
+
/>
|
|
249
|
+
<path d="M855 151h26" />
|
|
250
|
+
</g>
|
|
251
|
+
</g>
|
|
252
|
+
<g fill="currentColor">
|
|
253
|
+
<circle cx="544" cy="245" r="4" />
|
|
254
|
+
<circle cx="625" cy="245" r="4" />
|
|
255
|
+
<circle cx="706" cy="245" r="4" />
|
|
256
|
+
<circle cx="787" cy="245" r="4" />
|
|
257
|
+
<circle class="quiet" cx="868" cy="245" r="4" />
|
|
258
|
+
</g>
|
|
259
|
+
</svg>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 600 168"
|
|
4
|
+
role="img"
|
|
5
|
+
aria-labelledby="loadout-mark-title loadout-mark-description"
|
|
6
|
+
>
|
|
7
|
+
<title id="loadout-mark-title">Loadout</title>
|
|
8
|
+
<desc id="loadout-mark-description">
|
|
9
|
+
Five outlined loadout slots with a terminal prompt in the selected center
|
|
10
|
+
slot.
|
|
11
|
+
</desc>
|
|
12
|
+
<style>
|
|
13
|
+
:root {
|
|
14
|
+
color: #24292f;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@media (prefers-color-scheme: dark) {
|
|
18
|
+
:root {
|
|
19
|
+
color: #f0f6fc;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
23
|
+
|
|
24
|
+
<g
|
|
25
|
+
fill="none"
|
|
26
|
+
stroke="currentColor"
|
|
27
|
+
stroke-linecap="round"
|
|
28
|
+
stroke-linejoin="round"
|
|
29
|
+
>
|
|
30
|
+
<path
|
|
31
|
+
d="M69 44h64a12 12 0 0 1 12 12v64a12 12 0 0 1-12 12H69a12 12 0 0 1-12-12V56a12 12 0 0 1 12-12Z"
|
|
32
|
+
stroke-width="6"
|
|
33
|
+
/>
|
|
34
|
+
<path
|
|
35
|
+
d="M170 44h64a12 12 0 0 1 12 12v64a12 12 0 0 1-12 12h-64a12 12 0 0 1-12-12V56a12 12 0 0 1 12-12Z"
|
|
36
|
+
stroke-width="6"
|
|
37
|
+
/>
|
|
38
|
+
<path
|
|
39
|
+
d="M271 32h58a18 18 0 0 1 18 18v76a18 18 0 0 1-18 18h-58a18 18 0 0 1-18-18V50a18 18 0 0 1 18-18Z"
|
|
40
|
+
stroke-width="8"
|
|
41
|
+
/>
|
|
42
|
+
<path
|
|
43
|
+
d="M366 44h64a12 12 0 0 1 12 12v64a12 12 0 0 1-12 12h-64a12 12 0 0 1-12-12V56a12 12 0 0 1 12-12Z"
|
|
44
|
+
stroke-width="6"
|
|
45
|
+
/>
|
|
46
|
+
<path
|
|
47
|
+
d="M467 44h64a12 12 0 0 1 12 12v64a12 12 0 0 1-12 12h-64a12 12 0 0 1-12-12V56a12 12 0 0 1 12-12Z"
|
|
48
|
+
stroke-width="6"
|
|
49
|
+
/>
|
|
50
|
+
|
|
51
|
+
<path d="m276 75 18 13-18 13" stroke-width="8" />
|
|
52
|
+
<path d="M302 103h22" stroke-width="8" />
|
|
53
|
+
</g>
|
|
54
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"generatedAt": "2026-07-19T13:45:14.945Z",
|
|
4
|
+
"repositoryCommit": "8f8eccdd20272ebb88d0339087fc9cd3828e65c9",
|
|
5
|
+
"checks": [
|
|
6
|
+
{
|
|
7
|
+
"id": "npm",
|
|
8
|
+
"status": "failed",
|
|
9
|
+
"detail": "npm registry returned HTTP 404 for loadout-ai@0.3.2"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "stable-install",
|
|
13
|
+
"status": "verified",
|
|
14
|
+
"detail": "isolated Stable flow installed 4 pinned packages and completed state and filesystem rollback assertions"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "github",
|
|
18
|
+
"status": "failed",
|
|
19
|
+
"detail": "GitHub branch protection is not verified for main (HTTP 404)"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/VirajMishra1/loadout/docs/evidence/live-checks.schema.json",
|
|
4
|
+
"title": "Loadout bounded live-check report",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "generatedAt", "repositoryCommit", "checks"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 1 },
|
|
10
|
+
"generatedAt": { "type": "string", "format": "date-time" },
|
|
11
|
+
"repositoryCommit": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
|
|
12
|
+
"checks": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"uniqueItems": true,
|
|
15
|
+
"$comment": "The JSON Schema rejects byte-equivalent duplicate result objects. scripts/check-live-evidence.mjs additionally enforces unique IDs and exact completeness for the checks requested at runtime; cross-item ID uniqueness and a caller-selected exact ID set are parser-only invariants.",
|
|
16
|
+
"items": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"required": ["id", "status", "detail"],
|
|
20
|
+
"properties": {
|
|
21
|
+
"id": { "enum": ["npm", "stable-install", "github"] },
|
|
22
|
+
"status": { "enum": ["verified", "failed", "not-verified"] },
|
|
23
|
+
"detail": { "type": "string", "minLength": 1 }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"claims": [
|
|
4
|
+
{
|
|
5
|
+
"id": "product.scope",
|
|
6
|
+
"section": "Introduction",
|
|
7
|
+
"summary": "Loadout provides a local workflow for discovery, comparison, installation, updates, and rollback.",
|
|
8
|
+
"evidenceClass": "integration-verified",
|
|
9
|
+
"status": "bounded",
|
|
10
|
+
"evidence": [
|
|
11
|
+
"README.md",
|
|
12
|
+
"tests/upgrade.test.ts",
|
|
13
|
+
"tests/snapshot.test.ts"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "catalog.coverage",
|
|
18
|
+
"section": "Catalog, discovery, and recommendations",
|
|
19
|
+
"summary": "The bundled catalog exposes generated coverage facts from pinned public records.",
|
|
20
|
+
"evidenceClass": "structural",
|
|
21
|
+
"status": "proven",
|
|
22
|
+
"evidence": [
|
|
23
|
+
"catalog/packages.json",
|
|
24
|
+
"src/core/catalog-coverage.ts",
|
|
25
|
+
"tests/catalog-coverage.test.ts"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "selection.stable",
|
|
30
|
+
"section": "Choose a profile",
|
|
31
|
+
"summary": "Stable selection is defined by the checked-in policy and allowlist.",
|
|
32
|
+
"evidenceClass": "policy-selected",
|
|
33
|
+
"status": "proven",
|
|
34
|
+
"evidence": ["src/core/profiles.ts", "tests/profiles.test.ts"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "selection.power",
|
|
38
|
+
"section": "Choose a profile",
|
|
39
|
+
"summary": "Power selection is defined by the checked-in policy and allowlist.",
|
|
40
|
+
"evidenceClass": "policy-selected",
|
|
41
|
+
"status": "proven",
|
|
42
|
+
"evidence": ["src/core/profiles.ts", "tests/profiles.test.ts"]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "selection.maximum",
|
|
46
|
+
"section": "Choose a profile",
|
|
47
|
+
"summary": "Maximum selection keeps optional components in Loadout's managed library rather than activating every component.",
|
|
48
|
+
"evidenceClass": "integration-verified",
|
|
49
|
+
"status": "bounded",
|
|
50
|
+
"evidence": ["src/core/active-set.ts", "tests/active-set.test.ts"]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "agents.support",
|
|
54
|
+
"section": "Adapter compatibility",
|
|
55
|
+
"summary": "Supported-agent adapters are limited to checked-in definitions and tested filesystem operations.",
|
|
56
|
+
"evidenceClass": "integration-verified",
|
|
57
|
+
"status": "bounded",
|
|
58
|
+
"evidence": [
|
|
59
|
+
"src/core/adapters.ts",
|
|
60
|
+
"tests/adapters.test.ts",
|
|
61
|
+
"tests/adapter-conformance.test.ts"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "platforms.support",
|
|
66
|
+
"section": "Adapter compatibility",
|
|
67
|
+
"summary": "Platform support is bounded to tested local filesystem behavior and does not imply native application execution.",
|
|
68
|
+
"evidenceClass": "platform-verified",
|
|
69
|
+
"status": "bounded",
|
|
70
|
+
"evidence": [
|
|
71
|
+
"docs/FEATURE_TEST_MATRIX.md",
|
|
72
|
+
"tests/native-filesystem-smoke.test.ts"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "installation.transaction",
|
|
77
|
+
"section": "Preview, apply, inspect, and roll back",
|
|
78
|
+
"summary": "Managed installation plans and applies transactional filesystem changes with snapshots.",
|
|
79
|
+
"evidenceClass": "integration-verified",
|
|
80
|
+
"status": "proven",
|
|
81
|
+
"evidence": [
|
|
82
|
+
"src/core/install.ts",
|
|
83
|
+
"tests/transaction.test.ts",
|
|
84
|
+
"tests/install.test.ts"
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "updates.preview",
|
|
89
|
+
"section": "Catalog, discovery, and recommendations",
|
|
90
|
+
"summary": "Update workflows present a bounded local plan before an explicit apply step.",
|
|
91
|
+
"evidenceClass": "integration-verified",
|
|
92
|
+
"status": "proven",
|
|
93
|
+
"evidence": ["src/core/update.ts", "tests/update.test.ts"]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "updates.saved-profile",
|
|
97
|
+
"section": "Catalog, discovery, and recommendations",
|
|
98
|
+
"summary": "Update evaluates the saved Stable, Power, Maximum, or Custom profile and applies only reviewed, eligible changes after explicit approval.",
|
|
99
|
+
"evidenceClass": "integration-verified",
|
|
100
|
+
"status": "proven",
|
|
101
|
+
"evidence": [
|
|
102
|
+
"src/core/profile-state.ts",
|
|
103
|
+
"src/core/update.ts",
|
|
104
|
+
"tests/profile-state.test.ts",
|
|
105
|
+
"tests/update.test.ts"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "installation.empty-target-recovery",
|
|
110
|
+
"section": "State, persistence, and architecture",
|
|
111
|
+
"summary": "Managed installation treats recursively empty leftover skill directories as unoccupied while retaining collision protection for files and symlinks.",
|
|
112
|
+
"evidenceClass": "integration-verified",
|
|
113
|
+
"status": "proven",
|
|
114
|
+
"evidence": ["src/core/install.ts", "tests/install.test.ts"]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "rollback.snapshot",
|
|
118
|
+
"section": "Preview, apply, inspect, and roll back",
|
|
119
|
+
"summary": "Rollback restores managed snapshot state within Loadout's supported transaction boundary.",
|
|
120
|
+
"evidenceClass": "integration-verified",
|
|
121
|
+
"status": "proven",
|
|
122
|
+
"evidence": [
|
|
123
|
+
"src/core/snapshot.ts",
|
|
124
|
+
"tests/snapshot.test.ts",
|
|
125
|
+
"tests/transaction.test.ts"
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "recommendations.evidence",
|
|
130
|
+
"section": "Catalog, discovery, and recommendations",
|
|
131
|
+
"summary": "Recommendations expose bounded repository and local evidence rather than universal quality claims.",
|
|
132
|
+
"evidenceClass": "unit-verified",
|
|
133
|
+
"status": "bounded",
|
|
134
|
+
"evidence": ["src/core/recommend.ts", "tests/recommend.test.ts"]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"id": "trust.stages",
|
|
138
|
+
"section": "Catalog, discovery, and recommendations",
|
|
139
|
+
"summary": "Trust-stage labels distinguish evidence without promoting one stage to another.",
|
|
140
|
+
"evidenceClass": "structural",
|
|
141
|
+
"status": "proven",
|
|
142
|
+
"evidence": [
|
|
143
|
+
"src/core/benchmark-trust.ts",
|
|
144
|
+
"tests/benchmark-trust.test.ts",
|
|
145
|
+
"docs/CATALOG_POLICY.md"
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"id": "discovery.read-only",
|
|
150
|
+
"section": "Catalog, discovery, and recommendations",
|
|
151
|
+
"summary": "Discovery records candidates separately from catalog promotion and installation.",
|
|
152
|
+
"evidenceClass": "integration-verified",
|
|
153
|
+
"status": "proven",
|
|
154
|
+
"evidence": [
|
|
155
|
+
"src/core/github-discovery.ts",
|
|
156
|
+
"tests/daily-discovery.test.ts",
|
|
157
|
+
"tests/review-queue.test.ts"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "credentials.references",
|
|
162
|
+
"section": "Credentials, MCP, and executable tools",
|
|
163
|
+
"summary": "Shared configuration stores credential references rather than secret values.",
|
|
164
|
+
"evidenceClass": "structural",
|
|
165
|
+
"status": "proven",
|
|
166
|
+
"evidence": [
|
|
167
|
+
"src/shared/schemas.ts",
|
|
168
|
+
"src/shared/types.ts",
|
|
169
|
+
"tests/credentials.test.ts"
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"id": "credentials.separation",
|
|
174
|
+
"section": "Credentials, MCP, and executable tools",
|
|
175
|
+
"summary": "Model API access declarations are separated from non-model service credential requirements in setup and MCP recipe output.",
|
|
176
|
+
"evidenceClass": "unit-verified",
|
|
177
|
+
"status": "proven",
|
|
178
|
+
"evidence": [
|
|
179
|
+
"src/cli.ts",
|
|
180
|
+
"src/core/mcp-recipes.ts",
|
|
181
|
+
"tests/cli-help.test.ts",
|
|
182
|
+
"tests/mcp-recipes.test.ts"
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "mcp.configuration",
|
|
187
|
+
"section": "Credentials, MCP, and executable tools",
|
|
188
|
+
"summary": "MCP configuration uses explicit plans and keeps credentials outside persisted shared manifests.",
|
|
189
|
+
"evidenceClass": "integration-verified",
|
|
190
|
+
"status": "proven",
|
|
191
|
+
"evidence": ["src/core/mcp.ts", "tests/mcp-config.test.ts"]
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"id": "manifests.portability",
|
|
195
|
+
"section": "State, persistence, and architecture",
|
|
196
|
+
"summary": "Loadout manifests are schema-validated portable declarations and do not contain secret values.",
|
|
197
|
+
"evidenceClass": "structural",
|
|
198
|
+
"status": "proven",
|
|
199
|
+
"evidence": [
|
|
200
|
+
"src/core/manifest.ts",
|
|
201
|
+
"src/shared/schemas.ts",
|
|
202
|
+
"tests/manifest.test.ts"
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "benchmarks.protocol",
|
|
207
|
+
"section": "Development and verification",
|
|
208
|
+
"summary": "Benchmark planning and protocol artifacts do not by themselves prove a source is benchmarked.",
|
|
209
|
+
"evidenceClass": "structural",
|
|
210
|
+
"status": "bounded",
|
|
211
|
+
"evidence": [
|
|
212
|
+
"docs/EVALUATION_PROTOCOL_V1.md",
|
|
213
|
+
"src/core/benchmark-campaign.ts",
|
|
214
|
+
"tests/benchmark-campaign.test.ts"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "dashboard.local",
|
|
219
|
+
"section": "Current beta limits",
|
|
220
|
+
"summary": "The dashboard presents local Loadout data and does not establish hosted-service availability.",
|
|
221
|
+
"evidenceClass": "integration-verified",
|
|
222
|
+
"status": "bounded",
|
|
223
|
+
"evidence": ["src/dashboard.ts", "tests/dashboard.test.ts"]
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"id": "uninstall.complete",
|
|
227
|
+
"section": "Troubleshooting and uninstall",
|
|
228
|
+
"summary": "Complete uninstall previews and removes Loadout-managed files, runtime tools, scheduled jobs, and state while preserving unmanaged files and blocking drift unless forced.",
|
|
229
|
+
"evidenceClass": "integration-verified",
|
|
230
|
+
"status": "bounded",
|
|
231
|
+
"evidence": [
|
|
232
|
+
"src/core/uninstall.ts",
|
|
233
|
+
"src/core/remove.ts",
|
|
234
|
+
"tests/uninstall.test.ts"
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"id": "distribution.npm",
|
|
239
|
+
"section": "Quickstart",
|
|
240
|
+
"summary": "npm distribution wording is time-bounded because offline verification cannot prove current registry availability.",
|
|
241
|
+
"evidenceClass": "live-verified",
|
|
242
|
+
"status": "bounded",
|
|
243
|
+
"evidence": [
|
|
244
|
+
"package.json",
|
|
245
|
+
"README.md",
|
|
246
|
+
"docs/evidence/live-checks-2026-07-19.json"
|
|
247
|
+
],
|
|
248
|
+
"externalPrerequisites": ["Current npm registry availability"]
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"id": "release.state",
|
|
252
|
+
"section": "Quickstart",
|
|
253
|
+
"summary": "Release and beta wording is bounded to release-review artifacts and is not proof of current public publication.",
|
|
254
|
+
"evidenceClass": "structural",
|
|
255
|
+
"status": "bounded",
|
|
256
|
+
"evidence": [
|
|
257
|
+
"docs/RELEASE_REVIEW.md",
|
|
258
|
+
"docs/evidence/live-checks-2026-07-19.json",
|
|
259
|
+
"package.json"
|
|
260
|
+
],
|
|
261
|
+
"externalPrerequisites": [
|
|
262
|
+
"Current package publication and release review"
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"id": "testing.deterministic",
|
|
267
|
+
"section": "Development and verification",
|
|
268
|
+
"summary": "The repository contains deterministic automated tests for supported local behaviors.",
|
|
269
|
+
"evidenceClass": "unit-verified",
|
|
270
|
+
"status": "proven",
|
|
271
|
+
"evidence": [
|
|
272
|
+
"package.json",
|
|
273
|
+
"tests/schemas.test.ts",
|
|
274
|
+
"tests/transaction.test.ts"
|
|
275
|
+
]
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"id": "limits.current",
|
|
279
|
+
"section": "Current beta limits",
|
|
280
|
+
"summary": "Current limitations are stated explicitly instead of being represented as present capabilities.",
|
|
281
|
+
"evidenceClass": "structural",
|
|
282
|
+
"status": "proven",
|
|
283
|
+
"evidence": ["README.md", "docs/FEATURE_TEST_MATRIX.md"]
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
}
|