@webex/contact-center 3.11.0 → 3.12.0-auth-prejoin-fetch.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/.sdd/manifest.json +883 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +50 -0
  5. package/ai-docs/GETTING_STARTED.md +168 -0
  6. package/ai-docs/GLOSSARY.md +43 -0
  7. package/ai-docs/README.md +138 -0
  8. package/ai-docs/REVIEW_CHECKLIST.md +41 -0
  9. package/ai-docs/RULES.md +444 -0
  10. package/ai-docs/SECURITY.md +52 -0
  11. package/ai-docs/SERVICE_STATE.md +48 -0
  12. package/ai-docs/SPEC_INDEX.md +65 -0
  13. package/ai-docs/adr/0001-spec-source-policy.md +55 -0
  14. package/ai-docs/adr/README.md +8 -0
  15. package/ai-docs/adr/_adr-template.md +31 -0
  16. package/ai-docs/contact-center-spec.md +359 -0
  17. package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
  18. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  19. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  20. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  21. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  22. package/ai-docs/patterns/testing-patterns.md +480 -0
  23. package/ai-docs/patterns/typescript-patterns.md +365 -0
  24. package/ai-docs/templates/README.md +102 -0
  25. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  26. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  27. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  28. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  29. package/ai-docs/templates/new-method/00-master.md +80 -0
  30. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  31. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  32. package/ai-docs/templates/new-method/03-tests.md +201 -0
  33. package/ai-docs/templates/new-method/04-validation.md +141 -0
  34. package/ai-docs/templates/new-service/00-master.md +109 -0
  35. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  36. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  37. package/ai-docs/templates/new-service/03-integration.md +178 -0
  38. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  39. package/ai-docs/templates/new-service/05-validation.md +145 -0
  40. package/dist/cc.js +818 -59
  41. package/dist/cc.js.map +1 -1
  42. package/dist/config.js +13 -0
  43. package/dist/config.js.map +1 -1
  44. package/dist/constants.js +31 -3
  45. package/dist/constants.js.map +1 -1
  46. package/dist/index.js +27 -5
  47. package/dist/index.js.map +1 -1
  48. package/dist/metrics/behavioral-events.js +127 -0
  49. package/dist/metrics/behavioral-events.js.map +1 -1
  50. package/dist/metrics/constants.js +34 -3
  51. package/dist/metrics/constants.js.map +1 -1
  52. package/dist/services/AddressBook.js +18 -15
  53. package/dist/services/AddressBook.js.map +1 -1
  54. package/dist/services/AnswerCallOnWebexService.js +174 -0
  55. package/dist/services/AnswerCallOnWebexService.js.map +1 -0
  56. package/dist/services/ApiAiAssistant.js +318 -0
  57. package/dist/services/ApiAiAssistant.js.map +1 -0
  58. package/dist/services/EntryPoint.js +46 -68
  59. package/dist/services/EntryPoint.js.map +1 -1
  60. package/dist/services/Queue.js +27 -22
  61. package/dist/services/Queue.js.map +1 -1
  62. package/dist/services/UserPreference.js +427 -0
  63. package/dist/services/UserPreference.js.map +1 -0
  64. package/dist/services/WebexCrossClientService.js +171 -0
  65. package/dist/services/WebexCrossClientService.js.map +1 -0
  66. package/dist/services/WxAppTelephonyMercurySync.js +93 -0
  67. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
  68. package/dist/services/agent/types.js.map +1 -1
  69. package/dist/services/config/Util.js +11 -4
  70. package/dist/services/config/Util.js.map +1 -1
  71. package/dist/services/config/constants.js +45 -8
  72. package/dist/services/config/constants.js.map +1 -1
  73. package/dist/services/config/index.js +41 -2
  74. package/dist/services/config/index.js.map +1 -1
  75. package/dist/services/config/types.js +70 -8
  76. package/dist/services/config/types.js.map +1 -1
  77. package/dist/services/constants.js +27 -1
  78. package/dist/services/constants.js.map +1 -1
  79. package/dist/services/core/Err.js.map +1 -1
  80. package/dist/services/core/Utils.js +122 -25
  81. package/dist/services/core/Utils.js.map +1 -1
  82. package/dist/services/core/WebexRequest.js +6 -2
  83. package/dist/services/core/WebexRequest.js.map +1 -1
  84. package/dist/services/core/aqm-reqs.js +119 -30
  85. package/dist/services/core/aqm-reqs.js.map +1 -1
  86. package/dist/services/core/types.js.map +1 -1
  87. package/dist/services/core/websocket/WebSocketManager.js +22 -6
  88. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  89. package/dist/services/core/websocket/connection-service.js +3 -1
  90. package/dist/services/core/websocket/connection-service.js.map +1 -1
  91. package/dist/services/core/websocket/types.js.map +1 -1
  92. package/dist/services/index.js +6 -0
  93. package/dist/services/index.js.map +1 -1
  94. package/dist/services/task/Task.js +754 -0
  95. package/dist/services/task/Task.js.map +1 -0
  96. package/dist/services/task/TaskFactory.js +49 -0
  97. package/dist/services/task/TaskFactory.js.map +1 -0
  98. package/dist/services/task/TaskManager.js +1073 -447
  99. package/dist/services/task/TaskManager.js.map +1 -1
  100. package/dist/services/task/TaskUtils.js +220 -23
  101. package/dist/services/task/TaskUtils.js.map +1 -1
  102. package/dist/services/task/WebexCallingUtils.js +70 -0
  103. package/dist/services/task/WebexCallingUtils.js.map +1 -0
  104. package/dist/services/task/constants.js +26 -2
  105. package/dist/services/task/constants.js.map +1 -1
  106. package/dist/services/task/contact.js +29 -0
  107. package/dist/services/task/contact.js.map +1 -1
  108. package/dist/services/task/dialer.js +129 -0
  109. package/dist/services/task/dialer.js.map +1 -1
  110. package/dist/services/task/digital/Digital.js +78 -0
  111. package/dist/services/task/digital/Digital.js.map +1 -0
  112. package/dist/services/task/state-machine/TaskStateMachine.js +971 -0
  113. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  114. package/dist/services/task/state-machine/actions.js +572 -0
  115. package/dist/services/task/state-machine/actions.js.map +1 -0
  116. package/dist/services/task/state-machine/constants.js +161 -0
  117. package/dist/services/task/state-machine/constants.js.map +1 -0
  118. package/dist/services/task/state-machine/guards.js +409 -0
  119. package/dist/services/task/state-machine/guards.js.map +1 -0
  120. package/dist/services/task/state-machine/index.js +53 -0
  121. package/dist/services/task/state-machine/index.js.map +1 -0
  122. package/dist/services/task/state-machine/types.js +54 -0
  123. package/dist/services/task/state-machine/types.js.map +1 -0
  124. package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
  125. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  126. package/dist/services/task/taskDataNormalizer.js +99 -0
  127. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  128. package/dist/services/task/types.js +243 -5
  129. package/dist/services/task/types.js.map +1 -1
  130. package/dist/services/task/voice/Voice.js +1380 -0
  131. package/dist/services/task/voice/Voice.js.map +1 -0
  132. package/dist/services/task/voice/WebRTC.js +152 -0
  133. package/dist/services/task/voice/WebRTC.js.map +1 -0
  134. package/dist/services/task/voice/wxAppVoiceMethods.js +201 -0
  135. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
  136. package/dist/services/wxAppTelephonyUtils.js +19 -0
  137. package/dist/services/wxAppTelephonyUtils.js.map +1 -0
  138. package/dist/types/cc.d.ts +967 -0
  139. package/dist/types/config.d.ts +79 -0
  140. package/dist/types/constants.d.ts +74 -0
  141. package/dist/types/index.d.ts +201 -0
  142. package/dist/types/logger-proxy.d.ts +71 -0
  143. package/dist/types/metrics/MetricsManager.d.ts +223 -0
  144. package/dist/types/metrics/behavioral-events.d.ts +29 -0
  145. package/dist/types/metrics/constants.d.ts +183 -0
  146. package/dist/types/services/AddressBook.d.ts +75 -0
  147. package/dist/types/services/AnswerCallOnWebexService.d.ts +37 -0
  148. package/dist/types/services/ApiAiAssistant.d.ts +49 -0
  149. package/dist/types/services/EntryPoint.d.ts +69 -0
  150. package/dist/types/services/Queue.d.ts +78 -0
  151. package/dist/types/services/UserPreference.d.ts +118 -0
  152. package/dist/types/services/WebCallingService.d.ts +1 -0
  153. package/dist/types/services/WebexCrossClientService.d.ts +28 -0
  154. package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
  155. package/dist/types/services/agent/index.d.ts +46 -0
  156. package/dist/types/services/agent/types.d.ts +413 -0
  157. package/dist/types/services/config/Util.d.ts +20 -0
  158. package/dist/types/services/config/constants.d.ts +273 -0
  159. package/dist/types/services/config/index.d.ts +177 -0
  160. package/dist/types/services/config/types.d.ts +1381 -0
  161. package/dist/types/services/constants.d.ts +110 -0
  162. package/dist/types/services/core/Err.d.ts +127 -0
  163. package/dist/types/services/core/GlobalTypes.d.ts +58 -0
  164. package/dist/types/services/core/Utils.d.ts +121 -0
  165. package/dist/types/services/core/WebexRequest.d.ts +23 -0
  166. package/dist/types/services/core/aqm-reqs.d.ts +65 -0
  167. package/dist/types/services/core/constants.d.ts +99 -0
  168. package/dist/types/services/core/types.d.ts +49 -0
  169. package/dist/types/services/core/websocket/WebSocketManager.d.ts +36 -0
  170. package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
  171. package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
  172. package/dist/types/services/core/websocket/types.d.ts +37 -0
  173. package/dist/types/services/index.d.ts +54 -0
  174. package/dist/types/services/task/AutoWrapup.d.ts +40 -0
  175. package/dist/types/services/task/Task.d.ts +175 -0
  176. package/dist/types/services/task/TaskFactory.d.ts +13 -0
  177. package/dist/types/services/task/TaskManager.d.ts +1 -0
  178. package/dist/types/services/task/TaskUtils.d.ts +138 -0
  179. package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
  180. package/dist/types/services/task/constants.d.ts +94 -0
  181. package/dist/types/services/task/contact.d.ts +73 -0
  182. package/dist/types/services/task/dialer.d.ts +73 -0
  183. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  184. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1398 -0
  185. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  186. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  187. package/dist/types/services/task/state-machine/guards.d.ts +103 -0
  188. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  189. package/dist/types/services/task/state-machine/types.d.ts +277 -0
  190. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  191. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  192. package/dist/types/services/task/types.d.ts +1933 -0
  193. package/dist/types/services/task/voice/Voice.d.ts +223 -0
  194. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  195. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +52 -0
  196. package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
  197. package/dist/types/types.d.ts +784 -0
  198. package/dist/types/utils/PageCache.d.ts +190 -0
  199. package/dist/types/webex-config.d.ts +53 -0
  200. package/dist/types/webex.d.ts +8 -0
  201. package/dist/types.js +137 -3
  202. package/dist/types.js.map +1 -1
  203. package/dist/utils/PageCache.js +19 -5
  204. package/dist/utils/PageCache.js.map +1 -1
  205. package/dist/webex.js +14 -2
  206. package/dist/webex.js.map +1 -1
  207. package/package.json +16 -12
  208. package/src/cc.ts +983 -60
  209. package/src/config.ts +13 -0
  210. package/src/constants.ts +29 -1
  211. package/src/index.ts +26 -5
  212. package/src/metrics/ai-docs/AGENTS.md +350 -0
  213. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  214. package/src/metrics/ai-docs/metrics-spec.md +860 -0
  215. package/src/metrics/behavioral-events.ts +134 -0
  216. package/src/metrics/constants.ts +39 -3
  217. package/src/services/AddressBook.ts +17 -6
  218. package/src/services/AnswerCallOnWebexService.ts +206 -0
  219. package/src/services/ApiAiAssistant.ts +412 -0
  220. package/src/services/EntryPoint.ts +59 -60
  221. package/src/services/Queue.ts +29 -12
  222. package/src/services/UserPreference.ts +509 -0
  223. package/src/services/WebexCrossClientService.ts +212 -0
  224. package/src/services/WxAppTelephonyMercurySync.ts +115 -0
  225. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  226. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  227. package/src/services/agent/ai-docs/agent-spec.md +504 -0
  228. package/src/services/agent/types.ts +1 -1
  229. package/src/services/ai-docs/AGENTS.md +386 -0
  230. package/src/services/ai-docs/services-spec.md +497 -0
  231. package/src/services/config/Util.ts +13 -2
  232. package/src/services/config/ai-docs/AGENTS.md +255 -0
  233. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  234. package/src/services/config/ai-docs/config-spec.md +675 -0
  235. package/src/services/config/constants.ts +47 -7
  236. package/src/services/config/index.ts +45 -1
  237. package/src/services/config/types.ts +253 -11
  238. package/src/services/constants.ts +29 -0
  239. package/src/services/core/Err.ts +4 -0
  240. package/src/services/core/Utils.ts +143 -30
  241. package/src/services/core/WebexRequest.ts +3 -1
  242. package/src/services/core/ai-docs/AGENTS.md +381 -0
  243. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  244. package/src/services/core/ai-docs/core-spec.md +787 -0
  245. package/src/services/core/aqm-reqs.ts +125 -32
  246. package/src/services/core/types.ts +2 -0
  247. package/src/services/core/websocket/WebSocketManager.ts +23 -6
  248. package/src/services/core/websocket/connection-service.ts +5 -1
  249. package/src/services/core/websocket/types.ts +1 -1
  250. package/src/services/index.ts +4 -0
  251. package/src/services/task/Task.ts +908 -0
  252. package/src/services/task/TaskFactory.ts +60 -0
  253. package/src/services/task/TaskManager.ts +1291 -513
  254. package/src/services/task/TaskUtils.ts +314 -24
  255. package/src/services/task/WebexCallingUtils.ts +136 -0
  256. package/src/services/task/ai-docs/AGENTS.md +457 -0
  257. package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
  258. package/src/services/task/ai-docs/task-spec.md +1469 -0
  259. package/src/services/task/constants.ts +26 -0
  260. package/src/services/task/contact.ts +30 -0
  261. package/src/services/task/dialer.ts +136 -1
  262. package/src/services/task/digital/Digital.ts +97 -0
  263. package/src/services/task/state-machine/TaskStateMachine.ts +1313 -0
  264. package/src/services/task/state-machine/actions.ts +741 -0
  265. package/src/services/task/state-machine/ai-docs/AGENTS.md +462 -0
  266. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1146 -0
  267. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2209 -0
  268. package/src/services/task/state-machine/constants.ts +172 -0
  269. package/src/services/task/state-machine/guards.ts +498 -0
  270. package/src/services/task/state-machine/index.ts +28 -0
  271. package/src/services/task/state-machine/types.ts +258 -0
  272. package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
  273. package/src/services/task/taskDataNormalizer.ts +137 -0
  274. package/src/services/task/types.ts +843 -70
  275. package/src/services/task/voice/Voice.ts +1720 -0
  276. package/src/services/task/voice/WebRTC.ts +191 -0
  277. package/src/services/task/voice/wxAppVoiceMethods.ts +307 -0
  278. package/src/services/wxAppTelephonyUtils.ts +14 -0
  279. package/src/types.ts +238 -11
  280. package/src/utils/AGENTS.md +289 -0
  281. package/src/utils/PageCache.ts +38 -5
  282. package/src/utils/ai-docs/utils-spec.md +391 -0
  283. package/src/webex.js +2 -0
  284. package/test/unit/spec/cc.ts +1856 -122
  285. package/test/unit/spec/logger-proxy.ts +70 -0
  286. package/test/unit/spec/metrics/behavioral-events.ts +18 -0
  287. package/test/unit/spec/services/AddressBook.ts +37 -6
  288. package/test/unit/spec/services/AnswerCallOnWebexService.ts +223 -0
  289. package/test/unit/spec/services/ApiAiAssistant.ts +273 -0
  290. package/test/unit/spec/services/EntryPoint.ts +87 -40
  291. package/test/unit/spec/services/Queue.ts +123 -12
  292. package/test/unit/spec/services/UserPreference.ts +401 -0
  293. package/test/unit/spec/services/WebCallingService.ts +7 -1
  294. package/test/unit/spec/services/WebexCrossClientService.ts +261 -0
  295. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +113 -0
  296. package/test/unit/spec/services/config/Util.ts +85 -0
  297. package/test/unit/spec/services/config/index.ts +85 -29
  298. package/test/unit/spec/services/core/Utils.ts +481 -2
  299. package/test/unit/spec/services/core/WebexRequest.ts +3 -1
  300. package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
  301. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +137 -41
  302. package/test/unit/spec/services/core/websocket/connection-service.ts +3 -1
  303. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  304. package/test/unit/spec/services/task/Task.ts +677 -0
  305. package/test/unit/spec/services/task/TaskFactory.ts +99 -0
  306. package/test/unit/spec/services/task/TaskManager.ts +2209 -918
  307. package/test/unit/spec/services/task/TaskUtils.ts +235 -0
  308. package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
  309. package/test/unit/spec/services/task/contact.ts +33 -0
  310. package/test/unit/spec/services/task/dialer.ts +372 -96
  311. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  312. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +3433 -0
  313. package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
  314. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  315. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
  316. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  317. package/test/unit/spec/services/task/voice/Voice.ts +1523 -0
  318. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  319. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +459 -0
  320. package/umd/contact-center.min.js +2 -2
  321. package/umd/contact-center.min.js.map +1 -1
  322. package/dist/services/task/index.js +0 -1525
  323. package/dist/services/task/index.js.map +0 -1
  324. package/src/services/task/index.ts +0 -1801
  325. package/test/unit/spec/services/task/index.ts +0 -2184
@@ -0,0 +1,883 @@
1
+ {
2
+ "manifest_version": 1,
3
+ "repository": {
4
+ "name": "@webex/contact-center",
5
+ "purpose": "A Webex SDK plugin package that exposes Contact Center agent, task, calling, configuration, realtime event, and telemetry APIs.",
6
+ "category": "cat1-legacy",
7
+ "primary_languages": [
8
+ "TypeScript",
9
+ "JavaScript"
10
+ ]
11
+ },
12
+ "topology": "Orchestrator-plus-components",
13
+ "commands": {
14
+ "compile": {
15
+ "command": "yarn workspace @webex/contact-center compile",
16
+ "source_file": "packages/@webex/contact-center/package.json",
17
+ "verified_at": "2026-08-05T10:53:14Z"
18
+ },
19
+ "build": {
20
+ "command": "yarn workspace @webex/contact-center build:src",
21
+ "source_file": "package.json"
22
+ },
23
+ "unit-test": {
24
+ "command": "yarn workspace @webex/contact-center test:unit",
25
+ "source_file": "packages/@webex/contact-center/package.json",
26
+ "verified_at": "2026-08-05T10:53:14Z"
27
+ },
28
+ "test": {
29
+ "command": "yarn workspace @webex/contact-center test",
30
+ "source_file": "package.json"
31
+ },
32
+ "lint": {
33
+ "command": "yarn workspace @webex/contact-center test:style",
34
+ "source_file": "package.json"
35
+ },
36
+ "docs": {
37
+ "command": "yarn workspace @webex/contact-center build:docs",
38
+ "source_file": "package.json"
39
+ }
40
+ },
41
+ "coverage_status_definitions": {
42
+ "specced": ">=80% public surface specced, drift <5% — spec is authoritative",
43
+ "partial": "40-80% specced — spec is a hint, cross-check code",
44
+ "untracked": "<40% specced — code is the source of truth"
45
+ },
46
+ "modules": [
47
+ {
48
+ "path": "src",
49
+ "coverage_status": "Partial",
50
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
51
+ "canonical_spec": "ai-docs/contact-center-spec.md",
52
+ "contracts": {
53
+ "provides": [
54
+ "Published @webex/contact-center package; ContactCenter WebexPlugin; public SDK methods, events, types, Task with ordered action-specific consult/transfer destination controls, AddressBook, ApiAIAssistant, UserPreference, cc.userPreference, existing getQueues/getEntryPoints methods with consult/transfer defaults, full Queue records, and mapped EntryPoint records with optional numbers, exported user-preference request/response types, and preview-campaign methods acceptPreviewContact/skipPreviewContact/removePreviewContact",
55
+ "WXCC-6026 wxApp Better Together: enableWxBetterTogether init config, isWxBetterTogetherEnabled read API, unified task telephony (task.accept/decline/toggleMute/transmitDtmf), TASK_WXAPP_MUTE_STATE_UPDATED event, optional main.keypad uiControl, multi-login supported; runtime toggle deferred to Phase 2 (private)"
56
+ ],
57
+ "requires": [
58
+ "Webex SDK host/plugin runtime; Contact Center REST and WebSocket services; internal Webex calling, metrics, support, authorization, logger, and mercury packages"
59
+ ]
60
+ },
61
+ "section_profile": {
62
+ "has_ui": false,
63
+ "crosses_service_boundaries": true,
64
+ "enforces_domain_rules": true,
65
+ "is_concurrent_async": true,
66
+ "owns_persistence": false,
67
+ "returns_caller_errors": true,
68
+ "has_design_tradeoff": true,
69
+ "stateful_transitions": true,
70
+ "exposes_wire_protocol": true,
71
+ "ui_multi_screen": false,
72
+ "large_data_model": false,
73
+ "has_tiers": false,
74
+ "module_specific_conventions": true,
75
+ "published_package": true,
76
+ "embedded_in_host": true,
77
+ "holds_client_state": true,
78
+ "resolved_by": "Codex generator with user-confirmed module map",
79
+ "resolved_at": "2026-07-07T13:41:40Z"
80
+ },
81
+ "source_policy": {
82
+ "mode": "migrate-existing",
83
+ "existing_sources": [
84
+ "AGENTS.md",
85
+ "ai-docs/README.md"
86
+ ],
87
+ "conflict_status": "none",
88
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
89
+ }
90
+ },
91
+ {
92
+ "path": "src/metrics",
93
+ "coverage_status": "Partial",
94
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
95
+ "canonical_spec": "src/metrics/ai-docs/metrics-spec.md",
96
+ "contracts": {
97
+ "provides": [
98
+ "MetricsManager timing, behavioral/operational/business event submission, taxonomy, queues, and tracking-field helpers"
99
+ ],
100
+ "requires": [
101
+ "Webex internal metrics service; Webex ready lifecycle; LoggerProxy; browser document visibility"
102
+ ]
103
+ },
104
+ "section_profile": {
105
+ "has_ui": false,
106
+ "crosses_service_boundaries": true,
107
+ "enforces_domain_rules": true,
108
+ "is_concurrent_async": true,
109
+ "owns_persistence": false,
110
+ "returns_caller_errors": false,
111
+ "has_design_tradeoff": true,
112
+ "stateful_transitions": true,
113
+ "exposes_wire_protocol": false,
114
+ "ui_multi_screen": false,
115
+ "large_data_model": false,
116
+ "has_tiers": false,
117
+ "module_specific_conventions": true,
118
+ "published_package": false,
119
+ "embedded_in_host": false,
120
+ "holds_client_state": true,
121
+ "resolved_by": "Codex generator with user-confirmed module map",
122
+ "resolved_at": "2026-07-07T13:41:40Z"
123
+ },
124
+ "source_policy": {
125
+ "mode": "migrate-existing",
126
+ "existing_sources": [
127
+ "src/metrics/ai-docs/AGENTS.md",
128
+ "src/metrics/ai-docs/ARCHITECTURE.md"
129
+ ],
130
+ "conflict_status": "none",
131
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
132
+ }
133
+ },
134
+ {
135
+ "path": "src/services",
136
+ "coverage_status": "Partial",
137
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
138
+ "canonical_spec": "src/services/ai-docs/services-spec.md",
139
+ "contracts": {
140
+ "provides": [
141
+ "Services composition root; agent/config/contact/dialer factories; AddressBook, EntryPoint, Queue, UserPreference, ApiAiAssistant, and WebCalling integration; existing Queue/EntryPoint list methods with SDK-owned defaults and compatible existing-parameter overrides; Queue returns full records and EntryPoint maps profile-scoped dial-number rows to typed records with optional numbers; cc.userPreference exposes user-preference CRUD"
142
+ ],
143
+ "requires": [
144
+ "Core HTTP/WebSocket/AQM infrastructure; WCC APIs; @webex/calling; MetricsManager; PageCache"
145
+ ]
146
+ },
147
+ "section_profile": {
148
+ "has_ui": false,
149
+ "crosses_service_boundaries": true,
150
+ "enforces_domain_rules": true,
151
+ "is_concurrent_async": true,
152
+ "owns_persistence": false,
153
+ "returns_caller_errors": true,
154
+ "has_design_tradeoff": true,
155
+ "stateful_transitions": true,
156
+ "exposes_wire_protocol": true,
157
+ "ui_multi_screen": false,
158
+ "large_data_model": false,
159
+ "has_tiers": false,
160
+ "module_specific_conventions": true,
161
+ "published_package": false,
162
+ "embedded_in_host": false,
163
+ "holds_client_state": true,
164
+ "resolved_by": "Codex generator with user-confirmed module map",
165
+ "resolved_at": "2026-07-07T13:41:40Z"
166
+ },
167
+ "source_policy": {
168
+ "mode": "migrate-existing",
169
+ "existing_sources": [
170
+ "src/services/ai-docs/AGENTS.md"
171
+ ],
172
+ "conflict_status": "none",
173
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
174
+ }
175
+ },
176
+ {
177
+ "path": "src/services/agent",
178
+ "coverage_status": "Partial",
179
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
180
+ "canonical_spec": "src/services/agent/ai-docs/agent-spec.md",
181
+ "contracts": {
182
+ "provides": [
183
+ "Agent request factory; station login/logout, state changes, buddy-agent and relogin operations; AGENT_EVENTS and agent types"
184
+ ],
185
+ "requires": [
186
+ "AqmReqs; WCC API gateway; correlated WebSocket notifications; ContactCenter registration/profile state"
187
+ ]
188
+ },
189
+ "section_profile": {
190
+ "has_ui": false,
191
+ "crosses_service_boundaries": true,
192
+ "enforces_domain_rules": true,
193
+ "is_concurrent_async": true,
194
+ "owns_persistence": false,
195
+ "returns_caller_errors": true,
196
+ "has_design_tradeoff": true,
197
+ "stateful_transitions": false,
198
+ "exposes_wire_protocol": true,
199
+ "ui_multi_screen": false,
200
+ "large_data_model": false,
201
+ "has_tiers": false,
202
+ "module_specific_conventions": true,
203
+ "published_package": false,
204
+ "embedded_in_host": false,
205
+ "holds_client_state": false,
206
+ "resolved_by": "Codex generator with user-confirmed module map",
207
+ "resolved_at": "2026-07-07T13:41:40Z"
208
+ },
209
+ "source_policy": {
210
+ "mode": "migrate-existing",
211
+ "existing_sources": [
212
+ "src/services/agent/ai-docs/AGENTS.md",
213
+ "src/services/agent/ai-docs/ARCHITECTURE.md"
214
+ ],
215
+ "conflict_status": "none",
216
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
217
+ }
218
+ },
219
+ {
220
+ "path": "src/services/config",
221
+ "coverage_status": "Partial",
222
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
223
+ "canonical_spec": "src/services/config/ai-docs/config-spec.md",
224
+ "contracts": {
225
+ "provides": [
226
+ "Agent profile aggregation; config endpoint methods; CC event/type contracts; outdial ANI access"
227
+ ],
228
+ "requires": [
229
+ "WebexRequest; WCC organization, team, profile, aux-code, dial-plan, site, tenant, and URL-mapping APIs"
230
+ ]
231
+ },
232
+ "section_profile": {
233
+ "has_ui": false,
234
+ "crosses_service_boundaries": true,
235
+ "enforces_domain_rules": true,
236
+ "is_concurrent_async": true,
237
+ "owns_persistence": false,
238
+ "returns_caller_errors": true,
239
+ "has_design_tradeoff": true,
240
+ "stateful_transitions": false,
241
+ "exposes_wire_protocol": true,
242
+ "ui_multi_screen": false,
243
+ "large_data_model": false,
244
+ "has_tiers": false,
245
+ "module_specific_conventions": true,
246
+ "published_package": false,
247
+ "embedded_in_host": false,
248
+ "holds_client_state": false,
249
+ "resolved_by": "Codex generator with user-confirmed module map",
250
+ "resolved_at": "2026-07-07T13:41:40Z"
251
+ },
252
+ "source_policy": {
253
+ "mode": "migrate-existing",
254
+ "existing_sources": [
255
+ "src/services/config/ai-docs/AGENTS.md",
256
+ "src/services/config/ai-docs/ARCHITECTURE.md"
257
+ ],
258
+ "conflict_status": "none",
259
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
260
+ }
261
+ },
262
+ {
263
+ "path": "src/services/core",
264
+ "coverage_status": "Partial",
265
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
266
+ "canonical_spec": "src/services/core/ai-docs/core-spec.md",
267
+ "contracts": {
268
+ "provides": [
269
+ "WebexRequest; WebSocketManager; ConnectionService; AqmReqs; shared error and request types/utilities"
270
+ ],
271
+ "requires": [
272
+ "Webex SDK authenticated service routing; browser WebSocket/Worker/network APIs; LoggerProxy; metrics/log-upload infrastructure"
273
+ ]
274
+ },
275
+ "section_profile": {
276
+ "has_ui": false,
277
+ "crosses_service_boundaries": true,
278
+ "enforces_domain_rules": true,
279
+ "is_concurrent_async": true,
280
+ "owns_persistence": false,
281
+ "returns_caller_errors": true,
282
+ "has_design_tradeoff": true,
283
+ "stateful_transitions": true,
284
+ "exposes_wire_protocol": true,
285
+ "ui_multi_screen": false,
286
+ "large_data_model": false,
287
+ "has_tiers": false,
288
+ "module_specific_conventions": true,
289
+ "published_package": false,
290
+ "embedded_in_host": false,
291
+ "holds_client_state": true,
292
+ "resolved_by": "Codex generator with user-confirmed module map",
293
+ "resolved_at": "2026-07-07T13:41:40Z"
294
+ },
295
+ "source_policy": {
296
+ "mode": "migrate-existing",
297
+ "existing_sources": [
298
+ "src/services/core/ai-docs/AGENTS.md",
299
+ "src/services/core/ai-docs/ARCHITECTURE.md"
300
+ ],
301
+ "conflict_status": "none",
302
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
303
+ }
304
+ },
305
+ {
306
+ "path": "src/services/task",
307
+ "coverage_status": "Partial",
308
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
309
+ "canonical_spec": "src/services/task/ai-docs/task-spec.md",
310
+ "contracts": {
311
+ "provides": [
312
+ "Task/Voice/WebRTC/Digital lifecycle APIs; TaskManager lifecycle correlation, narrowly scoped backend-authoritative ContactOwnerChanged recovery, and task-event publication, including routing owner-changing ContactUpdated through the existing task:hydrate event; task events/types; ordered action-specific consult/transfer destination controls; call-control and dialer operations including acceptPreviewContact, skipPreviewContact, and removePreviewContact"
313
+ ],
314
+ "requires": [
315
+ "Contact/dialer AqmReqs; WebSocket managers; @webex/calling; MetricsManager; XState task-state module"
316
+ ]
317
+ },
318
+ "section_profile": {
319
+ "has_ui": false,
320
+ "crosses_service_boundaries": true,
321
+ "enforces_domain_rules": true,
322
+ "is_concurrent_async": true,
323
+ "owns_persistence": false,
324
+ "returns_caller_errors": true,
325
+ "has_design_tradeoff": true,
326
+ "stateful_transitions": true,
327
+ "exposes_wire_protocol": true,
328
+ "ui_multi_screen": false,
329
+ "large_data_model": false,
330
+ "has_tiers": false,
331
+ "module_specific_conventions": true,
332
+ "published_package": false,
333
+ "embedded_in_host": false,
334
+ "holds_client_state": true,
335
+ "resolved_by": "Codex generator with user-confirmed module map",
336
+ "resolved_at": "2026-07-07T13:41:40Z"
337
+ },
338
+ "source_policy": {
339
+ "mode": "migrate-existing",
340
+ "existing_sources": [
341
+ "src/services/task/ai-docs/AGENTS.md",
342
+ "src/services/task/ai-docs/ARCHITECTURE.md"
343
+ ],
344
+ "conflict_status": "none",
345
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
346
+ }
347
+ },
348
+ {
349
+ "path": "src/services/task/state-machine",
350
+ "coverage_status": "Partial",
351
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
352
+ "canonical_spec": "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
353
+ "contracts": {
354
+ "provides": [
355
+ "Task state-machine factory; TaskState/TaskEvent contracts; guards/actions; state/profile/interaction-derived UI-control and ordered consult/transfer destination computation"
356
+ ],
357
+ "requires": [
358
+ "XState; TaskData/task event contracts; Task and TaskManager integration"
359
+ ]
360
+ },
361
+ "section_profile": {
362
+ "has_ui": false,
363
+ "crosses_service_boundaries": false,
364
+ "enforces_domain_rules": true,
365
+ "is_concurrent_async": true,
366
+ "owns_persistence": false,
367
+ "returns_caller_errors": false,
368
+ "has_design_tradeoff": true,
369
+ "stateful_transitions": true,
370
+ "exposes_wire_protocol": false,
371
+ "ui_multi_screen": false,
372
+ "large_data_model": false,
373
+ "has_tiers": false,
374
+ "module_specific_conventions": true,
375
+ "published_package": false,
376
+ "embedded_in_host": false,
377
+ "holds_client_state": true,
378
+ "resolved_by": "Codex generator with user-confirmed module map",
379
+ "resolved_at": "2026-07-07T13:41:40Z"
380
+ },
381
+ "source_policy": {
382
+ "mode": "migrate-existing",
383
+ "existing_sources": [
384
+ "src/services/task/state-machine/ai-docs/AGENTS.md",
385
+ "src/services/task/state-machine/ai-docs/ARCHITECTURE.md"
386
+ ],
387
+ "conflict_status": "none",
388
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
389
+ }
390
+ },
391
+ {
392
+ "path": "src/utils",
393
+ "coverage_status": "Partial",
394
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
395
+ "canonical_spec": "src/utils/ai-docs/utils-spec.md",
396
+ "contracts": {
397
+ "provides": [
398
+ "PageCache; pagination/search/cache contracts and defaults"
399
+ ],
400
+ "requires": [
401
+ "LoggerProxy; in-memory Map and clock; AddressBook, EntryPoint, and Queue consumers"
402
+ ]
403
+ },
404
+ "section_profile": {
405
+ "has_ui": false,
406
+ "crosses_service_boundaries": false,
407
+ "enforces_domain_rules": true,
408
+ "is_concurrent_async": false,
409
+ "owns_persistence": false,
410
+ "returns_caller_errors": false,
411
+ "has_design_tradeoff": true,
412
+ "stateful_transitions": false,
413
+ "exposes_wire_protocol": false,
414
+ "ui_multi_screen": false,
415
+ "large_data_model": false,
416
+ "has_tiers": false,
417
+ "module_specific_conventions": true,
418
+ "published_package": false,
419
+ "embedded_in_host": false,
420
+ "holds_client_state": true,
421
+ "resolved_by": "Codex generator with user-confirmed module map",
422
+ "resolved_at": "2026-07-07T13:41:40Z"
423
+ },
424
+ "source_policy": {
425
+ "mode": "migrate-existing",
426
+ "existing_sources": [
427
+ "src/utils/AGENTS.md"
428
+ ],
429
+ "conflict_status": "none",
430
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
431
+ }
432
+ }
433
+ ],
434
+ "spec_source_policy": {
435
+ "mode": "migrate-existing",
436
+ "decided_by": "user",
437
+ "decided_at": "2026-07-07T13:27:09Z",
438
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
439
+ },
440
+ "spec_sources": [
441
+ {
442
+ "path": "AGENTS.md",
443
+ "scope": "repo",
444
+ "role": "source-material",
445
+ "canonical": true,
446
+ "use_by_agents": "source-for-migration",
447
+ "canonical_target": "AGENTS.md",
448
+ "notes": "Approved in-place canonical target; source units must be inventoried before rewrite."
449
+ },
450
+ {
451
+ "path": "ai-docs/README.md",
452
+ "scope": "repo",
453
+ "role": "source-material",
454
+ "canonical": false,
455
+ "use_by_agents": "source-for-migration",
456
+ "canonical_target": "ai-docs/GETTING_STARTED.md",
457
+ "notes": "Package purpose, technologies, navigation, commands, and architecture overview migrate by meaning."
458
+ },
459
+ {
460
+ "path": "ai-docs/RULES.md",
461
+ "scope": "repo",
462
+ "role": "source-material",
463
+ "canonical": true,
464
+ "use_by_agents": "source-for-migration",
465
+ "canonical_target": "ai-docs/RULES.md",
466
+ "notes": "Approved in-place canonical standing document; source units must be inventoried before rewrite."
467
+ },
468
+ {
469
+ "path": "ai-docs/patterns/event-driven-patterns.md",
470
+ "scope": "reference",
471
+ "role": "source-material",
472
+ "canonical": false,
473
+ "use_by_agents": "source-for-migration",
474
+ "canonical_target": "ai-docs/RULES.md",
475
+ "notes": "Event and WebSocket rules remain in place and feed canonical rules/module specs."
476
+ },
477
+ {
478
+ "path": "ai-docs/patterns/testing-patterns.md",
479
+ "scope": "reference",
480
+ "role": "source-material",
481
+ "canonical": false,
482
+ "use_by_agents": "source-for-migration",
483
+ "canonical_target": "ai-docs/RULES.md",
484
+ "notes": "Testing conventions remain in place and feed canonical rules/module specs."
485
+ },
486
+ {
487
+ "path": "ai-docs/patterns/typescript-patterns.md",
488
+ "scope": "reference",
489
+ "role": "source-material",
490
+ "canonical": false,
491
+ "use_by_agents": "source-for-migration",
492
+ "canonical_target": "ai-docs/RULES.md",
493
+ "notes": "TypeScript/JSDoc conventions remain in place and feed canonical rules/module specs."
494
+ },
495
+ {
496
+ "path": "src/metrics/ai-docs/AGENTS.md",
497
+ "scope": "module",
498
+ "role": "source-material",
499
+ "canonical": false,
500
+ "use_by_agents": "source-for-migration",
501
+ "module": "src/metrics",
502
+ "canonical_target": "src/metrics/ai-docs/metrics-spec.md",
503
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
504
+ },
505
+ {
506
+ "path": "src/metrics/ai-docs/ARCHITECTURE.md",
507
+ "scope": "module",
508
+ "role": "source-material",
509
+ "canonical": false,
510
+ "use_by_agents": "source-for-migration",
511
+ "module": "src/metrics",
512
+ "canonical_target": "src/metrics/ai-docs/metrics-spec.md",
513
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
514
+ },
515
+ {
516
+ "path": "src/services/ai-docs/AGENTS.md",
517
+ "scope": "module",
518
+ "role": "source-material",
519
+ "canonical": false,
520
+ "use_by_agents": "source-for-migration",
521
+ "module": "src/services",
522
+ "canonical_target": "src/services/ai-docs/services-spec.md",
523
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
524
+ },
525
+ {
526
+ "path": "src/services/agent/ai-docs/AGENTS.md",
527
+ "scope": "module",
528
+ "role": "source-material",
529
+ "canonical": false,
530
+ "use_by_agents": "source-for-migration",
531
+ "module": "src/services/agent",
532
+ "canonical_target": "src/services/agent/ai-docs/agent-spec.md",
533
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
534
+ },
535
+ {
536
+ "path": "src/services/agent/ai-docs/ARCHITECTURE.md",
537
+ "scope": "module",
538
+ "role": "source-material",
539
+ "canonical": false,
540
+ "use_by_agents": "source-for-migration",
541
+ "module": "src/services/agent",
542
+ "canonical_target": "src/services/agent/ai-docs/agent-spec.md",
543
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
544
+ },
545
+ {
546
+ "path": "src/services/config/ai-docs/AGENTS.md",
547
+ "scope": "module",
548
+ "role": "source-material",
549
+ "canonical": false,
550
+ "use_by_agents": "source-for-migration",
551
+ "module": "src/services/config",
552
+ "canonical_target": "src/services/config/ai-docs/config-spec.md",
553
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
554
+ },
555
+ {
556
+ "path": "src/services/config/ai-docs/ARCHITECTURE.md",
557
+ "scope": "module",
558
+ "role": "source-material",
559
+ "canonical": false,
560
+ "use_by_agents": "source-for-migration",
561
+ "module": "src/services/config",
562
+ "canonical_target": "src/services/config/ai-docs/config-spec.md",
563
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
564
+ },
565
+ {
566
+ "path": "src/services/core/ai-docs/AGENTS.md",
567
+ "scope": "module",
568
+ "role": "source-material",
569
+ "canonical": false,
570
+ "use_by_agents": "source-for-migration",
571
+ "module": "src/services/core",
572
+ "canonical_target": "src/services/core/ai-docs/core-spec.md",
573
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
574
+ },
575
+ {
576
+ "path": "src/services/core/ai-docs/ARCHITECTURE.md",
577
+ "scope": "module",
578
+ "role": "source-material",
579
+ "canonical": false,
580
+ "use_by_agents": "source-for-migration",
581
+ "module": "src/services/core",
582
+ "canonical_target": "src/services/core/ai-docs/core-spec.md",
583
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
584
+ },
585
+ {
586
+ "path": "src/services/task/ai-docs/AGENTS.md",
587
+ "scope": "module",
588
+ "role": "source-material",
589
+ "canonical": false,
590
+ "use_by_agents": "source-for-migration",
591
+ "module": "src/services/task",
592
+ "canonical_target": "src/services/task/ai-docs/task-spec.md",
593
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
594
+ },
595
+ {
596
+ "path": "src/services/task/ai-docs/ARCHITECTURE.md",
597
+ "scope": "module",
598
+ "role": "source-material",
599
+ "canonical": false,
600
+ "use_by_agents": "source-for-migration",
601
+ "module": "src/services/task",
602
+ "canonical_target": "src/services/task/ai-docs/task-spec.md",
603
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
604
+ },
605
+ {
606
+ "path": "src/services/task/state-machine/ai-docs/AGENTS.md",
607
+ "scope": "module",
608
+ "role": "source-material",
609
+ "canonical": false,
610
+ "use_by_agents": "source-for-migration",
611
+ "module": "src/services/task/state-machine",
612
+ "canonical_target": "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
613
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
614
+ },
615
+ {
616
+ "path": "src/services/task/state-machine/ai-docs/ARCHITECTURE.md",
617
+ "scope": "module",
618
+ "role": "source-material",
619
+ "canonical": false,
620
+ "use_by_agents": "source-for-migration",
621
+ "module": "src/services/task/state-machine",
622
+ "canonical_target": "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
623
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
624
+ },
625
+ {
626
+ "path": "src/utils/AGENTS.md",
627
+ "scope": "module",
628
+ "role": "source-material",
629
+ "canonical": false,
630
+ "use_by_agents": "source-for-migration",
631
+ "module": "src/utils",
632
+ "canonical_target": "src/utils/ai-docs/utils-spec.md",
633
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
634
+ },
635
+ {
636
+ "path": "ai-docs/templates/README.md",
637
+ "scope": "reference",
638
+ "role": "reference-only",
639
+ "canonical": false,
640
+ "use_by_agents": "context-only",
641
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
642
+ },
643
+ {
644
+ "path": "ai-docs/templates/documentation/create-agents-md.md",
645
+ "scope": "reference",
646
+ "role": "reference-only",
647
+ "canonical": false,
648
+ "use_by_agents": "context-only",
649
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
650
+ },
651
+ {
652
+ "path": "ai-docs/templates/documentation/create-architecture-md.md",
653
+ "scope": "reference",
654
+ "role": "reference-only",
655
+ "canonical": false,
656
+ "use_by_agents": "context-only",
657
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
658
+ },
659
+ {
660
+ "path": "ai-docs/templates/existing-service/bug-fix.md",
661
+ "scope": "reference",
662
+ "role": "reference-only",
663
+ "canonical": false,
664
+ "use_by_agents": "context-only",
665
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
666
+ },
667
+ {
668
+ "path": "ai-docs/templates/existing-service/feature-enhancement.md",
669
+ "scope": "reference",
670
+ "role": "reference-only",
671
+ "canonical": false,
672
+ "use_by_agents": "context-only",
673
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
674
+ },
675
+ {
676
+ "path": "ai-docs/templates/new-method/00-master.md",
677
+ "scope": "reference",
678
+ "role": "reference-only",
679
+ "canonical": false,
680
+ "use_by_agents": "context-only",
681
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
682
+ },
683
+ {
684
+ "path": "ai-docs/templates/new-method/01-requirements.md",
685
+ "scope": "reference",
686
+ "role": "reference-only",
687
+ "canonical": false,
688
+ "use_by_agents": "context-only",
689
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
690
+ },
691
+ {
692
+ "path": "ai-docs/templates/new-method/02-implementation.md",
693
+ "scope": "reference",
694
+ "role": "reference-only",
695
+ "canonical": false,
696
+ "use_by_agents": "context-only",
697
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
698
+ },
699
+ {
700
+ "path": "ai-docs/templates/new-method/03-tests.md",
701
+ "scope": "reference",
702
+ "role": "reference-only",
703
+ "canonical": false,
704
+ "use_by_agents": "context-only",
705
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
706
+ },
707
+ {
708
+ "path": "ai-docs/templates/new-method/04-validation.md",
709
+ "scope": "reference",
710
+ "role": "reference-only",
711
+ "canonical": false,
712
+ "use_by_agents": "context-only",
713
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
714
+ },
715
+ {
716
+ "path": "ai-docs/templates/new-service/00-master.md",
717
+ "scope": "reference",
718
+ "role": "reference-only",
719
+ "canonical": false,
720
+ "use_by_agents": "context-only",
721
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
722
+ },
723
+ {
724
+ "path": "ai-docs/templates/new-service/01-pre-questions.md",
725
+ "scope": "reference",
726
+ "role": "reference-only",
727
+ "canonical": false,
728
+ "use_by_agents": "context-only",
729
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
730
+ },
731
+ {
732
+ "path": "ai-docs/templates/new-service/02-code-generation.md",
733
+ "scope": "reference",
734
+ "role": "reference-only",
735
+ "canonical": false,
736
+ "use_by_agents": "context-only",
737
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
738
+ },
739
+ {
740
+ "path": "ai-docs/templates/new-service/03-integration.md",
741
+ "scope": "reference",
742
+ "role": "reference-only",
743
+ "canonical": false,
744
+ "use_by_agents": "context-only",
745
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
746
+ },
747
+ {
748
+ "path": "ai-docs/templates/new-service/04-test-generation.md",
749
+ "scope": "reference",
750
+ "role": "reference-only",
751
+ "canonical": false,
752
+ "use_by_agents": "context-only",
753
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
754
+ },
755
+ {
756
+ "path": "ai-docs/templates/new-service/05-validation.md",
757
+ "scope": "reference",
758
+ "role": "reference-only",
759
+ "canonical": false,
760
+ "use_by_agents": "context-only",
761
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
762
+ }
763
+ ],
764
+ "spec_policy": {
765
+ "delta_grammar": {
766
+ "added": "## ADDED Requirements",
767
+ "modified": "## MODIFIED Requirements",
768
+ "removed": "## REMOVED Requirements"
769
+ },
770
+ "require_what_and_why": true,
771
+ "require_provenance": true,
772
+ "protected_specs": [
773
+ "ai-docs/contact-center-spec.md",
774
+ "src/metrics/ai-docs/metrics-spec.md",
775
+ "src/services/ai-docs/services-spec.md",
776
+ "src/services/agent/ai-docs/agent-spec.md",
777
+ "src/services/config/ai-docs/config-spec.md",
778
+ "src/services/core/ai-docs/core-spec.md",
779
+ "src/services/task/ai-docs/task-spec.md",
780
+ "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
781
+ "src/utils/ai-docs/utils-spec.md",
782
+ "AGENTS.md",
783
+ "ai-docs/ARCHITECTURE.md",
784
+ "ai-docs/RULES.md",
785
+ "ai-docs/CONTRACTS.md",
786
+ "ai-docs/SPEC_INDEX.md"
787
+ ],
788
+ "required_sections_by_change_class": {
789
+ "core_always": [
790
+ "Intent (WHAT)",
791
+ "Rationale (WHY)",
792
+ "Scope/Out-of-scope",
793
+ "Acceptance criteria",
794
+ "Contracts delta"
795
+ ],
796
+ "security_or_contract_or_perf_critical": [
797
+ "Data",
798
+ "Error Matrix",
799
+ "Resilience",
800
+ "Observability",
801
+ "Operations"
802
+ ]
803
+ }
804
+ },
805
+ "validation": {
806
+ "generator_runtime": "codex",
807
+ "validator_runtime": "claude-code",
808
+ "must_differ": true,
809
+ "blocking_severities": [
810
+ "Blocking"
811
+ ],
812
+ "generator_run_id": "contact-center-bootstrap-20260707",
813
+ "source_commit": "382831a838c34fb1520320654beaf12d4afdfacb",
814
+ "runtime_family": "openai-codex"
815
+ },
816
+ "layout": {
817
+ "sdd_root": ".sdd",
818
+ "docs_root": "ai-docs",
819
+ "agent_entry_path": "AGENTS.md",
820
+ "standing_docs_root": "ai-docs",
821
+ "spec_index_path": "ai-docs/SPEC_INDEX.md",
822
+ "module_docs_strategy": "source-local",
823
+ "module_docs_folder_name": "ai-docs",
824
+ "template_roots": {
825
+ "canonical": "../../../.sdd/templates",
826
+ "extensions": [
827
+ "../../../.sdd/templates/extensions"
828
+ ],
829
+ "legacy_compat": "ai-docs/templates"
830
+ },
831
+ "repo_skills_root": "../../../.agents/skills",
832
+ "runtime_skill_entrypoints": {
833
+ "codex": "../../../.agents/skills",
834
+ "cursor": "../../../.cursor/skills"
835
+ },
836
+ "contracts_strategy": "root-index-module-detail"
837
+ },
838
+ "tooling": {
839
+ "sdlc_skills": {
840
+ "source_repo": "repo-installed SDLC skills",
841
+ "source_ref": "brownfield-onboarding@0.1.6+codex.20260706172001",
842
+ "install_mode": "copy",
843
+ "installed_at": "2026-07-06T17:20:01Z",
844
+ "plugins": [
845
+ "brownfield-onboarding@0.1.6+codex.20260706172001",
846
+ "sdlc-lifecycle@0.1.1+codex.20260630150003"
847
+ ]
848
+ }
849
+ },
850
+ "coverage_ratchet": {
851
+ "enabled": true,
852
+ "waivers": []
853
+ },
854
+ "substrate": {
855
+ "source": "webex-js-sdk repository standards",
856
+ "consumed": [
857
+ "root lint/format configs (.eslintrc.js, .prettierrc, .editorconfig)",
858
+ "standard files (README.md, CONTRIBUTING.md, .github/CODEOWNERS)",
859
+ "workspace build/test tooling"
860
+ ],
861
+ "compliance_tier": "legacy"
862
+ },
863
+ "section_profiles": {
864
+ "repo": {
865
+ "owns_datastore": false,
866
+ "holds_client_state": true,
867
+ "components_interact": true,
868
+ "domain_data_across_components": true,
869
+ "caches_data": true,
870
+ "observability_convention": true,
871
+ "deploys_to_infra": true,
872
+ "shared_base_libs": true,
873
+ "is_monorepo": true,
874
+ "multi_platform": false,
875
+ "published_package": true,
876
+ "embedded_in_host": true,
877
+ "cross_repo_deps_material": true,
878
+ "security_arch_warranted": true
879
+ },
880
+ "resolved_by": "Codex generator with user-confirmed scope/module boundaries",
881
+ "resolved_at": "2026-07-07T13:41:40Z"
882
+ }
883
+ }