@@ -713,6 +713,45 @@ TEST(daemon_application_requires_immutable_explicit_context) {
713713 PASS ();
714714}
715715
716+ TEST (daemon_application_accepts_utf8_session_context_root ) {
717+ char root [APP_TEST_PATH_CAP ];
718+ snprintf (root , sizeof (root ), "%s/cbm-app-context-caf\xC3\xA9-XXXXXX" , cbm_tmpdir ());
719+ bool root_ok = cbm_mkdtemp (root ) != NULL ;
720+ cbm_daemon_application_t * application = cbm_daemon_application_new (NULL );
721+ cbm_daemon_runtime_application_callbacks_t callbacks =
722+ cbm_daemon_application_runtime_callbacks (application );
723+ cbm_daemon_runtime_application_session_t * session = app_test_open (& callbacks , 311 );
724+ uint8_t * context = NULL ;
725+ uint32_t context_length = 0 ;
726+ uint8_t * response = NULL ;
727+ uint32_t response_length = 0 ;
728+ bool context_ok = root_ok && app_test_context_request (root , root , & context , & context_length );
729+ cbm_daemon_runtime_application_status_t status =
730+ context_ok ? app_test_request (& callbacks , session , context , context_length , & response ,
731+ & response_length )
732+ : CBM_DAEMON_RUNTIME_APPLICATION_TRANSPORT_ERROR ;
733+
734+ free (context );
735+ free (response );
736+ if (session ) {
737+ callbacks .session_close (callbacks .context , session );
738+ }
739+ bool stopped = application && cbm_daemon_application_shutdown (application , APP_TEST_TIMEOUT_MS );
740+ cbm_daemon_application_free (application );
741+ if (root_ok ) {
742+ (void )cbm_rmdir (root );
743+ }
744+
745+ ASSERT_TRUE (root_ok );
746+ ASSERT_NOT_NULL (application );
747+ ASSERT_NOT_NULL (session );
748+ ASSERT_TRUE (context_ok );
749+ ASSERT_EQ (status , CBM_DAEMON_RUNTIME_APPLICATION_OK );
750+ ASSERT_EQ (response_length , 0 );
751+ ASSERT_TRUE (stopped );
752+ PASS ();
753+ }
754+
716755TEST (daemon_application_mcp_notification_has_no_response ) {
717756 cbm_daemon_application_t * application = cbm_daemon_application_new (NULL );
718757 cbm_daemon_runtime_application_callbacks_t callbacks =
@@ -5087,6 +5126,7 @@ SUITE(daemon_application) {
50875126 RUN_TEST (daemon_application_new_session_does_not_retain_initial_store );
50885127 RUN_TEST (daemon_application_request_cancel_is_scoped_to_exact_token );
50895128 RUN_TEST (daemon_application_requires_immutable_explicit_context );
5129+ RUN_TEST (daemon_application_accepts_utf8_session_context_root );
50905130 RUN_TEST (daemon_application_ui_config_updates_are_masked_and_serialized );
50915131 RUN_TEST (daemon_application_ui_config_rejects_noncanonical_frames );
50925132 RUN_TEST (daemon_application_ui_readiness_proof_is_generation_bound_before_context );
0 commit comments