pai-zero 0.7.15 → 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,30 +900,143 @@ async function provisionGitHub(ctx) {
888
900
  `> \uB9C8\uC9C0\uB9C9 \uC5C5\uB370\uC774\uD2B8: ${now}`,
889
901
  "",
890
902
  "## \uC9C4\uD589 \uC911",
891
- `- [ ] PRD \uBB38\uC11C \uC791\uC131 \u2014 \`/pai design\` \uC2E4\uD589 \uB610\uB294 \`docs/openspec.md\` \uC9C1\uC811 \uD3B8\uC9D1 (\uB2F4\uB2F9: PAI > Design)`,
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)",
892
904
  "",
893
905
  "## \uB2E4\uC74C \uB2E8\uACC4",
894
- "- [ ] PRD \uC644\uC131 \uD6C4 AI \uCF54\uB4DC \uC0DD\uC131 \uC2DC\uC791",
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",
895
909
  "",
896
910
  "## \uC644\uB8CC",
897
911
  `- [x] \uD504\uB85C\uC81D\uD2B8 \uCD08\uAE30\uD654 (${now}) (\uB2F4\uB2F9: PAI > Environment)`,
898
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
+ "",
899
921
  "## \uBA54\uBAA8",
900
922
  `- \uBAA8\uB4DC: ${ctx.mode}`,
901
- "- Claude Code \uC2DC\uC791 \uD6C4 \uCCAB \uC791\uC5C5: `/pai design` \uC73C\uB85C PRD \uC791\uC131"
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
+ ""
902
999
  ].join("\n") + "\n");
903
1000
  }
904
1001
  const gitignorePath = join3(ctx.cwd, ".gitignore");
905
1002
  if (!await fs4.pathExists(gitignorePath)) {
906
1003
  await fs4.writeFile(gitignorePath, [
1004
+ "# Dependencies",
907
1005
  "node_modules/",
1006
+ "",
1007
+ "# Environment",
1008
+ ".env",
908
1009
  ".env.local",
909
1010
  ".env*.local",
1011
+ "",
1012
+ "# Build",
1013
+ "dist/",
1014
+ "build/",
1015
+ ".next/",
1016
+ "out/",
1017
+ "",
1018
+ "# Services",
910
1019
  ".vercel",
911
1020
  ".supabase",
912
- "dist/",
1021
+ "",
1022
+ "# OS",
913
1023
  ".DS_Store",
914
- "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*"
915
1040
  ].join("\n") + "\n");
916
1041
  }
917
1042
  }
@@ -1332,30 +1457,74 @@ PAI Doctor \u2014 \uD658\uACBD \uC9C4\uB2E8
1332
1457
  `,
1333
1458
  "design.md": `---
1334
1459
  name: "PAI: Design"
1335
- 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"
1336
1461
  ---
1337
1462
 
1338
- # PAI \uC124\uACC4 \uAD00\uB9AC
1463
+ # PAI \uC124\uACC4 \u2014 \uC2EC\uCE35 \uC778\uD130\uBDF0 \uAE30\uBC18 \uD30C\uC774\uD504\uB77C\uC778
1339
1464
 
1340
1465
  ## \uC778\uC790: $ARGUMENTS
1341
- - \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
1342
1469
  - \`validate\` \u2192 \uAC80\uC99D\uB9CC \uC218\uD589
1343
1470
 
1344
- ## \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
1345
1517
 
1346
- ### \uD15C\uD50C\uB9BF \uC0DD\uC131 (init)
1347
- \`docs/openspec.md\`\uC640 \`.pai/omc.md\`\uAC00 \uC5C6\uC73C\uBA74 \uD15C\uD50C\uB9BF\uC744 \uC0DD\uC131\uD558\uC138\uC694.
1348
- \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
1349
1522
 
1350
- ### \uAC80\uC99D (validate)
1351
- \`docs/openspec.md\`\uB97C \uC77D\uACE0 5\uAC1C \uC139\uC158 \uC644\uC131\uB3C4\uB97C \uAC80\uC99D\uD558\uC138\uC694:
1352
- 1. \uBAA9\uC801 (Purpose) \u2014 \uAD6C\uCCB4\uC801 \uC124\uBA85 \uC788\uB294\uAC00?
1353
- 2. \uC0AC\uC6A9\uC790 (Users) \u2014 \uCD5C\uC18C 1\uAC1C \uC5ED\uD560 \uC815\uC758?
1354
- 3. \uD575\uC2EC \uAE30\uB2A5 (Features) \u2014 \uCD5C\uC18C 1\uAC1C \uAE30\uB2A5 \uAE30\uC220?
1355
- 4. \uAE30\uC220 \uC2A4\uD0DD (Stack) \u2014 1\uAC1C \uC774\uC0C1 \uC815\uC758?
1356
- 5. API \uC5D4\uB4DC\uD3EC\uC778\uD2B8 \u2014 \uCD5C\uC18C 1\uAC1C \uC815\uC758?
1523
+ ## \uC911\uC694 \uC6D0\uCE59
1357
1524
 
1358
- \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
1359
1528
  `,
1360
1529
  "validate.md": `---
1361
1530
  name: "PAI: Validate"