@jskit-ai/agent-docs 0.1.132 → 0.1.133

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.
@@ -0,0 +1,273 @@
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/site/guide/app-setup/existing-application-migration.md`. Do not edit manually. -->
2
+
3
+ ---
4
+ title: Migrate an existing application
5
+ description: Port a working application to AI-first JSKIT without regenerating it or flattening its product behavior.
6
+ ---
7
+
8
+ # Migrate an existing application
9
+
10
+ An existing application is a product with history, not input to a scaffold.
11
+ Port it by preserving observable behavior while replacing obsolete framework
12
+ mechanics with current JSKIT packages, patterns, capabilities, and public APIs.
13
+ The application remains usable throughout the migration, and its source,
14
+ migrations, tests, and runtime behavior remain the evidence of completion.
15
+
16
+ This procedure is guidance for a deliberate port. It does not create a
17
+ migration command, workboard, machine receipt, generated ownership state, or
18
+ second source of truth.
19
+
20
+ ## 1. Inventory behavior before changing structure
21
+
22
+ Read the request, product documentation, nearest `AGENTS.md`, package manifests,
23
+ lockfile, current source, current diff, migration ledger, and existing tests.
24
+ Do not reset a dirty tree or assume an unfamiliar change is obsolete.
25
+
26
+ Build a working inventory of:
27
+
28
+ - user journeys, routes, screens, background work, integrations, and failure
29
+ behavior;
30
+ - authentication, application-user, workspace-membership, authorization, and
31
+ preview identities;
32
+ - packages, runtime providers, public capabilities, actions, events, and
33
+ long-lived processes;
34
+ - resources, tables, foreign keys, migration filenames, seed behavior, and the
35
+ current database migration ledger;
36
+ - client surfaces, placements, shared screen APIs, responsive behavior, warm
37
+ navigation state, and managed browser coverage;
38
+ - domain services, custom repositories, transactional boundaries, outbox or
39
+ delivery behavior, and intentional compatibility boundaries.
40
+
41
+ Run the smallest useful original tests and representative user journeys before
42
+ the port. Add characterization tests only where a high-value behavior has no
43
+ other executable description. Record uncertainty in the ordinary project
44
+ documentation or test name; do not silently turn an implementation accident
45
+ into a new product decision.
46
+
47
+ Preserve real workflow domains. Scheduling, money, communications, safety,
48
+ inventory, or other product-specific orchestration must not be flattened into
49
+ generic CRUD merely to make the structure look uniform.
50
+
51
+ ## 2. Plan one coordinated dependency and capability graph
52
+
53
+ Use the installed JSKIT pattern index and package metadata to select the
54
+ smallest complete package set. Plan the top-level dependencies and their
55
+ ordinary npm closure before changing the lockfile, then install that planned
56
+ closure once. Review `package.json` and the lockfile as source changes. There
57
+ is no framework synchronization step after npm installation.
58
+
59
+ Model product domains through `defineFeature()` when they own a real capability
60
+ or operation boundary. A Feature declares stable named `requires`, optional
61
+ inputs, and `provides`; `setup()` receives those values directly and returns
62
+ only the promised outputs. Named actions capture the exact feature APIs they
63
+ need. Register structural catalogue entries during `setup()` and reserve
64
+ `boot()` for long-lived work that starts after composition.
65
+
66
+ Capability ids, action ids, routes, events, resources, and placements are
67
+ stable identities. They are not permission to fetch arbitrary dependencies by
68
+ string, symbol, class, token, `app.make()`, or another service-locator helper.
69
+ Remove locator-based wiring once every consumer has an explicit capability.
70
+
71
+ Move by coherent seams rather than leaving two framework paths active. The
72
+ finished graph has no obsolete framework-authoring CLI calls or configuration,
73
+ generator or synchronization scripts, generated-file markers, provenance
74
+ comments, operation receipts, compatibility shims that only preserve a retired
75
+ framework API, empty extension modules, or parallel dependency containers.
76
+ Keep genuine protocol adapters and product compatibility behavior when they
77
+ still have callers and tests.
78
+
79
+ Audit application `AGENTS.md` files, ordinary documentation, npm scripts, CI,
80
+ and package metadata as well as executable source. There is no supported
81
+ `jskit doctor` command or general JSKIT authoring CLI. Replace stale
82
+ instructions to run them with current-state checks owned by runtime startup,
83
+ the client build, migration status and disposable rebuilds, the application's
84
+ normal verification script, and Playwright.
85
+
86
+ ## 3. Choose the narrowest server seam that owns each behavior
87
+
88
+ Conventional resources use `defineCrudResource()` and
89
+ `defineCrudJsonApiFeature()` so JSKIT owns the repeated repository, service,
90
+ permission, action, JSON API, and route mechanics. Extend that contract instead
91
+ of copying it.
92
+
93
+ | Product need | Normal owner |
94
+ | --- | --- |
95
+ | Behavior before, around, or after one standard CRUD operation | `operationLifecycle` |
96
+ | A resource-specific domain method or override | `decorateService` |
97
+ | A resource-specific query, lock, or persistence operation | `decorateRepository` |
98
+ | A named non-CRUD command on the resource | a named CRUD `action` backed by the service |
99
+ | A separate aggregate, workflow, or capability domain | `defineFeature()` with named actions |
100
+ | Persistence that the high-level resource APIs cannot express | an explicit custom repository owned by that Feature |
101
+
102
+ For mutations, lifecycle phases before commit share one repository
103
+ transaction. An `execute` hook that only normalizes input calls
104
+ `standard(nextInput)` rather than reimplementing the write. Repositories own
105
+ database access; services and hooks orchestrate repositories. External work
106
+ runs after commit, or a durable outbox record is written inside the transaction
107
+ and delivered separately.
108
+
109
+ Give commands product names such as `confirm`, `publish`, or `cancel`, with
110
+ explicit input, permissions, routes where needed, audit behavior, events, and
111
+ tests. Do not hide unrelated workflows behind a generic `execute(anything)`
112
+ action, and do not create a custom repository merely because SQL is familiar.
113
+
114
+ ## 4. Adopt migrations without breaking either database history
115
+
116
+ Every immutable migration belongs to the package that owns its tables. Declare
117
+ the package directory in `package.json#jskit.migrations.directories`; do not
118
+ copy it into a central projection. Preserve the basename of every applied
119
+ historical migration when moving it so the existing Knex ledger continues to
120
+ recognize it. Basenames must be unique across the effective graph.
121
+
122
+ Keep cross-package foreign keys and other dependency-sensitive constraints in
123
+ later application-owned migrations when package ordering requires it. Seeds
124
+ are not migrations: run one explicit application-owned, idempotent seed after
125
+ the complete graph has migrated.
126
+
127
+ Prove both histories:
128
+
129
+ 1. Inspect an existing ledger without mutating valuable data. It must recognize
130
+ every moved historical basename and report only genuinely new work pending.
131
+ 2. Create a fresh disposable database and run the complete migration graph.
132
+ Compare its tables, keys, constraints, ownership rules, and invariant data
133
+ with the intended schema.
134
+ 3. Run the normal migrate-then-seed entry point twice. The second run must have
135
+ no pending migration and the seed must be safe and stable.
136
+
137
+ A managed editor allocates one isolated mutable development database per
138
+ session. It owns creation, credentials, lifetime, and environment injection;
139
+ the session's setup, app server, preview, and interactive checks must agree on
140
+ that identity. Disposable verification databases may be created and destroyed
141
+ inside the session, but they are never shared between sessions. Imported and
142
+ production databases remain read-only unless the user separately authorizes an
143
+ upgrade.
144
+
145
+ ## 5. Keep filesystem and application identities distinct
146
+
147
+ The host's managed-source permission contract is established when a workspace,
148
+ directory, temporary file, or atomic replacement is created. The creating
149
+ process must already have the correct user, shared group, inherited default
150
+ ACL, and restrictive umask. Setup must fail if it cannot establish that
151
+ contract. Do not make package installation, Git, agents, or preview startup run
152
+ recursive ownership or mode repair afterward.
153
+
154
+ For Vibe64-managed workspaces, the concrete contract is group `vibe64`,
155
+ directory mode `2770`, access and inherited default group ACL `vibe64:rwx`, no
156
+ access for other users, and process umask `0007`. The enabled human user and
157
+ `v64d_<workspace>` identity both belong to the group. Other hosts may use
158
+ different concrete identities, but they must provide the same creation-time
159
+ guarantee.
160
+
161
+ Do not conflate these identities:
162
+
163
+ - The filesystem identity controls who may create and replace source files.
164
+ - The auth provider identity verifies credentials and owns the session.
165
+ - The application user/profile is an existing product record associated with
166
+ that auth identity.
167
+ - A workspace identity is an existing membership and role that scopes routes,
168
+ permissions, queries, and writes.
169
+ - A managed preview identity selects an existing auth-backend user whose
170
+ application profile and required workspace membership already exist. It does
171
+ not synthesize any of them as a side effect.
172
+
173
+ For a Vibe64 preview, retain the app-owned `.vibe64/bin/preview-identity`
174
+ executable and declare it in the managed Launch target. It calls the
175
+ `@jskit-ai/auth-web` server-side managed-preview library; it does not need a
176
+ framework CLI. Never expose the exchange secret in browser code, a URL, client
177
+ environment, logs, or source.
178
+
179
+ Managed Playwright uses the host-provided
180
+ `VIBE64_PLAYWRIGHT_STORAGE_STATE`, relative URLs, and the existing managed
181
+ server. Direct-local tests may instead use `loginAsExistingUser()` from
182
+ `@jskit-ai/auth-web/test/playwright` with a server-only development secret.
183
+ Do not mix those two authentication modes or start a duplicate server against
184
+ the wrong session database.
185
+
186
+ ## 6. Treat client patterns as examples, not regeneration input
187
+
188
+ Read a selected package's complete `PATTERN.md` and inspect its example. Copy
189
+ only useful files or adapt the existing application through the same public
190
+ APIs. Resolve every destination collision deliberately. Once copied, template
191
+ source belongs to the application and may diverge with the product.
192
+
193
+ Do not erase established screens and regenerate them from a schema. Do not
194
+ sync template updates into application source or retain template hashes,
195
+ generated-file headers, or ownership markers. Prefer current shared screens,
196
+ placements, high-level composables, Vuetify components, and Material 3 states
197
+ where they fit, while retaining application vocabulary, routes, workflows, and
198
+ tests.
199
+
200
+ Verify affected UI at compact, medium, and expanded widths. Preserve loading,
201
+ empty, error, retry, permission, keyboard, focus, and warm-navigation behavior;
202
+ do not accept a visually similar screen as behavioral equivalence.
203
+
204
+ ## 7. Reconcile, then Deslop as a distinct pass
205
+
206
+ When the project uses Genesis, run an explicit reconciliation after the port is
207
+ functionally green. Compare the implemented source with the current Blueprint,
208
+ selected Stack, Program, resources, managed skills, and effective workspace and
209
+ Launch recipes. Update stale citations and declarations to describe what now
210
+ exists. Do not duplicate an inherited setup recipe merely to make the project
211
+ look self-contained.
212
+
213
+ After reconciliation, start a separate behavior-preserving Deslop pass using
214
+ the selected JSKIT guidance and, for every affected Vue/Vuetify screen, the
215
+ Material 3 audit. Remove dead adapters, obsolete names and selectors, duplicate
216
+ request or state layers, empty extension files, retired framework shims,
217
+ provenance residue, and accidental abstractions. Replace them at the narrowest
218
+ established owner. Keep every intentional domain workflow and rerun focused
219
+ tests after each meaningful cleanup.
220
+
221
+ Reconciliation answers whether project intent and managed configuration match
222
+ the implementation. Deslop answers whether the implementation is the cleanest
223
+ behavior-preserving use of the selected stack. Combining them hides both kinds
224
+ of mistake.
225
+
226
+ ## Five finish gates
227
+
228
+ A migrated application is complete only when all five gates have current
229
+ evidence in ordinary source, configuration, command output, and tests:
230
+
231
+ 1. **Behavior:** focused tests and the full managed browser suite are green
232
+ against an isolated disposable database. Use the managed host and server
233
+ when supplied.
234
+ 2. **Reconciliation:** a dedicated Genesis reconciliation confirms the
235
+ Blueprint, Stack, Program, resources, managed skills, and effective setup and
236
+ Launch recipes match the implementation. For a project without Genesis,
237
+ reconcile its equivalent authoritative product and host documentation.
238
+ 3. **Deslop:** a distinct JSKIT Deslop pass, including the selected Material 3
239
+ audit where UI is affected, removes obsolete framework residue without
240
+ changing legitimate behavior.
241
+ 4. **Broad verification:** after reconciliation and Deslop, rerun lint, server
242
+ tests, client tests, production build, existing-ledger status, fresh database
243
+ rebuild, idempotent seed proof, and representative managed Playwright.
244
+ 5. **Structure:** audit CRUD lifecycles, decorated services and repositories,
245
+ named Features and actions, capability edges, package-owned migrations, and
246
+ constraints-last ordering. Explain every custom seam in product language;
247
+ do not delete it merely to reduce the count.
248
+
249
+ Do not satisfy a gate by adding a completion ledger or generated conformance
250
+ state. If a command cannot run, report the missing evidence rather than marking
251
+ the port complete.
252
+
253
+ ## Downstream proof: DogAndGroom
254
+
255
+ DogAndGroom validated this procedure on a substantial existing product rather
256
+ than a sample. The port redistributed 66 historical migrations among 43 owning
257
+ packages while retaining globally unique basenames and putting cross-package
258
+ constraints last. Its imported database ledger remained read-only and
259
+ recognized every moved migration; a fresh disposable MariaDB reached the full
260
+ 117-migration schema and a second prepare-and-seed run was idempotent.
261
+
262
+ The resulting server used 43 standard CRUD Features plus narrow lifecycle,
263
+ service, repository, named-action, and domain-Feature extensions for grooming,
264
+ daycare, booking, scheduling, communications, commerce, inventory, uploads,
265
+ and safety behavior. Obsolete framework generators, provenance markers,
266
+ service-location wiring, and empty extension modules were removed without
267
+ flattening those workflows.
268
+
269
+ After a separate Genesis reconciliation and JSKIT/Material Deslop, its focused
270
+ checks, 339 server tests, client tests, production build, database proofs, and
271
+ all 105 managed Playwright cases passed. These numbers are downstream evidence
272
+ that the method scales; they are not template targets or state that another
273
+ application should copy.
@@ -10,6 +10,7 @@ apply or adapt. It does not prescribe an agent host or project orchestrator.
10
10
 
11
11
  - [Quickstart](/guide/app-setup/quickstart)
12
12
  - [Application foundations](/guide/app-setup/initial-scaffolding)
13
+ - [Migrate an existing application](/guide/app-setup/existing-application-migration)
13
14
  - [A more interesting shell](/guide/app-setup/a-more-interesting-shell)
14
15
  - [Authentication](/guide/app-setup/authentication)
15
16
  - [Database layer](/guide/app-setup/database-layer)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.132",
3
+ "version": "0.1.133",
4
4
  "description": "Distributed JSKIT agent references, prompts, guides, and generated reference maps.",
5
5
  "type": "module",
6
6
  "files": [
@@ -5,7 +5,7 @@
5
5
  "private": true,
6
6
  "type": "module",
7
7
  "dependencies": {
8
- "@jskit-ai/kernel": "0.1.160",
8
+ "@jskit-ai/kernel": "0.1.161",
9
9
  "json-rest-schema": "^1.0.17"
10
10
  },
11
11
  "exports": {
@@ -29,7 +29,7 @@
29
29
  "dependencies": {
30
30
  "@local/main": "file:packages/main",
31
31
  "@fastify/static": "^10.1.3",
32
- "@jskit-ai/kernel": "0.1.160",
32
+ "@jskit-ai/kernel": "0.1.161",
33
33
  "@tanstack/vue-query": "^5.101.0",
34
34
  "fastify": "^5.8.5",
35
35
  "json-rest-schema": "^1.0.17",
@@ -37,11 +37,11 @@
37
37
  "vue": "^3.5.38",
38
38
  "vue-router": "^5.1.0",
39
39
  "vuetify": "^4.1.2",
40
- "@jskit-ai/http-runtime": "0.1.158"
40
+ "@jskit-ai/http-runtime": "0.1.159"
41
41
  },
42
42
  "devDependencies": {
43
- "@jskit-ai/agent-docs": "0.1.132",
44
- "@jskit-ai/config-eslint": "0.1.157",
43
+ "@jskit-ai/agent-docs": "0.1.133",
44
+ "@jskit-ai/config-eslint": "0.1.158",
45
45
  "@playwright/test": "1.61.1",
46
46
  "@vitejs/plugin-vue": "^6.0.7",
47
47
  "eslint": "^10.8.0",
@@ -29,7 +29,7 @@
29
29
  "dependencies": {
30
30
  "@local/main": "file:packages/main",
31
31
  "@fastify/static": "^10.1.3",
32
- "@jskit-ai/kernel": "0.1.160",
32
+ "@jskit-ai/kernel": "0.1.161",
33
33
  "@tanstack/vue-query": "^5.101.0",
34
34
  "fastify": "^5.8.5",
35
35
  "json-rest-schema": "^1.0.17",
@@ -37,13 +37,13 @@
37
37
  "vue": "^3.5.38",
38
38
  "vue-router": "^5.1.0",
39
39
  "vuetify": "^4.1.2",
40
- "@jskit-ai/http-runtime": "0.1.158",
40
+ "@jskit-ai/http-runtime": "0.1.159",
41
41
  "@mdi/js": "^7.4.47",
42
- "@jskit-ai/shell-web": "0.1.164"
42
+ "@jskit-ai/shell-web": "0.1.165"
43
43
  },
44
44
  "devDependencies": {
45
- "@jskit-ai/agent-docs": "0.1.132",
46
- "@jskit-ai/config-eslint": "0.1.157",
45
+ "@jskit-ai/agent-docs": "0.1.133",
46
+ "@jskit-ai/config-eslint": "0.1.158",
47
47
  "@playwright/test": "1.61.1",
48
48
  "@vitejs/plugin-vue": "^6.0.7",
49
49
  "eslint": "^10.8.0",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "description": "App-local runtime composition and lightweight glue.",
11
11
  "dependencies": {
12
- "@jskit-ai/kernel": "0.1.160"
12
+ "@jskit-ai/kernel": "0.1.161"
13
13
  },
14
14
  "jskit": {
15
15
  "kind": "runtime",
@@ -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.132`
18
+ - Owner: `@jskit-ai/agent-docs@0.1.133`
19
19
  - Read: `node_modules/@jskit-ai/agent-docs/patterns/minimal-foundation/PATTERN.md`
20
20
  - Examples: `node_modules/@jskit-ai/agent-docs/patterns/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.132`
29
+ - Owner: `@jskit-ai/agent-docs@0.1.133`
30
30
  - Read: `node_modules/@jskit-ai/agent-docs/patterns/shell-foundation/PATTERN.md`
31
31
  - Examples: `node_modules/@jskit-ai/agent-docs/patterns/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.1.131`
40
+ - Owner: `@jskit-ai/assistant-runtime@0.1.132`
41
41
  - Read: `node_modules/@jskit-ai/assistant-runtime/patterns/assistant-surface/PATTERN.md`
42
42
  - Examples: `node_modules/@jskit-ai/assistant-runtime/patterns/assistant-surface/example/`
43
43
  - Requires: `@jskit-ai/assistant-runtime`, `@jskit-ai/shell-web`
@@ -48,7 +48,7 @@ Compose JSKIT authentication routes, views, profile controls, and public surface
48
48
 
49
49
  - Id: `auth/auth-surface`
50
50
  - Keywords: `account`, `auth`, `login`, `logout`, `password`, `placement`, `profile`, `reset`, `surface`
51
- - Owner: `@jskit-ai/auth-web@0.1.160`
51
+ - Owner: `@jskit-ai/auth-web@0.1.161`
52
52
  - Read: `node_modules/@jskit-ai/auth-web/patterns/auth-surface/PATTERN.md`
53
53
  - Examples: `node_modules/@jskit-ai/auth-web/patterns/auth-surface/example/`
54
54
  - Requires: `@jskit-ai/auth-core`, `@jskit-ai/auth-web`, `@jskit-ai/shell-web`
@@ -59,7 +59,7 @@ Add Supabase authentication through normal npm composition, explicit environment
59
59
 
60
60
  - Id: `auth/supabase-auth`
61
61
  - Keywords: `auth`, `authentication`, `oauth`, `sessions`, `supabase`
62
- - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.157`
62
+ - Owner: `@jskit-ai/auth-provider-supabase-core@0.1.158`
63
63
  - Read: `node_modules/@jskit-ai/auth-provider-supabase-core/patterns/supabase-auth/PATTERN.md`
64
64
  - Examples: `node_modules/@jskit-ai/auth-provider-supabase-core/patterns/supabase-auth/example/`
65
65
  - Requires: `@jskit-ai/auth-provider-supabase-core`
@@ -70,7 +70,7 @@ Add a protected administration surface, settings shell, and semantic navigation
70
70
 
71
71
  - Id: `console/console-surface`
72
72
  - Keywords: `admin`, `console`, `navigation`, `owner`, `placement`, `settings`, `surface`
73
- - Owner: `@jskit-ai/console-web@0.1.128`
73
+ - Owner: `@jskit-ai/console-web@0.1.129`
74
74
  - Read: `node_modules/@jskit-ai/console-web/patterns/console-surface/PATTERN.md`
75
75
  - Examples: `node_modules/@jskit-ai/console-web/patterns/console-surface/example/`
76
76
  - Requires: `@jskit-ai/console-core`, `@jskit-ai/console-web`, `@jskit-ai/shell-web`
@@ -81,7 +81,7 @@ Build a routed CRUD user interface as thin application pages over JSKIT's shared
81
81
 
82
82
  - Id: `crud/crud-screen-set`
83
83
  - Keywords: `actions`, `add`, `crud`, `delete`, `edit`, `filters`, `list`, `material`, `routes`, `view`, `vue`
84
- - Owner: `@jskit-ai/http-web@0.1.5`
84
+ - Owner: `@jskit-ai/http-web@0.1.6`
85
85
  - Read: `node_modules/@jskit-ai/http-web/patterns/crud-screen-set/PATTERN.md`
86
86
  - Examples: `node_modules/@jskit-ai/http-web/patterns/crud-screen-set/example/`
87
87
  - Requires: `@jskit-ai/http-web`, `@jskit-ai/resource-crud-core`
@@ -92,7 +92,7 @@ Build a complete application-owned CRUD server package from a migration, resourc
92
92
 
93
93
  - Id: `crud/json-api-resource-package`
94
94
  - Keywords: `actions`, `crud`, `database`, `json-api`, `migration`, `permissions`, `provider`, `repository`, `routes`, `service`
95
- - Owner: `@jskit-ai/crud-core@0.1.171`
95
+ - Owner: `@jskit-ai/crud-core@0.1.172`
96
96
  - Read: `node_modules/@jskit-ai/crud-core/patterns/json-api-resource-package/PATTERN.md`
97
97
  - Examples: `node_modules/@jskit-ai/crud-core/patterns/json-api-resource-package/example/`
98
98
  - Requires: `@jskit-ai/crud-core`, `@jskit-ai/resource-crud-core`
@@ -103,7 +103,7 @@ Define an authenticated application resource whose records belong to the current
103
103
 
104
104
  - Id: `crud/resource-contract`
105
105
  - Keywords: `authenticated`, `crud`, `database`, `owner-scoped`, `resource`, `user`
106
- - Owner: `@jskit-ai/resource-crud-core@0.1.102`
106
+ - Owner: `@jskit-ai/resource-crud-core@0.1.103`
107
107
  - Read: `node_modules/@jskit-ai/resource-crud-core/patterns/resource-contract/PATTERN.md`
108
108
  - Examples: `node_modules/@jskit-ai/resource-crud-core/patterns/resource-contract/example/`
109
109
  - Requires: `@jskit-ai/resource-crud-core`
@@ -114,7 +114,7 @@ Configure a JSKIT application for MySQL with a fixed driver, ordinary environmen
114
114
 
115
115
  - Id: `database/mysql-application`
116
116
  - Keywords: `database`, `knex`, `mariadb`, `migrations`, `mysql`, `mysql2`
117
- - Owner: `@jskit-ai/database-runtime-mysql@0.1.158`
117
+ - Owner: `@jskit-ai/database-runtime-mysql@0.1.159`
118
118
  - Read: `node_modules/@jskit-ai/database-runtime-mysql/patterns/mysql-application/PATTERN.md`
119
119
  - Examples: `node_modules/@jskit-ai/database-runtime-mysql/patterns/mysql-application/example/`
120
120
  - Requires: `@jskit-ai/database-runtime-mysql`
@@ -125,7 +125,7 @@ Configure a JSKIT application for PostgreSQL with a fixed driver, ordinary envir
125
125
 
126
126
  - Id: `database/postgres-application`
127
127
  - Keywords: `database`, `knex`, `migrations`, `pg`, `postgres`, `postgresql`
128
- - Owner: `@jskit-ai/database-runtime-postgres@0.1.157`
128
+ - Owner: `@jskit-ai/database-runtime-postgres@0.1.158`
129
129
  - Read: `node_modules/@jskit-ai/database-runtime-postgres/patterns/postgres-application/PATTERN.md`
130
130
  - Examples: `node_modules/@jskit-ai/database-runtime-postgres/patterns/postgres-application/example/`
131
131
  - Requires: `@jskit-ai/database-runtime-postgres`
@@ -136,7 +136,7 @@ Wrap a JSKIT web application in a Capacitor Android shell using native Capacitor
136
136
 
137
137
  - Id: `mobile/android-application`
138
138
  - Keywords: `android`, `capacitor`, `device`, `mobile`, `native`, `shell`, `webview`
139
- - Owner: `@jskit-ai/mobile-capacitor@0.1.95`
139
+ - Owner: `@jskit-ai/mobile-capacitor@0.1.96`
140
140
  - Read: `node_modules/@jskit-ai/mobile-capacitor/patterns/android-application/PATTERN.md`
141
141
  - Examples: `node_modules/@jskit-ai/mobile-capacitor/patterns/android-application/example/`
142
142
  - Requires: `@capacitor/android`, `@capacitor/app`, `@capacitor/cli`, `@jskit-ai/mobile-capacitor`
@@ -147,7 +147,7 @@ Add JSKIT realtime events with an optional Redis backplane and an explicit shell
147
147
 
148
148
  - Id: `realtime/realtime-application`
149
149
  - Keywords: `realtime`, `redis`, `socket.io`, `sockets`, `status`, `websocket`
150
- - Owner: `@jskit-ai/realtime@0.1.157`
150
+ - Owner: `@jskit-ai/realtime@0.1.158`
151
151
  - Read: `node_modules/@jskit-ai/realtime/patterns/realtime-application/PATTERN.md`
152
152
  - Examples: `node_modules/@jskit-ai/realtime/patterns/realtime-application/example/`
153
153
  - Requires: `@jskit-ai/realtime`, `@jskit-ai/shell-web`
@@ -158,7 +158,7 @@ Define a server feature through explicit capabilities and first-class actions, a
158
158
 
159
159
  - Id: `server/feature-package`
160
160
  - Keywords: `actions`, `feature`, `json-rest`, `knex`, `orchestration`, `package`, `provider`, `repository`, `routes`, `server`
161
- - Owner: `@jskit-ai/agent-docs@0.1.132`
161
+ - Owner: `@jskit-ai/agent-docs@0.1.133`
162
162
  - Read: `node_modules/@jskit-ai/agent-docs/patterns/feature-package/PATTERN.md`
163
163
  - Examples: `node_modules/@jskit-ai/agent-docs/patterns/feature-package/example/`
164
164
  - Requires: `@jskit-ai/kernel`
@@ -169,7 +169,7 @@ Compose the JSKIT responsive shell, semantic placements, settings navigation, an
169
169
 
170
170
  - Id: `shell/application-shell`
171
171
  - Keywords: `adaptive`, `app`, `layout`, `navigation`, `placement`, `responsive`, `settings`, `shell`
172
- - Owner: `@jskit-ai/shell-web@0.1.164`
172
+ - Owner: `@jskit-ai/shell-web@0.1.165`
173
173
  - Read: `node_modules/@jskit-ai/shell-web/patterns/application-shell/PATTERN.md`
174
174
  - Examples: `node_modules/@jskit-ai/shell-web/patterns/application-shell/example/`
175
175
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -180,7 +180,7 @@ Add product routes and shell extensions through file routing, semantic placement
180
180
 
181
181
  - Id: `ui/page-and-placement`
182
182
  - Keywords: `component`, `navigation`, `outlet`, `page`, `placement`, `routes`, `section`, `shell`, `subpages`, `vue`
183
- - Owner: `@jskit-ai/shell-web@0.1.164`
183
+ - Owner: `@jskit-ai/shell-web@0.1.165`
184
184
  - Read: `node_modules/@jskit-ai/shell-web/patterns/page-and-placement/PATTERN.md`
185
185
  - Examples: `node_modules/@jskit-ai/shell-web/patterns/page-and-placement/example/`
186
186
  - Requires: `@jskit-ai/kernel`, `@jskit-ai/shell-web`
@@ -191,7 +191,7 @@ Compose an account settings route and profile, preference, and notification sect
191
191
 
192
192
  - Id: `users/account-settings`
193
193
  - Keywords: `account`, `notifications`, `preferences`, `profile`, `settings`, `user`, `vue`
194
- - Owner: `@jskit-ai/users-web@0.1.178`
194
+ - Owner: `@jskit-ai/users-web@0.1.179`
195
195
  - Read: `node_modules/@jskit-ai/users-web/patterns/account-settings/PATTERN.md`
196
196
  - Examples: `node_modules/@jskit-ai/users-web/patterns/account-settings/example/`
197
197
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/users-core`, `@jskit-ai/users-web`
@@ -202,7 +202,7 @@ Expose user administration and workspace-scoped member operations through app-ow
202
202
 
203
203
  - Id: `users/user-administration-server`
204
204
  - Keywords: `account`, `admin`, `member`, `repository`, `resource`, `routes`, `service`, `user`, `workspace`
205
- - Owner: `@jskit-ai/users-core@0.1.173`
205
+ - Owner: `@jskit-ai/users-core@0.1.174`
206
206
  - Read: `node_modules/@jskit-ai/users-core/patterns/user-administration-server/PATTERN.md`
207
207
  - Examples: `node_modules/@jskit-ai/users-core/patterns/user-administration-server/example/`
208
208
  - Requires: `@jskit-ai/crud-core`, `@jskit-ai/users-core`
@@ -213,7 +213,7 @@ Configure roles, workspace access policy, invitations, and app-owned invitation
213
213
 
214
214
  - Id: `workspaces/workspace-server`
215
215
  - Keywords: `access`, `invite`, `membership`, `multitenancy`, `policy`, `role`, `tenancy`, `workspace`
216
- - Owner: `@jskit-ai/workspaces-core@0.1.138`
216
+ - Owner: `@jskit-ai/workspaces-core@0.1.139`
217
217
  - Read: `node_modules/@jskit-ai/workspaces-core/patterns/workspace-server/PATTERN.md`
218
218
  - Examples: `node_modules/@jskit-ai/workspaces-core/patterns/workspace-server/example/`
219
219
  - Requires: `@jskit-ai/users-core`, `@jskit-ai/workspaces-core`
@@ -224,7 +224,7 @@ Compose workspace selection, invitation, member administration, settings, and re
224
224
 
225
225
  - Id: `workspaces/workspace-surfaces`
226
226
  - Keywords: `admin`, `invite`, `member`, `navigation`, `settings`, `surface`, `switcher`, `workspace`
227
- - Owner: `@jskit-ai/workspaces-web@0.1.139`
227
+ - Owner: `@jskit-ai/workspaces-web@0.1.140`
228
228
  - Read: `node_modules/@jskit-ai/workspaces-web/patterns/workspace-surfaces/PATTERN.md`
229
229
  - Examples: `node_modules/@jskit-ai/workspaces-web/patterns/workspace-surfaces/example/`
230
230
  - Requires: `@jskit-ai/shell-web`, `@jskit-ai/workspaces-core`, `@jskit-ai/workspaces-web`
@@ -29,6 +29,8 @@ manifests, migrations, tests, and runtime behaviour are the evidence.
29
29
  3. Read the project's product documentation and current source. JSKIT does not
30
30
  own a second project brain or prescribe a particular agent orchestrator.
31
31
  4. Load only the task-relevant direct reference:
32
+ - Existing-app migration: read
33
+ [port guide](../../guide/agent/app-setup/existing-application-migration.md).
32
34
  - For creation, foundation patterns, or package selection, read
33
35
  [application operations](references/app-operations.md).
34
36
  - Before database, schema, CRUD, repository, or persistence work, read
@@ -38,8 +40,8 @@ manifests, migrations, tests, and runtime behaviour are the evidence.
38
40
  - For every Vue/Vuetify UI creation, modification, review, or deslop task,
39
41
  also read [Material 3](references/material-3.md) completely before acting.
40
42
 
41
- Those files are the complete operational references required by this skill.
42
- Do not depend on sibling docs. Do not load irrelevant references.
43
+ These are complete operational references required by this skill. Do not load
44
+ irrelevant references or other docs.
43
45
 
44
46
  Do not invent missing tenancy, authentication, database, surface, ownership,
45
47
  or permission decisions when they would materially change the application.