@shanyucoder/flowgrid 0.1.4 → 0.1.8

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 (157) hide show
  1. package/README.md +4 -1
  2. package/adapters/laravel/registries/codegen.registry.json +9 -9
  3. package/bin/flowgrid.mjs +353 -116
  4. package/bin/lib/agent-mcp.mjs +4 -0
  5. package/bin/lib/agent-profiles.mjs +30 -6
  6. package/bin/lib/audit-run.mjs +1 -1
  7. package/bin/lib/cli-update.mjs +48 -8
  8. package/bin/lib/doctor.mjs +90 -3
  9. package/bin/lib/harness-overlay.mjs +12 -5
  10. package/bin/lib/harness-sync.mjs +17 -3
  11. package/bin/lib/init-adapters.mjs +75 -0
  12. package/bin/lib/init-scaffold.mjs +9 -0
  13. package/bin/lib/inject-consumer-scripts.mjs +115 -0
  14. package/bin/lib/merge-stack-config.mjs +89 -0
  15. package/bin/lib/project-gitignore.mjs +1 -0
  16. package/bin/lib/repo-maps-align.mjs +203 -0
  17. package/dist/graph/config/load-config.js +7 -2
  18. package/dist/graph/config/load-config.js.map +1 -1
  19. package/dist/graph/mcp/tools.js +1 -1
  20. package/dist/graph/mcp/tools.js.map +1 -1
  21. package/dist/graph/registry/load-registries.d.ts +1 -0
  22. package/dist/graph/registry/load-registries.js +14 -1
  23. package/dist/graph/registry/load-registries.js.map +1 -1
  24. package/engines/cases/render-cases.mjs +67 -5
  25. package/engines/docs/lib/render-api-summary-markdown.mjs +28 -0
  26. package/engines/docs/lib/render-bundle-markdown.mjs +77 -2
  27. package/engines/docs/lib/render-data-model-markdown.mjs +171 -0
  28. package/engines/docs/lib/render-design-tables.mjs +89 -7
  29. package/engines/docs/lib/render-template.mjs +6 -0
  30. package/engines/docs/render-docs.mjs +6 -2
  31. package/engines/docs/vitepress/config.ts +7 -7
  32. package/engines/docs/vitepress/surfaces-nav.mjs +45 -14
  33. package/engines/openapi/check-backend-spec.mjs +2 -2
  34. package/engines/openapi/lib/markdown-table.mjs +8 -0
  35. package/engines/openapi/lib/render-backend-spec-markdown.mjs +78 -0
  36. package/engines/registry-sync/be-capabilities-sync.mjs +118 -0
  37. package/engines/registry-sync/fe-design-sync.mjs +258 -0
  38. package/engines/registry-sync/run-registry-sync.mjs +107 -0
  39. package/engines/shared/e2e-output-layout.mjs +68 -0
  40. package/engines/shared/flowgrid-e2e-root.mjs +19 -0
  41. package/engines/shared/resolve-flowgrid-context.mjs +176 -0
  42. package/engines/spec/lib/audit-api-gaps.mjs +1 -1
  43. package/engines/spec/lib/audit-bundle-gaps.mjs +92 -3
  44. package/engines/spec/lib/audit-db-tables.mjs +529 -0
  45. package/engines/spec/lib/audit-e2e-coverage.mjs +88 -30
  46. package/engines/spec/lib/bundle-schema.mjs +4 -1
  47. package/engines/spec/split-bundle.mjs +11 -1
  48. package/engines/testcase/runners/generate-api.mjs +23 -23
  49. package/engines/testcase/runners/generate.mjs +19 -17
  50. package/engines/testcase/runners/lib/bootstrap-context.mjs +44 -0
  51. package/engines/testcase/runners/lib/write-files.mjs +37 -9
  52. package/harness/agents/antigravity/rules/antigravity-mcp.mdc +12 -0
  53. package/harness/agents/gemini/rules/gemini-mcp.mdc +11 -0
  54. package/harness/agents/gemini_antigravity/rules/antigravity-mcp.mdc +8 -6
  55. package/harness/be/skills/{grill-api → audit-api}/SKILL.md +8 -7
  56. package/harness/common/extracts/artifact-graph.md +2 -2
  57. package/harness/common/extracts/artifactgraph-phase-hooks.md +2 -2
  58. package/harness/common/extracts/docs-mark-detect.md +2 -2
  59. package/harness/common/extracts/entity-relationship.md +23 -0
  60. package/harness/common/rules/flowgrid-ux-common.mdc +3 -3
  61. package/harness/common/skills/configure-repo-maps/SKILL.md +4 -2
  62. package/harness/docs/extracts/agent-execution-protocol.md +1 -1
  63. package/harness/docs/extracts/api-codegen-readiness.md +34 -0
  64. package/harness/docs/extracts/api-codegen-tags.md +30 -0
  65. package/harness/docs/extracts/api-contract.md +43 -0
  66. package/harness/docs/extracts/api-spec-sync.md +35 -0
  67. package/harness/docs/extracts/artifactgraph-hooks-docs.md +1 -1
  68. package/harness/docs/extracts/call-external.md +16 -0
  69. package/harness/docs/extracts/common-scope.md +9 -10
  70. package/harness/docs/extracts/db-audit-wizard.md +45 -0
  71. package/harness/docs/extracts/derived-data.md +18 -0
  72. package/harness/docs/extracts/design-leaf-signoff.md +16 -0
  73. package/harness/docs/extracts/extract-registry.docs.json +9 -1
  74. package/harness/docs/extracts/spec-core.md +7 -3
  75. package/harness/docs/extracts/spec-evolution.md +21 -0
  76. package/harness/docs/extracts/spec-prd-lite.md +19 -0
  77. package/harness/docs/extracts/spec-requirement.md +6 -2
  78. package/harness/docs/extracts/spec-ssot-prep.md +25 -0
  79. package/harness/docs/extracts/tpl-module.md +12 -0
  80. package/harness/docs/extracts/verify-gate.md +33 -0
  81. package/harness/docs/extracts/wire-spec-feedback.md +31 -0
  82. package/harness/docs/rules/agent-compliance.mdc +1 -1
  83. package/harness/docs/rules/team-flow-spec.mdc +3 -4
  84. package/harness/docs/skills/adopt/SKILL.md +2 -0
  85. package/harness/docs/skills/api/SKILL.md +4 -5
  86. package/harness/docs/skills/api-spec/SKILL.md +19 -6
  87. package/harness/docs/skills/api-update/SKILL.md +3 -3
  88. package/harness/docs/skills/architecture/SKILL.md +1 -1
  89. package/harness/docs/skills/business-process/SKILL.md +2 -0
  90. package/harness/docs/skills/common/SKILL.md +2 -2
  91. package/harness/docs/skills/common-spec/SKILL.md +10 -47
  92. package/harness/docs/skills/db-erd/SKILL.md +26 -0
  93. package/harness/docs/skills/grill/SKILL.md +28 -22
  94. package/harness/docs/skills/grill-api/SKILL.md +4 -6
  95. package/harness/docs/skills/grill-api-spec/SKILL.md +44 -24
  96. package/harness/docs/skills/grill-bqa/SKILL.md +28 -13
  97. package/harness/docs/skills/grill-common-spec/SKILL.md +10 -35
  98. package/harness/docs/skills/grill-dev/SKILL.md +7 -6
  99. package/harness/docs/skills/grill-docs/SKILL.md +10 -3
  100. package/harness/docs/skills/module/SKILL.md +3 -1
  101. package/harness/docs/skills/openapi/SKILL.md +2 -1
  102. package/harness/docs/skills/overview/SKILL.md +7 -1
  103. package/harness/docs/skills/spec/SKILL.md +42 -9
  104. package/harness/docs/skills/update-spec/SKILL.md +4 -1
  105. package/harness/fe/extracts/wire-audit-loop.md +72 -0
  106. package/harness/fe/extracts/wire-phase.md +45 -0
  107. package/harness/fe/rules/platform-design-vocabulary.mdc +1 -1
  108. package/harness/fe/rules/team-flow-prototype.mdc +8 -4
  109. package/harness/fe/skills/gen-common/SKILL.md +11 -84
  110. package/harness/fe/skills/grill-prototype/SKILL.md +51 -25
  111. package/harness/fe/skills/grill-test/SKILL.md +78 -20
  112. package/harness/fe/skills/grill-wire/SKILL.md +81 -0
  113. package/harness/fe/skills/prototype/SKILL.md +3 -2
  114. package/harness/fe/skills/wire/SKILL.md +7 -2
  115. package/harness/shared/AGENTS.md +3 -3
  116. package/harness/shared/SSOT_AGENT_PROTOCOL.md +3 -3
  117. package/harness/tests/extracts/grill-api-hook.md +69 -0
  118. package/harness/tests/extracts/grill-scenario-flow.md +39 -0
  119. package/harness/tests/extracts/grill-screen-tc.md +40 -0
  120. package/harness/tests/extracts/testcase-gen-cli.md +57 -0
  121. package/harness/tests/extracts/testcase-plan.md +29 -0
  122. package/harness/tests/extracts/tests-verify-gate.md +29 -0
  123. package/harness/tests/extracts/wire-test-handoff.md +37 -0
  124. package/harness/tests/skills/grill-testcase/SKILL.md +1 -0
  125. package/harness/tests/skills/test-api/SKILL.md +14 -6
  126. package/harness/tests/skills/testcase/SKILL.md +3 -1
  127. package/harness/tests/templates/TC.example-api.yaml +7 -1
  128. package/harness/tests/templates/TC.example.yaml +4 -1
  129. package/harness/tests/templates/tpl-testcase-plan.md +75 -0
  130. package/package.json +1 -1
  131. package/stacks/fastapi.json +1 -0
  132. package/stacks/laravel.json +1 -0
  133. package/stacks/nestjs.json +72 -0
  134. package/stacks/nextjs-nest.json +1 -0
  135. package/stacks/nuxt4-nest.json +1 -0
  136. package/templates/project-skeleton/architecture/03-business-process/FLOW-template.md +2 -0
  137. package/templates/project-skeleton/overview/index.md +68 -2
  138. package/templates/project-skeleton/overview/operational-areas/_template.md +37 -0
  139. package/templates/project-skeleton/surfaces/common/data-model/index.md +10 -2
  140. package/templates/shared/api-03-mock.stub.yaml +14 -0
  141. package/templates/shared/backend-api.bundle.yaml +3 -0
  142. package/templates/shared/backend-api.yaml +4 -0
  143. package/templates/shared/be-capabilities.registry.base.json +8 -0
  144. package/templates/shared/bundle-authoring.md +39 -3
  145. package/templates/shared/default-layout.ejs +131 -18
  146. package/templates/shared/design-spec.yaml +2 -3
  147. package/templates/shared/design.registry.base.json +38 -0
  148. package/templates/shared/feature.bundle.yaml +16 -9
  149. package/templates/shared/ir/generated/spec.md +281 -0
  150. package/templates/shared/qa-item.yaml +1 -1
  151. package/templates/shared/tpl-api-contract.md +133 -0
  152. package/templates/shared/tpl-screen-data-model.md +76 -0
  153. package/templates/tests-skeleton/cases/README.md +4 -0
  154. package/templates/tests-skeleton/catalog/locale.yaml +9 -0
  155. package/templates/tests-skeleton/tpl-testcase-plan.md +9 -0
  156. package/harness/docs/skills/api-integration/SKILL.md +0 -110
  157. package/harness/docs/skills/grill-integration-spec/SKILL.md +0 -51
@@ -0,0 +1,133 @@
1
+ # Template — Hợp đồng API (review & authoring)
2
+
3
+ **Mục đích:** Cùng một ngôn ngữ cho BA / Dev BE / Dev FE / QA — **đọc trên site**, **ghi trên YAML**. SSOT codegen BE là `api/<seq>/01-backend-spec.yaml`; OpenAPI và Markdown là **bản render**, không sửa tay làm nguồn.
4
+
5
+ **Workflow:** [docs/workflows/backend.md](../../docs/workflows/backend.md) · Skills: `/api-spec`, `/grill-api-spec`, `/openapi`, `/api-update`.
6
+
7
+ ---
8
+
9
+ ## Đọc trước khi viết (global)
10
+
11
+ | Ai | Đọc gì trên VitePress / docs hub | Khi nào mở YAML `01` |
12
+ |----|-----------------------------------|----------------------|
13
+ | BA / PO | `ir/generated/spec.md` (hành vi màn) + `ir/generated/api.md` (bảng endpoint tóm tắt) | Không — delta nghiệp vụ qua `/update-spec` + Dev |
14
+ | QA | `spec.md` + `api.md` (phạm vi API khớp scenario) | Chỉ khi trace lỗi `#err:*` / status code |
15
+ | Dev FE | `ir/design.yaml` (`apiRefs`, `#reuse-api`) | Không — contract BE không phải input layout |
16
+ | Dev BE | `api.md` → `01` → (preview) `02` sau `openapi_gen` | Author `/api-spec`, grill, codegen |
17
+
18
+ Sau `flowgrid split` + `flowgrid render`: sidebar leaf **Spec · W-*** · **Data model** · **API summary** (`api.md`).
19
+
20
+ ---
21
+
22
+ ## Bộ trio trên function leaf
23
+
24
+ ```text
25
+ surfaces/<surface>/CMP-*/<NN…>/<slug>/
26
+ <slug>.bundle.yaml # FE/business — KHÔNG author spec.api
27
+ ir/design.yaml # apiRefs, actions — FE + audit fe-be
28
+ ir/generated/api.md # render từ 01 (đọc team)
29
+ api/<seq>/
30
+ 01-backend-spec.yaml # SSOT BE — mẫu: backend-api.yaml
31
+ 02-openapi.yaml # CHỈ gen từ 01 (flowgrid openapi_gen)
32
+ 03-mock.yaml # optional — copy from api-03-mock.stub.yaml
33
+ ```
34
+
35
+ **Common API** (auth, dropdown dùng chung): `…/common/yaml/<slug>/` — cùng bộ file, một primary entity.
36
+
37
+ **Quy tắc:**
38
+
39
+ - Một file `01` = một **module** + một **primary entity** — không gộp cả CMP.
40
+ - Action đã có API: `#reuse-api` + `reuseFrom` trên `ir/design.yaml` — **không** tạo `api/<seq>/` mới.
41
+ - URI có **hậu tố hành động** (`/create`, `/{id}/update`, `/list`, `/{id}/detail`) — không REST mơ hồ `PUT /users/{id}`.
42
+
43
+ ---
44
+
45
+ ## Cấu trúc `01` (tóm tắt field)
46
+
47
+ Mẫu đầy đủ: [`backend-api.yaml`](./backend-api.yaml) (sau `flowgrid init` → `.flowgrid/templates/backend-api.yaml`).
48
+
49
+ | Khối | Vai trò |
50
+ |------|---------|
51
+ | `feature` | id, title, version, `source` (portal vs `base: none`) |
52
+ | `approval` | `draft` → `approved` trước `api-gen` (policy team) |
53
+ | `modules[].entities[]` | Bảng, field, quan hệ — khớp `design.sections[].db` / ERD |
54
+ | `api.endpoints[]` | method, path, `purpose`, `errorStorming`, `#err:*` |
55
+ | `requests` / `responses` | DTO — `meaning`/`purpose` khi có validation nghiệp vụ |
56
+ | `codegen` | `profile`, `module`, `entity` — grill-api-spec bổ sung `#gen:*` |
57
+ | `externalCalls` / `services` | Chỉ khi có `#call-external` / `#cross-entity-service` |
58
+
59
+ **Không** dùng [`backend-api.bundle.yaml`](./backend-api.bundle.yaml) để sinh `01` mới — file legacy (bundle lồng `spec.api`); chỉ tham chiếu lịch sử.
60
+
61
+ ---
62
+
63
+ ## OpenAPI (01 → 02 → hub)
64
+
65
+ Chuỗi **bắt buộc** sau mỗi lần sửa `01`:
66
+
67
+ ```text
68
+ flowgrid api:check --spec …/01-backend-spec.yaml
69
+ flowgrid openapi_gen --spec …/01-backend-spec.yaml # ghi sibling 02-openapi.yaml
70
+ flowgrid openapi_render # gộp → docs/openapi/api.yaml (hub)
71
+ flowgrid render # cập nhật ir/generated/api.md
72
+ ```
73
+
74
+ | File | SSOT? | Ai sửa |
75
+ |------|-------|--------|
76
+ | `01-backend-spec.yaml` | **Có** | `/api-spec`, `/api-update`, `/grill-api-spec` |
77
+ | `02-openapi.yaml` | Không — output gen | Vá thiếu bằng cách sửa `01`, gen lại |
78
+ | `docs/openapi/api.yaml` | Không — merge hub | `openapi_render` |
79
+ | `ir/generated/api.md` | Không — đọc | `flowgrid render` |
80
+
81
+ **Cấm:** sửa `02` tay; dùng `nestjs --openapi` (hoặc stack tương đương) ghi đè docs hub; `flowgrid check` trên `01` (`check` chỉ cho `*.bundle.yaml`).
82
+
83
+ Skill: `/openapi` · Redoc/Swagger UI: `openapi_build_ui` (tùy hub).
84
+
85
+ ---
86
+
87
+ ## Portal-backed vs BE-only
88
+
89
+ | | Portal (`source.base` ≠ `none`) | BE-only (`base: none`) |
90
+ |--|--------------------------------|-------------------------|
91
+ | Input `/api-spec` | `ir/design.yaml` + actions | Requirement / partner doc — **không** `ir/design` làm contract |
92
+ | Grill | `audit fe-be` + `audit api` | `audit api` only |
93
+ | `feature.source` | `portalSpec`, `portalRefs` | `integrationRefs`, auth API key/HMAC |
94
+
95
+ ---
96
+
97
+ ## Error storming (review nhanh)
98
+
99
+ | Tình huống endpoint | Tag / status gợi ý |
100
+ |---------------------|-------------------|
101
+ | Có `{id}` trong path | `#err:not-found` (404), `#err:idor-violation` (403) |
102
+ | POST/PUT form body | `#err:validation` (422) + field rules |
103
+ | Có permission | `#err:permission-denied` (403) |
104
+ | Create/duplicate | `#err:conflict` (409) |
105
+ | Partner/webhook | `#err:signature-invalid`, `#err:rate-limit`, `#err:unauthorized` |
106
+
107
+ 401/503/500 toàn cục: thường `$ref` OpenAPI components — không lặp từng endpoint.
108
+
109
+ ---
110
+
111
+ ## YAML an toàn
112
+
113
+ - Chuỗi có `:` → bọc `"..."`.
114
+ - Chạy `flowgrid api:check` trước handoff.
115
+ - Thiếu fact → AskQuestion hoặc `qa/open/` — **không** `openQuestions` trong YAML.
116
+
117
+ ---
118
+
119
+ ## Liên kết bundle FE
120
+
121
+ Trên bundle chỉ khai báo **hành vi UI** và `apiRefs`; chi tiết endpoint nằm trên `01`:
122
+
123
+ ```yaml
124
+ design:
125
+ actions:
126
+ - id: submit_form
127
+ apiRefs: [ feature.create ]
128
+ onSpecificError:
129
+ - condition: "422 Validation"
130
+ notes: "Inline errors"
131
+ ```
132
+
133
+ Xem [bundle-authoring.md § design.actions](./bundle-authoring.md#designactions-api-calls--ui-error-handling).
@@ -0,0 +1,76 @@
1
+ # Template — Mô tả bảng trên màn (review, multi-table)
2
+
3
+ **Mục đích:** Member/BA review **vai trò từng bảng** trước khi đọc cột chi tiết. SSOT kỹ thuật vẫn là `design.sections[].db` + `01-backend-spec.yaml`.
4
+
5
+ **Sau `flowgrid split`:** engine sinh `ir/generated/data-model.md` (tự động). Block YAML dưới đây **bổ sung** overview — author trên bundle `design.dataModel`.
6
+
7
+ ---
8
+
9
+ ## Author trên bundle (`design.dataModel`)
10
+
11
+ ```yaml
12
+ design:
13
+ dataModel:
14
+ erdRef: "<LCA>/common/db-erd.md"
15
+ notes: |
16
+ Màn này ghi bảng chính `records` và đọc `record_attachments` cho sidebar.
17
+ Không tạo dòng mới trên bảng phụ.
18
+ tables:
19
+ - schema: records
20
+ erdEntity: Record
21
+ roleOnScreen: read-write # read | write | read-write | join | aggregate
22
+ summary: "Hồ sơ chính — form create/update"
23
+ - schema: record_attachments
24
+ erdEntity: RecordAttachment
25
+ roleOnScreen: read
26
+ summary: "File đính kèm — chỉ list & download"
27
+ ```
28
+
29
+ | `roleOnScreen` | Ý nghĩa review |
30
+ |----------------|----------------|
31
+ | `read-write` | Form/list ghi + đọc cột persisted |
32
+ | `read` | Chỉ hiển thị / lookup |
33
+ | `write` | Chỉ insert/update (ít gặp tách read) |
34
+ | `join` | FK lookup từ bảng khác (select options) |
35
+ | `aggregate` | KPI/count — thường `#derived-data`, không map `db` |
36
+
37
+ ---
38
+
39
+ ## Cột chi tiết (per table)
40
+
41
+ Ghi trên từng control / list column trong bundle:
42
+
43
+ ```yaml
44
+ bind:
45
+ field: record_code # payload API / form state
46
+ db:
47
+ schema: records # khớp ERD + 01 entities[].table
48
+ field: code # khớp 01 entities[].fields[].name
49
+ enumMapping: # optional
50
+ ACTIVE: "Đang hoạt động"
51
+ ```
52
+
53
+ List nhiều bảng — **mỗi cột** khai `db` nếu sort/filter/search DB:
54
+
55
+ ```yaml
56
+ spec:
57
+ ui:
58
+ list:
59
+ columns:
60
+ - key: attachment_name
61
+ title: "Tệp"
62
+ db:
63
+ schema: record_attachments
64
+ field: file_name
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Checklist review (không chặn split)
70
+
71
+ 1. `flowgrid audit spec <bundle>` — `confirms[]` `CONFIRM_DB_*` → AskQuestion (`db-audit-wizard.md`).
72
+ 2. Mở `ir/generated/data-model.md` — một section `## Bảng \`...\`` per table.
73
+ 3. `01-backend-spec.yaml` — mỗi `db.schema` có entity; mỗi `db.field` có `fields[]`.
74
+ 4. ERD Phase 0 — entity mới đã có trên `db-erd.md`.
75
+
76
+ Workflow: [bundle-authoring.md](./bundle-authoring.md#data-model--phase-0-erd-vs-screen-detail) · [architecture-data.md](../../docs/workflows/architecture-data.md).
@@ -3,3 +3,7 @@
3
3
  Đặt `TC-*.yaml` mirror path function trên docs-hub (bỏ prefix `surfaces/`).
4
4
 
5
5
  Ví dụ docs: `surfaces/admin/CMP-ADM-002/02/01/login/` → `cases/admin/CMP-ADM-002/02/01/login/TC-*.yaml`
6
+
7
+ - SSOT ghi: `TC-*.yaml` (`schemaVersion: 2`) — copy mẫu từ `../_templates/TC.example.yaml` (init từ harness).
8
+ - SSOT đọc QA/Dev: `pnpm cases:render` → `TC-*.md` cùng thư mục — **không sửa tay** MD.
9
+ - Hướng dẫn: `../tpl-testcase-plan.md` · workflow `docs/workflows/test.md` (toolkit repo).
@@ -5,3 +5,12 @@ headings:
5
5
  cases: Testcase
6
6
  scenarios: Scenario
7
7
  plans: Kế hoạch kiểm thử
8
+ preconditions: Điều kiện tiên quyết
9
+ steps: Các bước thực hiện
10
+ expected: Kết quả mong đợi
11
+ traceability: Liên kết docs (traceability)
12
+ testMatrix: Ma trận kiểm thử
13
+ crossRefDocs: Đối chiếu docs hub
14
+ technical: Chi tiết kỹ thuật
15
+ testData: Dữ liệu kiểm thử
16
+ coverage: Phạm vi coverage
@@ -0,0 +1,9 @@
1
+ # Testcase plan — hướng dẫn hub
2
+
3
+ Bản đầy đủ (toolkit): sau `flowgrid init` copy từ package `harness/tests/templates/tpl-testcase-plan.md` hoặc xem repo FlowGrid `templates/tests-skeleton/tpl-testcase-plan.md` (sync với harness).
4
+
5
+ - SSOT ghi: `cases/**/TC-*.yaml`
6
+ - SSOT đọc team: `cases:render` → `TC-*.md` trên VitePress (`flowgrid dev` port 5174)
7
+ - Đối chiếu nghiệp vụ: docs hub `FLOWGRID_DOCS_ROOT` — bundle + `ir/generated/spec.md`
8
+
9
+ Mẫu vàng: `TC.example.yaml` (init / harness templates).
@@ -1,110 +0,0 @@
1
- ---
2
- name: api-integration
3
- description: EXCLUSIVE /api-integration — ONLY for backend integration contracts (partner APIs, webhooks). DO NOT merge multiple integrations into single markdown files.
4
- disable-model-invocation: true
5
- ---
6
-
7
- > [!CRITICAL] MANDATORY PRE-FLIGHT
8
- > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
9
-
10
- # /api-integration — Integration Contract (no Portal FE)
11
-
12
- Shared extracts: `api-integration-spec.md`, `entity-relationship.md`, `call-external.md`, `agent-discipline.md`, `verify-gate.md`
13
-
14
- ---
15
-
16
- ## Rule: When to Use (vs `/api-spec`)
17
-
18
- - **[MANDATORY]** Use `/api-integration` for: inbound/outbound webhooks, REST APIs exported to partners/3rd parties, public APIs with dedicated versioning, reverse-engineering legacy handlers or provider OpenAPI specs.
19
- - **[STRICTLY FORBIDDEN]** If a Portal FE spec exists for the same user journey → use `/api-spec`, not this command.
20
-
21
- ---
22
-
23
- ## Rule: Audit Interlock
24
-
25
- - **[MANDATORY]** If an integration bundle already exists: run an audit before making modifications.
26
- - ✅ Check for existing endpoints under `surfaces/integrations/` using `flowgrid_docs_route` or glob search before authoring a new contract trio.
27
- - ❌ Never re-define routes that already exist; link and reuse them.
28
-
29
- ---
30
-
31
- ## Rule: Missing Information Handling & Workload Threshold (Law 2)
32
-
33
- - **[MANDATORY]** When signature verification, retry policy, or retention policy is unknown, evaluate total missing volume:
34
- - **Small Scope (≤5 questions):** Trigger `AskQuestion` wizard — one question at a time, **≥3 options**: (1) `(Recommended)`, (2) `Other` (free text), (3) `Log as Tech Debt (Pending)`.
35
- - **Large Scope (≥10 gaps/endpoints):** **[MANDATORY HARD STOP IN CHAT]**. Do not spam single questions in chat. Generate an implementation plan / Plan Mode document partitioned into sequential Phases (3–5 endpoints/gaps per phase) with disk offloading at boundaries.
36
- - ✅ If "Log as Tech Debt" is selected → create `qa/open/QA-<feature.id>-NNNN.yaml`. Set `integrationBacklog[]` (NOT portal `pendingTechDebt`).
37
- - ❌ Never write `openQuestions` in YAML. Never invent HMAC secrets or partner-specific validation logic.
38
-
39
- ---
40
-
41
- ## Rule: Folder Structure
42
-
43
- - **[MANDATORY]** Every integration contract must be placed under:
44
- ```
45
- surfaces/integrations/<provider>/<slug>/api/<seq>/
46
- ├── 01-backend-spec.yaml # feature.source.kind + integrationRefs (tech SSOT)
47
- ├── 02-openapi.yaml # generated by: flowgrid openapi_gen --spec <01>
48
- └── 03-mock-data.yaml
49
- ```
50
- - **[MANDATORY]** One `01` = one primary domain entity. Never dump all provider actions into one single file.
51
- - **[STRICTLY FORBIDDEN]** Never write `.md` directly. Never combine multiple integrations into one gross monolithic file.
52
-
53
- ---
54
-
55
- ## Rule: Explicit URI Naming
56
-
57
- - **[MANDATORY]** All integration endpoints MUST use explicit action suffixes:
58
- - Inbound webhook: `POST /api/v1/integrations/<provider>/webhook`
59
- - Inbound event action: `POST /api/v1/integrations/<provider>/{id}/sync` (or `/receive`)
60
- - Outbound partner API: `POST /…/create`, `PUT /…/{id}/update`
61
- - **[STRICTLY FORBIDDEN]** Never use ambiguous RESTful routes lacking explicit action semantics.
62
-
63
- ---
64
-
65
- ## Rule: Integration Error Handling
66
-
67
- - **[MANDATORY]** Document explicit error responses using `#err:*` tags for:
68
- - `#err:unauthorized` — invalid API key / expired token
69
- - `#err:signature-invalid` — HMAC signature mismatch on webhook
70
- - `#err:rate-limit` — partner throttling limit reached
71
- - `#err:validation` — malformed payload
72
- - `#err:system` — internal processing failure
73
- - **[RECOMMENDED]** Global errors (500/503/401) → delegate to OpenAPI `$ref` schemas; do NOT duplicate across each endpoint.
74
- - **[MANDATORY]** Provide partner-facing error code mappings in both `01-backend-spec.yaml` and `02-openapi.yaml`.
75
-
76
- ---
77
-
78
- ## Rule: YAML & Tagging
79
-
80
- - **[MANDATORY]** Configure: `feature.source.kind`, `base: none`, `integrationRefs[]`, empty `portalRefs`, `contexts.portalLayout: none`, and `contexts.auth` (API key / HMAC / OAuth).
81
- - **[MANDATORY]** Use domain tags only: `#webhook-inbound`, `#webhook-outbound`, `#partner-api`, `#public-api`, `#call-external`, `#err:*`.
82
- - **[STRICTLY FORBIDDEN]** No `codegen`, no `#gen:*`, no `approval` beyond `draft` — specialized grill handles those downstream.
83
- - **[MANDATORY]** All strings with `:` in YAML must be double-quoted.
84
-
85
- ---
86
-
87
- ## Workflow
88
-
89
- 1. Configure source metadata: `feature.source.kind`, `base: none`, `integrationRefs[]`.
90
- 2. Scan `surfaces/integrations/` for existing endpoints; apply reuse if found.
91
- 3. Set `contexts.portalLayout: none`; document `contexts.auth`.
92
- 4. Inventory events/endpoints from provider documentation or legacy source — mark `inferredFromCode` in `notes`.
93
- 5. Specify entities, idempotency keys, deduplication, and raw payload retention policies in `decisions` / `beOnlyRequirements`.
94
- 6. Author `api.endpoints` with explicit action URIs.
95
- 7. Apply integration error storming `#err:*` tags.
96
- 8. Run `flowgrid openapi_gen --spec …/api/<seq>/01-backend-spec.yaml` → generates `02-openapi.yaml`.
97
- 9. Author mock data (representative webhook payload JSON + acknowledgement response).
98
- 10. Run AskQuestion wizard for unresolved unknowns (signature, retry, retention).
99
- 11. Update `.harness/progress.md`.
100
-
101
- ---
102
-
103
- ## Verification Checklist
104
-
105
- - [ ] Folder structure: contract trio located under `surfaces/integrations/<provider>/<slug>/api/<seq>/`.
106
- - [ ] `01-backend-spec.yaml`, `02-openapi.yaml`, `03-mock-data.yaml` all generated and populated.
107
- - [ ] Partner-facing error codes and `#err:*` tags fully documented.
108
- - [ ] Explicit URI action suffixes strictly applied.
109
- - [ ] No `.md` authored directly. No gross monolithic files created.
110
- - [ ] All YAML strings containing `:` are double-quoted.
@@ -1,51 +0,0 @@
1
- ---
2
- name: grill-integration-spec
3
- description: EXCLUSIVE /grill-integration-spec — ONLY for auditing backend integration contracts under surfaces/integrations/. DO NOT generate Markdown reports.
4
- disable-model-invocation: true
5
- ---
6
-
7
- > [!CRITICAL] MANDATORY PRE-FLIGHT
8
- > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
9
-
10
- # /grill-integration-spec — Integration Contract Audit
11
-
12
- After `/api-integration`. Before bộ code BE `/api`. No code on docs hub.
13
-
14
- Shared extracts: `api-integration-spec.md`, `api-codegen-readiness.md`, `api-codegen-tags.md`, `call-external.md`, `entity-relationship.md`, `agent-discipline.md`, `verify-gate.md`
15
-
16
- ---
17
-
18
- ## Rule: Goal & Scope
19
-
20
- - **[MANDATORY]** Contract must be sufficient to implement webhook and partner APIs.
21
- - **[MANDATORY]** OpenAPI `securitySchemes` and mock definitions must match `01-backend-spec.yaml`.
22
- - **[MANDATORY]** Codegen-ready: `flowgrid check` + `flowgrid openapi_gen` / `openapi:render` must pass.
23
- - **[STRICTLY FORBIDDEN]** Do NOT use `ir/design.yaml` as BE input (integrations usually have no FE IR).
24
- - **[STRICTLY FORBIDDEN]** No BQA reports, no framework code snippets, no writing `ir/*`.
25
-
26
- ---
27
-
28
- ## Rule: Workflow Steps
29
-
30
- - **[MANDATORY]** Step 1: Resolve `surfaces/integrations/<provider>/<slug>/api/<seq>/01-backend-spec.yaml`. Never a `01` directly on the slug leaf.
31
- - **[MANDATORY]** Step 2: Audit authentication, `securitySchemes`, idempotency keys, retry policies, and non-CRUD actions.
32
- - **[MANDATORY]** Step 3: Enrich `01` with codegen tags (`#gen:*`, `#manual-service`, `#call-external`), `codegen.profile|entity|module`, and `endpoints[].action`.
33
- - **[MANDATORY]** Step 4: Run gates:
34
- - `flowgrid check --spec surfaces/integrations/<provider>/<slug>/api/<seq>/01-backend-spec.yaml`
35
- - `flowgrid openapi_gen --spec …/01-backend-spec.yaml`
36
- - `flowgrid openapi_render`
37
- - **[MANDATORY]** Step 5: Set `approval.status: reviewed` (or `approved`) in YAML.
38
-
39
- ---
40
-
41
- ## Verification Checklist
42
-
43
- - [ ] Target: `01-backend-spec.yaml` under `…/integrations/…/api/<seq>/`.
44
- - [ ] Auth + idempotency keys + retry policy verified and populated.
45
- - [ ] Gates executed: `api:check` + `openapi:gen` + `openapi:render` exit 0.
46
- - [ ] `approval.status` set to `reviewed` or `approved`.
47
- - [ ] No `openQuestions` in YAML; no `.md` written directly.
48
-
49
- ## Handoff
50
-
51
- - `approval.status: approved` → bộ code `--type=be` `/api` with `--spec …/01-backend-spec.yaml`