@1aboveio/skills 0.0.0-stage → 1.0.0
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.
- package/README.md +30 -2
- package/bin/cli.mjs +14 -0
- package/bin/select-core.mjs +172 -0
- package/package.json +146 -4
- package/skills/app-dev/airflow/LICENSE +3 -0
- package/skills/app-dev/airflow/SKILL.md +199 -0
- package/skills/app-dev/airflow/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/LICENSE +3 -0
- package/skills/app-dev/android-foundation/SKILL.md +192 -0
- package/skills/app-dev/android-foundation/assets/android-ci-job.yml +217 -0
- package/skills/app-dev/android-foundation/references/ci.md +87 -0
- package/skills/app-dev/android-foundation/references/gotchas.md +221 -0
- package/skills/app-dev/android-foundation/references/setup.md +164 -0
- package/skills/app-dev/android-foundation/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/scripts/device-run.sh +176 -0
- package/skills/app-dev/android-foundation/scripts/device-run.test.mjs +172 -0
- package/skills/app-dev/app-debug/LICENSE +3 -0
- package/skills/app-dev/app-debug/SKILL.md +110 -0
- package/skills/app-dev/app-debug/references/common-errors.md +128 -0
- package/skills/app-dev/app-debug/release-check.mjs +93 -0
- package/skills/app-dev/better-auth/LICENSE +3 -0
- package/skills/app-dev/better-auth/SKILL.md +598 -0
- package/skills/app-dev/better-auth/references/feishu-api.md +270 -0
- package/skills/app-dev/better-auth/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/LICENSE +3 -0
- package/skills/app-dev/data-catalog/SKILL.md +204 -0
- package/skills/app-dev/data-catalog/agents/openai.yaml +3 -0
- package/skills/app-dev/data-catalog/references/data-catalog-conventions.md +75 -0
- package/skills/app-dev/data-catalog/references/field-definitions.md +116 -0
- package/skills/app-dev/data-catalog/references/format.md +121 -0
- package/skills/app-dev/data-catalog/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/scripts/data-catalog.test.mjs +36 -0
- package/skills/app-dev/data-catalog/scripts/data_catalog.py +1392 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions-core.mjs +117 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions.mjs +17 -0
- package/skills/app-dev/data-catalog/scripts/test_data_catalog.py +571 -0
- package/skills/app-dev/ios-foundation/LICENSE +3 -0
- package/skills/app-dev/ios-foundation/SKILL.md +184 -0
- package/skills/app-dev/ios-foundation/references/setup.md +243 -0
- package/skills/app-dev/ios-foundation/release-check.mjs +93 -0
- package/skills/app-dev/monorepo/LICENSE +3 -0
- package/skills/app-dev/monorepo/SKILL.md +462 -0
- package/skills/app-dev/monorepo/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/LICENSE +3 -0
- package/skills/app-dev/nextjs-fullstack/SKILL.md +211 -0
- package/skills/app-dev/nextjs-fullstack/conventions.md +318 -0
- package/skills/app-dev/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/app-dev/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/app-dev/nextjs-fullstack/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/server-actions.md +409 -0
- package/skills/app-dev/prisma-setup/LICENSE +3 -0
- package/skills/app-dev/prisma-setup/SKILL.md +181 -0
- package/skills/app-dev/prisma-setup/nextjs.md +258 -0
- package/skills/app-dev/prisma-setup/release-check.mjs +93 -0
- package/skills/app-dev/prisma-setup/turborepo.md +301 -0
- package/skills/app-dev/pyspark/LICENSE +3 -0
- package/skills/app-dev/pyspark/SKILL.md +127 -0
- package/skills/app-dev/pyspark/assets/templates/etl.py +748 -0
- package/skills/app-dev/pyspark/assets/templates/utils/__init__.py +1 -0
- package/skills/app-dev/pyspark/assets/templates/utils/hudi_metadata.py +14 -0
- package/skills/app-dev/pyspark/references/diagnosis-and-profiling.md +169 -0
- package/skills/app-dev/pyspark/references/etl-contract.md +129 -0
- package/skills/app-dev/pyspark/references/production-validation.md +131 -0
- package/skills/app-dev/pyspark/references/reconciliation.md +38 -0
- package/skills/app-dev/pyspark/references/transformation-design.md +190 -0
- package/skills/app-dev/pyspark/references/velocity-feature-calculation.md +193 -0
- package/skills/app-dev/pyspark/release-check.mjs +93 -0
- package/skills/app-dev/pyspark/scripts/spark_eventlog_summary.py +223 -0
- package/skills/app-dev/python-backend/LICENSE +3 -0
- package/skills/app-dev/python-backend/SKILL.md +325 -0
- package/skills/app-dev/python-backend/assets/uv-install.sh +48 -0
- package/skills/app-dev/python-backend/references/uv-installs.md +83 -0
- package/skills/app-dev/python-backend/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/LICENSE +3 -0
- package/skills/app-dev/shadcn/SKILL.md +120 -0
- package/skills/app-dev/shadcn/assets/shadcn-small.png +0 -0
- package/skills/app-dev/shadcn/assets/shadcn.png +0 -0
- package/skills/app-dev/shadcn/cli.md +411 -0
- package/skills/app-dev/shadcn/customization.md +224 -0
- package/skills/app-dev/shadcn/mcp.md +101 -0
- package/skills/app-dev/shadcn/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/app-dev/shadcn/rules/component-selection.md +67 -0
- package/skills/app-dev/shadcn/rules/composition.md +195 -0
- package/skills/app-dev/shadcn/rules/data-table.md +201 -0
- package/skills/app-dev/shadcn/rules/forms.md +255 -0
- package/skills/app-dev/shadcn/rules/icons.md +103 -0
- package/skills/app-dev/shadcn/rules/styling.md +167 -0
- package/skills/app-dev/zod-v4/LICENSE +3 -0
- package/skills/app-dev/zod-v4/SKILL.md +286 -0
- package/skills/app-dev/zod-v4/release-check.mjs +93 -0
- package/skills/cicd/cloud-build/LICENSE +3 -0
- package/skills/cicd/cloud-build/SKILL.md +707 -0
- package/skills/cicd/cloud-build/release-check.mjs +93 -0
- package/skills/cicd/cloud-debug/LICENSE +3 -0
- package/skills/cicd/cloud-debug/SKILL.md +315 -0
- package/skills/cicd/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd/cloud-debug/release-check.mjs +93 -0
- package/skills/cicd/cloud-deploy/LICENSE +3 -0
- package/skills/cicd/cloud-deploy/SKILL.md +230 -0
- package/skills/cicd/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd/cloud-deploy/release-check.mjs +93 -0
- package/skills/cicd/docker/LICENSE +3 -0
- package/skills/cicd/docker/SKILL.md +151 -0
- package/skills/cicd/docker/release-check.mjs +93 -0
- package/skills/cicd/github-actions/LICENSE +3 -0
- package/skills/cicd/github-actions/SKILL.md +111 -0
- package/skills/cicd/github-actions/references/audit-profile-optimize.md +150 -0
- package/skills/cicd/github-actions/references/ci-case-studies.md +141 -0
- package/skills/cicd/github-actions/references/conditional-ci.md +214 -0
- package/skills/cicd/github-actions/references/debugging.md +13 -0
- package/skills/cicd/github-actions/references/pipeline.md +87 -0
- package/skills/cicd/github-actions/references/post-deploy-and-publishing.md +33 -0
- package/skills/cicd/github-actions/references/runners.md +253 -0
- package/skills/cicd/github-actions/references/security.md +29 -0
- package/skills/cicd/github-actions/references/speed-and-audit.md +115 -0
- package/skills/cicd/github-actions/references/two-pass-reading.md +92 -0
- package/skills/cicd/github-actions/release-check.mjs +93 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit-core.mjs +612 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.mjs +4 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.test.mjs +637 -0
- package/skills/cicd/github-flow/LICENSE +3 -0
- package/skills/cicd/github-flow/SKILL.md +123 -0
- package/skills/cicd/github-flow/references/ci-conventions.md +14 -0
- package/skills/cicd/github-flow/release-check.mjs +93 -0
- package/skills/cicd/github-flow/scripts/flow-core.mjs +105 -0
- package/skills/cicd/github-flow/scripts/flow.mjs +81 -0
- package/skills/cicd/github-flow/scripts/flow.test.mjs +114 -0
- package/skills/cicd/github-flow/scripts/persist-conventions-core.mjs +117 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.mjs +49 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.test.mjs +108 -0
- package/skills/cicd/google-cloud/LICENSE +3 -0
- package/skills/cicd/google-cloud/SKILL.md +119 -0
- package/skills/cicd/google-cloud/references/gcs.md +469 -0
- package/skills/cicd/google-cloud/references/iam.md +451 -0
- package/skills/cicd/google-cloud/references/project.md +349 -0
- package/skills/cicd/google-cloud/references/secrets.md +336 -0
- package/skills/cicd/google-cloud/references/vpc.md +312 -0
- package/skills/cicd/google-cloud/release-check.mjs +93 -0
- package/skills/cicd/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd/mergify/LICENSE +3 -0
- package/skills/cicd/mergify/SKILL.md +102 -0
- package/skills/cicd/mergify/assets/templates/mergify.yml +215 -0
- package/skills/cicd/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd/mergify/references/branch-protection.md +282 -0
- package/skills/cicd/mergify/references/configuration.md +274 -0
- package/skills/cicd/mergify/references/diagnosis.md +109 -0
- package/skills/cicd/mergify/references/stacks.md +84 -0
- package/skills/cicd/mergify/references/traps.md +119 -0
- package/skills/cicd/mergify/references/watch-contract.md +274 -0
- package/skills/cicd/mergify/release-check.mjs +93 -0
- package/skills/cicd/mergify/scripts/audit-core.mjs +208 -0
- package/skills/cicd/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd/mergify/scripts/audit.test.mjs +201 -0
- package/skills/cicd/mergify/scripts/entrypoints.test.mjs +106 -0
- package/skills/cicd/mergify/scripts/pr-620-mergify-comments.fixture.json +30 -0
- package/skills/cicd/mergify/scripts/stack-push-core.mjs +258 -0
- package/skills/cicd/mergify/scripts/stack-push.mjs +4 -0
- package/skills/cicd/mergify/scripts/stack-push.test.mjs +233 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery-core.mjs +1065 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.test.mjs +1826 -0
- package/skills/cicd/podman/LICENSE +3 -0
- package/skills/cicd/podman/SKILL.md +71 -0
- package/skills/cicd/podman/agents/openai.yaml +4 -0
- package/skills/cicd/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd/podman/references/troubleshooting.md +98 -0
- package/skills/cicd/podman/release-check.mjs +93 -0
- package/skills/content/article-review/LICENSE +3 -0
- package/skills/content/article-review/SKILL.md +66 -0
- package/skills/content/article-review/references/report-format.md +68 -0
- package/skills/content/article-review/references/template-guide.md +79 -0
- package/skills/content/article-review/references/template-wechat-payments.md +125 -0
- package/skills/content/article-review/release-check.mjs +93 -0
- package/skills/content/article-to-image/LICENSE +3 -0
- package/skills/content/article-to-image/SKILL.md +91 -0
- package/skills/content/article-to-image/references/formats.md +53 -0
- package/skills/content/article-to-image/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/LICENSE +3 -0
- package/skills/content/flowchart-svg/SKILL.md +43 -0
- package/skills/content/flowchart-svg/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/scripts/export_png.sh +8 -0
- package/skills/content/image-gen/LICENSE +3 -0
- package/skills/content/image-gen/SKILL.md +192 -0
- package/skills/content/image-gen/release-check.mjs +93 -0
- package/skills/content/image-gen/scripts/credentials.mjs +217 -0
- package/skills/content/image-gen/scripts/credentials.test.mjs +212 -0
- package/skills/content/image-gen/scripts/generate.mjs +240 -0
- package/skills/content/image-gen/scripts/options.mjs +293 -0
- package/skills/content/image-gen/scripts/options.test.mjs +245 -0
- package/skills/content/mermaid/LICENSE +3 -0
- package/skills/content/mermaid/SKILL.md +635 -0
- package/skills/content/mermaid/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/LICENSE +3 -0
- package/skills/content/wechat-article-writer/SKILL.md +92 -0
- package/skills/content/wechat-article-writer/references/style-selector.md +133 -0
- package/skills/content/wechat-article-writer/references/writing-rules.md +152 -0
- package/skills/content/wechat-article-writer/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/templates/wechat-comparison.md +52 -0
- package/skills/content/wechat-article-writer/templates/wechat-howto.md +51 -0
- package/skills/content/wechat-article-writer/templates/wechat-insight.md +50 -0
- package/skills/content/wechat-article-writer/templates/wechat-pitfall.md +52 -0
- package/skills/content/wechat-publisher/LICENSE +3 -0
- package/skills/content/wechat-publisher/SKILL.md +171 -0
- package/skills/content/wechat-publisher/references/api.md +105 -0
- package/skills/content/wechat-publisher/references/layout-rules.md +57 -0
- package/skills/content/wechat-publisher/references/wechat-safe-template.html +86 -0
- package/skills/content/wechat-publisher/release-check.mjs +93 -0
- package/skills/content/wechat-publisher/scripts/md_to_wechat_html.py +194 -0
- package/skills/content/wechat-publisher/scripts/publish.py +239 -0
- package/skills/content/wechat-search/LICENSE +3 -0
- package/skills/content/wechat-search/SKILL.md +211 -0
- package/skills/content/wechat-search/release-check.mjs +93 -0
- package/skills/content/wechat-search/scripts/start-chrome.sh +83 -0
- package/skills/content/xai-search/LICENSE +3 -0
- package/skills/content/xai-search/SKILL.md +79 -0
- package/skills/content/xai-search/release-check.mjs +93 -0
- package/skills/content/xai-search/scripts/xai_search.sh +187 -0
- package/skills/content/xai-search/tests/smoke_test.sh +36 -0
- package/skills/core/distill-writing/LICENSE +3 -0
- package/skills/core/distill-writing/SKILL.md +74 -0
- package/skills/core/distill-writing/references/extraction.md +95 -0
- package/skills/core/distill-writing/references/updating.md +46 -0
- package/skills/core/distill-writing/release-check.mjs +93 -0
- package/skills/core/doc-to-md/LICENSE +3 -0
- package/skills/core/doc-to-md/SKILL.md +78 -0
- package/skills/core/doc-to-md/release-check.mjs +93 -0
- package/skills/core/doc-to-md/scripts/convert.py +157 -0
- package/skills/core/editorial-review/LICENSE +3 -0
- package/skills/core/editorial-review/SKILL.md +79 -0
- package/skills/core/editorial-review/references/checklist.md +94 -0
- package/skills/core/editorial-review/release-check.mjs +93 -0
- package/skills/core/house-style/LICENSE +3 -0
- package/skills/core/house-style/SKILL.md +33 -0
- package/skills/core/house-style/references/defaults.md +66 -0
- package/skills/core/house-style/references/rules.md +267 -0
- package/skills/core/house-style/references/sources.md +27 -0
- package/skills/core/house-style/references/style-en.md +131 -0
- package/skills/core/house-style/references/style-zh.md +141 -0
- package/skills/core/house-style/references/terminology-zh.md +223 -0
- package/skills/core/house-style/release-check.mjs +93 -0
- package/skills/core/house-style/templates/brd.md +103 -0
- package/skills/core/house-style/templates/commercial-proposal.md +93 -0
- package/skills/core/house-style/templates/compliance-policy.md +109 -0
- package/skills/core/house-style/templates/gap-analysis.md +105 -0
- package/skills/core/house-style/templates/general.md +63 -0
- package/skills/core/house-style/templates/integration-guide.md +98 -0
- package/skills/core/house-style/templates/prd.md +81 -0
- package/skills/core/house-style/templates/risk-operations-procedure.md +94 -0
- package/skills/core/house-style/templates/technical-spec.md +96 -0
- package/skills/core/polish-cn/LICENSE +3 -0
- package/skills/core/polish-cn/SKILL.md +102 -0
- package/skills/core/polish-cn/references/brief.md +93 -0
- package/skills/core/polish-cn/references/models.md +76 -0
- package/skills/core/polish-cn/release-check.mjs +93 -0
- package/skills/core/polish-cn/scripts/polish-cn.test.mjs +244 -0
- package/skills/core/polish-cn/scripts/polish_blocks.py +489 -0
- package/skills/core/reg-parser/LICENSE +3 -0
- package/skills/core/reg-parser/SKILL.md +212 -0
- package/skills/core/reg-parser/references/checklist-schema.md +223 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.json +1306 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.md +469 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.json +634 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.md +233 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.json +2194 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.md +771 -0
- package/skills/core/reg-parser/references/checklists/kyc-aml-checklist.md +258 -0
- package/skills/core/reg-parser/references/checklists/visa-vars-checklist.md +1058 -0
- package/skills/core/reg-parser/references/mandates/hk-amlo-cap615.md +389 -0
- package/skills/core/reg-parser/references/mandates/visa-vars.md +205 -0
- package/skills/core/reg-parser/release-check.mjs +93 -0
- package/skills/core/reg-parser/scripts/compare_checklist.py +230 -0
- package/skills/core/reg-parser/scripts/dump_checklist.py +361 -0
- package/skills/core/reg-parser/scripts/preprocess-mandate.sh +187 -0
- package/skills/core/reg-parser/scripts/reg-parser.test.mjs +165 -0
- package/skills/core/reg-parser/scripts/test_quarantine.sh +105 -0
- package/skills/core/reg-parser/scripts/validate_checklist.py +563 -0
- package/skills/core/reg-parser/scripts/validate_mandate.py +273 -0
- package/skills/core/terminology/LICENSE +3 -0
- package/skills/core/terminology/SKILL.md +62 -0
- package/skills/core/terminology/references/format.md +50 -0
- package/skills/core/terminology/references/init.md +32 -0
- package/skills/core/terminology/release-check.mjs +93 -0
- package/skills/core/write-doc/LICENSE +3 -0
- package/skills/core/write-doc/SKILL.md +141 -0
- package/skills/core/write-doc/references/bilingual.md +60 -0
- package/skills/core/write-doc/release-check.mjs +93 -0
- package/skills/engineering/better-review/LICENSE +3 -0
- package/skills/engineering/better-review/SKILL.md +249 -0
- package/skills/engineering/better-review/agents/openai.yaml +9 -0
- package/skills/engineering/better-review/references/domain-hazards.md +53 -0
- package/skills/engineering/better-review/references/passes.md +147 -0
- package/skills/engineering/better-review/references/result.md +151 -0
- package/skills/engineering/better-review/release-check.mjs +93 -0
- package/skills/engineering/better-review/scripts/pr-context.mjs +212 -0
- package/skills/engineering/better-review/scripts/pr-context.test.mjs +168 -0
- package/skills/engineering/better-review/scripts/rereview-scope.mjs +503 -0
- package/skills/engineering/better-review/scripts/rereview-scope.test.mjs +587 -0
- package/skills/engineering/better-review/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/better-review/scripts/scan-diff.test.mjs +414 -0
- package/skills/engineering/better-review/scripts/vendor-sync.test.mjs +96 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +98 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +24 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +73 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +144 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +25 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +290 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +104 -0
- package/skills/engineering/e2e-test/references/reviewing.md +41 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +51 -0
- package/skills/engineering/e2e-test/release-check.mjs +93 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.test.mjs +106 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.test.mjs +117 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.test.mjs +69 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.test.mjs +98 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +147 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.test.mjs +71 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.test.mjs +59 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +82 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.test.mjs +76 -0
- package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
- package/skills/engineering/engineering-runtime/LICENSE +3 -0
- package/skills/engineering/engineering-runtime/SKILL.md +11 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +597 -0
- package/skills/engineering/engineering-runtime/engineering-runtime.test.mjs +68 -0
- package/skills/engineering/engineering-runtime/release-check.mjs +93 -0
- package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
- package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.mjs +187 -0
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.test.mjs +95 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +79 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.test.mjs +288 -0
- package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
- package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
- package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.test.mjs +96 -0
- package/skills/engineering/engineering-runtime/scripts/review-completion.mjs +56 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +595 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +189 -0
- package/skills/engineering/engineering-runtime/scripts/yaml-mapping.mjs +18 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +129 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +92 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +85 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
- package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +19 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +57 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +39 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +44 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +110 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +35 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +64 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +27 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +56 -0
- package/skills/engineering/ensure-coverage/release-check.mjs +93 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +67 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +140 -0
- package/skills/engineering/ensure-coverage/scripts/README.md +99 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +182 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.test.mjs +96 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +105 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.test.mjs +47 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +137 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.test.mjs +86 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +674 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.test.mjs +447 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.test.mjs +552 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +282 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.test.mjs +289 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/golden-path/LICENSE +3 -0
- package/skills/engineering/golden-path/SKILL.md +230 -0
- package/skills/engineering/golden-path/agents/openai.yaml +3 -0
- package/skills/engineering/golden-path/assets/golden-paths.example.json +57 -0
- package/skills/engineering/golden-path/references/contract.md +239 -0
- package/skills/engineering/golden-path/references/migration.md +111 -0
- package/skills/engineering/golden-path/release-check.mjs +93 -0
- package/skills/engineering/golden-path/scripts/golden-path-core.mjs +1779 -0
- package/skills/engineering/golden-path/scripts/golden-path.mjs +6 -0
- package/skills/engineering/golden-path/scripts/golden-path.test.mjs +1457 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +19 -0
- package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
- package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
- package/skills/engineering/harness-runtime/contracts.md +15 -0
- package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
- package/skills/engineering/harness-runtime/discover-models.test.mjs +363 -0
- package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
- package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
- package/skills/engineering/harness-runtime/harness-runtime.test.mjs +967 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +829 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/model-catalog.test.mjs +366 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +408 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/harness-runtime/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +250 -0
- package/skills/engineering/resolve-issues/agents/openai.yaml +9 -0
- package/skills/engineering/resolve-issues/plugin-hooks.json +17 -0
- package/skills/engineering/resolve-issues/references/canary.md +28 -0
- package/skills/engineering/resolve-issues/references/ci.md +105 -0
- package/skills/engineering/resolve-issues/references/done.md +25 -0
- package/skills/engineering/resolve-issues/references/dropbox.md +90 -0
- package/skills/engineering/resolve-issues/references/expire.md +318 -0
- package/skills/engineering/resolve-issues/references/exploration.md +202 -0
- package/skills/engineering/resolve-issues/references/implementation.md +303 -0
- package/skills/engineering/resolve-issues/references/preflight.md +445 -0
- package/skills/engineering/resolve-issues/references/review.md +228 -0
- package/skills/engineering/resolve-issues/references/shared-modules.md +44 -0
- package/skills/engineering/resolve-issues/references/task-plan.md +264 -0
- package/skills/engineering/resolve-issues/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +364 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.test.mjs +280 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.mjs +473 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.test.mjs +346 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.test.mjs +88 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.mjs +384 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.test.mjs +264 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.mjs +135 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.test.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.mjs +162 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.test.mjs +107 -0
- package/skills/engineering/resolve-issues/scripts/manual-invocation.test.mjs +14 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-actions-capacity.test.mjs +149 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +856 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.test.mjs +915 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.mjs +269 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.test.mjs +156 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.mjs +736 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +448 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.mjs +185 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.test.mjs +217 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.test.mjs +91 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +509 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.test.mjs +1060 -0
- package/skills/engineering/resolve-issues/scripts/size-check.mjs +492 -0
- package/skills/engineering/resolve-issues/scripts/size-check.test.mjs +458 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +215 -0
- package/skills/engineering/resolve-release/agents/openai.yaml +8 -0
- package/skills/engineering/resolve-release/flows/cloud-run-canary.md +13 -0
- package/skills/engineering/resolve-release/flows/cloud-run.md +7 -0
- package/skills/engineering/resolve-release/flows/root-tag-npm.md +13 -0
- package/skills/engineering/resolve-release/flows/workspace-npm.md +22 -0
- package/skills/engineering/resolve-release/references/canary.md +51 -0
- package/skills/engineering/resolve-release/references/candidate.md +41 -0
- package/skills/engineering/resolve-release/references/cut.md +131 -0
- package/skills/engineering/resolve-release/references/dark-launch.md +66 -0
- package/skills/engineering/resolve-release/references/flows.md +150 -0
- package/skills/engineering/resolve-release/references/preflight.md +154 -0
- package/skills/engineering/resolve-release/references/prepared-metadata.md +260 -0
- package/skills/engineering/resolve-release/references/promotion.md +82 -0
- package/skills/engineering/resolve-release/references/publish.md +232 -0
- package/skills/engineering/resolve-release/references/workspace-npm.md +103 -0
- package/skills/engineering/resolve-release/release-check.mjs +93 -0
- package/skills/engineering/resolve-release/scripts/apply.mjs +212 -0
- package/skills/engineering/resolve-release/scripts/apply.test.mjs +99 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.mjs +134 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.test.mjs +100 -0
- package/skills/engineering/resolve-release/scripts/flow.mjs +500 -0
- package/skills/engineering/resolve-release/scripts/flow.test.mjs +340 -0
- package/skills/engineering/resolve-release/scripts/green-head.mjs +231 -0
- package/skills/engineering/resolve-release/scripts/green-head.test.mjs +101 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.mjs +138 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.test.mjs +426 -0
- package/skills/engineering/resolve-release/scripts/plan-npm.test.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/plan-toml-boundary.test.mjs +317 -0
- package/skills/engineering/resolve-release/scripts/plan-uv.test.mjs +291 -0
- package/skills/engineering/resolve-release/scripts/plan.mjs +806 -0
- package/skills/engineering/resolve-release/scripts/plan.test.mjs +428 -0
- package/skills/engineering/rush-issues/LICENSE +3 -0
- package/skills/engineering/rush-issues/SKILL.md +58 -0
- package/skills/engineering/rush-issues/agents/openai.yaml +8 -0
- package/skills/engineering/rush-issues/rehydrate.mjs +10 -0
- package/skills/engineering/rush-issues/release-check.mjs +93 -0
- package/skills/engineering/rush-release/LICENSE +3 -0
- package/skills/engineering/rush-release/SKILL.md +35 -0
- package/skills/engineering/rush-release/agents/openai.yaml +8 -0
- package/skills/engineering/rush-release/release-check.mjs +93 -0
- package/skills/engineering/test-quality/LICENSE +3 -0
- package/skills/engineering/test-quality/SKILL.md +79 -0
- package/skills/engineering/test-quality/references/audit.md +80 -0
- package/skills/engineering/test-quality/references/lint.md +24 -0
- package/skills/engineering/test-quality/references/principles.md +143 -0
- package/skills/engineering/test-quality/references/testing-conventions.md +9 -0
- package/skills/engineering/test-quality/release-check.mjs +93 -0
- package/skills/engineering/test-quality/scripts/lint-tests.mjs +574 -0
- package/skills/engineering/test-quality/scripts/lint-tests.test.mjs +591 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/test-quality/scripts/persist-conventions-core.mjs +117 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.mjs +17 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.test.mjs +104 -0
- package/skills/risk-compliance/compliance-audit/LICENSE +3 -0
- package/skills/risk-compliance/compliance-audit/SKILL.md +439 -0
- package/skills/risk-compliance/compliance-audit/references/findings-schema.md +293 -0
- package/skills/risk-compliance/compliance-audit/references/normalization-rules.md +45 -0
- package/skills/risk-compliance/compliance-audit/references/vars-checklist.md +1068 -0
- package/skills/risk-compliance/compliance-audit/references/vars-findings-schema.md +398 -0
- package/skills/risk-compliance/compliance-audit/release-check.mjs +93 -0
- package/skills/risk-compliance/compliance-audit/scripts/compliance-audit.test.mjs +14 -0
- package/skills/risk-compliance/compliance-audit/scripts/export_tracker_xlsx.py +221 -0
- package/skills/risk-compliance/compliance-audit/scripts/reconcile_tracker.py +458 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_export_tracker_xlsx.py +97 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_validate_tracker.py +157 -0
- package/skills/risk-compliance/compliance-audit/scripts/validate_tracker.py +829 -0
- package/skills/risk-compliance/contract-compare/LICENSE +3 -0
- package/skills/risk-compliance/contract-compare/SKILL.md +199 -0
- package/skills/risk-compliance/contract-compare/references/comparison-dimensions.md +209 -0
- package/skills/risk-compliance/contract-compare/release-check.mjs +93 -0
- package/skills/risk-compliance/contract-review/LICENSE +3 -0
- package/skills/risk-compliance/contract-review/SKILL.md +240 -0
- package/skills/risk-compliance/contract-review/references/review-criteria.md +223 -0
- package/skills/risk-compliance/contract-review/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/LICENSE +3 -0
- package/skills/risk-compliance/doc-authenticity/SKILL.md +160 -0
- package/skills/risk-compliance/doc-authenticity/agents/openai.yaml +8 -0
- package/skills/risk-compliance/doc-authenticity/manual-invocation.test.mjs +12 -0
- package/skills/risk-compliance/doc-authenticity/references/agreement.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/bank-statement.md +150 -0
- package/skills/risk-compliance/doc-authenticity/references/forensic-signals.md +157 -0
- package/skills/risk-compliance/doc-authenticity/references/image-signals.md +114 -0
- package/skills/risk-compliance/doc-authenticity/references/invoice.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/issuer-profiles.md +86 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict-and-report.md +95 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict.schema.json +81 -0
- package/skills/risk-compliance/doc-authenticity/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/scripts/image_forensics.py +294 -0
- package/skills/risk-compliance/doc-authenticity/scripts/pdf_forensics.py +401 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_codes.py +224 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.py +308 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.test.mjs +212 -0
- package/skills/risk-compliance/fraud-analysis/LICENSE +3 -0
- package/skills/risk-compliance/fraud-analysis/SKILL.md +114 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/authorized-payment-scam.md +41 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/first-party-fraud.md +44 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +27 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/bank-transfer.md +24 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +30 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/feature-engineering.md +158 -0
- package/skills/risk-compliance/fraud-analysis/references/mechanisms/account-takeover.md +36 -0
- package/skills/risk-compliance/fraud-analysis/references/report-rationale.md +45 -0
- package/skills/risk-compliance/fraud-analysis/references/report-template.md +190 -0
- package/skills/risk-compliance/fraud-analysis/references/review-checklist.md +175 -0
- package/skills/risk-compliance/fraud-analysis/references/taxonomy.md +79 -0
- package/skills/risk-compliance/fraud-analysis/references/terminology.md +108 -0
- package/skills/risk-compliance/fraud-analysis/references/workflow.md +175 -0
- package/skills/risk-compliance/fraud-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/payment-analysis/LICENSE +3 -0
- package/skills/risk-compliance/payment-analysis/SKILL.md +180 -0
- package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +30 -0
- package/skills/risk-compliance/payment-analysis/references/chargebacks.md +208 -0
- package/skills/risk-compliance/payment-analysis/references/chinese-polish.md +51 -0
- package/skills/risk-compliance/payment-analysis/references/event-layers.md +127 -0
- package/skills/risk-compliance/payment-analysis/references/fx.md +59 -0
- package/skills/risk-compliance/payment-analysis/references/journey.md +79 -0
- package/skills/risk-compliance/payment-analysis/references/metrics.md +67 -0
- package/skills/risk-compliance/payment-analysis/references/report-template.md +119 -0
- package/skills/risk-compliance/payment-analysis/references/terminology.md +95 -0
- package/skills/risk-compliance/payment-analysis/references/visualization.md +56 -0
- package/skills/risk-compliance/payment-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/report-writing/LICENSE +3 -0
- package/skills/risk-compliance/report-writing/SKILL.md +220 -0
- package/skills/risk-compliance/report-writing/references/audit-report-template.md +121 -0
- package/skills/risk-compliance/report-writing/references/external-assessment-template.md +167 -0
- package/skills/risk-compliance/report-writing/references/management-report-template.md +145 -0
- package/skills/risk-compliance/report-writing/references/vars-report-template.md +224 -0
- package/skills/risk-compliance/report-writing/release-check.mjs +93 -0
- package/skills/risk-compliance/similar-domain/LICENSE +3 -0
- package/skills/risk-compliance/similar-domain/SKILL.md +203 -0
- package/skills/risk-compliance/similar-domain/references/entities.md +67 -0
- package/skills/risk-compliance/similar-domain/references/fingerprints.md +134 -0
- package/skills/risk-compliance/similar-domain/references/pivots.md +82 -0
- package/skills/risk-compliance/similar-domain/references/report-template.md +93 -0
- package/skills/risk-compliance/similar-domain/references/scoring.md +130 -0
- package/skills/risk-compliance/similar-domain/references/terminology.md +41 -0
- package/skills/risk-compliance/similar-domain/references/workflow.md +85 -0
- package/skills/risk-compliance/similar-domain/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/LICENSE +3 -0
- package/skills/risk-compliance/tld-detection/SKILL.md +245 -0
- package/skills/risk-compliance/tld-detection/agents/openai.yaml +9 -0
- package/skills/risk-compliance/tld-detection/references/chinese-polish.md +55 -0
- package/skills/risk-compliance/tld-detection/references/clean.md +51 -0
- package/skills/risk-compliance/tld-detection/references/clustering.md +235 -0
- package/skills/risk-compliance/tld-detection/references/decision.md +189 -0
- package/skills/risk-compliance/tld-detection/references/fx-conversion.md +232 -0
- package/skills/risk-compliance/tld-detection/references/report-template.md +272 -0
- package/skills/risk-compliance/tld-detection/references/streams.md +141 -0
- package/skills/risk-compliance/tld-detection/references/terminology.md +95 -0
- package/skills/risk-compliance/tld-detection/references/workflow.md +95 -0
- package/skills/risk-compliance/tld-detection/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +390 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +650 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/tests/test_detect_ladders.py +134 -0
- package/skills/risk-compliance/tld-detection/tests/test_detect_streams.py +520 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// @covers doc-authenticity:routed-verdict-contract
|
|
2
|
+
// @level integration
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
import { dirname, join } from 'node:path';
|
|
8
|
+
import { test } from 'node:test';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
|
|
11
|
+
const SCRIPTS = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const VALIDATOR = join(SCRIPTS, 'validate_verdict.py');
|
|
13
|
+
const VALIDITY_IDS = {
|
|
14
|
+
bank_statement: [...Array.from({ length: 5 }, (_, i) => `C${i + 1}`), ...Array.from({ length: 5 }, (_, i) => `D${i + 1}`)],
|
|
15
|
+
invoice: Array.from({ length: 8 }, (_, i) => `N${i + 1}`),
|
|
16
|
+
agreement: Array.from({ length: 8 }, (_, i) => `A${i + 1}`),
|
|
17
|
+
conversation_log: [],
|
|
18
|
+
other: [],
|
|
19
|
+
};
|
|
20
|
+
const CONTENT_IDS = new Set([
|
|
21
|
+
...Array.from({ length: 5 }, (_, i) => `C${i + 1}`),
|
|
22
|
+
'N2', 'N3', 'N4', 'N7',
|
|
23
|
+
'A2', 'A4', 'A5', 'A7',
|
|
24
|
+
]);
|
|
25
|
+
|
|
26
|
+
function check(id) {
|
|
27
|
+
const authenticity = id.startsWith('F') || id.startsWith('I');
|
|
28
|
+
return {
|
|
29
|
+
id,
|
|
30
|
+
name: `Check ${id}`,
|
|
31
|
+
axis: authenticity ? 'authenticity' : 'validity',
|
|
32
|
+
dimension: authenticity ? 'file_forensics' : CONTENT_IDS.has(id) ? 'content' : 'domain',
|
|
33
|
+
result: 'PASS',
|
|
34
|
+
decisive: false,
|
|
35
|
+
evidence: `Concrete evidence for ${id}.`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function verdict(fileType, docType) {
|
|
40
|
+
const prefix = fileType === 'pdf' ? 'F' : 'I';
|
|
41
|
+
const authIds = Array.from({ length: 9 }, (_, i) => `${prefix}${i + 1}`);
|
|
42
|
+
const validityIds = VALIDITY_IDS[docType];
|
|
43
|
+
return {
|
|
44
|
+
schema_version: '2.2',
|
|
45
|
+
artifact: {
|
|
46
|
+
path: `/tmp/${fileType}-${docType}`,
|
|
47
|
+
file_type: fileType,
|
|
48
|
+
media_type: fileType === 'pdf' ? 'application/pdf' : 'image/jpeg',
|
|
49
|
+
size_bytes: 1234,
|
|
50
|
+
sha256: 'a'.repeat(64),
|
|
51
|
+
extension_magic_match: true,
|
|
52
|
+
doc_type: docType,
|
|
53
|
+
detail: 'route fixture',
|
|
54
|
+
claimed_issuer: null,
|
|
55
|
+
supplied_claim: 'Test document.',
|
|
56
|
+
},
|
|
57
|
+
authenticity: {
|
|
58
|
+
verdict: 'NO_EVIDENCE_OF_MODIFICATION',
|
|
59
|
+
confidence: 'MEDIUM',
|
|
60
|
+
summary: 'No modification evidence.',
|
|
61
|
+
},
|
|
62
|
+
validity: {
|
|
63
|
+
verdict: validityIds.length ? 'VALID' : 'INCONCLUSIVE',
|
|
64
|
+
confidence: 'LOW',
|
|
65
|
+
summary: 'Validity route result.',
|
|
66
|
+
},
|
|
67
|
+
checks: [...authIds, ...validityIds].map(check),
|
|
68
|
+
summary: 'Route test.',
|
|
69
|
+
checked_at: '2026-09-03T13:30:00+08:00',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function runValidator(directory, name, value) {
|
|
74
|
+
const path = join(directory, `${name}.json`);
|
|
75
|
+
writeFileSync(path, `${JSON.stringify(value)}\n`);
|
|
76
|
+
return spawnSync('python3', [VALIDATOR, path], { encoding: 'utf8' });
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
test('all file-type and document-type routes require the correct check set', () => {
|
|
80
|
+
const directory = mkdtempSync(join(tmpdir(), 'doc-auth-routes-'));
|
|
81
|
+
try {
|
|
82
|
+
for (const fileType of ['pdf', 'image']) {
|
|
83
|
+
for (const docType of Object.keys(VALIDITY_IDS)) {
|
|
84
|
+
const result = runValidator(directory, `${fileType}-${docType}`, verdict(fileType, docType));
|
|
85
|
+
assert.equal(result.status, 0, `${fileType}/${docType}: ${result.stdout}${result.stderr}`);
|
|
86
|
+
assert.match(result.stdout, new RegExp(`valid: ${fileType}/${docType} route`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} finally {
|
|
90
|
+
rmSync(directory, { recursive: true, force: true });
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test('conversation logs and other documents cannot claim specialized validity', () => {
|
|
95
|
+
const directory = mkdtempSync(join(tmpdir(), 'doc-auth-no-validity-'));
|
|
96
|
+
try {
|
|
97
|
+
for (const docType of ['conversation_log', 'other']) {
|
|
98
|
+
const value = verdict('image', docType);
|
|
99
|
+
value.validity.verdict = 'VALID';
|
|
100
|
+
const result = runValidator(directory, docType, value);
|
|
101
|
+
assert.notEqual(result.status, 0);
|
|
102
|
+
assert.match(result.stdout, /validity verdict must be INCONCLUSIVE/);
|
|
103
|
+
}
|
|
104
|
+
} finally {
|
|
105
|
+
rmSync(directory, { recursive: true, force: true });
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test('missing and cross-profile validity checks fail closed', () => {
|
|
110
|
+
const directory = mkdtempSync(join(tmpdir(), 'doc-auth-invalid-route-'));
|
|
111
|
+
try {
|
|
112
|
+
const missing = verdict('pdf', 'invoice');
|
|
113
|
+
missing.checks = missing.checks.filter(({ id }) => id !== 'N8');
|
|
114
|
+
const missingResult = runValidator(directory, 'missing-invoice-check', missing);
|
|
115
|
+
assert.notEqual(missingResult.status, 0);
|
|
116
|
+
assert.match(missingResult.stdout, /missing checks: \['N8'\]/);
|
|
117
|
+
|
|
118
|
+
const mixed = verdict('image', 'agreement');
|
|
119
|
+
mixed.checks.push(check('N1'));
|
|
120
|
+
const mixedResult = runValidator(directory, 'mixed-agreement-check', mixed);
|
|
121
|
+
assert.notEqual(mixedResult.status, 0);
|
|
122
|
+
assert.match(mixedResult.stdout, /checks do not belong to the selected route: \['N1'\]/);
|
|
123
|
+
} finally {
|
|
124
|
+
rmSync(directory, { recursive: true, force: true });
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test('artifact audit fields and checked_at timezone are mandatory', () => {
|
|
129
|
+
const directory = mkdtempSync(join(tmpdir(), 'doc-auth-artifact-'));
|
|
130
|
+
try {
|
|
131
|
+
const missingAudit = verdict('pdf', 'invoice');
|
|
132
|
+
delete missingAudit.artifact.sha256;
|
|
133
|
+
const missingResult = runValidator(directory, 'missing-hash', missingAudit);
|
|
134
|
+
assert.notEqual(missingResult.status, 0);
|
|
135
|
+
assert.match(missingResult.stdout, /artifact missing keys: \['sha256'\]/);
|
|
136
|
+
|
|
137
|
+
const badTimestamp = verdict('pdf', 'invoice');
|
|
138
|
+
badTimestamp.checked_at = '2026-99-99T13:30:00';
|
|
139
|
+
const timestampResult = runValidator(directory, 'bad-timestamp', badTimestamp);
|
|
140
|
+
assert.notEqual(timestampResult.status, 0);
|
|
141
|
+
assert.match(timestampResult.stdout, /valid ISO 8601 timestamp with timezone/);
|
|
142
|
+
} finally {
|
|
143
|
+
rmSync(directory, { recursive: true, force: true });
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test('authenticity verdict must match decisive, FAIL, FLAG, and NA thresholds', () => {
|
|
148
|
+
const directory = mkdtempSync(join(tmpdir(), 'doc-auth-rubric-'));
|
|
149
|
+
try {
|
|
150
|
+
const tooManyFlags = verdict('pdf', 'other');
|
|
151
|
+
for (const id of ['F1', 'F2', 'F3']) tooManyFlags.checks.find((item) => item.id === id).result = 'FLAG';
|
|
152
|
+
const flagsResult = runValidator(directory, 'flags', tooManyFlags);
|
|
153
|
+
assert.notEqual(flagsResult.status, 0);
|
|
154
|
+
assert.match(flagsResult.stdout, /authenticity verdict must be SUSPICIOUS/);
|
|
155
|
+
|
|
156
|
+
const unavailable = verdict('pdf', 'other');
|
|
157
|
+
for (const id of ['F1', 'F2', 'F3', 'F4', 'F5']) unavailable.checks.find((item) => item.id === id).result = 'NA';
|
|
158
|
+
const unavailableResult = runValidator(directory, 'unavailable', unavailable);
|
|
159
|
+
assert.notEqual(unavailableResult.status, 0);
|
|
160
|
+
assert.match(unavailableResult.stdout, /authenticity verdict must be INCONCLUSIVE/);
|
|
161
|
+
|
|
162
|
+
const decisive = verdict('image', 'other');
|
|
163
|
+
decisive.authenticity.verdict = 'LIKELY_MODIFIED';
|
|
164
|
+
const splice = decisive.checks.find((item) => item.id === 'I7');
|
|
165
|
+
splice.result = 'FAIL';
|
|
166
|
+
splice.decisive = true;
|
|
167
|
+
const decisiveResult = runValidator(directory, 'decisive', decisive);
|
|
168
|
+
assert.equal(decisiveResult.status, 0, decisiveResult.stdout);
|
|
169
|
+
} finally {
|
|
170
|
+
rmSync(directory, { recursive: true, force: true });
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test('validity verdict must match decisive, FAIL, FLAG, and NA thresholds', () => {
|
|
175
|
+
const directory = mkdtempSync(join(tmpdir(), 'doc-validity-rubric-'));
|
|
176
|
+
try {
|
|
177
|
+
const unavailable = verdict('pdf', 'invoice');
|
|
178
|
+
unavailable.validity.verdict = 'INCONCLUSIVE';
|
|
179
|
+
for (const id of ['N1', 'N2', 'N3', 'N4']) unavailable.checks.find((item) => item.id === id).result = 'NA';
|
|
180
|
+
const unavailableResult = runValidator(directory, 'unavailable-validity', unavailable);
|
|
181
|
+
assert.equal(unavailableResult.status, 0, unavailableResult.stdout);
|
|
182
|
+
|
|
183
|
+
const decisive = verdict('pdf', 'agreement');
|
|
184
|
+
decisive.validity.verdict = 'INVALID';
|
|
185
|
+
const conflict = decisive.checks.find((item) => item.id === 'A4');
|
|
186
|
+
conflict.result = 'FAIL';
|
|
187
|
+
conflict.decisive = true;
|
|
188
|
+
const decisiveResult = runValidator(directory, 'decisive-validity', decisive);
|
|
189
|
+
assert.equal(decisiveResult.status, 0, decisiveResult.stdout);
|
|
190
|
+
|
|
191
|
+
const invalidDecisive = verdict('pdf', 'invoice');
|
|
192
|
+
invalidDecisive.checks.find((item) => item.id === 'N1').decisive = true;
|
|
193
|
+
const invalidResult = runValidator(directory, 'decisive-pass', invalidDecisive);
|
|
194
|
+
assert.notEqual(invalidResult.status, 0);
|
|
195
|
+
assert.match(invalidResult.stdout, /only a FAIL can be decisive/);
|
|
196
|
+
} finally {
|
|
197
|
+
rmSync(directory, { recursive: true, force: true });
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
test('the schema advertises every routed document type and check family', () => {
|
|
202
|
+
const schema = JSON.parse(readFileSync(join(SCRIPTS, '..', 'references', 'verdict.schema.json'), 'utf8'));
|
|
203
|
+
assert.deepEqual(
|
|
204
|
+
schema.properties.artifact.properties.doc_type.enum,
|
|
205
|
+
['bank_statement', 'conversation_log', 'invoice', 'agreement', 'other'],
|
|
206
|
+
);
|
|
207
|
+
assert.equal(schema.properties.schema_version.const, '2.2');
|
|
208
|
+
assert.ok(schema.properties.artifact.required.includes('sha256'));
|
|
209
|
+
assert.ok(schema.$defs.check.required.includes('decisive'));
|
|
210
|
+
assert.match(schema.$defs.check.properties.id.pattern, /N\[1-8\]/);
|
|
211
|
+
assert.match(schema.$defs.check.properties.id.pattern, /A\[1-8\]/);
|
|
212
|
+
});
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fraud-analysis
|
|
3
|
+
description: >
|
|
4
|
+
Analyze tabular payment, transfer, collection, payout, account, or fraud-case
|
|
5
|
+
data (CSV, XLSX, TXT) to find interpretable features and operable risk rules.
|
|
6
|
+
Supports third-party fraud (including stolen credentials and account takeover),
|
|
7
|
+
first-party fraud or deliberate account abuse, and authorized payment scams
|
|
8
|
+
(including APP scams), across card payments, collections, bank transfers, and
|
|
9
|
+
payouts. Produces temporal holdout metrics, domain-appropriate actions, strategy
|
|
10
|
+
impact, and a business report. Use for fraud, scam, mule, account-takeover,
|
|
11
|
+
chargeback, dispute, transfer, collection, or payout risk analysis even when the
|
|
12
|
+
user does not name this skill.
|
|
13
|
+
release-version: 0.36.0
|
|
14
|
+
---
|
|
15
|
+
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
16
|
+
# Fraud Analysis
|
|
17
|
+
|
|
18
|
+
Analyze fraud through composable dimensions rather than treating every case as
|
|
19
|
+
card fraud:
|
|
20
|
+
|
|
21
|
+
- **Archetype** — the genuine customer's relationship to the fraud
|
|
22
|
+
- **Mechanism** — how compromise, deception, or abuse occurred
|
|
23
|
+
- **Context** — the product or money-movement surface where a rule fires
|
|
24
|
+
|
|
25
|
+
Run this **10-step** loop:
|
|
26
|
+
|
|
27
|
+
0. Pre-flight → 1. Profile → 2. Label → 3. Time split → 4. Engineer features →
|
|
28
|
+
5. Shortlist → 6. Score rules → 7. Map actions + packages → 8. Write report →
|
|
29
|
+
9. Review
|
|
30
|
+
|
|
31
|
+
**Produce:** operable rules and portfolio impact in a business report.
|
|
32
|
+
**Do not produce:** a black-box model as the main answer.
|
|
33
|
+
|
|
34
|
+
> Paths under `references/` are relative to this skill directory. Step detail:
|
|
35
|
+
> [references/workflow.md](references/workflow.md).
|
|
36
|
+
|
|
37
|
+
## Required references
|
|
38
|
+
|
|
39
|
+
| File | When |
|
|
40
|
+
|---|---|
|
|
41
|
+
| [references/workflow.md](references/workflow.md) | Every step — full procedure |
|
|
42
|
+
| [references/taxonomy.md](references/taxonomy.md) | Step 1; select archetype, mechanism, and context |
|
|
43
|
+
| [references/feature-engineering.md](references/feature-engineering.md) | Step 4; shared decision-time rules |
|
|
44
|
+
| [references/report-template.md](references/report-template.md) | Step 8; common report contract and overlay selection |
|
|
45
|
+
| [references/terminology.md](references/terminology.md) | Step 8; fixed terms and language proofread |
|
|
46
|
+
| [references/review-checklist.md](references/review-checklist.md) | Step 9; common and selected-profile checks |
|
|
47
|
+
|
|
48
|
+
After Step 1, read only the selected profile references:
|
|
49
|
+
|
|
50
|
+
| Dimension | References |
|
|
51
|
+
|---|---|
|
|
52
|
+
| Archetype | `references/archetypes/<archetype>.md` |
|
|
53
|
+
| Mechanism | `references/mechanisms/<mechanism>.md` when present |
|
|
54
|
+
| Context | `references/contexts/<context>.md` for every selected context |
|
|
55
|
+
|
|
56
|
+
Current packs: archetypes `third-party-fraud`, `first-party-fraud`,
|
|
57
|
+
`authorized-payment-scam`; mechanism `account-takeover`; contexts
|
|
58
|
+
`card-payment`, `payment-collection`, `bank-transfer`, `payout`.
|
|
59
|
+
|
|
60
|
+
## Progress
|
|
61
|
+
|
|
62
|
+
Track a task plan. One item is `in_progress` at a time.
|
|
63
|
+
|
|
64
|
+
1. Pass pre-flight
|
|
65
|
+
2. Select analysis profile
|
|
66
|
+
3. Formalize label
|
|
67
|
+
4. Freeze time split
|
|
68
|
+
5. Engineer candidate features
|
|
69
|
+
6. Select shortlist
|
|
70
|
+
7. Score candidate rules
|
|
71
|
+
8. Map actions and packages
|
|
72
|
+
9. Write business report and proofread language
|
|
73
|
+
10. Independent review
|
|
74
|
+
|
|
75
|
+
Suggested notes: `preflight=…`, `profile=…`, `label=…`, `cut=…`,
|
|
76
|
+
`allowed/excluded=…`, `shortlist=…`, `N rules, holdout|in-sample`,
|
|
77
|
+
`packages=…`, `report=…`, `verdict=…`.
|
|
78
|
+
|
|
79
|
+
## Input
|
|
80
|
+
|
|
81
|
+
CSV / XLSX / TXT; one row per event or case; optional outcome column. A dataset
|
|
82
|
+
may contain more than one event type, but every scored rule needs a declared
|
|
83
|
+
event grain and decision point.
|
|
84
|
+
|
|
85
|
+
## Workflow
|
|
86
|
+
|
|
87
|
+
Follow [references/workflow.md](references/workflow.md) for each step. The map:
|
|
88
|
+
|
|
89
|
+
| Step | Do | Gate |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| 0 Pre-flight | Label provenance; pass / needs-user-input / descriptive-only / blocked | No supervised metrics until pass |
|
|
92
|
+
| 1 Profile | Archetype + mechanism(s) + context(s) from taxonomy | Read selected packs before Step 2 |
|
|
93
|
+
| 2 Label | Formalize positive / negative / unlabeled | Both classes defined before scoring |
|
|
94
|
+
| 3 Time split | Freeze train/holdout before features | No random shuffle as headline |
|
|
95
|
+
| 4 Features | Engineer candidates at decision time | Train-only thresholds |
|
|
96
|
+
| 5 Shortlist | Lift / support / stability / operability | Train only |
|
|
97
|
+
| 6 Score | occurrence → precision → recall on holdout | Headline = holdout |
|
|
98
|
+
| 7 Actions | Map to context packs + strategy packages | Freeze packages before report |
|
|
99
|
+
| 8 Report | Business report per template; grep terminology banned strings | No review process in the file |
|
|
100
|
+
| 9 Review | Checklist + selected packs | Prefer fresh independent reviewer |
|
|
101
|
+
|
|
102
|
+
## Output contract
|
|
103
|
+
|
|
104
|
+
| Item | Requirement |
|
|
105
|
+
|---|---|
|
|
106
|
+
| Analysis profile | Archetype, role, consent, technical authentication, mechanism, context, confidence, grain, decision point |
|
|
107
|
+
| Rule metrics | occurrence → precision → recall; headline window identified |
|
|
108
|
+
| Strategy coverage | triggered count + rate and amount + share, with currency |
|
|
109
|
+
| Domain impact | Measures and denominators from selected context packs only |
|
|
110
|
+
| Uncertainty | Proxy labels, immature outcomes, weak identity links, and unresolved attribution stated |
|
|
111
|
+
| Report file | Business content only; no reviewer model, verdict, or repair log |
|
|
112
|
+
|
|
113
|
+
Steps 0–7 are analysis and its entry gate. Step 8 writes the report. Step 9
|
|
114
|
+
reviews it.
|
package/skills/risk-compliance/fraud-analysis/references/archetypes/authorized-payment-scam.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Archetype: authorized payment scam
|
|
2
|
+
|
|
3
|
+
The genuine customer consents to a payment but is deceived about the recipient
|
|
4
|
+
or purpose. The customer is the victim and is not knowingly party to the fraud.
|
|
5
|
+
|
|
6
|
+
Use subtype `app-scam` only for an authorized push payment, normally a bank
|
|
7
|
+
transfer. Record the scam subtype when supported, such as impersonation,
|
|
8
|
+
purchase, investment, romance, or invoice redirection; do not infer it from
|
|
9
|
+
amount or beneficiary shape alone.
|
|
10
|
+
|
|
11
|
+
## Label guidance
|
|
12
|
+
|
|
13
|
+
Prefer adjudicated scam outcomes. Customer reports, recalls, warnings ignored,
|
|
14
|
+
beneficiary risk, and reimbursement decisions can be useful but may be proxies
|
|
15
|
+
or policy outcomes rather than ground truth. Distinguish scams from civil
|
|
16
|
+
disputes and first-party participation.
|
|
17
|
+
|
|
18
|
+
## Feature families
|
|
19
|
+
|
|
20
|
+
- New beneficiary, beneficiary risk, payee-name mismatch, and counterparty graph
|
|
21
|
+
- Unusual amount, frequency, payment purpose, and deviation from customer history
|
|
22
|
+
- Session/payment journey, warning interaction, confirmation responses, and
|
|
23
|
+
contact-channel changes available before execution
|
|
24
|
+
- Urgency patterns, repeated limit-sized payments, and rapid beneficiary changes
|
|
25
|
+
- Prior complaints or confirmed beneficiary outcomes known before the payment
|
|
26
|
+
|
|
27
|
+
## Actions and impact
|
|
28
|
+
|
|
29
|
+
Potential actions include contextual warning, payee confirmation, customer
|
|
30
|
+
confirmation, cooling-off delay, manual review, transfer hold, or reject where
|
|
31
|
+
policy permits. Measure warning/review/hold volume and value, completion and
|
|
32
|
+
abandonment, review workload, delay, reimbursement exposure, and confirmed scam
|
|
33
|
+
value captured. Do not optimize only for authorization success.
|
|
34
|
+
|
|
35
|
+
## Review overlay
|
|
36
|
+
|
|
37
|
+
- Genuine customer consent and deception are both supported.
|
|
38
|
+
- The customer is not knowingly participating; otherwise route to first-party.
|
|
39
|
+
- APP terminology is used only for push payments.
|
|
40
|
+
- Post-payment reports, recalls, reimbursements, and investigations do not leak.
|
|
41
|
+
- Warnings and holds account for vulnerable-customer and policy considerations.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Archetype: first-party fraud
|
|
2
|
+
|
|
3
|
+
The genuine customer or account holder is the perpetrator or a knowing
|
|
4
|
+
participant who misrepresents, manipulates, or deliberately misuses their own
|
|
5
|
+
account for financial or material gain.
|
|
6
|
+
|
|
7
|
+
## Label guidance
|
|
8
|
+
|
|
9
|
+
Prefer confirmed investigation outcomes that establish knowing participation.
|
|
10
|
+
Operational holds, rapid payout, negative balance, returns, complaints, or mule
|
|
11
|
+
signals are proxies unless the business has validated them as outcomes. State
|
|
12
|
+
whether the target is account misuse, collection abuse, payout abuse, false
|
|
13
|
+
claim, knowing mule activity, or another subtype.
|
|
14
|
+
|
|
15
|
+
Do not classify a deceived, coerced, compromised, or merely unusual customer as
|
|
16
|
+
first-party fraud without evidence of participation. Outcome maturity may extend
|
|
17
|
+
beyond transaction settlement and must be reflected in the split.
|
|
18
|
+
|
|
19
|
+
## Feature families
|
|
20
|
+
|
|
21
|
+
- Account age, identity/KYC state, linked accounts, and shared devices
|
|
22
|
+
- Collection-to-transfer/payout sequence, elapsed time, and value passed through
|
|
23
|
+
- Fan-in, fan-out, counterparty concentration, and beneficiary reuse
|
|
24
|
+
- Balance drain, return/recall history, negative exposure, and claim behavior
|
|
25
|
+
- Deviation from the account's history and cross-account coordinated behavior
|
|
26
|
+
|
|
27
|
+
Graph and network features must be point-in-time snapshots. Investigation
|
|
28
|
+
findings and future counterparties must not leak into earlier rows.
|
|
29
|
+
|
|
30
|
+
## Actions and impact
|
|
31
|
+
|
|
32
|
+
Potential actions include review, reserve, delayed availability, payout hold,
|
|
33
|
+
account restriction, enhanced due diligence, or rejection where authorized by
|
|
34
|
+
policy. Report review workload, legitimate-customer impact, completion/release
|
|
35
|
+
rate, delay, exposure, and confirmed value captured. Do not claim loss prevented
|
|
36
|
+
from a proxy label alone.
|
|
37
|
+
|
|
38
|
+
## Review overlay
|
|
39
|
+
|
|
40
|
+
- Evidence supports knowing participation rather than victimization.
|
|
41
|
+
- Mule status is not inferred from transaction shape alone.
|
|
42
|
+
- Graph features and linked-entity lists are train-fit and point-in-time.
|
|
43
|
+
- Account restrictions and reporting recommendations identify policy and legal
|
|
44
|
+
dependencies.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Archetype: third-party fraud
|
|
2
|
+
|
|
3
|
+
The genuine customer did not consent; an external actor used the customer's
|
|
4
|
+
identity, account, credentials, token, or payment instrument.
|
|
5
|
+
|
|
6
|
+
## Label guidance
|
|
7
|
+
|
|
8
|
+
Prefer confirmed unauthorized-fraud outcomes. Chargebacks, customer claims,
|
|
9
|
+
issuer codes, account compromise flags, and manual decisions may be proxies;
|
|
10
|
+
state their scope and maturity. Do not treat every decline or dispute as fraud.
|
|
11
|
+
|
|
12
|
+
## Useful evidence
|
|
13
|
+
|
|
14
|
+
- Instrument, account, customer, device, IP, email, phone, and session history
|
|
15
|
+
- Deviation from the genuine customer's prior behavior
|
|
16
|
+
- New or shared identifiers, credential failures, and compromise events
|
|
17
|
+
- Transaction velocity, retries, beneficiary novelty, and location changes
|
|
18
|
+
|
|
19
|
+
Use only evidence available at the selected decision point. A current response,
|
|
20
|
+
claim, chargeback, or investigation outcome is not a pre-decision feature.
|
|
21
|
+
|
|
22
|
+
## Actions and review
|
|
23
|
+
|
|
24
|
+
Actions depend on context: block or authenticate a card payment; terminate or
|
|
25
|
+
reauthenticate a compromised session; hold/review a transfer or payout; restrict
|
|
26
|
+
an account where policy permits. Review that technical authentication is not
|
|
27
|
+
used as proof of genuine-customer consent.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Context: bank transfer
|
|
2
|
+
|
|
3
|
+
Typical grains are beneficiary creation, transfer instruction, transfer
|
|
4
|
+
execution, recall, or case. Decision points may be beneficiary setup,
|
|
5
|
+
pre-execution, or post-transfer investigation.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
Beneficiary novelty and age, payee verification, amount deviation, transfer
|
|
10
|
+
velocity, device/session context, customer history, beneficiary/account graph,
|
|
11
|
+
counterparty concentration, and prior confirmed outcomes known at the time.
|
|
12
|
+
|
|
13
|
+
For APP scams, the genuine customer authorizes the push payment while deceived.
|
|
14
|
+
For account takeover, technical authentication may pass without customer consent.
|
|
15
|
+
|
|
16
|
+
## Actions and impact
|
|
17
|
+
|
|
18
|
+
Actions: warning, payee/customer confirmation, reauthentication, cooling-off,
|
|
19
|
+
manual review, hold, reject, or monitor. Measure interventions by count/value,
|
|
20
|
+
completion/abandonment, delay, review workload, recalls/reimbursements, and
|
|
21
|
+
confirmed fraud or scam value captured.
|
|
22
|
+
|
|
23
|
+
Irreversibility and hold authority depend on rail, market, and policy; state the
|
|
24
|
+
applicable assumptions.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Context: card payment
|
|
2
|
+
|
|
3
|
+
Typical grains are authorization attempt, payment attempt, clearing event, or
|
|
4
|
+
dispute. Default decision point for preventive rules is pre-authorization.
|
|
5
|
+
|
|
6
|
+
## Features
|
|
7
|
+
|
|
8
|
+
Amount and currency, network, card type, token/PAN-derived identity, BIN, country,
|
|
9
|
+
channel, entry method, MCC, merchant, device, customer history, and prior-event
|
|
10
|
+
velocity. A masked PAN may be a weak identity key.
|
|
11
|
+
|
|
12
|
+
CVV, AVS, authorization response, and 3DS result are same-response or later
|
|
13
|
+
fields unless the chosen decision point explicitly occurs after them. Issuing
|
|
14
|
+
bank name may be derived; prefer BIN for pre-authorization lists.
|
|
15
|
+
|
|
16
|
+
Fit BIN, country, merchant, and other rate lists on train only. Tiny lists remain
|
|
17
|
+
monitor-only.
|
|
18
|
+
|
|
19
|
+
## Actions and impact
|
|
20
|
+
|
|
21
|
+
Actions: block, require 3DS/additional authentication, route, manual review, or
|
|
22
|
+
monitor. For 3DS scenarios, failed authentication does not enter the subsequent
|
|
23
|
+
authorization denominator. Report authorization success and absolute approval
|
|
24
|
+
change only when measured or under explicit pass/conversion assumptions.
|
|
25
|
+
|
|
26
|
+
## Review overlay
|
|
27
|
+
|
|
28
|
+
- Current CVV/AVS/auth response/3DS result respects decision timing.
|
|
29
|
+
- BIN lists are train-fit; issuer names are operable only if available live.
|
|
30
|
+
- 3DS and authorization denominators are explicit.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Context: payment collection
|
|
2
|
+
|
|
3
|
+
Typical grains are collection attempt, receipt, settlement, return, or linked
|
|
4
|
+
collection-to-outflow sequence. State whether funds are card, bank debit,
|
|
5
|
+
transfer, cash-equivalent, or mixed because timing and reversibility differ.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
Payer and funding-source novelty, amount and velocity, return history, settlement
|
|
10
|
+
state known at decision time, payer concentration, many-payer fan-in, linked
|
|
11
|
+
accounts/devices, account age, and elapsed time from receipt to intended outflow.
|
|
12
|
+
|
|
13
|
+
Do not use a later return, recall, dispute, or investigation outcome to decide an
|
|
14
|
+
earlier collection. Do not describe unsettled or reversible funds as final.
|
|
15
|
+
|
|
16
|
+
## Actions and impact
|
|
17
|
+
|
|
18
|
+
Actions: accept, review, delay availability, reserve, restrict downstream use,
|
|
19
|
+
or reject where supported. Measure accepted/held value, return and loss exposure,
|
|
20
|
+
funds-availability delay, review workload, and legitimate-customer impact.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Context: payout
|
|
2
|
+
|
|
3
|
+
Typical grains are beneficiary setup, payout request, approval, release,
|
|
4
|
+
completion, return, or investigation. State the rule's exact decision point.
|
|
5
|
+
|
|
6
|
+
## Features
|
|
7
|
+
|
|
8
|
+
Beneficiary novelty and sharing, payout velocity and amount, balance-drain ratio,
|
|
9
|
+
time from collection to payout, account age, KYC state, device/account links,
|
|
10
|
+
fan-out, counterparty concentration, prior returns, and point-in-time graph risk.
|
|
11
|
+
|
|
12
|
+
Do not use later payout completion, return, recall, restriction, or investigation
|
|
13
|
+
as a pre-release feature.
|
|
14
|
+
|
|
15
|
+
## Actions and impact
|
|
16
|
+
|
|
17
|
+
Actions: approve, verify, review, delay, hold, reject, restrict account, or
|
|
18
|
+
monitor where policy permits. Measure held/reviewed count and value, payout
|
|
19
|
+
completion, release delay, review workload, legitimate-customer intervention,
|
|
20
|
+
exposure, and confirmed value captured.
|