@dailephd/my-frontend-observer 0.8.1 → 0.9.1

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 (111) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/README.md +109 -7
  3. package/dist/application/projectWorkflowService.d.ts +18 -1
  4. package/dist/application/projectWorkflowService.js +40 -2
  5. package/dist/application/projectWorkflowService.js.map +1 -1
  6. package/dist/application/visualAnnotationContractPromotionService.d.ts +41 -0
  7. package/dist/application/visualAnnotationContractPromotionService.js +143 -0
  8. package/dist/application/visualAnnotationContractPromotionService.js.map +1 -0
  9. package/dist/application/visualAnnotationPersistenceService.d.ts +34 -0
  10. package/dist/application/visualAnnotationPersistenceService.js +68 -0
  11. package/dist/application/visualAnnotationPersistenceService.js.map +1 -0
  12. package/dist/application/visualAnnotationReferenceMaterializationService.d.ts +53 -0
  13. package/dist/application/visualAnnotationReferenceMaterializationService.js +194 -0
  14. package/dist/application/visualAnnotationReferenceMaterializationService.js.map +1 -0
  15. package/dist/artifacts/visualAnnotationArtifactReader.d.ts +19 -0
  16. package/dist/artifacts/visualAnnotationArtifactReader.js +66 -0
  17. package/dist/artifacts/visualAnnotationArtifactReader.js.map +1 -0
  18. package/dist/artifacts/visualAnnotationArtifactWriter.d.ts +42 -0
  19. package/dist/artifacts/visualAnnotationArtifactWriter.js +85 -0
  20. package/dist/artifacts/visualAnnotationArtifactWriter.js.map +1 -0
  21. package/dist/cli.js +464 -454
  22. package/dist/cli.js.map +1 -1
  23. package/dist/domain/visualAnnotation.d.ts +217 -0
  24. package/dist/domain/visualAnnotation.js +584 -0
  25. package/dist/domain/visualAnnotation.js.map +1 -0
  26. package/dist/domain/visualAnnotationIdentity.d.ts +17 -0
  27. package/dist/domain/visualAnnotationIdentity.js +47 -0
  28. package/dist/domain/visualAnnotationIdentity.js.map +1 -0
  29. package/dist/index.d.ts +11 -0
  30. package/dist/index.js +6 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/projectWorkflow/projectPaths.d.ts +9 -0
  33. package/dist/projectWorkflow/projectPaths.js +21 -0
  34. package/dist/projectWorkflow/projectPaths.js.map +1 -1
  35. package/dist/viewer/assets/{index-CN_yb9Uf.css → index-BN41MI7m.css} +1 -1
  36. package/dist/viewer/assets/index-CkKXnlrI.js +9 -0
  37. package/dist/viewer/index.html +2 -2
  38. package/dist/viewer/sw.js +1 -1
  39. package/dist/viewerServer/annotationAuthoring.d.ts +64 -0
  40. package/dist/viewerServer/annotationAuthoring.js +230 -0
  41. package/dist/viewerServer/annotationAuthoring.js.map +1 -0
  42. package/dist/viewerServer/annotationContractPromotion.d.ts +51 -0
  43. package/dist/viewerServer/annotationContractPromotion.js +105 -0
  44. package/dist/viewerServer/annotationContractPromotion.js.map +1 -0
  45. package/dist/viewerServer/annotationReferenceMaterialization.d.ts +40 -0
  46. package/dist/viewerServer/annotationReferenceMaterialization.js +91 -0
  47. package/dist/viewerServer/annotationReferenceMaterialization.js.map +1 -0
  48. package/dist/viewerServer/authoringSecurity.d.ts +59 -0
  49. package/dist/viewerServer/authoringSecurity.js +112 -0
  50. package/dist/viewerServer/authoringSecurity.js.map +1 -0
  51. package/dist/viewerServer/evidence/annotationView.d.ts +28 -0
  52. package/dist/viewerServer/evidence/annotationView.js +43 -0
  53. package/dist/viewerServer/evidence/annotationView.js.map +1 -0
  54. package/dist/viewerServer/evidence/classify.d.ts +3 -1
  55. package/dist/viewerServer/evidence/classify.js +12 -0
  56. package/dist/viewerServer/evidence/classify.js.map +1 -1
  57. package/dist/viewerServer/evidence/discovery.d.ts +2 -0
  58. package/dist/viewerServer/evidence/discovery.js +6 -0
  59. package/dist/viewerServer/evidence/discovery.js.map +1 -1
  60. package/dist/viewerServer/evidence/handles.js +1 -0
  61. package/dist/viewerServer/evidence/handles.js.map +1 -1
  62. package/dist/viewerServer/evidence/index.d.ts +29 -0
  63. package/dist/viewerServer/evidence/index.js +43 -1
  64. package/dist/viewerServer/evidence/index.js.map +1 -1
  65. package/dist/viewerServer/evidence/mediaResolver.d.ts +1 -1
  66. package/dist/viewerServer/evidence/mediaResolver.js +28 -2
  67. package/dist/viewerServer/evidence/mediaResolver.js.map +1 -1
  68. package/dist/viewerServer/evidence/projection.d.ts +5 -1
  69. package/dist/viewerServer/evidence/projection.js +19 -0
  70. package/dist/viewerServer/evidence/projection.js.map +1 -1
  71. package/dist/viewerServer/httpServer.d.ts +13 -2
  72. package/dist/viewerServer/httpServer.js +278 -4
  73. package/dist/viewerServer/httpServer.js.map +1 -1
  74. package/dist/viewerServer/viewerService.d.ts +8 -0
  75. package/dist/viewerServer/viewerService.js +38 -2
  76. package/dist/viewerServer/viewerService.js.map +1 -1
  77. package/docs/ARCHITECTURE.md +108 -21
  78. package/docs/CI_CD.md +78 -1
  79. package/docs/COMMANDS.md +44 -4
  80. package/docs/CONTRACTS.md +78 -8
  81. package/docs/CURRENT_STATE.md +224 -35
  82. package/docs/DEVELOPMENT.md +38 -3
  83. package/docs/PROJECT_DESCRIPTION.md +4 -1
  84. package/docs/PROJECT_MILESTONES.md +32 -0
  85. package/docs/PROJECT_OVERVIEW.md +58 -17
  86. package/docs/QUICKSTART.md +52 -39
  87. package/docs/RELEASE.md +17 -11
  88. package/docs/ROADMAP.md +458 -66
  89. package/docs/SECURITY.md +71 -14
  90. package/docs/WORKFLOWS.md +151 -23
  91. package/docs/plans/v0.9-implementation-plan.md +1529 -0
  92. package/docs/plans/v0.9.1-implementation-plan.md +468 -0
  93. package/docs/reports/v0.9-architecture-retrieval.md +567 -0
  94. package/docs/reports/v0.9-batch1-visual-annotation-foundation.md +351 -0
  95. package/docs/reports/v0.9-batch2-viewer-annotation-authoring-boundary.md +438 -0
  96. package/docs/reports/v0.9-batch3-runtime-screenshot-annotation-authoring.md +412 -0
  97. package/docs/reports/v0.9-batch4-external-reference-annotation-authoring.md +452 -0
  98. package/docs/reports/v0.9-batch5-runtime-intent-contract-promotion.md +535 -0
  99. package/docs/reports/v0.9-batch6-reference-materialization.md +514 -0
  100. package/docs/reports/v0.9-batch7-integrated-acceptance.md +644 -0
  101. package/docs/reports/v0.9-demo-foundation.md +589 -0
  102. package/docs/reports/v0.9-final-pre-release-readiness.md +209 -0
  103. package/docs/reports/v0.9-final-readiness-corrections.md +530 -0
  104. package/docs/reports/v0.9-pre-release-readiness.md +170 -0
  105. package/docs/reports/v0.9-tutorial-end-to-end-acceptance.md +980 -0
  106. package/docs/reports/v0.9-tutorial-integration.md +731 -0
  107. package/docs/reports/v0.9.1-batch1-pwa-hard-gate-isolation.md +359 -0
  108. package/docs/reports/v0.9.1-batch2-hard-gate-validation-integration.md +262 -0
  109. package/docs/reports/v0.9.1-pre-release-readiness.md +206 -0
  110. package/package.json +3 -2
  111. package/dist/viewer/assets/index-D98S1_2d.js +0 -9
@@ -1,15 +1,93 @@
1
1
  # Current State
2
2
 
3
- v0.8.1 is released and published as `@dailephd/my-frontend-observer@0.8.1`.
4
- Project aliases, `init`, `capture`, project-aware `view`, and `check`
5
- orchestration are implemented and MIT licensed.
6
-
7
- The project is published at package version `0.8.1` (roadmap v0.8.1,
8
- Interactive Local Observation Viewer; observation schema `1.2.0`; comparison
9
- schema `1.0.0`; frontend contract schema `1.0.0`; evaluation artifact schema
10
- `1.0.0`; bounded-agent-context schema `1.0.0`; external-reference schema
11
- `1.0.0` - no schema version changed for v0.8) - see "v0.8 status" below for
12
- the final, complete v0.8 state.
3
+ v0.9.1 is released and published as `@dailephd/my-frontend-observer@0.9.1`.
4
+ v0.9 (Human Visual Annotation and Design-Intent Capture) adds structured visual
5
+ annotation to the project-aware viewer. It passed integrated real-Chromium
6
+ acceptance and final exact-candidate pre-release readiness on Windows, Linux
7
+ and macOS, including all four tutorials. The viewer protocol is `1.3.0` and the
8
+ visual annotation schema is `1.0.0`. Project aliases, `init`, `capture`,
9
+ project-aware `view`, and `check` orchestration from v0.8.1 remain implemented,
10
+ and the package is MIT licensed. The
11
+ repository also holds a deterministic demo and four tutorial scenarios for
12
+ v0.9, recorded by the external `@dailephd/my-dev-kit-lab@0.4.9` tool. See
13
+ "v0.9 status" below.
14
+
15
+ The project is published at package version `0.9.1` (roadmap v0.9.1, PWA
16
+ Hard-Gate Isolation and Reproducible Security Acceptance; the preceding v0.9
17
+ release was Human Visual Annotation and Design-Intent Capture; observation
18
+ schema `1.2.0`;
19
+ comparison schema `1.0.0`; frontend contract schema `1.0.0`; evaluation
20
+ artifact schema `1.0.0`; bounded-agent-context schema `1.0.0`;
21
+ external-reference schema `1.0.0`; visual annotation schema `1.0.0`). v0.9.0
22
+ added the visual annotation schema and did not change any other canonical
23
+ evidence schema version. v0.8.1 did not change any canonical evidence schema
24
+ version either; see "v0.8 status" below for the final, complete v0.8 viewer
25
+ state.
26
+
27
+ ## v0.9.1 maintenance status
28
+
29
+ Status: released and published as `@dailephd/my-frontend-observer@0.9.1`.
30
+ No production code changed.
31
+
32
+ Result of the implementation:
33
+
34
+ 1. The original failure was reproduced. Selected alone, the hard gate failed at
35
+ the offline reload with `net::ERR_CONNECTION_REFUSED`.
36
+ 2. Root cause, part one: the old readiness check was
37
+ `registration?.active !== undefined`. While the worker was still installing,
38
+ `active` was `null` and the page had no controller. Because
39
+ `null !== undefined` is true, the check passed and the server was closed
40
+ before the worker controlled the page or finished precaching.
41
+ 3. Root cause, part two: the gate shared a server, evidence root, and a fixed
42
+ persistent Chromium profile with earlier tests. In normal file order those
43
+ tests had already activated a controlling worker, which hid the defect.
44
+ 4. The hard gate now owns a fresh evidence root, viewer server, temporary
45
+ persistent profile, and BrowserContext. No PWA test uses the fixed
46
+ `.my-dev-kit-workflow` profile any more.
47
+ 5. The gate proves service-worker activation (`registration.active !== null`)
48
+ and current-page control (`navigator.serviceWorker.controller !== null`)
49
+ as separate facts.
50
+ 6. It proves the app shell is in the Workbox precache and that no `/api/`
51
+ request is in Cache Storage.
52
+ 7. It proves the server is down with a direct Node-side request before the
53
+ offline reload.
54
+ 8. After the reload, the shell renders, the evidence list shows its explicit
55
+ unavailable state, and the previously visible evidence identity is absent.
56
+ 9. `npm run test:pwa-hard-gate` runs the gate alone. `npm run test:security`
57
+ now ends with it. It passes repeatedly, and the full PWA file, browser suite,
58
+ and security suite pass.
59
+ 10. Production PWA behavior is unchanged.
60
+
61
+ Evidence: `docs/reports/v0.9.1-batch1-pwa-hard-gate-isolation.md` and
62
+ `docs/reports/v0.9.1-batch2-hard-gate-validation-integration.md`.
63
+
64
+ The historical planning background follows.
65
+
66
+ A post-release test-isolation defect has been identified in
67
+ `tests/browser/pwaHardening.test.ts`. The PWA server-down test labeled
68
+ `HARD GATE` passes in the normal full-file/full-suite execution but fails
69
+ when selected independently with Vitest `-t`. The current test shares a
70
+ persistent Chromium context/profile with earlier tests, and its own setup proves
71
+ that a service-worker registration is active without independently proving all
72
+ of the state the server-down experiment needs: that the current page is
73
+ controlled, that the application shell is actually precached, and that no
74
+ historical profile/cache state was inherited.
75
+
76
+ This is currently classified as a test-isolation defect, not a demonstrated
77
+ production PWA regression. The released safety contract remains unchanged:
78
+ application-shell caching may keep the viewer shell available while evidence
79
+ and media remain server-backed, and stale evidence must never be presented as
80
+ current after the server is unavailable. No production PWA code change is
81
+ authorized unless a corrected fresh-state hard-gate experiment first
82
+ demonstrates a real runtime failure.
83
+
84
+ The completed v0.9.1 maintenance patch was governed by the frozen implementation
85
+ plan `docs/plans/v0.9.1-implementation-plan.md`. It made the hard gate own fresh
86
+ disposable evidence/server/browser-profile state, explicitly prove service-worker
87
+ control and shell/API cache preconditions, explicitly prove the server is
88
+ unavailable before the offline reload, and add an isolated execution gate so the
89
+ same test passes by itself as well as inside the full browser and security
90
+ suites.
13
91
 
14
92
  v0.8 (Interactive Local Observation Viewer) is fully implemented, tested,
15
93
  formally cross-platform/security validated, and released. All eight v0.8
@@ -38,13 +116,14 @@ The retained repository contains:
38
116
  and standardized documentation.
39
117
 
40
118
  The package bin (`src/cli.ts`) now exposes the real current public CLI
41
- surface described below - the five commands released through `0.6.0`
119
+ surface described below: the five low-level commands released through `0.6.0`
42
120
  (`observe`, `compare`, `approve-baseline`, `save-change-contract`,
43
- `evaluate-contract`) plus three additional commands released as part of
44
- `0.7.0` (`import-reference`, `approve-reference`,
45
- `evaluate-reference-fidelity` - see "v0.7 Prompt 1/6 status" below) - while
46
- remaining a thin parsing/dispatch/presentation boundary; it is no longer the
47
- not-implemented placeholder.
121
+ `evaluate-contract`); three reference commands released in `0.7.0`
122
+ (`import-reference`, `approve-reference`, `evaluate-reference-fidelity`);
123
+ `view`, released in `0.8.0`; and the v0.8.1 high-level `init`, `capture`, and
124
+ `check` commands. v0.8.1 also makes `view` project-aware while preserving its
125
+ standalone `--root` form. `src/cli.ts` remains a thin parsing/dispatch/
126
+ presentation boundary; it is no longer the not-implemented placeholder.
48
127
 
49
128
  ## v0.1 progress (Batch 1–6; implemented and released as 0.1.0)
50
129
 
@@ -546,13 +625,11 @@ binding, or fidelity evaluation yet.
546
625
  extends outside the owning image's bounds.
547
626
  - **Domain** (`src/domain/externalReferenceRegionRelationships.ts`): reuses
548
627
  the exact pure geometry predicates `deriveLayoutRelationships` uses for
549
- runtime targets (now exported additively from `relationships.ts`, formulas
550
- unchanged) to derive the six geometry-only relationship families
551
- (horizontal order, vertical order, area overlap, relative width, geometric
552
- fit, vertical sequencing) between reference regions. Not persisted -
553
- `deriveReferenceRegionRelationships()` is a pure function callers invoke
554
- on demand against an artifact's own `regions`, bounded at
555
- `MAX_REFERENCE_REGION_RELATIONSHIP_RECORDS`.
628
+ runtime targets (now exported additively) from `relationships.ts` rather
629
+ than reimplemented, so reference-region geometry and runtime-target
630
+ geometry can never diverge on the same underlying formula; only the
631
+ geometry-only relationship families apply, since a static image exposes
632
+ no DOM, scroll, or viewport evidence.
556
633
  - **Schema**: `ExternalReferenceArtifact` gained one additive, optional
557
634
  `regions?: ReferenceRegion[]` field. No schema version bump
558
635
  (`EXTERNAL_REFERENCE_SCHEMA_VERSION` remains `'1.0.0'`) - every Prompt 1
@@ -980,7 +1057,9 @@ most one designated server-side call site, and several (`compareObservations`,
980
1057
  never called by the viewer at all. The viewer never runs
981
1058
  `@dailephd/my-dev-kit`, never mutates target source or any Observer
982
1059
  artifact, never persists a new viewer-owned evidence family, and every route
983
- rejects non-`GET`/`HEAD` methods.
1060
+ rejects non-`GET`/`HEAD` methods. (That was the complete v0.8 surface. v0.9
1061
+ later adds exactly three project-aware authoring `POST` routes. See "v0.9
1062
+ status" below.)
984
1063
 
985
1064
  **Validated on the canonical worktree**: `npm run typecheck`, `npm run
986
1065
  lint`, `npm test`, `npm run build`, `npm run check:docs`, `npm run
@@ -998,25 +1077,132 @@ viewer surface both passed - see the readiness report above, including the
998
1077
  one security finding it found and fixed (a symlinked-media evidence-root
999
1078
  escape in the viewer's media route).
1000
1079
 
1080
+ ## v0.9 status (Human Visual Annotation and Design-Intent Capture) - released as 0.9.0
1081
+
1082
+ v0.9 is implemented against the frozen plan
1083
+ `docs/plans/v0.9-implementation-plan.md` and released as
1084
+ `@dailephd/my-frontend-observer@0.9.0`.
1085
+
1086
+ - **Prompt 1** (`docs/reports/v0.9-batch1-visual-annotation-foundation.md`)
1087
+ added the `VisualAnnotationArtifact` domain (schema `1.0.0`), structured
1088
+ point/rectangle/line/arrow/note marks, runtime and reference coordinate
1089
+ spaces, explicit associations, candidate/confirmed interpretation,
1090
+ deterministic identity, the atomic writer, the canonical reader, the
1091
+ persistence service, and the derived overlay SVG.
1092
+ - **Prompt 2**
1093
+ (`docs/reports/v0.9-batch2-viewer-annotation-authoring-boundary.md`) added
1094
+ viewer discovery of annotations, the source-resolving annotation view
1095
+ route, the verified overlay media role, and the project-aware authoring
1096
+ boundary with `POST /api/annotations`. `view --root` stays read-only.
1097
+ - **Prompt 3**
1098
+ (`docs/reports/v0.9-batch3-runtime-screenshot-annotation-authoring.md`)
1099
+ added runtime screenshot annotation in runtime CSS pixels with zoom, pan,
1100
+ keyboard selection, save, reload, revisions, and stale-parent conflicts.
1101
+ - **Prompt 4**
1102
+ (`docs/reports/v0.9-batch4-external-reference-annotation-authoring.md`)
1103
+ added external-reference annotation in reference-image pixels, candidate
1104
+ region create and refine proposals, candidate reference requirements, and
1105
+ informational and asset-sensitive intent.
1106
+ - **Prompt 5**
1107
+ (`docs/reports/v0.9-batch5-runtime-intent-contract-promotion.md`) added
1108
+ runtime intent, explicit confirmation, promotion of selected confirmed
1109
+ `move`/`resize`/`preserve` intent into a canonical per-change contract
1110
+ (`POST /api/annotations/:handle/promote-contract`), optional explicit
1111
+ project contract activation, and `.tmp-*` discovery exclusion. Confirmed
1112
+ `remove` intent is honestly non-promotable.
1113
+ - **Prompt 6** (`docs/reports/v0.9-batch6-reference-materialization.md`)
1114
+ added materialization of selected confirmed reference regions and
1115
+ requirements into a new imported external-reference revision
1116
+ (`POST /api/annotations/:handle/materialize-reference`). The source is never
1117
+ changed and nothing is approved automatically.
1118
+ - **Prompt 7** (`docs/reports/v0.9-batch7-integrated-acceptance.md`) added the
1119
+ integrated real-Chromium acceptance suite
1120
+ (`tests/browser/v09IntegratedAcceptance.test.ts`), the packed installed
1121
+ annotation smoke (`scripts/ci/runPackedV09AnnotationSmoke.mjs`), its step in
1122
+ the pre-release readiness matrix, and this documentation reconciliation.
1123
+
1124
+ Current versions: package `0.9.0`, viewer protocol `1.3.0`, visual annotation
1125
+ schema `1.0.0`, frontend contract schema `1.0.0`, external-reference schema
1126
+ `1.0.0`. No other schema changed.
1127
+
1128
+ Invariants: annotations are evidence, not contracts. Only selected confirmed
1129
+ supported intent is promoted or materialized, always through the existing
1130
+ canonical contract and external-reference services. The existing contract,
1131
+ reference relationship, adequacy, and fidelity evaluators remain the only
1132
+ source of verdicts. Observer never edits target source, never approves a
1133
+ baseline or reference automatically, and never updates project reference
1134
+ acceptance.
1135
+
1136
+ Validation state: the full local validation suite, the integrated acceptance
1137
+ suite, and all three packed installed-candidate smokes passed locally on
1138
+ Windows. See the Prompt 7 report for exact results. A cross-platform
1139
+ pre-release readiness run passed on Windows, Linux, and macOS for the Prompt 7
1140
+ commit `a78a058` (`docs/reports/v0.9-pre-release-readiness.md`). That run is
1141
+ historical evidence only. It did not contain the demo and tutorial commits
1142
+ described below, so it is not readiness evidence for the final candidate.
1143
+
1144
+ ### v0.9 demo and tutorials (release support, not product behavior)
1145
+
1146
+ - **Demo foundation** (commit `59ae009`,
1147
+ `docs/reports/v0.9-demo-foundation.md`): a deterministic demo application
1148
+ in `examples/v09-demo/` with ten stable region names, nine frozen states, a
1149
+ loopback-only demo server, a disposable-target materializer, and a fixed
1150
+ 1440x900 reference PNG.
1151
+ - **Tutorial integration** (commit `6895b30`,
1152
+ `docs/reports/v0.9-tutorial-integration.md`): four `TutorialScenarioV1`
1153
+ scenarios in `examples/v09-demo/tutorials/`, a per-run target-contract
1154
+ generator, and a prepare command that builds each disposable target through
1155
+ the canonical `init`, `capture`, contract, and reference commands. The only
1156
+ product change was two optional `data-testid` attributes on the viewer
1157
+ drawing surfaces.
1158
+ - **End-to-end acceptance**
1159
+ (`docs/reports/v0.9-tutorial-end-to-end-acceptance.md`): all four tutorials
1160
+ regenerated from clean targets with `@dailephd/my-dev-kit-lab@0.4.9`,
1161
+ structural and content acceptance, canonical evidence checks, and a full
1162
+ local regression. Scenario narration, reading pauses, and screenshot
1163
+ requests were corrected in this stage. Human visual review of the videos
1164
+ was completed and approved before release.
1165
+ - **Final pre-release readiness**
1166
+ (`docs/reports/v0.9-final-pre-release-readiness.md`, with corrections in
1167
+ `docs/reports/v0.9-final-readiness-corrections.md`): one exact candidate
1168
+ package passed the packed observation, viewer and v0.9 annotation smokes and
1169
+ all four tutorials on Windows, Linux and macOS, using
1170
+ `@dailephd/my-dev-kit-lab@0.4.9` semantic `select-option` for native
1171
+ selects.
1172
+
1173
+ The four scenarios are annotation basics, runtime intent to an active change
1174
+ contract, reference authoring, and reference materialization. After each run
1175
+ the canonical evidence is read directly from the disposable target. The checks
1176
+ prove, for example, that only the two selected clauses were promoted, that
1177
+ `remove` and `inspect` never became clauses, and that a materialized reference
1178
+ revision is `imported`, supersedes its approved source, and reuses the source
1179
+ image bytes unchanged.
1180
+
1181
+ `my-dev-kit-lab` is an external tool invoked through `npx`. It is not an
1182
+ Observer dependency, and Observer has no tutorial command, recorder, subtitle
1183
+ writer, or tutorial manifest schema. `examples/v09-demo/` is excluded from the
1184
+ npm package.
1185
+
1001
1186
  ## Not implemented
1002
1187
 
1003
1188
  - v0.5 baseline-selection/discovery policy (the caller must supply which
1004
1189
  baseline to approve/evaluate against; there is no "find the current
1005
- baseline" command), source ownership, orchestrator/lab product
1006
- integration, and annotation all remain unimplemented in this repository.
1190
+ baseline" command), source ownership, and orchestrator/lab product
1191
+ integration all remain unimplemented in this repository.
1007
1192
  (v0.6's bounded runtime projection and runtime/static correlation, the
1008
1193
  complete v0.7 external-reference correction workflow described above, and
1009
1194
  the v0.8 interactive viewer described in "v0.8 status" above, *are* now
1010
1195
  implemented.) A CLI surface for Prompt 8's correction workflow specifically
1011
1196
  remains unimplemented by design (programmatic-only, library-level use is
1012
1197
  the current supported entry point) - see "v0.7 Prompt 8 status" above.
1013
- Structured visual annotation (v0.9) and the full graphical human-LLM
1014
- workflow (v0.10) remain future and unimplemented.
1198
+ The full graphical human-LLM workflow (v0.10) remains future and
1199
+ unimplemented. Structured visual annotation (v0.9) is implemented and
1200
+ released as `0.9.0` - see "v0.9 status" above.
1015
1201
 
1016
1202
  ## Next target
1017
1203
 
1018
- v0.1-v0.8 are implemented, validated, and released (`0.1.0`, `0.2.0`,
1019
- `0.3.0`, `0.4.0`, `0.5.0`, `0.6.0`, `0.7.0`, `0.8.0`). v0.7 (End-to-End
1204
+ v0.1-v0.9 are implemented, validated, and released (`0.1.0`, `0.2.0`,
1205
+ `0.3.0`, `0.4.0`, `0.5.0`, `0.6.0`, `0.7.0`, `0.8.0`, `0.8.1`, `0.9.0`). v0.7 (End-to-End
1020
1206
  Coding-Agent Frontend Change Review) is fully implemented and released: the
1021
1207
  external-reference artifact foundation, explicit reference
1022
1208
  regions/relationships, selected design requirements/tolerance
@@ -1035,8 +1221,8 @@ for the completeness audit, and
1035
1221
  readiness validation that preceded this release.
1036
1222
 
1037
1223
  v0.8 (Interactive Local Observation Viewer) is fully implemented, tested,
1038
- and released - see "v0.8 status" above. v0.8.1 is the current package
1039
- release: `@dailephd/my-frontend-observer@0.8.1`. All
1224
+ and released - see "v0.8 status" above. v0.8.1 was released as
1225
+ `@dailephd/my-frontend-observer@0.8.1`. All
1040
1226
  eight implementation batches, the hardened documentation/implementation-
1041
1227
  completeness audit, and formal pre-release readiness (cross-platform and
1042
1228
  security validation) have passed - see `docs/ROADMAP.md` for v0.8's full
@@ -1044,6 +1230,9 @@ scope,
1044
1230
  `docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md`
1045
1231
  for the completeness audit, and
1046
1232
  `docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md`
1047
- for the cross-platform readiness validation that preceded this release. v0.9
1048
- (structured visual annotation) and v0.10 (full graphical human-LLM workflow)
1049
- remain future - see `docs/ROADMAP.md`.
1233
+ for the cross-platform readiness validation that preceded this release.
1234
+
1235
+ v0.9 (structured visual annotation) is released as
1236
+ `@dailephd/my-frontend-observer@0.9.0` - see "v0.9 status" above. The next
1237
+ target is v0.10 (full graphical human-LLM workflow), which remains future and
1238
+ unimplemented - see `docs/ROADMAP.md`.
@@ -1,7 +1,8 @@
1
1
  # Development
2
2
 
3
- The released v0.8.1 workflow is published as
4
- `@dailephd/my-frontend-observer@0.8.1` (CLI `my-frontend-observer`).
3
+ The released v0.9.1 package is published as
4
+ `@dailephd/my-frontend-observer@0.9.1` (CLI `my-frontend-observer`). It keeps
5
+ the v0.8.1 project workflow and adds structured visual annotation.
5
6
 
6
7
  The v0.8.1 workflow is exercised through unit and real-Chromium tests. Project fixtures use `init`, `capture baseline`, and `check`; coding-agent consumers use bounded `check --json`. `tests/browser/projectCheckWorkflow.test.ts` covers REVIEW_REQUIRED, contract FAIL-to-PASS, reference FAIL/PASS/BLOCKED, incomparable BLOCKED, current history, and contained acceptance paths. `scripts/ci/runPackedViewerSmoke.mjs` is the single installed-package viewer/project-workflow smoke owner: it repeats REVIEW_REQUIRED and unchanged-contract FAIL-to-PASS before alias-aware viewer proof. Run the full unit, browser, security, build, documentation, and packed-consumer validations before release readiness.
7
8
 
@@ -37,6 +38,36 @@ first; it is kept out of `npm test` because it launches a real browser and
37
38
  is slower. Exact counts drift as the suite grows - run the commands above
38
39
  for the current numbers rather than trusting this document.
39
40
 
41
+ ## Hard/security/acceptance gate isolation
42
+
43
+ Tests explicitly designated `HARD GATE`, `SECURITY GATE`, or
44
+ `ACCEPTANCE GATE` must be independently reproducible. A passing full suite is
45
+ not sufficient evidence if the gate itself only succeeds because another test
46
+ ran first or because a prior run left browser/cache/filesystem state behind.
47
+
48
+ For browser-based gates, the gate must own or explicitly establish every
49
+ precondition material to its claim. That includes disposable evidence state,
50
+ servers, browser profiles/contexts, service-worker control, relevant cache
51
+ state, and cleanup. Fixed persistent profiles must not be used as hidden
52
+ fixtures for a hard acceptance claim.
53
+
54
+ v0.9.1 applies this rule to the PWA server-down safety proof in
55
+ `tests/browser/pwaHardening.test.ts`. The hard gate owns its evidence root,
56
+ viewer server, temporary Chromium profile, and context. It must pass when
57
+ selected alone and must also continue to pass in the complete browser and
58
+ security suites.
59
+
60
+ Run the gate by itself with:
61
+
62
+ ```powershell
63
+ npm run test:pwa-hard-gate
64
+ ```
65
+
66
+ Run this command when working on PWA, service-worker, viewer-server, or
67
+ security behavior. It must pass on its own, not only after other tests have
68
+ run. `npm run test:security` also runs it after the rest of the security
69
+ suite. See `docs/plans/v0.9.1-implementation-plan.md`.
70
+
40
71
  ROADMAP v0.1 and Project Milestone 1 require browser-level validation once the
41
72
  observation capability is planned and implemented. Static checks must not later
42
73
  be substituted for that required browser evidence. `npm run test:browser` is
@@ -187,7 +218,11 @@ This starts a real, loopback-only server serving the actual built PWA. As of
187
218
  v0.8 (all eight implementation batches), it reads `--root` only for bounded,
188
219
  read-only evidence discovery through the existing canonical
189
220
  readers/classifiers - it never writes to `--root` or modifies any artifact
190
- under it.
221
+ under it. The v0.9 annotation authoring surface (implemented, not yet
222
+ released) is available only from the project-aware `node dist/cli.js view`
223
+ inside an initialized project, never from `--root`. Its end-to-end browser
224
+ proof is `tests/browser/v09IntegratedAcceptance.test.ts`, and its packed
225
+ installed proof is `scripts/ci/runPackedV09AnnotationSmoke.mjs`.
191
226
 
192
227
  Unlike `scripts/ci/runPackedObservationSmoke.mjs`, none of these five dev
193
228
  smokes is wired into any CI workflow or is a release gate - they are
@@ -1357,7 +1357,10 @@ The viewer must consume the reusable observation, reference, comparison, contrac
1357
1357
 
1358
1358
  It must not contain a second browser-observation implementation, a second reference model, a second binding engine, a second reference-evaluation implementation, a second contract engine, or a second bounded-context builder.
1359
1359
 
1360
- ## Future capability — Human visual annotation
1360
+ ## Implemented capability (v0.9) — Human visual annotation
1361
+
1362
+ Status: implemented and released as `0.9.0`. The intent below is unchanged and
1363
+ remains the capability authority.
1361
1364
 
1362
1365
  A later phase should allow the user to communicate visual intent directly on top of either an observed frontend or an approved external reference.
1363
1366
 
@@ -1715,6 +1715,38 @@ Milestone 8 is complete when:
1715
1715
 
1716
1716
  ## Milestone 9 — Human Visual Annotation and Design-Intent Capture
1717
1717
 
1718
+ Implementation status: implemented and released as `0.9.0`. The milestone
1719
+ design below is unchanged and remains the capability authority. Milestone 10
1720
+ remains future.
1721
+
1722
+ ### v0.9.1 maintenance acceptance note
1723
+
1724
+ v0.9.1 is a bounded maintenance patch over Milestone 9 rather than a new
1725
+ capability milestone. A post-release PWA hard-gate test-isolation defect was
1726
+ found: the server-down safety test can pass only after earlier tests have
1727
+ prepared persistent service-worker/cache state. No production PWA regression has
1728
+ been demonstrated.
1729
+
1730
+ The durable acceptance rule added by this maintenance patch is broader than the
1731
+ single PWA test: any test explicitly designated `HARD GATE`, `SECURITY GATE`,
1732
+ or `ACCEPTANCE GATE` must be able to establish its own prerequisites and pass
1733
+ when selected independently from fresh state. Such a gate must not rely on
1734
+ another test running first, a fixed browser profile, historical cache state, or
1735
+ test ordering. For browser gates, owned servers, evidence roots, browser
1736
+ profiles, contexts, and other state must be scoped and cleaned up explicitly.
1737
+
1738
+ The v0.9.1 correction is test/validation work unless the corrected isolated
1739
+ experiment demonstrates a genuine product failure. In that case the work must
1740
+ stop and be reclassified before production semantics change. The concrete
1741
+ implementation details live in
1742
+ `docs/plans/v0.9.1-implementation-plan.md`; the Milestone 9 product capability
1743
+ design below remains unchanged.
1744
+
1745
+ Status: the maintenance invariant is implemented and released in v0.9.1 for the PWA hard gate, which
1746
+ now passes alone through `npm run test:pwa-hard-gate` and inside the full
1747
+ browser and security suites. No genuine product failure was found. Release of
1748
+ v0.9.1 is released and published.
1749
+
1718
1750
  ### Objective
1719
1751
 
1720
1752
  Add visual human intent to the already working Milestone 7 coding-agent/reference workflow through the Milestone 8 viewer.
@@ -1,8 +1,10 @@
1
1
  # Project Overview
2
2
 
3
- The repository contains the complete v0.8.1 source workflow (`init`, `capture`,
4
- `check`, project-aware `view`), released as
5
- `@dailephd/my-frontend-observer@0.8.1` under the MIT license.
3
+ The repository contains the complete v0.9.1 release, published as
4
+ `@dailephd/my-frontend-observer@0.9.1` under the MIT license. It hardens
5
+ independent PWA security acceptance while preserving the structured visual
6
+ annotation added to the v0.8.1 project workflow (`init`,
7
+ `capture`, `check`, project-aware `view`).
6
8
 
7
9
  `my-frontend-observer` is the rendered browser/runtime evidence producer in
8
10
  the my-dev-kit ecosystem. It addresses the gap between source-level evidence
@@ -28,13 +30,16 @@ Region Identity; v0.3, Runtime Scrolling, Overflow, and Visibility Behavior;
28
30
  v0.4, Layout Relationships, Dependency Evidence, and Before/After
29
31
  Comparison; v0.5, Executable Frontend Contracts and Explicit Change Scope;
30
32
  v0.6, Bounded Agent Context and Native my-dev-kit Ecosystem Integration;
31
- v0.7, End-to-End Coding-Agent Frontend Change Review; and v0.8, Interactive
32
- Local Observation Viewer, are released and published to npm. The current
33
- package version is `0.8.1` as `@dailephd/my-frontend-observer` (observation schema `1.2.0`, comparison schema
33
+ v0.7, End-to-End Coding-Agent Frontend Change Review; v0.8, Interactive
34
+ Local Observation Viewer; v0.8.1, Project Workflow CLI and Human-Readable
35
+ Evidence Aliases; and v0.9, Human Visual Annotation and Design-Intent Capture,
36
+ are released and published to npm. The current package version is `0.9.1` as
37
+ `@dailephd/my-frontend-observer` (observation schema `1.2.0`, comparison schema
34
38
  `1.0.0`, frontend contract schema `1.0.0`, evaluation artifact schema `1.0.0`,
35
- bounded-agent-context schema `1.0.0`, external-reference schema `1.0.0`). The
36
- released package was validated as a packed npm tarball in a clean consumer
37
- environment across Windows, Linux, and macOS.
39
+ bounded-agent-context schema `1.0.0`, external-reference schema `1.0.0`,
40
+ visual annotation schema `1.0.0`). The released package was validated as a
41
+ packed npm tarball in a clean consumer environment across Windows, Linux, and
42
+ macOS.
38
43
 
39
44
  The released low-level command surface remains artifact-oriented: a real
40
45
  `observe` command launches Chromium, enforces loopback-only safety, captures
@@ -81,8 +86,8 @@ engines used by the CLI, never a second implementation of them. See
81
86
  and `docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md`
82
87
  for the implementation and release evidence.
83
88
 
84
- The repository implementation now includes released v0.8.1, a project-workflow
85
- CLI usability patch published as `@dailephd/my-frontend-observer@0.8.1`. It does
89
+ v0.8.1 was a project-workflow CLI usability patch published as
90
+ `@dailephd/my-frontend-observer@0.8.1`. It does
86
91
  not introduce a new evidence model. It adds project configuration,
87
92
  human-readable aliases, managed project-local Observer state, and a small
88
93
  high-level `init` / `capture` / `check` / project-aware `view` workflow above
@@ -92,10 +97,33 @@ artifact identifiers during ordinary use. Existing low-level commands remain
92
97
  supported. The frozen plan is
93
98
  `docs/plans/v0.8.1-cli-usability-patch-plan.md`.
94
99
 
95
- v0.9 and v0.10 remain future and unimplemented. v0.9 adds structured visual
96
- annotation through the existing viewer. v0.10 completes the visual human-LLM
97
- workflow and should consume the v0.8.1 high-level acceptance surface rather than
98
- introduce another Observer command architecture.
100
+ The latest published release is v0.9.1. v0.9 added structured
101
+ visual annotation to the project-aware viewer for both runtime observations and
102
+ external references. People draw marks, explicitly associate them, and confirm
103
+ structured intent. Selected confirmed runtime intent can become a normal
104
+ per-change contract, and selected confirmed reference intent can become a new
105
+ imported external-reference revision. The existing contract and reference
106
+ evaluators stay authoritative. It followed the frozen plan in
107
+ `docs/plans/v0.9-implementation-plan.md`, grounded by
108
+ `docs/reports/v0.9-architecture-retrieval.md`.
109
+ The repository-owned deterministic demo and its four tutorial scenarios
110
+ (`examples/v09-demo/`, recorded by the external
111
+ `@dailephd/my-dev-kit-lab@0.4.9` tool) passed final cross-platform readiness
112
+ with the release. They are release support and documentation, not product
113
+ behavior, and they are not shipped in the npm package.
114
+
115
+ The v0.9.1 maintenance release hardens the
116
+ PWA server-down hard acceptance test so the gate is reproducible from a fresh
117
+ browser profile and fresh test-owned state. PWA hard/security acceptance no
118
+ longer depends on prior test order or persistent browser state, and
119
+ `npm run test:security` now also runs the gate by itself through
120
+ `npm run test:pwa-hard-gate`. This was a test-isolation correction, not a
121
+ production PWA defect. No production behavior changed. The frozen concrete plan
122
+ is `docs/plans/v0.9.1-implementation-plan.md`.
123
+
124
+ v0.10 remains future and unimplemented and completes the visual human-LLM
125
+ workflow on top of the v0.9 annotation model and v0.8.1 high-level acceptance
126
+ surface.
99
127
 
100
128
  The revised dependency path reaches practical coding-agent use before graphical
101
129
  interaction and keeps later visual work on the same canonical evidence system:
@@ -109,9 +137,9 @@ runtime observation and stable identity
109
137
  + reference-vs-candidate structured fidelity evaluation
110
138
  + controlled end-to-end correction workflow (released as 0.7.0)
111
139
  → interactive viewer with reference/candidate inspection (released as 0.8.0)
112
- → project workflow CLI + human-readable evidence aliases (implemented in source; not published)
140
+ → project workflow CLI + human-readable evidence aliases (released as 0.8.1)
113
141
  → structured visual annotation on runtime screenshots and external references
114
- (planned v0.9)
142
+ (released as 0.9.0)
115
143
  → full visual human-LLM workflow with actual-frontend-driven and
116
144
  reference-driven entry modes (planned v0.10)
117
145
  ```
@@ -145,6 +173,19 @@ Repository-local authorities and navigation:
145
173
  release state.
146
174
  - [plans/v0.8.1-cli-usability-patch-plan.md](plans/v0.8.1-cli-usability-patch-plan.md)
147
175
  freezes the concrete implementation plan for the v0.8.1 patch.
176
+ - [plans/v0.9-implementation-plan.md](plans/v0.9-implementation-plan.md)
177
+ freezes the concrete implementation architecture, seven ordered batches,
178
+ gates, and validation expectations for v0.9. It is planning authority only;
179
+ the v0.9 implementation state is recorded in CURRENT_STATE.md and the
180
+ `reports/v0.9-*.md` reports.
181
+ - [plans/v0.9.1-implementation-plan.md](plans/v0.9.1-implementation-plan.md)
182
+ freezes the bounded maintenance plan for independent PWA hard-gate
183
+ reproduction, fresh browser-profile ownership, explicit service-worker/cache
184
+ precondition proof, and isolated-gate validation. It does not authorize a
185
+ production PWA change unless the corrected experiment demonstrates a real
186
+ product defect.
187
+ - [reports/v0.9-architecture-retrieval.md](reports/v0.9-architecture-retrieval.md)
188
+ preserves the bounded current-source retrieval that grounded the v0.9 plan.
148
189
 
149
190
  Historical greenfield artifacts and reports are retained as evidence that an
150
191
  earlier run overreached into v0.1; they are not current-state authority.