@1aboveio/skills 1.0.4 → 1.0.6
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 +1 -1
- package/package.json +2 -3
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-foundation/SKILL.md +1 -1
- package/skills/app-dev/app-debug/SKILL.md +1 -1
- package/skills/app-dev/better-auth/SKILL.md +1 -1
- package/skills/app-dev/data-catalog/SKILL.md +1 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/SKILL.md +1 -1
- package/skills/app-dev/monorepo/SKILL.md +1 -1
- package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
- package/skills/app-dev/prisma-setup/SKILL.md +1 -1
- package/skills/app-dev/pyspark/SKILL.md +54 -12
- package/skills/app-dev/pyspark/references/adaptive-batching.md +294 -0
- package/skills/app-dev/pyspark/references/diagnosis-and-profiling.md +24 -3
- package/skills/app-dev/pyspark/references/etl-contract.md +27 -0
- package/skills/app-dev/pyspark/references/production-validation.md +41 -11
- package/skills/app-dev/pyspark/references/reconciliation.md +28 -3
- package/skills/app-dev/pyspark/references/transformation-design.md +20 -0
- package/skills/app-dev/python-backend/SKILL.md +1 -1
- package/skills/app-dev/shadcn/SKILL.md +1 -1
- package/skills/app-dev/zod-v4/SKILL.md +1 -1
- package/skills/cicd/cloud-build/SKILL.md +1 -1
- package/skills/cicd/cloud-debug/SKILL.md +1 -1
- package/skills/cicd/cloud-deploy/SKILL.md +1 -1
- package/skills/cicd/docker/SKILL.md +1 -1
- package/skills/cicd/github-actions/SKILL.md +1 -1
- package/skills/cicd/github-flow/SKILL.md +1 -1
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/mergify/SKILL.md +1 -1
- package/skills/cicd/podman/SKILL.md +1 -1
- package/skills/content/article-review/SKILL.md +1 -1
- package/skills/content/article-to-image/SKILL.md +1 -1
- package/skills/content/flowchart-svg/SKILL.md +1 -1
- package/skills/content/image-gen/SKILL.md +1 -1
- package/skills/content/mermaid/SKILL.md +1 -1
- package/skills/content/wechat-article-writer/SKILL.md +1 -1
- package/skills/content/wechat-publisher/SKILL.md +1 -1
- package/skills/content/wechat-search/SKILL.md +1 -1
- package/skills/content/xai-search/SKILL.md +1 -1
- package/skills/core/distill-writing/SKILL.md +1 -1
- package/skills/core/doc-to-md/SKILL.md +1 -1
- package/skills/core/editorial-review/SKILL.md +1 -1
- package/skills/core/house-style/SKILL.md +1 -1
- package/skills/core/house-style/references/defaults.md +32 -6
- package/skills/core/house-style/references/rules.md +7 -0
- package/skills/core/house-style/templates/gap-analysis.md +1 -1
- package/skills/core/plain-language/SKILL.md +87 -4
- package/skills/core/polish-cn/SKILL.md +1 -1
- package/skills/core/reg-parser/SKILL.md +2 -2
- package/skills/core/reg-parser/scripts/dump_checklist.py +1 -1
- package/skills/core/terminology/SKILL.md +1 -1
- package/skills/core/write-doc/SKILL.md +19 -8
- package/skills/core/write-doc/references/bilingual.md +10 -1
- package/skills/core/write-doc/references/compliance-reports.md +163 -0
- package/skills/{risk-compliance/report-writing/references → core/write-doc/references/reports}/audit-report-template.md +2 -2
- package/skills/{risk-compliance/report-writing/references → core/write-doc/references/reports}/external-assessment-template.md +21 -5
- package/skills/{risk-compliance/report-writing/references → core/write-doc/references/reports}/management-report-template.md +7 -2
- package/skills/{risk-compliance/report-writing/references → core/write-doc/references/reports}/vars-report-template.md +6 -3
- package/skills/engineering/better-review/SKILL.md +1 -1
- package/skills/engineering/contributing/SKILL.md +1 -1
- package/skills/engineering/e2e-test/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +13 -13
- package/skills/engineering/ensure-coverage/SKILL.md +1 -1
- package/skills/engineering/golden-path/SKILL.md +1 -1
- package/skills/engineering/harness-runtime/SKILL.md +1 -1
- package/skills/engineering/resolve-issues/SKILL.md +1 -1
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- package/skills/engineering/rush-issues/SKILL.md +1 -1
- package/skills/engineering/rush-release/SKILL.md +1 -1
- package/skills/engineering/test-quality/SKILL.md +1 -1
- package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
- package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
- package/skills/risk-compliance/contract-review/SKILL.md +1 -1
- package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
- package/skills/risk-compliance/fraud-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
- package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
- package/skills/risk-compliance/report-writing/LICENSE +0 -3
- package/skills/risk-compliance/report-writing/SKILL.md +0 -220
- package/skills/risk-compliance/report-writing/release-check.mjs +0 -93
|
@@ -3,7 +3,7 @@ name: harness-runtime
|
|
|
3
3
|
description: Internal import-only library shared by first-party engineering packages. Not a workflow skill; never select or invoke it as a user capability.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
user-invocable: false
|
|
6
|
-
release-version: 0.
|
|
6
|
+
release-version: 0.42.1
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# Harness Runtime
|
|
@@ -4,7 +4,7 @@ description: "Slash/explicit-only (/resolve-release). Full GitHub Flow release f
|
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
metadata:
|
|
6
6
|
workflow-role: coordinator
|
|
7
|
-
release-version: 0.
|
|
7
|
+
release-version: 0.42.1
|
|
8
8
|
---
|
|
9
9
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
10
10
|
# Resolve release
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: test-quality
|
|
3
3
|
description: "Seven principles for tests that catch real bugs, and an audit that reports weak, redundant, and not-coverage tests without fixing them. Use when writing, changing, or reviewing tests, or when asked whether tests are useful, redundant, over-mocked, flaky, only assert static text, or test config files, or asked to make a slow test suite faster without losing coverage, or when the user asks to write the testing conventions into a repo's CONTRIBUTING.md. NOT defining what a spec must prove (ensure-coverage) or authoring browser tests (e2e-test)."
|
|
4
|
-
release-version: 0.
|
|
4
|
+
release-version: 0.42.1
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Test Quality
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: compliance-audit
|
|
3
3
|
version: 2.9.0
|
|
4
4
|
description: "Audit operations against financial-compliance checklists (AML/KYC, VARS, PCI-DSS, TPA oversight, onboarding, transaction monitoring). Produces tracker.md (with a tracker.xlsx export) and phase-trail.md with layered validation; cites evidence by original filename. Input: reg-parser or the built-in VARS checklist."
|
|
5
|
-
release-version: 0.
|
|
5
|
+
release-version: 0.42.1
|
|
6
6
|
---
|
|
7
7
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
8
8
|
# Compliance Audit
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contract-compare
|
|
3
3
|
description: "Compare two or more contracts side-by-side for structured diff, gap analysis, and benchmarking. Use when: comparing contracts or agreements, contract diff, compare terms, vendor-vs-vendor, compare our template vs theirs, compliance gap between contracts. NOT for single-contract risk review — use contract-review for that."
|
|
4
|
-
release-version: 0.
|
|
4
|
+
release-version: 0.42.1
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Contract Compare
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contract-review
|
|
3
3
|
description: "Review contracts for legal, commercial, and compliance risks via convert → chunk review → merge → validate (+ optional mandate preprocessing). Use for reviewing, auditing, or checking any contract, agreement, NDA, MSA, or SLA; input a file path (PDF/DOCX/TXT) or pasted text."
|
|
4
|
-
release-version: 0.
|
|
4
|
+
release-version: 0.42.1
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Contract Review
|
|
@@ -3,7 +3,7 @@ name: doc-authenticity
|
|
|
3
3
|
version: 0.4.1
|
|
4
4
|
description: "Screen PDF documents and raster images for fabrication, tampering, Photoshop or other image-editor use, and content validity. Detects file type, runs format-specific authenticity forensics, classifies bank statements, conversation logs, invoices, agreements, and other documents, then applies type-specific validity checks. Produces separate authenticity (NO_EVIDENCE_OF_MODIFICATION / SUSPICIOUS / LIKELY_MODIFIED / INCONCLUSIVE) and validity (VALID / INVALID / INCONCLUSIVE) verdicts. Use whenever a user asks whether a document, screenshot, scan, statement, invoice, contract, chat log, receipt, or payment evidence is genuine, original, edited, Photoshopped, manipulated, fake, or valid."
|
|
5
5
|
disable-model-invocation: true
|
|
6
|
-
release-version: 0.
|
|
6
|
+
release-version: 0.42.1
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# Document and Image Authenticity
|
|
@@ -10,7 +10,7 @@ description: >
|
|
|
10
10
|
impact, and a business report. Use for fraud, scam, mule, account-takeover,
|
|
11
11
|
chargeback, dispute, transfer, collection, or payout risk analysis even when the
|
|
12
12
|
user does not name this skill.
|
|
13
|
-
release-version: 0.
|
|
13
|
+
release-version: 0.42.1
|
|
14
14
|
---
|
|
15
15
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
16
16
|
# Fraud Analysis
|
|
@@ -14,7 +14,7 @@ description: >
|
|
|
14
14
|
transactions" — even if they do not say payment-analysis. Do NOT use for
|
|
15
15
|
supervised fraud-rule mining (fraud-analysis) or TLD / MCC-miscoding
|
|
16
16
|
clusters (tld-detection).
|
|
17
|
-
release-version: 0.
|
|
17
|
+
release-version: 0.42.1
|
|
18
18
|
---
|
|
19
19
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
20
20
|
# Payment Analysis
|
|
@@ -8,7 +8,7 @@ description: >
|
|
|
8
8
|
links, an entity chain, and a watchlist for the operator's next domains.
|
|
9
9
|
Not transaction data (tld-detection) or fraud rules (fraud-analysis).
|
|
10
10
|
disable-model-invocation: true
|
|
11
|
-
release-version: 0.
|
|
11
|
+
release-version: 0.42.1
|
|
12
12
|
---
|
|
13
13
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
14
14
|
# Similar Domain
|
|
@@ -11,7 +11,7 @@ description: >
|
|
|
11
11
|
with a ≤3-sentence summary.
|
|
12
12
|
Not payment-analysis, fraud-analysis, or website research (similar-domain).
|
|
13
13
|
disable-model-invocation: true
|
|
14
|
-
release-version: 0.
|
|
14
|
+
release-version: 0.42.1
|
|
15
15
|
---
|
|
16
16
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
17
17
|
# TLD Detection
|
|
@@ -1,220 +0,0 @@
|
|
|
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.41.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.
|
|
@@ -1,93 +0,0 @@
|
|
|
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. */ }
|