@shanyucoder/flowgrid 0.1.5 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/adapters/laravel/registries/codegen.registry.json +9 -9
- package/bin/flowgrid.mjs +326 -115
- package/bin/lib/agent-mcp.mjs +4 -0
- package/bin/lib/agent-profiles.mjs +30 -6
- package/bin/lib/audit-run.mjs +1 -1
- package/bin/lib/cli-update.mjs +48 -8
- package/bin/lib/doctor.mjs +90 -3
- package/bin/lib/harness-overlay.mjs +12 -5
- package/bin/lib/harness-sync.mjs +17 -3
- package/bin/lib/init-adapters.mjs +75 -0
- package/bin/lib/init-scaffold.mjs +9 -0
- package/bin/lib/inject-consumer-scripts.mjs +115 -0
- package/bin/lib/merge-stack-config.mjs +89 -0
- package/bin/lib/project-gitignore.mjs +1 -0
- package/bin/lib/repo-maps-align.mjs +203 -0
- package/dist/graph/config/load-config.js +7 -2
- package/dist/graph/config/load-config.js.map +1 -1
- package/dist/graph/mcp/tools.js +1 -1
- package/dist/graph/mcp/tools.js.map +1 -1
- package/dist/graph/registry/load-registries.d.ts +1 -0
- package/dist/graph/registry/load-registries.js +14 -1
- package/dist/graph/registry/load-registries.js.map +1 -1
- package/engines/cases/render-cases.mjs +67 -5
- package/engines/docs/lib/qa-item.mjs +91 -0
- package/engines/docs/lib/render-api-summary-markdown.mjs +28 -0
- package/engines/docs/lib/render-bundle-markdown.mjs +77 -2
- package/engines/docs/lib/render-data-model-markdown.mjs +171 -0
- package/engines/docs/lib/render-design-tables.mjs +89 -7
- package/engines/docs/lib/render-qa-list.mjs +123 -25
- package/engines/docs/lib/render-template.mjs +6 -0
- package/engines/docs/render-docs.mjs +6 -2
- package/engines/docs/vitepress/config.ts +7 -7
- package/engines/docs/vitepress/surfaces-nav.mjs +45 -14
- package/engines/openapi/check-backend-spec.mjs +2 -2
- package/engines/openapi/lib/markdown-table.mjs +8 -0
- package/engines/openapi/lib/render-backend-spec-markdown.mjs +78 -0
- package/engines/registry-sync/be-capabilities-sync.mjs +118 -0
- package/engines/registry-sync/fe-design-sync.mjs +258 -0
- package/engines/registry-sync/run-registry-sync.mjs +107 -0
- package/engines/shared/e2e-output-layout.mjs +68 -0
- package/engines/shared/flowgrid-e2e-root.mjs +19 -0
- package/engines/shared/resolve-flowgrid-context.mjs +176 -0
- package/engines/spec/lib/audit-api-gaps.mjs +1 -1
- package/engines/spec/lib/audit-bundle-gaps.mjs +92 -3
- package/engines/spec/lib/audit-db-tables.mjs +529 -0
- package/engines/spec/lib/audit-e2e-coverage.mjs +88 -30
- package/engines/spec/lib/bundle-schema.mjs +4 -1
- package/engines/spec/lib/open-qa.mjs +71 -21
- package/engines/spec/split-bundle.mjs +11 -1
- package/engines/testcase/runners/generate-api.mjs +23 -23
- package/engines/testcase/runners/generate.mjs +19 -17
- package/engines/testcase/runners/lib/bootstrap-context.mjs +44 -0
- package/engines/testcase/runners/lib/write-files.mjs +37 -9
- package/harness/agents/antigravity/rules/antigravity-mcp.mdc +12 -0
- package/harness/agents/gemini/rules/gemini-mcp.mdc +11 -0
- package/harness/agents/gemini_antigravity/rules/antigravity-mcp.mdc +8 -6
- package/harness/be/skills/{grill-api → audit-api}/SKILL.md +8 -7
- package/harness/common/extracts/artifact-graph.md +2 -2
- package/harness/common/extracts/artifactgraph-phase-hooks.md +2 -2
- package/harness/common/extracts/docs-mark-detect.md +2 -2
- package/harness/common/extracts/entity-relationship.md +23 -0
- package/harness/common/rules/flowgrid-ux-common.mdc +3 -3
- package/harness/common/skills/configure-repo-maps/SKILL.md +4 -2
- package/harness/docs/extracts/agent-execution-protocol.md +3 -3
- package/harness/docs/extracts/api-codegen-readiness.md +34 -0
- package/harness/docs/extracts/api-codegen-tags.md +30 -0
- package/harness/docs/extracts/api-contract.md +43 -0
- package/harness/docs/extracts/api-spec-sync.md +35 -0
- package/harness/docs/extracts/artifactgraph-hooks-docs.md +1 -1
- package/harness/docs/extracts/call-external.md +16 -0
- package/harness/docs/extracts/common-scope.md +9 -10
- package/harness/docs/extracts/db-audit-wizard.md +45 -0
- package/harness/docs/extracts/derived-data.md +18 -0
- package/harness/docs/extracts/design-leaf-signoff.md +16 -0
- package/harness/docs/extracts/extract-registry.docs.json +11 -2
- package/harness/docs/extracts/qa-inbox.md +19 -10
- package/harness/docs/extracts/qa-team.md +32 -0
- package/harness/docs/extracts/spec-core.md +7 -3
- package/harness/docs/extracts/spec-evolution.md +21 -0
- package/harness/docs/extracts/spec-prd-lite.md +19 -0
- package/harness/docs/extracts/spec-requirement.md +6 -2
- package/harness/docs/extracts/spec-ssot-prep.md +25 -0
- package/harness/docs/extracts/tpl-module.md +12 -0
- package/harness/docs/extracts/verify-gate.md +33 -0
- package/harness/docs/extracts/wire-spec-feedback.md +31 -0
- package/harness/docs/rules/agent-compliance.mdc +1 -1
- package/harness/docs/rules/team-flow-spec.mdc +3 -4
- package/harness/docs/schemas/flowgrid-docs/qa-item.schema.json +65 -0
- package/harness/docs/skills/adopt/SKILL.md +2 -0
- package/harness/docs/skills/api/SKILL.md +4 -5
- package/harness/docs/skills/api-spec/SKILL.md +19 -6
- package/harness/docs/skills/api-update/SKILL.md +4 -4
- package/harness/docs/skills/architecture/SKILL.md +1 -1
- package/harness/docs/skills/business-process/SKILL.md +2 -0
- package/harness/docs/skills/common/SKILL.md +2 -2
- package/harness/docs/skills/common-spec/SKILL.md +10 -47
- package/harness/docs/skills/db-erd/SKILL.md +26 -0
- package/harness/docs/skills/grill/SKILL.md +28 -22
- package/harness/docs/skills/grill-api/SKILL.md +4 -6
- package/harness/docs/skills/grill-api-spec/SKILL.md +44 -24
- package/harness/docs/skills/grill-bqa/SKILL.md +28 -13
- package/harness/docs/skills/grill-common-spec/SKILL.md +10 -35
- package/harness/docs/skills/grill-dev/SKILL.md +8 -7
- package/harness/docs/skills/grill-docs/SKILL.md +11 -4
- package/harness/docs/skills/module/SKILL.md +3 -1
- package/harness/docs/skills/openapi/SKILL.md +2 -1
- package/harness/docs/skills/overview/SKILL.md +7 -1
- package/harness/docs/skills/qa-resolve/SKILL.md +13 -12
- package/harness/docs/skills/qa-review/SKILL.md +45 -0
- package/harness/docs/skills/spec/SKILL.md +43 -10
- package/harness/docs/skills/update-spec/SKILL.md +5 -2
- package/harness/fe/extracts/wire-audit-loop.md +72 -0
- package/harness/fe/extracts/wire-phase.md +45 -0
- package/harness/fe/rules/platform-design-vocabulary.mdc +1 -1
- package/harness/fe/rules/team-flow-prototype.mdc +8 -4
- package/harness/fe/skills/gen-common/SKILL.md +11 -84
- package/harness/fe/skills/grill-prototype/SKILL.md +51 -25
- package/harness/fe/skills/grill-test/SKILL.md +78 -20
- package/harness/fe/skills/grill-wire/SKILL.md +81 -0
- package/harness/fe/skills/prototype/SKILL.md +3 -2
- package/harness/fe/skills/wire/SKILL.md +8 -3
- package/harness/shared/AGENTS.md +3 -3
- package/harness/shared/SSOT_AGENT_PROTOCOL.md +3 -3
- package/harness/tests/extracts/grill-api-hook.md +69 -0
- package/harness/tests/extracts/grill-scenario-flow.md +39 -0
- package/harness/tests/extracts/grill-screen-tc.md +40 -0
- package/harness/tests/extracts/testcase-gen-cli.md +57 -0
- package/harness/tests/extracts/testcase-plan.md +29 -0
- package/harness/tests/extracts/tests-verify-gate.md +29 -0
- package/harness/tests/extracts/wire-test-handoff.md +37 -0
- package/harness/tests/skills/grill-testcase/SKILL.md +1 -0
- package/harness/tests/skills/test-api/SKILL.md +14 -6
- package/harness/tests/skills/testcase/SKILL.md +3 -1
- package/harness/tests/templates/TC.example-api.yaml +7 -1
- package/harness/tests/templates/TC.example.yaml +4 -1
- package/harness/tests/templates/tpl-testcase-plan.md +75 -0
- package/package.json +1 -1
- package/stacks/fastapi.json +1 -0
- package/stacks/laravel.json +1 -0
- package/stacks/nestjs.json +72 -0
- package/stacks/nextjs-nest.json +1 -0
- package/stacks/nuxt4-nest.json +1 -0
- package/templates/project-skeleton/architecture/03-business-process/FLOW-template.md +2 -0
- package/templates/project-skeleton/overview/index.md +68 -2
- package/templates/project-skeleton/overview/operational-areas/_template.md +37 -0
- package/templates/project-skeleton/qa/README.md +4 -8
- package/templates/project-skeleton/surfaces/common/data-model/index.md +10 -2
- package/templates/schemas/qa-item.schema.json +98 -0
- package/templates/shared/api-03-mock.stub.yaml +14 -0
- package/templates/shared/backend-api.bundle.yaml +3 -0
- package/templates/shared/backend-api.yaml +4 -0
- package/templates/shared/be-capabilities.registry.base.json +8 -0
- package/templates/shared/bundle-authoring.md +44 -7
- package/templates/shared/default-layout.ejs +131 -18
- package/templates/shared/design-spec.yaml +2 -3
- package/templates/shared/design.registry.base.json +38 -0
- package/templates/shared/feature.bundle.yaml +16 -9
- package/templates/shared/ir/generated/spec.md +281 -0
- package/templates/shared/ir-spec.yaml +1 -1
- package/templates/shared/qa-authoring.md +78 -0
- package/templates/shared/qa-item.yaml +35 -14
- package/templates/shared/tpl-api-contract.md +133 -0
- package/templates/shared/tpl-screen-data-model.md +76 -0
- package/templates/tests-skeleton/cases/README.md +4 -0
- package/templates/tests-skeleton/catalog/locale.yaml +9 -0
- package/templates/tests-skeleton/tpl-testcase-plan.md +9 -0
- package/harness/docs/skills/api-integration/SKILL.md +0 -110
- package/harness/docs/skills/grill-integration-spec/SKILL.md +0 -51
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"bundles": {
|
|
5
5
|
"architecture-core": [
|
|
6
6
|
".cursor/extracts/architecture-core.md",
|
|
7
|
+
".cursor/extracts/spec-ssot-prep.md",
|
|
7
8
|
".cursor/extracts/tpl-arc42-chapter.md",
|
|
8
9
|
".cursor/extracts/tpl-module.md",
|
|
9
10
|
".cursor/extracts/tpl-deployment.md",
|
|
@@ -14,10 +15,15 @@
|
|
|
14
15
|
"docs-hub": [
|
|
15
16
|
".cursor/extracts/docs-phase-hooks.md",
|
|
16
17
|
".cursor/extracts/agent-execution-protocol.md",
|
|
17
|
-
".cursor/extracts/qa-inbox.md"
|
|
18
|
+
".cursor/extracts/qa-inbox.md",
|
|
19
|
+
".cursor/extracts/qa-team.md"
|
|
18
20
|
],
|
|
19
21
|
"spec-requirement": [
|
|
20
22
|
".cursor/extracts/spec-requirement.md",
|
|
23
|
+
".cursor/extracts/spec-prd-lite.md",
|
|
24
|
+
".cursor/extracts/spec-ssot-prep.md",
|
|
25
|
+
".cursor/extracts/design-leaf-signoff.md",
|
|
26
|
+
".cursor/extracts/db-audit-wizard.md",
|
|
21
27
|
".cursor/extracts/agent-execution-protocol.md",
|
|
22
28
|
".cursor/extracts/common-scope.md"
|
|
23
29
|
],
|
|
@@ -27,11 +33,13 @@
|
|
|
27
33
|
],
|
|
28
34
|
"bqa-grill": [
|
|
29
35
|
".cursor/extracts/grill/validation.md",
|
|
36
|
+
".cursor/extracts/db-audit-wizard.md",
|
|
30
37
|
".cursor/extracts/agent-execution-protocol.md"
|
|
31
38
|
],
|
|
32
39
|
"dev-grill": [
|
|
33
40
|
".cursor/extracts/codegen/readiness.md",
|
|
34
|
-
".cursor/extracts/docs-mark-detect.md"
|
|
41
|
+
".cursor/extracts/docs-mark-detect.md",
|
|
42
|
+
".cursor/extracts/db-audit-wizard.md"
|
|
35
43
|
],
|
|
36
44
|
"grill-docs": [
|
|
37
45
|
".cursor/extracts/grill-docs-reconcile.md",
|
|
@@ -39,6 +47,7 @@
|
|
|
39
47
|
],
|
|
40
48
|
"update-spec": [
|
|
41
49
|
".cursor/extracts/update-spec-delta.md",
|
|
50
|
+
".cursor/extracts/wire-spec-feedback.md",
|
|
42
51
|
".cursor/extracts/qa-inbox.md"
|
|
43
52
|
]
|
|
44
53
|
}
|
|
@@ -7,28 +7,37 @@ There is **no** `openQuestions` on YAML. Gaps use **AskQuestion** in the skill s
|
|
|
7
7
|
AskQuestion: MUST include your Recommended options AND an explicit "Log as Tech Debt (Pending)" option. (The UI automatically provides the 3rd "Other" option). **STOP**.
|
|
8
8
|
|
|
9
9
|
- Member picks A/B/C (Recommended) → write that fact into the real spec field (`design`, `01`, …).
|
|
10
|
-
- Member picks **Log as Tech Debt (Pending)** → create
|
|
10
|
+
- Member picks **Log as Tech Debt (Pending)** → create **one** `qa/<SHORT>_NNNN.yaml` with first `updates[]` line `kind: question`. Do not invent the answer.
|
|
11
11
|
- Member picks **Other** and types a decision → write that text into the spec field.
|
|
12
12
|
|
|
13
13
|
## When to create a file
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
**[MANDATORY]** Read whole `.flowgrid/templates/qa-item.yaml` + `.flowgrid/templates/qa-authoring.md` before writing.
|
|
16
|
+
|
|
17
|
+
1. Pick **SHORT** slug (stable) — see `suggestQaShort(W-*)` in authoring doc.
|
|
18
|
+
2. Next id: glob `qa/<SHORT>_*.yaml` **or** `nextQaId(hub, SHORT)` (`engines/docs/lib/qa-item.mjs`).
|
|
19
|
+
3. Copy golden template → `qa/<SHORT>_NNNN.yaml`:
|
|
20
|
+
- `schema: flowgrid-qa-item/v1`
|
|
21
|
+
- `id` = basename; `status: open`; `target.path` + `target.at`; `screen` / `bundleId` / `skill` / `kind`
|
|
22
|
+
4. First `updates[]`: `at` = `YYYYMMDD HH:mm` (`formatQaAt`), `kind: question`, `text` = open question.
|
|
23
|
+
5. Point spec: `#missing_info <id>` / `#tech-debt:<id>` on `target.at`.
|
|
24
|
+
6. `flowgrid split` — `ir/spec.yaml` Q&A lists open ids.
|
|
25
|
+
|
|
26
|
+
Optional: `validateQaItem` / schema `templates/schemas/qa-item.schema.json`.
|
|
20
27
|
|
|
21
28
|
## Close (`/qa-resolve`)
|
|
22
29
|
|
|
23
|
-
Prompt: `/qa-resolve
|
|
30
|
+
Prompt: `/qa-resolve <id>` plus **solution** on following lines.
|
|
31
|
+
|
|
32
|
+
Append `kind: answer` to **same file**; patch bundle/01; `status: closed`; gỡ tags; `flowgrid split`.
|
|
24
33
|
|
|
25
|
-
|
|
34
|
+
## Review (team)
|
|
26
35
|
|
|
27
|
-
|
|
36
|
+
`/qa-review <id>` → append `kind: review` to **same file** — see `qa-team.md`.
|
|
28
37
|
|
|
29
38
|
## Do not block grill
|
|
30
39
|
|
|
31
|
-
`grillStatus` may be `done` while `
|
|
40
|
+
`grillStatus` may be `done` while `status: open` QA files exist.
|
|
32
41
|
|
|
33
42
|
## Not this folder
|
|
34
43
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# QA — one file, append timeline (docs hub)
|
|
2
|
+
|
|
3
|
+
Hub: `docs/workflows/qa-team.md`.
|
|
4
|
+
|
|
5
|
+
## File naming
|
|
6
|
+
|
|
7
|
+
`qa/<SHORT>_<NNNN>.yaml` — e.g. `HOTEL-LIST_0001.yaml`. Next index: glob same prefix, max NNNN + 1.
|
|
8
|
+
|
|
9
|
+
`id` inside file = basename without `.yaml`.
|
|
10
|
+
|
|
11
|
+
## Rules
|
|
12
|
+
|
|
13
|
+
1. **One case = one file** for life of that question thread.
|
|
14
|
+
2. **`updates[]` append-only** — `at` as `YYYYMMDD HH:mm`, `kind`: question | answer | review | note.
|
|
15
|
+
3. **`qa/index.md`** is render-only catalog — do not put business log in index.
|
|
16
|
+
4. **needs-change:** append `kind: review` with text; set `status: open`; do **not** create a second file.
|
|
17
|
+
|
|
18
|
+
## Open (Tech Debt)
|
|
19
|
+
|
|
20
|
+
Template: `.flowgrid/templates/qa-item.yaml` · rules: `qa-authoring.md` · `schema: flowgrid-qa-item/v1`.
|
|
21
|
+
|
|
22
|
+
Create file + first update `kind: question`. Tag field: `#missing_info <id>` / `#tech-debt:<id>`.
|
|
23
|
+
|
|
24
|
+
## /qa-resolve
|
|
25
|
+
|
|
26
|
+
Append `kind: answer` with user solution text; patch `target.path` / `target.at`; remove QA tags from spec; `status: closed`; `flowgrid split`.
|
|
27
|
+
|
|
28
|
+
## /qa-review
|
|
29
|
+
|
|
30
|
+
Append `kind: review` only. If needs-change, `status: open`.
|
|
31
|
+
|
|
32
|
+
Legacy `qa/` paths: migrate to flat `qa/<id>.yaml` when touching old hubs.
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
# Common
|
|
1
|
+
# Common on docs hub (Markdown only)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`/common` writes `common/patterns/*.md` at the LCA from `common-scope.md`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Cross-flow: `common/processes/FLOW-*.md`.
|
|
6
|
+
|
|
7
|
+
**Deprecated:** `/common-spec`, `common/yaml`, `/gen-common`, `/grill-common-spec`.
|
|
8
|
+
|
|
9
|
+
UI affordances: FE base + `flowgrid-ux-common.mdc`. Prep drill: `spec-ssot-prep.md` (registry / adopt / custom-base) before leaf `/spec`. New shared codegen: custom-base `build-template-code`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Spec evolution — version & changelog
|
|
2
|
+
|
|
3
|
+
Applies to **`01-backend-spec.yaml`** (`/api-update`) and **`*.bundle.yaml`** (`/update-spec`).
|
|
4
|
+
|
|
5
|
+
## On every material patch
|
|
6
|
+
|
|
7
|
+
- Bump `feature.version` (semver policy team).
|
|
8
|
+
- Append `changeLog[]` entry: `id`, `summary`, `impact[]`, `breaking: bool`.
|
|
9
|
+
- Portal sync: refresh `feature.source.portalRefs` / `syncedAt` when design linkage changes.
|
|
10
|
+
|
|
11
|
+
## Breaking changes
|
|
12
|
+
|
|
13
|
+
Set `breaking: true`; require re-grill (`/grill-api-spec` or `/grill-dev`) before codegen.
|
|
14
|
+
|
|
15
|
+
## Deferred work
|
|
16
|
+
|
|
17
|
+
Use `pendingTechDebt[]` with `id: QA-<feature.id>-NNNN` + matching `qa/` file — not prose in `requirements`.
|
|
18
|
+
|
|
19
|
+
## OpenAPI
|
|
20
|
+
|
|
21
|
+
Contract change on `01` → always regen `02` — never patch `02` as source.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Leaf bundle ↔ PRD lite (map for /spec)
|
|
2
|
+
|
|
3
|
+
| PRD section | Bundle / IR |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| Problem / goals | `summary` bullets (business_goals, stakeholders, user_journey, context) |
|
|
6
|
+
| Success metrics | `successMetrics` (optional) |
|
|
7
|
+
| Non-goals | `nonGoals` (optional) |
|
|
8
|
+
| Users / persona | `userStories.primary.asA` + link `overview/` persona |
|
|
9
|
+
| User stories + AC | `userStories.scenarios`, `acceptanceCriteria` |
|
|
10
|
+
| Functional scope | `spec.requirements`, `design.sections`, `design.actions` |
|
|
11
|
+
| API | `api/<seq>/01-backend-spec.yaml` — **not** `spec.api` |
|
|
12
|
+
| Tech / codegen | `gen`, `grill-dev` — not in first `/spec` pass |
|
|
13
|
+
| Open questions | `qa/*.yaml` |
|
|
14
|
+
|
|
15
|
+
**Author path:** `.flowgrid/templates/feature.bundle.yaml` + `bundle-authoring.md` only. **`design-spec.yaml` deprecated.**
|
|
16
|
+
|
|
17
|
+
**BA deliverable:** `ir/generated/spec.md` (TOC, overview, metrics, non-goals) after `flowgrid split` + `flowgrid render`.
|
|
18
|
+
|
|
19
|
+
**Profile trim:** list → giữ Initial Load, Affordances (nếu có), Exceptions; bỏ scenario form nếu không có `ui.form`. create/detail tương tự — không copy 6 scenario khi không áp dụng.
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Spec requirement (/spec)
|
|
2
2
|
|
|
3
|
-
Author
|
|
3
|
+
Author **`*.bundle.yaml` only** — template: `.flowgrid/templates/feature.bundle.yaml` + `bundle-authoring.md`. **Do not** author `design-spec.yaml` (deprecated).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Required business keys when info exists: `summary`, `userStories` (+ `screenAccess`), optional `successMetrics`, `nonGoals`. See `spec-prd-lite.md` for PRD map.
|
|
6
|
+
|
|
7
|
+
After patch: `flowgrid split` → `flowgrid render` → BA reads `ir/generated/spec.md` (not hand-written `.md`).
|
|
8
|
+
|
|
9
|
+
Path SSOT: `surfaces/<surface>/CMP-*/<NN…>/` — resolve IDs with `flowgrid_docs_route` on consumer repo.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Spec SSOT prep drill (hub)
|
|
2
|
+
|
|
3
|
+
SSOT workflow: `docs/workflows/spec-ssot-prep.md`
|
|
4
|
+
|
|
5
|
+
## Trước `/spec` hoặc `/legacy /spec`
|
|
6
|
+
|
|
7
|
+
| Nhánh | Lệnh / skill | Bắt buộc khi |
|
|
8
|
+
|-------|----------------|--------------|
|
|
9
|
+
| A Standard | FE `registry:sync` sau init | Greenfield default base |
|
|
10
|
+
| B Custom | `build-template-code` ([custom-base](../../../docs/workflows/custom-base.md)) | Stack lệch template |
|
|
11
|
+
| C Brownfield | `/adopt` → `audit legacy` | Có legacy repos; `/legacy /spec` |
|
|
12
|
+
|
|
13
|
+
Brownfield + custom: **C → B** (hoặc B đã có) → Phase 0 → leaf spec.
|
|
14
|
+
|
|
15
|
+
## Trên session spec
|
|
16
|
+
|
|
17
|
+
1. Inventory: `/legacy` → bắt buộc `adoption-inventory.md`; greenfield → đọc Section 5 CMN **nếu file tồn tại** (workspace brownfield).
|
|
18
|
+
2. Không copy-paste legacy file — `CMN-*` + DSL/registry.
|
|
19
|
+
3. `audit spec` → `gaps[]` patch; `CONFIRM_UX_*` + `CONFIRM_DB_*` → AskQuestion (`db-audit-wizard.md`).
|
|
20
|
+
4. `split` + `render` → `ir/generated/spec.md`, `data-model.md`.
|
|
21
|
+
|
|
22
|
+
## STOP prompts
|
|
23
|
+
|
|
24
|
+
- `/legacy /spec` without inventory → *Run `/adopt` first.*
|
|
25
|
+
- Custom stack without registry build → *Complete custom-base prep before spec.*
|
|
@@ -9,6 +9,18 @@ Lead-assigned module. **This README is MD-only** (no YAML).
|
|
|
9
9
|
|
|
10
10
|
Owns …
|
|
11
11
|
|
|
12
|
+
## Out of scope (module)
|
|
13
|
+
|
|
14
|
+
- [Chức năng / CMP khác giữ SSOT — không copy bundle vào module này]
|
|
15
|
+
- [Hạ tầng / deployment — `architecture/`]
|
|
16
|
+
|
|
17
|
+
## Depends on
|
|
18
|
+
|
|
19
|
+
| ID / artifact | Lý do |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| `CMP-…` / `FLOW-…` | [Upstream data hoặc quy trình] |
|
|
22
|
+
| `API-…` | [Contract reuse — link `01-backend-spec`] |
|
|
23
|
+
|
|
12
24
|
| | |
|
|
13
25
|
|--|--|
|
|
14
26
|
| **ID** | `CMP-{NN}` |
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Verify gates — API lane (quick)
|
|
2
|
+
|
|
3
|
+
Run from docs hub (`FLOWGRID_DOCS_ROOT` or cwd).
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
flowgrid audit api …/01-backend-spec.yaml
|
|
9
|
+
flowgrid audit fe-be …/*.bundle.yaml # if portal leaf
|
|
10
|
+
flowgrid api:check --spec …/01
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## OpenAPI + site
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
flowgrid openapi_gen --spec …/01
|
|
17
|
+
flowgrid openapi_render
|
|
18
|
+
flowgrid render
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Not valid on `01`
|
|
22
|
+
|
|
23
|
+
- `flowgrid check` — bundle/IR only.
|
|
24
|
+
|
|
25
|
+
## BE repo (after grill)
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
flowgrid api-gen:dry --adapter=<stack> -- --spec …/01
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Exit non-zero → fix `01` or grill tags; do not patch generated BE as SSOT.
|
|
32
|
+
|
|
33
|
+
Hub checklist: `docs/workflows/backend.md` · `docs/workflows/gates.md` step 5.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Wire discoveries → /update-spec or /api-update
|
|
2
|
+
|
|
3
|
+
When **wire** or **`audit fe-be`** on FE exposes spec/contract drift, patch on **docs hub** — then loop test + wire.
|
|
4
|
+
|
|
5
|
+
## Choose lane
|
|
6
|
+
|
|
7
|
+
| Drift | Skill | Notes |
|
|
8
|
+
|-------|-------|-------|
|
|
9
|
+
| UX copy, AC, actions, validation message on UI | `/update-spec` | Patch bundle; `#update:*`; `audit spec`; split |
|
|
10
|
+
| Endpoint, schema, status code on `01` | `/api-update` | Then `audit api`, `openapi:gen`, BE `/audit-api` |
|
|
11
|
+
| Both | `/update-spec` + `/api-update` in order (contract first if BE blocks UX) |
|
|
12
|
+
|
|
13
|
+
## update-spec guardrails (wire context)
|
|
14
|
+
|
|
15
|
+
- `featureStatus: wire` → set `need-update` when delta applied.
|
|
16
|
+
- Do **not** clear `#update:*` on bundle — `/wire` clears after implementation confirms.
|
|
17
|
+
- After split/render: handoff FE `/wire` or `/prototype` if UI structure changed; tests-hub `/grill-testcase` if AC/matrix changed.
|
|
18
|
+
|
|
19
|
+
## Paste-ready prompt shape (from grill-wire / grill-testcase)
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
/docs-hub /update-spec
|
|
23
|
+
|
|
24
|
+
Screen: <W-*>
|
|
25
|
+
Delta: <what wire/API proved wrong>
|
|
26
|
+
Bundle path: surfaces/.../<slug>.bundle.yaml
|
|
27
|
+
Sections: <userStories | design.actions | onSpecificError | ...>
|
|
28
|
+
Evidence: audit fe-be FEBE_* / staging response / E2E failure
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Full delta rules: `update-spec-delta.md` · skill `harness/docs/skills/update-spec/SKILL.md`.
|
|
@@ -20,7 +20,7 @@ When executing any skill (`/spec`, `/grill`, `/grill-bqa`, etc.):
|
|
|
20
20
|
3. **NO RAM CACHING:** All persistent changes **[MANDATORY]** immediately written via `{{FLOWGRID_WRITE_TOOL}}`. Never hold uncommitted state in chat/RAM. When a grill proposal is not yet confirmed → discuss directly in chat thread. **[STRICTLY FORBIDDEN]** to create temporary `*-proposal.md` files or overwrite product SSOT prior to explicit confirmation.
|
|
21
21
|
4. **ZERO BUSINESS HALLUCINATION:** Ground data strictly from (1) User prompt and (2) ArtifactGraph registry. **[STRICTLY FORBIDDEN]** to invent fields, validations, database structures, or flows. Missing information must remain empty or be tagged `#missing_info`. No unprompted guessing.
|
|
22
22
|
5. **GRILL HARD GATE:** ArtifactGraph re-check → micro-scope → provide structured recommendation (`(Recommended)`) → **STOP and prompt Member**. **[STRICTLY FORBIDDEN]** to write to SSOT before explicit user confirmation.
|
|
23
|
-
6. **DSL / COMMON:** Human lead decides common promotions. The agent only executes `/common
|
|
23
|
+
6. **DSL / COMMON:** Human lead decides common promotions. The agent only executes `/common` (Markdown patterns), `/docs-mark`, custom-base handoff, or confirmation post-grill. `/spec` consumes patterns + FE base via `flowgrid-ux-common.mdc`. **[STRICTLY FORBIDDEN]** `common/yaml`, `/common-spec`, `/gen-common`.
|
|
24
24
|
7. **ISOLATION:** Execute strictly within the invoked skill scope. **[STRICTLY FORBIDDEN]** to merge sibling features or output fake Markdown reports when YAML contracts are required.
|
|
25
25
|
|
|
26
26
|
**Path SSOT:** `surfaces/<surface>/CMP-*/<slug>/` (NO `modules/` segment).
|
|
@@ -6,7 +6,7 @@ alwaysApply: false
|
|
|
6
6
|
|
|
7
7
|
# Team Flow — Spec
|
|
8
8
|
|
|
9
|
-
Active commands: `/spec`, `/grill-bqa`, `/grill-dev`, `/grill-docs`, `/update-spec
|
|
9
|
+
Active commands: `/spec`, `/grill-bqa`, `/grill-dev`, `/grill-docs`, `/update-spec` — one per session.
|
|
10
10
|
|
|
11
11
|
> [!CRITICAL] MANDATORY AGENT INSTRUCTION
|
|
12
12
|
> You MUST read and strictly enforce all guidelines in the target skill's `SKILL.md` file before starting any step in this pipeline.
|
|
@@ -18,18 +18,17 @@ Active commands: `/spec`, `/grill-bqa`, `/grill-dev`, `/grill-docs`, `/update-sp
|
|
|
18
18
|
| `/grill-dev` | `.cursor/skills/grill-dev/SKILL.md` |
|
|
19
19
|
| `/grill-docs` | `.cursor/skills/grill-docs/SKILL.md` |
|
|
20
20
|
| `/update-spec` | `.cursor/skills/update-spec/SKILL.md` |
|
|
21
|
-
| `/update-spec-legacy` | `.cursor/skills/update-spec-legacy/SKILL.md` |
|
|
22
21
|
| Grill metadata rules | `.cursor/rules/team-flow-grill.mdc` |
|
|
23
22
|
|
|
24
23
|
Shared: resolve skill `extractBundle` → `.cursor/extracts/extract-registry.docs.json` (e.g. `bqa-grill`, `dev-grill`, `grill-docs`).
|
|
25
24
|
|
|
26
25
|
## Pipeline
|
|
27
26
|
|
|
28
|
-
1. **`/spec`** — `*.bundle.yaml` design
|
|
27
|
+
1. **`/spec`** — `*.bundle.yaml` only (`feature.bundle.yaml` template; not `design-spec.yaml`). Include `successMetrics` / `nonGoals` when known. Per-zone: DSL/registry → bundle; `audit spec` `gaps[]` + non-blocking `warnings[]`. BA deliverable: `ir/generated/spec.md` after split+render. No `gen` / `codegen` in first pass.
|
|
29
28
|
2. **`/grill-bqa`** — UI, acceptance, breadcrumb, delete rules.
|
|
30
29
|
3. **`/grill-dev`** — codegen-ready bundle + `tags`; emit bộ code FE dry-run handoff.
|
|
31
30
|
4. **`/grill-docs`** — optional reconcile when BQA↔Dev contradict.
|
|
32
|
-
5. **`/update-spec`**
|
|
31
|
+
5. **`/update-spec`** — controlled delta + `#update:*` (legacy trace → `/legacy /spec` hoặc delta legacy trong cùng skill; not full rewrite).
|
|
33
32
|
6. **`/prototype`** — FE-lane handoff only after bộ code dry-run passes.
|
|
34
33
|
|
|
35
34
|
- Render: `docs_render` / `flowgrid render` (pnpm fallback during transition)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://platform.local/schemas/flowgrid-docs/qa-item.schema.json",
|
|
4
|
+
"title": "FlowGrid QA inbox item",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema", "id", "status", "target", "updates"],
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"const": "flowgrid-qa-item/v1"
|
|
12
|
+
},
|
|
13
|
+
"id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"pattern": "^[A-Z0-9][A-Z0-9._-]*_\\d{4}$"
|
|
16
|
+
},
|
|
17
|
+
"screen": { "type": "string" },
|
|
18
|
+
"bundleId": { "type": "string" },
|
|
19
|
+
"status": { "type": "string", "enum": ["open", "closed"] },
|
|
20
|
+
"kind": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"enum": ["customer", "choice", "tech-debt", "integration", "coverage"]
|
|
23
|
+
},
|
|
24
|
+
"skill": { "type": "string" },
|
|
25
|
+
"tags": { "type": "array", "items": { "type": "string" } },
|
|
26
|
+
"target": {
|
|
27
|
+
"type": "object",
|
|
28
|
+
"required": ["path", "at"],
|
|
29
|
+
"additionalProperties": false,
|
|
30
|
+
"properties": {
|
|
31
|
+
"path": { "type": "string" },
|
|
32
|
+
"at": { "type": "string" }
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"options": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"required": ["label"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"label": { "type": "string" },
|
|
42
|
+
"recommended": { "type": "boolean" }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"updates": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"minItems": 1,
|
|
49
|
+
"items": { "$ref": "#/$defs/update" }
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"$defs": {
|
|
53
|
+
"update": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"required": ["at", "kind", "text"],
|
|
56
|
+
"additionalProperties": false,
|
|
57
|
+
"properties": {
|
|
58
|
+
"at": { "type": "string", "pattern": "^\\d{8} \\d{2}:\\d{2}$" },
|
|
59
|
+
"by": { "type": "string" },
|
|
60
|
+
"kind": { "type": "string", "enum": ["question", "answer", "review", "note"] },
|
|
61
|
+
"text": { "type": "string", "minLength": 1 }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -12,6 +12,8 @@ extractBundle: architecture-core
|
|
|
12
12
|
|
|
13
13
|
**Audit Interlock:** Run `flowgrid audit legacy <target-id>`. Consume JSON gap report to verify mapping or prompt member if index is missing.
|
|
14
14
|
|
|
15
|
+
**Handoff SSOT spec:** Sau adopt, member drill [spec-ssot-prep.md](../../../docs/workflows/spec-ssot-prep.md) — Phase 0 → `/legacy /spec` per `W-*` (không nhảy thẳng bundle không có ID trong inventory).
|
|
16
|
+
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
## Rule: Pre-Scan Mode Selection (AskQuestion Wizard)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: api
|
|
3
|
-
description: EXCLUSIVE /api — Backend Router ONLY. Immediately routes to /api-spec or /api-
|
|
3
|
+
description: EXCLUSIVE /api — Backend Router ONLY. Immediately routes to /api-spec, /api-update, or /grill-api-spec without generating gross files.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -18,14 +18,13 @@ disable-model-invocation: true
|
|
|
18
18
|
|
|
19
19
|
| Condition | Route to |
|
|
20
20
|
|---|---|
|
|
21
|
-
| No `01-backend-spec.yaml`
|
|
22
|
-
| No `01-backend-spec.yaml` + webhook/partner/no FE (`base: none`) | `/api-integration` |
|
|
21
|
+
| No `01-backend-spec.yaml` (portal-backed or BE-only / webhook / partner) | `/api-spec` |
|
|
23
22
|
| Portal specs changed / merge deferred child functions | `/api-update` |
|
|
24
23
|
| BE-only requirement (no FE contract change) | `/api-update --be-only` |
|
|
25
|
-
| Spec exists but not codegen-ready / `approval.status` not `approved` | `/grill-api-spec`
|
|
24
|
+
| Spec exists but not codegen-ready / `approval.status` not `approved` | `/grill-api-spec` |
|
|
26
25
|
| `approval.status: approved` + explicit implement request | bộ code BE `/api` (switch to BE repo skill — NOT this skill) |
|
|
27
26
|
|
|
28
|
-
- **[MANDATORY]** Locate `01-backend-spec.yaml` under: `…/api/<seq>/` (screen leaf), `…/common/yaml/<slug>/`, or
|
|
27
|
+
- **[MANDATORY]** Locate `01-backend-spec.yaml` under: `…/api/<seq>/` (screen leaf), `…/common/yaml/<slug>/`, or any surface leaf dedicated to external-channel APIs.
|
|
29
28
|
- **[STRICTLY FORBIDDEN]** Do NOT skip `/grill-api-spec` for new features, cross-portal, or legacy-derived contracts.
|
|
30
29
|
- PHPUnit coverage: NOT routed here — use `/unit-be` directly.
|
|
31
30
|
|
|
@@ -6,7 +6,7 @@ disable-model-invocation: true
|
|
|
6
6
|
|
|
7
7
|
> [!CRITICAL] MANDATORY PRE-FLIGHT
|
|
8
8
|
> **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
|
|
9
|
-
> **[MANDATORY]** Read
|
|
9
|
+
> **[MANDATORY]** Read `.flowgrid/templates/backend-api.yaml`, `.flowgrid/templates/tpl-api-contract.md`, and `.cursor/extracts/api-contract.md` BEFORE generating any YAML.
|
|
10
10
|
> If missing → STOP: *"Template missing. Run `flowgrid init`."*
|
|
11
11
|
> **[MANDATORY]** Read entire `ir/design.yaml` first (actions + nested items with `apiRefs`). If `ir/` is missing, read `*.bundle.yaml`.
|
|
12
12
|
|
|
@@ -22,9 +22,9 @@ Hashtag extracts: `#call-external` → `call-external.md`; `#cross-entity-servic
|
|
|
22
22
|
|
|
23
23
|
## Rule: Audit Interlock
|
|
24
24
|
|
|
25
|
-
- **[MANDATORY]**
|
|
25
|
+
- **[MANDATORY]** After drafting or updating `01-backend-spec.yaml`, run `flowgrid audit api <path-to-01-backend-spec.yaml>`.
|
|
26
26
|
- ✅ Consume JSON gap report to fix issues or trigger AskQuestion wizard (≥3 options).
|
|
27
|
-
- ❌ Do not
|
|
27
|
+
- ❌ Do not hand off without audit on the `01` file. Do **not** use `flowgrid check` on `01` (`check` is bundle IR only).
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
@@ -94,7 +94,7 @@ Hashtag extracts: `#call-external` → `call-external.md`; `#cross-entity-servic
|
|
|
94
94
|
api/01/
|
|
95
95
|
01-backend-spec.yaml ← VALID YAML (double-quote all colons)
|
|
96
96
|
02-openapi.yaml
|
|
97
|
-
03-mock
|
|
97
|
+
03-mock.yaml
|
|
98
98
|
```
|
|
99
99
|
- **[MANDATORY]** Common APIs → LCA `common/yaml/<component-slug>/`.
|
|
100
100
|
- **[MANDATORY]** One `01-backend-spec.yaml` = one module + one primary entity. Never dump every screen API into one file.
|
|
@@ -102,12 +102,24 @@ Hashtag extracts: `#call-external` → `call-external.md`; `#cross-entity-servic
|
|
|
102
102
|
|
|
103
103
|
---
|
|
104
104
|
|
|
105
|
+
## Rule: BE-only / external channel (no portal FE)
|
|
106
|
+
|
|
107
|
+
Use the **same** skill (`/api-spec`) and same trio layout when there is no portal screen (`feature.source.base: none`, webhooks, partner/public APIs).
|
|
108
|
+
|
|
109
|
+
- **[MANDATORY]** Place contract trio under a normal surface leaf, e.g. `surfaces/<external-surface>/<provider>/<slug>/api/<seq>/` (dedicated surface for partner/webhook channel — not a separate skill).
|
|
110
|
+
- **[MANDATORY]** Set `feature.source.kind`, `base: none`, `integrationRefs[]` (or equivalent refs), empty `portalRefs`, `contexts.portalLayout: none`, and `contexts.auth` (API key / HMAC / OAuth).
|
|
111
|
+
- **[MANDATORY]** Domain tags: `#webhook-inbound`, `#webhook-outbound`, `#partner-api`, `#public-api`, `#call-external`, `#err:*` (include `#err:signature-invalid`, `#err:rate-limit`, `#err:unauthorized` when relevant).
|
|
112
|
+
- **[MANDATORY]** Scan sibling `…/api/<seq>/` and surface `common/yaml/` before creating new endpoints; reuse via `#reuse-api` when applicable.
|
|
113
|
+
- **[STRICTLY FORBIDDEN]** Do not invent HMAC secrets or partner validation logic; use AskQuestion or `qa/` tech debt.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
105
117
|
## Rule: YAML Syntax Safety
|
|
106
118
|
|
|
107
119
|
- **[MANDATORY]** All strings containing `:` must be double-quoted.
|
|
108
120
|
- ✅ `summary: "Create: New Employee Registration"`
|
|
109
121
|
- ❌ `summary: Create: New Employee Registration`
|
|
110
|
-
- **[MANDATORY]** Run `flowgrid check --spec …/api/01/01-backend-spec.yaml` before handoff.
|
|
122
|
+
- **[MANDATORY]** Run `flowgrid api:check --spec …/api/01/01-backend-spec.yaml` before handoff.
|
|
111
123
|
- **[MANDATORY]** Domain tags only (`#call-external`, `#cross-entity-service`, `#err:*`). No `#gen:*` or `codegen` block from this skill.
|
|
112
124
|
|
|
113
125
|
---
|
|
@@ -133,4 +145,5 @@ Hashtag extracts: `#call-external` → `call-external.md`; `#cross-entity-servic
|
|
|
133
145
|
- [ ] All new endpoints use explicit action URI suffixes.
|
|
134
146
|
- [ ] `#err:*` tags applied per endpoint nature (not-found + IDOR on `{id}`, validation on POST/PUT, etc.).
|
|
135
147
|
- [ ] Strings with `:` in YAML are double-quoted. No `.md` written directly.
|
|
136
|
-
- [ ] `flowgrid check` passed
|
|
148
|
+
- [ ] `flowgrid api:check --spec …/01-backend-spec.yaml` passed.
|
|
149
|
+
- [ ] `flowgrid render` (or hub render script) so `ir/generated/api.md` is current for reviewers.
|
|
@@ -40,8 +40,8 @@ Shared extracts: `api-spec-sync.md`, `spec-evolution.md`, `entity-relationship.m
|
|
|
40
40
|
- `#reuse-api` actions → do NOT create a new `01`.
|
|
41
41
|
- Do NOT treat projected `design.api` as BE SSOT.
|
|
42
42
|
2. **[MANDATORY]** Diff requirements, endpoints, acceptance vs `01-backend-spec.yaml`.
|
|
43
|
-
3. **[MANDATORY]** Patch `01-backend-spec.yaml` (+ `03-mock
|
|
44
|
-
4. **[MANDATORY]** Run: `flowgrid check --spec …/01-backend-spec.yaml` → `flowgrid openapi_gen --spec …/01-backend-spec.yaml` (writes sibling `02`).
|
|
43
|
+
3. **[MANDATORY]** Patch `01-backend-spec.yaml` (+ `03-mock.yaml` if samples change).
|
|
44
|
+
4. **[MANDATORY]** Run: `flowgrid api:check --spec …/01-backend-spec.yaml` → `flowgrid openapi_gen --spec …/01-backend-spec.yaml` (writes sibling `02`).
|
|
45
45
|
5. **[MANDATORY]** Bump `feature.version` + add `changeLog` entry.
|
|
46
46
|
6. **[STRICTLY FORBIDDEN]** Never hand-edit `02-openapi.yaml` as SSOT. Never write `.md` directly.
|
|
47
47
|
|
|
@@ -66,7 +66,7 @@ Shared extracts: `api-spec-sync.md`, `spec-evolution.md`, `entity-relationship.m
|
|
|
66
66
|
|
|
67
67
|
## Done Criteria
|
|
68
68
|
|
|
69
|
-
- Portal delta in `01`; or if deferred: `pendingTechDebt` with `id: QA-<feature.id>-NNNN` + `qa
|
|
69
|
+
- Portal delta in `01`; or if deferred: `pendingTechDebt` with `id: QA-<feature.id>-NNNN` + `qa/` file.
|
|
70
70
|
- `source.portalRefs` current.
|
|
71
71
|
- `changeLog` + version bumped.
|
|
72
72
|
- Handoff: `/grill-api-spec {slug}` (re-run gates + codegen tags).
|
|
@@ -77,6 +77,6 @@ Shared extracts: `api-spec-sync.md`, `spec-evolution.md`, `entity-relationship.m
|
|
|
77
77
|
|
|
78
78
|
- [ ] Target is `…/api/<seq>/01-backend-spec.yaml` (or `common/yaml/<slug>/`), not a `01` on the FE leaf.
|
|
79
79
|
- [ ] `01` patched; `02` regenerated via `openapi:gen` (not hand-edited).
|
|
80
|
-
- [ ] Gates passed: `flowgrid check` + `flowgrid openapi_gen
|
|
80
|
+
- [ ] Gates passed: `flowgrid api:check --spec …/01` + `flowgrid openapi_gen` + `flowgrid render` (refresh `ir/generated/api.md`).
|
|
81
81
|
- [ ] `changeLog` + `feature.version` bumped.
|
|
82
82
|
- [ ] No `.md` written directly. No `openQuestions` in YAML.
|
|
@@ -22,7 +22,7 @@ extractBundle: architecture-core
|
|
|
22
22
|
| Product overview / operational areas | `/overview` |
|
|
23
23
|
| Business/interaction surfaces | `/surfaces` |
|
|
24
24
|
| Common UX/UI rules (Markdown) | `/common` |
|
|
25
|
-
|
|
|
25
|
+
| Shared UI templates / registry on FE base | [custom-base](../../../docs/workflows/custom-base.md) · `/build-template-code` |
|
|
26
26
|
| Module / CMP box | `/module` |
|
|
27
27
|
| Screen / API detail | `/spec` |
|
|
28
28
|
| Where it runs / Infrastructure | `/deployment` |
|
|
@@ -12,6 +12,8 @@ extractBundle: architecture-core
|
|
|
12
12
|
|
|
13
13
|
**Mindset:** Model the process by **business actions on surfaces**, not by repository or service topology.
|
|
14
14
|
|
|
15
|
+
**Template:** `architecture/03-business-process/FLOW-template.md` (or surfaces `common/processes/FLOW-*.md`) — include **Success metrics** and **Non-goals** in §1 when information exists.
|
|
16
|
+
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
## Rule: Audit Interlock
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: common
|
|
3
|
-
description: EXCLUSIVE /common —
|
|
3
|
+
description: EXCLUSIVE /common — Markdown rules under common/patterns/ (and cross-flow context). DO NOT author common/yaml or gen-common (deprecated).
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -35,7 +35,7 @@ Markdown rules for a **named scope** (cluster / module / surface / global). Not
|
|
|
35
35
|
- **[MANDATORY]** Use clear, non-technical language geared towards Business / QA / Dev alignment.
|
|
36
36
|
- **[MANDATORY]** Define rules based on surface type when applicable (e.g. Kiosk UI rules differ from Web Portal rules).
|
|
37
37
|
- **[STRICTLY FORBIDDEN]** Do NOT output fake i18n tables or framework prose. Focus on actual rules (e.g. "Confirm dialog must always block background").
|
|
38
|
-
- **[STRICTLY FORBIDDEN]** Do NOT generate
|
|
38
|
+
- **[STRICTLY FORBIDDEN]** Do NOT generate `common/yaml`, CMN bundles, or invoke `/gen-common` / `/common-spec` (deprecated). UI patterns are enforced via FE base + `flowgrid-ux-common.mdc`; new templates → [custom-base](../../../docs/workflows/custom-base.md).
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|