diff --git a/scripts/agents-index-contract.ps1 b/scripts/agents-index-contract.ps1 index 1fc3508ae..50af8adff 100644 --- a/scripts/agents-index-contract.ps1 +++ b/scripts/agents-index-contract.ps1 @@ -189,7 +189,7 @@ Assert-Contains $overseasCompose 'LASTLEG_SECURITY_SERVICE_URL' 'Lastleg 安全 Assert-NotContains $serviceJenkinsfile "'overseas-security-service'" '独立海外安全服务构建入口' # 高变化语义必须在最近指引与服务契约中保持一致。 -Assert-Contains $adminAgents '海外出库(范围外现存代码)' 'Admin 四期范围边界' +Assert-Contains $adminAgents '海外出库、派送、异常与回访(范围外现存代码)' 'Admin 四期范围边界' Assert-Contains $pdaAgents 'VITE_H5_API_BASE_URL' '国内 PDA H5 运行配置' Assert-Contains $overseasPdaAgents 'tests/app-icons.test.mjs' '海外 PDA 图标合同' Assert-Contains $backendAgents 'RestClientTraceInterceptor.java' '后端同步 Trace 入口' @@ -205,11 +205,22 @@ Assert-Contains $adminOceanBookingApi '/link-candidates' 'Admin 订舱关联候 Assert-Contains $adminOceanBookingView "label: '订舱柜量'" 'Admin 订舱柜量文案' Assert-Contains $adminOceanBookingViewTest 'without detail N+1' 'Admin 订舱列表无详情扇出合同' -# 已注册但超出当前四期边界的海外出库只能作为范围漂移事实存在,不得进入根正式业务路由。 +# 已注册但超出当前四期边界的海外出库及派生运营页只能作为范围漂移事实存在,不得进入根正式业务路由。 $adminOverseasRoutes = Read-RequiredText (Join-Path $workspaceRoot 'apps/admin-web/src/modules/overseas-warehouse/routes.ts') -Assert-Contains $adminOverseasRoutes "path: 'overseas-warehouse/outbounds'" 'Admin 海外出库现存路由' -Assert-Contains $adminAgents '海外出库(范围外现存代码)' 'Admin 海外出库范围警示' -Assert-NotContains $rootAgents 'OutboundsView.vue' '根正式四期业务路由' +foreach ($outOfScopeOverseasRoute in @( + 'overseas-warehouse/outbounds', + 'overseas-warehouse/delivery-orders', + 'overseas-warehouse/exception-orders', + 'overseas-warehouse/customer-visits' +)) { + Assert-Contains $adminOverseasRoutes "path: '$outOfScopeOverseasRoute'" "Admin 范围外现存路由 $outOfScopeOverseasRoute" +} +Assert-Contains $adminAgents '海外出库、派送、异常与回访(范围外现存代码)' 'Admin 海外范围漂移警示' +foreach ($outOfScopeRootEntry in @( + 'OutboundsView.vue', 'DeliveryOrdersView.vue', 'ExceptionOrdersView.vue', 'CustomerVisitsView.vue' +)) { + Assert-NotContains $rootAgents $outOfScopeRootEntry '根正式四期业务路由' +} # Admin 仅对静态资源过期做一次受控恢复,不能吞掉普通路由错误或覆盖未保存编辑。 $navigationRecovery = Read-RequiredText (Join-Path $workspaceRoot 'apps/admin-web/src/core/routing/navigationRecovery.ts') @@ -226,6 +237,34 @@ Assert-Contains $domesticPdaVite 'API_PROXY_TARGET' '国内 PDA H5 代理上游' Assert-Contains $domesticPdaSession 'session.apiBase = PLATFORM_API_ROOT' '国内 PDA 当前构建 API' Assert-NotContains $domesticPdaSession 'apiBase: session.apiBase' '国内 PDA 会话持久化' +# 国内和海外 PDA 使用相同协议但完全独立的 APK/WGT 更新通道。 +$domesticPdaUpdater = Read-RequiredText (Join-Path $workspaceRoot 'apps/pda-uniapp/utils/app-update.js') +$domesticPdaApp = Read-RequiredText (Join-Path $workspaceRoot 'apps/pda-uniapp/App.vue') +$overseasPdaUpdater = Read-RequiredText (Join-Path $workspaceRoot 'apps/pda-overseas-uniapp/src/utils/app-update.js') +$overseasPdaApp = Read-RequiredText (Join-Path $workspaceRoot 'apps/pda-overseas-uniapp/src/App.vue') +foreach ($pdaUpdate in @( + @{ Source = $domesticPdaUpdater; Scope = '国内 PDA 在线更新' }, + @{ Source = $overseasPdaUpdater; Scope = '海外 PDA 在线更新' } +)) { + Assert-Contains $pdaUpdate.Source 'VITE_PDA_UPDATE_URL' $pdaUpdate.Scope + Assert-Contains $pdaUpdate.Source "['apk', 'wgt'].includes(packageType)" $pdaUpdate.Scope + Assert-Contains $pdaUpdate.Source '更新包必须使用 HTTPS 地址' $pdaUpdate.Scope + Assert-Contains $pdaUpdate.Source 'plus.runtime.install' $pdaUpdate.Scope +} +Assert-Contains $domesticPdaApp '#ifdef APP-PLUS' '国内 PDA App 更新平台边界' +Assert-Contains $overseasPdaApp '#ifdef APP-PLUS' '海外 PDA App 更新平台边界' +Assert-Contains $pdaAgents '不得复用海外 PDA' '国内 PDA 独立更新通道' +Assert-Contains $overseasPdaAgents '不得与国内 PDA 混用' '海外 PDA 独立更新通道' + +# 人工分柜到 LOADED 只允许使用已登记的可选 fixture/verify 链,不进入默认全量。 +$adminAcceptanceEntry = Read-RequiredText (Join-Path $backendRoot 'scripts/admin-test-env-acceptance.mjs') +$adminAcceptanceModuleIndex = Read-RequiredText (Join-Path $backendRoot 'scripts/admin-test-env-modules/README.md') +$scriptsIndex = Read-RequiredText (Join-Path $backendRoot 'scripts/README.md') +Assert-Contains $adminAcceptanceEntry "const OPTIONAL_MODULES = ['manual-order-splitting-fixture'" '人工验收可选模块注册' +Assert-Contains $adminAcceptanceModuleIndex '人工分柜通过后可继续执行 `manual-preload-push-fixture.mjs`' '人工分柜到预装链路' +Assert-Contains $adminAcceptanceModuleIndex 'PDA 待复核通过后,`manual-loading-complete-fixture.mjs`' '人工 PDA 到 LOADED 链路' +Assert-Contains $scriptsIndex 'manual-*-fixture/verify' '人工分段验收根索引' + # 同步 RestClient Trace 必须注册为公共自动配置,不能只有孤立拦截器源码。 $commonWebAutoConfigurations = Read-RequiredText (Join-Path $backendRoot 'common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports') Assert-Contains $commonWebAutoConfigurations 'com.baiyue.common.web.RestClientTracePropagationAutoConfiguration' 'RestClient Trace 自动配置注册' @@ -290,6 +329,13 @@ $criticalPaths = @( 'apps/admin-web/src/core/routing/navigationRecovery.test.ts', 'apps/admin-web/src/modules/overseas-warehouse/api/outbounds.ts', 'apps/admin-web/src/modules/overseas-warehouse/pages/OutboundsView.vue', + 'apps/admin-web/src/modules/overseas-warehouse/api/deliveryOrders.ts', + 'apps/admin-web/src/modules/overseas-warehouse/pages/DeliveryOrdersView.vue', + 'apps/admin-web/src/modules/overseas-warehouse/pages/DeliveryOrderDetailView.vue', + 'apps/admin-web/src/modules/overseas-warehouse/api/exceptionOrders.ts', + 'apps/admin-web/src/modules/overseas-warehouse/pages/ExceptionOrdersView.vue', + 'apps/admin-web/src/modules/overseas-warehouse/api/customerVisits.ts', + 'apps/admin-web/src/modules/overseas-warehouse/pages/CustomerVisitsView.vue', 'apps/admin-web/src/modules/iam/pages/InternalUsersView.vue', 'apps/admin-web/src/modules/iam/api/platformIam.ts', 'apps/admin-web/src/modules/unified-orders/api/unifiedOrders.ts', @@ -303,6 +349,8 @@ $criticalPaths = @( 'apps/pda-uniapp/config/runtime.js', 'apps/pda-uniapp/.env.example', 'apps/pda-uniapp/vite.config.js', + 'apps/pda-uniapp/utils/app-update.js', + 'apps/pda-uniapp/tests/app-update.test.mjs', 'apps/pda-uniapp/utils/evidence-upload-queue.js', 'apps/pda-overseas-uniapp/package.json', 'apps/pda-overseas-uniapp/src/pages.json', @@ -318,6 +366,12 @@ $criticalPaths = @( 'apps/pda-overseas-uniapp/src/utils/scan-broadcast.js', 'apps/pda-overseas-uniapp/src/manifest.json', 'apps/pda-overseas-uniapp/tests/app-icons.test.mjs', + 'apps/pda-overseas-uniapp/src/utils/app-update.js', + 'apps/pda-overseas-uniapp/tests/app-update.test.mjs', + 'apps/pda-overseas-uniapp/src/i18n/index.js', + 'apps/pda-overseas-uniapp/src/i18n/locales/zh-CN.js', + 'apps/pda-overseas-uniapp/src/i18n/locales/en.js', + 'apps/pda-overseas-uniapp/src/i18n/locales/es.js', 'baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/FeePaymentSnapshotValidator.java', 'baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/client/FeePaymentVoucherFileClient.java', 'baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/mapper/InboundPlanQueryMapper.java', @@ -421,6 +475,11 @@ $criticalPaths = @( 'baiyue-firstleg/scripts/deploy-built-service-rollback.test.mjs', 'baiyue-firstleg/scripts/java-quality-summary.mjs', 'baiyue-firstleg/scripts/java-quality-summary.test.mjs', + 'baiyue-firstleg/scripts/admin-test-env-modules/manual-order-splitting-contract.test.mjs', + 'baiyue-firstleg/scripts/admin-test-env-modules/manual-preload-push-contract.test.mjs', + 'baiyue-firstleg/scripts/admin-test-env-modules/manual-pda-ready-contract.test.mjs', + 'baiyue-firstleg/scripts/admin-test-env-modules/manual-pda-batch-contract.test.mjs', + 'baiyue-firstleg/scripts/admin-test-env-modules/manual-loading-complete-contract.test.mjs', 'docs/四期/船节点标准化契约.md' ) $criticalPaths | ForEach-Object { Assert-Path $_ }