@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,119 @@
|
|
|
1
|
+
# Report template
|
|
2
|
+
|
|
3
|
+
Save:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
reports/payment-analysis/<scope>_overview.md
|
|
7
|
+
reports/payment-analysis/<scope>_overview.zh.md
|
|
8
|
+
reports/payment-analysis/<scope>_overview.zh.html # preferred when charts
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Follow [visualization.md](visualization.md), [journey.md](journey.md),
|
|
12
|
+
[terminology.md](terminology.md), and [fx.md](fx.md) for amount currency. Omit
|
|
13
|
+
topic sections whose layer is missing, except section 4.8: retain its full-period
|
|
14
|
+
coverage notice/table when chargeback history is unavailable.
|
|
15
|
+
No Markdown bold in report body. After writing, grep banned strings in
|
|
16
|
+
terminology.md.
|
|
17
|
+
|
|
18
|
+
## Required structure
|
|
19
|
+
|
|
20
|
+
English Markdown headings on the left; Chinese HTML / `.zh.md` on the right.
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
# Payment Overview — <main period> # 支付业务概览 — <报告期>
|
|
24
|
+
|
|
25
|
+
## 1. Executive summary # 1. 执行摘要
|
|
26
|
+
## 2. Top statistics # 2. 核心指标
|
|
27
|
+
## 3. Payment journey (Sankey) # 3. 支付旅程(Sankey)
|
|
28
|
+
## 4. Topics # 4. 专题
|
|
29
|
+
### 4.1 Overall transaction volume # 4.1 整体交易量
|
|
30
|
+
### 4.2 Weekly trend # 4.2 周趋势
|
|
31
|
+
### 4.3 Authorization rate # 4.3 授权成功率
|
|
32
|
+
### 4.4 Contribution by BIN country # 4.4 BIN 国家贡献
|
|
33
|
+
### 4.5 Decline by reason code # 4.5 授权拒绝原因贡献
|
|
34
|
+
### 4.6 Decline by BIN country # 4.6 各国授权拒绝结构
|
|
35
|
+
### 4.7 Settlements (when present) # 4.7 结算
|
|
36
|
+
### 4.8 Chargebacks # 4.8 拒付(欺诈与拒付期)
|
|
37
|
+
## 5. Operational impact # 5. 运营影响
|
|
38
|
+
## 6. Appendix # 6. 附录
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Under the title, state the three step-0 periods and the cutoff: main period,
|
|
42
|
+
trend period, fraud & chargeback period (Chinese: 报告期、趋势期、欺诈与拒付期、截至).
|
|
43
|
+
Mark any period taken by default as `default`.
|
|
44
|
+
|
|
45
|
+
HTML uses the Chinese headings. KPI labels, legends, and Sankey node names use
|
|
46
|
+
the glossary in terminology.md (`授权尝试`, `授权成功`, `授权拒绝`,
|
|
47
|
+
`发卡行国家`, `差错`, `产品服务质量`, `Do not honor`).
|
|
48
|
+
|
|
49
|
+
## Chapter requirements
|
|
50
|
+
|
|
51
|
+
### 1. Executive summary / 执行摘要
|
|
52
|
+
|
|
53
|
+
≤5 numbered findings: volume, trend, auth rate, country concentration, main
|
|
54
|
+
decline or settlement/CB driver. Name the period in any finding that is not
|
|
55
|
+
from the main period (e.g. 趋势期内、欺诈与拒付期内).
|
|
56
|
+
|
|
57
|
+
### 2. Top statistics / 核心指标
|
|
58
|
+
|
|
59
|
+
KPI cards / table from auth + settlement: attempts, approvals, auth rate,
|
|
60
|
+
attempt amount, approved amount, sale count/amount, refund count/amount, net
|
|
61
|
+
settled, distinct PAN/BIN/countries, portfolio constants (MID, MCC, provider).
|
|
62
|
+
|
|
63
|
+
Chinese labels: 授权尝试, 授权成功, 授权成功率, 授权成功金额,
|
|
64
|
+
已结算交易笔数, 已结算金额, 退款, 净结算, 发卡行国家.
|
|
65
|
+
|
|
66
|
+
### 3. Payment journey (Sankey) / 支付旅程
|
|
67
|
+
|
|
68
|
+
Count Sankey per [journey.md](journey.md). Caption lists skipped checkpoints
|
|
69
|
+
(e.g. risk decision / 3DS when authentication fields are empty).
|
|
70
|
+
|
|
71
|
+
Collapsed nodes when 3DS/risk are absent:
|
|
72
|
+
|
|
73
|
+
`开始 → 授权 → 授权成功 / 授权拒绝 → 已结算销售 / 授权成功未结算`
|
|
74
|
+
|
|
75
|
+
### 4. Topics / 专题
|
|
76
|
+
|
|
77
|
+
Each topic: short lede + chart(s) + supporting table.
|
|
78
|
+
|
|
79
|
+
| Topic | Minimum viz |
|
|
80
|
+
|---|---|
|
|
81
|
+
| 4.1 Volume | count + amount bars (dual axis) |
|
|
82
|
+
| 4.2 Weekly trend | weekly count + amount bars; auth-rate line; spans the trend period (default `M-5`–`M`) |
|
|
83
|
+
| 4.3 Auth rate | rate line by day (main period) and/or segment |
|
|
84
|
+
| 4.4 BIN country | count + amount bars dual axis; rate line |
|
|
85
|
+
| 4.5 Decline reason | count bars |
|
|
86
|
+
| 4.6 Decline by country | stacked count bars |
|
|
87
|
+
| 4.7 Settlements | sale/refund amount bars; country contribution dual axis |
|
|
88
|
+
| 4.8 Chargebacks | every month of the fraud & chargeback period (default 12) including the report month: monthly normal/pre-dispute/unclassified counts and amounts; reason-category bars; Visa normal 拒付率, separate Visa pre-dispute-rate series, and Mastercard normal monthly 拒付率 per [chargebacks.md](chargebacks.md); preserve all month labels/table rows, leave missing points as gaps, put formulas/coverage caveats under the rate chart |
|
|
89
|
+
|
|
90
|
+
Use both authorization and settlement data when both files are present.
|
|
91
|
+
Section 4.8 always uses the fraud & chargeback period (default `M-11` through
|
|
92
|
+
`M`), independently of the main analysis period. The supporting table includes every month, cases/amounts by
|
|
93
|
+
stage, each rate's numerator and denominator, denominator month, coverage, and
|
|
94
|
+
gap reasons. Mastercard may need sales from `M-12`. Label any extra main-period
|
|
95
|
+
case summary separately. If history is unavailable, preserve the full-period
|
|
96
|
+
coverage table and explain what is missing rather than shrinking the window.
|
|
97
|
+
|
|
98
|
+
### 5. Operational impact / 运营影响
|
|
99
|
+
|
|
100
|
+
Numbered operational takeaways. Do not title this 运营含义. Do not invent
|
|
101
|
+
supervised fraud rules. Choose from
|
|
102
|
+
[auth-rate-actions.md](auth-rate-actions.md) only when the extract supports
|
|
103
|
+
the trigger (SCA → 3DS; high 疑似欺诈 country → 风控拦截 or 3DS; 软性拒绝 →
|
|
104
|
+
retry).
|
|
105
|
+
|
|
106
|
+
### 6. Appendix / 附录
|
|
107
|
+
|
|
108
|
+
Definitions (from terminology.md) and caveats (FX per [fx.md](fx.md),
|
|
109
|
+
issuer country ≠ ship-to, auth rate ≠ capture, journey skips,
|
|
110
|
+
chargeback rates are network-style estimates).
|
|
111
|
+
|
|
112
|
+
## Final Chinese language pass
|
|
113
|
+
|
|
114
|
+
After factual validation, run `editorial-review`, then `polish-cn` for the final
|
|
115
|
+
Chinese polish per [chinese-polish.md](chinese-polish.md).
|
|
116
|
+
Synchronize accepted language across the Chinese artifacts being delivered,
|
|
117
|
+
without adding a format requirement or changing facts/chart data. If both Chinese
|
|
118
|
+
Markdown and HTML are delivered, use the same accepted wording. A glossary grep
|
|
119
|
+
alone does not complete this step.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Terminology
|
|
2
|
+
|
|
3
|
+
Use these terms consistently in payment-analysis reports. Read this file before
|
|
4
|
+
writing English or Chinese copy. After writing, run the proofread step in
|
|
5
|
+
`SKILL.md`.
|
|
6
|
+
|
|
7
|
+
## Canonical glossary
|
|
8
|
+
|
|
9
|
+
| English | Chinese | Do not write |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Attempt | 授权尝试 | 单独的「尝试」;交易;conversion |
|
|
12
|
+
| Approval | 授权成功 | 批准;成功(易与结算混淆) |
|
|
13
|
+
| Auth rate | 授权成功率 | 转化率;单独的「成功率」(首次出现时) |
|
|
14
|
+
| Decline | 授权拒绝 | 全部叫欺诈 |
|
|
15
|
+
| Hard / soft / reject | 硬性拒绝 / 软性拒绝 / 风控拦截 | hard 拦截(指拒绝类型时) |
|
|
16
|
+
| Reason / reason code | 拒绝原因 / 原因码 | |
|
|
17
|
+
| Insufficient funds | 余额不足 | 余额 |
|
|
18
|
+
| Suspected fraud | 疑似欺诈 | 已确认欺诈;正文里写 D102(表内 Pazien 代码可保留) |
|
|
19
|
+
| Invalid expiration date | 有效期无效 | |
|
|
20
|
+
| Security code invalid | 安全码无效 | |
|
|
21
|
+
| Policy reasons | 政策原因 | |
|
|
22
|
+
| Do not honor | Do not honor | 拒绝承兑 |
|
|
23
|
+
| BIN / IIN | BIN / IIN | |
|
|
24
|
+
| BIN country | 发卡行国家 / BIN 国家 | 客户国家;收货国;发卡国 |
|
|
25
|
+
| Settlement | 结算 | 清算(清算指卡组织与机构之间的清分,不指向商户结算) |
|
|
26
|
+
| Sale / Refund | 销售 / 退款 | 把销售金额写成结算金额 |
|
|
27
|
+
| Settled transaction count | 已结算交易笔数 | 已清算交易笔数 |
|
|
28
|
+
| Settled amount | 已结算金额 | 已清算金额 |
|
|
29
|
+
| Chargeback / dispute | 拒付 / 争议 | 与结算混用;退单(仅银联语境使用) |
|
|
30
|
+
| Normal chargeback / dispute | 正常拒付 / 正常争议 | 与预争议合并 |
|
|
31
|
+
| Pre-dispute | 预争议 | 计入 VAMP;与正常拒付合并 |
|
|
32
|
+
| Clerical | 差错 | 文书;文书错误 |
|
|
33
|
+
| Quality | 产品服务质量 | 质量;质量争议 |
|
|
34
|
+
| Incidence | 发生率(必须写出分母) | |
|
|
35
|
+
| GMV (loose) | 销售金额合计(说明是否含退款) | |
|
|
36
|
+
| Weekly trend | 周趋势 | 周环比(除非单元格是环比百分比) |
|
|
37
|
+
| Operational impact | 运营影响 | 运营含义 |
|
|
38
|
+
| Ticket size | 客单价 | |
|
|
39
|
+
| Debit / credit | 借记卡 / 贷记卡 | 借记;贷记 |
|
|
40
|
+
| Payment journey | 支付旅程 | 支付旅程 Sankey;Sankey 旅程(标题/结构行) |
|
|
41
|
+
| This analysis window (main period) | 当前报告期内 / 当前分析时段内 | 本窗口 |
|
|
42
|
+
| Main period | 报告期 | 分析窗口(作期间名时) |
|
|
43
|
+
| Trend period | 趋势期 | |
|
|
44
|
+
| Fraud & chargeback period | 欺诈与拒付期 | |
|
|
45
|
+
| Month to date (MTD) | 本月至今(MTD) | 本月(月份未结束时) |
|
|
46
|
+
| As of / cutoff | 截至 | |
|
|
47
|
+
| SCA | SCA | 强客户认证(可在首次括注后只用 SCA) |
|
|
48
|
+
| Authentication / 3DS | 持卡人身份验证(3DS) | 鉴权;把 3DS 叫转化 |
|
|
49
|
+
| Visa normal 拒付率 / Visa pre-dispute rate | Visa 正常拒付率 / Visa 预争议率 | 合并二者;把预争议计入 VAMP;VAMP ratio(无 TC40 时) |
|
|
50
|
+
| Mastercard normal 拒付率 | Mastercard 正常拒付率 | ECM(从本抽取断言商户在项目中) |
|
|
51
|
+
| Amounts in USD | 金额均为 USD | 未做汇率折算(当全部已是 USD) |
|
|
52
|
+
| Count-heavy / amount-light | 授权尝试笔数多但金额小 | 走廊;笔数负担型走廊 |
|
|
53
|
+
|
|
54
|
+
Keep proper nouns in source form when useful: Visa, MasterCard, BIN, 3DS,
|
|
55
|
+
Sankey (in chart captions only), Order ID, MCC, Worldpay, Pazien, MID.
|
|
56
|
+
Do not use Pazien codes (e.g. D102) in prose; use 疑似欺诈 / suspected fraud.
|
|
57
|
+
Tables may still show the code column.
|
|
58
|
+
|
|
59
|
+
## Axis and UI exceptions
|
|
60
|
+
|
|
61
|
+
- Rate axis may say `成功率 %` if the legend or lede already says 授权成功率.
|
|
62
|
+
Amount axes still use the full metric plus currency
|
|
63
|
+
([visualization.md](visualization.md)).
|
|
64
|
+
- Week-over-week *percentage* columns may say 笔数周环比 / 金额周环比.
|
|
65
|
+
- Product rankings that exclude tiny samples: write
|
|
66
|
+
`在授权尝试超过 50 笔的卡种里` (or the n actually used), never
|
|
67
|
+
`有规模的最弱卡种` or `弱卡种`.
|
|
68
|
+
- If every amount is USD, write `金额均为 USD`. Do not add `未做汇率折算`.
|
|
69
|
+
Only mention missing FX conversion when mixed currencies were actually summed
|
|
70
|
+
or dropped.
|
|
71
|
+
- Chart amount fields append the currency: `授权拒绝金额 USD`.
|
|
72
|
+
- HTML footer: data-source filenames only. No skill name, no Chart.js / ECharts.
|
|
73
|
+
- Do not call issuer country “customer country”.
|
|
74
|
+
- Do not call auth rate “conversion” unless contrasting checkout vs issuer
|
|
75
|
+
response, and then say so.
|
|
76
|
+
|
|
77
|
+
## Banned strings (grep after writing)
|
|
78
|
+
|
|
79
|
+
Chinese: `走廊`, `杠杆`, `弱转化`, `转化率`, `赋能`, `抓手`, `闭环`, `打法`,
|
|
80
|
+
`运营含义`, `本窗口`, `弱卡种`, `有规模的最弱`, `强客户认证`, `拒绝承兑`,
|
|
81
|
+
`文书错误`, `质量争议`, `发卡国`
|
|
82
|
+
|
|
83
|
+
English: `auth drag`, `conversion problem`, `count-heavy`, `amount-light`,
|
|
84
|
+
`Protect US amount`, `Unlike currencies`
|
|
85
|
+
|
|
86
|
+
If a hit is a legitimate exception (e.g. 周环比 as a table header for WoW %,
|
|
87
|
+
or D102 in a reason-code table), leave it and do not expand the ban.
|
|
88
|
+
|
|
89
|
+
## Proofread
|
|
90
|
+
|
|
91
|
+
1. Apply the glossary to headings, KPI labels, chart legends, Sankey skip
|
|
92
|
+
chips, and body copy.
|
|
93
|
+
2. Grep the report files for the banned strings.
|
|
94
|
+
3. Replace hits using this table. Do not change numbers, formulas, or file
|
|
95
|
+
paths.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Visualization rules
|
|
2
|
+
|
|
3
|
+
Preferred deliverable: self-contained HTML with Chart.js (KPI charts) and
|
|
4
|
+
ECharts (Sankey). Markdown tables remain required beside charts.
|
|
5
|
+
|
|
6
|
+
## Mark encoding
|
|
7
|
+
|
|
8
|
+
| Metric kind | Chart mark | Notes |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| Count | Bar | Vertical or horizontal |
|
|
11
|
+
| Amount | Bar | Never encode amount as a line |
|
|
12
|
+
| Rate | Line | Percent on its own axis |
|
|
13
|
+
|
|
14
|
+
## Multi-metric charts
|
|
15
|
+
|
|
16
|
+
1. Count and amount in the same chart → both are **bars** on **different axes**
|
|
17
|
+
(left = count, right = amount).
|
|
18
|
+
2. Rate with count and/or amount → rate is a **line** on a dedicated % axis.
|
|
19
|
+
3. Rate alone → line chart (points allowed). No bars for a lone rate series.
|
|
20
|
+
4. Composition of one total → doughnut or stacked bars; not for time trends.
|
|
21
|
+
|
|
22
|
+
## Axis hygiene
|
|
23
|
+
|
|
24
|
+
- Label every axis with the full metric name. Amount axes/legends include
|
|
25
|
+
currency (`授权尝试金额 USD`, `授权拒绝金额 USD`, `已结算金额 USD`,
|
|
26
|
+
`拒付金额 USD`). Do not use bare `笔数` / `金额` / `%`.
|
|
27
|
+
- Only one axis draws the main grid on dual-axis charts.
|
|
28
|
+
- Stacked bars = mix within a group (e.g. decline reasons by country), never rate.
|
|
29
|
+
- Sort categories by a stated order (usually attempts desc).
|
|
30
|
+
|
|
31
|
+
## Required charts (HTML)
|
|
32
|
+
|
|
33
|
+
1. Payment journey Sankey — see [journey.md](journey.md)
|
|
34
|
+
2. Volume trend (weekly): count bar + amount bar (dual axis) + auth-rate line,
|
|
35
|
+
spanning the trend period (default last 6 months, `M-5`–`M`)
|
|
36
|
+
3. Authorization rate by segment (card product and/or country): rate as line
|
|
37
|
+
4. BIN-country contribution: count bar + amount bar (dual axis)
|
|
38
|
+
5. Decline by reason: count bars (+ amount bars/dual axis if shown)
|
|
39
|
+
6. Decline mix by BIN country: stacked count bars
|
|
40
|
+
7. Section 4.8 monthly dispute-rate lines: an ascending calendar-month axis
|
|
41
|
+
covering the fraud & chargeback period (default 12 months) and ending in
|
|
42
|
+
the report month, regardless of the main report window. Preserve missing
|
|
43
|
+
months as gaps; never connect a line across a missing point. Show
|
|
44
|
+
Visa normal, Visa pre-dispute, and Mastercard normal separately when supported,
|
|
45
|
+
plus the complete coverage table per [chargebacks.md](chargebacks.md).
|
|
46
|
+
If no rate points can be drawn, retain an empty full-period plot with a no-data
|
|
47
|
+
caption; absent case data is not a zero rate.
|
|
48
|
+
|
|
49
|
+
## Anti-patterns
|
|
50
|
+
|
|
51
|
+
- Line for amount or count
|
|
52
|
+
- Bar for a standalone rate series
|
|
53
|
+
- Count and amount on one axis without dual-axis scaling
|
|
54
|
+
- Mixing native EUR (etc.) with USD in one amount series; convert first ([fx.md](fx.md))
|
|
55
|
+
- Plotting a 0% chargeback-rate point for a brand-month with no CBs ([chargebacks.md](chargebacks.md))
|
|
56
|
+
- Inventing Sankey checkpoints not present in the data
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
|
|
8
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
9
|
+
const WEEK_MS = 7 * DAY_MS;
|
|
10
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
|
|
12
|
+
function readJson(path, fallback = {}) {
|
|
13
|
+
try { return JSON.parse(readFileSync(path, 'utf8')); } catch { return fallback; }
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function frontmatterValue(text, key) {
|
|
17
|
+
const frontmatter = /^---\n([\s\S]*?)\n---/.exec(text)?.[1] ?? '';
|
|
18
|
+
const match = new RegExp('^' + key + ':\\s*([^\\n]+)$', 'm').exec(frontmatter);
|
|
19
|
+
return match?.[1].trim().replace(/^['"]|['"]$/g, '') ?? null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function repositoryOf(source) {
|
|
23
|
+
const value = String(source ?? '').trim();
|
|
24
|
+
const match = /^(?:git@github\.com:|https:\/\/github\.com\/)?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+?)(?:\.git)?$/.exec(value);
|
|
25
|
+
return match?.[1] ?? null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function stableVersion(value) {
|
|
29
|
+
const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(String(value ?? '').trim());
|
|
30
|
+
return match ? match.slice(1).map(Number) : null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function newer(left, right) {
|
|
34
|
+
for (let index = 0; index < 3; index += 1) {
|
|
35
|
+
if (left[index] !== right[index]) return left[index] > right[index];
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function writeCache(path, value) {
|
|
41
|
+
try {
|
|
42
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
43
|
+
writeFileSync(path, JSON.stringify(value));
|
|
44
|
+
} catch { /* A read-only cache must not block skill use. */ }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function main(now = Date.now()) {
|
|
48
|
+
if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
|
|
49
|
+
const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
|
|
50
|
+
const name = frontmatterValue(skill, 'name');
|
|
51
|
+
const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
|
|
52
|
+
if (!name || !localVersion) return;
|
|
53
|
+
|
|
54
|
+
const lock = readJson(join(process.env.HOME || homedir(), '.agents', '.skill-lock.json'));
|
|
55
|
+
const entry = lock.skills?.[name];
|
|
56
|
+
const repository = repositoryOf(entry?.sourceUrl || entry?.source);
|
|
57
|
+
if (!repository) return;
|
|
58
|
+
|
|
59
|
+
const cacheRoot = process.env.XDG_CACHE_HOME || join(process.env.HOME || homedir(), '.cache');
|
|
60
|
+
const cachePath = join(cacheRoot, '1aboveio-skills', 'release-check.json');
|
|
61
|
+
const all = readJson(cachePath);
|
|
62
|
+
const cache = all[repository] && typeof all[repository] === 'object' ? all[repository] : {};
|
|
63
|
+
|
|
64
|
+
if (!cache.lastCheck || now - cache.lastCheck >= DAY_MS) {
|
|
65
|
+
const result = spawnSync('gh', ['api', 'repos/' + repository + '/releases/latest', '--jq', '.tag_name'], {
|
|
66
|
+
encoding: 'utf8',
|
|
67
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
68
|
+
timeout: 1500,
|
|
69
|
+
});
|
|
70
|
+
cache.lastCheck = now;
|
|
71
|
+
if (result.status === 0 && stableVersion(result.stdout)) cache.latestTag = result.stdout.trim();
|
|
72
|
+
else delete cache.latestTag;
|
|
73
|
+
all[repository] = cache;
|
|
74
|
+
writeCache(cachePath, all);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const latestVersion = stableVersion(cache.latestTag);
|
|
78
|
+
if (!latestVersion || !newer(latestVersion, localVersion)) return;
|
|
79
|
+
if (cache.notifiedTag === cache.latestTag && cache.notifiedAt && now - cache.notifiedAt < WEEK_MS) return;
|
|
80
|
+
|
|
81
|
+
cache.notifiedTag = cache.latestTag;
|
|
82
|
+
cache.notifiedAt = now;
|
|
83
|
+
all[repository] = cache;
|
|
84
|
+
writeCache(cachePath, all);
|
|
85
|
+
const command = `npx skills@1.5.23 add '${repository}#${cache.latestTag}' --global --agent universal claude-code --skill ${name} --yes`;
|
|
86
|
+
process.stdout.write(
|
|
87
|
+
`UPDATE_AVAILABLE: A newer 1AboveIO skills release (${cache.latestTag}) is available; this skill is `
|
|
88
|
+
+ `v${localVersion.join('.')}. Ask once whether to refresh ${name}. On approval run \`${command}\`. `
|
|
89
|
+
+ 'The refreshed instructions apply next session. Either way, continue the current task and do not ask again this session.\n',
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
try { main(); } catch { /* Update checks are advisory and always fail silent. */ }
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: report-writing
|
|
3
|
+
description: "Convert compliance audit findings into audience-formatted reports. Four styles: VARS Review Report (Visa's official 2025 template, required verbatim for VARS engagements), Audit Report (compliance team), External Assessment (regulators/external auditors), Management Report (board/C-suite). Use whenever audit output needs to become a deliverable, even just 'write up the findings'."
|
|
4
|
+
release-version: 0.36.0
|
|
5
|
+
---
|
|
6
|
+
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
|
+
# Report Writing
|
|
8
|
+
|
|
9
|
+
Generate compliance reports from structured audit findings. Four report styles target
|
|
10
|
+
different audiences — same data, different depth and tone.
|
|
11
|
+
|
|
12
|
+
## Input Format
|
|
13
|
+
|
|
14
|
+
Structured findings in Markdown with per-item:
|
|
15
|
+
- **Status:** Pass / Fail / Partial / N/A
|
|
16
|
+
- **Severity:** Critical / Major / Minor / Observation
|
|
17
|
+
- **Category:** e.g., Access Control, Data Protection, Incident Response
|
|
18
|
+
- **Observations:** What was found
|
|
19
|
+
- **Evidence:** Logs, configs, screenshots, code references
|
|
20
|
+
- **Recommendations:** Suggested remediation
|
|
21
|
+
|
|
22
|
+
If the input deviates, normalize it to the above structure before generating the report.
|
|
23
|
+
|
|
24
|
+
### VARS-specific input requirement
|
|
25
|
+
|
|
26
|
+
The VARS Review Report must be generated from the **full** per-control assessment —
|
|
27
|
+
typically the `tracker.md` produced by the `compliance-audit` skill running against the
|
|
28
|
+
VARS checklist (`skills/compliance/compliance-audit/references/vars-checklist.md`, or a
|
|
29
|
+
parsed equivalent from `reg-parser`). Do **not** start a VARS report from a summary,
|
|
30
|
+
verbal findings, or a partial sub-domain review — Visa's report aggregates a complete
|
|
31
|
+
control-by-control assessment, and Section 5 of the deliverable explicitly references
|
|
32
|
+
the *VARS Control Testing and Remediation Tracking* spreadsheet (which is the same
|
|
33
|
+
tracker, in Visa's Excel format).
|
|
34
|
+
|
|
35
|
+
If the user asks for a VARS report and you don't see a complete tracker covering all
|
|
36
|
+
nine sub-domains, **stop and ask** for it — or offer to run `compliance-audit` first.
|
|
37
|
+
A VARS report without the underlying control-level evidence is not a deliverable Visa
|
|
38
|
+
will accept.
|
|
39
|
+
|
|
40
|
+
## Report Style Selection
|
|
41
|
+
|
|
42
|
+
| Style | Audience | When to use |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| **VARS Review Report** | Visa, acquirer leadership | Visa Acceptance Risk Standards engagements — uses Visa's official 2025 template |
|
|
45
|
+
| **Audit Report** | Compliance team, internal auditors | Day-to-day remediation tracking, technical deep-dives |
|
|
46
|
+
| **External Assessment** | Regulators, external auditors, certification bodies | Formal submissions, certification audits, regulatory filings |
|
|
47
|
+
| **Management Report** | C-suite, board, leadership | Quarterly reviews, risk committee briefings, budget justification |
|
|
48
|
+
|
|
49
|
+
Select the style based on the stated audience or purpose. If unclear, ask. Default to
|
|
50
|
+
Audit Report when the requestor is technical. **If the framework is VARS / Visa
|
|
51
|
+
Acceptance Risk Standards, always use the VARS Review Report style** — Visa requires
|
|
52
|
+
its template verbatim.
|
|
53
|
+
|
|
54
|
+
## Workflow
|
|
55
|
+
|
|
56
|
+
### 1. Ingest Findings
|
|
57
|
+
|
|
58
|
+
1. Read the audit findings file (Markdown). For VARS, this is the `compliance-audit`
|
|
59
|
+
tracker produced against the VARS checklist — it must cover all nine sub-domains.
|
|
60
|
+
2. Parse each finding into: ID, title, category, status, severity, observations, evidence, recommendations.
|
|
61
|
+
3. Validate completeness — flag any finding missing severity or status. For VARS,
|
|
62
|
+
additionally verify every sub-domain is represented; if any are missing, stop and
|
|
63
|
+
surface the gap to the user before drafting.
|
|
64
|
+
|
|
65
|
+
### 2. Select Style
|
|
66
|
+
|
|
67
|
+
Confirm the target style with the user or infer from context:
|
|
68
|
+
- "VARS" / "Visa Acceptance Risk Standards" / "for Visa" → **VARS Review Report**
|
|
69
|
+
- "for the regulator" → External Assessment
|
|
70
|
+
- "for the board" / "executive summary" → Management Report
|
|
71
|
+
- "full technical report" / default → Audit Report
|
|
72
|
+
|
|
73
|
+
### 3. Generate Report
|
|
74
|
+
|
|
75
|
+
**House style.** Use the nearest `WRITING.md`: start in the findings file's folder (pasted text: the output
|
|
76
|
+
folder, else the working directory), then parents up to the repository root; never the home
|
|
77
|
+
directory or above. Rate every issue from the evidence first; the style changes
|
|
78
|
+
wording, never a rating, a finding or which issues appear. Then write the prose in its voice,
|
|
79
|
+
language, terms, sentences and presentation. Keep the template structure, severity and rating scales
|
|
80
|
+
(including Status values such as Pass / Fail / Partial), finding IDs and every input count; its
|
|
81
|
+
terms apply to prose, not rating values. The request beats WRITING.md, which beats this skill's
|
|
82
|
+
wording. Never edit WRITING.md. Bilingual: `write-doc`'s bilingual mode. No WRITING.md: write as
|
|
83
|
+
below.
|
|
84
|
+
|
|
85
|
+
The VARS Review Report ignores WRITING.md entirely: Visa's template wording and structure stay
|
|
86
|
+
verbatim.
|
|
87
|
+
|
|
88
|
+
Follow the style-specific template. Reference files provide the full structure:
|
|
89
|
+
|
|
90
|
+
- **VARS Review Report:** Read `references/vars-report-template.md` (Visa's official 2025 template)
|
|
91
|
+
- **Audit Report:** Read `references/audit-report-template.md`
|
|
92
|
+
- **External Assessment:** Read `references/external-assessment-template.md`
|
|
93
|
+
- **Management Report:** Read `references/management-report-template.md`
|
|
94
|
+
|
|
95
|
+
### 4. Review and Finalize
|
|
96
|
+
|
|
97
|
+
1. Verify coverage:
|
|
98
|
+
- Audit Report: every finding from the input has its own section.
|
|
99
|
+
- External Assessment: every finding is mapped to a regulatory requirement.
|
|
100
|
+
- Management Report / VARS: findings are aggregated by category/sub-domain with no category dropped.
|
|
101
|
+
2. Confirm severity counts match the input data. For VARS: Section 3.d is **executive**
|
|
102
|
+
(a headline plus a 2–3 sentence business posture per sub-domain, no operational
|
|
103
|
+
detail); Section 4 is **department-manager** detail, with "Compliance Status" carrying
|
|
104
|
+
the tracker's Control Effectiveness Rating (Satisfactory / Improvement Recommended /
|
|
105
|
+
Unsatisfactory / N/A; worst rating across the row) and "Findings and Comments" written
|
|
106
|
+
as an inline observed → finding → comments narrative in the report's own words (no
|
|
107
|
+
source-document/clause/sample citations — those stay in the tracker) with the Actions
|
|
108
|
+
Required / Recommendations reproduced verbatim. When the ATPA archetype is in scope,
|
|
109
|
+
confirm all TPA controls are consolidated into a single "Third Party Agent" row rather
|
|
110
|
+
than scattered across the AACQ sub-domains.
|
|
111
|
+
3. Check that no placeholder text remains (e.g. `{{...}}`, `____`, `MM/YEAR`).
|
|
112
|
+
4. Output as Markdown. If DOCX is requested (the VARS deliverable is typically distributed as
|
|
113
|
+
DOCX to match Visa's template), **do not rely on a plain `pandoc` Markdown→DOCX conversion
|
|
114
|
+
for the Section 4 table** — pandoc collapses the `<br>` line breaks inside the wide
|
|
115
|
+
Findings-and-Comments cells, so the enumerated Actions Required / Recommendations items run
|
|
116
|
+
together and appear to be missing. Instead render the DOCX so each cell's `<br>`-separated
|
|
117
|
+
lines become **separate paragraphs** (e.g. build it with `python-docx`, or post-process the
|
|
118
|
+
pandoc output). In Section 4 specifically:
|
|
119
|
+
- split every `<br>` into its own paragraph in the cell, so each Actions Required /
|
|
120
|
+
Recommendations item is on its own visible line;
|
|
121
|
+
- render `**…**` labels (`Actions Required:`, `Recommendations:`) as real **bold**, not
|
|
122
|
+
literal asterisks;
|
|
123
|
+
- shade the **Compliance Status** cell by rating (Satisfactory = green, Improvement
|
|
124
|
+
Recommended = amber, Unsatisfactory = red, N/A = grey);
|
|
125
|
+
- set the page to **landscape** to give the table room.
|
|
126
|
+
For PDF, the same line-break requirement applies.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Style Summaries
|
|
131
|
+
|
|
132
|
+
### VARS Review Report
|
|
133
|
+
|
|
134
|
+
Visa's official 2025 template, used verbatim. Six fixed sections with mandated
|
|
135
|
+
boilerplate (Purpose paragraph, reliance statement, recommendation summary stem) and
|
|
136
|
+
nine fixed sub-domains in canonical order — plus a consolidated **Third Party Agent**
|
|
137
|
+
row when the ATPA archetype is in scope. Detailed per-control findings live in the
|
|
138
|
+
companion *VARS Control Testing and Remediation Tracking* Excel — the report itself
|
|
139
|
+
aggregates one row per sub-domain. The two summary layers serve different audiences:
|
|
140
|
+
**Section 3.d is executive** (business posture, 2–3 sentences per sub-domain) and
|
|
141
|
+
**Section 4 is for department managers / control owners** (an inline observed → finding
|
|
142
|
+
→ comments narrative in the report's own words, with verbatim Actions Required /
|
|
143
|
+
Recommendations and no duplication of the tracker's evidence citations).
|
|
144
|
+
|
|
145
|
+
**Key sections:** Cover, Document History, Distribution List, Executive Summary
|
|
146
|
+
(Purpose / Background / VARS Control Assessment / Summary of Findings / Recommendation
|
|
147
|
+
Summary), Observations Overview (sub-domain table), Detailed Information (pointer to
|
|
148
|
+
Excel tracker), Next Steps.
|
|
149
|
+
|
|
150
|
+
**Tone:** Formal, third-person, Visa-facing. Preserve the boilerplate paragraphs
|
|
151
|
+
verbatim — paraphrasing breaks reviewer expectations.
|
|
152
|
+
|
|
153
|
+
### Audit Report
|
|
154
|
+
|
|
155
|
+
Full technical detail. Every finding gets its own section with evidence, root cause analysis,
|
|
156
|
+
remediation steps, priority, and suggested timeline. Appendices contain raw evidence.
|
|
157
|
+
|
|
158
|
+
**Key sections:**
|
|
159
|
+
1. Report metadata (scope, period, assessor, framework)
|
|
160
|
+
2. Executive summary (pass/fail counts)
|
|
161
|
+
3. Findings (one per item — full detail)
|
|
162
|
+
4. Remediation plan (prioritized)
|
|
163
|
+
5. Appendices (evidence, methodology, glossary)
|
|
164
|
+
|
|
165
|
+
**Tone:** Technical, precise, neutral. Use passive voice sparingly. Reference specific
|
|
166
|
+
controls, configurations, and code paths.
|
|
167
|
+
|
|
168
|
+
### External Assessment
|
|
169
|
+
|
|
170
|
+
Formal language suitable for regulatory submission. Organized by regulatory requirement,
|
|
171
|
+
not by internal finding ID. Includes gap analysis matrix and attestation-ready statements.
|
|
172
|
+
|
|
173
|
+
**Key sections:**
|
|
174
|
+
1. Cover page and scope statement
|
|
175
|
+
2. Assessment methodology
|
|
176
|
+
3. Compliance status by requirement (article/section mapping)
|
|
177
|
+
4. Gap analysis matrix (requirement × status × severity)
|
|
178
|
+
5. Remediation roadmap
|
|
179
|
+
6. Attestation statement
|
|
180
|
+
7. Appendices (evidence index, assessor qualifications)
|
|
181
|
+
|
|
182
|
+
**Tone:** Formal, objective, structured. Reference regulation articles explicitly
|
|
183
|
+
(e.g., "Article 32(1)(a) of Regulation (EU) 2016/679"). Avoid colloquial language.
|
|
184
|
+
|
|
185
|
+
### Management Report
|
|
186
|
+
|
|
187
|
+
Concise, business-oriented. Leads with a one-page executive summary. Uses visual
|
|
188
|
+
indicators (counts, heatmap descriptions) rather than technical evidence.
|
|
189
|
+
|
|
190
|
+
**Key sections:**
|
|
191
|
+
1. Executive summary (1 page max — overall posture, key risks, headline numbers)
|
|
192
|
+
2. Risk heatmap (critical/major/minor counts by category)
|
|
193
|
+
3. Business impact analysis (what gaps mean operationally and financially)
|
|
194
|
+
4. Recommended actions with effort estimates (cost, time, owner)
|
|
195
|
+
5. Progress since last assessment (if prior data available)
|
|
196
|
+
6. Appendix (methodology note, detailed data reference)
|
|
197
|
+
|
|
198
|
+
**Tone:** Business language, action-oriented. Quantify impact where possible.
|
|
199
|
+
Avoid jargon — explain technical concepts in business terms.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Output Conventions
|
|
204
|
+
|
|
205
|
+
- **File naming:** `{style}-{framework}-{YYYY-MM-DD}.md`
|
|
206
|
+
- Example: `audit-report-SOC2-2026-03-30.md`
|
|
207
|
+
- VARS example: `vars-review-report-{acquirer}-2026-03-30.md`
|
|
208
|
+
- **Severity color coding** (for Markdown rendering):
|
|
209
|
+
- 🔴 Critical | 🟠 Major | 🟡 Minor | 🔵 Observation
|
|
210
|
+
- **Finding IDs:** Preserve original IDs from the input. If absent, assign sequential IDs: `F-001`, `F-002`, etc.
|
|
211
|
+
- **Cross-references:** Link findings to remediation items and evidence appendices by ID.
|
|
212
|
+
|
|
213
|
+
## Edge Cases
|
|
214
|
+
|
|
215
|
+
- **No critical findings:** Lead the executive summary with overall compliance posture, not absence of criticals.
|
|
216
|
+
- **Mixed frameworks:** If findings span multiple frameworks (e.g., SOC 2 + PCI DSS), organize by framework first, then by requirement.
|
|
217
|
+
- **Incomplete evidence:** Flag as "Evidence Pending" — do not omit the finding.
|
|
218
|
+
- **Prior assessment data unavailable:** Omit the "Progress" section in Management Report; note "Baseline assessment — no prior data" in methodology.
|
|
219
|
+
- **VARS sub-domain with no findings:** Still include the row in Section 4 and the bullet in Section 3.d — Compliance Status "Satisfactory", Findings and Comments an inline observed-then-finding narrative closing with "No remediation required." (matching the tracker's Satisfactory Issue Description) — Visa expects all nine sub-domains to appear (plus the Third Party Agent row when ATPA is in scope).
|
|
220
|
+
- **VARS legacy numbering:** The official 2025 template skips index 9 in the Section 4 table (Regulatory Risk is labelled #10). The `references/vars-report-template.md` uses sequential 1–9; switch to legacy numbering only if the Visa engagement lead asks.
|