15 KiB
15 KiB
客户现场放行路线图
每次桥调用都必须携带由核准 ERP 会话范围计算的 v3 sessionScopeToken;服务端权威复核缺失、格式错误或会话漂移,不能只依赖页面或 CLI 的本地检查。
本文是实施人员使用的短版路线图。详细字段、命令参数、证据结构和负例要求以 CUSTOMER_ACCEPTANCE.md、WRITE_ACCEPTANCE.md 为准。任何阶段未完成时,相关写命令必须保持未注册;不得用修改配置、跳过预检或手工拼接证据的方式放行。
阶段 0:源码与第三方前置条件
- 已轮换所有曾进入聊天、日志、截图或临时文件的 API Key、数据库口令和机器人凭据。
- 待发布源码来自已审查、无未提交文件的固定提交;桌宠包和旧 ERP 构建绑定同一 40 位提交号。
- 已复核
guga-upstream-audit.v1.json,确认没有把 npm/网站 MIT 误当成素材许可;禁止生产机直接运行npx codex-pets add guga,并已取得绑定实际精灵图 SHA-256、权利人、商业使用、客户部署、复制、展示、地域和期限的书面商用许可;同时完成 AstrBot AGPL/EULA 与 MiniMax API 服务条款、区域、计费和数据处理审查。 - 客户已批准发布证书、RFC3161 时间戳服务、制品库、SBOM/恶意软件扫描和回滚负责人。
未满足以上任一项:只允许开发验证,不进入客户商用预检。
阶段 1:Windows 签名构建
- 在客户 Windows 构建机从固定干净提交运行
Build-LegacyErpAcceptance.ps1,生成独立的LegacyArtifactRoot。 - 构建脚本在签名前完成最终
Ls_ERP.exe、lserp-cli.exe和顶层Lskj.*.dll凭据扫描;未出现legacy_runtime_hardcoded_sql_credential:<文件名>,且扫描失败时日志不包含用户名或口令值。 Ls_ERP.exe、lserp-cli.exe及桥/内核依赖通过 .NET Framework 4、x86、DevExpress 15.2、CEF 和 Authenticode 检查。- 使用同一客户发布证书签署桌宠 Host 的 EXE 与两个业务 DLL;保存签名后哈希。
Verify-LserpCommercialPackage.ps1对最终 ZIP、解包清单、WebView2、AstrBot、MiniMax 探针、素材授权、发布策略和精确 ERP PID 全部通过。
未签名、提交号不一致、二进制在取证后被修改、存在多个 ERP 实例但未绑定 PID:立即停止。
阶段 2:客户只读画像与配置映射
- 仅使用客户批准的只读账号和只读脚本核对表、字段、过程、单据状态、权限和低代码配置;口令只从安全标准输入或客户凭据系统读取。
- 对尚未允许正常 ERP 登录的零写入目标库,先在 Windows PowerShell 5.1 交互执行
$credential = Get-Credential -UserName <SQL只读账号>,再运行Invoke-LserpSelectOnlyCatalogSnapshot.ps1 -Server <受信任TLS端点> -Database <库名> -Credential $credential -OutputPath <新snapshot.json>。脚本强制Encrypt=true、系统证书验证、ApplicationIntent=ReadOnly,并在目录读取前后各检查一次数据库/服务器角色、数据库级 DML/DDL/EXECUTE、所有用户表/视图、过程/函数和 Schema 的有效写权限;任一次发现可写即返回database_principal_not_select_only,不会发布快照或降级继续。 - SELECT-only 快照只执行两段随包固定且已通过 TSql100 AST 校验的
sys.*查询;不执行存储过程、不读业务行。采集器还把 PowerShell 实际加载的脚本 AST 字节与连接前、读取后的磁盘脚本 SHA-256 逐字绑定,脚本运行中被替换即返回tool_source_changed。输出采用当前用户与 LocalSystem ACL、CreateNew语义,只包含目标身份哈希、兼容级别、对象计数和最多 100000 个目录成员哈希,不包含服务器名、数据库名、登录名、密码或物理对象名。它用于零写入初始目录证明,不能代替后续绑定真实 ERP 用户/账套/子系统的桥会话预检。 - 立即用最终 CLI 运行
lserp-cli adapters verify-catalog-snapshot --input <snapshot.json> --profile <customer-profile.json> --tool-sha256 <随包采集脚本SHA-256>;只接受schemaVersion=1.1。只有工具字节稳定、24 小时时效、权限前后双检、TLS/只读声明、集合哈希、数据库身份/计数和画像关键目录全部匹配时,onlineMetadataMatches=true。验证完全离线且结果固定registrationReady=false;缺失项只以 SHA-256 表示,不能据此自动修改画像或启用写命令。 - 现场优先使用
Invoke-LserpSelectOnlyProfilePreflight.ps1一次完成上述两步。它要求显式固定画像、采集器、最终签名 CLI 的 SHA-256 和 CLI 签发者,只通过PSCredential对象把口令交给采集器;随后锁定三份输入、调用离线验证器,并以受限 ACL/CreateNew分别发布快照和脱敏报告。报告不含服务器、库、主体、对象名或路径;目录漂移会保留passed=false报告并返回非零,其他协议/身份故障不会留下未验证快照。该包装器仍固定registrationReady=false,不会登录旧 ERP、修改画像或开启业务写入。 - 先由实施人员在客户机本地核对 ERP 已登录界面,并从批准的 ERP 启动记录/只读会话交接中取得本次会话的 PID、数据库作用域指纹、用户编号、用户名、账套、子系统和管理员属性;不得猜测或让模型生成这些值。桥/工作流命令(包括独立签名管理员
lserp-cli.exe)不接受只传 PID 的引导调用。需要用 CLI 复核时,必须把七项范围完整展开,例如lserp-cli.exe bridge context --erp-process-id <PID> --expected-database-scope-fingerprint <64位小写SHA-256> --expected-user-id <用户编号> --expected-user-name <用户名> --expected-account-book <账套> --expected-subsystem-id <子系统编号> --expected-is-administrator <true|false>;该调用只验证已批准的预期范围与当前 ERP 上下文逐项一致,不能反过来作为“先连接再猜范围”的来源。不得把原始响应发给模型或写入普通日志。最终 ZIP 中的受限Host/lserp-agent-cli.exe从第一次调用起同样要求完整七项范围。将field-readonly-validation.example.json复制到包外 ACL 受控的新文件,逐项填写运行时 CLI 版本/SHA-256/签发者、ERP/预检脚本 SHA-256、PID、上述预期会话、发布策略客户 ID/SHA-256,以及 1–16 个purchase/leave/diagnosis/support → 客户实际模块或导航编号绑定;模板固定approved=false和零哈希,禁止直接使用。审批人核对后把approved=true,审批窗口不得超过 24 小时,且databaseCredentialsIncluded必须保持false。管理员lserp-cli.exe仅用于本地复核、离线配置与验收,不得填入运行时 CLI 身份字段。 - 对审核后的原始输入文件计算 SHA-256,先运行
Invoke-LserpFieldReadOnlyValidation.ps1 -InputPath <受控输入.json> -ExpectedInputSha256 <原始文件SHA256> -OutputPath <新交接报告.json> -ValidateInputOnly。通过后换一个新的交接报告路径、去掉-ValidateInputOnly执行;包装器会同时锁定输入和Invoke-LserpReadOnlySessionPreflight.ps1,逐项传递 PID、CLI/ERP 身份、管理员属性、用户、账套、子系统、数据库指纹、发布策略、动态模块集合、三个工作流开关和超时。它不会从 Bridge 自动回填或信任这些审批值,也不接收数据库地址、用户名、密码或连接串。不同 ERP 用户/PID/账套必须使用不同审批文件,不能把普通采购/请假会话和管理员诊断会话拼成一个虚假范围。 - 从最终桌宠核对标题下方只显示账套、子系统、用户和数据库指纹前 12 位证据,不显示服务器、库名、连接串或完整指纹。生成只读或可执行预览后切换数据库、用户、账套和子系统,确认旧计划在执行请求前作废;恢复原范围仍必须重新规划。数据库和登录身份不得作为模型业务参数传入。
- 命名管道格式必须固定为
lserp.agent.<PID>.<bridgeInstanceId>。在同一 ERP PID 内重建命令桥,确认新发现文件的bridgeInstanceId变化,管道名也从lserp.agent.<PID>.<旧bridgeInstanceId>变为lserp.agent.<PID>.<新bridgeInstanceId>;保留旧发现文件覆盖新桥监听前后的竞态窗口,旧客户端不得触达新桥。旧桌宠 Host/AstrBot 会话必须返回erp_bridge_instance_changed且不能发送业务请求,重新运行启动器后新会话才恢复。该标识不得进入模型、业务预览或交接报告。 - 只读会话预检只能调用
lserp-agent-cli version、bridge health/context/capabilities和bridge plan module.parameters;每个桥子进程参数白名单必须同时包含精确 PID、数据库作用域指纹、用户编号、用户名、账套、子系统和管理员布尔值。受限 CLI 自身要在目标命令前后复核上下文,包装器还要独立比对审批范围,二者任一发现漂移都丢弃结果。1.5 报告必须包含cli_runtime_identity、rollout_database_scope、expected_session_scope与dynamic_module_execution_contracts,证明bridgeOnly=true、databaseDirectAccess=false,并显示commandExecuteInvoked=false、directDatabaseConnectionUsed=false、businessWriteAttempted=false。1.1 交接报告必须绑定同一运行时 CLI 版本、SHA-256 和签发者。报告只能保存用户/账套/子系统哈希、动态合同/配置/原生执行指纹、经审核的保存族、参数类型与可编辑/必填数量、载荷策略及新增/修改阻断状态;载荷数量必须与参数合同一致,不能保存标签、参数 ID、业务值或物理配置。第一次参数发现使用validationStage=discovery,可不要求尚未注册的业务工作流;适配器与发布策略完成后使用validationStage=final,每个模块业务角色必须与对应工作流开关严格一致。诊断开关要求审批值和当前上下文都为内置管理员。 - 不运行写 SQL,不启用草案中的写开关,不把真实业务值、连接串、原始异常或原始 SQL 放入聊天、模型上下文和交付证据。
- 配置人员逐项复核
customer-profiles候选映射;最终画像、business-adapters.json和command-rollout.json放在包外受 ACL 保护的客户目录,并绑定原始字节 SHA-256。 - 在任何在线激活操作前运行
lserp-cli adapters activation-checklist --input <客户画像.json>。当前示例画像必须以退出码 6 列出固定 5 个采购、4 个请假开放阻断项,且输出只含稳定代码、所需证据类型和固定下一步;不得含数据库名、物理字段、画像证据正文或 SQL。全部阻断关闭后退出码才为 0,但activationAllowed/registrationReady仍必须为false,继续走签名验收和 V2/V3 运行时复核。 - 只读探针证明实际客户库兼容性;任何字段、类型、过程、账套、子系统、用户权限或模块代码漂移都先回到配置评审。
输入/预检脚本哈希、审批窗口、预期数据库指纹、用户、账套、子系统或管理员属性任一不一致,ERP 会话在预检中切换、只读计划出现 executionAllowed=true、发现意外数据变化、权限超出只读范围、脱敏失败或映射歧义:立即停止并保全审计记录。
阶段 3:可恢复非生产写工作流 UAT
- 客户书面确认该库是可恢复的非生产 UAT,备份与恢复演练、ERP 原生确认、事务和审计查询均已验证。
- 运行
New-WorkflowUatAuthorization.ps1签发最长 24 小时、绑定客户/环境/ERP/CLI/包/画像/策略/用例的短期授权;令牌库始终留在受限目录,绝不进入交付包、聊天或模型上下文。 - 运行
New-WorkflowWriteUatCampaign.ps1建立固定活动;管理员lserp-cli.exe仅用于离线验证,最终包内lserp-agent-cli.exe仅用于版本与桥调用,两者路径、哈希和签发者分别锁定;每次开始或恢复先运行Test-WorkflowWriteUatCampaign.ps1。 - 严格按唯一
nextCase逐项运行Invoke-WorkflowWriteCaseCapture.ps1:采购 13 项、请假 19 项,一次只执行一个用例,禁止循环或批量写入;每项原始索引都必须绑定实际运行 CLI 的版本、SHA-256 和签发者。 - 每项都由 DBA 只读核对业务变化数、事务、幂等、权限重检、原生确认、命令审计及来源附件摘要;确认后三项漂移场景必须保留人工暂停阶段。
- 采购确认页完整展示单据、来源、金额和每一条明细,滚动到底后才可确认;请假创建完整展示员工、类型、流转类别、起止时间、工时、原因和“创建后提交=false”,提交审批另行确认。
授权过期或串用、ERP/CLI/包/画像/策略哈希漂移、一次触发多个用例、无法证明回滚或审计:立即停止。先恢复环境并重新签发活动,不复用旧令牌或证据。
阶段 4:低代码初始化诊断取证
- 分别验证:静态配置错误、初始化 SQL 失败、初始化无 SQL 失败、初始化超时/卡死风险四类场景。
- 诊断确认页必须显示模块代码、导航代码、模块名、是否已打开、是否支持跟踪、跟踪范围、是否支持强制终止、最大事件数和最大时长。
- 现场明确看到“20 秒只限制 SQL 证据采集窗口,旧版 UI 初始化无法安全强制终止”的风险提示;可能卡死的模块只在隔离测试环境复现。
- 证据只保留会话别名、阶段、分类和调用位置,不保留参数值、原始 SQL、原始异常或客户数据。
范围、限制或风险说明不完整,页面声称能强制终止旧模块,或者诊断触及非目标 ERP 实例:禁止执行。
阶段 5:总验收与放行
- 按
CUSTOMER_ACCEPTANCE.md收集 23 个原始制品;采购、请假、诊断分别保留自己的 ERP PID/用户/子系统 1.4 预检和绑定其 SHA-256 的现场交接,采购与请假各自使用单工作流 UAT 授权,诊断必须为管理员。不得合并三份会话证据,也不包含令牌库、审核输入原文、原始发票、请假原因、数据库口令或连接串。 - 使用
New-CustomerAcceptanceBundle.ps1生成客户 RSA-SHA256 总签章,并由最终签名lserp-cli acceptance verify-customer-bundle在隔离机复验。 - 客户业务、DBA、安全、实施和发布负责人共同签收;发布后仍保持默认拒绝、最小权限、限流、熔断、审计和可回滚。
- 记录最终 ZIP SHA-256、旧 ERP/CLI 哈希、签发者指纹、客户/环境标识、发布时间和回滚版本;不得记录秘密值。
缺少任一原始制品、总签章验证失败、制品过期或哈希不一致:不得上线。
全程停止条件
出现以下任一情况,无论处于哪个阶段都立即停止并转人工评审:
- 发现秘密泄漏、原始客户数据进入模型/日志/证据,或只读阶段产生任何写入。
- 目标客户、账套、子系统、ERP 用户、模块、ERP PID、提交号或文件哈希不一致。
- 使用未签名/签名失效二进制、旧候选包、脏源码构建或未经客户批准的第三方组件。
- 无法证明一次确认只对应一个计划、一次业务动作、一个事务和一条完整审计链。
- 现场状态与预览不一致、命令返回未知结果、桥或 ERP 重启、授权过期、恢复点不可用。