faf-taf-git 2.4.0 → 2.4.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/CHANGELOG.md +13 -1
- package/CLAUDE.md +11 -19
- package/README.md +1 -1
- package/RECEIPT-FORMAT.md +1 -1
- package/action.yml +1 -1
- package/agent.fafa +1 -1
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -1
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
- package/project.faf +32 -242
- package/src/cli.ts +15 -1
- package/tests/cli-version.test.ts +31 -0
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.
|
|
2
|
+
<!-- faf: doc=changelog | latest=v2.4.1 | canonical=project.faf | family=TAF -->
|
|
3
3
|
|
|
4
4
|
# Changelog
|
|
5
5
|
|
|
@@ -8,6 +8,18 @@ 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.1] - 2026-10-30
|
|
12
|
+
|
|
13
|
+
`faf-taf-git --version` answers, and the descriptions say tamper-evident, not "cannot be gamed".
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- **`--version` / `-V`** print the package version and exit 0. Before, `faf-taf-git --version` fell through to "No test output file specified" and exit 1, so a stranger's first check failed (found by a cold install of the published 2.4.0). `-v` is still `--verbose`. `tests/cli-version.test.ts`.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **Descriptions:** `package.json` (npm) and `action.yml` (GitHub Marketplace) no longer say "cannot be gamed"; they now read "append-only, timestamped, kept in git. Proof over time." The RECEIPT-FORMAT heading is "Tamper-evident, not tamper-proof", matching the README.
|
|
20
|
+
- **project.faf:** rebuilt lean from the repo (267 → 57 lines), Trophy. `.faf-dna` unchanged.
|
|
21
|
+
- **README recipe** pins `@v2.4.1`. The Action itself is unchanged from 2.4.0.
|
|
22
|
+
|
|
11
23
|
## [2.4.0] - 2026-10-29
|
|
12
24
|
|
|
13
25
|
JUnit XML parser: TAF now reads the report format most test runners can write, so Python, Rust, Go, Java and .NET projects get receipts with no conversion script.
|
package/CLAUDE.md
CHANGED
|
@@ -1,38 +1,30 @@
|
|
|
1
1
|
<!-- faf:start -->
|
|
2
|
-
<!-- faf: faf-taf-git | TypeScript | cli |
|
|
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
3
|
<!-- faf: claim=project.faf | family=FAF -->
|
|
4
4
|
|
|
5
5
|
# CLAUDE.md — faf-taf-git
|
|
6
6
|
|
|
7
7
|
## What This Is
|
|
8
8
|
|
|
9
|
-
|
|
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
10
|
|
|
11
11
|
## Stack
|
|
12
12
|
|
|
13
13
|
- **Language:** TypeScript
|
|
14
|
-
- **
|
|
15
|
-
- **Build:** TypeScript
|
|
16
|
-
- **Package Manager:** npm
|
|
17
|
-
- **API:** REST
|
|
18
|
-
- **Hosting:** npm Registry
|
|
14
|
+
- **Hosting:** npm registry + GitHub Actions Marketplace
|
|
15
|
+
- **Build:** TypeScript (tsc)
|
|
19
16
|
- **CI/CD:** GitHub Actions
|
|
20
|
-
- **TargetUser:** developers
|
|
21
|
-
- **CoreProblem:** understanding project
|
|
22
|
-
- **MissionPurpose:** project documentation
|
|
23
|
-
- **PackageManager:** npm/yarn/pnpm
|
|
24
|
-
- **MainLanguage:** JavaScript/TypeScript
|
|
25
17
|
|
|
26
18
|
## Context
|
|
27
19
|
|
|
28
|
-
- **Who:**
|
|
29
|
-
- **What:**
|
|
30
|
-
- **Why:**
|
|
31
|
-
- **Where:**
|
|
32
|
-
- **When:**
|
|
33
|
-
- **How:**
|
|
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.
|
|
34
26
|
|
|
35
27
|
---
|
|
36
28
|
|
|
37
|
-
*STATUS: SYNC ACTIVE — 2026-10-
|
|
29
|
+
*STATUS: SYNC ACTIVE — 2026-10-30T04:26:00.762Z*
|
|
38
30
|
<!-- faf:end -->
|
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.
|
|
79
|
+
uses: Wolfe-Jam/faf-taf-git@v2.4.1
|
|
80
80
|
with:
|
|
81
81
|
test-output-file: test-output.txt
|
|
82
82
|
target-branch: taf-receipts
|
package/RECEIPT-FORMAT.md
CHANGED
|
@@ -15,7 +15,7 @@ A **Receipt Printer for git.** Every CI run prints one receipt — timestamp, co
|
|
|
15
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
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
17
|
|
|
18
|
-
##
|
|
18
|
+
## Tamper-*evident*, not tamper-proof
|
|
19
19
|
|
|
20
20
|
Three mechanisms make tampering **visible**:
|
|
21
21
|
- **Edits** → the commit SHA changes; a rewritten receipt no longer matches its commit.
|
package/action.yml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: 'TAF — Testing AI Format'
|
|
2
|
-
description: 'A Test Receipt Printer for git. Every CI run prints a receipt to .taf — append-only,
|
|
2
|
+
description: 'A Test Receipt Printer for git. Every CI run prints a receipt to .taf — append-only, timestamped, kept in git. Proof over time.'
|
|
3
3
|
author: 'wolfejam'
|
|
4
4
|
|
|
5
5
|
branding:
|
package/agent.fafa
CHANGED
|
@@ -3,7 +3,7 @@ agent:
|
|
|
3
3
|
name: faf-taf-git
|
|
4
4
|
displayName: faf-taf-git
|
|
5
5
|
id: urn:air:faf.one:agent:faf-taf-git
|
|
6
|
-
version: 2.4.
|
|
6
|
+
version: 2.4.1
|
|
7
7
|
description: "A Test Receipt Printer for git: each CI run appends a receipt with the test counts and result to a .taf file kept in git."
|
|
8
8
|
homepage: https://faf.one
|
|
9
9
|
capabilities:
|
package/dist/cli.d.ts
CHANGED
|
@@ -28,3 +28,8 @@ export interface CLIResult {
|
|
|
28
28
|
* Main CLI function - reads test output from file
|
|
29
29
|
*/
|
|
30
30
|
export declare function runTafGit(options?: CLIOptions): Promise<CLIResult>;
|
|
31
|
+
/**
|
|
32
|
+
* The installed package's version. package.json sits one level above both
|
|
33
|
+
* src/ (tests) and dist/ (the published bin).
|
|
34
|
+
*/
|
|
35
|
+
export declare function cliVersion(): string;
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///Users/wolfejam/FAF/faf-taf-git/src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AASH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CA8G5E"}
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///Users/wolfejam/FAF/faf-taf-git/src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AASH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CA8G5E;AA2ED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
package/dist/cli.js
CHANGED
|
@@ -41,6 +41,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
})();
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
43
|
exports.runTafGit = runTafGit;
|
|
44
|
+
exports.cliVersion = cliVersion;
|
|
44
45
|
const child_process_1 = require("child_process");
|
|
45
46
|
const fs = __importStar(require("fs"));
|
|
46
47
|
const path = __importStar(require("path"));
|
|
@@ -214,11 +215,23 @@ function handleBadgeCommand(args) {
|
|
|
214
215
|
process.stdout.write(result.svg);
|
|
215
216
|
}
|
|
216
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* The installed package's version. package.json sits one level above both
|
|
220
|
+
* src/ (tests) and dist/ (the published bin).
|
|
221
|
+
*/
|
|
222
|
+
function cliVersion() {
|
|
223
|
+
return JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf-8')).version;
|
|
224
|
+
}
|
|
217
225
|
/**
|
|
218
226
|
* CLI entry point
|
|
219
227
|
*/
|
|
220
228
|
async function main() {
|
|
221
229
|
const args = process.argv.slice(2);
|
|
230
|
+
// --version / -V (-v is --verbose)
|
|
231
|
+
if (args.includes('--version') || args.includes('-V')) {
|
|
232
|
+
console.log(cliVersion());
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
222
235
|
// Subcommand: badge
|
|
223
236
|
if (args[0] === 'badge') {
|
|
224
237
|
handleBadgeCommand(args.slice(1));
|
|
@@ -226,7 +239,7 @@ async function main() {
|
|
|
226
239
|
}
|
|
227
240
|
// Show help
|
|
228
241
|
if (args.includes('--help') || args.includes('-h')) {
|
|
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 JUnit XML (pytest, cargo, Go, Java, .NET ...), 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`);
|
|
242
|
+
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 --version, -V Print the version\n --help, -h Show this help\n\nPARSERS:\n JUnit XML (pytest, cargo, Go, Java, .NET ...), 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`);
|
|
230
243
|
process.exit(0);
|
|
231
244
|
}
|
|
232
245
|
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;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "faf-taf-git",
|
|
3
|
-
"version": "2.4.
|
|
4
|
-
"description": "A Test Receipt Printer for git. Every CI run prints a receipt to .taf — append-only, timestamped,
|
|
3
|
+
"version": "2.4.1",
|
|
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"
|
package/project.faf
CHANGED
|
@@ -1,267 +1,57 @@
|
|
|
1
|
-
faf_version:
|
|
2
|
-
ai_scoring_system: 2025-09-20
|
|
3
|
-
ai_score: 65%
|
|
4
|
-
ai_confidence: MODERATE
|
|
5
|
-
ai_value: 30_seconds_replaces_20_minutes_of_questions
|
|
6
|
-
ai_tldr:
|
|
7
|
-
project: faf-taf-git v2.1.1 - A Test Receipt Printer for git. Proof over time, cannot be gamed.
|
|
8
|
-
stack: TypeScript CLI + GitHub Action (pre-capture architecture)
|
|
9
|
-
quality_bar: ZERO_ERRORS_F1_STANDARDS
|
|
10
|
-
status: PRODUCTION_READY (working in faf-cli repo)
|
|
11
|
-
breakthrough: v2.0.0 pre-capture pattern (tested 19 methods before this)
|
|
12
|
-
current_focus: Ecosystem adoption and user onboarding
|
|
13
|
-
your_role: Support users, fix bugs, add test framework support
|
|
14
|
-
instant_context:
|
|
15
|
-
what_building: A Test Receipt Printer for git. CLI runs on any CI/CD; prints append-only test receipts to .taf, kept in git. FAF-aware optionally — receipts can carry FAF score/identity, but TAF works on any repo.
|
|
16
|
-
tech_stack: TypeScript
|
|
17
|
-
main_language: TypeScript
|
|
18
|
-
deployment: npm + GitHub Actions Marketplace
|
|
19
|
-
architecture: v2.0.0 pre-capture pattern (separate test execution from receipt generation)
|
|
20
|
-
use_cases: Standalone CLI, GitHub Action, GitLab CI, Jenkins, CircleCI, Local development
|
|
21
|
-
test_support: Jest (fully supported) with plans for Mocha, Vitest, Pytest, Go test, Rust cargo
|
|
22
|
-
golden_triangle: .faf (project DNA) + repo (code) + .taf (test proof)
|
|
23
|
-
key_files:
|
|
24
|
-
- src/index.ts (v2.0.0 rewrite - reads test output file)
|
|
25
|
-
- src/parsers/jest.ts (v2.0.4 fix - correct pattern matching)
|
|
26
|
-
- src/taf-core.ts (MCP-portable core)
|
|
27
|
-
- action.yml (v2.0.2 fix - correct bundle path)
|
|
28
|
-
- README.md (6Ws format)
|
|
29
|
-
- CHANGELOG.md (22 versions documented)
|
|
30
|
-
documentation:
|
|
31
|
-
- README: 6Ws format (What/Who/Why/Where/When/How)
|
|
32
|
-
- CHANGELOG: Complete debugging journey (v1.0.4 → v2.0.4)
|
|
33
|
-
- Migration guide: v1.x → v2.x breaking changes
|
|
34
|
-
context_quality:
|
|
35
|
-
slots_filled: 11/21 (52%)
|
|
36
|
-
ai_confidence: MODERATE
|
|
37
|
-
handoff_ready: true
|
|
38
|
-
missing_context: []
|
|
1
|
+
faf_version: "3.0"
|
|
39
2
|
project:
|
|
40
3
|
name: faf-taf-git
|
|
41
|
-
goal:
|
|
42
|
-
innovation: On-the-fly Testing Audit Files - Unheard of in CI/CD
|
|
43
|
-
taf_meaning:
|
|
44
|
-
file: Testing Audit File (.taf)
|
|
45
|
-
feed: Testing Activity Feed (live updates)
|
|
4
|
+
goal: "A Test Receipt Printer for git. Every CI run prints a receipt to .taf: append-only, timestamped, kept in git. Proof over time."
|
|
46
5
|
main_language: TypeScript
|
|
47
|
-
type: cli
|
|
48
|
-
generated: 2025-10-28T01:26:05.656Z
|
|
49
|
-
repository: https://github.com/Wolfe-Jam/faf-taf-git
|
|
50
|
-
license: MIT
|
|
51
|
-
author: wolfejam
|
|
52
|
-
keywords: testing, taf, ci-cd, github-actions, gitlab-ci, platform-agnostic, jest, faf, git
|
|
53
|
-
mission: 🚀 Make Your AI Happy! 🧡 Trust-Driven 🤖
|
|
54
|
-
revolution: 30 seconds replaces 20 minutes of questions
|
|
55
|
-
brand: F1-Inspired Software Engineering - Championship AI Context
|
|
56
|
-
ai_instructions:
|
|
57
|
-
priority_order:
|
|
58
|
-
- 1. Read THIS .faf file first
|
|
59
|
-
- 2. Check CLAUDE.md for session context
|
|
60
|
-
- 3. Review package.json for dependencies
|
|
61
|
-
working_style:
|
|
62
|
-
code_first: true
|
|
63
|
-
explanations: minimal
|
|
64
|
-
quality_bar: zero_errors
|
|
65
|
-
testing: required
|
|
66
|
-
warnings:
|
|
67
|
-
- Never modify dial components without approval
|
|
68
|
-
- All TypeScript must pass strict mode
|
|
69
|
-
- Test coverage required for new features
|
|
6
|
+
type: cli # found: package.json bin
|
|
70
7
|
stack:
|
|
71
8
|
frontend: slotignored
|
|
72
9
|
css_framework: slotignored
|
|
73
10
|
ui_library: slotignored
|
|
74
11
|
state_management: slotignored
|
|
75
12
|
backend: slotignored
|
|
76
|
-
|
|
13
|
+
api_type: slotignored
|
|
14
|
+
runtime: slotignored
|
|
77
15
|
database: slotignored
|
|
78
16
|
connection: slotignored
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
api_type: REST
|
|
82
|
-
hosting: npm Registry
|
|
17
|
+
hosting: npm registry + GitHub Actions Marketplace
|
|
18
|
+
build: TypeScript (tsc)
|
|
83
19
|
cicd: GitHub Actions
|
|
84
20
|
monorepo_tool: slotignored
|
|
21
|
+
package_manager: slotignored
|
|
85
22
|
workspaces: slotignored
|
|
86
23
|
admin: slotignored
|
|
87
24
|
cache: slotignored
|
|
88
25
|
search: slotignored
|
|
89
26
|
storage: slotignored
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
27
|
+
human_context:
|
|
28
|
+
who: Maintainers and teams who want proof their tests kept passing on main, and the reviewers, auditors and AI agents who check it
|
|
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
|
+
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
|
+
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."
|
|
95
34
|
monorepo:
|
|
96
35
|
packages_count: slotignored
|
|
97
36
|
build_orchestrator: slotignored
|
|
98
37
|
versioning_strategy: slotignored
|
|
99
38
|
shared_configs: slotignored
|
|
100
39
|
remote_cache: slotignored
|
|
101
|
-
|
|
102
|
-
commands:
|
|
103
|
-
- npx faf-taf-git
|
|
104
|
-
- --file (test output file - v2.0.0+)
|
|
105
|
-
- --command (custom test command - legacy v1.x)
|
|
106
|
-
- --commit (auto-commit .taf changes)
|
|
107
|
-
- --verbose (detailed output)
|
|
108
|
-
- --message (custom commit message)
|
|
109
|
-
- --cwd (working directory)
|
|
110
|
-
github_action_inputs:
|
|
111
|
-
test-output-file: required (v2.0.0+)
|
|
112
|
-
auto-commit: true (default)
|
|
113
|
-
commit-message: "chore(taf): update .taf receipt [skip ci] (default)"
|
|
114
|
-
architecture:
|
|
115
|
-
version: v2.0.0
|
|
116
|
-
pattern: pre-capture
|
|
117
|
-
breakthrough: Separate test execution from receipt generation
|
|
118
|
-
why: Avoids GitHub Actions execution context corruption
|
|
119
|
-
reliability: Tested 19 methods before this solution
|
|
120
|
-
benefits:
|
|
121
|
-
- More reliable (no execution context issues)
|
|
122
|
-
- Platform-agnostic (works everywhere)
|
|
123
|
-
- Simpler (400+ lines removed, 11KB smaller)
|
|
124
|
-
test_frameworks:
|
|
125
|
-
- Jest (fully supported)
|
|
126
|
-
supported_platforms:
|
|
127
|
-
- GitHub Actions
|
|
128
|
-
- GitLab CI
|
|
129
|
-
- Bitbucket Pipelines
|
|
130
|
-
- Jenkins
|
|
131
|
-
- CircleCI
|
|
132
|
-
- Travis CI
|
|
133
|
-
- Azure Pipelines
|
|
134
|
-
- Local development
|
|
135
|
-
taf_format:
|
|
136
|
-
format: YAML
|
|
137
|
-
file_location: .taf (hidden dotfile)
|
|
138
|
-
purpose: Git-tracked testing timeline - permanent proof your code works
|
|
139
|
-
links_to_faf: true
|
|
140
|
-
snapshots_faf_score: true
|
|
141
|
-
closed_loop_system: .faf (DNA) + repo (code) + .taf (proof) = Golden Triangle
|
|
142
|
-
deployment:
|
|
143
|
-
npm_package: faf-taf-git@2.1.1
|
|
144
|
-
github_action: Wolfe-Jam/faf-taf-git@v2.1.1
|
|
145
|
-
marketplaces:
|
|
146
|
-
- npm Registry
|
|
147
|
-
- GitHub Actions Marketplace
|
|
148
|
-
install: npx faf-taf-git
|
|
149
|
-
production_users:
|
|
150
|
-
- faf-cli (working in CI)
|
|
151
|
-
testing:
|
|
152
|
-
framework: Jest
|
|
153
|
-
coverage: Core functionality
|
|
154
|
-
ci_integration: GitHub Actions
|
|
155
|
-
test_files:
|
|
156
|
-
- tests/ (unit tests)
|
|
157
|
-
quality_gates:
|
|
158
|
-
- All tests must pass
|
|
159
|
-
- TypeScript strict mode
|
|
160
|
-
- Zero build errors
|
|
161
|
-
examples:
|
|
162
|
-
github_actions: README.md Quick Start section
|
|
163
|
-
standalone_cli: README.md Standalone CLI section
|
|
164
|
-
gitlab_ci: README.md GitLab CI section
|
|
165
|
-
jenkins: README.md Jenkins section
|
|
166
|
-
migration: README.md Migration from v1.x section
|
|
167
|
-
performance:
|
|
168
|
-
bundle_size: 1.2MB (v2.0.0 - reduced 11KB from v1.x)
|
|
169
|
-
startup_time: <100ms
|
|
170
|
-
parse_time: <10ms for typical Jest output
|
|
171
|
-
reliability: 100% success rate in faf-cli CI (after v2.0.4)
|
|
172
|
-
preferences:
|
|
173
|
-
quality_bar: zero_errors
|
|
174
|
-
commit_style: conventional_emoji
|
|
175
|
-
response_style: concise_code_first
|
|
176
|
-
explanation_level: minimal
|
|
177
|
-
communication: direct
|
|
178
|
-
testing: required
|
|
179
|
-
documentation: as_needed
|
|
180
|
-
contributing:
|
|
181
|
-
guidelines: CONTRIBUTING.md
|
|
182
|
-
code_style: TypeScript strict mode
|
|
183
|
-
pr_process: Fork, branch, PR with tests
|
|
184
|
-
commit_format: Conventional commits with Co-Authored-By
|
|
185
|
-
testing_required: true
|
|
186
|
-
documentation_required: For new features
|
|
187
|
-
resources:
|
|
188
|
-
readme: README.md (6Ws format)
|
|
189
|
-
changelog: CHANGELOG.md (22 versions documented)
|
|
190
|
-
license: MIT
|
|
191
|
-
repository: https://github.com/Wolfe-Jam/faf-taf-git
|
|
192
|
-
npm: https://npmjs.com/package/faf-taf-git
|
|
193
|
-
issues: https://github.com/Wolfe-Jam/faf-taf-git/issues
|
|
194
|
-
discussions: https://github.com/Wolfe-Jam/faf/discussions
|
|
195
|
-
state:
|
|
196
|
-
phase: production
|
|
197
|
-
version: 2.4.0
|
|
198
|
-
focus: ecosystem_adoption
|
|
199
|
-
status: production_ready
|
|
200
|
-
achievements:
|
|
201
|
-
- v2.0.0 architectural redesign (pre-capture pattern)
|
|
202
|
-
- v2.0.4 parser fix (working in CI)
|
|
203
|
-
- Updated README (6Ws format)
|
|
204
|
-
- Updated CHANGELOG (22 versions documented)
|
|
205
|
-
- TAF Receipt generating successfully in faf-cli repo
|
|
206
|
-
next_milestone: user_adoption
|
|
207
|
-
blockers: null
|
|
208
|
-
tags:
|
|
209
|
-
auto_generated:
|
|
210
|
-
- faf-taf-action
|
|
211
|
-
- none
|
|
212
|
-
- typescript
|
|
213
|
-
smart_defaults:
|
|
214
|
-
- .faf
|
|
215
|
-
- ai-ready
|
|
216
|
-
- "2025"
|
|
217
|
-
- software
|
|
218
|
-
- open-source
|
|
219
|
-
user_defined: null
|
|
220
|
-
human_context:
|
|
221
|
-
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).
|
|
222
|
-
what: TAF file updates in CI/CD pipelines
|
|
223
|
-
why: Improve development efficiency
|
|
224
|
-
where: Any CI/CD platform (GitHub, GitLab, Bitbucket)
|
|
225
|
-
when: During CI/CD test runs
|
|
226
|
-
how: Test-driven development
|
|
227
|
-
additional_context: Part of Golden Triangle (.faf + repo + .taf). Tracks test runs permanently in git. Supports Jest, works as CLI or GitHub Action. Platform-agnostic core - runs on ANY CI/CD with Node.js.
|
|
228
|
-
context_score: 0
|
|
229
|
-
total_prd_score: 65
|
|
230
|
-
success_rate: 50%
|
|
231
|
-
scores:
|
|
232
|
-
faf_score: 50
|
|
233
|
-
slot_based_percentage: 52
|
|
234
|
-
ai_score: 65
|
|
235
|
-
total_slots: 21
|
|
236
|
-
filled_slots: 11
|
|
237
|
-
scoring_method: Honest percentage - no fake minimums
|
|
238
|
-
trust_embedded: COUNT ONCE architecture - trust MY embedded scores
|
|
239
|
-
ai_scoring_details:
|
|
240
|
-
system_date: 2025-09-20
|
|
241
|
-
slot_based_percentage: 52
|
|
242
|
-
ai_score: 65
|
|
243
|
-
total_slots: 21
|
|
244
|
-
filled_slots: 11
|
|
245
|
-
scoring_method: Honest percentage - no fake minimums
|
|
246
|
-
trust_embedded: COUNT ONCE architecture - trust MY embedded scores
|
|
247
|
-
faf_dna:
|
|
248
|
-
birth_dna: 22
|
|
249
|
-
birth_certificate: FAF-2025-FAFTAFAC-TMZU
|
|
250
|
-
birth_date: 2025-10-28T01:26:05.692Z
|
|
251
|
-
current_score: 50
|
|
252
|
-
projectName: faf-taf-git
|
|
253
|
-
projectGoal: A Test Receipt Printer for git — append-only test receipts on every CI run. Proof over time, cannot be gamed.
|
|
254
|
-
generated: 2026-02-17T20:14:09.215Z
|
|
255
|
-
last_major_update: v2.0.4 (2026-02-17)
|
|
256
|
-
production_status: Working in faf-cli repository
|
|
257
|
-
stack_signature: typescript-nodejs-javascript
|
|
258
|
-
detected_frameworks:
|
|
259
|
-
- Claude Code
|
|
260
|
-
- Jest
|
|
261
|
-
- Node.js
|
|
262
|
-
- JavaScript
|
|
40
|
+
tech_stack:
|
|
263
41
|
- TypeScript
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
42
|
+
- "@actions/core"
|
|
43
|
+
- "@actions/exec"
|
|
44
|
+
- "@actions/github"
|
|
45
|
+
- yaml
|
|
46
|
+
key_files:
|
|
47
|
+
- package.json
|
|
48
|
+
- src/index.ts
|
|
49
|
+
- src/cli.ts
|
|
50
|
+
- src/parsers/
|
|
51
|
+
- action.yml
|
|
52
|
+
- RECEIPT-FORMAT.md
|
|
53
|
+
- README.md
|
|
54
|
+
- tsconfig.json
|
|
55
|
+
commands:
|
|
56
|
+
build: npm run build
|
|
57
|
+
test: npm run test
|
package/src/cli.ts
CHANGED
|
@@ -222,12 +222,26 @@ function handleBadgeCommand(args: string[]): void {
|
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
+
/**
|
|
226
|
+
* The installed package's version. package.json sits one level above both
|
|
227
|
+
* src/ (tests) and dist/ (the published bin).
|
|
228
|
+
*/
|
|
229
|
+
export function cliVersion(): string {
|
|
230
|
+
return JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf-8')).version;
|
|
231
|
+
}
|
|
232
|
+
|
|
225
233
|
/**
|
|
226
234
|
* CLI entry point
|
|
227
235
|
*/
|
|
228
236
|
async function main() {
|
|
229
237
|
const args = process.argv.slice(2);
|
|
230
238
|
|
|
239
|
+
// --version / -V (-v is --verbose)
|
|
240
|
+
if (args.includes('--version') || args.includes('-V')) {
|
|
241
|
+
console.log(cliVersion());
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
231
245
|
// Subcommand: badge
|
|
232
246
|
if (args[0] === 'badge') {
|
|
233
247
|
handleBadgeCommand(args.slice(1));
|
|
@@ -236,7 +250,7 @@ async function main() {
|
|
|
236
250
|
|
|
237
251
|
// Show help
|
|
238
252
|
if (args.includes('--help') || args.includes('-h')) {
|
|
239
|
-
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 JUnit XML (pytest, cargo, Go, Java, .NET ...), 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`);
|
|
253
|
+
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 --version, -V Print the version\n --help, -h Show this help\n\nPARSERS:\n JUnit XML (pytest, cargo, Go, Java, .NET ...), 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`);
|
|
240
254
|
process.exit(0);
|
|
241
255
|
}
|
|
242
256
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `faf-taf-git --version` is a stranger's first command. Before 2.4.1 it fell
|
|
3
|
+
* through to "No test output file specified" and exit 1 (found by /dev-notes
|
|
4
|
+
* on the published 2.4.0).
|
|
5
|
+
*/
|
|
6
|
+
import { spawnSync } from 'child_process';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { cliVersion } from '../src/cli';
|
|
10
|
+
|
|
11
|
+
const root = path.join(__dirname, '..');
|
|
12
|
+
const pkgVersion = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8')).version;
|
|
13
|
+
const bin = path.join(root, 'dist', 'cli.js');
|
|
14
|
+
|
|
15
|
+
describe('--version', () => {
|
|
16
|
+
test('cliVersion() is the package.json version', () => {
|
|
17
|
+
expect(cliVersion()).toBe(pkgVersion);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test.each(['--version', '-V'])('the built bin answers %s with the version and exit 0', (flag) => {
|
|
21
|
+
const r = spawnSync(process.execPath, [bin, flag], { encoding: 'utf-8' });
|
|
22
|
+
expect(r.status).toBe(0);
|
|
23
|
+
expect(r.stdout.trim()).toBe(pkgVersion);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('-v is still --verbose, not the version', () => {
|
|
27
|
+
const r = spawnSync(process.execPath, [bin, '-v'], { encoding: 'utf-8' });
|
|
28
|
+
expect(r.status).toBe(1);
|
|
29
|
+
expect(r.stderr).toContain('No test output file specified');
|
|
30
|
+
});
|
|
31
|
+
});
|