@jskit-ai/agent-docs 0.1.21 → 0.1.23
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-setup/initial-scaffolding.md +50 -4
- package/guide/agent/app-setup/quickstart.md +2 -0
- package/package.json +1 -1
- package/patterns/INDEX.md +6 -0
- package/patterns/crud-scaffolding.md +33 -0
- package/patterns/page-scaffolding.md +30 -0
- package/templates/APP_BLUEPRINT.md +1 -0
- package/templates/app/AGENTS.md +12 -2
- package/workflow/bootstrap.md +2 -0
- package/workflow/feature-delivery.md +17 -5
- package/workflow/review.md +5 -0
- package/workflow/scoping.md +6 -0
|
@@ -14,17 +14,63 @@ npm install
|
|
|
14
14
|
|
|
15
15
|
The first command creates a new folder called `exampleapp` and fills it with JSKIT's base shell template. The `exampleapp` name is used in a few template replacements, such as the package name and the browser title. The `--tenancy-mode none` flag tells JSKIT to start with the smallest routing model. In this mode, the app is not workspace-aware (more of this later in the guide, when multihoming is introduced). That keeps the first scaffold easier to read because there is no workspace slug handling yet.
|
|
16
16
|
|
|
17
|
-
If you are working with an AI agent and want the agent to
|
|
17
|
+
If you are working with an AI agent and want the agent to drive the initial JSKIT setup conversation, there is now a dedicated seed path:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
npx @jskit-ai/create-app exampleapp
|
|
20
|
+
npx @jskit-ai/create-app exampleapp --template ai-seed
|
|
21
21
|
cd exampleapp
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
That seed writes only `AGENTS.md`. It is not a runnable app yet. The agent should use that file to ask the Stage 1 platform questions first, make sure the chosen MySQL or Postgres database already exists or can be created with the developer's local admin access, and then promote the same directory into the real scaffold with:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx @jskit-ai/create-app exampleapp --target . --force --tenancy-mode <mode>
|
|
22
28
|
npm install
|
|
23
29
|
```
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
After that promotion, the overwritten app `AGENTS.md` becomes the source of truth for the normal JSKIT workflow.
|
|
32
|
+
|
|
33
|
+
After creating the real app scaffolding (the base shell, not the seed wrapper), you will need to run `npm install` to install dependencies.
|
|
34
|
+
|
|
35
|
+
If you already know you want a small non-workspace baseline right after the scaffold, this is the shortest reproducible path:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
SUPABASE_URL=...
|
|
39
|
+
SUPABASE_KEY=...
|
|
40
|
+
DB_HOST=127.0.0.1
|
|
41
|
+
DB_PORT=3306
|
|
42
|
+
DB_NAME=exampleapp
|
|
43
|
+
DB_USER=...
|
|
44
|
+
DB_PASSWORD=...
|
|
45
|
+
|
|
46
|
+
npx @jskit-ai/create-app exampleapp --tenancy-mode none
|
|
47
|
+
cd exampleapp
|
|
48
|
+
npm install
|
|
49
|
+
|
|
50
|
+
npx jskit add package shell-web
|
|
51
|
+
|
|
52
|
+
npx jskit add package auth-provider-supabase-core \
|
|
53
|
+
--auth-supabase-url "$SUPABASE_URL" \
|
|
54
|
+
--auth-supabase-publishable-key "$SUPABASE_KEY" \
|
|
55
|
+
--app-public-url "http://localhost:5173"
|
|
56
|
+
|
|
57
|
+
npx jskit add bundle auth-base
|
|
58
|
+
|
|
59
|
+
npx jskit add package database-runtime-mysql \
|
|
60
|
+
--db-host "$DB_HOST" \
|
|
61
|
+
--db-port "$DB_PORT" \
|
|
62
|
+
--db-name "$DB_NAME" \
|
|
63
|
+
--db-user "$DB_USER" \
|
|
64
|
+
--db-password "$DB_PASSWORD"
|
|
65
|
+
|
|
66
|
+
npx jskit add package users-web
|
|
67
|
+
npx jskit add package console-web
|
|
68
|
+
|
|
69
|
+
npm install
|
|
70
|
+
npm run db:migrate
|
|
71
|
+
```
|
|
26
72
|
|
|
27
|
-
|
|
73
|
+
If you want the larger workspace-enabled stack with the first assistant already configured, use [Quickstart](/guide/app-setup/quickstart) instead.
|
|
28
74
|
|
|
29
75
|
**Try Bash Completion!**
|
|
30
76
|
|
|
@@ -41,6 +41,8 @@ DB_USER=...
|
|
|
41
41
|
DB_PASSWORD=...
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
+
Before continuing, make sure the MySQL database already exists and that the chosen `DB_USER` / `DB_PASSWORD` can connect to it. If the database does not exist yet, create it first or use a local MySQL account with enough privileges to create it before the runtime install step.
|
|
45
|
+
|
|
44
46
|
Then run the exact sequence below:
|
|
45
47
|
|
|
46
48
|
```bash
|
package/package.json
CHANGED
package/patterns/INDEX.md
CHANGED
|
@@ -14,8 +14,12 @@ How to use it:
|
|
|
14
14
|
- `placements.md`
|
|
15
15
|
- surfaces, app/admin/home/console, "which surface", route ownership, placement visibility
|
|
16
16
|
- `surfaces.md`
|
|
17
|
+
- page, route page, placeholder page, screen stub, menu-linked page, `ui-generator page`, `list-placements`
|
|
18
|
+
- `page-scaffolding.md`
|
|
17
19
|
- child crud, nested crud, embedded list, subroute, separate page, parent/child layout
|
|
18
20
|
- `child-cruds.md`
|
|
21
|
+
- crud scaffold, crud server, crud ui, table creation, migrations, `crud-server-generator`, `crud-ui-generator`
|
|
22
|
+
- `crud-scaffolding.md`
|
|
19
23
|
- CRUD links, record placeholders, `paths.page()`, `resolveViewUrl`, `resolveEditUrl`, `resolveParams`
|
|
20
24
|
- `crud-links.md`
|
|
21
25
|
- `definePage`, redirect, child redirect, settings landing, `redirectToChild`
|
|
@@ -37,7 +41,9 @@ How to use it:
|
|
|
37
41
|
|
|
38
42
|
- [placements.md](./placements.md)
|
|
39
43
|
- [surfaces.md](./surfaces.md)
|
|
44
|
+
- [page-scaffolding.md](./page-scaffolding.md)
|
|
40
45
|
- [child-cruds.md](./child-cruds.md)
|
|
46
|
+
- [crud-scaffolding.md](./crud-scaffolding.md)
|
|
41
47
|
- [crud-links.md](./crud-links.md)
|
|
42
48
|
- [page-redirects.md](./page-redirects.md)
|
|
43
49
|
- [live-actions.md](./live-actions.md)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# CRUD Scaffolding Patterns
|
|
2
|
+
|
|
3
|
+
Use when:
|
|
4
|
+
|
|
5
|
+
- creating a new CRUD-backed entity
|
|
6
|
+
- deciding how to create a CRUD table
|
|
7
|
+
- deciding whether to scaffold server first or UI first
|
|
8
|
+
- deciding whether a CRUD needs a migration, a generator, or both
|
|
9
|
+
|
|
10
|
+
Check first:
|
|
11
|
+
|
|
12
|
+
- the intended ownership model
|
|
13
|
+
- the real database table shape
|
|
14
|
+
- `jskit show crud-server-generator --details`
|
|
15
|
+
- whether the request is server-only CRUD or server-plus-UI CRUD
|
|
16
|
+
|
|
17
|
+
Rules:
|
|
18
|
+
|
|
19
|
+
- For a CRUD-backed entity, start with `jskit generate crud-server-generator scaffold ...`.
|
|
20
|
+
- Unless the table is already owned by a JSKIT baseline package or is an explicit narrow exception recorded in `.jskit/table-ownership.json`, every persisted app-owned table must go through that server CRUD step first.
|
|
21
|
+
- That server scaffold is the crucial first step even if no CRUD UI will be created yet.
|
|
22
|
+
- Create the real table directly in the database before scaffolding. `crud-server-generator` reads the live table shape.
|
|
23
|
+
- If `crud-server-generator` is going to own the CRUD, do not hand-write a separate CRUD migration for that table. The generator installs and manages the CRUD migration scaffold itself.
|
|
24
|
+
- Do not scaffold CRUD UI, hand-build CRUD routes, or hand-build CRUD endpoints before the server CRUD package and shared resource file exist.
|
|
25
|
+
- Treat the generated shared resource file as the canonical CRUD contract for later UI scaffolding and CRUD behavior changes.
|
|
26
|
+
- `feature-server-generator` is not the default lane for ordinary persisted entities. Use it for workflows or orchestration that sit on top of CRUD-owned tables, or for rare explicit non-CRUD exceptions.
|
|
27
|
+
|
|
28
|
+
Avoid:
|
|
29
|
+
|
|
30
|
+
- writing a hand migration for a CRUD table that JSKIT CRUD scaffolding is supposed to own
|
|
31
|
+
- starting with `crud-ui-generator` before the server scaffold exists
|
|
32
|
+
- hand-building CRUD routes or validators that duplicate the generated server resource contract
|
|
33
|
+
- letting a new app-owned table exist in the live database without either generated CRUD ownership or a documented `.jskit/table-ownership.json` exception
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Page Scaffolding Patterns
|
|
2
|
+
|
|
3
|
+
Use when:
|
|
4
|
+
|
|
5
|
+
- adding a non-CRUD route page
|
|
6
|
+
- adding a placeholder page or screen stub
|
|
7
|
+
- adding a menu-linked page
|
|
8
|
+
- deciding whether a page and its link should be generated or hand-written
|
|
9
|
+
|
|
10
|
+
Check first:
|
|
11
|
+
|
|
12
|
+
- the blueprint route family and chosen surface
|
|
13
|
+
- `jskit show ui-generator --details`
|
|
14
|
+
- `jskit list-placements`
|
|
15
|
+
- the nearest existing routed host under `src/pages`
|
|
16
|
+
|
|
17
|
+
Rules:
|
|
18
|
+
|
|
19
|
+
- Default to `jskit generate ui-generator page ...` for a new app-owned non-CRUD route page.
|
|
20
|
+
- Let the generator create both the page file and the matching `src/placement.js` entry, then adapt the generated output if needed.
|
|
21
|
+
- If the page link belongs in a non-default outlet, discover the outlet first with `jskit list-placements` and pass `--link-placement`.
|
|
22
|
+
- If the page sits under an existing routed host, check whether `ui-generator page` can infer the correct child placement before writing a custom link by hand.
|
|
23
|
+
- If you do not use `ui-generator page`, state exactly why the generator does not fit before editing code.
|
|
24
|
+
- For a small placeholder route inside an existing route family, update the workboard rather than rewriting the blueprint unless the durable route or surface plan changed.
|
|
25
|
+
|
|
26
|
+
Avoid:
|
|
27
|
+
|
|
28
|
+
- hand-writing both `src/pages/...` and `src/placement.js` for a normal non-CRUD page before checking `ui-generator`
|
|
29
|
+
- treating a small page stub as permission to rewrite marketing copy, route architecture, or blueprint scope
|
|
30
|
+
- claiming that no generator exists without checking the actual `jskit` generator inventory first
|
|
@@ -69,6 +69,7 @@ Chunk notes:
|
|
|
69
69
|
|
|
70
70
|
- One CRUD is usually one chunk.
|
|
71
71
|
- Platform/auth/shell work may be its own chunk.
|
|
72
|
+
- Prefer vertical slices that produce visible or end-to-end progress the developer can inspect.
|
|
72
73
|
- Each chunk must be independently reviewable and testable.
|
|
73
74
|
|
|
74
75
|
## Verification
|
package/templates/app/AGENTS.md
CHANGED
|
@@ -32,10 +32,10 @@ Before any non-trivial change:
|
|
|
32
32
|
4. Before editing, print a compact read receipt with:
|
|
33
33
|
- `Read receipt: ...`
|
|
34
34
|
- `Active chunk: ...`
|
|
35
|
-
- `Generator decision: ...`
|
|
35
|
+
- `Generator decision: ...` with the exact `jskit` command to run, or the exact generator/placement discovery commands checked and why no generator applies
|
|
36
36
|
- `Relevant patterns: ...`
|
|
37
37
|
- `Active rules from docs: ...`
|
|
38
|
-
5. When files need to be created, prefer `jskit generate ...` over creating them from scratch, even if the generated output will need follow-up adaptation. If not using a generator, say why.
|
|
38
|
+
5. When files need to be created, prefer `jskit generate ...` over creating them from scratch, even if the generated output will need follow-up adaptation. For a new non-CRUD route page or menu-linked screen, default to `jskit generate ui-generator page ...`. If not using a generator, say why.
|
|
39
39
|
6. Do not edit code until the read receipt is printed and the workboard step is complete when it applies.
|
|
40
40
|
|
|
41
41
|
## Mandatory Done Gate
|
|
@@ -70,6 +70,13 @@ Core rules:
|
|
|
70
70
|
- Example: if the app is workspace-capable and uses `workspaces-core` plus `workspaces-web`, assume the standard workspace invite flow is part of the baseline package behavior.
|
|
71
71
|
- For baseline package setup, ask plainly for the exact local development values needed for the next install step, but only for the modules or packages that are actually selected.
|
|
72
72
|
- Use the real env var names or option names instead of vague requests for "credentials". Values such as `DB_NAME`, `DB_USER`, `DB_PASSWORD`, `AUTH_SUPABASE_URL`, `AUTH_SUPABASE_PUBLISHABLE_KEY`, and `APP_PUBLIC_URL` are routine setup inputs when the relevant package stack needs them.
|
|
73
|
+
- For CRUD chunks, creating the server CRUD with `jskit generate crud-server-generator scaffold ...` is the crucial first step even if no CRUD UI will be created yet.
|
|
74
|
+
- Unless a table is already owned by a JSKIT baseline package or is an explicit narrow exception recorded in `.jskit/table-ownership.json`, every persisted app-owned table must have its own server CRUD package created first with `jskit generate crud-server-generator scaffold ...`, even if no CRUD UI will ever exist.
|
|
75
|
+
- Treat that as a hard invariant, not a style preference. If a persisted app-owned table does not have generated CRUD ownership, `jskit doctor` is expected to fail.
|
|
76
|
+
- For a CRUD table that `crud-server-generator` will own, do not hand-write a separate migration. Create the real table directly in the database first, then scaffold the server CRUD so JSKIT can install and manage the CRUD migration scaffold itself.
|
|
77
|
+
- Do not generate CRUD UI or hand-build CRUD routes before the server CRUD package and shared resource file exist.
|
|
78
|
+
- `feature-server-generator` is for workflows, orchestration, and other non-CRUD server features. Do not use it as the starting point for ordinary persisted entity tables.
|
|
79
|
+
- Keep direct knex minimal and exceptional. Outside generated CRUD packages and explicit weird-custom feature lanes, app-owned runtime code should use internal `json-rest-api` seams instead of talking to knex directly.
|
|
73
80
|
- For CRUD chunks, ask the developer which operations are allowed, which fields belong in the list view if one exists, and the intended look of the view and edit/new forms before generating code.
|
|
74
81
|
- Every user-facing screen must pass a Material Design and Vuetify quality review before the chunk is considered done.
|
|
75
82
|
- Any chunk that adds or changes user-facing UI must include a Playwright check that exercises the changed behavior before the chunk is considered done.
|
|
@@ -78,7 +85,10 @@ Core rules:
|
|
|
78
85
|
- In JSKIT apps using the standard auth stack, that means enabling the dev auth bypass in development and using `POST /api/dev-auth/login-as` during Playwright setup.
|
|
79
86
|
- If authenticated UI work has no usable local auth bootstrap path yet, treat that as a testability gap and call it out before the chunk can be considered complete.
|
|
80
87
|
- Do not implement app features before the blueprint has the database, surfaces, ownership model, and route/screen plan written down.
|
|
88
|
+
- Plan implementation work as vertical slices. Each chunk should deliver a user-visible or end-to-end outcome that the developer can recognize in the app or behavior, not just an isolated layer change.
|
|
89
|
+
- Do not churn `.jskit/APP_BLUEPRINT.md` for a small placeholder page or route stub that fits an existing route family unless the durable route/surface plan actually changed. Track request-level movement in `.jskit/WORKBOARD.md` instead.
|
|
81
90
|
- Break planned work into reviewable chunks before implementing. One CRUD is usually one chunk, but auth/platform setup, shell work, and cross-cutting integrations can be their own chunks.
|
|
91
|
+
- Avoid horizontal chunk plans like "all migrations first", "all routes next", or "all UI last" unless platform setup truly forces that order. Prefer slices the developer can inspect as real progress.
|
|
82
92
|
- Do not move to the next chunk until the current chunk has passed implementation, deslop review, JSKIT best-practices review, Material Design/Vuetify review, and verification.
|
|
83
93
|
- If a feature spans more than one chunk, run a final whole-changeset deslop pass, JSKIT pass, Material Design/Vuetify pass, and verification pass after the last chunk.
|
|
84
94
|
- Prefer a fresh review agent for chunk and whole-changeset review when the runtime supports delegation.
|
package/workflow/bootstrap.md
CHANGED
|
@@ -40,6 +40,8 @@ Ask setup values plainly:
|
|
|
40
40
|
- Only ask for setup values that correspond to the modules or packages already chosen for the baseline.
|
|
41
41
|
- When the next package install needs concrete local development values, ask for them directly using the exact env var names or option names.
|
|
42
42
|
- Do not hide behind vague requests for "credentials" or "values after that boundary".
|
|
43
|
+
- If MySQL or Postgres is selected, confirm that the target database already exists before the runtime install, or that the developer has enough local admin or create-database access to create it now.
|
|
44
|
+
- Do not proceed as if `DB_NAME` alone means the database is ready. The actual database must exist before the database runtime install and migration flow can be treated as valid.
|
|
43
45
|
- In this workflow, these are routine setup inputs:
|
|
44
46
|
- If the MySQL runtime is selected: `DB_NAME`, `DB_USER`, `DB_PASSWORD`
|
|
45
47
|
- If the MySQL host or port differs from the local default `127.0.0.1:3306`: `DB_HOST`, `DB_PORT`
|
|
@@ -7,7 +7,9 @@ Chunk rules:
|
|
|
7
7
|
- One CRUD is usually one chunk.
|
|
8
8
|
- Platform setup, shell/navigation, and cross-cutting integrations may be separate chunks.
|
|
9
9
|
- A chunk must be independently reviewable and testable.
|
|
10
|
+
- Prefer vertical slices. A chunk should usually produce a user-visible or end-to-end outcome, not just a hidden layer-only milestone.
|
|
10
11
|
- If a chunk is too broad to review confidently, split it before coding.
|
|
12
|
+
- Avoid horizontal plans like "database first, then routes, then UI" unless the work is foundational platform setup that genuinely cannot be sliced vertically yet.
|
|
11
13
|
|
|
12
14
|
For each chunk, follow this order:
|
|
13
15
|
|
|
@@ -18,6 +20,7 @@ For each chunk, follow this order:
|
|
|
18
20
|
- generator scaffolding
|
|
19
21
|
- custom local code
|
|
20
22
|
- or a combination
|
|
23
|
+
Record the exact `jskit` commands that will be used if generators or package installs apply.
|
|
21
24
|
4. Implement the smallest correct change.
|
|
22
25
|
5. Deslop the chunk.
|
|
23
26
|
6. Review the chunk against JSKIT reuse and best practices.
|
|
@@ -29,11 +32,13 @@ For each chunk, follow this order:
|
|
|
29
32
|
For CRUD chunks:
|
|
30
33
|
|
|
31
34
|
1. Decide the table shape first.
|
|
32
|
-
2.
|
|
33
|
-
3.
|
|
34
|
-
4.
|
|
35
|
-
5.
|
|
36
|
-
6.
|
|
35
|
+
2. Create the real table directly in the database before scaffolding. `crud-server-generator` reads the live table shape; it does not invent the table for you.
|
|
36
|
+
3. Unless the table is already owned by a JSKIT baseline package or is a narrow explicit exception recorded in `.jskit/table-ownership.json`, every persisted app-owned table must have a server CRUD package. Do not let a new table exist without that ownership decision.
|
|
37
|
+
4. If `crud-server-generator` is going to own the CRUD schema, do not hand-write a separate migration for that CRUD table. The server generator installs and manages the CRUD migration scaffold itself.
|
|
38
|
+
5. Scaffold the server side first with `crud-server-generator`, even if no CRUD UI will be created yet.
|
|
39
|
+
6. Only after the shared resource file exists, scaffold the client side against that resource.
|
|
40
|
+
7. Treat that shared resource file as the canonical CRUD definition. Put field and ownership changes there instead of hand-duplicating derived CRUD validators elsewhere.
|
|
41
|
+
8. Do not guess CRUD operations or screen shape. Ask the developer:
|
|
37
42
|
- which operations are allowed
|
|
38
43
|
- which fields belong in the list view if one exists
|
|
39
44
|
- what the view form should look like
|
|
@@ -45,8 +50,15 @@ During implementation:
|
|
|
45
50
|
- If a selected JSKIT package already ships the required baseline workflow, install and verify that workflow before inventing custom code around it.
|
|
46
51
|
- Ask only about overrides, restrictions, or app-specific additions to packaged baseline workflows.
|
|
47
52
|
- Use generated CRUD/UI scaffolds only after the route and ownership model are decided.
|
|
53
|
+
- Do not hand-build CRUD routes, CRUD endpoints, or CRUD page trees before `crud-server-generator` has created the server package and shared resource file.
|
|
54
|
+
- `feature-server-generator` is for non-CRUD workflows and orchestration. Do not use it as the first persistence lane for ordinary entity tables.
|
|
55
|
+
- For app-owned non-CRUD route pages, default to `jskit generate ui-generator page ...` instead of hand-writing both `src/pages/...` and `src/placement.js`.
|
|
56
|
+
- Before hand-writing a route page or placement entry, check `jskit show ui-generator --details` and `jskit list-placements`.
|
|
57
|
+
- If `ui-generator page` applies and you still choose not to use it, stop and explain the exact gap before coding.
|
|
48
58
|
- Keep runtime, UI, and data concerns separated.
|
|
59
|
+
- Keep direct knex exceptional and minimal. Outside generated CRUD packages and explicit weird-custom feature lanes, app-owned runtime code should stay on internal `json-rest-api` seams.
|
|
49
60
|
- Avoid “while I’m here” scope creep unless it is required for correctness.
|
|
61
|
+
- Do not turn a small placeholder or route stub into a copy-polish or blueprint-rewrite task unless the developer asked for that broader work.
|
|
50
62
|
|
|
51
63
|
After the last chunk:
|
|
52
64
|
|
package/workflow/review.md
CHANGED
|
@@ -20,6 +20,11 @@ Before calling a chunk or a whole changeset done, review it in four passes:
|
|
|
20
20
|
- existing helper/runtime seam available?
|
|
21
21
|
- duplicate local code that should reuse kernel/runtime support?
|
|
22
22
|
- should this have been a package install, generator step, or scaffold extension instead of hand code?
|
|
23
|
+
- if a generator existed, was the exact `jskit` command used or was the gap documented clearly before hand-coding?
|
|
24
|
+
- for CRUD work, was `crud-server-generator scaffold` used before any CRUD UI or CRUD route hand-coding?
|
|
25
|
+
- for CRUD tables owned by JSKIT, did the change avoid a separate hand-written CRUD migration?
|
|
26
|
+
- does every live app-owned table now have either declared generated/package CRUD ownership or an explicit narrow `.jskit/table-ownership.json` exception?
|
|
27
|
+
- is any direct app-owned knex usage limited to generated CRUD packages or explicit weird-custom feature lanes?
|
|
23
28
|
- are surface, route, ownership, and migration choices aligned with JSKIT conventions?
|
|
24
29
|
- package metadata and actual behavior still aligned?
|
|
25
30
|
3. UI standards review
|
package/workflow/scoping.md
CHANGED
|
@@ -30,11 +30,17 @@ Scoping rules:
|
|
|
30
30
|
|
|
31
31
|
- Use `guide/agent/index.md` for fast navigation and `site/guide/index.md` for exact details.
|
|
32
32
|
- Inspect packages and generators before choosing them.
|
|
33
|
+
- Make the generator plan concrete. Name the exact `jskit` commands expected for the chunk, not just a package or a general idea.
|
|
34
|
+
- For non-CRUD route page work, check `jskit show ui-generator --details` and `jskit list-placements` before deciding that custom page or placement code is necessary.
|
|
35
|
+
- For CRUD work, make the server-first plan explicit. Name the exact `jskit generate crud-server-generator scaffold ...` command before any CRUD UI plan.
|
|
36
|
+
- Before accepting a new persisted app-owned table, decide whether it is CRUD-owned or a narrow explicit exception. If it is not already owned by a JSKIT baseline package, the default answer should be server CRUD ownership.
|
|
37
|
+
- If a CRUD will be owned by `crud-server-generator`, plan around a real table that already exists in the database. Do not plan a separate hand-written CRUD migration for that table.
|
|
33
38
|
- Decide ownership early; do not treat it as a UI-only detail.
|
|
34
39
|
- If Stage 1 platform choices are still provisional, finish them before installing tenancy-sensitive runtime packages.
|
|
35
40
|
- Record which selected JSKIT package-owned workflows are accepted as baseline and which, if any, need custom behavior.
|
|
36
41
|
- Do not ask the developer to redesign package-owned baseline workflows from scratch. Ask only whether the default behavior is accepted or whether the app needs overrides, restrictions, or extensions.
|
|
37
42
|
- Create or refresh `.jskit/WORKBOARD.md` for substantial or multi-chunk work so the request has an explicit execution tracker.
|
|
43
|
+
- Do not rewrite `.jskit/APP_BLUEPRINT.md` for a one-off placeholder page inside an already planned route family unless the durable route plan, surface plan, or ownership model changed.
|
|
38
44
|
- Break delivery into chunks that can be independently reviewed and tested.
|
|
39
45
|
- One CRUD is usually one chunk. Platform setup, shell work, and cross-cutting integrations may also be separate chunks.
|
|
40
46
|
- For each CRUD chunk, decide these before implementation:
|