Files
everything-is-suitable/docs/superpowers/plans/2026-04-27-pure-client-transformation/index.json
T
张翔 a39b4388f3 chore: 添加文档、资源与测试输出
- assets/ 静态资源
- docs/superpowers/ 技能文档
- dogfood-output/ 测试验证输出
2026-04-29 21:17:10 +08:00

189 lines
6.0 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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 运行时行为"
}
]
}
}
}