@thinkingai/ae-cli 6.1.10 → 6.1.12

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 (232) hide show
  1. package/README.md +25 -3
  2. package/README.zh.md +25 -3
  3. package/dist/{auth-56Z45UVR.js → auth-GDV3H5I4.js} +18 -8
  4. package/dist/{auth-ENM3FE6L.js → auth-NN55553T.js} +3 -3
  5. package/dist/{capability-2H6PAOA3.js → capability-DRLGDVS4.js} +24 -17
  6. package/dist/{capability-YPOQX6PL.js → capability-P6GK3AQH.js} +24 -17
  7. package/dist/chunk-4NN5IWVN.js +26 -0
  8. package/dist/{chunk-DB4Q3ANU.js → chunk-6A2FUCIS.js} +3 -3
  9. package/dist/{chunk-PVBYJWC2.js → chunk-7KQWSBSL.js} +4 -4
  10. package/dist/{chunk-24BAVOX3.js → chunk-AXDXJTPC.js} +3 -1
  11. package/dist/{chunk-CPVTECJ3.js → chunk-DT6Y3TD7.js} +5 -5
  12. package/dist/{chunk-EGEIXA2Z.js → chunk-DWO43OIB.js} +0 -248
  13. package/dist/{chunk-V6FR6WTW.js → chunk-GJJA4CQZ.js} +34 -2
  14. package/dist/{chunk-RGXCNC4N.js → chunk-GS2P7LFD.js} +50 -17
  15. package/dist/{chunk-LYVNONC4.js → chunk-JHENBQ5B.js} +35 -0
  16. package/dist/{chunk-3P3562ZX.js → chunk-MVDZ7DBQ.js} +5 -5
  17. package/dist/{chunk-LCXU3AAT.js → chunk-NBPKWKRA.js} +2 -2
  18. package/dist/{chunk-HQ2A7ITL.js → chunk-RBNKI5ZW.js} +50 -17
  19. package/dist/{chunk-LHVM35J4.js → chunk-TS6BUGUY.js} +4 -4
  20. package/dist/chunk-TUKQZTMI.js +250 -0
  21. package/dist/{chunk-J7MZHDHQ.js → chunk-VKD5WQKN.js} +5 -5
  22. package/dist/{chunk-3KI3RRXX.js → chunk-VTXHDCBW.js} +3 -3
  23. package/dist/{chunk-KTYR3U6D.js → chunk-YTG6Q75E.js} +10 -6
  24. package/dist/{chunk-IR4ZLVPW.js → chunk-YV52FB5G.js} +25 -3
  25. package/dist/{chunk-E7UXXHO3.js → chunk-Z3OXWCIA.js} +3 -3
  26. package/dist/{cli-token-4SBMXAUK.js → cli-token-GL5MS5FK.js} +4 -4
  27. package/dist/{client-PP5FETMW.js → client-DAIPF7XN.js} +4 -4
  28. package/dist/{community-report-client-KK2QBANO.js → community-report-client-M2RW4MXD.js} +2 -2
  29. package/dist/config-4VZNLBKF.js +489 -0
  30. package/dist/index.js +94 -35
  31. package/dist/memory-RWJW4XFO.js +892 -0
  32. package/dist/memory-VO2ZJCRT.js +892 -0
  33. package/dist/{metadata-JIQ77HFY.js → metadata-YGTHR2XJ.js} +8 -8
  34. package/dist/{metadata-AN3YFZEV.js → metadata-ZRN2GHPN.js} +8 -8
  35. package/dist/{model-JASQVOFD.js → model-CLUIK3K5.js} +7 -5
  36. package/dist/{raw-XJCAT3HX.js → raw-52B4UKO4.js} +8 -7
  37. package/dist/sync-3REDHGY6.js +10259 -0
  38. package/dist/{te-agent-JHUG6DVV.js → te-agent-XNPELAKX.js} +580 -84
  39. package/dist/{te-analysis-ITKTO6JS.js → te-analysis-GJI5FZUL.js} +1152 -13
  40. package/dist/{te-analysis-RAC67YYD.js → te-analysis-N2BRDJZ5.js} +1152 -13
  41. package/dist/{te-community-QOYIYEJI.js → te-community-SQXKE5OO.js} +7 -7
  42. package/dist/{te-community-UFKI6ONP.js → te-community-TYSNU3NQ.js} +7 -7
  43. package/dist/{te-dataops-PZQ5NQLY.js → te-dataops-5TM7WZDI.js} +370 -189
  44. package/dist/{te-dataops-XTWVTJCA.js → te-dataops-OWIADNSM.js} +370 -189
  45. package/dist/{te-engage-NLZUPSBK.js → te-engage-L72HWRGO.js} +716 -118
  46. package/dist/{te-engage-E7F4HTXU.js → te-engage-QWM4GFS7.js} +716 -118
  47. package/dist/{te-experiment-N63WF7XA.js → te-experiment-2T2HEZML.js} +189 -10
  48. package/dist/{te-experiment-D32TB6ZB.js → te-experiment-PVEY7AEZ.js} +189 -10
  49. package/dist/{te-kb-E7NSCBRB.js → te-kb-VRMEY3D4.js} +6 -6
  50. package/dist/{te-meta-GBDTMPEL.js → te-meta-53BVXPFI.js} +7 -7
  51. package/dist/{te-meta-ZTLTSHXC.js → te-meta-TOCBPBXI.js} +7 -7
  52. package/dist/{te-system-AH7DMCAQ.js → te-system-XGS5EQIQ.js} +4 -4
  53. package/dist/{te-team-BQ3SKSZV.js → te-team-BZRDV2CM.js} +7 -7
  54. package/dist/{update-DKG6UXEM.js → update-HEDXGOJH.js} +8 -6
  55. package/package.json +5 -2
  56. package/skills/ae-agent/SKILL.md +178 -16
  57. package/skills/ae-agent/references/add-skill.md +22 -10
  58. package/skills/ae-agent/references/edit-skill.md +24 -14
  59. package/skills/ae-agent/references/find-archived-conversations.md +82 -0
  60. package/skills/ae-agent/references/restore-conversation.md +54 -0
  61. package/skills/ae-agent/references/upload-skill.md +24 -14
  62. package/skills/ae-analysis/SKILL.md +1 -1
  63. package/skills/ae-analysis/references/command_index.md +104 -42
  64. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  65. package/skills/ae-analysis/references/project_access_detail_get.md +3 -3
  66. package/skills/ae-analysis/references/project_data_power_delete.md +3 -3
  67. package/skills/ae-analysis/references/project_data_power_get.md +3 -3
  68. package/skills/ae-analysis/references/project_data_power_list.md +3 -3
  69. package/skills/ae-analysis/references/project_data_power_upsert.md +3 -3
  70. package/skills/ae-analysis/references/project_entity_create.md +3 -3
  71. package/skills/ae-analysis/references/project_entity_delete.md +3 -3
  72. package/skills/ae-analysis/references/project_entity_event_list.md +3 -3
  73. package/skills/ae-analysis/references/project_entity_get.md +3 -3
  74. package/skills/ae-analysis/references/project_entity_list.md +3 -3
  75. package/skills/ae-analysis/references/project_entity_update.md +3 -3
  76. package/skills/ae-analysis/references/project_function_list.md +3 -3
  77. package/skills/ae-analysis/references/project_info_create.md +25 -0
  78. package/skills/ae-analysis/references/project_info_delete.md +24 -0
  79. package/skills/ae-analysis/references/project_info_get.md +3 -3
  80. package/skills/ae-analysis/references/project_info_list.md +3 -3
  81. package/skills/ae-analysis/references/project_info_update.md +3 -3
  82. package/skills/ae-analysis/references/project_mark_time_create.md +3 -3
  83. package/skills/ae-analysis/references/project_mark_time_delete.md +3 -3
  84. package/skills/ae-analysis/references/project_mark_time_list.md +3 -3
  85. package/skills/ae-analysis/references/project_mark_time_update.md +3 -3
  86. package/skills/ae-analysis/references/project_member_add.md +3 -3
  87. package/skills/ae-analysis/references/project_member_batch_update.md +3 -3
  88. package/skills/ae-analysis/references/project_member_candidate_list.md +3 -3
  89. package/skills/ae-analysis/references/project_member_handover_export.md +3 -3
  90. package/skills/ae-analysis/references/project_member_handover_run.md +3 -3
  91. package/skills/ae-analysis/references/project_member_import.md +3 -3
  92. package/skills/ae-analysis/references/project_member_list.md +3 -3
  93. package/skills/ae-analysis/references/project_member_receiver_list.md +3 -3
  94. package/skills/ae-analysis/references/project_member_remove.md +3 -3
  95. package/skills/ae-analysis/references/project_member_update.md +3 -3
  96. package/skills/ae-analysis/references/project_owner_update.md +3 -3
  97. package/skills/ae-analysis/references/project_permission_binding_list.md +3 -3
  98. package/skills/ae-analysis/references/project_receive_status_update.md +3 -3
  99. package/skills/ae-analysis/references/project_role_delete.md +3 -3
  100. package/skills/ae-analysis/references/project_role_function_list.md +3 -3
  101. package/skills/ae-analysis/references/project_role_get.md +3 -3
  102. package/skills/ae-analysis/references/project_role_list.md +3 -3
  103. package/skills/ae-analysis/references/project_role_upsert.md +3 -3
  104. package/skills/ae-analysis/references/project_role_user_list.md +3 -3
  105. package/skills/ae-analysis/references/project_space_list.md +1 -1
  106. package/skills/ae-analysis/references/project_timezone_get.md +3 -3
  107. package/skills/ae-analysis/references/project_timezone_overview.md +3 -3
  108. package/skills/ae-analysis/references/project_timezone_update.md +3 -3
  109. package/skills/ae-analysis/references/project_user_id_items_update.md +3 -3
  110. package/skills/ae-analysis/references/system_admin_function_list.md +22 -0
  111. package/skills/ae-analysis/references/system_admin_function_update.md +26 -0
  112. package/skills/ae-analysis/references/system_admin_list.md +21 -0
  113. package/skills/ae-analysis/references/system_admin_remove.md +25 -0
  114. package/skills/ae-analysis/references/system_admin_upsert.md +25 -0
  115. package/skills/ae-analysis/references/system_function_list.md +21 -0
  116. package/skills/ae-analysis/references/system_member_add.md +25 -0
  117. package/skills/ae-analysis/references/system_member_candidate_list.md +22 -0
  118. package/skills/ae-analysis/references/system_member_delete.md +25 -0
  119. package/skills/ae-analysis/references/system_member_list.md +24 -0
  120. package/skills/ae-analysis/references/system_member_mfa_unbind.md +25 -0
  121. package/skills/ae-analysis/references/system_member_password_reset.md +32 -0
  122. package/skills/ae-analysis/references/system_member_project_batch_update.md +27 -0
  123. package/skills/ae-analysis/references/system_member_status_update.md +26 -0
  124. package/skills/ae-analysis/references/system_member_update.md +23 -0
  125. package/skills/ae-analysis/references/system_mfa_get.md +21 -0
  126. package/skills/ae-analysis/references/system_mfa_update.md +25 -0
  127. package/skills/ae-analysis/references/system_node_monitor_list.md +24 -0
  128. package/skills/ae-analysis/references/system_oauth2_update.md +22 -0
  129. package/skills/ae-analysis/references/system_ops_alert_contact_delete.md +25 -0
  130. package/skills/ae-analysis/references/system_ops_alert_contact_list.md +23 -0
  131. package/skills/ae-analysis/references/system_ops_alert_contact_test.md +29 -0
  132. package/skills/ae-analysis/references/system_ops_alert_contact_upsert.md +39 -0
  133. package/skills/ae-analysis/references/system_preference_get.md +21 -0
  134. package/skills/ae-analysis/references/system_preference_update.md +22 -0
  135. package/skills/ae-analysis/references/system_project_usage_list.md +28 -0
  136. package/skills/ae-analysis/references/system_query_alert_rule_list.md +21 -0
  137. package/skills/ae-analysis/references/system_query_alert_rule_update.md +26 -0
  138. package/skills/ae-analysis/references/system_query_monitor_overview.md +26 -0
  139. package/skills/ae-analysis/references/system_query_task_cancel.md +25 -0
  140. package/skills/ae-analysis/references/system_query_task_export.md +49 -0
  141. package/skills/ae-analysis/references/system_query_task_get.md +23 -0
  142. package/skills/ae-analysis/references/system_query_task_list.md +35 -0
  143. package/skills/ae-analysis/references/system_query_task_options.md +27 -0
  144. package/skills/ae-analysis/references/system_receiver_address_delete.md +26 -0
  145. package/skills/ae-analysis/references/system_receiver_address_overview.md +21 -0
  146. package/skills/ae-analysis/references/system_receiver_address_project_list.md +21 -0
  147. package/skills/ae-analysis/references/system_receiver_address_promote.md +24 -0
  148. package/skills/ae-analysis/references/system_receiver_address_upsert.md +27 -0
  149. package/skills/ae-analysis/references/system_receiver_detection_get.md +22 -0
  150. package/skills/ae-analysis/references/system_receiver_detection_run.md +22 -0
  151. package/skills/ae-analysis/references/system_receiver_detection_update.md +25 -0
  152. package/skills/ae-analysis/references/system_role_delete.md +26 -0
  153. package/skills/ae-analysis/references/system_role_function_list.md +22 -0
  154. package/skills/ae-analysis/references/system_role_get.md +22 -0
  155. package/skills/ae-analysis/references/system_role_list.md +24 -0
  156. package/skills/ae-analysis/references/system_role_upsert.md +27 -0
  157. package/skills/ae-analysis/references/system_role_user_list.md +22 -0
  158. package/skills/ae-analysis/references/system_seat_list.md +25 -0
  159. package/skills/ae-analysis/references/system_seat_update.md +26 -0
  160. package/skills/ae-analysis/references/system_smtp_delete.md +24 -0
  161. package/skills/ae-analysis/references/system_smtp_get.md +21 -0
  162. package/skills/ae-analysis/references/system_smtp_test.md +22 -0
  163. package/skills/ae-analysis/references/system_smtp_upsert.md +31 -0
  164. package/skills/ae-analysis/references/system_third_party_login_disable.md +25 -0
  165. package/skills/ae-analysis/references/system_third_party_login_list.md +21 -0
  166. package/skills/ae-analysis/references/system_third_party_login_upsert.md +33 -0
  167. package/skills/ae-analysis/references/system_usage_overview.md +21 -0
  168. package/skills/ae-analysis/references/system_usage_trend_export.md +44 -0
  169. package/skills/ae-analysis/references/system_usage_trend_query.md +28 -0
  170. package/skills/ae-dataops/SKILL.md +1 -1
  171. package/skills/ae-dataops/references/dataops-flow-create.md +51 -16
  172. package/skills/ae-engage/SKILL.md +67 -27
  173. package/skills/ae-engage/references/activity-activity.md +3 -0
  174. package/skills/ae-engage/references/activity-approval.md +12 -4
  175. package/skills/ae-engage/references/activity-data-detail.md +61 -0
  176. package/skills/ae-engage/references/activity-task.md +21 -6
  177. package/skills/ae-engage/references/activity-topic.md +31 -13
  178. package/skills/ae-engage/references/add-channel.md +170 -41
  179. package/skills/ae-engage/references/build-task-save-guide.md +66 -29
  180. package/skills/ae-engage/references/channel-update-config.md +3 -2
  181. package/skills/ae-engage/references/common-metric.md +88 -115
  182. package/skills/ae-engage/references/flow-detail.md +13 -0
  183. package/skills/ae-engage/references/preset-event.md +14 -32
  184. package/skills/ae-engage/references/save-flow.md +141 -64
  185. package/skills/ae-engage/references/save-task.md +231 -58
  186. package/skills/ae-engage/references/scene-config-metric.md +3 -0
  187. package/skills/ae-engage/references/scene-preset-metric.md +8 -37
  188. package/skills/ae-engage/references/scene-strategy-audience.md +56 -643
  189. package/skills/ae-engage/references/scene-strategy.md +6 -6
  190. package/skills/ae-engage/references/task-detail.md +10 -0
  191. package/skills/ae-engage/references/task-submit-approval.md +45 -0
  192. package/skills/ae-engage/references/validate-flow-node-config.md +1 -1
  193. package/skills/ae-experiment/SKILL.md +38 -5
  194. package/skills/ae-experiment/references/check_experiment_ready.md +2 -0
  195. package/skills/ae-experiment/references/delete_metric.md +2 -0
  196. package/skills/ae-experiment/references/query_experiment_detail.md +6 -0
  197. package/skills/ae-experiment/references/query_experiment_list.md +4 -0
  198. package/skills/ae-experiment/references/query_experiment_list_archived.md +3 -0
  199. package/skills/ae-experiment/references/query_experiment_metric_trend.md +5 -5
  200. package/skills/ae-experiment/references/query_experiment_report_summary.md +4 -3
  201. package/skills/ae-experiment/references/query_experiment_sample_size_report.md +6 -5
  202. package/skills/ae-experiment/references/query_metric_detail.md +5 -0
  203. package/skills/ae-experiment/references/query_metric_list.md +3 -0
  204. package/skills/ae-experiment/references/save_build_guide.md +39 -0
  205. package/skills/ae-experiment/references/save_experiment.md +53 -3
  206. package/skills/ae-experiment/references/save_metric.md +67 -1
  207. package/skills/ae-experiment/references/save_submit_experiment.md +3 -0
  208. package/skills/ae-experiment/references/save_validate.md +33 -0
  209. package/skills/ae-experiment-design/SKILL.md +149 -0
  210. package/skills/ae-experiment-design/agents/openai.yaml +4 -0
  211. package/skills/ae-experiment-design/references/client-experiment-sdk.md +147 -0
  212. package/skills/ae-experiment-design/references/experiment-creation.md +108 -0
  213. package/skills/ae-experiment-design/references/experiment-sdk-contract.md +100 -0
  214. package/skills/ae-experiment-design/references/exposure-contract.md +91 -0
  215. package/skills/ae-experiment-design/references/hybrid-experiment-sdk.md +74 -0
  216. package/skills/ae-experiment-design/references/metric-readiness.md +143 -0
  217. package/skills/ae-experiment-design/references/platform-operations.md +105 -0
  218. package/skills/ae-experiment-design/references/sdk-index.md +76 -0
  219. package/skills/ae-experiment-design/references/sdk-integration.md +114 -0
  220. package/skills/ae-experiment-design/references/sdk-troubleshooting.md +139 -0
  221. package/skills/ae-experiment-design/references/server-experiment-sdk.md +78 -0
  222. package/skills/ae-experiment-design/scripts/calculate_experiment_plan.py +450 -0
  223. package/skills/ae-experiment-insight/SKILL.md +149 -0
  224. package/skills/ae-experiment-insight/agents/openai.yaml +4 -0
  225. package/skills/ae-experiment-insight/references/decision-framework.md +69 -0
  226. package/skills/ae-experiment-insight/references/diagnostic-playbook.md +225 -0
  227. package/skills/ae-experiment-insight/references/platform-operations.md +82 -0
  228. package/skills/ae-experiment-insight/scripts/analyze_experiment.py +478 -0
  229. package/skills/ae-generate-tracking-code/SKILL.md +2 -2
  230. package/skills/ae-metadata/SKILL.md +1 -1
  231. package/dist/config-BSSALXEN.js +0 -128
  232. package/dist/sync-QFP4XFN3.js +0 -485
@@ -0,0 +1,143 @@
1
+ # Metric Readiness
2
+
3
+ Use this checklist to decide whether a candidate metric can support an experiment decision.
4
+
5
+ ## Contents
6
+
7
+ - Supported experiment metric contract
8
+ - Preregistered planning policy
9
+ - Evidence levels
10
+ - Feasibility gates
11
+ - Role selection
12
+ - Common blockers
13
+ - Required output
14
+
15
+ ## Supported experiment metric contract
16
+
17
+ Use event metrics only. A platform enum or API field is not evidence that
18
+ another metric kind is implemented in the report calculation path.
19
+
20
+ Use only these event calculation codes:
21
+
22
+ | Code | Calculation | User-level value | Planning type |
23
+ | --- | --- | --- | --- |
24
+ | `A101` | Triggered users | Whether each user triggered the event; compare group trigger rates | `proportion` |
25
+ | `A100` | Total times | Each user's total event count; compare group user-level means | `continuous` |
26
+ | `A201` | Days | Each user's distinct active-event days; compare group user-level means | `continuous` |
27
+ | `A103` | Sum | Each user's sum of a numeric event property; compare group user-level means | `continuous` |
28
+ | `A104` | Average | Each user's average numeric event-property value; compare group user-level means | `continuous` |
29
+ | `A106` | Maximum | Each user's maximum numeric event-property value; compare group user-level means | `continuous` |
30
+ | `A108` | Distinct count | Each user's distinct count of one event property; compare group user-level means | `continuous` |
31
+
32
+ Require a numeric event property for `A103`, `A104`, and `A106`, and an exact
33
+ event property for `A108`.
34
+
35
+ The current report calculation uses a two-sided Z test for both planning
36
+ types, returns p-value, lift, and a 95% confidence interval, and uses
37
+ `p < 0.05` plus confidence-interval direction and goal direction to label a
38
+ positive or negative significant result.
39
+
40
+ ## Preregistered planning policy
41
+
42
+ Fix the family-wise significance level at `alpha=0.05`, the confidence level
43
+ at `0.95`, and the test direction at two-sided to match current reporting.
44
+ Use `power=0.80` as the explicit planning-policy default when the user does not
45
+ provide power, and label its source as `policy_default`.
46
+
47
+ Require the MDE before definitive planning. Record whether it is `relative` or
48
+ `absolute` and whether the desired effect is an `increase` or `decrease`; never
49
+ silently substitute a 5% lift. Require observed user-level standard deviation
50
+ for continuous metrics; never substitute an assumed coefficient of variation.
51
+
52
+ For one control and multiple treatments, treat each treatment-versus-control
53
+ comparison as one member of the same family. Use Bonferroni planning:
54
+ `alpha_per_comparison = 0.05 / number_of_treatments`. Return the family alpha,
55
+ adjusted alpha, method, and comparison count. The current native report still
56
+ labels significance with unadjusted `p < 0.05` and a 95% confidence interval,
57
+ so use raw p-values against the preregistered adjusted threshold for the final
58
+ decision and disclose that native-label mismatch.
59
+
60
+ Use a minimum runtime of seven days and align recommendations to full weeks by
61
+ default; permit explicit overrides when the decision context justifies them.
62
+ When traffic is not fixed, evaluate absolute experiment-traffic candidates no
63
+ greater than the verified layer capacity and choose the smallest candidate
64
+ that reaches the sample target within the maximum runtime. If none is feasible,
65
+ return the true duration at maximum available traffic and mark it infeasible;
66
+ never truncate the duration to the maximum.
67
+
68
+ Do not add ad hoc missing-value imputation, winsorization, truncation, or
69
+ post-treatment exclusions. Use the exact platform metric definition and
70
+ preregister any supported filtering or data-quality rule before the run.
71
+
72
+ Call `calculate_experiment_plan.py` with `metric_type`, `baseline`, `mde`,
73
+ `mde_type`, `effect_direction`, `allocations`, and `daily_eligible_units`.
74
+ Pass `standard_deviation` for a continuous metric. Pass `experiment_traffic`
75
+ when traffic is confirmed; otherwise pass `max_available_traffic` and
76
+ optionally `traffic_candidates` to request a recommendation. `power`,
77
+ `min_runtime_days`, `max_runtime_days`, and `align_to_full_weeks` may override
78
+ their policy defaults. Do not pass `confidence_level` other than `0.95`.
79
+
80
+ Do not create or recommend a metric outside this contract. If the requested
81
+ business outcome cannot be expressed by one supported event calculation,
82
+ state that it is unavailable and propose the closest valid event metric
83
+ without representing it as equivalent.
84
+
85
+ ## Evidence levels
86
+
87
+ Label every statement:
88
+
89
+ - `verified`: supported by current `ae-cli` platform output;
90
+ - `provided`: supplied by the user but not verified on the platform;
91
+ - `assumed`: introduced for design or sensitivity analysis;
92
+ - `missing`: required evidence is unavailable.
93
+
94
+ Only `verified` or explicitly accepted `provided` evidence can support a final readiness decision.
95
+
96
+ ## Feasibility gates
97
+
98
+ A metric is feasible only when all applicable gates pass:
99
+
100
+ 1. **Contract**: event, supported calculation code, required property, goal
101
+ direction, filters, and attribution window are explicit.
102
+ 2. **Source**: required events and properties exist or are supplied as a concrete schema.
103
+ 3. **Identity**: assignment, exposure, and outcome share a stable join path.
104
+ 4. **Ordering**: outcome is attributed after exposure or treatment activation.
105
+ 5. **Population**: pre-treatment eligibility and exclusions are reproducible.
106
+ 6. **Planning evidence**: baseline, MDE and its type and direction, eligible
107
+ daily units, verified layer capacity when recommending traffic, and—except
108
+ for `A101`—user-level standard deviation are available before a definitive
109
+ sample or duration calculation.
110
+ 7. **Stability**: collection and definition are not expected to change during the experiment.
111
+ 8. **Sensitivity**: the metric can plausibly respond to the treatment.
112
+
113
+ Block or mark unverified when any required gate lacks evidence.
114
+
115
+ ## Role selection
116
+
117
+ ### Primary
118
+
119
+ Choose one supported event metric closest to the hypothesis and decision.
120
+ Confirm its calculation code and direction, then establish its baseline and
121
+ minimum business-relevant effect. Do not calculate a definitive duration
122
+ before the metric contract is confirmed.
123
+
124
+ ## Common blockers
125
+
126
+ - missing exposure event or treatment-activation marker;
127
+ - assignment uses `user_id` while outcomes only have `device_id`;
128
+ - anonymous-to-login identity cannot be reconciled;
129
+ - cross-device identity is unstable;
130
+ - outcome precedes exposure;
131
+ - denominator is filtered by post-treatment behavior;
132
+ - event volume is too low;
133
+ - metric definition or instrumentation changed during the run;
134
+ - cross-platform events use incompatible identities or semantics.
135
+
136
+ ## Required output
137
+
138
+ For each candidate, return:
139
+
140
+ | Metric | Status | Event | Calculation | Property | Direction | Join identity | Window | Evidence | Reason or remediation |
141
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
142
+
143
+ When blocked, give the smallest concrete instrumentation or identity change that would make the metric measurable.
@@ -0,0 +1,105 @@
1
+ # Platform Operations
2
+
3
+ Read this reference before any AE/TE platform interaction.
4
+
5
+ ## Hard boundary
6
+
7
+ All platform operations must use `ae-cli`. Do not call raw APIs, use browser automation, query a database, invoke te-mcp, or fabricate a platform result.
8
+
9
+ Use curated commands when their contract is known. Use the Capability Gateway for experiment capabilities that do not yet have a curated command:
10
+
11
+ ```bash
12
+ ae-cli capability search "<terms>" --domain <domain> [--project-id <id>]
13
+ ae-cli capability inspect <capability-id> --project-id <id>
14
+ ae-cli capability validate <capability-id> --input '<json-object>'
15
+ ae-cli capability dry-run <capability-id> --input '<json-object>'
16
+ ae-cli capability run <capability-id> --input '<json-object>'
17
+ ```
18
+
19
+ Search and inspect before constructing input. Never guess capability IDs, fields, enums, resource IDs, or project IDs. Search with the narrowest useful terms, then inspect every plausible candidate.
20
+
21
+ Use at most one normal pre-check:
22
+
23
+ - use `validate` while correcting a complex nested payload;
24
+ - use `dry-run` for the final request when execution impact or deletion risk must be reviewed;
25
+ - do not routinely stack `validate`, `dry-run`, and `run`.
26
+
27
+ ## Host compatibility
28
+
29
+ After every `ae-cli` invocation, inspect stderr and `_notice.host_compat`. If a notice exists, start the user-facing result with a version warning and reproduce its update command lines verbatim. A successful envelope does not cancel the notice.
30
+
31
+ ## Project gate
32
+
33
+ When the user supplies a project ID, resolve it directly:
34
+
35
+ ```bash
36
+ ae-cli project info get --project-id <id>
37
+ ```
38
+
39
+ When the user supplies only a project name, search and disambiguate:
40
+
41
+ ```bash
42
+ ae-cli project info list --query "<project name>" --fields '["project_id","project_name"]' --limit 20 --offset 0
43
+ ```
44
+
45
+ Reuse a project only when its ID and host were verified in the same continuous conversation. If multiple projects match, stop and ask the user to choose.
46
+
47
+ ## Metadata and metric evidence
48
+
49
+ Use these curated reads when applicable:
50
+
51
+ ```bash
52
+ ae-cli analysis-meta event list --project-id <id> --query "<event>" --fields '["event_name","event_desc","authentication_status"]' --limit 20 --offset 0
53
+ ae-cli analysis-meta property list --project-id <id> --scope event --event-name "<event>" --limit 50 --offset 0
54
+ ae-cli analysis-meta property list --project-id <id> --scope user --limit 50 --offset 0
55
+ ae-cli analysis-meta metric list --project-id <id> --query "<metric>" --fields '["metric_id","metric_name","metric_desc","authentication_status"]' --limit 20 --offset 0
56
+ ```
57
+
58
+ Use `ae-cli analysis-meta metric get` after list/search when the exact metric definition is required. Use `ae-cli analysis adhoc run|export` for historical baseline and eligible-traffic evidence, following the installed `ae-analysis` command reference. Do not infer a baseline from a metric definition.
59
+
60
+ For metric creation, use the curated `ae-cli analysis-meta metric create`
61
+ command only after the supported event-metric definition and calculation code
62
+ are exact. Use `--validate` while fixing complex metric input. Do not create a
63
+ metric from a prose-only definition.
64
+
65
+ ## Experiment capability discovery
66
+
67
+ Discover, inspect, and select capabilities for the semantic operation. Typical search concepts include:
68
+
69
+ - experiment list, get, draft save, readiness, conflict, submit, start, pause, end, delete;
70
+ - Feature list, get, create, update;
71
+ - layer or bucket list and available traffic;
72
+ - experiment metric report, summary, trend, sample, group, or exposure.
73
+
74
+ Catalog wording and capability IDs may differ by deployment. The inspected `input_schema`, `risk`, auth requirements, output contract, and supported dry-run behavior are authoritative.
75
+
76
+ If search returns no supported capability, report `capability gap` and continue with an offline design. Do not convert an intended platform write into raw HTTP.
77
+
78
+ ## Experiment detail link
79
+
80
+ After a successful experiment save or verified exact-match reuse:
81
+
82
+ 1. Read the actual `expId` from the successful `ae-cli` result; do not use a proposed input ID unless the inspected output contract confirms that the save preserved it.
83
+ 2. Prefer a canonical detail link returned by the inspected capability output contract.
84
+ 3. When the result contains the actual `expId` but no link, use the verified relative frontend route:
85
+
86
+ ```text
87
+ /#/atlas/experiment/detail?expId=<actual-expId>&currentProjectId=<actual-projectId>
88
+ ```
89
+
90
+ The user-facing response must render this as a Markdown link with a localized label. Do not put it in a code block, output it as bare text, add a `{domain}` placeholder, or construct it when either verified ID is missing.
91
+
92
+ ## Risk and lifecycle policy
93
+
94
+ - `read`: execute after project and target resolution.
95
+ - `write`: execute when it is directly requested and inputs are exact.
96
+ - `high-risk-write`: dry-run the final input, summarize target and impact, wait for a later explicit confirmation, then execute unchanged input with `--yes`.
97
+
98
+ Regardless of catalog risk, require a separate explicit confirmation before submitting, starting, changing live traffic, pausing, ending, or deleting an experiment. A request to design or create a draft is not authorization to launch.
99
+
100
+ ## Envelope handling
101
+
102
+ - `ok: true` with empty data is a successful empty result.
103
+ - `ok: true` with `meta.partial: true` is partial success; preserve `meta.failures`.
104
+ - `ok: false` is failure; preserve error code, message, request ID, invocation ID, stage, and failures.
105
+ - Do not retry an unchanged failed request.
@@ -0,0 +1,76 @@
1
+ # Experiment SDK Documentation Index
2
+
3
+ Read this reference before giving exact experiment-SDK versions, dependencies, packages, imports, or API calls.
4
+
5
+ ## Source policy
6
+
7
+ - Bundled references contain a concise extract for common questions.
8
+ - The local official Wiki is preferred for exact version-specific APIs when it contains the relevant main page.
9
+ - If the Wiki mirror is missing an experiment page, use the verified official source below and label the local mirror gap.
10
+ - Recheck document version and update date before generating production code.
11
+ - Do not use a page merely because a link label says it is an SDK page; verify its title and content.
12
+
13
+ ## Experiment SDK matrix
14
+
15
+ Verified from the official Feishu pages on 2026-07-26:
16
+
17
+ | Platform | Experiment SDK | Analytics dependency | Remote Config dependency | Main source |
18
+ |---|---:|---:|---:|---|
19
+ | Android | `TDExperiment` 1.0.1 | `TDAnalytics` >= 3.3.6 | `TDRemoteConfig` >= 1.3.0 | `CQ83wzJjui88V1keGtNcKLxgnXb` |
20
+ | iOS | `TDExperiment` 1.0.2 | `ThinkingSDK` >= 3.1.6 | `TDRemoteConfig` >= 1.3.1 | `RlYIwkcvXizJeFkhp2acbWGwnFf` |
21
+ | JavaScript | experiment package 1.0.0 | `TDAnalytics` >= 2.6.0 | `TDRemoteconfig` >= 1.3.0 | `GlR8w2bFbiJKqUka03pcJEdnndf` |
22
+
23
+ Official source pages:
24
+
25
+ - Client SDK overview: `https://thinkingdata.feishu.cn/wiki/MCy3w6eKjihQsmkZWSQcNlrQnie`
26
+ - Android experiment SDK: `https://thinkingdata.feishu.cn/wiki/CQ83wzJjui88V1keGtNcKLxgnXb`
27
+ - iOS experiment SDK: `https://thinkingdata.feishu.cn/wiki/RlYIwkcvXizJeFkhp2acbWGwnFf`
28
+ - JavaScript experiment SDK: `https://thinkingdata.feishu.cn/wiki/GlR8w2bFbiJKqUka03pcJEdnndf`
29
+
30
+ ## Remote Config dependency matrix
31
+
32
+ | Platform | Remote Config version | Minimum OS | Main source |
33
+ |---|---:|---:|---|
34
+ | Android | 1.3.0 | Android 4.0 / API 14 | `Lsdmwhhigi9Z3AkKs2fc9tw3nEd` |
35
+ | iOS | 1.3.1 | iOS 9.0 | `K85DwZetDidpMPkGHWhccKQGnUf` |
36
+ | JavaScript | 1.3.0 | Not stated in the verified page | `Yg3uw8RDii2WEskhz2Qc4zOanwg` |
37
+
38
+ Official source pages:
39
+
40
+ - Android Remote Config: `https://thinkingdata.feishu.cn/wiki/Lsdmwhhigi9Z3AkKs2fc9tw3nEd`
41
+ - iOS Remote Config: `https://thinkingdata.feishu.cn/wiki/K85DwZetDidpMPkGHWhccKQGnUf`
42
+ - JavaScript Remote Config: `https://thinkingdata.feishu.cn/wiki/Yg3uw8RDii2WEskhz2Qc4zOanwg`
43
+
44
+ ## Local Wiki discovery
45
+
46
+ The runtime mirror is expected under:
47
+
48
+ ```text
49
+ ~/.ae-cli/wiki/te-docs/
50
+ ├── index.md
51
+ ├── synthesis/
52
+ └── raw/
53
+ ```
54
+
55
+ Before reading a local experiment page:
56
+
57
+ 1. Check whether `index.md` exists.
58
+ 2. Search the index and `raw/` for `experiment`, `TDExperiment`, `remote config`, `配置中心`, and `实验`.
59
+ 3. Choose the latest main page, not a historical/versioned copy.
60
+ 4. Read synthesis for orientation and raw for exact API details.
61
+
62
+ At the verification date, the local mirror used to build this reference did not contain experiment or Remote Config pages. Do not assume this remains true after a Wiki refresh.
63
+
64
+ ## Known source conflict
65
+
66
+ The client SDK overview page labels `AvX7wAp0zix522kSy9BcBziMnJd` as the JavaScript Remote Config document, but that token currently resolves to a Data Platform Release Note. The JavaScript experiment page links to `Yg3uw8RDii2WEskhz2Qc4zOanwg`, which resolves to the verified JavaScript Remote Config 1.3.0 document.
67
+
68
+ Use `Yg3uw8RDii2WEskhz2Qc4zOanwg` until the overview page is corrected. If either page changes, verify the title, SDK version, and API content again.
69
+
70
+ ## JavaScript spelling warning
71
+
72
+ The verified JavaScript experiment page spells the global object `TDExpriment`. This may be an SDK export name or a documentation typo. Copy it only after checking the downloaded package or a newer verified main document. Do not silently “correct” it to `TDExperiment`, and do not ship the documented spelling without verification.
73
+
74
+ ## Unsupported exact-code cases
75
+
76
+ The supplied official pages do not establish an exact server-side experiment SDK or server evaluation API. For server or hybrid implementation, follow the architecture references and use pseudocode until `ae-cli` or verified server documentation resolves a concrete API.
@@ -0,0 +1,114 @@
1
+ # Experiment SDK Knowledge and Execution Router
2
+
3
+ Read this reference only when the user explicitly asks about an A/B experiment SDK, client experiment SDK integration, experiment SDK code, or SDK troubleshooting.
4
+
5
+ Do not read or apply this reference for a normal experiment-design, Feature-design, sample-size, readiness, or draft-creation request. An experiment requiring a product change does not by itself authorize or trigger SDK work.
6
+
7
+ Examples that activate this reference:
8
+
9
+ - “How do I integrate the Android experiment SDK?”
10
+ - “Generate the client SDK code for this experiment.”
11
+ - “Why does the experiment SDK always return the default?”
12
+
13
+ Examples that do not activate it:
14
+
15
+ - “Create an experiment for a blue versus green button.”
16
+ - “Design the groups and traffic for this Feature.”
17
+ - “Create an experiment draft.”
18
+
19
+ ## Four-layer architecture
20
+
21
+ Use the following layers for different jobs:
22
+
23
+ 1. **Skill workflow** — `SKILL.md` enforces the explicit SDK activation gate; this reference classifies the request as knowledge, client integration, project-bound generation, or generic data integration.
24
+ 2. **Bundled references** — concise experiment contracts, platform notes, and troubleshooting answers. Read only the files required by the request.
25
+ 3. **Local official Wiki** — use the synced official documentation for exact packages, imports, signatures, and version-specific behavior that is not covered by references.
26
+ 4. **Dedicated generation capability** — use an inspected `ae-cli` capability to combine a real project, Feature, experiment, and SDK type into project-bound code.
27
+
28
+ References supply knowledge. A generation capability supplies project context and execution. Do not substitute one for the other.
29
+
30
+ ## Request decision
31
+
32
+ | User intent | Route |
33
+ |---|---|
34
+ | “How does automatic exposure work?” | `experiment-sdk-contract.md` + `exposure-contract.md` |
35
+ | “How do I initialize Android/iOS/JS experiment SDK?” | `sdk-index.md` + `client-experiment-sdk.md`; consult the local Wiki main page when exact code is required |
36
+ | “Should assignment happen on client or server?” | `experiment-sdk-contract.md` + the matching client/server/hybrid reference |
37
+ | “Why do I always get the default?” | `sdk-troubleshooting.md`, then the verified platform main document |
38
+ | “Generate code for this project/experiment” | `platform-operations.md` + this reference; resolve real assets and use a dedicated inspected capability |
39
+ | “How do I call track/user_set or configure LogBus?” | Route to `ae-data-integration-helper` |
40
+
41
+ ## Documentation source order
42
+
43
+ For SDK knowledge, search in this order:
44
+
45
+ 1. Read the matching bundled reference.
46
+ 2. If `~/.ae-cli/wiki/te-docs/index.md` exists, inspect it and the most relevant document under `synthesis/`.
47
+ 3. Read the latest main document under `~/.ae-cli/wiki/te-docs/raw/`; ignore historical or versioned pages unless the user explicitly targets that version.
48
+ 4. If the local mirror is absent or incomplete, use the verified official online document listed in `sdk-index.md`.
49
+
50
+ You may also use:
51
+
52
+ ```bash
53
+ ae-cli tracking wiki search "experiment SDK"
54
+ ae-cli tracking wiki search "remote config"
55
+ ```
56
+
57
+ Treat an empty search as a documentation gap, not proof that the product has no capability.
58
+
59
+ Do not hardcode a guessed Wiki path. Verify that an indexed local path exists before reading it. If the local page and bundled reference disagree, prefer the newer verified main document and disclose the conflict.
60
+
61
+ ## Exact-code gate
62
+
63
+ Emit exact imports, packages, classes, methods, configuration keys, defaults, and version requirements only when all of the following are known:
64
+
65
+ - SDK platform and language;
66
+ - exact or compatible SDK version;
67
+ - verified main documentation;
68
+ - client, server, or hybrid ownership;
69
+ - assignment identity and Feature value type.
70
+
71
+ Otherwise provide architecture-level pseudocode and a verification checklist.
72
+
73
+ Application SDKs consume published configuration and report exposure or outcome events. They must not read or mutate AE platform configuration.
74
+
75
+ ## Project-bound generation
76
+
77
+ For a request tied to a real project:
78
+
79
+ 1. Resolve the project through `ae-cli`.
80
+ 2. Resolve the exact experiment and Feature; do not accept a name-only guess.
81
+ 3. Confirm target platforms and versions.
82
+ 4. Search the Capability Gateway for experiment SDK sample generation.
83
+ 5. Inspect every plausible capability and its input schema.
84
+ 6. Validate or dry-run once when needed, then run the selected capability.
85
+ 7. Return only artifacts and metadata present in the successful response.
86
+
87
+ Do not assume a proposed name such as `generate_experiment_sdk_sample` exists. If no dedicated capability is available, say so and provide a project-independent template with placeholders; do not call it generated project code.
88
+
89
+ ## Required integration contract
90
+
91
+ Every SDK deliverable must define:
92
+
93
+ - architecture: client, server, or hybrid;
94
+ - initialization and dependency order;
95
+ - assignment identity and identity transitions;
96
+ - Feature key, value type, and typed default;
97
+ - fetch, cache, timeout, stale-value, and retry behavior;
98
+ - point where the assigned behavior becomes effective;
99
+ - automatic or manual exposure ownership;
100
+ - outcome event and identity join;
101
+ - debug/test procedure;
102
+ - acceptance checks.
103
+
104
+ Configuration retrieval is not exposure. Do not record exposure when the assigned behavior was never applied.
105
+
106
+ ## Generic integration boundary
107
+
108
+ Do not duplicate generic SDK ingestion material here. When `ae-data-integration-helper` is bound, use it for:
109
+
110
+ - analytics SDK initialization unrelated to experiment ordering;
111
+ - `track`, user properties, identity APIs, and data validation;
112
+ - upload failures, LogBus, REST, and collection logs.
113
+
114
+ If it is not bound, answer the experiment-specific portion and state that the generic integration dependency is unavailable.
@@ -0,0 +1,139 @@
1
+ # Experiment SDK Troubleshooting
2
+
3
+ Read this reference for retrieval, default, assignment, exposure, cache, or debug problems. Resolve the exact project and Feature through `ae-cli` when the diagnosis depends on platform state.
4
+
5
+ ## Collect first
6
+
7
+ Ask only for missing facts:
8
+
9
+ - platform and SDK versions;
10
+ - app ID and environment, without requesting secrets;
11
+ - Feature key and expected type;
12
+ - assignment identity before and after login;
13
+ - automatic or manual exposure mode;
14
+ - fetch callback or full error;
15
+ - whether the value was fetched, applied, and exposed;
16
+ - whether the issue affects all users, one test user, or one group.
17
+
18
+ ## Symptom routing
19
+
20
+ ### Always receives the default
21
+
22
+ Check in order:
23
+
24
+ 1. analytics initialized before experiment SDK;
25
+ 2. experiment, analytics, and Remote Config versions meet `sdk-index.md`;
26
+ 3. app ID and server environment match the target experiment;
27
+ 4. startup or explicit fetch succeeded;
28
+ 5. Feature key and getter type match the platform Feature;
29
+ 6. assignment identity is established before evaluation;
30
+ 7. targeting and experiment traffic include the test identity;
31
+ 8. custom bucket and custom fetch parameters match the verified contract;
32
+ 9. cached or local default is not masking a remote miss.
33
+
34
+ Do not treat a successful SDK initialization as proof that a Feature value was fetched.
35
+
36
+ ### Value changes unexpectedly
37
+
38
+ Check:
39
+
40
+ - identity transition after login;
41
+ - account or role switching;
42
+ - mid-session fetch;
43
+ - cache isolation by identity and environment;
44
+ - platform configuration changes;
45
+ - client and server evaluating independently;
46
+ - stale value replacement policy.
47
+
48
+ Freeze the value at the intended decision boundary when mid-session changes are not part of the product design.
49
+
50
+ ### No exposure
51
+
52
+ Check:
53
+
54
+ - `automaticExposureTracking` is enabled when automatic mode is intended;
55
+ - the typed getter was actually called;
56
+ - the assigned behavior was applied;
57
+ - manual mode calls the platform’s verified exposure operation at activation;
58
+ - analytics upload and identity are healthy through `ae-data-integration-helper`;
59
+ - the exposure/report window has completed.
60
+
61
+ ### Duplicate exposure
62
+
63
+ Check:
64
+
65
+ - automatic and manual modes are not both active;
66
+ - render loops or repeated getters;
67
+ - retries without an application deduplication scope;
68
+ - client and server both reporting;
69
+ - route changes or component remounts;
70
+ - account switching.
71
+
72
+ ### Wrong group or cross-platform mismatch
73
+
74
+ Check:
75
+
76
+ - custom bucket ID values on every platform;
77
+ - pre-login and post-login identifiers;
78
+ - string normalization and missing values;
79
+ - project and environment;
80
+ - client/server cache keys;
81
+ - experiment traffic and targeting;
82
+ - whether one side falls back to control while the other evaluates treatment.
83
+
84
+ ## Fetch and callback checks
85
+
86
+ Verified client pages provide:
87
+
88
+ - startup fetch success/failure callbacks;
89
+ - explicit `fetch`;
90
+ - custom fetch parameters;
91
+ - experiment logging.
92
+
93
+ Capture the exact callback code and message. Do not retry an unchanged invalid request. Separate transport failure, configuration absence, targeting exclusion, type mismatch, and control assignment.
94
+
95
+ ## Defaults and Remote Config
96
+
97
+ Verified Remote Config pages define:
98
+
99
+ 1. remote value;
100
+ 2. local default;
101
+ 3. empty when neither exists.
102
+
103
+ For experiment behavior, also keep an application-owned typed control default. Confirm which layer produced the observed value.
104
+
105
+ ## Debug and test mode
106
+
107
+ The verified Remote Config pages state that client debug mode pulls test strategies every five seconds and requires a selected or added test device. This is a test-mode Remote Config behavior, not a production experiment polling guarantee.
108
+
109
+ Platform notes:
110
+
111
+ - Android Remote Config uses debug mode in `TDSettings`.
112
+ - iOS Remote Config uses `TDSDKModeDebug` and can enable logs.
113
+ - JavaScript Remote Config uses `mode: "debug"` and `enableLog`.
114
+ - Experiment SDK pages expose experiment logging separately.
115
+
116
+ Disable or production-harden debug behavior before release.
117
+
118
+ ## Generic SDK problems
119
+
120
+ Route these to `ae-data-integration-helper` when available:
121
+
122
+ - analytics event upload failure;
123
+ - user identity API usage;
124
+ - `track` or user-property syntax;
125
+ - data delay and ingestion validation;
126
+ - LogBus, REST, or collection logs.
127
+
128
+ Keep the experiment diagnosis focused on assignment, Feature retrieval, defaults, activation, and exposure.
129
+
130
+ ## Diagnostic output
131
+
132
+ Return:
133
+
134
+ - observed evidence;
135
+ - likely stage of failure;
136
+ - competing explanation;
137
+ - exact next `ae-cli` or product check;
138
+ - remediation if confirmed;
139
+ - unresolved documentation or capability gap.
@@ -0,0 +1,78 @@
1
+ # Server Experiment Architecture
2
+
3
+ Read this reference when assignment, Feature evaluation, or behavior execution belongs on a backend service.
4
+
5
+ ## Evidence boundary
6
+
7
+ The verified client documentation does not establish an exact AE server experiment SDK, package, endpoint, or method. Do not invent one.
8
+
9
+ Before exact implementation:
10
+
11
+ 1. Resolve the real project, experiment, Feature, and assignment unit with `ae-cli`.
12
+ 2. Search and inspect the Capability Gateway for server experiment evaluation or SDK generation.
13
+ 3. Read verified server documentation if returned by the platform or provided by the user.
14
+ 4. Use architecture-level pseudocode until the API contract is verified.
15
+
16
+ ## Recommended server contract
17
+
18
+ ```text
19
+ evaluateExperiment(
20
+ project,
21
+ featureKey,
22
+ stableAssignmentId,
23
+ context
24
+ ) -> {
25
+ value,
26
+ valueType,
27
+ assignmentOrGroupId,
28
+ configVersion,
29
+ source,
30
+ evaluatedAt
31
+ }
32
+ ```
33
+
34
+ The field names above describe an application contract, not a verified AE API schema.
35
+
36
+ ## Server responsibilities
37
+
38
+ - derive a stable assignment ID before evaluation;
39
+ - evaluate once per request, session, or product-defined decision boundary;
40
+ - apply a typed control default on timeout or unavailable configuration;
41
+ - preserve assignment consistency across replicas and regions;
42
+ - prevent cache keys from mixing projects, environments, Features, or identities;
43
+ - expose enough internal metadata to diagnose assignment without leaking it to end users;
44
+ - emit or authorize exposure only when treatment becomes effective;
45
+ - report outcomes with a joinable identity.
46
+
47
+ ## Cache policy
48
+
49
+ Define separately:
50
+
51
+ - configuration cache;
52
+ - per-identity assignment cache;
53
+ - response or page cache.
54
+
55
+ Do not cache a personalized treatment under a shared response key. Include environment, project, Feature key, and assignment identity in any evaluation cache key unless the verified SDK guarantees safe internal caching.
56
+
57
+ ## Failure policy
58
+
59
+ - timeout or transport failure: use typed control default;
60
+ - invalid value type: reject the value and use control;
61
+ - unknown Feature: fail closed to control and alert;
62
+ - stale configuration: use only within the approved stale window;
63
+ - identity missing: either use a documented anonymous assignment or control; never generate a new unstable ID per request.
64
+
65
+ ## Exposure ownership
66
+
67
+ If the server fully executes the behavior, server exposure may be appropriate. If the server only sends a variant and the client decides whether it is rendered, client exposure is usually the truthful point.
68
+
69
+ Choose one owner and read `exposure-contract.md`.
70
+
71
+ ## Verification checklist
72
+
73
+ - Same identity returns a stable value across replicas.
74
+ - Control fallback is safe and typed.
75
+ - Cache isolation prevents cross-user treatment leakage.
76
+ - Exposure reflects effective behavior, not evaluation alone.
77
+ - Client and server do not both report the same exposure.
78
+ - Outcome identity joins to assignment and exposure.