@relipa/ai-flow-kit 0.1.4-beta.0 → 0.1.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +185 -136
- package/bin/aiflow.js +0 -0
- package/bin/ak.js +0 -0
- package/custom/harness/playwright/.env.example +0 -0
- package/custom/harness/playwright/playwright.config.ts +0 -0
- package/custom/harness/playwright/tests/e2e/auth.setup.ts +0 -0
- package/custom/harness/playwright/tests/e2e/fixtures/test.ts +0 -0
- package/custom/harness/playwright/tests/e2e/pages/BasePage.ts +0 -0
- package/custom/harness/playwright/tests/e2e/support/auth.ts +0 -0
- package/custom/mcp-presets/README.md +0 -0
- package/custom/mcp-presets/backlog.json +0 -0
- package/custom/mcp-presets/figma-desktop.json +0 -0
- package/custom/mcp-presets/figma.json +0 -0
- package/custom/mcp-presets/gitnexus.json +0 -0
- package/custom/mcp-presets/google-sheets.json +0 -0
- package/custom/mcp-presets/jira.json +0 -0
- package/custom/mcp-presets/playwright.json +0 -0
- package/custom/prompts/bug-fix.md +0 -0
- package/custom/prompts/feature.md +0 -0
- package/custom/prompts/investigation.md +0 -0
- package/custom/rules/code-style.md +0 -0
- package/custom/rules/java/code-style.md +0 -0
- package/custom/rules/java/naming.md +0 -0
- package/custom/rules/java/review-checklist.md +0 -0
- package/custom/rules/java/spring-boot-examples.md +0 -0
- package/custom/rules/javascript/code-style.md +0 -0
- package/custom/rules/javascript/naming.md +0 -0
- package/custom/rules/ml-conventions.md +0 -0
- package/custom/rules/ml-review-checklist.md +0 -0
- package/custom/rules/naming.md +0 -0
- package/custom/rules/php/code-style.md +0 -0
- package/custom/rules/php/naming.md +0 -0
- package/custom/rules/project-conventions.md +0 -0
- package/custom/rules/review-checklist.md +0 -0
- package/custom/rules/test-patterns.md +0 -0
- package/custom/skills/automation-testing/SKILL.md +0 -0
- package/custom/skills/automation-testing/templates/BasePage.ts +0 -0
- package/custom/skills/automation-testing/templates/PageObject.example.ts +0 -0
- package/custom/skills/automation-testing/templates/playwright.config.ts +0 -0
- package/custom/skills/automation-testing/templates/spec.example.ts +0 -0
- package/custom/skills/ba-skills/{skill-ba-xay-dung-business-rules-v1.md → skill-ba-build-business-rules-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-template-phan-tich-ban-dau-v1.md → skill-ba-initial-analysis-template-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-phan-tich-ban-dau-v1.md → skill-ba-initial-analysis-v1.md} +2 -2
- package/custom/skills/ba-skills/{skill-ba-ve-luong-mermaid-v1.md → skill-ba-mermaid-flowchart-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-qa-template-v1.md → skill-ba-qna-template-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-qa-v1.md → skill-ba-qna-v1.md} +2 -2
- package/custom/skills/ba-skills/{skill-ba-template-uc-v1.md → skill-ba-uc-template-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-prototype-v1.md → skill-ba-ui-prototype-v1.md} +2 -2
- package/custom/skills/ba-skills/{skill-ba-viet-spec-uc-v1.md → skill-ba-write-uc-spec-v1.md} +4 -4
- package/custom/skills/coverage-check/SKILL.md +0 -0
- package/custom/skills/deploy-model/SKILL.md +0 -0
- package/custom/skills/design-experiment/SKILL.md +0 -0
- package/custom/skills/evaluate-model/SKILL.md +0 -0
- package/custom/skills/evidence-aggregation/SKILL.md +0 -0
- package/custom/skills/execute-flow/SKILL.md +5 -34
- package/custom/skills/execute-flow/templates/playwright.config.ts +0 -0
- package/custom/skills/explore-data/SKILL.md +0 -0
- package/custom/skills/figma-to-component/SKILL.md +0 -0
- package/custom/skills/frame-ml-problem/SKILL.md +0 -0
- package/custom/skills/gate-review/SKILL.md +29 -105
- package/custom/skills/generate-spec/SKILL.md +0 -0
- package/custom/skills/generate-test-report/SKILL.md +0 -0
- package/custom/skills/generate-test-report/templates/test-report.md +0 -0
- package/custom/skills/generate-testcase/SKILL.md +0 -8
- package/custom/skills/generate-testcase/templates/testcase.md +50 -59
- package/custom/skills/impact-analysis/SKILL.md +0 -0
- package/custom/skills/improve-algorithm/SKILL.md +0 -0
- package/custom/skills/investigate-bug/SKILL.md +0 -0
- package/custom/skills/log-bug/SKILL.md +0 -0
- package/custom/skills/pr-impact-analysis/SKILL.md +0 -0
- package/custom/skills/report-customer/SKILL.md +0 -0
- package/custom/skills/retest-orchestration/SKILL.md +0 -0
- package/custom/skills/review-plan/SKILL.md +0 -0
- package/custom/skills/script-sync/SKILL.md +0 -0
- package/custom/skills/test-analysis/SKILL.md +0 -4
- package/custom/skills/test-skills/categories/00-core/00.01.requirement-analysis.md +0 -0
- package/custom/skills/test-skills/categories/00-core/00.02.risk-analysis.md +0 -0
- package/custom/skills/test-skills/categories/00-core/00.03.test-scenario-builder.md +0 -0
- package/custom/skills/test-skills/categories/00-core/00.04.testcase-review.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.01.boundary-value-analysis.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.02.equivalence.partitioning.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.03.decision-table.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.04.state.transition.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.05.pairwise.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.06.error-guessing.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.01.UI-layout.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.02.form-validation.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.03.navigation.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.04.localization.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.05.accessibility.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.01.CRUD-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.02.workflow-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.03.permission-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.04.dependency-validation.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.05.notification-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.06.calculation.testing.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.01.database-testing.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.02.import-export-testing.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.03.data-mapping.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.04.duplicate-handling.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.05.migration.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.01.API-testing.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.02.third-party-integration.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.03.batch-processing.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.04.file-upload-download.md +0 -0
- package/custom/skills/test-skills/categories/08-domain-skills/CMS.md +0 -0
- package/custom/skills/test-skills/categories/08-domain-skills/Ecommerce.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.01.coverage-review.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.02.knowledge-learning.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.03.repository-update.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.04.change-history.md +0 -0
- package/custom/skills/test-skills/rules/directory-and-naming-convention.md +158 -0
- package/custom/skills/test-skills/rules/{QA_Writing_Standards.md → qa-writing-standards.md} +0 -0
- package/custom/skills/test-skills/template/{template_testcase.md → testcase-template.md} +50 -59
- package/custom/skills/train-model/SKILL.md +0 -0
- package/custom/templates/laravel.md +0 -0
- package/custom/templates/nestjs.md +0 -0
- package/custom/templates/nextjs.md +0 -0
- package/custom/templates/nodejs-express.md +0 -0
- package/custom/templates/php-plain.md +0 -0
- package/custom/templates/php.md +0 -0
- package/custom/templates/python-django.md +0 -0
- package/custom/templates/python-fastapi.md +0 -0
- package/custom/templates/python-ml.md +0 -0
- package/custom/templates/python.md +0 -0
- package/custom/templates/reactjs.md +0 -0
- package/custom/templates/shared/coding-workflow.md +15 -0
- package/custom/templates/shared/create-spec-workflow.md +80 -95
- package/custom/templates/shared/create-testcase-workflow.md +65 -75
- package/custom/templates/shared/gate-workflow.md +3 -3
- package/custom/templates/shared/ml-gate-workflow.md +0 -0
- package/custom/templates/spring-boot.md +0 -0
- package/custom/templates/tools/claude.md +0 -0
- package/custom/templates/tools/copilot.md +0 -0
- package/custom/templates/tools/cursor.md +0 -0
- package/custom/templates/tools/gemini.md +0 -0
- package/custom/templates/tools/generic.md +0 -0
- package/custom/templates/vue-nuxt.md +0 -0
- package/docs/common/AIFLOW.md +0 -0
- package/docs/common/CHANGELOG.md +75 -9
- package/docs/common/QUICK_START.md +0 -0
- package/docs/common/ai-integration.md +0 -0
- package/docs/common/cli-reference.md +0 -0
- package/docs/common/configuration.md +0 -0
- package/docs/common/getting-started.md +0 -0
- package/docs/common/troubleshooting.md +0 -0
- package/docs/common/workflows/bug-fix.md +0 -0
- package/docs/common/workflows/feature.md +0 -0
- package/docs/common/workflows/figma.md +0 -0
- package/docs/common/workflows/impact-analysis.md +0 -0
- package/docs/common/workflows/investigation.md +0 -0
- package/docs/common/workflows/refactor.md +0 -0
- package/docs/project/ARCHITECTURE.md +0 -0
- package/index.js +0 -0
- package/package.json +1 -1
- package/scripts/checkpoint.js +0 -0
- package/scripts/config.js +0 -0
- package/scripts/context.js +0 -0
- package/scripts/create-score-excel.js +41 -47
- package/scripts/detect.js +0 -0
- package/scripts/doctor.js +0 -0
- package/scripts/gitnexus-worker.js +0 -0
- package/scripts/guide.js +0 -0
- package/scripts/hooks/block-git-write.js +0 -0
- package/scripts/hooks/session-start.js +1 -0
- package/scripts/hooks/session-stop.js +0 -0
- package/scripts/init.js +5 -0
- package/scripts/memory.js +0 -0
- package/scripts/prompt.js +0 -0
- package/scripts/remove.js +0 -0
- package/scripts/review.js +83 -46
- package/scripts/scaffold-playwright.js +0 -0
- package/scripts/task.js +0 -0
- package/scripts/telemetry/cli.js +0 -0
- package/scripts/telemetry/config.js +0 -0
- package/scripts/telemetry/crypto.js +0 -0
- package/scripts/telemetry/flush.js +0 -0
- package/scripts/telemetry/record.js +0 -0
- package/scripts/update.js +0 -0
- package/scripts/use.js +3 -2
- package/scripts/validate.js +0 -0
- package/upstream/.claude-plugin/marketplace.json +0 -0
- package/upstream/.claude-plugin/plugin.json +0 -0
- package/upstream/.codex/INSTALL.md +0 -0
- package/upstream/.cursor-plugin/plugin.json +0 -0
- package/upstream/.gitattributes +0 -0
- package/upstream/.github/FUNDING.yml +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/config.yml +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/platform_support.md +0 -0
- package/upstream/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- package/upstream/.opencode/INSTALL.md +0 -0
- package/upstream/.opencode/plugins/superpowers.js +0 -0
- package/upstream/.version-bump.json +0 -0
- package/upstream/AGENTS.md +0 -0
- package/upstream/CHANGELOG.md +0 -0
- package/upstream/CLAUDE.md +0 -0
- package/upstream/CODE_OF_CONDUCT.md +0 -0
- package/upstream/GEMINI.md +0 -0
- package/upstream/LICENSE +0 -0
- package/upstream/README.md +0 -0
- package/upstream/RELEASE-NOTES.md +0 -0
- package/upstream/agents/code-reviewer.md +0 -0
- package/upstream/commands/brainstorm.md +0 -0
- package/upstream/commands/execute-plan.md +0 -0
- package/upstream/commands/write-plan.md +0 -0
- package/upstream/docs/README.codex.md +0 -0
- package/upstream/docs/README.opencode.md +0 -0
- package/upstream/docs/plans/2025-11-22-opencode-support-design.md +0 -0
- package/upstream/docs/plans/2025-11-22-opencode-support-implementation.md +0 -0
- package/upstream/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md +0 -0
- package/upstream/docs/plans/2026-01-17-visual-brainstorming.md +0 -0
- package/upstream/docs/superpowers/plans/2026-01-22-document-review-system.md +0 -0
- package/upstream/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +0 -0
- package/upstream/docs/superpowers/plans/2026-03-11-zero-dep-brainstorm-server.md +0 -0
- package/upstream/docs/superpowers/plans/2026-03-23-codex-app-compatibility.md +0 -0
- package/upstream/docs/superpowers/specs/2026-01-22-document-review-system-design.md +0 -0
- package/upstream/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +0 -0
- package/upstream/docs/superpowers/specs/2026-03-11-zero-dep-brainstorm-server-design.md +0 -0
- package/upstream/docs/superpowers/specs/2026-03-23-codex-app-compatibility-design.md +0 -0
- package/upstream/docs/testing.md +0 -0
- package/upstream/docs/windows/polyglot-hooks.md +0 -0
- package/upstream/gemini-extension.json +0 -0
- package/upstream/hooks/hooks-cursor.json +0 -0
- package/upstream/hooks/hooks.json +0 -0
- package/upstream/hooks/run-hook.cmd +0 -0
- package/upstream/hooks/session-start +0 -0
- package/upstream/package.json +0 -0
- package/upstream/scripts/bump-version.sh +0 -0
- package/upstream/skills/brainstorming/SKILL.md +0 -0
- package/upstream/skills/brainstorming/scripts/frame-template.html +0 -0
- package/upstream/skills/brainstorming/scripts/helper.js +0 -0
- package/upstream/skills/brainstorming/scripts/server.cjs +0 -0
- package/upstream/skills/brainstorming/scripts/start-server.sh +0 -0
- package/upstream/skills/brainstorming/scripts/stop-server.sh +0 -0
- package/upstream/skills/brainstorming/spec-document-reviewer-prompt.md +0 -0
- package/upstream/skills/brainstorming/visual-companion.md +0 -0
- package/upstream/skills/dispatching-parallel-agents/SKILL.md +0 -0
- package/upstream/skills/executing-plans/SKILL.md +0 -0
- package/upstream/skills/finishing-a-development-branch/SKILL.md +0 -0
- package/upstream/skills/receiving-code-review/SKILL.md +0 -0
- package/upstream/skills/requesting-code-review/SKILL.md +0 -0
- package/upstream/skills/requesting-code-review/code-reviewer.md +0 -0
- package/upstream/skills/subagent-driven-development/SKILL.md +0 -0
- package/upstream/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -0
- package/upstream/skills/subagent-driven-development/implementer-prompt.md +0 -0
- package/upstream/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -0
- package/upstream/skills/systematic-debugging/CREATION-LOG.md +0 -0
- package/upstream/skills/systematic-debugging/SKILL.md +0 -0
- package/upstream/skills/systematic-debugging/condition-based-waiting-example.ts +0 -0
- package/upstream/skills/systematic-debugging/condition-based-waiting.md +0 -0
- package/upstream/skills/systematic-debugging/defense-in-depth.md +0 -0
- package/upstream/skills/systematic-debugging/find-polluter.sh +0 -0
- package/upstream/skills/systematic-debugging/root-cause-tracing.md +0 -0
- package/upstream/skills/systematic-debugging/test-academic.md +0 -0
- package/upstream/skills/systematic-debugging/test-pressure-1.md +0 -0
- package/upstream/skills/systematic-debugging/test-pressure-2.md +0 -0
- package/upstream/skills/systematic-debugging/test-pressure-3.md +0 -0
- package/upstream/skills/tdd-lean/SKILL.md +0 -0
- package/upstream/skills/test-driven-development/SKILL.md +0 -0
- package/upstream/skills/test-driven-development/testing-anti-patterns.md +0 -0
- package/upstream/skills/using-git-worktrees/SKILL.md +0 -0
- package/upstream/skills/using-superpowers/SKILL.md +0 -0
- package/upstream/skills/using-superpowers/references/codex-tools.md +0 -0
- package/upstream/skills/using-superpowers/references/copilot-tools.md +0 -0
- package/upstream/skills/using-superpowers/references/gemini-tools.md +0 -0
- package/upstream/skills/verification-before-completion/SKILL.md +0 -0
- package/upstream/skills/writing-plans/SKILL.md +0 -0
- package/upstream/skills/writing-plans/plan-document-reviewer-prompt.md +0 -0
- package/upstream/skills/writing-skills/SKILL.md +0 -0
- package/upstream/skills/writing-skills/anthropic-best-practices.md +0 -0
- package/upstream/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -0
- package/upstream/skills/writing-skills/graphviz-conventions.dot +0 -0
- package/upstream/skills/writing-skills/persuasion-principles.md +0 -0
- package/upstream/skills/writing-skills/render-graphs.js +0 -0
- package/upstream/skills/writing-skills/testing-skills-with-subagents.md +0 -0
- package/upstream/tests/brainstorm-server/package-lock.json +0 -0
- package/upstream/tests/brainstorm-server/package.json +0 -0
- package/upstream/tests/brainstorm-server/server.test.js +0 -0
- package/upstream/tests/brainstorm-server/windows-lifecycle.test.sh +0 -0
- package/upstream/tests/brainstorm-server/ws-protocol.test.js +0 -0
- package/upstream/tests/claude-code/README.md +0 -0
- package/upstream/tests/claude-code/analyze-token-usage.py +0 -0
- package/upstream/tests/claude-code/run-skill-tests.sh +0 -0
- package/upstream/tests/claude-code/test-document-review-system.sh +0 -0
- package/upstream/tests/claude-code/test-helpers.sh +0 -0
- package/upstream/tests/claude-code/test-subagent-driven-development-integration.sh +0 -0
- package/upstream/tests/claude-code/test-subagent-driven-development.sh +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/action-oriented.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/after-planning-flow.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/claude-suggested-it.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/i-know-what-sdd-means.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/mid-conversation-execute-plan.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/please-use-brainstorming.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/skip-formalities.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/subagent-driven-development-please.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/use-systematic-debugging.txt +0 -0
- package/upstream/tests/explicit-skill-requests/run-all.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-claude-describes-sdd.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-extended-multiturn-test.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-haiku-test.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-multiturn-test.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-test.sh +0 -0
- package/upstream/tests/opencode/run-tests.sh +0 -0
- package/upstream/tests/opencode/setup.sh +0 -0
- package/upstream/tests/opencode/test-plugin-loading.sh +0 -0
- package/upstream/tests/opencode/test-priority.sh +0 -0
- package/upstream/tests/opencode/test-tools.sh +0 -0
- package/upstream/tests/skill-triggering/prompts/dispatching-parallel-agents.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/executing-plans.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/requesting-code-review.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/systematic-debugging.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/test-driven-development.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/writing-plans.txt +0 -0
- package/upstream/tests/skill-triggering/run-all.sh +0 -0
- package/upstream/tests/skill-triggering/run-test.sh +0 -0
- package/upstream/tests/subagent-driven-dev/go-fractals/design.md +0 -0
- package/upstream/tests/subagent-driven-dev/go-fractals/plan.md +0 -0
- package/upstream/tests/subagent-driven-dev/go-fractals/scaffold.sh +0 -0
- package/upstream/tests/subagent-driven-dev/run-test.sh +0 -0
- package/upstream/tests/subagent-driven-dev/svelte-todo/design.md +0 -0
- package/upstream/tests/subagent-driven-dev/svelte-todo/plan.md +0 -0
- package/upstream/tests/subagent-driven-dev/svelte-todo/scaffold.sh +0 -0
- package/custom/skills/test-skills/rules/Directory_and_Naming_Convention.md +0 -257
|
@@ -18,75 +18,66 @@ Tài liệu này cung cấp **Template Test Case** chuẩn chỉnh và hướng
|
|
|
18
18
|
| **Người kiểm duyệt (Reviewer)** | [Ví dụ: Nguyễn Văn A] |
|
|
19
19
|
| **Ngày kiểm duyệt (Review Date)** | [Ví dụ: 2026-06-16] |
|
|
20
20
|
|
|
21
|
-
## 2.
|
|
21
|
+
## 2. Danh sách Test Cases Chi Tiết
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|:---|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
25
|
-
| Round 1 | 0 | 0 | 0 | 0 | 0 | 0% |
|
|
26
|
-
| Round 2 | 0 | 0 | 0 | 0 | 0 | 0% |
|
|
23
|
+
### 2.1. Kiểm thử truy cập & Phân quyền (Access & Authorization)
|
|
27
24
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
35
|
-
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
36
|
-
| [ID_001] | Truy cập trực tiếp qua URL khi chưa đăng nhập | High | Người dùng chưa đăng nhập hệ thống | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống không cho phép truy cập.<br>Tự động chuyển hướng về trang Đăng nhập (Login). | | | | | | | | |
|
|
37
|
-
| [ID_002] | Truy cập trực tiếp qua URL khi đã đăng nhập | Medium | Người dùng đã đăng nhập hệ thống thành công | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống cho phép truy cập.<br>Hiển thị đúng giao diện màn hình. | | | | | | | | |
|
|
38
|
-
| [ID_003] | Truy cập qua button/menu điều hướng | Low | Người dùng đang ở màn hình danh sách | 1. Click vào nút "Thêm mới" hoặc menu tương ứng. | - | Hệ thống mở màn hình đăng ký/thực hiện tương ứng thành công. | | | | | | | | |
|
|
25
|
+
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
26
|
+
|---|---|---|---|---|---|---|---|---|
|
|
27
|
+
| [ID_001] | Truy cập trực tiếp qua URL khi chưa đăng nhập | High | Người dùng chưa đăng nhập hệ thống | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống không cho phép truy cập.<br>Tự động chuyển hướng về trang Đăng nhập (Login). | | |
|
|
28
|
+
| [ID_002] | Truy cập trực tiếp qua URL khi đã đăng nhập | Medium | Người dùng đã đăng nhập hệ thống thành công | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống cho phép truy cập.<br>Hiển thị đúng giao diện màn hình. | | |
|
|
29
|
+
| [ID_003] | Truy cập qua button/menu điều hướng | Low | Người dùng đang ở màn hình danh sách | 1. Click vào nút "Thêm mới" hoặc menu tương ứng. | - | Hệ thống mở màn hình đăng ký/thực hiện tương ứng thành công. | | |
|
|
39
30
|
|
|
40
|
-
###
|
|
31
|
+
### 2.2. Kiểm thử Giao diện Người dùng (UI/UX)
|
|
41
32
|
|
|
42
|
-
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
43
|
-
|
|
44
|
-
| [ID_004] | Kiểm tra hiển thị giao diện tổng quan | Low | Màn hình hiển thị bình thường | 1. Quan sát giao diện màn hình.<br>2. Kiểm tra layout, màu sắc, font chữ, khoảng cách giữa các trường. | - | 1. Layout cân đối, font chữ và cỡ chữ đồng nhất.<br>2. Các trường bắt buộc nhập có dấu sao đỏ (*).<br>3. Không có lỗi chính tả, lỗi dịch thuật tiếng Nhật/Anh/Việt.<br>4. Định dạng placeholder hiển thị chính xác theo thiết kế. | | |
|
|
33
|
+
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
34
|
+
|---|---|---|---|---|---|---|---|---|
|
|
35
|
+
| [ID_004] | Kiểm tra hiển thị giao diện tổng quan | Low | Màn hình hiển thị bình thường | 1. Quan sát giao diện màn hình.<br>2. Kiểm tra layout, màu sắc, font chữ, khoảng cách giữa các trường. | - | 1. Layout cân đối, font chữ và cỡ chữ đồng nhất.<br>2. Các trường bắt buộc nhập có dấu sao đỏ (*).<br>3. Không có lỗi chính tả, lỗi dịch thuật tiếng Nhật/Anh/Việt.<br>4. Định dạng placeholder hiển thị chính xác theo thiết kế. | | |
|
|
45
36
|
|
|
46
|
-
###
|
|
37
|
+
### 2.3. Kiểm thử Validation các trường nhập liệu (Input Validation)
|
|
47
38
|
*(Tạo riêng từng bảng hoặc nhóm theo từng Field để dễ theo dõi)*
|
|
48
39
|
|
|
49
40
|
#### * Đối với Trường nhập liệu Text (Ví dụ: 【品番】/【品名】...)
|
|
50
|
-
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
51
|
-
|
|
52
|
-
| [ID_005] | Kiểm tra giá trị mặc định | Low | Đã truy cập màn hình | 1. Quan sát trường [Tên Trường]. | - | Giá trị mặc định là trống (blank).<br>Hiển thị đúng Placeholder thiết kế. | | |
|
|
53
|
-
| [ID_006] | Kiểm tra trường bắt buộc nhập để trống | High | Đã truy cập màn hình | 1. Để trống trường [Tên Trường].<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | Empty | 1. Hiển thị thông báo lỗi trên đầu trang hoặc dưới field: "Hãy nhập [Tên Trường]" (tiếng Nhật/Anh tương ứng).<br>2. Field bị highlight viền đỏ. | | |
|
|
54
|
-
| [ID_007] | Kiểm tra nhập ký tự khoảng trắng (Spaces) | Medium | Đã truy cập màn hình | 1. Nhập toàn khoảng trắng vào trường.<br>2. Bấm nút thực hiện (Đăng ký/Lưu) hoặc focus out. | `" "` | Hệ thống xem như để trống.<br>Báo lỗi bắt buộc nhập (nếu là trường Required) hoặc tự động trim khoảng trắng. | | |
|
|
55
|
-
| [ID_008] | Kiểm tra nhập khoảng trắng ở đầu/cuối chuỗi | Low | Đã truy cập màn hình | 1. Nhập chuỗi có khoảng trắng ở đầu/cuối.<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | `" data_test "` | Hệ thống tự động cắt bỏ (trim) khoảng trắng ở đầu và cuối chuỗi trước khi lưu vào DB. | | |
|
|
56
|
-
| [ID_009] | Kiểm tra nhập độ dài tối thiểu/tối đa (Boundary Value) | Medium | Đã truy cập màn hình, biết Maxlength = N | 1. Nhập chuỗi có độ dài N - 1 ký tự.<br>2. Nhập chuỗi có độ dài N ký tự.<br>3. Nhập chuỗi có độ dài > N ký tự. | Chuỗi test tương ứng | - Với độ dài <= N: Cho phép nhập và lưu bình thường.<br>- Với độ dài > N: Hệ thống chặn trực tiếp trên UI (không cho gõ tiếp) hoặc báo lỗi hợp lệ. | | |
|
|
57
|
-
| [ID_010] | Kiểm tra nhập ký tự đặc biệt / Tiếng Nhật Halfwidth & Fullwidth | Medium | Đã truy cập màn hình | 1. Nhập các ký tự đặc biệt (!@#$).<br>2. Nhập ký tự Halfwidth (カタカナ, 123).<br>3. Nhập ký tự Fullwidth (カタカナ, 123). | Dữ liệu kiểm thử | Hệ thống lưu trữ đúng định dạng ký tự đã nhập (hoặc báo lỗi chuẩn nếu có quy định hạn chế định dạng). | | |
|
|
58
|
-
| [ID_011] | Kiểm tra thao tác Copy/Paste | Low | Đã truy cập màn hình | 1. Copy một chuỗi hợp lệ.<br>2. Paste vào trường thông tin.<br>3. Bấm nút thực hiện. | - | Cho phép paste dữ liệu vào field thành công và xử lý lưu bình thường. | | |
|
|
41
|
+
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
42
|
+
|---|---|---|---|---|---|---|---|---|
|
|
43
|
+
| [ID_005] | Kiểm tra giá trị mặc định | Low | Đã truy cập màn hình | 1. Quan sát trường [Tên Trường]. | - | Giá trị mặc định là trống (blank).<br>Hiển thị đúng Placeholder thiết kế. | | |
|
|
44
|
+
| [ID_006] | Kiểm tra trường bắt buộc nhập để trống | High | Đã truy cập màn hình | 1. Để trống trường [Tên Trường].<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | Empty | 1. Hiển thị thông báo lỗi trên đầu trang hoặc dưới field: "Hãy nhập [Tên Trường]" (tiếng Nhật/Anh tương ứng).<br>2. Field bị highlight viền đỏ. | | |
|
|
45
|
+
| [ID_007] | Kiểm tra nhập ký tự khoảng trắng (Spaces) | Medium | Đã truy cập màn hình | 1. Nhập toàn khoảng trắng vào trường.<br>2. Bấm nút thực hiện (Đăng ký/Lưu) hoặc focus out. | `" "` | Hệ thống xem như để trống.<br>Báo lỗi bắt buộc nhập (nếu là trường Required) hoặc tự động trim khoảng trắng. | | |
|
|
46
|
+
| [ID_008] | Kiểm tra nhập khoảng trắng ở đầu/cuối chuỗi | Low | Đã truy cập màn hình | 1. Nhập chuỗi có khoảng trắng ở đầu/cuối.<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | `" data_test "` | Hệ thống tự động cắt bỏ (trim) khoảng trắng ở đầu và cuối chuỗi trước khi lưu vào DB. | | |
|
|
47
|
+
| [ID_009] | Kiểm tra nhập độ dài tối thiểu/tối đa (Boundary Value) | Medium | Đã truy cập màn hình, biết Maxlength = N | 1. Nhập chuỗi có độ dài N - 1 ký tự.<br>2. Nhập chuỗi có độ dài N ký tự.<br>3. Nhập chuỗi có độ dài > N ký tự. | Chuỗi test tương ứng | - Với độ dài <= N: Cho phép nhập và lưu bình thường.<br>- Với độ dài > N: Hệ thống chặn trực tiếp trên UI (không cho gõ tiếp) hoặc báo lỗi hợp lệ. | | |
|
|
48
|
+
| [ID_010] | Kiểm tra nhập ký tự đặc biệt / Tiếng Nhật Halfwidth & Fullwidth | Medium | Đã truy cập màn hình | 1. Nhập các ký tự đặc biệt (!@#$).<br>2. Nhập ký tự Halfwidth (カタカナ, 123).<br>3. Nhập ký tự Fullwidth (カタカナ, 123). | Dữ liệu kiểm thử | Hệ thống lưu trữ đúng định dạng ký tự đã nhập (hoặc báo lỗi chuẩn nếu có quy định hạn chế định dạng). | | |
|
|
49
|
+
| [ID_011] | Kiểm tra thao tác Copy/Paste | Low | Đã truy cập màn hình | 1. Copy một chuỗi hợp lệ.<br>2. Paste vào trường thông tin.<br>3. Bấm nút thực hiện. | - | Cho phép paste dữ liệu vào field thành công và xử lý lưu bình thường. | | |
|
|
59
50
|
|
|
60
51
|
#### * Đối với Trường Số (Number / Price / Quantity)
|
|
61
|
-
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
62
|
-
|
|
63
|
-
| [ID_012] | Kiểm tra nhập chữ cái và ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Cố gắng nhập chữ cái (a, b, c...) hoặc ký tự đặc biệt.<br>2. Bấm nút thực hiện. | `"abc"`, `"@#$"` | UI ngăn không cho nhập chữ cái/ký tự đặc biệt, chỉ chấp nhận chữ số. | | |
|
|
64
|
-
| [ID_013] | Kiểm tra nhập số âm | High | Đã truy cập màn hình | 1. Nhập số âm.<br>2. Bấm nút thực hiện. | `-10` | Báo lỗi giá trị phải lớn hơn hoặc bằng 0 (hoặc chặn dấu trừ `-` trực tiếp từ UI). | | |
|
|
65
|
-
| [ID_014] | Kiểm tra nhập số thập phân | High | Đã truy cập màn hình | 1. Nhập số có dấu phẩy thập phân.<br>2. Bấm nút thực hiện. | `1.5`, `2,3` | Báo lỗi chỉ chấp nhận số nguyên (hoặc chấp nhận số thập phân tùy đặc tả nghiệp vụ). | | |
|
|
66
|
-
| [ID_015] | Kiểm tra hiển thị định dạng phân tách hàng nghìn | Low | Đã truy cập màn hình | 1. Nhập số lớn.<br>2. Focus out khỏi trường nhập liệu. | `1000000` | Số tự động định dạng phân tách hàng nghìn (Ví dụ: `1,000,000`). | | |
|
|
52
|
+
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
53
|
+
|---|---|---|---|---|---|---|---|---|
|
|
54
|
+
| [ID_012] | Kiểm tra nhập chữ cái và ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Cố gắng nhập chữ cái (a, b, c...) hoặc ký tự đặc biệt.<br>2. Bấm nút thực hiện. | `"abc"`, `"@#$"` | UI ngăn không cho nhập chữ cái/ký tự đặc biệt, chỉ chấp nhận chữ số. | | |
|
|
55
|
+
| [ID_013] | Kiểm tra nhập số âm | High | Đã truy cập màn hình | 1. Nhập số âm.<br>2. Bấm nút thực hiện. | `-10` | Báo lỗi giá trị phải lớn hơn hoặc bằng 0 (hoặc chặn dấu trừ `-` trực tiếp từ UI). | | |
|
|
56
|
+
| [ID_014] | Kiểm tra nhập số thập phân | High | Đã truy cập màn hình | 1. Nhập số có dấu phẩy thập phân.<br>2. Bấm nút thực hiện. | `1.5`, `2,3` | Báo lỗi chỉ chấp nhận số nguyên (hoặc chấp nhận số thập phân tùy đặc tả nghiệp vụ). | | |
|
|
57
|
+
| [ID_015] | Kiểm tra hiển thị định dạng phân tách hàng nghìn | Low | Đã truy cập màn hình | 1. Nhập số lớn.<br>2. Focus out khỏi trường nhập liệu. | `1000000` | Số tự động định dạng phân tách hàng nghìn (Ví dụ: `1,000,000`). | | |
|
|
67
58
|
|
|
68
59
|
#### * Đối với Trường File Upload (Hình ảnh)
|
|
69
|
-
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
70
|
-
|
|
71
|
-
| [ID_016] | Kiểm tra không upload file (Trường tùy chọn) | Medium | Đã truy cập màn hình | 1. Không chọn file upload.<br>2. Bấm nút thực hiện. | - | Hệ thống cho phép thực hiện thành công mà không báo lỗi. | | |
|
|
72
|
-
| [ID_017] | Kiểm tra upload file sai định dạng | High | Định dạng cho phép: jpeg, png | 1. Chọn upload file có định dạng không được phép (xlsx, gif, pdf...). | File `.pdf`, `.xlsx` | Upload không thành công. Hiển thị thông báo lỗi đúng thiết kế: "Hình ảnh phải là định dạng jpeg hoặc png." | | |
|
|
73
|
-
| [ID_018] | Kiểm tra upload dung lượng vượt quá giới hạn | High | Giới hạn dung lượng: tối đa 10MB | 1. Chọn file có kích thước > 10MB.<br>2. Tiến hành upload. | File kích thước `10.5MB` | Upload thất bại. Hiển thị lỗi cảnh báo: "Dung lượng hình ảnh vượt quá 10MB." | | |
|
|
74
|
-
| [ID_019] | Kiểm tra upload file giả mạo đuôi mở rộng (Spoofing) | High | Đã truy cập màn hình | 1. Đổi đuôi file thực thi nguy hiểm `.exe` thành `.jpg`.<br>2. Chọn upload file này. | File `.exe` đổi tên thành `.jpg` | Hệ thống kiểm tra phần thân file (MIME type) thực tế và báo lỗi không đúng định dạng. | | |
|
|
75
|
-
| [ID_020] | Kiểm tra kéo thả file (Drag & Drop) | Low | Đã truy cập màn hình | 1. Kéo file ảnh thả vào vùng upload. | File `.png` hợp lệ | Upload file thành công và hiển thị thumbnail ảnh xem trước trên giao diện. | | |
|
|
76
|
-
|
|
77
|
-
###
|
|
78
|
-
|
|
79
|
-
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
80
|
-
|
|
81
|
-
| [ID_021] | Kiểm tra ràng buộc trùng lặp dữ liệu duy nhất (Unique) | High | Đã tồn tại bản ghi trong DB | 1. Nhập thông tin trùng khóa chính/mã duy nhất với bản ghi cũ.<br>2. Điền các thông tin hợp lệ khác.<br>3. Bấm Đăng ký. | Mã trùng lặp | Hệ thống báo lỗi trùng lặp: "Mã/Tên này đã tồn tại trong hệ thống. Vui lòng kiểm tra lại." | | |
|
|
82
|
-
| [ID_022] | Kiểm tra logic liên kết dữ liệu động (Dynamic Form Control) | High | Điều kiện thay đổi hiển thị | 1. Tích chọn/Bỏ tích chọn [Checkbox điều kiện]. | - | Giao diện tự động thay đổi hiển thị ẩn/hiện hoặc disable/enable các trường thông tin liên quan theo đúng mô tả BR. | | |
|
|
83
|
-
| [ID_023] | Kiểm tra lưu dữ liệu vào Database thành công | Critical | Nhập đầy đủ và chính xác tất cả dữ liệu hợp lệ | 1. Nhập toàn bộ dữ liệu hợp lệ.<br>2. Bấm nút Đăng ký.<br>3. Kiểm tra DB và màn hình danh sách. | Dữ liệu hợp lệ | 1. Lưu bản ghi mới thành công.<br>2. Hiển thị thông báo thành công.<br>3. Dữ liệu trong Database khớp hoàn toàn các trường thông tin đã điền trên UI. | | |
|
|
84
|
-
|
|
85
|
-
###
|
|
86
|
-
|
|
87
|
-
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
88
|
-
|
|
89
|
-
| [ID_024] | Bấm nút Đăng ký nhiều lần liên tiếp (Double Click) | High | Đã điền đầy đủ dữ liệu hợp lệ | 1. Click liên tiếp nhiều lần vào nút Đăng ký/Lưu. | - | Nút bấm bị disable ngay sau lượt click đầu tiên. Hệ thống chỉ xử lý và tạo duy nhất 1 bản ghi trong DB, không tạo trùng lặp. | | |
|
|
90
|
-
| [ID_025] | Kiểm tra mất kết nối mạng đột ngột khi bấm Lưu | High | Điền đầy đủ dữ liệu hợp lệ | 1. Bấm nút Lưu.<br>2. Đồng thời ngắt kết nối mạng (hoặc giả lập mất kết nối mạng). | - | Hệ thống hiển thị loading và thông báo lỗi kết nối mạng, không bị crash hoặc treo màn hình trắng. | | |
|
|
91
|
-
| [ID_026] | Kiểm tra nhấn nút Quay lại (戻る) | Low | Đã điền một số dữ liệu | 1. Nhập một số thông tin.<br>2. Bấm nút Quay lại. | - | Hệ thống chuyển hướng về màn hình danh sách trước đó.<br>Bản ghi mới không được tạo trong DB. | | |
|
|
60
|
+
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
61
|
+
|---|---|---|---|---|---|---|---|---|
|
|
62
|
+
| [ID_016] | Kiểm tra không upload file (Trường tùy chọn) | Medium | Đã truy cập màn hình | 1. Không chọn file upload.<br>2. Bấm nút thực hiện. | - | Hệ thống cho phép thực hiện thành công mà không báo lỗi. | | |
|
|
63
|
+
| [ID_017] | Kiểm tra upload file sai định dạng | High | Định dạng cho phép: jpeg, png | 1. Chọn upload file có định dạng không được phép (xlsx, gif, pdf...). | File `.pdf`, `.xlsx` | Upload không thành công. Hiển thị thông báo lỗi đúng thiết kế: "Hình ảnh phải là định dạng jpeg hoặc png." | | |
|
|
64
|
+
| [ID_018] | Kiểm tra upload dung lượng vượt quá giới hạn | High | Giới hạn dung lượng: tối đa 10MB | 1. Chọn file có kích thước > 10MB.<br>2. Tiến hành upload. | File kích thước `10.5MB` | Upload thất bại. Hiển thị lỗi cảnh báo: "Dung lượng hình ảnh vượt quá 10MB." | | |
|
|
65
|
+
| [ID_019] | Kiểm tra upload file giả mạo đuôi mở rộng (Spoofing) | High | Đã truy cập màn hình | 1. Đổi đuôi file thực thi nguy hiểm `.exe` thành `.jpg`.<br>2. Chọn upload file này. | File `.exe` đổi tên thành `.jpg` | Hệ thống kiểm tra phần thân file (MIME type) thực tế và báo lỗi không đúng định dạng. | | |
|
|
66
|
+
| [ID_020] | Kiểm tra kéo thả file (Drag & Drop) | Low | Đã truy cập màn hình | 1. Kéo file ảnh thả vào vùng upload. | File `.png` hợp lệ | Upload file thành công và hiển thị thumbnail ảnh xem trước trên giao diện. | | |
|
|
67
|
+
|
|
68
|
+
### 2.4. Kiểm thử Logic Nghiệp vụ (Business Rules - BR)
|
|
69
|
+
|
|
70
|
+
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
71
|
+
|---|---|---|---|---|---|---|---|---|
|
|
72
|
+
| [ID_021] | Kiểm tra ràng buộc trùng lặp dữ liệu duy nhất (Unique) | High | Đã tồn tại bản ghi trong DB | 1. Nhập thông tin trùng khóa chính/mã duy nhất với bản ghi cũ.<br>2. Điền các thông tin hợp lệ khác.<br>3. Bấm Đăng ký. | Mã trùng lặp | Hệ thống báo lỗi trùng lặp: "Mã/Tên này đã tồn tại trong hệ thống. Vui lòng kiểm tra lại." | | |
|
|
73
|
+
| [ID_022] | Kiểm tra logic liên kết dữ liệu động (Dynamic Form Control) | High | Điều kiện thay đổi hiển thị | 1. Tích chọn/Bỏ tích chọn [Checkbox điều kiện]. | - | Giao diện tự động thay đổi hiển thị ẩn/hiện hoặc disable/enable các trường thông tin liên quan theo đúng mô tả BR. | | |
|
|
74
|
+
| [ID_023] | Kiểm tra lưu dữ liệu vào Database thành công | Critical | Nhập đầy đủ và chính xác tất cả dữ liệu hợp lệ | 1. Nhập toàn bộ dữ liệu hợp lệ.<br>2. Bấm nút Đăng ký.<br>3. Kiểm tra DB và màn hình danh sách. | Dữ liệu hợp lệ | 1. Lưu bản ghi mới thành công.<br>2. Hiển thị thông báo thành công.<br>3. Dữ liệu trong Database khớp hoàn toàn các trường thông tin đã điền trên UI. | | |
|
|
75
|
+
|
|
76
|
+
### 2.5. Kiểm thử Ngoại lệ & Hệ thống (Exceptions & Systems)
|
|
77
|
+
|
|
78
|
+
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|
|
79
|
+
|---|---|---|---|---|---|---|---|---|
|
|
80
|
+
| [ID_024] | Bấm nút Đăng ký nhiều lần liên tiếp (Double Click) | High | Đã điền đầy đủ dữ liệu hợp lệ | 1. Click liên tiếp nhiều lần vào nút Đăng ký/Lưu. | - | Nút bấm bị disable ngay sau lượt click đầu tiên. Hệ thống chỉ xử lý và tạo duy nhất 1 bản ghi trong DB, không tạo trùng lặp. | | |
|
|
81
|
+
| [ID_025] | Kiểm tra mất kết nối mạng đột ngột khi bấm Lưu | High | Điền đầy đủ dữ liệu hợp lệ | 1. Bấm nút Lưu.<br>2. Đồng thời ngắt kết nối mạng (hoặc giả lập mất kết nối mạng). | - | Hệ thống hiển thị loading và thông báo lỗi kết nối mạng, không bị crash hoặc treo màn hình trắng. | | |
|
|
82
|
+
| [ID_026] | Kiểm tra nhấn nút Quay lại (戻る) | Low | Đã điền một số dữ liệu | 1. Nhập một số thông tin.<br>2. Bấm nút Quay lại. | - | Hệ thống chuyển hướng về màn hình danh sách trước đó.<br>Bản ghi mới không được tạo trong DB. | | |
|
|
92
83
|
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/custom/templates/php.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## /coding — Manual Trigger for the DEV Coding Workflow
|
|
2
|
+
|
|
3
|
+
**Why this command exists:** the `[DEV] 5-Gate Development Workflow` (for `taskType`: `bug-fix`, `feature`, `refactor`, `investigation`, `documentation`) normally auto-starts via the `SessionStart` hook, which only fires when a Claude Code session **starts, resumes, or is cleared**. If a ticket was loaded with `ak use <TICKET-ID>` while this chat session was already open, the hook never re-ran — so this session has no ticket context yet, and typing "start" does nothing because nothing told the AI what "start" means. `/coding` fixes that by loading the ticket context manually, right now.
|
|
4
|
+
|
|
5
|
+
**Steps — do these now, in order:**
|
|
6
|
+
|
|
7
|
+
1. Read `.aiflow/context/current.json`.
|
|
8
|
+
- Missing, or no `taskId` field → tell the developer to run `ak use <TICKET-ID>` first, then stop here.
|
|
9
|
+
2. Read `.aiflow/tasks/[taskId]/task-state.json` if it exists.
|
|
10
|
+
- If `currentGate > 1` (task already in progress) → **resume at that gate** — do NOT restart from Gate 1. List which gates are already `APPROVED` before continuing.
|
|
11
|
+
- Otherwise → start fresh at Gate 1.
|
|
12
|
+
3. In this project's main AI instruction file (`CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, or `.github/copilot-instructions.md` — whichever is present), find the section **`## [DEV] 5-Gate Development Workflow`** and follow it exactly, beginning at the gate identified in step 2.
|
|
13
|
+
4. This workflow applies regardless of the ticket's `taskType` value — `bug-fix`, `feature`, `refactor`, `investigation`, and `documentation` all share this same 5-gate flow (see the "Workflow Selection" table above that section for the full routing).
|
|
14
|
+
|
|
15
|
+
Do not wait for further confirmation from the developer before starting — begin the identified gate immediately.
|
|
@@ -13,53 +13,53 @@ Các skill sau đây được cài tự động vào `.claude/skills/ba-skills/`
|
|
|
13
13
|
|
|
14
14
|
| Skill | File |
|
|
15
15
|
|---|---|
|
|
16
|
-
| `skill-ba-phan-tich-ban-dau` | `.claude/skills/ba-skills/skill-ba-
|
|
17
|
-
| `skill-ba-qa` | `.claude/skills/ba-skills/skill-ba-
|
|
18
|
-
| `skill-ba-prototype` | `.claude/skills/ba-skills/skill-ba-prototype-v1.md` |
|
|
19
|
-
| `skill-ba-ve-luong-mermaid` | `.claude/skills/ba-skills/skill-ba-
|
|
20
|
-
| `skill-ba-xay-dung-business-rules` | `.claude/skills/ba-skills/skill-ba-
|
|
21
|
-
| `skill-ba-viet-spec-uc` | `.claude/skills/ba-skills/skill-ba-
|
|
22
|
-
| `template-phan-tich-ban-dau` | `.claude/skills/ba-skills/skill-ba-
|
|
23
|
-
| `template-qa` | `.claude/skills/ba-skills/skill-ba-
|
|
24
|
-
| `template-uc` | `.claude/skills/ba-skills/skill-ba-template-
|
|
16
|
+
| `skill-ba-phan-tich-ban-dau` | `.claude/skills/ba-skills/skill-ba-initial-analysis-v1.md` |
|
|
17
|
+
| `skill-ba-qa` | `.claude/skills/ba-skills/skill-ba-qna-v1.md` |
|
|
18
|
+
| `skill-ba-prototype` | `.claude/skills/ba-skills/skill-ba-ui-prototype-v1.md` |
|
|
19
|
+
| `skill-ba-ve-luong-mermaid` | `.claude/skills/ba-skills/skill-ba-mermaid-flowchart-v1.md` |
|
|
20
|
+
| `skill-ba-xay-dung-business-rules` | `.claude/skills/ba-skills/skill-ba-build-business-rules-v1.md` |
|
|
21
|
+
| `skill-ba-viet-spec-uc` | `.claude/skills/ba-skills/skill-ba-write-uc-spec-v1.md` |
|
|
22
|
+
| `template-phan-tich-ban-dau` | `.claude/skills/ba-skills/skill-ba-initial-analysis-template-v1.md` |
|
|
23
|
+
| `template-qa` | `.claude/skills/ba-skills/skill-ba-qna-template-v1.md` |
|
|
24
|
+
| `template-uc` | `.claude/skills/ba-skills/skill-ba-uc-template-v1.md` |
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
### Cấu trúc thư mục đầu ra
|
|
29
29
|
|
|
30
30
|
```
|
|
31
|
-
|
|
32
|
-
├──
|
|
33
|
-
│ ├── [functionId]
|
|
34
|
-
│ └── [functionId]
|
|
35
|
-
├──
|
|
36
|
-
│ ├── [functionId]
|
|
37
|
-
│ └── [functionId]
|
|
38
|
-
├──
|
|
39
|
-
│ └── [functionId]
|
|
40
|
-
└── UC/
|
|
41
|
-
└── [functionId]
|
|
31
|
+
02.BA-Specs/
|
|
32
|
+
├── 01.Analysis/
|
|
33
|
+
│ ├── [functionId]/Analysis_v1.md ← Gate 1 tạo
|
|
34
|
+
│ └── [functionId]/Analysis_vn.md ← Gate 2 cập nhật (tăng version)
|
|
35
|
+
├── 02.QnA/
|
|
36
|
+
│ ├── [functionId]/QnA-Log_v1.md ← Gate 1 tạo
|
|
37
|
+
│ └── [functionId]/QnA-Log_vm.md ← Gate 2 tạo thêm nếu còn Open
|
|
38
|
+
├── 03.UI-Prototypes/
|
|
39
|
+
│ └── [functionId]/UI-Prototype_v1.html← Gate 3 tạo
|
|
40
|
+
└── 04.UC-Specs/
|
|
41
|
+
└── [functionId]/UC-Spec_v1.md ← Gate 4 tạo
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
Ví dụ: `functionId = AD10
|
|
44
|
+
Ví dụ: `functionId = AD10` → thư mục gốc là `02.BA-Specs/`
|
|
45
45
|
|
|
46
46
|
---
|
|
47
47
|
|
|
48
48
|
### Quy trình tổng quan 4 Gates
|
|
49
49
|
|
|
50
50
|
```
|
|
51
|
-
(
|
|
51
|
+
(BA-Specs/ = 02.BA-Specs/ — viết tắt cho ngắn gọn)
|
|
52
52
|
|
|
53
|
-
[Input: Jira / Backlog / file] → Pre-flight: xác định functionId
|
|
53
|
+
[Input: Jira / Backlog / file] → Pre-flight: BẮT BUỘC xác định functionId
|
|
54
54
|
↓
|
|
55
|
-
Gate 1: Phân tích yêu cầu & Tạo Q&A →
|
|
55
|
+
Gate 1: Phân tích yêu cầu & Tạo Q&A → BA-Specs/01.Analysis/ + BA-Specs/02.QnA/
|
|
56
56
|
↓ APPROVED
|
|
57
57
|
Gate 2: Cập nhật phản hồi Q&A ←─────────────────────────────────────────┐
|
|
58
|
-
↓ còn Open → tạo
|
|
58
|
+
↓ còn Open → tạo QnA-Log_v(m+1) → đợi BA phản hồi → lặp lại ────────┘
|
|
59
59
|
↓ tất cả Confirmed + APPROVED
|
|
60
|
-
Gate 3: Thiết kế UI Prototype HTML/CSS →
|
|
60
|
+
Gate 3: Thiết kế UI Prototype HTML/CSS → BA-Specs/03.UI-Prototypes/
|
|
61
61
|
↓ APPROVED
|
|
62
|
-
Gate 4: Viết đặc tả Use Case Spec →
|
|
62
|
+
Gate 4: Viết đặc tả Use Case Spec → BA-Specs/04.UC-Specs/
|
|
63
63
|
↓ APPROVED
|
|
64
64
|
Bàn giao Dev/Test
|
|
65
65
|
```
|
|
@@ -71,55 +71,46 @@ Bàn giao Dev/Test
|
|
|
71
71
|
**Mục tiêu:** Tiếp nhận đầu vào, hiểu nghiệp vụ, phát hiện khoảng trống (Gaps), lập bản phân tích sơ bộ và danh sách Q&A.
|
|
72
72
|
|
|
73
73
|
**Đầu ra (Outputs):**
|
|
74
|
-
- `
|
|
75
|
-
- `
|
|
74
|
+
- `02.BA-Specs/01.Analysis/[functionId]/Analysis_v1.md`
|
|
75
|
+
- `02.BA-Specs/02.QnA/[functionId]/QnA-Log_v1.md`
|
|
76
76
|
|
|
77
77
|
**Bước thực hiện:**
|
|
78
78
|
|
|
79
79
|
#### Bước 0: Pre-flight — Xác định functionId và thư mục đầu ra
|
|
80
80
|
|
|
81
|
-
**Xác định `functionId
|
|
81
|
+
**Xác định `functionId` (BẮT BUỘC):**
|
|
82
82
|
|
|
83
83
|
Kiểm tra theo thứ tự ưu tiên:
|
|
84
84
|
1. Trường `functionId` hoặc `screenId` trong `.aiflow/context/current.json`
|
|
85
85
|
2. Rút gọn từ `ticketId` — bỏ dấu gạch, giữ ký hiệu (ví dụ: `AD-10` → `AD10`)
|
|
86
|
-
3. Nếu không tìm thấy → **hỏi BA ngay**:
|
|
86
|
+
3. Nếu không tìm thấy → **BẮT BUỘC hỏi BA ngay**:
|
|
87
87
|
|
|
88
88
|
```
|
|
89
89
|
Không tìm thấy functionId trong context.
|
|
90
90
|
Vui lòng cung cấp mã định danh cho chức năng này (ví dụ: AD10, UC-LOGIN, PM-003):
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
→ Đợi BA trả lời, ghi nhận giá trị, dùng cho toàn bộ workflow.
|
|
93
|
+
→ Đợi BA trả lời, ghi nhận giá trị, dùng cho toàn bộ workflow. KHÔNG ĐƯỢC TIẾP TỤC NẾU CHƯA CÓ functionId.
|
|
94
94
|
|
|
95
|
-
**Xác định
|
|
95
|
+
**Xác định thư mục đầu ra:**
|
|
96
96
|
|
|
97
|
-
1.
|
|
98
|
-
- Trường `project` trong `.aiflow/context/current.json`
|
|
99
|
-
- Tên thư mục gốc workspace (chuyển lowercase, thay space bằng `-`)
|
|
100
|
-
|
|
101
|
-
2. Kiểm tra tồn tại thư mục `docs/ak-{project}/spec/` trong root dự án:
|
|
97
|
+
1. Kiểm tra tồn tại thư mục `02.BA-Specs/` trong root dự án:
|
|
102
98
|
- **Tìm thấy** → thông báo xác nhận:
|
|
103
99
|
```
|
|
104
|
-
✓ Thư mục đầu ra:
|
|
100
|
+
✓ Thư mục đầu ra: 02.BA-Specs/
|
|
105
101
|
✓ functionId: [functionId]
|
|
106
102
|
→ Bắt đầu Gate 1...
|
|
107
103
|
```
|
|
108
|
-
- **Không tìm thấy** →
|
|
109
|
-
```
|
|
110
|
-
Không tìm thấy thư mục docs/ak-{project}/spec/.
|
|
111
|
-
Tên project là gì? (ví dụ: coinbook, crm-app)
|
|
112
|
-
```
|
|
113
|
-
→ Nhận tên project từ BA → chuyển lowercase → tạo toàn bộ cây thư mục:
|
|
104
|
+
- **Không tìm thấy** → tạo toàn bộ cây thư mục:
|
|
114
105
|
```
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
106
|
+
02.BA-Specs/01.Analysis/
|
|
107
|
+
02.BA-Specs/02.QnA/
|
|
108
|
+
02.BA-Specs/03.UI-Prototypes/
|
|
109
|
+
02.BA-Specs/04.UC-Specs/
|
|
119
110
|
```
|
|
120
111
|
→ Thông báo:
|
|
121
112
|
```
|
|
122
|
-
✓ Đã tạo thư mục:
|
|
113
|
+
✓ Đã tạo thư mục: 02.BA-Specs/
|
|
123
114
|
✓ functionId: [functionId]
|
|
124
115
|
→ Bắt đầu Gate 1...
|
|
125
116
|
```
|
|
@@ -129,6 +120,7 @@ Vui lòng cung cấp mã định danh cho chức năng này (ví dụ: AD10, UC-
|
|
|
129
120
|
- Nếu description có URL → chạy `ak fetch-links <url>` để tải nội dung
|
|
130
121
|
- Nếu có `supplementaryContext[]` → đọc từng item (file đính kèm, ticket liên quan, comment PM)
|
|
131
122
|
- Nếu có file yêu cầu thô được chỉ định → đọc file đó
|
|
123
|
+
- **READ skill:** `.superpowers/skills/brainstorming/SKILL.md` (hoặc `brainstorming` skill) để chủ động làm rõ các yêu cầu thô, khơi gợi ý tưởng trước khi phân tích.
|
|
132
124
|
|
|
133
125
|
#### Bước 1b: Đọc Source Code
|
|
134
126
|
|
|
@@ -160,26 +152,25 @@ Nếu workspace mở dạng parent folder chứa cả `ak docs` lẫn source cod
|
|
|
160
152
|
- Nếu có điểm mơ hồ cốt yếu → hỏi ONE câu làm rõ, đợi BA trả lời trước khi tiếp tục
|
|
161
153
|
|
|
162
154
|
#### Bước 3: Soạn thảo Kết quả phân tích sơ bộ
|
|
163
|
-
- **READ template:** `.claude/skills/ba-skills/skill-ba-
|
|
155
|
+
- **READ template:** `.claude/skills/ba-skills/skill-ba-initial-analysis-template-v1.md`
|
|
164
156
|
- Điền đầy đủ các mục theo template: Actors, Facts, Assumptions, Gap Analysis table
|
|
165
|
-
- Lưu: `
|
|
157
|
+
- Lưu: `02.BA-Specs/01.Analysis/[functionId]/Analysis_v1.md`
|
|
166
158
|
|
|
167
159
|
#### Bước 4: Soạn thảo danh sách Q&A
|
|
168
|
-
- **READ skill:** `.claude/skills/ba-skills/skill-ba-
|
|
169
|
-
- **READ template:** `.claude/skills/ba-skills/skill-ba-
|
|
160
|
+
- **READ skill:** `.claude/skills/ba-skills/skill-ba-qna-v1.md`
|
|
161
|
+
- **READ template:** `.claude/skills/ba-skills/skill-ba-qna-template-v1.md`
|
|
170
162
|
- Chuyển từng Gap thành câu hỏi cụ thể, khách quan, không định hướng
|
|
171
163
|
- Mỗi câu hỏi tương ứng với ít nhất một Gap. Trạng thái ban đầu: **Open**
|
|
172
|
-
- Lưu: `
|
|
164
|
+
- Lưu: `02.BA-Specs/02.QnA/[functionId]/QnA-Log_v1.md`
|
|
173
165
|
|
|
174
166
|
#### Bước 5: Gate Review & Pause
|
|
175
167
|
- **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-1-[functionId].md`
|
|
176
|
-
- **Kiểm tra Q&A bắt buộc:** Đọc `
|
|
168
|
+
- **Kiểm tra Q&A bắt buộc:** Đọc `QnA-Log_v1.md` — đếm số câu có trạng thái **Open**
|
|
177
169
|
- Hiển thị gate pause message — chờ phản hồi từ BA
|
|
178
170
|
|
|
179
|
-
**Nếu nhận được APPROVED mà
|
|
171
|
+
**Nếu nhận được APPROVED mà QnA-Log_v1.md còn câu hỏi Open → từ chối ngay, hiển thị:**
|
|
180
172
|
|
|
181
|
-
|
|
182
|
-
⛔ GATE 1 BLOCKED — Còn [N] câu hỏi chưa được trả lời trong QA(1).md.
|
|
173
|
+
⛔ GATE 1 BLOCKED — Còn [N] câu hỏi chưa được trả lời trong QnA-Log_v1.md.
|
|
183
174
|
|
|
184
175
|
| ID | Câu hỏi còn Open |
|
|
185
176
|
|----|-----------------|
|
|
@@ -188,10 +179,9 @@ Nếu workspace mở dạng parent folder chứa cả `ak docs` lẫn source cod
|
|
|
188
179
|
Vui lòng cung cấp câu trả lời theo một trong 3 cách:
|
|
189
180
|
→ Option A: nhập trực tiếp — `Q1: [trả lời], Q2: [trả lời]`
|
|
190
181
|
→ Option B: paste nội dung bảng Q&A đã điền vào chat
|
|
191
|
-
→ Option C: đặt file `
|
|
182
|
+
→ Option C: đặt file `QnA-Log_v1_response.md` vào thư mục `02.QnA/[functionId]/` rồi gõ NEXT
|
|
192
183
|
|
|
193
184
|
❌ APPROVED không được chấp nhận cho đến khi 100% câu hỏi đã Confirmed.
|
|
194
|
-
```
|
|
195
185
|
|
|
196
186
|
**Khi APPROVED (chỉ sau khi tất cả câu hỏi trong QA(1).md đã Confirmed):**
|
|
197
187
|
→ **INVOKE** `gate-review` skill (verify mode) — chạy `ak review check --gate 1 --ticket [functionId]`
|
|
@@ -199,9 +189,9 @@ Vui lòng cung cấp câu trả lời theo một trong 3 cách:
|
|
|
199
189
|
→ Nếu blocked: làm theo gate-review skill response protocol
|
|
200
190
|
|
|
201
191
|
**Definition of Done:**
|
|
202
|
-
- [ ] `functionId`
|
|
203
|
-
- [ ] File `
|
|
204
|
-
- [ ] File `
|
|
192
|
+
- [ ] `functionId` đã được xác định và thư mục đầu ra đã sẵn sàng
|
|
193
|
+
- [ ] File `Analysis_v1.md` tạo đúng vị trí, cấu trúc đúng template, có bảng Gap Analysis
|
|
194
|
+
- [ ] File `QnA-Log_v1.md` có ít nhất 1 câu hỏi cho mỗi Gap, tất cả trạng thái **Open**
|
|
205
195
|
- [ ] Không có giả định nào được tự ý chốt thành Spec mà không đưa vào Q&A
|
|
206
196
|
|
|
207
197
|
> **Telemetry:** Run `ak gate 1 start --ticket [functionId]` khi bắt đầu gate này.
|
|
@@ -215,54 +205,50 @@ Vui lòng cung cấp câu trả lời theo một trong 3 cách:
|
|
|
215
205
|
|
|
216
206
|
**Đầu vào (Inputs):**
|
|
217
207
|
- Phản hồi Q&A từ BA (xem 3 option bên dưới)
|
|
218
|
-
- `
|
|
219
|
-
- `
|
|
208
|
+
- `02.BA-Specs/01.Analysis/[functionId]/Analysis_v(n).md` — phiên bản hiện tại
|
|
209
|
+
- `02.BA-Specs/02.QnA/[functionId]/QnA-Log_v(m).md` — danh sách câu hỏi hiện tại
|
|
220
210
|
|
|
221
211
|
**Cách BA cung cấp phản hồi (BA chọn một trong 3):**
|
|
222
212
|
- **Option A** — Nhập trực tiếp vào chat: `Q&A: Q1: [trả lời], Q2: [trả lời]`
|
|
223
213
|
- **Option B** — Paste nội dung bảng Q&A đã điền vào chat
|
|
224
|
-
- **Option C** — Đặt file tại: `
|
|
214
|
+
- **Option C** — Đặt file tại: `02.BA-Specs/02.QnA/[functionId]/QnA-Log_v(m)_response.md`
|
|
225
215
|
|
|
226
216
|
**Bước thực hiện:**
|
|
227
217
|
|
|
228
218
|
#### Bước 1: Tiếp nhận và đánh giá câu trả lời
|
|
229
|
-
-
|
|
230
|
-
- Đối chiếu từng câu trả lời với câu hỏi trong `QA(m).md`
|
|
219
|
+
- Đối chiếu từng câu trả lời với câu hỏi trong `QnA-Log_v(m).md`
|
|
231
220
|
- Phân loại:
|
|
232
221
|
- Đủ thông tin → cập nhật trạng thái: **Confirmed**
|
|
233
222
|
- Chưa rõ hoặc phát sinh nghiệp vụ mới → giữ trạng thái **Open**, bổ sung ghi chú
|
|
234
223
|
|
|
235
224
|
#### Bước 2: Tích hợp thông tin vào tài liệu phân tích
|
|
236
|
-
- Lấy thông tin từ các câu Confirmed → cập nhật vào `
|
|
225
|
+
- Lấy thông tin từ các câu Confirmed → cập nhật vào `Analysis_v(n).md`
|
|
237
226
|
- Xóa các Gap đã được giải quyết khỏi bảng Gap Analysis
|
|
238
|
-
- Tạo phiên bản mới: `
|
|
227
|
+
- Tạo phiên bản mới: `02.BA-Specs/01.Analysis/[functionId]/Analysis_v(n+1).md`
|
|
239
228
|
|
|
240
229
|
#### Bước 3: Rẽ nhánh theo trạng thái Q&A
|
|
241
230
|
|
|
242
231
|
**Kịch bản A — Vẫn còn câu hỏi Open:**
|
|
243
|
-
1.
|
|
244
|
-
2. Tạo: `
|
|
232
|
+
1. Kiểm tra `Analysis_v(n+1).md` có phát sinh Gap mới không
|
|
233
|
+
2. Tạo: `02.BA-Specs/02.QnA/[functionId]/QnA-Log_v(m+1).md` — chỉ giữ câu Open và câu mới phát sinh
|
|
245
234
|
3. **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-2-[functionId]-round-[m+1].md`
|
|
246
235
|
4. Hiển thị:
|
|
247
236
|
|
|
248
|
-
```
|
|
249
237
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
250
238
|
⏸️ GATE 2 — VÒNG Q&A [m+1]
|
|
251
239
|
|
|
252
240
|
Câu hỏi còn Open: [N]
|
|
253
|
-
File Q&A mới: [
|
|
254
|
-
File phân tích: [
|
|
241
|
+
File Q&A mới: [02.BA-Specs/02.QnA/[functionId]/QnA-Log_v(m+1).md](02.BA-Specs/02.QnA/[functionId]/QnA-Log_v(m+1).md)
|
|
242
|
+
File phân tích: [02.BA-Specs/01.Analysis/[functionId]/Analysis_v(n+1).md](02.BA-Specs/01.Analysis/[functionId]/Analysis_v(n+1).md)
|
|
255
243
|
|
|
256
244
|
→ BA điền câu trả lời và cung cấp theo một trong 3 option (A/B/C)
|
|
257
245
|
→ Sau khi cung cấp phản hồi, type NEXT để AI xử lý vòng tiếp theo
|
|
258
246
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
259
|
-
```
|
|
260
247
|
|
|
261
248
|
5. Lặp lại Bước 1 khi nhận phản hồi mới
|
|
262
249
|
|
|
263
250
|
**Nếu BA gõ APPROVED khi đang ở Kịch bản A (còn câu hỏi Open) → từ chối ngay:**
|
|
264
251
|
|
|
265
|
-
```
|
|
266
252
|
⛔ GATE 2 BLOCKED — Còn [N] câu hỏi chưa Confirmed.
|
|
267
253
|
|
|
268
254
|
| ID | Câu hỏi còn Open |
|
|
@@ -271,7 +257,6 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
271
257
|
|
|
272
258
|
→ Cung cấp câu trả lời (Option A/B/C) rồi gõ NEXT để AI xử lý tiếp.
|
|
273
259
|
❌ APPROVED chỉ được chấp nhận khi 100% câu hỏi đã Confirmed.
|
|
274
|
-
```
|
|
275
260
|
|
|
276
261
|
**Kịch bản B — Tất cả đã Confirmed:**
|
|
277
262
|
1. Chốt tài liệu phân tích (phiên bản cuối cùng là đầu vào Gate 3)
|
|
@@ -300,10 +285,10 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
300
285
|
**Điều kiện vào Gate 3:** Tất cả Q&A đã **Confirmed** và Gate 2 đã **APPROVED**.
|
|
301
286
|
|
|
302
287
|
**Đầu vào (Inputs):**
|
|
303
|
-
- `
|
|
288
|
+
- `02.BA-Specs/01.Analysis/[functionId]/Analysis_v(n).md` — phiên bản cuối
|
|
304
289
|
|
|
305
290
|
**Đầu ra (Outputs):**
|
|
306
|
-
- `
|
|
291
|
+
- `02.BA-Specs/03.UI-Prototypes/[functionId]/UI-Prototype_v1.html`
|
|
307
292
|
|
|
308
293
|
**Bước thực hiện:**
|
|
309
294
|
|
|
@@ -323,7 +308,7 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
323
308
|
- CSS nổi bật lỗi (chữ đỏ, viền đỏ), mặc định ẩn (`display: none`)
|
|
324
309
|
|
|
325
310
|
#### Bước 4: Lưu file
|
|
326
|
-
- `
|
|
311
|
+
- `02.BA-Specs/03.UI-Prototypes/[functionId]/UI-Prototype_v1.html`
|
|
327
312
|
|
|
328
313
|
#### Bước 5: Gate Review & Pause
|
|
329
314
|
- **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-3-[functionId].md`
|
|
@@ -335,7 +320,7 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
335
320
|
→ Nếu blocked: làm theo gate-review skill response protocol
|
|
336
321
|
|
|
337
322
|
**Definition of Done:**
|
|
338
|
-
- [ ] File `
|
|
323
|
+
- [ ] File `UI-Prototype_v1.html` tạo đúng vị trí
|
|
339
324
|
- [ ] Giao diện hiển thị đủ tất cả thành phần nghiệp vụ
|
|
340
325
|
- [ ] 100% thẻ tương tác có `id` duy nhất
|
|
341
326
|
- [ ] CSS tự chứa trong file HTML
|
|
@@ -352,18 +337,18 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
352
337
|
**Điều kiện vào Gate 4:** Gate 3 đã **APPROVED** và `design.html` đã hoàn chỉnh.
|
|
353
338
|
|
|
354
339
|
**Đầu vào (Inputs):**
|
|
355
|
-
- `
|
|
356
|
-
- `
|
|
340
|
+
- `02.BA-Specs/01.Analysis/[functionId]/Analysis_v(n).md` — phiên bản cuối
|
|
341
|
+
- `02.BA-Specs/03.UI-Prototypes/[functionId]/UI-Prototype_v1.html`
|
|
357
342
|
|
|
358
343
|
**Đầu ra (Outputs):**
|
|
359
|
-
- `
|
|
344
|
+
- `02.BA-Specs/04.UC-Specs/[functionId]/UC-Spec_v1.md`
|
|
360
345
|
|
|
361
346
|
**Bước thực hiện:**
|
|
362
347
|
|
|
363
348
|
#### Bước 1: Khởi tạo Spec từ Template
|
|
364
|
-
- **READ template:** `.claude/skills/ba-skills/skill-ba-template-
|
|
365
|
-
- **READ skill:** `.claude/skills/ba-skills/skill-ba-
|
|
366
|
-
- Tạo: `
|
|
349
|
+
- **READ template:** `.claude/skills/ba-skills/skill-ba-uc-template-v1.md`
|
|
350
|
+
- **READ skill:** `.claude/skills/ba-skills/skill-ba-write-uc-spec-v1.md`
|
|
351
|
+
- Tạo: `02.BA-Specs/04.UC-Specs/[functionId]/UC-Spec_v1.md`
|
|
367
352
|
- Điền General Information: Use Case ID, Title, Version, Actors, Preconditions, Postconditions
|
|
368
353
|
|
|
369
354
|
#### Bước 2: Mô tả luồng sự kiện (Flow of Events)
|
|
@@ -373,7 +358,7 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
373
358
|
- Viết rõ tương tác Actor ↔ System ở từng bước
|
|
374
359
|
|
|
375
360
|
#### Bước 3: Tích hợp giao diện Prototype
|
|
376
|
-
- Copy toàn bộ mã HTML/CSS từ `
|
|
361
|
+
- Copy toàn bộ mã HTML/CSS từ `UI-Prototype_v1.html` vào phần Screen Description
|
|
377
362
|
|
|
378
363
|
#### Bước 4: Mô tả chi tiết UI Components
|
|
379
364
|
- Lập bảng: Tên | Loại | Bắt buộc | Độ dài tối đa | Giá trị mặc định | Ràng buộc validation
|
|
@@ -405,7 +390,7 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
405
390
|
- BA gõ `REVISION: [nội dung]` → cập nhật section liên quan → re-generate review file → hiển thị lại gate pause
|
|
406
391
|
|
|
407
392
|
**Definition of Done:**
|
|
408
|
-
- [ ] File `
|
|
393
|
+
- [ ] File `UC-Spec_v1.md` đúng vị trí và cấu trúc template
|
|
409
394
|
- [ ] 100% element HTML được mô tả trong bảng UI Components (id, loại, ràng buộc)
|
|
410
395
|
- [ ] Mã Mermaid hợp lệ, thể hiện đủ Main/Alternative/Exception Flow
|
|
411
396
|
- [ ] Business Rules đầy đủ với mã `[BR-NNN]` và thông báo lỗi chính xác
|
|
@@ -420,10 +405,10 @@ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1
|
|
|
420
405
|
|
|
421
406
|
| Gate | Skills đọc | Output |
|
|
422
407
|
|---|---|---|
|
|
423
|
-
| Gate 1 | `skill-ba-
|
|
424
|
-
| Gate 2 | `skill-ba-
|
|
425
|
-
| Gate 3 | `skill-ba-prototype` | `
|
|
426
|
-
| Gate 4 | `skill-ba-
|
|
408
|
+
| Gate 1 | `brainstorming`, `skill-ba-initial-analysis`, `skill-ba-initial-analysis-template`, `skill-ba-qna`, `skill-ba-qna-template` | `Analysis_v1.md`, `QnA-Log_v1.md` |
|
|
409
|
+
| Gate 2 | `skill-ba-qna`, `skill-ba-initial-analysis` | `Analysis_v(n+1).md`, `QnA-Log_v(m+1).md` (nếu còn Open) |
|
|
410
|
+
| Gate 3 | `skill-ba-ui-prototype` | `UI-Prototype_v1.html` |
|
|
411
|
+
| Gate 4 | `skill-ba-write-uc-spec`, `skill-ba-uc-template`, `skill-ba-mermaid-flowchart`, `skill-ba-build-business-rules` | `UC-Spec_v1.md` |
|
|
427
412
|
|
|
428
413
|
---
|
|
429
414
|
|