@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.
- package/CHANGELOG.md +74 -0
- package/README.md +109 -7
- package/dist/application/projectWorkflowService.d.ts +18 -1
- package/dist/application/projectWorkflowService.js +40 -2
- package/dist/application/projectWorkflowService.js.map +1 -1
- package/dist/application/visualAnnotationContractPromotionService.d.ts +41 -0
- package/dist/application/visualAnnotationContractPromotionService.js +143 -0
- package/dist/application/visualAnnotationContractPromotionService.js.map +1 -0
- package/dist/application/visualAnnotationPersistenceService.d.ts +34 -0
- package/dist/application/visualAnnotationPersistenceService.js +68 -0
- package/dist/application/visualAnnotationPersistenceService.js.map +1 -0
- package/dist/application/visualAnnotationReferenceMaterializationService.d.ts +53 -0
- package/dist/application/visualAnnotationReferenceMaterializationService.js +194 -0
- package/dist/application/visualAnnotationReferenceMaterializationService.js.map +1 -0
- package/dist/artifacts/visualAnnotationArtifactReader.d.ts +19 -0
- package/dist/artifacts/visualAnnotationArtifactReader.js +66 -0
- package/dist/artifacts/visualAnnotationArtifactReader.js.map +1 -0
- package/dist/artifacts/visualAnnotationArtifactWriter.d.ts +42 -0
- package/dist/artifacts/visualAnnotationArtifactWriter.js +85 -0
- package/dist/artifacts/visualAnnotationArtifactWriter.js.map +1 -0
- package/dist/cli.js +464 -454
- package/dist/cli.js.map +1 -1
- package/dist/domain/visualAnnotation.d.ts +217 -0
- package/dist/domain/visualAnnotation.js +584 -0
- package/dist/domain/visualAnnotation.js.map +1 -0
- package/dist/domain/visualAnnotationIdentity.d.ts +17 -0
- package/dist/domain/visualAnnotationIdentity.js +47 -0
- package/dist/domain/visualAnnotationIdentity.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/projectWorkflow/projectPaths.d.ts +9 -0
- package/dist/projectWorkflow/projectPaths.js +21 -0
- package/dist/projectWorkflow/projectPaths.js.map +1 -1
- package/dist/viewer/assets/{index-CN_yb9Uf.css → index-BN41MI7m.css} +1 -1
- package/dist/viewer/assets/index-CkKXnlrI.js +9 -0
- package/dist/viewer/index.html +2 -2
- package/dist/viewer/sw.js +1 -1
- package/dist/viewerServer/annotationAuthoring.d.ts +64 -0
- package/dist/viewerServer/annotationAuthoring.js +230 -0
- package/dist/viewerServer/annotationAuthoring.js.map +1 -0
- package/dist/viewerServer/annotationContractPromotion.d.ts +51 -0
- package/dist/viewerServer/annotationContractPromotion.js +105 -0
- package/dist/viewerServer/annotationContractPromotion.js.map +1 -0
- package/dist/viewerServer/annotationReferenceMaterialization.d.ts +40 -0
- package/dist/viewerServer/annotationReferenceMaterialization.js +91 -0
- package/dist/viewerServer/annotationReferenceMaterialization.js.map +1 -0
- package/dist/viewerServer/authoringSecurity.d.ts +59 -0
- package/dist/viewerServer/authoringSecurity.js +112 -0
- package/dist/viewerServer/authoringSecurity.js.map +1 -0
- package/dist/viewerServer/evidence/annotationView.d.ts +28 -0
- package/dist/viewerServer/evidence/annotationView.js +43 -0
- package/dist/viewerServer/evidence/annotationView.js.map +1 -0
- package/dist/viewerServer/evidence/classify.d.ts +3 -1
- package/dist/viewerServer/evidence/classify.js +12 -0
- package/dist/viewerServer/evidence/classify.js.map +1 -1
- package/dist/viewerServer/evidence/discovery.d.ts +2 -0
- package/dist/viewerServer/evidence/discovery.js +6 -0
- package/dist/viewerServer/evidence/discovery.js.map +1 -1
- package/dist/viewerServer/evidence/handles.js +1 -0
- package/dist/viewerServer/evidence/handles.js.map +1 -1
- package/dist/viewerServer/evidence/index.d.ts +29 -0
- package/dist/viewerServer/evidence/index.js +43 -1
- package/dist/viewerServer/evidence/index.js.map +1 -1
- package/dist/viewerServer/evidence/mediaResolver.d.ts +1 -1
- package/dist/viewerServer/evidence/mediaResolver.js +28 -2
- package/dist/viewerServer/evidence/mediaResolver.js.map +1 -1
- package/dist/viewerServer/evidence/projection.d.ts +5 -1
- package/dist/viewerServer/evidence/projection.js +19 -0
- package/dist/viewerServer/evidence/projection.js.map +1 -1
- package/dist/viewerServer/httpServer.d.ts +13 -2
- package/dist/viewerServer/httpServer.js +278 -4
- package/dist/viewerServer/httpServer.js.map +1 -1
- package/dist/viewerServer/viewerService.d.ts +8 -0
- package/dist/viewerServer/viewerService.js +38 -2
- package/dist/viewerServer/viewerService.js.map +1 -1
- package/docs/ARCHITECTURE.md +108 -21
- package/docs/CI_CD.md +78 -1
- package/docs/COMMANDS.md +44 -4
- package/docs/CONTRACTS.md +78 -8
- package/docs/CURRENT_STATE.md +224 -35
- package/docs/DEVELOPMENT.md +38 -3
- package/docs/PROJECT_DESCRIPTION.md +4 -1
- package/docs/PROJECT_MILESTONES.md +32 -0
- package/docs/PROJECT_OVERVIEW.md +58 -17
- package/docs/QUICKSTART.md +52 -39
- package/docs/RELEASE.md +17 -11
- package/docs/ROADMAP.md +458 -66
- package/docs/SECURITY.md +71 -14
- package/docs/WORKFLOWS.md +151 -23
- package/docs/plans/v0.9-implementation-plan.md +1529 -0
- package/docs/plans/v0.9.1-implementation-plan.md +468 -0
- package/docs/reports/v0.9-architecture-retrieval.md +567 -0
- package/docs/reports/v0.9-batch1-visual-annotation-foundation.md +351 -0
- package/docs/reports/v0.9-batch2-viewer-annotation-authoring-boundary.md +438 -0
- package/docs/reports/v0.9-batch3-runtime-screenshot-annotation-authoring.md +412 -0
- package/docs/reports/v0.9-batch4-external-reference-annotation-authoring.md +452 -0
- package/docs/reports/v0.9-batch5-runtime-intent-contract-promotion.md +535 -0
- package/docs/reports/v0.9-batch6-reference-materialization.md +514 -0
- package/docs/reports/v0.9-batch7-integrated-acceptance.md +644 -0
- package/docs/reports/v0.9-demo-foundation.md +589 -0
- package/docs/reports/v0.9-final-pre-release-readiness.md +209 -0
- package/docs/reports/v0.9-final-readiness-corrections.md +530 -0
- package/docs/reports/v0.9-pre-release-readiness.md +170 -0
- package/docs/reports/v0.9-tutorial-end-to-end-acceptance.md +980 -0
- package/docs/reports/v0.9-tutorial-integration.md +731 -0
- package/docs/reports/v0.9.1-batch1-pwa-hard-gate-isolation.md +359 -0
- package/docs/reports/v0.9.1-batch2-hard-gate-validation-integration.md +262 -0
- package/docs/reports/v0.9.1-pre-release-readiness.md +206 -0
- package/package.json +3 -2
- 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.
|
|
4
|
-
`@dailephd/my-frontend-observer@0.
|
|
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
|
|
483
|
-
change-semantics system
|
|
484
|
-
runtime observation or an external visual
|
|
485
|
-
workflow
|
|
486
|
-
human-
|
|
487
|
-
|
|
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
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
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
|
-
|
|
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
|
-
|
|
826
|
+
v0.9 explicitly excludes:
|
|
504
827
|
|
|
505
828
|
```text
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
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
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
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
|
|