@shanyucoder/flowgrid 0.1.12 → 0.1.13

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 (65) hide show
  1. package/engines/spec/lib/audit-interaction-cases.mjs +2 -1
  2. package/harness/be/adapters/dotnet-integration/skills/framework-rules-be/SKILL.md +2 -2
  3. package/harness/be/adapters/fastapi/skills/framework-rules-be/SKILL.md +3 -3
  4. package/harness/be/adapters/laravel/skills/framework-rules-be/SKILL.md +3 -3
  5. package/harness/be/skills/api/SKILL.md +4 -4
  6. package/harness/be/skills/api-unit/SKILL.md +4 -4
  7. package/harness/be/skills/audit-api/SKILL.md +3 -3
  8. package/harness/be/skills/grill-api-unit/SKILL.md +2 -2
  9. package/harness/common/rules/artifactgraph.mdc +2 -2
  10. package/harness/common/rules/cross-repo-index.mdc +2 -2
  11. package/harness/common/rules/platform-code-size.mdc +5 -5
  12. package/harness/common/rules/team-flow-harness-state.mdc +4 -4
  13. package/harness/common/skills/business-impact-review/SKILL.md +1 -1
  14. package/harness/common/skills/configure-repo-maps/SKILL.md +1 -1
  15. package/harness/common/skills/docs-mark/SKILL.md +4 -4
  16. package/harness/docs/extracts/agent-design-context.md +17 -5
  17. package/harness/docs/extracts/extract-registry.docs.json +5 -2
  18. package/harness/docs/extracts/ir-read-only.md +42 -0
  19. package/harness/docs/rules/agent-compliance.mdc +5 -1
  20. package/harness/docs/rules/docs-hub.mdc +6 -6
  21. package/harness/docs/rules/flowgrid-process.mdc +5 -5
  22. package/harness/docs/rules/team-flow-grill.mdc +1 -1
  23. package/harness/docs/rules/team-flow-spec.mdc +5 -5
  24. package/harness/docs/skills/adopt/SKILL.md +1 -1
  25. package/harness/docs/skills/api/SKILL.md +2 -2
  26. package/harness/docs/skills/build-templates/SKILL.md +1 -1
  27. package/harness/docs/skills/call-external/SKILL.md +1 -1
  28. package/harness/docs/skills/cross-entity-service/SKILL.md +1 -1
  29. package/harness/docs/skills/db-erd/SKILL.md +2 -2
  30. package/harness/docs/skills/grill/SKILL.md +1 -1
  31. package/harness/docs/skills/grill-api-spec/SKILL.md +3 -3
  32. package/harness/docs/skills/grill-bqa/SKILL.md +2 -2
  33. package/harness/docs/skills/grill-dev/SKILL.md +9 -4
  34. package/harness/docs/skills/grill-docs/SKILL.md +2 -2
  35. package/harness/docs/skills/grill-hub-prd/SKILL.md +1 -1
  36. package/harness/docs/skills/openapi/SKILL.md +3 -3
  37. package/harness/docs/skills/risk-register/SKILL.md +8 -8
  38. package/harness/docs/skills/spec/SKILL.md +13 -8
  39. package/harness/docs/skills/update-spec/SKILL.md +17 -7
  40. package/harness/fe/adapters/dotnet-line/skills/framework-rules/SKILL.md +2 -2
  41. package/harness/fe/adapters/nextjs/skills/framework-rules/SKILL.md +2 -2
  42. package/harness/fe/adapters/nuxt4/skills/framework-rules/SKILL.md +2 -2
  43. package/harness/fe/rules/cross-repo-index-routing.mdc +1 -1
  44. package/harness/fe/rules/flowgrid-test-optional-accelerators.mdc +3 -3
  45. package/harness/fe/rules/team-flow-prototype.mdc +13 -13
  46. package/harness/fe/rules/team-flow-unit.mdc +6 -6
  47. package/harness/fe/skills/grill-prototype/SKILL.md +2 -2
  48. package/harness/fe/skills/grill-test/SKILL.md +1 -1
  49. package/harness/fe/skills/grill-unit/SKILL.md +2 -2
  50. package/harness/fe/skills/grill-wire/SKILL.md +1 -1
  51. package/harness/fe/skills/model/SKILL.md +4 -4
  52. package/harness/fe/skills/prototype/SKILL.md +1 -1
  53. package/harness/fe/skills/test/SKILL.md +3 -3
  54. package/harness/fe/skills/unit/SKILL.md +4 -4
  55. package/harness/fe/skills/wire/SKILL.md +5 -5
  56. package/harness/shared/rules/flowgrid-code-optional-integrations.mdc +7 -7
  57. package/harness/tests/rules/cross-repo-index-routing.mdc +1 -1
  58. package/harness/tests/rules/flowgrid-test-optional-accelerators.mdc +3 -3
  59. package/harness/tests/rules/plans-docs-first.mdc +5 -5
  60. package/harness/tests/skills/grill-testcase/SKILL.md +4 -4
  61. package/harness/tests/skills/scenario/SKILL.md +3 -3
  62. package/harness/tests/skills/testcase/SKILL.md +2 -2
  63. package/package.json +1 -1
  64. package/templates/shared/bundle-authoring.md +11 -5
  65. package/templates/shared/tpl-runtime-sequence.md +0 -56
@@ -12,7 +12,7 @@ disable-model-invocation: true
12
12
 
13
13
  # /grill-api-spec — API Contract Audit
14
14
 
15
- After `/api-spec`. Before bộ code BE `/api`. No code implementation on docs hub.
15
+ After `/api-spec`. Before BE code repo `/api`. No code implementation on docs hub.
16
16
 
17
17
  Shared extracts: `spec-evolution.md`, `api-spec-sync.md`, `entity-relationship.md`, `api-codegen-readiness.md`, `api-codegen-tags.md`, `call-external.md`, `agent-discipline.md`, `verify-gate.md`
18
18
 
@@ -46,7 +46,7 @@ Shared extracts: `spec-evolution.md`, `api-spec-sync.md`, `entity-relationship.m
46
46
 
47
47
  Run from docs hub cwd (or pass `--docs-root`); paths relative to docs hub:
48
48
 
49
- **Deterministic audit (lượng):**
49
+ **Deterministic audit (quantitative):**
50
50
 
51
51
  1. `flowgrid audit api <path-to-01-backend-spec.yaml>` — consume `gaps[]` / `confirms[]` on the contract.
52
52
  2. When portal-backed and sibling `*.bundle.yaml` exists: `flowgrid audit fe-be <bundle.yaml>` — `apiRef` ↔ `01` parity.
@@ -74,4 +74,4 @@ Re-run steps 1–5 after patching `01` until audit gaps are resolved or logged a
74
74
 
75
75
  ## Handoff
76
76
 
77
- - `approval.status: approved` → bộ code BE `/api` with `--spec …/01-backend-spec.yaml`
77
+ - `approval.status: approved` → BE code repo `/api` with `--spec …/01-backend-spec.yaml`
@@ -22,13 +22,13 @@ disable-model-invocation: true
22
22
  | Read (whole file) | Write | NEVER Read |
23
23
  |---|---|---|
24
24
  | **`ir/design.yaml`** (UI inventory, copy, visual, actions) | After Confirm: patch `*.bundle.yaml` → `pnpm spec:split` | Generated `*.md` |
25
- | **`ir/spec.yaml`** (requirements/acceptance prose — only when auditing) | | `bundle.gen` |
25
+ | **`ir/spec.yaml`** (prose mirror after split — read for BQA review; **audit CLI stays on bundle**) | | `bundle.gen` |
26
26
 
27
27
  ---
28
28
 
29
29
  ## Rule: Audit Interlock (`flowgrid audit spec`)
30
30
 
31
- - **[MANDATORY]** Before Step A: run `flowgrid audit spec <*.bundle.yaml> --type <pageType>`.
31
+ - **[MANDATORY]** Before Step A: run `flowgrid audit spec <*.bundle.yaml> --type <pageType>` (never `ir/spec.yaml` / `ir/design.yaml`).
32
32
  - `<pageType>` from `gen.codegen.profile` when set; else infer from prompt (list | create | detail | auth | admin-crud | …) — same table as `docs/workflows/grill-and-human-review.md`.
33
33
  - If profile unknown → AskQuestion to lock profile **before** audit (do not use `--type unknown`).
34
34
  - **[MANDATORY]** Consume `gaps[]` (patch bundle) and `confirms[]` (AskQuestion with `(Recommended)` from audit): `CONFIRM_UX_*` + **`CONFIRM_DB_*`** (`db-audit-wizard.md`).
@@ -21,10 +21,15 @@ disable-model-invocation: true
21
21
 
22
22
  ## Rule: Load Policy
23
23
 
24
- | Read (whole file) | Write | NEVER Read |
24
+ **IR is read-only** (`ir-read-only.md`). Writes go to **`*.bundle.yaml`** (+ `01` for endpoints), then **split**.
25
+
26
+ | Read (whole file) | Write | NEVER write |
25
27
  |---|---|---|
26
- | **`ir/design.yaml`** (layout, ui, projected api, entities, codegen, tags) | `bundle.gen` on `*.bundle.yaml` → `pnpm spec:split` | `ir/spec.yaml` prose, generated `*.md` |
27
- | **`api/<seq>/01-backend-spec.yaml`** (endpoint action/path) | endpoint `action` / path on **01** only — NOT `bundle.spec.api` | |
28
+ | **`ir/design.yaml`** (tech SSOT after split) | `bundle.gen` on `*.bundle.yaml` → `flowgrid split` | `ir/spec.yaml`, `ir/design.yaml`, `ir/generated/*` |
29
+ | **`ir/generated/design.md`** — L2 mermaid when `interactionCases.policy: required` (ACP only) | | |
30
+ | **`api/<seq>/01-backend-spec.yaml`** | `action` / path on **01** only — NOT `bundle.spec.api` | |
31
+
32
+ ACP fields (`userFlows`, `nfr`, `interactionCases`) are **authored on the bundle**; after split, read mirrors on `ir/*` — still **never write** IR.
28
33
 
29
34
  ---
30
35
 
@@ -167,7 +172,7 @@ Print checklist in chat: FLOW ids read · NFR read · L2 design.md yes/no.
167
172
 
168
173
  ## Handoff
169
174
 
170
- - bộ code FE dry pass → `/prototype`
175
+ - FE code repo dry pass → `/prototype`
171
176
  - BQA↔Dev conflict → `/grill-docs`
172
177
  - Legacy fact gap → `/legacy /spec` or `/update-spec` (legacy evidence delta)
173
178
  - Confirmed common promote → `/docs-mark` (same session or before `/prototype`)
@@ -63,7 +63,7 @@ disable-model-invocation: true
63
63
  3. Reconcile `#reuse-api` on page actions/items (no duplicate `api/<seq>/` for reused APIs).
64
64
  4. Verify codegen gate: `bundle.gen.codegen.profile` set correctly.
65
65
  5. Write/fix `bundle.gen` → `flowgrid audit spec` → `flowgrid_docs_bundle_split` → `docs_render`.
66
- 6. Handoff ID/path + recommendation to bộ code FE (`gen:dry` on FE repo).
66
+ 6. Handoff ID/path + recommendation to FE code repo (`gen:dry` on FE repo).
67
67
 
68
68
  ---
69
69
 
@@ -75,7 +75,7 @@ disable-model-invocation: true
75
75
 
76
76
  ## Handoff
77
77
 
78
- → `/prototype` after bộ code FE dry-run passes.
78
+ → `/prototype` after FE code repo dry-run passes.
79
79
 
80
80
  ---
81
81
 
@@ -20,7 +20,7 @@ disable-model-invocation: true
20
20
  - **[MANDATORY]** Run `flowgrid audit hub-prd <path-to.md>` before editing.
21
21
  - **[MANDATORY]** Fix all `gaps[]`; resolve `warnings[]` via patch or `AskQuestion` (Recommended / Other / Log as Tech Debt → `qa/` per `qa-authoring.md`).
22
22
  - **[MANDATORY]** Re-run audit until `totalGaps === 0` or gaps deferred to `qa/*.yaml`.
23
- - **[STRICTLY FORBIDDEN]** Author Personas tables or Success metrics on hub — KPI/persona ngoài hub.
23
+ - **[STRICTLY FORBIDDEN]** Author Personas tables or Success metrics on hub — KPI/persona belong off-hub.
24
24
 
25
25
  ---
26
26
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: openapi
3
- description: /openapi — generate 02-openapi.yaml from 01-backend-spec.yaml on the docs hub (bộ docs).
3
+ description: /openapi — generate 02-openapi.yaml from 01-backend-spec.yaml on the docs hub (docs hub).
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
@@ -9,7 +9,7 @@ disable-model-invocation: true
9
9
 
10
10
  # /openapi — OpenAPI YAML (docs hub)
11
11
 
12
- **Owner:** bộ docs (`--type=docs`). OpenAPI is a **docs artifact**, not bộ code.
12
+ **Owner:** docs hub (`--type=docs`). OpenAPI is a **docs artifact**, not code repo.
13
13
 
14
14
  One generator: **OpenAPI 3.0.3** from `01-backend-spec.yaml`. Merge/UI stays `openapi:render` + Redocly bundle.
15
15
 
@@ -34,5 +34,5 @@ One generator: **OpenAPI 3.0.3** from `01-backend-spec.yaml`. Merge/UI stays `op
34
34
 
35
35
  - **[MANDATORY]** If fragment is too thin (error $refs, missing examples): patch **`01-backend-spec.yaml`** and regenerate.
36
36
  - **[STRICTLY FORBIDDEN]** Do NOT hand-edit `02-openapi.yaml` as SSOT.
37
- - **[STRICTLY FORBIDDEN]** Do NOT run bộ code `--type=docs` or `nestjs --openapi`. Do NOT invent a second generator per stack.
37
+ - **[STRICTLY FORBIDDEN]** Do NOT run code repo `--type=docs` or `nestjs --openapi`. Do NOT invent a second generator per stack.
38
38
  - **[STRICTLY FORBIDDEN]** BE `/api` generates implementation code from the contract — it does NOT own OpenAPI YAML.
@@ -4,26 +4,26 @@ description: /risk-register — Maintain architecture/11-risks/risk-register.md
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
- # /risk-register — Sổ rủi ro tổng hợp
7
+ # /risk-register — Consolidated risk register
8
8
 
9
9
  **SSOT:** `architecture/11-risks/risk-register.md`
10
10
  **Template:** `harness/docs/extracts/tpl-risk-register.md`
11
11
 
12
- **Khi dùng:** Rủi ro **không gắn một màn** — hạn mức email/SMS/API, license, SLA vendor, capacity cao điểm.
12
+ **When to use:** Risks **not tied to a single screen** — email/SMS/API quotas, licenses, vendor SLA, peak capacity.
13
13
 
14
14
  ---
15
15
 
16
16
  ## Rule: Audit interlock
17
17
 
18
- - **[MANDATORY]** `flowgrid audit risks architecture/11-risks/risk-register.md` trước/sau sửa.
19
- - **[MANDATORY]** Mỗi dòng: so sánh **Hạn mức** vs **Nhu cầu** → **Chênh lệch** → **Ảnh hưởng** → **Phương án**.
20
- - **[STRICTLY FORBIDDEN]** Ghi `risks:` trên `*.bundle.yaml` — SSOT chỉ file này.
18
+ - **[MANDATORY]** `flowgrid audit risks architecture/11-risks/risk-register.md` before/after edits.
19
+ - **[MANDATORY]** Each row: compare **Limit** vs **Need** → **Gap** → **Impact** → **Mitigation**.
20
+ - **[STRICTLY FORBIDDEN]** Put `risks:` on `*.bundle.yaml` — SSOT is this file only.
21
21
 
22
22
  ## Rule: AskQuestion (Law 2)
23
23
 
24
- Thiếu số (quota, peak): wizard ≥3 options (Recommended / Other / Tech debt → `qa/`).
24
+ Missing numbers (quota, peak): wizard ≥3 options (Recommended / Other / Tech debt → `qa/`).
25
25
 
26
26
  ## Verification
27
27
 
28
- - [ ] Ít nhất một rủi ro thật (không chỉ RISK-EXAMPLE).
29
- - [ ] Audit `risks` trên register: gaps = 0 hoặc defer qa.
28
+ - [ ] At least one real risk (not only RISK-EXAMPLE).
29
+ - [ ] Audit `risks` on register: gaps = 0 or deferred via qa.
@@ -9,7 +9,7 @@ disable-model-invocation: true
9
9
  > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. **STRICTLY FORBIDDEN** to rely on memory.
10
10
  > **[MANDATORY]** Read `.flowgrid/templates/feature.bundle.yaml` + `.flowgrid/templates/bundle-authoring.md` BEFORE generating any YAML. **Do NOT** use `design-spec.yaml` (deprecated).
11
11
  > If templates are missing → STOP: *"Template missing. Run `flowgrid init` to generate templates."*
12
- > **Extract:** `spec-ssot-prep.md`, `spec-prd-lite.md`, `db-audit-wizard.md`, `design-leaf-signoff.md`, `agent-design-context.md`.
12
+ > **Extract:** `spec-ssot-prep.md`, `spec-prd-lite.md`, `db-audit-wizard.md`, `design-leaf-signoff.md`, `agent-design-context.md`, `ir-read-only.md`.
13
13
  > Physical interlocks: `AGENTS.md` + `SSOT_AGENT_PROTOCOL.md` (Laws 1–7). Chat-only done = **FAILED**.
14
14
 
15
15
  # /spec — Function detail (design)
@@ -52,14 +52,14 @@ Hub: [spec-ssot-prep.md](../../../docs/workflows/spec-ssot-prep.md) · extract `
52
52
  - **[MANDATORY]** Before first leaf on a **custom/maintain** project: confirm **custom-base** (`build-template-code`) or **standard** `registry:sync` — agent must map `#ui:` / `#shell:` from real `design.registry.json`, not invent `#needs-component`.
53
53
  - **[MANDATORY]** **Brownfield workspace:** `/adopt` + `audit legacy` on inventory **before** `/legacy /spec` on any `W-*` (see `/legacy` modifier below).
54
54
  - **[MANDATORY]** When `adoption-inventory.md` exists at workspace root: read **Section 5 (Common Catalog Candidates)** on every `/spec` and `/legacy /spec` — inherit `CMN-*`; **STRICTLY FORBIDDEN** copy-paste legacy files into new bundles.
55
- - **Greenfield hub mới (no legacy):** skip `/adopt`; prep = nhánh A/B only.
55
+ - **New greenfield docs hub (no legacy):** skip `/adopt`; prep = branch A/B only.
56
56
 
57
57
  ---
58
58
 
59
59
  ## Rule: Audit Interlock
60
60
 
61
- - **[MANDATORY]** If bundle file already exists: run `flowgrid audit spec <path-to-bundle.yaml> --type <pageType>` first.
62
- - `<pageType>` = page type đã xác định ở bước trên (list | create | detail | admin-crud | auth | ...).
61
+ - **[MANDATORY]** If bundle file already exists: run `flowgrid audit spec <path-to-bundle.yaml> --type <pageType>` first — **bundle path only** (includes `interactionCases`, `userFlows`, UX/DB confirms); never point audit at `ir/spec.yaml` or `ir/design.yaml`.
62
+ - `<pageType>` = page type determined in the step above (list | create | detail | admin-crud | auth | ...).
63
63
  - Script output:
64
64
  - `gaps[]` → required fields missing → Agent patches bundle directly.
65
65
  - `warnings[]` → **quality hints** (`scopeIn`, `nonGoals`, `nfr`, `userFlows`, placeholders) — fix when info exists; **does not** block split. Risks → `/risk-register` only (`WARN_BUNDLE_RISKS_FORBIDDEN` if `risks:` on bundle).
@@ -96,9 +96,14 @@ Hub: [spec-ssot-prep.md](../../../docs/workflows/spec-ssot-prep.md) · extract `
96
96
 
97
97
  ## Rule: Load Policy
98
98
 
99
- - **[MANDATORY]** Write the **entire** `*.bundle.yaml` (authoring SSOT).
100
- - **[MANDATORY]** After split exists: re-read **entire** `ir/design.yaml` + `ir/spec.yaml`; do not skim partial keys.
101
- - **[STRICTLY FORBIDDEN]** Do NOT read generated `*.md` files.
99
+ See **`ir-read-only.md`**: **bundle → split → render**; IR and generated MD are **read-only**.
100
+
101
+ - **[MANDATORY]** **Write** only `*.bundle.yaml` on the leaf (authoring SSOT).
102
+ - **[MANDATORY]** `userFlows`, `nfr`, `interactionCases`, `design.stateMatrix` / `actions` → write on **`*.bundle.yaml`** only; `flowgrid split` projects them to `ir/*`.
103
+ - **[OPTIONAL]** After split: re-read `ir/design.yaml` + `ir/spec.yaml` to **verify** projection — **never patch** IR to “fix” content.
104
+ - **[STRICTLY FORBIDDEN]** Write or patch `ir/spec.yaml`, `ir/design.yaml`, or any `ir/generated/*`.
105
+ - **[STRICTLY FORBIDDEN]** Use `spec:merge` / `flowgrid merge` instead of editing the bundle.
106
+ - Member review of **`ir/generated/spec.md`** (VitePress) → hand off gaps to **`/update-spec`**, not to IR edits.
102
107
 
103
108
  ---
104
109
 
@@ -108,7 +113,7 @@ Hub: [spec-ssot-prep.md](../../../docs/workflows/spec-ssot-prep.md) · extract `
108
113
  2. Detect page type from prompt or existing bundle's `codegen.profile`.
109
114
  3. Run audit: `flowgrid audit spec <bundle> --type <pageType>` (if bundle exists).
110
115
  4. Process audit output: fill `gaps[]` directly; **`confirms[]` (UX + DB)** → `AskQuestion` wizard per `db-audit-wizard.md` / `flowgrid-ux-common.mdc`.
111
- 5. **Zone-based multi-turn authoring** (see rule below): chia page thành zones, phân tích từng zone trong turn riêng.
116
+ 5. **Zone-based multi-turn authoring** (see rule below): split the page into zones; analyze each zone in a separate turn.
112
117
  6. Write/update `*.bundle.yaml` with `specOrigin: requirement`.
113
118
  7. Apply **DSL/registry** + `flowgrid-ux-common.mdc` (FE base patterns — no `common/yaml` / gen-common).
114
119
  8. Run `pnpm docs:split -- <bundle>` → `pnpm docs:render` (design MD only).
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: update-spec
3
3
  extractBundle: update-spec
4
- description: /update-spec — delta update bundle/spec.
4
+ description: /update-spec — patch bundle after VitePress review; split+render (never edit ir/*).
5
5
  disable-model-invocation: true
6
6
  ---
7
7
 
@@ -17,10 +17,20 @@ Doc hub: `platform/toolchain/UPDATE-SPEC-FLOW.md` · `platform/toolchain/FEATURE
17
17
 
18
18
  ## Rule: Load Policy
19
19
 
20
- | Read (whole file) | Write | NEVER |
20
+ See **`ir-read-only.md`**. One write path: **bundle → split → render**.
21
+
22
+ | Read (for gap analysis) | Write | NEVER |
21
23
  |---|---|---|
22
- | **`ir/design.yaml`** — current tech/UI | Patch `*.bundle.yaml` → then split | Write generated `*.md`; write to `ir/*` directly |
23
- | **`ir/spec.yaml`** — ONLY when delta involves requirements/acceptance prose | | Read only `design.sections` / `spec.ui` partial slices |
24
+ | **`ir/generated/spec.md`** — primary review surface (VitePress) | **`*.bundle.yaml`** only | **`ir/spec.yaml`**, **`ir/design.yaml`**, any **`ir/generated/*`** |
25
+ | **`ir/design.yaml`** + **`ir/spec.yaml`** — whole file when delta touches tech vs prose | Then `flowgrid split` + `flowgrid render` | `spec:merge` / `flowgrid merge` for review fixes |
26
+
27
+ ---
28
+
29
+ ## Rule: Review → delta (member loop)
30
+
31
+ - **[MANDATORY]** Assume the member found gaps while reading **`ir/generated/spec.md`** (and `design.md` / `api.md` when relevant) — **read-only** artifacts.
32
+ - **[MANDATORY]** Translate every fix into a **minimal bundle patch**, then audit → split → render.
33
+ - **[STRICTLY FORBIDDEN]** Patch `ir/*` or `ir/generated/*` to “save time”.
24
34
 
25
35
  ---
26
36
 
@@ -28,7 +38,7 @@ Doc hub: `platform/toolchain/UPDATE-SPEC-FLOW.md` · `platform/toolchain/FEATURE
28
38
 
29
39
  - **[MANDATORY]** Scope: patch bundle (delta only); emit `#update:*` tags; bump `specRevision`; run `flowgrid split/check`.
30
40
  - **[STRICTLY FORBIDDEN]** Full rewrite → `/spec`. Close `qa` item → `/qa-resolve`. Production code → NOT this skill.
31
- - **[MANDATORY]** Legacy re-mine / trace lại từ code cũ: dùng **`/legacy /spec`** (adopt lại) hoặc **`/update-spec`** với delta `legacy` / `legacyEvidence` + `#update:*` — **không** skill riêng.
41
+ - **[MANDATORY]** Legacy re-mine / re-trace from old code: use **`/legacy /spec`** (re-adopt) or **`/update-spec`** with delta `legacy` / `legacyEvidence` + `#update:*` — not a separate skill.
32
42
 
33
43
  ---
34
44
 
@@ -48,7 +58,7 @@ Doc hub: `platform/toolchain/UPDATE-SPEC-FLOW.md` · `platform/toolchain/FEATURE
48
58
  - **[MANDATORY]** Patch minimal YAML sections in **bundle** only (not `ir/*`).
49
59
  - **[MANDATORY]** When the delta touches scope or acceptance: update `summary`, `successMetrics`, or `nonGoals` if PO changed goals/out-of-scope; sync `userStories` / AC.
50
60
  - **[MANDATORY]** When the delta touches `design.actions`, `design.sections`, or `spec.ui` (list/form/detail, filters, row actions): run the **UX ↔ userStories** checklist in `templates/shared/bundle-authoring.md` — sync `userStories.scenarios` / `acceptanceCriteria` prose when behavior or affordances change (do not leave business story stale).
51
- - **[MANDATORY]** Before split/merge: run `flowgrid audit spec <bundle.yaml> --type <pageType>` and resolve or explicitly defer `UX_*` / gap codes; do not hand off FE/tests with a fresh structural delta and no re-audit.
61
+ - **[MANDATORY]** Before split: run `flowgrid audit spec <bundle.yaml> --type <pageType>` and resolve or explicitly defer `UX_*` / gap codes; do not hand off FE/tests with a fresh structural delta and no re-audit.
52
62
  - **[MANDATORY]** Preserve error matrices: when patching actions/API endpoints, ensure `onSuccess`, `onCommonError`, `onSpecificError` + `#err:*` tags are preserved and updated accordingly.
53
63
  - ✅ Add new `onSpecificError.409` entry alongside existing `onSuccess` block.
54
64
  - ❌ Overwrite or delete existing error handling blocks that are unrelated to this delta.
@@ -71,7 +81,7 @@ Doc hub: `platform/toolchain/UPDATE-SPEC-FLOW.md` · `platform/toolchain/FEATURE
71
81
  8. `flowgrid_docs_bundle_check` / `flowgrid split --check -- <bundle>` (fallback: `pnpm docs:check`).
72
82
  9. User runs `docs_render` / `flowgrid render` (fallback: `pnpm docs:render`).
73
83
  10. Follow-up per patch type: handoff FE `/prototype` or `/grill-dev` / `/grill-bqa`; if API contract changed → `/api-update` before `openapi:gen`.
74
- 11. When delta originated from wire/`audit fe-be` on FE: read `.cursor/extracts/wire-spec-feedback.md`; after merge handoff tests-hub `/grill-testcase` then FE `/wire` or `/grill-wire`.
84
+ 11. When delta originated from wire/`audit fe-be` on FE: read `.cursor/extracts/wire-spec-feedback.md`; after bundle patch + split handoff tests-hub `/grill-testcase` then FE `/wire` or `/grill-wire`.
75
85
 
76
86
  ---
77
87
 
@@ -8,10 +8,10 @@ disable-model-invocation: true
8
8
 
9
9
  **Owner:** Platform DNA (`--type=fe|monolith --fe-adapter=dotnet-line`)
10
10
 
11
- WinForms Line client · bộ code grill/gen first when applicable.
11
+ WinForms Line client · code repo grill/gen first when applicable.
12
12
  Not Nuxt/Next — do not apply web FE layer rules here.
13
13
 
14
- ## Gen trước (code)
14
+ ## Gen first (code)
15
15
 
16
16
  1. Prefer codegen / existing Line templates before free-form UI scaffolding
17
17
  2. AI fills gaps only — do not duplicate generated surfaces
@@ -12,9 +12,9 @@ Auth-first Next.js · App Router · shadcn · Playwright. Code under `src/`.
12
12
 
13
13
  **Rules (FE globs):** `platform-invariants.mdc` · contract-naming · `framework-rules-*` · size/split/import · design-vocab (product repo).
14
14
 
15
- ## Gen trước (code)
15
+ ## Gen first (code)
16
16
 
17
- 1. bộ code `gen` / repo shim from IR already grilled
17
+ 1. code repo `gen` / repo shim from IR already grilled
18
18
  2. AI only fills gaps: Mo* / `#needs-*` not yet in registries
19
19
  3. Do not write boilerplate when codegen already covers it
20
20
 
@@ -12,9 +12,9 @@ Auth-first Nuxt 4 · Pinia · vee-validate+Zod · shadcn · Playwright.
12
12
 
13
13
  **Rules (FE globs):** `platform-invariants.mdc` · `platform-contract-naming.mdc` · `framework-rules-*` · size/split/import · design-vocab (product repo).
14
14
 
15
- ## Gen trước (code)
15
+ ## Gen first (code)
16
16
 
17
- 1. bộ code `gen` / repo shim from IR already grilled
17
+ 1. code repo `gen` / repo shim from IR already grilled
18
18
  2. AI only fills gaps: Mo* / `#needs-*` not yet in `registries/`
19
19
  3. Do not write layer boilerplate when codegen already covers it
20
20
 
@@ -5,7 +5,7 @@ alwaysApply: true
5
5
 
6
6
  # Cross-repo index routing
7
7
 
8
- - Architecture IDs and Functions/W-* paths belong to bộ docs through `FLOWGRID_DOCS_ROOT`.
8
+ - Architecture IDs and Functions/W-* paths belong to docs hub through `FLOWGRID_DOCS_ROOT`.
9
9
  Never use CodeGraph as the architecture index.
10
10
  - Test plans use `FLOWGRID_TESTS_DOC`; docs evidence uses
11
11
  `FLOWGRID_DOCS_ROOT`; IR/registry/generation follows its owning pointer such as
@@ -1,9 +1,9 @@
1
1
  ---
2
- description: bộ test optional accelerator fallback and event contract
2
+ description: tests hub optional accelerator fallback and event contract
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
- # bộ test optional accelerators
6
+ # tests hub optional accelerators
7
7
 
8
8
  ArtifactGraph accelerates coverage and search but is never required. When it is
9
9
  missing or fails, continue with deterministic local coverage/search. Assign one
@@ -13,7 +13,7 @@ stable `runId` per run and emit exactly one `flowgrid.missing-optional` event pe
13
13
  ArtifactGraph is local-only: in this repo it indexes this repo's own data
14
14
  (taxonomy/coverage hints) and never follows `FLOWGRID_DOCS_ROOT` or
15
15
  `FLOWGRID_TESTS_DOC`. Canonical docs/tests-hub evidence always flows through
16
- those bộ test pointers, never through ArtifactGraph.
16
+ those tests hub pointers, never through ArtifactGraph.
17
17
 
18
18
  Events must conform to
19
19
  `.cursor/schemas/flowgrid-test/missing-optional-event.schema.json`. Metrics count only
@@ -6,7 +6,7 @@ alwaysApply: false
6
6
 
7
7
  # Team Flow — Prototype
8
8
 
9
- Active: `/prototype` và `/grill-prototype` — **hai** session (prototype trước, grill-prototype sau).
9
+ Active: `/prototype` and `/grill-prototype` — **two** sessions (prototype first, then grill-prototype).
10
10
 
11
11
  | Command | Skill |
12
12
  |---------|-------|
@@ -16,21 +16,21 @@ Active: `/prototype` và `/grill-prototype` — **hai** session (prototype trư
16
16
  Prerequisite: member-configured `FLOWGRID_DOCS_ROOT` points to the grilled
17
17
  docs registry hub → `npm run codegen:dry -- --id …` OK. Never infer a sibling docs
18
18
  checkout; local ArtifactGraph is not the docs bridge. Architecture IDs →
19
- bộ docs (`FLOWGRID_DOCS_ROOT`); never CodeGraph for C4/architecture.
19
+ docs hub (`FLOWGRID_DOCS_ROOT`); never CodeGraph for C4/architecture.
20
20
 
21
- ## Thứ tự
21
+ ## Order
22
22
 
23
- 0. Docs hub `common/` = `processes/` + `patterns/` (Markdown) — tham chiếu nghiệp vụ; **không** gen-common.
24
- 1. `npm run codegen:dry` rồi `npm run codegen -- --id W-…` (hoặc MCP `gen`) — đọc `…/code/{W-…}/generated/HANDOFF.md`.
25
- 2. Quét `#needs-component` — implement từ FE base + shadcn; template/registry mới → `docs/workflows/custom-base.md` (toolkit SSOT).
26
- 3. Vá slot · auth bypass · gap; **không** sửa YAML business trên hub khi prototype.
23
+ 0. Docs hub `common/` = `processes/` + `patterns/` (Markdown) — business reference; **no** gen-common.
24
+ 1. `npm run codegen:dry` then `npm run codegen -- --id W-…` (or MCP `gen`) — read `…/code/{W-…}/generated/HANDOFF.md`.
25
+ 2. Scan `#needs-component` — implement from FE base + shadcn; new template/registry → `docs/workflows/custom-base.md` (toolkit SSOT).
26
+ 3. Fill slots · auth bypass · gaps; **do not** edit business YAML on the hub during prototype.
27
27
 
28
- ## Sau prototype
28
+ ## After prototype
29
29
 
30
- 4. Session mới: `/grill-prototype` — checklist UI (design.md bước 6); không chạy `gen:dry` lại trừ khi đổi IR.
30
+ 4. New session: `/grill-prototype` — UI checklist (design.md step 6); do not re-run `gen:dry` unless IR changed.
31
31
 
32
32
  - Source: grill-approved hub `ir/design.yaml`
33
- - Real UI; mock chỉ API boundary
34
- - **Không** backend thật — `/wire` thay mock
35
- - `data-testid` sớm (`E2E-TESTIDS.md` trên hub)
36
- - **Không** viết lại scaffold đã gen
33
+ - Real UI; mock API boundary only
34
+ - **No** real backend — `/wire` replaces mocks
35
+ - Early `data-testid` (`E2E-TESTIDS.md` on hub)
36
+ - **Do not** rewrite generated scaffold
@@ -9,19 +9,19 @@ alwaysApply: false
9
9
  Skills: `.cursor/skills/unit/SKILL.md` · `.cursor/skills/grill-unit/SKILL.md`
10
10
  Extract: `.cursor/extracts/portal-unit-workflow.md`, `portal-unit-test-tags.md`, `verify-gate.md`
11
11
 
12
- Canonical IR via `FLOWGRID_DOCS_ROOT`; architecture → bộ docs; cross-repo
12
+ Canonical IR via `FLOWGRID_DOCS_ROOT`; architecture → docs hub; cross-repo
13
13
  symbols → Platform DNA-wired `codegraph-<key>`; ArtifactGraph local-only.
14
14
 
15
15
  ## `/unit`
16
16
 
17
17
  - Manifest-first: `unit.manifest.json` + `UNIT-HANDOFF.md`
18
- - Gọi `npm run codegen:unit` khi thiếu smoke; xử lý `needsUnit[]` / `#needs-unit-test:*`
19
- - Tách file test thiếu theo registry (1 source logic → 1 test file)
20
- - Logic only — **không** mount page/component; mock the selected adapter's
18
+ - Run `npm run codegen:unit` when smoke is missing; handle `needsUnit[]` / `#needs-unit-test:*`
19
+ - Split missing test files per registry (1 logic source → 1 test file)
20
+ - Logic only — **do not** mount page/component; mock the selected adapter's
21
21
  transport and framework globals at the unit boundary.
22
22
  - Done: `needsUnit` clear, vitest scoped green → **`/grill-unit`**
23
23
 
24
24
  ## `/grill-unit`
25
25
 
26
- - Sau `/unit` — coverage scoped + map `reqIds`; **không** gọi `portal:unit-gen`
27
- - Thiếu file test → báo quay `/unit`
26
+ - After `/unit` — scoped coverage + map `reqIds`; **do not** call `portal:unit-gen`
27
+ - Missing test file → report and return to `/unit`
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
 
7
7
  # /grill-prototype — UI checklist (post-prototype)
8
8
 
9
- **Owner:** bộ code FE · **When:** After `/prototype` session has run `gen:dry` → `gen` and filled HANDOFF slots — **before** demo, `/test`, or `/wire`.
9
+ **Owner:** FE code repo · **When:** After `/prototype` session has run `gen:dry` → `gen` and filled HANDOFF slots — **before** demo, `/test`, or `/wire`.
10
10
 
11
11
  **Not this skill:** `flowgrid gen:dry` gate — that runs at the **start** of `/prototype` ([team-flow-prototype.mdc](../rules/team-flow-prototype.mdc)). This skill audits the **built** UI against docs IR.
12
12
 
@@ -45,7 +45,7 @@ Work through in order; fix **only** in FE repo when issue is clear. Otherwise li
45
45
  1. `FLOWGRID_DOCS_ROOT` (non-empty) → canonical pointer for `ir/design.yaml`.
46
46
  2. Else Platform DNA (`platform-dna`) — slower; prefer explicit env.
47
47
 
48
- Architecture IDs → bộ docs; symbols in other repos → `codegraph-<key>` only.
48
+ Architecture IDs → docs hub; symbols in other repos → `codegraph-<key>` only.
49
49
 
50
50
  Optional: local ArtifactGraph allowlist hint — never blocks checklist. Telemetry: `flowgrid-code-optional-integrations.mdc` once per run.
51
51
 
@@ -10,7 +10,7 @@ disable-model-invocation: true
10
10
 
11
11
  # /grill-test — E2E Traceability Audit (FE repo)
12
12
 
13
- **Owner:** bộ test (`--type=fe`). Plan SSOT stays on tests-docs hub — grill plans with `/grill-testcase`, not here.
13
+ **Owner:** tests hub (`--type=fe`). Plan SSOT stays on tests-docs hub — grill plans with `/grill-testcase`, not here.
14
14
 
15
15
  **Mindset:** Audit only — **no** fixing production code like `/test`, **no** bulk `testcase:gen` regen.
16
16
 
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
 
7
7
  # /grill-unit
8
8
 
9
- **Owner:** bộ code · optional local ArtifactGraph allowlist check before unit dry-gen.
9
+ **Owner:** code repo · optional local ArtifactGraph allowlist check before unit dry-gen.
10
10
 
11
11
  ```text
12
12
  if local ArtifactGraph available: check the FE repo's allowlist for unitGenDry
@@ -23,7 +23,7 @@ else: npm run codegen:unit:dry -- --id …
23
23
  an explicit `FLOWGRID_DOCS_ROOT` when available.
24
24
 
25
25
  Canonical IR/registries come from `FLOWGRID_DOCS_ROOT`; ArtifactGraph does
26
- not follow that pointer. Architecture IDs → bộ docs (`FLOWGRID_DOCS_ROOT`); symbols
26
+ not follow that pointer. Architecture IDs → docs hub (`FLOWGRID_DOCS_ROOT`); symbols
27
27
  in other repos → `codegraph-<key>` only.
28
28
 
29
29
  Missing ArtifactGraph never blocks the grill. Complete the deterministic dry
@@ -10,7 +10,7 @@ disable-model-invocation: true
10
10
 
11
11
  # /grill-wire — Wire Convergence Audit (FE repo)
12
12
 
13
- **Owner:** bộ code (`--type=fe`)
13
+ **Owner:** code repo (`--type=fe`)
14
14
 
15
15
  **Mindset:** Audit and gap routing only — **no** bulk `/wire` implementation, **no** `/test` fixes inline unless member explicitly runs `/test` in same session.
16
16
 
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: model
3
- description: /model — Zod models and TS types in models/ / validations/ (bộ code FE).
3
+ description: /model — Zod models and TS types in models/ / validations/ (FE code repo).
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
7
  # /model — FE contract models
8
8
 
9
- **Owner:** bộ code (`--type=fe`) · Adapters: `nuxt4` | `nextjs`
9
+ **Owner:** code repo (`--type=fe`) · Adapters: `nuxt4` | `nextjs`
10
10
  Not synced for `dotnet-line` (WinForms contracts live outside Zod `models/`).
11
11
 
12
12
  ## Scope
@@ -35,7 +35,7 @@ Docs hub (`FLOWGRID_DOCS_ROOT`): **Read the entire `ir/design.yaml`**. Do not ch
35
35
  ## Handoff
36
36
 
37
37
  → `/wire` when forms/services need the updated schemas
38
- → `/api` (bộ code BE) when the backend contract must catch up
38
+ → `/api` (BE code repo) when the backend contract must catch up
39
39
 
40
40
  ## Accelerators (optional)
41
41
 
@@ -44,5 +44,5 @@ if local ArtifactGraph available: local FE tag/allowlist hints only
44
44
  else: scoped IR + registry evidence only
45
45
  ```
46
46
 
47
- Canonical IR/registry evidence always comes through the bộ code docs pointer,
47
+ Canonical IR/registry evidence always comes through the code repo docs pointer,
48
48
  not through ArtifactGraph.
@@ -34,7 +34,7 @@ Per **`agent-design-context.md`** (resolve `W-*` via `flowgrid_docs_route` → `
34
34
 
35
35
  Print checklist in chat: FLOW ids read · NFR · L2 design.md yes/no.
36
36
 
37
- **Docs hub is read-only for this skill.** Never Write/patch `*.bundle.yaml`, `ir/*`, or any file under `FLOWGRID_DOCS_ROOT`. Missing `ir/design.yaml`, empty `codegen.profile`, or `flowgrid gen` failure → **STOP**, quote the CLI error, hand off to docs-hub `/grill-dev` (or `/spec`). Do not invent SSOT to make gen pass. Login/forgot/reset must be `codegen.profile: auth` (not `create`) or gen writes `(dashboard)`.
37
+ **Docs hub is read-only for this skill.** Never Write/patch any file under `FLOWGRID_DOCS_ROOT` (including `*.bundle.yaml`, `ir/*`, `ir/generated/*`). Hub fixes → `/update-spec` on bundle in a docs session. Missing `ir/design.yaml`, empty `codegen.profile`, or `flowgrid gen` failure → **STOP**, quote the CLI error, hand off to docs-hub `/grill-dev` (or `/spec`). Do not invent SSOT to make gen pass. Login/forgot/reset must be `codegen.profile: auth` (not `create`) or gen writes `(dashboard)`.
38
38
 
39
39
  Do not invent sibling docs-hub paths. Pass `FLOWGRID_DOCS_ROOT` or `--docs-root`.
40
40
 
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
 
7
7
  # /test
8
8
 
9
- **Owner:** bộ test (`--type=fe`)
9
+ **Owner:** tests hub (`--type=fe`)
10
10
 
11
11
  ```bash
12
12
  flowgrid testcase:gen:dry --tests-docs=/path/to/tests-hub --docs-root=/path/to/docs-hub -- --id TC-…
@@ -15,7 +15,7 @@ flowgrid testcase:gen --tests-docs=/path/to/tests-hub --docs-root=/path/to/docs-
15
15
 
16
16
  Use `FLOWGRID_TESTS_DOC` (or `--tests-docs`) when the tests hub is not local.
17
17
  Use `FLOWGRID_DOCS_ROOT` for docs evidence. Route Functions/W-* evidence through
18
- bộ docs, and symbols or call graphs for repo X through the Platform DNA-wired
18
+ docs hub, and symbols or call graphs for repo X through the Platform DNA-wired
19
19
  `codegraph-<repo-key>` server for checkout X. Never use a workspace-parent
20
20
  graph or ask the member to hand-edit MCP configuration.
21
21
 
@@ -27,7 +27,7 @@ else: local deterministic search, then run flowgrid testcase:gen directly
27
27
  ```
28
28
 
29
29
  ArtifactGraph never follows `FLOWGRID_DOCS_ROOT` / `FLOWGRID_TESTS_DOC`; plan
30
- YAML and docs evidence flow only through those bộ test pointers.
30
+ YAML and docs evidence flow only through those tests hub pointers.
31
31
 
32
32
  Assign one stable `runId` at run start. If ArtifactGraph is missing, complete
33
33
  the local fallback, count successful file reads and exact raw bytes read into
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: unit
3
- description: /unit — unit test generation from codegen manifests via bộ code.
3
+ description: /unit — unit test generation from codegen manifests via code repo.
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
7
  # /unit
8
8
 
9
- **Owner:** bộ code (`--type=fe`)
9
+ **Owner:** code repo (`--type=fe`)
10
10
 
11
11
  ```bash
12
12
  npm run codegen:unit:dry -- --id W-ADM-AUTH-01
@@ -35,7 +35,7 @@ local ArtifactGraph never replaces it.
35
35
 
36
36
  ## Route
37
37
 
38
- Architecture/C4 → bộ docs (`FLOWGRID_DOCS_ROOT`); IR/registry/gen →
38
+ Architecture/C4 → docs hub (`FLOWGRID_DOCS_ROOT`); IR/registry/gen →
39
39
  `FLOWGRID_DOCS_ROOT`; symbols/call-graph for repo X → Platform DNA-wired
40
40
  `codegraph-<repo-key>`. Never workspace-parent graphs or member-edited MCP.
41
41
  Local ArtifactGraph is allowlist/tag hints for this repo only.
@@ -51,5 +51,5 @@ else: run flowgrid unit-gen directly
51
51
  ```
52
52
 
53
53
  Missing ArtifactGraph never blocks unit generation. Complete the direct,
54
- deterministic bộ code fallback first, then follow
54
+ deterministic code repo fallback first, then follow
55
55
  `.cursor/rules/flowgrid-code-optional-integrations.mdc` for once-per-run telemetry.
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  name: wire
3
- description: /wire — replace prototype mocks with real API wiring (bộ code FE lane).
3
+ description: /wire — replace prototype mocks with real API wiring (FE code repo lane).
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
7
  # /wire
8
8
 
9
- **Owner:** bộ code (`--type=fe`)
9
+ **Owner:** code repo (`--type=fe`)
10
10
 
11
11
  > **[MANDATORY]** Read `.cursor/extracts/wire-phase.md`, `.cursor/extracts/wire-audit-loop.md`, and hub `docs/workflows/wire.md` (wire cycle) before wiring.
12
12
 
13
13
  Use after `/prototype` when tags/handoff mark `#wire-only` or real API integration is required.
14
- Keep generation through bộ code adapters; resolve canonical docs evidence
14
+ Keep generation through code repo adapters; resolve canonical docs evidence
15
15
  through `FLOWGRID_DOCS_ROOT` and do not invent sibling layout.
16
16
 
17
17
  ## Docs Root Resolution
@@ -25,7 +25,7 @@ through `FLOWGRID_DOCS_ROOT` and do not invent sibling layout.
25
25
 
26
26
  ## Route
27
27
 
28
- IR/handoff via `FLOWGRID_DOCS_ROOT`; architecture IDs via bộ docs
28
+ IR/handoff via `FLOWGRID_DOCS_ROOT`; architecture IDs via docs hub
29
29
  (`FLOWGRID_DOCS_ROOT`); BE/FE symbols via per-repo `codegraph-<key>`; ArtifactGraph
30
30
  local tags only. Never workspace-parent graphs or member-edited MCP.
31
31
 
@@ -45,7 +45,7 @@ once-per-run telemetry with observed metrics only.
45
45
  - **[MANDATORY]** Resolve **tests-docs** (`FLOWGRID_TESTS_DOC`) and **e2e-root** (FE `tests/e2e` or project convention).
46
46
  - **[MANDATORY]** `flowgrid cases:gate --strict` on TC YAML for the screen being wired (when gate is enabled for the team).
47
47
 
48
- ## Post-wire (audit đầu ra)
48
+ ## Post-wire (output audit)
49
49
 
50
50
  - **[MANDATORY]** After mocks are removed and real API is connected, run:
51
51