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