yam-flow 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/COMMANDS.md +29 -2
- package/README.md +21 -4
- package/ROADMAP.md +5 -5
- package/dist/bin/yam.js +661 -35
- package/dist/lib/trust-kernel.d.ts +26 -0
- package/dist/lib/trust-kernel.js +30 -0
- package/package.json +3 -2
- package/references/current-docs.md +3 -3
- package/references/doctor-scan.md +19 -0
- package/references/final-report.md +21 -0
- package/references/hook-lite.md +1 -1
- package/references/memory.md +1 -1
- package/references/mission.md +25 -0
- package/references/runtime-orchestration.md +25 -1
- package/references/tool-trust-layer.md +100 -6
- package/references/ueye-proof.md +63 -7
- package/references/ueye.md +40 -2
- package/skills/question/SKILL.md +1 -1
- package/skills/ueye/SKILL.md +18 -9
- package/src/bin/yam.ts +660 -34
- package/src/lib/trust-kernel.ts +57 -0
- package/templates/mission-plan.md +12 -0
- package/templates/runtime-proof.md +41 -2
- package/templates/tuning-log.md +11 -1
- package/templates/ueye-comparison.md +73 -0
- package/templates/ueye-review.md +73 -0
- package/templates/yam.project.md +2 -2
- package/yam.manifest.json +2 -2
package/src/lib/trust-kernel.ts
CHANGED
|
@@ -56,6 +56,11 @@ export interface UeyeVisualProvenance {
|
|
|
56
56
|
source_hash: string;
|
|
57
57
|
reference_id: string;
|
|
58
58
|
screenshot_id: string;
|
|
59
|
+
provider_context: string;
|
|
60
|
+
provider_badge: string;
|
|
61
|
+
execution_surface: string;
|
|
62
|
+
app_surface: string;
|
|
63
|
+
browser_surface: string;
|
|
59
64
|
local_only: boolean;
|
|
60
65
|
redacted: boolean;
|
|
61
66
|
operator_provided: boolean;
|
|
@@ -63,6 +68,26 @@ export interface UeyeVisualProvenance {
|
|
|
63
68
|
truth_status: TruthStatus;
|
|
64
69
|
}
|
|
65
70
|
|
|
71
|
+
export interface UeyeSurfaceContext {
|
|
72
|
+
schema: 'yam.ueye-surface-context.v1';
|
|
73
|
+
provider_context: string;
|
|
74
|
+
provider_badge: string;
|
|
75
|
+
execution_surface: string;
|
|
76
|
+
app_surface: string;
|
|
77
|
+
browser_surface: string;
|
|
78
|
+
control_mode: string;
|
|
79
|
+
route: string;
|
|
80
|
+
mode: string;
|
|
81
|
+
url: string;
|
|
82
|
+
viewport: string;
|
|
83
|
+
screenshot_id: string;
|
|
84
|
+
evidence_id: string;
|
|
85
|
+
preserved_state: boolean;
|
|
86
|
+
preserved_url: string;
|
|
87
|
+
local_only: boolean;
|
|
88
|
+
truth_status: TruthStatus;
|
|
89
|
+
}
|
|
90
|
+
|
|
66
91
|
export interface RollbackHint {
|
|
67
92
|
schema: 'yam.rollback-hint.v1';
|
|
68
93
|
touched_files: string[];
|
|
@@ -96,6 +121,7 @@ export interface UeyeRunReport {
|
|
|
96
121
|
schema: 'yam.ueye-run-report.v1';
|
|
97
122
|
reference_sources: UeyeVisualProvenance[];
|
|
98
123
|
implementation_sources: UeyeVisualProvenance[];
|
|
124
|
+
surface_context: UeyeSurfaceContext;
|
|
99
125
|
comparison_result: string;
|
|
100
126
|
design_quality: string;
|
|
101
127
|
blocked_reason: string;
|
|
@@ -201,6 +227,11 @@ export function buildUeyeVisualProvenance(input: Partial<UeyeVisualProvenance> =
|
|
|
201
227
|
source_hash: String(input.source_hash || 'unknown'),
|
|
202
228
|
reference_id: String(input.reference_id || ''),
|
|
203
229
|
screenshot_id: String(input.screenshot_id || ''),
|
|
230
|
+
provider_context: String(input.provider_context || 'not-recorded'),
|
|
231
|
+
provider_badge: String(input.provider_badge || 'not-recorded'),
|
|
232
|
+
execution_surface: String(input.execution_surface || 'not-recorded'),
|
|
233
|
+
app_surface: String(input.app_surface || 'not-recorded'),
|
|
234
|
+
browser_surface: String(input.browser_surface || 'not-recorded'),
|
|
204
235
|
local_only: Boolean(input.local_only),
|
|
205
236
|
redacted: Boolean(input.redacted),
|
|
206
237
|
operator_provided: Boolean(input.operator_provided),
|
|
@@ -209,6 +240,28 @@ export function buildUeyeVisualProvenance(input: Partial<UeyeVisualProvenance> =
|
|
|
209
240
|
};
|
|
210
241
|
}
|
|
211
242
|
|
|
243
|
+
export function buildUeyeSurfaceContext(input: Partial<UeyeSurfaceContext> = {}): UeyeSurfaceContext {
|
|
244
|
+
return {
|
|
245
|
+
schema: 'yam.ueye-surface-context.v1',
|
|
246
|
+
provider_context: String(input.provider_context || 'not-recorded'),
|
|
247
|
+
provider_badge: String(input.provider_badge || input.provider_context || 'not-recorded'),
|
|
248
|
+
execution_surface: String(input.execution_surface || 'not-recorded'),
|
|
249
|
+
app_surface: String(input.app_surface || 'not-recorded'),
|
|
250
|
+
browser_surface: String(input.browser_surface || 'not-recorded'),
|
|
251
|
+
control_mode: String(input.control_mode || 'not-recorded'),
|
|
252
|
+
route: String(input.route || 'ueye'),
|
|
253
|
+
mode: String(input.mode || 'report'),
|
|
254
|
+
url: String(input.url || ''),
|
|
255
|
+
viewport: String(input.viewport || ''),
|
|
256
|
+
screenshot_id: String(input.screenshot_id || ''),
|
|
257
|
+
evidence_id: String(input.evidence_id || ''),
|
|
258
|
+
preserved_state: Boolean(input.preserved_state),
|
|
259
|
+
preserved_url: String(input.preserved_url || ''),
|
|
260
|
+
local_only: input.local_only !== undefined ? Boolean(input.local_only) : true,
|
|
261
|
+
truth_status: isTruthStatus(input.truth_status) ? input.truth_status : 'partial'
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
212
265
|
export function buildRollbackHint(input: Partial<RollbackHint> = {}): RollbackHint {
|
|
213
266
|
return {
|
|
214
267
|
schema: 'yam.rollback-hint.v1',
|
|
@@ -268,6 +321,10 @@ export function buildUeyeRunReport(input: Partial<UeyeRunReport> = {}): UeyeRunR
|
|
|
268
321
|
schema: 'yam.ueye-run-report.v1',
|
|
269
322
|
reference_sources: references,
|
|
270
323
|
implementation_sources: implementations,
|
|
324
|
+
surface_context: buildUeyeSurfaceContext({
|
|
325
|
+
...input.surface_context,
|
|
326
|
+
truth_status: isTruthStatus(input.surface_context?.truth_status) ? input.surface_context?.truth_status : derivedTruth
|
|
327
|
+
}),
|
|
271
328
|
comparison_result: comparisonResult,
|
|
272
329
|
design_quality: String(input.design_quality || 'not-checked'),
|
|
273
330
|
blocked_reason: blockedReason,
|
|
@@ -36,6 +36,18 @@ Patch envelope:
|
|
|
36
36
|
- verification_hint:
|
|
37
37
|
- truth_status: verified / partial / skipped / blocked / assumed
|
|
38
38
|
|
|
39
|
+
Patch queue lite:
|
|
40
|
+
- status: pending / applied / verified / reverted / blocked
|
|
41
|
+
- lane_id:
|
|
42
|
+
- depends_on:
|
|
43
|
+
- assigned_scope:
|
|
44
|
+
- changed_files:
|
|
45
|
+
- verification_hint:
|
|
46
|
+
- rollback_hint:
|
|
47
|
+
- truth_status:
|
|
48
|
+
- next_action:
|
|
49
|
+
- --out optional persistence path:
|
|
50
|
+
|
|
39
51
|
Rollback hint:
|
|
40
52
|
- touched_files:
|
|
41
53
|
- generated_files:
|
|
@@ -13,8 +13,11 @@
|
|
|
13
13
|
- Command:
|
|
14
14
|
- PID/session/pane:
|
|
15
15
|
- Port:
|
|
16
|
-
-
|
|
17
|
-
-
|
|
16
|
+
- URL:
|
|
17
|
+
- Screenshot id:
|
|
18
|
+
- Started at:
|
|
19
|
+
- Stopped at:
|
|
20
|
+
- Exit code:
|
|
18
21
|
- Exit/closure verified:
|
|
19
22
|
|
|
20
23
|
## tmux
|
|
@@ -32,6 +35,42 @@
|
|
|
32
35
|
- During:
|
|
33
36
|
- After:
|
|
34
37
|
|
|
38
|
+
## Runtime Evidence Mini
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"kind": "runtime_evidence_mini",
|
|
43
|
+
"route": "deep",
|
|
44
|
+
"required": true,
|
|
45
|
+
"command": "",
|
|
46
|
+
"target": "",
|
|
47
|
+
"pid": "unknown",
|
|
48
|
+
"port": "",
|
|
49
|
+
"url": "",
|
|
50
|
+
"exit_code": null,
|
|
51
|
+
"screenshot_id": "",
|
|
52
|
+
"started_at": "",
|
|
53
|
+
"stopped_at": "",
|
|
54
|
+
"process": {
|
|
55
|
+
"session": "",
|
|
56
|
+
"pane": ""
|
|
57
|
+
},
|
|
58
|
+
"observation": {
|
|
59
|
+
"before": "",
|
|
60
|
+
"after": ""
|
|
61
|
+
},
|
|
62
|
+
"cleanup": {
|
|
63
|
+
"status": "not-checked",
|
|
64
|
+
"evidence": ""
|
|
65
|
+
},
|
|
66
|
+
"truth_status": "partial",
|
|
67
|
+
"next_action": {
|
|
68
|
+
"kind": "",
|
|
69
|
+
"summary": ""
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
35
74
|
## Verification
|
|
36
75
|
|
|
37
76
|
- Command/check:
|
package/templates/tuning-log.md
CHANGED
|
@@ -25,7 +25,17 @@ Use this to tune route wording from real use.
|
|
|
25
25
|
- Seconds:
|
|
26
26
|
- Budget result:
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## Benchmark Optimization Loop Lite
|
|
29
|
+
|
|
30
|
+
- Baseline command: yam measure <route> --files --commands --report-lines --seconds
|
|
31
|
+
- Baseline result:
|
|
32
|
+
- One route wording or doc change:
|
|
33
|
+
- Rerun command:
|
|
34
|
+
- Rerun result:
|
|
35
|
+
- Decision: keep / revert / retry once / stop
|
|
36
|
+
- Stop condition:
|
|
37
|
+
|
|
38
|
+
## Fix To yam
|
|
29
39
|
|
|
30
40
|
- Skill to edit:
|
|
31
41
|
- Proposed wording:
|
|
@@ -23,12 +23,32 @@
|
|
|
23
23
|
| source_hash | unknown |
|
|
24
24
|
| reference_id | |
|
|
25
25
|
| screenshot_id | |
|
|
26
|
+
| viewport | |
|
|
27
|
+
| state | |
|
|
26
28
|
| local_only | true / false |
|
|
27
29
|
| redacted | true / false |
|
|
28
30
|
| operator_provided | true / false |
|
|
29
31
|
| comparison_result | matched / similar / different / not-verified / not-applicable |
|
|
30
32
|
| truth_status | verified / partial / skipped / blocked / assumed |
|
|
31
33
|
|
|
34
|
+
## Surface Context
|
|
35
|
+
|
|
36
|
+
| Field | Value |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| provider_context | not-recorded |
|
|
39
|
+
| provider_badge | not-recorded |
|
|
40
|
+
| execution_surface | not-recorded |
|
|
41
|
+
| app_surface | not-recorded |
|
|
42
|
+
| browser_surface | not-recorded |
|
|
43
|
+
| control_mode | not-recorded |
|
|
44
|
+
| url | |
|
|
45
|
+
| viewport | |
|
|
46
|
+
| screenshot_id | |
|
|
47
|
+
| evidence_id | |
|
|
48
|
+
| preserved_state | true / false |
|
|
49
|
+
| preserved_url | |
|
|
50
|
+
| truth_status | verified / partial / skipped / blocked / assumed |
|
|
51
|
+
|
|
32
52
|
## Reference Read Proof
|
|
33
53
|
|
|
34
54
|
- Layout:
|
|
@@ -56,6 +76,26 @@ Use `matched`, `similar`, `different`, `not-verified`, or `not-applicable`.
|
|
|
56
76
|
| Accessibility visuals | not-verified | | |
|
|
57
77
|
| Brand and mood fit | not-verified | | |
|
|
58
78
|
|
|
79
|
+
## Review Continuity
|
|
80
|
+
|
|
81
|
+
| Field | Value |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| previous_report_id/path | |
|
|
84
|
+
| previous_screenshot_id | |
|
|
85
|
+
| previous_source_hash | unknown |
|
|
86
|
+
| current_report_id/path | |
|
|
87
|
+
| current_screenshot_id | |
|
|
88
|
+
| current_source_hash | unknown |
|
|
89
|
+
| viewport | |
|
|
90
|
+
| state | |
|
|
91
|
+
| changed_surface | |
|
|
92
|
+
| continuity_result | improved / regressed / unchanged / not-verified |
|
|
93
|
+
| regression | true / false / not-verified |
|
|
94
|
+
| resolved_findings | |
|
|
95
|
+
| new_findings | |
|
|
96
|
+
| still_open_findings | |
|
|
97
|
+
| next_action | |
|
|
98
|
+
|
|
59
99
|
## Design Quality Review
|
|
60
100
|
|
|
61
101
|
Use `pass`, `needs-polish`, or `fails` for each relevant design dimension before listing actionable issues.
|
|
@@ -91,3 +131,36 @@ Use `pass`, `needs-polish`, or `fails` for each relevant design dimension before
|
|
|
91
131
|
## Truth Status
|
|
92
132
|
|
|
93
133
|
- verified / partial / skipped / blocked / assumed:
|
|
134
|
+
|
|
135
|
+
## Comparison Report JSON
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"kind": "ueye_comparison_report",
|
|
140
|
+
"previous_report_id": "",
|
|
141
|
+
"previous_screenshot_id": "",
|
|
142
|
+
"current_report_id": "",
|
|
143
|
+
"current_screenshot_id": "",
|
|
144
|
+
"surface_context": {
|
|
145
|
+
"provider_context": "not-recorded",
|
|
146
|
+
"provider_badge": "not-recorded",
|
|
147
|
+
"execution_surface": "not-recorded",
|
|
148
|
+
"app_surface": "not-recorded",
|
|
149
|
+
"browser_surface": "not-recorded",
|
|
150
|
+
"control_mode": "not-recorded",
|
|
151
|
+
"preserved_state": false,
|
|
152
|
+
"preserved_url": "",
|
|
153
|
+
"truth_status": "partial"
|
|
154
|
+
},
|
|
155
|
+
"viewport": "",
|
|
156
|
+
"state": "",
|
|
157
|
+
"comparison_result": "not-verified",
|
|
158
|
+
"regression": "not-verified",
|
|
159
|
+
"resolved_findings": [],
|
|
160
|
+
"new_findings": [],
|
|
161
|
+
"still_open": [],
|
|
162
|
+
"design_quality": "needs-polish",
|
|
163
|
+
"truth_status": "partial",
|
|
164
|
+
"next_action": ""
|
|
165
|
+
}
|
|
166
|
+
```
|
package/templates/ueye-review.md
CHANGED
|
@@ -34,12 +34,32 @@
|
|
|
34
34
|
| source_hash | unknown |
|
|
35
35
|
| reference_id | |
|
|
36
36
|
| screenshot_id | |
|
|
37
|
+
| viewport | |
|
|
38
|
+
| state | |
|
|
37
39
|
| local_only | true / false |
|
|
38
40
|
| redacted | true / false |
|
|
39
41
|
| operator_provided | true / false |
|
|
40
42
|
| comparison_result | matched / similar / different / not-verified / not-applicable |
|
|
41
43
|
| truth_status | verified / partial / skipped / blocked / assumed |
|
|
42
44
|
|
|
45
|
+
## Surface Context
|
|
46
|
+
|
|
47
|
+
| Field | Value |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| provider_context | not-recorded |
|
|
50
|
+
| provider_badge | not-recorded |
|
|
51
|
+
| execution_surface | not-recorded |
|
|
52
|
+
| app_surface | not-recorded |
|
|
53
|
+
| browser_surface | not-recorded |
|
|
54
|
+
| control_mode | not-recorded |
|
|
55
|
+
| url | |
|
|
56
|
+
| viewport | |
|
|
57
|
+
| screenshot_id | |
|
|
58
|
+
| evidence_id | |
|
|
59
|
+
| preserved_state | true / false |
|
|
60
|
+
| preserved_url | |
|
|
61
|
+
| truth_status | verified / partial / skipped / blocked / assumed |
|
|
62
|
+
|
|
43
63
|
## Reference Read Proof
|
|
44
64
|
|
|
45
65
|
- Layout:
|
|
@@ -67,6 +87,26 @@
|
|
|
67
87
|
|
|
68
88
|
Status values: matched / similar / different / not-verified / not-applicable.
|
|
69
89
|
|
|
90
|
+
## Review Continuity
|
|
91
|
+
|
|
92
|
+
| Field | Value |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| previous_report_id/path | |
|
|
95
|
+
| previous_screenshot_id | |
|
|
96
|
+
| previous_source_hash | unknown |
|
|
97
|
+
| current_report_id/path | |
|
|
98
|
+
| current_screenshot_id | |
|
|
99
|
+
| current_source_hash | unknown |
|
|
100
|
+
| viewport | |
|
|
101
|
+
| state | |
|
|
102
|
+
| changed_surface | |
|
|
103
|
+
| continuity_result | improved / regressed / unchanged / not-verified |
|
|
104
|
+
| regression | true / false / not-verified |
|
|
105
|
+
| resolved_findings | |
|
|
106
|
+
| new_findings | |
|
|
107
|
+
| still_open_findings | |
|
|
108
|
+
| next_action | |
|
|
109
|
+
|
|
70
110
|
## Design Quality Review
|
|
71
111
|
|
|
72
112
|
| Dimension | Result | Evidence |
|
|
@@ -123,3 +163,36 @@ Result values: pass / needs-polish / fails.
|
|
|
123
163
|
## Truth Status
|
|
124
164
|
|
|
125
165
|
- verified / partial / skipped / blocked / assumed:
|
|
166
|
+
|
|
167
|
+
## Review Report JSON
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"kind": "ueye_review_report",
|
|
172
|
+
"previous_report_id": "",
|
|
173
|
+
"previous_screenshot_id": "",
|
|
174
|
+
"current_report_id": "",
|
|
175
|
+
"current_screenshot_id": "",
|
|
176
|
+
"surface_context": {
|
|
177
|
+
"provider_context": "not-recorded",
|
|
178
|
+
"provider_badge": "not-recorded",
|
|
179
|
+
"execution_surface": "not-recorded",
|
|
180
|
+
"app_surface": "not-recorded",
|
|
181
|
+
"browser_surface": "not-recorded",
|
|
182
|
+
"control_mode": "not-recorded",
|
|
183
|
+
"preserved_state": false,
|
|
184
|
+
"preserved_url": "",
|
|
185
|
+
"truth_status": "partial"
|
|
186
|
+
},
|
|
187
|
+
"viewport": "",
|
|
188
|
+
"state": "",
|
|
189
|
+
"comparison_result": "not-verified",
|
|
190
|
+
"regression": "not-verified",
|
|
191
|
+
"resolved_findings": [],
|
|
192
|
+
"new_findings": [],
|
|
193
|
+
"still_open": [],
|
|
194
|
+
"design_quality": "needs-polish",
|
|
195
|
+
"truth_status": "partial",
|
|
196
|
+
"next_action": ""
|
|
197
|
+
}
|
|
198
|
+
```
|
package/templates/yam.project.md
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
- UI changes:
|
|
45
45
|
- Feature changes:
|
|
46
46
|
- Risky changes:
|
|
47
|
-
- Public/release changes: scan for external
|
|
47
|
+
- Public/release changes: scan for external tool names, comparison wording, and attribution wording; remove those hits unless the user explicitly approves keeping them.
|
|
48
48
|
|
|
49
49
|
## Known Risks
|
|
50
50
|
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
|
|
63
63
|
- Do not:
|
|
64
64
|
- Avoid:
|
|
65
|
-
- Do not leave external
|
|
65
|
+
- Do not leave external tool/project comparison or attribution language in public-facing source, docs, npm metadata, release notes, or GitHub repository text.
|
|
66
66
|
|
|
67
67
|
## MD Management
|
|
68
68
|
|
package/yam.manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yam",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"principles": [
|
|
5
5
|
"Direction before execution.",
|
|
6
6
|
"Start fast.",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
{
|
|
23
23
|
"id": "ueye",
|
|
24
24
|
"stage": "v0.3",
|
|
25
|
-
"purpose": "Tight UI/UX/design implementation and visual review with visual provenance, reference-read proof, visual comparison, design quality review, and P0-P3 issue tracking."
|
|
25
|
+
"purpose": "Tight UI/UX/design implementation and visual review with visual provenance, surface context, reference-read proof, visual comparison, design quality review, and P0-P3 issue tracking."
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"id": "question",
|