-
用户在 FK 选择器里点中某一行后,前端把该行 id 随保存回传(form/submit 与 preview/save 均加 boundIds:字段技术名→id),normalize 有 id 时直接绑定、 不按名称反查——候选的权限/租户/级联判定以 ERP 的下拉配置为准。 未经选择、仅凭名称(AI 预填或手打)的路径不变,仍保持同名 fail-closed。 幻影列硬闸在 id 直绑路径上同样生效。 回归锁 +2(FormRenderNormalizeTest 8 例),46 单测绿。 实测:同名产品不给 id → 报同名拒绝;给 id → 精确绑定、ERP 执行 success+200, 落库 BJD202607092 的客户/产品 id 与点中行一致。
-
- create 载荷 sFormId 改写模块 id(与 ERP 原生同构;表单 id 无 SysBillNoSettings 编号规则,执行期重生成单号必撞已用号) - ai_op_queue 停写 sUserId(ERP 执行器已切读 sMakePerson;列暂 不可删——ERP myTodos 仍 COALESCE 引用) - saaslocal 开启 erp.dry-run.enabled(ERP /business/checkBusinessData 已上线,保存前真实校验链 validate-only) 联合 e2e 实测:建报价 BJD202607091(sFormId=模块id、主从落库)→ 审核 success+200 → 重复审核 fail+409 → 改字段 success+200 → 取消 fail+450 → 幂等 success+201;dry-run 保存时真实调用(ERP 日志 时刻对齐)且零落库。
-
…r + shown=resolved record name (WYSIWYG); phantom-column cross-check vs information_schema (resolveColumn/businessFields/skeleton/normalize hard gate); ledger cold-read always warms full window (partial-window rebuild permanently truncated history); CORS origin allowlist (configurable, default localhost) replacing wildcard+credentials; stale 'confirmed' docs
-
…100/101, 200/201, 4xx/5xx error taxonomy); xlyAi writes pending+100 only; legacy values read-compat; migration maps existing rows
-
… + token-budget projection, skills-in-DB, security audit fixes)
-
P4 retirement + code slim-down (~18.5k lines deleted), on top of the intent-gate WIP (docs §17/§18 + agent/tool refinements): - Delete old 8-scene multi-agent stack: XlyErpService, SceneSelector/ Chati/ErpAi/DynamicTableNl2Sql agents, DynamicToolProvider (62 meta tools), Scene/ToolMeta/ParamRule entities+mappers+startup caches - Delete whole milvus/tts/ocr packages, /api/tts + /api/ocr endpoints, tts.html, python stream_server.py; strip dead TTS JS from chat.html (playByIndex/handleNormalResponse had no callers) - Three-pass orphan sweep: 17 dead utils, 16 dead entities, dead constants/exceptions, RedisService+RedisConfig, duplicate JacksonConfig, OperableChatMemoryProvider, old prompt generators; fold PageController into MvcConfig; trim OkHttpUtil 495→39 lines - pom: ~35→13 deps (drop mybatis/JPA/webflux/tika/pdfbox/poi/jieba/ jsoup/gson/fastjson2/springdoc/mapstruct/pagehelper/pinyin4j/ spring-retry/jnr-ffi/hutool/ocr/milvus/embeddings; add starter-jdbc); war 200M+→48M - application.yml: drop milvus/tts/ocr/tesseract/mybatis blocks; GlobalExceptionHandler returns plain {code,message} JSON - docs: mark P4 retirement done in agent-architecture §13/§18 Verified: mvn clean package OK; boot smoke on :8199 (Started 0.9s, /chat 200, health db UP). Old /api/tts & /api/ocr now 404 by design.
-
…en, prod injects live token)
-
…nce) vs deferred (authz/create-delete-审核/FormCollect/staging-executor/Langfuse/NL2SQL)
-
…tions, standalone chat page, always user-present, designated model cloud/local, shared-DB multi-brand); backups recorded; formId deferred; refresh open-items
-
…rminal + reconcile on reconnect; manual stays sync
-
… terminal (no chaining), validate-only
-
…oposeWrite ends turn on draft
-
…nistic /op/{id}/confirm endpoint (not a tool) -
…lt); ERP real-time exec via /ai/execStaging + two link modes
-
…on dropped, form-level only via sAuthsId; Query security simplified
-
…Ai authorization layer; Read not permission-safe + param whitelist; invoke not backend-safe
-
…oseWrite covers mutating button-actions
-
… ERP procs, Query = ad-hoc-only
-
…; NL2SQL security pending investigation