@design-intelligence/ghost 0.21.0 → 0.22.1
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/README.md +47 -33
- package/dist/commands/fingerprint-commands.d.ts.map +1 -1
- package/dist/commands/fingerprint-commands.js +1 -6
- package/dist/commands/fingerprint-commands.js.map +1 -1
- package/dist/commands/gather-command.d.ts.map +1 -1
- package/dist/commands/gather-command.js +26 -30
- package/dist/commands/gather-command.js.map +1 -1
- package/dist/commands/init-command.d.ts.map +1 -1
- package/dist/commands/init-command.js +1 -6
- package/dist/commands/init-command.js.map +1 -1
- package/dist/commands/pull-command.d.ts.map +1 -1
- package/dist/commands/pull-command.js +12 -19
- package/dist/commands/pull-command.js.map +1 -1
- package/dist/commands/pulse-command.js +1 -10
- package/dist/commands/pulse-command.js.map +1 -1
- package/dist/ghost-core/catalog/assemble.d.ts +0 -4
- package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.js +0 -10
- package/dist/ghost-core/catalog/assemble.js.map +1 -1
- package/dist/ghost-core/catalog/index.d.ts +1 -1
- package/dist/ghost-core/catalog/index.d.ts.map +1 -1
- package/dist/ghost-core/catalog/index.js +1 -1
- package/dist/ghost-core/catalog/index.js.map +1 -1
- package/dist/ghost-core/catalog/menu.d.ts +1 -11
- package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
- package/dist/ghost-core/catalog/menu.js +1 -6
- package/dist/ghost-core/catalog/menu.js.map +1 -1
- package/dist/ghost-core/catalog/types.d.ts +0 -6
- package/dist/ghost-core/catalog/types.d.ts.map +1 -1
- package/dist/ghost-core/glossary.d.ts +0 -13
- package/dist/ghost-core/glossary.d.ts.map +1 -1
- package/dist/ghost-core/glossary.js +0 -7
- package/dist/ghost-core/glossary.js.map +1 -1
- package/dist/ghost-core/index.d.ts +2 -2
- package/dist/ghost-core/index.d.ts.map +1 -1
- package/dist/ghost-core/index.js +1 -1
- package/dist/ghost-core/index.js.map +1 -1
- package/dist/ghost-core/node/serialize.d.ts +2 -2
- package/dist/ghost-core/node/serialize.d.ts.map +1 -1
- package/dist/ghost-core/node/serialize.js +4 -2
- package/dist/ghost-core/node/serialize.js.map +1 -1
- package/dist/ghost-core/package-manifest.d.ts +7 -0
- package/dist/ghost-core/package-manifest.d.ts.map +1 -1
- package/dist/ghost-core/package-manifest.js +10 -0
- package/dist/ghost-core/package-manifest.js.map +1 -1
- package/dist/init-payloads/median/median-tells.md +25 -25
- package/dist/init-payloads/skeleton/brand.md +22 -0
- package/dist/init-payloads/skeleton/context.conversation.md +24 -0
- package/dist/init-payloads/skeleton/foundation.color.md +39 -0
- package/dist/init-payloads/skeleton/foundation.composition.md +30 -0
- package/dist/init-payloads/skeleton/foundation.controls.md +29 -0
- package/dist/init-payloads/skeleton/foundation.layout.md +45 -0
- package/dist/init-payloads/skeleton/foundation.motion.md +34 -0
- package/dist/init-payloads/skeleton/foundation.type.md +44 -0
- package/dist/init-payloads/skeleton/foundation.voice.md +29 -0
- package/dist/init-payloads/skeleton/glossary.md +27 -32
- package/dist/init-payloads/vessel-light/anti-goal.tells.md +5 -4
- package/dist/init-payloads/vessel-light/checks/shape-matches-job.md +43 -0
- package/dist/init-payloads/vessel-light/glossary.md +0 -1
- package/dist/init-payloads/vessel-light/grammar.color-roles.md +2 -2
- package/dist/init-payloads/vessel-light/grammar.deletion.md +35 -0
- package/dist/init-payloads/vessel-light/grammar.hierarchy.md +13 -3
- package/dist/init-payloads/vessel-light/grammar.job.md +54 -0
- package/dist/init-payloads/vessel-light/index.md +20 -24
- package/dist/init-payloads/vessel-light/manifest.yml +1 -0
- package/dist/init-payloads/vessel-light/materials/primitives.css +15 -52
- package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +12 -7
- package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +8 -2
- package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +3 -3
- package/dist/init-payloads/vessel-light/materials/tokens.css +27 -78
- package/dist/init-payloads/vessel-light/signature.temperature.md +7 -0
- package/dist/init-payloads/vessel-light/signature.type.md +6 -5
- package/dist/observability-events.d.ts +0 -3
- package/dist/observability-events.d.ts.map +1 -1
- package/dist/observability-events.js.map +1 -1
- package/dist/review/resolve.d.ts +1 -2
- package/dist/review/resolve.d.ts.map +1 -1
- package/dist/review/resolve.js +4 -5
- package/dist/review/resolve.js.map +1 -1
- package/dist/review/review-packet.d.ts +0 -1
- package/dist/review/review-packet.d.ts.map +1 -1
- package/dist/review/review-packet.js +0 -19
- package/dist/review/review-packet.js.map +1 -1
- package/dist/scan/check-files.d.ts.map +1 -1
- package/dist/scan/check-files.js +0 -15
- package/dist/scan/check-files.js.map +1 -1
- package/dist/scan/check-scaffold.js +2 -2
- package/dist/scan/check-scaffold.js.map +1 -1
- package/dist/scan/fingerprint-package-lint.d.ts +8 -0
- package/dist/scan/fingerprint-package-lint.d.ts.map +1 -0
- package/dist/scan/fingerprint-package-lint.js +284 -0
- package/dist/scan/fingerprint-package-lint.js.map +1 -0
- package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-loader.js +2 -29
- package/dist/scan/fingerprint-package-loader.js.map +1 -1
- package/dist/scan/fingerprint-package.d.ts +9 -7
- package/dist/scan/fingerprint-package.d.ts.map +1 -1
- package/dist/scan/fingerprint-package.js +18 -231
- package/dist/scan/fingerprint-package.js.map +1 -1
- package/dist/scan/node-files.d.ts.map +1 -1
- package/dist/scan/node-files.js +1 -3
- package/dist/scan/node-files.js.map +1 -1
- package/dist/scan/templates.d.ts.map +1 -1
- package/dist/scan/templates.js +43 -35
- package/dist/scan/templates.js.map +1 -1
- package/dist/skill-bundle/SKILL.md +15 -13
- package/dist/skill-bundle/references/adapting-a-starter.md +62 -60
- package/dist/skill-bundle/references/authoring-scenarios.md +6 -8
- package/dist/skill-bundle/references/brief.md +5 -6
- package/dist/skill-bundle/references/capture.md +47 -36
- package/dist/skill-bundle/references/concrete-tiers.md +95 -0
- package/dist/skill-bundle/references/recall.md +6 -12
- package/dist/skill-bundle/references/schema.md +15 -24
- package/dist/skill-bundle/references/self-check.md +2 -2
- package/dist/skill-bundle/references/steering-audit.md +7 -10
- package/package.json +1 -1
- package/dist/init-payloads/skeleton/grammar.color-roles.md +0 -26
- package/dist/init-payloads/skeleton/grammar.conversation.md +0 -23
- package/dist/init-payloads/skeleton/grammar.hierarchy.md +0 -39
- package/dist/init-payloads/skeleton/grammar.motion.md +0 -24
- package/dist/init-payloads/skeleton/grammar.rhythm.md +0 -23
- package/dist/init-payloads/skeleton/grammar.surfaces.md +0 -26
- package/dist/init-payloads/skeleton/index.md +0 -27
- package/dist/init-payloads/skeleton/signature.palette.md +0 -24
- package/dist/init-payloads/skeleton/signature.shape.md +0 -19
- package/dist/init-payloads/skeleton/signature.temperature.md +0 -20
- package/dist/init-payloads/skeleton/signature.type.md +0 -22
- package/dist/skill-bundle/references/wild.md +0 -30
- /package/dist/init-payloads/median/{anti-goal.median.md → cliche.median.md} +0 -0
|
@@ -30,42 +30,24 @@ body {
|
|
|
30
30
|
background: var(--muted);
|
|
31
31
|
color: var(--foreground);
|
|
32
32
|
}
|
|
33
|
-
.surface--accent {
|
|
34
|
-
background: var(--accent);
|
|
35
|
-
color: var(--accent-foreground);
|
|
36
|
-
}
|
|
37
|
-
.surface--dark {
|
|
38
|
-
background: var(--surface-dark);
|
|
39
|
-
color: var(--surface-dark-text);
|
|
40
|
-
border-color: var(--surface-dark-border);
|
|
41
|
-
}
|
|
42
33
|
.surface--pad-xs {
|
|
43
|
-
padding:
|
|
34
|
+
padding: var(--gap-sm);
|
|
44
35
|
}
|
|
45
36
|
.surface--pad-sm {
|
|
46
|
-
padding: 12px;
|
|
37
|
+
padding: 12px; /* off-scale surface geometry: between --gap-sm and --gap-md */
|
|
47
38
|
}
|
|
48
39
|
.surface--pad-md {
|
|
49
|
-
padding:
|
|
40
|
+
padding: var(--gap-md);
|
|
50
41
|
}
|
|
51
42
|
.surface--pad-lg {
|
|
52
|
-
padding:
|
|
43
|
+
padding: var(--gap-lg);
|
|
53
44
|
}
|
|
54
45
|
.surface--radius-sm {
|
|
55
46
|
border-radius: var(--radius-sm);
|
|
56
47
|
}
|
|
57
|
-
.surface--radius-md {
|
|
58
|
-
border-radius: var(--radius-md);
|
|
59
|
-
}
|
|
60
|
-
.surface--radius-lg {
|
|
61
|
-
border-radius: var(--radius-lg);
|
|
62
|
-
}
|
|
63
48
|
.surface--radius-surface {
|
|
64
49
|
border-radius: var(--radius-surface);
|
|
65
50
|
}
|
|
66
|
-
.surface--radius-control {
|
|
67
|
-
border-radius: var(--radius-control);
|
|
68
|
-
}
|
|
69
51
|
.surface--border {
|
|
70
52
|
border: 1px solid var(--border);
|
|
71
53
|
}
|
|
@@ -121,9 +103,6 @@ body {
|
|
|
121
103
|
.stack--align-end {
|
|
122
104
|
align-items: flex-end;
|
|
123
105
|
}
|
|
124
|
-
.stack--align-baseline {
|
|
125
|
-
align-items: baseline;
|
|
126
|
-
}
|
|
127
106
|
.stack--justify-center {
|
|
128
107
|
justify-content: center;
|
|
129
108
|
}
|
|
@@ -143,25 +122,25 @@ body {
|
|
|
143
122
|
color: var(--foreground);
|
|
144
123
|
font-family: var(--font-sans);
|
|
145
124
|
font-size: var(--text-body-size);
|
|
146
|
-
line-height:
|
|
125
|
+
line-height: var(--text-body-line-height);
|
|
147
126
|
}
|
|
148
127
|
.text--display {
|
|
149
128
|
font-size: var(--heading-display-font-size);
|
|
150
|
-
font-weight:
|
|
151
|
-
line-height:
|
|
129
|
+
font-weight: var(--heading-display-font-weight);
|
|
130
|
+
line-height: var(--heading-display-line-height);
|
|
152
131
|
letter-spacing: var(--heading-display-letter-spacing);
|
|
153
132
|
}
|
|
154
133
|
.text--headline {
|
|
155
134
|
font-size: var(--text-headline-size);
|
|
156
135
|
font-weight: 400;
|
|
157
136
|
line-height: 1.25;
|
|
158
|
-
letter-spacing: -
|
|
137
|
+
letter-spacing: var(--text-heading-letter-spacing);
|
|
159
138
|
}
|
|
160
139
|
.text--title {
|
|
161
140
|
font-size: var(--text-title-size);
|
|
162
141
|
font-weight: 600;
|
|
163
142
|
line-height: 1;
|
|
164
|
-
letter-spacing: -
|
|
143
|
+
letter-spacing: var(--text-heading-letter-spacing);
|
|
165
144
|
}
|
|
166
145
|
.text--label {
|
|
167
146
|
font-size: var(--label-font-size);
|
|
@@ -201,7 +180,7 @@ body {
|
|
|
201
180
|
gap: var(--gap-sm);
|
|
202
181
|
min-width: 0;
|
|
203
182
|
height: var(--control-height);
|
|
204
|
-
padding:
|
|
183
|
+
padding: var(--gap-sm) var(--gap-lg);
|
|
205
184
|
border: 1px solid transparent;
|
|
206
185
|
border-radius: var(--radius-control);
|
|
207
186
|
background: var(--primary);
|
|
@@ -237,8 +216,8 @@ body {
|
|
|
237
216
|
color: var(--primary-foreground);
|
|
238
217
|
}
|
|
239
218
|
.button--secondary {
|
|
240
|
-
background: var(--
|
|
241
|
-
color: var(--foreground);
|
|
219
|
+
background: var(--secondary);
|
|
220
|
+
color: var(--secondary-foreground);
|
|
242
221
|
}
|
|
243
222
|
.button--ghost {
|
|
244
223
|
background: transparent;
|
|
@@ -271,43 +250,27 @@ body {
|
|
|
271
250
|
color: var(--muted-foreground);
|
|
272
251
|
box-shadow: none;
|
|
273
252
|
}
|
|
274
|
-
.button--size-xs {
|
|
275
|
-
height: 24px;
|
|
276
|
-
padding: 4px 8px;
|
|
277
|
-
gap: var(--gap-xs);
|
|
278
|
-
font-size: 12px;
|
|
279
|
-
}
|
|
280
253
|
.button--size-sm {
|
|
281
254
|
height: 32px;
|
|
282
|
-
padding: 6px
|
|
255
|
+
padding: 6px var(--gap-md);
|
|
283
256
|
gap: 6px;
|
|
284
257
|
}
|
|
285
258
|
.button--size-lg {
|
|
286
259
|
height: 40px;
|
|
287
|
-
padding:
|
|
260
|
+
padding: var(--gap-sm) var(--gap-xl);
|
|
288
261
|
}
|
|
289
262
|
.button--icon,
|
|
290
|
-
.button--icon-sm
|
|
291
|
-
.button--icon-xs,
|
|
292
|
-
.button--icon-lg {
|
|
263
|
+
.button--icon-sm {
|
|
293
264
|
padding: 0;
|
|
294
265
|
}
|
|
295
266
|
.button--icon {
|
|
296
267
|
width: var(--control-height);
|
|
297
268
|
height: var(--control-height);
|
|
298
269
|
}
|
|
299
|
-
.button--icon-xs {
|
|
300
|
-
width: 24px;
|
|
301
|
-
height: 24px;
|
|
302
|
-
}
|
|
303
270
|
.button--icon-sm {
|
|
304
271
|
width: 32px;
|
|
305
272
|
height: 32px;
|
|
306
273
|
}
|
|
307
|
-
.button--icon-lg {
|
|
308
|
-
width: 40px;
|
|
309
|
-
height: 40px;
|
|
310
|
-
}
|
|
311
274
|
|
|
312
275
|
/* field — defaults: label plus pill input with input border, muted placeholder, ring focus, compact error. */
|
|
313
276
|
.field {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- ghost ref annotations
|
|
2
|
-
normative-for: register.editorial — display-scale hero with the single sanctioned kicker (one per page — repeating it on every section is the median tell), --section-padding-vertical rhythm, the sanctioned full-bleed dark band via --surface-dark-*, the pull quote as visual punctuation, one primary action per page. signature.type — the editorial heading scale (--
|
|
2
|
+
normative-for: register.editorial — display-scale hero with the single sanctioned kicker (one per page — repeating it on every section is the median tell), --section-padding-vertical rhythm, the sanctioned full-bleed dark band via --surface-dark-*, the pull quote as visual punctuation, one primary action per page at button--size-lg. signature.type — the editorial heading scale (text--display for the hero, --heading-section-* and --heading-sub-* composed locally) used where the words are the composition, product text variants (title, label, body) inside the features. grammar.rhythm — the hero takes the largest gap step (stack--gap-xl) because display scale earns it. grammar.motion — the sanctioned editorial entrance: one staged reveal at --duration-slow with the one ease, opacity and small transform only. grammar.hierarchy — the inverse tone on the dark surface. signature.palette — the editorial volume: exactly two expression hues per page (periwinkle tinting the dark band, amber accenting the pull quote), controls monochrome.
|
|
3
3
|
incidental: all copy; the specific hue assignments (any two of the five expression hues satisfy the budget); the three-feature grid count; content max-widths.
|
|
4
4
|
-->
|
|
5
5
|
<!doctype html>
|
|
@@ -14,11 +14,15 @@
|
|
|
14
14
|
body { margin: 0; }
|
|
15
15
|
.page { width: min(calc(100% - (var(--page-container-side-gutter) * 2)), var(--page-container-max-width)); margin-inline: auto; }
|
|
16
16
|
.section { padding-block: var(--section-padding-vertical); }
|
|
17
|
-
.hero { min-height: calc(var(--section-padding-vertical) * 5);
|
|
17
|
+
.hero { min-height: calc(var(--section-padding-vertical) * 5); }
|
|
18
|
+
/* editorial entrance: one staged reveal, opacity + small transform, --duration-slow with the one ease */
|
|
19
|
+
.hero > * { animation: hero-enter var(--duration-slow) var(--ease-spring) both; }
|
|
20
|
+
@keyframes hero-enter { from { opacity: 0; transform: translateY(8px); } }
|
|
18
21
|
.label-kicker { text-transform: uppercase; }
|
|
19
|
-
.display-heading { max-width: calc(var(--page-container-side-gutter) * 48);
|
|
22
|
+
.display-heading { max-width: calc(var(--page-container-side-gutter) * 48); }
|
|
20
23
|
.reading-line { max-width: calc(var(--page-container-side-gutter) * 32); font-size: var(--body-reading-size); line-height: var(--body-reading-line-height); letter-spacing: var(--body-reading-letter-spacing); }
|
|
21
24
|
.section-heading { max-width: calc(var(--page-container-side-gutter) * 36); margin-bottom: var(--section-heading-margin-bottom); font-size: var(--heading-section-font-size); font-weight: var(--heading-section-font-weight); line-height: var(--heading-section-line-height); letter-spacing: var(--heading-section-letter-spacing); }
|
|
25
|
+
.note-heading { max-width: calc(var(--page-container-side-gutter) * 36); margin-bottom: var(--page-container-side-gutter); font-size: var(--heading-sub-font-size); font-weight: var(--heading-sub-font-weight); line-height: var(--heading-sub-line-height); letter-spacing: var(--heading-sub-letter-spacing); }
|
|
22
26
|
/* expression budget: two hues per page — periwinkle tints the dark band, amber accents the pull quote */
|
|
23
27
|
.dark-band { width: 100vw; margin-left: calc(50% - 50vw); background: color-mix(in srgb, var(--expression-2) 12%, var(--surface-dark)); color: var(--surface-dark-text); }
|
|
24
28
|
.dark-inner { width: min(calc(100% - (var(--page-container-side-gutter) * 2)), var(--page-container-max-width)); margin-inline: auto; padding-block: var(--section-padding-vertical); }
|
|
@@ -31,11 +35,11 @@
|
|
|
31
35
|
</head>
|
|
32
36
|
<body>
|
|
33
37
|
<main>
|
|
34
|
-
<section class="page section hero stack stack--gap-
|
|
38
|
+
<section class="page section hero stack stack--gap-xl stack--align-start stack--justify-center" aria-labelledby="hero-title">
|
|
35
39
|
<p class="text text--label text--muted label-kicker">Independent review layer</p>
|
|
36
|
-
<h1 class="text display-heading" id="hero-title">Make every generated screen answer to the same brand memory.</h1>
|
|
40
|
+
<h1 class="text text--display display-heading" id="hero-title">Make every generated screen answer to the same brand memory.</h1>
|
|
37
41
|
<p class="text reading-line text--muted">Vessel keeps interface materials plain, inspectable, and close to the repo so agents can preserve the feel behind the product, not just the surface.</p>
|
|
38
|
-
<a class="button button--primary" href="#material-system">Review materials</a>
|
|
42
|
+
<a class="button button--primary button--size-lg" href="#material-system">Review materials</a>
|
|
39
43
|
</section>
|
|
40
44
|
|
|
41
45
|
<section class="dark-band" id="material-system" aria-labelledby="system-title">
|
|
@@ -61,7 +65,8 @@
|
|
|
61
65
|
</div>
|
|
62
66
|
</section>
|
|
63
67
|
|
|
64
|
-
<section class="page section" aria-
|
|
68
|
+
<section class="page section" aria-labelledby="note-title">
|
|
69
|
+
<h2 class="text note-heading" id="note-title">Why authorship survives generation</h2>
|
|
65
70
|
<blockquote class="pullquote">The interface should feel authored even when an agent produced the first pass.</blockquote>
|
|
66
71
|
</section>
|
|
67
72
|
</main>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- ghost ref annotations
|
|
2
|
-
normative-for: grammar.surfaces — the interrupting end of the elevation set: the modal tier (scrim, --shadow-modal, --radius-surface, compact header, clear footer) and the popover tier (an anchored menu floating above the flow with --shadow-popover). The card tier's home is composition.form.html and composition.table.html; together the three refs cover the closed elevation set. grammar.hierarchy — one primary confirm, ghost escape, menu items as ghost-weight actions; the info tone carrying a state-meaning note. signature.shape — surface radius on both overlay surfaces.
|
|
2
|
+
normative-for: grammar.surfaces — the interrupting end of the elevation set: the modal tier (scrim, --shadow-modal, --radius-surface, compact header, clear footer) and the popover tier (an anchored menu floating above the flow with --shadow-popover). The card tier's home is composition.form.html and composition.table.html; together the three refs cover the closed elevation set. grammar.motion — the dialog reveal at --duration-normal with the one ease, opacity and small transform only. grammar.hierarchy — one primary confirm, ghost escape as button--icon close plus a cancel, menu items as ghost-weight actions; the info tone carrying a state-meaning note. signature.shape — surface radius on both overlay surfaces, the pill (--radius-control) on the icon close.
|
|
3
3
|
incidental: showing the popover and the modal in the same frame (a demonstration convenience — in a live UI the menu closes when the dialog interrupts); all copy and counts; the 512px dialog width; the specific menu items.
|
|
4
4
|
-->
|
|
5
5
|
<!doctype html>
|
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
.menu-item { justify-content: flex-start; width: 100%; height: 32px; padding: 6px 12px; }
|
|
18
18
|
.scrim { position: fixed; inset: 0; display: grid; place-items: center; padding: 16px; }
|
|
19
19
|
section[role="dialog"] { width: min(100%, 512px); }
|
|
20
|
+
/* dialog reveal: --duration-normal with the one ease, opacity + small transform */
|
|
21
|
+
section[role="dialog"] { animation: dialog-reveal var(--duration-normal) var(--ease-spring) both; }
|
|
22
|
+
@keyframes dialog-reveal { from { opacity: 0; transform: translateY(4px) scale(0.98); } }
|
|
20
23
|
</style>
|
|
21
24
|
</head>
|
|
22
25
|
<body>
|
|
@@ -39,7 +42,10 @@
|
|
|
39
42
|
<div class="scrim" role="presentation">
|
|
40
43
|
<section class="surface surface--popover surface--pad-lg surface--radius-surface surface--border surface--elevation-modal stack stack--gap-lg" role="dialog" aria-modal="true" aria-labelledby="dialog-title" aria-describedby="dialog-description">
|
|
41
44
|
<header class="stack stack--gap-sm">
|
|
42
|
-
<
|
|
45
|
+
<div class="stack stack--row stack--justify-between stack--align-center stack--gap-md">
|
|
46
|
+
<h2 class="text text--title" id="dialog-title">Publish fingerprint changes?</h2>
|
|
47
|
+
<button class="button button--ghost button--icon" type="button" aria-label="Close">×</button>
|
|
48
|
+
</div>
|
|
43
49
|
<p class="text text--muted" id="dialog-description">This will make the selected brand truths available to agents working in this repo. Review the diff before confirming.</p>
|
|
44
50
|
</header>
|
|
45
51
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- ghost ref annotations
|
|
2
|
-
normative-for: register.data-density — the two smallest gap steps (--gap-xs, --gap-sm) as cell padding, mono tabular numerals right-aligned, muted-first hierarchy, hairline row borders with no zebra striping, small radius on the data surface, status as a text label in one functional color family, hover confirmation at --duration-fast. grammar.hierarchy — label + title header pairing, secondary export action stepping down the ladder.
|
|
2
|
+
normative-for: register.data-density — the two smallest gap steps (--gap-xs, --gap-sm) as cell padding, mono tabular numerals right-aligned, muted-first hierarchy, hairline row borders with no zebra striping, small radius on the data surface (surface--radius-sm), status as a text label in one functional color family, hover confirmation at --duration-fast. grammar.hierarchy — label + title header pairing, secondary export action stepping down the ladder.
|
|
3
3
|
incidental: all customer names, emails, invoice ids, and amounts; the four-row count; the billing domain; the max content width.
|
|
4
4
|
-->
|
|
5
5
|
<!doctype html>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<style>
|
|
14
14
|
body { margin: 0; min-height: 100vh; padding: var(--page-container-side-gutter); }
|
|
15
15
|
main { width: min(100%, calc(var(--page-container-side-gutter) * 56)); margin-inline: auto; }
|
|
16
|
-
.table-surface { overflow: hidden;
|
|
16
|
+
.table-surface { overflow: hidden; }
|
|
17
17
|
table { width: 100%; border-collapse: collapse; }
|
|
18
18
|
th, td { padding: var(--gap-xs) var(--gap-sm); border-bottom: 1px solid var(--border); text-align: left; font-size: var(--text-body-size); line-height: 1.5; }
|
|
19
19
|
th { color: var(--muted-foreground); font-weight: 500; }
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<button class="button button--secondary button--size-sm" type="button">Export CSV</button>
|
|
37
37
|
</header>
|
|
38
38
|
|
|
39
|
-
<section class="surface surface--card surface--border table-surface" aria-label="Recent payments table">
|
|
39
|
+
<section class="surface surface--card surface--border surface--radius-sm table-surface" aria-label="Recent payments table">
|
|
40
40
|
<table>
|
|
41
41
|
<thead>
|
|
42
42
|
<tr>
|
|
@@ -61,35 +61,27 @@
|
|
|
61
61
|
--font-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
62
62
|
|
|
63
63
|
--color-white: #ffffff;
|
|
64
|
-
--color-black: #000000;
|
|
65
64
|
|
|
66
|
-
--color-gray-50: #f5f5f5;
|
|
67
65
|
--color-gray-100: #f0f0f0;
|
|
68
66
|
--color-gray-200: #e8e8e8;
|
|
69
67
|
--color-gray-300: #e5e5e5;
|
|
70
68
|
--color-gray-400: #cccccc;
|
|
71
69
|
--color-gray-500: #999999;
|
|
72
|
-
--color-gray-600: #666666;
|
|
73
|
-
--color-gray-700: #333333;
|
|
74
|
-
--color-gray-800: #232323;
|
|
75
70
|
--color-gray-900: #1a1a1a;
|
|
76
71
|
|
|
77
|
-
--color-red-100: #ff6b6b;
|
|
78
72
|
--color-red-200: #f94b4b;
|
|
79
|
-
--color-blue-100: #7cacff;
|
|
80
73
|
--color-blue-200: #5c98f9;
|
|
81
|
-
--color-green-100: #a3d795;
|
|
82
74
|
--color-green-200: #91cb80;
|
|
83
|
-
--color-yellow-100: #ffd966;
|
|
84
75
|
--color-yellow-200: #fbcd44;
|
|
85
76
|
|
|
86
|
-
--radius
|
|
87
|
-
|
|
88
|
-
--radius-md: calc(var(--radius) - 2px);
|
|
89
|
-
--radius-lg: var(--radius);
|
|
77
|
+
/* Radius dials: --radius-surface on what contains, --radius-control on what
|
|
78
|
+
you click. Everything else derives from these two answers. */
|
|
90
79
|
--radius-surface: 20px;
|
|
91
80
|
--radius-control: 999px;
|
|
92
|
-
--radius
|
|
81
|
+
--radius: var(--radius-surface);
|
|
82
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
83
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
84
|
+
--radius-input: var(--radius-control);
|
|
93
85
|
|
|
94
86
|
--gap-xs: 4px;
|
|
95
87
|
--gap-sm: 8px;
|
|
@@ -98,8 +90,10 @@
|
|
|
98
90
|
--gap-xl: 32px;
|
|
99
91
|
|
|
100
92
|
--text-body-size: 14px;
|
|
93
|
+
--text-body-line-height: 1.625;
|
|
101
94
|
--text-title-size: 18px;
|
|
102
95
|
--text-headline-size: 24px;
|
|
96
|
+
--text-heading-letter-spacing: -0.025em;
|
|
103
97
|
|
|
104
98
|
--control-height: 36px;
|
|
105
99
|
|
|
@@ -115,32 +109,23 @@
|
|
|
115
109
|
--secondary-foreground: var(--foreground);
|
|
116
110
|
--muted: var(--color-gray-100);
|
|
117
111
|
--muted-foreground: var(--color-gray-500);
|
|
118
|
-
--accent: var(--color-gray-100);
|
|
119
|
-
--accent-foreground: var(--foreground);
|
|
120
112
|
--destructive: var(--color-red-200);
|
|
121
113
|
--destructive-foreground: var(--color-white);
|
|
122
114
|
--success: var(--color-green-200);
|
|
123
|
-
--success-foreground: var(--color-gray-900);
|
|
124
115
|
--warning: var(--color-yellow-200);
|
|
125
|
-
--warning-foreground: var(--color-gray-900);
|
|
126
116
|
--info: var(--color-blue-200);
|
|
127
|
-
--info-foreground: var(--color-gray-900);
|
|
128
117
|
--border: var(--color-gray-200);
|
|
129
118
|
--input: var(--color-gray-300);
|
|
130
119
|
--ring: var(--color-gray-400);
|
|
131
120
|
|
|
132
|
-
--dark-10: rgba(26, 26, 26, 0.1);
|
|
133
121
|
--dark-40: rgba(26, 26, 26, 0.4);
|
|
134
|
-
--dark-04: rgba(26, 26, 26, 0.04);
|
|
135
122
|
|
|
136
|
-
|
|
137
|
-
|
|
123
|
+
/* Elevation is a closed set of three tiers (card, popover, modal);
|
|
124
|
+
--shadow-btn belongs to the button primitive, not the tiers. */
|
|
138
125
|
--shadow-btn: 0 2px 8px rgba(76, 76, 76, 0.15);
|
|
139
126
|
--shadow-card: 0 2px 8px rgba(76, 76, 76, 0.15);
|
|
140
|
-
--shadow-elevated: 0 3px 12px rgba(76, 76, 76, 0.22);
|
|
141
127
|
--shadow-popover: 0 8px 30px rgba(0, 0, 0, 0.12);
|
|
142
128
|
--shadow-modal: 0 20px 60px rgba(0, 0, 0, 0.2);
|
|
143
|
-
--shadow-kbd: 0 2px 8px rgba(76, 76, 76, 0.15);
|
|
144
129
|
|
|
145
130
|
--surface-dark: #0a0a0a;
|
|
146
131
|
--surface-dark-text: #f5f5f5;
|
|
@@ -159,14 +144,7 @@
|
|
|
159
144
|
--heading-sub-line-height: 1;
|
|
160
145
|
--heading-sub-letter-spacing: -0.02em;
|
|
161
146
|
--heading-sub-font-weight: 700;
|
|
162
|
-
|
|
163
|
-
--heading-card-line-height: 1.1;
|
|
164
|
-
--heading-card-letter-spacing: -0.01em;
|
|
165
|
-
--heading-card-font-weight: 600;
|
|
166
|
-
|
|
167
|
-
--display-size: clamp(3rem, 12vw, 12rem);
|
|
168
|
-
--display-line-height: 0.85;
|
|
169
|
-
--display-letter-spacing: -0.05em;
|
|
147
|
+
|
|
170
148
|
--body-reading-size: clamp(1rem, 1.3vw, 1.25rem);
|
|
171
149
|
--body-reading-line-height: 1.65;
|
|
172
150
|
--body-reading-letter-spacing: -0.01em;
|
|
@@ -185,58 +163,29 @@
|
|
|
185
163
|
--section-heading-margin-bottom: 75px;
|
|
186
164
|
|
|
187
165
|
--ease-spring: cubic-bezier(0.33, 1, 0.68, 1);
|
|
188
|
-
--duration-fast: 0.15s;
|
|
189
|
-
--duration-normal: 0.2s;
|
|
190
|
-
--duration-slow: 0.4s;
|
|
166
|
+
--duration-fast: 0.15s; /* hover and press — confirmation, not performance */
|
|
167
|
+
--duration-normal: 0.2s; /* reveals, fades, small state changes */
|
|
168
|
+
--duration-slow: 0.4s; /* spatial transitions only; editorial entrances */
|
|
169
|
+
|
|
170
|
+
/* Budgets — countable rules, checked per view, not moods.
|
|
171
|
+
A budget of one means at most one; zero is a valid spend. */
|
|
172
|
+
--primary-budget: 1; /* primary actions per view — and some views honestly earn none */
|
|
173
|
+
--expression-budget-product: 0; /* expression hues in product UI — charts only, never the chrome */
|
|
174
|
+
--expression-budget-email: 1; /* expressive moments per message, one hue */
|
|
175
|
+
--expression-budget-editorial: 2; /* expression hues per page, atmosphere allowed */
|
|
176
|
+
|
|
177
|
+
/* Numerals in data — tabular figures so columns align and deltas read. */
|
|
178
|
+
--numeric-tabular: "tnum" 1;
|
|
191
179
|
|
|
192
180
|
/* Expression palette — the brand's five hues, volume-gated by register.
|
|
193
181
|
Product: charts only. Data-density: one hue family for status.
|
|
194
182
|
Email: exactly one expressive moment. Editorial: atmosphere, max two
|
|
195
|
-
hues per page. Never on interactive controls in any register.
|
|
183
|
+
hues per page. Never on interactive controls in any register.
|
|
184
|
+
The refs demonstrate hues 1 and 2; hues 3-5 are declared inventory —
|
|
185
|
+
no register renders all five at once (see signature.palette). */
|
|
196
186
|
--expression-1: #f6b44a; /* amber */
|
|
197
187
|
--expression-2: #7585ff; /* periwinkle */
|
|
198
188
|
--expression-3: #d76a6a; /* clay */
|
|
199
189
|
--expression-4: #d185e0; /* orchid */
|
|
200
190
|
--expression-5: #91cb80; /* sage */
|
|
201
191
|
}
|
|
202
|
-
|
|
203
|
-
.dark {
|
|
204
|
-
--background: var(--color-black);
|
|
205
|
-
--foreground: var(--color-white);
|
|
206
|
-
--card: var(--color-gray-800);
|
|
207
|
-
--card-foreground: var(--foreground);
|
|
208
|
-
--popover: var(--color-gray-800);
|
|
209
|
-
--popover-foreground: var(--foreground);
|
|
210
|
-
--primary: var(--color-white);
|
|
211
|
-
--primary-foreground: var(--color-black);
|
|
212
|
-
--secondary: var(--color-gray-700);
|
|
213
|
-
--secondary-foreground: var(--foreground);
|
|
214
|
-
--muted: var(--color-gray-800);
|
|
215
|
-
--muted-foreground: var(--color-gray-500);
|
|
216
|
-
--accent: var(--color-gray-800);
|
|
217
|
-
--accent-foreground: var(--foreground);
|
|
218
|
-
--destructive: var(--color-red-100);
|
|
219
|
-
--destructive-foreground: var(--color-black);
|
|
220
|
-
--success: var(--color-green-100);
|
|
221
|
-
--success-foreground: var(--color-black);
|
|
222
|
-
--warning: var(--color-yellow-100);
|
|
223
|
-
--warning-foreground: var(--color-black);
|
|
224
|
-
--info: var(--color-blue-100);
|
|
225
|
-
--info-foreground: var(--color-black);
|
|
226
|
-
--border: var(--color-gray-700);
|
|
227
|
-
--input: var(--color-gray-700);
|
|
228
|
-
--ring: var(--color-gray-400);
|
|
229
|
-
|
|
230
|
-
--dark-10: rgba(242, 242, 242, 0.1);
|
|
231
|
-
--dark-40: rgba(242, 242, 242, 0.4);
|
|
232
|
-
--dark-04: rgba(242, 242, 242, 0.04);
|
|
233
|
-
|
|
234
|
-
--shadow-mini: 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
235
|
-
--shadow-mini-inset: 0 1px 4px rgba(0, 0, 0, 0.5) inset;
|
|
236
|
-
--shadow-btn: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
237
|
-
--shadow-card: 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
238
|
-
--shadow-elevated: 0 3px 12px rgba(0, 0, 0, 0.5);
|
|
239
|
-
--shadow-popover: 0 8px 30px rgba(0, 0, 0, 0.4);
|
|
240
|
-
--shadow-modal: 0 20px 60px rgba(0, 0, 0, 0.6);
|
|
241
|
-
--shadow-kbd: 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
242
|
-
}
|
|
@@ -21,6 +21,13 @@ Destructive copy is direct because the risk is direct; softening the verb
|
|
|
21
21
|
makes the interface less honest. Vessel never celebrates at the user. Trust
|
|
22
22
|
comes from precision, restraint, and naming the truth plainly.
|
|
23
23
|
|
|
24
|
+
The voice is a mechanical edit, not a mood — apply it as transformations:
|
|
25
|
+
"Sorry, nothing here yet!" → "Nothing yet". "Awesome, your changes have been
|
|
26
|
+
saved!" → "Changes saved". "Oops! Something went wrong" → "Payment failed —
|
|
27
|
+
card expired". "You might want to consider updating your billing info" →
|
|
28
|
+
"Update your billing info". Strip the apology, the applause, and the hedge;
|
|
29
|
+
keep the fact and the fix.
|
|
30
|
+
|
|
24
31
|
Vessel's current answer in motion: three durations — `--duration-fast`,
|
|
25
32
|
`--duration-normal`, `--duration-slow` — and one ease, `--ease-spring`, which
|
|
26
33
|
should feel resolved without feeling elastic. Hover confirms with color and
|
|
@@ -16,11 +16,12 @@ in one view.
|
|
|
16
16
|
Vessel's current answer: HK Grotesk. vessel-light ships it as its embedded
|
|
17
17
|
voice — here, `tokens.css` is canonical.
|
|
18
18
|
|
|
19
|
-
The heading scale is editorial: display, section,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
The heading scale is editorial: display, section, and sub each carry their
|
|
20
|
+
own rhythm (`--heading-display-*`, `--heading-section-*`, `--heading-sub-*`).
|
|
21
|
+
Display sizes use tight tracking and sub-1 line heights because the words
|
|
22
|
+
behave like composition, not paragraph text. Card-level headings inside
|
|
23
|
+
editorial features use the product `title` variant — the scale does not reach
|
|
24
|
+
below sub.
|
|
24
25
|
|
|
25
26
|
Labels are small, semibold, and tracked wide. They should feel precise, never
|
|
26
27
|
loud. Body text keeps the established reading sizes with relaxed line height;
|
|
@@ -4,8 +4,6 @@ export type GatherObservabilityEvent = {
|
|
|
4
4
|
ask?: string;
|
|
5
5
|
menu: string[];
|
|
6
6
|
materials?: string[];
|
|
7
|
-
wild?: boolean;
|
|
8
|
-
wildIds?: string[];
|
|
9
7
|
};
|
|
10
8
|
export type PullMiss = {
|
|
11
9
|
requested: string;
|
|
@@ -15,7 +13,6 @@ export type PullObservabilityEvent = {
|
|
|
15
13
|
ts: string;
|
|
16
14
|
event: "pull";
|
|
17
15
|
ids: string[];
|
|
18
|
-
wildIds?: string[];
|
|
19
16
|
missed?: PullMiss[];
|
|
20
17
|
inlinedMaterials?: number;
|
|
21
18
|
omittedMaterials?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-events.d.ts","sourceRoot":"","sources":["../src/observability-events.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"observability-events.d.ts","sourceRoot":"","sources":["../src/observability-events.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,wBAAwB,GACxB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,0BAA0B,GAClC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,GACpC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAEvC,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAmBpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-events.js","sourceRoot":"","sources":["../src/observability-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,kBAAkB,GAAG,qDAAqD,qBAAqB,2EAA2E,CAAC;
|
|
1
|
+
{"version":3,"file":"observability-events.js","sourceRoot":"","sources":["../src/observability-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,kBAAkB,GAAG,qDAAqD,qBAAqB,2EAA2E,CAAC;AAgCjL,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,KAAiC;IAEjC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC9C,GAAG,EAAE,CAAC,KAAK,EACX,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;QACF,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,YAAY,EAAE,CAAC;YACjB,gEAAgE;YAChE,wDAAwD;YACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,kBAAkB,IAAI,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB;IAElB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC3C,IAAI,YAAY,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,KAAgC,CAAC;IAC/C,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/review/resolve.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export interface OfferedCheck {
|
|
|
13
13
|
via: string[];
|
|
14
14
|
}
|
|
15
15
|
export interface CoverageGap {
|
|
16
|
-
kind: "unmatched-file" | "
|
|
16
|
+
kind: "unmatched-file" | "unchecked-material";
|
|
17
17
|
detail: string;
|
|
18
18
|
files?: string[];
|
|
19
19
|
nodes?: string[];
|
|
@@ -21,7 +21,6 @@ export interface CoverageGap {
|
|
|
21
21
|
export interface ReviewResolution {
|
|
22
22
|
touchedFiles: TouchedFile[];
|
|
23
23
|
materialNodes: MatchedMaterialNode[];
|
|
24
|
-
guardNodes: MatchedMaterialNode[];
|
|
25
24
|
offeredChecks: OfferedCheck[];
|
|
26
25
|
gaps: CoverageGap[];
|
|
27
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/review/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAG9B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/review/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAG9B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,wBAAwB,GAClC,gBAAgB,CAmGlB"}
|
package/dist/review/resolve.js
CHANGED
|
@@ -67,12 +67,12 @@ export function resolveReview(catalog, checks, diffText, transport) {
|
|
|
67
67
|
files: unmatched,
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
70
|
+
const unchecked = [...touchedMaterialNodes].filter((id) => !referencedMaterialNodes.has(id));
|
|
71
|
+
if (unchecked.length > 0) {
|
|
72
72
|
gaps.push({
|
|
73
|
-
kind: "
|
|
73
|
+
kind: "unchecked-material",
|
|
74
74
|
detail: "touched material-backed nodes have no check referencing them — review coverage is missing",
|
|
75
|
-
nodes:
|
|
75
|
+
nodes: unchecked,
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
78
|
const matchedNodes = [...matched].map(([id, entry]) => ({
|
|
@@ -83,7 +83,6 @@ export function resolveReview(catalog, checks, diffText, transport) {
|
|
|
83
83
|
return {
|
|
84
84
|
touchedFiles,
|
|
85
85
|
materialNodes: matchedNodes,
|
|
86
|
-
guardNodes: matchedNodes.filter((node) => catalog.nodes.get(node.id)?.guard),
|
|
87
86
|
offeredChecks,
|
|
88
87
|
gaps,
|
|
89
88
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/review/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EAGvB,yBAAyB,EACzB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,iBAAiB,EAAoB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/review/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-packet.d.ts","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,
|
|
1
|
+
{"version":3,"file":"review-packet.d.ts","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,wBAAwB,EACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC,CAmDvB;AAoBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA8F/D"}
|
|
@@ -12,7 +12,6 @@ export async function buildReviewPacket(fingerprint, diffText, options = {}) {
|
|
|
12
12
|
materialsDir: GHOST_MATERIALS_DIR,
|
|
13
13
|
});
|
|
14
14
|
const materialNodes = resolution.materialNodes.map((matched) => materialNodeFromMatch(fingerprint, matched));
|
|
15
|
-
const guardNodes = resolution.guardNodes.map((matched) => materialNodeFromMatch(fingerprint, matched));
|
|
16
15
|
const checks = await Promise.all(resolution.offeredChecks.map(async (offered) => {
|
|
17
16
|
const check = fingerprint.checks.get(offered.id);
|
|
18
17
|
const probeCommand = check?.doc.frontmatter.probe;
|
|
@@ -38,7 +37,6 @@ export async function buildReviewPacket(fingerprint, diffText, options = {}) {
|
|
|
38
37
|
fingerprintId: fingerprint.manifest.id,
|
|
39
38
|
touchedFiles: resolution.touchedFiles.map((file) => file.path),
|
|
40
39
|
materialNodes,
|
|
41
|
-
guardNodes,
|
|
42
40
|
checks,
|
|
43
41
|
gaps: resolution.gaps,
|
|
44
42
|
diff: diffText,
|
|
@@ -85,23 +83,6 @@ export function formatReviewPacket(packet) {
|
|
|
85
83
|
out.push("");
|
|
86
84
|
}
|
|
87
85
|
}
|
|
88
|
-
if (packet.guardNodes.length > 0) {
|
|
89
|
-
out.push("## Matched guard nodes — review-critical");
|
|
90
|
-
for (const node of packet.guardNodes) {
|
|
91
|
-
const kind = node.kind ? ` _(${node.kind})_` : "";
|
|
92
|
-
out.push(`### \`${node.id}\`${kind}`);
|
|
93
|
-
if (node.description)
|
|
94
|
-
out.push(`_${node.description}_`, "");
|
|
95
|
-
out.push(node.prose, "");
|
|
96
|
-
out.push("Matched materials:");
|
|
97
|
-
for (const locator of node.matchedMaterials)
|
|
98
|
-
out.push(`- \`${locator}\``);
|
|
99
|
-
out.push("Files:");
|
|
100
|
-
for (const file of node.files)
|
|
101
|
-
out.push(`- \`${file}\``);
|
|
102
|
-
out.push("");
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
86
|
out.push("## Offered checks — weigh which apply");
|
|
106
87
|
if (packet.checks.length === 0) {
|
|
107
88
|
out.push("_No checks were offered for this diff._", "");
|