build, docs: Support GCC 15 / C++23 and fix libnvme and markdownlint

The unit test Docker image was recently upgraded from Ubuntu with
GCC 14.3.0 and Meson 1.7.0 to Ubuntu 26.04 with GCC 15.2.0 and
Meson 1.11.2. This toolchain upgrade introduced several issues:

1. Modern sdbusplus requires C++23 under GCC 15. Update meson.build
   default cpp_std to c++23 and meson_version to >=1.1.1.
2. GCC 15 enforces stricter -Wformat for non-void pointers passed to
   %p, causing a build failure in libnvme/ccan. Add a patch to cast
   pointers to const void*.
3. Top-level warning_level=3 and -Wpedantic propagated to the libnvme
   subproject. Isolate libnvme with warning_level=1 and werror=false.
4. Meson runs tests from subprojects by default. Under GCC 15 UBSan
   (halt_on_error=1), libnvme's internal tests fail with unaligned
   memory access and null pointer in memset. Add a patch to libnvme
   meson.build to skip building internal tests and examples when
   libnvme is built as a subproject.
5. Fix markdownlint issues across documentation.

Tested: Verified clean compilation and test execution in Docker
container with GCC 15 and address,undefined sanitizer.
Google-Bug-Id: 560184526
Change-Id: Ib476238d65c50a15bddad8e24b5e8462c924800c
Signed-off-by: Guangzong Chen <guangzong@google.com>
TAG=agy
CONV=6866aaa8-fc79-4b5d-bbc3-928fa7aa65f3
diff --git a/.agents/skills/compile/SKILL.md b/.agents/skills/compile/SKILL.md
index 9171e10..36bd6af 100644
--- a/.agents/skills/compile/SKILL.md
+++ b/.agents/skills/compile/SKILL.md
@@ -5,7 +5,7 @@
   tests inside the OpenBMC Docker container using Meson.
 ---
 
-## Compile and Test Environment
+# Compile and Test Environment
 
 If the Antigravity/Gemini console/server is not running in the OpenBMC unittest
 container, all compile and testing tasks should be redirected to the container.
@@ -24,7 +24,9 @@
 command from the workspace root:
 
 ```bash
-docker run --rm -v "${PWD}:/ws" -w /ws openbmc/ubuntu-unit-test:2025-W36-725b9a7cb31b8fdf meson setup build_docker
+docker run --rm -v "${PWD}:/ws" -w /ws \
+    openbmc/ubuntu-unit-test:2025-W36-725b9a7cb31b8fdf \
+    meson setup build_docker
 ```
 
 ## Object Mapper Setup
@@ -33,5 +35,10 @@
 container, use the following command in a separate terminal:
 
 ```bash
-docker run --rm -v "${PWD}:/ws" -w /ws openbmc/ubuntu-unit-test:2025-W36-725b9a7cb31b8fdf bash -c "LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/ /usr/local/libexec/phosphor-objmgr/mapperx --service-namespaces='xyz.openbmc_project' --interface-namespaces='xyz.openbmc_project'"
+docker run --rm -v "${PWD}:/ws" -w /ws \
+    openbmc/ubuntu-unit-test:2025-W36-725b9a7cb31b8fdf bash -c \
+    "LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu/:/usr/local/lib/ \
+    /usr/local/libexec/phosphor-objmgr/mapperx \
+    --service-namespaces='xyz.openbmc_project' \
+    --interface-namespaces='xyz.openbmc_project'"
 ```
diff --git a/.agents/skills/lesson/SKILL.md b/.agents/skills/lesson/SKILL.md
index d8af07e..ad0d40e 100644
--- a/.agents/skills/lesson/SKILL.md
+++ b/.agents/skills/lesson/SKILL.md
@@ -5,9 +5,9 @@
   lessons learned for the dbus-sensors codebase.
 ---
 
-## C++ Best Practices
+# C++ Best Practices
 
-### State Machine for Asynchronous Queries
+## State Machine for Asynchronous Queries
 
 When dealing with asynchronous D-Bus queries that can be triggered by external
 events (like `InterfacesAdded`), use a state machine to handle race conditions
@@ -22,7 +22,7 @@
 - Centralize the setting and clearing of the `querying` flag inside the query
   function to avoid scattered state management.
 
-### Compare, Don't Subtract for Sentinel Time Points
+## Compare, Don't Subtract for Sentinel Time Points
 
 Because of the guaranteed overflow, you should never perform arithmetic
 operations on `time_point::min()` or `time_point::max()`. They are strictly
@@ -43,21 +43,38 @@
     auto elapsed = current_time - last_event;
     // Process the elapsed time...
 }
-### Coroutine Reference Safety Across Suspension Points
+```
 
-When using coroutines (e.g., with `boost::asio::yield_context`), do not hold references or pointers to objects in global or shared state across suspension points (`yield`).
+## Coroutine Reference Safety Across Suspension Points
 
-Because the coroutine suspends and yields control back to the event loop, other asynchronous tasks or destructors (such as test teardowns) can run and modify or delete the global state before the coroutine resumes or is unwound.
+When using coroutines (e.g., with `boost::asio::yield_context`), do not hold
+references or pointers to objects in global or shared state across suspension
+points (`yield`).
 
-*   **❌ Unsafe Pattern:** Capturing a reference to a map element or global variable and accessing it in a deferred cleanup trap (deleter) or after a `yield` call. If the map is cleared during suspension, the reference becomes dangling.
-*   **✅ Safe Pattern:** Capture the lookup key (e.g., a string ID) **by value**, and perform a fresh lookup in the global/shared container after resuming or inside the cleanup trap. If the container was cleared, the lookup will safely fail (e.g., returning `end()`) instead of dereferencing dangling memory.
+Because the coroutine suspends and yields control back to the event loop, other
+asynchronous tasks or destructors (such as test teardowns) can run and modify or
+delete the global state before the coroutine resumes or is unwound.
+
+- **❌ Unsafe Pattern:** Capturing a reference to a map element or global
+  variable and accessing it in a deferred cleanup trap (deleter) or after a
+  `yield` call. If the map is cleared during suspension, the reference becomes
+  dangling.
+- **✅ Safe Pattern:** Capture the lookup key (e.g., a string ID) **by value**,
+  and perform a fresh lookup in the global/shared container after resuming or
+  inside the cleanup trap. If the container was cleared, the lookup will safely
+  fail (e.g., returning `end()`) instead of dereferencing dangling memory.
 
 ## Testing & Debugging
 
-
 ### Verify Mock Before Questioning Infrastructure
-Before questioning Object Mapper (mapperx) performance or behavior in a testing environment, use `dbus-monitor` and `busctl` to examine the mock server implementation. The mock might be static or missing dynamic behaviors expected by the test.
+
+Before questioning Object Mapper (mapperx) performance or behavior in a testing
+environment, use `dbus-monitor` and `busctl` to examine the mock server
+implementation. The mock might be static or missing dynamic behaviors expected
+by the test.
 
 ### Use A/B Testing for Regressions
-Use A/B testing (running specific tests with and without your changes) to narrow down which change broke what test, before claiming the test was already failing before your changes.
-```
+
+Use A/B testing (running specific tests with and without your changes) to narrow
+down which change broke what test, before claiming the test was already failing
+before your changes.
diff --git a/.clang-tidy b/.clang-tidy
index cd08a27..cc82600 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -1,307 +1,315 @@
-Checks: '
--*,
-boost-use-to-string,
-bugprone-argument-comment,
-bugprone-assert-side-effect,
-bugprone-bad-signal-to-kill-thread,
-bugprone-bool-pointer-implicit-conversion,
-bugprone-branch-clone,
-bugprone-copy-constructor-init,
-bugprone-dangling-handle,
-bugprone-dynamic-static-initializers,
-bugprone-fold-init-type,
-bugprone-forward-declaration-namespace,
-bugprone-forwarding-reference-overload,
-bugprone-implicit-widening-of-multiplication-result,
-bugprone-inaccurate-erase,
-bugprone-incorrect-roundings,
-bugprone-infinite-loop,
-bugprone-integer-division,
-bugprone-lambda-function-name,
-bugprone-macro-parentheses,
-bugprone-macro-repeated-side-effects,
-bugprone-misplaced-operator-in-strlen-in-alloc,
-bugprone-misplaced-pointer-arithmetic-in-alloc,
-bugprone-misplaced-widening-cast,
-bugprone-move-forwarding-reference,
-bugprone-multiple-statement-macro,
-bugprone-no-escape,
-bugprone-not-null-terminated-result,
-bugprone-parent-virtual-call,
-bugprone-posix-return,
-bugprone-redundant-branch-condition,
-bugprone-reserved-identifier,
-bugprone-signal-handler,
-bugprone-signed-char-misuse,
-bugprone-sizeof-container,
-bugprone-sizeof-expression,
-bugprone-spuriously-wake-up-functions,
-bugprone-string-constructor,
-bugprone-string-integer-assignment,
-bugprone-string-literal-with-embedded-nul,
-bugprone-suspicious-enum-usage,
-bugprone-suspicious-include,
-bugprone-suspicious-memset-usage,
-bugprone-suspicious-missing-comma,
-bugprone-suspicious-semicolon,
-bugprone-suspicious-string-compare,
-bugprone-swapped-arguments,
-bugprone-terminating-continue,
-bugprone-throw-keyword-missing,
-bugprone-too-small-loop-variable,
-bugprone-undefined-memory-manipulation,
-bugprone-undelegated-constructor,
-bugprone-unhandled-exception-at-new,
-bugprone-unhandled-self-assignment,
-bugprone-unused-raii,
-bugprone-unused-return-value,
-bugprone-use-after-move,
-bugprone-virtual-near-miss,
-cert-con36-c,
-cert-con54-cpp,
-cert-dcl03-c,
-cert-dcl16-c,
-cert-dcl21-cpp,
-cert-dcl50-cpp,
-cert-dcl54-cpp,
-cert-dcl58-cpp,
-cert-dcl59-cpp,
-cert-env33-c,
-cert-err09-cpp,
-cert-err34-c,
-cert-err52-cpp,
-cert-err60-cpp,
-cert-err61-cpp,
-cert-fio38-c,
-cert-flp30-c,
-cert-mem57-cpp,
-cert-msc30-c,
-cert-msc32-c,
-cert-msc50-cpp,
-cert-msc51-cpp,
-cert-oop11-cpp,
-cert-oop54-cpp,
-cert-oop57-cpp,
-cert-oop58-cpp,
-cert-pos44-c,
-cert-pos47-c,
-cert-sig30-c,
-cert-str34-c,
-clang-analyzer-apiModeling.StdCLibraryFunctions,
-clang-analyzer-apiModeling.TrustNonnull,
-clang-analyzer-apiModeling.google.GTest,
-clang-analyzer-apiModeling.llvm.CastValue,
-clang-analyzer-apiModeling.llvm.ReturnValue,
-clang-analyzer-core.CallAndMessageModeling,
-clang-analyzer-core.DivideZero,
-clang-analyzer-core.DynamicTypePropagation,
-clang-analyzer-core.NonNullParamChecker,
-clang-analyzer-core.NonnilStringConstants,
-clang-analyzer-core.NullDereference,
-clang-analyzer-core.StackAddrEscapeBase,
-clang-analyzer-core.StackAddressEscape,
-clang-analyzer-core.UndefinedBinaryOperatorResult,
-clang-analyzer-core.VLASize,
-clang-analyzer-core.builtin.BuiltinFunctions,
-clang-analyzer-core.builtin.NoReturnFunctions,
-clang-analyzer-core.uninitialized.ArraySubscript,
-clang-analyzer-core.uninitialized.Assign,
-clang-analyzer-core.uninitialized.Branch,
-clang-analyzer-core.uninitialized.CapturedBlockVariable,
-clang-analyzer-core.uninitialized.UndefReturn,
-clang-analyzer-cplusplus.InnerPointer,
-clang-analyzer-cplusplus.Move,
-clang-analyzer-cplusplus.NewDelete,
-clang-analyzer-cplusplus.NewDeleteLeaks,
-clang-analyzer-cplusplus.PlacementNew,
-clang-analyzer-cplusplus.PureVirtualCall,
-clang-analyzer-cplusplus.SelfAssignment,
-clang-analyzer-cplusplus.SmartPtrModeling,
-clang-analyzer-cplusplus.VirtualCallModeling,
-clang-analyzer-deadcode.DeadStores,
-clang-analyzer-fuchsia.HandleChecker,
-clang-analyzer-nullability.NullPassedToNonnull,
-clang-analyzer-nullability.NullReturnedFromNonnull,
-clang-analyzer-nullability.NullabilityBase,
-clang-analyzer-nullability.NullableDereferenced,
-clang-analyzer-nullability.NullablePassedToNonnull,
-clang-analyzer-nullability.NullableReturnedFromNonnull,
-clang-analyzer-optin.cplusplus.UninitializedObject,
-clang-analyzer-optin.mpi.MPI-Checker,
-clang-analyzer-optin.osx.OSObjectCStyleCast,
-clang-analyzer-optin.osx.cocoa.localizability.EmptyLocalizationContextChecker,
-clang-analyzer-optin.osx.cocoa.localizability.NonLocalizedStringChecker,
-clang-analyzer-optin.performance.GCDAntipattern,
-clang-analyzer-optin.performance.Padding,
-clang-analyzer-optin.portability.UnixAPI,
-clang-analyzer-osx.API,
-clang-analyzer-osx.MIG,
-clang-analyzer-osx.NSOrCFErrorDerefChecker,
-clang-analyzer-osx.NumberObjectConversion,
-clang-analyzer-osx.OSObjectRetainCount,
-clang-analyzer-osx.ObjCProperty,
-clang-analyzer-osx.SecKeychainAPI,
-clang-analyzer-osx.cocoa.AtSync,
-clang-analyzer-osx.cocoa.AutoreleaseWrite,
-clang-analyzer-osx.cocoa.ClassRelease,
-clang-analyzer-osx.cocoa.Dealloc,
-clang-analyzer-osx.cocoa.IncompatibleMethodTypes,
-clang-analyzer-osx.cocoa.Loops,
-clang-analyzer-osx.cocoa.MissingSuperCall,
-clang-analyzer-osx.cocoa.NSAutoreleasePool,
-clang-analyzer-osx.cocoa.NSError,
-clang-analyzer-osx.cocoa.NilArg,
-clang-analyzer-osx.cocoa.NonNilReturnValue,
-clang-analyzer-osx.cocoa.ObjCGenerics,
-clang-analyzer-osx.cocoa.RetainCount,
-clang-analyzer-osx.cocoa.RetainCountBase,
-clang-analyzer-osx.cocoa.RunLoopAutoreleaseLeak,
-clang-analyzer-osx.cocoa.SelfInit,
-clang-analyzer-osx.cocoa.SuperDealloc,
-clang-analyzer-osx.cocoa.UnusedIvars,
-clang-analyzer-osx.cocoa.VariadicMethodTypes,
-clang-analyzer-osx.coreFoundation.CFError,
-clang-analyzer-osx.coreFoundation.CFNumber,
-clang-analyzer-osx.coreFoundation.CFRetainRelease,
-clang-analyzer-osx.coreFoundation.containers.OutOfBounds,
-clang-analyzer-osx.coreFoundation.containers.PointerSizedValues,
-clang-analyzer-security.FloatLoopCounter,
-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,
-clang-analyzer-security.insecureAPI.SecuritySyntaxChecker,
-clang-analyzer-security.insecureAPI.UncheckedReturn,
-clang-analyzer-security.insecureAPI.bcmp,
-clang-analyzer-security.insecureAPI.bcopy,
-clang-analyzer-security.insecureAPI.bzero,
-clang-analyzer-security.insecureAPI.decodeValueOfObjCType,
-clang-analyzer-security.insecureAPI.getpw,
-clang-analyzer-security.insecureAPI.gets,
-clang-analyzer-security.insecureAPI.mkstemp,
-clang-analyzer-security.insecureAPI.mktemp,
-clang-analyzer-security.insecureAPI.rand,
-clang-analyzer-security.insecureAPI.strcpy,
-clang-analyzer-security.insecureAPI.vfork,
-clang-analyzer-unix.API,
-clang-analyzer-unix.DynamicMemoryModeling,
-clang-analyzer-unix.Malloc,
-clang-analyzer-unix.MallocSizeof,
-clang-analyzer-unix.MismatchedDeallocator,
-clang-analyzer-unix.Vfork,
-clang-analyzer-unix.cstring.BadSizeArg,
-clang-analyzer-unix.cstring.CStringModeling,
-clang-analyzer-unix.cstring.NullArg,
-clang-analyzer-valist.CopyToSelf,
-clang-analyzer-valist.Uninitialized,
-clang-analyzer-valist.Unterminated,
-clang-analyzer-valist.ValistBase,
-clang-analyzer-webkit.NoUncountedMemberChecker,
-clang-analyzer-webkit.RefCntblBaseVirtualDtor,
-cppcoreguidelines-avoid-c-arrays,
-cppcoreguidelines-avoid-goto,
-cppcoreguidelines-c-copy-assignment-signature,
-cppcoreguidelines-explicit-virtual-functions,
-cppcoreguidelines-init-variables,
-cppcoreguidelines-interfaces-global-init,
-cppcoreguidelines-macro-usage,
-cppcoreguidelines-no-malloc,
-cppcoreguidelines-prefer-member-initializer,
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-cppcoreguidelines-pro-type-const-cast,
-cppcoreguidelines-pro-type-cstyle-cast,
-cppcoreguidelines-pro-type-member-init,
-cppcoreguidelines-pro-type-reinterpret-cast,
-cppcoreguidelines-pro-type-static-cast-downcast,
-cppcoreguidelines-pro-type-union-access,
-cppcoreguidelines-pro-type-vararg,
-cppcoreguidelines-slicing,
-google-explicit-constructor,
-misc-misplaced-const,
-misc-redundant-expression,
-misc-static-assert,
-misc-throw-by-value-catch-by-reference,
-misc-unconventional-assign-operator,
-misc-uniqueptr-reset-release,
-misc-unused-using-decls,
-modernize-avoid-bind,
-modernize-deprecated-headers,
-modernize-deprecated-ios-base-aliases,
-modernize-loop-convert,
-modernize-make-shared,
-modernize-make-unique,
-modernize-raw-string-literal,
-modernize-replace-auto-ptr,
-modernize-replace-random-shuffle,
-modernize-return-braced-init-list,
-modernize-shrink-to-fit,
-modernize-unary-static-assert,
-modernize-use-bool-literals,
-modernize-use-default-member-init,
-modernize-use-emplace,
-modernize-use-equals-default,
-modernize-use-equals-delete,
-modernize-use-noexcept,
-modernize-use-nullptr,
-modernize-use-override,
-modernize-use-transparent-functors,
-modernize-use-uncaught-exceptions,
-modernize-use-using,
-performance-faster-string-find,
-performance-for-range-copy,
-performance-implicit-conversion-in-loop,
-performance-inefficient-algorithm,
-performance-inefficient-string-concatenation,
-performance-inefficient-vector-operation,
-performance-move-const-arg,
-performance-move-constructor-init,
-performance-no-automatic-move,
-performance-no-int-to-ptr,
-performance-noexcept-move-constructor,
-performance-trivially-destructible,
-performance-type-promotion-in-math-fn,
-performance-unnecessary-copy-initialization,
-performance-unnecessary-value-param,
-readability-avoid-const-params-in-decls,
-readability-braces-around-statements,
-readability-const-return-type,
-readability-container-size-empty,
-readability-convert-member-functions-to-static,
-readability-delete-null-pointer,
-readability-deleted-default,
-readability-else-after-return,
-readability-function-size,
-readability-identifier-naming,
-readability-implicit-bool-conversion,
-readability-inconsistent-declaration-parameter-name,
-readability-isolate-declaration,
-readability-make-member-function-const,
-readability-misleading-indentation,
-readability-misplaced-array-index,
-readability-named-parameter,
-readability-non-const-parameter,
-readability-qualified-auto,
-readability-redundant-access-specifiers,
-readability-redundant-control-flow,
-readability-redundant-declaration,
-readability-redundant-function-ptr-dereference,
-readability-redundant-member-init,
-readability-redundant-preprocessor,
-readability-redundant-smartptr-get,
-readability-redundant-string-cstr,
-readability-redundant-string-init,
-readability-simplify-boolean-expr,
-readability-simplify-subscript-expr,
-readability-static-accessed-through-instance,
-readability-static-definition-in-anonymous-namespace,
-readability-string-compare,
-readability-suspicious-call-argument,
-readability-uniqueptr-delete-release,
-readability-uppercase-literal-suffix'
+Checks: '-*,
+    boost-use-to-string,
+    bugprone-argument-comment,
+    bugprone-assert-side-effect,
+    bugprone-bad-signal-to-kill-thread,
+    bugprone-bool-pointer-implicit-conversion,
+    bugprone-branch-clone,
+    bugprone-copy-constructor-init,
+    bugprone-dangling-handle,
+    bugprone-dynamic-static-initializers,
+    bugprone-fold-init-type,
+    bugprone-forward-declaration-namespace,
+    bugprone-forwarding-reference-overload,
+    bugprone-implicit-widening-of-multiplication-result,
+    bugprone-inaccurate-erase,
+    bugprone-incorrect-roundings,
+    bugprone-infinite-loop,
+    bugprone-integer-division,
+    bugprone-lambda-function-name,
+    bugprone-macro-parentheses,
+    bugprone-macro-repeated-side-effects,
+    bugprone-misplaced-operator-in-strlen-in-alloc,
+    bugprone-misplaced-pointer-arithmetic-in-alloc,
+    bugprone-misplaced-widening-cast,
+    bugprone-move-forwarding-reference,
+    bugprone-multiple-statement-macro,
+    bugprone-no-escape,
+    bugprone-not-null-terminated-result,
+    bugprone-parent-virtual-call,
+    bugprone-posix-return,
+    bugprone-redundant-branch-condition,
+    bugprone-reserved-identifier,
+    bugprone-signal-handler,
+    bugprone-signed-char-misuse,
+    bugprone-sizeof-container,
+    bugprone-sizeof-expression,
+    bugprone-spuriously-wake-up-functions,
+    bugprone-string-constructor,
+    bugprone-string-integer-assignment,
+    bugprone-string-literal-with-embedded-nul,
+    bugprone-suspicious-enum-usage,
+    bugprone-suspicious-include,
+    bugprone-suspicious-memset-usage,
+    bugprone-suspicious-missing-comma,
+    bugprone-suspicious-semicolon,
+    bugprone-suspicious-string-compare,
+    bugprone-swapped-arguments,
+    bugprone-terminating-continue,
+    bugprone-throw-keyword-missing,
+    bugprone-too-small-loop-variable,
+    bugprone-undefined-memory-manipulation,
+    bugprone-undelegated-constructor,
+    bugprone-unhandled-exception-at-new,
+    bugprone-unhandled-self-assignment,
+    bugprone-unused-raii,
+    bugprone-unused-return-value,
+    bugprone-use-after-move,
+    bugprone-virtual-near-miss,
+    cert-con36-c,
+    cert-con54-cpp,
+    cert-dcl03-c,
+    cert-dcl16-c,
+    cert-dcl21-cpp,
+    cert-dcl50-cpp,
+    cert-dcl54-cpp,
+    cert-dcl58-cpp,
+    cert-dcl59-cpp,
+    cert-env33-c,
+    cert-err09-cpp,
+    cert-err34-c,
+    cert-err52-cpp,
+    cert-err60-cpp,
+    cert-err61-cpp,
+    cert-fio38-c,
+    cert-flp30-c,
+    cert-mem57-cpp,
+    cert-msc30-c,
+    cert-msc32-c,
+    cert-msc50-cpp,
+    cert-msc51-cpp,
+    cert-oop11-cpp,
+    cert-oop54-cpp,
+    cert-oop57-cpp,
+    cert-oop58-cpp,
+    cert-pos44-c,
+    cert-pos47-c,
+    cert-sig30-c,
+    cert-str34-c,
+    clang-analyzer-apiModeling.StdCLibraryFunctions,
+    clang-analyzer-apiModeling.TrustNonnull,
+    clang-analyzer-apiModeling.google.GTest,
+    clang-analyzer-apiModeling.llvm.CastValue,
+    clang-analyzer-apiModeling.llvm.ReturnValue,
+    clang-analyzer-core.CallAndMessageModeling,
+    clang-analyzer-core.DivideZero,
+    clang-analyzer-core.DynamicTypePropagation,
+    clang-analyzer-core.NonNullParamChecker,
+    clang-analyzer-core.NonnilStringConstants,
+    clang-analyzer-core.NullDereference,
+    clang-analyzer-core.StackAddrEscapeBase,
+    clang-analyzer-core.StackAddressEscape,
+    clang-analyzer-core.UndefinedBinaryOperatorResult,
+    clang-analyzer-core.VLASize,
+    clang-analyzer-core.builtin.BuiltinFunctions,
+    clang-analyzer-core.builtin.NoReturnFunctions,
+    clang-analyzer-core.uninitialized.ArraySubscript,
+    clang-analyzer-core.uninitialized.Assign,
+    clang-analyzer-core.uninitialized.Branch,
+    clang-analyzer-core.uninitialized.CapturedBlockVariable,
+    clang-analyzer-core.uninitialized.UndefReturn,
+    clang-analyzer-cplusplus.InnerPointer,
+    clang-analyzer-cplusplus.Move,
+    clang-analyzer-cplusplus.NewDelete,
+    clang-analyzer-cplusplus.NewDeleteLeaks,
+    clang-analyzer-cplusplus.PlacementNew,
+    clang-analyzer-cplusplus.PureVirtualCall,
+    clang-analyzer-cplusplus.SelfAssignment,
+    clang-analyzer-cplusplus.SmartPtrModeling,
+    clang-analyzer-cplusplus.VirtualCallModeling,
+    clang-analyzer-deadcode.DeadStores,
+    clang-analyzer-fuchsia.HandleChecker,
+    clang-analyzer-nullability.NullPassedToNonnull,
+    clang-analyzer-nullability.NullReturnedFromNonnull,
+    clang-analyzer-nullability.NullabilityBase,
+    clang-analyzer-nullability.NullableDereferenced,
+    clang-analyzer-nullability.NullablePassedToNonnull,
+    clang-analyzer-nullability.NullableReturnedFromNonnull,
+    clang-analyzer-optin.cplusplus.UninitializedObject,
+    clang-analyzer-optin.mpi.MPI-Checker,
+    clang-analyzer-optin.osx.OSObjectCStyleCast,
+    clang-analyzer-optin.osx.cocoa.localizability.EmptyLocalizationContextChecker,
+    clang-analyzer-optin.osx.cocoa.localizability.NonLocalizedStringChecker,
+    clang-analyzer-optin.performance.GCDAntipattern,
+    clang-analyzer-optin.performance.Padding,
+    clang-analyzer-optin.portability.UnixAPI,
+    clang-analyzer-osx.API,
+    clang-analyzer-osx.MIG,
+    clang-analyzer-osx.NSOrCFErrorDerefChecker,
+    clang-analyzer-osx.NumberObjectConversion,
+    clang-analyzer-osx.OSObjectRetainCount,
+    clang-analyzer-osx.ObjCProperty,
+    clang-analyzer-osx.SecKeychainAPI,
+    clang-analyzer-osx.cocoa.AtSync,
+    clang-analyzer-osx.cocoa.AutoreleaseWrite,
+    clang-analyzer-osx.cocoa.ClassRelease,
+    clang-analyzer-osx.cocoa.Dealloc,
+    clang-analyzer-osx.cocoa.IncompatibleMethodTypes,
+    clang-analyzer-osx.cocoa.Loops,
+    clang-analyzer-osx.cocoa.MissingSuperCall,
+    clang-analyzer-osx.cocoa.NSAutoreleasePool,
+    clang-analyzer-osx.cocoa.NSError,
+    clang-analyzer-osx.cocoa.NilArg,
+    clang-analyzer-osx.cocoa.NonNilReturnValue,
+    clang-analyzer-osx.cocoa.ObjCGenerics,
+    clang-analyzer-osx.cocoa.RetainCount,
+    clang-analyzer-osx.cocoa.RetainCountBase,
+    clang-analyzer-osx.cocoa.RunLoopAutoreleaseLeak,
+    clang-analyzer-osx.cocoa.SelfInit,
+    clang-analyzer-osx.cocoa.SuperDealloc,
+    clang-analyzer-osx.cocoa.UnusedIvars,
+    clang-analyzer-osx.cocoa.VariadicMethodTypes,
+    clang-analyzer-osx.coreFoundation.CFError,
+    clang-analyzer-osx.coreFoundation.CFNumber,
+    clang-analyzer-osx.coreFoundation.CFRetainRelease,
+    clang-analyzer-osx.coreFoundation.containers.OutOfBounds,
+    clang-analyzer-osx.coreFoundation.containers.PointerSizedValues,
+    clang-analyzer-security.FloatLoopCounter,
+    clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,
+    clang-analyzer-security.insecureAPI.SecuritySyntaxChecker,
+    clang-analyzer-security.insecureAPI.UncheckedReturn,
+    clang-analyzer-security.insecureAPI.bcmp,
+    clang-analyzer-security.insecureAPI.bcopy,
+    clang-analyzer-security.insecureAPI.bzero,
+    clang-analyzer-security.insecureAPI.decodeValueOfObjCType,
+    clang-analyzer-security.insecureAPI.getpw,
+    clang-analyzer-security.insecureAPI.gets,
+    clang-analyzer-security.insecureAPI.mkstemp,
+    clang-analyzer-security.insecureAPI.mktemp,
+    clang-analyzer-security.insecureAPI.rand,
+    clang-analyzer-security.insecureAPI.strcpy,
+    clang-analyzer-security.insecureAPI.vfork,
+    clang-analyzer-unix.API,
+    clang-analyzer-unix.DynamicMemoryModeling,
+    clang-analyzer-unix.Malloc,
+    clang-analyzer-unix.MallocSizeof,
+    clang-analyzer-unix.MismatchedDeallocator,
+    clang-analyzer-unix.Vfork,
+    clang-analyzer-unix.cstring.BadSizeArg,
+    clang-analyzer-unix.cstring.CStringModeling,
+    clang-analyzer-unix.cstring.NullArg,
+    clang-analyzer-valist.CopyToSelf,
+    clang-analyzer-valist.Uninitialized,
+    clang-analyzer-valist.Unterminated,
+    clang-analyzer-valist.ValistBase,
+    clang-analyzer-webkit.NoUncountedMemberChecker,
+    clang-analyzer-webkit.RefCntblBaseVirtualDtor,
+    cppcoreguidelines-avoid-c-arrays,
+    cppcoreguidelines-avoid-goto,
+    cppcoreguidelines-c-copy-assignment-signature,
+    cppcoreguidelines-explicit-virtual-functions,
+    cppcoreguidelines-init-variables,
+    cppcoreguidelines-interfaces-global-init,
+    cppcoreguidelines-macro-usage,
+    cppcoreguidelines-no-malloc,
+    cppcoreguidelines-prefer-member-initializer,
+    cppcoreguidelines-pro-bounds-array-to-pointer-decay,
+    cppcoreguidelines-pro-type-const-cast,
+    cppcoreguidelines-pro-type-cstyle-cast,
+    cppcoreguidelines-pro-type-member-init,
+    cppcoreguidelines-pro-type-reinterpret-cast,
+    cppcoreguidelines-pro-type-static-cast-downcast,
+    cppcoreguidelines-pro-type-union-access,
+    cppcoreguidelines-pro-type-vararg,
+    cppcoreguidelines-slicing,
+    google-explicit-constructor,
+    misc-misplaced-const,
+    misc-redundant-expression,
+    misc-static-assert,
+    misc-throw-by-value-catch-by-reference,
+    misc-unconventional-assign-operator,
+    misc-uniqueptr-reset-release,
+    misc-unused-using-decls,
+    modernize-avoid-bind,
+    modernize-deprecated-headers,
+    modernize-deprecated-ios-base-aliases,
+    modernize-loop-convert,
+    modernize-make-shared,
+    modernize-make-unique,
+    modernize-raw-string-literal,
+    modernize-replace-auto-ptr,
+    modernize-replace-random-shuffle,
+    modernize-return-braced-init-list,
+    modernize-shrink-to-fit,
+    modernize-unary-static-assert,
+    modernize-use-bool-literals,
+    modernize-use-default-member-init,
+    modernize-use-emplace,
+    modernize-use-equals-default,
+    modernize-use-equals-delete,
+    modernize-use-noexcept,
+    modernize-use-nullptr,
+    modernize-use-override,
+    modernize-use-transparent-functors,
+    modernize-use-uncaught-exceptions,
+    modernize-use-using,
+    performance-faster-string-find,
+    performance-for-range-copy,
+    performance-implicit-conversion-in-loop,
+    performance-inefficient-algorithm,
+    performance-inefficient-string-concatenation,
+    performance-inefficient-vector-operation,
+    performance-move-const-arg,
+    performance-move-constructor-init,
+    performance-no-automatic-move,
+    performance-no-int-to-ptr,
+    performance-noexcept-move-constructor,
+    performance-trivially-destructible,
+    performance-type-promotion-in-math-fn,
+    performance-unnecessary-copy-initialization,
+    performance-unnecessary-value-param,
+    readability-avoid-const-params-in-decls,
+    readability-braces-around-statements,
+    readability-const-return-type,
+    readability-container-size-empty,
+    readability-convert-member-functions-to-static,
+    readability-delete-null-pointer,
+    readability-deleted-default,
+    readability-else-after-return,
+    readability-function-size,
+    readability-identifier-naming,
+    readability-implicit-bool-conversion,
+    readability-inconsistent-declaration-parameter-name,
+    readability-isolate-declaration,
+    readability-make-member-function-const,
+    readability-misleading-indentation,
+    readability-misplaced-array-index,
+    readability-named-parameter,
+    readability-non-const-parameter,
+    readability-qualified-auto,
+    readability-redundant-access-specifiers,
+    readability-redundant-control-flow,
+    readability-redundant-declaration,
+    readability-redundant-function-ptr-dereference,
+    readability-redundant-member-init,
+    readability-redundant-preprocessor,
+    readability-redundant-smartptr-get,
+    readability-redundant-string-cstr,
+    readability-redundant-string-init,
+    readability-simplify-boolean-expr,
+    readability-simplify-subscript-expr,
+    readability-static-accessed-through-instance,
+    readability-static-definition-in-anonymous-namespace,
+    readability-string-compare,
+    readability-suspicious-call-argument,
+    readability-uniqueptr-delete-release,
+    readability-uppercase-literal-suffix
+    '
+
+CheckOptions:
+-   key: readability-identifier-naming.ClassCase
+    value: CamelCase
+-   key: readability-identifier-naming.FunctionCase
+    value: camelBack
+-   key: readability-identifier-naming.NamespaceCase
+    value: lower_case
+-   key: readability-identifier-naming.ParameterCase
+    value: camelBack
+-   key: readability-identifier-naming.StructCase
+    value: CamelCase
+-   key: readability-identifier-naming.VariableCase
+    value: camelBack
+
+HeaderFilterRegex: (?!^subprojects).*
 
 WarningsAsErrors: '*'
-HeaderFilterRegex: '(?!^subprojects).*'
-CheckOptions:
-  - { key: readability-identifier-naming.ClassCase,     value: CamelCase  }
-  - { key: readability-identifier-naming.VariableCase,  value: camelBack }
-  - { key: readability-identifier-naming.FunctionCase,  value: camelBack }
-  - { key: readability-identifier-naming.ParameterCase, value: camelBack }
-  - { key: readability-identifier-naming.NamespaceCase, value: lower_case }
-  - { key: readability-identifier-naming.StructCase,    value: CamelCase  }
diff --git a/README.md b/README.md
index 2b6a463..3bd37aa 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
 
 A typical dbus-sensors object support the following dbus interfaces:
 
-```
+```text
 Path        /xyz/openbmc_project/sensors/<type>/<sensor_name>
 
 Interfaces  xyz.openbmc_project.Sensor.Value
@@ -34,8 +34,8 @@
 
 ```
 
-Sensor interfaces collection are described
-[here](https://github.com/openbmc/phosphor-dbus-interfaces/tree/master/yaml/xyz/openbmc_project/Sensor).
+Sensor interfaces collection are described in
+[Sensor interfaces](https://github.com/openbmc/phosphor-dbus-interfaces/tree/master/yaml/xyz/openbmc_project/Sensor).
 
 Consumer examples of these interfaces are
 [Redfish](https://github.com/openbmc/bmcweb/blob/master/redfish-core/lib/sensors.hpp),
@@ -53,8 +53,8 @@
 other services to consume when value or threshold status change. OperationStatus
 is set to false if the sensor is determined to be faulty.
 
-A simple sensor example can be found
-[here](https://github.com/openbmc/entity-manager/blob/master/docs/my_first_sensors.md).
+A simple sensor example can be found in the
+[my_first_sensors example](https://github.com/openbmc/entity-manager/blob/master/docs/my_first_sensors.md).
 
 ## configuration
 
diff --git a/meson.build b/meson.build
index 185cb0c..0bfce5a 100644
--- a/meson.build
+++ b/meson.build
@@ -4,11 +4,11 @@
     default_options: [
         'warning_level=3',
         'werror=true',
-        'cpp_std=c++20'
+        'cpp_std=c++23'
     ],
     license: 'Apache-2.0',
     version: '0.1',
-    meson_version: '>=0.63.0',
+    meson_version: '>=1.1.1',
 )
 
 # Enable io_uring for all daemons with below flags. 
diff --git a/src/meson.build b/src/meson.build
index 886ac8d..ce21e2e 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -223,6 +223,7 @@
     )
 
     pdi_dep = phosphor_dbus_interfaces_dep
+    subproject('libnvme', default_options: ['warning_level=1', 'werror=false'])
     libnvme = dependency('libnvme', 
         required : true,
         fallback : ['libnvme', 'libnvme_dep'],
diff --git a/subprojects/libnvme.wrap b/subprojects/libnvme.wrap
index 51ae9fb..e97aef2 100644
--- a/subprojects/libnvme.wrap
+++ b/subprojects/libnvme.wrap
@@ -2,7 +2,7 @@
 directory = libnvme
 url = https://github.com/linux-nvme/libnvme.git
 revision = bf85536ff5640e9e3ee04e13d8e5eedd70add550
-diff_files = libnvme/0001-mi_admin_xfer-set-data-fields-based-on-opcode.patch,libnvme/0002-mi-fix-the-return-error-code.patch,libnvme/0003-mi-fix-the-rc-for-nvme_mi_scan_ep.patch,libnvme/0004-mi-avoid-changing-default-ep-timeout-during-admin_pa.patch,libnvme/0005-libnvme-mi-add-timeout-functions-to-.map.patch,libnvme/0001-mi-don-t-return-from-mi_mctp_submit-with-a-tag-held.patch,libnvme/0001-Assign-default-value-on-variable-definition.patch,libnvme/0001-test-Intialize-the-variables-for-mi-tests.patch,libnvme/0013-Add-support-for-command-feature-lockdown-log-page.patch
+diff_files = libnvme/0001-mi_admin_xfer-set-data-fields-based-on-opcode.patch,libnvme/0002-mi-fix-the-return-error-code.patch,libnvme/0003-mi-fix-the-rc-for-nvme_mi_scan_ep.patch,libnvme/0004-mi-avoid-changing-default-ep-timeout-during-admin_pa.patch,libnvme/0005-libnvme-mi-add-timeout-functions-to-.map.patch,libnvme/0001-mi-don-t-return-from-mi_mctp_submit-with-a-tag-held.patch,libnvme/0001-Assign-default-value-on-variable-definition.patch,libnvme/0001-test-Intialize-the-variables-for-mi-tests.patch,libnvme/0013-Add-support-for-command-feature-lockdown-log-page.patch,libnvme/0001-ccan-cast-pointers-to-void-in-fprintf-for-p-format.patch,libnvme/0002-meson-skip-tests-when-built-as-subproject.patch
 
 [provide]
 dependency_names = libnvme_dep, libnvme_mi_dep
diff --git a/subprojects/packagefiles/libnvme/0001-ccan-cast-pointers-to-void-in-fprintf-for-p-format.patch b/subprojects/packagefiles/libnvme/0001-ccan-cast-pointers-to-void-in-fprintf-for-p-format.patch
new file mode 100644
index 0000000..e0627e0
--- /dev/null
+++ b/subprojects/packagefiles/libnvme/0001-ccan-cast-pointers-to-void-in-fprintf-for-p-format.patch
@@ -0,0 +1,56 @@
+From ed5851d00b0e7c28cff614b9ca88d9d328c2de3b Mon Sep 17 00:00:00 2001
+From: Guangzong Chen <guangzong@google.com>
+Date: Fri, 11 Sep 2026 21:11:02 +0000
+Subject: [PATCH] ccan: cast pointers to void * in fprintf for %p format
+ specifier
+
+GCC 15 enables stricter format validation by default, triggering
+-Werror=format= when passing non-void pointers (e.g. `const struct list_node *`)
+to `%p`:
+
+    ccan/ccan/list/list.c: In function 'corrupt':
+    ccan/ccan/list/list.c:13:52: error: format '%p' expects argument of type 'void *', but argument 4 has type 'const struct list_node *' [-Werror=format=]
+       13 |                         "%s: prev corrupt in node %p (%u) of %p\n",
+          |                                                   ~^
+          |                                                    |
+          |                                                    void *
+       14 |                         abortstr, node, count, head);
+          |                                   ~~~~
+          |                                   |
+          |                                   const struct list_node *
+    ccan/ccan/list/list.c:13:63: error: format '%p' expects argument of type 'void *', but argument 6 has type 'const struct list_node *' [-Werror=format=]
+       13 |                         "%s: prev corrupt in node %p (%u) of %p\n",
+          |                                                              ~^
+          |                                                               |
+          |                                                               void *
+       14 |                         abortstr, node, count, head);
+          |                                                ~~~~
+          |                                                |
+          |                                                const struct list_node *
+
+Per ISO C standard (C99/C11 7.21.6.1), the `%p` conversion specifier
+expects an argument of type `void *` or `const void *`. Explicitly cast
+`node` and `head` to `(const void *)` to prevent build failures under
+modern compiler toolchains with -Werror enabled.
+
+Upstream-Status: Submitted [https://github.com/linux-nvme/libnvme/pull/1146]
+Signed-off-by: Guangzong Chen <guangzong@google.com>
+---
+ ccan/ccan/list/list.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ccan/ccan/list/list.c b/ccan/ccan/list/list.c
+index 2717fa3f..3916605c 100644
+--- a/ccan/ccan/list/list.c
++++ b/ccan/ccan/list/list.c
+@@ -11,7 +11,7 @@ static void *corrupt(const char *abortstr,
+ 	if (abortstr) {
+ 		fprintf(stderr,
+ 			"%s: prev corrupt in node %p (%u) of %p\n",
+-			abortstr, node, count, head);
++			abortstr, (const void *)node, count, (const void *)head);
+ 		abort();
+ 	}
+ 	return NULL;
+-- 
+2.46.0
diff --git a/subprojects/packagefiles/libnvme/0002-meson-skip-tests-when-built-as-subproject.patch b/subprojects/packagefiles/libnvme/0002-meson-skip-tests-when-built-as-subproject.patch
new file mode 100644
index 0000000..6bc409b
--- /dev/null
+++ b/subprojects/packagefiles/libnvme/0002-meson-skip-tests-when-built-as-subproject.patch
@@ -0,0 +1,34 @@
+From d8a716c542459b726c04f981142512a88e999901 Mon Sep 17 00:00:00 2001
+From: Guangzong Chen <guangzong@google.com>
+Date: Fri, 11 Sep 2026 18:02:00 +0000
+Subject: [PATCH] meson: skip tests and examples when built as subproject
+
+When libnvme is consumed as a subproject (e.g. in dbus-sensors),
+its internal unit tests and examples should not be built or executed
+as part of the parent project's test suite.
+
+Upstream-Status: Inappropriate [subproject build flag]
+Signed-off-by: Guangzong Chen <guangzong@google.com>
+---
+ meson.build | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index f867b45..c8ef461 100644
+--- a/meson.build
++++ b/meson.build
+@@ -226,8 +226,10 @@ incdir = include_directories(['.', 'ccan', 'src'])
+ subdir('ccan')
+ subdir('src')
+ subdir('libnvme')
+-subdir('test')
+-subdir('examples')
++if not meson.is_subproject()
++    subdir('test')
++    subdir('examples')
++endif
+ subdir('doc')
+ 
+ ################################################################################
+-- 
+2.46.0