@jskit-ai/agent-docs 0.1.118 → 0.1.120
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/guide/agent/app-extras/assistant.md +0 -1
- package/guide/agent/app-extras/mobile-capacitor.md +3 -3
- package/guide/agent/app-extras/realtime.md +1 -2
- package/guide/agent/app-setup/a-more-interesting-shell.md +36 -14
- package/guide/agent/app-setup/authentication.md +7 -15
- package/guide/agent/app-setup/console.md +0 -1
- package/guide/agent/app-setup/database-layer.md +15 -18
- package/guide/agent/app-setup/initial-scaffolding.md +61 -101
- package/guide/agent/app-setup/multi-homing.md +2 -10
- package/guide/agent/app-setup/quickstart.md +0 -1
- package/guide/agent/app-setup/upgrade-beta-1-to-final.md +134 -0
- package/guide/agent/app-setup/users.md +8 -15
- package/guide/agent/app-setup/working-with-the-jskit-cli.md +168 -997
- package/guide/agent/generators/advanced-cruds.md +2 -3
- package/guide/agent/generators/crud-generators.md +27 -54
- package/guide/agent/generators/row-policies.md +1 -1
- package/package.json +1 -1
- package/patterns/INDEX.md +1 -1
- package/patterns/crud-scaffolding.md +9 -10
- package/patterns/generated-ui-contract-tracking.md +3 -3
- package/patterns/live-actions.md +5 -4
- package/patterns/placements.md +2 -2
- package/patterns/ui-testing.md +8 -15
- package/reference/autogen/packages/assistant-core.md +0 -6
- package/reference/autogen/packages/assistant-runtime.md +0 -6
- package/reference/autogen/packages/assistant.md +0 -6
- package/reference/autogen/packages/auth-core.md +0 -6
- package/reference/autogen/packages/auth-provider-local-core.md +0 -6
- package/reference/autogen/packages/auth-provider-local-db-core.md +0 -6
- package/reference/autogen/packages/auth-provider-supabase-core.md +0 -6
- package/reference/autogen/packages/auth-web.md +0 -6
- package/reference/autogen/packages/console-core.md +0 -6
- package/reference/autogen/packages/console-web.md +0 -6
- package/reference/autogen/packages/crud-core.md +0 -6
- package/reference/autogen/packages/crud-server-generator.md +0 -10
- package/reference/autogen/packages/crud-ui-generator.md +1 -8
- package/reference/autogen/packages/database-runtime-mysql.md +0 -6
- package/reference/autogen/packages/database-runtime-postgres.md +0 -6
- package/reference/autogen/packages/database-runtime.md +0 -6
- package/reference/autogen/packages/feature-server-generator.md +1 -11
- package/reference/autogen/packages/google-rewarded-core.md +0 -6
- package/reference/autogen/packages/google-rewarded-web.md +0 -6
- package/reference/autogen/packages/http-runtime.md +0 -6
- package/reference/autogen/packages/json-rest-api-core.md +0 -6
- package/reference/autogen/packages/kernel.md +45 -42
- package/reference/autogen/packages/mobile-capacitor.md +0 -6
- package/reference/autogen/packages/realtime.md +0 -6
- package/reference/autogen/packages/resource-core.md +0 -6
- package/reference/autogen/packages/resource-crud-core.md +0 -6
- package/reference/autogen/packages/shell-web.md +0 -6
- package/reference/autogen/packages/storage-runtime.md +0 -6
- package/reference/autogen/packages/ui-generator.md +0 -6
- package/reference/autogen/packages/uploads-image-web.md +0 -6
- package/reference/autogen/packages/uploads-runtime.md +0 -6
- package/reference/autogen/packages/users-core.md +0 -14
- package/reference/autogen/packages/users-web.md +8 -6
- package/reference/autogen/packages/workspaces-core.md +0 -6
- package/reference/autogen/packages/workspaces-web.md +0 -6
- package/reference/autogen/tooling/create-app.md +0 -14
- package/reference/autogen/tooling/jskit-cli.md +65 -190
- package/reference/autogen/tooling/testUtils.md +14 -0
- package/skills/jskit/SKILL.md +4 -4
- package/skills/jskit/references/crud-operations.md +7 -6
- package/skills/jskit/references/ui-operations.md +16 -19
|
@@ -249,7 +249,6 @@ migrations/
|
|
|
249
249
|
|
|
250
250
|
packages/contacts/
|
|
251
251
|
package.json
|
|
252
|
-
package.descriptor.mjs
|
|
253
252
|
src/server/ContactsProvider.js
|
|
254
253
|
src/server/actions.js
|
|
255
254
|
src/server/registerRoutes.js
|
|
@@ -281,7 +280,7 @@ Two important notes:
|
|
|
281
280
|
|
|
282
281
|
## What each server file owns
|
|
283
282
|
|
|
284
|
-
### `package.json`
|
|
283
|
+
### `package.json`
|
|
285
284
|
|
|
286
285
|
These make the CRUD a real local package.
|
|
287
286
|
|
|
@@ -290,7 +289,7 @@ They own:
|
|
|
290
289
|
- package identity
|
|
291
290
|
- runtime dependencies
|
|
292
291
|
- provider registration metadata
|
|
293
|
-
-
|
|
292
|
+
- `package.json.jskit` install and runtime metadata
|
|
294
293
|
|
|
295
294
|
They do **not** own CRUD behavior directly. They describe how the package plugs into the app.
|
|
296
295
|
|
|
@@ -46,7 +46,6 @@ npx @jskit-ai/create-app notes \
|
|
|
46
46
|
npm install
|
|
47
47
|
|
|
48
48
|
npx --no-install jskit add package database-runtime-mysql
|
|
49
|
-
npm install
|
|
50
49
|
|
|
51
50
|
# Create and select a fresh disposable database, then create the live `notes` table.
|
|
52
51
|
|
|
@@ -56,7 +55,6 @@ npx --no-install jskit generate crud-server-generator scaffold \
|
|
|
56
55
|
--ownership-filter public \
|
|
57
56
|
--access public \
|
|
58
57
|
--table-name notes
|
|
59
|
-
npm install
|
|
60
58
|
|
|
61
59
|
npx --no-install jskit generate crud-ui-generator crud notes \
|
|
62
60
|
--resource-file packages/notes/src/shared/noteResource.js \
|
|
@@ -73,26 +71,29 @@ placement, so do not pre-install the shell as a workaround.
|
|
|
73
71
|
|
|
74
72
|
## Existing-app migration checklist
|
|
75
73
|
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
Strict temporal resource values require one coordinated application migration.
|
|
75
|
+
There is no compatibility alias or automatic coercion for JavaScript `Date`
|
|
76
|
+
objects at resource boundaries:
|
|
78
77
|
|
|
79
|
-
1. Commit the
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
1. Commit the application's current work and update its direct `@jskit-ai/*`
|
|
79
|
+
dependencies to one coordinated, exact release set.
|
|
80
|
+
2. If the application declares `json-rest-schema` directly, use
|
|
81
|
+
`json-rest-schema` 1.0.17 or newer and review its temporal validation before
|
|
82
|
+
installing dependencies.
|
|
82
83
|
3. Replace resource-bound JavaScript `Date` values with strings. `date` is
|
|
83
84
|
`YYYY-MM-DD`; `time` is offset-free `HH:MM[:SS[.fraction]]`; and `dateTime`
|
|
84
|
-
is RFC 3339 with seconds and a `Z` or numeric offset.
|
|
85
|
-
`
|
|
86
|
-
|
|
85
|
+
is RFC 3339 with seconds and a `Z` or numeric offset. Use
|
|
86
|
+
`epochMilliseconds` or `epochSeconds` only after checking the existing
|
|
87
|
+
numeric unit. Preserve `temporalPrecision`.
|
|
87
88
|
4. For a standard generated view delete action, rerun the original
|
|
88
89
|
`crud-ui-generator crud` command with `--delete-confirmation`. Add `--force`
|
|
89
|
-
only when you deliberately want to replace
|
|
90
|
-
|
|
91
|
-
`CrudViewScreen` `actions` slot
|
|
92
|
-
described below.
|
|
93
|
-
5.
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
only when you deliberately want to replace generated page output. For a
|
|
91
|
+
customized view, preserve the customization and add the public
|
|
92
|
+
`CrudViewScreen` `actions` slot, `CrudDeleteAction`, and
|
|
93
|
+
`useCrudDeleteAction()` integration described below.
|
|
94
|
+
5. Review the generated diff, keep application-owned customizations and browser
|
|
95
|
+
tests, then run the application's full verification suite before applying
|
|
96
|
+
database migrations.
|
|
96
97
|
|
|
97
98
|
Generated generic CRUD repositories convert database temporal values at the
|
|
98
99
|
resource boundary. Custom repositories still need to return strict temporal
|
|
@@ -359,7 +360,7 @@ installed. Later schema evolution must use a new immutable, package-owned
|
|
|
359
360
|
additive migration in the table's app-local package, declared through
|
|
360
361
|
`install-migration`.
|
|
361
362
|
|
|
362
|
-
Create that source and
|
|
363
|
+
Create that source and `package.json.jskit` mutation together with:
|
|
363
364
|
|
|
364
365
|
```bash
|
|
365
366
|
npx jskit create migration \
|
|
@@ -368,7 +369,7 @@ npx jskit create migration \
|
|
|
368
369
|
```
|
|
369
370
|
|
|
370
371
|
Implement the generated template before running
|
|
371
|
-
`npx jskit migrations
|
|
372
|
+
`npx jskit migrations sync`. SQL or Knex schema operations
|
|
372
373
|
inside the source-controlled migration are supported. Running ad-hoc SQL
|
|
373
374
|
against only one database is not, because it creates schema drift.
|
|
374
375
|
|
|
@@ -473,22 +474,6 @@ That file is the shared CRUD contract. The UI generator reads it to decide:
|
|
|
473
474
|
|
|
474
475
|
So even though the server scaffold writes many files, the resource file is the bridge between the server and UI halves.
|
|
475
476
|
|
|
476
|
-
### One install boundary to remember
|
|
477
|
-
|
|
478
|
-
`crud-server-generator scaffold` also adds a new local app package dependency such as:
|
|
479
|
-
|
|
480
|
-
```text
|
|
481
|
-
@local/contacts
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
So before you build or run the app again, install that new local package:
|
|
485
|
-
|
|
486
|
-
```bash
|
|
487
|
-
npm install
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
The same rule applies after later server scaffolds such as `addresses` and `comments`. The UI generator can still read the generated resource file directly, but the app runtime needs the local package install boundary to be completed before the CRUD can boot normally.
|
|
491
|
-
|
|
492
477
|
For standard CRUDs, that file is intentionally compact. It uses `defineCrudResource(...)` from `@jskit-ai/resource-crud-core`, authors the canonical `schema` / `searchSchema` / `defaultSort` / `autofilter` shape once, and lets JSKIT derive the standard CRUD operation contracts from it.
|
|
493
478
|
|
|
494
479
|
The generated server action validators are compact for the same reason.
|
|
@@ -534,13 +519,13 @@ Vue files below `src/pages/`, so reusable Vue helpers must stay outside that
|
|
|
534
519
|
directory or they become browser routes.
|
|
535
520
|
|
|
536
521
|
`--delete-confirmation` is opt-in. When present, the generated view extends
|
|
537
|
-
the public `CrudViewScreen` `actions` slot with
|
|
538
|
-
|
|
539
|
-
the current route id through the
|
|
540
|
-
`DELETE` operation through
|
|
541
|
-
keeps a useful error on the
|
|
542
|
-
|
|
543
|
-
`--id-param` names.
|
|
522
|
+
the public `CrudViewScreen` `actions` slot with `CrudDeleteAction`. That shared
|
|
523
|
+
component owns the destructive button and Vuetify alert dialog. The public
|
|
524
|
+
`useCrudDeleteAction()` composable resolves the current route id through the
|
|
525
|
+
CRUD runtime, runs the shared resource's `DELETE` operation through
|
|
526
|
+
`useCommand()`, disables duplicate submission, keeps a useful error on the
|
|
527
|
+
record screen, invalidates the list query, and navigates to the generated list
|
|
528
|
+
route after success. It supports custom `--id-param` names.
|
|
544
529
|
|
|
545
530
|
The generator rejects this option when list or view is omitted, or when the
|
|
546
531
|
shared resource has no `DELETE` operation. Without the flag, no delete control
|
|
@@ -658,12 +643,6 @@ npx jskit generate crud-server-generator scaffold \
|
|
|
658
643
|
--grant-role member
|
|
659
644
|
```
|
|
660
645
|
|
|
661
|
-
Then install the generated local package:
|
|
662
|
-
|
|
663
|
-
```bash
|
|
664
|
-
npm install
|
|
665
|
-
```
|
|
666
|
-
|
|
667
646
|
### Step 3: refine the generated lookup metadata by hand
|
|
668
647
|
|
|
669
648
|
Open `packages/addresses/src/shared/addressResource.js` and add `labelKey: "fullName"` to the generated `contactId` relation:
|
|
@@ -836,12 +815,6 @@ npx jskit generate crud-server-generator scaffold \
|
|
|
836
815
|
--grant-role member
|
|
837
816
|
```
|
|
838
817
|
|
|
839
|
-
Then install the generated local package:
|
|
840
|
-
|
|
841
|
-
```bash
|
|
842
|
-
npm install
|
|
843
|
-
```
|
|
844
|
-
|
|
845
818
|
### Step 3: refine the generated lookup metadata by hand
|
|
846
819
|
|
|
847
820
|
Open `packages/comments/src/shared/commentResource.js` and add `labelKey: "fullName"` to the generated `contactId` relation:
|
|
@@ -360,7 +360,7 @@ class SafetyProvider {
|
|
|
360
360
|
|
|
361
361
|
The organisation-units package never imports safety. Installing safety adds the grant; omitting safety leaves that grant absent.
|
|
362
362
|
|
|
363
|
-
The
|
|
363
|
+
The npm dependency must point in the same direction as the provider dependency: safety depends on organisation-units, and organisation-units does not depend on safety.
|
|
364
364
|
|
|
365
365
|
## Descendant visibility with a recursive CTE
|
|
366
366
|
|
package/package.json
CHANGED
package/patterns/INDEX.md
CHANGED
|
@@ -28,7 +28,7 @@ How to use it:
|
|
|
28
28
|
- `live-actions.md`
|
|
29
29
|
- ajax, fetch, API call, request, endpoint, HTTP client, `useCrudListScreen()`, `useCrudViewScreen()`, `useCrudAddEditScreen()`, `useList()`, `useView()`, `useAddEdit()`, `useEndpointResource()`, `usersWebHttpClient`
|
|
30
30
|
- `client-requests.md`
|
|
31
|
-
- playwright, browser test, e2e, ui verification,
|
|
31
|
+
- playwright, browser test, e2e, ui verification, baseline test, authenticated ui test, test auth, dev login as, dev auth bypass
|
|
32
32
|
- `ui-testing.md`
|
|
33
33
|
- generated UI contract, design contract, navigation roles, density, placeholder copy, card shells, shared CRUD screens, row actions, synthetic rows, detail slots
|
|
34
34
|
- `generated-ui-contract-tracking.md`
|
|
@@ -97,8 +97,9 @@ Rules:
|
|
|
97
97
|
- Use `--navigation-role` for CRUD list placement intent. Main resources can stay `primary`; nested/detail/workflow CRUD routes should usually be `secondary`, `workflow`, or `none`.
|
|
98
98
|
- Add `--delete-confirmation` when the generated view needs the standard
|
|
99
99
|
destructive record action. The flag requires list and view pages and a
|
|
100
|
-
resource with a `DELETE` operation; it uses the public
|
|
101
|
-
slot and command composable rather than
|
|
100
|
+
resource with a `DELETE` operation; it uses `CrudDeleteAction` in the public
|
|
101
|
+
view-screen action slot and the standard command composable rather than
|
|
102
|
+
generating page-local dialog or request code.
|
|
102
103
|
|
|
103
104
|
## Temporal values at resource boundaries
|
|
104
105
|
|
|
@@ -109,15 +110,13 @@ validators no longer coerce JavaScript `Date` objects:
|
|
|
109
110
|
- `time` is offset-free `HH:MM[:SS[.fraction]]`
|
|
110
111
|
- `dateTime` is RFC 3339 with seconds and `Z` or a numeric offset
|
|
111
112
|
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
Use `epochMilliseconds` or `epochSeconds` for numeric epoch values after
|
|
114
|
+
checking the stored unit. Preserve the field's
|
|
114
115
|
`temporalPrecision`; do not truncate meaningful fractional seconds.
|
|
115
116
|
|
|
116
117
|
Generated generic CRUD repositories serialize database temporal outputs
|
|
117
118
|
before resource validation. App-owned/custom repositories must return strict
|
|
118
119
|
strings and must write ISO/RFC 3339 strings rather than passing `Date` objects.
|
|
119
|
-
This is a version-0 breaking contract: update application code instead of
|
|
120
|
-
adding a legacy temporal parser.
|
|
121
120
|
|
|
122
121
|
## Baseline generation versus later schema evolution
|
|
123
122
|
|
|
@@ -136,10 +135,10 @@ The initial CRUD scaffold and a later schema change are different operations:
|
|
|
136
135
|
```
|
|
137
136
|
|
|
138
137
|
- The authoring command creates an editable migration template and adds its
|
|
139
|
-
`install-migration` mutation to the owning package
|
|
140
|
-
operation. Implement and test the template before
|
|
141
|
-
-
|
|
142
|
-
`npx jskit migrations
|
|
138
|
+
`install-migration` mutation to the owning package's `package.json.jskit` in
|
|
139
|
+
one operation. Implement and test the template before synchronizing it.
|
|
140
|
+
- Synchronize the completed source with
|
|
141
|
+
`npx jskit migrations sync`, then apply it with
|
|
143
142
|
`npm run db:migrate`.
|
|
144
143
|
- SQL or Knex schema operations inside that source-controlled migration are
|
|
145
144
|
supported. Ad-hoc SQL applied only to one database is not: it creates schema
|
|
@@ -4,7 +4,7 @@ Use this file to track the generator-level UI contract work. Keep entries concre
|
|
|
4
4
|
|
|
5
5
|
## Goal
|
|
6
6
|
|
|
7
|
-
Generated JSKIT apps should feel like real adaptive apps by default, not framework demos. The contract must be enforced in generators,
|
|
7
|
+
Generated JSKIT apps should feel like real adaptive apps by default, not framework demos. The contract must be enforced in generators, package metadata, docs, and tests so it does not drift.
|
|
8
8
|
|
|
9
9
|
## Current Scope
|
|
10
10
|
|
|
@@ -31,7 +31,7 @@ Generated JSKIT apps should feel like real adaptive apps by default, not framewo
|
|
|
31
31
|
|
|
32
32
|
- [x] `npm run lint`
|
|
33
33
|
- [x] `npm run check:runtime-deps`
|
|
34
|
-
- [x] `
|
|
34
|
+
- [x] `npx jskit lint-packages`
|
|
35
35
|
- [x] `npm run catalog:build`
|
|
36
36
|
- [x] `npm run agent-docs:build`
|
|
37
37
|
- [x] `npm test --workspace @jskit-ai/kernel`
|
|
@@ -50,7 +50,7 @@ Generated JSKIT apps should feel like real adaptive apps by default, not framewo
|
|
|
50
50
|
- Do not weaken semantic placement defaults while adding navigation inference.
|
|
51
51
|
- Do not turn the contract into runtime business logic; it is generator and template policy.
|
|
52
52
|
- Do not remove intentional cards from specialist UI components just to satisfy a broad scan.
|
|
53
|
-
- Keep generated files deterministic and update catalog/agent-doc outputs when
|
|
53
|
+
- Keep generated files deterministic and update catalog/agent-doc outputs when package metadata or exported symbols change.
|
|
54
54
|
- Kernel shared UI contract must stay surface-id agnostic. Concrete mappings like admin/console to operator profile belong in generators or package templates.
|
|
55
55
|
- Item 3 is complete for current generated surfaces: page, CRUD, shell, and starter outputs require compact/medium/expanded coverage, horizontal overflow checks, generated screen checks, and compact generated-screen 48px tap target checks. Calendar/grid/bottom-sheet specialist generators remain future scope until those generators exist.
|
|
56
56
|
- Item 5 is complete for current generators: `primary`, `secondary`, `utility`, `detail`, `workflow`, and `none` are centralized in the generated UI contract, generators consume that contract, and `utility` resolves to seeded `shell.global-actions` topology.
|
package/patterns/live-actions.md
CHANGED
|
@@ -27,10 +27,11 @@ Rules:
|
|
|
27
27
|
|
|
28
28
|
`--delete-confirmation` requires generated list and view pages plus a shared
|
|
29
29
|
resource with a `DELETE` operation. It extends the view through the public
|
|
30
|
-
`CrudViewScreen` `actions` slot
|
|
31
|
-
|
|
32
|
-
the
|
|
33
|
-
|
|
30
|
+
`CrudViewScreen` `actions` slot with `CrudDeleteAction` and wires it to
|
|
31
|
+
`useCrudDeleteAction()`: the shared component owns the alert dialog,
|
|
32
|
+
`useCommand()` owns the request state, the shared resource owns the DELETE
|
|
33
|
+
contract, and successful deletion invalidates the list query and navigates
|
|
34
|
+
to the generated list route.
|
|
34
35
|
|
|
35
36
|
Good live-action pattern:
|
|
36
37
|
|
package/patterns/placements.md
CHANGED
|
@@ -58,8 +58,8 @@ Runtime behavior:
|
|
|
58
58
|
- Runtime resolves the component token as `entry.componentToken || variant.renderers[entry.kind]`.
|
|
59
59
|
- Entries without a resolvable component token do not render.
|
|
60
60
|
- `when()` receives placement context including `app`, `surface`, `target`, `layoutClass`, runtime context, local outlet context, and context contributors.
|
|
61
|
-
- The standard `ShellLayout` uses one `navigationItemSpacing` value (12px by default) for the icon-to-label gap and
|
|
62
|
-
- On medium and expanded layouts, closing the standard drawer produces an 80px Material navigation rail by default. Use `railWidth` to configure
|
|
61
|
+
- The standard `ShellLayout` uses Material's 12px outer item inset and one `navigationItemSpacing` value (12px by default) for the icon-to-label gap and widest label's logical-end gap. It remeasures its content-aware width after placement, locale, font, surface, spacing, and layout changes. The surface label belongs once in the top app bar; do not add or restore a duplicate drawer subheader. Use `drawerWidth` only when a product needs a fixed width; do not add consumer `.v-navigation-drawer` overrides.
|
|
62
|
+
- On medium and expanded layouts, closing the standard drawer produces an 80px Material navigation rail by default. Expanded and collapsed icons share one centreline. Use `railWidth` to configure an intentionally denser rail, or `desktopDrawerClosedMode="hidden"` only when another discoverable navigation surface exists.
|
|
63
63
|
- The shell link renderers own rail centring, selected-state treatment, and opaque theme-aware tooltips. Applications should keep supplying the same semantic placement records rather than creating rail-only links or tooltip CSS.
|
|
64
64
|
|
|
65
65
|
CLI and generators:
|
package/patterns/ui-testing.md
CHANGED
|
@@ -20,11 +20,11 @@ Rules:
|
|
|
20
20
|
- Vibe64 supplies an authenticated context through `VIBE64_PLAYWRIGHT_STORAGE_STATE`. Treat that file as a temporary secret: do not commit it, print it, or retain it after the run.
|
|
21
21
|
- Do not install a browser when the environment provides a managed browser runner.
|
|
22
22
|
|
|
23
|
-
## Preserve
|
|
23
|
+
## Preserve baseline tests
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
Generated baseline tests are app-owned and customizable. Adapt infrastructure
|
|
26
|
+
tests in place when routes or behavior change so the baseline coverage remains
|
|
27
|
+
truthful.
|
|
28
28
|
|
|
29
29
|
When the starter product route is replaced, update the scaffold smoke test to
|
|
30
30
|
visit and assert the new canonical route. Do not delete baseline browser
|
|
@@ -82,22 +82,15 @@ The generated config applies that state to Playwright contexts and omits its loc
|
|
|
82
82
|
|
|
83
83
|
Do not call `loginAsExistingUser()` against a managed preview. It is deliberately localhost-only. An ordinary request to `/api/dev-auth/login-as` without the private exchange header must return `403`.
|
|
84
84
|
|
|
85
|
-
##
|
|
85
|
+
## Run verification
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
Run the focused Playwright command directly:
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
npx
|
|
91
|
-
--command "npx playwright test tests/e2e/contacts.spec.ts -g filters" \
|
|
92
|
-
--feature "contacts filters" \
|
|
93
|
-
--auth-mode dev-auth-login-as
|
|
90
|
+
npx playwright test tests/e2e/contacts.spec.ts -g filters
|
|
94
91
|
```
|
|
95
92
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
`jskit app verify-ui` runs the command and records its command, auth-mode label, feature, and changed UI files in `.jskit/verification/ui.json`. The auth-mode option describes how the command was authenticated; it does not create a session or modify the Playwright context.
|
|
99
|
-
|
|
100
|
-
For local pre-merge review, follow the recorded run with:
|
|
93
|
+
For local pre-merge review, follow the focused run with:
|
|
101
94
|
|
|
102
95
|
```bash
|
|
103
96
|
npx jskit doctor --against origin/main
|
|
@@ -170,10 +170,6 @@ Exports
|
|
|
170
170
|
Exports
|
|
171
171
|
- None
|
|
172
172
|
|
|
173
|
-
### `templates/src/local-package/package.descriptor.mjs`
|
|
174
|
-
Exports
|
|
175
|
-
- None
|
|
176
|
-
|
|
177
173
|
### `templates/src/local-package/server/actions.js`
|
|
178
174
|
Exports
|
|
179
175
|
- `createActions({ surface } = {})`
|
|
@@ -206,12 +202,6 @@ Exports
|
|
|
206
202
|
Exports
|
|
207
203
|
- `resource`
|
|
208
204
|
|
|
209
|
-
### root
|
|
210
|
-
|
|
211
|
-
### `package.descriptor.mjs`
|
|
212
|
-
Exports
|
|
213
|
-
- None
|
|
214
|
-
|
|
215
205
|
### test-support
|
|
216
206
|
|
|
217
207
|
### `test-support/templateServerFixture.js`
|
|
@@ -61,8 +61,7 @@ Local functions
|
|
|
61
61
|
- `resolveCrudRelativePath(namespace = "")`
|
|
62
62
|
- `buildListParentTitleImportLine(parentTitleMode = "contextual")`
|
|
63
63
|
- `buildListHeadingTitleSetup({ parentTitleMode = "contextual", resourceNamespace = "", routeTitle = "Records" } = {})`
|
|
64
|
-
- `buildViewDeleteActionSlot({
|
|
65
|
-
- `buildViewDeleteDialog({ resourceNamespace = "resource", resourceSingularTitle = "Record" } = {})`
|
|
64
|
+
- `buildViewDeleteActionSlot({ resourceSingularTitle = "Record" } = {})`
|
|
66
65
|
- `buildViewDeleteSetup({ resourceNamespace = "resource" } = {})`
|
|
67
66
|
|
|
68
67
|
### `src/server/resourceSupport.js`
|
|
@@ -191,9 +190,3 @@ Exports
|
|
|
191
190
|
### `templates/src/pages/admin/ui-generator/ViewElement.vue`
|
|
192
191
|
Exports
|
|
193
192
|
- None
|
|
194
|
-
|
|
195
|
-
### root
|
|
196
|
-
|
|
197
|
-
### `package.descriptor.mjs`
|
|
198
|
-
Exports
|
|
199
|
-
- None
|
|
@@ -57,9 +57,3 @@ Local functions
|
|
|
57
57
|
- `requireIdColumn(columns, idColumn)`
|
|
58
58
|
- `requirePrimaryKeyContainsId(primaryKeyColumns, idColumn)`
|
|
59
59
|
- `requireSupportedForeignKeys(foreignKeys, primaryKeyColumnsByTable)`
|
|
60
|
-
|
|
61
|
-
### root
|
|
62
|
-
|
|
63
|
-
### `package.descriptor.mjs`
|
|
64
|
-
Exports
|
|
65
|
-
- None
|
|
@@ -30,14 +30,10 @@ Local functions
|
|
|
30
30
|
- `buildActionsContext({ surface })`
|
|
31
31
|
- `buildServiceContext({ featureName, mode })`
|
|
32
32
|
- `buildRouteContext({ surface })`
|
|
33
|
-
- `
|
|
33
|
+
- `buildManifestContext({ featureName, mode })`
|
|
34
34
|
|
|
35
35
|
### templates
|
|
36
36
|
|
|
37
|
-
### `templates/src/local-package/package.descriptor.mjs`
|
|
38
|
-
Exports
|
|
39
|
-
- None
|
|
40
|
-
|
|
41
37
|
### `templates/src/local-package/server/actions.js`
|
|
42
38
|
Exports
|
|
43
39
|
- `featureActions`
|
|
@@ -66,9 +62,3 @@ Exports
|
|
|
66
62
|
### `templates/src/local-package/server/service.js`
|
|
67
63
|
Exports
|
|
68
64
|
- `createService({ featureRepository } = {})`
|
|
69
|
-
|
|
70
|
-
### root
|
|
71
|
-
|
|
72
|
-
### `package.descriptor.mjs`
|
|
73
|
-
Exports
|
|
74
|
-
- None
|
|
@@ -371,9 +371,3 @@ Exports
|
|
|
371
371
|
Exports
|
|
372
372
|
- `rewriteEmbeddedTransportSchemaRefs(value, { rootRef = "#", definitionRefByName = {} } = {})`
|
|
373
373
|
- `createEmbeddableTransportSchemaDocument(schemaDocument = {}, rootDefinitionName = "TransportSchema")`
|
|
374
|
-
|
|
375
|
-
### root
|
|
376
|
-
|
|
377
|
-
### `package.descriptor.mjs`
|
|
378
|
-
Exports
|
|
379
|
-
- None
|
|
@@ -58,9 +58,3 @@ Local functions
|
|
|
58
58
|
- `applyJsonRestDefaultExclusions(scopeOptions = {}, resource = {})`
|
|
59
59
|
- `extractJsonApiInputRelationships(attributes = {}, resource = null, relationships = null)`
|
|
60
60
|
- `isJsonRestSparseFieldError(error = null)`
|
|
61
|
-
|
|
62
|
-
### root
|
|
63
|
-
|
|
64
|
-
### `package.descriptor.mjs`
|
|
65
|
-
Exports
|
|
66
|
-
- None
|