@dailephd/my-frontend-observer 0.9.0 → 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 CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ Future development.
6
+
7
+ ## 0.9.1 - 2026-09-21
8
+
9
+ Hardened PWA security-acceptance reproducibility as a maintenance release.
10
+
11
+ - Hardened the PWA server-down HARD GATE from fresh test-owned state, removing
12
+ hidden dependence on prior test order and persistent Chromium profile state.
13
+ - Corrected the false-ready service-worker predicate and separately proved
14
+ active registration and current-client control.
15
+ - Proved shell-cache readiness, `/api/` exclusion from Cache Storage,
16
+ origin-server unavailability, offline shell reload, and stale-evidence
17
+ absence.
18
+ - Added permanent `npm run test:pwa-hard-gate` and integrated it into
19
+ `npm run test:security`.
20
+ - No production PWA behavior, schema, or dependency changed.
21
+
5
22
  ## 0.9.0 - 2026-09-21
6
23
 
7
24
  v0.9, Human Visual Annotation and Design-Intent Capture. Structured visual
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # my-frontend-observer
2
2
 
3
- ## Common project workflow (v0.9.0)
3
+ ## Common project workflow (v0.9.1)
4
4
 
5
5
  ```powershell
6
6
  my-frontend-observer init --url http://127.0.0.1:3000 --target app=#app
@@ -17,9 +17,10 @@ my-frontend-observer view
17
17
  `1`, `2`, or `3` for `PASS`, `FAIL`, `REVIEW_REQUIRED`, or `BLOCKED`.
18
18
  Canonical hashes remain available in viewer details and persisted provenance,
19
19
  but are not normal workflow command inputs. The existing low-level commands
20
- remain supported. v0.9.0 is the current published release.
20
+ remain supported. v0.9.1 is the current published release.
21
21
 
22
- v0.9.0 adds the structured visual annotation workflow described below.
22
+ v0.9.1 is a maintenance release that hardens independent PWA security-gate
23
+ validation without changing production PWA behavior.
23
24
 
24
25
  `my-frontend-observer` is the local-first rendered browser/runtime evidence
25
26
  producer in the my-dev-kit ecosystem. Its durable product purpose is defined
@@ -28,8 +29,9 @@ composition is documented in the [my-dev-kit ecosystem guide](https://github.com
28
29
 
29
30
  ## Current status
30
31
 
31
- `v0.9.0`, Human Visual Annotation and Design-Intent Capture, is the current
32
- published release. It builds on `v0.8.1`, Project Workflow CLI and
32
+ `v0.9.1`, PWA Hard-Gate Isolation and Reproducible Security Acceptance, is the
33
+ current published release. It preserves the `v0.9.0` Human Visual Annotation
34
+ and Design-Intent Capture release and builds on `v0.8.1`, Project Workflow CLI and
33
35
  Human-Readable Evidence Aliases, `v0.8.0`, Interactive Local Observation
34
36
  Viewer, and `v0.7.0`, End-to-End Coding-Agent Frontend Change
35
37
  Review, `v0.6.0`, Bounded Agent Context and Native my-dev-kit Ecosystem
@@ -347,7 +349,7 @@ Planning authorities:
347
349
  intent and responsibility boundaries.
348
350
  - [Project Milestones](docs/PROJECT_MILESTONES.md): complete ordered capability
349
351
  design and cross-milestone rules.
350
- - [ROADMAP](docs/ROADMAP.md): version-level requirements; v0.1-v0.9.0 are
352
+ - [ROADMAP](docs/ROADMAP.md): version-level requirements; v0.1-v0.9.1 are
351
353
  released; v0.10 remains future.
352
354
  - [Current State](docs/CURRENT_STATE.md): retained scaffold and release state.
353
355
 
package/docs/CI_CD.md CHANGED
@@ -1,6 +1,27 @@
1
1
  # CI/CD
2
2
 
3
- CI interprets `check` as PASS `0`, FAIL `1`, REVIEW_REQUIRED `2`, or BLOCKED `3`. The released package is `@dailephd/my-frontend-observer@0.9.0`; its CLI remains `my-frontend-observer`. Packed readiness installs one exact tarball and runs `runPackedViewerSmoke.mjs` as the single project/viewer smoke owner for `init`, `capture`, bounded `check --json` REVIEW_REQUIRED and unchanged-contract FAIL-to-PASS, alias-aware project `view`, and viewer security. `runPackedObservationSmoke.mjs` remains the lower-level legacy observation smoke.
3
+ CI interprets `check` as PASS `0`, FAIL `1`, REVIEW_REQUIRED `2`, or BLOCKED `3`. The released package is `@dailephd/my-frontend-observer@0.9.1`; its CLI remains `my-frontend-observer`. Packed readiness installs one exact tarball and runs `runPackedViewerSmoke.mjs` as the single project/viewer smoke owner for `init`, `capture`, bounded `check --json` REVIEW_REQUIRED and unchanged-contract FAIL-to-PASS, alias-aware project `view`, and viewer security. `runPackedObservationSmoke.mjs` remains the lower-level legacy observation smoke.
4
+
5
+ ## Gate isolation invariant
6
+
7
+ Cross-platform/full-suite success does not by itself prove that a security or
8
+ acceptance gate is independent. Any test explicitly labeled `HARD GATE`,
9
+ `SECURITY GATE`, or `ACCEPTANCE GATE` must also be able to run from fresh
10
+ state without relying on earlier test order, a previously warmed service-worker
11
+ cache, a persistent browser profile from an earlier run, or another test's
12
+ server/evidence setup.
13
+
14
+ v0.9.1 applies this rule to the PWA server-down
15
+ hard gate. `npm run test:pwa-hard-gate` runs that gate by itself. It is a
16
+ separate required proof in addition to the normal full-file execution in
17
+ `npm run test:browser` and `npm run test:security`.
18
+
19
+ `npm run test:security` now ends with `npm run test:pwa-hard-gate`. The
20
+ `candidate` job in `.github/workflows/pre-release-readiness.yml` already runs
21
+ `npm run test:security`, so release-readiness candidate validation receives
22
+ the isolated gate automatically. The workflow YAML did not need to change. The
23
+ released v0.9.1 suite contains the corrected isolated gate. No production PWA
24
+ regression was found.
4
25
 
5
26
  A GitHub Actions pre-release readiness workflow exists at
6
27
  `.github/workflows/pre-release-readiness.yml` (triggered manually via
package/docs/COMMANDS.md CHANGED
@@ -783,7 +783,7 @@ the annotation workflow. The rest of this section describes the inspection
783
783
  surface, which is unchanged.
784
784
 
785
785
  **Current status: viewer behavior is released as package
786
- `@dailephd/my-frontend-observer@0.9.0`.** Starts one
786
+ `@dailephd/my-frontend-observer@0.9.1`.** Starts one
787
787
  loopback-only Node viewer server and serves the same React + TypeScript +
788
788
  Vite application to a normal browser or an installed Progressive Web App.
789
789
  `--root` is used as a bounded, read-only evidence-discovery root: the server
@@ -1,6 +1,6 @@
1
1
  # Current State
2
2
 
3
- v0.9.0 is released and published as `@dailephd/my-frontend-observer@0.9.0`.
3
+ v0.9.1 is released and published as `@dailephd/my-frontend-observer@0.9.1`.
4
4
  v0.9 (Human Visual Annotation and Design-Intent Capture) adds structured visual
5
5
  annotation to the project-aware viewer. It passed integrated real-Chromium
6
6
  acceptance and final exact-candidate pre-release readiness on Windows, Linux
@@ -12,8 +12,10 @@ repository also holds a deterministic demo and four tutorial scenarios for
12
12
  v0.9, recorded by the external `@dailephd/my-dev-kit-lab@0.4.9` tool. See
13
13
  "v0.9 status" below.
14
14
 
15
- The project is published at package version `0.9.0` (roadmap v0.9, Human
16
- Visual Annotation and Design-Intent Capture; observation schema `1.2.0`;
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`;
17
19
  comparison schema `1.0.0`; frontend contract schema `1.0.0`; evaluation
18
20
  artifact schema `1.0.0`; bounded-agent-context schema `1.0.0`;
19
21
  external-reference schema `1.0.0`; visual annotation schema `1.0.0`). v0.9.0
@@ -22,6 +24,71 @@ evidence schema version. v0.8.1 did not change any canonical evidence schema
22
24
  version either; see "v0.8 status" below for the final, complete v0.8 viewer
23
25
  state.
24
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.
91
+
25
92
  v0.8 (Interactive Local Observation Viewer) is fully implemented, tested,
26
93
  formally cross-platform/security validated, and released. All eight v0.8
27
94
  implementation batches, the hardened documentation/implementation-
@@ -1,7 +1,7 @@
1
1
  # Development
2
2
 
3
- The released v0.9.0 package is published as
4
- `@dailephd/my-frontend-observer@0.9.0` (CLI `my-frontend-observer`). It keeps
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
5
  the v0.8.1 project workflow and adds structured visual annotation.
6
6
 
7
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.
@@ -38,6 +38,36 @@ first; it is kept out of `npm test` because it launches a real browser and
38
38
  is slower. Exact counts drift as the suite grows - run the commands above
39
39
  for the current numbers rather than trusting this document.
40
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
+
41
71
  ROADMAP v0.1 and Project Milestone 1 require browser-level validation once the
42
72
  observation capability is planned and implemented. Static checks must not later
43
73
  be substituted for that required browser evidence. `npm run test:browser` is
@@ -1719,6 +1719,34 @@ Implementation status: implemented and released as `0.9.0`. The milestone
1719
1719
  design below is unchanged and remains the capability authority. Milestone 10
1720
1720
  remains future.
1721
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
+
1722
1750
  ### Objective
1723
1751
 
1724
1752
  Add visual human intent to the already working Milestone 7 coding-agent/reference workflow through the Milestone 8 viewer.
@@ -1,8 +1,9 @@
1
1
  # Project Overview
2
2
 
3
- The repository contains the complete v0.9.0 release, published as
4
- `@dailephd/my-frontend-observer@0.9.0` under the MIT license. It adds
5
- structured visual annotation to the v0.8.1 project workflow (`init`,
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`,
6
7
  `capture`, `check`, project-aware `view`).
7
8
 
8
9
  `my-frontend-observer` is the rendered browser/runtime evidence producer in
@@ -32,7 +33,7 @@ v0.6, Bounded Agent Context and Native my-dev-kit Ecosystem Integration;
32
33
  v0.7, End-to-End Coding-Agent Frontend Change Review; v0.8, Interactive
33
34
  Local Observation Viewer; v0.8.1, Project Workflow CLI and Human-Readable
34
35
  Evidence Aliases; and v0.9, Human Visual Annotation and Design-Intent Capture,
35
- are released and published to npm. The current package version is `0.9.0` as
36
+ are released and published to npm. The current package version is `0.9.1` as
36
37
  `@dailephd/my-frontend-observer` (observation schema `1.2.0`, comparison schema
37
38
  `1.0.0`, frontend contract schema `1.0.0`, evaluation artifact schema `1.0.0`,
38
39
  bounded-agent-context schema `1.0.0`, external-reference schema `1.0.0`,
@@ -96,7 +97,7 @@ artifact identifiers during ordinary use. Existing low-level commands remain
96
97
  supported. The frozen plan is
97
98
  `docs/plans/v0.8.1-cli-usability-patch-plan.md`.
98
99
 
99
- The latest published release is v0.9.0. v0.9 adds structured
100
+ The latest published release is v0.9.1. v0.9 added structured
100
101
  visual annotation to the project-aware viewer for both runtime observations and
101
102
  external references. People draw marks, explicitly associate them, and confirm
102
103
  structured intent. Selected confirmed runtime intent can become a normal
@@ -110,6 +111,16 @@ The repository-owned deterministic demo and its four tutorial scenarios
110
111
  `@dailephd/my-dev-kit-lab@0.4.9` tool) passed final cross-platform readiness
111
112
  with the release. They are release support and documentation, not product
112
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
+
113
124
  v0.10 remains future and unimplemented and completes the visual human-LLM
114
125
  workflow on top of the v0.9 annotation model and v0.8.1 high-level acceptance
115
126
  surface.
@@ -167,6 +178,12 @@ Repository-local authorities and navigation:
167
178
  gates, and validation expectations for v0.9. It is planning authority only;
168
179
  the v0.9 implementation state is recorded in CURRENT_STATE.md and the
169
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.
170
187
  - [reports/v0.9-architecture-retrieval.md](reports/v0.9-architecture-retrieval.md)
171
188
  preserves the bounded current-source retrieval that grounded the v0.9 plan.
172
189
 
package/docs/RELEASE.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Release
2
2
 
3
- `v0.9.0` (Human Visual Annotation and Design-Intent Capture) is released and
4
- published to npm as `@dailephd/my-frontend-observer`. The release adds
3
+ `v0.9.1` (PWA Hard-Gate Isolation and Reproducible Security Acceptance) is
4
+ released and published to npm as `@dailephd/my-frontend-observer`. This
5
+ maintenance release adds
5
6
  structured visual annotation of runtime observations and external references
6
7
  to the project-aware viewer, selected promotion of confirmed runtime intent
7
8
  into canonical change contracts, and selected materialization of confirmed
@@ -14,7 +15,7 @@ independently from the npm package version.
14
15
 
15
16
  Observation, comparison, frontend contract, evaluation artifact,
16
17
  bounded-agent-context, external-reference, visual annotation, and package
17
- version all remain separate: package version is `0.9.0`; observation schema is
18
+ version all remain separate: package version is `0.9.1`; observation schema is
18
19
  `1.2.0`, comparison schema is `1.0.0`, frontend contract schema is `1.0.0`,
19
20
  evaluation artifact schema is `1.0.0`, bounded-agent-context schema is
20
21
  `1.0.0`, external-reference schema is `1.0.0`, and visual annotation schema is
package/docs/ROADMAP.md CHANGED
@@ -1,7 +1,10 @@
1
1
  # Roadmap
2
2
 
3
- v0.9 status: released as v0.9.0 and published to npm as
4
- `@dailephd/my-frontend-observer@0.9.0`. v0.10 remains 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
@@ -890,6 +893,55 @@ seven implementation prompts, and batch gates live in
890
893
  version-level decisions above plus current repository inspection; this roadmap
891
894
  intentionally does not duplicate batch-by-batch instructions.
892
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.
944
+
893
945
  ## v0.10 — Full Visual Human–LLM Frontend Change Workflow
894
946
 
895
947
  Objective/problem: complete the visual communication branch by combining the
package/docs/WORKFLOWS.md CHANGED
@@ -764,7 +764,7 @@ external-reference services.
764
764
 
765
765
  ## Current release workflow
766
766
 
767
- The published package is `@dailephd/my-frontend-observer@0.9.0`; install it
767
+ The published package is `@dailephd/my-frontend-observer@0.9.1`; install it
768
768
  with npm and use the `my-frontend-observer` CLI. The ordinary workflow is
769
769
  `init`, `capture baseline`, `check baseline`, then `view`. Existing sections
770
770
  below retain the historical low-level and viewer workflows for compatibility.