faf-taf-git 2.0.4 → 2.2.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.
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 +28 -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 +69 -12
  11. package/SECURITY.md +19 -0
  12. package/action.yml +6 -1
  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.1 | 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,31 @@ 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.1] - 2026-06-17
12
+
13
+ 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.
14
+
15
+ ### Added
16
+ - **Native bun-test parser** (was v2.2.0) — closes the shim-shaped undercount; reads `bun test` output directly.
17
+ - **`target-branch` input** (was v2.1.0) — write `.taf` receipts to a dedicated branch.
18
+
19
+ ### Changed
20
+ - **TAF badge pass color cyan `#00D4D4` → navy `#003366`** — white text needs a deep-shade background; cyan was too light.
21
+
22
+ ### Fixed
23
+ - **`switchToTargetBranch`** no longer fails on first run when the consumer repo has no `.taf` seed (was v2.1.2).
24
+ - undici vulnerabilities resolved via `@actions/github` / `@actions/core` upgrade; `@actions/core` pinned to v2 (v3 breaks CJS exports in CI).
25
+
26
+ ### Notes
27
+ - faf-taf-git is now 100% Trophy (TAF identity cleanup). Security Policy + Code of Conduct added.
28
+
29
+ ## [2.1.2] - 2026-05-06
30
+
31
+ ### Fixed
32
+ - **`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.
33
+ - 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.
34
+ - 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.
35
+
8
36
  ## [2.0.4] - 2026-02-17
9
37
 
10
38
  ### 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,30 @@
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
+ > **Q: What does TAF do?** A: It prints Receipts.
10
+ > **Q: What sort of Receipts?** A: Test Receipts.
11
+ > **Q: Why do I need Test Receipts?** A: Proof over time.
12
+ >
13
+ > *Bonus: Cannot be gamed.*
14
+
15
+ **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.
4
16
 
5
- Part of the Golden Triangle: `.faf` (what it is) + `repo` (implementation) + `.taf` (proof it works)
17
+ **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.
18
+
19
+ `npm: faf-taf-git` · `action: Wolfe-Jam/faf-taf-git`
6
20
 
7
21
  ---
8
22
 
9
23
  ## 🎯 WHAT
10
24
 
11
- **faf-taf-git** automatically generates `.taf` receipts from your test runs.
12
-
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)
25
+ **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.
18
26
 
19
- **Example .taf entry:**
27
+ **Example Test Receipt:**
20
28
  ```yaml
21
29
  - timestamp: 2026-02-17T19:12:14.810Z
22
30
  result: PASSED
@@ -28,6 +36,15 @@ A `.taf` file is a git-tracked timeline of your testing history:
28
36
  trigger: github-actions
29
37
  ```
30
38
 
39
+ **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.
40
+
41
+ **What you get:**
42
+ - **Proof over time** — longitudinal evidence, not snapshots
43
+ - **Pattern detection** — pass-rate trends, regression vs new failure
44
+ - **Platform-agnostic** — works in ANY CI/CD (GitHub Actions, GitLab, Jenkins, CircleCI, Bitbucket, Azure, local, pre-commit)
45
+ - **Git-native** — no external services, no SaaS lock-in
46
+ - **Cannot be gamed** — git SHA detects edits, append-only history detects deletions, CI sandbox prevents output forgery
47
+
31
48
  ---
32
49
 
33
50
  ## 👥 WHO
@@ -125,6 +142,32 @@ Works in **ANY CI/CD** environment that runs Node.js:
125
142
 
126
143
  ---
127
144
 
145
+ ## 🧩 Use Cases
146
+
147
+ 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:
148
+
149
+ ### Standalone (no FAF required)
150
+
151
+ | Use Case | What TAF gives you |
152
+ |---|---|
153
+ | **Plain JS/TS projects** | Receipt for every Jest or Vitest run, on every CI execution |
154
+ | **Pytest projects** | Receipt for every Python test run *(pending pytest parser — v2.2 roadmap)* |
155
+ | **Open source maintainers** | "This repo has 1,847 receipts going back 14 months, none missing" |
156
+ | **Regulated industries** (SOC 2, ISO, HIPAA) | Append-only longitudinal evidence — auditors get a tamper-evident timeline, not a snapshot |
157
+ | **Supply-chain trust** | "Prove these tests ran before this artifact shipped" |
158
+ | **AI-agent verification** | "Prove this agent's code passed tests consistently over the last 90 days" |
159
+
160
+ ### With FAF (optional integration)
161
+
162
+ | Use Case | What TAF gives you |
163
+ |---|---|
164
+ | **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. |
165
+ | **Full CAR Framework** | TAF (Receipt) + WJTTC (Audit) + FAF (Claim) — closed-loop attestation: project DNA → testing audit → permanent receipt |
166
+
167
+ **FAF is one tenant among many.** TAF is the platform. The receipt printer doesn't care what kind of project prints to it.
168
+
169
+ ---
170
+
128
171
  ## 🚀 HOW
129
172
 
130
173
  ### Quick Start (GitHub Actions)
@@ -297,8 +340,8 @@ Options:
297
340
  | Framework | Status | Notes |
298
341
  |-----------|--------|-------|
299
342
  | **Jest** | ✅ Fully supported | All output formats |
343
+ | **Vitest** | ✅ Fully supported | Including todo counts |
300
344
  | Mocha | ⏳ Planned | - |
301
- | Vitest | ⏳ Planned | - |
302
345
  | Pytest | ⏳ Planned | - |
303
346
  | Go test | ⏳ Planned | - |
304
347
  | Rust cargo test | ⏳ Planned | - |
@@ -466,13 +509,27 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines.
466
509
 
467
510
  ## 📚 Learn More
468
511
 
469
- - [FAF CLI](https://npmjs.com/package/faf-cli) - Create and manage `.faf` files
512
+ - [FAF CLI](https://npmjs.com/package/faf-cli) - Create and manage `.faf` files (one of TAF's use cases)
470
513
  - [MCP Server](https://npmjs.com/package/claude-faf-mcp) - Claude MCP integration
471
514
  - [Website](https://faf.one) - Official FAF website
472
515
  - [GitHub Discussions](https://github.com/Wolfe-Jam/faf/discussions) - Ask questions
473
516
 
474
517
  ---
475
518
 
519
+ ## 🛣️ Standards Roadmap
520
+
521
+ | Format | IANA Status |
522
+ |---|---|
523
+ | `application/vnd.faf+yaml` (FAF) | ✅ **Registered** |
524
+ | `application/vnd.fafm+yaml` (VML) | 🟡 **Under review** |
525
+ | `application/vnd.taf+yaml` (TAF) | ⏳ **Queued** |
526
+
527
+ `.taf` is filed entirely on its own merits — append-only test provenance, git-tracked, tamper-evident — independent of `.faf`'s registration.
528
+
529
+ ---
530
+
531
+ If `faf-taf-git` has been useful, consider starring the repo — it helps others find it.
532
+
476
533
  ## 📄 License
477
534
 
478
535
  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
1
  name: 'FAF TAF Action'
2
- description: 'Automatically update .taf (Testing Activity Feed) files with test results'
2
+ description: 'A 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"}