docs: describe the composed-codec test in install order

The docstring for test_composed_codecs_with_query_planner said the
extra codecs decline everything and encoding falls through to the
provider codecs, which describes the reverse of what happens. The
provider codecs are installed first and chain_encode walks in install
order, so they claim their objects before the extra codecs are
consulted; decoding dispatches by id and does not consult them at all.
Say that, and say what the test asserts: the extra pair changes
nothing, where replace semantics would have broken the round trip.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
diff --git a/examples/datafusion-ffi-query-planner-example/python/tests/_test_three_library_query_planner.py b/examples/datafusion-ffi-query-planner-example/python/tests/_test_three_library_query_planner.py
index 97453b2..c6ef207 100644
--- a/examples/datafusion-ffi-query-planner-example/python/tests/_test_three_library_query_planner.py
+++ b/examples/datafusion-ffi-query-planner-example/python/tests/_test_three_library_query_planner.py
@@ -690,10 +690,15 @@
 
 def test_composed_codecs_with_query_planner():
     """A second pair of codecs installed on top of the provider codecs
-    composes with them instead of replacing them. The extra codecs
-    (default-backed exports from a fresh session) decline everything,
-    so planner-driven encode/decode falls through to the provider
-    codecs and the query still succeeds end to end."""
+    composes with them instead of replacing them.
+
+    The provider codecs are installed first, so encoding consults them
+    first and they claim this library's tables and plans before the
+    extra codecs (default-backed exports from a fresh session) get a
+    turn; decoding goes straight to whichever codec wrote the bytes.
+    The extra pair therefore changes nothing observable here, which is
+    the assertion: under replace semantics it would have discarded the
+    provider codecs and the planner-driven round trip would fail."""
     ctx, logical_codec, physical_codec = configured_context(max_rows=2)
     other = SessionContext()
     ctx = ctx.with_logical_extension_codec(