@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.
- package/AGENTS.md +265 -0
- package/CHANGELOG.md +318 -0
- package/LICENSE +21 -0
- package/README.md +326 -0
- package/agents/ba-agent.md +437 -0
- package/agents/ba-critic-agent.md +156 -0
- package/agents/ba-to-ptyc-agent.md +112 -0
- package/agents/bugfix-analyst-agent.md +221 -0
- package/agents/constitute-agent.md +155 -0
- package/agents/help-agent.md +168 -0
- package/agents/implement-agent.md +220 -0
- package/agents/import-ba-docs-agent.md +164 -0
- package/agents/master-check-agent.md +228 -0
- package/agents/metrics-agent.md +180 -0
- package/agents/operations-agent.md +123 -0
- package/agents/plan-agent.md +218 -0
- package/agents/prototype-agent.md +191 -0
- package/agents/retrospective-agent.md +196 -0
- package/agents/review-agent.md +210 -0
- package/agents/sprint-agent.md +191 -0
- package/agents/status-agent.md +186 -0
- package/agents/sync-agent.md +201 -0
- package/agents/test-agent.md +166 -0
- package/agents/understand-agent.md +339 -0
- package/cli/commands/check.js +96 -0
- package/cli/commands/dev-quiz.js +107 -0
- package/cli/commands/doctor.js +348 -0
- package/cli/commands/feature.js +259 -0
- package/cli/commands/hooks.js +163 -0
- package/cli/commands/init.js +189 -0
- package/cli/commands/log.js +199 -0
- package/cli/commands/plugin.js +230 -0
- package/cli/commands/score-card.js +203 -0
- package/cli/commands/status.js +269 -0
- package/cli/commands/sync.js +59 -0
- package/cli/commands/upgrade.js +150 -0
- package/cli/commands/validate.js +1259 -0
- package/cli/commands/watch.js +151 -0
- package/cli/index.js +46 -0
- package/cli/lib/ac-test-gate.js +89 -0
- package/cli/lib/activity-log.js +209 -0
- package/cli/lib/cli-error.js +183 -0
- package/cli/lib/constitution-lint.js +561 -0
- package/cli/lib/dev-quiz-grade.js +127 -0
- package/cli/lib/governance.js +78 -0
- package/cli/lib/hook-targets.js +167 -0
- package/cli/lib/i18n.js +375 -0
- package/cli/lib/knowledge-oracle.js +379 -0
- package/cli/lib/logger.js +203 -0
- package/cli/lib/module-card-lint.js +304 -0
- package/cli/lib/module-card-score.js +223 -0
- package/cli/lib/plugins.js +481 -0
- package/cli/lib/scanner.js +692 -0
- package/cli/lib/sync-core.js +232 -0
- package/cli/lib/sync-targets.js +84 -0
- package/cli/lib/templates.js +268 -0
- package/cli/lib/yaml-parser.js +203 -0
- package/commands/v.ba-critic.md +101 -0
- package/commands/v.ba-to-ptyc.md +71 -0
- package/commands/v.bugfix.md +86 -0
- package/commands/v.check.md +131 -0
- package/commands/v.constitute.md +87 -0
- package/commands/v.constitution.md +84 -0
- package/commands/v.fork.md +127 -0
- package/commands/v.help.md +73 -0
- package/commands/v.hotfix.md +200 -0
- package/commands/v.implement.md +92 -0
- package/commands/v.import-ba-docs.md +222 -0
- package/commands/v.metrics.md +74 -0
- package/commands/v.operations.md +70 -0
- package/commands/v.plan.md +78 -0
- package/commands/v.prototype.md +121 -0
- package/commands/v.quickfix.md +169 -0
- package/commands/v.retrospective.md +80 -0
- package/commands/v.review.md +78 -0
- package/commands/v.rewind.md +127 -0
- package/commands/v.specify.md +118 -0
- package/commands/v.sprint.md +75 -0
- package/commands/v.status.md +62 -0
- package/commands/v.sync.md +81 -0
- package/commands/v.test.md +67 -0
- package/commands/v.understand.md +112 -0
- package/package.json +65 -0
- package/skills/_shared/constitution-reader/SKILL.md +109 -0
- package/skills/_shared/constitution-reader/config.json +52 -0
- package/skills/_shared/constitution-reader/examples/good/b1-phase-output.md +48 -0
- package/skills/_shared/constitution-reader/gotchas.md +46 -0
- package/skills/_shared/context-reader/SKILL.md +111 -0
- package/skills/_shared/context-reader/config.json +54 -0
- package/skills/_shared/context-reader/examples/good/legacy-nodejs-output.md +35 -0
- package/skills/_shared/context-reader/gotchas.md +49 -0
- package/skills/_shared/ears-notation/SKILL.md +63 -0
- package/skills/_shared/ears-notation/config.json +55 -0
- package/skills/_shared/ears-notation/examples/good/plan-test-interpretation.md +29 -0
- package/skills/_shared/ears-notation/gotchas.md +43 -0
- package/skills/check/cross-validator/SKILL.md +206 -0
- package/skills/check/cross-validator/config.json +33 -0
- package/skills/check/cross-validator/examples/good/validation-report-pass-with-concerns.md +105 -0
- package/skills/check/cross-validator/gotchas.md +43 -0
- package/skills/implement/constitution-enforcer/SKILL.md +134 -0
- package/skills/implement/constitution-enforcer/config.json +16 -0
- package/skills/implement/constitution-enforcer/examples/bad/vague-report.md +42 -0
- package/skills/implement/constitution-enforcer/examples/good/compliance-report.md +57 -0
- package/skills/implement/constitution-enforcer/gotchas.md +26 -0
- package/skills/implement/constitution-enforcer/scripts/check-constitution.sh +88 -0
- package/skills/implement/no-go-zone-guard/SKILL.md +173 -0
- package/skills/implement/no-go-zone-guard/config.json +28 -0
- package/skills/implement/no-go-zone-guard/examples/good/adapter-workaround.md +46 -0
- package/skills/implement/no-go-zone-guard/gotchas.md +27 -0
- package/skills/implement/no-go-zone-guard/scripts/check-nogo-zones.sh +148 -0
- package/skills/implement/no-go-zone-guard/scripts/nogo-precommit.sh +96 -0
- package/skills/implement/tdd-driver/SKILL.md +159 -0
- package/skills/implement/tdd-driver/config.json +33 -0
- package/skills/implement/tdd-driver/examples/good/tdd-cycle-product-repo.md +81 -0
- package/skills/implement/tdd-driver/gotchas.md +34 -0
- package/skills/metrics/metrics-collector/SKILL.md +133 -0
- package/skills/metrics/metrics-collector/config.json +16 -0
- package/skills/metrics/metrics-collector/examples/bad/incomplete-report.md +48 -0
- package/skills/metrics/metrics-collector/examples/good/full-metrics-report.md +101 -0
- package/skills/metrics/metrics-collector/gotchas.md +26 -0
- package/skills/operations/incident-runbook/SKILL.md +167 -0
- package/skills/operations/incident-runbook/config.json +21 -0
- package/skills/operations/incident-runbook/examples/bad/vague-incident-report.md +48 -0
- package/skills/operations/incident-runbook/examples/good/p1-hotfix-response.md +119 -0
- package/skills/operations/incident-runbook/gotchas.md +26 -0
- package/skills/plan/architecture-designer/SKILL.md +228 -0
- package/skills/plan/architecture-designer/config.json +32 -0
- package/skills/plan/architecture-designer/examples/bad/vague-plan.md +62 -0
- package/skills/plan/architecture-designer/examples/good/expand-contract-migration.md +56 -0
- package/skills/plan/architecture-designer/examples/good/plan-structure.md +58 -0
- package/skills/plan/architecture-designer/gotchas.md +45 -0
- package/skills/plan/task-breakdown/SKILL.md +208 -0
- package/skills/plan/task-breakdown/config.json +26 -0
- package/skills/plan/task-breakdown/examples/bad/vague-tasks.md +77 -0
- package/skills/plan/task-breakdown/examples/good/spike-clarify-tasks.md +66 -0
- package/skills/plan/task-breakdown/examples/good/tasks-login-feature.md +111 -0
- package/skills/plan/task-breakdown/gotchas.md +39 -0
- package/skills/prototype/LOGIC.md +240 -0
- package/skills/prototype/SKILL.md +185 -0
- package/skills/prototype/UI.md +407 -0
- package/skills/prototype/config.json +104 -0
- package/skills/prototype/examples/bad/prototype-notes.md +68 -0
- package/skills/prototype/examples/good/prototype-notes-ui.md +109 -0
- package/skills/prototype/examples/good/prototype-notes.md +67 -0
- package/skills/prototype/gotchas.md +128 -0
- package/skills/prototype/scripts/check-flow-state.ps1 +112 -0
- package/skills/prototype/scripts/check-flow-state.sh +104 -0
- package/skills/prototype/scripts/check-prototype-cleanup.ps1 +124 -0
- package/skills/prototype/scripts/check-prototype-cleanup.sh +109 -0
- package/skills/prototype/scripts/check-prototype-notes.ps1 +107 -0
- package/skills/prototype/scripts/check-prototype-notes.sh +102 -0
- package/skills/review/adversarial-reviewer/SKILL.md +137 -0
- package/skills/review/adversarial-reviewer/config.json +32 -0
- package/skills/review/adversarial-reviewer/examples/good/review-report-template.md +56 -0
- package/skills/review/adversarial-reviewer/gotchas.md +46 -0
- package/skills/review/adversarial-reviewer/scripts/quick-security-scan.sh +52 -0
- package/skills/specify/ba-bpmn-doc-gen/SKILL.md +108 -0
- package/skills/specify/ba-bpmn-doc-gen/reference/reference-bpmn-generation.md +528 -0
- package/skills/specify/ba-bpmn-doc-gen/reference/reference-drawio-flowchart.md +466 -0
- package/skills/specify/ba-critic/SKILL.md +172 -0
- package/skills/specify/ba-critic/config.json +32 -0
- package/skills/specify/ba-critic/examples/good/critic-report-round1.md +51 -0
- package/skills/specify/ba-critic/gotchas.md +40 -0
- package/skills/specify/ba-critic/scripts/check-spec-quality.sh +72 -0
- package/skills/specify/ba-doc-generator/SKILL.md +102 -0
- package/skills/specify/ba-doc-generator/references/template-clevel.md +84 -0
- package/skills/specify/ba-doc-generator/references/template-compliance.md +83 -0
- package/skills/specify/ba-doc-generator/references/template-dev.md +138 -0
- package/skills/specify/ba-doc-generator/references/template-partner.md +167 -0
- package/skills/specify/ba-doc-generator/references/template-pm.md +92 -0
- package/skills/specify/ba-doc-generator/references/template-review.md +114 -0
- package/skills/specify/ba-doc-generator/references/template-tester.md +108 -0
- package/skills/specify/ba-doc-generator/references/template-user.md +98 -0
- package/skills/specify/bugfix-analyst/SKILL.md +296 -0
- package/skills/specify/bugfix-analyst/config.json +41 -0
- package/skills/specify/bugfix-analyst/examples/bad/common-mistakes.md +71 -0
- package/skills/specify/bugfix-analyst/examples/good/email-validation-bugfix.md +53 -0
- package/skills/specify/bugfix-analyst/gotchas.md +51 -0
- package/skills/specify/ears-writer/SKILL.md +129 -0
- package/skills/specify/ears-writer/config.json +20 -0
- package/skills/specify/ears-writer/examples/bad/common-mistakes.md +17 -0
- package/skills/specify/ears-writer/examples/good/login-requirements.md +41 -0
- package/skills/specify/ears-writer/gotchas.md +43 -0
- package/skills/specify/ears-writer/scripts/check-ears-compliance.sh +51 -0
- package/skills/test/test-case-generator/SKILL.md +161 -0
- package/skills/test/test-case-generator/config.json +33 -0
- package/skills/test/test-case-generator/examples/good/test-cases-login.md +104 -0
- package/skills/test/test-case-generator/gotchas.md +43 -0
- package/skills/understand/ba-docs-scanner/SKILL.md +239 -0
- package/skills/understand/ba-docs-scanner/config.json +47 -0
- package/skills/understand/ba-docs-scanner/examples/good/work-order-br-extract.md +28 -0
- package/skills/understand/ba-docs-scanner/gotchas.md +44 -0
- package/skills/understand/ba-docs-scanner/merge-rules.md +47 -0
- package/skills/understand/codebase-scanner/SKILL.md +260 -0
- package/skills/understand/codebase-scanner/config.json +56 -0
- package/skills/understand/codebase-scanner/examples/good/menu-module-output.md +44 -0
- package/skills/understand/codebase-scanner/gotchas.md +42 -0
- package/skills/understand/codebase-scanner/scripts/scan-project-structure.sh +64 -0
- package/templates/DESIGN.md +456 -0
- package/templates/agent-command-template.yaml +240 -0
- package/templates/agent-config-template.md +170 -0
- package/templates/agent-definition-template.md +145 -0
- package/templates/agent-metrics-template.md +150 -0
- package/templates/api-contract-template.md +72 -0
- package/templates/bugfix-report-template.md +195 -0
- package/templates/bugfix-spec-template.md +134 -0
- package/templates/code-review-report-template.md +119 -0
- package/templates/constitution-template.md +234 -0
- package/templates/context-template.md +94 -0
- package/templates/data-model-template.md +95 -0
- package/templates/decision-log-template.md +92 -0
- package/templates/flow-state-template.yaml +208 -0
- package/templates/github/workflows/v-flow-validate.yml +30 -0
- package/templates/knowledge/adr-template.md +70 -0
- package/templates/knowledge/api-contract-template.md +140 -0
- package/templates/knowledge/domain-glossary.md +29 -0
- package/templates/knowledge/golden-tests-readme.md +115 -0
- package/templates/knowledge/lessons-learned.md +41 -0
- package/templates/knowledge/patterns.md +103 -0
- package/templates/module-card/SKILL.md +85 -0
- package/templates/module-card/api-specs.md +96 -0
- package/templates/module-card/business-quiz.md +119 -0
- package/templates/module-card/cross-service.md +125 -0
- package/templates/module-card/db.md +85 -0
- package/templates/module-card/dev-quiz.md +62 -0
- package/templates/module-card/permissions.md +83 -0
- package/templates/module-card/state-diagram.md +64 -0
- package/templates/module-card/tech-context.md +90 -0
- package/templates/module-card/ui-flows.md +91 -0
- package/templates/module-card/use-cases.md +142 -0
- package/templates/module-template.yaml +161 -0
- package/templates/operations-report-template.md +108 -0
- package/templates/plan-template.md +308 -0
- package/templates/prototype-notes-template.md +116 -0
- package/templates/ptyc/PTYC.template.docx +0 -0
- package/templates/ptyc/ptyc.meta.example.yaml +44 -0
- package/templates/retrospective-report-template.md +136 -0
- package/templates/security-review-template.md +84 -0
- package/templates/session-template.md +167 -0
- package/templates/spec-review-log-template.md +75 -0
- package/templates/spec-template.md +229 -0
- package/templates/sprint-status-template.md +101 -0
- package/templates/tasks-template.md +275 -0
- package/templates/test-cases-template.md +124 -0
- package/templates/ux-checklist-template.md +79 -0
- package/templates/validation-report-template.md +125 -0
- 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
|