lobster-full-engine-validation-20260619-122126.json 144 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205
  1. {
  2. "companyId": 338,
  3. "includeTravelChain": true,
  4. "includeTravelStress": false,
  5. "startedAt": "2026-06-19 12:21:26",
  6. "sections": {
  7. "engineHealth": {
  8. "passed": true,
  9. "health": {
  10. "companyId": 338,
  11. "healthy": true,
  12. "missingCore": [
  13. ],
  14. "missingOptional": [
  15. ],
  16. "passThreshold": 120
  17. },
  18. "message": "core beans wired"
  19. },
  20. "integrationTests": {
  21. "passed": false,
  22. "summary": "2/4 tests passed in 1222ms",
  23. "details": [
  24. "[FAIL] NodeTypeService: START node not found",
  25. "[FAIL] DynamicNodeExecutor: Judgment node execution failed",
  26. "[PASS] MultiModelWorkflowGenerator: All tests passed",
  27. "[PASS] ModelConfigService: All tests passed"
  28. ],
  29. "executionTimeMs": 1222,
  30. "message": "2/4 tests passed in 1222ms"
  31. },
  32. "phase2Replay": {
  33. "passed": true,
  34. "verify": {
  35. "companyId": 338,
  36. "archiveTableExists": false,
  37. "hotIndexExists": true,
  38. "hotReplayRows": 64,
  39. "eventLogRows": 64,
  40. "archiveRows": 0,
  41. "archiveNote": "table missing or query failed",
  42. "status": "ok"
  43. },
  44. "message": "phase2 replay verify ok"
  45. },
  46. "pageLinkProbes": {
  47. "totalPages": 32,
  48. "requiredTotal": 19,
  49. "requiredPassed": 17,
  50. "optionalSkipped": 0,
  51. "failures": [
  52. "/lobster/forbidden-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist",
  53. "/lobster/typo-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist"
  54. ],
  55. "passed": false,
  56. "durationMs": 2449,
  57. "pages": [
  58. {
  59. "path": "/lobster/company-workflowLobster",
  60. "title": "Workflow templates",
  61. "probe": "templateList",
  62. "required": true,
  63. "passed": true,
  64. "status": "OK",
  65. "message": "templates=37"
  66. },
  67. {
  68. "path": "/lobster/workflow-execution",
  69. "title": "Workflow execution tasks",
  70. "probe": "instanceList",
  71. "required": true,
  72. "passed": true,
  73. "status": "OK",
  74. "message": "instances=413"
  75. },
  76. {
  77. "path": "/lobster/instance",
  78. "title": "Instance monitor",
  79. "probe": "instanceMonitor",
  80. "required": true,
  81. "passed": true,
  82. "status": "OK",
  83. "message": "monitor list ok, count=413"
  84. },
  85. {
  86. "path": "/lobster/prompt",
  87. "title": "Prompt management",
  88. "probe": "promptList",
  89. "required": true,
  90. "passed": true,
  91. "status": "OK",
  92. "message": "prompt rows=49"
  93. },
  94. {
  95. "path": "/lobster/sensitive-words",
  96. "title": "Sensitive words",
  97. "probe": "sensitiveWords",
  98. "required": true,
  99. "passed": true,
  100. "status": "OK",
  101. "message": "words=87"
  102. },
  103. {
  104. "path": "/lobster/forbidden-words",
  105. "title": "Forbidden words",
  106. "probe": "forbiddenWords",
  107. "required": true,
  108. "passed": false,
  109. "status": "FAIL",
  110. "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist"
  111. },
  112. {
  113. "path": "/lobster/typo-words",
  114. "title": "Typo words",
  115. "probe": "typoWords",
  116. "required": true,
  117. "passed": false,
  118. "status": "FAIL",
  119. "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist"
  120. },
  121. {
  122. "path": "/lobster/conversation-summary",
  123. "title": "Conversation summary",
  124. "probe": "conversationSummary",
  125. "required": true,
  126. "passed": true,
  127. "status": "OK",
  128. "message": "summaries=13"
  129. },
  130. {
  131. "path": "/lobster/summary-config",
  132. "title": "Summary config",
  133. "probe": "summaryConfig",
  134. "required": false,
  135. "passed": true,
  136. "status": "OK",
  137. "message": "summary configs=0"
  138. },
  139. {
  140. "path": "/lobster/profile-config",
  141. "title": "Profile config",
  142. "probe": "profileConfig",
  143. "required": false,
  144. "passed": true,
  145. "status": "OK",
  146. "message": "profile fields=0"
  147. },
  148. {
  149. "path": "/lobster/channel-config",
  150. "title": "Channel config",
  151. "probe": "channelTypes",
  152. "required": true,
  153. "passed": true,
  154. "status": "OK",
  155. "message": "channels=14"
  156. },
  157. {
  158. "path": "/lobster/channel-plugin",
  159. "title": "Channel plugins",
  160. "probe": "channelPlugins",
  161. "required": true,
  162. "passed": true,
  163. "status": "OK",
  164. "message": "plugins=14"
  165. },
  166. {
  167. "path": "/lobster/api-registry",
  168. "title": "API registry",
  169. "probe": "apiRegistry",
  170. "required": true,
  171. "passed": true,
  172. "status": "OK",
  173. "message": "apis=0"
  174. },
  175. {
  176. "path": "/lobster/sales-corpus",
  177. "title": "Sales corpus",
  178. "probe": "salesCorpus",
  179. "required": false,
  180. "passed": true,
  181. "status": "OK",
  182. "message": "corpus=0"
  183. },
  184. {
  185. "path": "/lobster/chat-aggregate",
  186. "title": "Chat aggregate",
  187. "probe": "chatAggregate",
  188. "required": false,
  189. "passed": true,
  190. "status": "OK",
  191. "message": "sessions=29"
  192. },
  193. {
  194. "path": "/lobster/industry-bootstrap",
  195. "title": "Industry bootstrap",
  196. "probe": "industryPacks",
  197. "required": true,
  198. "passed": true,
  199. "status": "OK",
  200. "message": "packs=7"
  201. },
  202. {
  203. "path": "/lobster/execution-config",
  204. "title": "Execution config",
  205. "probe": "executionConfig",
  206. "required": true,
  207. "passed": true,
  208. "status": "OK",
  209. "message": "execution config loaded"
  210. },
  211. {
  212. "path": "/lobster/identity-config",
  213. "title": "Identity config",
  214. "probe": "identityConfig",
  215. "required": false,
  216. "passed": true,
  217. "status": "OK",
  218. "message": "identity config loaded"
  219. },
  220. {
  221. "path": "/lobster/semantic-keywords",
  222. "title": "Semantic keywords",
  223. "probe": "semanticKeywords",
  224. "required": true,
  225. "passed": true,
  226. "status": "OK",
  227. "message": "keywords=1"
  228. },
  229. {
  230. "path": "/lobster/dedup-config",
  231. "title": "Dedup config",
  232. "probe": "dedupConfig",
  233. "required": false,
  234. "passed": true,
  235. "status": "OK",
  236. "message": "dedup configs=0"
  237. },
  238. {
  239. "path": "/lobster/model-route",
  240. "title": "Model route",
  241. "probe": "modelRoute",
  242. "required": true,
  243. "passed": true,
  244. "status": "OK",
  245. "message": "workflow model=gpt-4"
  246. },
  247. {
  248. "path": "/lobster/optimization",
  249. "title": "AI optimization audit",
  250. "probe": "optimization",
  251. "required": true,
  252. "passed": true,
  253. "status": "OK",
  254. "message": "optimization stats=5"
  255. },
  256. {
  257. "path": "/lobster/dynamic-impl",
  258. "title": "Dynamic node approval",
  259. "probe": "dynamicImpl",
  260. "required": true,
  261. "passed": true,
  262. "status": "OK",
  263. "message": "pending impls=0"
  264. },
  265. {
  266. "path": "/lobster/dashboard",
  267. "title": "Engine dashboard",
  268. "probe": "dashboard",
  269. "required": true,
  270. "passed": true,
  271. "status": "OK",
  272. "message": "dashboard keys=8"
  273. },
  274. {
  275. "path": "/lobster/token-stats",
  276. "title": "Token stats",
  277. "probe": "tokenStats",
  278. "required": false,
  279. "passed": true,
  280. "status": "OK",
  281. "message": "token summary loaded"
  282. },
  283. {
  284. "path": "/lobster/evolution",
  285. "title": "Evolution engine",
  286. "probe": "evolution",
  287. "required": true,
  288. "passed": true,
  289. "status": "OK",
  290. "message": "evolution metrics=6"
  291. },
  292. {
  293. "path": "/lobster/chat-test",
  294. "title": "Chat test",
  295. "probe": "chatTest",
  296. "required": false,
  297. "passed": true,
  298. "status": "OK",
  299. "message": "e2e test service ready"
  300. },
  301. {
  302. "path": "/lobster/ab-test",
  303. "title": "AB / GEPA optimization",
  304. "probe": "abTest",
  305. "required": false,
  306. "passed": true,
  307. "status": "OK",
  308. "message": "active ab tests=0"
  309. },
  310. {
  311. "path": "/lobster/profile",
  312. "title": "Customer profile hub",
  313. "probe": "userProfile",
  314. "required": false,
  315. "passed": true,
  316. "status": "OK",
  317. "message": "profile fields=0"
  318. },
  319. {
  320. "path": "/lobster/qdrant",
  321. "title": "Vector knowledge base",
  322. "probe": "qdrant",
  323. "required": false,
  324. "passed": false,
  325. "status": "WARN",
  326. "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.lobster_vector_store\u0027 doesn\u0027t exist\r\n### The error may exist in com/fs/company/mapper/LobsterVectorStoreMapper.java (best guess)\r\n### The error may involve com.fs.company.mapper.LobsterVectorStoreMapper.selectByCompanyAndCategory-Inline\r\n### The error occurred while setting parameters\r\n### SQL: SELECT * FROM lobster_vector_store WHERE company_id = ? AND category = ?\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.lobster_vector_store\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.lobster_vector_store\u0027 doesn\u0027t exist"
  327. },
  328. {
  329. "path": "/lobster/global-stats",
  330. "title": "Global evolution stats",
  331. "probe": "globalStats",
  332. "required": false,
  333. "passed": true,
  334. "status": "OK",
  335. "message": "global metrics=6"
  336. },
  337. {
  338. "path": "/lobster/event-audit",
  339. "title": "Event node audit",
  340. "probe": "eventAudit",
  341. "required": false,
  342. "passed": true,
  343. "status": "OK",
  344. "message": "audits=0"
  345. }
  346. ]
  347. },
  348. "travelFullChain": {
  349. "companyId": 338,
  350. "includeStress": false,
  351. "startedAt": "2026-06-19 12:21:30",
  352. "sections": {
  353. "enginePrompts": {
  354. "expectedCatalogKeys": 49,
  355. "newlyInserted": 0,
  356. "missingKeys": [
  357. ],
  358. "platformKeyCount": 49,
  359. "passed": true,
  360. "message": "platform engine prompts complete (49 keys)"
  361. },
  362. "triggerExclude": {
  363. "passed": true,
  364. "errors": [
  365. ],
  366. "message": "trigger exclude/sarcasm/schedule checks ok"
  367. },
  368. "template": {
  369. "passed": true,
  370. "workflowId": 46,
  371. "templateCode": "LOB_1781748230288",
  372. "source": "existing",
  373. "message": "travel template found"
  374. },
  375. "lifecycleCoverage": {
  376. "coverageRatio": 1.0,
  377. "minCoverage": 0.75,
  378. "nodeCount": 13,
  379. "requiredNodeCount": 12,
  380. "missingNodes": [
  381. ],
  382. "passed": true,
  383. "message": "lifecycle nodes covered"
  384. },
  385. "nodePromptsPlanned": {
  386. "promptNodeTarget": 6,
  387. "promptNodeFilled": 6,
  388. "emptyPromptNodes": [
  389. ],
  390. "passed": true,
  391. "message": "key node prompts present"
  392. },
  393. "lifecycleSimulation": {
  394. "waitPreTripConfigured": true,
  395. "tagAutoConfigured": true,
  396. "orderActionConfigured": true,
  397. "holidayWaitConfigured": true,
  398. "passed": true,
  399. "message": "lifecycle orchestration nodes configured"
  400. },
  401. "lifecycleRuntime": {
  402. "simMinuteUnit": 10,
  403. "simDayEqualsMinutes": 10,
  404. "schedulerWakeWaitMs": 3500,
  405. "preTripWaitSchedule10m": {
  406. "waitUntil": 1781843400000,
  407. "expectedWaitAt": 1781843400000,
  408. "travelAt": "2026-06-19T13:21:46.242324600",
  409. "waitInRealMinutes": 8,
  410. "diffMinutes": 0,
  411. "simTimeScale": true,
  412. "passed": true,
  413. "message": "T-5 10m sim schedule ok"
  414. },
  415. "preTripWaitWake": {
  416. "passed": true,
  417. "message": "lifecycle wait wake ok",
  418. "statusAfter": "running",
  419. "resumeIndex": 5,
  420. "currentIndexAfter": 6,
  421. "instanceId": 414
  422. },
  423. "preTripSchedulerWake10m": {
  424. "scheduledWakeAt": 1781842910623,
  425. "schedulerWaitMs": 3500,
  426. "passed": true,
  427. "message": "scheduler 10m sim wake ok",
  428. "statusAfter": "running",
  429. "resumeIndex": 5,
  430. "currentIndexAfter": 6,
  431. "instanceId": 415
  432. },
  433. "holidayWaitSchedule10m": {
  434. "waitUntil": 1781860800000,
  435. "expectedWaitAt": 1781860800000,
  436. "waitInRealMinutes": 298,
  437. "simHolidayDays": 30,
  438. "simRealMinutes": 300,
  439. "diffMinutes": 0,
  440. "passed": true,
  441. "message": "holiday 10m sim schedule ok"
  442. },
  443. "holidayWaitWake": {
  444. "passed": true,
  445. "message": "lifecycle wait wake ok",
  446. "statusAfter": "completed",
  447. "resumeIndex": 10,
  448. "currentIndexAfter": 10,
  449. "instanceId": 416
  450. },
  451. "holidaySchedulerWake10m": {
  452. "scheduledWakeAt": 1781842918857,
  453. "schedulerWaitMs": 3500,
  454. "passed": true,
  455. "message": "scheduler 10m sim wake ok",
  456. "statusAfter": "completed",
  457. "resumeIndex": 10,
  458. "currentIndexAfter": 10,
  459. "instanceId": 417
  460. },
  461. "passed": true,
  462. "message": "lifecycle 10m sim schedule/wake ok"
  463. },
  464. "lifecycleFullFlowSim": {
  465. "instanceId": 418,
  466. "finalStatus": "completed",
  467. "finalNodeIndex": 10,
  468. "milestones": [
  469. "STARTED",
  470. "T5_SCHEDULED",
  471. "T5_WAITING",
  472. "PRE_TRIP_CARE",
  473. "PRE_TRIP_MULTITURN",
  474. "HOLIDAY_WAITING",
  475. "HOLIDAY_PROMO"
  476. ],
  477. "errors": [
  478. ],
  479. "passed": true,
  480. "message": "full lifecycle 10m sim flow ok",
  481. "simMinuteUnit": 10
  482. },
  483. "lifecycleExceptions": {
  484. "waitNotExpired": {
  485. "passed": true,
  486. "message": "not-expired wait rejected advance",
  487. "statusAfter": "waiting"
  488. },
  489. "prematureScheduler": {
  490. "passed": true,
  491. "message": "premature scheduler did not wake"
  492. },
  493. "blockedSchedulerSkip": {
  494. "passed": true,
  495. "message": "blocked instance skipped by scheduler"
  496. },
  497. "blockedForceWake": {
  498. "passed": true,
  499. "message": "blocked force wake rejected"
  500. },
  501. "overdueT5SkipWait": {
  502. "waitUntil": 1781841000000,
  503. "overdue": true,
  504. "wouldSkipSchedule": true,
  505. "passed": true,
  506. "message": "overdue T-5 skips wait schedule"
  507. },
  508. "missingTravelDate": {
  509. "waitUntil": 1781843675530,
  510. "expectedFallbackMinutes": 10,
  511. "passed": true,
  512. "message": "missing travel_date sim fallback ok"
  513. },
  514. "completedRejectWake": {
  515. "passed": true,
  516. "message": "completed instance rejects wake"
  517. },
  518. "missingResumeIndex": {
  519. "passed": true,
  520. "message": "missing resume index fallback ok"
  521. },
  522. "doubleWake": {
  523. "passed": true,
  524. "message": "double wake idempotent",
  525. "statusAfter": "running"
  526. },
  527. "passed": true,
  528. "message": "lifecycle exception handling ok"
  529. },
  530. "lifecycleMultiTurnDialogue": {
  531. "bookingTurnCount": 10,
  532. "postBookingTurnCount": 9,
  533. "consultMultiTurn": {
  534. "turns": 5,
  535. "avgScore": 62.0,
  536. "minScore": 0.0,
  537. "passed": true,
  538. "message": "node multiTurn ok",
  539. "instanceId": 426,
  540. "inputCount": 6
  541. },
  542. "postBookingMultiTurnFlow": {
  543. "instanceId": 427,
  544. "preTripMultiTurn": {
  545. "turns": 3,
  546. "avgScore": 78.66666666666667,
  547. "minScore": 78.0,
  548. "passed": true,
  549. "message": "node multiTurn ok"
  550. },
  551. "holidayMultiTurn": {
  552. "turns": 1,
  553. "avgScore": 79.0,
  554. "minScore": 79.0,
  555. "passed": false,
  556. "message": "node multiTurn below threshold"
  557. },
  558. "milestones": [
  559. "PRE_TRIP",
  560. "PRE_TRIP_MT",
  561. "HOLIDAY"
  562. ],
  563. "errors": [
  564. "HOLIDAY_MT"
  565. ],
  566. "dialogueTurns": 9,
  567. "passed": false,
  568. "message": "post-booking multi-turn failed: [HOLIDAY_MT]"
  569. },
  570. "passed": false,
  571. "message": "lifecycle multi-turn dialogue failed"
  572. },
  573. "e2eDialogue": {
  574. "dialogueTurnCount": 10,
  575. "runId": "7317026354b84c85aef7a08d222ed3c8",
  576. "status": "SUCCESS",
  577. "instanceId": 428,
  578. "totalScore": 69.75,
  579. "passedNodeCnt": 10,
  580. "totalNodeCnt": 10,
  581. "evolutionCount": 1,
  582. "nodeTraces": 10,
  583. "minNodeScore": 76.875,
  584. "maxNodeScore": 76.875,
  585. "nodesBelowTarget": 0,
  586. "nodesBelowMin": 0,
  587. "nodeScoreDetail": [
  588. {
  589. "nodeCode": "初始化咨询阶段",
  590. "score": 76.875,
  591. "passed": true
  592. }
  593. ],
  594. "passed": true,
  595. "message": "e2e ok"
  596. },
  597. "qualityGate": {
  598. "enabled": true,
  599. "targetScorePercent": 75.0,
  600. "minE2eAvgScorePercent": 75.0,
  601. "minNodeScorePercent": 60.0,
  602. "passScorePercent": 75,
  603. "totalScore": 69.75,
  604. "nodesBelowTarget": 0,
  605. "nodesBelowMin": 0,
  606. "minNodeScore": 76.875,
  607. "maxNodeScore": 76.875,
  608. "nodeScoreDetail": [
  609. {
  610. "nodeCode": "初始化咨询阶段",
  611. "score": 76.875,
  612. "passed": true
  613. }
  614. ],
  615. "passed": false,
  616. "message": "avg 69.75 \u003c min 75.0"
  617. },
  618. "summary": {
  619. "instanceId": 428,
  620. "externalUserId": "999338001",
  621. "asyncDbSummary": false,
  622. "historyLines": 20,
  623. "syncSummaryLength": 73,
  624. "microSummaryLength": 109,
  625. "cachedSummaryOk": false,
  626. "dbSummaryRows": 0,
  627. "historyPersistError": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/company/LobsterConversationSummaryMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT summary_text FROM lobster_conversation_summary WHERE external_user_id = ? AND channel_type = ? AND (instance_id = ? OR instance_id IS NULL) AND del_flag = 0 ORDER BY create_time DESC LIMIT 1\r\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027",
  628. "passed": false,
  629. "message": "async DB summary missing or too short"
  630. },
  631. "memoryPipeline": {
  632. "externalUserId": "999338001",
  633. "instanceId": 428,
  634. "summaryOk": false,
  635. "factError": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/CustomerFactMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT fact_key, fact_value, create_time FROM customer_fact WHERE company_id = ? AND external_user_id = ? AND channel_type = ? ORDER BY create_time DESC LIMIT 20\r\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027",
  636. "factCount": 0,
  637. "factKeys": [
  638. ],
  639. "passed": false,
  640. "message": "no summary and no customer_fact rows"
  641. },
  642. "evolutionAnalyze": {
  643. "e2eEvolutionCount": 1,
  644. "evolutionLogsBefore": 68,
  645. "analyzeInvoked": true,
  646. "analyzeMessage": "analyzeAndSuggest ok",
  647. "evolutionLogsAfter": 68,
  648. "evolutionLogsDelta": 0,
  649. "pendingSuggestions": 0,
  650. "passed": true,
  651. "message": "evolution analyze ok"
  652. },
  653. "sensitiveWord": {
  654. "scopeNote": "lobster SensitiveWordService + evolve step9; not live/call/CompanyAiSensitiveWord AC",
  655. "layers": {
  656. "defaultLib": {
  657. "detectCount": 1,
  658. "filtered": "推荐云南精品线,***,欢迎咨询",
  659. "passed": true
  660. },
  661. "customCrud": {
  662. "word": "LOBSTER_VAL_338",
  663. "hit": true,
  664. "filtered": "行程含***内容",
  665. "passed": true
  666. },
  667. "highRisk": {
  668. "word": "LOBSTER_FRAUD_338",
  669. "highRisk": true,
  670. "passed": true
  671. },
  672. "evolveStep9Simulation": {
  673. "rawHasSensitive": true,
  674. "wouldTransferToHuman": true,
  675. "finalReply": "欢迎咨询,预期收益,***",
  676. "passed": true
  677. },
  678. "wordListLoaded": {
  679. "count": 89,
  680. "passed": true
  681. }
  682. },
  683. "passed": true,
  684. "message": "sensitive word pipeline ok"
  685. },
  686. "aiGenerate": {
  687. "recordNo": "LOB_1781843386086",
  688. "generateUseLlm": false,
  689. "fallbackGenerate": true,
  690. "finalStatus": 1,
  691. "detail": {
  692. "conversationModel": {
  693. "defaultStage": "consult",
  694. "description": "旅游全链路:会话常驻,节点负责打标/签单/出行关怀/满意度/节日营销",
  695. "version": 2,
  696. "stages": [
  697. {
  698. "code": "consult",
  699. "promptHint": "你是小美,测试旅行社旅行顾问。客户来自直播间,先破冰并了解是否已有出行计划。",
  700. "label": "直播加微破冰",
  701. "goals": [
  702. ]
  703. },
  704. {
  705. "code": "collect",
  706. "promptHint": "逐步询问目的地、日期、人数、预算;一次只问一个关键问题。",
  707. "label": "需求采集打标",
  708. "goals": [
  709. {
  710. "collected": false,
  711. "label": "目的地",
  712. "required": true,
  713. "field": "destination"
  714. },
  715. {
  716. "collected": false,
  717. "label": "出行日期",
  718. "required": true,
  719. "field": "travel_date"
  720. },
  721. {
  722. "collected": false,
  723. "label": "预算",
  724. "required": true,
  725. "field": "budget"
  726. },
  727. {
  728. "collected": false,
  729. "label": "出行人数",
  730. "required": true,
  731. "field": "pax"
  732. }
  733. ]
  734. },
  735. {
  736. "code": "offer",
  737. "promptHint": "基于采集信息推荐云南精品线,突出亮点与优惠,自然引导签单。",
  738. "label": "线路推荐促单",
  739. "goals": [
  740. ]
  741. },
  742. {
  743. "code": "pre_trip",
  744. "promptHint": "出行前5天提醒证件、行李、当地天气与注意事项。",
  745. "label": "出行前关怀",
  746. "goals": [
  747. ]
  748. },
  749. {
  750. "code": "in_trip",
  751. "promptHint": "行程中主动问候,询问是否遇到问题,给出景点玩要建议。",
  752. "label": "行中关怀",
  753. "goals": [
  754. ]
  755. },
  756. {
  757. "code": "post_trip",
  758. "promptHint": "行程结束后收集满意度与改进建议。",
  759. "label": "满意度回访",
  760. "goals": [
  761. ]
  762. },
  763. {
  764. "code": "repurchase",
  765. "promptHint": "大节日前30天关怀,了解是否有新的出行计划并推荐产品。",
  766. "label": "节日营销",
  767. "goals": [
  768. ]
  769. }
  770. ],
  771. "sideTasks": [
  772. {
  773. "triggerIntents": [
  774. "purchase",
  775. "high_intent",
  776. "booked"
  777. ],
  778. "nodeCode": "TAG_AUTO",
  779. "nodeType": 9,
  780. "action": "add_tag"
  781. },
  782. {
  783. "triggerIntents": [
  784. "purchase",
  785. "order",
  786. "book"
  787. ],
  788. "nodeCode": "ORDER_ACTION",
  789. "nodeType": 7,
  790. "action": "create_order"
  791. }
  792. ]
  793. },
  794. "variables": [
  795. {
  796. "varName": "客户姓名",
  797. "label": "客户姓名",
  798. "source": "user_profile",
  799. "type": "string",
  800. "varType": "string",
  801. "sourceType": "user_profile",
  802. "name": "customerName",
  803. "varCode": "customerName"
  804. },
  805. {
  806. "varName": "目的地",
  807. "label": "目的地",
  808. "source": "conversation",
  809. "type": "string",
  810. "varType": "string",
  811. "sourceType": "conversation",
  812. "name": "destination",
  813. "varCode": "destination"
  814. },
  815. {
  816. "varName": "出行日期",
  817. "label": "出行日期",
  818. "source": "conversation",
  819. "type": "date",
  820. "varType": "date",
  821. "sourceType": "conversation",
  822. "name": "travel_date",
  823. "varCode": "travel_date"
  824. },
  825. {
  826. "varName": "预算",
  827. "label": "预算",
  828. "source": "conversation",
  829. "type": "string",
  830. "varType": "string",
  831. "sourceType": "conversation",
  832. "name": "budget",
  833. "varCode": "budget"
  834. },
  835. {
  836. "varName": "出行人数",
  837. "label": "出行人数",
  838. "source": "conversation",
  839. "type": "number",
  840. "varType": "number",
  841. "sourceType": "conversation",
  842. "name": "pax",
  843. "varCode": "pax"
  844. },
  845. {
  846. "varName": "测试旅行社",
  847. "label": "测试旅行社",
  848. "source": "manual",
  849. "type": "string",
  850. "varType": "string",
  851. "sourceType": "manual",
  852. "name": "company_short_name",
  853. "varCode": "company_short_name"
  854. },
  855. {
  856. "varName": "小美",
  857. "label": "小美",
  858. "source": "manual",
  859. "type": "string",
  860. "varType": "string",
  861. "sourceType": "manual",
  862. "name": "advisor_name",
  863. "varCode": "advisor_name"
  864. },
  865. {
  866. "varName": "云南精品线",
  867. "label": "云南精品线",
  868. "source": "manual",
  869. "type": "string",
  870. "varType": "string",
  871. "sourceType": "manual",
  872. "name": "main_product",
  873. "varCode": "main_product"
  874. },
  875. {
  876. "varName": "当前阶段",
  877. "label": "当前阶段",
  878. "source": "manual",
  879. "type": "string",
  880. "varType": "string",
  881. "sourceType": "manual",
  882. "name": "workflowStage",
  883. "varCode": "workflowStage"
  884. },
  885. {
  886. "varName": "客户意向",
  887. "label": "客户意向",
  888. "source": "conversation",
  889. "type": "string",
  890. "varType": "string",
  891. "sourceType": "conversation",
  892. "name": "customerIntent",
  893. "varCode": "customerIntent"
  894. }
  895. ],
  896. "edges": [
  897. {
  898. "targetNodeCode": "INIT_STAGE",
  899. "sourceNodeCode": "START",
  900. "edgeLabel": "启动"
  901. },
  902. {
  903. "targetNodeCode": "TAG_AUTO",
  904. "sourceNodeCode": "INIT_STAGE",
  905. "edgeLabel": "采集后打标"
  906. },
  907. {
  908. "targetNodeCode": "JUDGE",
  909. "sourceNodeCode": "TAG_AUTO",
  910. "edgeLabel": "分支"
  911. },
  912. {
  913. "targetNodeCode": "ORDER_ACTION",
  914. "sourceNodeCode": "JUDGE",
  915. "edgeLabel": "签单"
  916. },
  917. {
  918. "targetNodeCode": "WAIT_PRE_TRIP",
  919. "sourceNodeCode": "JUDGE",
  920. "edgeLabel": "已订"
  921. },
  922. {
  923. "targetNodeCode": "WAIT_HOLIDAY",
  924. "sourceNodeCode": "JUDGE",
  925. "edgeLabel": "培育"
  926. },
  927. {
  928. "targetNodeCode": "WAIT_PRE_TRIP",
  929. "sourceNodeCode": "ORDER_ACTION",
  930. "edgeLabel": "进入出行前"
  931. },
  932. {
  933. "targetNodeCode": "PRE_TRIP_CARE",
  934. "sourceNodeCode": "WAIT_PRE_TRIP",
  935. "edgeLabel": "T-5触达"
  936. },
  937. {
  938. "targetNodeCode": "WEATHER_TIPS",
  939. "sourceNodeCode": "PRE_TRIP_CARE",
  940. "edgeLabel": "天气建议"
  941. },
  942. {
  943. "targetNodeCode": "IN_TRIP_CARE",
  944. "sourceNodeCode": "WEATHER_TIPS",
  945. "edgeLabel": "行中"
  946. },
  947. {
  948. "targetNodeCode": "SURVEY",
  949. "sourceNodeCode": "IN_TRIP_CARE",
  950. "edgeLabel": "满意度"
  951. },
  952. {
  953. "targetNodeCode": "WAIT_HOLIDAY",
  954. "sourceNodeCode": "SURVEY",
  955. "edgeLabel": "节日等待"
  956. },
  957. {
  958. "targetNodeCode": "HOLIDAY_PROMO",
  959. "sourceNodeCode": "WAIT_HOLIDAY",
  960. "edgeLabel": "节日营销"
  961. },
  962. {
  963. "targetNodeCode": "END",
  964. "sourceNodeCode": "HOLIDAY_PROMO",
  965. "edgeLabel": "结束"
  966. }
  967. ],
  968. "description": "旅游公司销冠全流程:直播加微→破冰→采集出行需求→线路推荐→促单签单→出行前关怀→旅途中关怀→回访调研→节日营销→循环推荐",
  969. "templateCode": "TRAVEL_TOP_SALES_001",
  970. "errorMsg": "已使用行业兜底模板: validation fast fallback",
  971. "brandContext": {
  972. "advisorName": "小美",
  973. "companyShortName": "测试旅行社",
  974. "advisorRole": "金牌旅行顾问",
  975. "mainProduct": "云南精品线"
  976. },
  977. "_fallbackSource": "travel_lifecycle_full",
  978. "nodes": [
  979. {
  980. "nodeName": "开始",
  981. "nextNodeCode": "INIT_STAGE",
  982. "nodeCode": "START",
  983. "maxRounds": 0,
  984. "nodeType": 1,
  985. "nodeConfig": "{\"autoAdvance\":true,\"channelHint\":\"QW\"}",
  986. "sortNo": 1,
  987. "conditionExpr": "",
  988. "messageTemplate": "您好${customerName},我是小美,测试旅行社旅行顾问。看到您从直播间过来,打算去哪里玩呢?"
  989. },
  990. {
  991. "nodeName": "初始化咨询阶段",
  992. "nextNodeCode": "TAG_AUTO",
  993. "nodeCode": "INIT_STAGE",
  994. "maxRounds": 0,
  995. "nodeType": 16,
  996. "nodeConfig": "{\"assignments\":{\"workflowStage\":\"consult\"},\"stageGate\":true}",
  997. "sortNo": 2,
  998. "conditionExpr": "",
  999. "messageTemplate": ""
  1000. },
  1001. {
  1002. "nodeName": "自动打标",
  1003. "nextNodeCode": "JUDGE",
  1004. "nodeCode": "TAG_AUTO",
  1005. "maxRounds": 0,
  1006. "nodeType": 9,
  1007. "nodeConfig": "{\"sideTask\":true,\"actionOnly\":true,\"action\":\"add_tag\",\"tags\":[\"travel_lead\",\"qw_live\"],\"triggerIntents\":[\"purchase\",\"high_intent\"]}",
  1008. "sortNo": 3,
  1009. "conditionExpr": "",
  1010. "messageTemplate": ""
  1011. },
  1012. {
  1013. "nodeName": "签单动作",
  1014. "nextNodeCode": "WAIT_PRE_TRIP",
  1015. "nodeCode": "ORDER_ACTION",
  1016. "maxRounds": 0,
  1017. "nodeType": 7,
  1018. "nodeConfig": "{\"sideTask\":true,\"actionOnly\":true,\"action\":\"create_order\",\"triggerIntents\":[\"purchase\",\"order\"]}",
  1019. "sortNo": 4,
  1020. "conditionExpr": "",
  1021. "messageTemplate": ""
  1022. },
  1023. {
  1024. "nodeName": "出行前5天等待",
  1025. "nextNodeCode": "PRE_TRIP_CARE",
  1026. "nodeCode": "WAIT_PRE_TRIP",
  1027. "maxRounds": 0,
  1028. "nodeType": 4,
  1029. "nodeConfig": "{\"waitType\":\"date_offset\",\"offsetDays\":-5,\"dateField\":\"travel_date\",\"timeoutHours\":720}",
  1030. "sortNo": 5,
  1031. "conditionExpr": "",
  1032. "messageTemplate": ""
  1033. },
  1034. {
  1035. "nodeName": "出行前提醒",
  1036. "nextNodeCode": "WEATHER_TIPS",
  1037. "nodeCode": "PRE_TRIP_CARE",
  1038. "maxRounds": 0,
  1039. "nodeType": 10,
  1040. "nodeConfig": "{\"delivery\":\"proactive\",\"careType\":\"pre_trip\",\"awaitReply\":true}",
  1041. "sortNo": 6,
  1042. "conditionExpr": "",
  1043. "messageTemplate": "您好,离您的云南精品线出行还有5天啦!请准备好身份证/护照、常用药品和舒适鞋服。需要我帮您核对行程清单吗?"
  1044. },
  1045. {
  1046. "nodeName": "天气与玩要建议",
  1047. "nextNodeCode": "IN_TRIP_CARE",
  1048. "nodeCode": "WEATHER_TIPS",
  1049. "maxRounds": 0,
  1050. "nodeType": 14,
  1051. "nodeConfig": "{\"apiKey\":\"weather_travel_tips\",\"sideTask\":false,\"smartApi\":true}",
  1052. "sortNo": 7,
  1053. "conditionExpr": "",
  1054. "messageTemplate": "根据您目的地近期天气和同行人员情况,建议您注意防晒补水、老人小孩备常用药。具体玩游项目我会结合天气给您建议。"
  1055. },
  1056. {
  1057. "nodeName": "行中关怀",
  1058. "nextNodeCode": "SURVEY",
  1059. "nodeCode": "IN_TRIP_CARE",
  1060. "maxRounds": 0,
  1061. "nodeType": 10,
  1062. "nodeConfig": "{\"delivery\":\"proactive\",\"careType\":\"in_trip\",\"awaitReply\":true}",
  1063. "sortNo": 8,
  1064. "conditionExpr": "",
  1065. "messageTemplate": "旅途还顺利吗?景点玩得怎么样?如有任何问题随时告诉我,小美一直在线。"
  1066. },
  1067. {
  1068. "nodeName": "满意度调查",
  1069. "nextNodeCode": "WAIT_HOLIDAY",
  1070. "nodeCode": "SURVEY",
  1071. "maxRounds": 0,
  1072. "nodeType": 11,
  1073. "nodeConfig": "{\"surveyType\":\"satisfaction\",\"awaitReply\":true}",
  1074. "sortNo": 9,
  1075. "conditionExpr": "",
  1076. "messageTemplate": "感谢您选择测试旅行社!方便用1分钟做个满意度调查吗?您的反馈帮我们做得更好。"
  1077. },
  1078. {
  1079. "nodeName": "节日营销等待",
  1080. "nextNodeCode": "HOLIDAY_PROMO",
  1081. "nodeCode": "WAIT_HOLIDAY",
  1082. "maxRounds": 0,
  1083. "nodeType": 32,
  1084. "nodeConfig": "{\"delayDays\":30,\"cronHint\":\"holiday_minus_30d\"}",
  1085. "sortNo": 10,
  1086. "conditionExpr": "",
  1087. "messageTemplate": ""
  1088. },
  1089. {
  1090. "nodeName": "节日营销触达",
  1091. "nextNodeCode": "END",
  1092. "nodeCode": "HOLIDAY_PROMO",
  1093. "maxRounds": 0,
  1094. "nodeType": 13,
  1095. "nodeConfig": "{\"repurchaseType\":\"holiday\",\"delivery\":\"proactive\"}",
  1096. "sortNo": 11,
  1097. "conditionExpr": "",
  1098. "messageTemplate": "您好!临近节日,想了解下您近期有没有出行计划?云南精品线有新线路优惠,感兴趣我发您看看。"
  1099. },
  1100. {
  1101. "nodeName": "意向分支",
  1102. "nextNodeCode": "",
  1103. "nodeCode": "JUDGE",
  1104. "maxRounds": 0,
  1105. "nodeType": 3,
  1106. "nodeConfig": "{}",
  1107. "sortNo": 12,
  1108. "conditionExpr": "{\"branches\":[{\"nextNodeCode\":\"ORDER_ACTION\",\"condition\":{\"field\":\"customerIntent\",\"operator\":\"eq\",\"value\":\"purchase\"},\"desc\":\"\\u7b7e\\u5355\"},{\"nextNodeCode\":\"WAIT_PRE_TRIP\",\"condition\":{\"field\":\"customerIntent\",\"operator\":\"eq\",\"value\":\"booked\"},\"desc\":\"\\u5df2\\u8ba2\\u8fdb\\u5165\\u51fa\\u884c\\u524d\"},{\"nextNodeCode\":\"HOLIDAY_PROMO\",\"condition\":{\"field\":\"customerIntent\",\"operator\":\"eq\",\"value\":\"inquiry\"},\"desc\":\"\\u7ee7\\u7eed\\u57f9\\u80b2\"}],\"defaultNodeCode\":\"WAIT_HOLIDAY\"}",
  1109. "messageTemplate": ""
  1110. },
  1111. {
  1112. "nodeName": "结束",
  1113. "nextNodeCode": "",
  1114. "nodeCode": "END",
  1115. "maxRounds": 0,
  1116. "nodeType": 5,
  1117. "nodeConfig": "{}",
  1118. "sortNo": 13,
  1119. "conditionExpr": "",
  1120. "messageTemplate": ""
  1121. }
  1122. ],
  1123. "industryType": "travel",
  1124. "templateName": "旅游销冠全链路(A旅游公司)",
  1125. "_generateParam": {
  1126. "advisorName": "小美",
  1127. "companyShortName": "测试旅行社",
  1128. "industryType": "travel",
  1129. "advisorRole": "金牌旅行顾问",
  1130. "mainProduct": "云南精品线"
  1131. },
  1132. "status": 1
  1133. },
  1134. "usedFallback": true,
  1135. "passed": true,
  1136. "workflowId": 47,
  1137. "message": "generate and confirm ok"
  1138. },
  1139. "phase2Learning": {
  1140. "hotReplayRowsBefore": 64,
  1141. "hotReplayRowsAfter": 66,
  1142. "delta": 2,
  1143. "passed": true,
  1144. "status": "ok",
  1145. "hint": "async write ok",
  1146. "message": "learning replay ok",
  1147. "verify": {
  1148. "companyId": 338,
  1149. "archiveTableExists": false,
  1150. "hotIndexExists": true,
  1151. "hotReplayRows": 66,
  1152. "eventLogRows": 66,
  1153. "archiveRows": 0,
  1154. "archiveNote": "table missing or query failed",
  1155. "status": "ok"
  1156. }
  1157. }
  1158. },
  1159. "qualityGateConfig": {
  1160. "enabled": true,
  1161. "passScorePercent": 75,
  1162. "targetScorePercent": 75,
  1163. "minNodeScorePercent": 60,
  1164. "minE2eAvgScorePercent": 75,
  1165. "multiturnMinAvgScorePercent": 45
  1166. },
  1167. "failures": [
  1168. "lifecycleMultiTurnDialogue: lifecycle multi-turn dialogue failed",
  1169. "qualityGate: avg 69.75 \u003c min 75.0",
  1170. "summary: async DB summary missing or too short",
  1171. "memoryPipeline: no summary and no customer_fact rows"
  1172. ],
  1173. "passed": false,
  1174. "durationMs": 498016,
  1175. "templateIdUsed": 46
  1176. }
  1177. },
  1178. "failures": [
  1179. "integrationTests: 2/4 tests passed in 1222ms",
  1180. "page./lobster/forbidden-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist",
  1181. "page./lobster/typo-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist",
  1182. "travel.lifecycleMultiTurnDialogue: lifecycle multi-turn dialogue failed",
  1183. "travel.qualityGate: avg 69.75 \u003c min 75.0",
  1184. "travel.summary: async DB summary missing or too short",
  1185. "travel.memoryPipeline: no summary and no customer_fact rows"
  1186. ],
  1187. "passed": false,
  1188. "durationMs": 501746,
  1189. "pageCount": 32,
  1190. "requiredPagesPassed": "17/19"
  1191. }