my-frontend-observer 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +82 -1
- package/README.md +30 -7
- package/dist/application/observationPersistence.js +1 -0
- package/dist/application/observationPersistence.js.map +1 -1
- package/dist/browser/chromiumAdapter.js +58 -4
- package/dist/browser/chromiumAdapter.js.map +1 -1
- package/dist/browser/evidenceCapture.d.ts +46 -3
- package/dist/browser/evidenceCapture.js +393 -94
- package/dist/browser/evidenceCapture.js.map +1 -1
- package/dist/browser/scrollCapture.d.ts +32 -0
- package/dist/browser/scrollCapture.js +163 -0
- package/dist/browser/scrollCapture.js.map +1 -0
- package/dist/browser/types.d.ts +3 -1
- package/dist/cli.js +165 -7
- package/dist/cli.js.map +1 -1
- package/dist/domain/diagnostics.d.ts +1 -1
- package/dist/domain/diagnostics.js +2 -0
- package/dist/domain/diagnostics.js.map +1 -1
- package/dist/domain/identity.d.ts +8 -3
- package/dist/domain/identity.js +10 -4
- package/dist/domain/identity.js.map +1 -1
- package/dist/domain/schema.d.ts +164 -6
- package/dist/domain/schema.js +314 -4
- package/dist/domain/schema.js.map +1 -1
- package/dist/domain/scrollEvidence.d.ts +51 -0
- package/dist/domain/scrollEvidence.js +134 -0
- package/dist/domain/scrollEvidence.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/request/request.d.ts +57 -1
- package/dist/request/request.js +292 -14
- package/dist/request/request.js.map +1 -1
- package/docs/ARCHITECTURE.md +62 -1
- package/docs/CI_CD.md +49 -8
- package/docs/COMMANDS.md +184 -9
- package/docs/CONTRACTS.md +135 -6
- package/docs/CURRENT_STATE.md +128 -6
- package/docs/DEVELOPMENT.md +41 -3
- package/docs/PROJECT_OVERVIEW.md +12 -6
- package/docs/QUICKSTART.md +3 -1
- package/docs/RELEASE.md +12 -5
- package/docs/ROADMAP.md +9 -0
- package/docs/SECURITY.md +6 -2
- package/docs/WORKFLOWS.md +41 -14
- package/package.json +1 -1
package/dist/request/request.js
CHANGED
|
@@ -14,12 +14,236 @@ const READINESS_TIMEOUT_MIN_MS = 500;
|
|
|
14
14
|
const MAX_TARGETS = 20;
|
|
15
15
|
const TARGET_NAME_RE = /^[A-Za-z0-9_-]{1,64}$/;
|
|
16
16
|
const MAX_SELECTOR_LENGTH = 500;
|
|
17
|
+
const MAX_LOCATORS_PER_TARGET = 5;
|
|
18
|
+
const MAX_ROLE_LENGTH = 64;
|
|
19
|
+
const MAX_ACCESSIBLE_NAME_LENGTH = 200;
|
|
20
|
+
const MAX_ID_VALUE_LENGTH = 200;
|
|
21
|
+
const DATA_ATTRIBUTE_NAME_RE = /^data-[a-z0-9-]{1,64}$/;
|
|
22
|
+
const MAX_DATA_ATTRIBUTE_VALUE_LENGTH = 500;
|
|
23
|
+
const MAX_TEXT_LENGTH = 200;
|
|
24
|
+
const SUPPORTED_SEMANTIC_ELEMENT_TAGS = new Set([
|
|
25
|
+
'header',
|
|
26
|
+
'nav',
|
|
27
|
+
'main',
|
|
28
|
+
'footer',
|
|
29
|
+
'article',
|
|
30
|
+
'section',
|
|
31
|
+
'aside',
|
|
32
|
+
'form',
|
|
33
|
+
'dialog',
|
|
34
|
+
]);
|
|
35
|
+
const SUPPORTED_LOCATOR_KINDS = new Set(['role', 'id', 'data-attribute', 'semantic-element', 'css', 'text']);
|
|
36
|
+
const SUPPORTED_SCROLL_ACTION_KINDS = new Set(['window-scroll-by', 'target-scroll-by']);
|
|
37
|
+
/**
|
|
38
|
+
* Conservative bound for a single controlled-observation scroll action. No
|
|
39
|
+
* existing repository precedent for a scroll-delta magnitude; chosen large
|
|
40
|
+
* enough to reach realistic overflow content (documents/containers well
|
|
41
|
+
* beyond one viewport) while staying far short of a pathological/runaway
|
|
42
|
+
* request - see docs/CONTRACTS.md and tests/unit/request.test.ts.
|
|
43
|
+
*/
|
|
44
|
+
export const SCROLL_DELTA_MAX_ABS = 20000;
|
|
17
45
|
function isPlainObject(value) {
|
|
18
46
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
19
47
|
}
|
|
20
48
|
function isInRange(value, min, max) {
|
|
21
49
|
return Number.isInteger(value) && value >= min && value <= max;
|
|
22
50
|
}
|
|
51
|
+
function isBoundedString(value, min, max) {
|
|
52
|
+
return typeof value === 'string' && value.length >= min && value.length <= max;
|
|
53
|
+
}
|
|
54
|
+
/** Validates one raw locator object against the frozen v0.2 locator-kind contract. Total: always returns either a valid TargetLocator or a list of every problem found (never throws, never short-circuits). */
|
|
55
|
+
function validateLocator(raw, targetName, index) {
|
|
56
|
+
if (!isPlainObject(raw)) {
|
|
57
|
+
return {
|
|
58
|
+
ok: false,
|
|
59
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: `locator at index ${index} must be an object`, targetName }],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const kind = raw.kind;
|
|
63
|
+
if (typeof kind !== 'string' || !SUPPORTED_LOCATOR_KINDS.has(kind)) {
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: `locator at index ${index} has an unsupported kind`, targetName }],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
switch (kind) {
|
|
70
|
+
case 'css': {
|
|
71
|
+
if (!isBoundedString(raw.selector, 1, MAX_SELECTOR_LENGTH)) {
|
|
72
|
+
return {
|
|
73
|
+
ok: false,
|
|
74
|
+
diagnostics: [
|
|
75
|
+
{ code: 'invalid-request', severity: 'error', message: `css locator at index ${index} must have a selector 1-${MAX_SELECTOR_LENGTH} characters`, targetName },
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return { ok: true, locator: { kind: 'css', selector: raw.selector } };
|
|
80
|
+
}
|
|
81
|
+
case 'role': {
|
|
82
|
+
if (!isBoundedString(raw.role, 1, MAX_ROLE_LENGTH)) {
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: `role locator at index ${index} must have a role 1-${MAX_ROLE_LENGTH} characters`, targetName }],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (raw.name !== undefined && !isBoundedString(raw.name, 0, MAX_ACCESSIBLE_NAME_LENGTH)) {
|
|
89
|
+
return {
|
|
90
|
+
ok: false,
|
|
91
|
+
diagnostics: [
|
|
92
|
+
{ code: 'invalid-request', severity: 'error', message: `role locator at index ${index} name must be at most ${MAX_ACCESSIBLE_NAME_LENGTH} characters`, targetName },
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return { ok: true, locator: raw.name === undefined ? { kind: 'role', role: raw.role } : { kind: 'role', role: raw.role, name: raw.name } };
|
|
97
|
+
}
|
|
98
|
+
case 'id': {
|
|
99
|
+
if (!isBoundedString(raw.value, 1, MAX_ID_VALUE_LENGTH)) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: `id locator at index ${index} must have a value 1-${MAX_ID_VALUE_LENGTH} characters`, targetName }],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return { ok: true, locator: { kind: 'id', value: raw.value } };
|
|
106
|
+
}
|
|
107
|
+
case 'data-attribute': {
|
|
108
|
+
if (typeof raw.attribute !== 'string' || !DATA_ATTRIBUTE_NAME_RE.test(raw.attribute)) {
|
|
109
|
+
return {
|
|
110
|
+
ok: false,
|
|
111
|
+
diagnostics: [
|
|
112
|
+
{ code: 'invalid-request', severity: 'error', message: `data-attribute locator at index ${index} must have an attribute matching ^data-[a-z0-9-]{1,64}$`, targetName },
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (!isBoundedString(raw.value, 1, MAX_DATA_ATTRIBUTE_VALUE_LENGTH)) {
|
|
117
|
+
return {
|
|
118
|
+
ok: false,
|
|
119
|
+
diagnostics: [
|
|
120
|
+
{
|
|
121
|
+
code: 'invalid-request',
|
|
122
|
+
severity: 'error',
|
|
123
|
+
message: `data-attribute locator at index ${index} must have a value 1-${MAX_DATA_ATTRIBUTE_VALUE_LENGTH} characters`,
|
|
124
|
+
targetName,
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return { ok: true, locator: { kind: 'data-attribute', attribute: raw.attribute, value: raw.value } };
|
|
130
|
+
}
|
|
131
|
+
case 'semantic-element': {
|
|
132
|
+
if (typeof raw.tag !== 'string' || !SUPPORTED_SEMANTIC_ELEMENT_TAGS.has(raw.tag)) {
|
|
133
|
+
return {
|
|
134
|
+
ok: false,
|
|
135
|
+
diagnostics: [
|
|
136
|
+
{
|
|
137
|
+
code: 'invalid-request',
|
|
138
|
+
severity: 'error',
|
|
139
|
+
message: `semantic-element locator at index ${index} must have a tag in {${[...SUPPORTED_SEMANTIC_ELEMENT_TAGS].join(', ')}}`,
|
|
140
|
+
targetName,
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return { ok: true, locator: { kind: 'semantic-element', tag: raw.tag } };
|
|
146
|
+
}
|
|
147
|
+
case 'text': {
|
|
148
|
+
if (!isBoundedString(raw.text, 1, MAX_TEXT_LENGTH)) {
|
|
149
|
+
return {
|
|
150
|
+
ok: false,
|
|
151
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: `text locator at index ${index} must have text 1-${MAX_TEXT_LENGTH} characters`, targetName }],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return { ok: true, locator: { kind: 'text', text: raw.text } };
|
|
155
|
+
}
|
|
156
|
+
default:
|
|
157
|
+
return { ok: false, diagnostics: [{ code: 'invalid-request', severity: 'error', message: `locator at index ${index} has an unsupported kind`, targetName }] };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function isFiniteInteger(value) {
|
|
161
|
+
return typeof value === 'number' && Number.isInteger(value);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Validates the optional v0.3 scrollScenario request shape. `configuredTargetNames`
|
|
165
|
+
* is the lowercase set of already-normalized target names so `target-scroll-by`
|
|
166
|
+
* can only reference an existing stable observer target (never a new/implicit
|
|
167
|
+
* one). Total: collects every applicable diagnostic before returning; never
|
|
168
|
+
* throws.
|
|
169
|
+
*/
|
|
170
|
+
function validateScrollScenario(raw, configuredTargetNames) {
|
|
171
|
+
if (!isPlainObject(raw)) {
|
|
172
|
+
return { ok: false, diagnostics: [{ code: 'invalid-request', severity: 'error', message: 'scrollScenario must be an object' }] };
|
|
173
|
+
}
|
|
174
|
+
const extraScenarioKeys = Object.keys(raw).filter((key) => key !== 'action');
|
|
175
|
+
if (extraScenarioKeys.length > 0) {
|
|
176
|
+
return {
|
|
177
|
+
ok: false,
|
|
178
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: `scrollScenario has unsupported field(s): ${extraScenarioKeys.join(', ')}` }],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const action = raw.action;
|
|
182
|
+
if (!isPlainObject(action)) {
|
|
183
|
+
return { ok: false, diagnostics: [{ code: 'invalid-request', severity: 'error', message: 'scrollScenario.action must be an object' }] };
|
|
184
|
+
}
|
|
185
|
+
const kind = action.kind;
|
|
186
|
+
if (typeof kind !== 'string' || !SUPPORTED_SCROLL_ACTION_KINDS.has(kind)) {
|
|
187
|
+
return {
|
|
188
|
+
ok: false,
|
|
189
|
+
diagnostics: [
|
|
190
|
+
{ code: 'invalid-request', severity: 'error', message: `scrollScenario.action.kind must be one of ${[...SUPPORTED_SCROLL_ACTION_KINDS].join(', ')}` },
|
|
191
|
+
],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const allowedActionKeys = kind === 'target-scroll-by' ? ['kind', 'target', 'deltaX', 'deltaY'] : ['kind', 'deltaX', 'deltaY'];
|
|
195
|
+
const extraActionKeys = Object.keys(action).filter((key) => !allowedActionKeys.includes(key));
|
|
196
|
+
if (extraActionKeys.length > 0) {
|
|
197
|
+
return {
|
|
198
|
+
ok: false,
|
|
199
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: `scrollScenario.action has unsupported field(s): ${extraActionKeys.join(', ')}` }],
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const deltaDiagnostics = [];
|
|
203
|
+
if (!isFiniteInteger(action.deltaX) || Math.abs(action.deltaX) > SCROLL_DELTA_MAX_ABS) {
|
|
204
|
+
deltaDiagnostics.push({
|
|
205
|
+
code: 'invalid-request',
|
|
206
|
+
severity: 'error',
|
|
207
|
+
message: `scrollScenario.action.deltaX must be an integer in [-${SCROLL_DELTA_MAX_ABS}, ${SCROLL_DELTA_MAX_ABS}]`,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
if (!isFiniteInteger(action.deltaY) || Math.abs(action.deltaY) > SCROLL_DELTA_MAX_ABS) {
|
|
211
|
+
deltaDiagnostics.push({
|
|
212
|
+
code: 'invalid-request',
|
|
213
|
+
severity: 'error',
|
|
214
|
+
message: `scrollScenario.action.deltaY must be an integer in [-${SCROLL_DELTA_MAX_ABS}, ${SCROLL_DELTA_MAX_ABS}]`,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (deltaDiagnostics.length > 0) {
|
|
218
|
+
return { ok: false, diagnostics: deltaDiagnostics };
|
|
219
|
+
}
|
|
220
|
+
const deltaX = action.deltaX;
|
|
221
|
+
const deltaY = action.deltaY;
|
|
222
|
+
if (deltaX === 0 && deltaY === 0) {
|
|
223
|
+
return {
|
|
224
|
+
ok: false,
|
|
225
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: 'scrollScenario.action requires a non-zero deltaX or deltaY' }],
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (kind === 'window-scroll-by') {
|
|
229
|
+
return { ok: true, scenario: { action: { kind: 'window-scroll-by', deltaX, deltaY } } };
|
|
230
|
+
}
|
|
231
|
+
if (typeof action.target !== 'string' || action.target.length === 0) {
|
|
232
|
+
return {
|
|
233
|
+
ok: false,
|
|
234
|
+
diagnostics: [{ code: 'invalid-request', severity: 'error', message: 'scrollScenario.action.target is required for target-scroll-by' }],
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
if (!configuredTargetNames.has(action.target.toLowerCase())) {
|
|
238
|
+
return {
|
|
239
|
+
ok: false,
|
|
240
|
+
diagnostics: [
|
|
241
|
+
{ code: 'invalid-request', severity: 'error', message: 'scrollScenario.action.target must reference a configured target', targetName: action.target },
|
|
242
|
+
],
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return { ok: true, scenario: { action: { kind: 'target-scroll-by', target: action.target, deltaX, deltaY } } };
|
|
246
|
+
}
|
|
23
247
|
/**
|
|
24
248
|
* Total, never throws. Collects every applicable diagnostic before returning
|
|
25
249
|
* (does not short-circuit on the first violation) so callers see every
|
|
@@ -65,24 +289,16 @@ export function normalizeRequest(raw) {
|
|
|
65
289
|
}
|
|
66
290
|
else {
|
|
67
291
|
const seenNames = new Set();
|
|
68
|
-
for (const
|
|
69
|
-
if (!isPlainObject(
|
|
70
|
-
diagnostics.push({ code: 'invalid-request', severity: 'error', message: 'each target requires a string name and string selector' });
|
|
292
|
+
for (const rawTargetUnknown of raw.targets) {
|
|
293
|
+
if (!isPlainObject(rawTargetUnknown) || typeof rawTargetUnknown.name !== 'string') {
|
|
294
|
+
diagnostics.push({ code: 'invalid-request', severity: 'error', message: 'each target requires a string name and either a string selector or a locators array' });
|
|
71
295
|
continue;
|
|
72
296
|
}
|
|
73
|
-
const
|
|
74
|
-
const
|
|
297
|
+
const rawTarget = rawTargetUnknown;
|
|
298
|
+
const name = rawTargetUnknown.name;
|
|
75
299
|
if (!TARGET_NAME_RE.test(name)) {
|
|
76
300
|
diagnostics.push({ code: 'invalid-request', severity: 'error', message: 'target name must match ^[A-Za-z0-9_-]{1,64}$', targetName: name });
|
|
77
301
|
}
|
|
78
|
-
if (selector.length === 0 || selector.length > MAX_SELECTOR_LENGTH) {
|
|
79
|
-
diagnostics.push({
|
|
80
|
-
code: 'invalid-request',
|
|
81
|
-
severity: 'error',
|
|
82
|
-
message: `target selector must be 1-${MAX_SELECTOR_LENGTH} characters`,
|
|
83
|
-
targetName: name,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
302
|
const normalizedName = name.toLowerCase();
|
|
87
303
|
if (seenNames.has(normalizedName)) {
|
|
88
304
|
diagnostics.push({ code: 'invalid-request', severity: 'error', message: 'duplicate target name', targetName: name });
|
|
@@ -90,7 +306,57 @@ export function normalizeRequest(raw) {
|
|
|
90
306
|
else {
|
|
91
307
|
seenNames.add(normalizedName);
|
|
92
308
|
}
|
|
93
|
-
|
|
309
|
+
const hasSelector = rawTarget.selector !== undefined;
|
|
310
|
+
const hasLocators = rawTarget.locators !== undefined;
|
|
311
|
+
if (hasSelector && hasLocators) {
|
|
312
|
+
diagnostics.push({ code: 'invalid-request', severity: 'error', message: 'target must not specify both selector and locators', targetName: name });
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
if (hasSelector) {
|
|
316
|
+
if (typeof rawTarget.selector !== 'string' || rawTarget.selector.length === 0 || rawTarget.selector.length > MAX_SELECTOR_LENGTH) {
|
|
317
|
+
diagnostics.push({
|
|
318
|
+
code: 'invalid-request',
|
|
319
|
+
severity: 'error',
|
|
320
|
+
message: `target selector must be 1-${MAX_SELECTOR_LENGTH} characters`,
|
|
321
|
+
targetName: name,
|
|
322
|
+
});
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
targets.push({ name, locators: [{ kind: 'css', selector: rawTarget.selector }] });
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
if (hasLocators) {
|
|
329
|
+
if (!Array.isArray(rawTarget.locators) || rawTarget.locators.length === 0) {
|
|
330
|
+
diagnostics.push({ code: 'invalid-request', severity: 'error', message: 'target locators must be a non-empty array', targetName: name });
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
if (rawTarget.locators.length > MAX_LOCATORS_PER_TARGET) {
|
|
334
|
+
diagnostics.push({
|
|
335
|
+
code: 'invalid-request',
|
|
336
|
+
severity: 'error',
|
|
337
|
+
message: `target locators must contain at most ${MAX_LOCATORS_PER_TARGET} entries`,
|
|
338
|
+
targetName: name,
|
|
339
|
+
});
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
const locators = [];
|
|
343
|
+
let anyInvalid = false;
|
|
344
|
+
rawTarget.locators.forEach((rawLocator, index) => {
|
|
345
|
+
const validated = validateLocator(rawLocator, name, index);
|
|
346
|
+
if (validated.ok) {
|
|
347
|
+
locators.push(validated.locator);
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
anyInvalid = true;
|
|
351
|
+
diagnostics.push(...validated.diagnostics);
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
if (!anyInvalid) {
|
|
355
|
+
targets.push({ name, locators });
|
|
356
|
+
}
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
diagnostics.push({ code: 'invalid-request', severity: 'error', message: 'each target requires either a selector or a locators array', targetName: name });
|
|
94
360
|
}
|
|
95
361
|
}
|
|
96
362
|
}
|
|
@@ -156,6 +422,17 @@ export function normalizeRequest(raw) {
|
|
|
156
422
|
}
|
|
157
423
|
}
|
|
158
424
|
}
|
|
425
|
+
let scrollScenario;
|
|
426
|
+
if (raw.scrollScenario !== undefined) {
|
|
427
|
+
const configuredTargetNames = new Set(targets.map((target) => target.name.toLowerCase()));
|
|
428
|
+
const validated = validateScrollScenario(raw.scrollScenario, configuredTargetNames);
|
|
429
|
+
if (validated.ok) {
|
|
430
|
+
scrollScenario = validated.scenario;
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
diagnostics.push(...validated.diagnostics);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
159
436
|
if (diagnostics.length > 0 || targetUrl === undefined) {
|
|
160
437
|
return { ok: false, diagnostics: orderDiagnostics(diagnostics) };
|
|
161
438
|
}
|
|
@@ -168,6 +445,7 @@ export function normalizeRequest(raw) {
|
|
|
168
445
|
outputLocation,
|
|
169
446
|
timeoutMs,
|
|
170
447
|
readiness: { condition: readinessCondition, timeoutMs: readinessTimeoutMs },
|
|
448
|
+
...(scrollScenario ? { scrollScenario } : {}),
|
|
171
449
|
},
|
|
172
450
|
};
|
|
173
451
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAuCrD,MAAM,gBAAgB,GAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAChE,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,2BAA2B,GAAuB,MAAM,CAAC;AAC/D,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAE/C,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACxD,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAA0B;IACzD,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,IAAI,SAA6B,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC,CAAC;IACpI,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1B,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,QAAQ,GAAa,gBAAgB,CAAC;IAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC/B,IACE,CAAC,aAAa,CAAC,SAAS,CAAC;YACzB,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ;YACnC,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;YACpC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC;YACvD,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,EACxD,CAAC;YACD,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,8CAA8C,YAAY,KAAK,YAAY,GAAG;aACxF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACxG,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YAC5C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,gCAAgC,WAAW,UAAU,EAAE,CAAC,CAAC;QACnI,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YACpC,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,OAAoB,EAAE,CAAC;gBACjD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC9G,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,wDAAwD,EAAE,CAAC,CAAC;oBACpI,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;gBAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,8CAA8C,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9I,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;oBACnE,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,iBAAiB;wBACvB,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,6BAA6B,mBAAmB,aAAa;wBACtE,UAAU,EAAE,IAAI;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;oBAClC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvH,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAChC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,GAAG,kBAAkB,CAAC;IACnC,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;YACnG,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,oCAAoC,cAAc,KAAK,cAAc,GAAG;aAClF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,kBAAkB,GAAuB,2BAA2B,CAAC;IACzE,IAAI,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC;IAC3E,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;QACrH,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC;YACnC,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,YAAY,CAAC,SAAS,KAAK,MAAM,IAAI,YAAY,CAAC,SAAS,KAAK,kBAAkB,EAAE,CAAC;oBACvF,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,2BAA2B;wBACjC,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,0DAA0D;qBACpE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,OAAO,YAAY,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,wBAAwB,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC1H,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,2BAA2B;wBACjC,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,8CAA8C,wBAAwB,cAAc;qBAC9F,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc,GAAG,uBAAuB,CAAC;IAC7C,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC3C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;QAC/G,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;IACnE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE;YACP,SAAS;YACT,QAAQ;YACR,OAAO;YACP,cAAc;YACd,SAAS;YACT,SAAS,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE;SAC5E;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"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"}
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## Current scaffold architecture
|
|
4
4
|
|
|
5
|
-
The current repository is one
|
|
5
|
+
The current repository is one published TypeScript ESM package
|
|
6
|
+
(`my-frontend-observer@0.3.0`):
|
|
6
7
|
|
|
7
8
|
- `src/cli.ts` is the real, thin `observe` command entry point (argument
|
|
8
9
|
parsing/output only).
|
|
@@ -47,6 +48,66 @@ packed npm tarball end to end in a clean consumer environment, independent
|
|
|
47
48
|
of the source checkout. There is still no controlled-scroll/comparison
|
|
48
49
|
behavior.
|
|
49
50
|
|
|
51
|
+
## Current v0.2 architecture (released/current architecture)
|
|
52
|
+
|
|
53
|
+
v0.2 extends the same architecture rather than adding a parallel one.
|
|
54
|
+
`src/request/request.ts` now owns a canonical `{name, locators}` target
|
|
55
|
+
model (`TargetLocator`, six frozen kinds) in place of the old CSS-only
|
|
56
|
+
shape; the legacy `{name, selector}` input still normalizes into it. The one
|
|
57
|
+
existing browser-side target resolver/measurement module,
|
|
58
|
+
`src/browser/evidenceCapture.ts`, was extended - not replaced - to resolve
|
|
59
|
+
all six locator kinds against the live page through a single Playwright
|
|
60
|
+
`Locator` per attempt, honor the frozen ordered-fallback/ambiguity/
|
|
61
|
+
unavailable-no-fallback contract, and converge every kind on the same
|
|
62
|
+
measurement path (`captureResolvedTargetRecord`); it additionally computes
|
|
63
|
+
bounded semantic state, derived landmark identity, and configured-target-
|
|
64
|
+
only DOM containment from the same already-resolved elements in the same
|
|
65
|
+
capture pass - no second browser/page, no second resolution algorithm.
|
|
66
|
+
`src/domain/schema.ts` extends `TargetEvidenceRecord`/`TargetResolution`
|
|
67
|
+
additively for schema `1.1.0`, with matching structural validation in
|
|
68
|
+
`isValidObservationArtifact`. `src/cli.ts` gained one CLI/input-boundary-
|
|
69
|
+
only addition, `--targets-file`: it reads and validates only the JSON root
|
|
70
|
+
wrapper (via the already-imported `node:fs`, never `node:fs/promises`) and
|
|
71
|
+
hands the parsed `targets` value into the existing `RawObservationRequest`/
|
|
72
|
+
`normalizeRequest()` path unchanged - there is no second application
|
|
73
|
+
observation use case, and Playwright objects still never leave
|
|
74
|
+
`src/browser/`. The artifact writer, application observation use case, and
|
|
75
|
+
overall boundary chain (`CLI → normalizeRequest → observe() →
|
|
76
|
+
runBrowserCapture → artifact writer`) are unchanged from v0.1.
|
|
77
|
+
|
|
78
|
+
## Current v0.3 architecture (released/current architecture)
|
|
79
|
+
|
|
80
|
+
v0.3 extends the same single-observation architecture again; it does not add
|
|
81
|
+
a second browser lifecycle, target resolver, or artifact path.
|
|
82
|
+
`src/request/request.ts` adds one optional `scrollScenario` field to
|
|
83
|
+
`NormalizedObservationRequest` (`ScrollScenario { action }`, exactly
|
|
84
|
+
`window-scroll-by` or `target-scroll-by`); `src/domain/schema.ts` adds the
|
|
85
|
+
matching bounded runtime evidence types (`ScrollRuntimeSnapshot`,
|
|
86
|
+
`ViewportRelationEvidence`, `OverflowEvidence`, `ScrollScenarioTransition`,
|
|
87
|
+
`ScrollOwnerInterpretation`) and structural validation for schema `1.2.0`
|
|
88
|
+
(additive over `1.1.0`). `src/domain/scrollEvidence.ts` holds the pure,
|
|
89
|
+
browser-independent derivations (viewport relation, actual overflow,
|
|
90
|
+
transitions, and `deriveScrollOwner`) so they are unit-testable without
|
|
91
|
+
Chromium. `src/browser/scrollCapture.ts` holds the one browser-side scenario
|
|
92
|
+
capture module: it reuses `evidenceCapture.ts#resolveConfiguredTargets` (now
|
|
93
|
+
exported) to resolve configured targets exactly once, captures an initial
|
|
94
|
+
`ScrollRuntimeSnapshot`, performs the one immediate scroll
|
|
95
|
+
(`window.scrollBy`/`element.scrollBy`, both `behavior: 'instant'`), waits
|
|
96
|
+
exactly two `requestAnimationFrame` cycles, and captures a final snapshot -
|
|
97
|
+
all inside `chromiumAdapter.ts#captureViewportInternal`'s existing single
|
|
98
|
+
navigate → ready → capture flow, strictly before the unchanged
|
|
99
|
+
screenshot/`capturePageEvidence`/`captureTargetEvidence` calls, so every
|
|
100
|
+
downstream capture (including a no-scenario request, which skips this block
|
|
101
|
+
entirely) describes only the final state. `src/cli.ts` gained one CLI/input-
|
|
102
|
+
boundary-only addition, `--scroll-scenario-file`: mirroring
|
|
103
|
+
`--targets-file`, it reads and validates only the file readability/JSON-
|
|
104
|
+
validity/non-array-object-root shape and hands the parsed value straight
|
|
105
|
+
into `RawObservationRequest.scrollScenario` - every scenario/action rule
|
|
106
|
+
(kind, deltas, target reference) stays owned by `normalizeRequest()`. There
|
|
107
|
+
is still one canonical `observe()` application use case and one artifact
|
|
108
|
+
writer; `scrollScenarioEvidence` is simply one more optional field on the
|
|
109
|
+
same `ObservationArtifact`.
|
|
110
|
+
|
|
50
111
|
## Planned v0.1 architecture constraints
|
|
51
112
|
|
|
52
113
|
v0.1 planning must preserve these approved boundaries without treating module
|
package/docs/CI_CD.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
A GitHub Actions pre-release readiness workflow exists at
|
|
4
4
|
`.github/workflows/pre-release-readiness.yml` (triggered manually via
|
|
5
|
-
`workflow_dispatch
|
|
6
|
-
phases:
|
|
5
|
+
`workflow_dispatch`, by pushing a `validation/**` or `release/**` branch, or
|
|
6
|
+
by a pull request into `master`). It has two phases:
|
|
7
7
|
|
|
8
8
|
1. **candidate** (Linux, Node 24): `npm ci`, install Chromium, typecheck,
|
|
9
9
|
lint, `npm test`, `npm run test:browser`, `npm run test:security`,
|
|
@@ -16,13 +16,54 @@ phases:
|
|
|
16
16
|
ever builds its own tarball), installs Chromium via the installed
|
|
17
17
|
package's own Playwright dependency, and runs
|
|
18
18
|
`scripts/ci/runPackedObservationSmoke.mjs` against the installed
|
|
19
|
-
tarball:
|
|
20
|
-
target
|
|
19
|
+
tarball: four real Chromium observations against a disposable local HTTP
|
|
20
|
+
target - the legacy `--target` CSS shorthand, the structured
|
|
21
|
+
`--targets-file` semantic-target path (`role`+accessible-name and `text`
|
|
22
|
+
locators, landmark evidence), a `--scroll-scenario-file` `window-scroll-by`
|
|
23
|
+
scenario, and a combined `--targets-file` + `--scroll-scenario-file`
|
|
24
|
+
`target-scroll-by` scenario against a nested scrollable container - all
|
|
25
|
+
asserting schema `1.2.0`, real scroll-position movement, derived
|
|
26
|
+
scroll-owner evidence (`document`/`target:<name>`), scenario transition
|
|
27
|
+
evidence, targets-file/scroll-scenario-file path privacy, and target
|
|
28
|
+
immutability.
|
|
21
29
|
|
|
22
30
|
This proves the same packaged candidate installs and performs a real
|
|
23
|
-
observation
|
|
31
|
+
observation - CSS-shorthand, semantic-target, and v0.3 scroll-scenario alike
|
|
32
|
+
(both `window-scroll-by` and `target-scroll-by`) - on Windows, Linux, and
|
|
33
|
+
macOS, not just in the source checkout.
|
|
24
34
|
|
|
25
35
|
There is no automated npm publication and no automated GitHub Release
|
|
26
|
-
creation - this workflow is readiness validation only
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
creation - this workflow is readiness validation only. Package publication
|
|
37
|
+
remains a separate, later, explicit release decision.
|
|
38
|
+
|
|
39
|
+
## v0.2 readiness coverage
|
|
40
|
+
|
|
41
|
+
The packed-candidate readiness gap that previously existed for
|
|
42
|
+
`--targets-file` has been closed: `scripts/ci/runPackedObservationSmoke.mjs`
|
|
43
|
+
now exercises both the legacy CSS-shorthand path and the structured
|
|
44
|
+
semantic `--targets-file` path in the same run, on every platform in the
|
|
45
|
+
matrix. This was proven on `validation/v0.2-pre-release`
|
|
46
|
+
(`2a0718c37cfe6988fc5d9852db455b99aa8238af`), GitHub Actions run
|
|
47
|
+
`31537578062`, which passed on Windows, Linux, and macOS using one
|
|
48
|
+
hash-verified candidate tarball.
|
|
49
|
+
|
|
50
|
+
## v0.3 readiness coverage
|
|
51
|
+
|
|
52
|
+
The packed-candidate readiness gap that previously existed for the v0.3
|
|
53
|
+
`--scroll-scenario-file` public interface - identified during the v0.3
|
|
54
|
+
implementation-completeness audit as `V0_3_READINESS_VALIDATION_GAP_EXISTS`
|
|
55
|
+
- has been closed: `scripts/ci/runPackedObservationSmoke.mjs` now also
|
|
56
|
+
performs a real `window-scroll-by` observation and a real `target-scroll-by`
|
|
57
|
+
observation (against a nested scrollable fixture container, combined with
|
|
58
|
+
`--targets-file`) through the installed tarball, asserting schema `1.2.0`,
|
|
59
|
+
actual scroll movement, `document`/`target:<name>` scroll-owner evidence
|
|
60
|
+
with `derivedFrom` provenance, scenario transition evidence, and that
|
|
61
|
+
neither the `--targets-file` nor the `--scroll-scenario-file` local path is
|
|
62
|
+
ever persisted into the manifest - on every platform in the matrix, using
|
|
63
|
+
the same single hash-verified candidate tarball as the legacy/semantic
|
|
64
|
+
observations. This was proven on `validation/v0.3-pre-release`
|
|
65
|
+
(`e59621c2fb5a6d74f491a63dc79ebe6e8b62c175`), GitHub Actions run
|
|
66
|
+
`31591920744`, which passed on Windows, Linux, and macOS using one
|
|
67
|
+
hash-verified candidate tarball (SHA-256
|
|
68
|
+
`da6cbc18a98d005b84a2f12c06f5c01d390006b53c02176a6c9cdc6d9b9d24d0`) - the
|
|
69
|
+
release candidate for `v0.3.0`.
|