faf-taf-git 2.2.2 → 2.3.1
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/.github/workflows/ci.yml +4 -4
- package/.github/workflows/{claude-code-review.yml.disabled → claude-code-review.yml} +1 -1
- package/.github/workflows/claude.yml +1 -1
- package/CHANGELOG.md +20 -1
- package/README.md +7 -5
- package/RECEIPT-FORMAT.md +90 -0
- package/action.yml +2 -2
- package/dist/cli.js +3 -53
- package/dist/cli.js.map +1 -1
- package/dist/index.js +1016 -346
- package/dist/index.js.map +1 -1
- package/dist/parsers/index.d.ts +6 -9
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +28 -10
- package/dist/parsers/index.js.map +1 -1
- package/dist/parsers/wjttc.d.ts +38 -0
- package/dist/parsers/wjttc.d.ts.map +1 -0
- package/dist/parsers/wjttc.js +152 -0
- package/dist/parsers/wjttc.js.map +1 -0
- package/package.json +4 -1
- package/project.faf +1 -1
- package/src/cli.ts +4 -54
- package/src/index.ts +2 -2
- package/src/parsers/index.ts +28 -10
- package/src/parsers/wjttc.ts +160 -0
- package/tests/action-bundle.test.ts +34 -0
- package/tests/action-parse-error.test.ts +47 -0
- package/tests/wjttc-parser.test.ts +116 -0
package/.github/workflows/ci.yml
CHANGED
|
@@ -15,12 +15,12 @@ jobs:
|
|
|
15
15
|
contents: write
|
|
16
16
|
|
|
17
17
|
steps:
|
|
18
|
-
- uses: actions/checkout@
|
|
18
|
+
- uses: actions/checkout@v7
|
|
19
19
|
|
|
20
20
|
- name: Setup Node.js
|
|
21
|
-
uses: actions/setup-node@
|
|
21
|
+
uses: actions/setup-node@v7
|
|
22
22
|
with:
|
|
23
|
-
node-version: '
|
|
23
|
+
node-version: '24.x'
|
|
24
24
|
|
|
25
25
|
- name: Install dependencies
|
|
26
26
|
run: npm ci
|
|
@@ -45,7 +45,7 @@ jobs:
|
|
|
45
45
|
# ── R: RECEIPT ────────────────────────────────
|
|
46
46
|
- name: 'R: Generate TAF Receipt'
|
|
47
47
|
if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'
|
|
48
|
-
uses: Wolfe-Jam/faf-taf-git@v2.
|
|
48
|
+
uses: Wolfe-Jam/faf-taf-git@v2.3.0
|
|
49
49
|
with:
|
|
50
50
|
test-output-file: test-output.txt
|
|
51
51
|
auto-commit: 'true'
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- faf: faf-taf-git | TypeScript | cli | A Test Receipt Printer for git -->
|
|
2
|
-
<!-- faf: doc=changelog | latest=v2.
|
|
2
|
+
<!-- faf: doc=changelog | latest=v2.3.1 | canonical=project.faf | family=TAF -->
|
|
3
3
|
|
|
4
4
|
# Changelog
|
|
5
5
|
|
|
@@ -8,6 +8,25 @@ All notable changes to this project will be documented in this file.
|
|
|
8
8
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
9
9
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
10
10
|
|
|
11
|
+
## [2.3.1] - 2026-09-15
|
|
12
|
+
|
|
13
|
+
Marketplace metadata — the GitHub Action's description is now under the Marketplace's 125-character limit (it was 153), so the listing can show its current name, **TAF — Testing AI Format**. No code change — same `dist/` as 2.3.0.
|
|
14
|
+
|
|
15
|
+
## [2.3.0] - 2026-09-14
|
|
16
|
+
|
|
17
|
+
WJTTC parser — TAF now receipts a WJTTC run directly, no Jest shim. The Action now runs on `node24`.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- **WJTTC parser** (`parseWjttcOutput`) — reads both WJTTC output forms: the `--json` suite (`"suite": "pc-ai-wjttc"`) and the human log (`pc-ai WJTTC` + `N/N passed`). Wired second in the dispatcher, after Bun.
|
|
21
|
+
- **`RECEIPT-FORMAT.md`** — the canonical `.taf` receipt format spec, linked from the README.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- **Action runtime `node20` → `node24`.** GitHub-hosted runners already run node20 actions on Node 24 and warn on every run ("Node.js 20 is deprecated"); declaring `node24` matches what runs and drops the warning. Self-hosted runners need a runner release that supports `node24`.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- **CLI and Action parse-error text** now name every supported parser: Bun, WJTTC, Jest, Vitest. Both are built from the parser table itself, so a new parser shows up in both (the CLI was missing Bun; the Action said "Jest, Vitest").
|
|
28
|
+
- **undici** — `@actions/github` pulled a vulnerable undici 5.x; `overrides.undici ^6.28.0` pins past it, on the 6.x line `@actions/http-client` declares.
|
|
29
|
+
|
|
11
30
|
## [2.2.2] - 2026-06-25
|
|
12
31
|
|
|
13
32
|
Marketplace metadata — surfaces the pinned brand: **TAF = Testing AI Format** (sibling of FAF, independent). Refreshes the GitHub Action name + description and adds the README definition line. No code change — same `dist/` as 2.2.1.
|
package/README.md
CHANGED
|
@@ -44,6 +44,8 @@ Anyone can get green **once.** TAF proves it **over time** — an append-only Te
|
|
|
44
44
|
|
|
45
45
|
**Every field maps to a real receipt:** timestamp = receipt date, tests = itemized lines, result = total, trigger = cashier/register, run_id = receipt number, project = vendor, format_version = receipt template.
|
|
46
46
|
|
|
47
|
+
📄 **Full receipt schema:** [`RECEIPT-FORMAT.md`](./RECEIPT-FORMAT.md) — the pinned `.taf` format (fields, the cannot-be-gamed mechanism, where it fits vs JUnit/TAP/SLSA).
|
|
48
|
+
|
|
47
49
|
**What you get:**
|
|
48
50
|
- **Proof over time** — longitudinal evidence, not snapshots
|
|
49
51
|
- **Pattern detection** — pass-rate trends, regression vs new failure
|
|
@@ -204,7 +206,7 @@ jobs:
|
|
|
204
206
|
- name: Setup Node.js
|
|
205
207
|
uses: actions/setup-node@v6
|
|
206
208
|
with:
|
|
207
|
-
node-version: '
|
|
209
|
+
node-version: '24.x'
|
|
208
210
|
|
|
209
211
|
- name: Install dependencies
|
|
210
212
|
run: npm ci
|
|
@@ -216,7 +218,7 @@ jobs:
|
|
|
216
218
|
run: npm test 2>&1 | tee test-output.txt
|
|
217
219
|
|
|
218
220
|
- name: Generate TAF Receipt
|
|
219
|
-
uses: Wolfe-Jam/faf-taf-git@v2.0
|
|
221
|
+
uses: Wolfe-Jam/faf-taf-git@v2.3.0
|
|
220
222
|
with:
|
|
221
223
|
test-output-file: test-output.txt
|
|
222
224
|
auto-commit: 'true'
|
|
@@ -361,7 +363,7 @@ Options:
|
|
|
361
363
|
```yaml
|
|
362
364
|
- name: Generate TAF Receipt
|
|
363
365
|
id: taf
|
|
364
|
-
uses: Wolfe-Jam/faf-taf-git@v2.0
|
|
366
|
+
uses: Wolfe-Jam/faf-taf-git@v2.3.0
|
|
365
367
|
with:
|
|
366
368
|
test-output-file: test-output.txt
|
|
367
369
|
|
|
@@ -478,7 +480,7 @@ node dist/cli.js --help
|
|
|
478
480
|
```yaml
|
|
479
481
|
- run: npm test 2>&1 | tee test-output.txt
|
|
480
482
|
|
|
481
|
-
- uses: Wolfe-Jam/faf-taf-git@v2.0
|
|
483
|
+
- uses: Wolfe-Jam/faf-taf-git@v2.3.0
|
|
482
484
|
with:
|
|
483
485
|
test-output-file: test-output.txt
|
|
484
486
|
```
|
|
@@ -501,7 +503,7 @@ v2.0.0 uses **pre-capture pattern** - separate test execution from receipt gener
|
|
|
501
503
|
|
|
502
504
|
1. Update workflow to use `test-output-file` instead of `test-command`
|
|
503
505
|
2. Add test output capture step: `npm test 2>&1 | tee test-output.txt`
|
|
504
|
-
3. Update version to `@v2.0
|
|
506
|
+
3. Update version to `@v2.3.0`
|
|
505
507
|
|
|
506
508
|
See [CHANGELOG.md](CHANGELOG.md) for complete version history.
|
|
507
509
|
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# .taf — Test Receipt Format
|
|
2
|
+
**v1.0 · TAF = Testing AI Format · tagline: "Test Receipts"**
|
|
3
|
+
|
|
4
|
+
> **Proof Over Time.** Anyone can get green **once.** TAF proves it **over time** — an append-only Test Receipt on every CI run, git-anchored and tamper-evident. Solid engineering shows in the timeline; everything else gets exposed.
|
|
5
|
+
|
|
6
|
+
*The canonical `.taf` file format. This repo (`faf-taf-git`) is the receipt printer; this spec pins the file it writes.*
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## What a `.taf` is
|
|
11
|
+
|
|
12
|
+
A **Receipt Printer for git.** Every CI run prints one receipt — timestamp, counts, result, trigger — appended to a `.taf` file. The receipts accumulate on a `taf-receipts` branch. The history is append-only. **The proof is the timeline, not any single run.**
|
|
13
|
+
|
|
14
|
+
- **Standalone.** Works on any git repo. No FAF required — install the action, get receipts.
|
|
15
|
+
- **Git-native + portable.** The receipt lives *in the repo*, versioned — it survives a CI-vendor migration, which vendor-locked run history does not.
|
|
16
|
+
- **The unique value:** a one-time green is a snapshot (gameable); *"1,847 receipts over 14 months, none missing"* is proof. The format exists to make that timeline portable and falsifiable — nothing more. Thinness is the point.
|
|
17
|
+
|
|
18
|
+
## Cannot be gamed — tamper-*evident* (stated honestly)
|
|
19
|
+
|
|
20
|
+
Three mechanisms make tampering **visible**:
|
|
21
|
+
- **Edits** → the commit SHA changes; a rewritten receipt no longer matches its commit.
|
|
22
|
+
- **Deletions** → append-only history on the `taf-receipts` branch makes a removed run a gap you can see.
|
|
23
|
+
- **Forgery** → receipts are written in the CI sandbox from real test output, never by hand.
|
|
24
|
+
|
|
25
|
+
**Honest boundary: tamper-*evident*, not tamper-*proof*.** A maintainer can still decline to run CI on a red commit, or force-push the branch — but those leave *evidence* (missing receipts, a rewritten history). The audit claim is **"none missing,"** not "cannot fail."
|
|
26
|
+
|
|
27
|
+
## The receipt — pinned schema
|
|
28
|
+
|
|
29
|
+
What `faf-taf-git` writes today. Minimal by design.
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
format_version: "1.0.0" # receipt-template version
|
|
33
|
+
project: my-repo # repo / "vendor"
|
|
34
|
+
created: 2026-06-28T09:00:00Z # ISO 8601 UTC
|
|
35
|
+
last_updated: 2026-06-28T09:05:00Z # ISO 8601 UTC — bumped on each append
|
|
36
|
+
|
|
37
|
+
test_history: # append-only, oldest → newest
|
|
38
|
+
- timestamp: 2026-06-28T09:05:00Z # ISO 8601 UTC — the receipt date
|
|
39
|
+
result: PASSED # PASSED | FAILED | IMPROVED | DEGRADED
|
|
40
|
+
tests: # itemized lines (nested)
|
|
41
|
+
total: 7
|
|
42
|
+
passed: 7
|
|
43
|
+
failed: 0
|
|
44
|
+
skipped: 0 # optional
|
|
45
|
+
trigger: github-actions # optional — what fired the run
|
|
46
|
+
command: npm test # optional — the command run
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Field rules**
|
|
50
|
+
|
|
51
|
+
| field | rule | notes |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| `test_history[]` | **required** | the spine — the one hard parse requirement; append-only, never edit a past entry |
|
|
54
|
+
| `…timestamp` | **required** | ISO 8601 UTC |
|
|
55
|
+
| `…result` | **required** | enum: `PASSED` \| `FAILED` \| `IMPROVED` \| `DEGRADED` |
|
|
56
|
+
| `…tests{total,passed,failed}` | **required** | nested; `skipped` optional |
|
|
57
|
+
| `…trigger` / `…command` | optional | provenance of the run |
|
|
58
|
+
| `format_version` `project` `created` `last_updated` | writer-emitted | the canonical writer always emits these; readers tolerate their absence |
|
|
59
|
+
|
|
60
|
+
**Optional FAF tenant fields (the CAR use case):** a receipt may carry `faf_associated`, `faf_location`, `faf_score` — so it records not just *did tests pass* but *what the project's AI-readiness was when they did*. Optional; absent ≠ invalid.
|
|
61
|
+
|
|
62
|
+
**Deprecated variants — do NOT emit:** early `.taf` files used `format:`/`version:` headers and *flat* `passed:`/`failed:` per run. Canonical is `format_version`/`project` + *nested* `tests`. Readers MAY accept the old shape; writers MUST emit canonical.
|
|
63
|
+
|
|
64
|
+
## Where it fits — interoperate, don't compete
|
|
65
|
+
|
|
66
|
+
`.taf` is a thin git-native **timeline**, not a rival to per-run formats:
|
|
67
|
+
|
|
68
|
+
- **JUnit XML / TAP** describe **one** run, inside CI. `.taf` is the **portable record across runs**, in the repo. `faf-taf-git` parses Jest/Vitest/JUnit output → appends a receipt.
|
|
69
|
+
- **SLSA / in-toto** attest build provenance to a side store. `.taf` keeps **test** provenance **in the repo** — human-readable, vendor-neutral, offline-readable.
|
|
70
|
+
- Position: `.taf` is the **lowest-friction, in-repo, vendor-neutral proof-over-time** layer. Where a heavier provenance standard is already in play, `.taf` complements it.
|
|
71
|
+
|
|
72
|
+
## The CAR Framework
|
|
73
|
+
|
|
74
|
+
TAF is the **Receipt** in a closed loop — it doesn't stand alone in the FAF world, and doesn't require FAF outside it:
|
|
75
|
+
- **FAF** = the **Claim** (project DNA / AI-readiness)
|
|
76
|
+
- **WJTTC** = the **Audit** (deep test analysis)
|
|
77
|
+
- **TAF** = the **Receipt** (append-only proof the tests ran)
|
|
78
|
+
|
|
79
|
+
FAF is **one tenant** of the printer, not a precondition.
|
|
80
|
+
|
|
81
|
+
## Honest scope — who actually needs this
|
|
82
|
+
|
|
83
|
+
**Yes:** OSS maintainers proving honest history · regulated/audit work (SOC 2 / ISO / HIPAA) needing append-only trails · supply-chain verifiers · **AI-agent accountability** (CI-sandbox receipts an agent can't silently edit) · FAF projects completing CAR.
|
|
84
|
+
**Probably not:** the median dev whose CI badge already says enough. *If you have to ask whether you need it, you likely don't — and that's fine.*
|
|
85
|
+
|
|
86
|
+
## Provenance of this spec
|
|
87
|
+
|
|
88
|
+
- **v1.0 (2026-06-28)** — single canonical Receipt Format. Pins the `faf-taf-git` emitter schema; leads with Proof Over Time; states the tamper-evidence boundary honestly.
|
|
89
|
+
- Supersedes earlier drafts (2025-10-27) that predated `faf-taf-git` and over-formatted a thin-value artifact.
|
|
90
|
+
- **License:** MIT.
|
package/action.yml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: 'TAF — Testing AI Format'
|
|
2
|
-
description: '
|
|
2
|
+
description: 'A Test Receipt Printer for git. Every CI run prints a receipt to .taf — append-only, cannot be gamed. Proof over time.'
|
|
3
3
|
author: 'wolfejam'
|
|
4
4
|
|
|
5
5
|
branding:
|
|
@@ -43,5 +43,5 @@ outputs:
|
|
|
43
43
|
description: 'Whether .taf file was updated (true/false)'
|
|
44
44
|
|
|
45
45
|
runs:
|
|
46
|
-
using: '
|
|
46
|
+
using: 'node24'
|
|
47
47
|
main: 'dist/index.js'
|
package/dist/cli.js
CHANGED
|
@@ -82,7 +82,7 @@ async function runTafGit(options = {}) {
|
|
|
82
82
|
return {
|
|
83
83
|
success: false,
|
|
84
84
|
tafUpdated: false,
|
|
85
|
-
error:
|
|
85
|
+
error: parsers_1.UNPARSEABLE_OUTPUT,
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
88
|
if (verbose) {
|
|
@@ -180,18 +180,7 @@ function commitTafUpdate(cwd, message, verbose, logger = console.log) {
|
|
|
180
180
|
*/
|
|
181
181
|
function handleBadgeCommand(args) {
|
|
182
182
|
if (args.includes('--help') || args.includes('-h')) {
|
|
183
|
-
console.log(`
|
|
184
|
-
faf-taf-git badge - Generate SVG badge from .taf history
|
|
185
|
-
|
|
186
|
-
USAGE:
|
|
187
|
-
npx faf-taf-git badge [OPTIONS]
|
|
188
|
-
|
|
189
|
-
OPTIONS:
|
|
190
|
-
--output <path> Write SVG to file (default: stdout)
|
|
191
|
-
--label <text> Badge label (default: TAF)
|
|
192
|
-
--taf <path> Path to .taf file (default: .taf)
|
|
193
|
-
--help, -h Show this help
|
|
194
|
-
`);
|
|
183
|
+
console.log(`\nfaf-taf-git badge - Generate SVG badge from .taf history\n\nUSAGE:\n npx faf-taf-git badge [OPTIONS]\n\nOPTIONS:\n --output <path> Write SVG to file (default: stdout)\n --label <text> Badge label (default: TAF)\n --taf <path> Path to .taf file (default: .taf)\n --help, -h Show this help\n`);
|
|
195
184
|
process.exit(0);
|
|
196
185
|
}
|
|
197
186
|
// Parse --output
|
|
@@ -237,46 +226,7 @@ async function main() {
|
|
|
237
226
|
}
|
|
238
227
|
// Show help
|
|
239
228
|
if (args.includes('--help') || args.includes('-h')) {
|
|
240
|
-
console.log(`
|
|
241
|
-
faf-taf-git - The Git-Native Receipt Printer
|
|
242
|
-
|
|
243
|
-
USAGE:
|
|
244
|
-
npm test 2>&1 | tee test-output.txt
|
|
245
|
-
npx faf-taf-git --file test-output.txt [OPTIONS]
|
|
246
|
-
|
|
247
|
-
COMMANDS:
|
|
248
|
-
badge Generate a shields.io-style SVG badge from .taf
|
|
249
|
-
|
|
250
|
-
OPTIONS:
|
|
251
|
-
--file <path> Path to test output file (required)
|
|
252
|
-
--commit Auto-commit .taf changes to git
|
|
253
|
-
--message <msg> Custom commit message
|
|
254
|
-
--cwd <dir> Working directory (default: current)
|
|
255
|
-
--verbose, -v Verbose output
|
|
256
|
-
--help, -h Show this help
|
|
257
|
-
|
|
258
|
-
EXAMPLES:
|
|
259
|
-
# Run tests, capture output, generate receipt
|
|
260
|
-
npm test 2>&1 | tee test-output.txt
|
|
261
|
-
npx faf-taf-git --file test-output.txt
|
|
262
|
-
|
|
263
|
-
# Auto-commit changes
|
|
264
|
-
npx faf-taf-git --file test-output.txt --commit
|
|
265
|
-
|
|
266
|
-
# Custom commit message
|
|
267
|
-
npx faf-taf-git --file test-output.txt --commit --message "test: update TAF"
|
|
268
|
-
|
|
269
|
-
# Generate badge
|
|
270
|
-
npx faf-taf-git badge --output badge.svg
|
|
271
|
-
|
|
272
|
-
PLATFORM SUPPORT:
|
|
273
|
-
Works in ANY CI/CD that runs Node.js:
|
|
274
|
-
GitHub Actions, GitLab CI, Jenkins, CircleCI,
|
|
275
|
-
Bitbucket Pipelines, Azure Pipelines, local dev
|
|
276
|
-
|
|
277
|
-
LEARN MORE:
|
|
278
|
-
https://github.com/Wolfe-Jam/faf-taf-git
|
|
279
|
-
`);
|
|
229
|
+
console.log(`\nfaf-taf-git - The Git-Native Receipt Printer\n\nUSAGE:\n npm test 2>&1 | tee test-output.txt\n npx faf-taf-git --file test-output.txt [OPTIONS]\n\n # WJTTC / pc-ai bar\n node tests/wjttc/run-wjttc.mjs 2>&1 | tee wjttc-out.txt\n npx faf-taf-git --file wjttc-out.txt\n\nCOMMANDS:\n badge Generate a shields.io-style SVG badge from .taf\n\nOPTIONS:\n --file <path> Path to test output file (required)\n --commit Auto-commit .taf changes to git\n --message <msg> Custom commit message\n --cwd <dir> Working directory (default: current)\n --verbose, -v Verbose output\n --help, -h Show this help\n\nPARSERS:\n Bun, WJTTC (pc-ai bar), Jest, Vitest\n\nEXAMPLES:\n npm test 2>&1 | tee test-output.txt\n npx faf-taf-git --file test-output.txt\n\n npx faf-taf-git --file test-output.txt --commit\n\n npx faf-taf-git badge --output badge.svg\n\nPLATFORM SUPPORT:\n Works in ANY CI/CD that runs Node.js:\n GitHub Actions, GitLab CI, Jenkins, CircleCI,\n Bitbucket Pipelines, Azure Pipelines, local dev\n\nLEARN MORE:\n https://github.com/Wolfe-Jam/faf-taf-git\n`);
|
|
280
230
|
process.exit(0);
|
|
281
231
|
}
|
|
282
232
|
const options = {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AACA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCH,8BA8GC;AA7ID,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|