Replace bundled fmt with std::format - #8368
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Render JWT DER byte vectors explicitly for libstdc++ 13. Annotate clang-tidy 18 false positives on permitted formatter specializations and intentional borrowed ranges. Cover byte-list output and temporary non-const views. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Do not rely on formatting headers to transitively declare uint8_t; libstdc++ 13 does not supply it through <format>. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Declare std::to_underlying through its owning standard header at each newly introduced call site, rather than relying on libstdc++ 15 transitive includes. This fixes the libstdc++ 13 HTTP benchmark build failure. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
DescriptionComparing 2 available runs from this branch (#8368) against the trend of the last 30 Each chart plots every benchmark as an axis, with values normalized so 100 is the EWMA baseline of recent Axis labels show the latest branch value and its difference from the main EWMA baseline, where 0% is on the baseline. They are coloured green where the latest run improves on the baseline, red where it regresses, and grey where the difference is within one std dev of the baseline (within noise). Higher is better for throughput and rate, lower for latency and memory. A benchmark which does not exist on Throughput (tx/s)---
config:
radar:
width: 620
height: 620
marginTop: 90
marginRight: 220
marginBottom: 60
marginLeft: 220
axisLabelFactor: 1.12
curveTension: 0.08
theme: base
themeCSS: |
.radarCurve-0{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-1{fill:color-mix(in srgb, #62B5E5 40%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-2{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-3{fill:var(--color-canvas-default,var(--bgColor-default,#fff))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarAxisLabel,.radarTitle{fill:var(--color-fg-default,var(--fgColor-default,#111827))!important;color:var(--color-fg-default,var(--fgColor-default,#111827))!important}
.radarCurve-4{stroke-width:1.5px!important;stroke-opacity:0.50!important}
.radarCurve-5{stroke-width:1.75px!important;stroke-opacity:1.00!important}
.radarAxisLabel:nth-of-type(1){fill:#808A94!important}
.radarAxisLabel:nth-of-type(2){fill:#808A94!important}
.radarAxisLabel:nth-of-type(3){fill:#2DA44E!important}
.radarAxisLabel:nth-of-type(4){fill:#808A94!important}
.radarAxisLabel:nth-of-type(5){fill:#2DA44E!important}
.radarAxisLabel:nth-of-type(6){fill:#808A94!important}
.radarAxisLabel:nth-of-type(7){fill:#808A94!important}
themeVariables:
cScale0: "#62B5E5"
cScale1: "#62B5E5"
cScale2: "#62B5E5"
cScale3: "#62B5E5"
cScale4: "#F97316"
cScale5: "#F97316"
radar:
axisColor: "#9CA3AF"
graticuleColor: "#E5E7EB"
graticuleOpacity: 0
axisStrokeWidth: 1
curveOpacity: 0
---
radar-beta
axis b0["Basic Blocking 100ms: 3,054 tx/s ▬ 0%"]
axis b1["Basic Blocking 20ms: 15,122 tx/s ▬ 0%"]
axis b2["Basic Blocking 2ms: 32,971 tx/s ▲ 3%"]
axis b3["Basic JS: 9,183 tx/s ▬ 0%"]
axis b4["Historical Queries: 625,378 tx/s ▲ 5%"]
axis b5["L…g Certificate Blocking: 24,576 tx/s ▬ 0%"]
axis b6["Logging JWT Blocking: 15,074 tx/s ▬ 0%"]
curve stddev2_high["main EWMA + 2 std dev"]{100.38, 100.24, 104.64, 113.50, 107.07, 104.93, 100.83}
curve stddev1_high["main EWMA + 1 std dev"]{100.19, 100.12, 102.32, 106.75, 103.53, 102.47, 100.41}
curve stddev1_low["main EWMA - 1 std dev"]{99.81, 99.88, 97.68, 93.25, 96.47, 97.53, 99.59}
curve stddev2_low["main EWMA - 2 std dev"]{99.62, 99.76, 95.36, 86.50, 92.93, 95.07, 99.17}
curve branch_0["#8368 (1 run earlier)"]{100.25, 99.80, 99.87, 100.58, 101.43, 101.23, 100.06}
curve branch_1["#8368"]{99.92, 99.70, 102.57, 99.62, 104.99, 99.78, 100.22}
graticule polygon
max 123
min 77
ticks 0
showLegend false
Latency (ms)---
config:
radar:
width: 620
height: 620
marginTop: 90
marginRight: 220
marginBottom: 60
marginLeft: 220
axisLabelFactor: 1.12
curveTension: 0.08
theme: base
themeCSS: |
.radarCurve-0{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-1{fill:color-mix(in srgb, #62B5E5 40%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-2{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-3{fill:var(--color-canvas-default,var(--bgColor-default,#fff))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarAxisLabel,.radarTitle{fill:var(--color-fg-default,var(--fgColor-default,#111827))!important;color:var(--color-fg-default,var(--fgColor-default,#111827))!important}
.radarCurve-4{stroke-width:1.5px!important;stroke-opacity:0.50!important}
.radarCurve-5{stroke-width:1.75px!important;stroke-opacity:1.00!important}
.radarAxisLabel:nth-of-type(1){fill:#808A94!important}
.radarAxisLabel:nth-of-type(2){fill:#808A94!important}
.radarAxisLabel:nth-of-type(3){fill:#808A94!important}
.radarAxisLabel:nth-of-type(4){fill:#808A94!important}
.radarAxisLabel:nth-of-type(5){fill:#2DA44E!important}
.radarAxisLabel:nth-of-type(6){fill:#808A94!important}
.radarAxisLabel:nth-of-type(7){fill:#808A94!important}
themeVariables:
cScale0: "#62B5E5"
cScale1: "#62B5E5"
cScale2: "#62B5E5"
cScale3: "#62B5E5"
cScale4: "#F97316"
cScale5: "#F97316"
radar:
axisColor: "#9CA3AF"
graticuleColor: "#E5E7EB"
graticuleOpacity: 0
axisStrokeWidth: 1
curveOpacity: 0
---
radar-beta
axis b0["Basic Blocking 100ms: 99 ms ▬ 0%"]
axis b1["Basic Blocking 20ms: 19 ms ▬ 0%"]
axis b2["Basic Blocking 2ms: 9 ms ▬ 0%"]
axis b3["Basic JS: 32 ms ▬ -1%"]
axis b4["Historical Queries: 49 ms ▼ 7%"]
axis b5["Logging Certificate Blocking: 21 ms ▬ -2%"]
axis b6["Logging JWT Blocking: 20 ms ▬ 0%"]
curve stddev2_high["main EWMA + 2 std dev"]{100.00, 100.00, 100.00, 116.22, 108.18, 106.26, 101.80}
curve stddev1_high["main EWMA + 1 std dev"]{100.00, 100.00, 100.00, 108.11, 104.09, 103.13, 100.90}
curve stddev1_low["main EWMA - 1 std dev"]{100.00, 100.00, 100.00, 91.89, 95.91, 96.87, 99.10}
curve stddev2_low["main EWMA - 2 std dev"]{100.00, 100.00, 100.00, 83.78, 91.82, 93.74, 98.20}
curve branch_0["#8368 (1 run earlier)"]{100.00, 100.00, 100.00, 99.48, 94.94, 98.12, 100.06}
curve branch_1["#8368"]{100.00, 100.00, 100.00, 99.48, 93.05, 98.12, 100.06}
graticule polygon
max 128
min 72
ticks 0
showLegend false
Memory (bytes)---
config:
radar:
width: 620
height: 620
marginTop: 90
marginRight: 220
marginBottom: 60
marginLeft: 220
axisLabelFactor: 1.12
curveTension: 0.08
theme: base
themeCSS: |
.radarCurve-0{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-1{fill:color-mix(in srgb, #62B5E5 40%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-2{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-3{fill:var(--color-canvas-default,var(--bgColor-default,#fff))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarAxisLabel,.radarTitle{fill:var(--color-fg-default,var(--fgColor-default,#111827))!important;color:var(--color-fg-default,var(--fgColor-default,#111827))!important}
.radarCurve-4{stroke-width:1.5px!important;stroke-opacity:0.50!important}
.radarCurve-5{stroke-width:1.75px!important;stroke-opacity:1.00!important}
.radarAxisLabel:nth-of-type(1){fill:#808A94!important}
.radarAxisLabel:nth-of-type(2){fill:#808A94!important}
.radarAxisLabel:nth-of-type(3){fill:#E5484D!important}
.radarAxisLabel:nth-of-type(4){fill:#808A94!important}
.radarAxisLabel:nth-of-type(5){fill:#2DA44E!important}
.radarAxisLabel:nth-of-type(6){fill:#2DA44E!important}
.radarAxisLabel:nth-of-type(7){fill:#808A94!important}
themeVariables:
cScale0: "#62B5E5"
cScale1: "#62B5E5"
cScale2: "#62B5E5"
cScale3: "#62B5E5"
cScale4: "#F97316"
cScale5: "#F97316"
radar:
axisColor: "#9CA3AF"
graticuleColor: "#E5E7EB"
graticuleOpacity: 0
axisStrokeWidth: 1
curveOpacity: 0
---
radar-beta
axis b0["Basic Blocking 100ms: 90.9 MiB ▬ 0%"]
axis b1["Basic Blocking 20ms: 90.8 MiB ▬ 0%"]
axis b2["Basic Blocking 2ms: 95.1 MiB ▲ 1%"]
axis b3["Basic JS: 94.4 MiB ▬ +1%"]
axis b4["Historical Queries: 150 MiB ▼ 1%"]
axis b5["Logging Certificate Blocking: 118 MiB ▼ 1%"]
axis b6["Logging JWT Blocking: 91.7 MiB ▬ 0%"]
curve stddev2_high["main EWMA + 2 std dev"]{102.10, 101.72, 101.80, 101.93, 101.00, 101.26, 101.84}
curve stddev1_high["main EWMA + 1 std dev"]{101.05, 100.86, 100.90, 100.97, 100.50, 100.63, 100.92}
curve stddev1_low["main EWMA - 1 std dev"]{98.95, 99.14, 99.10, 99.03, 99.50, 99.37, 99.08}
curve stddev2_low["main EWMA - 2 std dev"]{97.90, 98.28, 98.20, 98.07, 99.00, 98.74, 98.16}
curve branch_0["#8368 (1 run earlier)"]{99.14, 99.65, 99.78, 99.78, 99.72, 99.19, 99.28}
curve branch_1["#8368"]{99.86, 100.00, 101.40, 100.52, 99.11, 99.21, 100.26}
graticule polygon
max 107
min 93
ticks 0
showLegend false
Rate (ops/s)---
config:
radar:
width: 620
height: 620
marginTop: 90
marginRight: 220
marginBottom: 60
marginLeft: 220
axisLabelFactor: 1.12
curveTension: 0.08
theme: base
themeCSS: |
.radarCurve-0{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-1{fill:color-mix(in srgb, #62B5E5 40%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-2{fill:color-mix(in srgb, #62B5E5 13%, var(--color-canvas-default,var(--bgColor-default,#fff)))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarCurve-3{fill:var(--color-canvas-default,var(--bgColor-default,#fff))!important;fill-opacity:1!important;stroke:none!important;stroke-width:0!important}
.radarAxisLabel,.radarTitle{fill:var(--color-fg-default,var(--fgColor-default,#111827))!important;color:var(--color-fg-default,var(--fgColor-default,#111827))!important}
.radarCurve-4{stroke-width:1.5px!important;stroke-opacity:0.50!important}
.radarCurve-5{stroke-width:1.75px!important;stroke-opacity:1.00!important}
.radarAxisLabel:nth-of-type(1){fill:#2DA44E!important}
.radarAxisLabel:nth-of-type(2){fill:#808A94!important}
.radarAxisLabel:nth-of-type(3){fill:#808A94!important}
.radarAxisLabel:nth-of-type(4){fill:#E5484D!important}
.radarAxisLabel:nth-of-type(5){fill:#808A94!important}
.radarAxisLabel:nth-of-type(6){fill:#808A94!important}
themeVariables:
cScale0: "#62B5E5"
cScale1: "#62B5E5"
cScale2: "#62B5E5"
cScale3: "#62B5E5"
cScale4: "#F97316"
cScale5: "#F97316"
radar:
axisColor: "#9CA3AF"
graticuleColor: "#E5E7EB"
graticuleOpacity: 0
axisStrokeWidth: 1
curveOpacity: 0
---
radar-beta
axis b0["CHAMP get: 38,410,323 ops/s ▲ 1%"]
axis b1["CHAMP put: 5,544,636 ops/s ▬ +1%"]
axis b2["KV deserialisation: 1,628,930 ops/s ▬ 0%"]
axis b3["KV serialisation: 1,362,398 ops/s ▼ 1%"]
axis b4["KV s…t deserialisation: 4,237 ops/s ▬ +1%"]
axis b5["KV snapshot serialisation: 4,371 ops/s ▬ -1%"]
curve stddev2_high["main EWMA + 2 std dev"]{101.27, 101.55, 102.33, 102.02, 101.69, 108.01}
curve stddev1_high["main EWMA + 1 std dev"]{100.63, 100.78, 101.17, 101.01, 100.85, 104.00}
curve stddev1_low["main EWMA - 1 std dev"]{99.37, 99.22, 98.83, 98.99, 99.15, 96.00}
curve stddev2_low["main EWMA - 2 std dev"]{98.73, 98.45, 97.67, 97.98, 98.31, 91.99}
curve branch_0["#8368 (1 run earlier)"]{100.25, 99.36, 100.91, 101.05, 100.11, 100.59}
curve branch_1["#8368"]{100.87, 100.67, 99.92, 98.58, 100.60, 98.58}
graticule polygon
max 114
min 86
ticks 0
showLegend false
|
There was a problem hiding this comment.
🔵 Needs a closer look
The migration spans 259 files and public, consensus, cryptographic, logging, and serialization paths, so final human review is warranted despite successful CI and no confirmed defect.
Pull request overview
Replaces bundled {fmt} with C++23 std::format across CCF, reducing vendored code while preserving formatting behavior and public customization support.
Changes:
- Removes vendored
{fmt}headers, dependency metadata, and generic enum formatter. - Migrates formatting calls and custom formatters; adds
ccf::ds::join. - Adds migration documentation and regression tests for joins, timestamps, headers, and lazy logging.
Custom instructions used
.github/copilot-instructions.md.github/instructions/reviewing.instructions.md.github/instructions/changelog.instructions.md
File summaries
| File | Description |
|---|---|
3rdparty/exported/fmt/args.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/base.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/chrono.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/color.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/compile.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/core.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/format-inl.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/format.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/os.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/ostream.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/printf.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/ranges.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/std.h |
Removes vendored fmt header. |
3rdparty/exported/fmt/xchar.h |
Removes vendored fmt header. |
CHANGELOG.md |
Records the formatting migration. |
cgmanifest.json |
Removes fmt dependency metadata. |
doc/build_apps/logging.rst |
Documents application migration. |
include/ccf/byte_vector.h |
Migrates byte-vector formatting. |
include/ccf/crypto/curve.h |
Migrates curve diagnostics. |
include/ccf/crypto/jwk.h |
Migrates JWK diagnostics. |
include/ccf/crypto/openssl/openssl_wrappers.h |
Migrates OpenSSL errors. |
include/ccf/crypto/san.h |
Migrates SAN formatting. |
include/ccf/crypto/sha256_hash.h |
Migrates hash formatting. |
include/ccf/ds/contiguous_set.h |
Migrates set formatter. |
include/ccf/ds/enum_formatter.h |
Removes blanket enum formatter. |
include/ccf/ds/hex.h |
Uses standard hex formatting. |
include/ccf/ds/join.h |
Adds borrowed join adapter. |
include/ccf/ds/json.h |
Migrates JSON diagnostics. |
include/ccf/ds/json_schema.h |
Migrates schema-name formatting. |
include/ccf/ds/logger.h |
Migrates logger formatting. |
include/ccf/ds/nonstd.h |
Removes fmt dependency. |
include/ccf/ds/openapi.h |
Migrates OpenAPI formatting. |
include/ccf/ds/unit_strings.h |
Migrates unit parsing and formatter. |
include/ccf/ds/x509_time_fmt.h |
Replaces fmt calendar helpers. |
include/ccf/endpoint.h |
Migrates endpoint formatter. |
include/ccf/endpoint_registry.h |
Migrates path diagnostics. |
include/ccf/endpoints/authentication/js.h |
Migrates auth diagnostics. |
include/ccf/entity_id.h |
Migrates entity formatting. |
include/ccf/http_accept.h |
Migrates Accept errors. |
include/ccf/http_etag.h |
Removes fmt dependency. |
include/ccf/http_query.h |
Migrates query errors. |
include/ccf/indexing/strategies/seqnos_by_key_in_memory.h |
Migrates range errors. |
include/ccf/js/core/wrapped_property_enum.h |
Migrates JS errors. |
include/ccf/js/registry.h |
Migrates KV map names. |
include/ccf/kv/serialisers/blit_serialiser.h |
Migrates size errors. |
include/ccf/node_context.h |
Migrates subsystem errors. |
include/ccf/node_startup_state.h |
Adds standard state formatter. |
include/ccf/pal/attestation_sev_snp.h |
Migrates SNP diagnostics. |
include/ccf/pal/attestation_sev_snp_endorsements.h |
Migrates endpoint formatting. |
include/ccf/pal/measurement.h |
Migrates measurement diagnostics. |
include/ccf/pal/report_data.h |
Migrates report-data diagnostics. |
include/ccf/pal/sev_snp_cpuid.h |
Migrates CPUID formatting. |
include/ccf/pal/snp_ioctl6.h |
Migrates ioctl diagnostics. |
include/ccf/pal/uvm_endorsements.h |
Migrates endorsement strings. |
include/ccf/rest_verb.h |
Migrates REST verb errors. |
include/ccf/service/node_info.h |
Migrates node-status formatter. |
include/ccf/service/node_info_network.h |
Migrates network formatting. |
include/ccf/service/tables/gov.h |
Migrates governance formatter. |
include/ccf/service/tables/proposals.h |
Migrates proposal formatter. |
include/ccf/service/tables/self_healing_open.h |
Removes enum formatter include. |
include/ccf/threading/thread_ids.h |
Removes fmt includes. |
include/ccf/tx_id.h |
Migrates TxID errors. |
include/ccf/tx_status.h |
Migrates status errors. |
samples/apps/basic/basic.cpp |
Removes fmt includes. |
samples/apps/common/default_on_commit.h |
Migrates commit errors. |
samples/apps/logging/logging.cpp |
Migrates sample formatting. |
samples/apps/nobuiltins/nobuiltins.cpp |
Migrates timestamp output. |
samples/apps/programmability/programmability.cpp |
Migrates sample diagnostics. |
src/common/cli_helper.h |
Migrates CLI validation errors. |
src/consensus/aft/impl/state.h |
Migrates view logging. |
src/consensus/aft/raft.h |
Migrates Raft diagnostics. |
src/consensus/aft/raft_types.h |
Migrates Raft formatter. |
src/consensus/aft/test/committable_suffix.cpp |
Migrates test output. |
src/consensus/aft/test/driver.cpp |
Migrates driver errors. |
src/consensus/aft/test/driver.h |
Migrates driver formatting. |
src/consensus/aft/test/test_common.h |
Migrates ledger test data. |
src/consensus/ledger_enclave.h |
Migrates ledger errors. |
src/crypto/openssl/base64.h |
Migrates base64 errors. |
src/crypto/openssl/cose_verifier.cpp |
Migrates COSE errors. |
src/crypto/openssl/ec_key_pair.cpp |
Migrates EC formatting. |
src/crypto/openssl/ec_public_key.cpp |
Migrates EC diagnostics. |
src/crypto/openssl/eddsa_public_key.cpp |
Migrates EdDSA diagnostics. |
src/crypto/openssl/hash.cpp |
Migrates digest errors. |
src/crypto/openssl/hash.h |
Removes fmt includes. |
src/crypto/openssl/public_key.h |
Migrates key errors. |
src/crypto/openssl/rsa_key_pair.cpp |
Migrates RSA errors. |
src/crypto/openssl/rsa_public_key.cpp |
Migrates RSA diagnostics. |
src/crypto/openssl/symmetric_key.cpp |
Migrates key-size errors. |
src/crypto/openssl/verifier.cpp |
Migrates verifier errors. |
src/crypto/sha256_hash.cpp |
Migrates hash diagnostics. |
src/crypto/sharing.h |
Migrates share formatting. |
src/crypto/symmetric_key.cpp |
Migrates IV errors. |
src/crypto/test/crypto.cpp |
Migrates certificate tests. |
src/crypto/test/secret_sharing.cpp |
Migrates test output. |
src/ds/ccf_assert.h |
Migrates formatted assertions. |
src/ds/files.h |
Migrates filesystem errors. |
src/ds/messaging.h |
Migrates message names. |
src/ds/non_blocking.h |
Migrates buffer errors. |
src/ds/oversized.h |
Migrates oversized-message errors. |
src/ds/ring_buffer.h |
Migrates ring-buffer errors. |
src/ds/ring_buffer_types.h |
Migrates wrapper errors. |
src/ds/serialized.h |
Migrates serialization diagnostics. |
src/ds/state_machine.h |
Migrates state errors. |
src/ds/std_formatters.h |
Removes fmt container formatters. |
src/ds/test/logger.cpp |
Adds formatting regression tests. |
src/ds/test/map_test.cpp |
Removes obsolete formatter include. |
src/ds/test/nonstd.cpp |
Removes fmt includes. |
src/ds/test/openapi.cpp |
Migrates OpenAPI test formatting. |
src/ds/test/public_header_helpers.cpp |
Tests public formatting helpers. |
src/ds/test/state_machine.cpp |
Migrates test formatter. |
src/ds/test/unit_strings.cpp |
Tests standard formatting. |
src/ds/work_beacon.h |
Removes fmt includes. |
src/enclave/enclave.h |
Converts enum logging. |
src/enclave/http2_session.h |
Migrates HTTP/2 errors. |
src/enclave/http_rpc_context.h |
Migrates request formatting. |
src/enclave/http_session.h |
Migrates HTTP errors. |
src/enclave/rpc_sessions.h |
Migrates session errors. |
src/enclave/session.h |
Migrates session names. |
src/enclave/tls_session.h |
Migrates TLS diagnostics. |
src/endpoints/authentication/all_of_auth.cpp |
Migrates policy errors. |
src/endpoints/authentication/cert_auth.cpp |
Migrates certificate diagnostics. |
src/endpoints/authentication/cose_auth.cpp |
Migrates COSE diagnostics. |
src/endpoints/authentication/jwt_auth.cpp |
Migrates JWT diagnostics. |
src/endpoints/common_endpoint_registry.cpp |
Migrates endpoint formatting. |
src/endpoints/endpoint.cpp |
Migrates endpoint descriptions. |
src/endpoints/endpoint_registry.cpp |
Migrates registry diagnostics. |
src/endpoints/endpoint_utils.cpp |
Migrates utility formatting. |
src/endpoints/json_handler.cpp |
Migrates JSON handler errors. |
src/host/files_cleanup_timer.h |
Migrates cleanup diagnostics. |
src/host/json_schema.h |
Migrates schema errors. |
src/host/ledger.h |
Migrates ledger formatting. |
src/host/ledger_filenames.h |
Migrates filename errors. |
src/host/lfs_file_handler.h |
Migrates LFS diagnostics. |
src/host/node_connections.h |
Converts message enums. |
src/host/rpc_connections.h |
Migrates connection errors. |
src/host/run.cpp |
Migrates host formatting. |
src/host/socket.h |
Migrates socket addresses. |
src/host/tcp.h |
Migrates TCP diagnostics. |
src/host/test/env.cpp |
Migrates environment tests. |
src/host/test/files_cleanup_test.cpp |
Migrates cleanup tests. |
src/host/test/ledger.cpp |
Migrates ledger tests. |
src/host/test/ledger_bench.cpp |
Migrates benchmark paths. |
src/host/time_bound_logger.h |
Migrates duration output. |
src/host/udp.h |
Migrates UDP diagnostics. |
src/http/http2_callbacks.h |
Migrates HTTP/2 callbacks. |
src/http/http2_parser.h |
Migrates HTTP/2 errors. |
src/http/http2_utils.h |
Migrates trailer joining. |
src/http/http_builder.h |
Migrates HTTP serialization. |
src/http/http_jwt.h |
Migrates JWT formatting. |
src/http/http_parser.h |
Migrates parser diagnostics. |
src/http/test/http_bench.cpp |
Removes obsolete formatter include. |
src/http/test/http_etag_test.cpp |
Removes fmt includes. |
src/http/test/http_test.cpp |
Migrates HTTP tests. |
src/http_client/curl.h |
Migrates curl diagnostics. |
src/http_client/test/curl_test.cpp |
Migrates curl tests. |
src/indexing/enclave_lfs_access.h |
Migrates LFS state diagnostics. |
src/indexing/indexer.h |
Migrates index ordering errors. |
src/indexing/strategies/seqnos_by_key_bucketed.cpp |
Migrates bucket formatting. |
src/indexing/strategies/visit_each_entry_in_map.cpp |
Migrates strategy names. |
src/indexing/test/indexing.cpp |
Migrates indexing test data. |
src/js/core/context.cpp |
Migrates JS context errors. |
src/js/core/runtime.cpp |
Migrates runtime errors. |
src/js/extensions/ccf/gov.cpp |
Migrates governance JS errors. |
src/js/extensions/ccf/gov_effects.cpp |
Migrates bytecode errors. |
src/js/extensions/ccf/request.cpp |
Migrates request formatting. |
src/js/modules/kv_bytecode_module_loader.h |
Migrates bytecode diagnostics. |
src/js/modules/kv_module_loader.h |
Migrates module errors. |
src/js/permissions_checks.h |
Migrates permission errors. |
src/js/registry.cpp |
Migrates JS registry formatting. |
src/js/test/js.cpp |
Migrates JS tests. |
src/kv/generic_serialise_wrapper.h |
Migrates serialization errors. |
src/kv/kv_types.h |
Migrates KV formatters. |
src/kv/ledger_chunker.h |
Migrates chunk errors. |
src/kv/raw_serialise.h |
Migrates raw serialization errors. |
src/kv/serialised_entry_format.h |
Migrates entry-size errors. |
src/kv/store.h |
Migrates store diagnostics. |
src/kv/test/kv_bench.cpp |
Migrates KV benchmarks. |
src/kv/test/kv_contention.cpp |
Migrates contention tests. |
src/kv/test/kv_serialisation.cpp |
Migrates serialization tests. |
src/kv/test/kv_test.cpp |
Migrates KV tests. |
src/kv/tx.cpp |
Migrates transaction errors. |
src/node/channels.h |
Migrates channel formatter. |
src/node/commit_callback_subsystem.h |
Migrates callback errors. |
src/node/cose_common.h |
Migrates COSE diagnostics. |
src/node/encryptor.h |
Migrates IV errors. |
src/node/gov/api_version.h |
Migrates API-version errors. |
src/node/gov/handlers/acks.h |
Migrates ACK errors. |
src/node/gov/handlers/helpers.h |
Migrates governance helpers. |
src/node/gov/handlers/proposals.h |
Migrates proposal diagnostics. |
src/node/gov/handlers/recovery.h |
Migrates recovery messages. |
src/node/gov/handlers/service_state.h |
Migrates state errors. |
src/node/gov/handlers/transactions.h |
Migrates transaction errors. |
src/node/historical_queries.h |
Migrates historical-query formatting. |
src/node/historical_queries_adapter.cpp |
Migrates adapter diagnostics. |
src/node/historical_queries_utils.cpp |
Migrates historical errors. |
src/node/history.h |
Migrates history diagnostics. |
src/node/hooks.h |
Migrates hook errors. |
src/node/js_policy.h |
Migrates policy diagnostics. |
src/node/jwt_key_auto_refresh.h |
Migrates refresh diagnostics. |
src/node/ledger_secrets.h |
Migrates secret errors. |
src/node/local_sealing.cpp |
Removes fmt include. |
src/node/node_inbound_message.h |
Migrates message errors. |
src/node/node_state.h |
Migrates node diagnostics. |
src/node/node_to_node.h |
Removes fmt includes. |
src/node/quote.cpp |
Migrates quote diagnostics. |
src/node/quote_endorsements_client.h |
Migrates endorsement diagnostics. |
src/node/receipt.cpp |
Migrates receipt errors. |
src/node/recovery_decision_protocol.cpp |
Migrates recovery diagnostics. |
src/node/recovery_snapshot_ledger.h |
Migrates recovery-ledger errors. |
src/node/retired_nodes_cleanup.h |
Migrates cleanup request formatting. |
src/node/rpc/custom_protocol_subsystem.h |
Migrates protocol errors. |
src/node/rpc/file_serving_handlers.h |
Migrates file-serving diagnostics. |
src/node/rpc/forwarder.h |
Migrates forwarding formatting. |
src/node/rpc/frontend.h |
Migrates frontend diagnostics. |
src/node/rpc/jwt_management.h |
Migrates JWT key diagnostics. |
src/node/rpc/network_identity_accessors_impl.h |
Migrates identity errors. |
src/node/rpc/network_identity_chain_helpers.h |
Migrates chain diagnostics. |
src/node/rpc/network_identity_subsystem.h |
Migrates identity formatting. |
src/node/rpc/node_frontend.h |
Migrates node frontend output. |
src/node/rpc/node_frontend_utils.h |
Migrates quote errors. |
src/node/rpc/self_healing_open_handlers.h |
Migrates recovery errors. |
src/node/rpc/test/frontend_test.cpp |
Migrates frontend tests. |
src/node/rpc/test/frontend_test_infra.h |
Migrates request helper. |
src/node/share_manager.h |
Migrates recovery-share errors. |
src/node/snapshot_serdes.h |
Migrates snapshot diagnostics. |
src/node/snapshotter.h |
Migrates snapshot task names. |
src/node/test/channels.cpp |
Migrates channel tests. |
src/node/test/endorsements.cpp |
Migrates endorsement paths. |
src/node/test/historical_queries.cpp |
Migrates historical tests. |
src/node/test/history.cpp |
Migrates history tests. |
src/node/test/merkle_bench.cpp |
Migrates benchmark output. |
src/node/test/network_identity_subsystem.cpp |
Migrates test errors. |
src/node/test/receipt.cpp |
Migrates certificate test data. |
src/node/test/snapshot.cpp |
Migrates snapshot test keys. |
src/node/test/snapshotter.cpp |
Migrates temporary names. |
src/node/uvm_endorsements.cpp |
Migrates UVM diagnostics. |
src/pal/attestation.cpp |
Migrates attestation diagnostics. |
src/pal/quote_generation.h |
Migrates quote-generation errors. |
src/pal/test/snp_attestation_validation.cpp |
Migrates SNP tests. |
src/pal/test/verify_uvm_attestation_and_endorsements.cpp |
Migrates endorsement tests. |
src/service/internal_tables_access.h |
Migrates service diagnostics. |
src/service/tables/identity_types.h |
Migrates identity errors. |
src/snapshots/fetch.h |
Migrates fetch diagnostics. |
src/snapshots/filenames.h |
Migrates snapshot filename parsing. |
src/snapshots/snapshot_writer.h |
Migrates snapshot output. |
src/tasks/fan_in_tasks.cpp |
Migrates task errors. |
src/tasks/test/basic_tasks.cpp |
Removes fmt includes. |
src/tasks/test/bench/merge_bench.cpp |
Removes fmt includes. |
src/tasks/test/bench/sleep_bench.cpp |
Removes fmt includes. |
src/tasks/test/demo/actions.h |
Migrates demo serialization. |
src/tasks/test/demo/clients.h |
Migrates client names. |
src/tasks/test/demo/dispatcher.h |
Migrates dispatcher names. |
src/tasks/test/demo/main.cpp |
Loads atomic before logging. |
src/tasks/test/demo/worker.h |
Migrates worker names. |
src/tasks/test/fan_in_tasks.cpp |
Migrates task tests. |
src/tasks/test/ordered_tasks.cpp |
Migrates task tests. |
src/tasks/thread_manager.cpp |
Migrates manager errors. |
src/tasks/worker.h |
Migrates worker errors. |
src/tls/test/main.cpp |
Migrates TLS tests. |
Review details
- Files reviewed: 203/259 changed files
- Comments generated: 0
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Replace bundled fmt 12.1.0 with
std::formatandstd::format_to, removing the vendored headers and 15,824 net C/C++ lines.Compatibility
std::printare not required.std::formatterspecializations. Replace blanket enum formatting withstd::to_underlyingand convert paths, atomics and pointers explicitly.ccf::ds::joinadapter supporting per-element format specifications. Format standard-only byte containers explicitly rather than specializingstd::formatterfor them.std::vformatfor nonliteral format strings and standard streams for test utilities.Application impact
Exported fmt headers and
ccf/ds/enum_formatter.hare removed. See the C++ formatting migration guide.Logging macros retain their names and lazy argument evaluation. Some optional diagnostics now show the contained value or a missing-value marker instead of
optional(...). JWT issuer constraints retain that wrapper using JSON string escaping.