gitea.env
4343ab5
live
priceGuard={minRatio:0.2,maxRatio:2}
probeSpecs.dimensionAliases
purchasecontract.RuleSnapshot
56443c9
priceGuard
PurchaseRuleParser
schemaVersion
ruleType
requiredCapabilities
actions
PURCHASE_RULE_INVALID
dimensionAliases
main
PurchasePriceGuard
minRatio
maxRatio
minRatio <= maxRatio
minUnitPriceCent
maxUnitPriceCent
minRatio > maxRatio
go test ./app/goauto/purchasecontract ./app/goauto/purchase
android\gradlew.bat testDebugUnitTest
android\gradlew.bat assembleDebug
git diff --check
实现:
contracts/purchase-rule-live-v1.json
priceGuard={0.2,2}
验证:
cd server && go test ./app/goauto/purchasecontract ./app/goauto/purchase
android\gradlew.bat -p android testDebugUnitTest
android\gradlew.bat -p android assembleDebug
git diff --cached --check
0117D831DC3C76E0180BCBD097A8E42D33A5D479C6F94945BE316847C82EC93A
PURCHASE_RULE_INVALID:采购规则 包含未知字段: priceGuard
#1
交付:
13d291a
工单保持开启,等待用户验收。
用户于 2026-08-31 明确要求安装最新 APK。
安装前门禁:
3B65BD02H7F00000
构建与安装:
android/app/build/outputs/apk/debug/app-debug.apk
6441461
adb -s 3B65BD02H7F00000 install -r ...
versionCode=48
versionName=0.9.35
未重试 CG44、未创建订单、未支付。工单继续保持待验收。
No dependencies set.
The note is not visible to the blocked user.
原始需求摘要
gitea.env读取,未写入工单或日志。当前事实与根因
4343ab5,核验日期:2026-08-31。live采购任务,规则快照顶层包含合法priceGuard={minRatio:0.2,maxRatio:2},同时包含 #174 的probeSpecs.dimensionAliases。purchasecontract.RuleSnapshot自 #146(56443c9)起支持并严格校验priceGuard;Admin 当前规则也会保存该字段。PurchaseRuleParser的顶层字段白名单仍只有schemaVersion、ruleType、requiredCapabilities、actions,因此在执行器和任何 PDD 动作之前返回PURCHASE_RULE_INVALID。目标
priceGuard。priceGuard保持与服务端一致的严格字段和范围校验,不能通过简单忽略未知内容放宽规则安全边界。非目标
前置依赖与并行性
priceGuard服务端契约和 #174 的dimensionAliasesAgent 契约,二者代码均已在当前main。实施方案
PurchasePriceGuard(或等效严格解析结构)。priceGuard;显式提供时必须是对象,只允许minRatio、maxRatio。minRatio为 0.1~1.0,maxRatio为 1.0~3.0,最多 4 位小数,且minRatio <= maxRatio;拒绝缺字段、非数值、NaN/Infinity、额外字段及越界值。minUnitPriceCent/maxUnitPriceCent为唯一价格边界。priceGuard、probeSpecs.dimensionAliases和正式动作的当前完整规则快照;补充各类非法priceGuard拒绝测试。验收标准
priceGuard={minRatio:0.2,maxRatio:2}的 CG44 同形规则快照可被 Android 解析。priceGuard的旧任务快照继续兼容。minRatio > maxRatio均被拒绝。验证计划
go test ./app/goauto/purchasecontract ./app/goauto/purchaseandroid\gradlew.bat testDebugUnitTestandroid\gradlew.bat assembleDebuggit diff --check风险与安全边界
priceGuard或其他未知字段。设计证据
子项目影响
文档影响
priceGuard合法范围和用途,本工单恢复 Android 与既有契约一致,不产生新 API、业务规则或运维事实,因此跳过 Wiki 更新与同步。实施完成,待验收
实现:
PurchaseRuleParser已将可选priceGuard纳入顶层严格白名单,并按服务端同一万分比语义校验minRatio/maxRatio。minRatio > maxRatio均拒绝;缺省字段的旧快照继续兼容,其他未知顶层字段仍拒绝。minUnitPriceCent/maxUnitPriceCent。contracts/purchase-rule-live-v1.json,同时包含 CG44 同形priceGuard={0.2,2}、probeSpecs.dimensionAliases和完整正式动作;服务端与 Android 测试直接消费同一文件。验证:
cd server && go test ./app/goauto/purchasecontract ./app/goauto/purchase:通过。android\gradlew.bat -p android testDebugUnitTest:BUILD SUCCESSFUL。android\gradlew.bat -p android assembleDebug:BUILD SUCCESSFUL。git diff --cached --check:通过。0117D831DC3C76E0180BCBD097A8E42D33A5D479C6F94945BE316847C82EC93A。PURCHASE_RULE_INVALID:采购规则 包含未知字段: priceGuard;执行记录仍只有#1,未新增重试,尚未取得订单号且保持待人工复核。交付:
13d291a。priceGuard的范围、默认值和价格快照语义,本次仅恢复 Android 对既有契约的兼容,因此跳过 Wiki 更新与同步。工单保持开启,等待用户验收。
最新 APK 已安装
用户于 2026-08-31 明确要求安装最新 APK。
安装前门禁:
main均为13d291a。3B65BD02H7F00000(OnePlus PKG110)。构建与安装:
android\gradlew.bat -p android assembleDebug:BUILD SUCCESSFUL。android/app/build/outputs/apk/debug/app-debug.apk,大小6441461bytes。0117D831DC3C76E0180BCBD097A8E42D33A5D479C6F94945BE316847C82EC93A。adb -s 3B65BD02H7F00000 install -r ...:Success。versionCode=48、versionName=0.9.35;本工单未提升版本号,以提交与 APK SHA-256 标识构建。未重试 CG44、未创建订单、未支付。工单继续保持待验收。