@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
package/docs/ROADMAP.md CHANGED
@@ -1,12 +1,20 @@
1
1
  # Roadmap
2
2
 
3
- v0.8.1 status: released as v0.8.1 and published to npm as
4
- `@dailephd/my-frontend-observer@0.8.1`. v0.9 and v0.10 remain future work.
3
+ v0.9.1 status: released and published to npm as
4
+ `@dailephd/my-frontend-observer@0.9.1`. It is a bounded maintenance patch that
5
+ corrects the PWA hard-gate test-isolation defect discovered after the v0.9.0
6
+ release. No production PWA regression has been demonstrated. v0.10 remains
7
+ future work.
5
8
 
6
9
  This is a version-level specification, not an implementation checklist.
7
10
  Concrete steps and sequencing are designed only when a version begins, after
8
11
  the planner reads that version, inspects current repository state, and performs
9
- needed my-dev-kit retrieval and architecture work.
12
+ needed my-dev-kit retrieval and architecture work. Once those version-start
13
+ decisions are frozen, this roadmap records the durable version-level design so
14
+ a later planner can reconstruct the intended implementation without stitching
15
+ critical architecture decisions across reports, chats, or batch prompts. Exact
16
+ files, interfaces, tests, batch gates, and prompt sequencing belong in the
17
+ version implementation plan.
10
18
 
11
19
  ## v0.1 — Runtime Observation Foundation
12
20
 
@@ -478,77 +486,461 @@ existing low-level commands must remain backward compatible.
478
486
 
479
487
  ## v0.9 — Human Visual Annotation and Design-Intent Capture
480
488
 
489
+ Current status: released as `v0.9.0` and published to npm as
490
+ `@dailephd/my-frontend-observer@0.9.0`, after final exact-candidate
491
+ cross-platform readiness on Windows, Linux and macOS. The release includes
492
+ repository-owned deterministic demo and tutorial acceptance infrastructure
493
+ under `examples/v09-demo/`. That infrastructure is release support and
494
+ documentation. It is not a new annotation evidence family or v0.10 behavior,
495
+ and it is not shipped in the npm package. The per-prompt implementation reports and the integrated acceptance
496
+ report live under `docs/reports/v0.9-*.md`. The source-grounding report is
497
+ `docs/reports/v0.9-architecture-retrieval.md`, and the concrete file-level,
498
+ test-level, and seven-prompt implementation plan is
499
+ `docs/plans/v0.9-implementation-plan.md`. The version-level decisions below are
500
+ the durable design authority. A future planner should be able to derive an
501
+ implementation plan from this section plus current repository state without
502
+ recovering critical choices from old chats or implementation reports.
503
+
481
504
  Objective/problem: add structured visual human intent to the already working
482
- v0.7 coding-agent workflow through the v0.8 viewer without inventing a separate
483
- change-semantics system, and allow that intent to be authored against either a
484
- runtime observation or an external visual reference. The v0.8.1 project
485
- workflow/alias layer should be reused for ordinary project discovery and
486
- human-readable selection rather than replaced by annotation-specific command
487
- plumbing.
505
+ v0.7 coding-agent/reference workflow through the v0.8 viewer without inventing
506
+ a separate change-semantics system. Intent may be authored against either an
507
+ existing runtime observation screenshot or an existing external visual
508
+ reference. The v0.8.1 project workflow and alias layer remain the normal project
509
+ discovery and human-selection surface. v0.9 extends `view`; it does not create a
510
+ new top-level annotation workflow architecture.
511
+
512
+ ### Frozen annotation evidence model
513
+
514
+ v0.9 introduces one distinct persisted observer-owned annotation evidence
515
+ family, `VisualAnnotationArtifact`, with initial schema version `1.0.0`.
516
+ Annotations are not mutable fields added to observations, external references,
517
+ comparisons, contracts, or evaluation artifacts. Original runtime observations,
518
+ screenshots, imported/approved external references, and reference images remain
519
+ immutable source evidence.
520
+
521
+ Every explicit annotation save creates a new immutable annotation artifact
522
+ instance. A later edit creates another artifact and may explicitly point
523
+ forward to the previous instance through `supersedesAnnotationId`; the old
524
+ artifact is never rewritten or deleted. Annotation logical/request identity is
525
+ deterministic from canonical semantic content, while annotation instance
526
+ identity is fresh for each persisted instance, following the repository's
527
+ existing request-identity versus instance-identity pattern.
528
+
529
+ Persisted annotation provenance must use canonical source identity. Human aliases
530
+ such as `baseline` and `current`, viewer handles, viewer URLs, ports, absolute
531
+ paths, and other session-local selectors must never become annotation identity.
532
+ Aliases remain conveniences for selecting canonical artifacts before authoring.
533
+
534
+ ### Frozen source contexts and coordinate domains
535
+
536
+ Each annotation has exactly one source context:
537
+
538
+ ```text
539
+ runtime-observation
540
+ external-reference
541
+ ```
542
+
543
+ Runtime annotations are tied to one canonical observation/screenshot identity
544
+ and use the existing runtime screenshot coordinate domain: viewport CSS pixels.
545
+ They do not multiply geometry by device pixel ratio, round to screenshot-device
546
+ pixels, or invent a second transform.
547
+
548
+ External-reference annotations are tied to one canonical reference/image
549
+ identity and use reference-image pixels. Reference-image pixels are never
550
+ silently treated as runtime CSS pixels.
551
+
552
+ The existing runtime and reference SVG workspaces remain separate coordinate
553
+ and identity domains. The same zoom/pan interaction machinery may be reused,
554
+ but each workspace supplies its own frame. Annotation rendering should be a
555
+ layer inside the existing source SVG coordinate frame rather than an
556
+ independently transformed canvas.
557
+
558
+ A reference-region ID is not a runtime-target identity. Runtime-target,
559
+ reference-region, annotation-item, artifact, filesystem, source-symbol, and
560
+ project-alias identities remain distinct even when explicit relationships link
561
+ them.
562
+
563
+ ### Frozen first annotation set
564
+
565
+ The first persisted visual mark vocabulary is deliberately bounded to:
566
+
567
+ ```text
568
+ point
569
+ rectangle
570
+ line
571
+ arrow
572
+ note
573
+ ```
574
+
575
+ `select` and `pan` are viewer interaction modes, not persisted annotation
576
+ marks. v0.9 does not add freehand drawing, polygons, Bezier paths, paint
577
+ strokes, masks, arbitrary SVG input, OCR-driven regions, or computer-vision
578
+ segmentation.
579
+
580
+ The first human-facing intent operations are:
581
+
582
+ ```text
583
+ inspect
584
+ move
585
+ resize
586
+ remove
587
+ preserve
588
+ ```
589
+
590
+ External-reference annotation additionally supports candidate intent for:
591
+
592
+ ```text
593
+ reference-region
594
+ reference-requirement
595
+ asset-sensitive
596
+ ```
597
+
598
+ `asset-sensitive` and `inspect` may remain informational. Their existence must
599
+ not silently add an acceptance rule.
600
+
601
+ ### Explicit association, interpretation, and confirmation
602
+
603
+ Drawing geometry alone does not establish semantic ownership or executable
604
+ intent. Runtime annotation may associate with an existing runtime target or
605
+ existing runtime relationship only through explicit structured selection.
606
+ Reference annotation may associate with an existing reference region or
607
+ existing reference relationship only through explicit structured selection.
608
+
609
+ The following must never silently create association or binding:
610
+
611
+ ```text
612
+ name similarity
613
+ rectangle overlap
614
+ nearest element
615
+ visual proximity
616
+ drawing containment
617
+ same textual identifier across runtime/reference domains
618
+ ```
619
+
620
+ An unbound drawing remains valid visual/narrative evidence but cannot be
621
+ promoted into a canonical requirement that needs a structured target or region.
622
+
623
+ Each annotation interpretation has an explicit state:
624
+
625
+ ```text
626
+ uninterpreted
627
+ candidate
628
+ confirmed
629
+ ```
630
+
631
+ The viewer may suggest a bounded candidate interpretation from explicit user
632
+ choices and known canonical evidence, but ambiguous geometry never silently
633
+ becomes a strong requirement. Only a `confirmed` interpretation may be selected
634
+ for canonical promotion. Before confirmation, the viewer must show the exact
635
+ candidate structured meaning that would be persisted/promoted.
636
+
637
+ ### Canonical change-scope and contract reuse
638
+
639
+ v0.9 reuses exactly the existing authored change-scope categories:
640
+
641
+ ```text
642
+ requested
643
+ expected-dependent
644
+ protected
645
+ preserved
646
+ ```
647
+
648
+ For `expected-dependent`, the existing `required`/`permitted` mode remains
649
+ mandatory. `unexpected` remains evaluator output and is never authorable through
650
+ annotation.
651
+
652
+ Runtime annotation does not introduce a second contract language. Confirmed
653
+ runtime visual intent may promote only into the existing bounded
654
+ `ContractPrimitive` vocabulary. High-value mappings include move/resize intent
655
+ through existing `x`, `y`, `width`, and `height` property increase/decrease
656
+ primitives and preserve intent through existing property-with-tolerance or
657
+ relationship-unchanged primitives. Existing visibility, clipping, width-bound,
658
+ overlap, relative-width, vertical-sequence, containment, page-width, and
659
+ scroll-owner primitives remain available when they accurately represent the
660
+ confirmed intent.
661
+
662
+ The drawing is not itself the contract. Promotion produces an ordinary
663
+ canonical `PerChangeContract`, using the existing contract identity,
664
+ persistence, validation, conflict, evaluation, and PASS/FAIL semantics.
665
+ Annotation does not evaluate contracts.
666
+
667
+ The first version must preserve unsupported human intent honestly. In
668
+ particular, `remove` can be represented and explicitly confirmed as annotation
669
+ intent, but the current canonical contract vocabulary has no target-absent
670
+ primitive. v0.9 therefore must not fabricate an approximate clause or expand the
671
+ contract language merely to make `remove` executable. It remains confirmed but
672
+ not canonically promotable until a future version deliberately extends the
673
+ contract model.
674
+
675
+ ### External-reference region and requirement authoring
676
+
677
+ External-reference annotation may explicitly create or refine meaningful
678
+ reference regions and may promote selected design requirements, but a drawn
679
+ rectangle never turns every enclosed pixel into a requirement.
680
+
681
+ A confirmed new region uses its annotation rectangle directly in the existing
682
+ reference-image pixel domain. A confirmed refinement explicitly selects an
683
+ existing region ID; the resulting new reference revision may retain that region
684
+ identity while changing its rectangle. Relationship choices must come from the
685
+ existing canonical reference-region relationship derivation rather than a
686
+ viewer-only relationship engine.
687
+
688
+ Confirmed reference requirements reuse the existing
689
+ `RawReferenceRequirement` / `ReferenceRequirementSubject` model and the same
690
+ authored change-scope categories. Supported subjects remain the existing
691
+ bounded region-property, region-relationship, and region-measurement forms with
692
+ existing reference tolerance semantics (`exact`, `absolute-reference-px`, or
693
+ `percent` where applicable). Visible geometry that the user did not explicitly
694
+ promote remains informational reference evidence.
695
+
696
+ Materializing confirmed reference annotation creates a new immutable imported
697
+ `ExternalReferenceArtifact` revision through the existing canonical reference
698
+ persistence model. The new artifact carries forward unchanged image content,
699
+ applicability, regions, and requirements except where selected confirmed intent
700
+ explicitly adds or refines them; it explicitly supersedes the selected source
701
+ reference. The prior reference remains unchanged. The new revision is not
702
+ automatically approved and does not automatically replace the project's active
703
+ approved reference. Approval and project reference selection remain separate,
704
+ explicit governance actions.
705
+
706
+ ### Annotation persistence and annotated rendering
707
+
708
+ The structured annotation manifest is authoritative. v0.9 also derives one
709
+ bounded system-generated annotation overlay, `annotation-overlay.svg`, for each
710
+ saved annotation artifact. The overlay uses the same source-native coordinate
711
+ frame recorded by the artifact, contains only validated system-generated SVG,
712
+ and has an integrity digest. It does not embed arbitrary user SVG/HTML and does
713
+ not copy the underlying screenshot or external-reference image.
714
+
715
+ The annotated visual is reconstructed as:
716
+
717
+ ```text
718
+ canonical source image
719
+ +
720
+ structured annotation overlay
721
+ ```
722
+
723
+ The derived overlay is not a second evidence or interpretation model. If any
724
+ presentation bug causes disagreement, structured annotation data remains the
725
+ authority.
726
+
727
+ ### Viewer authoring and security boundary
728
+
729
+ Normal annotation authoring is available through project-aware:
730
+
731
+ ```text
732
+ my-frontend-observer view
733
+ ```
734
+
735
+ inside a valid initialized project. Existing advanced
736
+ `my-frontend-observer view --root <evidence-root>` remains a supported
737
+ inspection surface and stays read-only when it is not operating with the normal
738
+ initialized-project authoring context.
739
+
740
+ Because v0.8 intentionally exposed only GET/HEAD inspection routes, v0.9 may add
741
+ POST only for the narrow annotation-authoring and confirmed-promotion operations
742
+ required by this version. It must not add arbitrary filesystem writes, target
743
+ source writes, PUT/PATCH/DELETE mutation APIs, permissive CORS, or a generic
744
+ local RPC endpoint.
745
+
746
+ The project-aware viewer authoring session must use a short-lived in-memory
747
+ capability token plus strict loopback same-origin/Host enforcement, bounded JSON
748
+ bodies, and canonical server-side resolution of evidence handles to source
749
+ artifacts. The browser must never supply arbitrary output paths. The token is
750
+ session-only, is not persisted as project/evidence identity, and must not become
751
+ service-worker cached authority.
752
+
753
+ Annotation persistence follows the repository's established immutable artifact
754
+ pattern: structural validation before write, fresh final instance directory,
755
+ sibling temporary directory, deterministic owned-media generation, manifest
756
+ write, atomic rename, no overwrite, and cleanup on failure.
757
+
758
+ Project-managed annotation evidence belongs under the managed Observer evidence
759
+ root using canonical IDs. v0.9 does not introduce an annotation alias catalog.
760
+
761
+ ### Conflict and revision rules
762
+
763
+ Annotation revision conflict is handled by explicit lineage, not last-write-wins.
764
+ A revision save identifies the canonical parent annotation. A stale edit must be
765
+ rejected rather than silently overwrite newer evidence. If malformed/historical
766
+ evidence presents multiple lineage heads, the viewer must expose that ambiguity
767
+ and require an explicit choice rather than select a winner by timestamp.
768
+
769
+ Semantic contract conflicts remain owned by the existing contract validators and
770
+ evaluator. Reference requirement validity/adequacy remains owned by the existing
771
+ reference model. Annotation must not add a second conflict-resolution engine.
772
+ Unsupported confirmed intent is reported as unsupported for canonical promotion,
773
+ not silently converted to PASS, FAIL, or another requirement.
774
+
775
+ ### Canonical intent flow
776
+
777
+ The version-level flow is:
778
+
779
+ ```text
780
+ runtime screenshot annotation OR external-reference annotation
781
+ → explicit source-domain association where reliable
782
+ → candidate requested/dependent/protected/preserved or informational intent
783
+ → explicit interpretation/confirmation
784
+ → save immutable structured annotation evidence
785
+ → selected confirmed runtime intent may become a canonical per-change contract
786
+ OR
787
+ selected confirmed reference intent may become a new imported reference revision
788
+ → existing contract/reference approval and evaluation workflows remain authoritative
789
+ ```
790
+
791
+ This version stops before the full post-edit human/LLM correction loop. v0.10
792
+ owns automatic workflow coordination around external coding-agent source edits,
793
+ rerendering, repeated `check <baseline> --json`, final human approval, and
794
+ baseline/reference governance across correction iterations.
795
+
796
+ ### Dependencies/ecosystem/compatibility
797
+
798
+ v0.9 depends on:
799
+
800
+ - stable runtime observation and target identity;
801
+ - existing relationship and comparison evidence;
802
+ - existing baseline/per-change contract vocabulary and evaluator;
803
+ - v0.7 external-reference identity, region, requirement, applicability,
804
+ binding, compatibility, fidelity, and bounded-context integration;
805
+ - v0.8 viewer server, runtime/reference SVG workspaces, source-domain coordinate
806
+ rendering, zoom/pan, metadata-first discovery, safe media resolution, and
807
+ explicit binding cross-selection;
808
+ - v0.8.1 project discovery, managed evidence root, human-readable aliases,
809
+ project-aware viewer startup, and canonical identity resolution beneath
810
+ aliases.
811
+
812
+ Existing observation, comparison, frontend-contract, evaluation,
813
+ bounded-agent-context, and external-reference schema semantics remain
814
+ independently authoritative. Annotation may reference and promote into them but
815
+ must not redefine them.
488
816
 
489
- Required capabilities: a bounded annotation set chosen during planning, such as
490
- point/select, rectangle/area, arrow, line/boundary, textual note, preserve,
491
- resize, move, remove, and inspect; structured annotation artifacts preserving
492
- their annotation context (runtime observation or external reference), source
493
- observation/screenshot or reference identity, geometry, type, text, provenance,
494
- and reliable target/relationship/reference-region association; save/reload;
495
- annotated image references; and explicit interpretation/confirmation state.
817
+ The existing bounded agent-context system may later include relevant annotation
818
+ references/structured annotation evidence as part of the proven coding-agent
819
+ workflow, but heavy source images or unrelated annotation history should not be
820
+ embedded by default. v0.9 does not require changes to my-dev-kit,
821
+ orchestrator, or lab unless an actual compatibility need is demonstrated during
822
+ implementation.
496
823
 
497
- Runtime-screenshot annotations and external-reference annotations are separate
498
- coordinate/identity domains. The annotation model must never assume that a
499
- reference-region identity is a runtime-target identity. Coordinate transforms,
500
- selection, overlays, persistence, and provenance must preserve which source
501
- image the annotation belongs to.
824
+ ### Exclusions
502
825
 
503
- Canonical intent flow:
826
+ v0.9 explicitly excludes:
504
827
 
505
828
  ```text
506
- runtime screenshot annotation OR external reference annotation
507
- → target/relationship/reference-region binding
508
- → candidate requested/dependent/protected/preserved intent
509
- → explicit confirmation/interpretation where necessary
510
- → canonical change contract
829
+ application source editing
830
+ automatic coding-agent execution
831
+ full correction-loop orchestration
832
+ image-to-code or raster-to-HTML/CSS/SVG generation
833
+ automatic target discovery
834
+ automatic reference/runtime binding
835
+ automatic reference-region detection
836
+ OCR-driven requirements
837
+ computer-vision segmentation
838
+ freehand drawing or arbitrary SVG authoring
839
+ a second contract/change-scope taxonomy
840
+ a second reference-requirement taxonomy
841
+ a second PASS/FAIL evaluator
842
+ automatic reference approval
843
+ automatic baseline approval or replacement
844
+ automatic approved-reference replacement
845
+ cloud synchronization
846
+ accounts/authentication/collaboration/comment threads
847
+ database storage
848
+ making annotation mandatory for ordinary capture/check/coding-agent workflows
511
849
  ```
512
850
 
513
- For external references, annotation may also define or refine meaningful
514
- reference regions and relationships, mark an asset-sensitive region, identify
515
- which visual details are informational, and promote selected geometry/style/
516
- relationship requirements into the canonical contract. A visible pixel never
517
- becomes a hard requirement merely because it exists in the image.
518
-
519
- Architectural/evidence constraints: annotation feeds the existing canonical
520
- reference, change-scope, contract, bounded-context, and coding-agent workflow. It
521
- must not create annotation-only or reference-only requested/protected semantics
522
- or different PASS/FAIL rules. Ambiguous drawings never silently become strong
523
- requirements. Original raw observations and imported reference images remain
524
- immutable evidence; annotation and approval/supersession state are separate.
525
-
526
- Dependencies/ecosystem/compatibility: depends on stable runtime identity,
527
- reference identity, contracts, v0.7 coding-agent review/reference evaluation,
528
- v0.8 viewer/coordinate mapping, and v0.8.1 project discovery, human-readable
529
- aliases, project-aware viewer behavior, and canonical identity resolution
530
- beneath aliases. Aliases are selection conveniences only. Persisted annotation
531
- identity must reference the exact canonical observation/reference identity,
532
- never mutable aliases such as `baseline` or `current`. Structured annotation/context/reference
533
- versions must be explicit and remain traceable to supported observation,
534
- screenshot, and external-reference identities.
535
-
536
- Exclusions: flattening intent into pixels only, bypassing confirmation,
537
- replacing text/config requests, image-to-code generation, source editing, or
538
- making annotation mandatory for ordinary coding-agent changes.
539
-
540
- Acceptance: a user can annotate either an existing observation or an external
541
- reference in the viewer; annotations survive save/reload; their source context
542
- remains explicit; target/relationship/reference-region associations remain
543
- available where reliable; preserve/resize/move/remove/inspect intent can be
544
- represented where supported; reference regions and selected design requirements
545
- can be authored without turning every pixel into a contract; ambiguous intent
546
- requires explicit interpretation or confirmation; and annotations can drive the
547
- existing coding-agent change-review workflow through the canonical contract and
548
- reference models. Version-start planning must select the first annotation set,
549
- coordinate transforms for both source contexts, persistence/versioning,
550
- interpretation/confirmation workflow, conflicts, region-authoring behavior, and
551
- annotated-image derivation.
851
+ ### Acceptance
852
+
853
+ v0.9 is complete only when all of the following are true:
854
+
855
+ - a user can annotate an existing runtime observation in the project-aware
856
+ viewer and save/reload it without coordinate drift;
857
+ - a user can annotate an imported or approved external reference and save/reload
858
+ it in reference-image coordinates;
859
+ - saved annotations remain tied to exact canonical source identities even when a
860
+ human alias later points somewhere else;
861
+ - runtime-target, runtime-relationship, reference-region, and
862
+ reference-relationship associations occur only when explicitly and reliably
863
+ selected;
864
+ - zoomed/panned drawing maps back to the same source-native coordinates used by
865
+ the existing SVG workspace;
866
+ - point/rectangle/line/arrow/note marks persist as structured evidence, not only
867
+ flattened pixels;
868
+ - preserve/resize/move/remove/inspect intent can be represented, with unsupported
869
+ executable mappings reported honestly;
870
+ - ambiguous or unbound drawings cannot silently become strong requirements;
871
+ - a supported confirmed runtime move/resize/preserve intent can produce a normal
872
+ canonical per-change contract without a second contract evaluator;
873
+ - selected confirmed external-reference region/requirement intent can produce a
874
+ new immutable imported reference revision without modifying or approving the
875
+ source reference;
876
+ - informational notes/asset-sensitive regions remain informational unless
877
+ explicitly promoted through a supported canonical model;
878
+ - annotation revision conflicts fail explicitly instead of overwriting history;
879
+ - original observation artifacts, screenshots, external-reference artifacts,
880
+ and reference images remain unchanged;
881
+ - the bounded local write surface rejects unauthorized origins, missing/invalid
882
+ session capability, unsafe paths, unsupported methods, and malformed/oversized
883
+ requests;
884
+ - existing v0.8 viewer inspection and v0.8.1 `init`/`capture`/`check`/`view`
885
+ workflows remain backward compatible;
886
+ - a clean packed npm candidate proves annotation save/reload and canonical
887
+ promotion behavior, with the existing cross-platform/security validation
888
+ expectations preserved.
889
+
890
+ The frozen concrete module contracts, validation rules, test responsibilities,
891
+ seven implementation prompts, and batch gates live in
892
+ `docs/plans/v0.9-implementation-plan.md`. That plan must be derivable from the
893
+ version-level decisions above plus current repository inspection; this roadmap
894
+ intentionally does not duplicate batch-by-batch instructions.
895
+
896
+ ## v0.9.1 — PWA Hard-Gate Isolation and Reproducible Security Acceptance
897
+
898
+ Current status: released as `0.9.1`. The concrete implementation plan remains
899
+ frozen in `docs/plans/v0.9.1-implementation-plan.md`.
900
+ This patch is maintenance work over the released v0.9.0 codebase and does not
901
+ change the v0.9 product capability model.
902
+
903
+ Objective/problem: make the PWA server-down hard acceptance proof genuinely
904
+ self-contained. The released test in `tests/browser/pwaHardening.test.ts`
905
+ passes in the normal full-file/full-suite order but fails when selected alone
906
+ because it can inherit service-worker/cache state from earlier tests and from a
907
+ fixed persistent Chromium profile. That is a test-isolation defect. It is not
908
+ evidence that the released PWA serves stale evidence or otherwise violates the
909
+ runtime safety contract.
910
+
911
+ Required capabilities: the hard gate must create and own fresh disposable
912
+ evidence state, a fresh viewer server, a fresh persistent Chromium profile, a
913
+ fresh BrowserContext, and its page; independently establish service-worker
914
+ registration and activation; prove that the current page is controlled by the
915
+ worker; prove the application shell needed for offline reload is precached;
916
+ prove `/api/` evidence responses are absent from Cache Storage; prove live
917
+ evidence is visible before shutdown; prove the server/network is actually
918
+ unavailable after shutdown; reload from the precached shell; then prove an
919
+ explicit unavailable state is shown and previously fetched evidence is absent.
920
+ All owned resources must be cleaned up even on failure.
921
+
922
+ Constraints and contracts: the hard/security acceptance experiment must not
923
+ depend on another `it()`, test order, a previously warmed Cache Storage, or a
924
+ profile retained under `.my-dev-kit-workflow`. Tests explicitly designated
925
+ `HARD GATE`, `SECURITY GATE`, or `ACCEPTANCE GATE` must be independently
926
+ runnable from fresh state. The dedicated isolated hard-gate command and the
927
+ normal full browser/security suites must exercise the same product behavior.
928
+
929
+ Exclusions: no production PWA/service-worker semantic change is authorized
930
+ merely to make the test green; no new user-facing feature, evidence schema,
931
+ CLI command, package dependency, tutorial behavior, or v0.10 capability belongs
932
+ in this patch. If the corrected clean-state experiment exposes a genuine
933
+ runtime defect, implementation must stop and reclassify the work as a product
934
+ defect before changing production behavior.
935
+
936
+ Acceptance: the PWA hard gate passes when run by itself from a fresh process and
937
+ fresh temporary profile, passes in the complete `pwaHardening.test.ts` file,
938
+ and passes in the normal browser/security validation chain. The test must prove
939
+ its own service-worker control, shell-cache, API-cache-exclusion, network-down,
940
+ and stale-evidence-absence prerequisites rather than infer them from another
941
+ test. Temporary browser profiles and evidence roots must be removed after both
942
+ success and failure. Release-readiness validation must preserve the v0.9.0
943
+ product/package behavior while proving the stronger test-isolation invariant.
552
944
 
553
945
  ## v0.10 — Full Visual Human–LLM Frontend Change Workflow
554
946