@jskit-ai/agent-docs 0.1.301 → 0.1.302

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.
@@ -24,7 +24,10 @@ purpose: any host can set it. The host sets it; a request never chooses it.
24
24
  - Every HTML page the server sends, and every page the Vite development server
25
25
  sends, names the setting in a `jskit-side-effects` meta tag. The shell
26
26
  (`@jskit-ai/shell-web`) shows the "Test copy" banner from it, with no
27
- application code. The banner never takes a click or a tap.
27
+ application code. The banner never takes a click or a tap. Screen readers
28
+ read it as a note, with "emails, messages and payments are simulated, not
29
+ sent" as its description. It has no label, so a browser test's
30
+ `getByLabel("Email")` never finds it.
28
31
  - The server logs once at startup whether it acts for real. A production server
29
32
  that simulates logs a warning.
30
33
  - Local-password emails (confirmation and password reset) with an installed
@@ -85,7 +85,8 @@ URLs. With `PLAYWRIGHT_BASE_URL` set, start no duplicate server. For Up
85
85
  sideways) and verify each Up returns to its own origin and that chains unwind;
86
86
  open the page directly and verify Up reaches its declared parent; verify
87
87
  main-menu destinations show no arrow, a reload keeps the trail, and Save or
88
- Cancel never leaves the form in it.
88
+ Cancel never leaves the form in it. Find a field by its exact label:
89
+ `page.getByLabel("Email", { exact: true })`.
89
90
 
90
91
  A managed host owns its browser and may provide
91
92
  `PLAYWRIGHT_STORAGE_STATE`; never print or commit that value, bypass it,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.301",
3
+ "version": "0.1.302",
4
4
  "description": "Distributed JSKIT agent references, prompts, guides, and generated reference maps.",
5
5
  "type": "module",
6
6
  "files": [
@@ -50,7 +50,7 @@
50
50
  },
51
51
  "devDependencies": {
52
52
  "@jskit-ai/config-eslint": "0.1.250",
53
- "@jskit-ai/jskit-catalog": "0.2.53",
53
+ "@jskit-ai/jskit-catalog": "0.2.54",
54
54
  "@playwright/test": "1.61.1",
55
55
  "@vitejs/plugin-vue": "^6.0.7",
56
56
  "eslint": "^10.8.0",
@@ -45,13 +45,13 @@
45
45
  "vue-router": "^5.3.1",
46
46
  "vuetify": "^4.3.0",
47
47
  "@jskit-ai/http-runtime": "0.2.20",
48
- "@jskit-ai/shell-web": "0.2.26",
48
+ "@jskit-ai/shell-web": "0.2.27",
49
49
  "@fastify/fast-json-stringify-compiler": "^5.1.0",
50
50
  "@vue/devtools-api": "^8.2.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@jskit-ai/config-eslint": "0.1.250",
54
- "@jskit-ai/jskit-catalog": "0.2.53",
54
+ "@jskit-ai/jskit-catalog": "0.2.54",
55
55
  "@playwright/test": "1.61.1",
56
56
  "@vitejs/plugin-vue": "^6.0.7",
57
57
  "eslint": "^10.8.0",
@@ -15,7 +15,7 @@ A concrete Fastify, Vue, and JSKIT application foundation for products that do n
15
15
 
16
16
  - Id: `app/minimal-foundation`
17
17
  - Keywords: `app`, `fastify`, `foundation`, `minimal`, `server`, `vite`, `vue`
18
- - Owner: `@jskit-ai/agent-docs@0.1.301`
18
+ - Owner: `@jskit-ai/agent-docs@0.1.302`
19
19
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/app/minimal-foundation/PATTERN.md)
20
20
  - Examples: [example/](../../skills/jskit/references/patterns/app/minimal-foundation/example/)
21
21
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`
@@ -26,7 +26,7 @@ A concrete JSKIT web application foundation with responsive shell navigation, se
26
26
 
27
27
  - Id: `app/shell-foundation`
28
28
  - Keywords: `app`, `foundation`, `material`, `navigation`, `placements`, `shell`, `vite`, `vue`
29
- - Owner: `@jskit-ai/agent-docs@0.1.301`
29
+ - Owner: `@jskit-ai/agent-docs@0.1.302`
30
30
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/app/shell-foundation/PATTERN.md)
31
31
  - Examples: [example/](../../skills/jskit/references/patterns/app/shell-foundation/example/)
32
32
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -37,7 +37,7 @@ Configure an assistant runtime for one application surface and expose its chat a
37
37
 
38
38
  - Id: `assistant/assistant-surface`
39
39
  - Keywords: `ai`, `assistant`, `chat`, `config`, `environment`, `page`, `placement`, `settings`, `surface`
40
- - Owner: `@jskit-ai/assistant-runtime@0.2.45`
40
+ - Owner: `@jskit-ai/assistant-runtime@0.2.46`
41
41
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/assistant/assistant-surface/PATTERN.md)
42
42
  - Examples: [example/](../../skills/jskit/references/patterns/assistant/assistant-surface/example/)
43
43
  - Requires: `@jskit-ai/assistant-runtime`, `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`, `@jskit-ai/shell-web`
@@ -59,7 +59,7 @@ Compose JSKIT authentication routes, views, profile controls, and public surface
59
59
 
60
60
  - Id: `auth/auth-surface`
61
61
  - Keywords: `account`, `auth`, `login`, `logout`, `password`, `placement`, `profile`, `reset`, `surface`
62
- - Owner: `@jskit-ai/auth-web@0.2.28`
62
+ - Owner: `@jskit-ai/auth-web@0.2.29`
63
63
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/auth-surface/PATTERN.md)
64
64
  - Examples: [example/](../../skills/jskit/references/patterns/auth/auth-surface/example/)
65
65
  - Requires: `@jskit-ai/auth-core`, `@jskit-ai/auth-web`, `@jskit-ai/shell-web`
@@ -70,7 +70,7 @@ Let people sign in with the accounts they already have in an accounts hub or ano
70
70
 
71
71
  - Id: `auth/oidc-sign-in`
72
72
  - Keywords: `accounts hub`, `auth`, `authentication`, `back-channel logout`, `dynamic client registration`, `issuer`, `master login`, `oidc`, `openid connect`, `single sign-on`, `sso`
73
- - Owner: `@jskit-ai/auth-provider-oidc-core@0.2.30`
73
+ - Owner: `@jskit-ai/auth-provider-oidc-core@0.2.31`
74
74
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/auth/oidc-sign-in/PATTERN.md)
75
75
  - Examples: [example/](../../skills/jskit/references/patterns/auth/oidc-sign-in/example/)
76
76
  - Requires: `@jskit-ai/auth-provider-oidc-core`, `@jskit-ai/auth-web`
@@ -246,7 +246,7 @@ Add a protected administration surface, settings shell, and semantic navigation
246
246
 
247
247
  - Id: `console/console-surface`
248
248
  - Keywords: `admin`, `console`, `navigation`, `owner`, `placement`, `settings`, `surface`
249
- - Owner: `@jskit-ai/console-web@0.1.256`
249
+ - Owner: `@jskit-ai/console-web@0.1.257`
250
250
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/console/console-surface/PATTERN.md)
251
251
  - Examples: [example/](../../skills/jskit/references/patterns/console/console-surface/example/)
252
252
  - Requires: `@jskit-ai/console-core`, `@jskit-ai/console-web`, `@jskit-ai/shell-web`
@@ -279,7 +279,7 @@ Build a routed CRUD user interface as thin application pages over JSKIT's shared
279
279
 
280
280
  - Id: `crud/crud-screen-set`
281
281
  - Keywords: `actions`, `add`, `crud`, `delete`, `edit`, `filters`, `list`, `material`, `routes`, `view`, `vue`
282
- - Owner: `@jskit-ai/http-web@0.2.31`
282
+ - Owner: `@jskit-ai/http-web@0.2.32`
283
283
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md)
284
284
  - Examples: [example/](../../skills/jskit/references/patterns/crud/crud-screen-set/example/)
285
285
  - Requires: `@jskit-ai/http-web`, `@jskit-ai/resource-core`, `@jskit-ai/resource-crud-core`
@@ -323,7 +323,7 @@ Wrap a JSKIT web application in a Capacitor Android shell using native Capacitor
323
323
 
324
324
  - Id: `mobile/android-application`
325
325
  - Keywords: `android`, `capacitor`, `device`, `mobile`, `native`, `shell`, `webview`
326
- - Owner: `@jskit-ai/mobile-capacitor@0.2.26`
326
+ - Owner: `@jskit-ai/mobile-capacitor@0.2.27`
327
327
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/mobile/android-application/PATTERN.md)
328
328
  - Examples: [example/](../../skills/jskit/references/patterns/mobile/android-application/example/)
329
329
  - Requires: `@capacitor/android`, `@capacitor/app`, `@capacitor/cli`, `@jskit-ai/mobile-capacitor`
@@ -334,7 +334,7 @@ Add JSKIT realtime events with an optional Redis backplane and an explicit shell
334
334
 
335
335
  - Id: `realtime/realtime-application`
336
336
  - Keywords: `realtime`, `redis`, `socket.io`, `sockets`, `status`, `websocket`
337
- - Owner: `@jskit-ai/realtime@0.2.29`
337
+ - Owner: `@jskit-ai/realtime@0.2.30`
338
338
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/realtime/realtime-application/PATTERN.md)
339
339
  - Examples: [example/](../../skills/jskit/references/patterns/realtime/realtime-application/example/)
340
340
  - Requires: `@jskit-ai/realtime`, `@jskit-ai/shell-web`
@@ -345,7 +345,7 @@ Compose application-owned Google Publisher Tag delivery with the generic rewarde
345
345
 
346
346
  - Id: `rewards/google-rewarded`
347
347
  - Keywords: `ads`, `google`, `publisher tag`, `rewarded`, `unlock`
348
- - Owner: `@jskit-ai/rewarded-web@0.2.34`
348
+ - Owner: `@jskit-ai/rewarded-web@0.2.35`
349
349
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/rewards/google-rewarded/PATTERN.md)
350
350
  - Examples: [example/](../../skills/jskit/references/patterns/rewards/google-rewarded/example/)
351
351
  - Requires: `@jskit-ai/rewarded-web`
@@ -356,7 +356,7 @@ Define a server feature through explicit capabilities and first-class actions, a
356
356
 
357
357
  - Id: `server/feature-package`
358
358
  - Keywords: `actions`, `aggregate`, `feature`, `handle`, `orchestration`, `owns`, `package`, `provider`, `repository`, `routes`, `server`, `table resource`
359
- - Owner: `@jskit-ai/agent-docs@0.1.301`
359
+ - Owner: `@jskit-ai/agent-docs@0.1.302`
360
360
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/server/feature-package/PATTERN.md)
361
361
  - Examples: [example/](../../skills/jskit/references/patterns/server/feature-package/example/)
362
362
  - Requires: `@jskit-ai/kernel`
@@ -367,7 +367,7 @@ Compose the JSKIT responsive shell, semantic placements, settings navigation, an
367
367
 
368
368
  - Id: `shell/application-shell`
369
369
  - Keywords: `adaptive`, `app`, `layout`, `navigation`, `placement`, `responsive`, `settings`, `shell`
370
- - Owner: `@jskit-ai/shell-web@0.2.26`
370
+ - Owner: `@jskit-ai/shell-web@0.2.27`
371
371
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/shell/application-shell/PATTERN.md)
372
372
  - Examples: [example/](../../skills/jskit/references/patterns/shell/application-shell/example/)
373
373
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -378,7 +378,7 @@ Add product routes and shell extensions through file routing, semantic placement
378
378
 
379
379
  - Id: `ui/page-and-placement`
380
380
  - Keywords: `component`, `navigation`, `outlet`, `page`, `placement`, `routes`, `section`, `shell`, `subpages`, `vue`
381
- - Owner: `@jskit-ai/shell-web@0.2.26`
381
+ - Owner: `@jskit-ai/shell-web@0.2.27`
382
382
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/ui/page-and-placement/PATTERN.md)
383
383
  - Examples: [example/](../../skills/jskit/references/patterns/ui/page-and-placement/example/)
384
384
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -389,7 +389,7 @@ Compose an account settings route and profile, preference, notification, and sig
389
389
 
390
390
  - Id: `users/account-settings`
391
391
  - Keywords: `account`, `link provider`, `notifications`, `oauth`, `preferences`, `profile`, `settings`, `sign-in methods`, `user`, `vue`
392
- - Owner: `@jskit-ai/users-web@0.2.39`
392
+ - Owner: `@jskit-ai/users-web@0.2.40`
393
393
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/users/account-settings/PATTERN.md)
394
394
  - Examples: [example/](../../skills/jskit/references/patterns/users/account-settings/example/)
395
395
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/users-core`, `@jskit-ai/users-web`
@@ -422,7 +422,7 @@ Compose workspace selection, invitation, member administration, settings, and re
422
422
 
423
423
  - Id: `workspaces/workspace-surfaces`
424
424
  - Keywords: `admin`, `invite`, `member`, `navigation`, `settings`, `surface`, `switcher`, `workspace`
425
- - Owner: `@jskit-ai/workspaces-web@0.2.39`
425
+ - Owner: `@jskit-ai/workspaces-web@0.2.40`
426
426
  - Read: [PATTERN.md](../../skills/jskit/references/patterns/workspaces/workspace-surfaces/PATTERN.md)
427
427
  - Examples: [example/](../../skills/jskit/references/patterns/workspaces/workspace-surfaces/example/)
428
428
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/workspaces-core`, `@jskit-ai/workspaces-web`
@@ -32,7 +32,7 @@ How to use it:
32
32
  - [live-actions.md](./live-actions.md)
33
33
  - ajax, fetch, API call, request, endpoint, HTTP client, `useCrudListScreen()`, `useCrudViewScreen()`, `useCrudAddEditScreen()`, `useList()`, `useView()`, `useAddEdit()`, `useEndpointResource()`, `httpWebClient`
34
34
  - [client-requests.md](./client-requests.md)
35
- - playwright, browser test, e2e, ui verification, baseline test, authenticated ui test, test auth, dev login as, dev auth bypass
35
+ - playwright, browser test, e2e, ui verification, baseline test, authenticated ui test, test auth, dev login as, dev auth bypass, `getByLabel`, strict mode violation
36
36
  - [ui-testing.md](./ui-testing.md)
37
37
  - UI contract, design contract, navigation roles, Up arrow, Back button, declared parent, jskit.parent, in-app trail, history.back, hand-built links, jskit check, Deslop, density, placeholder copy, card shells, shared CRUD screens, row actions, synthetic rows, detail slots
38
38
  - [ui-contract.md](./ui-contract.md)
@@ -22,6 +22,11 @@ Rules:
22
22
  app-owned. Do not duplicate base-URL, web-server, or storage-state logic in
23
23
  individual tests.
24
24
  - Use relative paths such as `page.goto("/home")`. The shared config owns the browser base URL.
25
+ - Find a form field by its exact label: `page.getByLabel("Email", { exact: true })`
26
+ or `page.getByRole("textbox", { name: "Email", exact: true })`. Without
27
+ `exact`, Playwright matches any element whose label contains the text, in any
28
+ case, so "Email" also finds "Confirm email" or any other labelled element that
29
+ mentions emails, and the lookup fails strict mode.
25
30
  - After clicking a client-side navigation control, wait for its destination
26
31
  with `await expect(page).toHaveURL(...)` before reloading. Awaiting the click
27
32
  alone does not wait for Vue Router to complete. Up tests reach a page
@@ -15,7 +15,7 @@ A concrete Fastify, Vue, and JSKIT application foundation for products that do n
15
15
 
16
16
  - Id: `app/minimal-foundation`
17
17
  - Keywords: `app`, `fastify`, `foundation`, `minimal`, `server`, `vite`, `vue`
18
- - Owner: `@jskit-ai/agent-docs@0.1.301`
18
+ - Owner: `@jskit-ai/agent-docs@0.1.302`
19
19
  - Read: [PATTERN.md](patterns/app/minimal-foundation/PATTERN.md)
20
20
  - Examples: [example/](patterns/app/minimal-foundation/example/)
21
21
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`
@@ -26,7 +26,7 @@ A concrete JSKIT web application foundation with responsive shell navigation, se
26
26
 
27
27
  - Id: `app/shell-foundation`
28
28
  - Keywords: `app`, `foundation`, `material`, `navigation`, `placements`, `shell`, `vite`, `vue`
29
- - Owner: `@jskit-ai/agent-docs@0.1.301`
29
+ - Owner: `@jskit-ai/agent-docs@0.1.302`
30
30
  - Read: [PATTERN.md](patterns/app/shell-foundation/PATTERN.md)
31
31
  - Examples: [example/](patterns/app/shell-foundation/example/)
32
32
  - Requires: `@jskit-ai/http-runtime`, `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -37,7 +37,7 @@ Configure an assistant runtime for one application surface and expose its chat a
37
37
 
38
38
  - Id: `assistant/assistant-surface`
39
39
  - Keywords: `ai`, `assistant`, `chat`, `config`, `environment`, `page`, `placement`, `settings`, `surface`
40
- - Owner: `@jskit-ai/assistant-runtime@0.2.45`
40
+ - Owner: `@jskit-ai/assistant-runtime@0.2.46`
41
41
  - Read: [PATTERN.md](patterns/assistant/assistant-surface/PATTERN.md)
42
42
  - Examples: [example/](patterns/assistant/assistant-surface/example/)
43
43
  - Requires: `@jskit-ai/assistant-runtime`, `@jskit-ai/connectors-catalog`, `@jskit-ai/connectors-core`, `@jskit-ai/shell-web`
@@ -59,7 +59,7 @@ Compose JSKIT authentication routes, views, profile controls, and public surface
59
59
 
60
60
  - Id: `auth/auth-surface`
61
61
  - Keywords: `account`, `auth`, `login`, `logout`, `password`, `placement`, `profile`, `reset`, `surface`
62
- - Owner: `@jskit-ai/auth-web@0.2.28`
62
+ - Owner: `@jskit-ai/auth-web@0.2.29`
63
63
  - Read: [PATTERN.md](patterns/auth/auth-surface/PATTERN.md)
64
64
  - Examples: [example/](patterns/auth/auth-surface/example/)
65
65
  - Requires: `@jskit-ai/auth-core`, `@jskit-ai/auth-web`, `@jskit-ai/shell-web`
@@ -70,7 +70,7 @@ Let people sign in with the accounts they already have in an accounts hub or ano
70
70
 
71
71
  - Id: `auth/oidc-sign-in`
72
72
  - Keywords: `accounts hub`, `auth`, `authentication`, `back-channel logout`, `dynamic client registration`, `issuer`, `master login`, `oidc`, `openid connect`, `single sign-on`, `sso`
73
- - Owner: `@jskit-ai/auth-provider-oidc-core@0.2.30`
73
+ - Owner: `@jskit-ai/auth-provider-oidc-core@0.2.31`
74
74
  - Read: [PATTERN.md](patterns/auth/oidc-sign-in/PATTERN.md)
75
75
  - Examples: [example/](patterns/auth/oidc-sign-in/example/)
76
76
  - Requires: `@jskit-ai/auth-provider-oidc-core`, `@jskit-ai/auth-web`
@@ -246,7 +246,7 @@ Add a protected administration surface, settings shell, and semantic navigation
246
246
 
247
247
  - Id: `console/console-surface`
248
248
  - Keywords: `admin`, `console`, `navigation`, `owner`, `placement`, `settings`, `surface`
249
- - Owner: `@jskit-ai/console-web@0.1.256`
249
+ - Owner: `@jskit-ai/console-web@0.1.257`
250
250
  - Read: [PATTERN.md](patterns/console/console-surface/PATTERN.md)
251
251
  - Examples: [example/](patterns/console/console-surface/example/)
252
252
  - Requires: `@jskit-ai/console-core`, `@jskit-ai/console-web`, `@jskit-ai/shell-web`
@@ -279,7 +279,7 @@ Build a routed CRUD user interface as thin application pages over JSKIT's shared
279
279
 
280
280
  - Id: `crud/crud-screen-set`
281
281
  - Keywords: `actions`, `add`, `crud`, `delete`, `edit`, `filters`, `list`, `material`, `routes`, `view`, `vue`
282
- - Owner: `@jskit-ai/http-web@0.2.31`
282
+ - Owner: `@jskit-ai/http-web@0.2.32`
283
283
  - Read: [PATTERN.md](patterns/crud/crud-screen-set/PATTERN.md)
284
284
  - Examples: [example/](patterns/crud/crud-screen-set/example/)
285
285
  - Requires: `@jskit-ai/http-web`, `@jskit-ai/resource-core`, `@jskit-ai/resource-crud-core`
@@ -323,7 +323,7 @@ Wrap a JSKIT web application in a Capacitor Android shell using native Capacitor
323
323
 
324
324
  - Id: `mobile/android-application`
325
325
  - Keywords: `android`, `capacitor`, `device`, `mobile`, `native`, `shell`, `webview`
326
- - Owner: `@jskit-ai/mobile-capacitor@0.2.26`
326
+ - Owner: `@jskit-ai/mobile-capacitor@0.2.27`
327
327
  - Read: [PATTERN.md](patterns/mobile/android-application/PATTERN.md)
328
328
  - Examples: [example/](patterns/mobile/android-application/example/)
329
329
  - Requires: `@capacitor/android`, `@capacitor/app`, `@capacitor/cli`, `@jskit-ai/mobile-capacitor`
@@ -334,7 +334,7 @@ Add JSKIT realtime events with an optional Redis backplane and an explicit shell
334
334
 
335
335
  - Id: `realtime/realtime-application`
336
336
  - Keywords: `realtime`, `redis`, `socket.io`, `sockets`, `status`, `websocket`
337
- - Owner: `@jskit-ai/realtime@0.2.29`
337
+ - Owner: `@jskit-ai/realtime@0.2.30`
338
338
  - Read: [PATTERN.md](patterns/realtime/realtime-application/PATTERN.md)
339
339
  - Examples: [example/](patterns/realtime/realtime-application/example/)
340
340
  - Requires: `@jskit-ai/realtime`, `@jskit-ai/shell-web`
@@ -345,7 +345,7 @@ Compose application-owned Google Publisher Tag delivery with the generic rewarde
345
345
 
346
346
  - Id: `rewards/google-rewarded`
347
347
  - Keywords: `ads`, `google`, `publisher tag`, `rewarded`, `unlock`
348
- - Owner: `@jskit-ai/rewarded-web@0.2.34`
348
+ - Owner: `@jskit-ai/rewarded-web@0.2.35`
349
349
  - Read: [PATTERN.md](patterns/rewards/google-rewarded/PATTERN.md)
350
350
  - Examples: [example/](patterns/rewards/google-rewarded/example/)
351
351
  - Requires: `@jskit-ai/rewarded-web`
@@ -356,7 +356,7 @@ Define a server feature through explicit capabilities and first-class actions, a
356
356
 
357
357
  - Id: `server/feature-package`
358
358
  - Keywords: `actions`, `aggregate`, `feature`, `handle`, `orchestration`, `owns`, `package`, `provider`, `repository`, `routes`, `server`, `table resource`
359
- - Owner: `@jskit-ai/agent-docs@0.1.301`
359
+ - Owner: `@jskit-ai/agent-docs@0.1.302`
360
360
  - Read: [PATTERN.md](patterns/server/feature-package/PATTERN.md)
361
361
  - Examples: [example/](patterns/server/feature-package/example/)
362
362
  - Requires: `@jskit-ai/kernel`
@@ -367,7 +367,7 @@ Compose the JSKIT responsive shell, semantic placements, settings navigation, an
367
367
 
368
368
  - Id: `shell/application-shell`
369
369
  - Keywords: `adaptive`, `app`, `layout`, `navigation`, `placement`, `responsive`, `settings`, `shell`
370
- - Owner: `@jskit-ai/shell-web@0.2.26`
370
+ - Owner: `@jskit-ai/shell-web@0.2.27`
371
371
  - Read: [PATTERN.md](patterns/shell/application-shell/PATTERN.md)
372
372
  - Examples: [example/](patterns/shell/application-shell/example/)
373
373
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -378,7 +378,7 @@ Add product routes and shell extensions through file routing, semantic placement
378
378
 
379
379
  - Id: `ui/page-and-placement`
380
380
  - Keywords: `component`, `navigation`, `outlet`, `page`, `placement`, `routes`, `section`, `shell`, `subpages`, `vue`
381
- - Owner: `@jskit-ai/shell-web@0.2.26`
381
+ - Owner: `@jskit-ai/shell-web@0.2.27`
382
382
  - Read: [PATTERN.md](patterns/ui/page-and-placement/PATTERN.md)
383
383
  - Examples: [example/](patterns/ui/page-and-placement/example/)
384
384
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -389,7 +389,7 @@ Compose an account settings route and profile, preference, notification, and sig
389
389
 
390
390
  - Id: `users/account-settings`
391
391
  - Keywords: `account`, `link provider`, `notifications`, `oauth`, `preferences`, `profile`, `settings`, `sign-in methods`, `user`, `vue`
392
- - Owner: `@jskit-ai/users-web@0.2.39`
392
+ - Owner: `@jskit-ai/users-web@0.2.40`
393
393
  - Read: [PATTERN.md](patterns/users/account-settings/PATTERN.md)
394
394
  - Examples: [example/](patterns/users/account-settings/example/)
395
395
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/users-core`, `@jskit-ai/users-web`
@@ -422,7 +422,7 @@ Compose workspace selection, invitation, member administration, settings, and re
422
422
 
423
423
  - Id: `workspaces/workspace-surfaces`
424
424
  - Keywords: `admin`, `invite`, `member`, `navigation`, `settings`, `surface`, `switcher`, `workspace`
425
- - Owner: `@jskit-ai/workspaces-web@0.2.39`
425
+ - Owner: `@jskit-ai/workspaces-web@0.2.40`
426
426
  - Read: [PATTERN.md](patterns/workspaces/workspace-surfaces/PATTERN.md)
427
427
  - Examples: [example/](patterns/workspaces/workspace-surfaces/example/)
428
428
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/workspaces-core`, `@jskit-ai/workspaces-web`
@@ -50,7 +50,7 @@
50
50
  },
51
51
  "devDependencies": {
52
52
  "@jskit-ai/config-eslint": "0.1.250",
53
- "@jskit-ai/jskit-catalog": "0.2.53",
53
+ "@jskit-ai/jskit-catalog": "0.2.54",
54
54
  "@playwright/test": "1.61.1",
55
55
  "@vitejs/plugin-vue": "^6.0.7",
56
56
  "eslint": "^10.8.0",
@@ -45,13 +45,13 @@
45
45
  "vue-router": "^5.3.1",
46
46
  "vuetify": "^4.3.0",
47
47
  "@jskit-ai/http-runtime": "0.2.20",
48
- "@jskit-ai/shell-web": "0.2.26",
48
+ "@jskit-ai/shell-web": "0.2.27",
49
49
  "@fastify/fast-json-stringify-compiler": "^5.1.0",
50
50
  "@vue/devtools-api": "^8.2.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@jskit-ai/config-eslint": "0.1.250",
54
- "@jskit-ai/jskit-catalog": "0.2.53",
54
+ "@jskit-ai/jskit-catalog": "0.2.54",
55
55
  "@playwright/test": "1.61.1",
56
56
  "@vitejs/plugin-vue": "^6.0.7",
57
57
  "eslint": "^10.8.0",
@@ -2,7 +2,7 @@
2
2
  "private": true,
3
3
  "type": "module",
4
4
  "dependencies": {
5
- "@jskit-ai/auth-provider-oidc-core": "0.2.30",
6
- "@jskit-ai/auth-web": "0.2.28"
5
+ "@jskit-ai/auth-provider-oidc-core": "0.2.31",
6
+ "@jskit-ai/auth-web": "0.2.29"
7
7
  }
8
8
  }
@@ -2,7 +2,7 @@
2
2
  "private": true,
3
3
  "type": "module",
4
4
  "dependencies": {
5
- "@jskit-ai/realtime": "0.2.29",
6
- "@jskit-ai/shell-web": "0.2.26"
5
+ "@jskit-ai/realtime": "0.2.30",
6
+ "@jskit-ai/shell-web": "0.2.27"
7
7
  }
8
8
  }
@@ -19,7 +19,10 @@ purpose: any host can set it. The host sets it; a request never chooses it.
19
19
  - Every HTML page the server sends, and every page the Vite development server
20
20
  sends, names the setting in a `jskit-side-effects` meta tag. The shell
21
21
  (`@jskit-ai/shell-web`) shows the "Test copy" banner from it, with no
22
- application code. The banner never takes a click or a tap.
22
+ application code. The banner never takes a click or a tap. Screen readers
23
+ read it as a note, with "emails, messages and payments are simulated, not
24
+ sent" as its description. It has no label, so a browser test's
25
+ `getByLabel("Email")` never finds it.
23
26
  - The server logs once at startup whether it acts for real. A production server
24
27
  that simulates logs a warning.
25
28
  - Local-password emails (confirmation and password reset) with an installed
@@ -80,7 +80,8 @@ URLs. With `PLAYWRIGHT_BASE_URL` set, start no duplicate server. For Up
80
80
  sideways) and verify each Up returns to its own origin and that chains unwind;
81
81
  open the page directly and verify Up reaches its declared parent; verify
82
82
  main-menu destinations show no arrow, a reload keeps the trail, and Save or
83
- Cancel never leaves the form in it.
83
+ Cancel never leaves the form in it. Find a field by its exact label:
84
+ `page.getByLabel("Email", { exact: true })`.
84
85
 
85
86
  A managed host owns its browser and may provide
86
87
  `PLAYWRIGHT_STORAGE_STATE`; never print or commit that value, bypass it,