faf-taf-git 2.4.1 → 2.4.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 (50) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +1 -1
  3. package/package.json +14 -1
  4. package/project.faf +2 -2
  5. package/.faf-dna +0 -95
  6. package/.fafignore +0 -41
  7. package/.github/dependabot.yml +0 -10
  8. package/.github/workflows/ci.yml +0 -53
  9. package/.github/workflows/claude-code-review.yml +0 -36
  10. package/.github/workflows/claude.yml +0 -39
  11. package/.github/workflows/homebrew.yml +0 -19
  12. package/.taf +0 -98
  13. package/CLAUDE.md +0 -30
  14. package/CODE_OF_CONDUCT.md +0 -21
  15. package/CONTRIBUTING.md +0 -289
  16. package/SECURITY.md +0 -19
  17. package/action.yml +0 -50
  18. package/agent.fafa +0 -53
  19. package/badge.svg +0 -21
  20. package/dist/bundle/index.js +0 -36554
  21. package/dist/index.js +0 -42827
  22. package/dist/index.js.map +0 -1
  23. package/dist/licenses.txt +0 -126
  24. package/dist/sourcemap-register.js +0 -1
  25. package/docs/RELEASE-NOTES.md +0 -200
  26. package/docs/USER-GUIDE.md +0 -301
  27. package/jest.config.js +0 -13
  28. package/src/badge.ts +0 -138
  29. package/src/cli.ts +0 -311
  30. package/src/index.ts +0 -201
  31. package/src/parsers/bun.ts +0 -103
  32. package/src/parsers/index.ts +0 -50
  33. package/src/parsers/jest.ts +0 -104
  34. package/src/parsers/junit.ts +0 -110
  35. package/src/parsers/vitest.ts +0 -65
  36. package/src/parsers/wjttc.ts +0 -160
  37. package/src/taf-core.ts +0 -139
  38. package/test-mcp.ts +0 -83
  39. package/test-standalone.ts +0 -87
  40. package/tests/action-bundle.test.ts +0 -34
  41. package/tests/action-parse-error.test.ts +0 -47
  42. package/tests/badge.test.ts +0 -260
  43. package/tests/bun-parser.test.ts +0 -173
  44. package/tests/cli-version.test.ts +0 -31
  45. package/tests/jest-parser.test.ts +0 -122
  46. package/tests/junit-parser.test.ts +0 -109
  47. package/tests/vitest-parser.test.ts +0 -112
  48. package/tests/wjttc-parser.test.ts +0 -116
  49. package/tests/wjttc-taf.test.ts +0 -470
  50. package/tsconfig.json +0 -18
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.4.1 | canonical=project.faf | family=TAF -->
2
+ <!-- faf: doc=changelog | latest=v2.4.2 | canonical=project.faf | family=TAF -->
3
3
 
4
4
  # Changelog
5
5
 
@@ -8,6 +8,16 @@ 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.4.2] - 2026-10-30
12
+
13
+ undici 6.29.1 in the Action bundle (security), and the npm package ships only the CLI: 34 kB instead of 1.0 MB.
14
+
15
+ ### Security
16
+ - **undici 6.28.1 → 6.29.1** in the lockfile and the rebuilt Action bundle (`dist/index.js`). Clears 5 Dependabot alerts (TLS certificate check bypass, denial of service). undici comes in through `@actions/core`; faf-taf-git makes no HTTP requests itself, so the risk was low, but the bundle no longer carries a known-vulnerable copy.
17
+
18
+ ### Changed
19
+ - **The npm package ships only the CLI:** a `files` list in package.json. 1.0 MB → 34 kB packed, 94 → 48 files. Out: `src/`, `tests/`, `.github/`, dev configs, and the GitHub Action bundle (`dist/index.js`), which workflows run from the git tag, never from npm. The Action itself is unchanged.
20
+
11
21
  ## [2.4.1] - 2026-10-30
12
22
 
13
23
  `faf-taf-git --version` answers, and the descriptions say tamper-evident, not "cannot be gamed".
package/README.md CHANGED
@@ -76,7 +76,7 @@ jobs:
76
76
 
77
77
  - name: Print the receipt
78
78
  if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
79
- uses: Wolfe-Jam/faf-taf-git@v2.4.1
79
+ uses: Wolfe-Jam/faf-taf-git@v2.4.2
80
80
  with:
81
81
  test-output-file: test-output.txt
82
82
  target-branch: taf-receipts
package/package.json CHANGED
@@ -1,11 +1,24 @@
1
1
  {
2
2
  "name": "faf-taf-git",
3
- "version": "2.4.1",
3
+ "version": "2.4.2",
4
4
  "description": "A Test Receipt Printer for git. Every CI run prints a receipt to .taf — append-only, timestamped, kept in git. Proof over time.",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
7
7
  "faf-taf-git": "dist/cli.js"
8
8
  },
9
+ "files": [
10
+ "dist/**/*",
11
+ "!dist/index.js",
12
+ "!dist/index.js.map",
13
+ "!dist/bundle",
14
+ "!dist/sourcemap-register.js",
15
+ "!dist/licenses.txt",
16
+ "README.md",
17
+ "RECEIPT-FORMAT.md",
18
+ "CHANGELOG.md",
19
+ "LICENSE",
20
+ "project.faf"
21
+ ],
9
22
  "scripts": {
10
23
  "build": "tsc && ncc build src/index.ts -o dist --source-map --license licenses.txt",
11
24
  "test": "jest"
package/project.faf CHANGED
@@ -29,8 +29,8 @@ human_context:
29
29
  what: "A Test Receipt Printer for git. Every CI run prints a receipt to .taf: append-only, timestamped, kept in git. Proof over time."
30
30
  why: Test results vanish when CI logs expire. Receipts stay in git, so anyone can look back and check whether main was green before a release.
31
31
  where: https://github.com/Wolfe-Jam/faf-taf-git
32
- when: v2.4.1 (2026-10-30), --version fix; v2.4.0 (2026-10-29) JUnit XML parser; live since v1.0.0 (2025-10-27)
33
- how: "Run tests, save the output (or a JUnit XML report), then `uses: Wolfe-Jam/faf-taf-git@v2.4.1` with `target-branch: taf-receipts`. Anywhere else: `npx faf-taf-git --file test-output.txt --commit`. The taf-receipts branch only grows: never rewrite it."
32
+ when: v2.4.2 (2026-10-30), undici security fix + CLI-only npm package; v2.4.1 --version fix; v2.4.0 (2026-10-29) JUnit XML parser; live since v1.0.0 (2025-10-27)
33
+ how: "Run tests, save the output (or a JUnit XML report), then `uses: Wolfe-Jam/faf-taf-git@v2.4.2` with `target-branch: taf-receipts`. Anywhere else: `npx faf-taf-git --file test-output.txt --commit`. The taf-receipts branch only grows: never rewrite it."
34
34
  monorepo:
35
35
  packages_count: slotignored
36
36
  build_orchestrator: slotignored
package/.faf-dna DELETED
@@ -1,95 +0,0 @@
1
- {
2
- "birthCertificate": {
3
- "born": "2025-10-28T01:26:05.692Z",
4
- "birthDNA": 22,
5
- "birthDNASource": "CLAUDE.md",
6
- "projectDNA": "1785d1ac1c20876b",
7
- "authenticated": false,
8
- "certificate": "FAF-2025-FAFTAFAC-TMZU"
9
- },
10
- "versions": [
11
- {
12
- "version": "v1.0.0",
13
- "timestamp": "2025-10-28T01:26:05.693Z",
14
- "score": 22,
15
- "changes": [
16
- "Initial context from CLAUDE.md"
17
- ],
18
- "approved": false,
19
- "growth": 0,
20
- "growthRate": 0
21
- },
22
- {
23
- "version": "v1.0.1",
24
- "timestamp": "2025-10-28T01:26:05.721Z",
25
- "score": 50,
26
- "changes": [
27
- "Initial .faf generation from project"
28
- ],
29
- "approved": false,
30
- "growth": 28,
31
- "growthRate": 28
32
- }
33
- ],
34
- "current": {
35
- "version": "v1.0.1",
36
- "score": 50,
37
- "approved": false,
38
- "lastSync": "2025-10-28T01:26:05.721Z"
39
- },
40
- "recovery": {
41
- "claudeMD": "/Users/wolfejam/FAF/faf-taf-action/CLAUDE.md",
42
- "lastBackup": "2025-10-28T01:26:05.693Z",
43
- "syncStatus": "active",
44
- "autoRecover": true
45
- },
46
- "growth": {
47
- "totalGrowth": 28,
48
- "daysActive": 0,
49
- "averageDailyGrowth": 28,
50
- "bestDay": {
51
- "date": "2025-10-28T01:26:05.721Z",
52
- "growth": 28
53
- },
54
- "bestWeek": {
55
- "start": "2025-10-28T01:26:05.693Z",
56
- "growth": 0
57
- },
58
- "milestones": [
59
- {
60
- "type": "birth",
61
- "score": 22,
62
- "date": "2025-10-28T01:26:05.693Z",
63
- "version": "v1.0.0",
64
- "label": "Birth",
65
- "emoji": "🐣"
66
- },
67
- {
68
- "type": "doubled",
69
- "score": 50,
70
- "date": "2025-10-28T01:26:05.721Z",
71
- "version": "v1.0.1",
72
- "label": "Doubled",
73
- "emoji": "2️⃣"
74
- },
75
- {
76
- "type": "peak",
77
- "score": 50,
78
- "date": "2025-10-28T01:26:05.721Z",
79
- "version": "v1.0.1",
80
- "label": "Peak",
81
- "emoji": "🏔️"
82
- },
83
- {
84
- "type": "current",
85
- "score": 50,
86
- "date": "2025-10-28T01:26:05.721Z",
87
- "version": "v1.0.1",
88
- "label": "Current",
89
- "emoji": "📍"
90
- }
91
- ]
92
- },
93
- "lastModified": "2025-10-28T01:26:05.721Z",
94
- "format": "faf-dna-v1"
95
- }
package/.fafignore DELETED
@@ -1,41 +0,0 @@
1
- # .fafignore - Exclude files/directories from .faf context
2
- # Similar to .gitignore syntax
3
- # Lines starting with # are comments
4
-
5
- # Dependencies and build outputs
6
- node_modules/
7
- dist/
8
- build/
9
- coverage/
10
-
11
- # Python environments
12
- __pycache__/
13
- venv/
14
- .venv/
15
-
16
- # IDE and system files
17
- .vscode/
18
- .idea/
19
- .DS_Store
20
-
21
- # Sensitive files
22
- .env
23
- .env.*
24
- *.key
25
- *.pem
26
-
27
- # Logs and temporary files
28
- *.log
29
- logs/
30
- tmp/
31
- temp/
32
-
33
- # Large media files
34
- *.jpg
35
- *.png
36
- *.mp4
37
- *.pdf
38
-
39
- # Custom exclusions (add your own below)
40
- # example: my-large-data-folder/
41
- # example: *.generated.ts
@@ -1,10 +0,0 @@
1
- version: 2
2
- updates:
3
- # Keeps workflow `uses:` pins current (e.g. Wolfe-Jam/faf-taf-git) so they
4
- # don't drift behind new releases. Security alerts don't need this file.
5
- - package-ecosystem: "github-actions"
6
- directory: "/"
7
- schedule:
8
- interval: "monthly"
9
- commit-message:
10
- prefix: "ci"
@@ -1,53 +0,0 @@
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@v7
19
-
20
- - name: Setup Node.js
21
- uses: actions/setup-node@v7
22
- with:
23
- node-version: '24.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.3.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
@@ -1,36 +0,0 @@
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
- # A Dependabot PR cannot read this repo's Actions secrets — GitHub withholds
10
- # them from bot-authored runs — so the action fails its own env validation
11
- # and the PR carries a red that says nothing about the change it proposes.
12
- # Receipt (faf-cli, 2026-09-23): the last 8 human PRs all passed this
13
- # workflow and both Dependabot PRs failed on that error alone. A dependency
14
- # bump is Dependabot's diff to justify, not Claude's.
15
- if: github.actor != 'dependabot[bot]'
16
- runs-on: ubuntu-latest
17
- permissions:
18
- contents: read
19
- pull-requests: write
20
- issues: read
21
- id-token: write
22
-
23
- steps:
24
- - name: Checkout repository
25
- uses: actions/checkout@v7
26
- with:
27
- fetch-depth: 1
28
-
29
- - name: Run Claude Code Review
30
- id: claude-review
31
- uses: anthropics/claude-code-action@v1
32
- with:
33
- claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
34
- plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
35
- plugins: 'code-review@claude-code-plugins'
36
- prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
@@ -1,39 +0,0 @@
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@v7
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
- claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
38
- additional_permissions: |
39
- actions: read
@@ -1,19 +0,0 @@
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 DELETED
@@ -1,98 +0,0 @@
1
- format_version: 1.0.0
2
- project: faf-taf-git
3
- created: 2025-10-28T01:26:12.944Z
4
- last_updated: 2026-02-19T05:56:11.741Z
5
- faf_associated: true
6
- faf_location: project.faf
7
- faf_score: 65
8
- test_history:
9
- - timestamp: 2025-10-28T01:28:38.600Z
10
- result: PASSED
11
- tests:
12
- total: 7
13
- passed: 7
14
- failed: 0
15
- - timestamp: 2025-10-28T01:40:23.935Z
16
- result: PASSED
17
- tests:
18
- total: 7
19
- passed: 7
20
- failed: 0
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/CLAUDE.md DELETED
@@ -1,30 +0,0 @@
1
- <!-- faf:start -->
2
- <!-- faf: faf-taf-git | TypeScript | cli | A Test Receipt Printer for git. Every CI run prints a receipt to .taf: append-only, timestamped, kept in git. Proof over time. -->
3
- <!-- faf: claim=project.faf | family=FAF -->
4
-
5
- # CLAUDE.md — faf-taf-git
6
-
7
- ## What This Is
8
-
9
- A Test Receipt Printer for git. Every CI run prints a receipt to .taf: append-only, timestamped, kept in git. Proof over time.
10
-
11
- ## Stack
12
-
13
- - **Language:** TypeScript
14
- - **Hosting:** npm registry + GitHub Actions Marketplace
15
- - **Build:** TypeScript (tsc)
16
- - **CI/CD:** GitHub Actions
17
-
18
- ## Context
19
-
20
- - **Who:** Maintainers and teams who want proof their tests kept passing on main, and the reviewers, auditors and AI agents who check it
21
- - **What:** A Test Receipt Printer for git. Every CI run prints a receipt to .taf: append-only, timestamped, kept in git. Proof over time.
22
- - **Why:** Test results vanish when CI logs expire. Receipts stay in git, so anyone can look back and check whether main was green before a release.
23
- - **Where:** https://github.com/Wolfe-Jam/faf-taf-git
24
- - **When:** v2.4.1 (2026-10-30), --version fix; v2.4.0 (2026-10-29) JUnit XML parser; live since v1.0.0 (2025-10-27)
25
- - **How:** Run tests, save the output (or a JUnit XML report), then `uses: Wolfe-Jam/faf-taf-git@v2.4.1` with `target-branch: taf-receipts`. Anywhere else: `npx faf-taf-git --file test-output.txt --commit`. The taf-receipts branch only grows: never rewrite it.
26
-
27
- ---
28
-
29
- *STATUS: SYNC ACTIVE — 2026-10-30T04:26:00.762Z*
30
- <!-- faf:end -->
@@ -1,21 +0,0 @@
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.