aiwf 0.3.8 → 0.3.12
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/CHANGELOG.md +97 -0
- package/README.ko.md +114 -28
- package/README.md +152 -40
- package/docs/AI-WORKFLOW.md +121 -19
- package/docs/API_DOCUMENTATION.md +1 -1
- package/docs/API_REFERENCE.md +1 -1
- package/docs/CLI_USAGE_GUIDE.ko.md +634 -0
- package/docs/CLI_USAGE_GUIDE.md +339 -178
- package/docs/COMMANDS_GUIDE.ko.md +308 -4
- package/docs/COMMANDS_GUIDE.md +117 -0
- package/docs/CONTRIBUTING.ko.md +6 -6
- package/docs/CONTRIBUTING.md +6 -6
- package/docs/DEVELOPMENT_GUIDE.ko.md +440 -0
- package/docs/DEVELOPMENT_GUIDE.md +1 -1
- package/docs/EXAMPLES.md +8 -6
- package/docs/GETTING_STARTED.md +6 -3
- package/docs/STATE_MANAGEMENT_GUIDE.ko.md +278 -0
- package/docs/STATE_MANAGEMENT_GUIDE.md +278 -0
- package/docs/TROUBLESHOOTING.md +14 -13
- package/docs/guides/checkpoint-system-guide-ko.md +356 -0
- package/docs/guides/checkpoint-system-guide.md +356 -0
- package/docs/guides/independent-sprint-guide-ko.md +321 -0
- package/docs/guides/independent-sprint-guide.md +321 -0
- package/package.json +30 -3
- package/scripts/update-file-lists.js +267 -0
- package/src/cli/checkpoint-cli.js +417 -0
- package/src/cli/index.js +337 -50
- package/src/cli/sprint-cli.js +287 -0
- package/src/commands/sprint-independent.js +393 -0
- package/src/commands/state-refactored.js +419 -0
- package/src/commands/state.js +1164 -0
- package/src/commands/yolo-config.js +502 -0
- package/src/config/file-lists.js +147 -0
- package/src/config/yolo-config-template.yaml +168 -0
- package/src/lib/file-downloader.js +7 -72
- package/src/lib/github-integration.js +402 -0
- package/src/lib/resource-loader-enhanced.js +399 -0
- package/src/lib/state/priority-calculator.js +217 -0
- package/src/lib/state/state-index.js +155 -0
- package/src/lib/state/task-scanner.js +328 -0
- package/src/utils/checkpoint-manager.js +425 -0
- package/src/utils/engineering-guard.js +389 -0
- package/.aiwf/00_PROJECT_MANIFEST.md +0 -420
- package/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +0 -121
- package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_ADVANCED_USE_CASES.md +0 -412
- package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_API_REFERENCE.md +0 -361
- package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_COMMANDS_GUIDE.md +0 -254
- package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_FAQ.md +0 -365
- package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_SYSTEM_OVERVIEW.md +0 -305
- package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_USER_GUIDE.md +0 -416
- package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_/354/213/234/354/236/221_/352/260/200/354/235/264/353/223/234.md +0 -247
- package/.aiwf/02_REQUIREMENTS/CLAUDE.md +0 -78
- package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/M02_milestone_meta.md +0 -34
- package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/PRD_Context_Engineering_Enhancement.md +0 -108
- package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_AI_Persona_System.md +0 -299
- package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_Feature_Ledger_System.md +0 -330
- package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_Token_Optimization.md +0 -833
- package/.aiwf/02_REQUIREMENTS/M03_Simone_Integration_Enhancement/M03_milestone_meta.md +0 -55
- package/.aiwf/02_REQUIREMENTS/M03_Simone_Integration_Enhancement/SPECS_AIWF_Simplified_Plan.md +0 -221
- package/.aiwf/03_SPRINTS/CLAUDE.md +0 -83
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/S01_M02_sprint_meta.md +0 -95
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX01_S01_Feature_Ledger_/353/215/260/354/235/264/355/204/260_/352/265/254/354/241/260_/354/204/244/352/263/204.md +0 -111
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX02_S01_Feature_Ledger_CLI_/353/252/205/353/240/271/354/226/264_/352/260/234/353/260/234.md +0 -115
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX03_S01_Git_/354/227/260/353/217/231_Feature_/354/266/224/354/240/201.md +0 -141
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX04_S01_Feature_Ledger_/353/254/270/354/204/234/355/231/224.md +0 -114
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX05_S01_AI_/355/216/230/353/245/264/354/206/214/353/202/230_/353/215/260/354/235/264/355/204/260_/352/265/254/354/241/260_/354/204/244/352/263/204.md +0 -123
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX06_S01_/355/216/230/353/245/264/354/206/214/353/202/230_/352/264/200/353/246/254_/353/252/205/353/240/271/354/226/264_/352/265/254/355/230/204.md +0 -114
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX07_S01_Context_/354/225/225/354/266/225_/354/225/204/355/202/244/355/205/215/354/262/230_/354/204/244/352/263/204.md +0 -114
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX08_S01_/355/206/240/355/201/260_/354/266/224/354/240/201_/354/213/234/354/212/244/355/205/234_/355/224/204/353/241/234/355/206/240/355/203/200/354/236/205.md +0 -112
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX09_S01_/354/225/225/354/266/225_/354/225/214/352/263/240/353/246/254/354/246/230_/355/224/204/353/241/234/355/206/240/355/203/200/354/236/205.md +0 -118
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX10_S01_update_docs_/353/252/205/353/240/271/354/226/264_/353/263/265/352/265/254.md +0 -118
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX11_S01_/355/206/265/355/225/251_/355/205/214/354/212/244/355/212/270_Suite_/352/265/254/354/266/225.md +0 -128
- package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX12_S01_/354/204/261/353/212/245_/354/265/234/354/240/201/355/231/224_/353/260/217_/353/254/270/354/204/234/355/231/224.md +0 -122
- package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/S02_M02_sprint_meta.md +0 -107
- package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX01_S02_AI_/355/216/230/353/245/264/354/206/214/353/202/230_/353/252/205/353/240/271/354/226/264_/352/265/254/355/230/204.md +0 -129
- package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX02_S02_/355/216/230/353/245/264/354/206/214/353/202/230_/354/273/250/355/205/215/354/212/244/355/212/270_/354/240/201/354/232/251_/354/213/234/354/212/244/355/205/234.md +0 -152
- package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX03_S02_Context_/354/225/225/354/266/225_/354/225/214/352/263/240/353/246/254/354/246/230_/352/265/254/355/230/204.md +0 -186
- package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX05_S02_S02_/355/206/265/355/225/251_/355/205/214/354/212/244/355/212/270_/353/260/217_/353/254/270/354/204/234/355/231/224.md +0 -192
- package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX4_S02_Feature_Git_/354/227/260/353/217/231_/353/260/217_/354/236/220/353/217/231/355/231/224.md +0 -162
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_FINAL_SPRINT_SUMMARY.md +0 -137
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_M02_sprint_meta.md +0 -217
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T01_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T02_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T03_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T04_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T05_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T06_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T07_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T08_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T09_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T100_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T101_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T102_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T103_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T104_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T105_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T106_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T107_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T108_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T109_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T10_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T110_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T111_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T112_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T11_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T12_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T13_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T14_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T15_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T16_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T17_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T18_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T19_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T20_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T21_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T22_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T23_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T24_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T25_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T26_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T27_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T28_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T29_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T30_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T31_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T32_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T33_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T34_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T35_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T36_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T37_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T38_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T39_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T40_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T41_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T42_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T43_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T44_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T45_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T46_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T47_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T48_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T49_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T50_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T51_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T52_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T53_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T54_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T55_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T56_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T57_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T58_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T59_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T60_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T61_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T62_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T63_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T64_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T65_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T66_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T67_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T68_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T69_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T70_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T71_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T72_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T73_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T74_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T75_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T76_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T77_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T78_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T79_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T80_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T81_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T82_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T83_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T84_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T85_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T86_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T87_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T88_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T89_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T90_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T91_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T92_S03_task_with_special_characters.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T93_S03_test.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T94_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T95_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T96_S03_next_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T97_S03_new_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T98_S03_first_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T99_S03_test_task.md +0 -39
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX14_S03_M02_/353/247/210/354/235/274/354/212/244/355/206/244_/354/265/234/354/242/205_/352/262/200/354/246/235_/353/260/217_/353/254/270/354/204/234/355/231/224.md +0 -214
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX15_S03_/352/270/260/353/263/270_/355/224/204/353/241/234/354/240/235/355/212/270_/355/205/234/355/224/214/353/246/277_/352/260/234/353/260/234.md +0 -177
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX16_S03_/354/230/244/355/224/204/353/235/274/354/235/270_/355/205/234/355/224/214/353/246/277_/354/272/220/354/213/234_/354/213/234/354/212/244/355/205/234.md +0 -206
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX_T13_S03_AI_/353/217/204/352/265/254_/355/206/265/355/225/251_/355/205/234/355/224/214/353/246/277_/352/260/234/353/260/234.md +0 -151
- package/.aiwf/04_GENERAL_TASKS/CLAUDE.md +0 -96
- package/.aiwf/04_GENERAL_TASKS/TX001_complete_english_translation.md +0 -127
- package/.aiwf/06_FEATURE_LEDGERS/FEATURE_GIT_INTEGRATION.md +0 -314
- package/.aiwf/06_FEATURE_LEDGERS/FEATURE_INTEGRATION_GUIDE.md +0 -227
- package/.aiwf/06_FEATURE_LEDGERS/FEATURE_LEDGER_INDEX.md +0 -23
- package/.aiwf/06_FEATURE_LEDGERS/FEATURE_SCHEMA.md +0 -205
- package/.aiwf/06_FEATURE_LEDGERS/FEATURE_STATE_DIAGRAM.md +0 -190
- package/.aiwf/06_FEATURE_LEDGERS/active/FL001_user_authentication_system.md +0 -47
- package/.aiwf/06_FEATURE_LEDGERS/active/FL002_user_authentication_system.md +0 -47
- package/.aiwf/07_AI_PERSONAS/PERSONA_INDEX.md +0 -57
- package/.aiwf/07_AI_PERSONAS/architect/best_practices.md +0 -104
- package/.aiwf/07_AI_PERSONAS/architect/context_rules.md +0 -46
- package/.aiwf/07_AI_PERSONAS/architect/knowledge_base.md +0 -235
- package/.aiwf/07_AI_PERSONAS/backend/best_practices.md +0 -363
- package/.aiwf/07_AI_PERSONAS/backend/context_rules.md +0 -61
- package/.aiwf/07_AI_PERSONAS/backend/knowledge_base.md +0 -623
- package/.aiwf/07_AI_PERSONAS/data_analyst/best_practices.md +0 -32
- package/.aiwf/07_AI_PERSONAS/data_analyst/context_rules.md +0 -43
- package/.aiwf/07_AI_PERSONAS/data_analyst/knowledge_base.md +0 -36
- package/.aiwf/07_AI_PERSONAS/frontend/best_practices.md +0 -31
- package/.aiwf/07_AI_PERSONAS/frontend/context_rules.md +0 -43
- package/.aiwf/07_AI_PERSONAS/frontend/knowledge_base.md +0 -32
- package/.aiwf/07_AI_PERSONAS/security/best_practices.md +0 -63
- package/.aiwf/07_AI_PERSONAS/security/context_rules.md +0 -53
- package/.aiwf/07_AI_PERSONAS/security/knowledge_base.md +0 -93
- package/.aiwf/10_PERSONAS/active.json +0 -1
- package/.aiwf/10_PERSONAS/developer.md +0 -37
- package/.aiwf/10_STATE_OF_PROJECT/2025-07-09-07-20-solid-progress.md +0 -144
- package/.aiwf/98_PROMPTS/SAAS_DEVELOPMENT_GUIDE.md +0 -302
- package/.aiwf/98_PROMPTS/github_integration.md +0 -130
- package/.aiwf/98_PROMPTS/useful-prompts.md +0 -31
- package/.aiwf/98_PROMPTS/vibe-front-prompts.md +0 -89
- package/.aiwf/99_TEMPLATES/adr_template.md +0 -49
- package/.aiwf/99_TEMPLATES/feature_template.md +0 -263
- package/.aiwf/99_TEMPLATES/milestone_meta_template.md +0 -25
- package/.aiwf/99_TEMPLATES/project_manifest_template.md +0 -39
- package/.aiwf/99_TEMPLATES/sprint_meta_template.md +0 -23
- package/.aiwf/99_TEMPLATES/task_template.md +0 -36
- package/.aiwf/CLAUDE.md +0 -76
- package/.aiwf/ai-tools/README.md +0 -105
- package/.aiwf/ai-tools/augment/README.md +0 -371
- package/.aiwf/ai-tools/augment/config.json +0 -30
- package/.aiwf/ai-tools/augment/template/.augment/aiwf-integration.md +0 -387
- package/.aiwf/ai-tools/augment/template/.augment/augment.yaml +0 -347
- package/.aiwf/ai-tools/augment/template/augment.config.json +0 -64
- package/.aiwf/ai-tools/claude-code/README.md +0 -151
- package/.aiwf/ai-tools/claude-code/config.json +0 -28
- package/.aiwf/ai-tools/claude-code/template/CLAUDE.md +0 -91
- package/.aiwf/ai-tools/cursor/README.md +0 -314
- package/.aiwf/ai-tools/cursor/config.json +0 -29
- package/.aiwf/ai-tools/cursor/template/.cursorrules +0 -362
- package/.aiwf/ai-tools/github-copilot/README.md +0 -195
- package/.aiwf/ai-tools/github-copilot/config.json +0 -24
- package/.aiwf/ai-tools/github-copilot/template/.github/copilot-instructions.md +0 -202
- package/.aiwf/ai-tools/windsurf/README.md +0 -355
- package/.aiwf/ai-tools/windsurf/config.json +0 -29
- package/.aiwf/ai-tools/windsurf/template/.windsurf/aiwf-rules.md +0 -260
- package/.aiwf/ai-tools/windsurf/template/.windsurf/windsurf.config.js +0 -312
- package/.aiwf/ai-tools/windsurf/template/windsurf.config.json +0 -63
- package/.aiwf/config/language.json +0 -6
- package/.aiwf/feature-ledger/FL-001-authentication.json +0 -52
- package/.aiwf/feature-ledger/feature-index.json +0 -20
- package/.aiwf/installed.flag +0 -1
- package/.aiwf/metrics/metrics.json +0 -18
- package/.aiwf/personas/analyst.json +0 -44
- package/.aiwf/personas/architect/best_practices.md +0 -136
- package/.aiwf/personas/architect/knowledge_base.md +0 -377
- package/.aiwf/personas/architect.json +0 -44
- package/.aiwf/personas/backend/best_practices.md +0 -766
- package/.aiwf/personas/backend/knowledge_base.md +0 -1070
- package/.aiwf/personas/current.json +0 -5
- package/.aiwf/personas/data_analyst/best_practices.md +0 -594
- package/.aiwf/personas/data_analyst/knowledge_base.md +0 -1057
- package/.aiwf/personas/developer.json +0 -44
- package/.aiwf/personas/evaluation_criteria.json +0 -137
- package/.aiwf/personas/frontend/best_practices.md +0 -445
- package/.aiwf/personas/frontend/knowledge_base.md +0 -729
- package/.aiwf/personas/persona-index.json +0 -31
- package/.aiwf/personas/reviewer.json +0 -44
- package/.aiwf/personas/security/best_practices.md +0 -307
- package/.aiwf/personas/security/knowledge_base.md +0 -498
- package/.aiwf/personas/tester.json +0 -44
- package/.aiwf/scripts/cache-templates.js +0 -209
- package/.aiwf/scripts/create-offline.js +0 -86
- package/.aiwf/scripts/create-project.js +0 -151
- package/.aiwf/scripts/feature-progress-calculator.cjs +0 -236
- package/.aiwf/scripts/git-integration.cjs +0 -391
- package/.aiwf/scripts/install-git-hooks.cjs +0 -226
- package/.aiwf/scripts/test-commit-parsing.cjs +0 -125
- package/.aiwf/scripts/update-feature-status.cjs +0 -198
- package/.aiwf/test-results-s02.json +0 -36
- package/.claude/commands/aiwf/aiwf_add_task_to_sprint.md +0 -283
- package/.claude/commands/aiwf/aiwf_changelog.md +0 -82
- package/.claude/commands/aiwf/aiwf_code_review.md +0 -88
- package/.claude/commands/aiwf/aiwf_commit.md +0 -160
- package/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +0 -41
- package/.claude/commands/aiwf/aiwf_compress_context.md +0 -116
- package/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +0 -35
- package/.claude/commands/aiwf/aiwf_compress_stats.md +0 -30
- package/.claude/commands/aiwf/aiwf_compress_with_persona.md +0 -38
- package/.claude/commands/aiwf/aiwf_create_feature_ledger.md +0 -54
- package/.claude/commands/aiwf/aiwf_create_general_task.md +0 -147
- package/.claude/commands/aiwf/aiwf_create_milestone_plan.md +0 -194
- package/.claude/commands/aiwf/aiwf_create_prd.md +0 -280
- package/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +0 -189
- package/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +0 -121
- package/.claude/commands/aiwf/aiwf_default_mode.md +0 -44
- package/.claude/commands/aiwf/aiwf_discuss_review.md +0 -29
- package/.claude/commands/aiwf/aiwf_do_task.md +0 -109
- package/.claude/commands/aiwf/aiwf_docs.md +0 -225
- package/.claude/commands/aiwf/aiwf_evaluate.md +0 -79
- package/.claude/commands/aiwf/aiwf_get_feature_details.md +0 -78
- package/.claude/commands/aiwf/aiwf_infinite.md +0 -202
- package/.claude/commands/aiwf/aiwf_initialize.md +0 -134
- package/.claude/commands/aiwf/aiwf_install_git_hooks.md +0 -63
- package/.claude/commands/aiwf/aiwf_issue_create.md +0 -65
- package/.claude/commands/aiwf/aiwf_link_feature_branch.md +0 -43
- package/.claude/commands/aiwf/aiwf_link_feature_commit.md +0 -46
- package/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +0 -57
- package/.claude/commands/aiwf/aiwf_list_features.md +0 -54
- package/.claude/commands/aiwf/aiwf_mermaid.md +0 -272
- package/.claude/commands/aiwf/aiwf_persona_architect.md +0 -48
- package/.claude/commands/aiwf/aiwf_persona_backend.md +0 -37
- package/.claude/commands/aiwf/aiwf_persona_data_analyst.md +0 -37
- package/.claude/commands/aiwf/aiwf_persona_frontend.md +0 -37
- package/.claude/commands/aiwf/aiwf_persona_security.md +0 -48
- package/.claude/commands/aiwf/aiwf_persona_status.md +0 -50
- package/.claude/commands/aiwf/aiwf_pr_create.md +0 -76
- package/.claude/commands/aiwf/aiwf_prime.md +0 -9
- package/.claude/commands/aiwf/aiwf_project_review.md +0 -261
- package/.claude/commands/aiwf/aiwf_switch_language.md +0 -88
- package/.claude/commands/aiwf/aiwf_test.md +0 -124
- package/.claude/commands/aiwf/aiwf_testing_review.md +0 -198
- package/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +0 -210
- package/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +0 -460
- package/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +0 -165
- package/.claude/commands/aiwf/aiwf_ultrathink_general.md +0 -305
- package/.claude/commands/aiwf/aiwf_update_docs_kr.md +0 -25
- package/.claude/commands/aiwf/aiwf_update_feature_status.md +0 -53
- package/.claude/commands/aiwf/aiwf_yolo.md +0 -300
- package/.eslintrc.json +0 -26
- package/.prettierrc +0 -10
- package/CLAUDE.md +0 -254
- package/RELEASE_NOTES_M02.md +0 -177
- package/TEST_RECOVERY_PLAN.md +0 -68
- package/claude-code/aiwf/en/.aiwf/00_PROJECT_MANIFEST.md +0 -49
- package/claude-code/aiwf/en/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +0 -55
- package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/CLAUDE.md +0 -78
- package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/M01_milestone_meta.md +0 -42
- package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_AMEND_01_Auth_Flow_Update.md +0 -73
- package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_Backend_Setup.md +0 -98
- package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/SPECS_API_V1.md +0 -232
- package/claude-code/aiwf/en/.aiwf/03_SPRINTS/CLAUDE.md +0 -83
- package/claude-code/aiwf/en/.aiwf/03_SPRINTS/S01_M01_Initial_API/S01_sprint_meta.md +0 -49
- package/claude-code/aiwf/en/.aiwf/03_SPRINTS/S01_M01_Initial_API/T01_S01_Setup_Project_Structure.md +0 -60
- package/claude-code/aiwf/en/.aiwf/04_GENERAL_TASKS/CLAUDE.md +0 -96
- package/claude-code/aiwf/en/.aiwf/04_GENERAL_TASKS/T002_API_Rate_Limiting.md +0 -54
- package/claude-code/aiwf/en/.aiwf/04_GENERAL_TASKS/TX001_Refactor_Logging_Module.md +0 -58
- package/claude-code/aiwf/en/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR001_Chosen_Database_System.md +0 -119
- package/claude-code/aiwf/en/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR002_API_Authentication_Method.md +0 -124
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-needs-focus.md +0 -139
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-test-alignment.md +0 -155
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-13-00-50-solid-progress.md +0 -122
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-14-08-30-infrastructure-challenges.md +0 -141
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-16-21-48-critical-foundation-issues.md +0 -177
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-17-15-08-solid-progress.md +0 -149
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/index.json +0 -5
- package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/sync-index.js +0 -78
- package/claude-code/aiwf/en/.aiwf/98_PROMPTS/github_integration.md +0 -130
- package/claude-code/aiwf/en/.aiwf/98_PROMPTS/useful-prompts.md +0 -31
- package/claude-code/aiwf/en/.aiwf/98_PROMPTS/vibe-front-prompts.md +0 -89
- package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/adr_template.md +0 -49
- package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/milestone_meta_template.md +0 -25
- package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/project_manifest_template.md +0 -39
- package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/sprint_meta_template.md +0 -23
- package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/task_template.md +0 -36
- package/claude-code/aiwf/en/.aiwf/CLAUDE.md +0 -74
- package/claude-code/aiwf/en/.aiwf/README.md +0 -97
- package/claude-code/aiwf/en/.claude/CLAUDE_BE.md +0 -276
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_changelog.md +0 -82
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_code_review.md +0 -88
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_commit.md +0 -160
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_feature_ledger.md +0 -54
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_general_task.md +0 -147
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_milestone_plan.md +0 -194
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_prd.md +0 -272
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +0 -189
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +0 -121
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_testcase.md +0 -561
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_default_mode.md +0 -66
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_discuss_review.md +0 -29
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_do_task.md +0 -109
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_docs.md +0 -225
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_get_feature_details.md +0 -78
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_infinite.md +0 -202
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_initialize.md +0 -134
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_issue_create.md +0 -65
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +0 -57
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_list_features.md +0 -54
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_mermaid.md +0 -272
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_architect.md +0 -60
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_backend.md +0 -60
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_data_analyst.md +0 -60
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_frontend.md +0 -60
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_security.md +0 -60
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_status.md +0 -72
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_pr_create.md +0 -76
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_prime.md +0 -9
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_project_review.md +0 -261
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_test.md +0 -125
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_testing_review.md +0 -198
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +0 -206
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +0 -460
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +0 -165
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_general.md +0 -362
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_update_feature_status.md +0 -53
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_yolo.md +0 -300
- package/claude-code/aiwf/en/.claude/mcp.json +0 -31
- package/claude-code/aiwf/en/.claude/settings.json +0 -102
- package/claude-code/aiwf/en/commands/ai-persona.js +0 -667
- package/claude-code/aiwf/en/commands/compress-context.js +0 -355
- package/claude-code/aiwf/en/commands/feature-ledger.js +0 -565
- package/claude-code/aiwf/en/commands/feature_commit_report.js +0 -370
- package/claude-code/aiwf/en/commands/scan_git_history.js +0 -234
- package/claude-code/aiwf/en/commands/sync_feature_commits.js +0 -154
- package/claude-code/aiwf/en/commands/token-tracking.js +0 -443
- package/claude-code/aiwf/en/config/commit-patterns.js +0 -103
- package/claude-code/aiwf/en/hooks/install-hooks.sh +0 -100
- package/claude-code/aiwf/en/hooks/post-commit +0 -84
- package/claude-code/aiwf/en/tests/compression-test-suite.js +0 -1252
- package/claude-code/aiwf/en/tests/test-git-integration.js +0 -164
- package/claude-code/aiwf/en/tests/token-tracking.test.js +0 -537
- package/claude-code/aiwf/en/utils/compression-metrics.js +0 -1031
- package/claude-code/aiwf/en/utils/compression-strategies.js +0 -557
- package/claude-code/aiwf/en/utils/content-normalizer.js +0 -455
- package/claude-code/aiwf/en/utils/context-compressor.js +0 -583
- package/claude-code/aiwf/en/utils/feature-updater.js +0 -271
- package/claude-code/aiwf/en/utils/git-utils.js +0 -220
- package/claude-code/aiwf/en/utils/importance-classifier.js +0 -645
- package/claude-code/aiwf/en/utils/information-filter.js +0 -710
- package/claude-code/aiwf/en/utils/text-summarizer.js +0 -487
- package/claude-code/aiwf/en/utils/token-counter.js +0 -177
- package/claude-code/aiwf/en/utils/token-monitor.js +0 -484
- package/claude-code/aiwf/en/utils/token-reporter.js +0 -453
- package/claude-code/aiwf/en/utils/token-storage.js +0 -433
- package/claude-code/aiwf/en/utils/token-tracker.js +0 -283
- package/claude-code/aiwf/ko/.aiwf/00_PROJECT_MANIFEST.md +0 -49
- package/claude-code/aiwf/ko/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +0 -55
- package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/CLAUDE.md +0 -78
- package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/M01_milestone_meta.md +0 -42
- package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_AMEND_01_Auth_Flow_Update.md +0 -73
- package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_Backend_Setup.md +0 -98
- package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/SPECS_API_V1.md +0 -232
- package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/CLAUDE.md +0 -83
- package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/S01_M01_Initial_API/S01_sprint_meta.md +0 -49
- package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/S01_M01_Initial_API/T01_S01_Setup_Project_Structure.md +0 -60
- package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/CLAUDE.md +0 -96
- package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/T002_API_Rate_Limiting.md +0 -54
- package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/TX001_Refactor_Logging_Module.md +0 -58
- package/claude-code/aiwf/ko/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR001_Chosen_Database_System.md +0 -119
- package/claude-code/aiwf/ko/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR002_API_Authentication_Method.md +0 -124
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_ID_GENERATOR.md +0 -138
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_INDEX.md +0 -186
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_METADATA.md +0 -240
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_WORKFLOW.md +0 -183
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/README.md +0 -94
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/active/FL001_/354/202/254/354/232/251/354/236/220_/354/235/270/354/246/235_/354/213/234/354/212/244/355/205/234.md +0 -154
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/active/FL002_ai_/355/216/230/353/245/264/354/206/214/353/202/230_/354/213/234/354/212/244/355/205/234.md +0 -272
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/completed/FL003_/353/213/244/352/265/255/354/226/264_/353/252/205/353/240/271/354/226/264_/355/221/234/354/244/200/355/231/224.md +0 -266
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/schemas/feature_schema.json +0 -122
- package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/schemas/feature_validator.cjs +0 -406
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-needs-focus.md +0 -139
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-test-alignment.md +0 -155
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-13-00-50-solid-progress.md +0 -122
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-14-08-30-infrastructure-challenges.md +0 -141
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-16-21-48-critical-foundation-issues.md +0 -177
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-17-15-08-solid-progress.md +0 -149
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/index.json +0 -5
- package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/sync-index.js +0 -78
- package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/github_integration.md +0 -130
- package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/useful-prompts.md +0 -31
- package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/vibe-front-prompts.md +0 -89
- package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/adr_template.md +0 -49
- package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/milestone_meta_template.md +0 -25
- package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/project_manifest_template.md +0 -39
- package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/sprint_meta_template.md +0 -23
- package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/task_template.md +0 -36
- package/claude-code/aiwf/ko/.aiwf/CLAUDE.md +0 -76
- package/claude-code/aiwf/ko/.aiwf/README.md +0 -97
- package/claude-code/aiwf/ko/.claude/CLAUDE_BE.md +0 -276
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_changelog.md +0 -82
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_code_review.md +0 -88
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_commit.md +0 -160
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +0 -53
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_context.md +0 -116
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +0 -48
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_stats.md +0 -42
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_with_persona.md +0 -51
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_feature_ledger.md +0 -54
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_general_task.md +0 -147
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_milestone_plan.md +0 -194
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_prd.md +0 -280
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +0 -189
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +0 -121
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_testcase.md +0 -561
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_default_mode.md +0 -44
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_discuss_review.md +0 -29
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_do_task.md +0 -109
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_docs.md +0 -225
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_evaluate.md +0 -92
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_get_feature_details.md +0 -78
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_infinite.md +0 -202
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_initialize.md +0 -134
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_issue_create.md +0 -65
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +0 -57
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_list_features.md +0 -54
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_mermaid.md +0 -272
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_architect.md +0 -48
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_backend.md +0 -37
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_data_analyst.md +0 -37
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_frontend.md +0 -37
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_security.md +0 -48
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_status.md +0 -50
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_pr_create.md +0 -76
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_prime.md +0 -9
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_project_review.md +0 -261
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_test.md +0 -124
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_testing_review.md +0 -198
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +0 -210
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +0 -460
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +0 -165
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_general.md +0 -305
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_docs.md +0 -25
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_feature_status.md +0 -53
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_yolo.md +0 -300
- package/claude-code/aiwf/ko/.claude/mcp.json +0 -31
- package/claude-code/aiwf/ko/.claude/settings.json +0 -102
- package/claude-code/aiwf/ko/CLAUDE.md +0 -76
- package/claude-code/aiwf/ko/ai-tools/README.md +0 -105
- package/claude-code/aiwf/ko/ai-tools/augment/README.md +0 -371
- package/claude-code/aiwf/ko/ai-tools/augment/config.json +0 -30
- package/claude-code/aiwf/ko/ai-tools/augment/template/.augment/aiwf-integration.md +0 -387
- package/claude-code/aiwf/ko/ai-tools/augment/template/.augment/augment.yaml +0 -347
- package/claude-code/aiwf/ko/ai-tools/augment/template/augment.config.json +0 -64
- package/claude-code/aiwf/ko/ai-tools/claude-code/README.md +0 -151
- package/claude-code/aiwf/ko/ai-tools/claude-code/config.json +0 -28
- package/claude-code/aiwf/ko/ai-tools/claude-code/template/CLAUDE.md +0 -91
- package/claude-code/aiwf/ko/ai-tools/cursor/README.md +0 -314
- package/claude-code/aiwf/ko/ai-tools/cursor/config.json +0 -29
- package/claude-code/aiwf/ko/ai-tools/cursor/template/.cursorrules +0 -362
- package/claude-code/aiwf/ko/ai-tools/github-copilot/README.md +0 -195
- package/claude-code/aiwf/ko/ai-tools/github-copilot/config.json +0 -24
- package/claude-code/aiwf/ko/ai-tools/github-copilot/template/.github/copilot-instructions.md +0 -202
- package/claude-code/aiwf/ko/ai-tools/windsurf/README.md +0 -355
- package/claude-code/aiwf/ko/ai-tools/windsurf/config.json +0 -29
- package/claude-code/aiwf/ko/ai-tools/windsurf/template/.windsurf/aiwf-rules.md +0 -260
- package/claude-code/aiwf/ko/ai-tools/windsurf/template/.windsurf/windsurf.config.js +0 -312
- package/claude-code/aiwf/ko/ai-tools/windsurf/template/windsurf.config.json +0 -63
- package/claude-code/aiwf/ko/commands/ai-persona.js +0 -602
- package/claude-code/aiwf/ko/commands/compress-context.js +0 -389
- package/claude-code/aiwf/ko/commands/evaluate.js +0 -246
- package/claude-code/aiwf/ko/commands/feature-ledger.js +0 -565
- package/claude-code/aiwf/ko/commands/feature_commit_report.js +0 -370
- package/claude-code/aiwf/ko/commands/persona-context-apply.js +0 -562
- package/claude-code/aiwf/ko/commands/scan_git_history.js +0 -234
- package/claude-code/aiwf/ko/commands/sync_feature_commits.js +0 -154
- package/claude-code/aiwf/ko/commands/token-tracking.js +0 -443
- package/claude-code/aiwf/ko/config/commit-patterns.js +0 -103
- package/claude-code/aiwf/ko/config/language.json +0 -6
- package/claude-code/aiwf/ko/feature-ledger/FL-001-authentication.json +0 -52
- package/claude-code/aiwf/ko/feature-ledger/feature-index.json +0 -20
- package/claude-code/aiwf/ko/hooks/install-hooks.sh +0 -100
- package/claude-code/aiwf/ko/hooks/post-commit +0 -84
- package/claude-code/aiwf/ko/personas/PERSONA_INDEX.md +0 -57
- package/claude-code/aiwf/ko/personas/analyst.json +0 -44
- package/claude-code/aiwf/ko/personas/architect/best_practices.md +0 -136
- package/claude-code/aiwf/ko/personas/architect/knowledge_base.md +0 -377
- package/claude-code/aiwf/ko/personas/architect.json +0 -44
- package/claude-code/aiwf/ko/personas/backend/best_practices.md +0 -766
- package/claude-code/aiwf/ko/personas/backend/knowledge_base.md +0 -1070
- package/claude-code/aiwf/ko/personas/data_analyst/best_practices.md +0 -594
- package/claude-code/aiwf/ko/personas/data_analyst/knowledge_base.md +0 -1057
- package/claude-code/aiwf/ko/personas/developer.json +0 -44
- package/claude-code/aiwf/ko/personas/developer.md +0 -37
- package/claude-code/aiwf/ko/personas/evaluation_criteria.json +0 -137
- package/claude-code/aiwf/ko/personas/frontend/best_practices.md +0 -445
- package/claude-code/aiwf/ko/personas/frontend/knowledge_base.md +0 -729
- package/claude-code/aiwf/ko/personas/persona-index.json +0 -31
- package/claude-code/aiwf/ko/personas/reviewer.json +0 -44
- package/claude-code/aiwf/ko/personas/security/best_practices.md +0 -307
- package/claude-code/aiwf/ko/personas/security/knowledge_base.md +0 -498
- package/claude-code/aiwf/ko/personas/tester.json +0 -44
- package/claude-code/aiwf/ko/scripts/cache-templates.js +0 -209
- package/claude-code/aiwf/ko/scripts/create-offline.js +0 -86
- package/claude-code/aiwf/ko/scripts/create-project.js +0 -151
- package/claude-code/aiwf/ko/scripts/feature-progress-calculator.cjs +0 -236
- package/claude-code/aiwf/ko/scripts/git-integration.cjs +0 -391
- package/claude-code/aiwf/ko/scripts/install-git-hooks.cjs +0 -226
- package/claude-code/aiwf/ko/scripts/test-commit-parsing.cjs +0 -125
- package/claude-code/aiwf/ko/scripts/update-feature-status.cjs +0 -198
- package/claude-code/aiwf/ko/templates/README.md +0 -78
- package/claude-code/aiwf/ko/templates/api-server/config.json +0 -64
- package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/config.json +0 -56
- package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/feature-ledger.json +0 -42
- package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -40
- package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/scripts/cli.js +0 -111
- package/claude-code/aiwf/ko/templates/api-server/template/.env.example +0 -29
- package/claude-code/aiwf/ko/templates/api-server/template/.eslintrc.json +0 -23
- package/claude-code/aiwf/ko/templates/api-server/template/README.md +0 -171
- package/claude-code/aiwf/ko/templates/api-server/template/jest.config.js +0 -26
- package/claude-code/aiwf/ko/templates/api-server/template/nodemon.json +0 -9
- package/claude-code/aiwf/ko/templates/api-server/template/package.json +0 -61
- package/claude-code/aiwf/ko/templates/api-server/template/src/app.ts +0 -60
- package/claude-code/aiwf/ko/templates/api-server/template/src/config/swagger.ts +0 -38
- package/claude-code/aiwf/ko/templates/api-server/template/src/controllers/aiwfController.ts +0 -68
- package/claude-code/aiwf/ko/templates/api-server/template/src/controllers/authController.ts +0 -128
- package/claude-code/aiwf/ko/templates/api-server/template/src/controllers/statusController.ts +0 -28
- package/claude-code/aiwf/ko/templates/api-server/template/src/index.ts +0 -28
- package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -50
- package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/authMiddleware.ts +0 -41
- package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/errorHandler.ts +0 -42
- package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -14
- package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/requestLogger.ts +0 -20
- package/claude-code/aiwf/ko/templates/api-server/template/src/routes/aiwf.ts +0 -42
- package/claude-code/aiwf/ko/templates/api-server/template/src/routes/index.ts +0 -13
- package/claude-code/aiwf/ko/templates/api-server/template/src/routes/v1/index.ts +0 -67
- package/claude-code/aiwf/ko/templates/api-server/template/src/utils/logger.ts +0 -37
- package/claude-code/aiwf/ko/templates/api-server/template/tests/app.test.ts +0 -40
- package/claude-code/aiwf/ko/templates/api-server/template/tsconfig.json +0 -43
- package/claude-code/aiwf/ko/templates/npm-library/config.json +0 -61
- package/claude-code/aiwf/ko/templates/npm-library/template/LICENSE +0 -21
- package/claude-code/aiwf/ko/templates/npm-library/template/README.md +0 -201
- package/claude-code/aiwf/ko/templates/npm-library/template/package.json +0 -78
- package/claude-code/aiwf/ko/templates/web-app/config.json +0 -53
- package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/config.json +0 -54
- package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/feature-ledger.json +0 -37
- package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -40
- package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/scripts/cli.js +0 -110
- package/claude-code/aiwf/ko/templates/web-app/template/.eslintrc.cjs +0 -20
- package/claude-code/aiwf/ko/templates/web-app/template/README.md +0 -151
- package/claude-code/aiwf/ko/templates/web-app/template/index.html +0 -14
- package/claude-code/aiwf/ko/templates/web-app/template/package.json +0 -44
- package/claude-code/aiwf/ko/templates/web-app/template/postcss.config.js +0 -6
- package/claude-code/aiwf/ko/templates/web-app/template/public/vite.svg +0 -1
- package/claude-code/aiwf/ko/templates/web-app/template/src/App.tsx +0 -21
- package/claude-code/aiwf/ko/templates/web-app/template/src/components/Layout.tsx +0 -57
- package/claude-code/aiwf/ko/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -107
- package/claude-code/aiwf/ko/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +0 -93
- package/claude-code/aiwf/ko/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -71
- package/claude-code/aiwf/ko/templates/web-app/template/src/index.css +0 -60
- package/claude-code/aiwf/ko/templates/web-app/template/src/main.tsx +0 -10
- package/claude-code/aiwf/ko/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -60
- package/claude-code/aiwf/ko/templates/web-app/template/src/pages/HomePage.tsx +0 -89
- package/claude-code/aiwf/ko/templates/web-app/template/src/pages/NotFound.tsx +0 -25
- package/claude-code/aiwf/ko/templates/web-app/template/src/stores/aiwfStore.ts +0 -126
- package/claude-code/aiwf/ko/templates/web-app/template/src/types/global.d.ts +0 -9
- package/claude-code/aiwf/ko/templates/web-app/template/src/vite-env.d.ts +0 -1
- package/claude-code/aiwf/ko/templates/web-app/template/tailwind.config.js +0 -30
- package/claude-code/aiwf/ko/templates/web-app/template/tsconfig.json +0 -37
- package/claude-code/aiwf/ko/templates/web-app/template/tsconfig.node.json +0 -10
- package/claude-code/aiwf/ko/templates/web-app/template/vite.config.ts +0 -23
- package/claude-code/aiwf/ko/tests/compression-test-suite.js +0 -1252
- package/claude-code/aiwf/ko/tests/test-git-integration.js +0 -164
- package/claude-code/aiwf/ko/tests/token-tracking.test.js +0 -537
- package/claude-code/aiwf/ko/utils/background-monitor.js +0 -223
- package/claude-code/aiwf/ko/utils/compression-metrics.js +0 -1031
- package/claude-code/aiwf/ko/utils/compression-strategies.js +0 -557
- package/claude-code/aiwf/ko/utils/content-normalizer.js +0 -455
- package/claude-code/aiwf/ko/utils/context-compressor.js +0 -583
- package/claude-code/aiwf/ko/utils/context-rule-parser.js +0 -180
- package/claude-code/aiwf/ko/utils/context-token-monitor.js +0 -463
- package/claude-code/aiwf/ko/utils/context-update-manager.js +0 -502
- package/claude-code/aiwf/ko/utils/feature-updater.js +0 -271
- package/claude-code/aiwf/ko/utils/git-utils.js +0 -220
- package/claude-code/aiwf/ko/utils/importance-classifier.js +0 -645
- package/claude-code/aiwf/ko/utils/information-filter.js +0 -710
- package/claude-code/aiwf/ko/utils/persona-aware-compressor.js +0 -598
- package/claude-code/aiwf/ko/utils/prompt-injector.js +0 -242
- package/claude-code/aiwf/ko/utils/simplified-evaluator.js +0 -119
- package/claude-code/aiwf/ko/utils/text-summarizer.js +0 -492
- package/claude-code/aiwf/ko/utils/token-counter.js +0 -177
- package/claude-code/aiwf/ko/utils/token-monitor.js +0 -484
- package/claude-code/aiwf/ko/utils/token-reporter.js +0 -453
- package/claude-code/aiwf/ko/utils/token-storage.js +0 -433
- package/claude-code/aiwf/ko/utils/token-tracker.js +0 -283
- package/claude-code/docker/Dockerfile +0 -117
- package/jest.config.js +0 -23
- package/scripts/update-feature-status.js +0 -70
- package/src/commands/feature.js +0 -365
- package/tests/application.test.js +0 -260
- package/tests/basic.test.js +0 -62
- package/tests/commands.test.js +0 -127
- package/tests/installer.test.js +0 -129
- package/tests/integration/ai-persona-system.test.js +0 -396
- package/tests/integration/ai-persona.test.js +0 -390
- package/tests/integration/command-integration.test.js +0 -600
- package/tests/integration/context-compression.test.js +0 -361
- package/tests/integration/feature-ledger.test.js +0 -226
- package/tests/integration/git-integration.test.js +0 -307
- package/tests/integration/m02-milestone.test.js +0 -420
- package/tests/integration/persona-context-application.test.js +0 -508
- package/tests/integration/setup.js +0 -174
- package/tests/integration/test-persona-aware-compression.js +0 -93
- package/tests/integration/test-persona-system/.aiwf/metrics/metrics.json +0 -833
- package/tests/integration/test-persona-system/docs/README.md +0 -1
- package/tests/integration/test-persona-system/package.json +0 -1
- package/tests/integration/test-persona-system/src/auth.js +0 -1
- package/tests/integration/test-persona-system/src/index.js +0 -1
- package/tests/integration/test-persona-system/test/test.js +0 -1
- package/tests/language-utils.test.js +0 -287
- package/tests/s02-integration.test.js +0 -422
- package/tests/unit/ai-persona-manager.test.js +0 -514
- package/tests/unit/sprint-task.test.js +0 -172
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AIWF Feature Ledger 스키마 검증 함수
|
|
3
|
-
* Feature 데이터의 유효성을 검증하고 오류를 반환합니다.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const Ajv = require('ajv');
|
|
7
|
-
const addFormats = require('ajv-formats');
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
|
|
11
|
-
class FeatureValidator {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.ajv = new Ajv({ allErrors: true, strict: false });
|
|
14
|
-
addFormats(this.ajv);
|
|
15
|
-
|
|
16
|
-
// Feature 스키마 로드
|
|
17
|
-
const schemaPath = path.join(__dirname, 'feature_schema.json');
|
|
18
|
-
this.schema = JSON.parse(fs.readFileSync(schemaPath, 'utf8'));
|
|
19
|
-
this.validate = this.ajv.compile(this.schema);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Feature 데이터 검증
|
|
24
|
-
* @param {Object} featureData - 검증할 Feature 데이터
|
|
25
|
-
* @returns {Object} 검증 결과 { valid: boolean, errors: Array }
|
|
26
|
-
*/
|
|
27
|
-
validateFeature(featureData) {
|
|
28
|
-
const isValid = this.validate(featureData);
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
valid: isValid,
|
|
32
|
-
errors: isValid ? [] : this.formatErrors(this.validate.errors),
|
|
33
|
-
data: featureData
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Feature ID 형식 검증
|
|
39
|
-
* @param {string} featureId - 검증할 Feature ID
|
|
40
|
-
* @returns {boolean} 유효성 여부
|
|
41
|
-
*/
|
|
42
|
-
validateFeatureId(featureId) {
|
|
43
|
-
const pattern = /^FL[0-9]{3}$/;
|
|
44
|
-
return pattern.test(featureId);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* 마일스톤 ID 형식 검증
|
|
49
|
-
* @param {string} milestoneId - 검증할 마일스톤 ID
|
|
50
|
-
* @returns {boolean} 유효성 여부
|
|
51
|
-
*/
|
|
52
|
-
validateMilestoneId(milestoneId) {
|
|
53
|
-
const pattern = /^M[0-9]{2}$/;
|
|
54
|
-
return pattern.test(milestoneId);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Feature 상태 검증
|
|
59
|
-
* @param {string} status - 검증할 상태
|
|
60
|
-
* @returns {boolean} 유효성 여부
|
|
61
|
-
*/
|
|
62
|
-
validateStatus(status) {
|
|
63
|
-
const validStatuses = ['draft', 'active', 'on-hold', 'completed', 'archived'];
|
|
64
|
-
return validStatuses.includes(status);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* 우선순위 검증
|
|
69
|
-
* @param {string} priority - 검증할 우선순위
|
|
70
|
-
* @returns {boolean} 유효성 여부
|
|
71
|
-
*/
|
|
72
|
-
validatePriority(priority) {
|
|
73
|
-
const validPriorities = ['low', 'medium', 'high', 'critical'];
|
|
74
|
-
return validPriorities.includes(priority);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* 의존성 검증 (순환 참조 확인)
|
|
79
|
-
* @param {string} featureId - 현재 Feature ID
|
|
80
|
-
* @param {Array} dependencies - 의존성 목록
|
|
81
|
-
* @param {Array} allFeatures - 전체 Feature 목록
|
|
82
|
-
* @returns {Object} 검증 결과
|
|
83
|
-
*/
|
|
84
|
-
validateDependencies(featureId, dependencies, allFeatures = []) {
|
|
85
|
-
const result = {
|
|
86
|
-
valid: true,
|
|
87
|
-
errors: [],
|
|
88
|
-
circularDependencies: []
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
// 의존성 Feature ID 형식 검증
|
|
92
|
-
for (const depId of dependencies) {
|
|
93
|
-
if (!this.validateFeatureId(depId)) {
|
|
94
|
-
result.valid = false;
|
|
95
|
-
result.errors.push(`Invalid dependency feature ID format: ${depId}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// 순환 참조 검증
|
|
100
|
-
const visited = new Set();
|
|
101
|
-
const recursionStack = new Set();
|
|
102
|
-
|
|
103
|
-
const hasCycle = (currentId, deps) => {
|
|
104
|
-
if (recursionStack.has(currentId)) {
|
|
105
|
-
result.circularDependencies.push(currentId);
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (visited.has(currentId)) {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
visited.add(currentId);
|
|
114
|
-
recursionStack.add(currentId);
|
|
115
|
-
|
|
116
|
-
const currentFeature = allFeatures.find(f => f.feature_id === currentId);
|
|
117
|
-
const currentDeps = currentFeature ? currentFeature.dependencies : [];
|
|
118
|
-
|
|
119
|
-
for (const depId of currentDeps) {
|
|
120
|
-
if (hasCycle(depId, allFeatures)) {
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
recursionStack.delete(currentId);
|
|
126
|
-
return false;
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
if (hasCycle(featureId, allFeatures)) {
|
|
130
|
-
result.valid = false;
|
|
131
|
-
result.errors.push(`Circular dependency detected for feature ${featureId}`);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return result;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Git 브랜치명 검증
|
|
139
|
-
* @param {Array} branches - 브랜치명 배열
|
|
140
|
-
* @returns {Object} 검증 결과
|
|
141
|
-
*/
|
|
142
|
-
validateGitBranches(branches) {
|
|
143
|
-
const result = {
|
|
144
|
-
valid: true,
|
|
145
|
-
errors: []
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
const branchPattern = /^[a-zA-Z0-9/_-]+$/;
|
|
149
|
-
|
|
150
|
-
for (const branch of branches) {
|
|
151
|
-
if (!branchPattern.test(branch)) {
|
|
152
|
-
result.valid = false;
|
|
153
|
-
result.errors.push(`Invalid git branch name: ${branch}`);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Git 브랜치명 길이 제한 (일반적으로 255자)
|
|
157
|
-
if (branch.length > 255) {
|
|
158
|
-
result.valid = false;
|
|
159
|
-
result.errors.push(`Branch name too long: ${branch}`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return result;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* 날짜 형식 검증
|
|
168
|
-
* @param {string} dateString - 검증할 날짜 문자열
|
|
169
|
-
* @returns {boolean} 유효성 여부
|
|
170
|
-
*/
|
|
171
|
-
validateDateTime(dateString) {
|
|
172
|
-
try {
|
|
173
|
-
const date = new Date(dateString);
|
|
174
|
-
return date instanceof Date && !isNaN(date) && dateString === date.toISOString();
|
|
175
|
-
} catch (error) {
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* 작업 시간 검증
|
|
182
|
-
* @param {number} estimated - 예상 시간
|
|
183
|
-
* @param {number} actual - 실제 시간
|
|
184
|
-
* @returns {Object} 검증 결과
|
|
185
|
-
*/
|
|
186
|
-
validateWorkHours(estimated, actual) {
|
|
187
|
-
const result = {
|
|
188
|
-
valid: true,
|
|
189
|
-
errors: [],
|
|
190
|
-
warnings: []
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
// 기본 범위 검증
|
|
194
|
-
if (estimated < 0 || estimated > 1000) {
|
|
195
|
-
result.valid = false;
|
|
196
|
-
result.errors.push(`Estimated hours out of range: ${estimated}`);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (actual < 0 || actual > 1000) {
|
|
200
|
-
result.valid = false;
|
|
201
|
-
result.errors.push(`Actual hours out of range: ${actual}`);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// 비즈니스 로직 검증
|
|
205
|
-
if (actual > estimated * 2) {
|
|
206
|
-
result.warnings.push(`Actual hours significantly exceed estimated: ${actual} vs ${estimated}`);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
if (estimated > 0 && actual === 0) {
|
|
210
|
-
result.warnings.push('Work has been estimated but no actual hours recorded');
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return result;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* 태그 검증
|
|
218
|
-
* @param {Array} tags - 태그 배열
|
|
219
|
-
* @returns {Object} 검증 결과
|
|
220
|
-
*/
|
|
221
|
-
validateTags(tags) {
|
|
222
|
-
const result = {
|
|
223
|
-
valid: true,
|
|
224
|
-
errors: [],
|
|
225
|
-
warnings: []
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
const validCategories = [
|
|
229
|
-
'frontend', 'backend', 'api', 'database', 'ui', 'ux',
|
|
230
|
-
'feature', 'enhancement', 'bugfix', 'refactor', 'docs',
|
|
231
|
-
'simple', 'complex', 'critical', 'auth', 'payment',
|
|
232
|
-
'notification', 'search', 'admin', 'security', 'core'
|
|
233
|
-
];
|
|
234
|
-
|
|
235
|
-
for (const tag of tags) {
|
|
236
|
-
// 길이 검증
|
|
237
|
-
if (tag.length < 1 || tag.length > 30) {
|
|
238
|
-
result.valid = false;
|
|
239
|
-
result.errors.push(`Tag length out of range: ${tag}`);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// 형식 검증 (알파벳, 숫자, 하이픈만 허용)
|
|
243
|
-
if (!/^[a-zA-Z0-9-_]+$/.test(tag)) {
|
|
244
|
-
result.valid = false;
|
|
245
|
-
result.errors.push(`Invalid tag format: ${tag}`);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// 권장 태그 체크 (경고)
|
|
249
|
-
if (!validCategories.includes(tag.toLowerCase())) {
|
|
250
|
-
result.warnings.push(`Non-standard tag used: ${tag}`);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
// 중복 태그 체크
|
|
255
|
-
const uniqueTags = new Set(tags);
|
|
256
|
-
if (uniqueTags.size !== tags.length) {
|
|
257
|
-
result.warnings.push('Duplicate tags found');
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
return result;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* 종합 Feature 검증
|
|
265
|
-
* @param {Object} featureData - Feature 데이터
|
|
266
|
-
* @param {Array} allFeatures - 전체 Feature 목록 (의존성 검증용)
|
|
267
|
-
* @returns {Object} 종합 검증 결과
|
|
268
|
-
*/
|
|
269
|
-
validateFeatureComprehensive(featureData, allFeatures = []) {
|
|
270
|
-
const result = {
|
|
271
|
-
valid: true,
|
|
272
|
-
errors: [],
|
|
273
|
-
warnings: [],
|
|
274
|
-
details: {}
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
// 기본 스키마 검증
|
|
278
|
-
const schemaResult = this.validateFeature(featureData);
|
|
279
|
-
result.valid = result.valid && schemaResult.valid;
|
|
280
|
-
result.errors.push(...schemaResult.errors);
|
|
281
|
-
|
|
282
|
-
// 의존성 검증
|
|
283
|
-
if (featureData.dependencies && featureData.dependencies.length > 0) {
|
|
284
|
-
const depResult = this.validateDependencies(
|
|
285
|
-
featureData.feature_id,
|
|
286
|
-
featureData.dependencies,
|
|
287
|
-
allFeatures
|
|
288
|
-
);
|
|
289
|
-
result.valid = result.valid && depResult.valid;
|
|
290
|
-
result.errors.push(...depResult.errors);
|
|
291
|
-
result.details.dependencies = depResult;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// Git 브랜치 검증
|
|
295
|
-
if (featureData.git_branches) {
|
|
296
|
-
const branchResult = this.validateGitBranches(featureData.git_branches);
|
|
297
|
-
result.valid = result.valid && branchResult.valid;
|
|
298
|
-
result.errors.push(...branchResult.errors);
|
|
299
|
-
result.details.git_branches = branchResult;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// 작업 시간 검증
|
|
303
|
-
const hoursResult = this.validateWorkHours(
|
|
304
|
-
featureData.estimated_hours,
|
|
305
|
-
featureData.actual_hours
|
|
306
|
-
);
|
|
307
|
-
result.valid = result.valid && hoursResult.valid;
|
|
308
|
-
result.errors.push(...hoursResult.errors);
|
|
309
|
-
result.warnings.push(...hoursResult.warnings);
|
|
310
|
-
result.details.work_hours = hoursResult;
|
|
311
|
-
|
|
312
|
-
// 태그 검증
|
|
313
|
-
if (featureData.tags) {
|
|
314
|
-
const tagResult = this.validateTags(featureData.tags);
|
|
315
|
-
result.valid = result.valid && tagResult.valid;
|
|
316
|
-
result.errors.push(...tagResult.errors);
|
|
317
|
-
result.warnings.push(...tagResult.warnings);
|
|
318
|
-
result.details.tags = tagResult;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
return result;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
/**
|
|
325
|
-
* 오류 메시지 포맷팅
|
|
326
|
-
* @param {Array} errors - AJV 오류 배열
|
|
327
|
-
* @returns {Array} 포맷된 오류 메시지
|
|
328
|
-
*/
|
|
329
|
-
formatErrors(errors) {
|
|
330
|
-
return errors.map(error => {
|
|
331
|
-
const { instancePath, message, params } = error;
|
|
332
|
-
const field = instancePath.replace('/', '') || 'root';
|
|
333
|
-
|
|
334
|
-
return {
|
|
335
|
-
field,
|
|
336
|
-
message,
|
|
337
|
-
value: params?.missingProperty || 'unknown',
|
|
338
|
-
path: instancePath
|
|
339
|
-
};
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* 검증 리포트 생성
|
|
345
|
-
* @param {Object} validationResult - 검증 결과
|
|
346
|
-
* @returns {string} 포맷된 리포트
|
|
347
|
-
*/
|
|
348
|
-
generateReport(validationResult) {
|
|
349
|
-
const { valid, errors, warnings, details } = validationResult;
|
|
350
|
-
|
|
351
|
-
let report = `\n=== Feature Validation Report ===\n`;
|
|
352
|
-
report += `Status: ${valid ? '✅ VALID' : '❌ INVALID'}\n`;
|
|
353
|
-
|
|
354
|
-
if (errors.length > 0) {
|
|
355
|
-
report += `\nErrors (${errors.length}):\n`;
|
|
356
|
-
errors.forEach((error, index) => {
|
|
357
|
-
report += ` ${index + 1}. ${error.field}: ${error.message}\n`;
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
if (warnings.length > 0) {
|
|
362
|
-
report += `\nWarnings (${warnings.length}):\n`;
|
|
363
|
-
warnings.forEach((warning, index) => {
|
|
364
|
-
report += ` ${index + 1}. ${warning}\n`;
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
if (details) {
|
|
369
|
-
report += `\nValidation Details:\n`;
|
|
370
|
-
Object.keys(details).forEach(key => {
|
|
371
|
-
const detail = details[key];
|
|
372
|
-
report += ` ${key}: ${detail.valid ? '✅' : '❌'}\n`;
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
return report;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
// 사용 예시 및 테스트
|
|
381
|
-
if (require.main === module) {
|
|
382
|
-
const validator = new FeatureValidator();
|
|
383
|
-
|
|
384
|
-
// 샘플 데이터 검증
|
|
385
|
-
const sampleFeature = {
|
|
386
|
-
feature_id: "FL001",
|
|
387
|
-
title: "사용자 인증 시스템",
|
|
388
|
-
description: "JWT 기반 사용자 인증 시스템 구현",
|
|
389
|
-
status: "active",
|
|
390
|
-
priority: "high",
|
|
391
|
-
milestone_id: "M02",
|
|
392
|
-
assignee: "moonklabs",
|
|
393
|
-
created_date: "2025-07-08T20:55:00+0900",
|
|
394
|
-
updated_date: "2025-07-08T20:55:00+0900",
|
|
395
|
-
estimated_hours: 24,
|
|
396
|
-
actual_hours: 8,
|
|
397
|
-
tags: ["authentication", "security", "core"],
|
|
398
|
-
dependencies: [],
|
|
399
|
-
git_branches: ["feature/FL001-user-auth"]
|
|
400
|
-
};
|
|
401
|
-
|
|
402
|
-
const result = validator.validateFeatureComprehensive(sampleFeature);
|
|
403
|
-
console.log(validator.generateReport(result));
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
module.exports = FeatureValidator;
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
# Project Review - 2025-06-12 12:00
|
|
2
|
-
|
|
3
|
-
## 🎭 Review Sentiment
|
|
4
|
-
|
|
5
|
-
🚨⚠️🔧
|
|
6
|
-
|
|
7
|
-
## Executive Summary
|
|
8
|
-
|
|
9
|
-
- **Result:** NEEDS_WORK
|
|
10
|
-
- **Scope:** Full project review including test infrastructure, documentation, architecture, and code quality
|
|
11
|
-
- **Overall Judgment:** needs-focus
|
|
12
|
-
|
|
13
|
-
## Test Infrastructure Assessment
|
|
14
|
-
|
|
15
|
-
- **Test Suite Status**: FAILING (Backend: 25/26 failed suites, Frontend: 6/28 failed tests)
|
|
16
|
-
- **Test Pass Rate**: Backend: 98.3% (400 passed, 7 failed), Frontend: 78.6% (22 passed, 6 failed)
|
|
17
|
-
- **Test Health Score**: 3/10
|
|
18
|
-
- **Infrastructure Health**: BROKEN
|
|
19
|
-
- Import errors: 3 (missing test config files, path resolution issues)
|
|
20
|
-
- Configuration errors: 2 (dependency injection failures)
|
|
21
|
-
- Fixture issues: 1 (floating-point precision)
|
|
22
|
-
- **Test Categories**:
|
|
23
|
-
- Unit Tests: 400/407 passing (mostly meaningless smoke tests)
|
|
24
|
-
- Integration Tests: 0/7 passing (external dependency failures)
|
|
25
|
-
- API Tests: 0 functional tests (only smoke tests)
|
|
26
|
-
- **Critical Issues**:
|
|
27
|
-
- Missing `test-connect-info.json` configuration file
|
|
28
|
-
- API signature changes not reflected in tests (`dashboardService.create()` parameter mismatch)
|
|
29
|
-
- External database dependencies causing unstable tests
|
|
30
|
-
- Repository mocking setup missing across all services
|
|
31
|
-
- **Sprint Coverage**: <5% of actual functionality has meaningful tests
|
|
32
|
-
- **Blocking Status**: BLOCKED - Critical test infrastructure failures prevent reliable development
|
|
33
|
-
- **Recommendations**:
|
|
34
|
-
- Immediate: Fix missing test configuration files and dependency injection
|
|
35
|
-
- Short-term: Replace smoke tests with behavior-focused unit tests
|
|
36
|
-
- Long-term: Establish comprehensive test strategy with coverage targets
|
|
37
|
-
|
|
38
|
-
## Development Context
|
|
39
|
-
|
|
40
|
-
- **Current Milestone:** MVP 안정화 및 핵심 기능 강화 (active)
|
|
41
|
-
- **Current Sprint:** No active sprint structure in place
|
|
42
|
-
- **Expected Completeness:** Milestone requirements document exists but lacks sprint planning
|
|
43
|
-
|
|
44
|
-
## Progress Assessment
|
|
45
|
-
|
|
46
|
-
- **Milestone Progress:** 40% (documentation and architecture in place, but stability/performance work needed)
|
|
47
|
-
- **Sprint Status:** No formal sprint structure implemented
|
|
48
|
-
- **Deliverable Tracking:** Milestone requirements defined but not broken into actionable sprints
|
|
49
|
-
|
|
50
|
-
## Architecture & Technical Assessment
|
|
51
|
-
|
|
52
|
-
- **Architecture Score:** 7/10 - Well-structured modular design with clear separation of concerns
|
|
53
|
-
- **Technical Debt Level:** MEDIUM - Several architectural decisions need refinement but foundation is solid
|
|
54
|
-
- **Code Quality:** Mixed - Good patterns in core modules, but inconsistencies in error handling and type safety
|
|
55
|
-
|
|
56
|
-
Specific examples:
|
|
57
|
-
- ✅ Excellent: Modular NestJS structure with proper dependency injection
|
|
58
|
-
- ✅ Good: Multi-database support with Knex abstraction layer
|
|
59
|
-
- ⚠️ Needs work: Connection Service handling too many responsibilities
|
|
60
|
-
- ❌ Poor: TypeScript type safety with excessive `any` usage in API services
|
|
61
|
-
|
|
62
|
-
## File Organization Audit
|
|
63
|
-
|
|
64
|
-
- **Workflow Compliance:** NEEDS_ATTENTION
|
|
65
|
-
- **File Organization Issues:**
|
|
66
|
-
- Root directory pollution: `identifier.sqlite`, `package-lock.json` should be removed
|
|
67
|
-
- Directory name typos: `entites/` should be `entities/`, `tabel-query/` should be `table-query/`
|
|
68
|
-
- IntelliJ project files (*.iml) committed to repository
|
|
69
|
-
- Experimental code in production paths: `testLineChart.ts`
|
|
70
|
-
- **Cleanup Tasks Needed:**
|
|
71
|
-
- Remove 6+ unnecessary files from root and subdirectories
|
|
72
|
-
- Fix directory naming inconsistencies
|
|
73
|
-
- Consolidate duplicate dummy data files between backend and frontend
|
|
74
|
-
|
|
75
|
-
## Critical Findings
|
|
76
|
-
|
|
77
|
-
### Critical Issues (Severity 8-10)
|
|
78
|
-
|
|
79
|
-
#### Test Infrastructure Collapse
|
|
80
|
-
- 96% of test suites failing due to infrastructure issues, not logic problems
|
|
81
|
-
- No meaningful test coverage for authentication, data processing, or UI components
|
|
82
|
-
- External database dependencies making tests unstable and environment-dependent
|
|
83
|
-
- Missing test configuration files blocking integration test execution
|
|
84
|
-
|
|
85
|
-
#### Type Safety Violations
|
|
86
|
-
- Frontend API services using `Promise<any>` extensively, eliminating TypeScript benefits
|
|
87
|
-
- Backend missing proper error type definitions
|
|
88
|
-
- Inconsistent parameter types causing test failures (dashboard service API changes)
|
|
89
|
-
|
|
90
|
-
#### File System Pollution
|
|
91
|
-
- Repository contains IDE-specific files and temporary artifacts
|
|
92
|
-
- Directory naming errors preventing proper module imports
|
|
93
|
-
- Root-level files that should be in subdirectories or gitignored
|
|
94
|
-
|
|
95
|
-
### Improvement Opportunities (Severity 4-7)
|
|
96
|
-
|
|
97
|
-
#### Architecture Refinements
|
|
98
|
-
- Connection Service mixing multiple database engine logic (violates SRP)
|
|
99
|
-
- Dashboard Module depending on too many entities (tight coupling)
|
|
100
|
-
- Missing Factory pattern for database engine selection
|
|
101
|
-
|
|
102
|
-
#### Performance Concerns
|
|
103
|
-
- No caching strategy for frequently accessed data
|
|
104
|
-
- Large bundle sizes in frontend without optimization
|
|
105
|
-
- Lambda cold start issues not addressed
|
|
106
|
-
|
|
107
|
-
#### Documentation Gaps
|
|
108
|
-
- No ADRs (Architecture Decision Records) documenting technical choices
|
|
109
|
-
- Missing API documentation despite Swagger setup
|
|
110
|
-
- Test strategy and coverage guidelines not defined
|
|
111
|
-
|
|
112
|
-
## John Carmack Critique 🔥
|
|
113
|
-
|
|
114
|
-
1. **Test Infrastructure is Fundamentally Broken**: You have a 98.3% pass rate but essentially 0% meaningful coverage. This is worse than having no tests - it gives false confidence. The authentication system processes JWT tokens and passwords with zero validation tests. In a production BI system handling enterprise data, this is unacceptable. Fix the test infrastructure immediately or accept that you're shipping blind.
|
|
115
|
-
|
|
116
|
-
2. **Type Safety Theater**: TypeScript with `Promise<any>` everywhere defeats the entire purpose. You're getting all the compilation overhead with none of the safety benefits. Either commit to proper typing or drop TypeScript - this middle ground helps nobody and slows down development while providing zero protection.
|
|
117
|
-
|
|
118
|
-
3. **Connection Service is a God Object**: One service handling 10+ database engines with massive switch-case logic. This violates every SOLID principle simultaneously. When MySQL behavior differs from BigQuery, you'll have cascade failures across unrelated database types. Factor this into per-engine strategies before it becomes unmaintainable.
|
|
119
|
-
|
|
120
|
-
## Recommendations
|
|
121
|
-
|
|
122
|
-
Based on the findings, here are prioritized action items:
|
|
123
|
-
|
|
124
|
-
- **Important fixes:**
|
|
125
|
-
- Fix test infrastructure immediately - add missing config files, proper mocking setup
|
|
126
|
-
- Remove file system pollution (*.iml files, root directory cleanup)
|
|
127
|
-
- Fix directory naming typos that break imports
|
|
128
|
-
- Establish proper TypeScript typing in API layer
|
|
129
|
-
|
|
130
|
-
- **Optional fixes/changes:**
|
|
131
|
-
- Refactor Connection Service using Strategy/Factory patterns
|
|
132
|
-
- Add comprehensive error handling patterns
|
|
133
|
-
- Implement caching layer for database metadata
|
|
134
|
-
- Create ADR documentation for major technical decisions
|
|
135
|
-
|
|
136
|
-
- **Next Sprint Focus:**
|
|
137
|
-
- Cannot proceed to next sprint until test infrastructure is stabilized
|
|
138
|
-
- Recommend creating "Test Infrastructure Recovery" sprint before continuing MVP stabilization
|
|
139
|
-
- Focus on establishing baseline test coverage for authentication and data processing modules
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
# Test-Strategy Alignment Review - 2025-06-12 12:00
|
|
2
|
-
|
|
3
|
-
## Alignment Summary
|
|
4
|
-
|
|
5
|
-
Overall alignment with testing strategy: **POOR**
|
|
6
|
-
|
|
7
|
-
Key findings:
|
|
8
|
-
- Test suite has extremely low practical coverage (<5%) despite 98.3% pass rate for basic smoke tests
|
|
9
|
-
- Critical functionality (authentication, data processing, UI components) has no meaningful test coverage
|
|
10
|
-
- Tests focus on implementation details rather than user behavior and business value
|
|
11
|
-
- Frontend has essentially zero test coverage for core BI functionality
|
|
12
|
-
|
|
13
|
-
## Tests Requiring Modification
|
|
14
|
-
|
|
15
|
-
### Remove (Over-engineered/Out of scope)
|
|
16
|
-
- `backend-api/test/QTT-*/` - Integration tests with hardcoded external database dependencies
|
|
17
|
-
- **Reason**: These tests depend on actual database connections and fail in isolation
|
|
18
|
-
- **Action**: Replace with mocked integration tests
|
|
19
|
-
|
|
20
|
-
### Simplify (Too complex for purpose)
|
|
21
|
-
- All `*.service.spec.ts` files currently only test `should be defined`
|
|
22
|
-
- **File**: `src/auth/auth.service.spec.ts`
|
|
23
|
-
- **Issue**: Pointless smoke test that provides no value
|
|
24
|
-
- **Action**: Replace with behavior-focused authentication flow tests
|
|
25
|
-
|
|
26
|
-
- All `*.controller.spec.ts` files with minimal coverage
|
|
27
|
-
- **File**: `src/dashboard/dashboard.controller.spec.ts`
|
|
28
|
-
- **Issue**: Missing dependency mocking, tests implementation details
|
|
29
|
-
- **Action**: Focus on HTTP contract testing and error handling
|
|
30
|
-
|
|
31
|
-
### Add (Critical gaps)
|
|
32
|
-
- **Authentication Security Tests**
|
|
33
|
-
- JWT token generation/validation
|
|
34
|
-
- Password validation and hashing
|
|
35
|
-
- Token refresh mechanism
|
|
36
|
-
- Session timeout handling
|
|
37
|
-
|
|
38
|
-
- **Database Connection Tests**
|
|
39
|
-
- Connection pool management
|
|
40
|
-
- SQL injection prevention
|
|
41
|
-
- Query timeout handling
|
|
42
|
-
- Multi-database engine support
|
|
43
|
-
|
|
44
|
-
- **Frontend User Journey Tests**
|
|
45
|
-
- Login/logout flow
|
|
46
|
-
- Widget creation 3-step process
|
|
47
|
-
- Dashboard layout drag-and-drop
|
|
48
|
-
- Data visualization rendering
|
|
49
|
-
|
|
50
|
-
- **API Integration Tests**
|
|
51
|
-
- Error response format consistency
|
|
52
|
-
- CORS handling
|
|
53
|
-
- Rate limiting behavior
|
|
54
|
-
- File upload security
|
|
55
|
-
|
|
56
|
-
## Recommended Actions
|
|
57
|
-
|
|
58
|
-
### Immediate (Blocking issues)
|
|
59
|
-
- [ ] Fix dependency injection in all service tests (`backend-api/src/**/*.service.spec.ts`)
|
|
60
|
-
- [ ] Remove hardcoded database connections from QTT tests
|
|
61
|
-
- [ ] Add basic authentication flow tests for security validation
|
|
62
|
-
- [ ] Fix floating-point precision issues in `frontend-web/src/widget/utils/chartUtil.test.ts`
|
|
63
|
-
|
|
64
|
-
### Short-term (Quality improvements)
|
|
65
|
-
- [ ] Implement test data factories for consistent mock objects
|
|
66
|
-
- [ ] Add comprehensive API contract tests for all controllers
|
|
67
|
-
- [ ] Create E2E test suite for critical user workflows
|
|
68
|
-
- [ ] Establish test coverage baseline and improvement targets
|
|
69
|
-
|
|
70
|
-
### Long-term (Technical debt)
|
|
71
|
-
- [ ] Implement visual regression testing for 50+ chart components
|
|
72
|
-
- [ ] Add performance testing for large dataset processing
|
|
73
|
-
- [ ] Create automated security testing pipeline
|
|
74
|
-
- [ ] Establish test strategy documentation with coverage guidelines
|
|
75
|
-
|
|
76
|
-
## Test Health Indicators
|
|
77
|
-
|
|
78
|
-
- Tests align with code purpose: **NO** - Most tests are meaningless smoke tests
|
|
79
|
-
- Critical paths covered: **NO** - Authentication, data processing, UI flows lack coverage
|
|
80
|
-
- Maintenance burden reasonable: **PARTIALLY** - Current tests are minimal but don't provide value
|
|
81
|
-
- Tests support development velocity: **NO** - Tests don't catch regressions or guide refactoring
|
|
82
|
-
|
|
83
|
-
## Implementation Examples
|
|
84
|
-
|
|
85
|
-
### Before (Current - Meaningless)
|
|
86
|
-
```typescript
|
|
87
|
-
// auth.service.spec.ts
|
|
88
|
-
describe('AuthService', () => {
|
|
89
|
-
it('should be defined', () => {
|
|
90
|
-
expect(service).toBeDefined();
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### After (Behavior-focused)
|
|
96
|
-
```typescript
|
|
97
|
-
// auth.service.spec.ts
|
|
98
|
-
describe('AuthService', () => {
|
|
99
|
-
describe('validateUser', () => {
|
|
100
|
-
it('should return user data for valid credentials', async () => {
|
|
101
|
-
const mockUser = { id: 1, email: 'test@test.com' };
|
|
102
|
-
mockUserRepository.findOne.mockResolvedValue(mockUser);
|
|
103
|
-
|
|
104
|
-
const result = await service.validateUser('test@test.com', 'validPassword');
|
|
105
|
-
|
|
106
|
-
expect(result).toEqual(mockUser);
|
|
107
|
-
expect(mockUserRepository.findOne).toHaveBeenCalledWith({
|
|
108
|
-
where: { email: 'test@test.com' }
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('should throw UnauthorizedException for invalid credentials', async () => {
|
|
113
|
-
mockUserRepository.findOne.mockResolvedValue(null);
|
|
114
|
-
|
|
115
|
-
await expect(service.validateUser('test@test.com', 'wrongPassword'))
|
|
116
|
-
.rejects.toThrow(UnauthorizedException);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Frontend Test Example
|
|
123
|
-
```typescript
|
|
124
|
-
// Widget creation flow test
|
|
125
|
-
describe('Widget Creation Flow', () => {
|
|
126
|
-
it('should complete 3-step widget creation successfully', async () => {
|
|
127
|
-
// Step 1: Dataset selection
|
|
128
|
-
fireEvent.click(screen.getByText('Sample Dataset'));
|
|
129
|
-
fireEvent.click(screen.getByText('다음'));
|
|
130
|
-
|
|
131
|
-
// Step 2: Chart type selection
|
|
132
|
-
fireEvent.click(screen.getByText('Line Chart'));
|
|
133
|
-
fireEvent.click(screen.getByText('다음'));
|
|
134
|
-
|
|
135
|
-
// Step 3: Configuration
|
|
136
|
-
fireEvent.change(screen.getByLabelText('위젯명'), {
|
|
137
|
-
target: { value: 'Test Widget' }
|
|
138
|
-
});
|
|
139
|
-
fireEvent.click(screen.getByText('저장'));
|
|
140
|
-
|
|
141
|
-
await waitFor(() => {
|
|
142
|
-
expect(screen.getByText('위젯이 생성되었습니다')).toBeInTheDocument();
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
## Next Review
|
|
149
|
-
|
|
150
|
-
Recommended review in: **2 weeks**
|
|
151
|
-
Focus areas for next review:
|
|
152
|
-
- Authentication test implementation progress
|
|
153
|
-
- Frontend test coverage establishment
|
|
154
|
-
- Integration test stability improvements
|
|
155
|
-
- Test infrastructure setup completion
|