@webex/contact-center 3.12.0-next.9 → 3.12.0-next.91

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