From 7e89ebfaba05a2eea56a9da66d7b326e7e40b782 Mon Sep 17 00:00:00 2001 From: Cole Speelman Date: Wed, 9 Sep 2026 03:20:21 -0400 Subject: [PATCH] Publish scoped renderer measurements and reproducible samples --- PUBLIC-SNAPSHOT.json | 2 +- PUBLIC-SNAPSHOT.sha256 | 8 ++- docs/BENCHMARKS.md | 4 ++ docs/BENCHMARK_RESULTS.md | 105 ++++++++++++++++++++++++++++++++++ scripts/public-snapshot.allow | 1 + 5 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 docs/BENCHMARK_RESULTS.md diff --git a/PUBLIC-SNAPSHOT.json b/PUBLIC-SNAPSHOT.json index 8824c05..6e65df1 100644 --- a/PUBLIC-SNAPSHOT.json +++ b/PUBLIC-SNAPSHOT.json @@ -1 +1 @@ -{"schema_version":2,"project":"sandwich-hime","export_policy":"exact-allowlist-v1","export_mode":"release","file_count":125,"allowlist_sha256":"b320a95ca85f48941ee956fde1eda46e0d9bc664da21d13c5f65a8f623063ed5","manifest_sha256":"b3a0794eb5757d35ed3f32e0b1c131be16aff417e7bee20db36c124963cbd6b8"} +{"schema_version":2,"project":"sandwich-hime","export_policy":"exact-allowlist-v1","export_mode":"release","file_count":127,"allowlist_sha256":"4fa75caba7d96db619006b2d961da726e5a5c44c724a73a64bb9770c542d7e17","manifest_sha256":"370420e042f66865fc475047ba53d872b269d85b071ae62081d67b59dac89eb4"} diff --git a/PUBLIC-SNAPSHOT.sha256 b/PUBLIC-SNAPSHOT.sha256 index 7817104..cae5fe9 100644 --- a/PUBLIC-SNAPSHOT.sha256 +++ b/PUBLIC-SNAPSHOT.sha256 @@ -2,7 +2,7 @@ 658ba4b4645426f8c3249337f47669074ae9249a31703dcd9ea4c1afec45e20b ./.gitattributes d5ae411fb422b2388cac220f9655900eecbc49ece961b2bb2a6610347733b756 ./.gitignore 98f663ab0f376b4550094465ec2e06192d1e0b0707604ec6794f20b0d10952c1 ./AI_CONTRIBUTIONS.md -954fb577484d5ca95f3fedb80d967ec6012ed4ed24fb7d999174f1b163697c80 ./CHANGELOG.md +eb5a0df1c6c3392d50e7df2a45af25c7e1586edd02800a932b6e1429c051d852 ./CHANGELOG.md b696cab3cf482ff5737501371cca749369b119351383e698ced42bcdbcbfc8ae ./CLA.md 797e884105738fc931b585b695424f43ec5f296d8ab9bba5191b096e87a9e2c2 ./CONTRIBUTING.md 86d7e49d5d90e0f98a4ad0f14b5d8b9f11ed09a1e29ecdf27388316b28e195e8 ./COPYRIGHT @@ -21,6 +21,7 @@ d566b8b27777cb33209602df81d654a94072ad875440c089ac41764a349b6c17 ./SPEC.md 3d9e680cdfe147df7cc9ff29ecf1d3e566e9cd559ae84db4880e559b9c7c7205 ./TRADEMARKS.md e2ce8cbc43e4575984839b61332207f7c90e2848fa270d4c68dbc5fc394f28e7 ./cmd/himesan-release/main.go 9dda7402f76b38d417981f9e7658880b592c282c00163a3fdbfb0ab55e1edcba ./cmd/himesan/contract_test.go +d53548ffa05a386bd869cf6b70d1ebe3397eb49bf0c05d9dc48ed94ed85a052c ./cmd/himesan/doc.go 8cd8db68e1300f9b78cc7235855853cbc7aeb499a921419e23a22e4d22826fcb ./cmd/himesan/main.go 8c53127437cd8a77676fdbcdf62f6dd9346e533665bf7d5ac32f103839a24974 ./cmd/himesan/main_test.go de004164324a640555256a91ca21a02be163bd3d231b38f08f8539c9a77ef665 ./contracts/diagnostic-codes-v1.txt @@ -30,7 +31,8 @@ e6fb36b274bf44143497b2af454e9ee0fabe6122f935cbf97e785a003277e211 ./contracts/hi 09e574ed55e3a48fa117936465d3de887686cf3f2a5c4231cf598ff30e4b1a75 ./contracts/himesan-operation-output-v1.schema.json 7679c9908266811a4336be9698982e58ffedecedf2c340b082bf5dcdef1554dd ./contracts/himesan-version-output-v1.schema.json 1ecbba46f8b1b2d548a01d7e98afae17b2dd17a814338ff1f88db885655d1c07 ./docs/ARCHITECTURE.md -9e4f5a80afbffe51dda3e7f9fa5221e3ef4ca516c4b7f7ca33b61ac97ff213bb ./docs/BENCHMARKS.md +c26f1f2030f0661aaf3bab963efc132aa63e8fae61be05ff18b4c9c8bc35cb0d ./docs/BENCHMARKS.md +015e15c7b00edd0f5d3d4906745f0a6def526cb66422aa27eb8b5c6a935d9e3d ./docs/BENCHMARK_RESULTS.md 5c3a62fed80ca28d56558b8c75e8b5be8ba7d2554127adf4609d96da314e85b0 ./docs/BRAND.md 60f0c1257cfce8388a252a105042be57c2978820d37ef81e46c6d3a49474fde3 ./docs/COMPATIBILITY.md d1b4ef192e02b59a9d8d0eb3b1072392e633116433fa308f6ca9bbe17b75e213 ./docs/DEVELOPMENT_SERVER.md @@ -115,7 +117,7 @@ f391ac912cdeb6b139d4feaec29a992cb53faea0fc4bbe805fd380450b238f7c ./scripts/nati a038a002f0c895fef38a7265bcb7df01efdda57de5c4d36d0dc7c8e377798a95 ./scripts/package-macos.sh 7d1e3606f3159e0d5d222bb5b02171ad90bb2c42b0e041042dcf8e6b7692c40a ./scripts/package-native.sh 1fddbdf81e86f4310a603cedd0f24a39d6c62d810c7e1e2e6c5f7bff1d1d4198 ./scripts/public-snapshot-lib.sh -b320a95ca85f48941ee956fde1eda46e0d9bc664da21d13c5f65a8f623063ed5 ./scripts/public-snapshot.allow +4fa75caba7d96db619006b2d961da726e5a5c44c724a73a64bb9770c542d7e17 ./scripts/public-snapshot.allow 8fa4ee6c6ae80c261a8f5c1ff18a89185b4ce6472ccb577e1daf61afaa146e14 ./scripts/release-check.sh 494cf5573cc6a891d4243ec01a98c43263de75090cb3b55c9c398e545b1ec1a8 ./scripts/sign-notarize-macos.sh 7c65325664e95df1a63262bc440a599fb799b36123a68c5cc26cfb81ddd08efa ./scripts/test-public-snapshot.sh diff --git a/docs/BENCHMARKS.md b/docs/BENCHMARKS.md index 1a05bc5..50ac623 100644 --- a/docs/BENCHMARKS.md +++ b/docs/BENCHMARKS.md @@ -2,6 +2,10 @@ # Benchmark policy +The [RC1 measurement report](BENCHMARK_RESULTS.md) records the observed values, +hardware, scope and original samples. Historical RC results must not be relabelled +as measurements of a later release candidate. + Benchmarks compare equivalent typed views and output against Go's `html/template` baseline. Reports include hardware, operating system, Go version, repository commit, dataset identity, exact commands, warmup/run counts, `ns/op`, bytes and allocations per operation, end-to-end response latency where relevant, output size, and statistical method. The v1 gate is no material regression against equivalent repository-owned diff --git a/docs/BENCHMARK_RESULTS.md b/docs/BENCHMARK_RESULTS.md new file mode 100644 index 0000000..807bb9b --- /dev/null +++ b/docs/BENCHMARK_RESULTS.md @@ -0,0 +1,105 @@ + + +# RC1 renderer measurements + +These are historical, maintainer-run measurements of the **RC1 runtime**, not +new measurements of a final v1 artifact and not an independent performance audit. +They were collected on August 24, 2026 from public commit +`e730dd1b56061501881818c7000364a55cd49e35`, tree +`931023c7d42591b5280ff81d64ce86d2ebba85b7`. + +## What was measured + +The committed `sando/benchmark_test.go` corpus renders one synthetic typed view +to `io.Discard` during timing. `TestBenchmarkCorpusEquivalent` first requires +identical buffered output. +`BenchmarkV1CorpusSandwichHime` mirrors generated runtime writer calls; +`BenchmarkV1CorpusHTMLTemplate` executes a pre-parsed Go standard-library template. +Both include the measured render allocations. Template parsing is not charged to +the baseline. Compiler execution, HTTP, routing, databases and deployment are +outside this measurement. + +Each renderer has ten samples, with two seconds requested per sample. The result +is the median of the ten `ns/op` values, not the fastest sample. There was no +separately recorded application warmup phase; Go's benchmark harness performs +its normal iteration calibration. See the [predeclared policy](BENCHMARKS.md). + +| Host | Go | Hime median ns/op | html/template median ns/op | Hime/baseline time | +| --- | --- | ---: | ---: | ---: | +| Apple M1, Darwin/arm64, 8 logical CPUs | 1.26.7 | 1,161.0 | 4,958.0 | 23.4% | +| Apple M1, Darwin/arm64, 8 logical CPUs | 1.27.0 | 1,149.5 | 4,800.5 | 23.9% | +| Xeon E5-2620 v2, Linux/amd64, 4-CPU container limit | 1.26.7 | 4,362.5 | 22,837.5 | 19.1% | +| Xeon E5-2620 v2, Linux/amd64, 4-CPU container limit | 1.27.0 | 3,877.5 | 22,003.5 | 17.6% | + +All samples recorded **688 B/op and 21 allocations/op** for Sandwich Hime, +versus **1,600 B/op and 58 allocations/op** for `html/template`. Linux ran +natively in a read-only, network-disabled, +capability-dropped container limited to 4 GiB and 512 processes. macOS ran +natively. Exact OS patch/kernel versions were not captured in these benchmark +logs; do not infer them from the toolchain versions. + +The baseline took approximately **4.2–5.7 times as long** on these lanes. +This does not establish whole-site speed, request throughput, a comparison +against every Go template engine, or a universal result on other workloads. +The samples are sequential, not a statistical study of concurrent application +load. No confidence interval or causal claim about the difference between the +two machines is implied. We do not claim to be the fastest engine. + +### September 9 repeat check + +A local repeat on Apple M1, Darwin/arm64, Go 1.27.0 used the same command and +runtime source unchanged from the public RC1 commit above. Output equivalence +passed. Median times were **1,034.5 ns/op** +for Hime and **4,044.0 ns/op** for the baseline (25.6%, approximately 3.9 times +as long for the baseline). Allocation counts and bytes remained 21/688 and +58/1,600 respectively. This is a local repeat, not a final-release artifact gate. + +- Hime: `1028, 1021, 1028, 1031, 1033, 1097, 1063, 1065, 1041, 1036` +- Baseline: `4024, 4218, 4053, 4035, 4156, 4098, 4022, 3993, 4133, 3980` + +The changed timing ratio is a useful reminder to rerun the workload on the +deployment hardware rather than treating a historical speedup as a guarantee. + +## Reproduce + +Check out the public commit above, select one of the recorded Go versions and, +from its `sando` directory, run: + +```sh +GOWORK=off go test -run '^TestBenchmarkCorpusEquivalent$' \ + -bench '^BenchmarkV1Corpus' -benchmem -benchtime=2s -count=10 +``` + +Use `GOMAXPROCS=8` for the recorded Darwin lane or `GOMAXPROCS=4` for the Linux +lane, and document the actual hardware/resource limits. Compare within a host; +do not treat absolute times from different hardware as a controlled comparison. + +## Recorded samples + +Values below are `ns/op` in original sample order. Each vector contains ten +measurements. Raw-log digests identify the retained original evidence; these +vectors expose the measurements without publishing private runner metadata. + +### Darwin/arm64, Go 1.26.7 + +- Hime: `1168, 1163, 1159, 1159, 1164, 1171, 1159, 1160, 1159, 1162` +- Baseline: `4771, 4802, 5117, 4846, 4885, 4928, 5017, 4988, 5036, 5105` +- Raw-log SHA-256: `7b68a643d685168dbd77cf3df617e8de59aa8063f6728de6c2d664173b0b05bd` + +### Darwin/arm64, Go 1.27.0 + +- Hime: `1102, 1107, 1120, 1125, 1144, 1155, 1167, 1169, 1167, 1180` +- Baseline: `4686, 4924, 5132, 4750, 4822, 4741, 4791, 4787, 4810, 4822` +- Raw-log SHA-256: `b85481317da41bc63ad8afc317da2fd1075184405e7704a69714f42453d7dd4c` + +### Linux/amd64, Go 1.26.7 + +- Hime: `4291, 4496, 4112, 4357, 4400, 3984, 4368, 4511, 4145, 4375` +- Baseline: `23663, 22300, 22364, 22946, 22863, 22812, 22078, 24476, 23041, 20900` +- Raw-log SHA-256: `277eee8f2488b0aa0b752584a46d3737df87defd311fd0bcf722aea81612a960` + +### Linux/amd64, Go 1.27.0 + +- Hime: `4314, 3939, 3950, 3861, 3797, 3821, 3756, 3651, 3894, 4170` +- Baseline: `21346, 21015, 22272, 22066, 22198, 21059, 22473, 21318, 21941, 22447` +- Raw-log SHA-256: `a5d760c0fb76012b5923376dfcd80a1f1f44bf0043145f4352e4ec820aa475b3` diff --git a/scripts/public-snapshot.allow b/scripts/public-snapshot.allow index c2b48e5..f0e4ce7 100644 --- a/scripts/public-snapshot.allow +++ b/scripts/public-snapshot.allow @@ -36,6 +36,7 @@ contracts/himesan-operation-output-v1.schema.json contracts/himesan-version-output-v1.schema.json docs/ARCHITECTURE.md docs/BENCHMARKS.md +docs/BENCHMARK_RESULTS.md docs/BRAND.md docs/COMPATIBILITY.md docs/DEVELOPMENT_SERVER.md