@shanyucoder/flowgrid 0.1.9 → 0.1.11

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 (104) hide show
  1. package/adapters/nextjs/codegen/runners/lib/resolve-hub-id.mjs +7 -4
  2. package/adapters/nextjs/unitgen/runners/README.md +4 -4
  3. package/adapters/nextjs/unitgen/runners/generate.mjs +1 -1
  4. package/adapters/nuxt4/codegen/runners/lib/resolve-hub-id.mjs +7 -4
  5. package/adapters/nuxt4/unitgen/runners/README.md +4 -4
  6. package/adapters/nuxt4/unitgen/runners/generate.mjs +1 -1
  7. package/adapters/shared/common-gen.mjs +1 -1
  8. package/adapters/shared/resolve-hub-id.mjs +7 -4
  9. package/bin/flowgrid.mjs +43 -9
  10. package/bin/lib/audit-run.mjs +5 -1
  11. package/bin/lib/docs-hub-locale.mjs +9 -0
  12. package/bin/lib/init-scaffold.mjs +30 -2
  13. package/dist/docs/mcp/tools.js +4 -4
  14. package/dist/docs/mcp/tools.js.map +1 -1
  15. package/dist/docs/scan/ids.d.ts +1 -1
  16. package/dist/docs/scan/ids.js +9 -8
  17. package/dist/docs/scan/ids.js.map +1 -1
  18. package/dist/docs/scan/route.js +2 -2
  19. package/dist/docs/scan/route.js.map +1 -1
  20. package/dist/graph/mcp/tools.js +1 -1
  21. package/dist/graph/mcp/tools.js.map +1 -1
  22. package/engines/cases/render-cases.mjs +34 -26
  23. package/engines/docs/lib/audit-hub-prd.mjs +136 -0
  24. package/engines/docs/lib/audit-risks-catalog.mjs +142 -0
  25. package/engines/docs/lib/docs-hub-locale.mjs +100 -0
  26. package/engines/docs/lib/render-bundle-markdown.mjs +8 -1
  27. package/engines/docs/vitepress/config.ts +4 -4
  28. package/engines/spec/lib/audit-bundle-gaps.mjs +38 -7
  29. package/engines/spec/lib/audit-flow-gaps.mjs +2 -2
  30. package/engines/spec/lib/audit-legacy-gaps.mjs +10 -0
  31. package/engines/spec/lib/bundle-schema.mjs +3 -1
  32. package/engines/testcase/_staging-from-portal/runners/README.md +3 -3
  33. package/engines/testcase/_staging-from-portal/runners/generate.mjs +2 -2
  34. package/engines/testcase/_staging-from-portal/runners/lib/read-testcase.mjs +1 -1
  35. package/engines/testcase/runners/README.md +3 -3
  36. package/engines/testcase/runners/generate.mjs +2 -2
  37. package/engines/testcase/runners/lib/read-testcase.mjs +1 -1
  38. package/engines/testcase/runners/lib/resolve-hub-id.mjs +6 -6
  39. package/harness/be/skills/audit-api/SKILL.md +1 -1
  40. package/harness/be/skills/grill-api-unit/SKILL.md +1 -1
  41. package/harness/common/skills/legacy/SKILL.md +2 -2
  42. package/harness/docs/extracts/architecture-core.md +2 -0
  43. package/harness/docs/extracts/common-scope.md +8 -8
  44. package/harness/docs/extracts/extract-registry.docs.json +7 -3
  45. package/harness/docs/extracts/product-id-convention.md +58 -0
  46. package/harness/docs/extracts/spec-core.md +1 -1
  47. package/harness/docs/extracts/spec-prd-lite.md +11 -13
  48. package/harness/docs/extracts/spec-requirement.md +1 -1
  49. package/harness/docs/extracts/tpl-adoption-inventory.md +32 -0
  50. package/harness/docs/extracts/tpl-module.md +9 -40
  51. package/harness/docs/extracts/tpl-overview-prd.md +11 -0
  52. package/harness/docs/extracts/tpl-risk-register.md +28 -0
  53. package/harness/docs/extracts/tpl-surface-prd.md +7 -0
  54. package/harness/docs/rules/agent-compliance.mdc +1 -1
  55. package/harness/docs/rules/docs-hub.mdc +1 -1
  56. package/harness/docs/rules/flowgrid-process.mdc +1 -1
  57. package/harness/docs/skills/adopt/SKILL.md +43 -11
  58. package/harness/docs/skills/api-update/SKILL.md +1 -1
  59. package/harness/docs/skills/background-logic/SKILL.md +1 -1
  60. package/harness/docs/skills/common-spec/SKILL.md +1 -1
  61. package/harness/docs/skills/cross-service/SKILL.md +1 -1
  62. package/harness/docs/skills/db-erd/SKILL.md +1 -1
  63. package/harness/docs/skills/grill/SKILL.md +2 -0
  64. package/harness/docs/skills/grill-hub-prd/SKILL.md +38 -0
  65. package/harness/docs/skills/module/SKILL.md +9 -6
  66. package/harness/docs/skills/overview/SKILL.md +7 -6
  67. package/harness/docs/skills/risk-register/SKILL.md +29 -0
  68. package/harness/docs/skills/spec/SKILL.md +5 -4
  69. package/harness/docs/skills/surfaces/SKILL.md +4 -1
  70. package/harness/docs/skills/{business-process → user-flow}/SKILL.md +8 -8
  71. package/harness/fe/skills/gen-common/SKILL.md +1 -1
  72. package/harness/fe/skills/grill-prototype/SKILL.md +1 -1
  73. package/harness/fe/skills/prototype/SKILL.md +6 -6
  74. package/harness/fe/skills/unit/SKILL.md +4 -4
  75. package/harness/shared/SSOT_AGENT_PROTOCOL.md +1 -1
  76. package/harness/tests/extracts/grill-scenario-flow.md +2 -2
  77. package/harness/tests/skills/grill-testcase/SKILL.md +2 -2
  78. package/harness/tests/skills/scenario/SKILL.md +11 -11
  79. package/harness/tests/skills/testcase/SKILL.md +2 -2
  80. package/harness/tests/templates/SC.example.md +26 -26
  81. package/harness/tests/templates/TC.example.yaml +3 -3
  82. package/lexicon/registry-tags.en.txt +2 -2
  83. package/package.json +1 -1
  84. package/templates/project-skeleton/architecture/03-business-process/index.md +3 -0
  85. package/templates/project-skeleton/architecture/{03-business-process → 03-user-flows}/FLOW-login.md +16 -16
  86. package/templates/project-skeleton/architecture/{03-business-process → 03-user-flows}/FLOW-template.md +6 -7
  87. package/templates/project-skeleton/architecture/04-solution-strategy/index.md +1 -1
  88. package/templates/project-skeleton/architecture/08-cross-cutting/security.md +1 -1
  89. package/templates/project-skeleton/architecture/11-risks/index.md +7 -17
  90. package/templates/project-skeleton/architecture/11-risks/risk-register.md +34 -0
  91. package/templates/project-skeleton/architecture/12-glossary/index.md +5 -3
  92. package/templates/project-skeleton/architecture/model/workspace.dsl +7 -7
  93. package/templates/project-skeleton/overview/index.md +21 -43
  94. package/templates/project-skeleton/overview/operational-areas/_template.md +15 -22
  95. package/templates/project-skeleton/surfaces/_module-index.template.md +40 -0
  96. package/templates/project-skeleton/surfaces/_surface-index.template.md +44 -0
  97. package/templates/shared/bundle-authoring.md +6 -3
  98. package/templates/shared/default-layout.ejs +108 -62
  99. package/templates/shared/feature.bundle.yaml +15 -6
  100. package/templates/shared/ir/generated/spec.md +24 -24
  101. package/templates/shared/tpl-api-contract.md +5 -5
  102. package/templates/tests-skeleton/cases/README.md +1 -1
  103. package/templates/tests-skeleton/catalog/locale.yaml +16 -15
  104. package/templates/tests-skeleton/tpl-testcase-plan.md +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/docs/scan/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/docs/scan/route.ts"],"names":[],"mappings":"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"}
@@ -127,7 +127,7 @@ export function registerTools(server) {
127
127
  moduleDir: z
128
128
  .string()
129
129
  .optional()
130
- .describe('CMP module root, e.g. surfaces/admin-web/CMP-01-auth/ (legacy .../modules/CMP-01-auth/ also accepted)'),
130
+ .describe('CMP module root, e.g. surfaces/admin-web/CMP-ADM-AUTH-01/ (legacy .../modules/CMP-ADM-AUTH-01/ also accepted)'),
131
131
  findingsPath: z.string().optional().describe('YAML/JSON with parityFindings[] from cloud'),
132
132
  findingsJson: z.string().optional().describe('Inline JSON: { parityFindings: [...] }'),
133
133
  }, async ({ moduleDir, findingsPath, findingsJson }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/graph/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/graph/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -2,24 +2,32 @@
2
2
  /**
3
3
  * Render tests hub case YAML → Markdown (member-first, locale-aware).
4
4
  * Usage: pnpm cases:render
5
- * pnpm cases:render -- cases/W-AD-AUTH-001
5
+ * pnpm cases:render -- cases/W-ADM-AUTH-01
6
6
  */
7
7
  import { readdir, readFile, writeFile } from 'node:fs/promises'
8
8
  import path from 'node:path'
9
9
  import { parse, stringify } from 'yaml'
10
+ import { TESTS_HUB_HEADINGS_EN } from '../docs/lib/docs-hub-locale.mjs'
10
11
 
11
12
  const root = process.cwd()
12
13
  const casesRoot = path.join(root, 'cases')
13
14
  const args = process.argv.slice(2).filter((a) => a !== '--')
14
15
  const only = args[0] ? path.resolve(root, args[0]) : null
15
- const MD_NONE = '_Không có_'
16
+
17
+ function emptyLabel() {
18
+ return '_None_'
19
+ }
16
20
 
17
21
  async function loadLocale() {
18
22
  const raw = await readFile(path.join(root, 'catalog/locale.yaml'), 'utf8')
19
23
  const doc = parse(raw) ?? {}
20
- const loc = doc.memberLocale || 'vi'
21
- const headings = doc.headings?.[loc] || doc.headings?.vi || {}
22
- return { loc, h: headings }
24
+ const contentLocale = doc.contentLocale || doc.memberLocale || 'vi'
25
+ const legacyNested = doc.headings?.vi || doc.headings?.en
26
+ const h = {
27
+ ...TESTS_HUB_HEADINGS_EN,
28
+ ...(legacyNested ? {} : doc.headings || {}),
29
+ }
30
+ return { contentLocale, h, none: emptyLabel() }
23
31
  }
24
32
 
25
33
  async function main() {
@@ -56,11 +64,11 @@ async function main() {
56
64
  console.log(`cases:render: OK (${n} file(s))`)
57
65
  }
58
66
 
59
- export function renderCaseMarkdown(tc, { h }) {
67
+ export function renderCaseMarkdown(tc, { h, none = '_None_' }) {
60
68
  const shortTitle = tc.title || tc.name || tc.summary || 'case'
61
69
  const title = tc.id ? `${tc.id}: ${shortTitle}` : shortTitle
62
70
  const story = tc.story?.trim()
63
- const coverage = Array.isArray(tc.coverage) ? tc.coverage.map((c) => `\`${c}\``).join(', ') : MD_NONE
71
+ const coverage = Array.isArray(tc.coverage) ? tc.coverage.map((c) => `\`${c}\``).join(', ') : none
64
72
 
65
73
  const member = [
66
74
  `# ${title}`,
@@ -79,15 +87,15 @@ export function renderCaseMarkdown(tc, { h }) {
79
87
  '',
80
88
  `## ${h.preconditions || 'Preconditions'}`,
81
89
  '',
82
- bullets(tc.preconditions),
90
+ bullets(tc.preconditions, none),
83
91
  '',
84
92
  `## ${h.steps || 'Steps'}`,
85
93
  '',
86
- stepsNarrative(tc),
94
+ stepsNarrative(tc, none),
87
95
  '',
88
96
  `## ${h.expected || 'Expected'}`,
89
97
  '',
90
- bullets(Array.isArray(tc.expected) ? tc.expected : tc.expected ? [tc.expected] : []),
98
+ bullets(Array.isArray(tc.expected) ? tc.expected : tc.expected ? [tc.expected] : [], none),
91
99
  '',
92
100
  traceabilitySection(tc, h),
93
101
  testMatrixSection(tc, h),
@@ -96,7 +104,7 @@ export function renderCaseMarkdown(tc, { h }) {
96
104
  '<details>',
97
105
  `<summary>${h.technical || 'Technical details'}</summary>`,
98
106
  '',
99
- `- **title (EN):** ${tc.title ?? ''}`,
107
+ `- **title:** ${tc.title ?? ''}`,
100
108
  tc.refs ? `- **refs:** \`${JSON.stringify(tc.refs)}\`` : null,
101
109
  '',
102
110
  `### ${h.testData || 'Test data'}`,
@@ -105,11 +113,11 @@ export function renderCaseMarkdown(tc, { h }) {
105
113
  '',
106
114
  '### Steps (machine)',
107
115
  '',
108
- stepsMachine(tc.steps),
116
+ stepsMachine(tc.steps, none),
109
117
  '',
110
118
  '### Test IDs',
111
119
  '',
112
- bullets(tc.testIds?.required),
120
+ bullets(tc.testIds?.required, none),
113
121
  '',
114
122
  tc.a11y ? '### a11y\n\n' + code(tc.a11y) : null,
115
123
  '',
@@ -152,9 +160,9 @@ function testMatrixSection(tc, h) {
152
160
  return `| ${id} | \`${facet}\` | ${desc} |`
153
161
  })
154
162
  return [
155
- `## ${h.testMatrix || 'Ma trận kiểm thử (equivalence)'}`,
163
+ `## ${h.testMatrix || 'Test matrix (equivalence)'}`,
156
164
  '',
157
- '| Case | Facet | Mô tả |',
165
+ '| Case | Facet | Description |',
158
166
  '| --- | --- | --- |',
159
167
  ...rows,
160
168
  '',
@@ -165,9 +173,9 @@ function docsCrossRefSection(tc, h) {
165
173
  const screen = tc.refs?.screen || tc.traceability?.bundleScreen
166
174
  if (!screen) return ''
167
175
  return [
168
- `## ${h.crossRefDocs || 'Đối chiếu docs hub'}`,
176
+ `## ${h.crossRefDocs || 'Docs hub cross-reference'}`,
169
177
  '',
170
- `- **Function:** \`${screen}\` — đọc cùng VitePress docs hub: \`ir/generated/spec.md\` (nghiệp vụ) và bundle \`*.bundle.yaml\` (SSOT grill).`,
178
+ `- **Function:** \`${screen}\` — align with docs hub \`ir/generated/spec.md\` and bundle \`*.bundle.yaml\` (SSOT).`,
171
179
  tc.refs?.scenario ? `- **Scenario:** \`${tc.refs.scenario}\`` : null,
172
180
  '',
173
181
  ]
@@ -175,23 +183,23 @@ function docsCrossRefSection(tc, h) {
175
183
  .join('\n')
176
184
  }
177
185
 
178
- function stepsNarrative(tc) {
186
+ function stepsNarrative(tc, none) {
179
187
  const steps = tc.steps || []
180
- if (!steps.length) return MD_NONE
188
+ if (!steps.length) return none
181
189
  return steps
182
190
  .map((step, i) => {
183
191
  if (typeof step === 'string') return `${i + 1}. ${step}`
184
192
  if (step.as || step.label) return `${i + 1}. ${step.as || step.label}`
185
- if (step.action === 'goto') return `${i + 1}. Mở trang \`${step.path ?? ''}\``
186
- if (step.action === 'fill') return `${i + 1}. Nhập vào \`${step.testId ?? 'field'}\``
187
- if (step.action === 'click') return `${i + 1}. Bấm \`${step.testId ?? 'control'}\``
193
+ if (step.action === 'goto') return `${i + 1}. Open \`${step.path ?? ''}\``
194
+ if (step.action === 'fill') return `${i + 1}. Fill \`${step.testId ?? 'field'}\``
195
+ if (step.action === 'click') return `${i + 1}. Click \`${step.testId ?? 'control'}\``
188
196
  return `${i + 1}. ${step.action ?? 'step'}`
189
197
  })
190
198
  .join('\n')
191
199
  }
192
200
 
193
- function stepsMachine(items = []) {
194
- if (!items?.length) return MD_NONE
201
+ function stepsMachine(items = [], none = '_None_') {
202
+ if (!items?.length) return none
195
203
  return items
196
204
  .map((step, i) => {
197
205
  const parts = Object.entries(step)
@@ -202,8 +210,8 @@ function stepsMachine(items = []) {
202
210
  .join('\n')
203
211
  }
204
212
 
205
- function bullets(items = []) {
206
- return items?.length ? items.map((i) => `- ${inline(i)}`).join('\n') : MD_NONE
213
+ function bullets(items = [], none = '_None_') {
214
+ return items?.length ? items.map((i) => `- ${inline(i)}`).join('\n') : none
207
215
  }
208
216
 
209
217
  function code(value) {
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * PRD hub Markdown audit — section titles must be English (structureLocale: en).
5
+ */
6
+
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+
10
+ const PLACEHOLDER_RE = /\[[^\]]{4,}\]/;
11
+
12
+ function hubKind(filePath) {
13
+ const norm = filePath.split(path.sep).join('/');
14
+ if (norm.endsWith('overview/index.md')) return 'overview';
15
+ if (norm.endsWith('_surface-index.template.md')) return 'surface';
16
+ if (norm.endsWith('_module-index.template.md')) return 'module';
17
+ if (/\/surfaces\/[^/]+\/index\.md$/.test(norm) && !norm.includes('/CMP-')) return 'surface';
18
+ if (/\/CMP-[^/]+\/index\.md$/.test(norm)) return 'module';
19
+ if (norm.includes('/operational-areas/') && norm.endsWith('.md')) return 'operational';
20
+ return 'unknown';
21
+ }
22
+
23
+ function hasEnglishGoals(text) {
24
+ return /##\s+Goals\b/i.test(text);
25
+ }
26
+ function hasEnglishBackground(text) {
27
+ return /##\s+Background\b/i.test(text);
28
+ }
29
+ function hasEnglishScope(text) {
30
+ return /##\s+Scope\b/i.test(text);
31
+ }
32
+
33
+ export function auditHubPrdContent(rawText, filePath) {
34
+ const gaps = [];
35
+ const warnings = [];
36
+ const kind = hubKind(filePath);
37
+
38
+ function addGap(code, fieldPath, message, suggestedFix) {
39
+ gaps.push({ code, severity: 'critical', path: fieldPath, message, suggestedFix });
40
+ }
41
+ function addWarning(code, fieldPath, message, suggestedFix) {
42
+ warnings.push({ code, path: fieldPath, message, suggestedFix });
43
+ }
44
+
45
+ const needsGoals = kind === 'overview' || kind === 'surface' || kind === 'module';
46
+ const needsBackground = kind === 'overview' || kind === 'surface';
47
+ const needsScope = kind !== 'unknown';
48
+
49
+ if (needsGoals && !hasEnglishGoals(rawText)) {
50
+ addGap(
51
+ 'HUB_MISSING_GOALS',
52
+ 'section.goals',
53
+ 'Missing `## Goals` (English section key).',
54
+ 'Add ## Goals {#goals} with business bullets (prose in contentLocale).'
55
+ );
56
+ }
57
+
58
+ if (needsBackground && !hasEnglishBackground(rawText)) {
59
+ addGap(
60
+ 'HUB_MISSING_BACKGROUND',
61
+ 'section.background',
62
+ 'Missing `## Background`.',
63
+ 'Add ## Background {#background}.'
64
+ );
65
+ }
66
+
67
+ if (needsScope && !hasEnglishScope(rawText)) {
68
+ addGap(
69
+ 'HUB_MISSING_SCOPE',
70
+ 'section.scope',
71
+ 'Missing `## Scope`.',
72
+ 'Add ## Scope {#scope} with In scope / Out of scope bullets.'
73
+ );
74
+ }
75
+
76
+ if (/##\s+Mục tiêu/i.test(rawText) || /##\s+Bối cảnh/i.test(rawText) || /##\s+Phạm vi/i.test(rawText)) {
77
+ addWarning(
78
+ 'HUB_VI_SECTION_TITLE',
79
+ 'section.locale',
80
+ 'Vietnamese section titles detected — use English keys (Goals, Background, Scope).',
81
+ 'Rename headings to English; keep Vietnamese in body only.'
82
+ );
83
+ }
84
+
85
+ if (kind === 'module' && !/Features overview|Goals/i.test(rawText)) {
86
+ addWarning(
87
+ 'HUB_MODULE_FEATURES_THIN',
88
+ 'section.features',
89
+ 'Module index missing Features overview / Goals.',
90
+ 'Add ## Features overview and link function folders.'
91
+ );
92
+ }
93
+
94
+ if (PLACEHOLDER_RE.test(rawText)) {
95
+ addWarning(
96
+ 'HUB_PLACEHOLDER',
97
+ 'body',
98
+ 'Template placeholders `[...]` remain.',
99
+ 'Replace with real copy in contentLocale before sign-off.'
100
+ );
101
+ }
102
+
103
+ if (/##\s+Personas/i.test(rawText) || /Success metrics/i.test(rawText)) {
104
+ addWarning(
105
+ 'HUB_DEPRECATED_SECTION',
106
+ 'body',
107
+ 'Personas or Success metrics sections — not SSOT on hub.',
108
+ 'Remove or manage outside hub.'
109
+ );
110
+ }
111
+
112
+ return {
113
+ target: filePath,
114
+ hubKind: kind,
115
+ structureLocale: 'en',
116
+ totalGaps: gaps.length,
117
+ totalWarnings: warnings.length,
118
+ gaps,
119
+ warnings,
120
+ };
121
+ }
122
+
123
+ const args = process.argv.slice(2);
124
+ if (args.length === 0) {
125
+ console.log('Usage: node engines/docs/lib/audit-hub-prd.mjs <path-to-hub.md>');
126
+ process.exit(0);
127
+ }
128
+
129
+ const targetFile = path.resolve(process.cwd(), args[0]);
130
+ if (!fs.existsSync(targetFile)) {
131
+ console.error(JSON.stringify({ error: `File not found: ${targetFile}` }));
132
+ process.exit(1);
133
+ }
134
+
135
+ const rawText = fs.readFileSync(targetFile, 'utf8');
136
+ console.log(JSON.stringify(auditHubPrdContent(rawText, targetFile), null, 2));
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Audit risk SSOT: architecture/11-risks/risk-register.md (member register)
5
+ * or legacy short catalog on index.md.
6
+ */
7
+
8
+ import fs from 'node:fs';
9
+ import path from 'node:path';
10
+
11
+ function isRiskRegister(filePath) {
12
+ return path.basename(filePath) === 'risk-register.md';
13
+ }
14
+
15
+ export function auditRisksCatalogContent(rawText, filePath) {
16
+ const gaps = [];
17
+ const warnings = [];
18
+ const register = isRiskRegister(filePath);
19
+
20
+ function addGap(code, fieldPath, message, suggestedFix) {
21
+ gaps.push({ code, severity: 'warning', path: fieldPath, message, suggestedFix });
22
+ }
23
+ function addWarning(code, fieldPath, message, suggestedFix) {
24
+ warnings.push({ code, path: fieldPath, message, suggestedFix });
25
+ }
26
+
27
+ const hasRiskCol = /\|\s*Rủi ro\s*\|/i.test(rawText) || /\|\s*Mô tả\s*\|/i.test(rawText);
28
+ const hasTable =
29
+ /\|\s*Risk\s*\|/i.test(rawText) ||
30
+ /\|\s*ID\s*\|/i.test(rawText) ||
31
+ hasRiskCol;
32
+
33
+ if (!hasTable) {
34
+ addGap(
35
+ 'RISK_CATALOG_NO_TABLE',
36
+ 'risks.table',
37
+ register
38
+ ? 'Chưa có bảng sổ rủi ro (risk register).'
39
+ : 'Chưa có bảng rủi ro (cột Risk/Rủi ro + Phương án).',
40
+ register
41
+ ? 'Dùng template risk-register.md: cột Hạn mức, Nhu cầu, Chênh lệch.'
42
+ : 'Thêm bảng markdown hoặc link sang risk-register.md.'
43
+ );
44
+ }
45
+
46
+ if (register) {
47
+ const needCols = [
48
+ { re: /\bLimit\b/i, code: 'RISK_REG_MISSING_LIMIT_COL', label: 'Limit' },
49
+ { re: /\bNeed\b/i, code: 'RISK_REG_MISSING_NEED_COL', label: 'Need' },
50
+ { re: /\bGap\b/i, code: 'RISK_REG_MISSING_GAP_COL', label: 'Gap' },
51
+ { re: /Mitigation/i, code: 'RISK_REG_MISSING_MITIGATION_COL', label: 'Mitigation' },
52
+ ];
53
+ for (const col of needCols) {
54
+ if (!col.re.test(rawText)) {
55
+ addGap(
56
+ col.code,
57
+ 'riskRegister.columns',
58
+ `Thiếu cột «${col.label}» trong bảng risk register.`,
59
+ `Thêm cột ${col.label} để so sánh quota/hạn mức với nhu cầu peak.`
60
+ );
61
+ }
62
+ }
63
+
64
+ const hasRiskId = /RISK-[A-Z0-9_-]+/i.test(rawText);
65
+ if (!hasRiskId) {
66
+ addWarning(
67
+ 'RISK_REG_NO_ID',
68
+ 'riskRegister.ids',
69
+ 'Chưa có mã RISK-* trong sổ (chỉ placeholder mẫu?).',
70
+ 'Thêm ít nhất một dòng rủi ro thật với mã RISK-….'
71
+ );
72
+ }
73
+
74
+ const rows = rawText.match(/^\|[^|]+\|[^|]+\|[^|]+\|/gm) || [];
75
+ const dataRows = rows.filter(
76
+ (r) => !r.includes('---') && !/^\|\s*[-:]+\s*\|/.test(r) && !/^\|\s*Mã\s*\|/i.test(r)
77
+ );
78
+ const realRows = dataRows.filter((r) => /RISK-/i.test(r) && !/RISK-EXAMPLE/i.test(r));
79
+ if (hasTable && realRows.length < 1) {
80
+ addWarning(
81
+ 'RISK_REG_EMPTY',
82
+ 'riskRegister.rows',
83
+ 'Sổ rủi ro chưa có dòng nghiệp vụ (ngoài ví dụ RISK-EXAMPLE).',
84
+ 'Thêm rủi ro thật — vd. quota email, rate limit API, license.'
85
+ );
86
+ }
87
+ } else {
88
+ const rows = rawText.match(/^\|[^|]+\|[^|]+\|/gm) || [];
89
+ const dataRows = rows.filter((r) => !r.includes('---') && !/^\|\s*[-:]+\s*\|/.test(r));
90
+ if (hasTable && dataRows.length < 2) {
91
+ addWarning(
92
+ 'RISK_CATALOG_EMPTY',
93
+ 'risks.rows',
94
+ 'Bảng rủi ro chưa có dòng nghiệp vụ (chỉ header).',
95
+ 'Ưu tiên điền architecture/11-risks/risk-register.md.'
96
+ );
97
+ }
98
+ if (!/risk-register\.md/i.test(rawText)) {
99
+ addWarning(
100
+ 'RISK_INDEX_NO_REGISTER_LINK',
101
+ 'risks.index',
102
+ 'index.md chưa trỏ sang risk-register.md.',
103
+ 'Link [risk-register.md](./risk-register.md) là SSOT member.'
104
+ );
105
+ }
106
+ }
107
+
108
+ if (/\[(?:\.\.\.|TBD|Tên|VD:)/i.test(rawText)) {
109
+ addWarning(
110
+ 'RISK_PLACEHOLDER',
111
+ 'body',
112
+ 'Còn placeholder template trong file rủi ro.',
113
+ 'Điền rủi ro thật hoặc defer qa/.'
114
+ );
115
+ }
116
+
117
+ return {
118
+ target: filePath,
119
+ documentKind: register ? 'risk-register' : 'risks-index',
120
+ totalGaps: gaps.length,
121
+ totalWarnings: warnings.length,
122
+ gaps,
123
+ warnings,
124
+ };
125
+ }
126
+
127
+ const args = process.argv.slice(2);
128
+ if (args.length === 0) {
129
+ console.log(
130
+ 'Usage: node engines/docs/lib/audit-risks-catalog.mjs <architecture/11-risks/risk-register.md|index.md>'
131
+ );
132
+ process.exit(0);
133
+ }
134
+
135
+ const targetFile = path.resolve(process.cwd(), args[0]);
136
+ if (!fs.existsSync(targetFile)) {
137
+ console.error(JSON.stringify({ error: `File not found: ${targetFile}` }));
138
+ process.exit(1);
139
+ }
140
+
141
+ const rawText = fs.readFileSync(targetFile, 'utf8');
142
+ console.log(JSON.stringify(auditRisksCatalogContent(rawText, targetFile), null, 2));
@@ -0,0 +1,100 @@
1
+ import * as fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { parse } from 'yaml';
4
+
5
+ /** Headings / YAML keys / audit anchors — always English. */
6
+ export const STRUCTURE_LOCALE = 'en';
7
+
8
+ /** @param {string} [code] @param {string} [fallback] */
9
+ export function normalizeContentLocale(code, fallback = 'vi') {
10
+ const s = String(code ?? '').trim();
11
+ if (!s) return fallback;
12
+ return s.replace(/\s+/g, '-').toLowerCase();
13
+ }
14
+
15
+ /**
16
+ * @param {{ text: Function, isCancel: Function, cancel: Function }} clack
17
+ * @returns {Promise<string>}
18
+ */
19
+ export async function promptDocsContentLocale(clack) {
20
+ const { text, isCancel, cancel } = clack;
21
+ const ans = await text({
22
+ message:
23
+ 'Member prose locale for document spec + test documents (BCP-47 tag, e.g. vi, en, ja — keys/headings stay English):',
24
+ defaultValue: 'vi',
25
+ placeholder: 'vi',
26
+ });
27
+ if (isCancel(ans)) {
28
+ cancel('Cancelled.');
29
+ process.exit(0);
30
+ }
31
+ return normalizeContentLocale(ans, 'vi');
32
+ }
33
+
34
+ /**
35
+ * @param {string} docsRootAbs
36
+ * @param {{ structureLocale: string, contentLocale: string }} locales
37
+ */
38
+ export function writeDocsHubLocaleManifest(docsRootAbs, locales) {
39
+ const file = path.join(docsRootAbs, 'docs-hub.locale.yaml');
40
+ const body = `# SSOT — structureLocale is always en (headings/keys). Prose follows contentLocale.\nstructureLocale: ${locales.structureLocale}\ncontentLocale: ${locales.contentLocale}\n`;
41
+ fs.writeFileSync(file, body, 'utf8');
42
+ }
43
+
44
+ /** English section labels for tests-docs render (never translated per locale). */
45
+ export const TESTS_HUB_HEADINGS_EN = {
46
+ home: 'Home',
47
+ cases: 'Test cases',
48
+ scenarios: 'Scenarios',
49
+ plans: 'Test plans',
50
+ preconditions: 'Preconditions',
51
+ steps: 'Steps',
52
+ expected: 'Expected results',
53
+ traceability: 'Traceability (docs SSOT)',
54
+ testMatrix: 'Test matrix (equivalence)',
55
+ crossRefDocs: 'Docs hub cross-reference',
56
+ technical: 'Technical details',
57
+ testData: 'Test data',
58
+ coverage: 'Coverage',
59
+ };
60
+
61
+ /**
62
+ * @param {string} testsRootAbs
63
+ * @param {{ structureLocale: string, contentLocale: string }} locales
64
+ */
65
+ export function writeTestsHubLocaleCatalog(testsRootAbs, locales) {
66
+ const catalogDir = path.join(testsRootAbs, 'catalog');
67
+ if (!fs.existsSync(catalogDir)) {
68
+ fs.mkdirSync(catalogDir, { recursive: true });
69
+ }
70
+ const file = path.join(catalogDir, 'locale.yaml');
71
+ const lines = [
72
+ '# SSOT — headings are English; TC prose in YAML follows contentLocale.',
73
+ `structureLocale: ${locales.structureLocale}`,
74
+ `contentLocale: ${locales.contentLocale}`,
75
+ 'headings:',
76
+ ...Object.entries(TESTS_HUB_HEADINGS_EN).map(([k, v]) => ` ${k}: ${v}`),
77
+ ];
78
+ fs.writeFileSync(file, `${lines.join('\n')}\n`, 'utf8');
79
+ }
80
+
81
+ /**
82
+ * @param {string} projectRoot
83
+ * @param {string} [docsRootRel]
84
+ */
85
+ export function loadDocsHubLocale(projectRoot, docsRootRel) {
86
+ const rel = docsRootRel || process.env.FLOWGRID_DOCS_ROOT || 'docs';
87
+ const manifest = path.join(path.resolve(projectRoot), rel, 'docs-hub.locale.yaml');
88
+ if (!fs.existsSync(manifest)) {
89
+ return { structureLocale: STRUCTURE_LOCALE, contentLocale: 'vi' };
90
+ }
91
+ try {
92
+ const data = parse(fs.readFileSync(manifest, 'utf8')) ?? {};
93
+ return {
94
+ structureLocale: data.structureLocale || STRUCTURE_LOCALE,
95
+ contentLocale: normalizeContentLocale(data.contentLocale, 'vi'),
96
+ };
97
+ } catch {
98
+ return { structureLocale: STRUCTURE_LOCALE, contentLocale: 'vi' };
99
+ }
100
+ }
@@ -6,6 +6,7 @@ import { renderSpecMarkdown } from './render-spec-markdown.mjs'
6
6
  import { renderDataModelMarkdown } from './render-data-model-markdown.mjs'
7
7
  import { renderApiSummaryMarkdown } from './render-api-summary-markdown.mjs'
8
8
  import { resolveBackendSpecForBundle } from '../../spec/lib/audit-db-tables.mjs'
9
+ import { loadDocsHubLocale } from './docs-hub-locale.mjs'
9
10
 
10
11
  /**
11
12
  * Flatten bundle → spec shape (tests / fallback). Prefer ir/spec.yaml for site MD.
@@ -17,7 +18,11 @@ export function bundleToSpecShape(bundle) {
17
18
  status: bundle.status,
18
19
  owner: bundle.owner,
19
20
  summary: bundle.summary ?? bundle.review?.summary,
20
- userStories: bundle.userStories ?? bundle.spec?.userStories
21
+ scopeIn: bundle.scopeIn,
22
+ nonGoals: bundle.nonGoals,
23
+ userFlows: bundle.userFlows,
24
+ nfr: bundle.nfr,
25
+ userStories: bundle.userStories ?? bundle.spec?.userStories,
21
26
  }
22
27
  return {
23
28
  ...meta,
@@ -158,11 +163,13 @@ export async function writeIrSpecMarkdownFile(specFile, mdOut, context = {}) {
158
163
  const design = existsSync(designFile) ? parse(await readFile(designFile, 'utf8')) ?? {} : {}
159
164
  const specShape = mergeDesignIntoSpecForRender(spec, design)
160
165
  const projectRoot = context.projectRoot ?? process.cwd()
166
+ const { contentLocale: docsContentLocale } = loadDocsHubLocale(projectRoot)
161
167
  const markdown = renderIrSpecMarkdown(specShape, {
162
168
  testcases: [],
163
169
  output: { specFile: path.basename(mdOut), testcasesDir: 'testcases' },
164
170
  devAppBaseUrl: context.devAppBaseUrl ?? '',
165
171
  projectRoot,
172
+ docsContentLocale,
166
173
  })
167
174
  await mkdir(path.dirname(mdOut), { recursive: true })
168
175
  await writeFile(mdOut, markdown, 'utf8')