projscan 4.0.0 → 4.2.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/README.md +480 -24
- package/dist/cli/commands/route.js +1 -0
- package/dist/cli/commands/route.js.map +1 -1
- package/dist/cli/commands/semanticGraph.js +27 -0
- package/dist/cli/commands/semanticGraph.js.map +1 -1
- package/dist/cli/commands/start.js +1095 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/core/dependencyAnalyzer.js +172 -0
- package/dist/core/dependencyAnalyzer.js.map +1 -1
- package/dist/core/intentRouter.d.ts +8 -1
- package/dist/core/intentRouter.js +2186 -22
- package/dist/core/intentRouter.js.map +1 -1
- package/dist/core/issueEngine.js +6 -7
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/onboarding.d.ts +2 -2
- package/dist/core/onboarding.js +29 -5
- package/dist/core/onboarding.js.map +1 -1
- package/dist/core/start.d.ts +1 -0
- package/dist/core/start.js +3047 -10
- package/dist/core/start.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +14 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/start.js +6 -1
- package/dist/mcp/tools/start.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/reporters/consoleReporter.js +19 -0
- package/dist/reporters/consoleReporter.js.map +1 -1
- package/dist/reporters/markdownReporter.js +19 -0
- package/dist/reporters/markdownReporter.js.map +1 -1
- package/dist/tool-manifest.json +6 -2
- package/dist/types.d.ts +275 -0
- package/docs/GUIDE.md +1567 -0
- package/docs/ROADMAP.md +219 -0
- package/docs/demos/projscan-4-1-demo.html +677 -0
- package/docs/projscan-mission-control.png +0 -0
- package/docs/projscan-proof-router.png +0 -0
- package/package.json +8 -1
- package/scripts/capture-readme-assets.mjs +60 -0
|
@@ -0,0 +1,677 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>projscan Mission Control README capture</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: light;
|
|
10
|
+
--paper: #f4f1ea;
|
|
11
|
+
--panel: #fffdf8;
|
|
12
|
+
--ink: #17202a;
|
|
13
|
+
--muted: #5d6673;
|
|
14
|
+
--line: #d9d1c2;
|
|
15
|
+
--terminal: #111418;
|
|
16
|
+
--terminal-line: #2b3139;
|
|
17
|
+
--terminal-muted: #8d98a8;
|
|
18
|
+
--green: #247a52;
|
|
19
|
+
--green-soft: #e6f4ec;
|
|
20
|
+
--blue: #2f5f90;
|
|
21
|
+
--blue-soft: #e4eef8;
|
|
22
|
+
--amber: #9b5a00;
|
|
23
|
+
--amber-soft: #fff2d8;
|
|
24
|
+
--red: #a5403a;
|
|
25
|
+
--red-soft: #fae7e4;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
* {
|
|
29
|
+
box-sizing: border-box;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
body {
|
|
33
|
+
margin: 0;
|
|
34
|
+
background: var(--paper);
|
|
35
|
+
color: var(--ink);
|
|
36
|
+
font-family:
|
|
37
|
+
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
|
38
|
+
"Segoe UI", sans-serif;
|
|
39
|
+
line-height: 1.45;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.page {
|
|
43
|
+
width: min(1280px, calc(100vw - 80px));
|
|
44
|
+
margin: 0 auto;
|
|
45
|
+
padding: 42px 0 72px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.hero {
|
|
49
|
+
display: grid;
|
|
50
|
+
grid-template-columns: minmax(0, 0.92fr) minmax(620px, 1.08fr);
|
|
51
|
+
gap: 28px;
|
|
52
|
+
align-items: stretch;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.intro {
|
|
56
|
+
padding: 8px 4px 0;
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
justify-content: space-between;
|
|
60
|
+
min-height: 620px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.eyebrow {
|
|
64
|
+
margin: 0 0 18px;
|
|
65
|
+
color: var(--blue);
|
|
66
|
+
font-size: 14px;
|
|
67
|
+
font-weight: 800;
|
|
68
|
+
text-transform: uppercase;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
h1,
|
|
72
|
+
h2,
|
|
73
|
+
h3,
|
|
74
|
+
p {
|
|
75
|
+
margin-top: 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
h1 {
|
|
79
|
+
max-width: 540px;
|
|
80
|
+
margin-bottom: 22px;
|
|
81
|
+
font-size: 58px;
|
|
82
|
+
line-height: 1.02;
|
|
83
|
+
letter-spacing: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.lead {
|
|
87
|
+
max-width: 560px;
|
|
88
|
+
margin-bottom: 28px;
|
|
89
|
+
color: var(--muted);
|
|
90
|
+
font-size: 21px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.pills {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-wrap: wrap;
|
|
96
|
+
gap: 10px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.pill {
|
|
100
|
+
min-height: 34px;
|
|
101
|
+
padding: 7px 12px;
|
|
102
|
+
border: 1px solid var(--line);
|
|
103
|
+
border-radius: 999px;
|
|
104
|
+
background: rgba(255, 253, 248, 0.72);
|
|
105
|
+
color: var(--ink);
|
|
106
|
+
font-size: 14px;
|
|
107
|
+
font-weight: 700;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.metric-row {
|
|
111
|
+
display: grid;
|
|
112
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
113
|
+
gap: 12px;
|
|
114
|
+
margin-top: 38px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.metric {
|
|
118
|
+
min-height: 116px;
|
|
119
|
+
padding: 16px;
|
|
120
|
+
border: 1px solid var(--line);
|
|
121
|
+
border-radius: 8px;
|
|
122
|
+
background: var(--panel);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.metric strong {
|
|
126
|
+
display: block;
|
|
127
|
+
margin-bottom: 4px;
|
|
128
|
+
font-size: 27px;
|
|
129
|
+
line-height: 1;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.metric span {
|
|
133
|
+
color: var(--muted);
|
|
134
|
+
font-size: 13px;
|
|
135
|
+
font-weight: 700;
|
|
136
|
+
text-transform: uppercase;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.terminal {
|
|
140
|
+
overflow: hidden;
|
|
141
|
+
border: 1px solid #262d34;
|
|
142
|
+
border-radius: 8px;
|
|
143
|
+
background: var(--terminal);
|
|
144
|
+
color: #edf2f7;
|
|
145
|
+
box-shadow: 0 18px 45px rgba(23, 32, 42, 0.18);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.terminal-bar {
|
|
149
|
+
display: flex;
|
|
150
|
+
align-items: center;
|
|
151
|
+
gap: 9px;
|
|
152
|
+
height: 42px;
|
|
153
|
+
padding: 0 16px;
|
|
154
|
+
border-bottom: 1px solid var(--terminal-line);
|
|
155
|
+
color: var(--terminal-muted);
|
|
156
|
+
font-size: 13px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.dot {
|
|
160
|
+
width: 10px;
|
|
161
|
+
height: 10px;
|
|
162
|
+
border-radius: 50%;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.dot.red {
|
|
166
|
+
background: #ef6a5b;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.dot.amber {
|
|
170
|
+
background: #f4bf4f;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.dot.green {
|
|
174
|
+
background: #63c554;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.terminal-title {
|
|
178
|
+
margin-left: 8px;
|
|
179
|
+
font-weight: 700;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.terminal-body {
|
|
183
|
+
padding: 26px;
|
|
184
|
+
font-family:
|
|
185
|
+
"SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
|
|
186
|
+
font-size: 15px;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.prompt {
|
|
190
|
+
color: #9ad8b1;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.cmd {
|
|
194
|
+
color: #ffffff;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.dim {
|
|
198
|
+
color: var(--terminal-muted);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.term-section {
|
|
202
|
+
margin-top: 22px;
|
|
203
|
+
padding-top: 18px;
|
|
204
|
+
border-top: 1px solid var(--terminal-line);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.term-heading {
|
|
208
|
+
color: #ffd58a;
|
|
209
|
+
font-weight: 800;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.line {
|
|
213
|
+
display: block;
|
|
214
|
+
min-height: 22px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.success {
|
|
218
|
+
color: #9ad8b1;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.notice {
|
|
222
|
+
color: #90c7ff;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.warn {
|
|
226
|
+
color: #ffd58a;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.grid {
|
|
230
|
+
display: grid;
|
|
231
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
232
|
+
gap: 18px;
|
|
233
|
+
margin-top: 30px;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.card {
|
|
237
|
+
min-height: 196px;
|
|
238
|
+
padding: 20px;
|
|
239
|
+
border: 1px solid var(--line);
|
|
240
|
+
border-radius: 8px;
|
|
241
|
+
background: var(--panel);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.label {
|
|
245
|
+
display: inline-flex;
|
|
246
|
+
align-items: center;
|
|
247
|
+
min-height: 28px;
|
|
248
|
+
margin-bottom: 16px;
|
|
249
|
+
padding: 4px 9px;
|
|
250
|
+
border-radius: 999px;
|
|
251
|
+
font-size: 12px;
|
|
252
|
+
font-weight: 800;
|
|
253
|
+
text-transform: uppercase;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.label.green {
|
|
257
|
+
background: var(--green-soft);
|
|
258
|
+
color: var(--green);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.label.blue {
|
|
262
|
+
background: var(--blue-soft);
|
|
263
|
+
color: var(--blue);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.label.amber {
|
|
267
|
+
background: var(--amber-soft);
|
|
268
|
+
color: var(--amber);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.card h2,
|
|
272
|
+
.card h3 {
|
|
273
|
+
margin-bottom: 10px;
|
|
274
|
+
font-size: 24px;
|
|
275
|
+
line-height: 1.16;
|
|
276
|
+
letter-spacing: 0;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.card p {
|
|
280
|
+
margin-bottom: 0;
|
|
281
|
+
color: var(--muted);
|
|
282
|
+
font-size: 15px;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.proof {
|
|
286
|
+
padding-top: 74px;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.proof-header {
|
|
290
|
+
display: grid;
|
|
291
|
+
grid-template-columns: minmax(0, 0.78fr) minmax(0, 1.22fr);
|
|
292
|
+
gap: 24px;
|
|
293
|
+
align-items: end;
|
|
294
|
+
margin-bottom: 24px;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.proof-header h2 {
|
|
298
|
+
margin-bottom: 10px;
|
|
299
|
+
font-size: 44px;
|
|
300
|
+
line-height: 1.06;
|
|
301
|
+
letter-spacing: 0;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.proof-header p {
|
|
305
|
+
margin-bottom: 0;
|
|
306
|
+
color: var(--muted);
|
|
307
|
+
font-size: 18px;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.workflow {
|
|
311
|
+
display: grid;
|
|
312
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
313
|
+
gap: 22px;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.compact-terminal .terminal-body {
|
|
317
|
+
min-height: 390px;
|
|
318
|
+
padding: 22px;
|
|
319
|
+
font-size: 14px;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.signal-list {
|
|
323
|
+
display: grid;
|
|
324
|
+
gap: 12px;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.signal {
|
|
328
|
+
display: grid;
|
|
329
|
+
grid-template-columns: 124px minmax(0, 1fr);
|
|
330
|
+
gap: 14px;
|
|
331
|
+
align-items: start;
|
|
332
|
+
padding: 16px;
|
|
333
|
+
border: 1px solid var(--line);
|
|
334
|
+
border-radius: 8px;
|
|
335
|
+
background: var(--panel);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.signal strong {
|
|
339
|
+
display: block;
|
|
340
|
+
color: var(--ink);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.signal span:not(.tag) {
|
|
344
|
+
color: var(--muted);
|
|
345
|
+
font-size: 14px;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.tag {
|
|
349
|
+
width: 124px;
|
|
350
|
+
min-height: 30px;
|
|
351
|
+
padding: 6px 8px;
|
|
352
|
+
border-radius: 6px;
|
|
353
|
+
color: #fff;
|
|
354
|
+
font-size: 12px;
|
|
355
|
+
font-weight: 800;
|
|
356
|
+
text-align: center;
|
|
357
|
+
text-transform: uppercase;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.tag.green {
|
|
361
|
+
background: var(--green);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.tag.blue {
|
|
365
|
+
background: var(--blue);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.tag.amber {
|
|
369
|
+
background: var(--amber);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.tag.red {
|
|
373
|
+
background: var(--red);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
@media (max-width: 980px) {
|
|
377
|
+
.page {
|
|
378
|
+
width: min(100% - 32px, 760px);
|
|
379
|
+
padding-top: 28px;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.hero,
|
|
383
|
+
.proof-header,
|
|
384
|
+
.workflow,
|
|
385
|
+
.grid {
|
|
386
|
+
grid-template-columns: 1fr;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.intro {
|
|
390
|
+
min-height: auto;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
h1 {
|
|
394
|
+
font-size: 42px;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.metric-row {
|
|
398
|
+
grid-template-columns: 1fr;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.terminal-body {
|
|
402
|
+
overflow-x: auto;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
body.proof-only .hero,
|
|
407
|
+
body.proof-only .grid {
|
|
408
|
+
display: none;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
body.proof-only .proof {
|
|
412
|
+
padding-top: 0;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
body.proof-only .proof-header {
|
|
416
|
+
margin-top: 0;
|
|
417
|
+
}
|
|
418
|
+
</style>
|
|
419
|
+
</head>
|
|
420
|
+
<body>
|
|
421
|
+
<main class="page">
|
|
422
|
+
<section class="hero" aria-label="projscan Mission Control">
|
|
423
|
+
<div class="intro">
|
|
424
|
+
<div>
|
|
425
|
+
<p class="eyebrow">Developer-life upgrade</p>
|
|
426
|
+
<h1>Tell projscan what you are doing.</h1>
|
|
427
|
+
<p class="lead">
|
|
428
|
+
projscan routes a developer goal to the next safe command, the
|
|
429
|
+
MCP call an agent can run, and the proof that makes a handoff
|
|
430
|
+
reviewable.
|
|
431
|
+
</p>
|
|
432
|
+
<div class="pills" aria-label="Product capabilities">
|
|
433
|
+
<span class="pill">Mission Control</span>
|
|
434
|
+
<span class="pill">Local-first</span>
|
|
435
|
+
<span class="pill">MCP-ready</span>
|
|
436
|
+
<span class="pill">Copyable handoff</span>
|
|
437
|
+
<span class="pill">Review gate</span>
|
|
438
|
+
</div>
|
|
439
|
+
</div>
|
|
440
|
+
|
|
441
|
+
<div class="metric-row" aria-label="Release candidate signals">
|
|
442
|
+
<div class="metric">
|
|
443
|
+
<strong>1 call</strong>
|
|
444
|
+
<span>intent to workflow</span>
|
|
445
|
+
</div>
|
|
446
|
+
<div class="metric">
|
|
447
|
+
<strong>1 JSON</strong>
|
|
448
|
+
<span>next MCP call</span>
|
|
449
|
+
</div>
|
|
450
|
+
<div class="metric">
|
|
451
|
+
<strong>0</strong>
|
|
452
|
+
<span>source uploads</span>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
|
|
457
|
+
<section class="terminal" aria-label="Mission Control terminal output">
|
|
458
|
+
<div class="terminal-bar">
|
|
459
|
+
<span class="dot red"></span>
|
|
460
|
+
<span class="dot amber"></span>
|
|
461
|
+
<span class="dot green"></span>
|
|
462
|
+
<span class="terminal-title">projscan start shortcuts</span>
|
|
463
|
+
</div>
|
|
464
|
+
<div class="terminal-body">
|
|
465
|
+
<span class="line"
|
|
466
|
+
><span class="prompt">$</span>
|
|
467
|
+
<span class="cmd"
|
|
468
|
+
>projscan start --intent "what breaks if I rename the auth
|
|
469
|
+
token loader"</span
|
|
470
|
+
></span
|
|
471
|
+
>
|
|
472
|
+
<span class="line dim">ProjScan Mission Control</span>
|
|
473
|
+
<span class="line">Intent: what breaks if I rename the auth token loader</span>
|
|
474
|
+
<span class="line">Status: <span class="warn">needs_attention</span></span>
|
|
475
|
+
<span class="line"
|
|
476
|
+
>Route:
|
|
477
|
+
<span class="notice">Impact analysis via projscan_search</span></span
|
|
478
|
+
>
|
|
479
|
+
<span class="line dim"
|
|
480
|
+
>confidence: high; matched: breaks, rename</span
|
|
481
|
+
>
|
|
482
|
+
|
|
483
|
+
<div class="term-section">
|
|
484
|
+
<span class="line term-heading">Run Cursor</span>
|
|
485
|
+
<span class="line"
|
|
486
|
+
>command: projscan search "auth token loader" --format
|
|
487
|
+
json</span
|
|
488
|
+
>
|
|
489
|
+
<span class="line"
|
|
490
|
+
>MCP call: projscan_search {"query":"auth token loader"}</span
|
|
491
|
+
>
|
|
492
|
+
<span class="line">unlocks: symbol input, file input</span>
|
|
493
|
+
</div>
|
|
494
|
+
|
|
495
|
+
<div class="term-section">
|
|
496
|
+
<span class="line term-heading">Copyable Shortcuts</span>
|
|
497
|
+
<span class="line success"
|
|
498
|
+
>projscan start --shortcuts --intent "..."</span
|
|
499
|
+
>
|
|
500
|
+
<span class="line success"
|
|
501
|
+
>projscan start --next-command --intent "..."</span
|
|
502
|
+
>
|
|
503
|
+
<span class="line success"
|
|
504
|
+
>projscan start --next-tool-call --intent "..."</span
|
|
505
|
+
>
|
|
506
|
+
<span class="line success"
|
|
507
|
+
>projscan start --task-card --intent "..."</span
|
|
508
|
+
>
|
|
509
|
+
<span class="line success"
|
|
510
|
+
>projscan start --mission-script --intent "..."</span
|
|
511
|
+
>
|
|
512
|
+
<span class="line success"
|
|
513
|
+
>projscan start --review-gate --intent "..."</span
|
|
514
|
+
>
|
|
515
|
+
<span class="line success"
|
|
516
|
+
>projscan start --save-mission .projscan/mission --intent
|
|
517
|
+
"..."</span
|
|
518
|
+
>
|
|
519
|
+
<span class="line dim">writes task card, review gate, mission.sh</span>
|
|
520
|
+
</div>
|
|
521
|
+
|
|
522
|
+
<div class="term-section">
|
|
523
|
+
<span class="line term-heading">Ready Proof</span>
|
|
524
|
+
<span class="line success"
|
|
525
|
+
>- projscan preflight --mode before_edit --format json</span
|
|
526
|
+
>
|
|
527
|
+
<span class="line success"
|
|
528
|
+
>- projscan understand --view verify --format json</span
|
|
529
|
+
>
|
|
530
|
+
</div>
|
|
531
|
+
|
|
532
|
+
<div class="term-section">
|
|
533
|
+
<span class="line term-heading">Done When</span>
|
|
534
|
+
<span class="line"
|
|
535
|
+
>- Search returns an exact symbol or file path</span
|
|
536
|
+
>
|
|
537
|
+
<span class="line"
|
|
538
|
+
>- Impact is reviewed before code edits</span
|
|
539
|
+
>
|
|
540
|
+
</div>
|
|
541
|
+
|
|
542
|
+
<div class="term-section">
|
|
543
|
+
<span class="line term-heading">Review Gate</span>
|
|
544
|
+
<span class="line">capture: git status --short</span>
|
|
545
|
+
<span class="line">capture: git diff --stat</span>
|
|
546
|
+
<span class="line success">reply: Approved, one bounded slice</span>
|
|
547
|
+
<span class="line warn">stop before another slice or release</span>
|
|
548
|
+
</div>
|
|
549
|
+
</div>
|
|
550
|
+
</section>
|
|
551
|
+
</section>
|
|
552
|
+
|
|
553
|
+
<section class="grid" aria-label="New developer workflows">
|
|
554
|
+
<article class="card">
|
|
555
|
+
<span class="label green">Goal routing</span>
|
|
556
|
+
<h2>Ask in human language.</h2>
|
|
557
|
+
<p>
|
|
558
|
+
Route privacy, merge readiness, refactor risk, local setup,
|
|
559
|
+
ownership, dependency, release, and handoff questions to the right
|
|
560
|
+
command with matched keywords and confidence.
|
|
561
|
+
</p>
|
|
562
|
+
</article>
|
|
563
|
+
<article class="card">
|
|
564
|
+
<span class="label blue">Repo context</span>
|
|
565
|
+
<h2>Start from cited evidence.</h2>
|
|
566
|
+
<p>
|
|
567
|
+
Repo maps now include read-first files, package contracts, runtime
|
|
568
|
+
flows, public exports, proof tiers, setup commands, and unknowns
|
|
569
|
+
that need human input.
|
|
570
|
+
</p>
|
|
571
|
+
</article>
|
|
572
|
+
<article class="card">
|
|
573
|
+
<span class="label amber">Review proof</span>
|
|
574
|
+
<h2>Make PRs easier to approve.</h2>
|
|
575
|
+
<p>
|
|
576
|
+
Mission Control carries the original intent into preflight,
|
|
577
|
+
verification, session memory, evidence packs, and reviewer-ready
|
|
578
|
+
next commands.
|
|
579
|
+
</p>
|
|
580
|
+
</article>
|
|
581
|
+
</section>
|
|
582
|
+
|
|
583
|
+
<section class="proof" id="proof" aria-label="Proof and dependency view">
|
|
584
|
+
<div class="proof-header">
|
|
585
|
+
<div>
|
|
586
|
+
<p class="eyebrow">Intent, graph, and handoff intelligence</p>
|
|
587
|
+
<h2>Copy the next move.</h2>
|
|
588
|
+
</div>
|
|
589
|
+
<p>
|
|
590
|
+
Developers and agents can list the shortcut menu, pull the next
|
|
591
|
+
shell command, fetch the MCP call, or copy the checklist and
|
|
592
|
+
Markdown runbook without reading the full report.
|
|
593
|
+
</p>
|
|
594
|
+
</div>
|
|
595
|
+
|
|
596
|
+
<div class="workflow">
|
|
597
|
+
<section class="terminal compact-terminal" aria-label="Intent router">
|
|
598
|
+
<div class="terminal-bar">
|
|
599
|
+
<span class="dot red"></span>
|
|
600
|
+
<span class="dot amber"></span>
|
|
601
|
+
<span class="dot green"></span>
|
|
602
|
+
<span class="terminal-title">projscan start --next-tool-call</span>
|
|
603
|
+
</div>
|
|
604
|
+
<div class="terminal-body">
|
|
605
|
+
<span class="line"
|
|
606
|
+
><span class="prompt">$</span>
|
|
607
|
+
<span class="cmd"
|
|
608
|
+
>projscan start --next-tool-call --intent "what breaks if I
|
|
609
|
+
rename the auth token loader"</span
|
|
610
|
+
></span
|
|
611
|
+
>
|
|
612
|
+
<span class="line dim">Current cursor as MCP JSON</span>
|
|
613
|
+
<span class="line"> </span>
|
|
614
|
+
<span class="line term-heading">{"tool":"projscan_search",</span>
|
|
615
|
+
<span class="line success"
|
|
616
|
+
> "args":{"query":"auth token loader"}}</span
|
|
617
|
+
>
|
|
618
|
+
<span class="line"> </span>
|
|
619
|
+
<span class="line term-heading">Checklist handoff</span>
|
|
620
|
+
<span class="line success"
|
|
621
|
+
>- [ready] run_current ready-1</span
|
|
622
|
+
>
|
|
623
|
+
<span class="line success"
|
|
624
|
+
>- [blocked] resolve_input input-1</span
|
|
625
|
+
>
|
|
626
|
+
<span class="line success">- [ready] run_proof proof-2</span>
|
|
627
|
+
<span class="line notice"
|
|
628
|
+
>Review gate: capture status, diff, then wait.</span
|
|
629
|
+
>
|
|
630
|
+
</div>
|
|
631
|
+
</section>
|
|
632
|
+
|
|
633
|
+
<div class="signal-list" aria-label="Developer proof signals">
|
|
634
|
+
<div class="signal">
|
|
635
|
+
<span class="tag green">Verify</span>
|
|
636
|
+
<span>
|
|
637
|
+
<strong>Proof commands</strong>
|
|
638
|
+
<code>--proof-commands</code> returns the remaining
|
|
639
|
+
verification commands, one per line.
|
|
640
|
+
</span>
|
|
641
|
+
</div>
|
|
642
|
+
<div class="signal">
|
|
643
|
+
<span class="tag blue">MCP</span>
|
|
644
|
+
<span>
|
|
645
|
+
<strong>MCP call shortcut</strong>
|
|
646
|
+
<code>--next-tool-call</code> returns the cursor tool and args
|
|
647
|
+
as compact JSON.
|
|
648
|
+
</span>
|
|
649
|
+
</div>
|
|
650
|
+
<div class="signal">
|
|
651
|
+
<span class="tag amber">List</span>
|
|
652
|
+
<span>
|
|
653
|
+
<strong>Checklist shortcut</strong>
|
|
654
|
+
<code>--checklist</code> returns current, blocked, follow-up,
|
|
655
|
+
proof, and done rows.
|
|
656
|
+
</span>
|
|
657
|
+
</div>
|
|
658
|
+
<div class="signal">
|
|
659
|
+
<span class="tag red">Gate</span>
|
|
660
|
+
<span>
|
|
661
|
+
<strong>Review gate</strong>
|
|
662
|
+
<code>--review-gate</code> returns the stop checklist before
|
|
663
|
+
another slice, release, publish, or deploy.
|
|
664
|
+
</span>
|
|
665
|
+
</div>
|
|
666
|
+
</div>
|
|
667
|
+
</div>
|
|
668
|
+
</section>
|
|
669
|
+
</main>
|
|
670
|
+
<script>
|
|
671
|
+
if (window.location.hash === "#proof") {
|
|
672
|
+
document.body.classList.add("proof-only");
|
|
673
|
+
}
|
|
674
|
+
document.documentElement.dataset.ready = "true";
|
|
675
|
+
</script>
|
|
676
|
+
</body>
|
|
677
|
+
</html>
|
|
Binary file
|
|
Binary file
|