@longph2102/v-flow 1.5.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 (247) hide show
  1. package/AGENTS.md +265 -0
  2. package/CHANGELOG.md +318 -0
  3. package/LICENSE +21 -0
  4. package/README.md +326 -0
  5. package/agents/ba-agent.md +437 -0
  6. package/agents/ba-critic-agent.md +156 -0
  7. package/agents/ba-to-ptyc-agent.md +112 -0
  8. package/agents/bugfix-analyst-agent.md +221 -0
  9. package/agents/constitute-agent.md +155 -0
  10. package/agents/help-agent.md +168 -0
  11. package/agents/implement-agent.md +220 -0
  12. package/agents/import-ba-docs-agent.md +164 -0
  13. package/agents/master-check-agent.md +228 -0
  14. package/agents/metrics-agent.md +180 -0
  15. package/agents/operations-agent.md +123 -0
  16. package/agents/plan-agent.md +218 -0
  17. package/agents/prototype-agent.md +191 -0
  18. package/agents/retrospective-agent.md +196 -0
  19. package/agents/review-agent.md +210 -0
  20. package/agents/sprint-agent.md +191 -0
  21. package/agents/status-agent.md +186 -0
  22. package/agents/sync-agent.md +201 -0
  23. package/agents/test-agent.md +166 -0
  24. package/agents/understand-agent.md +339 -0
  25. package/cli/commands/check.js +96 -0
  26. package/cli/commands/dev-quiz.js +107 -0
  27. package/cli/commands/doctor.js +348 -0
  28. package/cli/commands/feature.js +259 -0
  29. package/cli/commands/hooks.js +163 -0
  30. package/cli/commands/init.js +189 -0
  31. package/cli/commands/log.js +199 -0
  32. package/cli/commands/plugin.js +230 -0
  33. package/cli/commands/score-card.js +203 -0
  34. package/cli/commands/status.js +269 -0
  35. package/cli/commands/sync.js +59 -0
  36. package/cli/commands/upgrade.js +150 -0
  37. package/cli/commands/validate.js +1259 -0
  38. package/cli/commands/watch.js +151 -0
  39. package/cli/index.js +46 -0
  40. package/cli/lib/ac-test-gate.js +89 -0
  41. package/cli/lib/activity-log.js +209 -0
  42. package/cli/lib/cli-error.js +183 -0
  43. package/cli/lib/constitution-lint.js +561 -0
  44. package/cli/lib/dev-quiz-grade.js +127 -0
  45. package/cli/lib/governance.js +78 -0
  46. package/cli/lib/hook-targets.js +167 -0
  47. package/cli/lib/i18n.js +375 -0
  48. package/cli/lib/knowledge-oracle.js +379 -0
  49. package/cli/lib/logger.js +203 -0
  50. package/cli/lib/module-card-lint.js +304 -0
  51. package/cli/lib/module-card-score.js +223 -0
  52. package/cli/lib/plugins.js +481 -0
  53. package/cli/lib/scanner.js +692 -0
  54. package/cli/lib/sync-core.js +232 -0
  55. package/cli/lib/sync-targets.js +84 -0
  56. package/cli/lib/templates.js +268 -0
  57. package/cli/lib/yaml-parser.js +203 -0
  58. package/commands/v.ba-critic.md +101 -0
  59. package/commands/v.ba-to-ptyc.md +71 -0
  60. package/commands/v.bugfix.md +86 -0
  61. package/commands/v.check.md +131 -0
  62. package/commands/v.constitute.md +87 -0
  63. package/commands/v.constitution.md +84 -0
  64. package/commands/v.fork.md +127 -0
  65. package/commands/v.help.md +73 -0
  66. package/commands/v.hotfix.md +200 -0
  67. package/commands/v.implement.md +92 -0
  68. package/commands/v.import-ba-docs.md +222 -0
  69. package/commands/v.metrics.md +74 -0
  70. package/commands/v.operations.md +70 -0
  71. package/commands/v.plan.md +78 -0
  72. package/commands/v.prototype.md +121 -0
  73. package/commands/v.quickfix.md +169 -0
  74. package/commands/v.retrospective.md +80 -0
  75. package/commands/v.review.md +78 -0
  76. package/commands/v.rewind.md +127 -0
  77. package/commands/v.specify.md +118 -0
  78. package/commands/v.sprint.md +75 -0
  79. package/commands/v.status.md +62 -0
  80. package/commands/v.sync.md +81 -0
  81. package/commands/v.test.md +67 -0
  82. package/commands/v.understand.md +112 -0
  83. package/package.json +65 -0
  84. package/skills/_shared/constitution-reader/SKILL.md +109 -0
  85. package/skills/_shared/constitution-reader/config.json +52 -0
  86. package/skills/_shared/constitution-reader/examples/good/b1-phase-output.md +48 -0
  87. package/skills/_shared/constitution-reader/gotchas.md +46 -0
  88. package/skills/_shared/context-reader/SKILL.md +111 -0
  89. package/skills/_shared/context-reader/config.json +54 -0
  90. package/skills/_shared/context-reader/examples/good/legacy-nodejs-output.md +35 -0
  91. package/skills/_shared/context-reader/gotchas.md +49 -0
  92. package/skills/_shared/ears-notation/SKILL.md +63 -0
  93. package/skills/_shared/ears-notation/config.json +55 -0
  94. package/skills/_shared/ears-notation/examples/good/plan-test-interpretation.md +29 -0
  95. package/skills/_shared/ears-notation/gotchas.md +43 -0
  96. package/skills/check/cross-validator/SKILL.md +206 -0
  97. package/skills/check/cross-validator/config.json +33 -0
  98. package/skills/check/cross-validator/examples/good/validation-report-pass-with-concerns.md +105 -0
  99. package/skills/check/cross-validator/gotchas.md +43 -0
  100. package/skills/implement/constitution-enforcer/SKILL.md +134 -0
  101. package/skills/implement/constitution-enforcer/config.json +16 -0
  102. package/skills/implement/constitution-enforcer/examples/bad/vague-report.md +42 -0
  103. package/skills/implement/constitution-enforcer/examples/good/compliance-report.md +57 -0
  104. package/skills/implement/constitution-enforcer/gotchas.md +26 -0
  105. package/skills/implement/constitution-enforcer/scripts/check-constitution.sh +88 -0
  106. package/skills/implement/no-go-zone-guard/SKILL.md +173 -0
  107. package/skills/implement/no-go-zone-guard/config.json +28 -0
  108. package/skills/implement/no-go-zone-guard/examples/good/adapter-workaround.md +46 -0
  109. package/skills/implement/no-go-zone-guard/gotchas.md +27 -0
  110. package/skills/implement/no-go-zone-guard/scripts/check-nogo-zones.sh +148 -0
  111. package/skills/implement/no-go-zone-guard/scripts/nogo-precommit.sh +96 -0
  112. package/skills/implement/tdd-driver/SKILL.md +159 -0
  113. package/skills/implement/tdd-driver/config.json +33 -0
  114. package/skills/implement/tdd-driver/examples/good/tdd-cycle-product-repo.md +81 -0
  115. package/skills/implement/tdd-driver/gotchas.md +34 -0
  116. package/skills/metrics/metrics-collector/SKILL.md +133 -0
  117. package/skills/metrics/metrics-collector/config.json +16 -0
  118. package/skills/metrics/metrics-collector/examples/bad/incomplete-report.md +48 -0
  119. package/skills/metrics/metrics-collector/examples/good/full-metrics-report.md +101 -0
  120. package/skills/metrics/metrics-collector/gotchas.md +26 -0
  121. package/skills/operations/incident-runbook/SKILL.md +167 -0
  122. package/skills/operations/incident-runbook/config.json +21 -0
  123. package/skills/operations/incident-runbook/examples/bad/vague-incident-report.md +48 -0
  124. package/skills/operations/incident-runbook/examples/good/p1-hotfix-response.md +119 -0
  125. package/skills/operations/incident-runbook/gotchas.md +26 -0
  126. package/skills/plan/architecture-designer/SKILL.md +228 -0
  127. package/skills/plan/architecture-designer/config.json +32 -0
  128. package/skills/plan/architecture-designer/examples/bad/vague-plan.md +62 -0
  129. package/skills/plan/architecture-designer/examples/good/expand-contract-migration.md +56 -0
  130. package/skills/plan/architecture-designer/examples/good/plan-structure.md +58 -0
  131. package/skills/plan/architecture-designer/gotchas.md +45 -0
  132. package/skills/plan/task-breakdown/SKILL.md +208 -0
  133. package/skills/plan/task-breakdown/config.json +26 -0
  134. package/skills/plan/task-breakdown/examples/bad/vague-tasks.md +77 -0
  135. package/skills/plan/task-breakdown/examples/good/spike-clarify-tasks.md +66 -0
  136. package/skills/plan/task-breakdown/examples/good/tasks-login-feature.md +111 -0
  137. package/skills/plan/task-breakdown/gotchas.md +39 -0
  138. package/skills/prototype/LOGIC.md +240 -0
  139. package/skills/prototype/SKILL.md +185 -0
  140. package/skills/prototype/UI.md +407 -0
  141. package/skills/prototype/config.json +104 -0
  142. package/skills/prototype/examples/bad/prototype-notes.md +68 -0
  143. package/skills/prototype/examples/good/prototype-notes-ui.md +109 -0
  144. package/skills/prototype/examples/good/prototype-notes.md +67 -0
  145. package/skills/prototype/gotchas.md +128 -0
  146. package/skills/prototype/scripts/check-flow-state.ps1 +112 -0
  147. package/skills/prototype/scripts/check-flow-state.sh +104 -0
  148. package/skills/prototype/scripts/check-prototype-cleanup.ps1 +124 -0
  149. package/skills/prototype/scripts/check-prototype-cleanup.sh +109 -0
  150. package/skills/prototype/scripts/check-prototype-notes.ps1 +107 -0
  151. package/skills/prototype/scripts/check-prototype-notes.sh +102 -0
  152. package/skills/review/adversarial-reviewer/SKILL.md +137 -0
  153. package/skills/review/adversarial-reviewer/config.json +32 -0
  154. package/skills/review/adversarial-reviewer/examples/good/review-report-template.md +56 -0
  155. package/skills/review/adversarial-reviewer/gotchas.md +46 -0
  156. package/skills/review/adversarial-reviewer/scripts/quick-security-scan.sh +52 -0
  157. package/skills/specify/ba-bpmn-doc-gen/SKILL.md +108 -0
  158. package/skills/specify/ba-bpmn-doc-gen/reference/reference-bpmn-generation.md +528 -0
  159. package/skills/specify/ba-bpmn-doc-gen/reference/reference-drawio-flowchart.md +466 -0
  160. package/skills/specify/ba-critic/SKILL.md +172 -0
  161. package/skills/specify/ba-critic/config.json +32 -0
  162. package/skills/specify/ba-critic/examples/good/critic-report-round1.md +51 -0
  163. package/skills/specify/ba-critic/gotchas.md +40 -0
  164. package/skills/specify/ba-critic/scripts/check-spec-quality.sh +72 -0
  165. package/skills/specify/ba-doc-generator/SKILL.md +102 -0
  166. package/skills/specify/ba-doc-generator/references/template-clevel.md +84 -0
  167. package/skills/specify/ba-doc-generator/references/template-compliance.md +83 -0
  168. package/skills/specify/ba-doc-generator/references/template-dev.md +138 -0
  169. package/skills/specify/ba-doc-generator/references/template-partner.md +167 -0
  170. package/skills/specify/ba-doc-generator/references/template-pm.md +92 -0
  171. package/skills/specify/ba-doc-generator/references/template-review.md +114 -0
  172. package/skills/specify/ba-doc-generator/references/template-tester.md +108 -0
  173. package/skills/specify/ba-doc-generator/references/template-user.md +98 -0
  174. package/skills/specify/bugfix-analyst/SKILL.md +296 -0
  175. package/skills/specify/bugfix-analyst/config.json +41 -0
  176. package/skills/specify/bugfix-analyst/examples/bad/common-mistakes.md +71 -0
  177. package/skills/specify/bugfix-analyst/examples/good/email-validation-bugfix.md +53 -0
  178. package/skills/specify/bugfix-analyst/gotchas.md +51 -0
  179. package/skills/specify/ears-writer/SKILL.md +129 -0
  180. package/skills/specify/ears-writer/config.json +20 -0
  181. package/skills/specify/ears-writer/examples/bad/common-mistakes.md +17 -0
  182. package/skills/specify/ears-writer/examples/good/login-requirements.md +41 -0
  183. package/skills/specify/ears-writer/gotchas.md +43 -0
  184. package/skills/specify/ears-writer/scripts/check-ears-compliance.sh +51 -0
  185. package/skills/test/test-case-generator/SKILL.md +161 -0
  186. package/skills/test/test-case-generator/config.json +33 -0
  187. package/skills/test/test-case-generator/examples/good/test-cases-login.md +104 -0
  188. package/skills/test/test-case-generator/gotchas.md +43 -0
  189. package/skills/understand/ba-docs-scanner/SKILL.md +239 -0
  190. package/skills/understand/ba-docs-scanner/config.json +47 -0
  191. package/skills/understand/ba-docs-scanner/examples/good/work-order-br-extract.md +28 -0
  192. package/skills/understand/ba-docs-scanner/gotchas.md +44 -0
  193. package/skills/understand/ba-docs-scanner/merge-rules.md +47 -0
  194. package/skills/understand/codebase-scanner/SKILL.md +260 -0
  195. package/skills/understand/codebase-scanner/config.json +56 -0
  196. package/skills/understand/codebase-scanner/examples/good/menu-module-output.md +44 -0
  197. package/skills/understand/codebase-scanner/gotchas.md +42 -0
  198. package/skills/understand/codebase-scanner/scripts/scan-project-structure.sh +64 -0
  199. package/templates/DESIGN.md +456 -0
  200. package/templates/agent-command-template.yaml +240 -0
  201. package/templates/agent-config-template.md +170 -0
  202. package/templates/agent-definition-template.md +145 -0
  203. package/templates/agent-metrics-template.md +150 -0
  204. package/templates/api-contract-template.md +72 -0
  205. package/templates/bugfix-report-template.md +195 -0
  206. package/templates/bugfix-spec-template.md +134 -0
  207. package/templates/code-review-report-template.md +119 -0
  208. package/templates/constitution-template.md +234 -0
  209. package/templates/context-template.md +94 -0
  210. package/templates/data-model-template.md +95 -0
  211. package/templates/decision-log-template.md +92 -0
  212. package/templates/flow-state-template.yaml +208 -0
  213. package/templates/github/workflows/v-flow-validate.yml +30 -0
  214. package/templates/knowledge/adr-template.md +70 -0
  215. package/templates/knowledge/api-contract-template.md +140 -0
  216. package/templates/knowledge/domain-glossary.md +29 -0
  217. package/templates/knowledge/golden-tests-readme.md +115 -0
  218. package/templates/knowledge/lessons-learned.md +41 -0
  219. package/templates/knowledge/patterns.md +103 -0
  220. package/templates/module-card/SKILL.md +85 -0
  221. package/templates/module-card/api-specs.md +96 -0
  222. package/templates/module-card/business-quiz.md +119 -0
  223. package/templates/module-card/cross-service.md +125 -0
  224. package/templates/module-card/db.md +85 -0
  225. package/templates/module-card/dev-quiz.md +62 -0
  226. package/templates/module-card/permissions.md +83 -0
  227. package/templates/module-card/state-diagram.md +64 -0
  228. package/templates/module-card/tech-context.md +90 -0
  229. package/templates/module-card/ui-flows.md +91 -0
  230. package/templates/module-card/use-cases.md +142 -0
  231. package/templates/module-template.yaml +161 -0
  232. package/templates/operations-report-template.md +108 -0
  233. package/templates/plan-template.md +308 -0
  234. package/templates/prototype-notes-template.md +116 -0
  235. package/templates/ptyc/PTYC.template.docx +0 -0
  236. package/templates/ptyc/ptyc.meta.example.yaml +44 -0
  237. package/templates/retrospective-report-template.md +136 -0
  238. package/templates/security-review-template.md +84 -0
  239. package/templates/session-template.md +167 -0
  240. package/templates/spec-review-log-template.md +75 -0
  241. package/templates/spec-template.md +229 -0
  242. package/templates/sprint-status-template.md +101 -0
  243. package/templates/tasks-template.md +275 -0
  244. package/templates/test-cases-template.md +124 -0
  245. package/templates/ux-checklist-template.md +79 -0
  246. package/templates/validation-report-template.md +125 -0
  247. package/templates/vflow-config-template.yaml +22 -0
@@ -0,0 +1,456 @@
1
+ ---
2
+ version: alpha
3
+ name: VCC Design System
4
+ description: >
5
+ Design system của VCC — thương hiệu đỏ đặc trưng (VCC Red) kết hợp
6
+ với Neutral scale sạch, hỗ trợ cả Light mode và Dark mode.
7
+ Font chữ kép: SF Pro Text cho UI text, FS PF BeauSans Pro cho brand heading.
8
+
9
+ colors:
10
+ # ── Brand (VCC Red) ──────────────────────────────────────────────────────
11
+ primary: "#E81D2C"
12
+ primary-hover: "#D01627"
13
+ primary-press: "#B31222"
14
+ primary-subtle: "#FFF5F5"
15
+ primary-subtle-hover: "#FFE3E3"
16
+ primary-strong: "#680A13"
17
+ primary-50: "#FFF5F5"
18
+ primary-100: "#FFE3E3"
19
+ primary-200: "#FFBDBD"
20
+ primary-300: "#FF9999"
21
+ primary-400: "#F56C6C"
22
+ primary-500: "#E81D2C"
23
+ primary-600: "#D01627"
24
+ primary-700: "#B31222"
25
+ primary-800: "#8E0E1A"
26
+ primary-900: "#680A13"
27
+ primary-950: "#42060D"
28
+
29
+ # ── Neutral ───────────────────────────────────────────────────────────────
30
+ neutral: "#737373"
31
+ neutral-50: "#F7F7F7"
32
+ neutral-100: "#F2F2F2"
33
+ neutral-200: "#E5E5E5"
34
+ neutral-300: "#D1D1D1"
35
+ neutral-400: "#A3A3A3"
36
+ neutral-500: "#737373"
37
+ neutral-600: "#525252"
38
+ neutral-700: "#2E2E2E"
39
+ neutral-800: "#1F1F1F"
40
+ neutral-900: "#191919"
41
+ neutral-950: "#121212"
42
+
43
+ # ── Base ──────────────────────────────────────────────────────────────────
44
+ white: "#FFFFFF"
45
+ black: "#000000"
46
+
47
+ # ── Status: Success ───────────────────────────────────────────────────────
48
+ success: "#34B766"
49
+ success-hover: "#259450"
50
+ success-subtle: "#F1FCF5"
51
+
52
+ # ── Status: Info ──────────────────────────────────────────────────────────
53
+ info: "#3B82F6"
54
+ info-hover: "#2570EB"
55
+ info-subtle: "#EFF5FF"
56
+
57
+ # ── Status: Warning ───────────────────────────────────────────────────────
58
+ warning: "#F9A006"
59
+ warning-hover: "#DD7802"
60
+ warning-subtle: "#FFFBEB"
61
+
62
+ # ── Status: Error ─────────────────────────────────────────────────────────
63
+ error: "#F63737"
64
+ error-hover: "#E41E1E"
65
+ error-subtle: "#FFF1F1"
66
+
67
+ # ── Semantic: Background (Light mode) ─────────────────────────────────────
68
+ bg-default: "{colors.white}"
69
+ bg-surface: "{colors.neutral-50}"
70
+ bg-surface-1: "{colors.neutral-100}"
71
+ bg-surface-2: "{colors.neutral-200}"
72
+ bg-disabled: "{colors.neutral-200}"
73
+ bg-brand: "{colors.primary-500}"
74
+ bg-brand-subtle: "{colors.primary-50}"
75
+ bg-success-subtle: "{colors.success-subtle}"
76
+ bg-info-subtle: "{colors.info-subtle}"
77
+ bg-warning-subtle: "{colors.warning-subtle}"
78
+ bg-error-subtle: "{colors.error-subtle}"
79
+
80
+ # ── Semantic: Text & Icon ─────────────────────────────────────────────────
81
+ text-strong: "{colors.neutral-950}"
82
+ text-medium: "{colors.neutral-700}"
83
+ text-normal: "{colors.neutral-600}"
84
+ text-light: "{colors.neutral-500}"
85
+ text-disabled: "{colors.neutral-400}"
86
+ text-white: "{colors.white}"
87
+ text-brand: "{colors.primary-500}"
88
+ text-success: "{colors.success}"
89
+ text-info: "{colors.info}"
90
+ text-warning: "{colors.warning}"
91
+ text-error: "{colors.error}"
92
+
93
+ # ── Semantic: Border ──────────────────────────────────────────────────────
94
+ border-default: "{colors.neutral-950}"
95
+ border-medium: "{colors.neutral-300}"
96
+ border-light: "{colors.neutral-200}"
97
+ border-disabled: "{colors.neutral-200}"
98
+ border-brand: "{colors.primary-500}"
99
+ border-success: "{colors.success}"
100
+ border-info: "{colors.info}"
101
+ border-warning: "{colors.warning}"
102
+ border-error: "{colors.error}"
103
+
104
+ typography:
105
+ # ── Display ───────────────────────────────────────────────────────────────
106
+ display-xl:
107
+ fontFamily: FS PF BeauSans Pro
108
+ fontSize: 72px
109
+ fontWeight: 700
110
+ lineHeight: 1.1
111
+ letterSpacing: -0.02em
112
+ display-lg:
113
+ fontFamily: FS PF BeauSans Pro
114
+ fontSize: 64px
115
+ fontWeight: 700
116
+ lineHeight: 1.1
117
+ letterSpacing: -0.02em
118
+ display-md:
119
+ fontFamily: FS PF BeauSans Pro
120
+ fontSize: 56px
121
+ fontWeight: 700
122
+ lineHeight: 1.15
123
+ letterSpacing: -0.01em
124
+
125
+ # ── Heading ───────────────────────────────────────────────────────────────
126
+ h1:
127
+ fontFamily: FS PF BeauSans Pro
128
+ fontSize: 48px
129
+ fontWeight: 700
130
+ lineHeight: 1.2
131
+ letterSpacing: -0.02em
132
+ h2:
133
+ fontFamily: FS PF BeauSans Pro
134
+ fontSize: 40px
135
+ fontWeight: 700
136
+ lineHeight: 1.25
137
+ letterSpacing: -0.01em
138
+ h3:
139
+ fontFamily: SF Pro Text
140
+ fontSize: 32px
141
+ fontWeight: 600
142
+ lineHeight: 1.3
143
+ letterSpacing: -0.01em
144
+ h4:
145
+ fontFamily: SF Pro Text
146
+ fontSize: 28px
147
+ fontWeight: 600
148
+ lineHeight: 1.35
149
+ letterSpacing: 0em
150
+ h5:
151
+ fontFamily: SF Pro Text
152
+ fontSize: 24px
153
+ fontWeight: 600
154
+ lineHeight: 1.4
155
+ letterSpacing: 0em
156
+ h6:
157
+ fontFamily: SF Pro Text
158
+ fontSize: 20px
159
+ fontWeight: 600
160
+ lineHeight: 1.4
161
+ letterSpacing: 0em
162
+
163
+ # ── Body ──────────────────────────────────────────────────────────────────
164
+ body-xl:
165
+ fontFamily: SF Pro Text
166
+ fontSize: 20px
167
+ fontWeight: 400
168
+ lineHeight: 1.6
169
+ letterSpacing: 0em
170
+ body-lg:
171
+ fontFamily: SF Pro Text
172
+ fontSize: 18px
173
+ fontWeight: 400
174
+ lineHeight: 1.6
175
+ letterSpacing: 0em
176
+ body-md:
177
+ fontFamily: SF Pro Text
178
+ fontSize: 16px
179
+ fontWeight: 400
180
+ lineHeight: 1.6
181
+ letterSpacing: 0em
182
+ body-sm:
183
+ fontFamily: SF Pro Text
184
+ fontSize: 14px
185
+ fontWeight: 400
186
+ lineHeight: 1.5
187
+ letterSpacing: 0em
188
+ body-xs:
189
+ fontFamily: SF Pro Text
190
+ fontSize: 12px
191
+ fontWeight: 400
192
+ lineHeight: 1.5
193
+ letterSpacing: 0em
194
+
195
+ # ── Label / UI ────────────────────────────────────────────────────────────
196
+ label-lg:
197
+ fontFamily: SF Pro Text
198
+ fontSize: 16px
199
+ fontWeight: 500
200
+ lineHeight: 1.4
201
+ letterSpacing: 0em
202
+ label-md:
203
+ fontFamily: SF Pro Text
204
+ fontSize: 14px
205
+ fontWeight: 500
206
+ lineHeight: 1.4
207
+ letterSpacing: 0em
208
+ label-sm:
209
+ fontFamily: SF Pro Text
210
+ fontSize: 12px
211
+ fontWeight: 500
212
+ lineHeight: 1.4
213
+ letterSpacing: 0em
214
+
215
+ spacing:
216
+ "0": 0px
217
+ "2": 2px
218
+ "4": 4px
219
+ "6": 6px
220
+ "8": 8px
221
+ "10": 10px
222
+ "12": 12px
223
+ "14": 14px
224
+ "16": 16px
225
+ "20": 20px
226
+ "24": 24px
227
+ "28": 28px
228
+ "32": 32px
229
+ "36": 36px
230
+ "40": 40px
231
+ "44": 44px
232
+ "48": 48px
233
+ "56": 56px
234
+ "64": 64px
235
+ "72": 72px
236
+ "80": 80px
237
+ "96": 96px
238
+ "112": 112px
239
+ "128": 128px
240
+ "160": 160px
241
+ "192": 192px
242
+ "224": 224px
243
+ "256": 256px
244
+ "320": 320px
245
+
246
+ rounded:
247
+ none: 0px
248
+ xs: 2px
249
+ sm: 4px
250
+ md: 8px
251
+ lg: 12px
252
+ xl: 16px
253
+ "2xl": 20px
254
+ "3xl": 24px
255
+ full: 9999px
256
+
257
+ components:
258
+ button-primary:
259
+ backgroundColor: "{colors.primary}"
260
+ textColor: "{colors.white}"
261
+ typography: "{typography.label-md}"
262
+ rounded: "{rounded.md}"
263
+ padding: 10px 16px
264
+ button-primary-hover:
265
+ backgroundColor: "{colors.primary-hover}"
266
+ button-primary-press:
267
+ backgroundColor: "{colors.primary-press}"
268
+ button-primary-disabled:
269
+ backgroundColor: "{colors.bg-disabled}"
270
+ textColor: "{colors.text-disabled}"
271
+
272
+ button-secondary:
273
+ backgroundColor: "{colors.white}"
274
+ textColor: "{colors.primary}"
275
+ typography: "{typography.label-md}"
276
+ rounded: "{rounded.md}"
277
+ padding: 10px 16px
278
+ button-secondary-hover:
279
+ backgroundColor: "{colors.primary-subtle}"
280
+
281
+ button-ghost:
282
+ backgroundColor: transparent
283
+ textColor: "{colors.text-normal}"
284
+ typography: "{typography.label-md}"
285
+ rounded: "{rounded.md}"
286
+ padding: 10px 16px
287
+ button-ghost-hover:
288
+ backgroundColor: "{colors.bg-surface}"
289
+
290
+ input-default:
291
+ backgroundColor: "{colors.white}"
292
+ textColor: "{colors.text-strong}"
293
+ typography: "{typography.body-md}"
294
+ rounded: "{rounded.md}"
295
+ padding: 10px 14px
296
+ input-focus:
297
+ backgroundColor: "{colors.white}"
298
+ input-error:
299
+ backgroundColor: "{colors.white}"
300
+ input-disabled:
301
+ backgroundColor: "{colors.bg-disabled}"
302
+ textColor: "{colors.text-disabled}"
303
+
304
+ badge-brand:
305
+ backgroundColor: "{colors.bg-brand-subtle}"
306
+ textColor: "{colors.primary-600}"
307
+ typography: "{typography.label-sm}"
308
+ rounded: "{rounded.full}"
309
+ padding: 2px 8px
310
+ badge-success:
311
+ backgroundColor: "{colors.success-subtle}"
312
+ textColor: "{colors.success-hover}"
313
+ typography: "{typography.label-sm}"
314
+ rounded: "{rounded.full}"
315
+ padding: 2px 8px
316
+ badge-error:
317
+ backgroundColor: "{colors.error-subtle}"
318
+ textColor: "{colors.error-hover}"
319
+ typography: "{typography.label-sm}"
320
+ rounded: "{rounded.full}"
321
+ padding: 2px 8px
322
+ badge-warning:
323
+ backgroundColor: "{colors.warning-subtle}"
324
+ textColor: "{colors.warning-hover}"
325
+ typography: "{typography.label-sm}"
326
+ rounded: "{rounded.full}"
327
+ padding: 2px 8px
328
+ badge-info:
329
+ backgroundColor: "{colors.info-subtle}"
330
+ textColor: "{colors.info-hover}"
331
+ typography: "{typography.label-sm}"
332
+ rounded: "{rounded.full}"
333
+ padding: 2px 8px
334
+ ---
335
+
336
+ # VCC Design System
337
+
338
+ ## Overview
339
+
340
+ VCC là thương hiệu trong lĩnh vực dịch vụ/thương mại với nhận diện màu đỏ đặc trưng. Design system hướng đến cảm giác **đáng tin cậy, hiện đại và chuyên nghiệp** — không cầu kỳ, không thừa chi tiết. UI luôn rõ ràng và dễ scan.
341
+
342
+ Hai font song song phục vụ hai vai trò tách biệt:
343
+ - **FS PF BeauSans Pro** — brand personality: dùng cho tiêu đề lớn (Display, H1, H2), nơi bản sắc VCC cần được nhìn thấy ngay lập tức.
344
+ - **SF Pro Text** — system clarity: toàn bộ UI text còn lại — body, label, input, button. Ưu tiên legibility trên mọi kích thước.
345
+
346
+ VCC Red (`#E81D2C`) là màu hành động duy nhất — dùng cho CTA chính, link active, và trạng thái brand. Không pha trộn tùy ý với status colors.
347
+
348
+ ## Colors
349
+
350
+ Palette được xây dựng trên 3 nhóm chính: **Brand (VCC Red)**, **Neutral**, và **Status**.
351
+
352
+ ### Brand — VCC Red
353
+ Màu đỏ VCC là trung tâm nhận diện. Mọi tương tác chính (button primary, link, focus ring) đều dùng brand scale này.
354
+
355
+ - **`primary` (#E81D2C):** Đỏ VCC — CTA chính, icon active, border focus.
356
+ - **`primary-hover` (#D01627):** Trạng thái hover — tối hơn một bước.
357
+ - **`primary-press` (#B31222):** Trạng thái pressed — tối nhất trong interaction.
358
+ - **`primary-subtle` (#FFF5F5):** Background nhẹ cho tag/badge brand, không cạnh tranh với content.
359
+ - **`primary-strong` (#680A13):** Text brand trên nền sáng, đảm bảo contrast cao.
360
+
361
+ ### Neutral
362
+ Xương sống của mọi surface, text và border. Scale từ `neutral-50` (gần trắng) đến `neutral-950` (gần đen).
363
+
364
+ - **Text hierarchy:** `text-strong` → `text-medium` → `text-normal` → `text-light` → `text-disabled`
365
+ - **Surface hierarchy:** `bg-default` (white) → `bg-surface` (#F7F7F7) → `bg-surface-1` (#F2F2F2) → `bg-surface-2` (#E5E5E5)
366
+ - **Border hierarchy:** `border-default` (full contrast) → `border-medium` → `border-light`
367
+
368
+ ### Status Colors
369
+ Chỉ dùng đúng ngữ cảnh ngữ nghĩa — không dùng thay thế brand color.
370
+
371
+ | Role | Default | Subtle BG | Usage |
372
+ |------|---------|-----------|-------|
373
+ | Success | `#34B766` | `#F1FCF5` | Thành công, xác nhận, upload done |
374
+ | Info | `#3B82F6` | `#EFF5FF` | Thông tin trung tính, tooltip |
375
+ | Warning | `#F9A006` | `#FFFBEB` | Cảnh báo nhẹ, chưa critical |
376
+ | Error | `#F63737` | `#FFF1F1` | Lỗi form, trạng thái thất bại |
377
+
378
+ ### Dark Mode
379
+ Dark mode đảo ngược hierarchy: `bg-default` → `neutral-950` (#121212), text scale tăng sáng, brand color nhẹ hơn một bậc (`primary-400` thay vì `primary-500`). Tất cả semantic tokens tự động chuyển đổi theo mode.
380
+
381
+ ## Typography
382
+
383
+ Hai font family phục vụ hai vai trò tách biệt rõ ràng:
384
+
385
+ **FS PF BeauSans Pro** — Brand voice. Dùng từ `display-xl` đến `h2`. Đây là nơi nhận diện VCC được thể hiện mạnh nhất.
386
+
387
+ **SF Pro Text** — System clarity. Dùng từ `h3` trở xuống (heading nhỏ, body, label, button). Ưu tiên readability trên mọi density.
388
+
389
+ ### Font Weight Scale
390
+ | Weight | Value | Usage |
391
+ |--------|-------|-------|
392
+ | Regular | 400 | Body text |
393
+ | Medium | 500 | Label, caption, metadata |
394
+ | Semibold | 600 | Subheading, emphasis |
395
+ | Bold | 700 | Heading, display |
396
+ | Extra Bold | 800 | Hero headline (dùng tiết kiệm) |
397
+ | Black | 900 | Marketing, mascot text (rất hiếm) |
398
+
399
+ ### Letter Spacing
400
+ Heading lớn dùng `letterSpacing: -0.02em` để tạo cảm giác gọn và cao cấp hơn. Body text dùng `0em` — không điều chỉnh.
401
+
402
+ ## Layout & Spacing
403
+
404
+ Spacing scale dùng bội số của `4px`, bắt đầu từ `2px` cho micro-adjustments.
405
+
406
+ **Khuyến nghị áp dụng:**
407
+ - `4–8px` — khoảng cách trong component (icon ↔ text, label ↔ input)
408
+ - `12–16px` — padding bên trong component (button, input, card)
409
+ - `20–24px` — khoảng cách giữa các element trong một nhóm
410
+ - `32–48px` — khoảng cách giữa các section trong page
411
+ - `64px+` — layout gap, page margin ngoài cùng
412
+
413
+ ## Shapes
414
+
415
+ Border radius theo scale từ `none` đến `full`. Nguyên tắc chọn radius phản ánh cảm giác của component:
416
+
417
+ - **Button:** `rounded.md` (8px) — hiện đại nhưng không quá tròn
418
+ - **Input:** `rounded.md` (8px) — đồng bộ với button
419
+ - **Card:** `rounded.lg` (12px) — tạo cảm giác container mềm mại hơn
420
+ - **Modal/Dialog:** `rounded.xl` (16px) — nổi bật, tách khỏi background
421
+ - **Badge/Tag:** `rounded.full` (9999px) — pill shape, dễ nhận diện
422
+ - **Avatar/Chip nhỏ:** `rounded.full`
423
+
424
+ ## Components
425
+
426
+ ### Button
427
+ Ba loại button chính theo thứ tự hierarchy:
428
+
429
+ 1. **`button-primary`** — CTA chính. Nền đỏ VCC, text trắng. Chỉ có 1 primary button visible mỗi màn hình.
430
+ 2. **`button-secondary`** — Action thứ cấp. Nền trắng, viền mỏng, text đỏ. Dùng khi có cả hai action ngang nhau.
431
+ 3. **`button-ghost`** — Action bổ sung / destructive nhẹ. Không nền, text neutral. Dùng cho "Cancel", "Back".
432
+
433
+ Kích thước padding chuẩn: `10px 16px`. Không thay đổi trừ khi có explicit size variant (sm/lg).
434
+
435
+ ### Input
436
+ Input chuẩn có `border-light` làm default border. Khi focus: dùng `border-brand` + focus ring `primary` với opacity 20%. Khi error: `border-error`. Khi disabled: `bg-disabled` + `text-disabled`.
437
+
438
+ ### Badge / Status Tag
439
+ Pill shape (`rounded.full`) với màu subtle background tương ứng role. Text dùng `label-sm` (12px medium). Không dùng bold cho badge — quá nặng ở kích thước nhỏ.
440
+
441
+ ## Do's and Don'ts
442
+
443
+ **✅ Do:**
444
+ - Dùng `primary-500` (#E81D2C) cho **duy nhất 1 CTA chính** mỗi màn hình
445
+ - Dùng **semantic tokens** (`text-strong`, `bg-surface`) trong code, không hard-code primitive values
446
+ - Giữ heading Display/H1/H2 dùng **FS PF BeauSans Pro** — đây là nhận diện thương hiệu
447
+ - Test contrast WCAG AA (4.5:1) cho mọi text-background combination
448
+ - Dùng `dark mode` semantic tokens — chúng đã được map sẵn cho dark context
449
+
450
+ **❌ Don't:**
451
+ - Đừng dùng VCC Red (`primary`) như màu decoration — nó là màu hành động
452
+ - Đừng mix status color với brand color trong cùng một component
453
+ - Đừng hard-code hex values — luôn dùng token reference `{colors.xxx}`
454
+ - Đừng thêm font weight không có trong scale (ví dụ: 300 Light)
455
+ - Đừng dùng `letter-spacing` dương (+) cho heading — sẽ trông rời rạc và không chuyên nghiệp
456
+ - Đừng để nhiều hơn 1 `button-primary` visible cùng lúc trên màn hình
@@ -0,0 +1,240 @@
1
+ # Agent Command Output Schema
2
+
3
+ # Mỗi Agent khi hoàn thành phase PHẢI xuất ra structured command block.
4
+ # Block này nằm cuối output markdown, cho phép Status Agent parse tự động.
5
+ # Lấy cảm hứng từ LangGraph Command pattern — gộp state_update + routing.
6
+
7
+ # ─ Cách dùng ─────────────────────────────────────────────────────
8
+ # Agent thêm block sau vào cuối artifact output (validation-report, _session.md, etc.):
9
+ #
10
+ # ```yaml
11
+ # # --- AGENT COMMAND ---
12
+ # agent: "Master Check Agent"
13
+ # phase: "R.0"
14
+ # timestamp: "2026-04-03T10:30:00"
15
+ #
16
+ # state_updates:
17
+ # current_phase: "R.0"
18
+ # phase_status: "done"
19
+ # artifacts.validation_report.verdict: "PASS_WITH_CONCERNS"
20
+ # artifacts.validation_report.concerns_count: 2
21
+ # artifacts.validation_report.issues_critical: 0
22
+ # artifacts.validation_report.issues_major: 0
23
+ #
24
+ # concerns:
25
+ # - id: "W-001"
26
+ # description: "Rate limiting cần implement"
27
+ # severity: "medium"
28
+ # - id: "W-002"
29
+ # description: "Input sanitization cần verify"
30
+ # severity: "low"
31
+ #
32
+ # routing:
33
+ # next_phase: "B.1"
34
+ # next_command: "/v.implement"
35
+ # condition: "human_checkpoint: master_check_approved"
36
+ # fail_reason: null
37
+ #
38
+ # human_action_required: true
39
+ # human_action: "Review concerns list → confirm implement"
40
+ # # --- END COMMAND ---
41
+ # ```
42
+ # ─────────────────────────────────────────────────────────────────
43
+
44
+ # Schema cho từng Agent:
45
+
46
+ # ═══════════════════════════════════════════════════════════════
47
+ # BA Agent (S.1) → sau khi tạo spec
48
+ # ═══════════════════════════════════════════════════════════════
49
+ ba_agent_command:
50
+ agent: "BA Agent"
51
+ phase: "S.1"
52
+ state_updates:
53
+ current_phase: "S.1"
54
+ phase_status: "done"
55
+ artifacts.spec.exists: true
56
+ artifacts.spec.version: "v1.0"
57
+ artifacts.spec.status: "draft"
58
+ routing:
59
+ next_phase: "S.1" # chờ human approve spec
60
+ next_command: null # human action, không phải agent command
61
+ condition: "human_checkpoint: spec_approved"
62
+ human_action_required: true
63
+ human_action: "Review spec.md → approve hoặc request changes"
64
+
65
+ # ═══════════════════════════════════════════════════════════════
66
+ # Plan Agent (B.0a) → sau khi tạo plan + tasks
67
+ # ═══════════════════════════════════════════════════════════════
68
+ plan_agent_command:
69
+ agent: "Plan Agent"
70
+ phase: "B.0a"
71
+ state_updates:
72
+ current_phase: "B.0"
73
+ phase_status: "done"
74
+ artifacts.plan.exists: true
75
+ artifacts.plan.synced_to_spec: "v1.0"
76
+ artifacts.tasks.exists: true
77
+ artifacts.tasks.total: 10
78
+ b0_outputs.plan: { exists: true }
79
+ b0_outputs.security: { exists: false, skipped: true }
80
+ routing:
81
+ next_phase: "R.0"
82
+ next_command: "/v.check"
83
+ condition: "test-cases.md must also exist" # chờ Test Agent hoàn thành
84
+ human_action_required: false
85
+
86
+ # ═══════════════════════════════════════════════════════════════
87
+ # Master Check Agent (R.0) → sau khi check
88
+ # ═══════════════════════════════════════════════════════════════
89
+ master_check_command:
90
+ agent: "Master Check Agent"
91
+ phase: "R.0"
92
+ state_updates:
93
+ current_phase: "R.0"
94
+ phase_status: "done"
95
+ artifacts.validation_report.exists: true
96
+ artifacts.validation_report.verdict: "PASS_WITH_CONCERNS"
97
+ artifacts.validation_report.spec_version_checked: "v1.0"
98
+ routing.after_master_check.last_verdict: "PASS_WITH_CONCERNS"
99
+ routing.after_master_check.last_fail_reason: null
100
+ routing.after_master_check.route_decision: "implement"
101
+ concerns:
102
+ - id: "W-001"
103
+ description: "Rate limiting"
104
+ routing:
105
+ next_phase: "B.1"
106
+ next_command: "/v.implement"
107
+ condition: "human_checkpoint: master_check_approved"
108
+ fail_reason: null # null | spec_gap | plan_gap | test_gap | nogo_violation | constitution_violation
109
+ human_action_required: true
110
+ human_action: "Confirm PASS_WITH_CONCERNS → approve implement"
111
+
112
+ # ═══════════════════════════════════════════════════════════════
113
+ # Implement Agent (B.1) → sau khi implement xong
114
+ # ═══════════════════════════════════════════════════════════════
115
+ implement_agent_command:
116
+ agent: "Implement Agent"
117
+ phase: "B.1"
118
+ state_updates:
119
+ current_phase: "B.1"
120
+ phase_status: "done"
121
+ artifacts.tasks.completed: 10
122
+ artifacts.tasks.in_progress: 0
123
+ concerns_resolved:
124
+ - id: "W-001"
125
+ resolved: true
126
+ resolved_how: "Implemented express-rate-limit middleware"
127
+ routing:
128
+ next_phase: "R.1"
129
+ next_command: "/v.review"
130
+ condition: null # không cần human checkpoint
131
+ human_action_required: false
132
+
133
+ # ═══════════════════════════════════════════════════════════════
134
+ # Review Agent (R.1) → sau khi review xong
135
+ # ═══════════════════════════════════════════════════════════════
136
+ review_agent_command:
137
+ agent: "Review Agent"
138
+ phase: "R.1"
139
+ state_updates:
140
+ current_phase: "R.1"
141
+ phase_status: "done"
142
+ artifacts.code_review.exists: true
143
+ artifacts.code_review.verdict: "APPROVED"
144
+ routing.after_review.last_verdict: "APPROVED"
145
+ routing.after_review.route_decision: "deploy"
146
+ routing:
147
+ next_phase: "M.0"
148
+ next_command: "/v.retrospective"
149
+ condition: null
150
+ human_action_required: true
151
+ human_action: "Deploy to production → run retrospective"
152
+
153
+ # ═══════════════════════════════════════════════════════════════
154
+ # BA Critic Agent (S.1) → sau mỗi round review
155
+ # ═══════════════════════════════════════════════════════════════
156
+ ba_critic_command:
157
+ agent: "BA Critic Agent"
158
+ phase: "S.1"
159
+ state_updates:
160
+ current_phase: "S.1"
161
+ phase_status: "awaiting_human"
162
+ routing:
163
+ # CONVERGED → B.0
164
+ next_phase_converged: "B.0"
165
+ next_command_converged: "/v.plan + /v.test"
166
+ # ITERATE → S.1 (BA Agent sửa)
167
+ next_phase_iterate: "S.1"
168
+ next_command_iterate: "BA Agent sửa spec → /v.ba-critic"
169
+ # ESCALATE → Human
170
+ next_phase_escalate: "S.1"
171
+ next_command_escalate: null
172
+ human_action_required: true
173
+ human_action: "Review verdict → approve hoặc escalate"
174
+
175
+ # ═══════════════════════════════════════════════════════════════
176
+ # Test Agent (B.0b) → sau khi tạo test cases
177
+ # ═══════════════════════════════════════════════════════════════
178
+ test_agent_command:
179
+ agent: "Test Agent"
180
+ phase: "B.0b"
181
+ state_updates:
182
+ current_phase: "B.0b"
183
+ phase_status: "done"
184
+ artifacts.test_cases.exists: true
185
+ artifacts.test_cases.synced_to_spec: "v1.0"
186
+ artifacts.test_cases.total: 15
187
+ b0_outputs.tests: { exists: true }
188
+ routing:
189
+ next_phase: "R.0"
190
+ next_command: "/v.check"
191
+ condition: "plan.md must also exist" # chờ Plan Agent
192
+ human_action_required: false
193
+
194
+ # ═══════════════════════════════════════════════════════════════
195
+ # Sync Agent (Any) → sau khi sync artifacts
196
+ # ═══════════════════════════════════════════════════════════════
197
+ sync_agent_command:
198
+ agent: "Sync Agent"
199
+ phase: "sync" # meta-phase, not in pipeline
200
+ state_updates:
201
+ artifacts.plan.synced_to_spec: "v1.1"
202
+ artifacts.tasks.synced_to_spec: "v1.1"
203
+ artifacts.test_cases.synced_to_spec: "v1.1"
204
+ artifacts.validation_report.verdict: "PENDING_RECHECK"
205
+ spec_version_latest: "v1.1"
206
+ routing:
207
+ next_phase: "R.0"
208
+ next_command: "/v.check" # bắt buộc re-check
209
+ condition: null
210
+ human_action_required: false
211
+
212
+ # ═══════════════════════════════════════════════════════════════
213
+ # Metrics Agent (M.0) → sau khi thu thập metrics
214
+ # ═══════════════════════════════════════════════════════════════
215
+ metrics_agent_command:
216
+ agent: "Metrics Agent"
217
+ phase: "M.0"
218
+ state_updates:
219
+ current_phase: "M.0"
220
+ phase_status: "done"
221
+ routing:
222
+ next_phase: "complete"
223
+ next_command: "/v.retrospective" # nếu chưa chạy
224
+ condition: null
225
+ human_action_required: false
226
+
227
+ # ═══════════════════════════════════════════════════════════════
228
+ # Retrospective Agent (After R.1) → sau khi tổng kết
229
+ # ═══════════════════════════════════════════════════════════════
230
+ retrospective_agent_command:
231
+ agent: "Retrospective Agent"
232
+ phase: "retro"
233
+ state_updates:
234
+ current_phase: "complete"
235
+ phase_status: "done"
236
+ routing:
237
+ next_phase: null
238
+ next_command: null # feature complete
239
+ condition: null
240
+ human_action_required: false