docs(release-prep): correct stale 37/37 test metric to actual suite size#701
Merged
Conversation
This was referenced Jun 19, 2026
kcenon
added a commit
that referenced
this pull request
Jun 19, 2026
* docs: apply mechanical doc-review fixes (#668) * docs: fix 26 anchors, ~90 cross-references, compiler floor drift - Regenerate 26 broken intra-file anchors in ARCHITECTURE_GUIDE and ARCHITECTURE_ISSUES (+ .kr.md) using correct GitHub slug algorithm (preserve & double-dash, strikethrough/RESOLVED suffix handling). - Apply path-rename map across 40+ files: 01-ARCHITECTURE.md -> ARCHITECTURE.md, 02-API_REFERENCE.md -> API_REFERENCE.md, guides/USER_GUIDE.md -> guides/QUICK_START.md, bare ARCHITECTURE_GUIDE.md -> advanced/ARCHITECTURE_GUIDE.md, guides/MIGRATION_GUIDE.md -> advanced/MIGRATION_GUIDE_V2.md. - Standardize compiler floor to GCC 13+/Clang 17+/MSVC 2022+/Apple Clang 14+ across 9 docs (FAQ, QUICK_START, CONTRIBUTING, DI_AND_CONCEPTS, API_REFERENCE_CORE, PRODUCTION_QUALITY, advanced/ARCHITECTURE, README platform row). Add follow-up note to CHANGELOG[.kr].md reconciling historical entries. - Align version headers to authoritative 0.4.0.0 in 11 guides (STREAM_PROCESSING, DISTRIBUTED_TRACING, ADVANCED_ALERTS, PRODUCTION_QUALITY, BENCHMARKS, KNOWN_ISSUES, PROJECT_STRUCTURE, STORAGE_BACKENDS, EXPORTER_DEVELOPMENT, RELIABILITY_PATTERNS, etc.). - Fix TUTORIAL[.kr].md 10+ relative-path errors to examples/ and docs/. - Fix README.md contributing anchor (support--contributing). - Rewrite docs/integration/README.md to remove 5 missing sub-guides, correct ECOSYSTEM.md depth, point to consolidated INTEGRATION.md. - Add root README links to CHANGELOG, SECURITY, CODE_OF_CONDUCT, TRACEABILITY. - Mark missing peer docs (PHASE3_VERIFICATION_REPORT.md, COLLECTOR_DEVELOPMENT.kr.md, MIGRATION.kr.md, INTEGRATION.kr.md) with TODO comments pointing to available alternatives. - Update OTEL_COLLECTOR_SIDECAR Last Updated timestamp; correct TUNING.md -> PERFORMANCE_TUNING.md typo in ALERT_PIPELINE. * docs: add post-fix re-validation report * chore(release): prepare monitoring_system for v1.0.0 (#669) * docs(readme): add v1.0 API stability section and update version references Update FetchContent example from v0.1.0 to v1.0.0. Add API Stability section documenting public API freeze, stable interfaces, Result-based create() factory methods, and CMake target name. Add matching Korean translation in README.kr.md. Fix broken cross-file anchors in API_REFERENCE docs that referenced a non-resolvable fragment identifier. Relates to #667 * chore(version): bump version to 1.0.0 Bump project version from 0.1.0 to 1.0.0 across all version sources: CMakeLists.txt, vcpkg.json, and vcpkg overlay port manifest. Reset port-version to 0 for the new major release. * refactor(api): add Result<T> factory methods to public API classes Add static create() factory methods returning Result<T> to: - ring_buffer<T>::create() - metric_storage::create() - time_series_buffer<T>::create() - performance_monitor_adapter::create() Also update make_monitor_adapter() to return Result. Existing throwing constructors are preserved but marked as deprecated in favor of the new Result-based API. * test(api): add tests for Result<T> factory methods Add 11 new test cases verifying the create() factory methods: - ring_buffer::create() valid/invalid config (2 tests) - metric_storage::create() valid/invalid config (2 tests) - time_series_buffer::create() valid/invalid/usage (3 tests) - performance_monitor_adapter::create() valid/null (2 tests) - make_monitor_adapter() valid/null (2 tests) * docs(changelog): add v1.0.0 release entry Add 1.0.0 release section with Result-based create() factory methods, version bump, stable CMake target, and deprecated throwing constructors. Relates to #667 * fix(docs): correct ring_buffer::create() code examples in README The create() method takes ring_buffer_config, not an integer. Update both English and Korean README examples to show proper config-based construction. * style(test): add trailing newline to test_metric_storage.cpp * docs(changelog): add comparison links and note breaking change Add keep-a-changelog comparison link references for v1.0.0 and Unreleased. Document make_monitor_adapter() return type change as a breaking change from v0.x. * fix(api): remove duplicate deleted copy/assign declarations in metric_storage The copy constructor and copy assignment operator were declared as deleted twice, causing a compilation error on all platforms. * feat(exporters): complete Jaeger/Zipkin protobuf serialization (#672) * feat(exporters): complete Jaeger/Zipkin protobuf serialization Replace the stub to_protobuf() implementations on jaeger_span_data and zipkin_span_data with full proto3 wire-format encoders targeting the published Jaeger api_v2 model.proto (Span, KeyValue, SpanRef, Process, Batch) and Zipkin zipkin.proto (Span, Endpoint, Annotation, ListOfSpans) schemas. The encoder is zero-dependency and header-only, living under include/kcenon/monitoring/exporters/internal/: - protobuf_wire.h: varint / fixed64 / length-delimited primitives, tag encoding, hex<->bytes helpers, and a minimal reader used by round-trip tests. - jaeger_proto.h: strongly-typed DTOs and encode/decode for Jaeger api_v2 Span, KeyValue, SpanRef, Process, Batch with the field numbers listed above. Trace IDs are zero-padded to 16 bytes, span IDs to 8. - zipkin_proto.h: DTOs and encode/decode for Zipkin Span, Endpoint, Annotation, ListOfSpans. Supports textual span kind parsing and encodes tags as the proto map<string,string> synthetic-message form. jaeger_exporter::send_grpc_batch now emits a Jaeger Batch message with Content-Type application/x-protobuf. zipkin_exporter::send_protobuf_batch now emits a ListOfSpans message to POST /api/v2/spans. Round-trip tests in test_trace_exporters.cpp cover varint encoding, hex conversion, single-span round-trip fidelity for tags / parent refs / service name on both formats, and batch-level encode/decode for Jaeger Batch and Zipkin ListOfSpans. Docker-backed integration tests against jaegertracing/all-in-one and openzipkin/zipkin containers remain a follow-up; CLAUDE.md updated to reflect the narrower remaining gap. Closes #670 * fix(exporters): always pad Zipkin trace_id to 8 bytes Previously, when the input trace_id was empty or non-hex, hex_to_bytes returned an empty vector and the encoder emitted no trace_id field. Decoded spans then had a zero-length trace_id, which Zipkin rejects. Mirror the Jaeger behavior: if the decoded hex is not exactly 16 bytes we left-pad to 8 bytes, producing a valid on-wire ID in all cases. * docs(compliance): add ISO 27001 and 20000 mapping (#673) Document which monitoring_system features help satisfy specific ISO/IEC 27001:2022 Annex A controls and ISO/IEC 20000-1:2018 service management clauses, plus the gaps that remain the operator's responsibility. Covers: - A.5 organizational controls: A.5.7, A.5.23, A.5.25, A.5.26, A.5.27, A.5.30 - A.8 technological controls: A.8.8, A.8.15, A.8.16, A.8.17 (partial), A.8.20 (partial), A.8.28 - ISO/IEC 20000-1 clauses: 8.3.3, 8.3.4, 8.4.2, 8.4.4, 8.5.1, 8.5.2, 8.5.3, 8.6 The mapping uses 'help satisfy' language throughout; it explicitly does not claim certification and lists ten known gaps that require organisational controls, tamper-evident sinks, or further development. Registered as MON-COMP-001 in docs/README.md and linked from the top-level README under a new Compliance section. Closes #671 * refactor(structure): consolidate src/impl into feature directories (#680) Move every file out of src/impl/ into the appropriate feature directory under src/{alert,collectors,core,utils}/. This removes the legacy 'impl' bucket and co-locates implementations with their feature peers. Mapping: src/impl/adaptive_monitor.cpp -> src/core/ src/impl/battery_collector.cpp -> src/collectors/ src/impl/container_collector.cpp -> src/collectors/ src/impl/interrupt_collector.cpp -> src/collectors/ src/impl/network_metrics_collector.cpp -> src/collectors/ src/impl/platform_metrics_collector.cpp -> src/collectors/ src/impl/process_metrics_collector.cpp -> src/collectors/ src/impl/uptime_collector.cpp -> src/collectors/ src/impl/tracing/distributed_tracer.cpp -> src/core/ src/impl/alerting/*.h -> src/alert/ src/impl/web/*.h -> src/core/ src/impl/metric_query_engine.h -> src/utils/ Forwarding headers (src/impl/adaptive_monitor.h and src/impl/tracing/distributed_tracer.h) are deleted; their .cpp users now include the canonical public headers under include/kcenon/monitoring/<feature>/ directly. CMakeLists.txt source paths updated to point at the new locations. The legacy/new dual-structure branch and the hardcoded source list are intentionally left untouched - those are sub-issues #676, #677, and #678 of EPIC #674. Closes #675 Part of #674 * refactor(cmake): remove legacy directory fallback from monitoring_system library (#681) The library definition at the root carried two parallel branches: 1. Outer if(EXISTS .../kcenon/monitoring AND EXISTS .../src) gating a 'new directory structure' build path. 2. Inner if(SOURCE_COUNT GREATER 0) gating the GLOB result, with an else() that hardcoded 11 cpp files (Fall back to legacy structure). 3. Outer else() that hardcoded the same 11 cpp files (Use legacy directory structure). After PR #680 consolidated src/impl into the canonical feature directories, the legacy branches can never trigger: - include/kcenon/monitoring and src/ both always exist. - The GLOB always finds sources (33 files at the time of writing). - The hardcoded fallback list is a stale subset of the real source set; activating it would silently miss most of the library. Replace the dual-structure scaffolding with a single GLOB-based add_library() call. CMakeLists.txt drops 57 lines (996 -> 939) and the build now has exactly one path, mirroring the EPIC #674 goal of collapsing the legacy fallback before further CMake decomposition. No behavioural change for current builds (the GLOB path was already the live one). The hardcoded source lists in the deleted fallback branches no longer reflect the actual src/ layout, so removing them also eliminates a drift hazard. * refactor(cmake): replace hardcoded source lists with structured globbing (#682) Replace every remaining hardcoded .cpp/.h listing in the build with file(GLOB ... CONFIGURE_DEPENDS) so CMake auto-detects new sources on reconfigure, eliminating drift between filesystem and build lists. Hardcoded blocks replaced (8): - CMakeLists.txt MONITORING_MODULE_SOURCES (4 .cppm paths) - CMakeLists.txt monitoring_hardware_plugin sources (5 .cpp paths) - CMakeLists.txt monitoring_container_plugin sources (1 .cpp path) - CMakeLists.txt install(FILES adapters/*.h) (9 .h paths) - tests/CMakeLists.txt monitoring_system_tests (~46 .cpp paths) - examples/CMakeLists.txt 17 single-file add_executable blocks - benchmarks/CMakeLists.txt monitoring_benchmarks (6 .cpp paths) - integration_tests/CMakeLists.txt SCENARIO/PERFORMANCE/FAILURE_TESTS GLOBs that gained CONFIGURE_DEPENDS (5): - MONITORING_HEADERS, MONITORING_SOURCES (main library) - SCENARIO_TESTS, PERFORMANCE_TESTS, FAILURE_TESTS (integration tests) Hardware/container plugin libraries no longer redundantly recompile collector .cpp files that the main monitoring_system library already provides via its MONITORING_SOURCES glob and PUBLIC dependency. The plugin libraries now compile only their own wrappers; collector code is linked transitively. Tests intentionally excluded from monitoring_system_tests are kept out via list(REMOVE_ITEM): test_buffering_strategies (depends on internal headers), test_collector_registry (superseded), and test_thread_context (superseded by test_thread_context_simple). Examples that are not currently buildable (PoCs, work-in-progress TODOs, depend on internal APIs) are similarly excluded by name from the example glob to preserve prior behaviour. Closes #677 Part of #674 * refactor(cmake): decompose CMakeLists.txt into per-concern modules (#683) Top-level CMakeLists.txt: 949 -> 46 lines (orchestrator only). The previous monolithic file mixed options, dependency discovery, compile flags, source globs, target definitions, install rules, and the build summary in one ~950-line file. Every change to one concern required scrolling through ~600 lines of unrelated content. Decomposed into: cmake/options.cmake - option(...) declarations + module CMake-version check cmake/dependencies.cmake - find_package + sibling add_subdirectory + header-only fallback discovery for common/thread/logger/network/gRPC cmake/compile_options.cmake - monitoring_system_interface, warning flags, sanitizers, SIMD detection, apply_monitoring_simd_definitions helper cmake/sources.cmake - file(GLOB_RECURSE ...) calls populating MONITORING_HEADERS / SOURCES / MODULE_SOURCES / HARDWARE_PLUGIN_SOURCES / CONTAINER_PLUGIN_SOURCES / ADAPTER_HEADERS cmake/targets.cmake - monitoring_system, monitoring_system_modules, monitoring_hardware_plugin, monitoring_container_plugin + dependency link wiring + IMPORTED-target tracking (MONITORING_CAN_INSTALL) cmake/install.cmake - tiered install scheme (Tier 1 headers, Tier 2 targets, Tier 3 EXPORT, Tier 4 package config) including the Tier 2 fallback for non-IMPORTED dep builds cmake/test.cmake - tests/ + integration_tests/ subdirectories cmake/samples.cmake - examples/ + benchmarks/ subdirectories cmake/summary.cmake - end-of-configure status block Existing helper modules under cmake/ (MonitoringCompatibility.cmake, monitoring_system-config.cmake.in) are unchanged. Behaviour parity is preserved: - Same options, defaults, and FATAL_ERROR conditions - Same dependency discovery order (Threads -> common_system -> thread_system -> logger_system -> network_system -> gRPC -> transport-interface probe) - Same fallback ladder for each dependency (find_package CONFIG, sibling add_subdirectory, header-only) - Same IMPORTED-vs-non-IMPORTED tracking that drives Tier 3 EXPORT skip on add_subdirectory builds (CI sibling-checkout path) - Same monitoring_system / monitoring_system_modules / monitoring_hardware_plugin / monitoring_container_plugin targets - Same install layout and package config emission - Same status messages Closes #678 Part of #674 * refactor(tests): mirror src/ feature layout in tests/ (#684) Reorganize the previously-flat tests/ directory to mirror the eight src/ feature directories established by the prior sub-issues (#675-#678). Tests that target src/-less feature areas (reliability, exporters, storage, health, di, config) are grouped under tests/integration/. Categorisation tally (56 .cpp files): - alert 3 - collectors 14 - context 2 - core 14 (incl. adapters, adaptive, optimization, interfaces, tracing) - platform 1 - plugins 4 (incl. factory) - utils 7 - integration 11 Total feature-owned: 45 (80.4%) Cross-feature: 11 (19.6%) The 80.4% feature-owned share clears the 70% threshold from the EPIC decision rule, so Option A (mirror src/) is the chosen layout. CMake test registration (tests/CMakeLists.txt) switches from a flat GLOB to GLOB_RECURSE; CONFIGURE_DEPENDS keeps the file list maintenance-free as new tests are added. The set of files added to each test target is unchanged: monitoring_system_tests still receives the same 50 sources, and the three standalone executables (monitoring_interfaces_compile_test, monitoring_thread_safety_test, monitoring_container_plugin_test) keep their own paths updated. Documentation paths are updated in docs/TRACEABILITY.md and the architecture/migration guides under docs/advanced/ to reflect the new test locations. Closes #679 Part of #674 * chore(includes): migrate to canonical kcenon/thread/* paths (#686) Update vcpkg consumer integration test to use the canonical <kcenon/thread/utils/formatter.h> include path. The legacy <thread_system/utilities/formatter.h> path is now a [[deprecated]] forwarding header in thread_system and is scheduled for removal in the next minor release. Closes #685 * chore(release): verify SHA512 against actual archive (#687) (#688) Add an independent SHA512 verification step to the release sync workflow that re-downloads the GitHub release archive and recomputes the digest before the reusable sync workflow commits a new portfile to the vcpkg overlay registry. The reusable sync workflow at kcenon/common_system already performs this check internally (see kcenon/common_system#675, PR #676), but adding a caller-side verify-archive job in this repo guards against drift if the reusable workflow changes or is repointed in the future. Implementation notes: - File-based hashing (curl -o file, then sha512sum) instead of piping curl into sha512sum, so a 404 cannot silently produce the empty-input hash cf83e1357eefb8bdf... - Explicit empty-input SHA512 sentinel guard - Archive size sanity check (>= 1024 bytes) - sync job depends on verify-archive via needs:, so a failed verification halts the registry update before any commit Audit summary: - on-release-sync-registry.yml: hardened (this PR) - All other workflows in this repo (ci.yml, sanitizers.yml, benchmarks.yml, etc.): do not compute or write SHA512 to portfiles, no change needed. Closes #687 Part of kcenon/common_system#674 * docs(audit): classify collector/plugin stubs and support levels (#691) * docs(audit): add component support-status classification Add docs/SUPPORT_STATUS.md (MON-QUAL-006) classifying every collector, plugin, and exporter by code-verified support level (production, experimental, test-only). Register the new document in the docs registry. Classification is based on the code as SSOT: source implementation presence, build linkage, dedicated tests, and factory registration. Closes #689 * docs(collectors): mark test-only stub collectors and link support status Add a support-status pointer to README and the plugin API reference so users do not mistake placeholder components for production features. Add @warning doxygen comments to logger_system_collector, thread_system_collector, and plugin_metric_collector headers: these declare a collector interface with no compiled implementation, no test, and no factory registration. Implementation or removal is tracked in #690. Relates to #689 * docs: designate governance SSOT and add redirect stubs (#694) Co-authored-by: flonics-claude <flonics.claude.1@gmail.com> * test(perf): add benchmark regression gate, module CI matrix, and fuzz harness (#695) Add a committed-baseline benchmark regression gate, dedicated C++20 module CI coverage, and a libFuzzer harness for the internal wire-format decoder. Benchmark regression gate: - benchmarks/scripts/compare_benchmarks.py compares a Google Benchmark JSON run against a version-controlled baseline and exits non-zero on any regression beyond a configurable threshold (default cpu_time, 10%). - benchmarks/baselines/ubuntu-24.04.json holds a committed (seeded) baseline. - .github/workflows/benchmarks.yml gains a deterministic regression-gate step that runs the comparator against the committed baseline. C++20 module CI: - .github/workflows/build-modules.yml builds the monitoring_system_modules target with MONITORING_ENABLE_MODULES=ON across GCC 14 and Clang 18, which the existing ci.yml header-only matrix never exercised. Fuzzing: - fuzz/protobuf_wire_fuzzer.cpp drives the protobuf wire-format decode primitives (the Jaeger/Zipkin span deserialization input surface) under libFuzzer + AddressSanitizer. - fuzz/CMakeLists.txt and the BUILD_FUZZERS option (Clang-only) wire the target via cmake/options.cmake and cmake/samples.cmake. - fuzz/corpus/protobuf_wire holds seed inputs. - .github/workflows/fuzzing.yml runs weekly (cron) and on manual dispatch. Not build-verified locally: the vcpkg dependency chain cannot be resolved in this environment, so the new CI/harness wiring has not been compiled or run. Closes #693 * refactor(collectors): resolve test-only stub collectors (#696) * refactor(collectors): resolve test-only stub collectors Resolve the three test-only stub collectors flagged by audit #689: - Remove logger_system_collector.h and thread_system_collector.h. Both declared a large collector API (plus anomaly/health/auto-scaler helper classes) with no compiled implementation, no test, and no factory registration. Their declared statistics had no concrete data source: the logger_to_monitoring_adapter and thread_to_monitoring_adapter only expose generic IMonitorable metrics, not the rich per-domain stats the headers promised. Implementing faithfully would have required speculative new APIs, so the headers are deleted. - Slim plugin_metric_collector.h to its production metric_collector_plugin interface. The unimplemented plugin_metric_collector manager class and plugin_factory (declared-but-undefined members) are removed; the pure-virtual metric_collector_plugin interface is kept because it is implemented by system_resource_collector, container_plugin, and hardware_plugin. - Remove the dead plugin_collector_example.cpp (already excluded from the build) and the removed-collector references in system_collectors_example.cpp and thread_to_monitoring_adapter.h. Closes #690 * docs(collectors): update support status and references after stub removal Reflect the resolution of the three test-only stub collectors: - docs/SUPPORT_STATUS.md: drop the three test-only rows, record zero test-only collectors, and update marker accounting and follow-up issues. - docs/ARCHITECTURE.md, docs/PROJECT_STRUCTURE.md, docs/guides/COLLECTOR_DEVELOPMENT.md: remove logger_system_collector and thread_system_collector from collector tables/trees and replace the removed plugin_metric_collector/plugin_factory usage examples with the production collector_registry and metric_factory registration paths. - docs/plugin_api_reference.md, docs/compliance/iso-mapping.md: update the support-status note and logger-integration evidence to the production logger_to_monitoring_adapter. - CHANGELOG.md: record the removals under [Unreleased]. Relates to #690 * fix(error): remap monitoring_error_code into common reserved -300..-399 (#699) monitoring_error_code was a positive enum (std::uint32_t, 1000-9999), so codes funneled into common's shared error_info.code were classified as "Success"/"Invalid" instead of "MonitoringSystem". Change the underlying type to std::int32_t and renumber all 69 codes into common's reserved -300..-399 band. Also fix 19 adapter sites in monitoring_to_common / common_to_monitoring that hand-built positive codes (1/2) and bypassed to_common_error(), and sync the core.cppm C++20 module re-declaration to the header SSOT (it had drifted to a different inline value set). Non-breaking: monitoring is untagged, so this lands before the v1.0 tag at zero SemVer cost. Closes #697 * chore(ci): propagate cross-system conformance linter (advisory) (#700) Copy the ecosystem conformance linter (scripts/conformance_lint.py) verbatim from common_system and add an ADVISORY (warning-only) Conformance workflow, per the gate-propagation epic kcenon/common_system#701. The linter checks the ecosystem structural/metadata conventions (version 3-way match, examples/, fuzz/, include/kcenon layout, no committed test artifacts, README.kr parity). The workflow runs the linter but does not fail CI yet (wrapped to exit 0 with a ::warning::), so the repo is not red-walled while its deviations are remediated. Flip to enforcing/required once green. Part of kcenon/common_system#701 * docs(release-prep): correct stale 37/37 test metric to actual suite size (#701) * docs(changelog): fold Unreleased stub-removal entries into the [1.0.0] release line (#703) * fix(vcpkg): bump kcenon registry baseline The pinned kcenon registry baseline (50d89f5b) resolves kcenon-common-system@0.2.0 to a port whose SHA512 no longer matches the v0.2.0 source tarball (the upstream tag was re-created), so the vcpkg chain validation fails at find_package(common_system) across the x64-linux, arm64-osx and x64-windows triplets. The registry already corrects this at HEAD: common-system is now 0.2.0 port-version 3 with the matching hash. Bump the baseline 50d89f5b -> 1be52cbd so the chain installs again. This also raises the chain floor: thread-system 0.3.1 -> 0.3.2, database-system 0.1.0 -> 0.1.1, plus port-version bumps on logger/container/network/ pacs. * ci(modules): make gcc-14 modules leg advisory gcc-14 raises an internal compiler error (segfault) while emitting the C++20 module BMI for src/modules/adaptive.cppm. The module source is unchanged and clang-18 compiles it cleanly, so this is a compiler bug rather than a source defect. Make the gcc leg non-blocking: on a build failure it emits a CI warning and exits 0, mirroring the repo's advisory-check pattern in conformance.yml. clang-18 remains the gating module build, so a real module regression still fails CI. --------- Co-authored-by: flonics-claude <flonics.claude.1@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Correct the stale
37/37 tests passingmetric to the actual1,118 test cases across 55 suitesinREADME.md,README.kr.md,docs/PRODUCTION_QUALITY.md,docs/PRODUCTION_QUALITY.kr.md, anddocs/performance/SPRINT_2_PERFORMANCE_RESULTS.md.Why
Part of #667 (v1.0 release prep). Addresses the "Correct stale metrics ... before the cut" acceptance-criterion of #698. The hardcoded
37/37predates large test-suite growth and no longer reflects the suite.How
Surgical text replacements only — the count is derived from a static count of GoogleTest
TEST/TEST_F/TEST_P/TYPED_TESTmacros (1,118 across 55 files). The 100% pass-rate / CI-green framing is retained; only the stale count is updated. The same count is applied consistently in the Korean-localized docs.Part of #667
Relates to #698