@relipa/ai-flow-kit 0.1.4 → 0.1.5-beta.1
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 +0 -0
- 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 +67 -51
- 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 +0 -0
- 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 +1 -1
- package/custom/skills/generate-spec/SKILL.md +99 -99
- 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 -0
- package/custom/skills/generate-testcase/templates/testcase.md +0 -0
- 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/read-study-requirement/SKILL.md +7 -5
- 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 +194 -194
- package/custom/skills/script-sync/SKILL.md +0 -0
- package/custom/skills/test-analysis/SKILL.md +0 -0
- 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} +0 -0
- 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 -89
- package/custom/templates/shared/create-testcase-workflow.md +86 -84
- package/custom/templates/shared/gate-workflow.md +64 -11
- package/custom/templates/shared/ml-gate-workflow.md +0 -0
- package/custom/templates/spring-boot.md +0 -0
- package/custom/templates/tools/claude.md +13 -13
- package/custom/templates/tools/copilot.md +12 -12
- package/custom/templates/tools/cursor.md +12 -12
- package/custom/templates/tools/gemini.md +22 -22
- package/custom/templates/tools/generic.md +17 -17
- package/custom/templates/vue-nuxt.md +0 -0
- package/docs/common/AIFLOW.md +10 -10
- package/docs/common/CHANGELOG.md +33 -9
- package/docs/common/QUICK_START.md +0 -0
- package/docs/common/ai-integration.md +53 -53
- 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 +126 -126
- package/docs/common/workflows/feature.md +123 -123
- 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 +10 -5
- 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 +0 -0
- package/scripts/scaffold-playwright.js +0 -0
- package/scripts/task.js +69 -22
- 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
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
# Feature Development Workflow
|
|
2
|
-
|
|
3
|
-
> See the full workflow at [AIFLOW.md](../../AIFLOW.md)
|
|
4
|
-
> **Gates must pass in order: 1 → 2 → 3 → 4 → 5**
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Step 1: Load ticket & AI analyzes (Gate 1)
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
aiflow use PROJ-33 # from Backlog/Jira
|
|
12
|
-
claude # AI auto-starts Gate 1
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
AI will **automatically**:
|
|
16
|
-
1. Load ticket info from Backlog/Jira
|
|
17
|
-
2. Read source code — understand architecture, related files, patterns
|
|
18
|
-
3. Ask clarifying questions if anything is unclear (one at a time)
|
|
19
|
-
4. Output `
|
|
20
|
-
- Requirements summary (AI's understanding)
|
|
21
|
-
- Source code analysis (related files, data flow)
|
|
22
|
-
- **Proposed solution** with options and recommendation
|
|
23
|
-
- **Impact analysis** — affected areas, risks
|
|
24
|
-
- **Effort estimate** (S/M/L/XL)
|
|
25
|
-
- Testing plan
|
|
26
|
-
|
|
27
|
-
**PM needs to prepare on the ticket:**
|
|
28
|
-
```markdown
|
|
29
|
-
## Description
|
|
30
|
-
Clear business requirement. Who uses it, and for what purpose.
|
|
31
|
-
|
|
32
|
-
## Acceptance Criteria
|
|
33
|
-
- [ ] [Condition for completion 1]
|
|
34
|
-
- [ ] [Condition for completion 2]
|
|
35
|
-
|
|
36
|
-
## Mockup / Wireframe
|
|
37
|
-
[Link or UI description]
|
|
38
|
-
|
|
39
|
-
## Context
|
|
40
|
-
Constraints, business rules specially requiring attention.
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**If ticket content is unclear:** AI will ask questions based on source code analysis — not just checking format.
|
|
44
|
-
|
|
45
|
-
**When satisfied with the requirement document, type:**
|
|
46
|
-
```
|
|
47
|
-
APPROVED
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Step 2: Review Implementation Plan (Gate 2)
|
|
53
|
-
|
|
54
|
-
AI generates a detailed implementation plan:
|
|
55
|
-
- TDD task breakdown (test first → implement → verify)
|
|
56
|
-
- Commit strategy (small, focused commits)
|
|
57
|
-
- Test commands
|
|
58
|
-
|
|
59
|
-
**When agreed, type:**
|
|
60
|
-
```
|
|
61
|
-
APPROVED
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**CODE WILL NOT BE GENERATED BEFORE RECEIVING "APPROVED".**
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Step 3: AI Generate Code (Gate 3)
|
|
69
|
-
|
|
70
|
-
AI performs automatically:
|
|
71
|
-
1. Complex feature (3+ files): `superpowers:subagent-driven-development`
|
|
72
|
-
2. Write tests FIRST → run → confirm FAIL
|
|
73
|
-
3. Implement → tests PASS
|
|
74
|
-
4. Commit each small step
|
|
75
|
-
|
|
76
|
-
Developer doesn't need to do anything at this step — just monitor.
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## Step 4: Review Summary (Gate 4)
|
|
81
|
-
|
|
82
|
-
AI runs:
|
|
83
|
-
1. `superpowers:verification-before-completion` — all tests PASS
|
|
84
|
-
2. `impact-analysis` — no breaking changes outside of scope
|
|
85
|
-
3. Review checklist — all items ticked
|
|
86
|
-
4. Create `
|
|
87
|
-
|
|
88
|
-
AI displays summary and waits for developer review.
|
|
89
|
-
|
|
90
|
-
**If OK, type:**
|
|
91
|
-
```
|
|
92
|
-
APPROVED
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**If there are bugs, type:**
|
|
96
|
-
```
|
|
97
|
-
BUG: [specific description]
|
|
98
|
-
```
|
|
99
|
-
- Coding bug → AI fixes → repeat Gate 4
|
|
100
|
-
- Requirement bug → AI returns to Gate 1, update requirement doc
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## Step 5: Peer Review & PR (Gate 5)
|
|
105
|
-
|
|
106
|
-
AI invokes `superpowers:requesting-code-review` and guides PR creation.
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
git push origin feature/PROJ-33-feature-name
|
|
110
|
-
# Create PR with full description following the template in AIFLOW.md
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Peer reviewer uses the `superpowers:receiving-code-review` skill during review.
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## Completion Checklist
|
|
118
|
-
|
|
119
|
-
- [ ] Gate 1 APPROVED — requirement doc with solution, impact, estimate
|
|
120
|
-
- [ ] Gate 2 APPROVED — implementation plan confirmed by developer
|
|
121
|
-
- [ ] Gate 3 done — code + tests are green
|
|
122
|
-
- [ ] Gate 4 APPROVED — summary + checklist complete
|
|
123
|
-
- [ ] Gate 5 done — PR is peer-reviewed and merged
|
|
1
|
+
# Feature Development Workflow
|
|
2
|
+
|
|
3
|
+
> See the full workflow at [AIFLOW.md](../../AIFLOW.md)
|
|
4
|
+
> **Gates must pass in order: 1 → 2 → 3 → 4 → 5**
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Step 1: Load ticket & AI analyzes (Gate 1)
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
aiflow use PROJ-33 # from Backlog/Jira
|
|
12
|
+
claude # AI auto-starts Gate 1
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
AI will **automatically**:
|
|
16
|
+
1. Load ticket info from Backlog/Jira
|
|
17
|
+
2. Read source code — understand architecture, related files, patterns
|
|
18
|
+
3. Ask clarifying questions if anything is unclear (one at a time)
|
|
19
|
+
4. Output `04.Coding/01.Requirements/[functionId]/[ticketId].md` containing:
|
|
20
|
+
- Requirements summary (AI's understanding)
|
|
21
|
+
- Source code analysis (related files, data flow)
|
|
22
|
+
- **Proposed solution** with options and recommendation
|
|
23
|
+
- **Impact analysis** — affected areas, risks
|
|
24
|
+
- **Effort estimate** (S/M/L/XL)
|
|
25
|
+
- Testing plan
|
|
26
|
+
|
|
27
|
+
**PM needs to prepare on the ticket:**
|
|
28
|
+
```markdown
|
|
29
|
+
## Description
|
|
30
|
+
Clear business requirement. Who uses it, and for what purpose.
|
|
31
|
+
|
|
32
|
+
## Acceptance Criteria
|
|
33
|
+
- [ ] [Condition for completion 1]
|
|
34
|
+
- [ ] [Condition for completion 2]
|
|
35
|
+
|
|
36
|
+
## Mockup / Wireframe
|
|
37
|
+
[Link or UI description]
|
|
38
|
+
|
|
39
|
+
## Context
|
|
40
|
+
Constraints, business rules specially requiring attention.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**If ticket content is unclear:** AI will ask questions based on source code analysis — not just checking format.
|
|
44
|
+
|
|
45
|
+
**When satisfied with the requirement document, type:**
|
|
46
|
+
```
|
|
47
|
+
APPROVED
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Step 2: Review Implementation Plan (Gate 2)
|
|
53
|
+
|
|
54
|
+
AI generates a detailed implementation plan:
|
|
55
|
+
- TDD task breakdown (test first → implement → verify)
|
|
56
|
+
- Commit strategy (small, focused commits)
|
|
57
|
+
- Test commands
|
|
58
|
+
|
|
59
|
+
**When agreed, type:**
|
|
60
|
+
```
|
|
61
|
+
APPROVED
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**CODE WILL NOT BE GENERATED BEFORE RECEIVING "APPROVED".**
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Step 3: AI Generate Code (Gate 3)
|
|
69
|
+
|
|
70
|
+
AI performs automatically:
|
|
71
|
+
1. Complex feature (3+ files): `superpowers:subagent-driven-development`
|
|
72
|
+
2. Write tests FIRST → run → confirm FAIL
|
|
73
|
+
3. Implement → tests PASS
|
|
74
|
+
4. Commit each small step
|
|
75
|
+
|
|
76
|
+
Developer doesn't need to do anything at this step — just monitor.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Step 4: Review Summary (Gate 4)
|
|
81
|
+
|
|
82
|
+
AI runs:
|
|
83
|
+
1. `superpowers:verification-before-completion` — all tests PASS
|
|
84
|
+
2. `impact-analysis` — no breaking changes outside of scope
|
|
85
|
+
3. Review checklist — all items ticked
|
|
86
|
+
4. Create `04.Coding/04.Reviews/[functionId]/[ticketId].md`
|
|
87
|
+
|
|
88
|
+
AI displays summary and waits for developer review.
|
|
89
|
+
|
|
90
|
+
**If OK, type:**
|
|
91
|
+
```
|
|
92
|
+
APPROVED
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**If there are bugs, type:**
|
|
96
|
+
```
|
|
97
|
+
BUG: [specific description]
|
|
98
|
+
```
|
|
99
|
+
- Coding bug → AI fixes → repeat Gate 4
|
|
100
|
+
- Requirement bug → AI returns to Gate 1, update requirement doc
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Step 5: Peer Review & PR (Gate 5)
|
|
105
|
+
|
|
106
|
+
AI invokes `superpowers:requesting-code-review` and guides PR creation.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
git push origin feature/PROJ-33-feature-name
|
|
110
|
+
# Create PR with full description following the template in AIFLOW.md
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Peer reviewer uses the `superpowers:receiving-code-review` skill during review.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Completion Checklist
|
|
118
|
+
|
|
119
|
+
- [ ] Gate 1 APPROVED — requirement doc with solution, impact, estimate
|
|
120
|
+
- [ ] Gate 2 APPROVED — implementation plan confirmed by developer
|
|
121
|
+
- [ ] Gate 3 done — code + tests are green
|
|
122
|
+
- [ ] Gate 4 APPROVED — summary + checklist complete
|
|
123
|
+
- [ ] Gate 5 done — PR is peer-reviewed and merged
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
package/scripts/checkpoint.js
CHANGED
|
File without changes
|
package/scripts/config.js
CHANGED
|
File without changes
|
package/scripts/context.js
CHANGED
|
File without changes
|
|
@@ -39,8 +39,8 @@ function parseLog(filePath) {
|
|
|
39
39
|
if (!user || user === '-' || user === '') continue;
|
|
40
40
|
|
|
41
41
|
const timestamp = cols[0] || '';
|
|
42
|
-
const command
|
|
43
|
-
const ticket
|
|
42
|
+
const command = cols[6] || '';
|
|
43
|
+
const ticket = cols[9] || '';
|
|
44
44
|
|
|
45
45
|
const date = timestamp.split(' ')[0]; // dd/MM/yyyy
|
|
46
46
|
|
|
@@ -74,10 +74,10 @@ function calcScore(u) {
|
|
|
74
74
|
if (events === 0) return 0;
|
|
75
75
|
|
|
76
76
|
// Gate aggregation
|
|
77
|
-
const gateStarted
|
|
78
|
-
const gateApproved
|
|
79
|
-
const ticketsStarted
|
|
80
|
-
const ticketsCompleted
|
|
77
|
+
const gateStarted = new Set(); // gate numbers
|
|
78
|
+
const gateApproved = new Set();
|
|
79
|
+
const ticketsStarted = new Set();
|
|
80
|
+
const ticketsCompleted = new Set(); // gate4.approved or gate5.start
|
|
81
81
|
|
|
82
82
|
for (const g of gateCmds) {
|
|
83
83
|
const hasTicket = g.ticket && g.ticket !== '-' && g.ticket !== '';
|
|
@@ -97,9 +97,9 @@ function calcScore(u) {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
const hasUse
|
|
101
|
-
const hasPrompt
|
|
102
|
-
const hasGuide
|
|
100
|
+
const hasUse = USE_CMDS.has('use') && rawCmds.has('use');
|
|
101
|
+
const hasPrompt = rawCmds.has('prompt');
|
|
102
|
+
const hasGuide = rawCmds.has('guide') || rawCmds.has('guideline') || rawCmds.has('sync-skills');
|
|
103
103
|
const hasGateHighApproved = gateApproved.has(3) || gateApproved.has(4);
|
|
104
104
|
|
|
105
105
|
// Score 5: gate 3-5 approved + ≥ 3 tickets completed
|
|
@@ -122,9 +122,9 @@ function calcScore(u) {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
const SCORE_LABELS = [
|
|
125
|
-
'
|
|
126
|
-
'
|
|
127
|
-
'
|
|
125
|
+
'Trong tuần không sử dụng lần nào',
|
|
126
|
+
'Rất ít dùng',
|
|
127
|
+
'Có sử dụng nhưng chưa bắt đầu workflow nào cả',
|
|
128
128
|
'Dùng có workflow',
|
|
129
129
|
'Hoàn thành workflow',
|
|
130
130
|
'Sử dụng thường xuyên workflow',
|
|
@@ -149,19 +149,19 @@ function buildRow(email, u) {
|
|
|
149
149
|
.sort();
|
|
150
150
|
|
|
151
151
|
// Compact gate summary
|
|
152
|
-
const startedGates
|
|
152
|
+
const startedGates = [...new Set(gateCmds.filter(g => g.type === 'start').map(g => g.gateNum))].sort((a, b) => a - b);
|
|
153
153
|
const approvedGates = [...new Set(gateCmds.filter(g => g.type === 'approved').map(g => g.gateNum))].sort((a, b) => a - b);
|
|
154
154
|
|
|
155
|
-
const ticketsStarted
|
|
156
|
-
const ticketsApproved
|
|
155
|
+
const ticketsStarted = [...new Set(gateCmds.filter(g => g.type === 'start' && g.ticket && g.ticket !== '-').map(g => g.ticket))];
|
|
156
|
+
const ticketsApproved = [...new Set(gateCmds.filter(g => g.type === 'approved' && g.ticket && g.ticket !== '-').map(g => g.ticket))];
|
|
157
157
|
const ticketsCompleted = [...new Set(gateCmds.filter(g =>
|
|
158
158
|
((g.type === 'approved' && g.gateNum >= 4) || (g.gateNum === 5 && g.type === 'start'))
|
|
159
159
|
&& g.ticket && g.ticket !== '-'
|
|
160
160
|
).map(g => g.ticket))];
|
|
161
161
|
|
|
162
|
-
const gateStartStr
|
|
162
|
+
const gateStartStr = startedGates.length ? `G${startedGates.join(',')} / ${ticketsStarted.length} ticket(s)` : '';
|
|
163
163
|
const gateApprovedStr = approvedGates.length ? `G${approvedGates.join(',')} / ${ticketsApproved.length} ticket(s)` : '';
|
|
164
|
-
const ticketsStr
|
|
164
|
+
const ticketsStr = ticketsCompleted.length ? ticketsCompleted.join(', ') : '';
|
|
165
165
|
|
|
166
166
|
// Notes
|
|
167
167
|
const onlyExploreCmds = [...rawCmds].every(c => EXPLORE_CMDS.has(c));
|
|
@@ -207,20 +207,20 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
207
207
|
const sheet = workbook.addWorksheet(`Score ${sheetLabel}`);
|
|
208
208
|
|
|
209
209
|
sheet.columns = [
|
|
210
|
-
{ key: 'no',
|
|
211
|
-
{ key: 'email',
|
|
212
|
-
{ key: 'events',
|
|
213
|
-
{ key: 'activeDays',
|
|
214
|
-
{ key: 'keyCommands',
|
|
215
|
-
{ key: 'gateStart',
|
|
210
|
+
{ key: 'no', width: 5 },
|
|
211
|
+
{ key: 'email', width: 30 },
|
|
212
|
+
{ key: 'events', width: 8 },
|
|
213
|
+
{ key: 'activeDays', width: 10 },
|
|
214
|
+
{ key: 'keyCommands', width: 40 },
|
|
215
|
+
{ key: 'gateStart', width: 24 },
|
|
216
216
|
{ key: 'gateApproved', width: 24 },
|
|
217
|
-
{ key: 'tickets',
|
|
218
|
-
{ key: 'depthScore',
|
|
219
|
-
{ key: 'depthLabel',
|
|
220
|
-
{ key: 'impactScore',
|
|
221
|
-
{ key: 'impactLabel',
|
|
222
|
-
{ key: 'totalScore',
|
|
223
|
-
{ key: 'notes',
|
|
217
|
+
{ key: 'tickets', width: 44 },
|
|
218
|
+
{ key: 'depthScore', width: 8 },
|
|
219
|
+
{ key: 'depthLabel', width: 28 },
|
|
220
|
+
{ key: 'impactScore', width: 8 },
|
|
221
|
+
{ key: 'impactLabel', width: 18 },
|
|
222
|
+
{ key: 'totalScore', width: 8 },
|
|
223
|
+
{ key: 'notes', width: 54 },
|
|
224
224
|
];
|
|
225
225
|
|
|
226
226
|
const border = {
|
|
@@ -232,9 +232,9 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
232
232
|
sheet.addRow([`AI Flow Kit — Weekly Score Report: ${fromLabel} – ${toLabel}`]);
|
|
233
233
|
sheet.mergeCells('A1:N1');
|
|
234
234
|
const title = sheet.getCell('A1');
|
|
235
|
-
title.font
|
|
235
|
+
title.font = { bold: true, size: 13, color: { argb: 'FF1F3864' } };
|
|
236
236
|
title.alignment = { vertical: 'middle', horizontal: 'center' };
|
|
237
|
-
title.fill
|
|
237
|
+
title.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFD6DCE4' } };
|
|
238
238
|
sheet.getRow(1).height = 28;
|
|
239
239
|
|
|
240
240
|
// Header row
|
|
@@ -247,10 +247,10 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
247
247
|
const hRow = sheet.addRow(HEADERS);
|
|
248
248
|
hRow.height = 36;
|
|
249
249
|
hRow.eachCell(cell => {
|
|
250
|
-
cell.fill
|
|
251
|
-
cell.font
|
|
250
|
+
cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF4472C4' } };
|
|
251
|
+
cell.font = { bold: true, color: { argb: 'FFFFFFFF' }, size: 11 };
|
|
252
252
|
cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };
|
|
253
|
-
cell.border
|
|
253
|
+
cell.border = border;
|
|
254
254
|
});
|
|
255
255
|
|
|
256
256
|
// Score → row color
|
|
@@ -276,7 +276,7 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
276
276
|
const fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: COLORS[row.depthScore] || 'FFFFFFFF' } };
|
|
277
277
|
r.eachCell({ includeEmpty: true }, (cell, col) => {
|
|
278
278
|
cell.border = border;
|
|
279
|
-
cell.fill
|
|
279
|
+
cell.fill = fill;
|
|
280
280
|
cell.alignment = (col <= 4 || (col >= 9 && col <= 13))
|
|
281
281
|
? { vertical: 'middle', horizontal: 'center' }
|
|
282
282
|
: { vertical: 'middle', horizontal: 'left', wrapText: false };
|
|
@@ -286,7 +286,7 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
286
286
|
r.getCell(13).value = { formula: `I${excelRowNum}+K${excelRowNum}` };
|
|
287
287
|
});
|
|
288
288
|
|
|
289
|
-
sheet.views
|
|
289
|
+
sheet.views = [{ state: 'frozen', ySplit: 2 }];
|
|
290
290
|
sheet.autoFilter = { from: 'A2', to: 'N2' };
|
|
291
291
|
|
|
292
292
|
await workbook.xlsx.writeFile(outputPath);
|
|
@@ -295,17 +295,14 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
295
295
|
|
|
296
296
|
// ── Canonical user list (fixed order) ─────────────────────────────────────
|
|
297
297
|
const CANONICAL_USERS = [
|
|
298
|
-
'anhtt@relipasoft.com',
|
|
299
298
|
'hoangdv@relipasoft.com',
|
|
300
299
|
'chinhtt@relipasoft.com',
|
|
301
|
-
'hieptv@relipasoft.com',
|
|
302
300
|
'phongnx@relipasoft.com',
|
|
303
301
|
'dungha@relipasoft.com',
|
|
304
302
|
'thangnv@relipasoft.com',
|
|
305
303
|
'nguyenlt@relipasoft.com',
|
|
306
304
|
'thuongvv@relipasoft.com',
|
|
307
305
|
'yenvtb@relipasoft.com',
|
|
308
|
-
'tructh@relipasoft.com',
|
|
309
306
|
'thainq@relipasoft.com',
|
|
310
307
|
'tuoittx@relipasoft.com',
|
|
311
308
|
'hungdv@relipasoft.com',
|
|
@@ -314,7 +311,7 @@ const CANONICAL_USERS = [
|
|
|
314
311
|
'huynq@relipasoft.com',
|
|
315
312
|
'thinhvq@relipasoft.com',
|
|
316
313
|
'banv@relipasoft.com',
|
|
317
|
-
'
|
|
314
|
+
'duongnt1@relipasoft.com',
|
|
318
315
|
'anhnt@relipasoft.com',
|
|
319
316
|
'khanhdd@relipasoft.com',
|
|
320
317
|
'hieunv@relipasoft.com',
|
|
@@ -322,9 +319,7 @@ const CANONICAL_USERS = [
|
|
|
322
319
|
|
|
323
320
|
// Log email → canonical email (for slight mismatches)
|
|
324
321
|
const LOG_EMAIL_ALIAS = {
|
|
325
|
-
|
|
326
|
-
'duongnt1@relipasoft.com': 'duongnt@relipasoft.com',
|
|
327
|
-
'anhtt2@relipasoft.com': 'anhtt@relipasoft.com',
|
|
322
|
+
|
|
328
323
|
};
|
|
329
324
|
|
|
330
325
|
const EMPTY_USER = (email) => ({
|
|
@@ -343,15 +338,14 @@ const EMPTY_USER = (email) => ({
|
|
|
343
338
|
? [dateMatch[1].replace(/-/g, '/'), dateMatch[2].replace(/-/g, '/')]
|
|
344
339
|
: ['?', '?'];
|
|
345
340
|
const sheetLabel = dateMatch
|
|
346
|
-
? `${dateMatch[1].slice(0,5).replace(/-/g,'.')}-${dateMatch[2].slice(0,5).replace(/-/g,'.')}.${dateMatch[1].slice(6,10)}`
|
|
341
|
+
? `${dateMatch[1].slice(0, 5).replace(/-/g, '.')}-${dateMatch[2].slice(0, 5).replace(/-/g, '.')}.${dateMatch[1].slice(6, 10)}`
|
|
347
342
|
: stem;
|
|
348
343
|
|
|
349
|
-
const logFile
|
|
344
|
+
const logFile = path.join(__dirname, '..', 'tellog', stem);
|
|
350
345
|
const outputFile = path.join(__dirname, '..', 'tellog', `${stem}.xlsx`);
|
|
351
346
|
|
|
352
347
|
const rawUsers = parseLog(logFile);
|
|
353
348
|
|
|
354
|
-
// Re-key log users using alias map (tructh → tructth, duongnt1 → duongnt)
|
|
355
349
|
const users = {};
|
|
356
350
|
for (const [logEmail, data] of Object.entries(rawUsers)) {
|
|
357
351
|
const canonical = LOG_EMAIL_ALIAS[logEmail] || logEmail;
|
package/scripts/detect.js
CHANGED
|
File without changes
|
package/scripts/doctor.js
CHANGED
|
File without changes
|
|
File without changes
|
package/scripts/guide.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -215,14 +215,16 @@ function buildContextPrompt(ctx, taskState) {
|
|
|
215
215
|
|
|
216
216
|
if (currentGate === 2) {
|
|
217
217
|
lines.push('Gate 1 is already APPROVED. The requirement document is at:');
|
|
218
|
-
lines.push(`
|
|
218
|
+
lines.push(` 04.Coding/01.Requirements/[functionId]/${ctx.taskId}.md`);
|
|
219
|
+
lines.push(` ([functionId] — look it up in 04.Coding/00.Overview/_Index.md or the folder containing ${ctx.taskId}.md)`);
|
|
219
220
|
lines.push('');
|
|
220
221
|
lines.push('Proceed to Gate 2: create the implementation plan.');
|
|
221
222
|
lines.push(buildModeInstruction(mode, 2));
|
|
222
223
|
} else if (currentGate === 3) {
|
|
223
224
|
lines.push('Gates 1 and 2 are already APPROVED. Plans are at:');
|
|
224
|
-
lines.push(`
|
|
225
|
-
lines.push(`
|
|
225
|
+
lines.push(` 04.Coding/01.Requirements/[functionId]/${ctx.taskId}.md`);
|
|
226
|
+
lines.push(` 04.Coding/02.Plans/[functionId]/${ctx.taskId}.md`);
|
|
227
|
+
lines.push(` ([functionId] — look it up in 04.Coding/00.Overview/_Index.md)`);
|
|
226
228
|
lines.push('');
|
|
227
229
|
lines.push('Proceed to Gate 3: implement code following the plan (TDD).');
|
|
228
230
|
lines.push(buildModeInstruction(mode, 3));
|
|
@@ -246,23 +248,26 @@ function buildContextPrompt(ctx, taskState) {
|
|
|
246
248
|
|
|
247
249
|
if (mode === 'fast') {
|
|
248
250
|
lines.push('**MODE: fast** — Use the FAST TRACK path in the skill:');
|
|
251
|
+
lines.push('- Pre-flight: determine functionId first (from context / input UC Spec file / ask DEV to confirm) — see the DEV workflow Pre-flight step');
|
|
249
252
|
lines.push('- Read ticket + identify changed files only (no deep source scan)');
|
|
250
253
|
lines.push('- Skip Q&A unless there is a critical blocking ambiguity');
|
|
251
|
-
lines.push('- Output a lite requirement doc (Sections 1, 3, 5 only)');
|
|
254
|
+
lines.push('- Output a lite requirement doc (Sections 1, 3, 5 only) to 04.Coding/01.Requirements/[functionId]/' + ctx.taskId + '.md');
|
|
252
255
|
lines.push('- Target: Gate 1 complete in < 5 minutes');
|
|
253
256
|
} else {
|
|
254
257
|
lines.push('Gate 1 process:');
|
|
258
|
+
lines.push('0. Pre-flight: determine functionId (from context / input UC Spec file / ask DEV to confirm) + ensure 04.Coding/ tree exists — see the DEV workflow Pre-flight step. DO NOT continue without functionId.');
|
|
255
259
|
lines.push('1. Read the ticket context above');
|
|
256
260
|
lines.push('2. Read CLAUDE.md — understand project architecture and conventions');
|
|
257
261
|
lines.push('3. Read source code — identify related files, data flow, patterns');
|
|
258
262
|
lines.push('4. If anything is unclear — ask ONE question at a time');
|
|
259
|
-
lines.push('5. Output
|
|
263
|
+
lines.push('5. Output 04.Coding/01.Requirements/[functionId]/' + ctx.taskId + '.md');
|
|
260
264
|
lines.push('6. Display GATE 1 prompt and wait for APPROVED');
|
|
261
265
|
}
|
|
262
266
|
|
|
263
267
|
lines.push('');
|
|
264
268
|
lines.push('DO NOT wait for the developer to ask. START NOW.');
|
|
265
269
|
lines.push('If you have not started automatically, begin as soon as the developer types **"start"**.');
|
|
270
|
+
lines.push('(If a later ticket switch does not seem to trigger this — e.g. `ak use` was run in another terminal while this chat was already open — the developer can run **`/coding`** to load it manually.)');
|
|
266
271
|
}
|
|
267
272
|
|
|
268
273
|
lines.push('</ACTIVE_TASK>');
|
|
File without changes
|
package/scripts/init.js
CHANGED
|
@@ -305,6 +305,11 @@ async function setupClaudeCommands(projectDir) {
|
|
|
305
305
|
dest: 'create-testcase.md',
|
|
306
306
|
description: 'QA 4-Gate TestCase Creation Workflow — converts raw requirements (SRS/Backlog/Jira/Spec file) into a complete, execution-ready Test Case set following the QA Workflow standard: Gate 1 (requirement & risk analysis), Gate 2 (scenario building), Gate 3 (detailed test case design), Gate 4 (review & optimization). Reads QA sub-skills from .claude/skills/test-skills/.',
|
|
307
307
|
},
|
|
308
|
+
{
|
|
309
|
+
src: path.join(PKG_DIR, 'custom', 'templates', 'shared', 'coding-workflow.md'),
|
|
310
|
+
dest: 'coding.md',
|
|
311
|
+
description: 'Manual trigger for the DEV 5-Gate Coding Workflow (bug-fix / feature / refactor / investigation / documentation). Use this when the SessionStart auto-start message was missed — e.g. a ticket was loaded with `ak use` while this chat session was already open.',
|
|
312
|
+
},
|
|
308
313
|
];
|
|
309
314
|
|
|
310
315
|
for (const cmd of commands) {
|
package/scripts/memory.js
CHANGED
|
File without changes
|
package/scripts/prompt.js
CHANGED
|
File without changes
|
package/scripts/remove.js
CHANGED
|
File without changes
|
package/scripts/review.js
CHANGED
|
File without changes
|
|
File without changes
|