@ui8kit/uxdx 0.1.0 → 0.1.2

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,20 +1,33 @@
1
1
  # UXDX
2
2
 
3
- CLI to accumulate operator and developer experience packs. One binary, two
4
- commands. Package name: [`@ui8kit/uxdx`](https://www.npmjs.com/package/@ui8kit/uxdx).
3
+ CLI for operator files and SDLC harness packs. One binary (`uxdx`), two
4
+ commands. Package: [`@ui8kit/uxdx`](https://www.npmjs.com/package/@ui8kit/uxdx).
5
5
 
6
- Homepage: [github.com/ui8kit/uxdx](https://github.com/ui8kit/uxdx)
6
+ Repo: [github.com/ui8kit/uxdx](https://github.com/ui8kit/uxdx)
7
7
 
8
- ```text
8
+ ## Run
9
+
10
+ Prefer Bun (no Node `punycode` warning from `npx`):
11
+
12
+ ```bash
13
+ bunx @ui8kit/uxdx --help
14
+ bunx @ui8kit/uxdx -p
15
+ bunx @ui8kit/uxdx -s --level light
16
+ ```
17
+
18
+ Same via npm:
19
+
20
+ ```bash
9
21
  npx @ui8kit/uxdx --help
10
- npx @ui8kit/uxdx project | p | -p | --project [init] [--dir <path>] [--rules] [--force]
11
- npx @ui8kit/uxdx sdlc | s | -s | --sdlc [init] [--dir <path>] --level light|core|full [--force] [--no-install]
22
+ npx @ui8kit/uxdx -p
23
+ npx @ui8kit/uxdx -s --level light
12
24
  ```
13
25
 
14
- Same via Bun: `bunx @ui8kit/uxdx --help`.
26
+ `npx` may print `DEP0040` / `punycode`. That comes from npm’s Node, not this
27
+ CLI. The command still runs if you then see `uxdx: project init` or
28
+ `uxdx: sdlc …`.
15
29
 
16
- The binary is still `uxdx`. After a local or global install you can call it
17
- without the scope:
30
+ After a local or global install the binary is unscoped:
18
31
 
19
32
  ```bash
20
33
  npm i -g @ui8kit/uxdx
@@ -24,15 +37,78 @@ npm i -D @ui8kit/uxdx
24
37
  npx uxdx --help
25
38
  ```
26
39
 
27
- - `project` writes `README.md`, `.gitignore`, `.cursorignore`, and `.manual/`.
28
- - `sdlc` copies a vendored harness pack into `.sdlc/`. `--level` is required.
29
- - After copy, `sdlc` runs `.sdlc/sdlc.sh install` unless `--no-install`.
40
+ ## Commands
41
+
42
+ Aliases are equivalent. `init` is the default and may be omitted.
43
+
44
+ ```text
45
+ uxdx [--help]
46
+ uxdx project | p | -p | --project [init] [--dir <path>] [--rules] [--force]
47
+ uxdx sdlc | s | -s | --sdlc [init] [--dir <path>] --level light|core|full [--force] [--no-install]
48
+ ```
49
+
50
+ | Flag | Command | Meaning |
51
+ | --- | --- | --- |
52
+ | `--dir <path>` | both | Target repo (default: cwd) |
53
+ | `--force` | both | Overwrite files this tool owns |
54
+ | `--rules` | `project` | Stub `.cursor/rules/uxdx.mdc` if missing |
55
+ | `--level` | `sdlc` | Required: `light`, `core`, or `full` |
56
+ | `--no-install` | `sdlc` | Copy `.sdlc/` only; skip `sdlc.sh install` |
57
+
58
+ ### `project` (`-p`)
59
+
60
+ Writes the default operator layout. Existing filled files are left alone
61
+ unless `--force`. If `.manual/` already exists, it is not touched.
62
+
63
+ ```bash
64
+ bunx @ui8kit/uxdx -p
65
+ bunx @ui8kit/uxdx -p --dir ./my-repo --rules
66
+ ```
67
+
68
+ Creates or updates:
69
+
70
+ - `README.md` (only if missing)
71
+ - `.gitignore` (`.manual/*` + `!.manual/.gitkeep`)
72
+ - `.cursorignore` (`.manual/`)
73
+ - `.project/README.md` stub
74
+ - `.manual/.gitkeep` (only if `.manual/` is missing)
30
75
 
31
- ## Local
76
+ Success:
77
+
78
+ ```text
79
+ uxdx: project init in <dir>
80
+ README.md
81
+ .gitignore
82
+ .cursorignore
83
+ .project/
84
+ .manual/
85
+ ```
86
+
87
+ ### `sdlc` (`-s`)
88
+
89
+ Copies one vendored pack into `.sdlc/`. `--level` is required (no silent
90
+ `full`). Then runs `.sdlc/sdlc.sh install` unless `--no-install`.
91
+
92
+ ```bash
93
+ bunx @ui8kit/uxdx -s --level light
94
+ bunx @ui8kit/uxdx -s --level core --dir ./my-repo
95
+ bunx @ui8kit/uxdx -s --level full --no-install
96
+ ```
97
+
98
+ Do not stack two levels in one repo. Use `--force` only to replace a
99
+ different level.
100
+
101
+ Pack source: `packages/sdlc/harness/`.
102
+
103
+ ## This checkout
32
104
 
33
105
  ```bash
34
106
  bun install
35
107
  bun test
36
- bun run uxdx -- --help
37
108
  bun run build
109
+ bun run uxdx -- --help
110
+ bun run uxdx -- -p --help
111
+ bun run uxdx -- -s --help
38
112
  ```
113
+
114
+ `--` after `bun run uxdx` is required so flags go to the CLI, not to Bun.
package/dist/uxdx.mjs CHANGED
@@ -1,6 +1,3 @@
1
- import { createRequire } from "node:module";
2
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
3
-
4
1
  // packages/cli/src/parse.ts
5
2
  var LEVELS = new Set(["light", "core", "full"]);
6
3
  function takeFlag(rest, name) {
@@ -91,7 +88,7 @@ Usage:
91
88
  uxdx project | p | -p | --project [init] [--dir <path>] [--rules] [--force]
92
89
  uxdx sdlc | s | -s | --sdlc [init] [--dir <path>] --level light|core|full [--force] [--no-install]
93
90
 
94
- -p / --project Scaffold README, ignores, and .manual/
91
+ -p / --project Scaffold README, ignores, and .manual/.gitkeep if missing
95
92
  -s / --sdlc Install an SDLC harness pack into .sdlc/
96
93
 
97
94
  Run uxdx project --help or uxdx sdlc --help for command flags.
@@ -141,6 +138,35 @@ function writeIfMissing(file, body, force) {
141
138
  return;
142
139
  writeFileSync(file, body);
143
140
  }
141
+ function ensureManualGitignore(file) {
142
+ const block = `.manual/*
143
+ !.manual/.gitkeep
144
+ `;
145
+ if (!existsSync(file)) {
146
+ writeFileSync(file, block);
147
+ return;
148
+ }
149
+ const cur = readFileSync(file, "utf8");
150
+ const lines = cur.split(/\r?\n/);
151
+ if (lines.some((l) => l.trim() === ".manual/*")) {
152
+ ensureLine(file, "!.manual/.gitkeep", false);
153
+ return;
154
+ }
155
+ const withoutFull = lines.filter((l) => l.trim() !== ".manual/");
156
+ const next = withoutFull.join(`
157
+ `);
158
+ const nl = next.endsWith(`
159
+ `) || next.length === 0 ? "" : `
160
+ `;
161
+ writeFileSync(file, `${next}${nl}${block}`);
162
+ }
163
+ function ensureManualDir(root) {
164
+ const dir = join(root, ".manual");
165
+ if (existsSync(dir))
166
+ return;
167
+ mkdirSync(dir, { recursive: true });
168
+ writeFileSync(join(dir, ".gitkeep"), "");
169
+ }
144
170
  function initProject(opts) {
145
171
  const root = opts.dir;
146
172
  mkdirSync(root, { recursive: true });
@@ -150,7 +176,7 @@ function initProject(opts) {
150
176
  writeIfMissing(readme, `# ${name}
151
177
  `, opts.force);
152
178
  done.push("README.md");
153
- ensureLine(join(root, ".gitignore"), ".manual/", opts.force);
179
+ ensureManualGitignore(join(root, ".gitignore"));
154
180
  done.push(".gitignore");
155
181
  ensureLine(join(root, ".cursorignore"), ".manual/", opts.force);
156
182
  done.push(".cursorignore");
@@ -161,7 +187,7 @@ function initProject(opts) {
161
187
  Operator notes for this repository. See \`intent.md\` when present.
162
188
  `, opts.force);
163
189
  done.push(".project/");
164
- mkdirSync(join(root, ".manual"), { recursive: true });
190
+ ensureManualDir(root);
165
191
  done.push(".manual/");
166
192
  if (opts.rules) {
167
193
  const rulesDir = join(root, ".cursor", "rules");
@@ -288,9 +314,6 @@ function run(argv) {
288
314
  return 1;
289
315
  }
290
316
  }
291
- if (__require.main == __require.module) {
292
- process.exit(run(process.argv));
293
- }
294
- export {
295
- run
296
- };
317
+
318
+ // packages/cli/src/bin.ts
319
+ process.exit(run(process.argv));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ui8kit/uxdx",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "CLI to accumulate operator and developer experience packs",
5
5
  "type": "module",
6
6
  "bin": {
@@ -37,8 +37,8 @@
37
37
  "license": "MIT",
38
38
  "homepage": "https://github.com/ui8kit/uxdx",
39
39
  "scripts": {
40
- "build": "bun build packages/cli/src/main.ts --outfile dist/uxdx.mjs --target node",
41
- "uxdx": "bun packages/cli/src/main.ts",
40
+ "build": "bun build packages/cli/src/bin.ts --outfile dist/uxdx.mjs --target node",
41
+ "uxdx": "bun packages/cli/src/bin.ts",
42
42
  "test": "bun test",
43
43
  "prepack": "bun run build",
44
44
  "prepublishOnly": "bun test && bun run build",
@@ -1,18 +1,28 @@
1
1
  # SDLC harness packs (solo)
2
2
 
3
- Copy-paste packs for the AI-native loop, sized for one operator. Source method:
4
- [`.manual/sdlc-en`](../.manual/sdlc-en/README.md). Which product gets which pack:
5
- [`.project/sdlc-scope.md`](../.project/sdlc-scope.md).
3
+ Copy-ready packs for the AI-native loop, sized for one operator. Method:
4
+ [The AI-Native SDLC Playbook](https://academy.claude.com/courses/ai-native-sdlc-playbook)
5
+ (public course). Map `plan.md` / `CLAUDE.md` onto Cursor Plan mode and
6
+ `AGENTS.md`.
6
7
 
7
- Later this tree can move to its own repo or a CLI (`sdlc init --level full`).
8
- Until then the consumer copies **one** pack into **`.sdlc/`**.
8
+ This tree is the source of truth. Install a pack with the published CLI:
9
+
10
+ ```text
11
+ npx @ui8kit/uxdx sdlc --level light|core|full
12
+ ```
13
+
14
+ That copies **one** pack into the target repo’s `.sdlc/` and, unless
15
+ `--no-install`, overlays Cursor rules/skills and merges `AGENTS.md`.
16
+ Never stack two levels. Do not copy this tree by hand.
17
+
18
+ Package: [`@ui8kit/uxdx`](https://www.npmjs.com/package/@ui8kit/uxdx)
9
19
 
10
20
  ## How it works
11
21
 
12
22
  ```
13
- hinddy/brainstorm/.harness-sdlc/<level>/ (this gym)
23
+ @ui8kit/uxdx packages/sdlc/harness/<level>/
14
24
 
15
- copy (do not merge levels)
25
+ npx @ui8kit/uxdx sdlc --level <level>
16
26
 
17
27
  your-repo/.sdlc/ artifacts + overlay text
18
28
 
@@ -23,9 +33,15 @@ your-repo/.sdlc/ artifacts + overlay text
23
33
  └── cursor/rules/ copy → .cursor/rules/
24
34
  ```
25
35
 
26
- 1. Pick **full**, **core**, or **light** from `sdlc-scope.md`. Never stack two packs.
27
- 2. Copy the pack directory contents into `<repo>/.sdlc/` (keep `manifest.yaml`).
28
- 3. **Activate Cursor** (rules/skills are not loaded from `.sdlc` by default):
36
+ 1. Pick **full**, **core**, or **light**. Never stack two packs.
37
+ 2. Run `npx @ui8kit/uxdx sdlc --level <level>` (add `--dir` if needed).
38
+ 3. **Activate Cursor** is done by `sdlc.sh install` (default). To copy only:
39
+
40
+ ```text
41
+ npx @ui8kit/uxdx sdlc --level <level> --no-install
42
+ ```
43
+
44
+ then overlay yourself:
29
45
 
30
46
  ```bash
31
47
  mkdir -p .cursor/rules .cursor/skills
@@ -33,26 +49,29 @@ your-repo/.sdlc/ artifacts + overlay text
33
49
  cp -R .sdlc/skills/* .cursor/skills/
34
50
  ```
35
51
 
36
- 4. **AGENTS.md**: if the repo already has a product `AGENTS.md` (SiteStarter, YPanel, …), **append** a short pointer. Do not replace stack-contract text. If there is no root file, copy `.sdlc/AGENTS.md` to the repo root.
37
- 5. For each change: copy `intent.md` / `spec.md` / `plan.md` into `.sdlc/changes/<slug>/` and fill them. Leave the pack-root files as templates.
38
- 6. Existing product rules (`.cursor/rules/stack-contract.mdc`, …) stay. The harness adds SDLC rules; it does not own Codex IA.
52
+ 4. **AGENTS.md**: if the repo already has one, the install **appends** a
53
+ marked overlay. Do not replace product contract text. If there is no root
54
+ file, install writes `.sdlc/AGENTS.md` to the repo root.
55
+ 5. For each change: copy templates into `.sdlc/changes/<slug>/` (`sdlc.sh
56
+ start <slug>`) and fill them. Leave the pack-root files as templates.
57
+ 6. Existing product rules stay. The harness adds SDLC rules only.
39
58
 
40
- Human still merges. The agent writes artifacts and code; you accept `plan.md` before a large diff.
59
+ Human still merges. The agent writes artifacts and code; you accept `plan.md`
60
+ before a large diff.
41
61
 
42
62
  ## Levels
43
63
 
44
64
  | Pack | Use when | Artifacts | Extra |
45
65
  | --- | --- | --- | --- |
46
- | `light/` | Product on an existing contract; small blast radius | `plan.md` required; `intent.md` optional; skip `spec.md` unless IA changes | No evals, no maintain bands |
47
- | `core/` | Kernel, API, ARIA, shared library | `intent.md` + `plan.md`; compressed `spec.md` on boundary changes | Invariant skills; short `REVIEW.md` |
48
- | `full/` | Portable Codex path, YPanel, anything that ships + is pinned | Full chain including `spec.md` | `REVIEW.md`, `evals/` stub, `bands.yaml` stub |
49
-
50
- ## Future CLI (not built)
66
+ | `light/` | Product already has a contract; small blast radius | `plan.md` required; `intent.md` optional; skip `spec.md` unless the public contract changes | No evals, no maintain bands |
67
+ | `core/` | Kernel, API, or shared library | `intent.md` + `plan.md`; short `spec.md` on boundary changes | Invariant skills; short `REVIEW.md` |
68
+ | `full/` | Shipping product or high-stakes operator surface | Full chain including `spec.md` | `REVIEW.md`, `evals/` stub, `bands.yaml` stub |
51
69
 
52
- Suggested commands, matching `manifest.yaml` in each pack:
70
+ ## Commands
53
71
 
54
- - `sdlc init --level full` → copy pack to `.sdlc`, overlay rules/skills, patch root `AGENTS.md` between markers
55
- - `sdlc change start <slug>` → copy templates into `.sdlc/changes/<slug>/`
56
- - `sdlc change accept` → remind to commit artifacts with the diff
57
-
58
- Do not invent a second content REST or product kinds from this harness.
72
+ ```text
73
+ npx @ui8kit/uxdx sdlc --level full
74
+ bash .sdlc/sdlc.sh install
75
+ bash .sdlc/sdlc.sh start <slug>
76
+ bash .sdlc/sdlc.sh status
77
+ ```
@@ -1,7 +1,7 @@
1
1
  <!-- sdlc-harness:begin -->
2
2
  ## SDLC harness (core)
3
3
 
4
- This repo uses the **core** pack (`.harness-sdlc/core` `.sdlc/`).
4
+ This repo uses the **core** pack from [`@ui8kit/uxdx`](https://www.npmjs.com/package/@ui8kit/uxdx) (`.sdlc/`).
5
5
 
6
6
  - Boundary, API, and policy changes: `intent.md` + short `spec.md` + `plan.md`.
7
7
  - Mechanical fixes: `plan.md` only, still name the invariant you must not break.
@@ -1,9 +1,12 @@
1
1
  # Core harness
2
2
 
3
3
  For kernels, shared libraries, and high blast-radius contracts.
4
- Examples: FormSet, Framework, Panel, ui8kit/aria, Context.
5
4
 
6
- Copy this directory to `<repo>/.sdlc/`. Overlay Cursor files — `../README.md`.
5
+ Install:
6
+
7
+ ```text
8
+ npx @ui8kit/uxdx sdlc --level core
9
+ ```
7
10
 
8
11
  ## Per change
9
12
 
@@ -1,7 +1,7 @@
1
1
  <!-- sdlc-harness:begin -->
2
2
  ## SDLC harness (full)
3
3
 
4
- This repo uses the **full** pack (`.harness-sdlc/full` `.sdlc/`).
4
+ This repo uses the **full** pack from [`@ui8kit/uxdx`](https://www.npmjs.com/package/@ui8kit/uxdx) (`.sdlc/`).
5
5
 
6
6
  Loop: accepted `intent.md` → `spec.md` → `plan.md` → diff + existing verify
7
7
  → PR against `.sdlc/REVIEW.md` → you merge. Optional later: `evals/` on
@@ -1,9 +1,12 @@
1
1
  # Full harness
2
2
 
3
- For the portable Codex path and high-stakes operators.
4
- Examples: SiteStarter, GoBackend, SvelteCMS, YPanel.
3
+ For shipping products and high-stakes operator surfaces.
5
4
 
6
- Copy this directory to `<repo>/.sdlc/`. Overlay Cursor files — `../README.md`.
5
+ Install:
6
+
7
+ ```text
8
+ npx @ui8kit/uxdx sdlc --level full
9
+ ```
7
10
 
8
11
  Solo adaptation: no MDM, no weekly committee. You still accept `spec.md` and
9
12
  `plan.md`, merge PRs, and authorize production.
@@ -20,4 +23,4 @@ Solo adaptation: no MDM, no weekly committee. You still accept `spec.md` and
20
23
 
21
24
  ## Per change
22
25
 
23
- `mkdir -p .sdlc/changes/<slug>` and copy `intent.md`, `spec.md`, `plan.md`.
26
+ `bash .sdlc/sdlc.sh start <slug>` (copies `intent.md`, `spec.md`, `plan.md`).
@@ -12,6 +12,6 @@ repo, for example:
12
12
  Keep approval prompts off the build hot path so parallel sessions are not
13
13
  serialized. Production gates belong at deploy, not on every file save.
14
14
 
15
- Example PreToolUse shape lives in the playbook
16
- (`.manual/sdlc-en/10-hooks-as-approval-gates.md`). Do not enable managed-only
17
- enterprise settings unless you actually operate MDM.
15
+ Example PreToolUse shape lives in the public playbook
16
+ ([hooks as approval gates](https://academy.claude.com/courses/ai-native-sdlc-playbook/hooks-as-approval-gates)).
17
+ Do not enable managed-only enterprise settings unless you actually operate MDM.
@@ -1,7 +1,7 @@
1
1
  <!-- sdlc-harness:begin -->
2
2
  ## SDLC harness (light)
3
3
 
4
- This repo uses the **light** pack from `hinddy/brainstorm` (`.harness-sdlc/light`).
4
+ This repo uses the **light** pack from [`@ui8kit/uxdx`](https://www.npmjs.com/package/@ui8kit/uxdx).
5
5
  Working copy: `.sdlc/`. Per-change artifacts: `.sdlc/changes/<slug>/`.
6
6
 
7
7
  - Non-trivial work starts in plan mode. Commit `plan.md` before a large diff.
@@ -1,15 +1,17 @@
1
1
  # Light harness
2
2
 
3
- For product repos that already have a contract (`AGENTS.md`, stack rules, tests).
4
- Examples: AlexY OS, GitCourse, Lab, BrandOSS, ui8px-cli, FastyGo UI.
3
+ For product repos that already have a contract (`AGENTS.md`, rules, tests).
5
4
 
6
- Copy this directory to `<repo>/.sdlc/`. Then overlay Cursor files — see
7
- `../README.md`.
5
+ Install:
6
+
7
+ ```text
8
+ npx @ui8kit/uxdx sdlc --level light
9
+ ```
8
10
 
9
11
  ## Per change
10
12
 
11
- 1. `mkdir -p .sdlc/changes/<slug>`
12
- 2. Copy `plan.md` into that folder and fill it.
13
- 3. Add `intent.md` only if the origin is unclear (incident, external request).
14
- 4. Skip `spec.md` unless you are changing published IA or a user-visible contract.
15
- 5. Run the repo's existing verify command before calling the task done.
13
+ 1. `bash .sdlc/sdlc.sh start <slug>` (or `mkdir -p .sdlc/changes/<slug>`).
14
+ 2. Fill `plan.md` in that folder.
15
+ 3. Add `intent.md` only if the origin is unclear.
16
+ 4. Skip `spec.md` unless you are changing a published or user-visible contract.
17
+ 5. Run the repos existing verify command before calling the task done.
@@ -2,7 +2,8 @@
2
2
  name: sdlc-light
3
3
  description: >-
4
4
  Light AI-native SDLC for a solo developer. Use when planning or implementing
5
- work in a repo that copied .harness-sdlc/light into .sdlc. Write plan.md,
5
+ work in a repo whose `.sdlc` was installed with `@ui8kit/uxdx` at level
6
+ light. Write plan.md,
6
7
  skip spec.md unless IA changes, run existing verify commands.
7
8
  ---
8
9