pai-zero 0.7.14 → 0.8.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/dist/cli/index.js CHANGED
@@ -613,6 +613,18 @@ This project uses PAI (Plugin-based AI) for structured AI development.
613
613
  - **Config**: \`.pai/config.json\`
614
614
 
615
615
  Run \`pai env status\` to check setup, \`pai evaluate\` for quality scoring.
616
+
617
+ ### Global Rules
618
+
619
+ - **\uC2EC\uCE35 \uC778\uD130\uBDF0 \uC790\uB3D9 \uC218\uD589**: \uCEE8\uD14D\uC2A4\uD2B8\uAC00 \uBD80\uC871\uD558\uAC70\uB098 \uBAA8\uD638\uD55C \uACBD\uC6B0, AskUserQuestion \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uC5EC \uC2EC\uCE35 \uC778\uD130\uBDF0\uB97C \uC790\uB3D9\uC73C\uB85C \uC9C4\uD589\uD569\uB2C8\uB2E4. \uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 \uBC18\uB4DC\uC2DC \uC9C8\uBB38\uD558\uC138\uC694.
620
+ - **Ideation \u2192 PRD \uD30C\uC774\uD504\uB77C\uC778**: \`/pai design\` \uC2E4\uD589 \uC2DC ideation.md \u2192 openspec.md \uC21C\uC11C\uB85C \uC2EC\uCE35 \uC778\uD130\uBDF0\uB97C \uD1B5\uD574 \uC791\uC131\uD569\uB2C8\uB2E4.
621
+ - **\uAE30\uC220 \uC81C\uC57D \uD30C\uC545**: \uCF54\uB4DC \uC0DD\uC131 \uC804 \uAE30\uC220\uC801 \uC81C\uC57D \uC0AC\uD56D\uC744 \uC2EC\uCE35 \uC778\uD130\uBDF0\uB85C \uD655\uC778\uD569\uB2C8\uB2E4.
622
+ - **\uD558\uB124\uC2A4 \uC5D4\uC9C0\uB2C8\uC5B4\uB9C1**: AI \uC5D0\uC774\uC804\uD2B8\uAC00 \uC548\uC804\uD558\uAC8C \uC791\uC5C5\uD560 \uC218 \uC788\uB3C4\uB85D \uD14C\uC2A4\uD2B8/\uAC80\uC99D \uD658\uACBD\uC744 \uAD6C\uC131\uD569\uB2C8\uB2E4.
623
+ - **Git \uCEE4\uBC0B \uADDC\uCE59**: \uC791\uC5C5 \uB2E8\uC704\uBCC4\uB85C \uC758\uBBF8 \uC788\uB294 \uCEE4\uBC0B \uBA54\uC2DC\uC9C0\uB97C \uC791\uC131\uD569\uB2C8\uB2E4.
624
+
625
+ ### Contribution Guide
626
+
627
+ \uAE30\uC5EC\uC790\uB294 \`CONTRIBUTING.md\`\uB97C \uCC38\uACE0\uD558\uC138\uC694. \uC774 \uAC00\uC774\uB4DC\uB294 \`.claude/skills/\`\uC5D0 \uC2A4\uD0AC\uB85C \uB4F1\uB85D\uB418\uC5B4 \uC790\uB3D9 \uC801\uC6A9\uB429\uB2C8\uB2E4.
616
628
  </pai>
617
629
  `;
618
630
  return {
@@ -887,28 +899,143 @@ async function provisionGitHub(ctx) {
887
899
  `> \uB9C8\uC9C0\uB9C9 \uC5C5\uB370\uC774\uD2B8: ${now}`,
888
900
  "",
889
901
  "## \uC9C4\uD589 \uC911",
902
+ "- [ ] Ideation \uBB38\uC11C \uC791\uC131 \u2014 \uC2EC\uCE35 \uC778\uD130\uBDF0\uB97C \uD1B5\uD574 \uC544\uC774\uB514\uC5B4\uB97C \uAD6C\uCCB4\uD654 (\uB2F4\uB2F9: PAI > Design)",
890
903
  "",
891
904
  "## \uB2E4\uC74C \uB2E8\uACC4",
892
- `- [ ] docs/openspec.md PRD \uC791\uC131 (\uB2F4\uB2F9: PAI > Design)`,
905
+ "- [ ] Ideation \uAE30\uBC18 PRD \uC791\uC131 \u2014 \uC2EC\uCE35 \uC778\uD130\uBDF0\uB85C \uB9E5\uB77D/\uAE30\uC220 \uC81C\uC57D \uBCF4\uAC15",
906
+ "- [ ] \uD558\uB124\uC2A4 \uC5D4\uC9C0\uB2C8\uC5B4\uB9C1 \uAD6C\uC131 \uD655\uC778 \u2014 \uC5D0\uC774\uC804\uD2B8 \uC791\uC5C5 \uD658\uACBD \uAC80\uC99D",
907
+ "- [ ] AI \uCF54\uB4DC \uC0DD\uC131 \uC2DC\uC791",
893
908
  "",
894
909
  "## \uC644\uB8CC",
895
910
  `- [x] \uD504\uB85C\uC81D\uD2B8 \uCD08\uAE30\uD654 (${now}) (\uB2F4\uB2F9: PAI > Environment)`,
896
911
  "",
912
+ "## \uC791\uC5C5 \uD30C\uC774\uD504\uB77C\uC778",
913
+ "```",
914
+ "1. /pai design \u2192 Ideation \uC2EC\uCE35 \uC778\uD130\uBDF0 \u2192 docs/ideation.md \uC0DD\uC131",
915
+ "2. /pai design \u2192 PRD \uC2EC\uCE35 \uC778\uD130\uBDF0 \u2192 docs/openspec.md \uC791\uC131",
916
+ "3. /pai design \u2192 \uAE30\uC220 \uC81C\uC57D \uC2EC\uCE35 \uC778\uD130\uBDF0 \u2192 \uD558\uB124\uC2A4 \uC5D4\uC9C0\uB2C8\uC5B4\uB9C1 \uD655\uC778",
917
+ "4. AI \uCF54\uB4DC \uC0DD\uC131 \u2192 \uAC80\uC99D \u2192 \uD3C9\uAC00",
918
+ "```",
919
+ "",
897
920
  "## \uBA54\uBAA8",
898
- `- \uBAA8\uB4DC: ${ctx.mode}`
921
+ `- \uBAA8\uB4DC: ${ctx.mode}`,
922
+ "- \uCEE8\uD14D\uC2A4\uD2B8\uAC00 \uBD80\uC871\uD558\uBA74 AI\uAC00 \uC790\uB3D9\uC73C\uB85C \uC2EC\uCE35 \uC778\uD130\uBDF0\uB97C \uC9C4\uD589\uD569\uB2C8\uB2E4"
923
+ ].join("\n") + "\n");
924
+ }
925
+ const contribPath = join3(ctx.cwd, "CONTRIBUTING.md");
926
+ if (!await fs4.pathExists(contribPath)) {
927
+ await fs4.writeFile(contribPath, [
928
+ `# Contributing to ${ctx.projectName}`,
929
+ "",
930
+ "\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uAE30\uC5EC\uD574 \uC8FC\uC154\uC11C \uAC10\uC0AC\uD569\uB2C8\uB2E4.",
931
+ "",
932
+ "## \uAC1C\uBC1C \uD658\uACBD \uC124\uC815",
933
+ "",
934
+ "```bash",
935
+ "git clone <repo-url>",
936
+ "cd " + ctx.projectName,
937
+ "npm install",
938
+ "```",
939
+ "",
940
+ "## \uBE0C\uB79C\uCE58 \uADDC\uCE59",
941
+ "",
942
+ "- `main` \u2014 \uC548\uC815 \uBC84\uC804",
943
+ "- `feat/<\uAE30\uB2A5\uBA85>` \u2014 \uC0C8 \uAE30\uB2A5 \uAC1C\uBC1C",
944
+ "- `fix/<\uC774\uC288\uBC88\uD638>` \u2014 \uBC84\uADF8 \uC218\uC815",
945
+ "",
946
+ "## \uCEE4\uBC0B \uBA54\uC2DC\uC9C0",
947
+ "",
948
+ "```",
949
+ "feat: \uC0C8 \uAE30\uB2A5 \uCD94\uAC00",
950
+ "fix: \uBC84\uADF8 \uC218\uC815",
951
+ "docs: \uBB38\uC11C \uC218\uC815",
952
+ "refactor: \uB9AC\uD329\uD1A0\uB9C1",
953
+ "test: \uD14C\uC2A4\uD2B8 \uCD94\uAC00/\uC218\uC815",
954
+ "```",
955
+ "",
956
+ "## PR \uD504\uB85C\uC138\uC2A4",
957
+ "",
958
+ "1. \uBE0C\uB79C\uCE58 \uC0DD\uC131 \u2192 \uC791\uC5C5 \u2192 \uCEE4\uBC0B",
959
+ "2. `npm test` \uB85C \uD14C\uC2A4\uD2B8 \uD1B5\uACFC \uD655\uC778",
960
+ "3. PR \uC0DD\uC131 \u2014 \uBCC0\uACBD \uC0AC\uD56D \uC694\uC57D \uC791\uC131",
961
+ "4. \uB9AC\uBDF0 \uD6C4 \uBA38\uC9C0",
962
+ "",
963
+ "## AI \uD611\uC5C5 \uADDC\uCE59",
964
+ "",
965
+ "- `CLAUDE.md` \uB97C \uC77D\uACE0 \uD504\uB85C\uC81D\uD2B8 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uD30C\uC545\uD558\uC138\uC694",
966
+ "- `/pai evaluate` \uB85C AI \uC900\uBE44\uB3C4\uB97C \uD655\uC778\uD558\uC138\uC694",
967
+ "- \uCEE8\uD14D\uC2A4\uD2B8\uAC00 \uBD80\uC871\uD558\uBA74 \uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 \uC9C8\uBB38\uD558\uC138\uC694",
968
+ ""
969
+ ].join("\n") + "\n");
970
+ }
971
+ const contribSkillDir = join3(ctx.cwd, ".claude", "skills");
972
+ await fs4.ensureDir(contribSkillDir);
973
+ const contribSkillPath = join3(contribSkillDir, "contributing.md");
974
+ if (!await fs4.pathExists(contribSkillPath)) {
975
+ await fs4.writeFile(contribSkillPath, [
976
+ "---",
977
+ "name: contributing",
978
+ 'description: "\uAE30\uC5EC\uC790 \uAC00\uC774\uB4DC \u2014 \uBE0C\uB79C\uCE58 \uADDC\uCE59, \uCEE4\uBC0B \uBA54\uC2DC\uC9C0, PR \uD504\uB85C\uC138\uC2A4 \uC790\uB3D9 \uC801\uC6A9"',
979
+ "---",
980
+ "",
981
+ "# Contributing Guide",
982
+ "",
983
+ "\uD504\uB85C\uC81D\uD2B8 \uAE30\uC5EC \uC2DC `CONTRIBUTING.md`\uC758 \uADDC\uCE59\uC744 \uC790\uB3D9\uC73C\uB85C \uC801\uC6A9\uD569\uB2C8\uB2E4.",
984
+ "",
985
+ "## \uC790\uB3D9 \uC801\uC6A9 \uADDC\uCE59",
986
+ "",
987
+ "1. **\uBE0C\uB79C\uCE58**: `feat/`, `fix/`, `docs/`, `refactor/`, `test/` \uC811\uB450\uC0AC \uC0AC\uC6A9",
988
+ "2. **\uCEE4\uBC0B**: `feat:`, `fix:`, `docs:`, `refactor:`, `test:` \uD615\uC2DD",
989
+ "3. **PR**: \uBCC0\uACBD \uC0AC\uD56D \uC694\uC57D \uD544\uC218",
990
+ "4. **\uD14C\uC2A4\uD2B8**: PR \uC804 `npm test` \uD1B5\uACFC \uD544\uC218",
991
+ "",
992
+ "## \uC791\uC5C5 \uC2DC \uD655\uC778",
993
+ "",
994
+ "- `CONTRIBUTING.md` \uB97C \uC77D\uACE0 \uADDC\uCE59\uC744 \uB530\uB974\uC138\uC694",
995
+ "- \uCEE4\uBC0B \uBA54\uC2DC\uC9C0\uAC00 \uADDC\uCE59\uC5D0 \uB9DE\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694",
996
+ "- PR \uC0DD\uC131 \uC2DC \uBCC0\uACBD \uC0AC\uD56D\uC744 \uC694\uC57D\uD558\uC138\uC694",
997
+ ""
899
998
  ].join("\n") + "\n");
900
999
  }
901
1000
  const gitignorePath = join3(ctx.cwd, ".gitignore");
902
1001
  if (!await fs4.pathExists(gitignorePath)) {
903
1002
  await fs4.writeFile(gitignorePath, [
1003
+ "# Dependencies",
904
1004
  "node_modules/",
1005
+ "",
1006
+ "# Environment",
1007
+ ".env",
905
1008
  ".env.local",
906
1009
  ".env*.local",
1010
+ "",
1011
+ "# Build",
1012
+ "dist/",
1013
+ "build/",
1014
+ ".next/",
1015
+ "out/",
1016
+ "",
1017
+ "# Services",
907
1018
  ".vercel",
908
1019
  ".supabase",
909
- "dist/",
1020
+ "",
1021
+ "# OS",
910
1022
  ".DS_Store",
911
- "Thumbs.db"
1023
+ "Thumbs.db",
1024
+ "",
1025
+ "# IDE",
1026
+ ".idea/",
1027
+ ".vscode/settings.json",
1028
+ "*.swp",
1029
+ "*.swo",
1030
+ "",
1031
+ "# PAI / OMC state",
1032
+ ".omc/state/",
1033
+ ".omc/sessions/",
1034
+ ".omc/logs/",
1035
+ "",
1036
+ "# Logs",
1037
+ "*.log",
1038
+ "npm-debug.log*"
912
1039
  ].join("\n") + "\n");
913
1040
  }
914
1041
  }
@@ -1329,30 +1456,74 @@ PAI Doctor \u2014 \uD658\uACBD \uC9C4\uB2E8
1329
1456
  `,
1330
1457
  "design.md": `---
1331
1458
  name: "PAI: Design"
1332
- description: "OpenSpec PRD / OMC \uB3C4\uBA54\uC778 \uBAA8\uB378 \uC0DD\uC131 \uBC0F \uAC80\uC99D"
1459
+ description: "Ideation \u2192 PRD \u2192 \uD558\uB124\uC2A4 \uAD6C\uC131\uAE4C\uC9C0 \uC2EC\uCE35 \uC778\uD130\uBDF0 \uAE30\uBC18 \uC124\uACC4"
1333
1460
  ---
1334
1461
 
1335
- # PAI \uC124\uACC4 \uAD00\uB9AC
1462
+ # PAI \uC124\uACC4 \u2014 \uC2EC\uCE35 \uC778\uD130\uBDF0 \uAE30\uBC18 \uD30C\uC774\uD504\uB77C\uC778
1336
1463
 
1337
1464
  ## \uC778\uC790: $ARGUMENTS
1338
- - \uC778\uC790 \uC5C6\uC74C \uB610\uB294 \`init\` \u2192 \uD15C\uD50C\uB9BF \uC0DD\uC131 + \uAC80\uC99D
1465
+ - \uC778\uC790 \uC5C6\uC74C \u2192 \uC804\uCCB4 \uD30C\uC774\uD504\uB77C\uC778 (Ideation \u2192 PRD \u2192 \uD558\uB124\uC2A4)
1466
+ - \`ideation\` \u2192 Ideation\uB9CC \uC218\uD589
1467
+ - \`prd\` \u2192 PRD\uB9CC \uC218\uD589
1339
1468
  - \`validate\` \u2192 \uAC80\uC99D\uB9CC \uC218\uD589
1340
1469
 
1341
- ## \uC218\uD589\uD560 \uC791\uC5C5
1470
+ ## Phase 1: Ideation (\uC544\uC774\uB514\uC5B4 \uAD6C\uCCB4\uD654)
1471
+
1472
+ **\uBAA9\uD45C**: \uC0AC\uC6A9\uC790\uC758 \uBA38\uB9BF\uC18D \uC544\uC774\uB514\uC5B4\uB97C \`docs/ideation.md\`\uB85C \uAD6C\uCCB4\uD654
1473
+
1474
+ AskUserQuestion \uB3C4\uAD6C\uB85C \uC2EC\uCE35 \uC778\uD130\uBDF0\uB97C \uC9C4\uD589\uD558\uC138\uC694:
1475
+ 1. "\uC5B4\uB5A4 \uBB38\uC81C\uB97C \uD574\uACB0\uD558\uACE0 \uC2F6\uC73C\uC138\uC694?" \u2014 \uD575\uC2EC \uACFC\uC81C \uD30C\uC545
1476
+ 2. "\uC774 \uC11C\uBE44\uC2A4\uB97C \uC8FC\uB85C \uC0AC\uC6A9\uD560 \uC0AC\uB78C\uC740 \uB204\uAD6C\uC778\uAC00\uC694?" \u2014 \uB300\uC0C1 \uC0AC\uC6A9\uC790
1477
+ 3. "\uBE44\uC2B7\uD55C \uC11C\uBE44\uC2A4\uAC00 \uC788\uB2E4\uBA74 \uBB50\uAC00 \uB2E4\uB978\uAC00\uC694?" \u2014 \uCC28\uBCC4\uC810
1478
+ 4. "\uBC18\uB4DC\uC2DC \uC788\uC5B4\uC57C \uD560 \uAE30\uB2A5 3\uAC00\uC9C0\uB294?" \u2014 \uD575\uC2EC \uAE30\uB2A5
1479
+ 5. "\uC5B8\uC81C\uAE4C\uC9C0 \uB9CC\uB4E4\uACE0 \uC2F6\uC73C\uC138\uC694?" \u2014 \uC77C\uC815 \uC81C\uC57D
1480
+
1481
+ \uB2F5\uBCC0\uC744 \uC885\uD569\uD558\uC5EC \`docs/ideation.md\`\uB97C \uC0DD\uC131\uD558\uC138\uC694.
1482
+
1483
+ ## Phase 2: PRD \uC791\uC131 (\uC81C\uD488 \uC694\uAD6C\uC0AC\uD56D)
1484
+
1485
+ **\uBAA9\uD45C**: Ideation\uC744 \uAE30\uBC18\uC73C\uB85C \`docs/openspec.md\` PRD \uC791\uC131
1486
+
1487
+ \`docs/ideation.md\`\uB97C \uC77D\uACE0, \uBD80\uC871\uD55C \uB9E5\uB77D\uC740 AskUserQuestion\uC73C\uB85C \uBCF4\uAC15:
1488
+ 1. "\uAE30\uC220 \uC2A4\uD0DD \uC120\uD638\uAC00 \uC788\uC73C\uC138\uC694?" \u2014 \uD504\uB808\uC784\uC6CC\uD06C/\uC5B8\uC5B4 \uC81C\uC57D
1489
+ 2. "\uC678\uBD80 API \uC5F0\uB3D9\uC774 \uD544\uC694\uD55C\uAC00\uC694?" \u2014 \uC758\uC874\uC131 \uD30C\uC545
1490
+ 3. "\uB370\uC774\uD130\uB294 \uC5B4\uB5A4 \uAC83\uC744 \uC800\uC7A5\uD574\uC57C \uD558\uB098\uC694?" \u2014 DB \uC2A4\uD0A4\uB9C8 \uD78C\uD2B8
1491
+ 4. "\uB85C\uADF8\uC778/\uD68C\uC6D0\uAC00\uC785\uC774 \uD544\uC694\uD55C\uAC00\uC694?" \u2014 \uC778\uC99D \uBC94\uC704
1492
+
1493
+ \uB2F5\uBCC0\uC744 \uC885\uD569\uD558\uC5EC \`docs/openspec.md\` 5\uAC1C \uC139\uC158\uC744 \uC791\uC131:
1494
+ - \uBAA9\uC801 (Purpose)
1495
+ - \uC0AC\uC6A9\uC790 (Users)
1496
+ - \uD575\uC2EC \uAE30\uB2A5 (Features)
1497
+ - \uAE30\uC220 \uC2A4\uD0DD (Stack)
1498
+ - API \uC5D4\uB4DC\uD3EC\uC778\uD2B8
1499
+
1500
+ ## Phase 3: \uAE30\uC220 \uC81C\uC57D + \uD558\uB124\uC2A4 \uC5D4\uC9C0\uB2C8\uC5B4\uB9C1
1501
+
1502
+ **\uBAA9\uD45C**: AI \uC5D0\uC774\uC804\uD2B8\uAC00 \uC548\uC804\uD558\uAC8C \uC791\uC5C5\uD560 \uC218 \uC788\uB294 \uD658\uACBD \uD655\uC778
1503
+
1504
+ AskUserQuestion\uC73C\uB85C \uAE30\uC220\uC801 \uC81C\uC57D \uD30C\uC545:
1505
+ 1. "\uAE30\uC874\uC5D0 \uC0AC\uC6A9 \uC911\uC778 DB\uB098 \uC11C\uBC84\uAC00 \uC788\uB098\uC694?" \u2014 \uAE30\uC874 \uC778\uD504\uB77C
1506
+ 2. "\uBC30\uD3EC \uD658\uACBD\uC740 \uC5B4\uB514\uC778\uAC00\uC694?" \u2014 \uBC30\uD3EC \uC81C\uC57D
1507
+ 3. "\uD300\uC5D0\uC11C \uC0AC\uC6A9\uD558\uB294 \uCF54\uB529 \uADDC\uCE59\uC774 \uC788\uB098\uC694?" \u2014 \uC2A4\uD0C0\uC77C \uC81C\uC57D
1508
+
1509
+ \uD558\uB124\uC2A4 \uC5D4\uC9C0\uB2C8\uC5B4\uB9C1 \uD655\uC778:
1510
+ - \`CLAUDE.md\` \u2014 AI \uCEE8\uD14D\uC2A4\uD2B8 \uCDA9\uBD84\uD55C\uC9C0 \uAC80\uC99D
1511
+ - \`.claude/settings.json\` \u2014 \uAD8C\uD55C \uC124\uC815 \uC801\uC808\uD55C\uC9C0 \uD655\uC778
1512
+ - \uD14C\uC2A4\uD2B8 \uD658\uACBD \u2014 \`tests/\` \uB514\uB809\uD1A0\uB9AC + \uD14C\uC2A4\uD2B8 \uD504\uB808\uC784\uC6CC\uD06C \uC874\uC7AC \uD655\uC778
1513
+ - \uBD80\uC871\uD55C \uD56D\uBAA9\uC740 \uC790\uB3D9 \uC0DD\uC131 \uC81C\uC548
1514
+
1515
+ ## Phase 4: \uAC80\uC99D
1342
1516
 
1343
- ### \uD15C\uD50C\uB9BF \uC0DD\uC131 (init)
1344
- \`docs/openspec.md\`\uC640 \`.pai/omc.md\`\uAC00 \uC5C6\uC73C\uBA74 \uD15C\uD50C\uB9BF\uC744 \uC0DD\uC131\uD558\uC138\uC694.
1345
- \uC774\uBBF8 \uC874\uC7AC\uD558\uBA74 \uAC74\uB108\uB6F0\uC138\uC694.
1517
+ \uBAA8\uB4E0 Phase \uC644\uB8CC \uD6C4:
1518
+ 1. \`docs/ideation.md\` \uC874\uC7AC + \uB0B4\uC6A9 \uD655\uC778
1519
+ 2. \`docs/openspec.md\` 5\uAC1C \uC139\uC158 \uC644\uC131\uB3C4 \uAC80\uC99D
1520
+ 3. \`handoff.md\` \uC5C5\uB370\uC774\uD2B8 \u2014 \uC644\uB8CC\uB41C \uD56D\uBAA9 \uCCB4\uD06C, \uB2E4\uC74C \uB2E8\uACC4 \uAC31\uC2E0
1346
1521
 
1347
- ### \uAC80\uC99D (validate)
1348
- \`docs/openspec.md\`\uB97C \uC77D\uACE0 5\uAC1C \uC139\uC158 \uC644\uC131\uB3C4\uB97C \uAC80\uC99D\uD558\uC138\uC694:
1349
- 1. \uBAA9\uC801 (Purpose) \u2014 \uAD6C\uCCB4\uC801 \uC124\uBA85 \uC788\uB294\uAC00?
1350
- 2. \uC0AC\uC6A9\uC790 (Users) \u2014 \uCD5C\uC18C 1\uAC1C \uC5ED\uD560 \uC815\uC758?
1351
- 3. \uD575\uC2EC \uAE30\uB2A5 (Features) \u2014 \uCD5C\uC18C 1\uAC1C \uAE30\uB2A5 \uAE30\uC220?
1352
- 4. \uAE30\uC220 \uC2A4\uD0DD (Stack) \u2014 1\uAC1C \uC774\uC0C1 \uC815\uC758?
1353
- 5. API \uC5D4\uB4DC\uD3EC\uC778\uD2B8 \u2014 \uCD5C\uC18C 1\uAC1C \uC815\uC758?
1522
+ ## \uC911\uC694 \uC6D0\uCE59
1354
1523
 
1355
- \uBBF8\uC791\uC131 \uC139\uC158\uC740 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC548\uB0B4\uD558\uACE0, \uC6D0\uD558\uBA74 \uD568\uAED8 \uC791\uC131\uC744 \uB3C4\uC640\uC8FC\uC138\uC694.
1524
+ - **\uCD94\uCE21 \uAE08\uC9C0**: \uCEE8\uD14D\uC2A4\uD2B8\uAC00 \uBD80\uC871\uD558\uBA74 \uBC18\uB4DC\uC2DC AskUserQuestion\uC73C\uB85C \uC9C8\uBB38
1525
+ - **\uC774\uBBF8 \uC874\uC7AC\uD558\uB294 \uD30C\uC77C \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uC74C** \u2014 \uBCF4\uAC15\uB9CC \uC81C\uC548
1526
+ - **\uAC01 Phase \uC644\uB8CC \uC2DC \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uACB0\uACFC \uC694\uC57D** \uBCF4\uACE0
1356
1527
  `,
1357
1528
  "validate.md": `---
1358
1529
  name: "PAI: Validate"