@bluestep-systems/bspecs 0.10.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 +129 -0
- package/cli.js +74 -0
- package/package.json +30 -0
- package/src/prompts.js +74 -0
- package/src/scaffold.js +152 -0
- package/src/sync.js +123 -0
- package/src/utils.js +95 -0
- package/templates/claude/agents/b6p-code-review.md +81 -0
- package/templates/claude/agents/b6p-commenter.md +59 -0
- package/templates/claude/agents/b6p-task-implementer.md +77 -0
- package/templates/claude/hooks/block-generated-files.sh +16 -0
- package/templates/claude/hooks/block-tsc.sh +16 -0
- package/templates/claude/hooks/prettier-on-save.sh +21 -0
- package/templates/claude/instructions/b6p-platform.md.template +185 -0
- package/templates/claude/instructions/bsjs-development.md.template +430 -0
- package/templates/claude/instructions/conventions/always-snapshot.md.template +25 -0
- package/templates/claude/instructions/conventions/blueiq-no-ai-branding.md.template +11 -0
- package/templates/claude/instructions/conventions/date-format.md.template +27 -0
- package/templates/claude/instructions/conventions/endpoint-approach.md.template +9 -0
- package/templates/claude/instructions/conventions/formula-patterns.md.template +71 -0
- package/templates/claude/instructions/conventions/no-global-dollar.md.template +9 -0
- package/templates/claude/instructions/conventions/push-inner-draft.md.template +21 -0
- package/templates/claude/instructions/conventions/separate-files.md.template +17 -0
- package/templates/claude/instructions/conventions/single-script.md.template +28 -0
- package/templates/claude/instructions/conventions/snapshot-integrity.md.template +23 -0
- package/templates/claude/instructions/conventions/top-level-const-tdz.md.template +33 -0
- package/templates/claude/instructions/conventions/ts-in-template-literal.md.template +48 -0
- package/templates/claude/instructions/conventions/tsc-rootdir.md.template +17 -0
- package/templates/claude/instructions/gotchas/common-gotchas.md.template +91 -0
- package/templates/claude/instructions/gotchas/fetched-resource-code.md.template +9 -0
- package/templates/claude/instructions/index.md.template +82 -0
- package/templates/claude/instructions/reference/api-patterns.md.template +487 -0
- package/templates/claude/instructions/reference/blueiq-credit-integration-playbook.md.template +31 -0
- package/templates/claude/instructions/reference/chronounit-months.md.template +37 -0
- package/templates/claude/instructions/reference/code-patterns.md.template +265 -0
- package/templates/claude/instructions/reference/component-library.md.template +217 -0
- package/templates/claude/instructions/reference/crm-dashboard-inspo.md.template +17 -0
- package/templates/claude/instructions/reference/csv-parsing.md.template +18 -0
- package/templates/claude/instructions/reference/dashboard-design-system.md.template +38 -0
- package/templates/claude/instructions/reference/datetime-field-write.md.template +27 -0
- package/templates/claude/instructions/reference/design-system.md.template +150 -0
- package/templates/claude/instructions/reference/dpn-dashboard-framework.md.template +29 -0
- package/templates/claude/instructions/reference/endpoint-method-call.md.template +10 -0
- package/templates/claude/instructions/reference/endpoint-no-delete-method.md.template +9 -0
- package/templates/claude/instructions/reference/endpoint-output-channel.md.template +23 -0
- package/templates/claude/instructions/reference/endpoint-urls.md.template +15 -0
- package/templates/claude/instructions/reference/entry-delete.md.template +40 -0
- package/templates/claude/instructions/reference/file-execution.md.template +113 -0
- package/templates/claude/instructions/reference/http-requester.md.template +37 -0
- package/templates/claude/instructions/reference/id-full-vs-short.md.template +15 -0
- package/templates/claude/instructions/reference/internal-loopback-fetch.md.template +24 -0
- package/templates/claude/instructions/reference/localdate-parse.md.template +16 -0
- package/templates/claude/instructions/reference/merge-report-memo-json.md.template +25 -0
- package/templates/claude/instructions/reference/merge-report-static-index.md.template +29 -0
- package/templates/claude/instructions/reference/merge-report-urls.md.template +67 -0
- package/templates/claude/instructions/reference/multi-entry-in-multi-entry.md.template +21 -0
- package/templates/claude/instructions/reference/named-controls-submit.md.template +11 -0
- package/templates/claude/instructions/reference/new-entry-id.md.template +30 -0
- package/templates/claude/instructions/reference/relationship-field-set.md.template +37 -0
- package/templates/claude/instructions/reference/send-message-abort.md.template +37 -0
- package/templates/claude/instructions/reference/session-cookie-forwarding.md.template +31 -0
- package/templates/claude/instructions/reference/singleselect-null-copy.md.template +21 -0
- package/templates/claude/instructions/reference/staff-query-permission-gating.md.template +27 -0
- package/templates/claude/instructions/reference/timefield-vs-datetimefield.md.template +13 -0
- package/templates/claude/instructions/reference/user-zone-id.md.template +16 -0
- package/templates/claude/settings.json.template +46 -0
- package/templates/claude/skills/b6p-audit/SKILL.md +82 -0
- package/templates/claude/skills/b6p-pull/SKILL.md +123 -0
- package/templates/claude/skills/b6p-push/SKILL.md +70 -0
- package/templates/claude/skills/bug-fix/SKILL.md +28 -0
- package/templates/claude/skills/spec-create/SKILL.md +60 -0
- package/templates/claude/skills/spec-execute/SKILL.md +51 -0
- package/templates/claude/skills/spec-status/SKILL.md +20 -0
- package/templates/claude/skills/task-comment/SKILL.md +96 -0
- package/templates/claude/spec-templates/design.template.md +36 -0
- package/templates/claude/spec-templates/requirements.template.md +26 -0
- package/templates/claude/spec-templates/tasks.template.md +37 -0
- package/templates/module/README.md.template +46 -0
- package/templates/root/.gitignore.template +14 -0
- package/templates/root/.prettierrc.template +8 -0
- package/templates/root/CLAUDE.md.template +157 -0
- package/templates/root/README.md.template +58 -0
- package/templates/root/package.json.template +15 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-create
|
|
3
|
+
description: Start a new spec-driven feature. Creates requirements.md, then design.md, then tasks.md with explicit user approval between each phase. Use when the user wants to plan a new feature inside an existing component.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /spec-create — Start a new feature spec
|
|
7
|
+
|
|
8
|
+
A spec lives at `.claude/specs/<feature-name>/` and consists of three files: `requirements.md`, `design.md`, `tasks.md`. Each phase requires explicit user approval before moving to the next.
|
|
9
|
+
|
|
10
|
+
## Prerequisite
|
|
11
|
+
|
|
12
|
+
Read the `draft/README.md` of each component this feature will touch (see `CLAUDE.md` → "Reading module context — scoped to the task"). Read only the relevant components' READMEs, not the whole workspace. Those READMEs are your baseline for what each component does today — design decisions in Phase 2 should reference that knowledge, not re-derive it. If a relevant module's README is missing, ask the user to `/b6p-pull` it (or scaffold the README) before continuing.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
|
|
16
|
+
### Phase 0 — Setup
|
|
17
|
+
|
|
18
|
+
1. Ask for:
|
|
19
|
+
- **Feature name** (kebab-case, e.g. `add-validation-on-intake`)
|
|
20
|
+
- **One-line description**
|
|
21
|
+
2. Offer to **seed from a ClickUp ticket** if a ClickUp MCP is available — ask for the ticket URL or ID and fetch its description.
|
|
22
|
+
3. Create `.claude/specs/<feature-name>/` directory.
|
|
23
|
+
|
|
24
|
+
### Phase 1 — Requirements
|
|
25
|
+
|
|
26
|
+
1. Copy `.claude/spec-templates/requirements.template.md` to `.claude/specs/<feature-name>/requirements.md`.
|
|
27
|
+
2. Fill it in based on the user's description (and ClickUp ticket if provided).
|
|
28
|
+
3. **STOP. Tell the user: "Requirements drafted at `.claude/specs/<feature-name>/requirements.md`. Review and approve before I proceed to design."**
|
|
29
|
+
4. Wait for explicit approval ("approved", "ok", "next", etc.) before moving on.
|
|
30
|
+
|
|
31
|
+
### Phase 2 — Design
|
|
32
|
+
|
|
33
|
+
1. Copy `.claude/spec-templates/design.template.md` to `.claude/specs/<feature-name>/design.md`.
|
|
34
|
+
2. Fill it in. **MUST include:**
|
|
35
|
+
- Which existing component(s) this touches
|
|
36
|
+
- **The required field "Does this require modifying the component on the platform?"** with answer Yes/No and details
|
|
37
|
+
- Approach summary
|
|
38
|
+
- Alignment with existing patterns from `.claude/instructions/bsjs-development.md`
|
|
39
|
+
3. **STOP. Ask the user to approve design before tasks.**
|
|
40
|
+
|
|
41
|
+
### Phase 3 — Tasks
|
|
42
|
+
|
|
43
|
+
1. Copy `.claude/spec-templates/tasks.template.md` to `.claude/specs/<feature-name>/tasks.md`.
|
|
44
|
+
2. Break the work into tasks. **Every task MUST start with a prefix:**
|
|
45
|
+
- `[PLATFORM]` for work done in the BlueStep UI (creating fields, queries, components, permissions, formula configs).
|
|
46
|
+
- `[CODE]` for work done in this workspace (TypeScript, static assets, README updates).
|
|
47
|
+
3. Derive `[PLATFORM]` tasks from the **Platform-side impact** field of `design.md`. If the design says "yes, X needs to be created on the platform," there should be a `[PLATFORM]` task for each X. If the design says "no platform-side changes," there are no `[PLATFORM]` tasks (all tasks are `[CODE]`).
|
|
48
|
+
4. **Order matters: `[PLATFORM]` tasks come before any `[CODE]` task that depends on them.** The ordering encodes the dependency — a `[CODE]` task that references a new field must come after the `[PLATFORM]` task that creates it.
|
|
49
|
+
5. Each task MUST:
|
|
50
|
+
- Have the prefix `[PLATFORM]` or `[CODE]`
|
|
51
|
+
- Have a checkbox `[ ]`
|
|
52
|
+
- For `[CODE]`: reference specific file paths (e.g. `U######/IntakeForm/draft/scripts/validate.ts`)
|
|
53
|
+
- For `[PLATFORM]`: describe the artifact (e.g. "Create field `end_time` on form `Appointment`")
|
|
54
|
+
- NOT involve running `tsc`, editing `declarations/`, or creating B6P components locally
|
|
55
|
+
6. **Fill in the `## Deployment` section** at the bottom: list every component whose `[CODE]` tasks touched it. One push per component.
|
|
56
|
+
7. **STOP. Ask the user to approve tasks before implementation begins.**
|
|
57
|
+
|
|
58
|
+
## After approval
|
|
59
|
+
|
|
60
|
+
Tell the user to run `/spec-execute <feature-name> <task#>` to start implementing tasks one at a time.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-execute
|
|
3
|
+
description: Execute one task from a feature spec. By default delegates implementation to the b6p-task-implementer subagent (isolated context); pass --inline to implement in the main session. Updates the task checkbox when done. Use after `/spec-create` has produced an approved tasks.md.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /spec-execute — Execute one task from a spec
|
|
7
|
+
|
|
8
|
+
## Steps
|
|
9
|
+
|
|
10
|
+
1. **Parse `$ARGUMENTS`** for feature name, task number, and an optional `--inline` flag (e.g. `add-validation-on-intake 3` or `add-validation-on-intake 3 --inline`). The flag may appear anywhere; strip it before reading the feature/task. If feature or task is missing, ask.
|
|
11
|
+
- **Default (no flag):** a `[CODE]` task is implemented by delegating to the `b6p-task-implementer` subagent, so the heavy declaration/source reads stay out of this session (see step 5).
|
|
12
|
+
- **`--inline`:** implement the task directly in this session — for trivial one-liners where spinning a fresh context isn't worth the re-read.
|
|
13
|
+
2. **Load context:**
|
|
14
|
+
- Read `.claude/specs/<feature>/requirements.md`
|
|
15
|
+
- Read `.claude/specs/<feature>/design.md`
|
|
16
|
+
- Read `.claude/specs/<feature>/tasks.md`
|
|
17
|
+
- Identify the task at the given number
|
|
18
|
+
|
|
19
|
+
- Read the `draft/README.md` of the component(s) this task touches, if not already in context. (Don't pre-load READMEs for unrelated components.)
|
|
20
|
+
3. **Check the task's prefix:**
|
|
21
|
+
- **`[PLATFORM]`** — STOP, do NOT touch code. Tell the user:
|
|
22
|
+
> Task <N> is a `[PLATFORM]` task: <description>. It must be done in the BlueStep UI. When it's complete, tell me and I'll mark it `[x]`, or call `/spec-execute <feature> <N+1>` to skip to the next task.
|
|
23
|
+
- **`[CODE]`** — proceed to step 4.
|
|
24
|
+
- **No prefix** — this is an older spec from before the convention. Warn the user once: "Task <N> has no `[PLATFORM]`/`[CODE]` prefix — treating as `[CODE]`. Consider updating the spec." Then proceed to step 4.
|
|
25
|
+
4. **Verify prerequisites are done.** Scan tasks.md for any earlier `[PLATFORM]` task that is still `[ ]` (not checked). If any unchecked `[PLATFORM]` task exists *before* the requested task, STOP and tell the user:
|
|
26
|
+
> Task <N> may depend on `[PLATFORM]` task <earlier_N>: <description>. That platform work is not marked done yet. Confirm it's complete (I'll mark it `[x]`) or pick a different task.
|
|
27
|
+
5. **Implement exactly one task.** No scope creep — touch only the files the task references, do not start the next task, apply rules from `CLAUDE.md` (no `tsc`, no `.writable()`, no editing `declarations/`, no new components locally).
|
|
28
|
+
|
|
29
|
+
**Default — delegate to the `b6p-task-implementer` subagent:**
|
|
30
|
+
- Spawn the `b6p-task-implementer` subagent (via the Task/Agent tool) and give it the feature name and this task number. It reads the spec, the component's `declarations/`, and the relevant `instructions/` files in its **own** context, implements the one task, and returns a structured summary — keeping that bulk out of this session.
|
|
31
|
+
- When it returns, show the user its summary and the **git diff** of what changed (`git diff` / `git status` for the touched files) so the change is reviewable here.
|
|
32
|
+
- The subagent does **not** mark the checkbox or chain other agents — the steps below (verify, mark, README sync, STOP) stay in this session.
|
|
33
|
+
|
|
34
|
+
**`--inline` — implement here:** do the edits directly in this session (the prior behavior), then continue to 5.5.
|
|
35
|
+
|
|
36
|
+
5.5. **Verify IDE diagnostics.** Before marking the task done, check the most recent `ide_diagnostics` blocks injected by the `PostToolUse` hook after each `Edit`/`Write` (these fire on the subagent's edits too). Also weigh anything the subagent listed under **Flags for the human**.
|
|
37
|
+
- If any entry has `severity: "Error"` in a file this task touched: **STOP.** Fix the error and re-verify before continuing. Do not mark the task done with pending errors.
|
|
38
|
+
- `Warning` / `Information` entries (including spell-checker) can be ignored **unless** they point to a real problem — review before dismissing.
|
|
39
|
+
- If an `Error` cannot be reproduced or looks like a false positive, report it explicitly: "The IDE reports `<error>` but I think it's a false positive because `<reason>` — should I continue?"
|
|
40
|
+
6. **Mark the task done:** update `.claude/specs/<feature>/tasks.md` — change `[ ]` to `[x]` for the completed task.
|
|
41
|
+
7. **Check the affected module's `draft/README.md`:**
|
|
42
|
+
- If this task changed behavior that the README describes (Overview, Behavior, Fields used, External dependencies), update the README in the same change so the platform doc stays in sync.
|
|
43
|
+
- If the change is internal-only (refactor, comment, log message) and doesn't alter documented behavior, leave the README alone.
|
|
44
|
+
- When unsure, ask the user: "This task changed `<what>` — should I reflect it in `draft/README.md`?"
|
|
45
|
+
8. **STOP. Tell the user: "Task <N> done. Review and approve before /spec-execute <feature> <N+1>."** Do not auto-continue. In the same message, surface the implementer's summary + diff (default path) and offer the optional, user-invoked follow-ups — these never fire automatically:
|
|
46
|
+
- `@b6p-commenter` — update the component's `draft/README.md` from the new code.
|
|
47
|
+
- `@b6p-code-review` — a BlueStep-aware, report-only review of the change.
|
|
48
|
+
|
|
49
|
+
## When the user says a `[PLATFORM]` task is done
|
|
50
|
+
|
|
51
|
+
If the user comes back and says "I did task <N> on the platform", just edit `tasks.md` to mark it `[x]`. No code changes, no push. The task is closed.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-status
|
|
3
|
+
description: Show progress of all feature specs in `.claude/specs/`. Use when the user wants a summary of what's in flight.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /spec-status — Show progress across all active specs
|
|
7
|
+
|
|
8
|
+
## Steps
|
|
9
|
+
|
|
10
|
+
1. List directories under `.claude/specs/`.
|
|
11
|
+
2. For each feature, read `.claude/specs/<feature>/tasks.md`.
|
|
12
|
+
3. Count `[x]` (done) and `[ ]` (pending) checkboxes.
|
|
13
|
+
4. Print a summary, e.g.:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
add-validation-on-intake 3 / 7 tasks done
|
|
17
|
+
refactor-merge-renderer 1 / 5 tasks done
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
5. If a spec has no `tasks.md` yet, mark it as "in design".
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-comment
|
|
3
|
+
description: Draft a standardized implementation comment for a ClickUp task after a fix or feature is shipped. Handles both org-propagated (component-based) and direct (code-only) changes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /task-comment — Draft a ClickUp implementation comment
|
|
7
|
+
|
|
8
|
+
## Steps
|
|
9
|
+
|
|
10
|
+
1. **Ask the user to paste the ClickUp task link or ID.**
|
|
11
|
+
- Use the ClickUp MCP to fetch the task (`clickup_get_task`) and read its name, description, list, and status.
|
|
12
|
+
|
|
13
|
+
2. **Infer the change type from the task name prefix:**
|
|
14
|
+
- Starts with `Bug -` or `Bug —` → type = **Fix**
|
|
15
|
+
- Starts with `Feature -` or `Feature —` → type = **Feature**
|
|
16
|
+
- Anything else → type = **Update**
|
|
17
|
+
|
|
18
|
+
3. **Derive the summary** from the task name and description — one sentence capturing what the bug/issue/feature was. Do not ask the user for this.
|
|
19
|
+
|
|
20
|
+
4. **Ask one question:**
|
|
21
|
+
> Does this change need to be propagated to other orgs? (yes / no)
|
|
22
|
+
|
|
23
|
+
5. **Collect the remaining details based on the answer:**
|
|
24
|
+
|
|
25
|
+
**If yes (propagated — component change):**
|
|
26
|
+
- Component name (e.g. `Audits`, `Appointments`)
|
|
27
|
+
- Affected file(s): path(s) relative to the component (e.g. `draft/scripts/utils/entryHelper.ts`)
|
|
28
|
+
- Orgs deployed to (comma-separated list)
|
|
29
|
+
- What changed and why (free-form, 1–4 sentences)
|
|
30
|
+
|
|
31
|
+
**If no (direct — code/API/formula fix):**
|
|
32
|
+
- What changed mechanically (1–3 sentences)
|
|
33
|
+
- Root cause, if known (1–2 sentences, or "N/A")
|
|
34
|
+
- Net effect / user-visible outcome (1 sentence)
|
|
35
|
+
- Any caveats or known limitations (optional)
|
|
36
|
+
|
|
37
|
+
6. **Produce the formatted comment. Do not post it — print it directly in your response (NOT in a code block) so the user can copy the rich text and paste it into ClickUp with bold formatting intact.**
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Output formats
|
|
42
|
+
|
|
43
|
+
ClickUp does not render markdown. Use `**bold**` only for structural labels — ClickUp will receive the bold formatting when the user copies and pastes rich text from the response. Body text stays plain.
|
|
44
|
+
|
|
45
|
+
The comment always has three sections separated by blank lines: **Summary**, **Change**, and (if propagated) **Components**.
|
|
46
|
+
|
|
47
|
+
### Propagated (yes)
|
|
48
|
+
|
|
49
|
+
**Summary:** <one sentence derived from the task name/description>
|
|
50
|
+
|
|
51
|
+
**<Type> implemented**
|
|
52
|
+
|
|
53
|
+
<What changed and why>
|
|
54
|
+
|
|
55
|
+
**Component:** <ComponentName>
|
|
56
|
+
|
|
57
|
+
<ComponentName>
|
|
58
|
+
<file/path.ts>
|
|
59
|
+
|
|
60
|
+
**Deployed to:** <Org1>, <Org2>, <Org3>.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
- `<Type>` = Fix / Feature / Update (from step 2)
|
|
65
|
+
- If multiple files, list each on its own line under the component name
|
|
66
|
+
- If only one org, write "**Deployed to:** <Org>." (no comma)
|
|
67
|
+
|
|
68
|
+
### Direct (no)
|
|
69
|
+
|
|
70
|
+
**Summary:** <one sentence derived from the task name/description>
|
|
71
|
+
|
|
72
|
+
**<Type> shipped (<YYYY-MM-DD>)**
|
|
73
|
+
|
|
74
|
+
<What changed mechanically>
|
|
75
|
+
|
|
76
|
+
**Root cause:** <root cause, if provided>
|
|
77
|
+
|
|
78
|
+
**Net effect:** <user-visible outcome>
|
|
79
|
+
|
|
80
|
+
**Caveat:** <caveat, if provided>
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
- `<Type>` = Fix / Feature / Update (from step 2)
|
|
85
|
+
- Omit the **Root cause:** line if the user said N/A
|
|
86
|
+
- Omit the **Caveat:** line if none provided
|
|
87
|
+
- Use today's date for `<YYYY-MM-DD>`
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Notes
|
|
92
|
+
|
|
93
|
+
- Never post to ClickUp automatically. Always print the comment directly in the response (no code block) so the user can copy rich text and paste it into ClickUp with bold formatting intact.
|
|
94
|
+
- Do not add a greeting, sign-off, or closing line.
|
|
95
|
+
- Keep the tone matter-of-fact. No "Great news!" or "Happy to report".
|
|
96
|
+
- If the task name has no recognizable prefix, default to **Update** and don't ask the user to clarify.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Design — [Feature Name]
|
|
2
|
+
|
|
3
|
+
**Status:** Drafting | Approved | Superseded
|
|
4
|
+
|
|
5
|
+
## Component(s) affected
|
|
6
|
+
|
|
7
|
+
Which existing components this feature touches.
|
|
8
|
+
|
|
9
|
+
- `U######/ComponentName` — what changes
|
|
10
|
+
|
|
11
|
+
## Platform-side impact
|
|
12
|
+
|
|
13
|
+
**Does this change require modifying the component on the BlueStep platform? (Yes / No)**
|
|
14
|
+
|
|
15
|
+
- If **Yes**: list what must be created or changed on the platform (new fields, new queries, new component-level config, permission changes, etc.). These must happen on the platform first; then we pull and proceed.
|
|
16
|
+
- If **No**: confirm the work is fully inside `draft/scripts/` of existing component(s).
|
|
17
|
+
|
|
18
|
+
## Approach
|
|
19
|
+
|
|
20
|
+
High-level summary of how this will be implemented. Reference existing patterns from `.claude/instructions/bsjs-development.md` where applicable.
|
|
21
|
+
|
|
22
|
+
## Data flow
|
|
23
|
+
|
|
24
|
+
How data moves through the change. Which fields are read; which are written. Which queries are used.
|
|
25
|
+
|
|
26
|
+
## Edge cases
|
|
27
|
+
|
|
28
|
+
- ...
|
|
29
|
+
|
|
30
|
+
## Alignment with existing patterns
|
|
31
|
+
|
|
32
|
+
Which patterns from `bsjs-development.md` are being applied. If a new pattern is introduced, justify it.
|
|
33
|
+
|
|
34
|
+
## Risks
|
|
35
|
+
|
|
36
|
+
What could go wrong; what's the rollback if a push breaks the platform side.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Requirements — [Feature Name]
|
|
2
|
+
|
|
3
|
+
**Status:** Drafting | Approved | Superseded
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
What problem is this solving? Who asked for it? (Link to ClickUp ticket if relevant.)
|
|
8
|
+
|
|
9
|
+
## User stories
|
|
10
|
+
|
|
11
|
+
- As a [role], I want [capability], so that [outcome].
|
|
12
|
+
- ...
|
|
13
|
+
|
|
14
|
+
## Acceptance criteria
|
|
15
|
+
|
|
16
|
+
- [ ] Criterion 1 (observable from the user's perspective)
|
|
17
|
+
- [ ] Criterion 2
|
|
18
|
+
- [ ] ...
|
|
19
|
+
|
|
20
|
+
## Out of scope
|
|
21
|
+
|
|
22
|
+
What this feature explicitly does NOT include.
|
|
23
|
+
|
|
24
|
+
## Open questions
|
|
25
|
+
|
|
26
|
+
- ...
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Tasks — [Feature Name]
|
|
2
|
+
|
|
3
|
+
**Status:** Drafting | Approved | In progress | Complete
|
|
4
|
+
|
|
5
|
+
Each task must reference specific file paths or platform artifacts and be small enough to ship as one coherent unit. Tasks must NOT involve:
|
|
6
|
+
|
|
7
|
+
- Running `tsc` locally
|
|
8
|
+
- Editing `declarations/` or any `.d.ts` file
|
|
9
|
+
- Creating new B6P components locally (those go on the platform first)
|
|
10
|
+
|
|
11
|
+
## Task prefix convention
|
|
12
|
+
|
|
13
|
+
Every task starts with one of two prefixes that says **where** the work happens:
|
|
14
|
+
|
|
15
|
+
- `[PLATFORM]` — done in the BlueStep UI (creating a field, query, formula, component-level config, permissions, etc.). **Not executable by `/spec-execute`** — the user does these manually. Must be listed before any `[CODE]` task that depends on them, so the ordering encodes the dependency.
|
|
16
|
+
- `[CODE]` — done in this workspace (TypeScript, static assets, README updates). **Executable by `/spec-execute`**.
|
|
17
|
+
|
|
18
|
+
If the design says "no platform-side changes needed," every task is `[CODE]` and the prefix is still required (no implicit type).
|
|
19
|
+
|
|
20
|
+
## Tasks
|
|
21
|
+
|
|
22
|
+
- [ ] **1. [PLATFORM]** [Short description, e.g. "Create field `appointment_end_time` on form `Appointment`"]
|
|
23
|
+
- [ ] **2. [CODE]** [Short description] — files: `U######/Component/draft/scripts/foo.ts`
|
|
24
|
+
- [ ] **3. [CODE]** [Short description] — files: `U######/Component/draft/scripts/bar.ts`, `U######/Component/draft/README.md`
|
|
25
|
+
|
|
26
|
+
(Repeat as needed. Keep tasks small enough that one `/spec-execute` invocation covers exactly one.)
|
|
27
|
+
|
|
28
|
+
## Deployment
|
|
29
|
+
|
|
30
|
+
Once all `[CODE]` tasks above are checked, push the affected components back to the platform. Use `/b6p-push` or run manually:
|
|
31
|
+
|
|
32
|
+
- `U######/<ComponentName>` — `npx b6p push --file "U######/<ComponentName>/draft/scripts/app.ts"`
|
|
33
|
+
- (List every component touched by `[CODE]` tasks. One push per component.)
|
|
34
|
+
|
|
35
|
+
## Verification
|
|
36
|
+
|
|
37
|
+
How to confirm the feature works once deployed (UI flow to exercise, expected log output, query to run on the platform, etc.).
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# [Component displayName]
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
This README documents what the component does today. It lives at
|
|
5
|
+
draft/README.md inside the component folder so it ships to the BlueStep
|
|
6
|
+
platform on push, which means anyone who pulls the component gets the doc.
|
|
7
|
+
|
|
8
|
+
This file is NOT for planning new work — use `/spec-create` for that
|
|
9
|
+
(specs live under .claude/specs/<feature-name>/).
|
|
10
|
+
|
|
11
|
+
When `/b6p-pull` scaffolds this file, it infers what it can from the
|
|
12
|
+
component's code (app.ts), metadata (draft/info/metadata.json), and
|
|
13
|
+
static assets (for MergeReports). Sections it cannot infer are left
|
|
14
|
+
empty or marked "TODO" — fill them in before editing code.
|
|
15
|
+
-->
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
[One paragraph: what this component does and why it exists.]
|
|
20
|
+
|
|
21
|
+
## Type
|
|
22
|
+
|
|
23
|
+
[Endpoint | MergeReport | Post-Save | OnDemand | Scheduled | Formula]
|
|
24
|
+
|
|
25
|
+
[For Endpoint: list paths, allowed methods, auth model.]
|
|
26
|
+
[For MergeReport: list pages/sections rendered, whether it owns frontend.]
|
|
27
|
+
[For Post-Save: list the form(s) that trigger it.]
|
|
28
|
+
[For Scheduled: list the cron cadence and what it does.]
|
|
29
|
+
|
|
30
|
+
## Fields used
|
|
31
|
+
|
|
32
|
+
| FID | Display name | Form | Access |
|
|
33
|
+
|---------|--------------|----------|--------------|
|
|
34
|
+
| fid_xxx | … | FormName | read / write |
|
|
35
|
+
|
|
36
|
+
## Behavior
|
|
37
|
+
|
|
38
|
+
[Bulleted description of what the component does at runtime. One bullet per coherent behavior.]
|
|
39
|
+
|
|
40
|
+
## External dependencies
|
|
41
|
+
|
|
42
|
+
[Outbound HTTP endpoints, other B6P components this one calls or expects.]
|
|
43
|
+
|
|
44
|
+
## Edge cases / known gotchas
|
|
45
|
+
|
|
46
|
+
[Anything non-obvious that future-you or another dev should know before editing.]
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# {{CLIENT_NAME}} — {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
**Scaffolded:** {{SCAFFOLD_DATE}}
|
|
4
|
+
|
|
5
|
+
## Project description
|
|
6
|
+
|
|
7
|
+
{{PROJECT_DESCRIPTION}}
|
|
8
|
+
|
|
9
|
+
## Workspace model
|
|
10
|
+
|
|
11
|
+
This workspace is a **local copy** of components that live on the BlueStep platform. The platform is the source of truth.
|
|
12
|
+
|
|
13
|
+
- A project may span **one or more Unit folders** (`U######/`). Unit folders are created by `b6p pull` — never by hand.
|
|
14
|
+
- Each Unit folder contains one or more **components** of any type (MergeReport, Endpoint, Formula, OnDemand, Scheduled, Post-Save). A single project mixes types freely.
|
|
15
|
+
- New B6P **components** are created on the platform, never locally. Inside an existing component, creating new `.ts` files locally is fine.
|
|
16
|
+
- Sync with the platform via `b6p pull "<DAV URL>"` (first pull or re-sync) and `b6p push --file "<component-path>/..."` (deploy). See the Sync workflow section below for the exact invocation.
|
|
17
|
+
|
|
18
|
+
## Critical rules (always apply)
|
|
19
|
+
|
|
20
|
+
1. **NEVER** edit `declarations/`, `B.d.ts`, `scriptlibrary.d.ts`, `Globals.d.ts` — platform-generated. _(enforced by hook)_
|
|
21
|
+
2. **NEVER** use `.writable()`. Field writability is configured on the platform, not requested in code.
|
|
22
|
+
3. **NEVER** run `tsc` locally. Compilation is handled by the platform on push. _(enforced by hook)_
|
|
23
|
+
4. **NEVER** create new B6P components locally. Create them on the platform first, then pull.
|
|
24
|
+
5. **ALWAYS** invoke `b6p` as `npx b6p` — it resolves the project's local `@bluestep-systems/b6p-cli` cross-platform, with no global install or shell/PATH detection. Run `npm install` first if `node_modules` is missing.
|
|
25
|
+
6. In **MergeReports**: frontend (HTML/CSS/JS) lives in `static/`, NOT in `scripts/`.
|
|
26
|
+
7. The workspace is a local copy — the platform is source of truth.
|
|
27
|
+
8. **NEVER** fabricate query/form/field references. They must exist in the **specific component's** `declarations/index.d.ts` before use. Form-field imports are per-component — a field visible in component A is not visible in component B unless B's import config was updated on the platform and B was pulled. If missing, update that component's import config on the platform and pull it.
|
|
28
|
+
|
|
29
|
+
## Module structure
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
<project-root>/
|
|
33
|
+
├── U######/ ← Unit folder (created by `b6p pull`, one per unit)
|
|
34
|
+
│ └── ComponentName/ ← any component type — read metadata.json to identify
|
|
35
|
+
│ ├── declarations/ ← platform-generated, DO NOT EDIT
|
|
36
|
+
│ └── draft/
|
|
37
|
+
│ ├── README.md ← what this module does today — read before editing
|
|
38
|
+
│ ├── scripts/ ← TypeScript source (BsJs)
|
|
39
|
+
│ ├── objects/ ← legacy: imports.ts may exist in older modules
|
|
40
|
+
│ ├── static/ ← MergeReport only: HTML, CSS, client JS
|
|
41
|
+
│ └── info/ ← config.json, metadata.json, permissions.json
|
|
42
|
+
└── U######/ ← another unit, more components — same shape
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Component type is encoded in `draft/info/metadata.json` (and the matching `config.json`). When you need to know whether a component is an Endpoint, MergeReport, etc., read those — don't infer from folder names.
|
|
46
|
+
|
|
47
|
+
**Two distinct docs, by lifecycle:**
|
|
48
|
+
|
|
49
|
+
- `<Component>/draft/README.md` — describes what the module **does today**. Lives inside `draft/` so it ships to the platform on push; anyone who pulls the module gets the doc. Scaffolded automatically by `/b6p-pull` when missing; if you change documented behavior, update the README in the same change.
|
|
50
|
+
- `.claude/specs/<feature>/` — describes what you are about to **change or add** (requirements → design → tasks). Per feature, not per component. Created by `/spec-create`.
|
|
51
|
+
|
|
52
|
+
## The `B` object (platform API)
|
|
53
|
+
|
|
54
|
+
| Namespace | Purpose |
|
|
55
|
+
|---------------|-----------------------------------------------|
|
|
56
|
+
| `B.net` | Outbound HTTP (`B.net.fetch()`) |
|
|
57
|
+
| `B.util` | Utilities (logging, parsing, formatting) |
|
|
58
|
+
| `B.io` | I/O, WebSocket push (`B.io.sendMessage()`) |
|
|
59
|
+
| `B.db` | Database access |
|
|
60
|
+
| `B.time` | Date/time — use this instead of native `Date` |
|
|
61
|
+
| `B.queries` | Query objects defined on the platform |
|
|
62
|
+
| `B.exports` | Cross-formula data sharing |
|
|
63
|
+
| `B.user` | Current user (null in scheduled/cron scripts) |
|
|
64
|
+
| `B.commit()` | Force a mid-script transaction commit |
|
|
65
|
+
|
|
66
|
+
Full API patterns: read `.claude/instructions/bsjs-development.md` when writing or reviewing BsJs (load on demand — it is not auto-imported).
|
|
67
|
+
|
|
68
|
+
## Reading module context — scoped to the task
|
|
69
|
+
|
|
70
|
+
**Read `draft/README.md` only for the component(s) the current task touches** — not every component in the workspace. A workspace can hold dozens of components totalling thousands of lines of README; loading all of them into every session is wasteful and slow.
|
|
71
|
+
|
|
72
|
+
When a task names (or clearly implies) one or more components, read those READMEs before suggesting or implementing anything. Each module's `draft/README.md` describes what the module does today; it was scaffolded by `/b6p-pull` from the code, so treat it as the source of truth for current behavior. If you're unsure which component a request maps to, ask — don't pre-load everything to be safe.
|
|
73
|
+
|
|
74
|
+
To discover which components exist without reading their READMEs, list the `U######/*/` directories or read a single `draft/info/metadata.json`.
|
|
75
|
+
|
|
76
|
+
If the component a task touches has no `draft/README.md` (or it's empty boilerplate), ask the user to run `/b6p-pull <DAV URL>` against that component to scaffold one. Don't proceed to edit code in a module whose README is missing.
|
|
77
|
+
|
|
78
|
+
## Documentation and planning workflow
|
|
79
|
+
|
|
80
|
+
Two distinct artifacts, separated by lifecycle:
|
|
81
|
+
|
|
82
|
+
- **`<Component>/draft/README.md`** — what the module **does today**. Read it for the component(s) a task touches (see "Reading module context" above). Update only when documented behavior changes. Ships to the platform on push, so other devs who pull the module get the doc.
|
|
83
|
+
- **`.claude/specs/<feature>/`** — what we're about to **change or add** (requirements → design → tasks). Per feature, not per component. Created by `/spec-create`. Archived/deleted when the feature is done.
|
|
84
|
+
|
|
85
|
+
## Skill quick reference
|
|
86
|
+
|
|
87
|
+
Available skills (full docs in `.claude/skills/<name>/SKILL.md`):
|
|
88
|
+
|
|
89
|
+
| Skill | When the user wants to… |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `/b6p-pull <DAV URL>` | Bring a component down from the platform (first pull or re-sync) |
|
|
92
|
+
| `/b6p-push <component>` | Send local changes back to the platform |
|
|
93
|
+
| `/b6p-audit <component>` | Compare local vs. platform, see what diverged (read-only) |
|
|
94
|
+
| `/spec-create <feature-name>` | Plan a new feature (requirements → design → tasks) |
|
|
95
|
+
| `/spec-execute <feature> <task#>` | Implement one specific task from a spec |
|
|
96
|
+
| `/spec-status` | Show progress across all in-flight specs |
|
|
97
|
+
| `/bug-fix` | Quick workflow for clearly-scoped bugs (no full 3-phase spec) |
|
|
98
|
+
|
|
99
|
+
### Mandatory routing rule (spec-driven changes)
|
|
100
|
+
|
|
101
|
+
**Before editing any TypeScript or static file under `U######/<Component>/draft/`**, you MUST route through one of these workflows — never edit directly because the user asked "change X":
|
|
102
|
+
|
|
103
|
+
1. If the user describes a **feature** (new behavior, anything that requires designing): require `/spec-create` first. If a spec already exists for it (`.claude/specs/<feature>/tasks.md`), use `/spec-execute`.
|
|
104
|
+
2. If the user describes a **bug** (incorrect existing behavior): require `/bug-fix` first.
|
|
105
|
+
3. If the user explicitly says "this is trivial, just do it" or similar (typo fix, log message, comment, rename of a local variable): you may skip the workflow, but say what you're about to do and wait for "ok" before touching files.
|
|
106
|
+
|
|
107
|
+
The point: the spec/bug workflow exists so changes are reviewed and traceable. Skipping it loses the value of the system. Ask once if a request is ambiguous; never assume.
|
|
108
|
+
|
|
109
|
+
### Soft routing (everything else)
|
|
110
|
+
|
|
111
|
+
For sync, status, and audit operations, infer naturally from what the user asks and propose the matching skill. Examples:
|
|
112
|
+
|
|
113
|
+
- "pulleamelo" / "trae el módulo X" → suggest `/b6p-pull <URL>` (ask for URL if not provided).
|
|
114
|
+
- "pushea esto" / "subilo" → `/b6p-push <component>`.
|
|
115
|
+
- "¿cambió algo en la plataforma?" / "¿esto está sincronizado?" → `/b6p-audit <component>`.
|
|
116
|
+
- "¿cómo van los specs?" / "¿qué tengo en curso?" → `/spec-status`.
|
|
117
|
+
|
|
118
|
+
You don't need explicit confirmation to invoke these — they're either read-only or already have their own internal confirmation steps.
|
|
119
|
+
|
|
120
|
+
## Sync workflow (b6p CLI internals)
|
|
121
|
+
|
|
122
|
+
The skills above wrap these commands. You can run them directly if you need to, but prefer the skills for guidance and consistency.
|
|
123
|
+
|
|
124
|
+
`b6p` ships as a devDependency of this project (`@bluestep-systems/b6p-cli`). Invoke it with `npx b6p`, which resolves `node_modules/.bin/b6p` cross-platform — no global install, no shell or PATH detection. Run `npm install` once if `node_modules` is missing.
|
|
125
|
+
|
|
126
|
+
- **Pull (DAV URL required):** `npx b6p --yes pull "<DAV URL>"`. The DAV URL is copied from the component's page in the BlueStep platform UI — `b6p pull` does not accept display names. First pull creates the `U######/` folder and the component skeleton.
|
|
127
|
+
- **Push (file-driven):** `npx b6p --yes push --file "U######/<Component>/draft/scripts/app.ts"`. `--file` lets the CLI derive the destination from local metadata.
|
|
128
|
+
- **Audit (read-only):** `npx b6p --yes --json audit --file "U######/<Component>/draft/scripts/app.ts"`. Lists files that differ between local and platform.
|
|
129
|
+
- Always pass `--yes` so the CLI does not show interactive prompts that Claude cannot answer.
|
|
130
|
+
- Both pull and push verify per-file integrity and only transfer files whose content changed.
|
|
131
|
+
- If `npx b6p` cannot be resolved, run `npm install` in the project root (see the "Install dependencies" section of the project's `README.md`). For other errors, the VS Code b6p extension is an equivalent fallback.
|
|
132
|
+
|
|
133
|
+
## Self-improvement
|
|
134
|
+
|
|
135
|
+
If you discover a B6P rule or pattern that is not documented here:
|
|
136
|
+
|
|
137
|
+
1. Apply it for the current task.
|
|
138
|
+
2. Capture the rule in the right place:
|
|
139
|
+
- A must-always rule → the Critical rules list in this `CLAUDE.md`.
|
|
140
|
+
- High-frequency platform/BsJs material → the matching overview (`.claude/instructions/b6p-platform.md` or `bsjs-development.md`).
|
|
141
|
+
- A single-topic detail or sharp edge → a new or existing atomic file under `.claude/instructions/{reference,conventions,gotchas}/`, and add (or update) its one-line entry in `.claude/instructions/index.md` so it's discoverable.
|
|
142
|
+
3. Note in your response: "Added rule: <description>".
|
|
143
|
+
|
|
144
|
+
## Deep reference
|
|
145
|
+
|
|
146
|
+
The deep platform and BsJs reference lives under `.claude/instructions/`. None of it is auto-imported — read on demand, only when the task needs it, so it doesn't sit in context every session.
|
|
147
|
+
|
|
148
|
+
**For any platform or BsJs detail, consult `.claude/instructions/index.md` first.** The index is the manifest of single-topic files (`reference/`, `conventions/`, `gotchas/`), each with a one-line "load when…" trigger; open it to pick the right file, then read just that file. It also gives a `grep -ri "<term>" .claude/instructions/` route for term-level lookups.
|
|
149
|
+
|
|
150
|
+
The two on-demand overviews come first for high-frequency material:
|
|
151
|
+
|
|
152
|
+
- `.claude/instructions/bsjs-development.md` — BsJs/TypeScript patterns, the `B` API, TS narrowing pitfalls. Read when writing or reviewing component code.
|
|
153
|
+
- `.claude/instructions/b6p-platform.md` — platform architecture and concepts (Relate/Connect/Manage, component types, sync model, declarations). Read when a task hinges on platform behavior.
|
|
154
|
+
|
|
155
|
+
Reach past the overviews into the indexed atomic files when you need a specific topic the overview only summarizes.
|
|
156
|
+
|
|
157
|
+
The critical rules above (declarations, `.writable()`, `tsc`, `npx b6p`, per-component imports) are the must-always-apply subset — you don't need the deep files to honor them.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# {{CLIENT_NAME}} — {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
{{PROJECT_DESCRIPTION}}
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
A project is a collection of B6P components, organised by Unit. `b6p pull "<DAV URL>"` creates the `U######/` folder and the component skeleton on first pull — you do not create Unit folders by hand. A single project commonly spans multiple Unit folders, and each Unit folder holds components of different types (Endpoint, MergeReport, Formula, etc.).
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
### Install dependencies (one-time)
|
|
12
|
+
|
|
13
|
+
The `b6p` CLI ships as a dev dependency of this project (`@bluestep-systems/b6p-cli`). `bspecs` runs `npm install` for you when it scaffolds the project, so this is usually already done. If that install was skipped or failed (most often because `GITHUB_TOKEN` was not set in the scaffolding shell), run it yourself:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The b6p skills (`/b6p-pull`, `/b6p-push`, `/b6p-audit`) then invoke it as `npx b6p …`, which resolves `node_modules/.bin/b6p` cross-platform — no global install and no shell/PATH detection.
|
|
20
|
+
|
|
21
|
+
`npm install` needs a `~/.npmrc` granting access to the `@bluestep-systems` scope on GitHub Packages (a PAT with `read:packages`, exposed as `GITHUB_TOKEN`). The project's `.npmrc` maps the scope; the token is read from your environment.
|
|
22
|
+
|
|
23
|
+
### Configure platform credentials (one-time)
|
|
24
|
+
|
|
25
|
+
Set your BlueStep platform credentials once per machine:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx b6p auth set
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Without this, the first `npx b6p pull` will prompt for credentials interactively, which Claude Code cannot answer — the call will hang. Run `auth set` before invoking `/b6p-pull`.
|
|
32
|
+
|
|
33
|
+
The **VS Code b6p extension** (`bsjs-push-pull`, published in the Marketplace) is an equivalent fallback for pull/push when the CLI is not available.
|
|
34
|
+
|
|
35
|
+
The DAV URL passed to `b6p pull` is copied from the component's page in the BlueStep platform UI; `b6p pull` does **not** accept display names.
|
|
36
|
+
|
|
37
|
+
## Daily workflow
|
|
38
|
+
|
|
39
|
+
1. **Pull a component:** `/b6p-pull <DAV URL>` (Claude skill — also scaffolds `draft/README.md` from metadata + code when missing) or `npx b6p pull "<DAV URL>"`. The Unit folder is created automatically if it does not exist yet.
|
|
40
|
+
2. **Read the component's `draft/README.md`** before editing.
|
|
41
|
+
3. **Edit code** under `U######/<component>/draft/scripts/` — never `declarations/`.
|
|
42
|
+
4. **Push back:** `/b6p-push <component>` (Claude skill) or `npx b6p push --file "U######/<component>/draft/scripts/app.ts"`.
|
|
43
|
+
|
|
44
|
+
## New feature workflow
|
|
45
|
+
|
|
46
|
+
Use Claude skills for spec-driven development:
|
|
47
|
+
|
|
48
|
+
- `/spec-create <feature>` — generate requirements/design/tasks with approval gates.
|
|
49
|
+
- `/spec-execute <feature> <task#>` — implement one task.
|
|
50
|
+
- `/spec-status` — see progress.
|
|
51
|
+
- `/bug-fix` — shorter workflow for bug fixes.
|
|
52
|
+
|
|
53
|
+
## Configuration
|
|
54
|
+
|
|
55
|
+
- `CLAUDE.md` — main Claude context (critical rules, workspace model, API summary).
|
|
56
|
+
- `.claude/instructions/` — deep technical reference.
|
|
57
|
+
- `.claude/hooks/` — automatic guardrails (block edits to `declarations/`, block `tsc`, auto-format).
|
|
58
|
+
- `.claude/skills/` — slash commands you can invoke (`/b6p-pull`, `/spec-create`, etc.).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{PROJECT_NAME}}",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "{{PROJECT_DESCRIPTION}}",
|
|
5
|
+
"private": true,
|
|
6
|
+
"scripts": {
|
|
7
|
+
"b6p": "b6p"
|
|
8
|
+
},
|
|
9
|
+
"devDependencies": {
|
|
10
|
+
"@bluestep-systems/b6p-cli": "^0.1.0"
|
|
11
|
+
},
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=18.0.0"
|
|
14
|
+
}
|
|
15
|
+
}
|