@networkpro/web 1.26.3 → 1.26.4

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.
@@ -45,7 +45,7 @@ jobs:
45
45
  - name: Upgrade npm
46
46
  run: |
47
47
  corepack enable
48
- npm install -g npm@11.7.0
48
+ npm install -g npm@11.8.0
49
49
 
50
50
  - name: Install Node.js dependencies
51
51
  run: npm ci
@@ -130,7 +130,7 @@ jobs:
130
130
  - name: Upgrade npm
131
131
  run: |
132
132
  corepack enable
133
- npm install -g npm@11.7.0
133
+ npm install -g npm@11.8.0
134
134
 
135
135
  - name: Install Node.js dependencies
136
136
  run: npm ci
@@ -186,7 +186,7 @@ jobs:
186
186
  - name: Upgrade npm
187
187
  run: |
188
188
  corepack enable
189
- npm install -g npm@11.7.0
189
+ npm install -g npm@11.8.0
190
190
 
191
191
  - name: Install Node.js dependencies
192
192
  run: npm ci
@@ -23,7 +23,7 @@ jobs:
23
23
 
24
24
  steps:
25
25
  - name: Checkout repo
26
- uses: actions/checkout@v5
26
+ uses: actions/checkout@v6
27
27
 
28
28
  - name: Check security.txt expiration
29
29
  run: |
@@ -49,7 +49,7 @@ jobs:
49
49
  - name: Upgrade npm
50
50
  run: |
51
51
  corepack enable
52
- npm install -g npm@11.7.0
52
+ npm install -g npm@11.8.0
53
53
 
54
54
  - name: Clean previous Lighthouse reports
55
55
  run: |
@@ -152,7 +152,7 @@ jobs:
152
152
  run: ls -al .lighthouseci
153
153
 
154
154
  - name: Upload full .lighthouseci output
155
- uses: actions/upload-artifact@v4
155
+ uses: actions/upload-artifact@v6
156
156
  with:
157
157
  name: lighthouse-reports
158
158
  path: .lighthouseci/
@@ -41,7 +41,7 @@ jobs:
41
41
  - name: Upgrade npm
42
42
  run: |
43
43
  corepack enable
44
- npm install -g npm@11.7.0
44
+ npm install -g npm@11.8.0
45
45
 
46
46
  - name: Install Node.js dependencies
47
47
  run: npm ci
@@ -57,7 +57,7 @@ jobs:
57
57
 
58
58
  - name: Upload Playwright report
59
59
  if: always()
60
- uses: actions/upload-artifact@v4
60
+ uses: actions/upload-artifact@v6
61
61
  with:
62
62
  name: playwright-report
63
63
  path: playwright-report/
@@ -40,15 +40,15 @@ jobs:
40
40
  cache: npm
41
41
  cache-dependency-path: package-lock.json
42
42
 
43
- #- name: Show Node.js and npm versions
44
- # run: |
45
- # echo "Node.js version: $(node -v)"
46
- # echo "npm version: $(npm -v)"
43
+ - name: Show Node.js and npm versions
44
+ run: |
45
+ echo "Node.js version: $(node -v)"
46
+ echo "npm version: $(npm -v)"
47
47
 
48
48
  - name: Upgrade npm
49
49
  run: |
50
50
  corepack enable
51
- npm install -g npm@11.7.0
51
+ npm install -g npm@11.8.0
52
52
 
53
53
  - name: Install Node.js dependencies
54
54
  run: npm ci
@@ -126,15 +126,15 @@ jobs:
126
126
  cache: npm
127
127
  cache-dependency-path: package-lock.json
128
128
 
129
- #- name: Show Node.js and npm versions
130
- # run: |
131
- # echo "Node.js version: $(node -v)"
132
- # echo "npm version: $(npm -v)"
129
+ - name: Show Node.js and npm versions
130
+ run: |
131
+ echo "Node.js version: $(node -v)"
132
+ echo "npm version: $(npm -v)"
133
133
 
134
134
  - name: Upgrade npm
135
135
  run: |
136
136
  corepack enable
137
- npm install -g npm@11.7.0
137
+ npm install -g npm@11.8.0
138
138
 
139
139
  - name: Install Node.js dependencies
140
140
  run: npm ci
@@ -187,15 +187,15 @@ jobs:
187
187
  cache: npm
188
188
  cache-dependency-path: package-lock.json
189
189
 
190
- #- name: Show Node.js and npm versions
191
- # run: |
192
- # echo "Node.js version: $(node -v)"
193
- # echo "npm version: $(npm -v)"
190
+ - name: Show Node.js and npm versions
191
+ run: |
192
+ echo "Node.js version: $(node -v)"
193
+ echo "npm version: $(npm -v)"
194
194
 
195
195
  - name: Upgrade npm
196
196
  run: |
197
197
  corepack enable
198
- npm install -g npm@11.7.0
198
+ npm install -g npm@11.8.0
199
199
 
200
200
  - name: Install Node.js dependencies
201
201
  run: npm ci
@@ -96,7 +96,7 @@ jobs:
96
96
  # ---------------------------------------------------------------------
97
97
  - name: Create issue for detected secrets
98
98
  if: failure() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
99
- uses: actions/github-script@v7
99
+ uses: actions/github-script@v8
100
100
  with:
101
101
  github-token: ${{ secrets.GITHUB_TOKEN }}
102
102
  script: |
@@ -53,7 +53,7 @@ jobs:
53
53
  - name: Upgrade npm
54
54
  run: |
55
55
  corepack enable
56
- npm install -g npm@11.7.0
56
+ npm install -g npm@11.8.0
57
57
 
58
58
  - name: Install Node.js dependencies
59
59
  run: npm ci
@@ -134,7 +134,7 @@ jobs:
134
134
  - name: Upgrade npm
135
135
  run: |
136
136
  corepack enable
137
- npm install -g npm@11.7.0
137
+ npm install -g npm@11.8.0
138
138
 
139
139
  - name: Install Node.js dependencies
140
140
  run: npm ci
@@ -190,7 +190,7 @@ jobs:
190
190
  - name: Upgrade npm
191
191
  run: |
192
192
  corepack enable
193
- npm install -g npm@11.7.0
193
+ npm install -g npm@11.8.0
194
194
 
195
195
  - name: Install Node.js dependencies
196
196
  run: npm ci
@@ -42,5 +42,5 @@
42
42
  ".vscode/customData.json" // Path to your custom data file
43
43
  ],
44
44
  "markdown.validate.enabled": false,
45
- "chatgpt.openOnStartup": true
45
+ "chatgpt.openOnStartup": false
46
46
  }
package/AGENTS.md ADDED
@@ -0,0 +1,182 @@
1
+ # AGENTS.md
2
+
3
+ This file defines **operational guidance for automated agents** (e.g., Codex,
4
+ Claude Code, CI bots) working in this repository. It is intentionally
5
+ tool-neutral.
6
+
7
+ For deeper project context, architecture notes, and AI-specific guidance, see
8
+ `CLAUDE.md`.
9
+
10
+ ---
11
+
12
+ ## Purpose
13
+
14
+ Agents are welcome here to accelerate development, testing, and maintenance —
15
+ **without compromising security, privacy, or deployment correctness**.
16
+
17
+ This repo has intentionally strict security controls (CSP, audit mode behavior,
18
+ analytics gating) and a multi-environment deployment model. Agents must treat
19
+ these as **invariants** unless a human explicitly approves changes.
20
+
21
+ ---
22
+
23
+ ## Agent workflow (persona)
24
+
25
+ - Prefer minimal diffs; avoid sweeping refactors unless requested.
26
+ - Be explicit about tradeoffs and risks; don’t guess about CI/deploy behavior.
27
+ - Preserve behavior by default; if a change alters behavior, call it out explicitly.
28
+ - Preserve invariants: env detection, CSP, audit-mode guarantees, analytics gating.
29
+ - If unsure, ask a single targeted question or leave a TODO rather than inventing.
30
+ - Optimize for reproducibility: commands that work locally and in CI.
31
+
32
+ ---
33
+
34
+ ## Quick Commands
35
+
36
+ Use these commands as the “happy path” for local and CI-like validation:
37
+
38
+ ### Development
39
+
40
+ - `npm run dev` — start dev server
41
+ - `npm run dev:audit` — dev server in audit mode (hardened CSP, no analytics)
42
+ - `npm run preview` — preview production build locally
43
+
44
+ ### Build
45
+
46
+ - `npm run build` — production build
47
+ - `npm run build:audit` — audit build (hardened CSP)
48
+
49
+ ### Tests
50
+
51
+ - `npm run test:all` — unit tests (client + server)
52
+ - `npm run test:e2e` — Playwright E2E tests (with 1 retry)
53
+ - `npm run lhci:run` — Lighthouse CI audits
54
+
55
+ ### Lint / Format
56
+
57
+ - `npm run lint:all`
58
+ - `npm run lint:fix`
59
+ - `npm run format:fix`
60
+
61
+ ### Full Verification
62
+
63
+ - `npm run checkout` (alias: `npm run verify`)
64
+
65
+ ---
66
+
67
+ ## Guardrails (Strict, but Practical)
68
+
69
+ ### Environment and security invariants
70
+
71
+ Agents MUST NOT change the following without explicit human approval:
72
+
73
+ - **Environment detection logic** (notably `src/lib/utils/env.js`) or introduce
74
+ new environment modes.
75
+ - **Content Security Policy** generation/behavior (`src/hooks.server.js`) in a
76
+ way that weakens enforcement.
77
+ - **Audit-mode guarantees**: audit must remain hardened (no analytics, no
78
+ external reporting, strict CSP).
79
+ - **Analytics gating**: tracking must remain consent-based and
80
+ environment-aware.
81
+ - **Service worker exclusions**: analytics domains must not be cached; SW bypass
82
+ behavior must remain intact.
83
+
84
+ If a task requires touching any of the above, stop and ask for confirmation.
85
+
86
+ ### Deployment and CI/CD accuracy
87
+
88
+ Agents MUST NOT invent deployment behavior. The current model is:
89
+
90
+ - **Production**: Vercel builds/deploys on merges to `master` (Vercel-managed).
91
+ - **Audit**: Netlify deploy driven by a branch-scoped GitHub Actions workflow
92
+ (`audit-netlify` branch only).
93
+
94
+ If a change would affect build/deploy behavior, document assumptions and ask for
95
+ confirmation.
96
+
97
+ If referencing a workflow/config, point to the exact file path and branch it lives on.
98
+
99
+ ### Secrets and sensitive data
100
+
101
+ - Do **not** commit secrets, tokens, keys, or credentials.
102
+ - `.env*` files must remain purpose-separated. Only non-sensitive, commit-safe
103
+ env files belong in git.
104
+ - If secrets are required for a task, request them via the tool’s secret
105
+ mechanism and use placeholders in committed files.
106
+
107
+ ---
108
+
109
+ ## Allowed Agent Work
110
+
111
+ Agents MAY do the following without additional approval (assuming guardrails are
112
+ respected):
113
+
114
+ - Explain code and architecture; summarize behavior and risks.
115
+ - Implement **incremental** features or routes that follow existing patterns.
116
+ - Fix bugs and reduce flakiness in tests using minimal, targeted changes.
117
+ - For SPA E2E tests, prefer URL polling + page-ready assertions over navigation lifecycle waits.
118
+ - Add/extend unit tests or E2E tests consistent with current test architecture.
119
+ - Refactor for clarity **without changing behavior** (especially in security/env
120
+ paths).
121
+ - Improve documentation, comments, and JSDoc.
122
+ - Propose dependency updates, with a short rationale and any expected impact.
123
+
124
+ ---
125
+
126
+ ## Sensitive Areas (Ask Before Major Changes)
127
+
128
+ These areas are high-impact. Changes are allowed, but require extra care and
129
+ usually a quick human check:
130
+
131
+ - `src/lib/utils/env.js` (environment resolution)
132
+ - `src/hooks.server.js` (CSP / security headers)
133
+ - `src/service-worker.js` and SW registration logic
134
+ - `src/lib/stores/posthog.js` and analytics init/gating
135
+ - Auth, redirects, proxy/relay routes under `src/routes/relay-*`
136
+ - Build tooling (`vite.config.js`, `svelte.config.js`, CI workflows, deploy
137
+ scripts)
138
+
139
+ When editing these, prefer:
140
+
141
+ - minimal diffs
142
+ - explicit control flow
143
+ - comments describing intent and risk
144
+
145
+ ---
146
+
147
+ ## What “Done” Means for Agent Work
148
+
149
+ Before claiming a task is complete, agents should:
150
+
151
+ 1. Ensure changes are minimal and aligned with existing patterns.
152
+ 2. Run (or at least recommend running) appropriate checks:
153
+ - `npm run lint:all`
154
+ - `npm run test:all`
155
+ - `npm run test:e2e` (if UI/routes are affected)
156
+ - `npm run build` (if build/runtime behavior is affected)
157
+ 3. Include a short summary:
158
+ - what changed
159
+ - why it changed
160
+ - risk/impact (especially CSP/env/analytics)
161
+ - any follow-ups or TODOs
162
+
163
+ If tests are flaky, call it out explicitly and propose stabilization steps
164
+ rather than masking failures.
165
+
166
+ ---
167
+
168
+ ## Notes for Cloud / Ephemeral Runners
169
+
170
+ Many agents run in ephemeral environments. To keep builds reproducible:
171
+
172
+ - Do not assume local files exist unless they are committed.
173
+ - Prefer deterministic commands (`npm ci` when appropriate to lockfile policy).
174
+ - Avoid relying on interactive prompts.
175
+ - If environment variables are required, document them and provide safe defaults
176
+ where possible.
177
+
178
+ ---
179
+
180
+ ## References
181
+
182
+ - `CLAUDE.md` — authoritative AI guidance and deeper repository context.
package/CHANGELOG.md CHANGED
@@ -24,6 +24,40 @@ version increments reflecting both user-visible and operational impact.
24
24
 
25
25
  ---
26
26
 
27
+ ## [1.26.4] - 2026-01-24
28
+
29
+ ### Added
30
+
31
+ - Added `AGENTS.md` to provide operational, tool-neutral guidance for automated agents.
32
+
33
+ ### Changed
34
+
35
+ - **Workflow tooling updates** to keep CI aligned with upstream releases:
36
+ - `npm` upgraded to `11.8.0` across build/test/publish workflows.
37
+ - `actions/checkout` `v5` → `v6`, `actions/upload-artifact` `v4` → `v6`, and `actions/github-script` `v7` → `v8`.
38
+ - Restored Node.js/npm version logging in `publish-test` workflow jobs.
39
+ - **Documentation note added** in `CLAUDE.md` to point automation tools to `AGENTS.md`.
40
+ - **Playwright E2E stabilization** (Firefox + SvelteKit SPA navigation):
41
+ - Updated the shared navigation helper (`tests/e2e/shared/helpers.js`) to prefer SPA-safe URL-change waiting (polling assertions) over navigation lifecycle events, improving Firefox stability.
42
+ - Strengthened the desktop “About link” test (`tests/e2e/app.spec.js`) with a stable `/about` page marker assertion (`"Security, with Intent"`) to reduce intermittent flakes.
43
+ - Refreshed timestamp for root route in `static/sitemap.xml`.
44
+ - Updated generator metadata in `src/app.html` to reflect **SvelteKit 2.50.1**.
45
+ - **Project version bumped** to `v1.26.4`.
46
+ - Updated dependencies:
47
+ - `@sveltejs/adapter-vercel` `^6.3.0` → `^6.3.1`
48
+ - `@sveltejs/kit` `2.50.0` → `2.50.1`
49
+ - `@vitest/coverage-v8` `4.0.17` → `4.0.18`
50
+ - `svelte` `5.48.0` → `5.48.2`
51
+ - `vite-tsconfig-paths` `^6.0.4` → `^6.0.5`
52
+ - `vitest` `4.0.17` → `4.0.18`
53
+ - `@playwright/test` `^1.57.0` → `^1.58.0`
54
+ - `eslint-plugin-jsdoc` `^62.3.0` → `^62.4.1`
55
+ - `globals` `^17.0.0` → `^17.1.0`
56
+ - `playwright` `^1.57.0` → `^1.58.0`
57
+ - `posthog-js` `^1.334.0` → `^1.335.2`
58
+
59
+ ---
60
+
27
61
  ## [1.26.3] - 2026-01-21
28
62
 
29
63
  ### Added
@@ -2277,7 +2311,8 @@ This enables analytics filtering and CSP hardening for the audit environment.
2277
2311
 
2278
2312
  <!-- Link references -->
2279
2313
 
2280
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.26.3...HEAD
2314
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.26.4...HEAD
2315
+ [1.26.4]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.4
2281
2316
  [1.26.3]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.3
2282
2317
  [1.26.2]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.2
2283
2318
  [1.26.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.1
package/CLAUDE.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
4
 
5
+ For tool-neutral operational guidance for automated agents (e.g., Codex, CI bots), see `AGENTS.md`.
6
+
5
7
  <!-- markdownlint-disable -->
6
8
 
7
9
  ## Project Overview
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.26.3",
4
+ "version": "1.26.4",
5
5
  "description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
6
6
  "keywords": [
7
7
  "advocacy",
@@ -90,36 +90,36 @@
90
90
  },
91
91
  "dependencies": {
92
92
  "dompurify": "^3.3.1",
93
- "posthog-js": "^1.334.0",
93
+ "posthog-js": "^1.335.2",
94
94
  "semver": "^7.7.3",
95
- "svelte": "5.48.0"
95
+ "svelte": "5.48.2"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@eslint/compat": "^2.0.1",
99
99
  "@eslint/js": "^9.39.2",
100
100
  "@lhci/cli": "^0.15.1",
101
- "@playwright/test": "^1.57.0",
101
+ "@playwright/test": "^1.58.0",
102
102
  "@sveltejs/adapter-netlify": "^5.2.4",
103
- "@sveltejs/adapter-vercel": "^6.3.0",
104
- "@sveltejs/kit": "2.50.0",
103
+ "@sveltejs/adapter-vercel": "^6.3.1",
104
+ "@sveltejs/kit": "2.50.1",
105
105
  "@sveltejs/vite-plugin-svelte": "^6.2.4",
106
106
  "@testing-library/jest-dom": "^6.9.1",
107
107
  "@testing-library/svelte": "^5.3.1",
108
- "@vitest/coverage-v8": "4.0.17",
108
+ "@vitest/coverage-v8": "4.0.18",
109
109
  "autoprefixer": "^10.4.23",
110
110
  "browserslist": "^4.28.1",
111
111
  "eslint": "^9.39.2",
112
112
  "eslint-config-prettier": "^10.1.8",
113
- "eslint-plugin-jsdoc": "^62.3.0",
113
+ "eslint-plugin-jsdoc": "^62.4.1",
114
114
  "eslint-plugin-svelte": "^3.14.0",
115
- "globals": "^17.0.0",
115
+ "globals": "^17.1.0",
116
116
  "globby": "^16.1.0",
117
117
  "jsdom": "27.4.0",
118
118
  "lightningcss": "^1.31.1",
119
119
  "markdownlint": "^0.40.0",
120
120
  "markdownlint-cli2": "0.20.0",
121
121
  "npm-run-all": "^4.1.5",
122
- "playwright": "^1.57.0",
122
+ "playwright": "^1.58.0",
123
123
  "postcss": "^8.5.6",
124
124
  "prettier": "3.8.1",
125
125
  "prettier-plugin-svelte": "^3.4.1",
@@ -135,8 +135,8 @@
135
135
  "vite": "^7.3.1",
136
136
  "vite-plugin-devtools-json": "^1.0.0",
137
137
  "vite-plugin-lightningcss": "^0.0.5",
138
- "vite-tsconfig-paths": "^6.0.4",
139
- "vitest": "4.0.17"
138
+ "vite-tsconfig-paths": "^6.0.5",
139
+ "vitest": "4.0.18"
140
140
  },
141
141
  "overrides": {
142
142
  "cookie": "^1.0.0",
package/src/app.html CHANGED
@@ -53,7 +53,7 @@
53
53
  content="bx4ham0zkpvzztzu213bhpt76m9siq" />
54
54
  <!-- cspell:enable -->
55
55
 
56
- <meta name="generator" content="SvelteKit 2.50.0" />
56
+ <meta name="generator" content="SvelteKit 2.50.1" />
57
57
 
58
58
  <script src="/disableSw.js"></script>
59
59
 
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Sitemap last updated 2026-01-11 -->
2
+ <!-- Sitemap last updated 2026-01-24 -->
3
3
 
4
4
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
5
5
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  <loc>https://netwk.pro</loc>
9
9
 
10
- <lastmod>2026-01-10</lastmod>
10
+ <lastmod>2026-01-24</lastmod>
11
11
 
12
12
  <changefreq>weekly</changefreq>
13
13
 
@@ -69,7 +69,10 @@ test.describe('Desktop Tests', () => {
69
69
  timeout: 60000,
70
70
  });
71
71
 
72
- await expect(page).toHaveURL(/\/about/);
72
+ // ✅ “ready” assertion to eliminate flake (SPA + Firefox)
73
+ await expect(
74
+ page.getByRole('heading', { name: 'Security, with Intent' }),
75
+ ).toBeVisible();
73
76
  });
74
77
  }); // End Desktop Tests
75
78
 
@@ -14,6 +14,8 @@ This file is part of Network Pro.
14
14
  * @updated 2025-11-12
15
15
  */
16
16
 
17
+ import { expect } from '@playwright/test';
18
+
17
19
  const DEBUG_LOGS = false; // set to true to enable console logs
18
20
 
19
21
  /**
@@ -88,28 +90,28 @@ export function getFooter(page) {
88
90
  }
89
91
 
90
92
  /**
91
- * Click + wait for SPA or full navigation event.
93
+ * Clicks a locator and waits for a URL change (SPA-safe).
94
+ * This avoids relying on navigation lifecycle events (load/domcontentloaded),
95
+ * which can be flaky or aborted in SPA routing (notably in Firefox).
92
96
  *
93
97
  * @param {import('@playwright/test').Page} page
94
98
  * @param {import('@playwright/test').Locator} locator
95
- * @param {{ urlPattern?: string | RegExp, timeout?: number }} [options]
99
+ * @param {{ urlPattern?: RegExp, timeout?: number }} [options]
100
+ * @returns {Promise<void>}
96
101
  */
97
102
  export async function clickAndWaitForNavigation(page, locator, options = {}) {
98
103
  const { urlPattern = /\/.*/, timeout = 60000 } = options;
99
104
 
100
105
  await locator.scrollIntoViewIfNeeded();
101
- await locator.waitFor({ state: 'visible', timeout: 60000 });
106
+ await locator.waitFor({ state: 'visible', timeout });
102
107
 
103
108
  const previousURL = page.url();
104
109
 
105
- const [, newURL] = await Promise.all([
106
- page.waitForURL(
107
- (url) =>
108
- url.toString() !== previousURL && urlPattern.test(url.toString()),
109
- { timeout },
110
- ),
111
- locator.click().then(() => page.url()),
112
- ]);
110
+ await locator.click();
111
+
112
+ // SPA-stable URL wait (polling) — does not depend on navigation lifecycle
113
+ await expect(page).toHaveURL(urlPattern, { timeout });
113
114
 
115
+ const newURL = page.url();
114
116
  console.log(`✅ Navigation from ${previousURL} → ${newURL}`);
115
117
  }