docs(01): 据 researcher 发现修正 CONTEXT.md(i18n 跟仓库字面量约定,app 归属锁定 aiapp,单例复刻 AffinitySetting)

This commit is contained in:
pmc 2026-05-07 17:09:13 +08:00
parent ddc7360f60
commit 0fab2aac36

View File

@ -32,7 +32,9 @@
- `app_id`CharFieldmax_length 合理128 足够覆盖常见服务商 ID 长度),允许空字符串(运营初次访问时尚未填写)
- `access_token`CharFieldmax_length 长512 留余量,覆盖 JWT 之类的长 token允许空字符串
- `updated_at`DateTimeField`auto_now=True`,每次保存自动刷新
- 推荐 app 归属:在现有 `aiapp` / `common` / `userapp` 三个 app 里选一个最贴合的;优先 `aiapp`(凭据语义偏向 AI 服务商接入),但若 `aiapp` 已有强语义模型可考虑 `common`。**最终 app 归属由 planner 在 read_first 阶段读完 `aiapp/models.py``common/` 后决定**
- **app 归属:`aiapp`**researcher 已确认:`common/` 不是 Django app 无 `apps.py`、未在 `INSTALLED_APPS`,无法承载 Model`userapp/models.py` 已 471 行承重过大;`aiapp/models.py` 当前仅 51 行追加合适;语义"凭据"与 AI 服务商接入强相关)。模型追加到 `aiapp/models.py` 末尾,不新建子文件
- **单例模式直接复刻 `userapp.models.AffinitySetting`247-314 行)**:仓库已有 pk=1 单例范本含 `save()` 钩子重定向 + `get_solo()` 类方法。Planner 必须把这两个文件读进 read_first照抄结构不要重新发明
- **脱敏工具新建 `common/utils.py:mask_token(token, visible_tail=4)`**grep `mask|脱敏|redact` 在代码侧 0 命中,须新建。放 `common/utils.py` 让 Phase 3 阿里云日志 formatter 可直接复用
- 模型 `__str__` 返回类似 `f"凭据槽位 (updated {self.updated_at:%Y-%m-%d %H:%M})"` 的可读串
### 数据迁移
@ -49,7 +51,7 @@
- 编辑表单字段:`app_id``access_token` 都明文(让运营录入 / 修改)
- **隐藏"新增"按钮**:重写 `has_add_permission(self, request)` 返回 `False if exists else True`(即记录已存在时禁止新增)
- **禁止删除**(避免运营误删后单例语义丢失):重写 `has_delete_permission(self, request)` 返回 `False`
- 中英 i18n模型 `Meta.verbose_name` / `verbose_name_plural``_()` 标记翻译admin 列表方法的 `short_description` 同样标记
- 中英 i18n**沿用仓库实操约定 = 中文字面量**researcher 实测:本仓库 4 个 admin.py 全是中文字面量,`_()` 仅 7 处零散使用,且 `LANGUAGES` / `LOCALE_PATHS``settings.py` 已被注释掉。Phase 1 不为 `verbose_name` / `short_description` 引入 `gettext_lazy`,保持与 `userapp/admin.py` / `aiapp/admin.py` 一致。i18n 体系化清洗留给独立 milestone。
### 兼容性 / 不引入新依赖