@jskit-ai/agent-docs 0.1.1 → 0.1.3

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.
Files changed (44) hide show
  1. package/DISTR_AGENT.md +9 -2
  2. package/guide/agent/app-extras/assistant.md +1 -1
  3. package/guide/agent/app-extras/realtime.md +1 -1
  4. package/guide/agent/app-setup/a-more-interesting-shell.md +1 -1
  5. package/guide/agent/app-setup/authentication.md +1 -1
  6. package/guide/agent/app-setup/console.md +1 -1
  7. package/guide/agent/app-setup/database-layer.md +1 -1
  8. package/guide/agent/app-setup/initial-scaffolding.md +22 -5
  9. package/guide/agent/app-setup/multi-homing.md +1 -1
  10. package/guide/agent/app-setup/users.md +1 -1
  11. package/guide/agent/app-setup/working-with-the-jskit-cli.md +54 -2
  12. package/guide/agent/generators/advanced-cruds.md +1 -1
  13. package/guide/agent/generators/crud-generators.md +1 -1
  14. package/guide/agent/generators/intro.md +1 -1
  15. package/guide/agent/generators/ui-generators.md +1 -1
  16. package/guide/agent/index.md +1 -1
  17. package/guide/human/app-extras/assistant.md +0 -2
  18. package/guide/human/app-extras/realtime.md +0 -2
  19. package/guide/human/app-setup/a-more-interesting-shell.md +0 -2
  20. package/guide/human/app-setup/authentication.md +0 -2
  21. package/guide/human/app-setup/console.md +0 -2
  22. package/guide/human/app-setup/database-layer.md +0 -2
  23. package/guide/human/app-setup/initial-scaffolding.md +21 -6
  24. package/guide/human/app-setup/multi-homing.md +0 -2
  25. package/guide/human/app-setup/users.md +0 -2
  26. package/guide/human/app-setup/working-with-the-jskit-cli.md +53 -3
  27. package/guide/human/generators/advanced-cruds.md +0 -2
  28. package/guide/human/generators/crud-generators.md +0 -2
  29. package/guide/human/generators/intro.md +0 -2
  30. package/guide/human/generators/ui-generators.md +0 -2
  31. package/guide/human/index.md +0 -2
  32. package/package.json +2 -1
  33. package/reference/autogen/tooling/jskit-cli.md +61 -0
  34. package/skills/jskit-review/SKILL.md +84 -0
  35. package/skills/jskit-review/agents/openai.yaml +4 -0
  36. package/templates/APP_BLUEPRINT.md +14 -0
  37. package/templates/WORKBOARD.md +46 -0
  38. package/templates/app/AGENTS.md +46 -0
  39. package/workflow/app-state.md +2 -1
  40. package/workflow/bootstrap.md +21 -1
  41. package/workflow/feature-delivery.md +33 -7
  42. package/workflow/review.md +26 -7
  43. package/workflow/scoping.md +14 -2
  44. package/workflow/workboard.md +29 -0
package/DISTR_AGENT.md CHANGED
@@ -5,8 +5,9 @@ Read these in order:
5
5
  1. `workflow/app-state.md`
6
6
  2. `workflow/bootstrap.md` if the workspace is empty or no JSKIT app exists yet
7
7
  3. `workflow/scoping.md`
8
- 4. `workflow/feature-delivery.md`
9
- 5. `workflow/review.md`
8
+ 4. `workflow/workboard.md`
9
+ 5. `workflow/feature-delivery.md`
10
+ 6. `workflow/review.md`
10
11
 
11
12
  Use these references on demand:
12
13
 
@@ -15,11 +16,17 @@ Use these references on demand:
15
16
  - `guide/agent/index.md`
16
17
  - `guide/human/index.md` when compressed guidance is ambiguous or missing nuance
17
18
  - `templates/APP_BLUEPRINT.md`
19
+ - `templates/WORKBOARD.md`
20
+ - `skills/jskit-review/SKILL.md` for review passes when your Codex environment supports packaged skills
18
21
 
19
22
  Core rules:
20
23
 
21
24
  - Inspect the workspace before assuming a JSKIT app exists.
22
25
  - Reuse existing JSKIT helpers and runtime seams before adding new local helpers.
26
+ - A freshly scaffolded JSKIT app can still be in Stage 1. If platform decisions are not settled yet, continue with the initialize workflow before adding runtime packages.
27
+ - Do not treat a missing `config.tenancyMode` line or an untouched minimal scaffold as a final tenancy decision.
28
+ - Do not install tenancy-sensitive packages until Stage 1 decisions are complete and the chosen tenancy is written into `config/public.js`.
23
29
  - Do not implement app features before the blueprint has the database, surfaces, ownership model, and route/screen plan written down.
30
+ - For substantial or multi-chunk work, create or update `.jskit/WORKBOARD.md` as the per-request execution tracker.
24
31
  - Use the compressed guide first for speed; fall back to the human guide when a workflow trap, migration caveat, or architectural boundary needs exact wording.
25
32
  - Treat generated reference maps and guide copies as vendor reference. Do not edit them manually.
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-extras/assistant.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-extras/assistant.md`. Do not edit manually. -->
2
2
 
3
3
  # Assistant
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-extras/realtime.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-extras/realtime.md`. Do not edit manually. -->
2
2
 
3
3
  # Realtime
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/a-more-interesting-shell.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/a-more-interesting-shell.md`. Do not edit manually. -->
2
2
 
3
3
  # A more interesting shell
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/authentication.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/authentication.md`. Do not edit manually. -->
2
2
 
3
3
  # Authentication
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/console.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/console.md`. Do not edit manually. -->
2
2
 
3
3
  # Console
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/database-layer.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/database-layer.md`. Do not edit manually. -->
2
2
 
3
3
  # Database layer
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/initial-scaffolding.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/initial-scaffolding.md`. Do not edit manually. -->
2
2
 
3
3
  # Initial scaffolding
4
4
 
@@ -14,6 +14,16 @@ 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 explain the platform options after the scaffold exists, there is also a safe guided path:
18
+
19
+ ```bash
20
+ npx @jskit-ai/create-app exampleapp
21
+ cd exampleapp
22
+ npm install
23
+ ```
24
+
25
+ That produces the same minimal scaffold shape, but without writing an explicit `config.tenancyMode` line yet. The important rule is that this does **not** mean tenancy is already decided. Before installing tenancy-sensitive packages such as `workspaces-core` or `workspaces-web`, the agent still needs to finish the Stage 1 platform conversation and then write the chosen tenancy into `config/public.js`. If workspace packages are installed while the app is still effectively on `none`, you fall into the recovery path described later in the multi-homing chapter.
26
+
17
27
  After creating the scaffolding (which comes with a package.json file), you will need to run `npm install` to install dependencies.
18
28
 
19
29
  **Try Bash Completion!**
@@ -103,6 +113,7 @@ The most important parts look like this:
103
113
  "server": "node ./bin/server.js",
104
114
  "server:all": "node ./bin/server.js",
105
115
  "server:home": "SERVER_SURFACE=home node ./bin/server.js",
116
+ "devlinks": "jskit app link-local-packages",
106
117
  "dev": "vite",
107
118
  "dev:all": "vite",
108
119
  "dev:home": "VITE_SURFACE=home vite",
@@ -111,7 +122,9 @@ The most important parts look like this:
111
122
  "build:home": "VITE_SURFACE=home vite build",
112
123
  "test": "node --test",
113
124
  "test:client": "vitest run tests/client",
114
- "verify": "npm run lint && npm run test && npm run test:client && npm run build && npx jskit doctor"
125
+ "verify": "jskit app verify && npm run --if-present verify:app",
126
+ "release": "jskit app release",
127
+ "jskit:update": "jskit app update-packages"
115
128
  },
116
129
  "dependencies": {
117
130
  "@local/main": "file:packages/main",
@@ -130,9 +143,13 @@ The most important parts look like this:
130
143
  }
131
144
  ```
132
145
 
133
- There are two details worth noticing immediately. The dependency on `@local/main` points at `file:packages/main`, which means your app already contains its own local JSKIT package. The `verify` script is also useful to notice early, because it shows the default quality gate the scaffold expects you to run later.
146
+ There are two details worth noticing immediately. The dependency on `@local/main` points at `file:packages/main`, which means your app already contains its own local JSKIT package. The maintenance scripts are also useful to notice early, because they show an important ownership boundary in JSKIT.
147
+
148
+ `verify`, `jskit:update`, `devlinks`, and `release` are intentionally thin wrappers. They stay in `package.json` because they are convenient app-local shortcuts, but the real implementation now lives in `jskit app ...`, not in copied scaffold scripts.
149
+
150
+ That matters because JSKIT maintenance policy changes over time. If the scaffold copied a large shell script into every app, existing apps would freeze the old behavior forever. By delegating to `jskit app verify`, `jskit app update-packages`, `jskit app link-local-packages`, and `jskit app release`, the app keeps the nice `npm run` shortcuts while the maintained behavior stays in the installed CLI package.
134
151
 
135
- The last command in that script, `npx jskit doctor`, is worth noticing specifically. Linting, tests, and builds check your source code and runtime behavior. `doctor` checks JSKIT-managed app state: installed package visibility, lock-file-backed managed files, and other JSKIT-specific health rules. It is there because a JSKIT app is not only code. It is also a descriptor-driven managed project.
152
+ `jskit app verify` is worth noticing specifically. Linting, tests, and builds check your source code and runtime behavior. The JSKIT part of that flow runs `doctor`, which checks JSKIT-managed app state: installed package visibility, lock-file-backed managed files, and other JSKIT-specific health rules. It is there because a JSKIT app is not only code. It is also a descriptor-driven managed project.
136
153
 
137
154
  The surface-specific script names are also worth noticing early, even in this tiny app. `dev:home`, `server:home`, and `build:home` are the first concrete places where surface selection shows up in the scaffold. They work by setting `VITE_SURFACE=home` on the client side and `SERVER_SURFACE=home` on the server side. In this first chapter, where `home` is the only surface, those variants behave almost the same as the default commands. Later, once more surfaces exist, those scripts become the simplest way to run or build just one surface at a time.
138
155
 
@@ -699,7 +716,7 @@ That is why you saw `@jskit-ai/kernel` and `@jskit-ai/http-runtime` earlier in `
699
716
 
700
717
  ### Other files and options
701
718
 
702
- The remaining files are easier to understand once you know the core pieces above. `vite.config.mjs` configures the frontend build and the `/api` proxy used during development. `index.html` is the HTML shell Vite uses to mount Vue. `tests/` contains basic smoke tests so the app has a verification path from day one. The `scripts/` directory collects helper scripts for release, updating JSKIT packages, and linking a local JSKIT checkout during framework development.
719
+ The remaining files are easier to understand once you know the core pieces above. `vite.config.mjs` configures the frontend build and the `/api` proxy used during development. `index.html` is the HTML shell Vite uses to mount Vue. `tests/` contains basic smoke tests so the app has a verification path from day one. The `scripts/` directory is now much smaller than it used to be, because JSKIT maintenance helpers such as `verify`, `jskit:update`, `devlinks`, and `release` are package-owned CLI commands rather than copied app scripts.
703
720
 
704
721
  The `create-app` command also accepts a few other flags that are useful without changing the basic meaning of this chapter's setup. `--title <text>` lets you replace the browser title and other template text with a friendlier app name. `--target <path>` lets you choose a different output directory instead of the default `./exampleapp`. `--tenancy-mode <mode>` can seed `none`, `personal`, or `workspaces`; for this chapter we intentionally use `none` so the first scaffold stays small and non-workspace. `--force` allows writing into a non-empty target directory when you know that is what you want. `--dry-run` prints the planned file writes without touching the filesystem, which is useful when you want to inspect what the generator would do. `-h` or `--help` prints the command help.
705
722
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/multi-homing.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/multi-homing.md`. Do not edit manually. -->
2
2
 
3
3
  # Multi-homing
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/users.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/users.md`. Do not edit manually. -->
2
2
 
3
3
  # Users
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/working-with-the-jskit-cli.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/working-with-the-jskit-cli.md`. Do not edit manually. -->
2
2
 
3
3
  # Working with the JSKIT CLI
4
4
 
@@ -45,6 +45,56 @@ That lock file is the source of truth for installed JSKIT-managed package state.
45
45
 
46
46
  That is why commands such as `update`, `remove`, `position`, `migrations`, and `doctor` all care about `.jskit/lock.json`.
47
47
 
48
+ ## JSKIT-managed app maintenance scripts
49
+
50
+ The scaffolded app also has a small set of `npm run` shortcuts that are really wrappers around JSKIT-owned maintenance behavior.
51
+
52
+ The important examples are:
53
+
54
+ - `npm run verify`
55
+ - `npm run jskit:update`
56
+ - `npm run devlinks`
57
+ - `npm run release`
58
+
59
+ In the current scaffold, those scripts are intentionally thin:
60
+
61
+ ```json
62
+ {
63
+ "scripts": {
64
+ "verify": "jskit app verify && npm run --if-present verify:app",
65
+ "jskit:update": "jskit app update-packages",
66
+ "devlinks": "jskit app link-local-packages",
67
+ "release": "jskit app release"
68
+ }
69
+ }
70
+ ```
71
+
72
+ That is a deliberate design choice.
73
+
74
+ The app keeps the handy `npm run` names, but the real maintenance policy now lives in the installed CLI package instead of copied shell scripts inside the app. That means if JSKIT later changes how package updates, local linking, or baseline verification should work, apps can pick up the new behavior by updating `@jskit-ai/jskit-cli` instead of hand-editing frozen scaffold files.
75
+
76
+ This gives you a clean ownership split:
77
+
78
+ - app-owned scripts still describe how *this app* runs, builds, and tests
79
+ - JSKIT-owned wrapper scripts delegate framework maintenance to `jskit app ...`
80
+
81
+ That split is worth keeping in mind through the rest of the guide. When you see `npm run verify`, that is now shorthand for "run the app's JSKIT baseline verification policy, then any app-specific extra verification hook".
82
+
83
+ If your app uses a non-default npm registry for JSKIT packages, pass it to the maintained CLI command rather than hard-coding it in the scaffold. For example:
84
+
85
+ ```bash
86
+ npm run jskit:update -- --registry https://registry.example.com
87
+ npm run release -- --registry https://registry.example.com
88
+ ```
89
+
90
+ For older apps that still carry copied maintenance scripts, the migration path is:
91
+
92
+ ```bash
93
+ npx jskit app adopt-managed-scripts
94
+ ```
95
+
96
+ That command rewrites known old scaffold values to the thin wrapper form above.
97
+
48
98
  ## Discover first, change second
49
99
 
50
100
  One of the best habits in JSKIT is to inspect the catalog before mutating the app.
@@ -59,6 +109,7 @@ npx jskit help
59
109
 
60
110
  That shows the available commands such as:
61
111
 
112
+ - `app`
62
113
  - `list`
63
114
  - `show`
64
115
  - `add`
@@ -72,6 +123,7 @@ That shows the available commands such as:
72
123
  Every command in the CLI also has its own help page. For example:
73
124
 
74
125
  ```bash
126
+ npx jskit help app
75
127
  npx jskit help add
76
128
  npx jskit help migrations
77
129
  ```
@@ -642,7 +694,7 @@ That is a different job from:
642
694
 
643
695
  Those commands can all pass while JSKIT-managed state is still inconsistent. `doctor` is the command that checks that JSKIT's own view of the app still makes sense.
644
696
 
645
- That is exactly why the starter scaffold already includes `npx jskit doctor` in `npm run verify`.
697
+ That is exactly why the starter scaffold now routes `npm run verify` through `jskit app verify`.
646
698
 
647
699
  It belongs there because JSKIT apps are not only source trees. They also have:
648
700
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/advanced-cruds.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/generators/advanced-cruds.md`. Do not edit manually. -->
2
2
 
3
3
  # Advanced CRUDs
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/crud-generators.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/generators/crud-generators.md`. Do not edit manually. -->
2
2
 
3
3
  # CRUD Generators
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/intro.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/generators/intro.md`. Do not edit manually. -->
2
2
 
3
3
  # Generators
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/ui-generators.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/generators/ui-generators.md`. Do not edit manually. -->
2
2
 
3
3
  # UI Generators
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/index.md`. Do not edit manually. -->
1
+ <!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/index.md`. Do not edit manually. -->
2
2
 
3
3
  # Guide
4
4
 
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-extras/assistant.md`. Do not edit manually. -->
2
-
3
1
  # Assistant
4
2
 
5
3
  At the end of the previous chapter, the app could already host live transports, but it still had no assistant surface of its own.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-extras/realtime.md`. Do not edit manually. -->
2
-
3
1
  # Realtime
4
2
 
5
3
  At the end of the previous chapter, the app already had a real shell, authenticated users, operator tooling, and workspace-aware routing. What it still did not have was a live transport for pushing updates into that shell.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/a-more-interesting-shell.md`. Do not edit manually. -->
2
-
3
1
  # A more interesting shell
4
2
 
5
3
  In the first chapter, the app was intentionally plain. That was useful because it let us see the smallest possible JSKIT scaffold without too many moving parts. In this chapter, we install `shell-web`, which is the package that turns that bare starting point into a real shell: a layout, navigation outlets, a first settings area, and a proper app-level error host.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/authentication.md`. Do not edit manually. -->
2
-
3
1
  # Authentication
4
2
 
5
3
  At the end of the previous chapter, the app had a real shell, but it still did not know how to sign users in. In this chapter, we connect the app to Supabase Auth, add the stock JSKIT login and sign-out routes, and inspect the files that make authentication visible in the shell.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/console.md`. Do not edit manually. -->
2
-
3
1
  # Console
4
2
 
5
3
  This chapter adds a separate `console` surface and looks at how JSKIT keeps that operator slice separate from the normal account/user layer.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/database-layer.md`. Do not edit manually. -->
2
-
3
1
  # Database layer
4
2
 
5
3
  At the end of the previous chapter, the app could already authenticate real users through Supabase, but JSKIT was still using its no-database fallback for the app-side user mirror. In this chapter, we install the MySQL database runtime, add the migration tooling, and explain what that changes immediately and what it still does **not** change yet.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/initial-scaffolding.md`. Do not edit manually. -->
2
-
3
1
  # Initial scaffolding
4
2
 
5
3
  In this first chapter, we are going to create the smallest useful JSKIT app, install its dependencies, run it locally, and read the scaffold it gives us. The goal of this chapter is to explain how to get started with JSKIT and to understand what the generator produced, which files matter, and why the project already has concepts like _surfaces_, a local runtime package, and a server even before we add any real features.
@@ -14,6 +12,16 @@ npm install
14
12
 
15
13
  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
14
 
15
+ If you are working with an AI agent and want the agent to explain the platform options after the scaffold exists, there is also a safe guided path:
16
+
17
+ ```bash
18
+ npx @jskit-ai/create-app exampleapp
19
+ cd exampleapp
20
+ npm install
21
+ ```
22
+
23
+ That produces the same minimal scaffold shape, but without writing an explicit `config.tenancyMode` line yet. The important rule is that this does **not** mean tenancy is already decided. Before installing tenancy-sensitive packages such as `workspaces-core` or `workspaces-web`, the agent still needs to finish the Stage 1 platform conversation and then write the chosen tenancy into `config/public.js`. If workspace packages are installed while the app is still effectively on `none`, you fall into the recovery path described later in the multi-homing chapter.
24
+
17
25
  After creating the scaffolding (which comes with a package.json file), you will need to run `npm install` to install dependencies.
18
26
 
19
27
  <DocsTerminalTip title="Try Bash Completion!">
@@ -120,6 +128,7 @@ The most important parts look like this:
120
128
  "server": "node ./bin/server.js",
121
129
  "server:all": "node ./bin/server.js",
122
130
  "server:home": "SERVER_SURFACE=home node ./bin/server.js",
131
+ "devlinks": "jskit app link-local-packages",
123
132
  "dev": "vite",
124
133
  "dev:all": "vite",
125
134
  "dev:home": "VITE_SURFACE=home vite",
@@ -128,7 +137,9 @@ The most important parts look like this:
128
137
  "build:home": "VITE_SURFACE=home vite build",
129
138
  "test": "node --test",
130
139
  "test:client": "vitest run tests/client",
131
- "verify": "npm run lint && npm run test && npm run test:client && npm run build && npx jskit doctor"
140
+ "verify": "jskit app verify && npm run --if-present verify:app",
141
+ "release": "jskit app release",
142
+ "jskit:update": "jskit app update-packages"
132
143
  },
133
144
  "dependencies": {
134
145
  "@local/main": "file:packages/main",
@@ -147,9 +158,13 @@ The most important parts look like this:
147
158
  }
148
159
  ```
149
160
 
150
- There are two details worth noticing immediately. The dependency on `@local/main` points at `file:packages/main`, which means your app already contains its own local JSKIT package. The `verify` script is also useful to notice early, because it shows the default quality gate the scaffold expects you to run later.
161
+ There are two details worth noticing immediately. The dependency on `@local/main` points at `file:packages/main`, which means your app already contains its own local JSKIT package. The maintenance scripts are also useful to notice early, because they show an important ownership boundary in JSKIT.
162
+
163
+ `verify`, `jskit:update`, `devlinks`, and `release` are intentionally thin wrappers. They stay in `package.json` because they are convenient app-local shortcuts, but the real implementation now lives in `jskit app ...`, not in copied scaffold scripts.
164
+
165
+ That matters because JSKIT maintenance policy changes over time. If the scaffold copied a large shell script into every app, existing apps would freeze the old behavior forever. By delegating to `jskit app verify`, `jskit app update-packages`, `jskit app link-local-packages`, and `jskit app release`, the app keeps the nice `npm run` shortcuts while the maintained behavior stays in the installed CLI package.
151
166
 
152
- The last command in that script, `npx jskit doctor`, is worth noticing specifically. Linting, tests, and builds check your source code and runtime behavior. `doctor` checks JSKIT-managed app state: installed package visibility, lock-file-backed managed files, and other JSKIT-specific health rules. It is there because a JSKIT app is not only code. It is also a descriptor-driven managed project.
167
+ `jskit app verify` is worth noticing specifically. Linting, tests, and builds check your source code and runtime behavior. The JSKIT part of that flow runs `doctor`, which checks JSKIT-managed app state: installed package visibility, lock-file-backed managed files, and other JSKIT-specific health rules. It is there because a JSKIT app is not only code. It is also a descriptor-driven managed project.
153
168
 
154
169
  The surface-specific script names are also worth noticing early, even in this tiny app. `dev:home`, `server:home`, and `build:home` are the first concrete places where surface selection shows up in the scaffold. They work by setting `VITE_SURFACE=home` on the client side and `SERVER_SURFACE=home` on the server side. In this first chapter, where `home` is the only surface, those variants behave almost the same as the default commands. Later, once more surfaces exist, those scripts become the simplest way to run or build just one surface at a time.
155
170
 
@@ -721,7 +736,7 @@ That is why you saw `@jskit-ai/kernel` and `@jskit-ai/http-runtime` earlier in `
721
736
 
722
737
  ### Other files and options
723
738
 
724
- The remaining files are easier to understand once you know the core pieces above. `vite.config.mjs` configures the frontend build and the `/api` proxy used during development. `index.html` is the HTML shell Vite uses to mount Vue. `tests/` contains basic smoke tests so the app has a verification path from day one. The `scripts/` directory collects helper scripts for release, updating JSKIT packages, and linking a local JSKIT checkout during framework development.
739
+ The remaining files are easier to understand once you know the core pieces above. `vite.config.mjs` configures the frontend build and the `/api` proxy used during development. `index.html` is the HTML shell Vite uses to mount Vue. `tests/` contains basic smoke tests so the app has a verification path from day one. The `scripts/` directory is now much smaller than it used to be, because JSKIT maintenance helpers such as `verify`, `jskit:update`, `devlinks`, and `release` are package-owned CLI commands rather than copied app scripts.
725
740
 
726
741
  The `create-app` command also accepts a few other flags that are useful without changing the basic meaning of this chapter's setup. `--title <text>` lets you replace the browser title and other template text with a friendlier app name. `--target <path>` lets you choose a different output directory instead of the default `./exampleapp`. `--tenancy-mode <mode>` can seed `none`, `personal`, or `workspaces`; for this chapter we intentionally use `none` so the first scaffold stays small and non-workspace. `--force` allows writing into a non-empty target directory when you know that is what you want. `--dry-run` prints the planned file writes without touching the filesystem, which is useful when you want to inspect what the generator would do. `-h` or `--help` prints the command help.
727
742
 
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/multi-homing.md`. Do not edit manually. -->
2
-
3
1
  # Multi-homing
4
2
 
5
3
  Up to this point, the app has had several surfaces, but none of them were workspace-dependent. `home`, `auth`, `account`, and `console` all live outside any workspace slug.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/users.md`. Do not edit manually. -->
2
-
3
1
  # Users
4
2
 
5
3
  At the end of the previous chapter, the app had a real database runtime, but it still did not have JSKIT's own persistent users layer. Authentication worked, but the app-side profile mirror was still only the temporary fallback from the auth chapter.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/working-with-the-jskit-cli.md`. Do not edit manually. -->
2
-
3
1
  # Working with the JSKIT CLI
4
2
 
5
3
  In the first chapter, we used the JSKIT CLI, but only in passing. We created the app, installed dependencies, and moved on.
@@ -59,6 +57,56 @@ That lock file is the source of truth for installed JSKIT-managed package state.
59
57
 
60
58
  That is why commands such as `update`, `remove`, `position`, `migrations`, and `doctor` all care about `.jskit/lock.json`.
61
59
 
60
+ ## JSKIT-managed app maintenance scripts
61
+
62
+ The scaffolded app also has a small set of `npm run` shortcuts that are really wrappers around JSKIT-owned maintenance behavior.
63
+
64
+ The important examples are:
65
+
66
+ - `npm run verify`
67
+ - `npm run jskit:update`
68
+ - `npm run devlinks`
69
+ - `npm run release`
70
+
71
+ In the current scaffold, those scripts are intentionally thin:
72
+
73
+ ```json
74
+ {
75
+ "scripts": {
76
+ "verify": "jskit app verify && npm run --if-present verify:app",
77
+ "jskit:update": "jskit app update-packages",
78
+ "devlinks": "jskit app link-local-packages",
79
+ "release": "jskit app release"
80
+ }
81
+ }
82
+ ```
83
+
84
+ That is a deliberate design choice.
85
+
86
+ The app keeps the handy `npm run` names, but the real maintenance policy now lives in the installed CLI package instead of copied shell scripts inside the app. That means if JSKIT later changes how package updates, local linking, or baseline verification should work, apps can pick up the new behavior by updating `@jskit-ai/jskit-cli` instead of hand-editing frozen scaffold files.
87
+
88
+ This gives you a clean ownership split:
89
+
90
+ - app-owned scripts still describe how *this app* runs, builds, and tests
91
+ - JSKIT-owned wrapper scripts delegate framework maintenance to `jskit app ...`
92
+
93
+ That split is worth keeping in mind through the rest of the guide. When you see `npm run verify`, that is now shorthand for "run the app's JSKIT baseline verification policy, then any app-specific extra verification hook".
94
+
95
+ If your app uses a non-default npm registry for JSKIT packages, pass it to the maintained CLI command rather than hard-coding it in the scaffold. For example:
96
+
97
+ ```bash
98
+ npm run jskit:update -- --registry https://registry.example.com
99
+ npm run release -- --registry https://registry.example.com
100
+ ```
101
+
102
+ For older apps that still carry copied maintenance scripts, the migration path is:
103
+
104
+ ```bash
105
+ npx jskit app adopt-managed-scripts
106
+ ```
107
+
108
+ That command rewrites known old scaffold values to the thin wrapper form above.
109
+
62
110
  ## Discover first, change second
63
111
 
64
112
  One of the best habits in JSKIT is to inspect the catalog before mutating the app.
@@ -73,6 +121,7 @@ npx jskit help
73
121
 
74
122
  That shows the available commands such as:
75
123
 
124
+ - `app`
76
125
  - `list`
77
126
  - `show`
78
127
  - `add`
@@ -86,6 +135,7 @@ That shows the available commands such as:
86
135
  Every command in the CLI also has its own help page. For example:
87
136
 
88
137
  ```bash
138
+ npx jskit help app
89
139
  npx jskit help add
90
140
  npx jskit help migrations
91
141
  ```
@@ -656,7 +706,7 @@ That is a different job from:
656
706
 
657
707
  Those commands can all pass while JSKIT-managed state is still inconsistent. `doctor` is the command that checks that JSKIT's own view of the app still makes sense.
658
708
 
659
- That is exactly why the starter scaffold already includes `npx jskit doctor` in `npm run verify`.
709
+ That is exactly why the starter scaffold now routes `npm run verify` through `jskit app verify`.
660
710
 
661
711
  It belongs there because JSKIT apps are not only source trees. They also have:
662
712
 
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/advanced-cruds.md`. Do not edit manually. -->
2
-
3
1
  # Advanced CRUDs
4
2
 
5
3
  The earlier CRUD chapter shows the workflow. This chapter shows the anatomy.
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/crud-generators.md`. Do not edit manually. -->
2
-
3
1
  # CRUD Generators
4
2
 
5
3
  CRUD generation in JSKIT is really one workflow split across two generator packages:
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/intro.md`. Do not edit manually. -->
2
-
3
1
  # Generators
4
2
 
5
3
  By the end of the app-setup chapters, the guide app already has the main structural pieces in place:
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/ui-generators.md`. Do not edit manually. -->
2
-
3
1
  # UI Generators
4
2
 
5
3
  The earlier chapters already used `ui-generator` a little when we added:
@@ -1,5 +1,3 @@
1
- <!-- Generated by `npm run agent-docs:build` from `docs/guide/index.md`. Do not edit manually. -->
2
-
3
1
  # Guide
4
2
 
5
3
  This guide is the main hands-on path through JSKIT.
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Distributed JSKIT agent workflows, guides, and generated reference maps.",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "DISTR_AGENT.md",
8
8
  "guide",
9
9
  "reference",
10
+ "skills",
10
11
  "templates",
11
12
  "workflow"
12
13
  ],
@@ -41,6 +41,8 @@ Exports
41
41
  - `upsertEnvValue(content, key, value)`
42
42
  - `removeEnvValue(content, key, expectedValue, previous)`
43
43
  - `writeJsonFile`
44
+ Local functions
45
+ - `directoryLooksLikeJskitAppRoot(directoryPath)`
44
46
 
45
47
  ### `src/server/cliRuntime/capabilitySupport.js`
46
48
  Exports
@@ -341,6 +343,65 @@ Exports
341
343
  - `applyViteMutations(packageEntry, appRoot, viteMutations, options, managedVite, touchedFiles)`
342
344
  - `removeManagedViteProxyEntries({ appRoot, packageId, managedViteChanges = {}, touchedFiles = null } = {})`
343
345
 
346
+ ### `src/server/commandHandlers/app.js`
347
+ Exports
348
+ - `createAppCommands(ctx = {})`
349
+ Local functions
350
+ - `renderAppHelp(stream, definition = null)`
351
+
352
+ ### `src/server/commandHandlers/appCommandCatalog.js`
353
+ Exports
354
+ - `APP_SCRIPT_WRAPPERS`
355
+ - `LEGACY_APP_SCRIPT_VALUES`
356
+ - `LEGACY_APP_SCRIPT_FILES`
357
+ - `APP_COMMAND_DEFINITIONS`
358
+ - `listAppCommandDefinitions()`
359
+ - `resolveAppCommandDefinition(rawName = "")`
360
+ - `buildAppCommandOptionMeta(subcommandName = "")`
361
+
362
+ ### `src/server/commandHandlers/appCommands/adoptManagedScripts.js`
363
+ Exports
364
+ - `runAppAdoptManagedScriptsCommand(ctx = {}, { appRoot = "", options = {}, stdout })`
365
+ Local functions
366
+ - `shouldRewriteScript(currentValue = "", scriptName = "", force = false)`
367
+
368
+ ### `src/server/commandHandlers/appCommands/linkLocalPackages.js`
369
+ Exports
370
+ - `runAppLinkLocalPackagesCommand(ctx = {}, { appRoot = "", options = {}, stdout })`
371
+
372
+ ### `src/server/commandHandlers/appCommands/release.js`
373
+ Exports
374
+ - `runAppReleaseCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
375
+
376
+ ### `src/server/commandHandlers/appCommands/shared.js`
377
+ Exports
378
+ - `fileExists(filePath = "")`
379
+ - `normalizeText(value = "")`
380
+ - `isTruthyFlag(rawValue = "")`
381
+ - `runExternalCommand(command, args = [], { cwd = "", env = {}, stdout, stderr, quiet = false, createCliError } = {})`
382
+ - `formatUtcReleaseTimestamp(date = new Date())`
383
+ - `resolveLocalJskitBin(appRoot = "")`
384
+ - `runLocalJskit(appRoot, args = [], { stdout, stderr, createCliError, quiet = false } = {})`
385
+ - `resolveLocalRepoRoot({ appRoot = "", explicitRepoRoot = "" } = {})`
386
+ - `discoverLocalPackageMap(repoRoot = "")`
387
+ - `linkPackageBinEntries({ appRoot, packageDirName, sourceDir, stdout } = {})`
388
+ - `resolveSymlinkType()`
389
+ Local functions
390
+ - `ensureCommandSucceeded(result, label, { createCliError, cwd = "", stdout, stderr, quiet = false } = {})`
391
+
392
+ ### `src/server/commandHandlers/appCommands/updatePackages.js`
393
+ Exports
394
+ - `runAppUpdatePackagesCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
395
+ Local functions
396
+ - `collectJskitPackageNames(packageMap = {})`
397
+ - `resolveMajorRangeFromVersion(packageName = "", rawVersion = "", createCliError)`
398
+ - `resolveRegistryArgs(registryUrl = "")`
399
+ - `resolveInstallSpecs(packageNames = [], resolveMajorRange)`
400
+
401
+ ### `src/server/commandHandlers/appCommands/verify.js`
402
+ Exports
403
+ - `runAppVerifyCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
404
+
344
405
  ### `src/server/commandHandlers/completion.js`
345
406
  Exports
346
407
  - `createCompletionCommands(ctx = {})`
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: jskit-review
3
+ description: Review or deslop a JSKIT chunk or whole changeset. Use when the user asks to review, deslop, run a JSKIT best-practices audit, or verify a JSKIT feature, chunk, or whole changeset before sign-off.
4
+ ---
5
+
6
+ # JSKIT Review
7
+
8
+ Use this skill for independent review passes on JSKIT app work.
9
+
10
+ Preferred execution mode:
11
+
12
+ - Run this skill in a fresh review agent when the runtime supports delegation.
13
+ - Use the current agent only when delegation is unavailable.
14
+ - The same rule applies to chunk review and whole-changeset review.
15
+
16
+ ## Read first
17
+
18
+ 1. `../../workflow/review.md`
19
+ 2. `../../workflow/feature-delivery.md`
20
+
21
+ Read these on demand:
22
+
23
+ - `../../reference/autogen/KERNEL_MAP.md`
24
+ - `../../reference/autogen/README.md`
25
+ - `../../guide/agent/index.md`
26
+ - `../../guide/human/index.md` when compressed guidance is ambiguous
27
+
28
+ Inspect app-local files when they exist:
29
+
30
+ - `.jskit/WORKBOARD.md`
31
+ - `.jskit/APP_BLUEPRINT.md`
32
+
33
+ ## Review target
34
+
35
+ Determine whether the target is:
36
+
37
+ - the current chunk
38
+ - or the whole changeset
39
+
40
+ Use `.jskit/WORKBOARD.md` to determine the active chunk when available.
41
+
42
+ ## Required passes
43
+
44
+ 1. Deslop review
45
+ 2. JSKIT best-practices review
46
+ 3. Verification review
47
+
48
+ ## Deslop review
49
+
50
+ Check for:
51
+
52
+ - repeated functions or duplicated local helpers
53
+ - local helpers that should reuse kernel/runtime seams
54
+ - placeholder, fake-complete, or vague UI/copy/code
55
+ - dead code, unused imports/props, TODO-shaped gaps, or accidental abstractions
56
+ - missing loading, empty, error, permission, or ownership states
57
+ - broken route wiring, missing migrations, or incomplete flows
58
+
59
+ ## JSKIT review
60
+
61
+ Check for:
62
+
63
+ - missed reuse of existing JSKIT helpers or runtime seams
64
+ - hand code that should have been a package, generator, or scaffold step
65
+ - surface, route, ownership, and migration choices that violate JSKIT conventions
66
+ - metadata that no longer matches actual behavior
67
+
68
+ ## Verification review
69
+
70
+ Check that verification is appropriate for the target:
71
+
72
+ - focused verification for a chunk
73
+ - broad regression for a whole changeset
74
+ - Playwright for meaningful user-facing flows
75
+ - explicit handling of login/test-auth strategy when auth is required
76
+
77
+ ## Output format
78
+
79
+ - Present findings first, ordered by severity, with file references.
80
+ - If there are no findings, say so explicitly.
81
+ - Always finish with:
82
+ - files reviewed
83
+ - commands run
84
+ - anything still unverified
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "JSKIT Review"
3
+ short_description: "Deslop, audit JSKIT fit, and verify a chunk or changeset"
4
+ default_prompt: "Use $jskit-review to run a deslop pass, JSKIT best-practices audit, and verification review on the current JSKIT chunk or whole changeset."
@@ -51,7 +51,21 @@
51
51
  - Non-CRUD pages to scaffold:
52
52
  - Custom code areas:
53
53
 
54
+ ## Delivery Plan
55
+
56
+ | Chunk | Goal | Type | Depends on | Done when |
57
+ | --- | --- | --- | --- | --- |
58
+ | | | | | |
59
+
60
+ Chunk notes:
61
+
62
+ - One CRUD is usually one chunk.
63
+ - Platform/auth/shell work may be its own chunk.
64
+ - Each chunk must be independently reviewable and testable.
65
+
54
66
  ## Verification
55
67
 
56
68
  - Commands to run:
69
+ - Playwright coverage plan:
70
+ - Test auth strategy:
57
71
  - Known open questions:
@@ -0,0 +1,46 @@
1
+ # Workboard
2
+
3
+ ## Request
4
+
5
+ - Request summary:
6
+ - Current stage:
7
+ - Current status:
8
+
9
+ ## Scope Snapshot
10
+
11
+ - Platform decisions:
12
+ - Current blueprint path:
13
+ - Current workboard owner:
14
+
15
+ ## Chunk Tracker
16
+
17
+ | Chunk | Goal | Status | Deslop | JSKIT Review | Verification | Notes |
18
+ | --- | --- | --- | --- | --- | --- | --- |
19
+ | | | | | | | |
20
+
21
+ Status guide:
22
+
23
+ - `planned`
24
+ - `active`
25
+ - `implemented`
26
+ - `reviewed`
27
+ - `verified`
28
+ - `done`
29
+ - `blocked`
30
+
31
+ ## Current Focus
32
+
33
+ - Active chunk:
34
+ - Next action:
35
+ - Blockers:
36
+
37
+ ## Verification Log
38
+
39
+ - Commands run:
40
+ - Playwright status:
41
+ - Remaining unverified:
42
+
43
+ ## Notes
44
+
45
+ - Decisions made:
46
+ - Open questions:
@@ -0,0 +1,46 @@
1
+ # App Agent Instructions
2
+
3
+ Use this file as the app-facing instruction entrypoint.
4
+
5
+ Read these workflow files in order:
6
+
7
+ 1. `node_modules/@jskit-ai/agent-docs/workflow/app-state.md`
8
+ 2. `node_modules/@jskit-ai/agent-docs/workflow/bootstrap.md` if the workspace is empty or no JSKIT app exists yet
9
+ 3. `node_modules/@jskit-ai/agent-docs/workflow/scoping.md`
10
+ 4. `node_modules/@jskit-ai/agent-docs/workflow/workboard.md`
11
+ 5. `node_modules/@jskit-ai/agent-docs/workflow/feature-delivery.md`
12
+ 6. `node_modules/@jskit-ai/agent-docs/workflow/review.md`
13
+
14
+ Use these references on demand:
15
+
16
+ - `node_modules/@jskit-ai/agent-docs/reference/autogen/KERNEL_MAP.md`
17
+ - `node_modules/@jskit-ai/agent-docs/reference/autogen/README.md`
18
+ - `node_modules/@jskit-ai/agent-docs/guide/agent/index.md`
19
+ - `node_modules/@jskit-ai/agent-docs/guide/human/index.md` when compressed guidance is ambiguous or missing nuance
20
+ - `node_modules/@jskit-ai/agent-docs/templates/APP_BLUEPRINT.md`
21
+ - `node_modules/@jskit-ai/agent-docs/templates/WORKBOARD.md`
22
+ - `node_modules/@jskit-ai/agent-docs/skills/jskit-review/SKILL.md` for review passes when your Codex environment supports packaged skills
23
+
24
+ Core rules:
25
+
26
+ - Inspect the workspace before assuming a JSKIT app exists.
27
+ - Reuse existing JSKIT helpers and runtime seams before adding new local helpers.
28
+ - A freshly scaffolded JSKIT app can still be in Stage 1. If the app was just created and platform decisions are not settled yet, continue with the initialize workflow before adding runtime packages.
29
+ - Do not treat a missing `config.tenancyMode` line or an untouched minimal scaffold as a final tenancy decision.
30
+ - Do not install tenancy-sensitive packages until Stage 1 decisions are complete and the chosen tenancy is written into `config/public.js`.
31
+ - Do not implement app features before the blueprint has the database, surfaces, ownership model, and route/screen plan written down.
32
+ - For substantial or multi-chunk work, create or update `.jskit/WORKBOARD.md` as the per-request execution tracker.
33
+ - 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.
34
+ - Do not move to the next chunk until the current chunk has passed implementation, deslop review, JSKIT best-practices review, and verification.
35
+ - If a feature spans more than one chunk, run a final whole-changeset deslop pass, JSKIT pass, and verification pass after the last chunk.
36
+ - Prefer a fresh review agent for chunk and whole-changeset review when the runtime supports delegation.
37
+ - Have that fresh review agent use the packaged `jskit-review` skill when it is available to the runtime.
38
+ - If delegation or skills are unavailable, follow `workflow/review.md` manually in the current agent.
39
+ - Use the compressed guide first for speed; fall back to the human guide when a workflow trap, migration caveat, or architectural boundary needs exact wording.
40
+ - Treat generated reference maps and guide copies as vendor reference. Do not edit them manually.
41
+
42
+ If dependencies are not installed yet:
43
+
44
+ - install dependencies so `node_modules/@jskit-ai/agent-docs/` exists
45
+ - inspect the workspace before assuming a JSKIT app already exists
46
+ - if the workspace is empty and the user wants a new app, start with the initialize workflow at a high level first
@@ -28,6 +28,7 @@ State handling:
28
28
  - Explain which scaffold markers are missing.
29
29
  - Recover or finish the scaffold instead of re-initializing from scratch.
30
30
  - `jskit_app`
31
- - Continue with scoping or feature delivery.
31
+ - If this is a fresh minimal scaffold and Stage 1 platform decisions are not settled yet, continue with the initialize workflow first.
32
+ - Otherwise continue with scoping or feature delivery.
32
33
 
33
34
  This state gate is intentionally strict. The agent must inspect first and only then choose initialize, recover, or extend.
@@ -1,6 +1,26 @@
1
1
  # Initialize Workflow
2
2
 
3
- Use this only when the app state gate resolves to `empty`, or when the user explicitly wants a brand-new JSKIT app in a new directory.
3
+ Use this when:
4
+
5
+ - the app state gate resolves to `empty`
6
+ - the user explicitly wants a brand-new JSKIT app in a new directory
7
+ - or a fresh minimal JSKIT scaffold exists but Stage 1 platform decisions are not settled yet
8
+
9
+ Safe bootstrap paths:
10
+
11
+ 1. Empty directory path
12
+ - Ask the Stage 1 platform questions first.
13
+ - Once the high-level shape is clear, run `create-app` with the chosen tenancy mode.
14
+ 2. Fresh scaffold path
15
+ - If the app was just created with `npx @jskit-ai/create-app <app-name>` and `npm install`, treat that scaffold as provisional.
16
+ - Ask the Stage 1 platform questions before adding tenancy-sensitive packages.
17
+ - If the chosen tenancy is `personal` or `workspaces`, write it into `config/public.js` before installing workspace packages.
18
+
19
+ Important constraint:
20
+
21
+ - Do not install tenancy-sensitive packages while tenancy is still provisional.
22
+ - In practice, that means `workspaces-core` and `workspaces-web` must wait until the Stage 1 tenancy decision is complete.
23
+ - A missing `config.tenancyMode` line behaves like `none` at runtime. Treat it as provisional only if no tenancy-sensitive package install has happened yet.
4
24
 
5
25
  Version 0 sketch:
6
26
 
@@ -1,17 +1,29 @@
1
1
  # Feature Delivery Workflow
2
2
 
3
- For each feature, follow this order:
3
+ Before implementation, break the planned work into chunks.
4
4
 
5
- 1. Scope the feature inside the blueprint.
6
- 2. Decide whether it is:
5
+ Chunk rules:
6
+
7
+ - One CRUD is usually one chunk.
8
+ - Platform setup, shell/navigation, and cross-cutting integrations may be separate chunks.
9
+ - A chunk must be independently reviewable and testable.
10
+ - If a chunk is too broad to review confidently, split it before coding.
11
+
12
+ For each chunk, follow this order:
13
+
14
+ 1. Scope the chunk inside the blueprint.
15
+ 2. Mark the chunk as active in `.jskit/WORKBOARD.md`.
16
+ 3. Decide whether it is:
7
17
  - package install
8
18
  - generator scaffolding
9
19
  - custom local code
10
20
  - or a combination
11
- 3. Implement the smallest correct change.
12
- 4. Review for implementation gaps.
13
- 5. Review against JSKIT reuse and best practices.
14
- 6. Verify with the relevant commands.
21
+ 4. Implement the smallest correct change.
22
+ 5. Deslop the chunk.
23
+ 6. Review the chunk against JSKIT reuse and best practices.
24
+ 7. Verify the chunk with the relevant commands, including Playwright for meaningful UI flows.
25
+ 8. Update `.jskit/WORKBOARD.md` with status, commands run, and anything still unverified.
26
+ 9. Only then move to the next chunk.
15
27
 
16
28
  During implementation:
17
29
 
@@ -19,3 +31,17 @@ During implementation:
19
31
  - Use generated CRUD/UI scaffolds only after the route and ownership model are decided.
20
32
  - Keep runtime, UI, and data concerns separated.
21
33
  - Avoid “while I’m here” scope creep unless it is required for correctness.
34
+
35
+ After the last chunk:
36
+
37
+ - If there was only one chunk, the chunk review is the final review.
38
+ - If there was more than one chunk, run one more whole-changeset pass:
39
+ - deslop the whole changeset
40
+ - review the whole changeset against JSKIT best practices
41
+ - run the widest relevant verification, including Playwright
42
+ - update `.jskit/WORKBOARD.md` with the final result and any remaining gaps
43
+
44
+ Playwright note:
45
+
46
+ - When login is required, prefer a test-only impersonation or session bootstrap path over dependence on a live external auth provider.
47
+ - If such a path does not exist yet, treat that as a testability gap and decide whether the chunk must add it before the feature is considered complete.
@@ -1,18 +1,32 @@
1
1
  # Review Workflow
2
2
 
3
- Before calling a feature done, review it in three passes:
3
+ Preferred review mode:
4
4
 
5
- 1. Implementation gap review
6
- - missing states
7
- - broken flows
8
- - incomplete ownership handling
9
- - missing migrations or route wiring
5
+ - Prefer a fresh review agent for chunk and whole-changeset review when the runtime supports delegation.
6
+ - Have that fresh review agent use the packaged `jskit-review` skill when it is available.
7
+ - If delegation or skills are unavailable, follow this file manually in the current agent.
8
+
9
+ Before calling a chunk or a whole changeset done, review it in three passes:
10
+
11
+ 1. Deslop review
12
+ - repeated functions or duplicated local helpers
13
+ - helpers reimplemented locally when a kernel/runtime seam already exists
14
+ - placeholder, fake-complete, or vague UI/copy/code structure
15
+ - dead code, unused props/imports, TODO-shaped gaps, or accidental abstractions
16
+ - missing loading, empty, error, permission, or ownership states
17
+ - broken flows, missing route wiring, or missing migrations
18
+ - surface or entity ownership mistakes: `public`, `user`, `workspace`, `workspace_user`
10
19
  2. JSKIT review
11
20
  - existing helper/runtime seam available?
12
21
  - duplicate local code that should reuse kernel/runtime support?
22
+ - should this have been a package install, generator step, or scaffold extension instead of hand code?
23
+ - are surface, route, ownership, and migration choices aligned with JSKIT conventions?
13
24
  - package metadata and actual behavior still aligned?
14
25
  3. Verification review
15
- - run the smallest relevant verification commands
26
+ - run the smallest relevant verification commands for a chunk
27
+ - run the widest relevant verification commands for a whole changeset
28
+ - include Playwright for meaningful user-facing flows
29
+ - if login is required, verify the chosen test-auth path or explicitly record that the lack of one is an open gap
16
30
  - note anything left unverified
17
31
 
18
32
  Minimum expectation:
@@ -20,3 +34,8 @@ Minimum expectation:
20
34
  - list the files changed
21
35
  - list the commands run
22
36
  - list anything still unverified
37
+ - update `.jskit/WORKBOARD.md` with the review outcome
38
+
39
+ Whole-changeset rule:
40
+
41
+ - If the work was split into more than one chunk, repeat all three passes over the whole changeset after the final chunk is complete.
@@ -1,6 +1,13 @@
1
1
  # Scoping Workflow
2
2
 
3
- Before implementing any feature or batch of features, write or update `templates/APP_BLUEPRINT.md` as the working app blueprint.
3
+ Before implementing any feature or batch of features, create or update an app-local working blueprint using `templates/APP_BLUEPRINT.md` as the template.
4
+
5
+ Recommended location:
6
+
7
+ - `.jskit/APP_BLUEPRINT.md`
8
+ - `.jskit/WORKBOARD.md` for per-request progress tracking
9
+
10
+ Do not edit the vendor template in `node_modules/` directly.
4
11
 
5
12
  The blueprint must capture at least:
6
13
 
@@ -15,12 +22,17 @@ The blueprint must capture at least:
15
22
  - package install plan
16
23
  - generator plan
17
24
  - custom-code areas
25
+ - delivery plan broken into chunks
18
26
 
19
27
  Scoping rules:
20
28
 
21
29
  - Use `guide/agent/index.md` for fast navigation and `guide/human/index.md` for exact details.
22
30
  - Inspect packages and generators before choosing them.
23
31
  - Decide ownership early; do not treat it as a UI-only detail.
32
+ - If Stage 1 platform choices are still provisional, finish them before installing tenancy-sensitive runtime packages.
33
+ - Create or refresh `.jskit/WORKBOARD.md` for substantial or multi-chunk work so the request has an explicit execution tracker.
34
+ - Break delivery into chunks that can be independently reviewed and tested.
35
+ - One CRUD is usually one chunk. Platform setup, shell work, and cross-cutting integrations may also be separate chunks.
24
36
  - If the package/runtime choice is unclear, stop and resolve it before writing implementation code.
25
37
 
26
- No feature implementation should start until the blueprint covers database, screens, and functional boundaries well enough that the implementation path is obvious.
38
+ No feature implementation should start until the blueprint covers database, screens, functional boundaries, and chunk plan well enough that the implementation path is obvious.
@@ -0,0 +1,29 @@
1
+ # Workboard Workflow
2
+
3
+ Use a workboard for any substantial request, especially:
4
+
5
+ - new app builds
6
+ - multi-chunk feature work
7
+ - requests that need scoping before coding
8
+ - requests where verification spans several steps
9
+
10
+ Recommended location:
11
+
12
+ - `.jskit/WORKBOARD.md`
13
+
14
+ Use `templates/WORKBOARD.md` as the starting template.
15
+
16
+ Purpose:
17
+
18
+ - track the current request
19
+ - record the current stage and current chunk
20
+ - track chunk status across implementation, deslop, JSKIT review, and verification
21
+ - record blockers, open questions, and remaining gaps
22
+
23
+ Workboard rules:
24
+
25
+ - The workboard is the execution tracker for the current request.
26
+ - The blueprint remains the durable product and architecture record.
27
+ - Keep the workboard concise and current.
28
+ - Update it when stage, chunk, blockers, or verification state changes.
29
+ - When the request finishes, either reset it for the next request or leave a short final state that makes completion obvious.