@ngocsangairvds/vsaf 4.0.0 → 4.0.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.
Files changed (30) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/install.d.ts.map +1 -1
  3. package/packages/cli/dist/commands/install.js +13 -0
  4. package/packages/cli/dist/commands/install.js.map +1 -1
  5. package/skills/sdlc/discovery/SKILL.md +20 -5
  6. package/skills/sdlc/implement/SKILL.md +47 -14
  7. package/skills/sdlc/pack.yaml +1 -1
  8. package/skills/vds-skill/_shared/credentials.sh +79 -0
  9. package/skills/vds-skill/create-bitbucket-pr/SKILL.md +47 -0
  10. package/skills/vds-skill/create-bitbucket-pr/scripts/create-pr.sh +107 -0
  11. package/skills/vds-skill/create-jira-epic/SKILL.md +46 -0
  12. package/skills/vds-skill/create-jira-epic/scripts/create-epic.sh +113 -0
  13. package/skills/vds-skill/pack.yaml +24 -0
  14. package/skills/vds-skill/pull/SKILL.md +38 -0
  15. package/skills/vds-skill/pull/scripts/pull.sh +52 -0
  16. package/skills/vds-skill/push-prd/SKILL.md +218 -0
  17. package/skills/vds-skill/push-srs/SKILL.md +108 -0
  18. package/skills/vds-skill/search-confluence/SKILL.md +44 -0
  19. package/skills/vds-skill/search-confluence/scripts/search.sh +137 -0
  20. package/skills/vds-skill/vds-scripts-skill/.openskills.json +6 -0
  21. package/skills/vds-skill/vds-scripts-skill/QUALITY.md +44 -0
  22. package/skills/vds-skill/vds-scripts-skill/SKILL.md +127 -0
  23. package/skills/vds-skill/vds-scripts-skill/references/audit-commands.md +171 -0
  24. package/skills/vds-skill/vds-scripts-skill/references/capability-index.md +34 -0
  25. package/skills/vds-skill/vds-scripts-skill/references/development-commands.md +12 -0
  26. package/skills/vds-skill/vds-scripts-skill/references/google-sheets.md +71 -0
  27. package/skills/vds-skill/vds-scripts-skill/references/integration-commands.md +17 -0
  28. package/skills/vds-skill/vds-scripts-skill/references/platform-bootstrap.md +31 -0
  29. package/skills/vds-skill/vds-scripts-skill/references/specialist-routing.md +14 -0
  30. package/skills/vds-skill/vds-scripts-skill/references/validation-commands.md +15 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngocsangairvds/vsaf",
3
- "version": "4.0.0",
3
+ "version": "4.0.2",
4
4
  "description": "README",
5
5
  "main": "packages/core/dist/index.js",
6
6
  "types": "packages/core/dist/index.d.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAGD,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAOD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/C,YAAY,CA4Bd;AAUD,wBAAgB,aAAa,IAAI,WAAW,EAAE,CAU7C;AAqCD,wBAAgB,eAAe,IAAI,cAAc,CAqDhD;AAmBD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,sBAA2B,GACnC,aAAa,CAmFf"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAGD,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAOD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/C,YAAY,CA4Bd;AAUD,wBAAgB,aAAa,IAAI,WAAW,EAAE,CAU7C;AAqCD,wBAAgB,eAAe,IAAI,cAAc,CAqDhD;AAmBD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,sBAA2B,GACnC,aAAa,CAiGf"}
@@ -177,6 +177,19 @@ function execInstall(pack, projectPath, options = {}) {
177
177
  deploy.deployed.push(...bundled.deployed);
178
178
  deploy.skipped.push(...bundled.skipped);
179
179
  }
180
+ // Step 1c: Deploy _shared/ folder if pack has it (helper files for skill scripts)
181
+ // Namespace by pack name to avoid collision: <skillsDir>/_shared/<packName>/
182
+ // Always overwrite (no --force needed) — helpers must stay in sync with skills
183
+ const sharedSrc = (0, path_1.join)(packDir, '_shared');
184
+ if ((0, fs_1.existsSync)(sharedSrc)) {
185
+ const sharedTarget = (0, path_1.join)(skillsDir, '_shared', pack);
186
+ if ((0, fs_1.existsSync)(sharedTarget)) {
187
+ (0, fs_1.rmSync)(sharedTarget, { recursive: true, force: true });
188
+ }
189
+ (0, fs_1.mkdirSync)((0, path_1.join)(skillsDir, '_shared'), { recursive: true });
190
+ (0, fs_1.cpSync)(sharedSrc, sharedTarget, { recursive: true });
191
+ deploy.deployed.push(`_shared/${pack}`);
192
+ }
180
193
  console.log(`\n[vsaf] Skills deployed to ${skillsDir}`);
181
194
  for (const name of deploy.deployed)
182
195
  console.log(` ✓ ${name}`);
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -85,17 +85,32 @@ Use `/bmad-advanced-elicitation` — grill questions BASED ON system understandi
85
85
  [DISCOVERY] [3/6] Grill session — asking detailed questions... ✅
86
86
  ```
87
87
 
88
- ### Step 4: Brainstorming
88
+ ### Step 4: Dual Brainstorming
89
89
 
90
90
  ```
91
- [DISCOVERY] [4/6] Brainstorming based on grill answers... ⏳
91
+ [DISCOVERY] [4/6] Dual brainstorming based on grill answers... ⏳
92
92
  ```
93
93
 
94
- Use `/bmad-brainstorming` — structured ideation BASED ON answers from the grill session.
95
- Record results in `01-discovery.md` §Problem Statement.
94
+ Two complementary brainstorming approaches:
95
+
96
+ **4a — Structured brainstorm (Superpowers)**
97
+
98
+ Use `/superpowers:brainstorming` for structured exploration:
99
+ - 2-3 viable approaches with trade-offs
100
+ - Risk/constraint evaluation per approach
101
+ - Recommended option with reasoning
102
+
103
+ **4b — Creative brainstorm (BMAD)**
104
+
105
+ Use `/bmad-brainstorming` to explore alternatives and uncover hidden risks:
106
+ - Facilitator-led, diverse creative techniques
107
+ - Goal: ≥20 ideas/alternatives before reorganizing
108
+ - Surfaces edge cases the structured approach may miss
109
+
110
+ Record both results in `01-discovery.md` — §Problem Statement (4a) + §Alternatives (4b).
96
111
 
97
112
  ```
98
- [DISCOVERY] [4/6] Brainstorming based on grill answers... ✅
113
+ [DISCOVERY] [4/6] Dual brainstorming based on grill answers... ✅
99
114
  ```
100
115
 
101
116
  ### Step 5: Domain Research + Existing Code Scan
@@ -20,7 +20,7 @@ You are a Senior Software Engineer. Your mission: implement code following TDD
20
20
  ## Phase Entry Protocol
21
21
 
22
22
  ```
23
- [IMPLEMENT] [1/7] Checking input artifacts... ⏳
23
+ [IMPLEMENT] [1/8] Checking input artifacts... ⏳
24
24
  ```
25
25
 
26
26
  1. Input:
@@ -34,7 +34,7 @@ You are a Senior Software Engineer. Your mission: implement code following TDD
34
34
  5. Query `graph.json` for code structure
35
35
 
36
36
  ```
37
- [IMPLEMENT] [1/7] Checking input artifacts... ✅
37
+ [IMPLEMENT] [1/8] Checking input artifacts... ✅
38
38
  ```
39
39
 
40
40
  **Note:** This phase MUST run via `/superpowers:subagent-driven-development` — dispatch parallel subagents for each epic according to the Conflict Map in `04-epics.md`.
@@ -42,7 +42,7 @@ You are a Senior Software Engineer. Your mission: implement code following TDD
42
42
  ## Subagent-Driven Development Protocol
43
43
 
44
44
  ```
45
- [IMPLEMENT] [2/7] Initializing subagent-driven development... ⏳
45
+ [IMPLEMENT] [2/8] Initializing subagent-driven development... ⏳
46
46
  ```
47
47
 
48
48
  **MANDATORY** — Check and activate `/superpowers:subagent-driven-development`:
@@ -52,7 +52,7 @@ You are a Senior Software Engineer. Your mission: implement code following TDD
52
52
  4. Each subagent follows the Conflict Map — only modify files assigned to its epic
53
53
 
54
54
  ```
55
- [IMPLEMENT] [2/7] Initializing subagent-driven development... ✅
55
+ [IMPLEMENT] [2/8] Initializing subagent-driven development... ✅
56
56
  ```
57
57
 
58
58
  ## SonarQube Quality Gate — Apply DURING Coding
@@ -85,7 +85,7 @@ You are a Senior Software Engineer. Your mission: implement code following TDD
85
85
  ### Step 3: Task Planning
86
86
 
87
87
  ```
88
- [IMPLEMENT] [3/7] Task planning from testcases + ADR... ⏳
88
+ [IMPLEMENT] [3/8] Task planning from testcases + ADR... ⏳
89
89
  ```
90
90
 
91
91
  Use `/superpowers:writing-plans` — create granular task plan from testcases + ADR.
@@ -93,13 +93,34 @@ Each task maps to ≥1 FR/NFR.
93
93
  Write to `07-impl-plan.md`.
94
94
 
95
95
  ```
96
- [IMPLEMENT] [3/7] Task planning from testcases + ADR... ✅
96
+ [IMPLEMENT] [3/8] Task planning from testcases + ADR... ✅
97
+ ```
98
+
99
+ ### Step 3.5: Checkpoint Review (every 3-5 tasks)
100
+
101
+ ```
102
+ [IMPLEMENT] [3.5/8] Checkpoint review... ⏳
103
+ ```
104
+
105
+ After every 3-5 completed tasks: invoke `/bmad-checkpoint-preview` (human-in-the-loop walkthrough).
106
+
107
+ Purpose: pause and let the user review progress before continuing.
108
+
109
+ The checkpoint will:
110
+ - Summarize: what was done, which files changed, current tests status
111
+ - Highlight: points of concern, potential issues
112
+ - Ask user: continue / adjust / stop?
113
+
114
+ **Skip checkpoint if** the total plan has fewer than 5 tasks — checkpoint only at the end in that case.
115
+
116
+ ```
117
+ [IMPLEMENT] [3.5/8] Checkpoint review... ✅
97
118
  ```
98
119
 
99
120
  ### Step 4: TDD Cycle (per subagent)
100
121
 
101
122
  ```
102
- [IMPLEMENT] [4/7] TDD cycle — RED → GREEN → REFACTOR... ⏳
123
+ [IMPLEMENT] [4/8] TDD cycle — RED → GREEN → REFACTOR... ⏳
103
124
  ```
104
125
 
105
126
  Use `/superpowers:test-driven-development`:
@@ -118,40 +139,52 @@ For each test case in `06-testcases.md`:
118
139
  Use `/superpowers:executing-plans` — execute plan in order.
119
140
 
120
141
  ```
121
- [IMPLEMENT] [4/7] TDD cycle — RED → GREEN → REFACTOR... ✅
142
+ [IMPLEMENT] [4/8] TDD cycle — RED → GREEN → REFACTOR... ✅
122
143
  ```
123
144
 
124
145
  ### Step 5: Debug (if needed)
125
146
 
126
147
  ```
127
- [IMPLEMENT] [5/7] Debug (if there are test failures)... ⏳
148
+ [IMPLEMENT] [5/8] Debug (if there are test failures)... ⏳
128
149
  ```
129
150
 
130
151
  Use `/superpowers:systematic-debugging` — when a test does not turn GREEN:
131
152
  - Hypothesis → Experiment → Conclusion
132
153
  - If it fails 3 times → STOP, escalate
133
154
 
155
+ **Scope-drift detection:**
156
+
157
+ If during implementation you detect the feature requires CHANGES NOT IN THE SRS:
158
+ 1. Invoke `/bmad-correct-course` — assess impact + propose adjustments
159
+ 2. If requirements have genuinely changed:
160
+ - STOP implementation
161
+ - Update SRS first via `/sdlc-srs` EDIT mode
162
+ - Re-run `/sdlc-test-design` to generate new test cases
163
+ - Restart Phase 6 from Step 3
164
+ 3. If only minor adjustments needed: document the adjustment in `07-impl-plan.md` §Scope Adjustments and continue
165
+ 4. If unclear whether scope changed: STOP and present to user — let them decide
166
+
134
167
  ```
135
- [IMPLEMENT] [5/7] Debug (if there are test failures)... ✅
168
+ [IMPLEMENT] [5/8] Debug (if there are test failures)... ✅
136
169
  ```
137
170
 
138
171
  ### Step 6: Impact Verification
139
172
 
140
173
  ```
141
- [IMPLEMENT] [6/7] Impact verification via GitNexus... ⏳
174
+ [IMPLEMENT] [6/8] Impact verification via GitNexus... ⏳
142
175
  ```
143
176
 
144
177
  Use GitNexus `impact` — verify no other code is broken.
145
178
  Use GitNexus `rename` — safe multi-file refactoring if needed.
146
179
 
147
180
  ```
148
- [IMPLEMENT] [6/7] Impact verification via GitNexus... ✅
181
+ [IMPLEMENT] [6/8] Impact verification via GitNexus... ✅
149
182
  ```
150
183
 
151
184
  ### Step 7: Build & Run Verification
152
185
 
153
186
  ```
154
- [IMPLEMENT] [7/7] Build & run verification... ⏳
187
+ [IMPLEMENT] [7/8] Build & run verification... ⏳
155
188
  ```
156
189
 
157
190
  **MANDATORY** — code MUST compile and run successfully before exiting the phase.
@@ -183,7 +216,7 @@ Use GitNexus `rename` — safe multi-file refactoring if needed.
183
216
  ⚠️ **DO NOT exit the phase if code does not compile.** This is a hard gate — no exceptions.
184
217
 
185
218
  ```
186
- [IMPLEMENT] [7/7] Build & run verification... ✅
219
+ [IMPLEMENT] [7/8] Build & run verification... ✅
187
220
  ```
188
221
 
189
222
  ## Multi-machine Branching
@@ -1,5 +1,5 @@
1
1
  name: sdlc
2
- version: 1.1.0
2
+ version: 1.2.0
3
3
  description: Distributed Agentic SDLC — multi-machine, multi-repo, graph-based knowledge
4
4
  author: "@ngocsangairvds/vsaf"
5
5
 
@@ -0,0 +1,79 @@
1
+ #!/bin/bash
2
+ # Shared credential helper for vds-skill-* skills.
3
+ # Sourced by skill scripts to lazy-prompt + persist credentials.
4
+ # Config file: ~/.vds/sdlc-config.env (chmod 600)
5
+ #
6
+ # Portable across bash and zsh (uses eval for indirect expansion).
7
+
8
+ VSAF_CONFIG_FILE="${VSAF_CONFIG_FILE:-$HOME/.vds/sdlc-config.env}"
9
+ readonly VSAF_CONFIG_FILE
10
+
11
+ # Load existing config if present
12
+ if [[ -f "$VSAF_CONFIG_FILE" ]]; then
13
+ # shellcheck source=/dev/null
14
+ source "$VSAF_CONFIG_FILE"
15
+ fi
16
+
17
+ # Also load vds-cli's own env if present (for token reuse)
18
+ if [[ -f "$HOME/.vds/.env" ]]; then
19
+ set -a
20
+ # shellcheck source=/dev/null
21
+ source "$HOME/.vds/.env"
22
+ set +a
23
+ fi
24
+
25
+ # ensure_env VAR_NAME "Prompt message" [is_secret]
26
+ # Prompts user if VAR is empty, persists to config file.
27
+ # Re-persists if VAR is pre-set (supports token rotation).
28
+ ensure_env() {
29
+ local var="$1"
30
+ local prompt="${2:-Enter $var}"
31
+ local is_secret="${3:-true}"
32
+
33
+ # Portable indirect expansion (works in both bash and zsh)
34
+ local value
35
+ eval "value=\${$var:-}"
36
+
37
+ if [[ -z "$value" ]]; then
38
+ # Prompt user
39
+ if [[ "$is_secret" == "true" ]]; then
40
+ read -rsp "$prompt: " value
41
+ echo "" >&2
42
+ else
43
+ read -rp "$prompt: " value
44
+ fi
45
+
46
+ if [[ -z "$value" ]]; then
47
+ echo "ERROR: $var is required" >&2
48
+ return 1
49
+ fi
50
+
51
+ export "$var=$value"
52
+ fi
53
+
54
+ # Persist to config file (idempotent — replace existing entry or append)
55
+ mkdir -p "$(dirname "$VSAF_CONFIG_FILE")" || { echo "ERROR: Cannot create config dir $(dirname "$VSAF_CONFIG_FILE")" >&2; return 1; }
56
+
57
+ if grep -q "^${var}=" "$VSAF_CONFIG_FILE" 2>/dev/null; then
58
+ # Update in place (BSD/GNU sed compatible via tmp file)
59
+ local tmp
60
+ tmp=$(mktemp) || { echo "ERROR: mktemp failed" >&2; return 1; }
61
+ trap 'rm -f "$tmp"' EXIT INT TERM
62
+ grep -v "^${var}=" "$VSAF_CONFIG_FILE" > "$tmp"
63
+ printf '%s=%q\n' "$var" "$value" >> "$tmp"
64
+ mv "$tmp" "$VSAF_CONFIG_FILE"
65
+ trap - EXIT INT TERM
66
+ else
67
+ printf '%s=%q\n' "$var" "$value" >> "$VSAF_CONFIG_FILE"
68
+ fi
69
+ chmod 600 "$VSAF_CONFIG_FILE" || echo "WARN: Could not set chmod 600 on $VSAF_CONFIG_FILE" >&2
70
+ }
71
+
72
+ # require_command COMMAND_NAME — exits 127 if missing
73
+ require_command() {
74
+ if ! command -v "$1" >/dev/null 2>&1; then
75
+ echo "ERROR: Required command '$1' not found in PATH" >&2
76
+ echo " Install it before running this skill." >&2
77
+ return 127
78
+ fi
79
+ }
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: vds-skill-create-bitbucket-pr
3
+ description: Create a Bitbucket PR via `vds-cli bitbucket pr create`. Auto-extracts PROJECT/REPO from `git remote get-url origin`. Viettel-only — for GitHub use `gh pr create`. Run after /sdlc-ship when remote is bitbucket.digital.vn.
4
+ ---
5
+
6
+ # /vds-skill-create-bitbucket-pr
7
+
8
+ Create a Bitbucket PR on Viettel internal Bitbucket via `vds-cli`.
9
+
10
+ ## Prerequisites
11
+
12
+ - `vds-cli` installed (for non-dry-run)
13
+ - Inside a git repo with remote pointing to `bitbucket.digital.vn`
14
+ - On a named branch (not detached HEAD)
15
+ - `VDS_BITBUCKET_TOKEN` set OR lazy-prompted
16
+
17
+ ## Usage
18
+
19
+ ```bash
20
+ /vds-skill-create-bitbucket-pr # interactive, target=master
21
+ /vds-skill-create-bitbucket-pr --target develop # different target
22
+ /vds-skill-create-bitbucket-pr --dry-run # preview without executing
23
+ /vds-skill-create-bitbucket-pr --description-file FILE # custom description
24
+ /vds-skill-create-bitbucket-pr --title "Custom title"
25
+ ```
26
+
27
+ ## Behavior
28
+
29
+ 1. Verify remote URL matches `bitbucket.digital.vn` — abort if not
30
+ 2. Extract PROJECT/REPO from remote URL
31
+ 3. Determine source branch (current) + target (default `master`)
32
+ 4. Auto-detect description from `.vsaf/docs/features/*/09-ship.md` or `.vsaf/docs/hotfixes/*/03-ship.md`
33
+ 5. Lazy-prompt `VDS_BITBUCKET_TOKEN` if not set
34
+ 6. Confirm with user before executing
35
+ 7. Run `vds-cli bitbucket pr create $PROJECT/$REPO --source ... --target ... --title ... --description-file ... --yes --json-only`
36
+
37
+ ## Implementation
38
+
39
+ ```bash
40
+ bash ~/.claude/skills/vds-skill-create-bitbucket-pr/scripts/create-pr.sh "$@"
41
+ ```
42
+
43
+ ## Notes
44
+
45
+ - For GitHub repos: use `gh pr create` instead (already standard in `/sdlc-ship`).
46
+ - PR description defaults to the latest ship report from `.vsaf/docs/`.
47
+ - Dry-run works without `vds-cli` installed (preview mode).
@@ -0,0 +1,107 @@
1
+ #!/bin/bash
2
+ # vds-skill-create-bitbucket-pr: create Bitbucket PR via vds-cli
3
+ # Usage: create-pr.sh [--dry-run] [--target BRANCH] [--description-file FILE] [--title TITLE]
4
+ # Auto-extracts project/repo from `git remote get-url origin`.
5
+
6
+ # NOTE: No `set -e` — we want full control of the exit-code path.
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
9
+ # shellcheck source=/dev/null
10
+ source "$SCRIPT_DIR/../../_shared/vds-skill/credentials.sh"
11
+
12
+ require_command git
13
+ # Note: require_command vds-cli moved AFTER dry-run check.
14
+
15
+ DRY_RUN=false
16
+ TARGET_BRANCH="master"
17
+ DESC_FILE=""
18
+ TITLE=""
19
+
20
+ while [[ $# -gt 0 ]]; do
21
+ case "$1" in
22
+ --dry-run) DRY_RUN=true; shift ;;
23
+ --target) TARGET_BRANCH="$2"; shift 2 ;;
24
+ --description-file) DESC_FILE="$2"; shift 2 ;;
25
+ --title) TITLE="$2"; shift 2 ;;
26
+ *) echo "Unknown arg: $1" >&2; exit 2 ;;
27
+ esac
28
+ done
29
+
30
+ REMOTE_URL=$(git remote get-url origin 2>/dev/null || true)
31
+ if [[ -z "$REMOTE_URL" ]]; then
32
+ echo "ERROR: No git remote 'origin' configured" >&2
33
+ exit 1
34
+ fi
35
+
36
+ if [[ ! "$REMOTE_URL" =~ bitbucket\.digital\.vn ]]; then
37
+ echo "WARNING: Remote URL does not match bitbucket.digital.vn pattern:" >&2
38
+ echo " $REMOTE_URL" >&2
39
+ echo " This skill is for Viettel Bitbucket. For GitHub, use 'gh pr create'." >&2
40
+ exit 1
41
+ fi
42
+
43
+ # Extract PROJECT/REPO from URL
44
+ # Handles:
45
+ # ssh://git@bitbucket.digital.vn/PROJECT/repo.git
46
+ # ssh://git@bitbucket.digital.vn:7999/PROJECT/repo.git
47
+ # https://bitbucket.digital.vn/scm/PROJECT/repo.git
48
+ if [[ "$REMOTE_URL" =~ /scm/([^/]+)/([^/]+)\.git$ ]]; then
49
+ PROJECT="${BASH_REMATCH[1]}"
50
+ REPO="${BASH_REMATCH[2]}"
51
+ elif [[ "$REMOTE_URL" =~ /([^/]+)/([^/]+)\.git$ ]]; then
52
+ PROJECT="${BASH_REMATCH[1]}"
53
+ REPO="${BASH_REMATCH[2]}"
54
+ else
55
+ echo "ERROR: Cannot parse PROJECT/REPO from remote URL: $REMOTE_URL" >&2
56
+ exit 1
57
+ fi
58
+
59
+ SOURCE_BRANCH=$(git rev-parse --abbrev-ref HEAD)
60
+ if [[ -z "$SOURCE_BRANCH" ]] || [[ "$SOURCE_BRANCH" == "HEAD" ]]; then
61
+ echo "ERROR: Not on a named branch" >&2
62
+ exit 1
63
+ fi
64
+
65
+ if [[ -z "$TITLE" ]]; then
66
+ TITLE=$(git log -1 --pretty=%s)
67
+ fi
68
+
69
+ if [[ -z "$DESC_FILE" ]]; then
70
+ DESC_FILE=$(find .vsaf/docs/features -name '09-ship.md' 2>/dev/null | head -1)
71
+ [[ -z "$DESC_FILE" ]] && DESC_FILE=$(find .vsaf/docs/hotfixes -name '03-ship.md' 2>/dev/null | head -1)
72
+ [[ -z "$DESC_FILE" ]] && DESC_FILE=$(find .synapse/docs/features -name '09-ship.md' 2>/dev/null | head -1)
73
+ [[ -z "$DESC_FILE" ]] && DESC_FILE=$(find .synapse/docs/hotfixes -name '03-ship.md' 2>/dev/null | head -1)
74
+ fi
75
+
76
+ CMD=(vds-cli bitbucket pr create "$PROJECT/$REPO"
77
+ --source "$SOURCE_BRANCH"
78
+ --target "$TARGET_BRANCH"
79
+ --title "$TITLE")
80
+ [[ -n "$DESC_FILE" ]] && [[ -f "$DESC_FILE" ]] && CMD+=(--description-file "$DESC_FILE")
81
+
82
+ if [[ "$DRY_RUN" == "true" ]]; then
83
+ echo "DRY-RUN — would execute:"
84
+ printf ' %q' "${CMD[@]}"
85
+ echo ""
86
+ echo " + --yes --json-only"
87
+ exit 0
88
+ fi
89
+
90
+ require_command vds-cli
91
+
92
+ ensure_env VDS_BITBUCKET_TOKEN "Enter VDS Bitbucket personal access token"
93
+
94
+ echo "About to create PR:"
95
+ echo " Project/Repo: $PROJECT/$REPO"
96
+ echo " Source: $SOURCE_BRANCH"
97
+ echo " Target: $TARGET_BRANCH"
98
+ echo " Title: $TITLE"
99
+ echo " Description: ${DESC_FILE:-<empty>}"
100
+ echo ""
101
+ read -rp "Proceed? [y/N]: " confirm
102
+ if [[ "$confirm" != "y" ]] && [[ "$confirm" != "Y" ]]; then
103
+ echo "Aborted"
104
+ exit 1
105
+ fi
106
+
107
+ "${CMD[@]}" --yes --json-only
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: vds-skill-create-jira-epic
3
+ description: Create a Jira Epic via `vds-cli jira create --issuetype Epic` from a PRD file. Use after /sdlc-prd has produced 02-prd.md. Auto-detects PRD location, lazy-prompts credentials. Viettel-only (requires vds-cli).
4
+ ---
5
+
6
+ # /vds-skill-create-jira-epic
7
+
8
+ Create a Jira Epic on Viettel Jira based on a PRD markdown file.
9
+
10
+ ## Prerequisites
11
+
12
+ - `vds-cli` installed (for non-dry-run)
13
+ - `python3` installed
14
+ - A PRD file exists at `.vsaf/docs/features/{feature}/02-prd.md` or `.synapse/docs/features/{feature}/02-prd.md`
15
+ - `VDS_JIRA_TOKEN` + `VDS_JIRA_PROJECT_DEFAULT` set OR lazy-prompted
16
+
17
+ ## Usage
18
+
19
+ ```bash
20
+ /vds-skill-create-jira-epic # auto-detect latest PRD
21
+ /vds-skill-create-jira-epic --feature user-management # specific feature folder
22
+ /vds-skill-create-jira-epic --project NTTC # override project key
23
+ /vds-skill-create-jira-epic --dry-run # preview
24
+ /vds-skill-create-jira-epic --description-file path/to.md # custom description source
25
+ ```
26
+
27
+ ## Behavior
28
+
29
+ 1. Locate PRD file (or use `--description-file`)
30
+ 2. Extract summary from PRD's first H1 heading
31
+ 3. Lazy-prompt `VDS_JIRA_TOKEN` + `VDS_JIRA_PROJECT_DEFAULT` if missing
32
+ 4. Confirm with user
33
+ 5. Run `vds-cli jira create --project KEY --issuetype Epic --summary ... --description-file ... --yes --json-only`
34
+ 6. Save returned epic key to `<feature-dir>/jira-epic-key.txt`
35
+
36
+ ## Implementation
37
+
38
+ ```bash
39
+ bash ~/.claude/skills/vds-skill-create-jira-epic/scripts/create-epic.sh "$@"
40
+ ```
41
+
42
+ ## Notes
43
+
44
+ - Dry-run prints constructed `vds-cli` command without executing
45
+ - Dry-run skips `vds-cli` availability check — works on machines without vds-cli installed
46
+ - Epic key written to `<feature-dir>/jira-epic-key.txt` for later cross-reference
@@ -0,0 +1,113 @@
1
+ #!/bin/bash
2
+ # vds-skill-create-jira-epic: create a Jira Epic via vds-cli
3
+ # Usage: create-epic.sh [--dry-run] [--project KEY] [--description-file FILE] [--feature NAME]
4
+
5
+ # NOTE: No `set -e` — we want full control of the exit-code path.
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8
+ # shellcheck source=/dev/null
9
+ source "$SCRIPT_DIR/../../_shared/vds-skill/credentials.sh"
10
+
11
+ # Note: require_command vds-cli moved AFTER dry-run check so --dry-run
12
+ # works without vds-cli installed (preview mode).
13
+
14
+ DRY_RUN=false
15
+ PROJECT_KEY=""
16
+ DESC_FILE=""
17
+ FEATURE_NAME=""
18
+
19
+ while [[ $# -gt 0 ]]; do
20
+ case "$1" in
21
+ --dry-run) DRY_RUN=true; shift ;;
22
+ --project) PROJECT_KEY="$2"; shift 2 ;;
23
+ --description-file) DESC_FILE="$2"; shift 2 ;;
24
+ --feature) FEATURE_NAME="$2"; shift 2 ;;
25
+ *) echo "Unknown arg: $1" >&2; exit 2 ;;
26
+ esac
27
+ done
28
+
29
+ # Determine PRD file path
30
+ if [[ -z "$DESC_FILE" ]]; then
31
+ if [[ -n "$FEATURE_NAME" ]]; then
32
+ for path in ".vsaf/docs/features/$FEATURE_NAME/02-prd.md" \
33
+ ".synapse/docs/features/$FEATURE_NAME/02-prd.md"; do
34
+ [[ -f "$path" ]] && DESC_FILE="$path" && break
35
+ done
36
+ fi
37
+
38
+ # Fallback: most recent 02-prd.md
39
+ if [[ -z "$DESC_FILE" ]]; then
40
+ DESC_FILE=$(find .vsaf/docs/features .synapse/docs/features -name '02-prd.md' 2>/dev/null \
41
+ | xargs -I{} ls -t {} 2>/dev/null | head -1)
42
+ fi
43
+ fi
44
+
45
+ if [[ -z "$DESC_FILE" ]] || [[ ! -f "$DESC_FILE" ]]; then
46
+ echo "ERROR: PRD file not found. Run /sdlc-prd first or specify --description-file" >&2
47
+ exit 1
48
+ fi
49
+
50
+ # Derive feature name from PRD path if not given
51
+ if [[ -z "$FEATURE_NAME" ]]; then
52
+ FEATURE_NAME=$(basename "$(dirname "$DESC_FILE")")
53
+ fi
54
+
55
+ # Extract summary from PRD (first H1)
56
+ SUMMARY=$(grep -m1 '^# ' "$DESC_FILE" | sed 's/^# //' || true)
57
+ [[ -z "$SUMMARY" ]] && SUMMARY="$FEATURE_NAME"
58
+
59
+ if [[ "$DRY_RUN" == "true" ]]; then
60
+ DISPLAY_PROJECT="${PROJECT_KEY:-${VDS_JIRA_PROJECT_DEFAULT:-<VDS_JIRA_PROJECT_DEFAULT>}}"
61
+ CMD_DRY=(vds-cli jira create
62
+ --project "$DISPLAY_PROJECT"
63
+ --issuetype Epic
64
+ --summary "$SUMMARY"
65
+ --description-file "$DESC_FILE")
66
+ echo "DRY-RUN — would execute:"
67
+ printf ' %q' "${CMD_DRY[@]}"
68
+ echo ""
69
+ echo " + --yes --json-only"
70
+ exit 0
71
+ fi
72
+
73
+ require_command vds-cli
74
+
75
+ # Ensure credentials
76
+ ensure_env VDS_JIRA_TOKEN "Enter VDS Jira personal access token"
77
+ ensure_env VDS_JIRA_PROJECT_DEFAULT "Enter default Jira project key (e.g. NTTC)" false
78
+
79
+ PROJECT_KEY="${PROJECT_KEY:-$VDS_JIRA_PROJECT_DEFAULT}"
80
+
81
+ CMD=(vds-cli jira create
82
+ --project "$PROJECT_KEY"
83
+ --issuetype Epic
84
+ --summary "$SUMMARY"
85
+ --description-file "$DESC_FILE")
86
+
87
+ echo "About to create Jira Epic:"
88
+ echo " Project: $PROJECT_KEY"
89
+ echo " Summary: $SUMMARY"
90
+ echo " Description: $DESC_FILE"
91
+ echo " Feature: $FEATURE_NAME"
92
+ echo ""
93
+ read -rp "Proceed? [y/N]: " confirm
94
+ if [[ "$confirm" != "y" ]] && [[ "$confirm" != "Y" ]]; then
95
+ echo "Aborted"
96
+ exit 1
97
+ fi
98
+
99
+ RESULT=$("${CMD[@]}" --yes --json-only)
100
+ EPIC_KEY=$(echo "$RESULT" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("key",""))')
101
+
102
+ if [[ -z "$EPIC_KEY" ]]; then
103
+ echo "ERROR: Failed to extract epic key from vds-cli response" >&2
104
+ echo "Response: $RESULT" >&2
105
+ exit 1
106
+ fi
107
+
108
+ EPIC_KEY_FILE="$(dirname "$DESC_FILE")/jira-epic-key.txt"
109
+ echo "$EPIC_KEY" > "$EPIC_KEY_FILE"
110
+
111
+ echo ""
112
+ echo "✓ Created Jira Epic: $EPIC_KEY"
113
+ echo " Saved key to: $EPIC_KEY_FILE"