# fmode-app-mirror · 项目宪法 时尚魔镜(Fashion Magic Mirror)虚拟试衣独立仓。Angular 18 + Ionic 8 + Capacitor 6。 ## 身份 - 提取自 `git.fmode.cn/2205106/FashionMagicMirror`(源仓致谢,业务代码保留) - 归档仓:`https://git.fmode.cn/fmode-18691770343/fmode-app-mirror`(公开) - 线上:`https://app.fmode.cn/dev/zC4W4aVTCo/index.html`(独立 Product ID zC4W4aVTCo,Nova Admin 已登记;勿发 fmode.cn/aipm-lesson/) ## 构建纪律 - Node 20.x;依赖安装优先 `npm ci`(package-lock 已入库),peer deps 冲突才用 `--legacy-peer-deps`。 - 产物目录 `www/`(angular.json outputPath),**不入库**(.gitignore 已忽略)。 - 每次修复启动/构建阻塞问题,单独一个 `fix:` commit,说明根因。 - Capacitor 只用 Web 层;不安装原生平台、不跑 `npx cap add`。 ## 部署纪律 - `ng build --configuration production --base-href /dev/zC4W4aVTCo/` → `cp www/index.html www/404.html`(SPA fallback;构建后先核对 www/index.html 里 base href 正确再上传)。 - OBS 上传目标 `obs://nova-cloud/dev/zC4W4aVTCo/`(逐文件指定目标键,禁目录递归 cp;html/css/js/图片带正确 content-type;`-acl=public-read`)。 - CDN 刷新只用 app.fmode.cn 域名组脚本:`node /opt/data/git-repos/fmode-app/scripts/refresh-cdn.js`(目录 `https://app.fmode.cn/dev/zC4W4aVTCo/`);**禁用 refresh-fmode-cn.js**(刷的是 fmode.cn 域名组,与本产品无关)。 - 发布后逐 URL `curl` 验收 200 + 内容正确,才算上线成功。 - Git 归档与前端上线是两个独立状态门禁,分别报告,禁止互相冒充。 ## 凭据零暴露 - sessionToken 只从 `~/.fmode/config/user.json`(0600)读取,用完即弃,不落盘。 - Gogs 个人 token 仅进程内存使用,不进 remote URL / 文件 / 日志 / 报告。 - OBS AK/SK 只通过 `OBSUTIL_CONFIG` 指向的配置文件间接使用,绝不写入本仓。 - 任何密钥不得出现在 commit、截图、终端输出、最终交付报告。 ## Git 纪律 - Conventional Commits(feat/fix/docs/chore/refactor/style)。 - 不强推 main;不修改他人历史;`git add <文件>` 不用 `git add .`。 - push 后必须 `git ls-remote` 验证远端 SHA。 - 平台接口 401/209 时走「对话式验证码登录」自愈流程(07-git.md 标准节),不向用户索要密码。 ## 已上线 vs 规划中(04-API设计.md 对齐) - ✅ 已接入:Git 幂等开户/建仓/push;OBS 静态发布 + CDN;Parse 主端点(server.fmode.cn/parse, appId ncloudmaster)。 - ❌ 跳过:storage/credentials、计费 API(status:规划中,勿照抄端点);deploy STS 对本 session 返回 403,未接入。