arcane-cli 0.36.1 → 0.38.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.
|
@@ -1,408 +1,15 @@
|
|
|
1
|
+
<!-- @codemagician/arcane-ui v2.1.3 -- SEE LICENSE IN LICENSE. Generated by scripts/build-report-template.tsx. Do not edit by hand. -->
|
|
1
2
|
<!doctype html>
|
|
2
|
-
<!--
|
|
3
|
-
show-report template v0 (interim) -- SR-02.
|
|
4
|
-
The hand-written completion-ledger CSS/markup from this repository's own
|
|
5
|
-
two prior programs, converted to the Mustache grammar so the data contract
|
|
6
|
-
and the --check/--fix automation are real today. The v0 look is a
|
|
7
|
-
placeholder: the shipped design comes from arcane-ui's static-export
|
|
8
|
-
build (SR-05b) and drops into this same file slot in SR-06, at which point
|
|
9
|
-
the header below records the arcane-ui version and license notice it was
|
|
10
|
-
compiled from. Nothing here is arcane-ui source; this CSS was authored in
|
|
11
|
-
this MIT repository.
|
|
12
|
-
Rendered by: src/modules/show-report/render.ts (mustache). Zero runtime JS.
|
|
13
|
-
-->
|
|
14
3
|
<html lang="en">
|
|
15
4
|
<head>
|
|
16
5
|
<meta charset="utf-8">
|
|
17
6
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
18
7
|
<title>{{masthead.title}}</title>
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
--surface: #ffffff;
|
|
23
|
-
--ink: #1a1d2b;
|
|
24
|
-
--ink-soft: #565b72;
|
|
25
|
-
--ink-faint: #8a8fa3;
|
|
26
|
-
--accent: #b8802e;
|
|
27
|
-
--accent-2: #3e7a72;
|
|
28
|
-
--line: #dadde3;
|
|
29
|
-
--row-alt: #f6f7f9;
|
|
30
|
-
--shadow: rgba(26, 29, 43, 0.06);
|
|
31
|
-
--needs: #a6503a;
|
|
32
|
-
--needs-bg: #f7e6e1;
|
|
33
|
-
|
|
34
|
-
--cat-spell: #b8802e; --cat-spell-bg: #f6ead6;
|
|
35
|
-
--cat-feature: #3e7a72; --cat-feature-bg: #dcede9;
|
|
36
|
-
--cat-governance: #7a5c8a; --cat-governance-bg: #ece2f0;
|
|
37
|
-
--cat-decision: #4a5d8a; --cat-decision-bg: #e0e4f0;
|
|
38
|
-
--cat-fix: #a6503a; --cat-fix-bg: #f3ded8;
|
|
39
|
-
--cat-process: #6b7a3f; --cat-process-bg: #e6ead9;
|
|
40
|
-
--cat-docs: #6b7290; --cat-docs-bg: #e6e7ee;
|
|
41
|
-
--cat-platform: #39525a; --cat-platform-bg: #dde4e5;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@media (prefers-color-scheme: dark) {
|
|
45
|
-
:root:not([data-theme="light"]) {
|
|
46
|
-
--bg: #12141c;
|
|
47
|
-
--surface: #181b26;
|
|
48
|
-
--ink: #ede9e0;
|
|
49
|
-
--ink-soft: #9da3b8;
|
|
50
|
-
--ink-faint: #6c728a;
|
|
51
|
-
--accent: #d9a44e;
|
|
52
|
-
--accent-2: #6fafa5;
|
|
53
|
-
--line: #2a2e3d;
|
|
54
|
-
--row-alt: #1d202c;
|
|
55
|
-
--shadow: rgba(0, 0, 0, 0.35);
|
|
56
|
-
--needs: #e08a71;
|
|
57
|
-
--needs-bg: #3a2620;
|
|
58
|
-
|
|
59
|
-
--cat-spell: #e0b064; --cat-spell-bg: #3a2e1a;
|
|
60
|
-
--cat-feature: #7fc2b8; --cat-feature-bg: #17322e;
|
|
61
|
-
--cat-governance: #c19bd4; --cat-governance-bg: #2f2438;
|
|
62
|
-
--cat-decision: #8fa3d6; --cat-decision-bg: #202942;
|
|
63
|
-
--cat-fix: #e08a71; --cat-fix-bg: #3a2620;
|
|
64
|
-
--cat-process: #a3b876; --cat-process-bg: #2a3020;
|
|
65
|
-
--cat-docs: #adb2c9; --cat-docs-bg: #262a38;
|
|
66
|
-
--cat-platform: #7fa3ac; --cat-platform-bg: #1c2c2f;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
:root[data-theme="dark"] {
|
|
71
|
-
--bg: #12141c;
|
|
72
|
-
--surface: #181b26;
|
|
73
|
-
--ink: #ede9e0;
|
|
74
|
-
--ink-soft: #9da3b8;
|
|
75
|
-
--ink-faint: #6c728a;
|
|
76
|
-
--accent: #d9a44e;
|
|
77
|
-
--accent-2: #6fafa5;
|
|
78
|
-
--line: #2a2e3d;
|
|
79
|
-
--row-alt: #1d202c;
|
|
80
|
-
--shadow: rgba(0, 0, 0, 0.35);
|
|
81
|
-
--needs: #e08a71;
|
|
82
|
-
--needs-bg: #3a2620;
|
|
83
|
-
|
|
84
|
-
--cat-spell: #e0b064; --cat-spell-bg: #3a2e1a;
|
|
85
|
-
--cat-feature: #7fc2b8; --cat-feature-bg: #17322e;
|
|
86
|
-
--cat-governance: #c19bd4; --cat-governance-bg: #2f2438;
|
|
87
|
-
--cat-decision: #8fa3d6; --cat-decision-bg: #202942;
|
|
88
|
-
--cat-fix: #e08a71; --cat-fix-bg: #3a2620;
|
|
89
|
-
--cat-process: #a3b876; --cat-process-bg: #2a3020;
|
|
90
|
-
--cat-docs: #adb2c9; --cat-docs-bg: #262a38;
|
|
91
|
-
--cat-platform: #7fa3ac; --cat-platform-bg: #1c2c2f;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
* { box-sizing: border-box; }
|
|
95
|
-
|
|
96
|
-
body {
|
|
97
|
-
margin: 0;
|
|
98
|
-
background: var(--bg);
|
|
99
|
-
color: var(--ink);
|
|
100
|
-
font-family: "IBM Plex Sans", -apple-system, "Segoe UI", sans-serif;
|
|
101
|
-
line-height: 1.5;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
a { color: var(--accent-2); }
|
|
105
|
-
a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 3px; }
|
|
106
|
-
code { font-family: "IBM Plex Mono", monospace; font-size: 0.92em; }
|
|
107
|
-
|
|
108
|
-
.page { max-width: 920px; margin: 0 auto; padding: 3rem 1.5rem 5rem; }
|
|
109
|
-
|
|
110
|
-
header.masthead { margin-bottom: 2.25rem; }
|
|
111
|
-
|
|
112
|
-
.eyebrow {
|
|
113
|
-
font-family: "IBM Plex Mono", monospace;
|
|
114
|
-
font-size: 0.72rem;
|
|
115
|
-
letter-spacing: 0.14em;
|
|
116
|
-
text-transform: uppercase;
|
|
117
|
-
color: var(--accent);
|
|
118
|
-
margin: 0 0 0.6rem;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
h1 {
|
|
122
|
-
font-family: "Fraunces", Georgia, serif;
|
|
123
|
-
font-weight: 600;
|
|
124
|
-
font-size: clamp(2rem, 5vw, 2.85rem);
|
|
125
|
-
letter-spacing: -0.01em;
|
|
126
|
-
margin: 0 0 0.5rem;
|
|
127
|
-
text-wrap: balance;
|
|
128
|
-
color: var(--ink);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.dek { font-size: 1.02rem; color: var(--ink-soft); max-width: 62ch; margin: 0 0 1.5rem; }
|
|
132
|
-
|
|
133
|
-
dl.stat-rail {
|
|
134
|
-
display: flex;
|
|
135
|
-
flex-wrap: wrap;
|
|
136
|
-
gap: 0.5rem 1.75rem;
|
|
137
|
-
margin: 0;
|
|
138
|
-
padding: 1rem 1.25rem;
|
|
139
|
-
background: var(--surface);
|
|
140
|
-
border: 1px solid var(--line);
|
|
141
|
-
border-radius: 10px;
|
|
142
|
-
box-shadow: 0 1px 2px var(--shadow);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.stat { display: flex; flex-direction: column; gap: 0.15rem; margin: 0; }
|
|
146
|
-
|
|
147
|
-
.stat dd {
|
|
148
|
-
margin: 0;
|
|
149
|
-
font-family: "IBM Plex Mono", monospace;
|
|
150
|
-
font-variant-numeric: tabular-nums;
|
|
151
|
-
font-size: 1.3rem;
|
|
152
|
-
font-weight: 600;
|
|
153
|
-
color: var(--ink);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
.stat dt { font-size: 0.72rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-faint); }
|
|
157
|
-
|
|
158
|
-
.needs-you {
|
|
159
|
-
margin-top: 1.25rem;
|
|
160
|
-
padding: 0.9rem 1.1rem;
|
|
161
|
-
border-radius: 10px;
|
|
162
|
-
border: 1px solid var(--needs);
|
|
163
|
-
background: var(--needs-bg);
|
|
164
|
-
}
|
|
165
|
-
.needs-you h2 { margin: 0 0 0.4rem; font-size: 0.95rem; color: var(--needs); font-family: "IBM Plex Sans", sans-serif; }
|
|
166
|
-
.needs-you ul { margin: 0; padding-left: 1.1rem; font-size: 0.88rem; }
|
|
167
|
-
.needs-you li { margin: 0.2rem 0; }
|
|
168
|
-
.needs-you.none { border-color: var(--line); background: var(--surface); color: var(--ink-soft); }
|
|
169
|
-
.needs-you.none h2 { color: var(--accent-2); }
|
|
170
|
-
|
|
171
|
-
.outcome { margin: 1rem 0 0; font-size: 0.92rem; color: var(--ink-soft); }
|
|
172
|
-
|
|
173
|
-
.legend {
|
|
174
|
-
display: flex;
|
|
175
|
-
flex-wrap: wrap;
|
|
176
|
-
gap: 0.5rem 1rem;
|
|
177
|
-
margin: 1.75rem 0 0.25rem;
|
|
178
|
-
padding: 1.5rem 0 0;
|
|
179
|
-
border-top: 1px solid var(--line);
|
|
180
|
-
list-style: none;
|
|
181
|
-
}
|
|
182
|
-
.legend-item { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.76rem; color: var(--ink-soft); }
|
|
183
|
-
|
|
184
|
-
section.phase { margin-top: 2.5rem; }
|
|
185
|
-
|
|
186
|
-
.phase-label { display: flex; align-items: baseline; gap: 0.75rem; margin-bottom: 0.9rem; }
|
|
187
|
-
.phase-label h2 {
|
|
188
|
-
font-family: "Fraunces", Georgia, serif;
|
|
189
|
-
font-weight: 600;
|
|
190
|
-
font-size: 1.15rem;
|
|
191
|
-
color: var(--ink);
|
|
192
|
-
margin: 0;
|
|
193
|
-
white-space: nowrap;
|
|
194
|
-
}
|
|
195
|
-
.phase-label .rule { flex: 1; height: 1px; background: var(--line); }
|
|
196
|
-
.phase-note { font-size: 0.82rem; color: var(--ink-faint); margin: -0.4rem 0 0.9rem; }
|
|
197
|
-
|
|
198
|
-
ol.ledger {
|
|
199
|
-
list-style: none;
|
|
200
|
-
margin: 0;
|
|
201
|
-
padding: 0;
|
|
202
|
-
background: var(--surface);
|
|
203
|
-
border: 1px solid var(--line);
|
|
204
|
-
border-radius: 10px;
|
|
205
|
-
overflow: hidden;
|
|
206
|
-
box-shadow: 0 1px 2px var(--shadow);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
.row {
|
|
210
|
-
display: grid;
|
|
211
|
-
grid-template-columns: minmax(180px, 26%) 1fr auto;
|
|
212
|
-
gap: 1rem;
|
|
213
|
-
padding: 0.85rem 1.1rem;
|
|
214
|
-
border-top: 1px solid var(--line);
|
|
215
|
-
align-items: center;
|
|
216
|
-
}
|
|
217
|
-
.row:first-child { border-top: none; }
|
|
218
|
-
.row:nth-child(even) { background: var(--row-alt); }
|
|
219
|
-
|
|
220
|
-
.item-title { display: flex; align-items: flex-start; gap: 0.55rem; font-weight: 600; font-size: 0.94rem; color: var(--ink); }
|
|
221
|
-
/* One icon per category, drawn from the sprite below and coloured by the
|
|
222
|
-
same token as the row's pill. Decorative: the pill carries the category in
|
|
223
|
-
text, so the icon is aria-hidden and never the sole carrier of meaning. */
|
|
224
|
-
.cat-icon { width: 1rem; height: 1rem; flex: none; margin-top: 0.12rem; }
|
|
225
|
-
.cat-icon.spell { color: var(--cat-spell); }
|
|
226
|
-
.cat-icon.feature { color: var(--cat-feature); }
|
|
227
|
-
.cat-icon.governance { color: var(--cat-governance); }
|
|
228
|
-
.cat-icon.decision { color: var(--cat-decision); }
|
|
229
|
-
.cat-icon.fix { color: var(--cat-fix); }
|
|
230
|
-
.cat-icon.process { color: var(--cat-process); }
|
|
231
|
-
.cat-icon.docs { color: var(--cat-docs); }
|
|
232
|
-
.cat-icon.platform { color: var(--cat-platform); }
|
|
233
|
-
.item-title a { color: inherit; text-decoration: none; }
|
|
234
|
-
.item-title a:hover { text-decoration: underline; }
|
|
235
|
-
.item-id { font-family: "IBM Plex Mono", monospace; font-size: 0.7rem; color: var(--ink-faint); margin-left: 0.4rem; font-weight: 500; }
|
|
236
|
-
|
|
237
|
-
.item-desc { font-size: 0.87rem; color: var(--ink-soft); max-width: 58ch; }
|
|
238
|
-
.item-desc.unwritten { color: var(--ink-faint); font-style: italic; }
|
|
239
|
-
|
|
240
|
-
.pill {
|
|
241
|
-
justify-self: end;
|
|
242
|
-
font-size: 0.7rem;
|
|
243
|
-
font-weight: 600;
|
|
244
|
-
letter-spacing: 0.02em;
|
|
245
|
-
padding: 0.28rem 0.6rem;
|
|
246
|
-
border-radius: 999px;
|
|
247
|
-
white-space: nowrap;
|
|
248
|
-
}
|
|
249
|
-
.pill.spell { color: var(--cat-spell); background: var(--cat-spell-bg); }
|
|
250
|
-
.pill.feature { color: var(--cat-feature); background: var(--cat-feature-bg); }
|
|
251
|
-
.pill.governance { color: var(--cat-governance); background: var(--cat-governance-bg); }
|
|
252
|
-
.pill.decision { color: var(--cat-decision); background: var(--cat-decision-bg); }
|
|
253
|
-
.pill.fix { color: var(--cat-fix); background: var(--cat-fix-bg); }
|
|
254
|
-
.pill.process { color: var(--cat-process); background: var(--cat-process-bg); }
|
|
255
|
-
.pill.docs { color: var(--cat-docs); background: var(--cat-docs-bg); }
|
|
256
|
-
.pill.platform { color: var(--cat-platform); background: var(--cat-platform-bg); }
|
|
257
|
-
|
|
258
|
-
.parked-list, .cast-list { margin: 0; padding-left: 1.1rem; font-size: 0.87rem; color: var(--ink-soft); }
|
|
259
|
-
.parked-list li, .cast-list li { margin: 0.3rem 0; }
|
|
260
|
-
.parked-list strong { color: var(--ink); }
|
|
261
|
-
|
|
262
|
-
footer.colophon {
|
|
263
|
-
margin-top: 3rem;
|
|
264
|
-
padding-top: 1.5rem;
|
|
265
|
-
border-top: 1px solid var(--line);
|
|
266
|
-
font-size: 0.8rem;
|
|
267
|
-
color: var(--ink-faint);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
@media (max-width: 640px) {
|
|
271
|
-
.row { grid-template-columns: 1fr; gap: 0.4rem; }
|
|
272
|
-
.pill { justify-self: start; }
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
@media print {
|
|
276
|
-
body { background: #fff; color: #000; }
|
|
277
|
-
.page { padding: 0; max-width: none; }
|
|
278
|
-
ol.ledger, dl.stat-rail, .needs-you { box-shadow: none; }
|
|
279
|
-
a { color: inherit; }
|
|
280
|
-
}
|
|
281
|
-
</style>
|
|
282
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
283
|
-
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@500;600&display=swap">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com">
|
|
9
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@500;600;700&family=Rajdhani:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap">
|
|
10
|
+
<style>:root{--cat-platform:#7fdfff;--cat-docs:#aac0d6;--cat-process:#c3d97a;--cat-fix:#ff7a6b;--cat-decision:#ffb547;--cat-governance:#8ab4ff;--cat-feature:#5cf2a4;--cat-spell:#c9a2ff;--ink-50:#7c95b5;--f-mono:'JetBrains Mono', ui-monospace, monospace;--ink-70:#aac0d6;--ink-10:#1d2a3d;--ink-80:#c8d5e6;--ink-30:#4f6a8a;--ink-60:#9fb8d6;--f-ui:'Rajdhani', 'Chakra Petch', system-ui, sans-serif;--ink-90:#e4eaf0;--f-display:'Chakra Petch', 'Saira Condensed', system-ui, sans-serif;--bg:#000000;--r-corner:var(--r-chamfer);--r-chamfer:2px;--ink-15:#2a3e58;--signal-warn:#ffb547;--bg-1:#060708;--accent:#ffffff;--signal-ok:#5cf2a4;--ink-100:#ffffff}@media (prefers-color-scheme: light){:root{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-50:#435b78;--ink-70:#2e4260;--ink-10:#cddae8;--ink-80:#1f2f46;--ink-30:#8aaac8;--ink-60:#3d5578;--ink-90:#141e2e;--bg:#f0f4f8;--ink-15:#bdd0e2;--signal-warn:#824d00;--bg-1:#e4eaef;--accent:#595959;--signal-ok:#086736;--ink-100:#070c14}}@media print{:root{--cat-platform:#0d6179;--cat-docs:#3d5578;--cat-process:#50600f;--cat-fix:#a42f26;--cat-decision:#844c00;--cat-governance:#2856ad;--cat-feature:#136640;--cat-spell:#6b3fbf;--ink-50:#435b78;--ink-70:#2e4260;--ink-10:#cddae8;--ink-80:#1f2f46;--ink-30:#8aaac8;--ink-60:#3d5578;--ink-90:#141e2e;--bg:#f0f4f8;--ink-15:#bdd0e2;--signal-warn:#824d00;--bg-1:#e4eaef;--accent:#595959;--signal-ok:#086736;--ink-100:#070c14}} body{margin:0;background:var(--bg);color:var(--ink-80);font-family:var(--f-ui),system-ui,sans-serif} a{text-decoration:none} a:hover{text-decoration:underline} code{font-family:var(--f-mono);font-size:.92em}</style>
|
|
284
11
|
</head>
|
|
285
12
|
<body>
|
|
286
|
-
<!-- Category icon sprite. Eight symbols, one per ReportCategory, referenced by
|
|
287
|
-
`<use href="#cat-<category>">` from each row and from the legend. Inline
|
|
288
|
-
rather than an emoji per row: an emoji renders differently on every
|
|
289
|
-
platform, often falls back to a box or a monochrome outline in print, and
|
|
290
|
-
cannot take the report's own category colour. All eight together are about
|
|
291
|
-
2 KB, and the file stays self-contained with no network fetch. -->
|
|
292
|
-
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false"><defs>
|
|
293
|
-
<symbol id="cat-spell" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75v3.5M8 10.75v3.5M1.75 8h3.5M10.75 8h3.5M3.6 3.6l2.4 2.4M10 10l2.4 2.4M12.4 3.6 10 6M6 10l-2.4 2.4"/></symbol>
|
|
294
|
-
<symbol id="cat-feature" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="11.5" rx="1"/><path d="M8 5.25v5.5M5.25 8h5.5"/></symbol>
|
|
295
|
-
<symbol id="cat-governance" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.25 3.75v4.2c0 3.05-2.2 5.3-5.25 6.3-3.05-1-5.25-3.25-5.25-6.3v-4.2z"/></symbol>
|
|
296
|
-
<symbol id="cat-decision" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 14.25 8 8 14.25 1.75 8z"/></symbol>
|
|
297
|
-
<symbol id="cat-fix" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.4 4.9v6.2L8 14.25 2.6 11.1V4.9z"/><circle cx="8" cy="8" r="2.25"/></symbol>
|
|
298
|
-
<symbol id="cat-process" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M13 8a5 5 0 0 1-8.65 3.45M3 8a5 5 0 0 1 8.65-3.45"/><path d="M11.65 2.15v2.4h-2.4M4.35 13.85v-2.4h2.4"/></symbol>
|
|
299
|
-
<symbol id="cat-docs" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.75 1.75h5.75l2.75 2.75v9.75h-8.5z"/><path d="M9.5 1.75v3h3M6 8h4M6 10.75h4"/></symbol>
|
|
300
|
-
<symbol id="cat-platform" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="3.75" rx=".75"/><rect x="2.25" y="8.25" width="11.5" height="3.75" rx=".75"/><path d="M4.75 4.1h.01M4.75 10.1h.01M8 12v2.25"/></symbol>
|
|
301
|
-
</defs></svg>
|
|
302
|
-
<div class="page">
|
|
303
|
-
<main>
|
|
304
|
-
|
|
305
|
-
<header class="masthead">
|
|
306
|
-
<p class="eyebrow">{{masthead.eyebrow}}</p>
|
|
307
|
-
<h1>{{masthead.title}}</h1>
|
|
308
|
-
<p class="dek">{{masthead.dek}}</p>
|
|
309
|
-
|
|
310
|
-
<dl class="stat-rail">
|
|
311
|
-
{{#stats}}
|
|
312
|
-
<div class="stat"><dd>{{value}}</dd><dt>{{label}}</dt></div>
|
|
313
|
-
{{/stats}}
|
|
314
|
-
</dl>
|
|
315
|
-
|
|
316
|
-
{{#needsYouCount}}
|
|
317
|
-
<section class="needs-you" aria-labelledby="needs-you-heading">
|
|
318
|
-
<h2 id="needs-you-heading">Needs you: {{needsYouCount}}</h2>
|
|
319
|
-
<ul>
|
|
320
|
-
{{#needsYou}}
|
|
321
|
-
<li><strong>{{id}}</strong> — {{title}}{{#href}} · <a href="{{href}}">open</a>{{/href}}</li>
|
|
322
|
-
{{/needsYou}}
|
|
323
|
-
</ul>
|
|
324
|
-
</section>
|
|
325
|
-
{{/needsYouCount}}
|
|
326
|
-
{{^needsYouCount}}
|
|
327
|
-
<section class="needs-you none" aria-labelledby="needs-you-heading">
|
|
328
|
-
<h2 id="needs-you-heading">Nothing needs you</h2>
|
|
329
|
-
</section>
|
|
330
|
-
{{/needsYouCount}}
|
|
331
|
-
|
|
332
|
-
{{#hasOutcome}}<p class="outcome">{{outcome}}</p>{{/hasOutcome}}
|
|
333
|
-
|
|
334
|
-
<ul class="legend" aria-label="Category legend">
|
|
335
|
-
{{#legend}}
|
|
336
|
-
<li class="legend-item"><svg class="cat-icon {{key}}" aria-hidden="true" focusable="false"><use href="#cat-{{key}}"></use></svg>{{label}}</li>
|
|
337
|
-
{{/legend}}
|
|
338
|
-
</ul>
|
|
339
|
-
</header>
|
|
340
|
-
|
|
341
|
-
{{#sections}}
|
|
342
|
-
<section class="phase" aria-labelledby="{{id}}-heading">
|
|
343
|
-
<div class="phase-label"><h2 id="{{id}}-heading">{{title}}</h2><span class="rule" aria-hidden="true"></span></div>
|
|
344
|
-
{{#hasNote}}<p class="phase-note">{{note}}</p>{{/hasNote}}
|
|
345
|
-
<ol class="ledger">
|
|
346
|
-
{{#rows}}
|
|
347
|
-
<li class="row">
|
|
348
|
-
<div class="item-title"><svg class="cat-icon {{category}}" aria-hidden="true" focusable="false"><use href="#cat-{{category}}"></use></svg><span>{{#hasHref}}<a href="{{href}}">{{title}}</a>{{/hasHref}}{{^hasHref}}{{title}}{{/hasHref}}<span class="item-id">{{id}}</span></span></div>
|
|
349
|
-
{{#isUnwritten}}<div class="item-desc unwritten">unwritten</div>{{/isUnwritten}}
|
|
350
|
-
{{^isUnwritten}}<div class="item-desc">{{{descriptionHtml}}}</div>{{/isUnwritten}}
|
|
351
|
-
<span class="pill {{category}}">{{categoryLabel}}</span>
|
|
352
|
-
</li>
|
|
353
|
-
{{/rows}}
|
|
354
|
-
</ol>
|
|
355
|
-
</section>
|
|
356
|
-
{{/sections}}
|
|
357
|
-
|
|
358
|
-
{{#hasCorrections}}
|
|
359
|
-
{{#corrections}}
|
|
360
|
-
<section class="phase" aria-labelledby="corrections-heading">
|
|
361
|
-
<div class="phase-label"><h2 id="corrections-heading">Calibration</h2><span class="rule" aria-hidden="true"></span></div>
|
|
362
|
-
<p class="phase-note">{{checked}} claims checked · {{corrected}} corrected · {{unverifiable}} unverifiable. {{scopeNote}}</p>
|
|
363
|
-
<ol class="ledger">
|
|
364
|
-
{{#highlights}}
|
|
365
|
-
<li class="row">
|
|
366
|
-
<div class="item-title"><svg class="cat-icon {{category}}" aria-hidden="true" focusable="false"><use href="#cat-{{category}}"></use></svg><span>{{title}}</span></div>
|
|
367
|
-
{{#isUnwritten}}<div class="item-desc unwritten">unwritten</div>{{/isUnwritten}}
|
|
368
|
-
{{^isUnwritten}}<div class="item-desc">{{{descriptionHtml}}}</div>{{/isUnwritten}}
|
|
369
|
-
<span class="pill {{category}}">{{categoryLabel}}</span>
|
|
370
|
-
</li>
|
|
371
|
-
{{/highlights}}
|
|
372
|
-
</ol>
|
|
373
|
-
</section>
|
|
374
|
-
{{/corrections}}
|
|
375
|
-
{{/hasCorrections}}
|
|
376
|
-
|
|
377
|
-
{{#hasParked}}
|
|
378
|
-
<section class="phase" aria-labelledby="parked-heading">
|
|
379
|
-
<div class="phase-label"><h2 id="parked-heading">Parked — needs operator</h2><span class="rule" aria-hidden="true"></span></div>
|
|
380
|
-
<ul class="parked-list">
|
|
381
|
-
{{#parked}}
|
|
382
|
-
<li><strong>{{title}}</strong> — {{reason}}</li>
|
|
383
|
-
{{/parked}}
|
|
384
|
-
</ul>
|
|
385
|
-
</section>
|
|
386
|
-
{{/hasParked}}
|
|
387
|
-
|
|
388
|
-
{{#hasCast}}
|
|
389
|
-
<section class="phase" aria-labelledby="cast-heading">
|
|
390
|
-
<div class="phase-label"><h2 id="cast-heading">Cast</h2><span class="rule" aria-hidden="true"></span></div>
|
|
391
|
-
<p class="phase-note">Self-reported from commit trailers in this program's version window.</p>
|
|
392
|
-
<ul class="cast-list">
|
|
393
|
-
{{#cast}}
|
|
394
|
-
<li>{{name}} — {{commits}} commits</li>
|
|
395
|
-
{{/cast}}
|
|
396
|
-
</ul>
|
|
397
|
-
</section>
|
|
398
|
-
{{/hasCast}}
|
|
399
|
-
|
|
400
|
-
</main>
|
|
401
|
-
|
|
402
|
-
<footer class="colophon">
|
|
403
|
-
Compiled {{compiledAtDate}} from <code>{{sourcesJoined}}</code>. Program <code>{{program.slug}}</code>, status <code>{{program.status}}</code>{{#hasVersionSpan}}, <code>{{program.versionSpan.from}}</code> → <code>{{program.versionSpan.to}}</code>{{/hasVersionSpan}}. Template <code>{{colophon.templateVersion}}</code>. Every stat above is derived, never hand-typed.
|
|
404
|
-
</footer>
|
|
405
|
-
|
|
406
|
-
</div>
|
|
13
|
+
<svg width="0" height="0" style="position:absolute;width:0;height:0" aria-hidden="true" focusable="false"><symbol id="cat-spell" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75v3.5M8 10.75v3.5M1.75 8h3.5M10.75 8h3.5M3.6 3.6l2.4 2.4M10 10l2.4 2.4M12.4 3.6 10 6M6 10l-2.4 2.4"></path></symbol><symbol id="cat-feature" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="11.5" rx="1"></rect><path d="M8 5.25v5.5M5.25 8h5.5"></path></symbol><symbol id="cat-governance" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.25 3.75v4.2c0 3.05-2.2 5.3-5.25 6.3-3.05-1-5.25-3.25-5.25-6.3v-4.2z"></path></symbol><symbol id="cat-decision" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 14.25 8 8 14.25 1.75 8z"></path></symbol><symbol id="cat-fix" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 1.75 13.4 4.9v6.2L8 14.25 2.6 11.1V4.9z"></path><circle cx="8" cy="8" r="2.25"></circle></symbol><symbol id="cat-process" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M13 8a5 5 0 0 1-8.65 3.45M3 8a5 5 0 0 1 8.65-3.45"></path><path d="M11.65 2.15v2.4h-2.4M4.35 13.85v-2.4h2.4"></path></symbol><symbol id="cat-docs" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.75 1.75h5.75l2.75 2.75v9.75h-8.5z"></path><path d="M9.5 1.75v3h3M6 8h4M6 10.75h4"></path></symbol><symbol id="cat-platform" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.25" y="2.25" width="11.5" height="3.75" rx=".75"></rect><rect x="2.25" y="8.25" width="11.5" height="3.75" rx=".75"></rect><path d="M4.75 4.1h.01M4.75 10.1h.01"></path><path d="M8 12v2.25"></path></symbol></svg><main><div><div style="display:flex;align-items:baseline;gap:12px;margin-bottom:16px"><span style="font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-50)">{{masthead.eyebrow}}</span><span aria-hidden="true" style="flex-grow:1;height:1px;background:var(--ink-10)"></span><span style="font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-50)">{{program.slug}}</span></div><h1 style="font-family:var(--f-display);font-weight:600;font-size:30px;line-height:1.15;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-90);margin:0 0 10px;max-width:24ch">{{masthead.title}}</h1><p style="font-family:var(--f-ui);font-size:15px;color:var(--ink-60);margin:0 0 14px;max-width:62ch">{{masthead.dek}}</p><div style="display:flex;flex-wrap:wrap;gap:6px 18px;font-family:var(--f-mono);font-size:11px;color:var(--ink-70);margin-bottom:26px"><span><span style="color:var(--ink-50)">status</span> <span style="color:var(--signal-ok)">{{program.status}}</span></span><span><span style="color:var(--ink-50)">started</span> {{program.started}}</span><span><span style="color:var(--ink-50)">completed</span> {{program.completed}}</span><span><span style="color:var(--ink-50)">baseline</span> {{program.baseline}}</span></div></div><div style="margin-bottom:20px"><dl style="display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0, 1fr);gap:1px;background:var(--ink-10);border:1px solid var(--ink-30);border-radius:var(--r-corner);margin:0">{{#stats}}<div style="background:var(--bg);display:flex;flex-direction:column-reverse"><dt style="margin:4px 16px 14px;font-family:var(--f-display);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-60)">{{label}}</dt><dd style="margin:0"><div class="arc-stat-tile arc-stat-tile--sm" style="padding:14px 16px;padding-bottom:0"><div class="arc-num" style="font-size:26px;font-weight:700;line-height:1;color:var(--ink-100);font-variant-numeric:tabular-nums;letter-spacing:-.01em">{{value}}</div></div></dd></div>{{/stats}}</dl></div><div style="display:flex;gap:12px;align-items:stretch;margin-bottom:26px"><div style="flex-grow:1"><div style="margin-bottom:26px">{{#needsYouCount}}<div style="display:flex;align-items:baseline;gap:10px;margin-bottom:8px"><h2 style="font-family:var(--f-display);font-weight:600;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-90);margin:0">Needs you</h2><span style="font-family:var(--f-mono);font-size:11px;color:var(--ink-50)">{{needsYouCount}} open</span></div><ul style="list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px">{{#needsYou}}<li style="border:1px solid var(--ink-15);border-left:2px solid var(--signal-warn);border-radius:var(--r-corner);background:var(--bg-1);padding:12px 16px">{{#href}}<a href="{{href}}" style="color:var(--accent)">{{title}}</a>{{/href}}{{^href}}<span style="color:var(--ink-90)">{{title}}</span>{{/href}}</li>{{/needsYou}}</ul>{{/needsYouCount}}{{^needsYouCount}}<div style="border:1px solid var(--ink-15);border-left:2px solid var(--signal-ok);border-radius:var(--r-corner);background:var(--bg-1);padding:12px 16px;display:flex;align-items:center;gap:10px"><span aria-hidden="true" style="display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--signal-ok)"></span><span style="font-family:var(--f-display);font-size:13px;letter-spacing:.04em;text-transform:uppercase;color:var(--signal-ok)">Nothing needs you</span></div>{{/needsYouCount}}</div></div>{{#hasOutcome}}<div style="border:1px solid var(--ink-15);border-radius:var(--r-corner);background:var(--bg-1);padding:12px 16px;display:flex;align-items:center;font-family:var(--f-mono);font-size:11px;color:var(--ink-70)">{{outcome}}</div>{{/hasOutcome}}</div><div style="display:flex;flex-wrap:wrap;gap:8px 16px;padding:12px 0;border-top:1px solid var(--ink-10);border-bottom:1px solid var(--ink-10);margin-bottom:26px">{{#legend}}<span style="display:inline-flex;align-items:center;gap:6px;font-family:var(--f-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-50)"><span style="color:var(--cat-{{key}})"><svg width="12" height="12" aria-hidden="true" focusable="false"><use href="#cat-{{key}}"></use></svg></span>{{label}}</span>{{/legend}}</div>{{#sections}}<div style="border:1px solid var(--ink-30);border-radius:var(--r-corner);background:var(--bg);margin-bottom:18px"><div style="display:flex;align-items:center;gap:10px;padding:9px 14px;border-bottom:1px solid var(--ink-10);background:var(--bg-1)"><h2 style="font-family:var(--f-display);font-weight:600;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-90);margin:0">{{title}}</h2><span style="flex-grow:1"></span><span style="font-family:var(--f-mono);font-size:10px;color:var(--ink-50)">{{rowCount}}</span></div><ol style="list-style:none;margin:0;padding:0">{{#rows}}<li style="border-bottom:1px solid var(--ink-10)"><div style="display:grid;grid-template-columns:68px 1fr 128px;gap:14px;padding:13px 14px;align-items:start">{{#hasHref}}<a href="{{href}}" style="font-family:var(--f-mono);font-size:11px;color:var(--accent)">{{id}}</a>{{/hasHref}}{{^hasHref}}<span style="font-family:var(--f-mono);font-size:11px;color:var(--ink-50)">{{id}}</span>{{/hasHref}}<div><div style="font-family:var(--f-display);font-weight:600;font-size:13px;letter-spacing:.03em;text-transform:uppercase;color:var(--ink-90);margin-bottom:4px">{{title}}</div><div style="font-family:var(--f-ui);font-size:14px;line-height:1.45;color:var(--ink-60);font-style:normal;max-width:58ch">{{#isUnwritten}}<span class="unwritten">unwritten</span>{{/isUnwritten}}{{^isUnwritten}}{{{descriptionHtml}}}{{/isUnwritten}}</div></div><span class="arc-pill" style="color:var(--cat-{{category}});border-color:color-mix(in srgb, var(--cat-{{category}}) 50%, transparent);justify-self:end"><svg width="12" height="12" aria-hidden="true" focusable="false"><use href="#cat-{{category}}"></use></svg>{{categoryLabel}}</span></div></li>{{/rows}}</ol></div>{{/sections}}{{#hasCorrections}}{{#corrections}}<div style="border:1px solid var(--ink-15);border-radius:var(--r-corner);background:var(--bg-1);padding:14px 16px;margin-bottom:18px"><div style="display:flex;align-items:baseline;gap:10px;margin-bottom:8px"><h2 style="font-family:var(--f-display);font-weight:600;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-90);margin:0">Calibration</h2><span style="font-family:var(--f-mono);font-size:11px;color:var(--ink-50)">{{checked}} checked · {{corrected}} corrected · {{unverifiable}} unverifiable</span></div><div style="font-family:var(--f-ui);font-size:14px;line-height:1.45;color:var(--ink-60);max-width:62ch;margin-bottom:12px">{{scopeNote}}</div><div style="display:flex;flex-direction:column;gap:10px;border-top:1px solid var(--ink-10);padding-top:12px">{{#highlights}}<div style="display:grid;grid-template-columns:84px 1fr;gap:12px;align-items:baseline"><span style="font-family:var(--f-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--signal-warn)">{{categoryLabel}}</span><div><div style="font-family:var(--f-display);font-weight:600;font-size:12px;letter-spacing:.02em;color:var(--ink-90);margin-bottom:3px">{{title}}</div><div style="font-family:var(--f-ui);font-size:14px;line-height:1.45;color:var(--ink-60);font-style:normal;max-width:62ch">{{#isUnwritten}}<span class="unwritten">unwritten</span>{{/isUnwritten}}{{^isUnwritten}}{{{descriptionHtml}}}{{/isUnwritten}}</div></div></div>{{/highlights}}</div></div>{{/corrections}}{{/hasCorrections}}{{#hasParked}}<div style="border:1px solid var(--ink-15);border-radius:var(--r-corner);background:var(--bg);padding:14px 16px;margin-bottom:26px"><div style="display:flex;align-items:baseline;gap:10px;margin-bottom:10px"><h2 style="font-family:var(--f-display);font-weight:600;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-90);margin:0">Parked</h2><span style="font-family:var(--f-mono);font-size:11px;color:var(--ink-50)">{{parkedCount}} items · deliberately not built</span></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px 24px">{{#parked}}<div style="display:grid;grid-template-columns:8px 1fr;gap:10px;align-items:baseline;font-family:var(--f-ui);font-size:13px;line-height:1.4;color:var(--ink-60)"><span aria-hidden="true" style="width:8px;height:1px;background:var(--ink-30);align-self:center"></span><span><span style="color:var(--ink-80);font-weight:600">{{title}}</span> — {{reason}}</span></div>{{/parked}}</div></div>{{/hasParked}}</main><footer style="display:grid;grid-template-columns:1fr 1.4fr;gap:24px;padding-top:16px;border-top:1px solid var(--ink-10)">{{#hasCast}}<div><h2 style="font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-50);margin:0 0 8px">Cast</h2><div style="display:flex;flex-direction:column;gap:4px;font-family:var(--f-mono);font-size:11px;color:var(--ink-70)">{{#cast}}<div style="display:flex;justify-content:space-between;gap:12px;max-width:220px"><span>{{name}}</span><span style="color:var(--ink-50);font-variant-numeric:tabular-nums">{{commits}} commits</span></div>{{/cast}}</div></div>{{/hasCast}}<div><h2 style="font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-50);margin:0 0 8px">Provenance</h2><div style="font-family:var(--f-mono);font-size:11px;line-height:1.7;color:var(--ink-50)">compiled from {{sourcesJoined}}<br/>as of {{compiledAtDate}} · template {{provenance.templateVersion}} · schema {{schemaVersion}} · no runtime scripts</div></div></footer>
|
|
407
14
|
</body>
|
|
408
15
|
</html>
|
package/dist/index.js
CHANGED
|
@@ -5512,7 +5512,7 @@ async function buildShowReportModel(options) {
|
|
|
5512
5512
|
const title = frontmatter.title ?? options.slug;
|
|
5513
5513
|
const corrections = buildCorrections(ledgerRows, options.ledgerProgramName);
|
|
5514
5514
|
return {
|
|
5515
|
-
schemaVersion:
|
|
5515
|
+
schemaVersion: 2,
|
|
5516
5516
|
program: {
|
|
5517
5517
|
id: options.slug,
|
|
5518
5518
|
slug: options.slug,
|
|
@@ -5535,7 +5535,7 @@ async function buildShowReportModel(options) {
|
|
|
5535
5535
|
...corrections ? { corrections } : {},
|
|
5536
5536
|
parked,
|
|
5537
5537
|
cast: [...cast.entries()].map(([name, commits]) => ({ name, commits, source: "commit-trailer" })),
|
|
5538
|
-
|
|
5538
|
+
provenance: {
|
|
5539
5539
|
sources: [options.planRelPath, options.queueRelPath, ledgerRelPath],
|
|
5540
5540
|
compiledAt: options.compiledAt,
|
|
5541
5541
|
templateVersion: options.templateVersion
|
|
@@ -5606,9 +5606,9 @@ function buildShowReportView(model) {
|
|
|
5606
5606
|
hasOutcome: typeof model.outcome === "string" && model.outcome.length > 0,
|
|
5607
5607
|
hasVersionSpan: model.program.versionSpan !== void 0,
|
|
5608
5608
|
needsYouCount: model.needsYou.length,
|
|
5609
|
-
compiledAtDate: model.
|
|
5609
|
+
compiledAtDate: model.provenance.compiledAt.slice(0, 10),
|
|
5610
5610
|
legend: CATEGORY_ORDER.map((key) => ({ key, label: CATEGORY_LABELS[key] })),
|
|
5611
|
-
sourcesJoined: model.
|
|
5611
|
+
sourcesJoined: model.provenance.sources.join(", ")
|
|
5612
5612
|
};
|
|
5613
5613
|
}
|
|
5614
5614
|
function renderShowReport(model, templateHtml) {
|