189 lines
6.0 KiB
JSON
189 lines
6.0 KiB
JSON
{
|
||
"plan": {
|
||
"id": "pure-client-transformation",
|
||
"name": "纯客户端转型实现计划",
|
||
"version": "1.1.0",
|
||
"date": "2026-04-27",
|
||
"designDoc": "docs/superpowers/specs/2026-04-27-pure-client-transformation-design.md",
|
||
"goal": "将 Everything Is Suitable 从 C/S 架构转型为纯客户端 App,定位中国传统文化研究工具,通过 App Store/Google Play/国内安卓商店买断制付费分发",
|
||
"architecture": "在现有 UniApp 项目基础上,将 Java 后端算法 1:1 移植为 TypeScript,替换远程 API 调用为本地计算,移除全部服务端依赖",
|
||
"techStack": [
|
||
"UniApp",
|
||
"Vue 3",
|
||
"TypeScript",
|
||
"Vitest",
|
||
"Playwright",
|
||
"lunar-javascript"
|
||
],
|
||
"executionMode": "sequential",
|
||
"phases": [
|
||
{
|
||
"id": "phase-1",
|
||
"name": "基础设施与类型定义",
|
||
"file": "phase-1-infrastructure-and-types.json",
|
||
"status": "completed",
|
||
"completedAt": "2026-04-27T20:47:00+08:00"
|
||
},
|
||
{
|
||
"id": "phase-2",
|
||
"name": "核心算法移植",
|
||
"file": "phase-2-core-algorithm-migration.json",
|
||
"status": "completed",
|
||
"completedAt": "2026-04-27T21:18:00+08:00"
|
||
},
|
||
{
|
||
"id": "phase-3",
|
||
"name": "本地服务层实现",
|
||
"file": "phase-3-local-service-layer.json",
|
||
"status": "completed",
|
||
"completedAt": "2026-04-27T22:21:00+08:00"
|
||
},
|
||
{
|
||
"id": "phase-4",
|
||
"name": "后端依赖移除与页面适配",
|
||
"file": "phase-4-backend-removal-and-page-adaptation.json",
|
||
"status": "completed",
|
||
"completedAt": "2026-04-28T03:49:00+08:00"
|
||
},
|
||
{
|
||
"id": "phase-5",
|
||
"name": "新增页面与功能",
|
||
"file": "phase-5-new-pages-and-features.json",
|
||
"status": "completed",
|
||
"completedAt": "2026-04-28T03:57:24+08:00"
|
||
},
|
||
{
|
||
"id": "phase-6",
|
||
"name": "交叉验证与质量保障",
|
||
"file": "phase-6-cross-validation-and-quality.json",
|
||
"status": "completed",
|
||
"completedAt": "2026-04-28T04:25:00+08:00"
|
||
},
|
||
{
|
||
"id": "phase-7",
|
||
"name": "CI/CD 与商店适配",
|
||
"file": "phase-7-cicd-and-store-adaptation.json",
|
||
"status": "completed",
|
||
"completedAt": "2026-04-28T04:31:14+08:00"
|
||
}
|
||
],
|
||
"fileStructure": {
|
||
"create": [
|
||
"src/algorithms/types.ts",
|
||
"src/algorithms/enums.ts",
|
||
"src/algorithms/ziweiAlgorithm.ts",
|
||
"src/algorithms/sanFangSiZheng.ts",
|
||
"src/algorithms/fortuneStrategy.ts",
|
||
"src/algorithms/almanac.ts",
|
||
"src/algorithms/fortune.ts",
|
||
"src/algorithms/calendar.ts",
|
||
"src/services/almanacService.ts",
|
||
"src/services/ziweiService.ts",
|
||
"src/services/fortuneService.ts",
|
||
"src/services/searchService.ts",
|
||
"src/services/templateService.ts",
|
||
"src/utils/storage.ts",
|
||
"src/utils/exportImport.ts",
|
||
"src/pages/ziwei/index.vue",
|
||
"src/pages/fortune/index.vue",
|
||
"Jenkinsfile"
|
||
],
|
||
"modify": [
|
||
"src/pages/almanac-search/index.vue",
|
||
"src/types/search.ts",
|
||
"package.json"
|
||
],
|
||
"delete": [
|
||
"src/utils/httpClient.ts",
|
||
"src/utils/tokenManager.ts",
|
||
"../everything-is-suitable-api/",
|
||
"../everything-is-suitable-admin/",
|
||
"../everything-is-suitable-test/",
|
||
"../docker-compose.yml",
|
||
"../docker-compose.*.yml",
|
||
"../Dockerfile*",
|
||
"../.woodpecker.yml"
|
||
]
|
||
},
|
||
"qualityGates": {
|
||
"algorithmUnitTestCoverage": ">=90%",
|
||
"serviceUnitTestCoverage": ">=80%",
|
||
"crossValidationPassRate": "100%",
|
||
"e2eCriticalPathPassRate": "100%",
|
||
"lintErrors": 0,
|
||
"typescriptStrictMode": true
|
||
},
|
||
"dogfoodTesting": {
|
||
"status": "completed",
|
||
"completedAt": "2026-04-28T15:50:00+08:00",
|
||
"summary": {
|
||
"pagesTested": 3,
|
||
"interactionsTested": 3,
|
||
"unitTestsPassed": 361,
|
||
"unitTestFiles": 19,
|
||
"consoleErrors": 0,
|
||
"asyncLoadingErrors": 0
|
||
},
|
||
"pages": [
|
||
{
|
||
"name": "黄历搜索首页",
|
||
"status": "pass",
|
||
"elements": [
|
||
"搜索模板",
|
||
"搜索条件",
|
||
"搜索天数",
|
||
"搜索按钮",
|
||
"底部导航"
|
||
],
|
||
"interactions": [
|
||
"添加搜索条件",
|
||
"选择模板分类",
|
||
"执行搜索"
|
||
]
|
||
},
|
||
{
|
||
"name": "紫微斗数页面",
|
||
"status": "pass",
|
||
"elements": [
|
||
"出生日期",
|
||
"出生时辰",
|
||
"性别选择",
|
||
"排盘按钮"
|
||
]
|
||
},
|
||
{
|
||
"name": "运势分析页面",
|
||
"status": "pass",
|
||
"elements": [
|
||
"日运/月运切换",
|
||
"日期显示",
|
||
"排盘提示"
|
||
]
|
||
}
|
||
],
|
||
"bugsFound": [
|
||
{
|
||
"id": "BUG-001",
|
||
"severity": "P1",
|
||
"description": "templateService.ts 缺少默认导出,导致页面加载时出现 'does not provide an export named default' 错误",
|
||
"status": "fixed",
|
||
"fix": "添加 const templateService = new TemplateService(); export default templateService"
|
||
},
|
||
{
|
||
"id": "BUG-002",
|
||
"severity": "P1",
|
||
"description": "TemplatePanel 组件调用 templateService.getCategories() 等不存在的方法",
|
||
"status": "fixed",
|
||
"fix": "在 TemplateService 中添加 getCategories(), getSearchTemplates(), getTemplatesByCategory(), searchTemplates() 方法"
|
||
}
|
||
],
|
||
"warnings": [
|
||
{
|
||
"description": "picker 组件在单元测试中无法解析(Vue warn: Failed to resolve component: picker)",
|
||
"severity": "P3",
|
||
"note": "UniApp 原生组件在 vitest 环境中不可用,不影响 H5 运行时行为"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
} |