@dailephd/my-frontend-observer 0.9.0 → 0.10.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.
Files changed (110) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +17 -7
  3. package/dist/application/visualChangeAgentHandoffService.d.ts +28 -0
  4. package/dist/application/visualChangeAgentHandoffService.js +111 -0
  5. package/dist/application/visualChangeAgentHandoffService.js.map +1 -0
  6. package/dist/application/visualChangeProjectWorkflowService.d.ts +95 -0
  7. package/dist/application/visualChangeProjectWorkflowService.js +376 -0
  8. package/dist/application/visualChangeProjectWorkflowService.js.map +1 -0
  9. package/dist/application/visualChangeReviewService.d.ts +50 -0
  10. package/dist/application/visualChangeReviewService.js +69 -0
  11. package/dist/application/visualChangeReviewService.js.map +1 -0
  12. package/dist/application/visualChangeWorkflowPersistenceService.d.ts +26 -0
  13. package/dist/application/visualChangeWorkflowPersistenceService.js +15 -0
  14. package/dist/application/visualChangeWorkflowPersistenceService.js.map +1 -0
  15. package/dist/artifacts/visualChangeWorkflowArtifactReader.d.ts +9 -0
  16. package/dist/artifacts/visualChangeWorkflowArtifactReader.js +47 -0
  17. package/dist/artifacts/visualChangeWorkflowArtifactReader.js.map +1 -0
  18. package/dist/artifacts/visualChangeWorkflowArtifactWriter.d.ts +20 -0
  19. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js +41 -0
  20. package/dist/artifacts/visualChangeWorkflowArtifactWriter.js.map +1 -0
  21. package/dist/cli.js +510 -508
  22. package/dist/cli.js.map +1 -1
  23. package/dist/domain/visualChangeAgentHandoff.d.ts +82 -0
  24. package/dist/domain/visualChangeAgentHandoff.js +80 -0
  25. package/dist/domain/visualChangeAgentHandoff.js.map +1 -0
  26. package/dist/domain/visualChangeAgentHandoffSerialization.d.ts +2 -0
  27. package/dist/domain/visualChangeAgentHandoffSerialization.js +11 -0
  28. package/dist/domain/visualChangeAgentHandoffSerialization.js.map +1 -0
  29. package/dist/domain/visualChangeCycle.d.ts +8 -0
  30. package/dist/domain/visualChangeCycle.js +7 -0
  31. package/dist/domain/visualChangeCycle.js.map +1 -0
  32. package/dist/domain/visualChangeWorkflow.d.ts +125 -0
  33. package/dist/domain/visualChangeWorkflow.js +109 -0
  34. package/dist/domain/visualChangeWorkflow.js.map +1 -0
  35. package/dist/domain/visualChangeWorkflowIdentity.d.ts +5 -0
  36. package/dist/domain/visualChangeWorkflowIdentity.js +24 -0
  37. package/dist/domain/visualChangeWorkflowIdentity.js.map +1 -0
  38. package/dist/index.d.ts +21 -1
  39. package/dist/index.js +12 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/projectWorkflow/projectPaths.d.ts +3 -0
  42. package/dist/projectWorkflow/projectPaths.js +7 -0
  43. package/dist/projectWorkflow/projectPaths.js.map +1 -1
  44. package/dist/viewer/assets/index-DglJ6f28.css +1 -0
  45. package/dist/viewer/assets/index-DsODREY5.js +9 -0
  46. package/dist/viewer/index.html +2 -2
  47. package/dist/viewer/sw.js +1 -1
  48. package/dist/viewerServer/evidence/classify.d.ts +3 -1
  49. package/dist/viewerServer/evidence/classify.js +10 -0
  50. package/dist/viewerServer/evidence/classify.js.map +1 -1
  51. package/dist/viewerServer/evidence/handles.js +1 -0
  52. package/dist/viewerServer/evidence/handles.js.map +1 -1
  53. package/dist/viewerServer/evidence/projection.d.ts +5 -0
  54. package/dist/viewerServer/evidence/projection.js +19 -0
  55. package/dist/viewerServer/evidence/projection.js.map +1 -1
  56. package/dist/viewerServer/evidence/visualChangeWorkflowView.d.ts +31 -0
  57. package/dist/viewerServer/evidence/visualChangeWorkflowView.js +36 -0
  58. package/dist/viewerServer/evidence/visualChangeWorkflowView.js.map +1 -0
  59. package/dist/viewerServer/httpServer.js +323 -1
  60. package/dist/viewerServer/httpServer.js.map +1 -1
  61. package/dist/viewerServer/referenceApproval.d.ts +22 -0
  62. package/dist/viewerServer/referenceApproval.js +42 -0
  63. package/dist/viewerServer/referenceApproval.js.map +1 -0
  64. package/dist/viewerServer/referenceVisualChangeAuthoring.d.ts +28 -0
  65. package/dist/viewerServer/referenceVisualChangeAuthoring.js +134 -0
  66. package/dist/viewerServer/referenceVisualChangeAuthoring.js.map +1 -0
  67. package/dist/viewerServer/runtimeVisualChangeAuthoring.d.ts +33 -0
  68. package/dist/viewerServer/runtimeVisualChangeAuthoring.js +81 -0
  69. package/dist/viewerServer/runtimeVisualChangeAuthoring.js.map +1 -0
  70. package/dist/viewerServer/visualChangeAuthoring.d.ts +46 -0
  71. package/dist/viewerServer/visualChangeAuthoring.js +63 -0
  72. package/dist/viewerServer/visualChangeAuthoring.js.map +1 -0
  73. package/dist/viewerServer/visualChangeHandoff.d.ts +23 -0
  74. package/dist/viewerServer/visualChangeHandoff.js +31 -0
  75. package/dist/viewerServer/visualChangeHandoff.js.map +1 -0
  76. package/dist/viewerServer/visualChangeReview.d.ts +30 -0
  77. package/dist/viewerServer/visualChangeReview.js +46 -0
  78. package/dist/viewerServer/visualChangeReview.js.map +1 -0
  79. package/docs/ARCHITECTURE.md +17 -5
  80. package/docs/CI_CD.md +33 -1
  81. package/docs/COMMANDS.md +19 -5
  82. package/docs/CONTRACTS.md +38 -4
  83. package/docs/CURRENT_STATE.md +92 -11
  84. package/docs/DEVELOPMENT.md +32 -2
  85. package/docs/PROJECT_MILESTONES.md +28 -0
  86. package/docs/PROJECT_OVERVIEW.md +36 -14
  87. package/docs/QUICKSTART.md +7 -3
  88. package/docs/RELEASE.md +15 -11
  89. package/docs/ROADMAP.md +55 -2
  90. package/docs/SECURITY.md +25 -3
  91. package/docs/WORKFLOWS.md +29 -3
  92. package/docs/plans/v0.10-implementation-plan.md +1509 -0
  93. package/docs/plans/v0.9.1-implementation-plan.md +468 -0
  94. package/docs/reports/v0.10-batch1-visual-change-workflow-foundation.md +102 -0
  95. package/docs/reports/v0.10-batch2-project-composition-check-recording.md +103 -0
  96. package/docs/reports/v0.10-batch3-viewer-visual-change-workspace.md +93 -0
  97. package/docs/reports/v0.10-batch4-actual-frontend-entry.md +59 -0
  98. package/docs/reports/v0.10-batch5-reference-driven-entry.md +238 -0
  99. package/docs/reports/v0.10-batch6-coding-agent-handoff.md +85 -0
  100. package/docs/reports/v0.10-batch7-correction-review-acceptance.md +145 -0
  101. package/docs/reports/v0.10-batch8-integrated-acceptance.md +109 -0
  102. package/docs/reports/v0.10-implementation-completeness-documentation-reconciliation.md +344 -0
  103. package/docs/reports/v0.10-pre-release-readiness.md +120 -0
  104. package/docs/reports/v0.10-release-preparation.md +70 -0
  105. package/docs/reports/v0.9.1-batch1-pwa-hard-gate-isolation.md +359 -0
  106. package/docs/reports/v0.9.1-batch2-hard-gate-validation-integration.md +262 -0
  107. package/docs/reports/v0.9.1-pre-release-readiness.md +206 -0
  108. package/package.json +3 -2
  109. package/dist/viewer/assets/index-BN41MI7m.css +0 -1
  110. package/dist/viewer/assets/index-CkKXnlrI.js +0 -9
@@ -0,0 +1,1509 @@
1
+ # v0.10 Implementation Plan — Full Visual Human–LLM Frontend Change Workflow
2
+
3
+ ## 1. Status and authority
4
+
5
+ This document is the frozen concrete implementation plan for
6
+ `my-frontend-observer` v0.10.
7
+
8
+ It was created during v0.10 version-start planning after reviewing:
9
+
10
+ - `docs/PROJECT_DESCRIPTION.md`;
11
+ - `docs/PROJECT_MILESTONES.md`;
12
+ - `docs/ROADMAP.md`;
13
+ - `docs/CURRENT_STATE.md`;
14
+ - `docs/ARCHITECTURE.md`;
15
+ - `docs/CONTRACTS.md`;
16
+ - `docs/WORKFLOWS.md`;
17
+ - the frozen v0.8, v0.8.1, v0.9, and v0.9.1 plans;
18
+ - the read-only Observer v0.10 architecture/seam reconnaissance at tagged
19
+ `v0.9.1`;
20
+ - the read-only `my-dev-kit-orchestrator@1.3.3` seam reconnaissance used to
21
+ settle the cross-project ownership boundary.
22
+
23
+ The Observer reconnaissance used the published
24
+ `@dailephd/my-dev-kit@1.12.3` and established the current v0.9.1 owners for
25
+ project workflow, `checkProject`, canonical Chromium capture, correction
26
+ preparation/review, annotation persistence, contract promotion, reference
27
+ materialization, and bounded-context projection.
28
+
29
+ The orchestrator reconnaissance independently resolved the same published
30
+ `@dailephd/my-dev-kit@1.12.3` and established that
31
+ `my-dev-kit-orchestrator` owns run/stage lifecycle, prompts, readiness,
32
+ correction routing, artifact staleness, judge integrity, and final-report
33
+ eligibility, but does not execute coding agents, edit source, run Observer,
34
+ perform runtime/reference evaluation, or own baseline/reference approval.
35
+
36
+ This document governs v0.10 implementation scope, architecture, public and
37
+ internal contracts, batch order, and validation expectations unless the user
38
+ explicitly revises it.
39
+
40
+ This document is planning authority only. It does not prove that any v0.10
41
+ batch has been implemented. Actual implementation and release state remain
42
+ owned by repository evidence and `docs/CURRENT_STATE.md`.
43
+
44
+ The package remains `0.9.1` until a separate release-preparation workflow
45
+ explicitly changes it after implementation, documentation reconciliation, and
46
+ pre-release readiness.
47
+
48
+ ## 2. Version objective
49
+
50
+ Complete the visual communication branch by combining the already released:
51
+
52
+ - v0.7 correction/reference loop;
53
+ - v0.8 viewer;
54
+ - v0.8.1 project workflow and canonical `check` surface;
55
+ - v0.9 dual-context structured annotation;
56
+
57
+ into one complete human–LLM frontend-change workflow.
58
+
59
+ Two human entry modes must coexist.
60
+
61
+ Actual-frontend-driven:
62
+
63
+ ```text
64
+ human views a captured runtime frontend
65
+ → annotates requested visual change
66
+ → confirms structured runtime intent
67
+ → executable change scope is frozen
68
+ ```
69
+
70
+ Reference-driven:
71
+
72
+ ```text
73
+ human selects an approved external visual reference
74
+ → views reference beside current runtime frontend
75
+ → annotates reference intent
76
+ → confirms reference requirements
77
+ → explicitly binds reference regions to runtime targets
78
+ → executable reference scope is frozen
79
+ ```
80
+
81
+ Both converge on:
82
+
83
+ ```text
84
+ frozen visual-change scope
85
+ → bounded runtime/reference evidence
86
+ → bounded static evidence when supplied by the external coordination layer
87
+ → coding-agent handoff
88
+ → external coding agent changes target source
89
+ → Observer captures the new runtime state
90
+ → canonical check runs
91
+ → comparison + contract evaluation + reference fidelity run as applicable
92
+ → immutable correction-attempt history is recorded
93
+ → human accepts, requests another correction, or abandons
94
+ → optional baseline/reference governance actions remain explicit
95
+ ```
96
+
97
+ v0.10 does not turn Observer into a source editor, coding-agent executor,
98
+ workflow orchestrator, or autonomous image-to-code system.
99
+
100
+ ## 3. Frozen cross-project responsibility split
101
+
102
+ ### 3.1 Observer owns visual/product semantics
103
+
104
+ Observer remains the canonical owner of:
105
+
106
+ - runtime observations;
107
+ - screenshots and rendered evidence;
108
+ - external-reference evidence;
109
+ - reference applicability and runtime binding;
110
+ - annotation and confirmation;
111
+ - frontend contracts and contract evaluation;
112
+ - reference fidelity;
113
+ - project-level `check` result semantics;
114
+ - visual-change request/attempt identity;
115
+ - immutable visual-change history;
116
+ - final human disposition for the visual change;
117
+ - baseline/reference approval and supersession operations.
118
+
119
+ ### 3.2 my-dev-kit remains the static-evidence owner
120
+
121
+ Observer must not duplicate:
122
+
123
+ - repository indexing;
124
+ - symbol graphs;
125
+ - dependency graphs;
126
+ - architecture analysis;
127
+ - static source ownership inference;
128
+ - bounded source retrieval.
129
+
130
+ v0.10 may consume bounded static evidence through the existing context/correlation
131
+ boundary, but Observer must not invoke or embed a second my-dev-kit runtime.
132
+
133
+ ### 3.3 my-dev-kit-orchestrator remains the workflow lifecycle owner
134
+
135
+ Orchestrator may coordinate:
136
+
137
+ - run and stage progression;
138
+ - generated prompts;
139
+ - context readiness;
140
+ - implementation/test/verification artifact lifecycle;
141
+ - correction routing;
142
+ - downstream staleness;
143
+ - judge integrity;
144
+ - final-report eligibility.
145
+
146
+ Observer must not reimplement those lifecycle concepts.
147
+
148
+ Orchestrator workflow PASS remains distinct from Observer product approval.
149
+
150
+ ### 3.4 External coding agent remains the source editor
151
+
152
+ Neither Observer nor the v0.10 workflow artifact may edit target source.
153
+
154
+ The source-edit boundary remains:
155
+
156
+ ```text
157
+ Observer visual-change evidence / handoff
158
+ → external coding agent or orchestrator-managed prompt workflow
159
+ → target source changes
160
+ → Observer rerender/check
161
+ ```
162
+
163
+ ### 3.5 Lab remains optional
164
+
165
+ `my-dev-kit-lab` is not a production dependency and is not required for every
166
+ normal visual change.
167
+
168
+ It may be used later for ecosystem compatibility, tutorial, regression, or
169
+ release-readiness validation.
170
+
171
+ ## 4. Frozen version-start architecture decisions
172
+
173
+ ### 4.1 One new persisted Observer evidence family
174
+
175
+ v0.10 introduces exactly one new persisted Observer-owned evidence family for
176
+ workflow/history traceability:
177
+
178
+ ```text
179
+ VisualChangeWorkflowArtifact
180
+ artifactKind: my-frontend-observer/visual-change-workflow
181
+ schemaVersion: 1.0.0
182
+ ```
183
+
184
+ Its responsibility is narrow:
185
+
186
+ - freeze the exact visual-change request scope;
187
+ - retain immutable attempt history;
188
+ - connect existing canonical evidence by identity/reference;
189
+ - retain final human disposition;
190
+ - optionally retain an external coordinator reference.
191
+
192
+ It must not become a second:
193
+
194
+ - observation artifact;
195
+ - comparison artifact;
196
+ - evaluation artifact;
197
+ - frontend contract;
198
+ - external-reference artifact;
199
+ - visual annotation artifact;
200
+ - bounded-agent-context artifact;
201
+ - orchestrator run log.
202
+
203
+ Canonical evidence is referenced, not copied wholesale.
204
+
205
+ ### 4.2 Existing canonical schemas remain unchanged
206
+
207
+ v0.10 does not plan a version bump for:
208
+
209
+ - observation schema `1.2.0`;
210
+ - comparison schema `1.0.0`;
211
+ - frontend contract schema `1.0.0`;
212
+ - evaluation artifact schema `1.0.0`;
213
+ - bounded-agent-context schema `1.0.0`;
214
+ - external-reference schema `1.0.0`;
215
+ - visual annotation schema `1.0.0`;
216
+ - Viewer protocol `1.3.0` unless an actual protocol-incompatible change is
217
+ discovered during implementation.
218
+
219
+ Adding the new visual-change artifact family does not require modifying those
220
+ existing families.
221
+
222
+ If implementation discovers a concrete incompatibility, stop the affected
223
+ batch and revise this plan before changing an existing schema/protocol version.
224
+
225
+ ### 4.3 Project-aware Viewer is the human visual workflow entry point
226
+
227
+ Normal v0.10 human interaction continues through:
228
+
229
+ ```text
230
+ my-frontend-observer view
231
+ ```
232
+
233
+ The project-aware Viewer gains a Visual Change workspace.
234
+
235
+ Standalone:
236
+
237
+ ```text
238
+ my-frontend-observer view --root <evidence-root>
239
+ ```
240
+
241
+ remains read-only.
242
+
243
+ Do not add a second graphical application.
244
+
245
+ ### 4.4 Both entry modes use one workflow/history model
246
+
247
+ `VisualChangeWorkflowArtifact.entryMode` is exactly:
248
+
249
+ ```text
250
+ actual-frontend
251
+ reference
252
+ ```
253
+
254
+ The two modes differ only in how the frozen request scope is constructed.
255
+
256
+ After scope confirmation, both use the same:
257
+
258
+ - handoff boundary;
259
+ - external edit boundary;
260
+ - canonical `check` path;
261
+ - immutable attempt record;
262
+ - human review/disposition model.
263
+
264
+ ### 4.5 Canonical post-edit evaluation remains `checkProject`
265
+
266
+ The normal post-edit acceptance path remains the existing canonical project
267
+ check implementation.
268
+
269
+ The v0.10 Viewer or application service must call the same
270
+ `checkProject` owner used by:
271
+
272
+ ```text
273
+ my-frontend-observer check <baseline> --json
274
+ ```
275
+
276
+ Do not recreate:
277
+
278
+ - before/after comparison;
279
+ - frontend-contract verdicts;
280
+ - reference fidelity;
281
+ - unexpected-change handling;
282
+ - overall PASS / FAIL / REVIEW_REQUIRED / BLOCKED precedence.
283
+
284
+ The machine-facing CLI command remains available and its existing behavior
285
+ without a visual workflow remains unchanged.
286
+
287
+ ### 4.6 Visual workflow activation is explicit
288
+
289
+ Creating a visual-change workflow artifact does not silently mutate project
290
+ acceptance state.
291
+
292
+ Before the canonical check loop can evaluate workflow-specific executable
293
+ scope, the user must explicitly activate the workflow's relevant project
294
+ acceptance inputs through one bounded project-aware operation.
295
+
296
+ Activation may set only the already-supported project acceptance inputs needed
297
+ for the workflow:
298
+
299
+ - the promoted per-change contract for actual-frontend mode;
300
+ - the selected approved reference and explicit binding input for reference
301
+ mode.
302
+
303
+ Activation is not approval.
304
+
305
+ The workflow revision must record enough project-relative before/after
306
+ acceptance state to make the change auditable and to support explicit restore.
307
+
308
+ No activation operation may modify baseline/reference artifacts themselves.
309
+
310
+ ### 4.7 Reference selection does not require a second project reference registry
311
+
312
+ Approved references remain discoverable through the existing evidence index.
313
+
314
+ The reference-driven workflow freezes one exact approved reference identity and
315
+ one explicit binding set in the workflow artifact.
316
+
317
+ v0.10 does not introduce a second multi-reference approval registry merely for
318
+ selection.
319
+
320
+ Selecting a reference for one workflow is distinct from:
321
+
322
+ - importing it;
323
+ - approving it;
324
+ - superseding it.
325
+
326
+ ### 4.8 Bindings remain explicit
327
+
328
+ Reference-region ↔ runtime-target bindings are never inferred from:
329
+
330
+ - matching names;
331
+ - geometry;
332
+ - visual proximity;
333
+ - annotation overlap.
334
+
335
+ The visual-change workflow may persist the exact bounded binding declarations
336
+ needed to reproduce its request because there is currently no separate
337
+ canonical binding artifact family.
338
+
339
+ ### 4.9 Correction attempts are Observer-domain evidence, not orchestrator stage attempts
340
+
341
+ Orchestrator stage artifacts are mutable, path-based, and may be regenerated
342
+ during correction.
343
+
344
+ Therefore they are not the authority for immutable visual correction history.
345
+
346
+ Observer persists an immutable visual-change attempt record for every checked
347
+ candidate.
348
+
349
+ An orchestrator run may be referenced by ID, but its mutable stage files do not
350
+ replace Observer attempt identity/history.
351
+
352
+ ### 4.10 Orchestrator integration is optional and reference-based
353
+
354
+ v0.10 must not add `my-dev-kit-orchestrator` as a runtime dependency.
355
+
356
+ A visual workflow may carry an optional external coordination reference:
357
+
358
+ ```text
359
+ provider: my-dev-kit-orchestrator
360
+ runId: <opaque run id>
361
+ packageVersion: <optional version>
362
+ ```
363
+
364
+ Observer does not:
365
+
366
+ - read orchestrator run folders as canonical evidence;
367
+ - mutate orchestrator lifecycle state;
368
+ - decide orchestrator judge verdicts;
369
+ - treat final-report PASS as product approval.
370
+
371
+ The first v0.10 integration should use the existing file/CLI/report boundary.
372
+ Do not create a new orchestrator public lifecycle API unless a later concrete
373
+ implementation blocker proves it necessary.
374
+
375
+ ### 4.11 Final human acceptance is an Observer action
376
+
377
+ Workflow completion and product acceptance remain distinct.
378
+
379
+ A human may accept a visual-change attempt only when the latest canonical
380
+ Observer check result is `PASS`.
381
+
382
+ `FAIL`, `BLOCKED`, and `REVIEW_REQUIRED` cannot be silently accepted as a
383
+ successful v0.10 final state.
384
+
385
+ Final human acceptance records a disposition on the workflow history.
386
+
387
+ It does not automatically:
388
+
389
+ - approve a baseline;
390
+ - approve a reference;
391
+ - supersede a reference;
392
+ - activate a contract.
393
+
394
+ Those remain separate explicit governance operations.
395
+
396
+ ### 4.12 Scope changes create a new request identity
397
+
398
+ Changing any frozen executable request input after attempts have begun creates
399
+ a new visual-change request identity.
400
+
401
+ Examples include:
402
+
403
+ - changing the confirmed annotation;
404
+ - changing the promoted contract;
405
+ - selecting a different approved reference;
406
+ - changing reference bindings;
407
+ - changing the canonical baseline observation used to define the request.
408
+
409
+ Do not append attempts produced under materially different request scope to the
410
+ same request identity.
411
+
412
+ A new workflow revision may point to an earlier workflow artifact for history,
413
+ but its new request identity and attempt sequence remain explicit.
414
+
415
+ ## 5. VisualChangeWorkflowArtifact contract
416
+
417
+ Exact helper names may follow repository conventions. The semantic ownership and
418
+ rules below are frozen.
419
+
420
+ ### 5.1 Constants
421
+
422
+ Conceptually:
423
+
424
+ ```ts
425
+ export const VISUAL_CHANGE_WORKFLOW_ARTIFACT_KIND =
426
+ 'my-frontend-observer/visual-change-workflow' as const;
427
+
428
+ export const VISUAL_CHANGE_WORKFLOW_SCHEMA_VERSION = '1.0.0' as const;
429
+
430
+ export const MAX_VISUAL_CHANGE_ATTEMPTS = 20;
431
+ ```
432
+
433
+ The attempt bound prevents indefinite unbounded history growth inside one
434
+ artifact lineage.
435
+
436
+ ### 5.2 Request scope
437
+
438
+ Conceptually:
439
+
440
+ ```ts
441
+ type VisualChangeEntryMode =
442
+ | 'actual-frontend'
443
+ | 'reference';
444
+
445
+ interface VisualChangeBaselineRef {
446
+ observationId: string;
447
+ requestId: string;
448
+ }
449
+
450
+ interface VisualChangeActualScope {
451
+ entryMode: 'actual-frontend';
452
+ annotationId: string;
453
+ changeContractId: string;
454
+ }
455
+
456
+ interface VisualChangeReferenceScope {
457
+ entryMode: 'reference';
458
+ annotationId: string;
459
+ approvedReferenceId: string;
460
+ approvedReferenceRequestId: string;
461
+ bindings: ExternalReferenceRuntimeBindingDeclaration[];
462
+ }
463
+
464
+ type VisualChangeScope =
465
+ | VisualChangeActualScope
466
+ | VisualChangeReferenceScope;
467
+ ```
468
+
469
+ The workflow also freezes:
470
+
471
+ - canonical baseline observation identity;
472
+ - persistent baseline contract identity when configured;
473
+ - exact project change-contract identity when applicable;
474
+ - exact selected approved-reference identity when applicable;
475
+ - exact binding declarations when applicable.
476
+
477
+ Mutable aliases and absolute paths are not request identity.
478
+
479
+ ### 5.3 Request and revision identity
480
+
481
+ `visualChangeRequestId` is deterministic over canonical semantic request scope.
482
+
483
+ It must include, as applicable:
484
+
485
+ - entry mode;
486
+ - canonical baseline observation identity;
487
+ - confirmed annotation identity;
488
+ - promoted per-change contract identity and clause content identity;
489
+ - selected approved reference request/instance identity;
490
+ - explicit binding declarations;
491
+ - configured persistent baseline contract identity relevant to evaluation.
492
+
493
+ Repeated canonical promotion of semantically equivalent runtime intent may
494
+ produce the same per-change `contractRequestId`, but every promotion produces
495
+ a fresh `contractId`. Because the visual-change request freezes the exact
496
+ promoted per-change contract instance, `contractId` remains part of
497
+ `visualChangeRequestId`. A new promotion therefore produces a new
498
+ `visualChangeRequestId` even when its `contractRequestId` is semantically
499
+ equivalent to an earlier promotion.
500
+
501
+ `contractRequestId` expresses semantic contract-request equivalence.
502
+ `contractId` expresses exact immutable contract-instance identity.
503
+ `visualChangeRequestId` expresses the frozen visual-change request bound to
504
+ that exact contract instance. v0.10 must not deduplicate, reuse, or silently
505
+ substitute an earlier promoted contract merely to preserve a
506
+ `visualChangeRequestId`.
507
+
508
+ It excludes:
509
+
510
+ - timestamps;
511
+ - output directories;
512
+ - Viewer handles;
513
+ - browser ports;
514
+ - absolute paths;
515
+ - orchestrator run-folder paths.
516
+
517
+ `visualChangeWorkflowId` is a fresh persisted instance identity.
518
+
519
+ A new artifact revision uses:
520
+
521
+ ```text
522
+ supersedesVisualChangeWorkflowId
523
+ ```
524
+
525
+ and never rewrites its parent.
526
+
527
+ ### 5.4 Attempt identity
528
+
529
+ v0.10 adds one visual-workflow attempt identity valid for both entry modes:
530
+
531
+ ```text
532
+ visualChangeAttemptId
533
+ = deterministic hash(
534
+ visualChangeRequestId,
535
+ candidateObservationId
536
+ )
537
+ ```
538
+
539
+ The same request plus the same candidate observation must produce the same
540
+ attempt identity.
541
+
542
+ A different candidate observation must produce a different attempt identity.
543
+
544
+ Reference-driven attempts may additionally retain the existing v0.7
545
+ `referenceCorrectionAttemptId` for cross-version traceability.
546
+
547
+ Do not replace the v0.7 identity.
548
+
549
+ ### 5.5 Attempt record
550
+
551
+ Conceptually:
552
+
553
+ ```ts
554
+ interface VisualChangeAttemptRecord {
555
+ visualChangeAttemptId: string;
556
+ priorVisualChangeAttemptId?: string;
557
+
558
+ candidateObservation: {
559
+ observationId: string;
560
+ requestId: string;
561
+ artifactRef: string;
562
+ };
563
+
564
+ check: VisualChangeCheckSnapshot;
565
+
566
+ referenceCorrectionAttemptId?: string;
567
+
568
+ coordination?: {
569
+ provider: 'my-dev-kit-orchestrator';
570
+ runId: string;
571
+ packageVersion?: string;
572
+ };
573
+
574
+ review: {
575
+ state: 'pending' | 'correction-requested' | 'accepted' | 'abandoned';
576
+ decidedAt?: string;
577
+ };
578
+
579
+ recordedAt: string;
580
+ }
581
+ ```
582
+
583
+ `artifactRef` is project-relative and portable.
584
+
585
+ ### 5.6 Check snapshot
586
+
587
+ The attempt stores a bounded normalized snapshot of the canonical
588
+ `CheckWorkflowResult`.
589
+
590
+ It must preserve enough identity/status evidence to establish exactly what was
591
+ evaluated without copying full comparison/evaluation/reference artifacts.
592
+
593
+ At minimum preserve:
594
+
595
+ - overall check status;
596
+ - baseline observation ID;
597
+ - candidate observation ID;
598
+ - comparison ID and project-relative artifact reference when produced;
599
+ - contract evaluation ID/reference when produced;
600
+ - active baseline/per-change contract identities;
601
+ - reference ID when applicable;
602
+ - reference-fidelity state;
603
+ - failed/unavailable contract clause identifiers or bounded counts according
604
+ to the existing check contract;
605
+ - failed/unavailable reference requirement identifiers or bounded counts
606
+ according to the existing check contract;
607
+ - unexpected-change summary already exposed by check;
608
+ - blocker codes/reasons.
609
+
610
+ Do not persist absolute operational paths from CLI JSON.
611
+
612
+ The snapshot is traceability evidence only. The referenced canonical artifacts
613
+ remain authoritative.
614
+
615
+ ### 5.7 Activation record
616
+
617
+ A workflow may include an explicit project-acceptance activation record.
618
+
619
+ It records project-relative before/after values required to show:
620
+
621
+ - which per-change contract was activated;
622
+ - which approved reference/binding configuration was activated;
623
+ - when activation occurred;
624
+ - whether an explicit restore later occurred.
625
+
626
+ Activation does not imply approval.
627
+
628
+ ### 5.8 Human disposition
629
+
630
+ A workflow is not accepted merely because a check passed.
631
+
632
+ The human review operation explicitly records:
633
+
634
+ ```text
635
+ pending
636
+ correction-requested
637
+ accepted
638
+ abandoned
639
+ ```
640
+
641
+ Rules:
642
+
643
+ - `accepted` requires the latest attempt check status to be `PASS`;
644
+ - `correction-requested` may follow a non-passing or passing attempt;
645
+ - `abandoned` ends the human workflow without approving baseline/reference;
646
+ - a new correction attempt after `correction-requested` must point to the
647
+ prior visual-change attempt ID;
648
+ - no attempt may be silently overwritten.
649
+
650
+ ### 5.9 Governance references
651
+
652
+ After final acceptance, optional explicit governance actions may be recorded by
653
+ identity/reference:
654
+
655
+ - baseline approval artifact;
656
+ - approved/superseding external-reference artifact;
657
+ - restored/replaced project acceptance state.
658
+
659
+ The workflow artifact records these results only after the existing canonical
660
+ governance services succeed.
661
+
662
+ It never performs them implicitly.
663
+
664
+ ## 6. Persistence architecture
665
+
666
+ Follow the established immutable-artifact pattern.
667
+
668
+ Expected ownership:
669
+
670
+ ```text
671
+ src/domain/visualChangeWorkflow.ts
672
+ src/domain/visualChangeWorkflowIdentity.ts
673
+ src/artifacts/visualChangeWorkflowArtifactWriter.ts
674
+ src/artifacts/visualChangeWorkflowArtifactReader.ts
675
+ src/application/visualChangeWorkflowPersistenceService.ts
676
+ ```
677
+
678
+ The writer must:
679
+
680
+ 1. validate the complete workflow artifact;
681
+ 2. derive the final directory from `visualChangeWorkflowId`;
682
+ 3. refuse overwrite of an existing final directory;
683
+ 4. write through a sibling temporary directory;
684
+ 5. write `manifest.json`;
685
+ 6. atomically rename the temporary directory;
686
+ 7. remove temporary output on failure.
687
+
688
+ No screenshot, source image, observation manifest, contract manifest, comparison
689
+ artifact, evaluation artifact, or external-reference image is copied into the
690
+ workflow directory.
691
+
692
+ Reference-mode binding declarations may be written as bounded workflow-owned
693
+ input when needed by the existing project check/reference-evaluation path.
694
+
695
+ Managed layout:
696
+
697
+ ```text
698
+ .frontend-observer/
699
+ evidence/
700
+ visual-changes/
701
+ <visualChangeWorkflowId>/
702
+ manifest.json
703
+ bindings.json # reference mode only, when required
704
+ ```
705
+
706
+ The workflow reader must validate all references structurally and fail closed on
707
+ unsafe project-relative paths.
708
+
709
+ ## 7. Project acceptance activation
710
+
711
+ ### 7.1 No hidden activation
712
+
713
+ Creating or saving a workflow does not change project acceptance configuration.
714
+
715
+ ### 7.2 Actual-frontend activation
716
+
717
+ Actual mode requires a canonical per-change contract produced through the v0.9
718
+ promotion path.
719
+
720
+ The user explicitly activates that contract through the existing project
721
+ change-contract activation owner.
722
+
723
+ If another per-change contract is currently active, the UI must disclose the
724
+ replacement before the user confirms it.
725
+
726
+ ### 7.3 Reference activation
727
+
728
+ Reference mode requires:
729
+
730
+ - lifecycle `approved`;
731
+ - exact applicability/compatibility semantics;
732
+ - explicit binding declarations.
733
+
734
+ Add one narrow application service that activates the selected approved
735
+ reference and binding input in the already-existing project acceptance
736
+ configuration.
737
+
738
+ It must not approve the reference.
739
+
740
+ It must preserve the previous project-relative reference configuration in the
741
+ workflow activation record.
742
+
743
+ ### 7.4 Restore
744
+
745
+ A workflow may offer an explicit restore action that reapplies the recorded
746
+ pre-activation project acceptance values.
747
+
748
+ Restore is not automatic on failure or abandonment.
749
+
750
+ ## 8. Coding-agent handoff contract
751
+
752
+ v0.10 adds a pure bounded handoff projection, not a new persisted evidence
753
+ family.
754
+
755
+ Conceptually:
756
+
757
+ ```ts
758
+ interface VisualChangeAgentHandoff {
759
+ visualChangeRequestId: string;
760
+ visualChangeWorkflowId: string;
761
+ entryMode: VisualChangeEntryMode;
762
+
763
+ confirmedScope: ...; // canonical references only
764
+ runtimeEvidence: ...; // bounded canonical references
765
+ referenceEvidence?: ...; // bounded canonical references
766
+ boundedAgentContext?: BoundedAgentContext;
767
+
768
+ expectedPostEditCheck: {
769
+ baseline: string;
770
+ command: 'check';
771
+ json: true;
772
+ };
773
+
774
+ externalCoordination?: {
775
+ provider: 'my-dev-kit-orchestrator';
776
+ runId: string;
777
+ };
778
+ }
779
+ ```
780
+
781
+ Rules:
782
+
783
+ - reuse existing `BoundedAgentContext` unchanged when supplied/constructed
784
+ through the existing v0.6 owner;
785
+ - do not add visual-workflow fields to the bounded-agent-context schema solely
786
+ for convenience;
787
+ - reference mode may reuse `prepareReferenceCorrection` and its deterministic
788
+ review identity;
789
+ - actual mode projects the confirmed contract/runtime scope through the
790
+ existing bounded-context machinery;
791
+ - static/source evidence remains externally produced;
792
+ - handoff preparation never edits target source;
793
+ - handoff preparation never starts or drives an orchestrator run.
794
+
795
+ The handoff must make the required post-edit acceptance operation explicit:
796
+
797
+ ```text
798
+ my-frontend-observer check <baseline> --json
799
+ ```
800
+
801
+ ## 9. Viewer read model
802
+
803
+ Extend evidence discovery/classification for the new artifact family.
804
+
805
+ Bounded index metadata should include:
806
+
807
+ - workflow ID;
808
+ - request ID;
809
+ - entry mode;
810
+ - baseline observation ID;
811
+ - confirmed annotation ID;
812
+ - selected reference ID when applicable;
813
+ - attempt count;
814
+ - latest attempt status;
815
+ - latest human review state;
816
+ - superseded workflow ID when present.
817
+
818
+ Full history remains on-demand.
819
+
820
+ Add one visual-change view projection that resolves:
821
+
822
+ ```text
823
+ workflow
824
+ → baseline observation
825
+ → annotation
826
+ → promoted contract when applicable
827
+ → selected approved reference when applicable
828
+ → attempt candidate observations
829
+ → comparison/evaluation/reference evidence referenced by check snapshots
830
+ ```
831
+
832
+ The Viewer must treat unavailable referenced evidence honestly and must not guess
833
+ replacement evidence.
834
+
835
+ ## 10. Project-aware Viewer write boundary
836
+
837
+ v0.10 extends the existing project-aware authoring boundary.
838
+
839
+ All new write routes require the existing:
840
+
841
+ - valid initialized project;
842
+ - loopback host boundary;
843
+ - same-origin checks;
844
+ - in-memory authoring capability token;
845
+ - JSON content type;
846
+ - body bounds;
847
+ - no-store responses;
848
+ - safe project-contained path validation.
849
+
850
+ Standalone `view --root` remains read-only.
851
+
852
+ Conceptual project-aware operations:
853
+
854
+ ```text
855
+ POST /api/visual-changes
856
+ POST /api/visual-changes/:handle/activate
857
+ POST /api/visual-changes/:handle/prepare-handoff
858
+ POST /api/visual-changes/:handle/check
859
+ POST /api/visual-changes/:handle/review
860
+ POST /api/visual-changes/:handle/restore-acceptance
861
+ ```
862
+
863
+ Exact route spelling may follow existing server conventions, but these operations
864
+ must remain distinct.
865
+
866
+ Do not add generic filesystem mutation endpoints.
867
+
868
+ ## 11. Actual-frontend-driven workflow
869
+
870
+ The first mode must implement:
871
+
872
+ ```text
873
+ project-aware Viewer
874
+ → select runtime observation used as visual request baseline
875
+ → create/load runtime annotation
876
+ → explicitly associate marks with runtime targets/relationships
877
+ → confirm supported change intent
878
+ → promote selected confirmed intent to canonical per-change contract
879
+ → explicitly activate that contract
880
+ → create/freeze VisualChangeWorkflowArtifact
881
+ → prepare bounded coding-agent handoff
882
+ → external edit
883
+ → check current frontend through canonical checkProject
884
+ → persist immutable attempt revision
885
+ → inspect PASS/FAIL/REVIEW_REQUIRED/BLOCKED evidence
886
+ → request correction or accept
887
+ ```
888
+
889
+ Rules:
890
+
891
+ - only confirmed, promotable runtime intent may enter executable scope;
892
+ - confirmed `remove` remains non-promotable under the current contract
893
+ vocabulary;
894
+ - informational marks may remain in annotation but are not executable scope;
895
+ - the selected runtime observation and contract identities are frozen into the
896
+ request identity;
897
+ - a later scope change creates a new request identity.
898
+
899
+ ## 12. Reference-driven workflow
900
+
901
+ The second mode must implement:
902
+
903
+ ```text
904
+ project-aware Viewer
905
+ → discover/select an existing approved reference
906
+ → inspect reference beside current runtime frontend
907
+ → create/load reference annotation
908
+ → confirm reference regions/requirements
909
+ → materialize a new reference revision if needed
910
+ → explicitly approve that revision if the user wants it to become the selected
911
+ approved reference
912
+ → explicitly bind selected reference regions to runtime targets
913
+ → create/freeze VisualChangeWorkflowArtifact
914
+ → explicitly activate selected reference/bindings for project check
915
+ → prepare bounded coding-agent handoff
916
+ → external edit
917
+ → canonical checkProject
918
+ → persist immutable attempt revision
919
+ → inspect fidelity + contract + overall evidence
920
+ → request correction or accept
921
+ ```
922
+
923
+ Rules:
924
+
925
+ - workflow start requires lifecycle `approved`;
926
+ - imported/materialized references do not qualify until explicitly approved;
927
+ - applicability/compatibility rules remain canonical;
928
+ - bindings remain explicit;
929
+ - reference-fidelity PASS cannot override a contract failure;
930
+ - no raster-to-code interpretation is introduced.
931
+
932
+ ## 13. Correction iteration model
933
+
934
+ One visual-change request may contain up to
935
+ `MAX_VISUAL_CHANGE_ATTEMPTS` immutable attempts.
936
+
937
+ Each attempt is:
938
+
939
+ ```text
940
+ same frozen request identity
941
+ + new candidate observation
942
+ + canonical check result
943
+ + optional existing reference-correction attempt identity
944
+ + optional external coordinator run reference
945
+ + human review decision
946
+ ```
947
+
948
+ The normal loop is:
949
+
950
+ ```text
951
+ attempt N check
952
+ → FAIL / REVIEW_REQUIRED / BLOCKED
953
+ → human requests correction
954
+ → external coding-agent correction
955
+ → fresh candidate capture/check
956
+ → attempt N+1
957
+ ```
958
+
959
+ No retry occurs automatically inside Observer.
960
+
961
+ A failed attempt remains inspectable after later success.
962
+
963
+ ## 14. Human acceptance and governance
964
+
965
+ ### 14.1 Accept result
966
+
967
+ The Viewer may enable `Accept result` only when the latest check status is
968
+ `PASS`.
969
+
970
+ Acceptance creates a new immutable workflow revision.
971
+
972
+ ### 14.2 Baseline governance remains separate
973
+
974
+ After acceptance, the user may separately invoke the existing canonical
975
+ baseline-approval path against the accepted candidate according to the existing
976
+ baseline contract semantics.
977
+
978
+ The workflow may record the resulting baseline artifact identity.
979
+
980
+ It must not fabricate new baseline rules.
981
+
982
+ ### 14.3 Reference governance remains separate
983
+
984
+ If reference authoring/materialization produced a successor reference, the user
985
+ may separately approve/supersede it through the existing canonical reference
986
+ service.
987
+
988
+ The workflow may record the resulting approved reference identity.
989
+
990
+ Acceptance alone does not approve or supersede a reference.
991
+
992
+ ### 14.4 Orchestrator workflow success remains separate
993
+
994
+ An orchestrator final-report PASS may be displayed as coordination evidence when
995
+ linked, but cannot:
996
+
997
+ - mark the visual change accepted;
998
+ - approve a baseline;
999
+ - approve/supersede a reference;
1000
+ - activate a contract.
1001
+
1002
+ ## 15. Orchestrator compatibility boundary
1003
+
1004
+ The initial v0.10 product implementation does not require an orchestrator code
1005
+ change.
1006
+
1007
+ Observer exposes enough bounded handoff/reference information for an external
1008
+ caller to:
1009
+
1010
+ 1. start/continue a normal orchestrator run;
1011
+ 2. provide Observer evidence to the run through existing file/report/context
1012
+ seams;
1013
+ 3. let the external coding agent perform the edit;
1014
+ 4. run Observer `check <baseline> --json`;
1015
+ 5. reference the resulting Observer attempt/evidence in verification/judge
1016
+ reporting.
1017
+
1018
+ A v0.10 compatibility test may exercise the published orchestrator CLI from a
1019
+ disposable fixture, but Observer must not depend on its internal APIs or mutable
1020
+ run-file format.
1021
+
1022
+ If implementation proves that the existing CLI/file boundary cannot preserve
1023
+ required identity/provenance, stop and revise this plan before adding a new
1024
+ orchestrator public integration contract.
1025
+
1026
+ ## 16. PWA and acceptance-gate rule carried from v0.9.1
1027
+
1028
+ Any test explicitly designated:
1029
+
1030
+ ```text
1031
+ HARD GATE
1032
+ SECURITY GATE
1033
+ ACCEPTANCE GATE
1034
+ ```
1035
+
1036
+ must establish every material prerequisite itself from fresh state.
1037
+
1038
+ It must not rely on:
1039
+
1040
+ - previous test order;
1041
+ - warmed browser/service-worker cache;
1042
+ - a reused browser profile;
1043
+ - another test's server;
1044
+ - another test's evidence fixture.
1045
+
1046
+ Do not copy the old weak service-worker readiness expression into new gates.
1047
+
1048
+ v0.10 does not otherwise redesign PWA caching.
1049
+
1050
+ ## 17. Implementation sequence
1051
+
1052
+ ### Batch 1 — Visual-change workflow domain, identity, persistence, and discovery
1053
+
1054
+ #### Goal
1055
+
1056
+ Introduce the one new persisted workflow/history family without changing
1057
+ existing evidence schemas or Viewer behavior.
1058
+
1059
+ #### Production scope
1060
+
1061
+ - `VisualChangeWorkflowArtifact` contract and validator;
1062
+ - request/revision/attempt identity helpers;
1063
+ - bounded attempt/history rules;
1064
+ - immutable writer/reader/persistence service;
1065
+ - project-managed `evidence/visual-changes/` layout;
1066
+ - optional workflow-owned reference binding file;
1067
+ - evidence discovery/classification metadata;
1068
+ - on-demand workflow read projection.
1069
+
1070
+ #### Mandatory tests
1071
+
1072
+ - schema/validator positives and negatives;
1073
+ - deterministic request identity;
1074
+ - fresh workflow revision identity;
1075
+ - deterministic attempt identity;
1076
+ - changed candidate changes attempt identity;
1077
+ - changed scope changes request identity;
1078
+ - immutable revision/supersession behavior;
1079
+ - attempt bound;
1080
+ - unsafe path/reference rejection;
1081
+ - writer cleanup on failure;
1082
+ - discovery metadata;
1083
+ - no mutation/copy of referenced canonical artifacts.
1084
+
1085
+ #### Gate
1086
+
1087
+ The new family persists and reloads independently while all prior artifact
1088
+ families and schemas remain unchanged.
1089
+
1090
+ ### Batch 2 — Project workflow composition, activation, and canonical check recording
1091
+
1092
+ #### Goal
1093
+
1094
+ Connect the new workflow history to existing project acceptance and
1095
+ `checkProject` without adding a second evaluator.
1096
+
1097
+ #### Production scope
1098
+
1099
+ - create/freeze actual/reference workflow application service;
1100
+ - explicit project acceptance activation;
1101
+ - explicit restore operation;
1102
+ - canonical check invocation through `checkProject`;
1103
+ - normalized check snapshot;
1104
+ - append immutable attempt revision;
1105
+ - verify check result identities match frozen request scope;
1106
+ - reject hidden scope/config drift;
1107
+ - preserve existing `check` behavior outside v0.10 workflow use.
1108
+
1109
+ #### Mandatory tests
1110
+
1111
+ - actual-mode scope creation;
1112
+ - reference-mode scope creation;
1113
+ - activation is explicit;
1114
+ - activation is not approval;
1115
+ - restore is explicit;
1116
+ - canonical check called once through existing owner;
1117
+ - baseline contract remains active;
1118
+ - selected workflow contract/reference is evaluated;
1119
+ - reference PASS + contract FAIL remains overall FAIL;
1120
+ - mismatched scope/config blocks attempt recording;
1121
+ - existing CLI/project check regressions remain unchanged.
1122
+
1123
+ #### Gate
1124
+
1125
+ A caller can create a frozen workflow, explicitly activate it, run the canonical
1126
+ check path, and persist one immutable attempt without Viewer UI.
1127
+
1128
+ ### Batch 3 — Viewer discovery, visual-change workspace, and secure API boundary
1129
+
1130
+ #### Goal
1131
+
1132
+ Expose the workflow/history family in the existing project-aware Viewer and add
1133
+ only the bounded write operations required by v0.10.
1134
+
1135
+ #### Production scope
1136
+
1137
+ - workflow metadata in `/api/index`;
1138
+ - on-demand visual-change view projection;
1139
+ - Visual Change navigation/workspace;
1140
+ - project-aware API operations for create/activate/check/review/restore;
1141
+ - reuse existing authoring token/origin/body/security guards;
1142
+ - standalone `view --root` remains read-only;
1143
+ - unavailable linked evidence displayed honestly.
1144
+
1145
+ #### Mandatory tests
1146
+
1147
+ - project-aware operations authorized;
1148
+ - standalone operations rejected;
1149
+ - missing/invalid/stale workflow source evidence reported honestly;
1150
+ - no arbitrary filesystem paths;
1151
+ - no token/path leakage;
1152
+ - no-store behavior;
1153
+ - existing annotation POST routes unchanged;
1154
+ - keyboard/accessibility basics for new workspace shell.
1155
+
1156
+ #### Gate
1157
+
1158
+ The Viewer can load and inspect a workflow artifact and exercise bounded project
1159
+ operations without yet completing either human entry mode.
1160
+
1161
+ ### Batch 4 — Actual-frontend-driven visual change flow
1162
+
1163
+ #### Goal
1164
+
1165
+ Complete the human runtime-screenshot entry mode from annotation through
1166
+ handoff-ready frozen executable scope.
1167
+
1168
+ #### Production scope
1169
+
1170
+ - choose runtime baseline/source observation;
1171
+ - reuse runtime annotation authoring;
1172
+ - confirm executable runtime intent;
1173
+ - promote selected supported intent;
1174
+ - explicit contract activation;
1175
+ - create/freeze actual-mode workflow;
1176
+ - show request identity and active scope;
1177
+ - block unsupported/unconfirmed requested scope;
1178
+ - prepare mode-independent workflow state for later handoff/check.
1179
+
1180
+ #### Mandatory browser tests
1181
+
1182
+ - successful actual-mode scope creation;
1183
+ - marks without explicit association stay non-executable;
1184
+ - candidate/unconfirmed intent cannot start executable workflow;
1185
+ - confirmed `remove` remains non-promotable;
1186
+ - explicit activation replaces no contract silently;
1187
+ - changing scope produces a new request identity;
1188
+ - existing annotation save/revision behavior preserved.
1189
+
1190
+ #### Gate
1191
+
1192
+ A human can create a frozen actual-frontend visual-change request in the Viewer
1193
+ without any external reference.
1194
+
1195
+ ### Batch 5 — Reference-driven visual change flow
1196
+
1197
+ #### Goal
1198
+
1199
+ Complete the reference entry mode using only approved references, explicit
1200
+ applicability/bindings, and existing reference semantics.
1201
+
1202
+ #### Production scope
1203
+
1204
+ - discover/select approved references from existing evidence;
1205
+ - reuse reference annotation/materialization;
1206
+ - explicit approval required for a materialized revision before workflow use;
1207
+ - explicit runtime binding authoring/selection;
1208
+ - create/freeze reference-mode workflow;
1209
+ - persist bounded binding declarations;
1210
+ - explicit project reference activation;
1211
+ - compatibility/applicability display;
1212
+ - request identity includes exact reference/binding scope.
1213
+
1214
+ #### Mandatory browser tests
1215
+
1216
+ - imported reference cannot start executable workflow;
1217
+ - approved reference can;
1218
+ - changing selected reference changes request identity;
1219
+ - changing bindings changes request identity;
1220
+ - name similarity never creates binding;
1221
+ - incompatible applicability blocks workflow/check;
1222
+ - activation does not approve/supersede;
1223
+ - reference and runtime coordinate systems remain separate.
1224
+
1225
+ #### Gate
1226
+
1227
+ A human can create a frozen reference-driven visual-change request using an
1228
+ approved reference and explicit bindings.
1229
+
1230
+ ### Batch 6 — Coding-agent handoff and optional orchestrator correlation
1231
+
1232
+ #### Goal
1233
+
1234
+ Produce one bounded external implementation handoff for either entry mode while
1235
+ preserving project boundaries.
1236
+
1237
+ #### Production scope
1238
+
1239
+ - pure `VisualChangeAgentHandoff` projection;
1240
+ - actual mode uses existing bounded context/project contract evidence;
1241
+ - reference mode reuses existing `prepareReferenceCorrection` where
1242
+ applicable;
1243
+ - retain/reference deterministic v0.7 review identity;
1244
+ - optional external coordinator reference
1245
+ (`my-dev-kit-orchestrator` run ID/version);
1246
+ - no orchestrator package/runtime dependency;
1247
+ - Viewer exposes/copies/downloads bounded handoff;
1248
+ - exact required post-edit `check <baseline> --json` operation is included.
1249
+
1250
+ #### Mandatory tests
1251
+
1252
+ - actual and reference handoff projections bounded/deterministic;
1253
+ - existing `BoundedAgentContext` schema unchanged;
1254
+ - no target source read/write;
1255
+ - no orchestrator execution;
1256
+ - no absolute orchestrator run path persisted;
1257
+ - optional run reference round-trips;
1258
+ - reference handoff preserves protected/preserved constraints;
1259
+ - producer/static evidence remains externally owned.
1260
+
1261
+ #### Compatibility proof
1262
+
1263
+ Run one disposable integration proof against the current published
1264
+ `my-dev-kit-orchestrator` CLI/file boundary without importing orchestrator
1265
+ internals.
1266
+
1267
+ The proof must show that Observer evidence can be referenced in a run while
1268
+ Observer remains the runtime/reference evaluator and orchestrator remains the
1269
+ workflow lifecycle owner.
1270
+
1271
+ #### Gate
1272
+
1273
+ A coding agent or external orchestrator workflow can receive one bounded
1274
+ traceable handoff without direct artifact-path reconstruction by the human.
1275
+
1276
+ ### Batch 7 — Correction loop, immutable attempt history, and human acceptance
1277
+
1278
+ #### Goal
1279
+
1280
+ Complete repeated correction and explicit human review/governance.
1281
+
1282
+ #### Production scope
1283
+
1284
+ - Viewer action to run canonical project check after an external edit;
1285
+ - persist immutable attempt record;
1286
+ - show complete attempt timeline;
1287
+ - correction-requested action;
1288
+ - next attempt links to prior attempt;
1289
+ - reference mode retains existing reference-correction attempt identity;
1290
+ - accepted only on latest canonical PASS;
1291
+ - abandoned state;
1292
+ - explicit restore action;
1293
+ - optional recording of later baseline/reference governance results;
1294
+ - no automatic approval or retry.
1295
+
1296
+ #### Mandatory browser/integration tests
1297
+
1298
+ - attempt 1 FAIL -> correction requested -> attempt 2 PASS;
1299
+ - attempt 1 remains inspectable byte-for-byte;
1300
+ - candidate IDs/attempt IDs remain distinct;
1301
+ - protected regression fails even when requested/reference goal succeeds;
1302
+ - reference fidelity PASS + contract FAIL remains overall FAIL;
1303
+ - BLOCKED/REVIEW_REQUIRED cannot be accepted;
1304
+ - orchestrator PASS reference cannot cause Observer acceptance;
1305
+ - acceptance does not approve baseline/reference;
1306
+ - explicit governance action references are recorded only after canonical
1307
+ services succeed.
1308
+
1309
+ #### Gate
1310
+
1311
+ Both visual entry modes can complete a human-reviewed correction cycle with
1312
+ immutable attempt history and explicit acceptance.
1313
+
1314
+ ### Batch 8 — Integrated acceptance, packed-candidate proof, and implementation documentation
1315
+
1316
+ #### Goal
1317
+
1318
+ Prove the complete v0.10 product surface as one integrated system and prepare
1319
+ for the separate documentation-reconciliation/readiness workflows.
1320
+
1321
+ #### Required integrated scenarios
1322
+
1323
+ 1. Successful actual-frontend-driven visual change.
1324
+ 2. Successful reference-driven design-replication change.
1325
+ 3. Measurable actionable reference/candidate failure.
1326
+ 4. Requested visual change succeeds locally but introduces a protected or
1327
+ preserved regression -> overall FAIL.
1328
+ 5. Reference fidelity passes while an active contract fails -> overall FAIL.
1329
+ 6. Two-attempt correction history: first failure retained, second PASS.
1330
+ 7. Human acceptance on PASS.
1331
+ 8. Explicit baseline/reference governance remains separate.
1332
+ 9. Optional orchestrator run reference remains traceable without becoming
1333
+ product approval.
1334
+ 10. Standalone Viewer remains read-only.
1335
+ 11. Existing v0.9 annotation, v0.8 Viewer, v0.8.1 project workflow, and v0.7
1336
+ correction behavior remain regression-safe.
1337
+
1338
+ #### Browser acceptance
1339
+
1340
+ Add one deterministic real-Chromium v0.10 integrated acceptance suite using the
1341
+ existing demo/fixture substrate where appropriate.
1342
+
1343
+ Any test labeled `ACCEPTANCE GATE` must establish all material prerequisites
1344
+ from fresh state.
1345
+
1346
+ #### Packed candidate
1347
+
1348
+ Extend the existing same-candidate pre-release smoke architecture additively.
1349
+
1350
+ Add a v0.10 packed workflow smoke that uses only the installed package and
1351
+ proves:
1352
+
1353
+ - the new artifact reader/writer surface is packaged;
1354
+ - project-aware Viewer visual-change routes are present;
1355
+ - actual and reference workflow creation works;
1356
+ - at least one correction attempt is persisted;
1357
+ - acceptance rules hold;
1358
+ - prior evidence remains immutable;
1359
+ - no authoring token, note text, absolute project path, or local orchestrator
1360
+ path leaks into the smoke summary.
1361
+
1362
+ Do not create a second candidate tarball or parallel release matrix.
1363
+
1364
+ #### Documentation
1365
+
1366
+ Update current implementation documentation only after the integrated behavior
1367
+ exists.
1368
+
1369
+ Do not mark v0.10 published.
1370
+
1371
+ #### Gate
1372
+
1373
+ All v0.10 implementation batches are complete and the version is ready for the
1374
+ separate hardened documentation/implementation-completeness workflow.
1375
+
1376
+ ## 18. Cross-batch invariants
1377
+
1378
+ Every batch must preserve:
1379
+
1380
+ 1. Observer never edits target source.
1381
+ 2. Canonical Chromium capture remains single-owner.
1382
+ 3. `checkProject` remains the one project post-edit evaluation owner.
1383
+ 4. Existing comparison, contract, relationship, reference, fidelity, and
1384
+ bounded-context engines are reused.
1385
+ 5. Visual annotations remain evidence, not contracts.
1386
+ 6. Promotion remains separate from activation.
1387
+ 7. Materialization remains separate from reference approval.
1388
+ 8. Workflow creation remains separate from project acceptance activation.
1389
+ 9. Workflow PASS/human acceptance remains separate from baseline/reference
1390
+ approval.
1391
+ 10. Orchestrator lifecycle remains externally owned.
1392
+ 11. No existing canonical evidence schema is changed without an explicit plan
1393
+ revision.
1394
+ 12. Existing evidence remains immutable.
1395
+ 13. Workflow revisions and attempts are immutable.
1396
+ 14. Reference/runtime/static/annotation/workflow identities remain distinct.
1397
+ 15. Missing/unavailable/ambiguous/incompatible evidence is never fabricated.
1398
+ 16. Standalone `view --root` remains read-only.
1399
+ 17. Project-aware write routes remain narrow and security-guarded.
1400
+ 18. No automatic retry, coding-agent execution, baseline approval, or reference
1401
+ approval is introduced.
1402
+ 19. New acceptance/security gates are independently runnable from fresh state.
1403
+ 20. Generated/local integration state remains outside the npm package.
1404
+
1405
+ ## 19. Version-wide validation
1406
+
1407
+ After Batch 8, implementation validation must include the repository's complete
1408
+ current validation chain:
1409
+
1410
+ ```text
1411
+ npm run typecheck
1412
+ npm run lint
1413
+ npm test
1414
+ npm run test:browser
1415
+ npm run test:security
1416
+ npm run build
1417
+ npm run check:docs
1418
+ git diff --check
1419
+ npm pack --dry-run
1420
+ ```
1421
+
1422
+ Also run:
1423
+
1424
+ - the v0.10 integrated browser acceptance suite;
1425
+ - the installed packed v0.10 workflow smoke;
1426
+ - any focused compatibility proof required for the external orchestrator
1427
+ boundary.
1428
+
1429
+ Do not treat this implementation validation as formal release readiness.
1430
+
1431
+ After implementation passes, follow the established workflow:
1432
+
1433
+ ```text
1434
+ implementation complete
1435
+ → hardened documentation + implementation-completeness reconciliation
1436
+ → pre-release readiness / cross-platform / security
1437
+ → release prep
1438
+ → publication only after explicit user approval
1439
+ ```
1440
+
1441
+ ## 20. Explicit v0.10 exclusions
1442
+
1443
+ v0.10 does not include:
1444
+
1445
+ - Observer editing application source;
1446
+ - built-in LLM/provider execution;
1447
+ - autonomous coding-agent execution;
1448
+ - automatic retry loops;
1449
+ - automatic baseline approval;
1450
+ - automatic reference approval/supersession;
1451
+ - automatic contract activation without explicit human action;
1452
+ - raster-to-code generation;
1453
+ - OCR/CV segmentation;
1454
+ - automatic binding from geometry/name similarity;
1455
+ - a second comparison engine;
1456
+ - a second contract evaluator;
1457
+ - a second reference-fidelity engine;
1458
+ - a second bounded-context engine;
1459
+ - a second orchestrator lifecycle;
1460
+ - a generic public orchestrator lifecycle API unless a concrete implementation
1461
+ blocker forces a later plan revision;
1462
+ - a new cross-project shared package merely for symmetry;
1463
+ - changing existing evidence schema versions without proven need;
1464
+ - multi-user/server-hosted workflow state;
1465
+ - cloud synchronization;
1466
+ - public-internet canonical test fixtures.
1467
+
1468
+ ## 21. Prompt count and implementation order
1469
+
1470
+ The implementation order is frozen as eight context-sharing batches:
1471
+
1472
+ ```text
1473
+ Batch 1
1474
+ Visual-change domain / identity / persistence / discovery
1475
+
1476
+ Batch 2
1477
+ Project composition / activation / canonical check attempt recording
1478
+
1479
+ Batch 3
1480
+ Viewer workspace / secure project-aware API
1481
+
1482
+ Batch 4
1483
+ Actual-frontend-driven entry mode
1484
+
1485
+ Batch 5
1486
+ Reference-driven entry mode
1487
+
1488
+ Batch 6
1489
+ Coding-agent handoff / optional orchestrator correlation
1490
+
1491
+ Batch 7
1492
+ Correction loop / immutable history / human acceptance
1493
+
1494
+ Batch 8
1495
+ Integrated acceptance / packed candidate / implementation docs
1496
+ ```
1497
+
1498
+ Do not combine later-batch work into an earlier batch merely because adjacent
1499
+ owners are already open.
1500
+
1501
+ Do not split release readiness, release preparation, or publication into these
1502
+ implementation batches.
1503
+
1504
+ After each passing batch, the next coding-agent prompt must use the current
1505
+ repository state and this frozen plan as authority.
1506
+
1507
+ If implementation evidence shows that a frozen architecture decision is
1508
+ incorrect or impossible, stop and revise this document explicitly before
1509
+ continuing.