@ui8kit/uxdx 0.1.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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/dist/uxdx.mjs +296 -0
  4. package/package.json +53 -0
  5. package/packages/sdlc/harness/README.md +58 -0
  6. package/packages/sdlc/harness/core/AGENTS.md +12 -0
  7. package/packages/sdlc/harness/core/README.md +15 -0
  8. package/packages/sdlc/harness/core/REVIEW.md +18 -0
  9. package/packages/sdlc/harness/core/changes/README.md +4 -0
  10. package/packages/sdlc/harness/core/cursor/rules/sdlc-core.mdc +15 -0
  11. package/packages/sdlc/harness/core/install.sh +3 -0
  12. package/packages/sdlc/harness/core/intent.md +25 -0
  13. package/packages/sdlc/harness/core/manifest.yaml +15 -0
  14. package/packages/sdlc/harness/core/plan.md +25 -0
  15. package/packages/sdlc/harness/core/sdlc.sh +230 -0
  16. package/packages/sdlc/harness/core/skills/sdlc-invariants/SKILL.md +20 -0
  17. package/packages/sdlc/harness/core/skills/sdlc-plan/SKILL.md +15 -0
  18. package/packages/sdlc/harness/core/spec.md +24 -0
  19. package/packages/sdlc/harness/core/start.sh +3 -0
  20. package/packages/sdlc/harness/full/AGENTS.md +15 -0
  21. package/packages/sdlc/harness/full/README.md +23 -0
  22. package/packages/sdlc/harness/full/REVIEW.md +19 -0
  23. package/packages/sdlc/harness/full/bands.yaml +13 -0
  24. package/packages/sdlc/harness/full/changes/README.md +4 -0
  25. package/packages/sdlc/harness/full/cursor/rules/sdlc-full.mdc +17 -0
  26. package/packages/sdlc/harness/full/evals/README.md +16 -0
  27. package/packages/sdlc/harness/full/hooks/README.md +17 -0
  28. package/packages/sdlc/harness/full/install.sh +3 -0
  29. package/packages/sdlc/harness/full/intent.md +26 -0
  30. package/packages/sdlc/harness/full/manifest.yaml +17 -0
  31. package/packages/sdlc/harness/full/plan.md +30 -0
  32. package/packages/sdlc/harness/full/sdlc.sh +230 -0
  33. package/packages/sdlc/harness/full/skills/sdlc-feedback/SKILL.md +18 -0
  34. package/packages/sdlc/harness/full/skills/sdlc-loop/SKILL.md +21 -0
  35. package/packages/sdlc/harness/full/skills/sdlc-review/SKILL.md +15 -0
  36. package/packages/sdlc/harness/full/spec.md +28 -0
  37. package/packages/sdlc/harness/full/start.sh +3 -0
  38. package/packages/sdlc/harness/light/AGENTS.md +13 -0
  39. package/packages/sdlc/harness/light/README.md +15 -0
  40. package/packages/sdlc/harness/light/changes/README.md +6 -0
  41. package/packages/sdlc/harness/light/cursor/rules/sdlc-light.mdc +16 -0
  42. package/packages/sdlc/harness/light/install.sh +3 -0
  43. package/packages/sdlc/harness/light/intent.md +24 -0
  44. package/packages/sdlc/harness/light/manifest.yaml +15 -0
  45. package/packages/sdlc/harness/light/plan.md +28 -0
  46. package/packages/sdlc/harness/light/sdlc.sh +230 -0
  47. package/packages/sdlc/harness/light/skills/sdlc-light/SKILL.md +30 -0
  48. package/packages/sdlc/harness/light/spec.md +23 -0
  49. package/packages/sdlc/harness/light/start.sh +3 -0
@@ -0,0 +1,230 @@
1
+ #!/usr/bin/env bash
2
+ # Run from a product repo after this pack is copied to .sdlc/
3
+ # .sdlc/sdlc.sh install
4
+ # .sdlc/sdlc.sh start <slug>
5
+ # .sdlc/sdlc.sh status
6
+ set -euo pipefail
7
+
8
+ SDLC_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
9
+ REPO_ROOT="$(CDPATH= cd -- "$SDLC_DIR/.." && pwd)"
10
+ MANIFEST="$SDLC_DIR/manifest.yaml"
11
+ BEGIN='<!-- sdlc-harness:begin -->'
12
+ END='<!-- sdlc-harness:end -->'
13
+
14
+ die() { printf 'sdlc: %s\n' "$*" >&2; exit 1; }
15
+
16
+ need_manifest() {
17
+ [[ -f "$MANIFEST" ]] || die "missing $MANIFEST (copy a harness pack into .sdlc/)"
18
+ }
19
+
20
+ level() {
21
+ awk '/^level:[[:space:]]/ { print $2; exit }' "$MANIFEST"
22
+ }
23
+
24
+ warn_location() {
25
+ local base
26
+ base="$(basename -- "$SDLC_DIR")"
27
+ if [[ "$base" != ".sdlc" ]]; then
28
+ printf 'sdlc: warning: script dir is %s (expected .sdlc in a product repo)\n' "$SDLC_DIR" >&2
29
+ fi
30
+ }
31
+
32
+ usage() {
33
+ cat <<EOF
34
+ Usage: .sdlc/sdlc.sh <command>
35
+
36
+ install Overlay Cursor rules/skills; merge AGENTS.md at repo root
37
+ start <slug> [opts] Copy templates into .sdlc/changes/<slug>/
38
+ status Show level, overlay, and changes
39
+
40
+ start options:
41
+ --force Overwrite files that already exist in the change folder
42
+ --intent Also copy intent.md (light/core; full always copies it)
43
+ --spec Also copy spec.md (light; core/full as below)
44
+ --boundary core: copy intent.md + spec.md + plan.md
45
+
46
+ Repo root is the parent of this .sdlc directory:
47
+ $REPO_ROOT
48
+ EOF
49
+ }
50
+
51
+ copy_rules() {
52
+ local src="$SDLC_DIR/cursor/rules" dest="$REPO_ROOT/.cursor/rules" f
53
+ [[ -d "$src" ]] || die "missing $src"
54
+ mkdir -p "$dest"
55
+ shopt -s nullglob
56
+ for f in "$src"/*.mdc; do
57
+ cp -- "$f" "$dest/"
58
+ printf 'sdlc: rule %s\n' "$dest/$(basename -- "$f")"
59
+ done
60
+ shopt -u nullglob
61
+ }
62
+
63
+ copy_skills() {
64
+ local src="$SDLC_DIR/skills" dest="$REPO_ROOT/.cursor/skills" d name
65
+ [[ -d "$src" ]] || die "missing $src"
66
+ mkdir -p "$dest"
67
+ shopt -s nullglob
68
+ for d in "$src"/*/; do
69
+ name="$(basename -- "$d")"
70
+ rm -rf -- "$dest/$name"
71
+ cp -R -- "$d" "$dest/$name"
72
+ printf 'sdlc: skill %s\n' "$dest/$name"
73
+ done
74
+ shopt -u nullglob
75
+ }
76
+
77
+ merge_agents() {
78
+ local overlay="$SDLC_DIR/AGENTS.md" dest="$REPO_ROOT/AGENTS.md" tmp
79
+ [[ -f "$overlay" ]] || die "missing $overlay"
80
+ if [[ ! -f "$dest" ]]; then
81
+ cp -- "$overlay" "$dest"
82
+ printf 'sdlc: created %s\n' "$dest"
83
+ return
84
+ fi
85
+ tmp="$(mktemp)"
86
+ if grep -F -q -- "$BEGIN" "$dest"; then
87
+ awk -v begin="$BEGIN" -v end="$END" -v overlay="$overlay" '
88
+ BEGIN {
89
+ while ((getline line < overlay) > 0) { o = o line "\n" }
90
+ close(overlay)
91
+ }
92
+ index($0, begin) == 1 {
93
+ printf "%s", o
94
+ skip = 1
95
+ next
96
+ }
97
+ skip {
98
+ if (index($0, end) == 1) skip = 0
99
+ next
100
+ }
101
+ { print }
102
+ ' "$dest" >"$tmp"
103
+ else
104
+ cat -- "$dest" >"$tmp"
105
+ printf '\n' >>"$tmp"
106
+ cat -- "$overlay" >>"$tmp"
107
+ fi
108
+ mv -- "$tmp" "$dest"
109
+ printf 'sdlc: merged overlay into %s\n' "$dest"
110
+ }
111
+
112
+ cmd_install() {
113
+ need_manifest
114
+ warn_location
115
+ copy_rules
116
+ copy_skills
117
+ merge_agents
118
+ printf 'sdlc: install done (level %s) repo %s\n' "$(level)" "$REPO_ROOT"
119
+ }
120
+
121
+ valid_slug() {
122
+ [[ "$1" =~ ^[a-z0-9][a-z0-9-]*$ ]] || die "slug must be kebab-case: $1"
123
+ }
124
+
125
+ copy_template() {
126
+ local src="$SDLC_DIR/$1" dest="$2/$1"
127
+ [[ -f "$src" ]] || die "missing template $src"
128
+ if [[ -e "$dest" && "$FORCE" -eq 0 ]]; then
129
+ printf 'sdlc: skip existing %s (use --force)\n' "$dest"
130
+ return
131
+ fi
132
+ cp -- "$src" "$dest"
133
+ printf 'sdlc: %s\n' "$dest"
134
+ }
135
+
136
+ cmd_start() {
137
+ need_manifest
138
+ warn_location
139
+ local slug="" with_intent=0 with_spec=0 boundary=0
140
+ FORCE=0
141
+ while [[ $# -gt 0 ]]; do
142
+ case "$1" in
143
+ --force) FORCE=1; shift ;;
144
+ --intent) with_intent=1; shift ;;
145
+ --spec) with_spec=1; shift ;;
146
+ --boundary) boundary=1; shift ;;
147
+ --help|-h) usage; exit 0 ;;
148
+ -*) die "unknown option $1" ;;
149
+ *)
150
+ [[ -z "$slug" ]] || die "unexpected argument $1"
151
+ slug="$1"
152
+ shift
153
+ ;;
154
+ esac
155
+ done
156
+ [[ -n "$slug" ]] || die "start requires <slug>"
157
+ valid_slug "$slug"
158
+
159
+ local lvl dest
160
+ lvl="$(level)"
161
+ dest="$SDLC_DIR/changes/$slug"
162
+ mkdir -p "$dest"
163
+
164
+ case "$lvl" in
165
+ light)
166
+ copy_template plan.md "$dest"
167
+ [[ "$with_intent" -eq 1 ]] && copy_template intent.md "$dest"
168
+ [[ "$with_spec" -eq 1 ]] && copy_template spec.md "$dest"
169
+ ;;
170
+ core)
171
+ copy_template plan.md "$dest"
172
+ if [[ "$boundary" -eq 1 || "$with_intent" -eq 1 || "$with_spec" -eq 1 ]]; then
173
+ copy_template intent.md "$dest"
174
+ copy_template spec.md "$dest"
175
+ fi
176
+ ;;
177
+ full)
178
+ copy_template intent.md "$dest"
179
+ copy_template spec.md "$dest"
180
+ copy_template plan.md "$dest"
181
+ ;;
182
+ *)
183
+ die "unknown level in manifest: $lvl"
184
+ ;;
185
+ esac
186
+ printf 'sdlc: change %s ready under %s\n' "$slug" "$dest"
187
+ }
188
+
189
+ cmd_status() {
190
+ need_manifest
191
+ warn_location
192
+ local lvl
193
+ lvl="$(level)"
194
+ printf 'level: %s\n' "$lvl"
195
+ printf 'sdlc dir: %s\n' "$SDLC_DIR"
196
+ printf 'repo: %s\n' "$REPO_ROOT"
197
+ if [[ -f "$REPO_ROOT/AGENTS.md" ]] && grep -F -q -- "$BEGIN" "$REPO_ROOT/AGENTS.md"; then
198
+ printf 'AGENTS.md: overlay present\n'
199
+ else
200
+ printf 'AGENTS.md: overlay missing (run install)\n'
201
+ fi
202
+ if [[ -d "$REPO_ROOT/.cursor/rules" ]]; then
203
+ printf 'rules:\n'
204
+ ls -1 "$REPO_ROOT/.cursor/rules"/sdlc-*.mdc 2>/dev/null || printf ' (no sdlc-*.mdc)\n'
205
+ fi
206
+ printf 'changes:\n'
207
+ if [[ -d "$SDLC_DIR/changes" ]]; then
208
+ local d
209
+ shopt -s nullglob
210
+ for d in "$SDLC_DIR/changes"/*/; do
211
+ printf ' %s\n' "$(basename -- "$d")"
212
+ done
213
+ shopt -u nullglob
214
+ fi
215
+ }
216
+
217
+ main() {
218
+ local cmd="${1:-}"
219
+ [[ -n "$cmd" ]] || { usage; exit 1; }
220
+ shift || true
221
+ case "$cmd" in
222
+ install) cmd_install "$@" ;;
223
+ start) cmd_start "$@" ;;
224
+ status) cmd_status "$@" ;;
225
+ -h|--help|help) usage ;;
226
+ *) die "unknown command $cmd" ;;
227
+ esac
228
+ }
229
+
230
+ main "$@"
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: sdlc-invariants
3
+ description: >-
4
+ Enforce shared-module invariants for core SDLC harness. Use when editing a
5
+ kernel, form library, ARIA contract, or other pinned dependency. Block
6
+ product IA, second APIs, and hand-edits of generated code.
7
+ ---
8
+
9
+ # Core invariants
10
+
11
+ Apply whenever creating or changing a public surface in this repository.
12
+
13
+ 1. Consumers pin this module. Do not add site-specific kinds, carts, or CMS
14
+ schemas so a product can ship a page.
15
+ 2. Do not invent a parallel REST or GraphQL content contract.
16
+ 3. Do not hand-edit generated sources if the repo marks them generated.
17
+ 4. If a policy must always hold, prefer a test or hook over a comment in
18
+ `plan.md`.
19
+ 5. Record the invariant in `.sdlc/changes/<slug>/spec.md` when the contract
20
+ itself changes.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: sdlc-plan
3
+ description: >-
4
+ Write and follow plan.md for core SDLC. Use at the start of implementation
5
+ in a repo with .sdlc/manifest.yaml level core. Interview risks and callers
6
+ before editing.
7
+ ---
8
+
9
+ # Plan mode (core)
10
+
11
+ 1. Read `intent.md` / `spec.md` in `.sdlc/changes/<slug>/` if they exist.
12
+ 2. Produce `plan.md`: files, order, proof commands, blast radius, rollback.
13
+ 3. Do not edit product files until a human accepts the plan (or the change is
14
+ a documented one-line fix).
15
+ 4. If implementation diverges, update `plan.md` in the same commit.
@@ -0,0 +1,24 @@
1
+ # Spec (core — compressed)
2
+
3
+ Intent: `.sdlc/changes/<slug>/intent.md`
4
+
5
+ This is not a product design session. Record the contract so a later `plan.md`
6
+ and PR review can check it.
7
+
8
+ ## Requirements
9
+
10
+ -
11
+
12
+ ## Non-requirements
13
+
14
+ What this library will not absorb from a consumer.
15
+
16
+ ## Concerns
17
+
18
+ Flag contradictions with published API, ARIA, or kernel boundaries. A human
19
+ resolves each flag before implementation.
20
+
21
+ ## Compatibility
22
+
23
+ Callers / pins that must not break:
24
+ -
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ exec "$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)/sdlc.sh" start "$@"
@@ -0,0 +1,15 @@
1
+ <!-- sdlc-harness:begin -->
2
+ ## SDLC harness (full)
3
+
4
+ This repo uses the **full** pack (`.harness-sdlc/full` → `.sdlc/`).
5
+
6
+ Loop: accepted `intent.md` → `spec.md` → `plan.md` → diff + existing verify
7
+ → PR against `.sdlc/REVIEW.md` → you merge. Optional later: `evals/` on
8
+ harness-file changes, `bands.yaml` only if metrics already exist.
9
+
10
+ - Skills: `sdlc-loop`, `sdlc-feedback`, `sdlc-review`. Rule: `sdlc-full.mdc`.
11
+ - Start non-trivial sessions in plan mode. Auto-apply edits only after the
12
+ plan is accepted and tests exist for the blast radius.
13
+ - Do not replace this overlay with a second product contract. Stack rules win.
14
+ - Production deploy stays a human gate (release owner / existing runbooks).
15
+ <!-- sdlc-harness:end -->
@@ -0,0 +1,23 @@
1
+ # Full harness
2
+
3
+ For the portable Codex path and high-stakes operators.
4
+ Examples: SiteStarter, GoBackend, SvelteCMS, YPanel.
5
+
6
+ Copy this directory to `<repo>/.sdlc/`. Overlay Cursor files — `../README.md`.
7
+
8
+ Solo adaptation: no MDM, no weekly committee. You still accept `spec.md` and
9
+ `plan.md`, merge PRs, and authorize production.
10
+
11
+ ## Loop
12
+
13
+ 1. `intent.md` — originator + agent; you correct and commit.
14
+ 2. `spec.md` — requirements and design in one pass; flagged concerns first.
15
+ 3. `plan.md` — plan mode; implement only after you accept.
16
+ 4. Feedback loop — repo verify commands before "done".
17
+ 5. PR — `.sdlc/REVIEW.md`; you approve.
18
+ 6. Maintain — `bands.yaml` is a stub. Fill it only if this repo already has
19
+ metrics; do not invent an on-call agent.
20
+
21
+ ## Per change
22
+
23
+ `mkdir -p .sdlc/changes/<slug>` and copy `intent.md`, `spec.md`, `plan.md`.
@@ -0,0 +1,19 @@
1
+ # Review instructions (full)
2
+
3
+ ## Passes
4
+
5
+ Run three passes and tag each finding:
6
+
7
+ - Bugs: logic errors, broken edge cases, subtle regressions
8
+ - Security: injection, auth gaps, PII in logs, CSRF/session mistakes
9
+ - Compliance: the change matches `spec.md`, `plan.md`, and this repo's
10
+ `AGENTS.md` / `.project/` ADRs
11
+
12
+ ## Important vs nit
13
+
14
+ Important: would break behaviour, leak data, or breach a documented policy.
15
+ Style and naming are nits. At most five nits; summarize the rest as a count.
16
+
17
+ ## Do not report
18
+
19
+ Generated files the repo forbids editing, and anything CI already enforces.
@@ -0,0 +1,13 @@
1
+ # Control bands stub. Fill only if this repo already has a queryable metric.
2
+ # Do not invent a headless on-call agent.
3
+ metric: ci_test_failure_rate
4
+ baseline: rolling_30d
5
+ rules: western_electric
6
+ tiers:
7
+ 1sigma:
8
+ action: log
9
+ 2sigma:
10
+ action: diagnose
11
+ 3sigma:
12
+ action: propose
13
+ routes: [pull_request]
@@ -0,0 +1,4 @@
1
+ # changes/
2
+
3
+ Copy `../intent.md`, `../spec.md`, and `../plan.md` into `./<slug>/` and fill
4
+ them. Commit the folder with the implementation diff.
@@ -0,0 +1,17 @@
1
+ ---
2
+ description: Full SDLC — intent, spec, plan, verify, human merge
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Full SDLC overlay
7
+
8
+ This repository opted into `.sdlc` harness **full**.
9
+
10
+ - One change = `.sdlc/changes/<slug>/{intent,spec,plan}.md`.
11
+ - Plan mode before large edits. Feedback loop = existing repo verify commands.
12
+ - Review policy: `.sdlc/REVIEW.md`. Production stays a human gate.
13
+ - `evals/` and `bands.yaml` are stubs until this repo already has CI/metrics.
14
+ - Skills: `sdlc-loop`, `sdlc-feedback`, `sdlc-review`.
15
+ - Product `AGENTS.md`, `.project/`, and stack-contract win on conflict.
16
+ - Do not invent a second content API, product CMS schema, or local module
17
+ replace to ship a site.
@@ -0,0 +1,16 @@
1
+ # Agent evals (stub)
2
+
3
+ When this repo's agent config (`AGENTS.md`, `.sdlc`, `.cursor/rules`, skills)
4
+ changes, add 20–50 real tasks here later. Each eval is a prompt plus checks
5
+ (tests pass, lint clean, policy followed).
6
+
7
+ Do not add a second CI framework. Prefer the existing GitHub Actions /
8
+ `make verify` job, gated on paths:
9
+
10
+ - `AGENTS.md`
11
+ - `.sdlc/**`
12
+ - `.cursor/rules/**`
13
+ - `.cursor/skills/**`
14
+
15
+ A production incident becomes a permanent eval in this folder, owned by the
16
+ person who closed the incident.
@@ -0,0 +1,17 @@
1
+ # Hooks (notes, not a runtime)
2
+
3
+ Solo default: rely on existing tests and PR review.
4
+
5
+ Add deterministic hooks later if you run Claude Code / Cursor hooks in this
6
+ repo, for example:
7
+
8
+ - Block edits to generated or frozen paths
9
+ - Block secret files (`.env`, `**/secrets/**`)
10
+ - Ask a human before production deploy commands
11
+
12
+ Keep approval prompts off the build hot path so parallel sessions are not
13
+ serialized. Production gates belong at deploy, not on every file save.
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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ exec "$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)/sdlc.sh" install "$@"
@@ -0,0 +1,26 @@
1
+ # Intent: <!-- short title -->
2
+
3
+ Author: <!-- name / role -->
4
+ Status: draft
5
+ Slug: <!-- kebab-case, matches .sdlc/changes/<slug>/ -->
6
+
7
+ ## Problem
8
+
9
+ What cannot be done today. Who is affected.
10
+
11
+ ## Proposed outcome
12
+
13
+ What better looks like. Observable, not a slogan.
14
+
15
+ ## Affected users and systems
16
+
17
+ People, processes, and repos that change or must stay pinned.
18
+
19
+ ## Constraints
20
+
21
+ - Existing product `AGENTS.md` and `.project/` (if any) stay authoritative.
22
+ - No second content REST, no storefront-owned CMS SoT, no local `replace` of
23
+ portable modules to ship a site.
24
+ - Secrets stay out of `cms/` and `content/`.
25
+
26
+ ## Open questions
@@ -0,0 +1,17 @@
1
+ level: full
2
+ version: 1
3
+ copy_to: .sdlc
4
+ cursor:
5
+ rules: cursor/rules
6
+ skills: skills
7
+ agents_md:
8
+ overlay: AGENTS.md
9
+ merge_markers:
10
+ begin: "<!-- sdlc-harness:begin -->"
11
+ end: "<!-- sdlc-harness:end -->"
12
+ artifacts:
13
+ required: [intent.md, spec.md, plan.md]
14
+ review: REVIEW.md
15
+ evals: evals/
16
+ hooks: hooks/
17
+ maintain: bands.yaml
@@ -0,0 +1,30 @@
1
+ # Plan: <!-- title -->
2
+
3
+ From: `.sdlc/changes/<slug>/spec.md` (intent <!-- date or slug -->)
4
+ Status: draft
5
+
6
+ ## Files that change
7
+
8
+ -
9
+
10
+ ## Order of work
11
+
12
+ 1.
13
+ 2.
14
+ 3.
15
+
16
+ ## Risks
17
+
18
+ What could break. Highest-risk step. Options considered and rejected.
19
+
20
+ ## Proof
21
+
22
+ - Commands (from repo `AGENTS.md`):
23
+ - Tests or screenshots that match the spec:
24
+
25
+ An engineer who never saw the chat must be able to implement from this file
26
+ alone.
27
+
28
+ ## Divergence
29
+
30
+ If implementation leaves this plan, update this file in the same commit.