• Stefy Lanza (nextime / spora )'s avatar
    write the font configuration somewhere we can actually write (v0.5.8) · 055270bb
    Stefy Lanza (nextime / spora ) authored
    v0.5.6 registered operator fonts by dropping a snippet in
    $XDG_CONFIG_HOME/fontconfig/conf.d. On a host install that is right. In the
    container it is not: the launcher points XDG_CONFIG_HOME at the config VOLUME
    ROOT, which an unprivileged process cannot create a directory in, so the first
    restart after shipping it said
    
        [fonts] could not register ['/home/ubuntu/.coderai/fonts']:
                [Errno 13] Permission denied: '/config/fontconfig'
    
    and captions kept using the substitute. Two faults, not one: that path is not
    writable, and it is also inside the container's own filesystem, which a --rm
    container discards at every restart -- so even where it worked it had to be
    rewritten on each boot and could never be relied upon.
    
    The snippet is still tried first, because fontconfig reads it unprompted and
    so it survives into a grandchild. When it cannot be written, coderai now
    writes its own fonts.conf into the config dir one level down -- writable, and
    bind-mounted, so it persists -- and exports FONTCONFIG_FILE, which every child
    this process starts inherits. That file <include>s /etc/fonts/fonts.conf, so
    replacing the main configuration costs nothing: the system families still
    resolve.
    
    Verified in the container under the real environment, with the check that
    actually matters -- fc-match in a CHILD process, which is the lookup
    ffmpeg/libass performs:
    
        child fc-match 'Montserrat:style=Bold'  ->  Montserrat
        fc-match 'DejaVu Sans'                  ->  DejaVu Sans   (44 faces)
    
    The bug got through because it was verified with `docker exec`, which inherits
    a different environment than the supervised server process. A font this
    process can find is not necessarily a font the renderer can use, and an exec
    is not the deployment.
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01S8LAP3ueNzQJtwzhgVbq66
    055270bb
Name
Last commit
Last update
..
conftest.py Loading commit data...
ocr_lane_stub_worker.py Loading commit data...
test_admin_auth.py Loading commit data...
test_admin_forward_auth.py Loading commit data...
test_admin_remote_ui.py Loading commit data...
test_admission_gate_derived.py Loading commit data...
test_admission_gate_warning.py Loading commit data...
test_adoption_matches_image_and_card.py Loading commit data...
test_audio_ml_backends.py Loading commit data...
test_audio_ml_endpoints.py Loading commit data...
test_autoupgrade.py Loading commit data...
test_autoupgrade_force_options.py Loading commit data...
test_autoupgrade_midnight_force.py Loading commit data...
test_autoupgrade_recovers_a_down_server.py Loading commit data...
test_autoupgrade_sees_training.py Loading commit data...
test_black_image_and_precision.py Loading commit data...
test_broker_config.py Loading commit data...
test_broker_dispatch.py Loading commit data...
test_broker_protocol.py Loading commit data...
test_broker_shutdown.py Loading commit data...
test_broker_streaming.py Loading commit data...
test_burst_placement.py Loading commit data...
test_caption_fit_fonts_and_vram_zero.py Loading commit data...
test_caption_timings_and_status_polls.py Loading commit data...
test_character_studio_fetch.py Loading commit data...
test_chat_passthrough.py Loading commit data...
test_chunking.py Loading commit data...
test_cluster.py Loading commit data...
test_compose.py Loading commit data...
test_context_compaction.py Loading commit data...
test_control_plane_never_starves.py Loading commit data...
test_dinov2_embed_binary_lookup.py Loading commit data...
test_embed_long_input.py Loading commit data...
test_embedding_capability.py Loading commit data...
test_embedding_repo_file_detection.py Loading commit data...
test_field_report_fixes.py Loading commit data...
test_finish_reason_is_the_real_one.py Loading commit data...
test_forward_auth_peer_trust.py Loading commit data...
test_front_api_auth.py Loading commit data...
test_front_forward_pool_ceiling.py Loading commit data...
test_front_inflight_leak.py Loading commit data...
test_front_ocr_swap_gate.py Loading commit data...
test_hf_cache_is_configured_not_inherited.py Loading commit data...
test_image_edit_endpoints_actually_run.py Loading commit data...
test_image_edit_uses_an_image_pipeline.py Loading commit data...
test_image_has_c_compiler.py Loading commit data...
test_image_size_and_embeddings.py Loading commit data...
test_ledger_out_of_band.py Loading commit data...
test_live_hourly_counts_booting_pods.py Loading commit data...
test_longcat_avatar_layout.py Loading commit data...
test_longcat_bsa.py Loading commit data...
test_longcat_cancellable.py Loading commit data...
test_longcat_checkpoint_resolve.py Loading commit data...
test_longcat_component_quant.py Loading commit data...
test_longcat_config_ui.py Loading commit data...
test_longcat_external_training.py Loading commit data...
test_longcat_int8_load.py Loading commit data...
test_longcat_lora.py Loading commit data...
test_longcat_orchestration.py Loading commit data...
test_longcat_packaging.py Loading commit data...
test_longcat_placement.py Loading commit data...
test_longcat_progress.py Loading commit data...
test_longcat_prompt_cache.py Loading commit data...
test_longcat_quantize.py Loading commit data...
test_longcat_scale.py Loading commit data...
test_longcat_tasks.py Loading commit data...
test_longcat_variants.py Loading commit data...
test_longcat_vendored_source.py Loading commit data...
test_longcat_venv_env.py Loading commit data...
test_longcat_vram_estimate.py Loading commit data...
test_longcat_worker.py Loading commit data...
test_loop_watch.py Loading commit data...
test_loop_watch_stack_dump.py Loading commit data...
test_manual_multimodal_test_client.py Loading commit data...
test_media_editing_refs_and_audio.py Loading commit data...
test_model_loras_and_single_file.py Loading commit data...
test_model_scan_cache.py Loading commit data...
test_model_thinking_default.py Loading commit data...
test_models_context_window.py Loading commit data...
test_no_blocking_calls_on_the_loop.py Loading commit data...
test_ocr_accent_repair.py Loading commit data...
test_ocr_accent_token_ids.py Loading commit data...
test_ocr_accent_visibility.py Loading commit data...
test_ocr_blank_page.py Loading commit data...
test_ocr_chandra.py Loading commit data...
test_ocr_confidence.py Loading commit data...
test_ocr_degraded_retry.py Loading commit data...
test_ocr_detector_venv.py Loading commit data...
test_ocr_dual_mode.py Loading commit data...
test_ocr_early_loop_abort.py Loading commit data...
test_ocr_engine_configs_and_layout.py Loading commit data...
test_ocr_fallback_pod_capable.py Loading commit data...
test_ocr_fanout.py Loading commit data...
test_ocr_fleet_workers.py Loading commit data...
test_ocr_language.py Loading commit data...
test_ocr_lease_leak_on_cancel.py Loading commit data...
test_ocr_lease_off_the_loop.py Loading commit data...
test_ocr_max_pages.py Loading commit data...
test_ocr_max_tokens_floor.py Loading commit data...
test_ocr_native_dpi.py Loading commit data...
test_ocr_olmocr.py Loading commit data...
test_ocr_page_image.py Loading commit data...
test_ocr_page_reads_off_the_default_pool.py Loading commit data...
test_ocr_pod_async_transport.py Loading commit data...
test_ocr_pod_env_round_trip.py Loading commit data...
test_ocr_pod_pipeline_gate.py Loading commit data...
test_ocr_pod_pipeline_policy.py Loading commit data...
test_ocr_pod_pool_width.py Loading commit data...
test_ocr_queue_full_is_429.py Loading commit data...
test_ocr_raster_pool.py Loading commit data...
test_ocr_request_budgets.py Loading commit data...
test_ocr_resident_budget.py Loading commit data...
test_ocr_resume_engines.py Loading commit data...
test_ocr_resume_shared.py Loading commit data...
test_ocr_served_model.py Loading commit data...
test_ocr_surya_confidence.py Loading commit data...
test_ocr_token_trace.py Loading commit data...
test_ocr_unreadable_and_dpi.py Loading commit data...
test_ocr_vram_share_and_fallback.py Loading commit data...
test_ocr_window_published.py Loading commit data...
test_ocr_worker_demand_rents.py Loading commit data...
test_ocr_worker_lanes.py Loading commit data...
test_olmocr_pod_tls.py Loading commit data...
test_oom_priority.py Loading commit data...
test_parallel_requests_dont_cross.py Loading commit data...
test_parked_models_are_not_advertised.py Loading commit data...
test_parser_is_chosen_per_model.py Loading commit data...
test_placement_declines.py Loading commit data...
test_pod_env_booleans.py Loading commit data...
test_pod_gpu_telemetry.py Loading commit data...
test_pod_http_fleet_pool.py Loading commit data...
test_pod_http_pool.py Loading commit data...
test_pod_log_drain.py Loading commit data...
test_pod_loopback_tls.py Loading commit data...
test_pod_pool_fleet_ceiling.py Loading commit data...
test_pod_seed_model_type.py Loading commit data...
test_pod_teach_on_unknown_model.py Loading commit data...
test_pod_token_adoption_race.py Loading commit data...
test_pool_growth_adopts.py Loading commit data...
test_prompt_prefix_and_ocr_upload_size.py Loading commit data...
test_prompt_weighting_and_clip_skip.py Loading commit data...
test_proxy_context_window.py Loading commit data...
test_proxy_logprobs.py Loading commit data...
test_proxy_tool_calls_survive.py Loading commit data...
test_remote_code_allowlist.py Loading commit data...
test_remote_execution.py Loading commit data...
test_remote_gateway_gate.py Loading commit data...
test_remote_pinned_never_loads_locally.py Loading commit data...
test_runpod_adaptive_pod_width.py Loading commit data...
test_runpod_adopt_survivors.py Loading commit data...
test_runpod_capacity_cache.py Loading commit data...
test_runpod_card_memo.py Loading commit data...
test_runpod_client_pod_ceiling.py Loading commit data...
test_runpod_client_scale.py Loading commit data...
test_runpod_fleet_status.py Loading commit data...
test_runpod_grow_reason.py Loading commit data...
test_runpod_inflight_reclaim.py Loading commit data...
test_runpod_memory_bars.py Loading commit data...
test_runpod_mixed_fleet.py Loading commit data...
test_runpod_multi_worker.py Loading commit data...
test_runpod_no_duplicate_pods.py Loading commit data...
test_runpod_nonblocking_lease.py Loading commit data...
test_runpod_ocr_remotization.py Loading commit data...
test_runpod_per_pod_token.py Loading commit data...
test_runpod_placement.py Loading commit data...
test_runpod_pod_extra_args.py Loading commit data...
test_runpod_rate_limit_backoff.py Loading commit data...
test_runpod_reaper_grace.py Loading commit data...
test_runpod_refusal_is_not_death.py Loading commit data...
test_runpod_regional_volumes.py Loading commit data...
test_runpod_registry_heartbeat.py Loading commit data...
test_runpod_release_and_boot_cancel.py Loading commit data...
test_runpod_request_gpu_choice.py Loading commit data...
test_runpod_rest_fallback.py Loading commit data...
test_runpod_restart_orphans.py Loading commit data...
test_runpod_restart_reclaim.py Loading commit data...
test_runpod_scale_down.py Loading commit data...
test_runpod_scale_out.py Loading commit data...
test_runpod_schedule_region_spend.py Loading commit data...
test_runpod_status_never_hangs.py Loading commit data...
test_runpod_transient_api.py Loading commit data...
test_runpod_warm_floor_parallel.py Loading commit data...
test_runpod_warm_floor_rerent.py Loading commit data...
test_runpod_warm_floor_respects_max_pods.py Loading commit data...
test_runpod_warmup.py Loading commit data...
test_serving_load.py Loading commit data...
test_shared_pool_adapter_identity.py Loading commit data...
test_status_channel.py Loading commit data...
test_stream_error_is_not_silence.py Loading commit data...
test_studio_composed_surfaces.py Loading commit data...
test_surya_item_cap.py Loading commit data...
test_surya_loop_reported.py Loading commit data...
test_surya_retry_budget.py Loading commit data...
test_surya_runpod_fixes.py Loading commit data...
test_surya_thread_boundary.py Loading commit data...
test_system_reload_endpoint.py Loading commit data...
test_task_budget_and_teardown.py Loading commit data...
test_teach_carries_the_engine.py Loading commit data...
test_text_lora_to_pod.py Loading commit data...
test_thinking_reaches_the_client.py Loading commit data...
test_thread_pool_sized_from_env.py Loading commit data...
test_thread_pool_sizing.py Loading commit data...
test_tool_call_arguments_on_the_wire.py Loading commit data...
test_township_api_key.py Loading commit data...
test_township_clip_geometry.py Loading commit data...
test_township_longcat.py Loading commit data...
test_township_page_js.py Loading commit data...
test_township_templates.py Loading commit data...
test_township_video_dataset.py Loading commit data...
test_upgrade_launcher.py Loading commit data...
test_uploads_without_output_dir.py Loading commit data...
test_video_as_b64_scope.py Loading commit data...
test_video_geometry.py Loading commit data...
test_vllm_one_engine_per_card.py Loading commit data...
test_vllm_qwen_tool_parser_choice.py Loading commit data...
test_vllm_served_names_sections.py Loading commit data...
test_vllm_share_self_tuning.py Loading commit data...
test_vllm_speed_levers_per_model.py Loading commit data...
test_vllm_tool_calling.py Loading commit data...
test_vram_releasers.py Loading commit data...
test_weight_stores.py Loading commit data...
test_whisper_server_id_routing.py Loading commit data...
test_whisper_server_local_models.py Loading commit data...
test_worker_names_resolve.py Loading commit data...