## 范围与边界 **本次只改代码层**:客户端包名、Android/iOS/macOS 标识、环境变量前缀、Rust crate 名、 类名/文件名、以及全部文案与注释。**数据层标识一处未动**(卷名 `pmon_pg_data`、 `POSTGRES_USER/DB`、连接串默认值),那些在阶段 B 单独做迁移,理由见下。 统计:**114 个文件、1687 处**替换 + **8 个文件/目录重命名**。 ## 改了什么 | 类别 | 旧 | 新 | |---|---|---| | Dart 包名 | `pmon_client` | `inkwatch_client`(41 个文件的 import 同步) | | Android namespace | `com.pmon.pmon_client` | `com.inkwatch.eink` | | Android applicationId | `com.inkwatch.eink` | **保持不变** —— 它本来就已是新名 | | Kotlin 包目录 | `kotlin/com/pmon/pmon_client/` | `kotlin/com/inkwatch/eink/` | | macOS bundle | `com.pmon.pmonClient` | `com.inkwatch.eink` | | 环境变量 | `PMON_*`(12 个) | `INKWATCH_*` | | Rust crate | `pmon-core` / `pmon_core` | `inkwatch-core` / `inkwatch_core` | | 动态库 | `libpmon_core.dylib` | `libinkwatch_core.dylib` | | 类/文件 | `PmonApp` `PmonColors` `PmonChannel` `PmonCollectorService` `pmon_agent.dart` … | `Inkwatch*` / `inkwatch_*.dart` | ## 三处**必须单独说**的判断 **① applicationId 刻意没动。** `build.gradle.kts:49` 有既有说明:水墨屏专属版用 `com.inkwatch.eink`,与主干通用版**刻意不同**,为的是两版本能在同一台手机上共存 (versionCode 各自递增,同包名会互相覆盖且降级被拒装)。它已经是新名,动它反而 破坏这个设计。我改的是 `namespace`(内部分包名,只影响编译期),并把它统一到同一个 `com.inkwatch.eink`。 **② 局域网 P2P 线协议前缀一起改了**(`PMON-PUNCH:` / `PMON-PONG:` / `PMON-FRAME:` → `INKWATCH-*`)。这**不是纯文案**:两端必须同时升级,否则新旧版本在同一局域网里互不 认。判断依据是这三个前缀只用于同一用户的两台设备直连,且当前尚未对外发布;若以后 要支持跨版本,正确做法是加协议版本协商而不是回退旧前缀。 **③ 数据层标识一处未动。** `deploy/` 下 28 个文件仍是 `pmon`,因为卷名/库名/库用户 的改动会直接导致连不上库或指向新空卷(`docker-compose.all.yml:26-29` 里写着: 改名会让 compose 去找 `inkwatch_pg_data` 这套新空卷,等于把生产清库)。实测当前 数据是 **2.5GB、128 个账号、58 台设备**,不是测试库。 ## 安全网 动手前做了完整备份: `.backup-rename-20261108/pmon_before_rename.dump`(`pg_dump -Fc`,152MB), 并记录了迁移前各表行数基线,供阶段 B 逐表比对。 ## 验证 客户端全量 **595 通过 / 2 失败** —— 与改名前的数字**完全一致**,两条仍为 `libinkwatch_core.dylib` 未编译(Rust 核心未构建,环境缺口)。**数字一致**是这次 改名的核心判据:一个纯机械改名必须不改变任何测试结果,若通过数变了就说明改坏了东西。 服务端代码只动了注释与环境变量名,逻辑零改动,阶段 B 后一并回归。
163 lines
5.6 KiB
JSON
163 lines
5.6 KiB
JSON
{
|
|
"name": "inkwatch-server",
|
|
"version": "1.0.0",
|
|
"lockfileVersion": 3,
|
|
"requires": true,
|
|
"packages": {
|
|
"": {
|
|
"name": "inkwatch-server",
|
|
"version": "1.0.0",
|
|
"license": "UNLICENSED",
|
|
"dependencies": {
|
|
"pg": "^8.12.0"
|
|
}
|
|
},
|
|
"node_modules/pg": {
|
|
"version": "8.23.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/pg/-/pg-8.23.0.tgz",
|
|
"integrity": "sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg==",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"pg-connection-string": "^2.14.0",
|
|
"pg-pool": "^3.14.0",
|
|
"pg-protocol": "^1.16.0",
|
|
"pg-types": "2.2.0",
|
|
"pgpass": "1.0.5"
|
|
},
|
|
"engines": {
|
|
"node": ">= 16.0.0"
|
|
},
|
|
"optionalDependencies": {
|
|
"pg-cloudflare": "^1.4.0"
|
|
},
|
|
"peerDependencies": {
|
|
"pg-native": ">=3.0.1"
|
|
},
|
|
"peerDependenciesMeta": {
|
|
"pg-native": {
|
|
"optional": true
|
|
}
|
|
}
|
|
},
|
|
"node_modules/pg-cloudflare": {
|
|
"version": "1.4.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz",
|
|
"integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==",
|
|
"license": "MIT",
|
|
"optional": true
|
|
},
|
|
"node_modules/pg-connection-string": {
|
|
"version": "2.14.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/pg-connection-string/-/pg-connection-string-2.14.0.tgz",
|
|
"integrity": "sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==",
|
|
"license": "MIT"
|
|
},
|
|
"node_modules/pg-int8": {
|
|
"version": "1.0.1",
|
|
"resolved": "http://mirrors.tencent.com/npm/pg-int8/-/pg-int8-1.0.1.tgz",
|
|
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
|
|
"license": "ISC",
|
|
"engines": {
|
|
"node": ">=4.0.0"
|
|
}
|
|
},
|
|
"node_modules/pg-pool": {
|
|
"version": "3.14.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/pg-pool/-/pg-pool-3.14.0.tgz",
|
|
"integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==",
|
|
"license": "MIT",
|
|
"peerDependencies": {
|
|
"pg": ">=8.0"
|
|
}
|
|
},
|
|
"node_modules/pg-protocol": {
|
|
"version": "1.16.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/pg-protocol/-/pg-protocol-1.16.0.tgz",
|
|
"integrity": "sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg==",
|
|
"license": "MIT"
|
|
},
|
|
"node_modules/pg-types": {
|
|
"version": "2.2.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/pg-types/-/pg-types-2.2.0.tgz",
|
|
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"pg-int8": "1.0.1",
|
|
"postgres-array": "~2.0.0",
|
|
"postgres-bytea": "~1.0.0",
|
|
"postgres-date": "~1.0.4",
|
|
"postgres-interval": "^1.1.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=4"
|
|
}
|
|
},
|
|
"node_modules/pgpass": {
|
|
"version": "1.0.5",
|
|
"resolved": "http://mirrors.tencent.com/npm/pgpass/-/pgpass-1.0.5.tgz",
|
|
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"split2": "^4.1.0"
|
|
}
|
|
},
|
|
"node_modules/postgres-array": {
|
|
"version": "2.0.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/postgres-array/-/postgres-array-2.0.0.tgz",
|
|
"integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
|
|
"license": "MIT",
|
|
"engines": {
|
|
"node": ">=4"
|
|
}
|
|
},
|
|
"node_modules/postgres-bytea": {
|
|
"version": "1.0.1",
|
|
"resolved": "http://mirrors.tencent.com/npm/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
|
|
"integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==",
|
|
"license": "MIT",
|
|
"engines": {
|
|
"node": ">=0.10.0"
|
|
}
|
|
},
|
|
"node_modules/postgres-date": {
|
|
"version": "1.0.7",
|
|
"resolved": "http://mirrors.tencent.com/npm/postgres-date/-/postgres-date-1.0.7.tgz",
|
|
"integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
|
|
"license": "MIT",
|
|
"engines": {
|
|
"node": ">=0.10.0"
|
|
}
|
|
},
|
|
"node_modules/postgres-interval": {
|
|
"version": "1.2.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/postgres-interval/-/postgres-interval-1.2.0.tgz",
|
|
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"xtend": "^4.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=0.10.0"
|
|
}
|
|
},
|
|
"node_modules/split2": {
|
|
"version": "4.2.0",
|
|
"resolved": "http://mirrors.tencent.com/npm/split2/-/split2-4.2.0.tgz",
|
|
"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
|
|
"license": "ISC",
|
|
"engines": {
|
|
"node": ">= 10.x"
|
|
}
|
|
},
|
|
"node_modules/xtend": {
|
|
"version": "4.0.2",
|
|
"resolved": "http://mirrors.tencent.com/npm/xtend/-/xtend-4.0.2.tgz",
|
|
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
|
|
"license": "MIT",
|
|
"engines": {
|
|
"node": ">=0.4"
|
|
}
|
|
}
|
|
}
|
|
}
|