@1aboveio/skills 1.0.10 → 1.0.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 (214) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/.codex-plugin/resources.json +298 -216
  3. package/README.md +3 -3
  4. package/package.json +10 -8
  5. package/skills/app-dev/airflow/SKILL.md +1 -1
  6. package/skills/app-dev/android-foundation/SKILL.md +35 -37
  7. package/skills/app-dev/android-foundation/references/delivery-focus.md +4 -2
  8. package/skills/app-dev/android-foundation/references/feature-work.md +50 -0
  9. package/skills/app-dev/android-foundation/references/setup.md +24 -9
  10. package/skills/app-dev/android-foundation/references/workspace.md +81 -0
  11. package/skills/app-dev/android-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
  12. package/skills/app-dev/android-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
  13. package/skills/app-dev/android-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
  14. package/skills/app-dev/app-debug/SKILL.md +1 -1
  15. package/skills/app-dev/better-auth/SKILL.md +1 -1
  16. package/skills/app-dev/data-catalog/SKILL.md +1 -1
  17. package/skills/app-dev/data-quality/SKILL.md +1 -1
  18. package/skills/app-dev/ios-foundation/SKILL.md +15 -10
  19. package/skills/app-dev/ios-foundation/references/setup.md +25 -9
  20. package/skills/app-dev/ios-foundation/references/workspace.md +82 -0
  21. package/skills/app-dev/ios-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
  22. package/skills/app-dev/ios-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
  23. package/skills/app-dev/ios-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
  24. package/skills/app-dev/monorepo/SKILL.md +1 -1
  25. package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
  26. package/skills/app-dev/prisma-setup/SKILL.md +1 -1
  27. package/skills/app-dev/pyspark/SKILL.md +1 -1
  28. package/skills/app-dev/python-backend/SKILL.md +1 -1
  29. package/skills/app-dev/shadcn/SKILL.md +1 -1
  30. package/skills/app-dev/zod-v4/SKILL.md +1 -1
  31. package/skills/cicd/cloud-build/SKILL.md +1 -1
  32. package/skills/cicd/cloud-debug/SKILL.md +1 -1
  33. package/skills/cicd/cloud-deploy/SKILL.md +1 -1
  34. package/skills/cicd/docker/SKILL.md +1 -1
  35. package/skills/cicd/github-actions/SKILL.md +1 -1
  36. package/skills/cicd/github-flow/SKILL.md +1 -1
  37. package/skills/cicd/google-cloud/SKILL.md +1 -1
  38. package/skills/cicd/mergify/SKILL.md +1 -1
  39. package/skills/cicd/podman/SKILL.md +1 -1
  40. package/skills/content/article-review/SKILL.md +1 -1
  41. package/skills/content/article-to-image/SKILL.md +1 -1
  42. package/skills/content/flowchart-svg/SKILL.md +1 -1
  43. package/skills/content/image-gen/SKILL.md +1 -1
  44. package/skills/content/mermaid/SKILL.md +1 -1
  45. package/skills/content/wechat-article-writer/SKILL.md +1 -1
  46. package/skills/content/wechat-publisher/SKILL.md +1 -1
  47. package/skills/content/wechat-search/SKILL.md +1 -1
  48. package/skills/content/xai-search/SKILL.md +1 -1
  49. package/skills/core/distill-writing/SKILL.md +3 -3
  50. package/skills/core/distill-writing/references/extraction.md +1 -1
  51. package/skills/core/doc-to-md/SKILL.md +1 -1
  52. package/skills/core/editorial-review/SKILL.md +82 -12
  53. package/skills/core/editorial-review/references/checklist.md +26 -1
  54. package/skills/core/house-style/SKILL.md +8 -3
  55. package/skills/core/house-style/references/analytical-reporting.md +123 -0
  56. package/skills/core/house-style/references/analytical-writing-patterns.md +79 -0
  57. package/skills/core/house-style/references/analytical-writing-research.md +129 -0
  58. package/skills/core/{write-doc → house-style}/references/bilingual.md +7 -5
  59. package/skills/core/house-style/references/definitions-and-metrics.md +86 -0
  60. package/skills/core/house-style/references/document-workflow.md +193 -0
  61. package/skills/core/house-style/references/initialization.md +66 -0
  62. package/skills/core/house-style/references/persistence.md +9 -4
  63. package/skills/core/house-style/references/rules.md +11 -4
  64. package/skills/core/house-style/scripts/init-guidance.mjs +213 -0
  65. package/skills/core/house-style/templates/analytical-report.md +54 -0
  66. package/skills/core/house-style/templates/gap-analysis.md +1 -1
  67. package/skills/core/plain-language/SKILL.md +2 -2
  68. package/skills/core/polish-cn/SKILL.md +9 -2
  69. package/skills/core/reg-parser/SKILL.md +3 -3
  70. package/skills/core/terminology/SKILL.md +8 -4
  71. package/skills/core/write-doc/SKILL.md +40 -151
  72. package/skills/core/write-report/SKILL.md +129 -0
  73. package/skills/core/{write-doc → write-report}/references/compliance-reports.md +4 -4
  74. package/skills/engineering/better-review/SKILL.md +37 -37
  75. package/skills/engineering/better-review/references/passes.md +35 -41
  76. package/skills/engineering/better-review/references/result.md +10 -9
  77. package/skills/engineering/e2e-test/SKILL.md +17 -17
  78. package/skills/engineering/e2e-test/references/authoring/playwright-config.md +11 -13
  79. package/skills/engineering/e2e-test/references/presentation-sweep.md +7 -7
  80. package/skills/engineering/e2e-test/references/reviewing.md +9 -11
  81. package/skills/engineering/e2e-test/references/route-manifest.md +1 -1
  82. package/skills/engineering/engineering/SKILL.md +201 -0
  83. package/skills/engineering/engineering/references/engineering-conventions.md +32 -0
  84. package/skills/engineering/engineering/references/feature-delivery.md +8 -0
  85. package/skills/engineering/engineering/references/init-scope.md +45 -0
  86. package/skills/engineering/engineering/references/scope-management.md +85 -0
  87. package/skills/engineering/engineering/scripts/init.mjs +160 -0
  88. package/skills/engineering/{contributing → engineering}/scripts/persist-conventions.mjs +1 -1
  89. package/skills/engineering/engineering-runtime/SKILL.md +1 -1
  90. package/skills/engineering/engineering-runtime/coherence/workflow.json +19 -19
  91. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
  92. package/skills/engineering/ensure-coverage/SKILL.md +22 -109
  93. package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +7 -5
  94. package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +4 -4
  95. package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +3 -3
  96. package/skills/engineering/ensure-coverage/references/depth/characterization.md +4 -65
  97. package/skills/engineering/ensure-coverage/references/depth/grading.md +5 -7
  98. package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +6 -12
  99. package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +1 -1
  100. package/skills/engineering/ensure-coverage/references/presentation/axis.md +6 -6
  101. package/skills/engineering/ensure-coverage/references/process/audit-mode.md +7 -23
  102. package/skills/engineering/ensure-coverage/references/process/output-template.md +18 -133
  103. package/skills/engineering/ensure-coverage/references/process/test-strategy.md +7 -12
  104. package/skills/engineering/ensure-coverage/scripts/README.md +12 -4
  105. package/skills/engineering/golden-path/SKILL.md +1 -1
  106. package/skills/engineering/harness-runtime/SKILL.md +3 -1
  107. package/skills/engineering/harness-runtime/bin/workspaces.mjs +52 -0
  108. package/skills/engineering/harness-runtime/native-workspace.mjs +239 -0
  109. package/skills/engineering/harness-runtime/references/workspaces.md +78 -0
  110. package/skills/engineering/harness-runtime/workspace-lifecycle.mjs +2154 -0
  111. package/skills/engineering/resolve-issues/SKILL.md +40 -61
  112. package/skills/engineering/resolve-issues/references/ci.md +13 -3
  113. package/skills/engineering/resolve-issues/references/delivery-progress.md +4 -3
  114. package/skills/engineering/resolve-issues/references/done.md +11 -2
  115. package/skills/engineering/resolve-issues/references/expire.md +9 -2
  116. package/skills/engineering/resolve-issues/references/implementation.md +33 -17
  117. package/skills/engineering/resolve-issues/references/preflight.md +3 -1
  118. package/skills/engineering/resolve-issues/references/principles.md +52 -0
  119. package/skills/engineering/resolve-issues/references/review.md +25 -15
  120. package/skills/engineering/resolve-issues/references/task-plan.md +64 -27
  121. package/skills/engineering/resolve-issues/references/workspaces.md +164 -0
  122. package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +185 -317
  123. package/skills/engineering/resolve-issues/scripts/next-actions.mjs +44 -7
  124. package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +36 -2
  125. package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +9 -8
  126. package/skills/engineering/resolve-issues/scripts/workspace-lifecycle.mjs +1 -0
  127. package/skills/engineering/resolve-release/SKILL.md +1 -1
  128. package/skills/engineering/rush-issues/SKILL.md +7 -5
  129. package/skills/engineering/rush-release/SKILL.md +1 -1
  130. package/skills/engineering/test-quality/SKILL.md +19 -4
  131. package/skills/engineering/test-quality/references/lint.md +1 -1
  132. package/skills/engineering/test-quality/references/principles.md +2 -2
  133. package/skills/engineering/test-quality/references/testing-conventions.md +1 -1
  134. package/skills/risk-compliance/compliance-audit/SKILL.md +4 -8
  135. package/skills/risk-compliance/compliance-audit/references/audience-and-reports.md +12 -0
  136. package/skills/risk-compliance/contract-compare/SKILL.md +17 -1
  137. package/skills/risk-compliance/contract-review/SKILL.md +6 -1
  138. package/skills/risk-compliance/contract-review/references/report-stage.md +17 -0
  139. package/skills/risk-compliance/doc-authenticity/SKILL.md +11 -1
  140. package/skills/risk-compliance/fraud-detection/LICENSE +3 -0
  141. package/skills/risk-compliance/fraud-detection/SKILL.md +148 -0
  142. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/first-party-fraud.md +3 -2
  143. package/skills/risk-compliance/fraud-detection/references/archetypes/third-party-fraud.md +47 -0
  144. package/skills/risk-compliance/fraud-detection/references/collection-payout-features.md +151 -0
  145. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/contexts/bank-transfer.md +4 -3
  146. package/skills/risk-compliance/fraud-detection/references/contexts/card-payment.md +70 -0
  147. package/skills/risk-compliance/fraud-detection/references/contexts/payment-collection.md +34 -0
  148. package/skills/risk-compliance/fraud-detection/references/contexts/payout.md +34 -0
  149. package/skills/risk-compliance/fraud-detection/references/enrichment.md +74 -0
  150. package/skills/risk-compliance/fraud-detection/references/entities.md +48 -0
  151. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/feature-engineering.md +69 -33
  152. package/skills/risk-compliance/fraud-detection/references/feature-sql.md +150 -0
  153. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-rationale.md +4 -2
  154. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-template.md +45 -23
  155. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/review-checklist.md +60 -20
  156. package/skills/risk-compliance/fraud-detection/references/workflow.md +216 -0
  157. package/skills/risk-compliance/fraud-detection/release-check.mjs +95 -0
  158. package/skills/risk-compliance/payment-analysis/SKILL.md +36 -17
  159. package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +2 -2
  160. package/skills/risk-compliance/payment-analysis/references/report-template.md +10 -2
  161. package/skills/risk-compliance/payment-analysis/references/visualization.md +11 -1
  162. package/skills/risk-compliance/portfolio-payment-analysis/LICENSE +3 -0
  163. package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +170 -0
  164. package/skills/risk-compliance/portfolio-payment-analysis/references/identity-and-reconciliation.md +46 -0
  165. package/skills/risk-compliance/portfolio-payment-analysis/references/metrics-and-reporting.md +170 -0
  166. package/skills/risk-compliance/portfolio-payment-analysis/references/risk-history.md +89 -0
  167. package/skills/risk-compliance/portfolio-payment-analysis/release-check.mjs +95 -0
  168. package/skills/risk-compliance/portfolio-payment-analysis/scripts/analyze.py +636 -0
  169. package/skills/risk-compliance/portfolio-payment-analysis/scripts/build_report.py +386 -0
  170. package/skills/risk-compliance/portfolio-payment-analysis/scripts/comparison_charts.py +425 -0
  171. package/skills/risk-compliance/portfolio-payment-analysis/scripts/csv_export.py +52 -0
  172. package/skills/risk-compliance/portfolio-payment-analysis/scripts/render.py +160 -0
  173. package/skills/risk-compliance/portfolio-payment-analysis/scripts/risk_history.py +435 -0
  174. package/skills/risk-compliance/similar-domain/SKILL.md +9 -4
  175. package/skills/risk-compliance/tld-detection/SKILL.md +124 -239
  176. package/skills/risk-compliance/tld-detection/agents/openai.yaml +1 -1
  177. package/skills/risk-compliance/tld-detection/references/clean.md +18 -51
  178. package/skills/risk-compliance/tld-detection/references/fx-conversion.md +56 -219
  179. package/skills/risk-compliance/tld-detection/references/metric-contract.md +109 -0
  180. package/skills/risk-compliance/tld-detection/references/pattern.md +99 -0
  181. package/skills/risk-compliance/tld-detection/references/report-template.md +49 -272
  182. package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +46 -13
  183. package/skills/risk-compliance/tld-detection/scripts/detect_patterns.py +346 -0
  184. package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +51 -19
  185. package/skills/risk-compliance/tld-detection/scripts/profile_groups.py +109 -0
  186. package/skills/risk-compliance/tld-detection/scripts/render_charts.py +218 -0
  187. package/skills/risk-compliance/tld-detection/scripts/tld_common.py +243 -0
  188. package/skills/engineering/contributing/SKILL.md +0 -70
  189. package/skills/risk-compliance/fraud-analysis/SKILL.md +0 -114
  190. package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +0 -27
  191. package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +0 -30
  192. package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +0 -20
  193. package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +0 -20
  194. package/skills/risk-compliance/fraud-analysis/references/workflow.md +0 -175
  195. package/skills/risk-compliance/tld-detection/references/chinese-polish.md +0 -55
  196. package/skills/risk-compliance/tld-detection/references/clustering.md +0 -235
  197. package/skills/risk-compliance/tld-detection/references/decision.md +0 -189
  198. package/skills/risk-compliance/tld-detection/references/streams.md +0 -141
  199. package/skills/risk-compliance/tld-detection/references/terminology.md +0 -95
  200. package/skills/risk-compliance/tld-detection/references/workflow.md +0 -95
  201. /package/skills/{engineering/contributing → core/write-report}/LICENSE +0 -0
  202. /package/skills/core/{write-doc → write-report}/references/reports/audit-report-template.md +0 -0
  203. /package/skills/core/{write-doc → write-report}/references/reports/external-assessment-template.md +0 -0
  204. /package/skills/core/{write-doc → write-report}/references/reports/management-report-template.md +0 -0
  205. /package/skills/core/{write-doc → write-report}/references/reports/vars-report-template.md +0 -0
  206. /package/skills/{engineering/contributing → core/write-report}/release-check.mjs +0 -0
  207. /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/LICENSE +0 -0
  208. /package/skills/engineering/{contributing → engineering}/references/tracker-conventions.md +0 -0
  209. /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/release-check.mjs +0 -0
  210. /package/skills/engineering/{contributing → engineering}/scripts/persist-conventions-core.mjs +0 -0
  211. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/authorized-payment-scam.md +0 -0
  212. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/mechanisms/account-takeover.md +0 -0
  213. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/taxonomy.md +0 -0
  214. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/terminology.md +0 -0
@@ -1,18 +1,19 @@
1
1
  # Shared feature engineering
2
2
 
3
- Read this in Step 4 after pre-flight passes, the analysis profile is selected,
4
- and its packs are loaded.
5
- This file defines invariants. Archetype, mechanism, and context packs supply the
6
- actual feature families and operational constraints.
7
-
8
- The goal is a small set of interpretable, decision-time-valid inputs that can
9
- become rules. Build thresholds, lists, rates, and graph artifacts on train only.
3
+ Read this after pre-flight and selection of the analysis profile and packs.
4
+ Choose interpretable features supported by the data and decision workflow; the
5
+ catalogs are candidates, not a required feature grid. Rapid rule discovery on
6
+ recent data is acceptable without a mandatory split. Label same-sample selection
7
+ and evaluation as exploratory, not independent performance.
10
8
 
11
9
  ## 1. Declare grain and decision point
12
10
 
13
- Name what one scored row represents and when the rule fires. Examples include a
14
- login, card authorization, collection receipt, beneficiary creation, transfer
15
- instruction, payout request, or investigation case.
11
+ Real-time scoring evaluates one transaction at its decision point. Current
12
+ transaction attributes and transaction-triggered velocity include that transaction.
13
+ History contains only records available at that decision. Other journey events
14
+ supply prior context, not alternative real-time scoring units. A post-transaction entity or period
15
+ review is separate; completed-period aggregates are not available at an earlier
16
+ decision.
16
17
 
17
18
  A feature is usable only if its value existed at that decision point in the live
18
19
  workflow. Correlation with the eventual label is insufficient.
@@ -54,28 +55,57 @@ Use only families supported by the selected packs and source data:
54
55
  - Current-event attributes: amount, currency, channel, product, state available
55
56
  at decision time
56
57
  - Entity history: customer, account, instrument, beneficiary, device, session,
57
- IP, email, phone, merchant, or counterparty
58
- - Velocity: prior counts, amounts, distinct entities, and elapsed time over
59
- operational windows
58
+ IP, email, phone, company, person, bank account, address, merchant, or counterparty
59
+ - Velocity: counts, amounts, distinct entities, and elapsed time over
60
+ operational windows, including the current transaction. For counterparty
61
+ velocity, declare direction, entity type, and pair versus entity grouping;
62
+ never mix company counts with bank-account counts.
60
63
  - Novelty and deviation: new entity, behavior unlike the entity's prior history,
61
64
  amount relative to prior behavior
62
65
  - Sequences: explicit prior-event patterns across the money or access journey
66
+ - Fund lots: stateful allocation of available incoming funds to the current
67
+ outgoing transaction; FIFO is the default for collection/payout analysis.
68
+ Preview the current debit against pre-debit state, not a completed payout
69
+ outcome. Domain rules and conservation checks are in
70
+ [collection/payout features](collection-payout-features.md).
63
71
  - Networks: fan-in, fan-out, shared identifiers, clusters, and risky-neighbor
64
72
  evidence from a point-in-time graph
65
- - Train-fit lists: entities or segments with minimum support and elevated rate
73
+ - Lists: entities or segments with sufficient support and elevated rate, using
74
+ only outcomes available at the decision when deployed
66
75
 
67
76
  ## 4. Point-in-time history
68
77
 
69
- - Sort events deterministically by time within each identity key.
70
- - Use timestamps strictly before the current event. Define tie behavior.
71
- - Holdout rows may use train-era history that predates the row.
78
+ - Use event times in (t − window, t], including the current transaction, and
79
+ only records available at decision time. Equal timestamps need a deterministic
80
+ known arrival order. A later arrival is not history even if its event time is earlier.
81
+ - Holdout rows, if used, may use history available at their decision.
72
82
  - Never use the current row's outcome in its own features.
73
83
  - Graph nodes, edges, labels, and aggregates must be snapshots as of the event.
74
84
  - Outcome labels become historical evidence only after they would have been known
75
85
  operationally, not merely after the underlying transaction occurred.
76
86
 
77
- Use windows operations can implement, such as 10m, 1h, 24h, or 7d. Avoid exact
78
- sequences and fine windows selected only because they maximize train fit.
87
+ Standard elapsed windows are 1m, 5m, 15m, 30m, 1h, 2h, 6h, 24h, 2d,
88
+ 7d, 14d, 21d and 30d; a day is 86,400 seconds, not a calendar day.
89
+ Standard names are `<entity>_txn_count_<window>`,
90
+ `<entity>_amount_sum_<window>`, and `<entity>_<other_entity>_distinct_count_<window>`.
91
+ For example: `email_txn_count_5m`, `pan_amount_sum_24h`, and
92
+ `email_pan_distinct_count_7d`. Keep `24h` canonical, not `1d`. A nonstandard
93
+ window needs an explicit operational reason; do not generate all combinations.
94
+
95
+ For mismatch, compare normalized like-for-like attributes; missing inputs return
96
+ unknown. For frequency encoding, define the reference population, count versus
97
+ share, reference period/version, null/unseen behavior, and availability. A frozen
98
+ historical frequency encoding differs from a rolling count. Neither may use
99
+ future observations. See [feature SQL](feature-sql.md) for both patterns.
100
+
101
+ For every shortlisted feature record its formula, inputs, entity key, window,
102
+ null behavior, currency, source/version, and update semantics. Replay cold starts,
103
+ limited lookback, late arrivals, duplicate delivery, and timestamp ties. Missing
104
+ history is not proof of zero prior activity.
105
+
106
+ See [feature SQL](feature-sql.md), [entities](entities.md), and
107
+ [enrichment](enrichment.md). Avoid sequences and fine windows selected only
108
+ because they maximize sample fit.
79
109
 
80
110
  ## 5. Identity-link quality
81
111
 
@@ -103,21 +133,26 @@ account restrictions often mature after the event.
103
133
  value exists. State this assumption and preserve those explicit states as
104
134
  unlabeled.
105
135
  - For a user-defined positive condition, require a separate user-defined
106
- negative condition. Rows outside the positive condition are not automatically
107
- negative.
136
+ negative condition before computing metrics that need negatives. Discovery
137
+ continues with remaining rows unlabeled. Rows outside the positive condition
138
+ are not automatically negative.
108
139
  - Verify positive and negative conditions are disjoint. Exclude rows matching
109
140
  neither or both from supervised metrics and report their count.
110
- - Fit label-rate lists on mature train outcomes only.
141
+ - Use only outcomes mature and available before each decision in deployed
142
+ label-rate lists or encodings; never use current or future outcomes.
111
143
  - Do not use an operational action as both label and feature.
112
144
  - Do not blend separate archetypes into a single positive label.
113
145
 
114
- ## 7. Train-fit thresholds and lists
146
+ ## 7. Discovery and optional validation
115
147
 
116
- - Propose thresholds from business meaning or train distributions.
117
- - Require minimum support for entity, graph, or segment lists.
118
- - Freeze conditions and memberships before holdout scoring.
119
- - Apply frozen artifacts to holdout without reranking on holdout outcomes.
120
- - Small-N spikes remain monitoring candidates.
148
+ - Propose thresholds from business meaning or observed distributions.
149
+ - Require appropriate support for entity, graph, or segment lists.
150
+ - If using a holdout, freeze conditions and memberships before holdout scoring;
151
+ apply them without reranking on holdout outcomes.
152
+ - If the same sample selects and evaluates rules, label results same-sample and
153
+ exploratory. Optional temporal or other validation can measure generalization.
154
+ - Small-N spikes remain monitoring candidates. Discovery choices never relax
155
+ decision-time availability of encoding sources.
121
156
 
122
157
  ## 8. Rule-ready conditions
123
158
 
@@ -130,9 +165,9 @@ event grain + decision point + fields + operator + threshold/list + units + wind
130
165
  Prefer:
131
166
 
132
167
  - `amount >= <currency threshold>` over “high amount”
133
- - `prior_attempts_1h >= 3` over “high velocity”
168
+ - `attempts_including_current_1h >= 3` over “high velocity”
134
169
  - `beneficiary_age_minutes <= 30` over “new beneficiary”
135
- - `entity in train_fit_watchlist_v1` over a holdout-ranked list
170
+ - `entity in decision_time_watchlist_v1` with its availability documented
136
171
 
137
172
  ## 9. Universal do-not list
138
173
 
@@ -140,7 +175,7 @@ Prefer:
140
175
  - Do not use future events, current outcomes, or investigation results.
141
176
  - Do not treat technical authentication as proof of customer consent.
142
177
  - Do not infer victim, perpetrator, mule, or facilitator role from behavior alone.
143
- - Do not fit thresholds, rates, graph lists, or watchlists on holdout.
178
+ - Do not rerank on holdout outcomes when reporting holdout performance.
144
179
  - Do not present proxy labels as confirmed fraud or loss avoided.
145
180
  - Do not invent missing fields, identity links, currencies, or event semantics.
146
181
 
@@ -149,10 +184,11 @@ Prefer:
149
184
  - [ ] Analysis profile loaded
150
185
  - [ ] Event grain and decision point stated
151
186
  - [ ] Outcome maturity defined
152
- - [ ] Label provenance and positive/negative/unlabeled definitions recorded
187
+ - [ ] Label provenance and known positive/negative/unlabeled definitions recorded;
188
+ unavailable classes limit metrics, not discovery
153
189
  - [ ] Positive and negative conditions are disjoint
154
190
  - [ ] Fields classified into allowed/excluded/context-only lists
155
191
  - [ ] History and graph features are point-in-time
156
192
  - [ ] Identity-link strength documented
157
- - [ ] Thresholds and lists fit on train only
193
+ - [ ] Same-sample results labeled; any holdout artifacts frozen before evaluation
158
194
  - [ ] Candidates expressed as operable conditions
@@ -0,0 +1,150 @@
1
+ # Decision-time feature SQL
2
+
3
+ This PostgreSQL reference demonstrates semantics, not a production implementation
4
+ or performance recommendation. It scores each transaction independently. Assume
5
+ `transactions` has one immutable decision-time snapshot per transaction with:
6
+
7
+ ```text
8
+ id bigint primary key, event_time timestamptz not null,
9
+ arrival_seq bigint unique not null, email text, pan text,
10
+ amount numeric, currency text, bin_country text, ip_country text
11
+ ```
12
+
13
+ The sequence is a globally unique, monotonically assigned decision-availability
14
+ order; a row and its attributes are available by its own sequence. It must reflect
15
+ what the scorer actually knew, not a sequence assigned retrospectively in event
16
+ time. Corrections, late enrichments and delayed outcomes need separate versioned
17
+ availability data; this snapshot alone cannot reconstruct them. Keys and country
18
+ codes are already normalized, with empty/invalid values converted to null. The
19
+ query uses a 1-hour elapsed window; substitute any standard window in
20
+ [feature engineering](feature-engineering.md), with days as 86,400 seconds.
21
+
22
+ The lateral query is authoritative for eligibility: event time is strictly above
23
+ the lower bound and at or below current event time, and availability sequence is
24
+ at or below the current sequence. Thus the current row is included, equal-time
25
+ later arrivals are excluded, and an earlier event arriving later is excluded.
26
+ Email transaction count includes current; distinct PAN excludes null.
27
+ The PAN amount sum uses the current currency only, but is unknown if the current
28
+ currency is unknown or any eligible PAN event has unknown currency or an unknown
29
+ amount in that currency. Known other currencies are not added. This conservative
30
+ rule avoids treating missing amounts or currencies as zero. Null entity keys return
31
+ null features rather than pooling unrelated records. Country mismatch is null when
32
+ either country is unknown. These features use no outcome labels.
33
+
34
+ ```sql
35
+ SELECT c.id,
36
+ CASE WHEN c.email IS NULL THEN NULL ELSE e.email_txn_count_1h END AS email_txn_count_1h,
37
+ CASE WHEN c.email IS NULL THEN NULL ELSE e.email_pan_distinct_count_1h END AS email_pan_distinct_count_1h,
38
+ CASE WHEN c.pan IS NULL THEN NULL ELSE p.pan_txn_count_1h END AS pan_txn_count_1h,
39
+ CASE WHEN c.pan IS NULL OR c.currency IS NULL
40
+ OR p.unknown_currency_count > 0 OR p.missing_amount_count > 0
41
+ THEN NULL ELSE p.same_currency_sum END AS pan_amount_sum_1h,
42
+ CASE WHEN c.bin_country IS NULL OR c.ip_country IS NULL THEN NULL
43
+ ELSE c.bin_country <> c.ip_country END AS bin_ip_country_mismatch
44
+ FROM transactions AS c
45
+ LEFT JOIN LATERAL (
46
+ SELECT count(*) AS email_txn_count_1h,
47
+ count(DISTINCT h.pan) AS email_pan_distinct_count_1h
48
+ FROM transactions AS h
49
+ WHERE c.email IS NOT NULL AND h.email = c.email
50
+ AND h.event_time > c.event_time - interval '3600 seconds'
51
+ AND h.event_time <= c.event_time
52
+ AND h.arrival_seq <= c.arrival_seq
53
+ ) AS e ON true
54
+ LEFT JOIN LATERAL (
55
+ SELECT count(*) AS pan_txn_count_1h,
56
+ count(*) FILTER (WHERE h.currency IS NULL) AS unknown_currency_count,
57
+ count(*) FILTER (WHERE h.currency = c.currency AND h.amount IS NULL) AS missing_amount_count,
58
+ sum(h.amount) FILTER (WHERE h.currency = c.currency) AS same_currency_sum
59
+ FROM transactions AS h
60
+ WHERE c.pan IS NOT NULL AND h.pan = c.pan
61
+ AND h.event_time > c.event_time - interval '3600 seconds'
62
+ AND h.event_time <= c.event_time
63
+ AND h.arrival_seq <= c.arrival_seq
64
+ ) AS p ON true
65
+ ORDER BY c.id;
66
+ ```
67
+
68
+ For a same-PAN, amount and currency retry count, require all three current values
69
+ to be non-null and add equality predicates on all three to the same lateral
70
+ eligibility conditions. A missing value yields unknown, not a match. For historical
71
+ label-rate encodings, the outcome itself needs an availability sequence no later
72
+ than the current decision and must be mature; exclude the current outcome. Do not
73
+ use today's known fraud list as though it existed at earlier decisions.
74
+
75
+ ## Frequency encoding
76
+
77
+ This PostgreSQL example assumes `reference_transactions(mcc, address_key)` is an
78
+ explicitly chosen historical population available before scoring begins. Build
79
+ and version the reference once; do not refit it on later scoring transactions.
80
+ Use a separate earlier population for discovery rows if replaying their features.
81
+ The denominator includes non-null values only, separately for each attribute.
82
+
83
+ ```sql
84
+ CREATE TEMP TABLE attribute_frequency_reference AS
85
+ WITH attribute_values AS (
86
+ SELECT 'mcc' AS attribute, mcc AS value
87
+ FROM reference_transactions
88
+ UNION ALL
89
+ SELECT 'address', address_key
90
+ FROM reference_transactions
91
+ ), frequencies AS (
92
+ SELECT attribute, value, count(*) AS txn_count
93
+ FROM attribute_values
94
+ WHERE value IS NOT NULL
95
+ GROUP BY attribute, value
96
+ )
97
+ SELECT attribute, value, txn_count,
98
+ txn_count::double precision
99
+ / sum(txn_count) OVER (PARTITION BY attribute) AS txn_share
100
+ FROM frequencies;
101
+
102
+ SELECT t.id,
103
+ coalesce(m.txn_share, 0.0) AS mcc_frequency,
104
+ t.mcc IS NULL AS mcc_missing,
105
+ t.mcc IS NOT NULL AND m.value IS NULL AS mcc_unseen,
106
+ coalesce(a.txn_share, 0.0) AS address_frequency,
107
+ t.address_key IS NULL AS address_missing,
108
+ t.address_key IS NOT NULL AND a.value IS NULL AS address_unseen
109
+ FROM scoring_transactions AS t
110
+ LEFT JOIN attribute_frequency_reference AS m
111
+ ON m.attribute = 'mcc' AND m.value = t.mcc
112
+ LEFT JOIN attribute_frequency_reference AS a
113
+ ON a.attribute = 'address' AND a.value = t.address_key;
114
+ ```
115
+
116
+ `scoring_transactions` adds `mcc text` and normalized `address_key text` to the
117
+ snapshot schema above. Zero is the declared fallback for missing/unseen values;
118
+ retain both flags rather than making the states indistinguishable. This frozen
119
+ encoding is not transaction velocity; current inclusion applies to rolling
120
+ features, not mutation of a frozen reference.
121
+
122
+ ## Standard intervals
123
+
124
+ Use seconds to avoid timezone/DST-dependent calendar-day arithmetic.
125
+
126
+ | Suffix | PostgreSQL interval |
127
+ |---|---|
128
+ | `1m` | `interval '60 seconds'` |
129
+ | `5m` | `interval '300 seconds'` |
130
+ | `15m` | `interval '900 seconds'` |
131
+ | `30m` | `interval '1800 seconds'` |
132
+ | `1h` | `interval '3600 seconds'` |
133
+ | `2h` | `interval '7200 seconds'` |
134
+ | `6h` | `interval '21600 seconds'` |
135
+ | `24h` | `interval '86400 seconds'` |
136
+ | `2d` | `interval '172800 seconds'` |
137
+ | `7d` | `interval '604800 seconds'` |
138
+ | `14d` | `interval '1209600 seconds'` |
139
+ | `21d` | `interval '1814400 seconds'` |
140
+ | `30d` | `interval '2592000 seconds'` |
141
+
142
+ A simple `RANGE ... CURRENT ROW` frame is not equivalent: it can include all
143
+ same-time peers and includes the lower boundary. PostgreSQL also does not support
144
+ `COUNT(DISTINCT ...) OVER (...)`. Optimize for the target engine only after
145
+ proving parity with the lateral eligibility definition.
146
+
147
+ For cross-currency sums, first derive `amount_local` in a declared common currency
148
+ using a decision-time FX rate, then apply the same window eligibility. Return
149
+ unknown if any contributing amount lacks a valid conversion; never sum original
150
+ amounts from different currencies or silently omit missing conversions.
@@ -20,14 +20,16 @@ and collection controls.
20
20
  | Choice | Reason |
21
21
  |---|---|
22
22
  | Profile before label | The same status can represent different actors and outcomes across archetypes |
23
- | Explicit negative class | Precision, recall, and lift are undefined or misleading when “not positive” silently mixes genuine negatives with unknown outcomes |
23
+ | Explicit negative class | Precision, false-positive rates, and lift need justified negatives; unknown outcomes are not negatives, but discovery can continue |
24
24
  | Consent separate from authentication | Compromised credentials can pass technical checks |
25
25
  | Reader order differs from workflow | Operators need decisions before methodology |
26
26
  | Standalone strategy impact | Portfolio friction and exposure determine whether rules should ship |
27
27
  | Count/rate and amount/share | Both operational volume and value matter |
28
28
  | Context-specific impact | Authorization, completion, delay, review, and exposure use different denominators |
29
29
  | Proxy and maturity disclosure | Delayed outcomes and operational actions are not confirmed fraud by default |
30
- | Point-in-time graphs | Future counterparties and investigations otherwise leak into earlier events |
30
+ | Point-in-time features | Current inputs and known history permit real-time replay; future counterparties and investigations do not |
31
+ | Optional validation | Recent catches can support rapid discovery without proving future performance |
32
+ | Multiple rule hits | Package coverage is a transaction union, not a sum of overlapping rule counts |
31
33
  | No review process in report | Review metadata is not business content |
32
34
 
33
35
  ## Domain examples
@@ -20,13 +20,14 @@ Do not title chapters as analysis steps. Keep review details out of the report.
20
20
 
21
21
  Use no more than five top-level findings:
22
22
 
23
- 1. Analysis profile, sample span, and positive-label baseline
23
+ 1. Analysis profile, sample span, and positive-label baseline where available
24
24
  2. Adopted rule classes and domain-appropriate actions
25
25
  3. Adopted strategy package impact
26
26
  4. Material attribution or validation limitation, only when decision-critical
27
27
 
28
28
  For strategy impact, report triggered count/rate and amount/share, followed by
29
- precision and recall. Add the selected contexts' main customer, operations,
29
+ precision and recall where supported. Mark unsupported metrics unavailable and
30
+ state why. Add the selected contexts' main customer, operations,
30
31
  conversion, delay, exposure, or loss measure.
31
32
 
32
33
  Nested numbered lists use three-space indentation and `1.`, `2.`, `3.` markers.
@@ -36,7 +37,8 @@ Do not use Markdown bold markers in the report body.
36
37
 
37
38
  ### 2.1 样本范围
38
39
 
39
- Data source, event grains, time span, currencies, and portfolio constants.
40
+ Data source, transaction scoring grain, supporting event grains, time span,
41
+ currencies, and portfolio constants.
40
42
 
41
43
  ### 2.2 分析画像与归因
42
44
 
@@ -57,8 +59,9 @@ Explain unresolved attribution. Do not imply consent from authentication.
57
59
 
58
60
  ### 2.3 标签定义
59
61
 
60
- State label provenance (`file-column` or `user-defined`), confirmed versus proxy,
61
- and maturity window. Define and count all three populations:
62
+ State label provenance (`file-column`, `user-defined`, or `absent`), confirmed
63
+ versus proxy, and maturity window where applicable. Define and count all known
64
+ populations; state unavailable definitions explicitly rather than inventing them:
62
65
 
63
66
  | Population | Required content |
64
67
  |---|---|
@@ -66,20 +69,25 @@ and maturity window. Define and count all three populations:
66
69
  | Negative | Exact values/conditions and count |
67
70
  | Unlabeled | Pending, immature, unknown, overlapping, or out-of-scope conditions and count |
68
71
 
69
- Report the positive base rate among labeled rows and its denominator. If an
70
- existing outcome column supplies the positive label, disclose the assumption
71
- that its other mature, non-explicitly-unlabeled values are negative. If the user
72
- defined the positive condition, show the separately supplied negative condition.
73
- Separate labels for separate archetypes.
72
+ Report the positive base rate among labeled rows only where a meaningful
73
+ positive/negative population exists, with its denominator. If an existing outcome
74
+ column supplies the positive label, disclose the assumption that its other
75
+ mature, non-explicitly-unlabeled values are negative. If the user defined the
76
+ positive condition, show the separately supplied negative condition when present.
77
+ Otherwise keep remaining rows unlabeled and omit unsupported metrics. Absent
78
+ labels do not block a descriptive rule report. Separate archetypes' labels.
74
79
 
75
- ### 2.4 时间切分
80
+ ### 2.4 证据范围
76
81
 
77
- State cut and train/holdout sizes, or state that metrics are in-sample and
78
- unvalidated. Name the decision point again in one line.
82
+ State discovery/scoring windows, outcome cutoff, and whether selection and
83
+ measurement use the same transactions. Recent observations and retrospective
84
+ sample metrics do not establish future performance. No train/test/holdout split
85
+ is required; describe subsequent monitoring or optional temporal validation if
86
+ performed. Name the decision point and real-time versus review track.
79
87
 
80
88
  ## 3. 规则发现
81
89
 
82
- ### 3.1 规则清单与验证集指标
90
+ ### 3.1 规则清单与观察指标
83
91
 
84
92
  Suggested columns:
85
93
 
@@ -90,7 +98,11 @@ Suggested columns:
90
98
  - Group conditions into a few operational rule classes.
91
99
  - State explicit windows, units, currency, and frozen-list versions.
92
100
  - Use actions supplied by selected context packs.
93
- - List rules once. Multi-rule unions belong to strategy packages in chapter 4.
101
+ - List rules once. Preserve every transaction-rule hit; a transaction can match
102
+ several rules. Multi-rule unions belong to strategy packages in chapter 4.
103
+ - Report known-fraud hits, labeled/unlabeled hit counts, and metric denominators.
104
+ Missing negatives do not prevent discovery; they prevent precision and
105
+ false-positive claims. Label same-sample selection explicitly.
94
106
 
95
107
  ### 3.2 稳定性与归因
96
108
 
@@ -112,8 +124,13 @@ For every package/action row, report in this order:
112
124
 
113
125
  1. Triggered count and rate
114
126
  2. Triggered amount and amount share, with currency
115
- 3. Precision
116
- 4. Recall
127
+ 3. Precision, where labeled hits support it; disclose unlabeled hits separately
128
+ 4. Recall, against the explicitly defined known-positive population
129
+
130
+ Deduplicate package coverage and amount by transaction ID. Show rule overlap and
131
+ incremental coverage against a named base package. Declare action precedence
132
+ before reporting mutually exclusive action totals. Never sum per-rule counts as
133
+ portfolio coverage. Unsupported metrics are unavailable, not zero.
117
134
 
118
135
  Suggested columns:
119
136
 
@@ -147,15 +164,20 @@ assumptions. Keep stricter non-default actions visibly separate.
147
164
 
148
165
  ### 5.1 入选短名单
149
166
  ### 5.2 候选特征集
150
- ### 5.3 训练拟合的观察名单或图谱特征(when applicable)
167
+ ### 5.3 参考编码、观察名单或图谱特征(when applicable)
151
168
 
152
- Keep this shorter than rule findings. Name point-in-time construction and weak
153
- links where material.
169
+ Keep this shorter than rule findings. Name point-in-time construction, current
170
+ transaction inclusion, reference versions, and weak links where material.
171
+ Separate post-transaction entity/period findings from real-time features.
172
+ For collection/payout features, disclose counterparty direction and entity grain,
173
+ FIFO account/currency scope and ledger policy, matched/unmatched funding,
174
+ known-payer coverage, and any enrichment or ownership uncertainty. Matched-only
175
+ fund age and known recent-funds share must retain their coverage qualifiers.
154
176
 
155
177
  ## 6. 附录
156
178
 
157
179
  ### A. 决策时点与字段排除
158
- ### B. 标签成熟度、时间切分与训练指标
180
+ ### B. 标签成熟度、证据范围与可选验证
159
181
  ### C. 仅描述性信号与未入选候选
160
182
  ### D. 假设、限制与政策依赖
161
183
 
@@ -173,9 +195,9 @@ links where material.
173
195
  ### 2.1 样本范围
174
196
  ### 2.2 分析画像与归因
175
197
  ### 2.3 标签定义
176
- ### 2.4 时间切分
198
+ ### 2.4 证据范围
177
199
  ## 3. 规则发现
178
- ### 3.1 规则清单与验证集指标
200
+ ### 3.1 规则清单与观察指标
179
201
  ### 3.2 稳定性与归因
180
202
  ### 3.3 可落地运营建议
181
203
  ## 4. 策略整体影响
@@ -9,7 +9,7 @@ a fatal issue requires a user-approved restart.
9
9
  - Draft report and source paths
10
10
  - Analysis profile, event grain, and decision point
11
11
  - Label definition, maturity window, and attribution confidence
12
- - Time cut and train/holdout sizes, or explicit in-sample status
12
+ - Discovery/scoring windows, selection overlap, and optional validation evidence
13
13
  - Allowed and excluded fields
14
14
  - Rule definitions and metrics with evaluation window
15
15
  - Strategy actions, impact measures, denominators, and assumptions
@@ -34,15 +34,15 @@ a fatal issue requires a user-approved restart.
34
34
 
35
35
  ### Pre-flight
36
36
 
37
- - [ ] Pre-flight status passed before supervised analysis began
37
+ - [ ] Data readiness was established before using affected features or metrics
38
38
  - [ ] Input readability, row grain, time field, and label provenance were checked
39
39
  - [ ] File-column positives map remaining mature rows to negative only after
40
40
  preserving explicit missing/pending/unknown/unlabeled states
41
- - [ ] User-defined positives received an explicit user-defined negative condition
42
- during pre-flight; `NOT positive` was not silently assumed
41
+ - [ ] User-defined positives have explicit negative definitions before metrics
42
+ requiring negatives; missing negatives do not block rapid discovery
43
43
  - [ ] Both/neither/immature rows are unlabeled, or their absence is demonstrated
44
- - [ ] Descriptive-only analysis is clearly separated from supervised metrics when
45
- pre-flight could not establish both classes
44
+ - [ ] Positive-only or unlabeled discovery avoids unsupported precision, lift,
45
+ false-positive rates, or portfolio recall
46
46
 
47
47
  ### Analysis profile and attribution
48
48
 
@@ -57,40 +57,61 @@ a fatal issue requires a user-approved restart.
57
57
 
58
58
  ### Label and maturity
59
59
 
60
- - [ ] Label provenance is stated as file-column or user-defined
60
+ - [ ] Label provenance is stated as file-column, user-defined, or absent
61
61
  - [ ] Exact positive, negative, and unlabeled definitions and counts are stated
62
62
  - [ ] Existing outcome-column labels disclose the assumption used to map other
63
63
  mature values to negative and preserve explicit pending/unknown states
64
- - [ ] User-defined positive labels have a separately user-defined negative class;
65
- all other rows are not automatically treated as negative
64
+ - [ ] User-defined positives use separately defined negatives where metrics need
65
+ them; otherwise negatives are explicitly unavailable and other rows unlabeled
66
66
  - [ ] Positive and negative conditions are disjoint; neither/both rows are unlabeled
67
67
  - [ ] Confirmed versus proxy status is honest
68
- - [ ] Positive base rate is factual and uses labeled rows as denominator
68
+ - [ ] Positive base rate, if available, uses labeled rows as denominator;
69
+ positive-only samples are not presented as a portfolio baseline
69
70
  - [ ] Outcome maturity window is defined; immature rows are not clean negatives
70
71
  - [ ] Separate archetypes are not blended into one target
71
72
  - [ ] Label, synonyms, actions, and later investigation outcomes are excluded
72
73
 
73
- ### Temporal validation
74
+ ### Evidence basis
74
75
 
75
- - [ ] Earlier train and later holdout cut is stated, or metrics are unvalidated
76
- - [ ] No random split is presented as temporal validation
77
- - [ ] Headline metrics come from the claimed window
78
- - [ ] Thresholds, rate lists, graph lists, and watchlists are fit on train only
79
- - [ ] Holdout rows may use only history known before each row
76
+ - [ ] Discovery/scoring windows, cutoff, and same-sample selection are disclosed
77
+ - [ ] No mandatory split delays rapid rule discovery
78
+ - [ ] Sample catches are not presented as proof of future performance
79
+ - [ ] Claimed subsequent/temporal validation uses fixed rules and lists, without
80
+ tuning on the claimed validation outcomes
81
+ - [ ] Reference encodings and graph/list inputs were available at decision time
82
+ - [ ] Missing timestamps disable affected history features rather than invent time
80
83
 
81
84
  ### Decision-time validity
82
85
 
83
86
  - [ ] Every rule field exists at the stated decision point
84
87
  - [ ] Current response, settlement, return, recall, dispute, reimbursement,
85
88
  restriction, and investigation fields do not leak backward
86
- - [ ] History uses prior events and defines timestamp ties
89
+ - [ ] Real-time scoring is one transaction; duplicates/retries/lifecycle rules
90
+ and stable transaction IDs are defined
91
+ - [ ] Current transaction contributes by default; first eligible count is one
92
+ - [ ] Windows use the standard vocabulary, elapsed durations, and `(t-window,t]`
93
+ - [ ] Timestamp ties, arrival availability, and late/duplicate processing are defined
94
+ - [ ] Null entity keys are not pooled; distinct counts ignore missing target keys
95
+ - [ ] Amount sums use a declared common currency and explicit missing-FX behavior
96
+ - [ ] Cold-start history and incomplete lookbacks are disclosed
97
+ - [ ] Completed entity/period aggregates remain post-transaction review findings
87
98
  - [ ] Graph features are point-in-time snapshots
88
99
  - [ ] Zero-variance, timing, leakage, and context-only exclusions are listed
100
+ - [ ] Company/person/account roles and address roles remain distinct; uncertain
101
+ name, account, or ownership links are not silently merged
102
+ - [ ] Phone/ID geography means documented numbering/document geography, not
103
+ current residence; unsupported lookups remain unknown
104
+ - [ ] Platform/PSP/holder classifications declare their object, source, timing,
105
+ and confidence; unknown is not false and independent flags may overlap
89
106
  - [ ] Weak entity links are not presented as unique identities
90
107
 
91
108
  ### Metrics and actions
92
109
 
93
- - [ ] Rule metrics use occurrence → precision → recall
110
+ - [ ] Multiple rule hits per transaction remain intact
111
+ - [ ] Package count/value uses transaction unions, with overlap and incremental
112
+ coverage; action-level totals declare precedence
113
+ - [ ] Partial-label metrics expose denominators and unlabeled hits
114
+ - [ ] Rule metrics use occurrence → precision → recall where supported
94
115
  - [ ] Count metrics remain present when value metrics are added
95
116
  - [ ] Small-N, unstable, or attribution-uncertain segments are monitored or dropped
96
117
  - [ ] Actions come from selected contexts and match precision/evidence severity
@@ -104,7 +125,7 @@ a fatal issue requires a user-approved restart.
104
125
  - [ ] Analysis profile and attribution table appears near the start
105
126
  - [ ] Strategy impact is a standalone chapter
106
127
  - [ ] Every package/action has triggered count/rate and amount/share with currency,
107
- followed by precision and recall
128
+ followed by precision and recall where supported; unavailable metrics explain why
108
129
  - [ ] Mixed currencies are not summed without documented FX conversion
109
130
  - [ ] Domain impact measures and denominators come from selected context packs
110
131
  - [ ] Observed results are distinct from scenario estimates
@@ -143,8 +164,15 @@ Read and check each selected pack. At minimum:
143
164
 
144
165
  ### Card payment
145
166
 
167
+ - Reported-fraud labels union available DART/network reports and fraud-category
168
+ disputes, including pre-disputes, by transaction ID; any explicit override is
169
+ stated. Source-only/overlap/union and lifecycle coverage reconcile.
170
+ - Non-fraud disputes and duplicate lifecycle rows do not inflate positives;
171
+ reversal/recovery is separate from the existence of a fraud allegation.
172
+ - Scheme-monitoring ratio exclusions do not silently narrow detection labels.
146
173
  - Current CVV, AVS, authorization response, and 3DS result respect timing.
147
- - BIN lists are train-fit; issuer name is live-operable if used.
174
+ - BIN lists state discovery/version and causal availability; issuer name is
175
+ live-operable if used.
148
176
  - 3DS failures are outside subsequent authorization denominator.
149
177
 
150
178
  ### Collection, transfer, and payout
@@ -152,6 +180,18 @@ Read and check each selected pack. At minimum:
152
180
  - Settlement, reversibility, completion, return, and recall timing are correct.
153
181
  - Sequence and graph features are point-in-time.
154
182
  - Completion, abandonment, delay, workload, and exposure denominators are stated.
183
+ - For collection/payout, apply
184
+ [collection/payout feature checks](collection-payout-features.md): FIFO stays
185
+ within ledger account/currency, uses available lots and deterministic order,
186
+ and conserves each lot across partial allocations.
187
+ - Current payout is previewed once against pre-debit state; pre-debit rejected
188
+ attempts do not consume funds and reservations cannot be spent twice. A failure
189
+ after debit does not restore funds without an explicit ledger reversal/return.
190
+ - Unmatched balance and missing counterparty history are disclosed; allocation
191
+ shares use the stated denominator and are not silently renormalized.
192
+ - Fees, reversals, refunds and FX use explicit ledger semantics; FIFO is an
193
+ attribution convention, not proof of money provenance.
194
+ - Counterparty features declare direction, identity grain, and pair/entity scope.
155
195
 
156
196
  ## Finding format
157
197