@joshuafolkken/kit 1.1005.0 → 1.1010.0

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @joshuafolkken/kit
2
2
 
3
- A development toolkit for AI-assisted work. `josh start` (or `josh init`, for a project that will not use the GitHub Issue workflow) gives an AI assistant (Claude Code, Codex, Gemini, Cursor) the project's rules, formatting and checks in one command. With `kickoff`, `fullrun` and `backlogrun`, the agent then takes a GitHub Issue through plan → implement → verify → PR → merge, the same way in every project. Why kit exists: [why.md](./docs/why.md) (Japanese).
3
+ A development toolkit for AI-assisted work. One command gives an AI assistant (Claude Code, Codex, Gemini, Cursor) the project's rules, formatting and checks. With `kickoff`, `fullrun` and `backlogrun`, the agent then takes a GitHub Issue through plan → implement → verify → PR → merge, the same way in every project. Why kit exists: [why.md](./docs/why.md) (Japanese).
4
4
 
5
5
  ## What your project gets
6
6
 
@@ -16,29 +16,27 @@ In a `basic` project, `josh` skips each check that has nothing to run and says w
16
16
 
17
17
  ## Quick start
18
18
 
19
- Requires [Node.js](https://nodejs.org/) 22.19.0+ and [pnpm](https://pnpm.io/) 12+ for every profile ([how to install them](./docs/setup/basic.md#1-check-the-prerequisites)); the [gh CLI](https://cli.github.com/) for `josh version` and the Issue workflow is required by `josh start` and optional otherwise. Run in your project directory.
19
+ Requires [Node.js](https://nodejs.org/) 22.19.0+ and [pnpm](https://pnpm.io/) 12+ ([how to install them](./docs/setup/basic.md#1-check-the-prerequisites)). `josh start` also requires the [gh CLI](https://cli.github.com/). Run in your project directory.
20
20
 
21
- One question picks the command: will the project use the GitHub Issue workflow (`kickoff`, `fullrun`, `backlogrun`)? The [profile](./docs/init.md#project-profiles) is chosen the same way either way.
21
+ Pick by one question: will the project use the GitHub Issue workflow (`kickoff`, `fullrun`, `backlogrun`)?
22
22
 
23
- ### The project will use the GitHub Issue workflow
23
+ ### With the GitHub Issue workflow
24
24
 
25
25
  ```bash
26
26
  pnpm add -D --allow-build=esbuild --allow-build=unrs-resolver @joshuafolkken/kit
27
27
  pnpm exec josh start
28
28
  ```
29
29
 
30
- With or without Git and a GitHub repository: `josh start` creates what is missing, and when `main` already has commits it opens a pull request with only kit's files for you to merge.
30
+ `josh start` creates the Git and GitHub repositories if missing. If `main` already has commits, it opens a pull request with only kit's files for you to merge.
31
31
 
32
- ### The project will not use the GitHub Issue workflow
32
+ ### Without the GitHub Issue workflow
33
33
 
34
34
  ```bash
35
35
  pnpm --allow-build=esbuild dlx @joshuafolkken/kit init
36
36
  pnpm josh gate
37
37
  ```
38
38
 
39
- What each command does in each starting state: [init.md → `josh init` or `josh start`](./docs/init.md#josh-init-or-josh-start).
40
-
41
- The step-by-step version of these commands, with what each one creates: [Set up the basic profile](./docs/setup/basic.md) · [Set up the full profile](./docs/setup/full.md).
39
+ Details: [what each command does in each starting state](./docs/init.md#josh-init-or-josh-start) · step by step: [basic profile](./docs/setup/basic.md) · [full profile](./docs/setup/full.md).
42
40
 
43
41
  ## Documentation
44
42
 
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1005.0",
2
+ "version": "1.1010.0",
3
3
  "name": "@joshuafolkken/kit",
4
4
  "description": "Development toolkit for AI-assisted projects: formatting, AI assistant rules and a Git/GitHub Issue workflow for any repository, plus lint, type check, tests and hooks for Node projects",
5
5
  "keywords": [
@@ -208,7 +208,7 @@
208
208
  "eslint-plugin-unicorn": "^76.0.0",
209
209
  "eslint_d": "^15.0.3",
210
210
  "globals": "^17.12.0",
211
- "lefthook": "^2.1.14",
211
+ "lefthook": "^2.1.15",
212
212
  "prettier": "^3.9.9",
213
213
  "prettier-plugin-svelte": "^4.1.1",
214
214
  "prettier-plugin-tailwindcss": "^0.8.1",
@@ -101,20 +101,32 @@ function did_skip_copy_if_absent(
101
101
  return false
102
102
  }
103
103
 
104
- function did_skip_workspace_yaml_copy(source_path: string, destination_path: string): boolean {
105
- if (!existsSync(destination_path)) {
106
- copy_ai_file(source_path, destination_path)
107
- console.info(` ✔ created ${WORKSPACE_YAML}`)
108
-
109
- return false
110
- }
111
-
104
+ // The merged file is written back, and reported as `updated`, only when the merge changed it — a
105
+ // second `josh init` over an already-merged file reports `unchanged` (joshuafolkken/kit#2873).
106
+ function merge_existing_workspace_yaml(source_path: string, destination_path: string): void {
112
107
  const template = readFileSync(source_path, 'utf8')
113
108
  const existing = readFileSync(destination_path, 'utf8')
114
109
  const merged = init_logic.merge_workspace_yaml(existing, template)
115
110
 
116
- if (merged !== existing) writeFileSync(destination_path, merged)
111
+ if (merged === existing) {
112
+ console.info(` ✔ unchanged ${WORKSPACE_YAML}`)
113
+
114
+ return
115
+ }
116
+
117
+ writeFileSync(destination_path, merged)
117
118
  console.info(` ✔ updated ${WORKSPACE_YAML}`)
119
+ }
120
+
121
+ function did_skip_workspace_yaml_copy(source_path: string, destination_path: string): boolean {
122
+ if (existsSync(destination_path)) {
123
+ merge_existing_workspace_yaml(source_path, destination_path)
124
+
125
+ return false
126
+ }
127
+
128
+ copy_ai_file(source_path, destination_path)
129
+ console.info(` ✔ created ${WORKSPACE_YAML}`)
118
130
 
119
131
  return false
120
132
  }