From 0de6cef76dec3ecd8d84a8e6284850b18a307706 Mon Sep 17 00:00:00 2001 From: cesnimda Date: Tue, 10 Nov 2026 23:21:20 +0100 Subject: [PATCH] docs(perf): preserve native rules freshness receipts --- docs/performance/PERF-01_RULES_FRESHNESS.md | 2 +- .../rules-freshness/native-receipts.json | 29 ++++++++++++++++++ .../rules-freshness/rules-green.trx.gz | Bin 0 -> 2092 bytes .../evidence/rules-freshness/rules-red.trx.gz | Bin 0 -> 2844 bytes .../rules-freshness/rules-regression.trx.gz | Bin 0 -> 6020 bytes 5 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 docs/performance/evidence/rules-freshness/native-receipts.json create mode 100644 docs/performance/evidence/rules-freshness/rules-green.trx.gz create mode 100644 docs/performance/evidence/rules-freshness/rules-red.trx.gz create mode 100644 docs/performance/evidence/rules-freshness/rules-regression.trx.gz diff --git a/docs/performance/PERF-01_RULES_FRESHNESS.md b/docs/performance/PERF-01_RULES_FRESHNESS.md index afa6d1fd..f8fd24a1 100644 --- a/docs/performance/PERF-01_RULES_FRESHNESS.md +++ b/docs/performance/PERF-01_RULES_FRESHNESS.md @@ -16,7 +16,7 @@ The cost is one owner-primary-key settings lookup per job request, plus a single - **PASSED:** `git diff --check`. - **PASSED:** `graphify update .` rebuilt the local AST graph without API/model use. It reported missing optional PDF/SQL parsers and files without extracted symbols; those are graph coverage limits, not application test failures. Generated `graphify-out/` remains local and untracked, as at the source worktree. -Durable machine-readable red/final result names, outcomes, counts and timestamps: [verification.json](evidence/rules-freshness/verification.json). Raw TRX files remain local to this test worktree. +Durable machine-readable red/final result names, outcomes, counts and timestamps: [verification.json](evidence/rules-freshness/verification.json). Exact native red, development-green and final-regression TRX files are preserved as `.trx.gz` files alongside it. [native-receipts.json](evidence/rules-freshness/native-receipts.json) records raw/compressed SHA256 hashes and byte lengths; gzip decompression reproduces the original receipts without text transformations. The seven-test development-green run overlaps the final regression run. Commands use the installed `C:\Users\Connor\.dotnet\dotnet.exe` SDK; the runtime-only Program Files executable cannot execute SDK commands. Test command: `dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --no-restore --filter "FullyQualifiedName~RuleSettingsFreshnessTests|FullyQualifiedName~JobQueryParityTests|FullyQualifiedName~JobApplicationsWorkflowSignalsTests|FullyQualifiedName~RulesEngineProspectTests|FullyQualifiedName~ConcurrentInitializationTests"`. diff --git a/docs/performance/evidence/rules-freshness/native-receipts.json b/docs/performance/evidence/rules-freshness/native-receipts.json new file mode 100644 index 00000000..9f6585c1 --- /dev/null +++ b/docs/performance/evidence/rules-freshness/native-receipts.json @@ -0,0 +1,29 @@ +{ + "format": "Native VSTest TRX compressed with gzip; no text transformations", + "receipts": [ + { + "rawFile": "rules-red.trx", + "rawBytes": 30627, + "rawSha256": "c74e5e9703924e1a1775bddab662d8327f3d66ce502ca61d917cd827317e9d68", + "compressedFile": "rules-red.trx.gz", + "compressedBytes": 2844, + "compressedSha256": "630785b741059e1398e777f0c8f84bdf3f7e748844547d7c468ec913cf0261aa" + }, + { + "rawFile": "rules-green.trx", + "rawBytes": 12087, + "rawSha256": "7960a65a79f9208178d91b41a47469c7839ef4e8c352d077d7fe0fa7745354b3", + "compressedFile": "rules-green.trx.gz", + "compressedBytes": 2092, + "compressedSha256": "131c814b17df0fbbde67dea15ed9e65db2e1f2c801afada903453b504b4a64f6" + }, + { + "rawFile": "rules-regression.trx", + "rawBytes": 53741, + "rawSha256": "e2e7e51902a167cdcb6fa46339476759f63331863f5a2953e3d64cf08b97b106", + "compressedFile": "rules-regression.trx.gz", + "compressedBytes": 6020, + "compressedSha256": "7c229b8beb9d2fa8f3ff453f58d5f3cfeac8987d1f79c0bac65db1a55c0883ca" + } + ] +} diff --git a/docs/performance/evidence/rules-freshness/rules-green.trx.gz b/docs/performance/evidence/rules-freshness/rules-green.trx.gz new file mode 100644 index 0000000000000000000000000000000000000000..e51098d32cc8345891651c8a2d21f2eaf2a351b6 GIT binary patch literal 2092 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 literal 0 HcmV?d00001 diff --git a/docs/performance/evidence/rules-freshness/rules-regression.trx.gz b/docs/performance/evidence/rules-freshness/rules-regression.trx.gz new file mode 100644 index 0000000000000000000000000000000000000000..c1a18ef6ea1d6d73d633e1fad6cd8eab97df2d0f GIT binary patch literal 6020 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