faf-taf-git 2.0.4 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.github/workflows/ci.yml +53 -0
  2. package/.github/workflows/claude-code-review.yml.disabled +29 -0
  3. package/.github/workflows/claude.yml +39 -0
  4. package/.github/workflows/homebrew.yml +19 -0
  5. package/.taf +79 -2
  6. package/CHANGELOG.md +32 -0
  7. package/CLAUDE.md +29 -21
  8. package/CODE_OF_CONDUCT.md +21 -0
  9. package/CONTRIBUTING.md +3 -0
  10. package/README.md +75 -12
  11. package/SECURITY.md +19 -0
  12. package/action.yml +7 -2
  13. package/badge.svg +21 -0
  14. package/dist/badge.d.ts +23 -0
  15. package/dist/badge.d.ts.map +1 -0
  16. package/dist/badge.js +147 -0
  17. package/dist/badge.js.map +1 -0
  18. package/dist/cli.d.ts +5 -6
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +144 -193
  21. package/dist/cli.js.map +1 -1
  22. package/dist/index.js +26045 -20566
  23. package/dist/index.js.map +1 -1
  24. package/dist/licenses.txt +0 -22
  25. package/dist/parsers/bun.d.ts +59 -0
  26. package/dist/parsers/bun.d.ts.map +1 -0
  27. package/dist/parsers/bun.js +100 -0
  28. package/dist/parsers/bun.js.map +1 -0
  29. package/dist/parsers/index.d.ts +20 -0
  30. package/dist/parsers/index.d.ts.map +1 -0
  31. package/dist/parsers/index.js +26 -0
  32. package/dist/parsers/index.js.map +1 -0
  33. package/dist/parsers/vitest.d.ts +17 -0
  34. package/dist/parsers/vitest.d.ts.map +1 -0
  35. package/dist/parsers/vitest.js +61 -0
  36. package/dist/parsers/vitest.js.map +1 -0
  37. package/package.json +6 -7
  38. package/project.faf +20 -24
  39. package/src/badge.ts +138 -0
  40. package/src/cli.ts +154 -200
  41. package/src/index.ts +79 -10
  42. package/src/parsers/bun.ts +103 -0
  43. package/src/parsers/index.ts +27 -0
  44. package/src/parsers/vitest.ts +65 -0
  45. package/tests/badge.test.ts +260 -0
  46. package/tests/bun-parser.test.ts +173 -0
  47. package/tests/vitest-parser.test.ts +112 -0
  48. package/.faf +0 -126
@@ -0,0 +1,53 @@
1
+ name: CAR Pipeline
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ car:
12
+ name: Claim → Audit → Receipt
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ contents: write
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Setup Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: '20.x'
24
+
25
+ - name: Install dependencies
26
+ run: npm ci
27
+
28
+ # ── C: CLAIM ──────────────────────────────────
29
+ - name: 'C: Validate project.faf (Claim)'
30
+ run: |
31
+ if [ ! -f project.faf ]; then
32
+ echo "::error::No project.faf found. Run 'faf init' to create one."
33
+ exit 1
34
+ fi
35
+ node -e "require('yaml').parse(require('fs').readFileSync('project.faf','utf-8')); console.log('project.faf: valid YAML')"
36
+ echo "Claim validated"
37
+
38
+ # ── A: AUDIT ──────────────────────────────────
39
+ - name: Build
40
+ run: npm run build
41
+
42
+ - name: 'A: Run tests (Audit)'
43
+ run: npm test 2>&1 | tee test-output.txt
44
+
45
+ # ── R: RECEIPT ────────────────────────────────
46
+ - name: 'R: Generate TAF Receipt'
47
+ if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'
48
+ uses: Wolfe-Jam/faf-taf-git@v2.1.1
49
+ with:
50
+ test-output-file: test-output.txt
51
+ auto-commit: 'true'
52
+ commit-message: 'chore(taf): update receipt [skip ci]'
53
+ target-branch: taf-receipts
@@ -0,0 +1,29 @@
1
+ name: Claude Code Review
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, ready_for_review, reopened]
6
+
7
+ jobs:
8
+ claude-review:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: read
12
+ pull-requests: write
13
+ issues: read
14
+ id-token: write
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+ with:
20
+ fetch-depth: 1
21
+
22
+ - name: Run Claude Code Review
23
+ id: claude-review
24
+ uses: anthropics/claude-code-action@v1
25
+ with:
26
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
27
+ plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
28
+ plugins: 'code-review@claude-code-plugins'
29
+ prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
@@ -0,0 +1,39 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: write
23
+ pull-requests: write
24
+ issues: write
25
+ id-token: write
26
+ actions: read
27
+ steps:
28
+ - name: Checkout repository
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 1
32
+
33
+ - name: Run Claude Code
34
+ id: claude
35
+ uses: anthropics/claude-code-action@v1
36
+ with:
37
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
38
+ additional_permissions: |
39
+ actions: read
@@ -0,0 +1,19 @@
1
+ name: Update Homebrew
2
+ on:
3
+ push:
4
+ tags: ["v*"]
5
+
6
+ jobs:
7
+ homebrew:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - name: Update Homebrew formula
11
+ run: |
12
+ VERSION="${GITHUB_REF#refs/tags/v}"
13
+ gh workflow run update-formula.yml \
14
+ -R Wolfe-Jam/homebrew-faf \
15
+ -f formula=faf-taf-git \
16
+ -f version=$VERSION \
17
+ -f npm_package=faf-taf-git
18
+ env:
19
+ GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
package/.taf CHANGED
@@ -1,9 +1,9 @@
1
1
  format_version: 1.0.0
2
2
  project: faf-taf-git
3
3
  created: 2025-10-28T01:26:12.944Z
4
- last_updated: 2025-10-28T01:40:23.937Z
4
+ last_updated: 2026-02-19T05:56:11.741Z
5
5
  faf_associated: true
6
- faf_location: .faf
6
+ faf_location: project.faf
7
7
  faf_score: 65
8
8
  test_history:
9
9
  - timestamp: 2025-10-28T01:28:38.600Z
@@ -19,3 +19,80 @@ test_history:
19
19
  passed: 7
20
20
  failed: 0
21
21
  trigger: github-actions
22
+ - timestamp: 2026-02-18T02:24:34.363Z
23
+ result: PASSED
24
+ tests:
25
+ total: 38
26
+ passed: 38
27
+ failed: 0
28
+ trigger: github-actions
29
+ - timestamp: 2026-02-18T02:45:42.500Z
30
+ result: PASSED
31
+ tests:
32
+ total: 55
33
+ passed: 55
34
+ failed: 0
35
+ trigger: github-actions
36
+ - timestamp: 2026-02-18T03:07:37.867Z
37
+ result: PASSED
38
+ tests:
39
+ total: 55
40
+ passed: 55
41
+ failed: 0
42
+ trigger: github-actions
43
+ - timestamp: 2026-02-18T03:11:02.179Z
44
+ result: PASSED
45
+ tests:
46
+ total: 55
47
+ passed: 55
48
+ failed: 0
49
+ trigger: github-actions
50
+ - timestamp: 2026-02-18T03:24:05.159Z
51
+ result: PASSED
52
+ tests:
53
+ total: 55
54
+ passed: 55
55
+ failed: 0
56
+ trigger: github-actions
57
+ - timestamp: 2026-02-18T03:28:51.125Z
58
+ result: PASSED
59
+ tests:
60
+ total: 55
61
+ passed: 55
62
+ failed: 0
63
+ trigger: github-actions
64
+ - timestamp: 2026-02-18T05:59:46.851Z
65
+ result: PASSED
66
+ tests:
67
+ total: 55
68
+ passed: 55
69
+ failed: 0
70
+ trigger: github-actions
71
+ - timestamp: 2026-02-18T06:24:51.475Z
72
+ result: PASSED
73
+ tests:
74
+ total: 55
75
+ passed: 55
76
+ failed: 0
77
+ trigger: github-actions
78
+ - timestamp: 2026-02-18T06:37:15.943Z
79
+ result: PASSED
80
+ tests:
81
+ total: 55
82
+ passed: 55
83
+ failed: 0
84
+ trigger: github-actions
85
+ - timestamp: 2026-02-18T20:33:40.820Z
86
+ result: PASSED
87
+ tests:
88
+ total: 55
89
+ passed: 55
90
+ failed: 0
91
+ trigger: github-actions
92
+ - timestamp: 2026-02-19T05:56:11.741Z
93
+ result: PASSED
94
+ tests:
95
+ total: 55
96
+ passed: 55
97
+ failed: 0
98
+ trigger: github-actions
package/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ <!-- faf: faf-taf-git | TypeScript | cli | A Test Receipt Printer for git -->
2
+ <!-- faf: doc=changelog | latest=v2.2.2 | canonical=project.faf | family=TAF -->
3
+
1
4
  # Changelog
2
5
 
3
6
  All notable changes to this project will be documented in this file.
@@ -5,6 +8,35 @@ All notable changes to this project will be documented in this file.
5
8
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
9
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
10
 
11
+ ## [2.2.2] - 2026-06-25
12
+
13
+ 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.
14
+
15
+ ## [2.2.1] - 2026-06-17
16
+
17
+ Catch-up release — npm was stuck at 2.0.4 while 2.1.0–2.2.0 were tagged but never published. This rolls the full span to npm, plus the navy badge.
18
+
19
+ ### Added
20
+ - **Native bun-test parser** (was v2.2.0) — closes the shim-shaped undercount; reads `bun test` output directly.
21
+ - **`target-branch` input** (was v2.1.0) — write `.taf` receipts to a dedicated branch.
22
+
23
+ ### Changed
24
+ - **TAF badge pass color cyan `#00D4D4` → navy `#003366`** — white text needs a deep-shade background; cyan was too light.
25
+
26
+ ### Fixed
27
+ - **`switchToTargetBranch`** no longer fails on first run when the consumer repo has no `.taf` seed (was v2.1.2).
28
+ - undici vulnerabilities resolved via `@actions/github` / `@actions/core` upgrade; `@actions/core` pinned to v2 (v3 breaks CJS exports in CI).
29
+
30
+ ### Notes
31
+ - faf-taf-git is now 100% Trophy (TAF identity cleanup). Security Policy + Code of Conduct added.
32
+
33
+ ## [2.1.2] - 2026-05-06
34
+
35
+ ### Fixed
36
+ - **`switchToTargetBranch` no longer fails on first run when consumer repo has no `.taf` seed.** Previously, the orphan-create path called `git add .taf` unconditionally; if no seed existed on the source branch, that step failed with `fatal: pathspec '.taf' did not match any files` (exit code 128) and the whole TAF Receipt step errored out.
37
+ - New behavior: when no seed is present, the action now writes a minimal valid YAML seed (`format_version`, `project`, `created`, `test_history: []`) so the first commit on the target branch always succeeds. `updateTafFile` then populates `test_history` on the same run.
38
+ - Affects any consumer using `target-branch:` for the first time without a pre-seeded `.taf` on `main`. Previous workaround (manually committing a `.taf` seed) is no longer required.
39
+
8
40
  ## [2.0.4] - 2026-02-17
9
41
 
10
42
  ### Fixed
package/CLAUDE.md CHANGED
@@ -1,30 +1,38 @@
1
- # 🏎️ CLAUDE.md - faf-taf-git Persistent Context & Intelligence
1
+ <!-- faf:start -->
2
+ <!-- faf: faf-taf-git | TypeScript | cli | Platform-agnostic CLI + GitHub Action for TAF updates -->
3
+ <!-- faf: claim=project.faf | family=FAF -->
2
4
 
3
- ## PROJECT STATE: GOOD 🚀
4
- **Current Position:** Platform-agnostic TAF (Testing Activity Feed) updater - works in ANY CI/CD
5
- **Tyre Compound:** ULTRASOFT C5 (Maximum Performance)
5
+ # CLAUDE.md — faf-taf-git
6
6
 
7
- ---
7
+ ## What This Is
8
8
 
9
- ## 🎨 CORE CONTEXT
9
+ Platform-agnostic CLI + GitHub Action for TAF updates
10
10
 
11
- ### Project Identity
12
- - **Name:** faf-taf-git
13
- - **Stack:** TypeScript
14
- - **Quality:** F1-INSPIRED (Championship Performance)
11
+ ## Stack
15
12
 
16
- ### Technical Architecture
17
- - **What Building:** Platform-agnostic CLI + GitHub Action for TAF updates
18
- - **Main Language:** TypeScript
13
+ - **Language:** TypeScript
14
+ - **Runtime:** Node.js
15
+ - **Build:** TypeScript Compiler
16
+ - **Package Manager:** npm
17
+ - **Api Type:** REST
18
+ - **Hosting:** npm Registry
19
+ - **Cicd:** GitHub Actions
20
+ - **TargetUser:** developers
21
+ - **CoreProblem:** understanding project
22
+ - **MissionPurpose:** project documentation
23
+ - **PackageManager:** npm/yarn/pnpm
24
+ - **MainLanguage:** JavaScript/TypeScript
19
25
 
20
- ### 📊 Context Quality Status
21
- - **Overall Assessment:** Good
22
- - **Last Updated:** 2026-02-17
26
+ ## Context
23
27
 
24
- ---
28
+ - **Who:** Development teams adopting test-receipt provenance — open-source maintainers proving honest test history, regulated industries (SOC 2 / ISO / HIPAA) needing append-only audit trails, supply-chain verifiers proving tests ran before artifacts shipped, AI-agent reviewers verifying agent code passes tests consistently, and FAF-ecosystem projects completing the CAR Framework (Claim → Audit → Receipt).
29
+ - **What:** TAF file updates in CI/CD pipelines
30
+ - **Why:** Improve development efficiency
31
+ - **Where:** Any CI/CD platform (GitHub, GitLab, Bitbucket)
32
+ - **When:** During CI/CD test runs
33
+ - **How:** Test-driven development
25
34
 
26
- **STATUS: BI-SYNC ACTIVE 🔗 - Synchronized with .faf context!**
35
+ ---
27
36
 
28
- *Last Sync: 2026-02-17T20:14:09.496Z*
29
- *Sync Engine: F1-Inspired Software Engineering*
30
- *🏎️⚡️_championship_sync*
37
+ *STATUS: BI-SYNC ACTIVE — 2026-06-17T12:16:31.736Z*
38
+ <!-- faf:end -->
@@ -0,0 +1,21 @@
1
+ # Code of Conduct
2
+
3
+ This project adopts the [Contributor Covenant, v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) as its code of conduct. The full text of that covenant governs behavior in this project and its community spaces.
4
+
5
+ ## Summary
6
+
7
+ - We commit to maintaining a respectful, harassment-free environment for everyone who participates, regardless of background.
8
+ - Participation includes contributing code, opening issues, reviewing pull requests, and interacting in any official channel.
9
+ - The Contributor Covenant defines the full scope, expected conduct, and enforcement guidelines. See the link above for the complete text.
10
+
11
+ ## Reporting
12
+
13
+ If you observe conduct that violates this Code of Conduct, please email **team@faf.one**. Reports are handled confidentially. Maintainers will review, respond, and take appropriate action consistent with the Contributor Covenant's enforcement guidelines.
14
+
15
+ ## Scope
16
+
17
+ This Code of Conduct applies to all project spaces — the repository, issues, pull requests, discussions, and any public communication channels operated by the project. It also applies when representing the project in other forums.
18
+
19
+ ## Attribution
20
+
21
+ This Code of Conduct adopts the [Contributor Covenant, version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/), available under the CC BY 4.0 license.
package/CONTRIBUTING.md CHANGED
@@ -1,3 +1,6 @@
1
+ <!-- faf: faf-taf-git | TypeScript | cli | A Test Receipt Printer for git -->
2
+ <!-- faf: doc=contributing | canonical=project.faf | family=TAF -->
3
+
1
4
  # Contributing to FAF TAF Action
2
5
 
3
6
  Thank you for considering contributing to the FAF TAF Action!
package/README.md CHANGED
@@ -1,22 +1,36 @@
1
+ <!-- faf: faf-taf-git | TypeScript | cli | A Test Receipt Printer for git -->
2
+ <!-- faf: doc=readme | canonical=project.faf | score=100 | family=TAF -->
3
+
1
4
  # faf-taf-git
2
5
 
3
- **Platform-agnostic TAF (Testing Activity Feed) updater - works in ANY CI/CD**
6
+ [![TAF](./badge.svg)](https://github.com/Wolfe-Jam/faf-taf-git)
7
+ [![Claude Code](https://img.shields.io/badge/Claude_Code-enabled-00D4D4)](https://github.com/anthropics/claude-code-action)
8
+
9
+ ## Proof Over Time
10
+
11
+ Anyone can get green **once.** TAF proves it **over time** — an append-only Test Receipt on every CI run, git-anchored and **cannot be gamed.** Solid engineering shows in the timeline; everything else gets exposed.
12
+
13
+ **TAF — Testing AI Format.** Sibling of FAF, independent. The Test Receipt Printer for git.
14
+
15
+ > **Q: What does TAF do?** A: It prints Receipts.
16
+ > **Q: What sort of Receipts?** A: Test Receipts.
17
+ > **Q: Why do I need Test Receipts?** A: Proof over time.
18
+ >
19
+ > *Bonus: Cannot be gamed.*
20
+
21
+ **TAF is a Receipt Printer for git.** Every CI run prints a receipt to `.taf`. The receipts accumulate on a git branch. The history is append-only. The proof is permanent.
22
+
23
+ **Works on any git repo. No FAF required.** TAF is a standalone product — install the action, get receipts. FAF integration is one of TAF's use cases (see below), not a precondition.
4
24
 
5
- Part of the Golden Triangle: `.faf` (what it is) + `repo` (implementation) + `.taf` (proof it works)
25
+ `npm: faf-taf-git` · `action: Wolfe-Jam/faf-taf-git`
6
26
 
7
27
  ---
8
28
 
9
29
  ## 🎯 WHAT
10
30
 
11
- **faf-taf-git** automatically generates `.taf` receipts from your test runs.
31
+ **A Test Receipt Printer for git.** Every CI run produces one receipt — timestamp, counts, result, trigger — appended to `.taf` on the `taf-receipts` branch. The timeline is the proof.
12
32
 
13
- A `.taf` file is a git-tracked timeline of your testing history:
14
- - Permanent proof of test quality
15
- - Pass rate trends and failure patterns
16
- - Integration with `.faf` project DNA
17
- - Git-native accountability (no external services required)
18
-
19
- **Example .taf entry:**
33
+ **Example Test Receipt:**
20
34
  ```yaml
21
35
  - timestamp: 2026-02-17T19:12:14.810Z
22
36
  result: PASSED
@@ -28,6 +42,15 @@ A `.taf` file is a git-tracked timeline of your testing history:
28
42
  trigger: github-actions
29
43
  ```
30
44
 
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
+
47
+ **What you get:**
48
+ - **Proof over time** — longitudinal evidence, not snapshots
49
+ - **Pattern detection** — pass-rate trends, regression vs new failure
50
+ - **Platform-agnostic** — works in ANY CI/CD (GitHub Actions, GitLab, Jenkins, CircleCI, Bitbucket, Azure, local, pre-commit)
51
+ - **Git-native** — no external services, no SaaS lock-in
52
+ - **Cannot be gamed** — git SHA detects edits, append-only history detects deletions, CI sandbox prevents output forgery
53
+
31
54
  ---
32
55
 
33
56
  ## 👥 WHO
@@ -125,6 +148,32 @@ Works in **ANY CI/CD** environment that runs Node.js:
125
148
 
126
149
  ---
127
150
 
151
+ ## 🧩 Use Cases
152
+
153
+ TAF works on any git repo. Adoption requires **zero ecosystem buy-in** — install the action, you get receipts. Below are the use cases TAF serves today and tomorrow:
154
+
155
+ ### Standalone (no FAF required)
156
+
157
+ | Use Case | What TAF gives you |
158
+ |---|---|
159
+ | **Plain JS/TS projects** | Receipt for every Jest or Vitest run, on every CI execution |
160
+ | **Pytest projects** | Receipt for every Python test run *(pending pytest parser — v2.2 roadmap)* |
161
+ | **Open source maintainers** | "This repo has 1,847 receipts going back 14 months, none missing" |
162
+ | **Regulated industries** (SOC 2, ISO, HIPAA) | Append-only longitudinal evidence — auditors get a tamper-evident timeline, not a snapshot |
163
+ | **Supply-chain trust** | "Prove these tests ran before this artifact shipped" |
164
+ | **AI-agent verification** | "Prove this agent's code passed tests consistently over the last 90 days" |
165
+
166
+ ### With FAF (optional integration)
167
+
168
+ | Use Case | What TAF gives you |
169
+ |---|---|
170
+ | **FAF-aware projects** | Receipts include `faf_score`, `faf_associated`, `faf_location` — the receipt tells you not just *did the tests pass*, but *what was the project's AI-readiness when they ran*. Score trends over time become visible. |
171
+ | **Full CAR Framework** | TAF (Receipt) + WJTTC (Audit) + FAF (Claim) — closed-loop attestation: project DNA → testing audit → permanent receipt |
172
+
173
+ **FAF is one tenant among many.** TAF is the platform. The receipt printer doesn't care what kind of project prints to it.
174
+
175
+ ---
176
+
128
177
  ## 🚀 HOW
129
178
 
130
179
  ### Quick Start (GitHub Actions)
@@ -297,8 +346,8 @@ Options:
297
346
  | Framework | Status | Notes |
298
347
  |-----------|--------|-------|
299
348
  | **Jest** | ✅ Fully supported | All output formats |
349
+ | **Vitest** | ✅ Fully supported | Including todo counts |
300
350
  | Mocha | ⏳ Planned | - |
301
- | Vitest | ⏳ Planned | - |
302
351
  | Pytest | ⏳ Planned | - |
303
352
  | Go test | ⏳ Planned | - |
304
353
  | Rust cargo test | ⏳ Planned | - |
@@ -466,13 +515,27 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines.
466
515
 
467
516
  ## 📚 Learn More
468
517
 
469
- - [FAF CLI](https://npmjs.com/package/faf-cli) - Create and manage `.faf` files
518
+ - [FAF CLI](https://npmjs.com/package/faf-cli) - Create and manage `.faf` files (one of TAF's use cases)
470
519
  - [MCP Server](https://npmjs.com/package/claude-faf-mcp) - Claude MCP integration
471
520
  - [Website](https://faf.one) - Official FAF website
472
521
  - [GitHub Discussions](https://github.com/Wolfe-Jam/faf/discussions) - Ask questions
473
522
 
474
523
  ---
475
524
 
525
+ ## 🛣️ Standards Roadmap
526
+
527
+ | Format | IANA Status |
528
+ |---|---|
529
+ | `application/vnd.faf+yaml` (FAF) | ✅ **Registered** |
530
+ | `application/vnd.fafm+yaml` (VML) | 🟡 **Under review** |
531
+ | `application/vnd.taf+yaml` (TAF) | ⏳ **Queued** |
532
+
533
+ `.taf` is filed entirely on its own merits — append-only test provenance, git-tracked, tamper-evident — independent of `.faf`'s registration.
534
+
535
+ ---
536
+
537
+ If `faf-taf-git` has been useful, consider starring the repo — it helps others find it.
538
+
476
539
  ## 📄 License
477
540
 
478
541
  MIT - FREE FOREVER
package/SECURITY.md ADDED
@@ -0,0 +1,19 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We provide security updates for the latest released version. For older versions, please upgrade to the current release.
6
+
7
+ ## Reporting a Vulnerability
8
+
9
+ If you discover a security vulnerability, please email **security@faf.one** directly.
10
+
11
+ **Please do not open a public GitHub issue for security reports.** Responsible disclosure gives us time to fix the issue before it's widely known.
12
+
13
+ When reporting, please include:
14
+ - A description of the vulnerability
15
+ - Steps to reproduce
16
+ - Affected versions (if known)
17
+ - Any suggested fix (optional)
18
+
19
+ We aim to respond within 7 days.
package/action.yml CHANGED
@@ -1,5 +1,5 @@
1
- name: 'FAF TAF Action'
2
- description: 'Automatically update .taf (Testing Activity Feed) files with test results'
1
+ name: 'TAF — Testing AI Format'
2
+ description: 'TAF (Testing AI Format) — the Test Receipt Printer for git. Prints a Test Receipt to .taf on every CI run: append-only, cannot be gamed. Proof over time.'
3
3
  author: 'wolfejam'
4
4
 
5
5
  branding:
@@ -21,6 +21,11 @@ inputs:
21
21
  required: false
22
22
  default: 'chore(taf): update .taf receipt [skip ci]'
23
23
 
24
+ target-branch:
25
+ description: 'Push receipts to a dedicated branch (e.g. taf-receipts) instead of the current branch. Branch is created automatically on first run and seeded with existing .taf data.'
26
+ required: false
27
+ default: ''
28
+
24
29
  outputs:
25
30
  result:
26
31
  description: 'Test result (PASSED, FAILED, IMPROVED, DEGRADED)'
package/badge.svg ADDED
@@ -0,0 +1,21 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="145" height="20" role="img" aria-label="TAF: 55/55 passing">
2
+ <title>TAF: 55/55 passing</title>
3
+ <linearGradient id="s" x2="0" y2="100%">
4
+ <stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
5
+ <stop offset="1" stop-opacity=".1"/>
6
+ </linearGradient>
7
+ <clipPath id="r">
8
+ <rect width="145" height="20" rx="3" fill="#fff"/>
9
+ </clipPath>
10
+ <g clip-path="url(#r)">
11
+ <rect width="40" height="20" fill="#555"/>
12
+ <rect x="40" width="105" height="20" fill="#003366"/>
13
+ <rect width="145" height="20" fill="url(#s)"/>
14
+ </g>
15
+ <g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="11">
16
+ <text x="20" y="14" fill="#010101" fill-opacity=".3">TAF</text>
17
+ <text x="20" y="13" fill="#fff">TAF</text>
18
+ <text x="92.5" y="14" fill="#010101" fill-opacity=".3">55/55 passing</text>
19
+ <text x="92.5" y="13" fill="#fff">55/55 passing</text>
20
+ </g>
21
+ </svg>
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Badge Generator for faf-taf-git
3
+ *
4
+ * Generates shields.io-style SVG badges from .taf test history.
5
+ * Self-contained SVG with Verdana font, no external dependencies.
6
+ */
7
+ export interface BadgeOptions {
8
+ tafPath?: string;
9
+ label?: string;
10
+ }
11
+ export interface BadgeResult {
12
+ success: boolean;
13
+ svg?: string;
14
+ error?: string;
15
+ }
16
+ /**
17
+ * Render a shields.io flat-style SVG badge.
18
+ */
19
+ export declare function renderBadgeSvg(label: string, value: string, color: string): string;
20
+ /**
21
+ * Generate a badge SVG from a .taf file.
22
+ */
23
+ export declare function generateBadge(options?: BadgeOptions): BadgeResult;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/wolfejam/FAF/faf-taf-git/src/badge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAiClF;AAqCD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,CA6BrE"}