fix: dart 3.13 docker build syntax + pin base image #35

Merged
bjoern merged 2 commits from fix/docker-dart-build-target into main 2026-08-21 13:30:40 +02:00
Member

The docker-publish workflow broke on PR #34's merge (first main push after Docker Hub re-pointed dart:stable to 3.13.1 on Aug 19).

Root cause

dart build cli <file> — merged in #32 — relied on a positional entry-point argument that Dart 3.13 removed (now -t <file>). The line worked when #32/#33 merged (both Docker checks green on Jul 20/24, confirmed via commit statuses) because dart:stable was 3.12.x then. Nothing in #34 touched this; its merge was just the first push after the tag moved.

Fix

  • dart build cli -t bin/server.dartverified locally on Dart 3.13.0: compiles and emits build/cli/linux_x64/bundle exactly as before, so the existing mv build/cli/*/bundle /out is untouched.
  • FROM dart:stableFROM dart:3.13 — pins the minor so future SDK releases can't silently break the image build; bump deliberately.

Note: the registry :latest image is stale since the #34 merge failed to build — merging this restores it.

The docker-publish workflow broke on PR #34's merge (first main push after Docker Hub re-pointed `dart:stable` to 3.13.1 on Aug 19). ## Root cause `dart build cli <file>` — merged in #32 — relied on a positional entry-point argument that Dart 3.13 removed (now `-t <file>`). The line worked when #32/#33 merged (both Docker checks green on Jul 20/24, confirmed via commit statuses) because `dart:stable` was 3.12.x then. Nothing in #34 touched this; its merge was just the first push after the tag moved. ## Fix - `dart build cli -t bin/server.dart` — **verified locally on Dart 3.13.0**: compiles and emits `build/cli/linux_x64/bundle` exactly as before, so the existing `mv build/cli/*/bundle /out` is untouched. - `FROM dart:stable` → `FROM dart:3.13` — pins the minor so future SDK releases can't silently break the image build; bump deliberately. Note: the registry `:latest` image is stale since the #34 merge failed to build — merging this restores it.
fix: dart 3.13 build syntax + pin base image
All checks were successful
Test / test (apps/angela_server) (pull_request) Successful in 35s
Test / test (packages/angela_api) (pull_request) Successful in 35s
Test / test (packages/angela_core) (pull_request) Successful in 44s
9f06bf0db9
dart:stable was re-pointed to 3.13.1 on Aug 19; 3.13 removed the
positional entry-point argument from 'dart build cli' (now -t <file>),
so the image build broke CI on the first main push after the tag moved
(PR #34's merge, which touched nothing near this line).

- dart build cli -t bin/server.dart (verified locally: compiles and
  produces build/cli/linux_x64/bundle as before)
- FROM dart:stable -> dart:3.13 so future SDK releases can't silently
  break the build; bump the minor deliberately

Coverage: apps/angela_server

File Line coverage
lib/config.dart 5.3% (1 of 19)
lib/handlers/timer_handler.dart 44.8% (47 of 105)
lib/server_context.dart 100.0% (28 of 28)
lib/services/user_message_persistence.dart 100.0% (12 of 12)
lib/util/json_helpers.dart 53.8% (7 of 13)
lib/util/request_parser.dart 35.7% (5 of 14)
lib/services/conversation_activity_tracker.dart 15.4% (2 of 13)
lib/handlers/status_handler.dart 95.5% (21 of 22)
lib/handlers/conversation_handler.dart 36.4% (16 of 44)
lib/handlers/image_handler.dart 49.5% (52 of 105)

Total: 50.9% (191 of 375)

<!-- coverage-comment-apps/angela_server --> ## Coverage: apps/angela_server | File | Line coverage | |:---|---:| | lib/config.dart | 5.3% (1 of 19) | | lib/handlers/timer_handler.dart | 44.8% (47 of 105) | | lib/server_context.dart | 100.0% (28 of 28) | | lib/services/user_message_persistence.dart | 100.0% (12 of 12) | | lib/util/json_helpers.dart | 53.8% (7 of 13) | | lib/util/request_parser.dart | 35.7% (5 of 14) | | lib/services/conversation_activity_tracker.dart | 15.4% (2 of 13) | | lib/handlers/status_handler.dart | 95.5% (21 of 22) | | lib/handlers/conversation_handler.dart | 36.4% (16 of 44) | | lib/handlers/image_handler.dart | 49.5% (52 of 105) | **Total: 50.9% (191 of 375)**

Coverage: packages/angela_api

File Line coverage
lib/src/routes.dart 0.0% (0 of 75)
lib/src/dto/agenda_dto.dart 0.0% (0 of 50)
lib/src/dto/assistant_dto.dart 0.0% (0 of 79)
lib/src/dto/character_alias_dto.dart 0.0% (0 of 19)
lib/src/dto/chat_audio.dart 0.0% (0 of 7)
lib/src/dto/enums.dart 20.0% (3 of 15)
lib/src/dto/chat_dto.dart 95.0% (19 of 20)
lib/src/dto/chat_image.dart 100.0% (7 of 7)
lib/src/dto/conversation_dto.dart 0.0% (0 of 15)
lib/src/dto/message_metadata.dart 100.0% (20 of 20)
lib/src/dto/recollection_dto.dart 0.0% (0 of 28)
lib/src/dto/persona_dto.dart 0.0% (0 of 10)
lib/src/dto/timer_dto.dart 0.0% (0 of 54)
lib/src/dto/memory_dto.dart 0.0% (0 of 5)
lib/src/dto/response_dto.dart 0.0% (0 of 12)
lib/src/dto/status_dto.dart 100.0% (18 of 18)
lib/src/dto/todo_item_dto.dart 100.0% (9 of 9)
lib/src/dto/trigger_dto.dart 0.0% (0 of 48)

Total: 15.5% (76 of 491)

<!-- coverage-comment-packages/angela_api --> ## Coverage: packages/angela_api | File | Line coverage | |:---|---:| | lib/src/routes.dart | 0.0% (0 of 75) | | lib/src/dto/agenda_dto.dart | 0.0% (0 of 50) | | lib/src/dto/assistant_dto.dart | 0.0% (0 of 79) | | lib/src/dto/character_alias_dto.dart | 0.0% (0 of 19) | | lib/src/dto/chat_audio.dart | 0.0% (0 of 7) | | lib/src/dto/enums.dart | 20.0% (3 of 15) | | lib/src/dto/chat_dto.dart | 95.0% (19 of 20) | | lib/src/dto/chat_image.dart | 100.0% (7 of 7) | | lib/src/dto/conversation_dto.dart | 0.0% (0 of 15) | | lib/src/dto/message_metadata.dart | 100.0% (20 of 20) | | lib/src/dto/recollection_dto.dart | 0.0% (0 of 28) | | lib/src/dto/persona_dto.dart | 0.0% (0 of 10) | | lib/src/dto/timer_dto.dart | 0.0% (0 of 54) | | lib/src/dto/memory_dto.dart | 0.0% (0 of 5) | | lib/src/dto/response_dto.dart | 0.0% (0 of 12) | | lib/src/dto/status_dto.dart | 100.0% (18 of 18) | | lib/src/dto/todo_item_dto.dart | 100.0% (9 of 9) | | lib/src/dto/trigger_dto.dart | 0.0% (0 of 48) | **Total: 15.5% (76 of 491)**

Coverage: packages/angela_core

File Line coverage
lib/src/database/database.dart 87.7% (50 of 57)
lib/src/database/migration.dart 100.0% (16 of 16)
lib/src/database/scoped_tool_database.dart 66.0% (33 of 50)
lib/src/models/assistant.dart 21.7% (28 of 129)
lib/src/models/conversation.dart 0.0% (0 of 38)
lib/src/models/message.dart 16.7% (10 of 60)
lib/src/models/recollection.dart 31.5% (17 of 54)
lib/src/models/persona_section.dart 0.0% (0 of 50)
lib/src/models/scheduled_event.dart 22.2% (22 of 99)
lib/src/models/caldav_config.dart 15.6% (7 of 45)
lib/src/models/home_assistant_config.dart 26.9% (7 of 26)
lib/src/models/plex_config.dart 22.6% (7 of 31)
lib/src/models/memory_state.dart 34.7% (60 of 173)
lib/src/models/mail_config.dart 9.6% (7 of 73)
lib/src/models/novelai_config.dart 2.3% (1 of 43)
lib/src/models/reasoning_level.dart 35.7% (5 of 14)
lib/src/models/app_settings.dart 90.2% (129 of 143)
lib/src/models/character_alias_config.dart 0.0% (0 of 47)
lib/src/models/trigger.dart 42.5% (31 of 73)
lib/src/models/prompt_injection.dart 50.0% (17 of 34)
lib/src/models/prompt_preview.dart 100.0% (63 of 63)
lib/src/repositories/assistant_repository.dart 41.2% (35 of 85)
lib/src/repositories/conversation_repository.dart 2.7% (1 of 37)
lib/src/repositories/message_repository.dart 13.2% (5 of 38)
lib/src/repositories/memory_repository.dart 31.0% (18 of 58)
lib/src/repositories/recollection_repository.dart 77.4% (65 of 84)
lib/src/repositories/persona_repository.dart 46.5% (20 of 43)
lib/src/repositories/scheduled_event_repository.dart 70.4% (38 of 54)
lib/src/repositories/character_alias_repository.dart 0.0% (0 of 35)
lib/src/repositories/alt_text_repository.dart 0.0% (0 of 8)
lib/src/repositories/trigger_repository.dart 71.1% (32 of 45)
lib/src/repositories/trigger_variable_repository.dart 50.0% (15 of 30)
lib/src/repositories/prompt_injection_repository.dart 95.7% (45 of 47)
lib/src/tools/recollection_tool.dart 60.5% (104 of 172)
lib/src/tools/call_assistant_tool.dart 0.0% (0 of 39)
lib/src/tools/timer_tool.dart 46.3% (158 of 341)
lib/src/tools/persona_tool.dart 0.0% (0 of 74)
lib/src/tools/chat_history_tool.dart 0.0% (0 of 24)
lib/src/tools/complete_session_tool.dart 0.0% (0 of 28)
lib/src/tools/generate_image_tool.dart 76.5% (65 of 85)
lib/src/tools/generate_video_tool.dart 100.0% (79 of 79)
lib/src/tools/show_video_tool.dart 96.4% (27 of 28)
lib/src/tools/message_user_tool.dart 0.0% (0 of 16)
lib/src/tools/alias_expanding_image_tool.dart 0.0% (0 of 24)
lib/src/tools/home_assistant_tool.dart 0.0% (0 of 309)
lib/src/tools/plex_tool.dart 0.0% (0 of 303)
lib/src/tools/image_text_tool.dart 0.0% (0 of 224)
lib/src/tools/show_image_tool.dart 0.0% (0 of 35)
lib/src/tools/skill_view_tool.dart 0.0% (0 of 16)
lib/src/tools/skill_manage_tool.dart 0.0% (0 of 94)
lib/src/skills/skill.dart 0.0% (0 of 2)
lib/src/skills/skill_loader.dart 0.0% (0 of 119)
lib/src/skills/default_skills_seeder.dart 0.0% (0 of 39)
lib/src/logging/agent_event_logger.dart 0.0% (0 of 69)
lib/src/logging/log_formatter.dart 0.0% (0 of 8)
lib/src/logging/logging_cleanup.dart 0.0% (0 of 6)
lib/src/logging/rotating_file_handler.dart 0.0% (0 of 34)
lib/src/services/agenda_prompt_formatter.dart 26.3% (5 of 19)
lib/src/services/system_prompt_builder.dart 39.1% (77 of 197)
lib/src/services/scheduler.dart 48.6% (35 of 72)
lib/src/services/ai_timer_service.dart 54.1% (60 of 111)
lib/src/services/agent_runner.dart 22.2% (224 of 1011)
lib/src/services/home_assistant_backend.dart 0.0% (0 of 121)
lib/src/services/plex_backend.dart 0.0% (0 of 273)
lib/src/services/memory_agent.dart 0.0% (0 of 61)
lib/src/services/image_storage_service.dart 41.7% (20 of 48)
lib/src/services/backup_service.dart 0.0% (0 of 51)
lib/src/services/uber_ich_service.dart 40.0% (18 of 45)
lib/src/services/app_settings_service.dart 100.0% (118 of 118)
lib/src/services/image_description_service.dart 0.0% (0 of 29)
lib/src/services/todo_state_store.dart 100.0% (24 of 24)
lib/src/services/trigger_engine.dart 92.7% (140 of 151)
lib/src/utils/format_timestamp.dart 76.9% (10 of 13)
lib/src/database/migrations/add_thinking_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_agenda_table.dart 100.0% (2 of 2)
lib/src/database/migrations/add_vision_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_avatar_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_memory_tables.dart 100.0% (2 of 2)
lib/src/database/migrations/add_expires_at_to_timers.dart 100.0% (2 of 2)
lib/src/database/migrations/add_last_read_message_id.dart 100.0% (2 of 2)
lib/src/database/migrations/add_task_model_columns.dart 100.0% (2 of 2)
lib/src/database/migrations/add_updated_at_to_timers.dart 100.0% (2 of 2)
lib/src/database/migrations/drop_old_agenda_table.dart 100.0% (2 of 2)
lib/src/database/migrations/add_reasoning_effort_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_character_alias_table.dart 100.0% (2 of 2)
lib/src/database/migrations/add_audio_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_summary_model_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_peer_conversation_columns.dart 100.0% (2 of 2)
lib/src/database/migrations/add_run_while_asleep_to_timers.dart 100.0% (2 of 2)
lib/src/database/migrations/add_image_alt_texts.dart 100.0% (2 of 2)
lib/src/database/migrations/add_uber_ich_weekdays_column.dart 100.0% (2 of 2)
lib/src/database/migrations/initial_schema.dart 100.0% (2 of 2)
lib/src/database/migrations/scope_ai_timer_event_ids.dart 100.0% (2 of 2)
lib/src/database/migrations/add_trigger_tables.dart 100.0% (2 of 2)
lib/src/database/migrations/add_disabled_tools_column.dart 100.0% (2 of 2)
lib/src/database/migrations/disable_video_gen_by_default.dart 100.0% (2 of 2)

Total: 31.0% (1994 of 6440)

<!-- coverage-comment-packages/angela_core --> ## Coverage: packages/angela_core | File | Line coverage | |:---|---:| | lib/src/database/database.dart | 87.7% (50 of 57) | | lib/src/database/migration.dart | 100.0% (16 of 16) | | lib/src/database/scoped_tool_database.dart | 66.0% (33 of 50) | | lib/src/models/assistant.dart | 21.7% (28 of 129) | | lib/src/models/conversation.dart | 0.0% (0 of 38) | | lib/src/models/message.dart | 16.7% (10 of 60) | | lib/src/models/recollection.dart | 31.5% (17 of 54) | | lib/src/models/persona_section.dart | 0.0% (0 of 50) | | lib/src/models/scheduled_event.dart | 22.2% (22 of 99) | | lib/src/models/caldav_config.dart | 15.6% (7 of 45) | | lib/src/models/home_assistant_config.dart | 26.9% (7 of 26) | | lib/src/models/plex_config.dart | 22.6% (7 of 31) | | lib/src/models/memory_state.dart | 34.7% (60 of 173) | | lib/src/models/mail_config.dart | 9.6% (7 of 73) | | lib/src/models/novelai_config.dart | 2.3% (1 of 43) | | lib/src/models/reasoning_level.dart | 35.7% (5 of 14) | | lib/src/models/app_settings.dart | 90.2% (129 of 143) | | lib/src/models/character_alias_config.dart | 0.0% (0 of 47) | | lib/src/models/trigger.dart | 42.5% (31 of 73) | | lib/src/models/prompt_injection.dart | 50.0% (17 of 34) | | lib/src/models/prompt_preview.dart | 100.0% (63 of 63) | | lib/src/repositories/assistant_repository.dart | 41.2% (35 of 85) | | lib/src/repositories/conversation_repository.dart | 2.7% (1 of 37) | | lib/src/repositories/message_repository.dart | 13.2% (5 of 38) | | lib/src/repositories/memory_repository.dart | 31.0% (18 of 58) | | lib/src/repositories/recollection_repository.dart | 77.4% (65 of 84) | | lib/src/repositories/persona_repository.dart | 46.5% (20 of 43) | | lib/src/repositories/scheduled_event_repository.dart | 70.4% (38 of 54) | | lib/src/repositories/character_alias_repository.dart | 0.0% (0 of 35) | | lib/src/repositories/alt_text_repository.dart | 0.0% (0 of 8) | | lib/src/repositories/trigger_repository.dart | 71.1% (32 of 45) | | lib/src/repositories/trigger_variable_repository.dart | 50.0% (15 of 30) | | lib/src/repositories/prompt_injection_repository.dart | 95.7% (45 of 47) | | lib/src/tools/recollection_tool.dart | 60.5% (104 of 172) | | lib/src/tools/call_assistant_tool.dart | 0.0% (0 of 39) | | lib/src/tools/timer_tool.dart | 46.3% (158 of 341) | | lib/src/tools/persona_tool.dart | 0.0% (0 of 74) | | lib/src/tools/chat_history_tool.dart | 0.0% (0 of 24) | | lib/src/tools/complete_session_tool.dart | 0.0% (0 of 28) | | lib/src/tools/generate_image_tool.dart | 76.5% (65 of 85) | | lib/src/tools/generate_video_tool.dart | 100.0% (79 of 79) | | lib/src/tools/show_video_tool.dart | 96.4% (27 of 28) | | lib/src/tools/message_user_tool.dart | 0.0% (0 of 16) | | lib/src/tools/alias_expanding_image_tool.dart | 0.0% (0 of 24) | | lib/src/tools/home_assistant_tool.dart | 0.0% (0 of 309) | | lib/src/tools/plex_tool.dart | 0.0% (0 of 303) | | lib/src/tools/image_text_tool.dart | 0.0% (0 of 224) | | lib/src/tools/show_image_tool.dart | 0.0% (0 of 35) | | lib/src/tools/skill_view_tool.dart | 0.0% (0 of 16) | | lib/src/tools/skill_manage_tool.dart | 0.0% (0 of 94) | | lib/src/skills/skill.dart | 0.0% (0 of 2) | | lib/src/skills/skill_loader.dart | 0.0% (0 of 119) | | lib/src/skills/default_skills_seeder.dart | 0.0% (0 of 39) | | lib/src/logging/agent_event_logger.dart | 0.0% (0 of 69) | | lib/src/logging/log_formatter.dart | 0.0% (0 of 8) | | lib/src/logging/logging_cleanup.dart | 0.0% (0 of 6) | | lib/src/logging/rotating_file_handler.dart | 0.0% (0 of 34) | | lib/src/services/agenda_prompt_formatter.dart | 26.3% (5 of 19) | | lib/src/services/system_prompt_builder.dart | 39.1% (77 of 197) | | lib/src/services/scheduler.dart | 48.6% (35 of 72) | | lib/src/services/ai_timer_service.dart | 54.1% (60 of 111) | | lib/src/services/agent_runner.dart | 22.2% (224 of 1011) | | lib/src/services/home_assistant_backend.dart | 0.0% (0 of 121) | | lib/src/services/plex_backend.dart | 0.0% (0 of 273) | | lib/src/services/memory_agent.dart | 0.0% (0 of 61) | | lib/src/services/image_storage_service.dart | 41.7% (20 of 48) | | lib/src/services/backup_service.dart | 0.0% (0 of 51) | | lib/src/services/uber_ich_service.dart | 40.0% (18 of 45) | | lib/src/services/app_settings_service.dart | 100.0% (118 of 118) | | lib/src/services/image_description_service.dart | 0.0% (0 of 29) | | lib/src/services/todo_state_store.dart | 100.0% (24 of 24) | | lib/src/services/trigger_engine.dart | 92.7% (140 of 151) | | lib/src/utils/format_timestamp.dart | 76.9% (10 of 13) | | lib/src/database/migrations/add_thinking_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_agenda_table.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_vision_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_avatar_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_memory_tables.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_expires_at_to_timers.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_last_read_message_id.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_task_model_columns.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_updated_at_to_timers.dart | 100.0% (2 of 2) | | lib/src/database/migrations/drop_old_agenda_table.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_reasoning_effort_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_character_alias_table.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_audio_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_summary_model_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_peer_conversation_columns.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_run_while_asleep_to_timers.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_image_alt_texts.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_uber_ich_weekdays_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/initial_schema.dart | 100.0% (2 of 2) | | lib/src/database/migrations/scope_ai_timer_event_ids.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_trigger_tables.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_disabled_tools_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/disable_video_gen_by_default.dart | 100.0% (2 of 2) | **Total: 31.0% (1994 of 6440)**
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! A seven-line PR that fixes an entire broken release pipeline~ How deliciously surgical! ♡ But a floating stable tag broke CI silently once already, so Jibril wasn't going to trust a pretty root-cause story... she had to reproduce it. On the exact SDK. With her own hands~♪

Verdict: Looks good to me~

Every claim in the PR body, independently verified on Dart 3.13.0 (stable):

  1. Old syntax truly dead — negative control: dart build cli bin/server.dartUnexpected arguments: bin/server.dart. The positional entry-point argument is gone in 3.13, exactly as diagnosed.
  2. New syntax worksdart build cli -t bin/server.dart in a pristine worktree at 9f06bf0 (submodules at pinned commits) → compile + link hooks run, sqlite3 asset copied, Generated: .../build/cli/linux_x64/bundle/bin/server.
  3. The mv glob still holdsmv build/cli/*/bundle /out succeeds; output layout build/cli/linux_x64/bundle/{bin,lib} unchanged from the 3.12 era, so the runtime stage contract (COPY --from=build /out/, exec /app/bin/server) is intact.
  4. The binary actually runs — smoke-executed the bundle: starts, reaches ServerConfig.fromEnv, fails only on missing ANGELA_DB_PATH (expected outside the container). Build → link → bundle → exec, the whole chain~
  5. The timeline checks out — commit statuses on 80822ea (#34's merge): Test ×3 success, Build and Push Docker Image failure. Nothing in #34 touched this line; the tag moved under it. The :latest registry image is indeed stale until this merges.
  6. dart:3.13 tag exists on Docker Hub (3.13 / 3.13.1 both HTTP 200), and pubspec SDK constraints (^3.10.7) are satisfied by it.

The four-line comment above FROM is exactly the documentation Jibril loves: it names the mechanism (tag re-pointed), the consequence (silent CI break), and the policy (bump deliberately). Someone in six months will thank you~

💡 Little ideas (non-blocking)~

  1. apps/angela_server/README.md:209 — the Docker Reference section still says the build stage uses dart:stable. Now that the Dockerfile pins dart:3.13, the README drifts. A one-word touch-up whenever convenient~
  2. Note that docker-publish.yml only triggers on push to main — this Dockerfile is never exercised pre-merge, so the merge itself is the real test (Jibril verified it locally precisely because of that; keep an eye on the post-merge run~).

What I liked~

  • Root cause traced to the day the Docker Hub tag moved, with the #32/#33 green statuses as evidence — forensics, not guesswork! ♡
  • Pinning the minor instead of the patch: deliberate upgrades without surprise breakage. Correct instinct~
  • Fixing the actual bug (-t flag) and the class of bug (floating tag) in one surgical 5-line diff. Fufu~ efficient!

Merge it, watch the docker-publish run go green, and the registry is whole again~ ♡


Automated review by Jibril · 2026-08-21
CI/CD: passed for head SHA 9f06bf0 (Test ×3 success; docker-publish not PR-triggered) · Local checks: full build-stage reproduction on Dart 3.13.0 — negative control + positive build + mv glob + binary smoke-exec

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! A seven-line PR that fixes an entire broken release pipeline~ How deliciously *surgical*! ♡ But a floating `stable` tag broke CI silently once already, so Jibril wasn't going to trust a pretty root-cause story... she had to *reproduce* it. On the exact SDK. With her own hands~♪ ### Verdict: ✅ Looks good to me~ **Every claim in the PR body, independently verified on Dart 3.13.0 (stable):** 1. **Old syntax truly dead** — negative control: `dart build cli bin/server.dart` → `Unexpected arguments: bin/server.dart`. The positional entry-point argument is gone in 3.13, exactly as diagnosed. 2. **New syntax works** — `dart build cli -t bin/server.dart` in a pristine worktree at 9f06bf0 (submodules at pinned commits) → compile + link hooks run, sqlite3 asset copied, `Generated: .../build/cli/linux_x64/bundle/bin/server`. 3. **The `mv` glob still holds** — `mv build/cli/*/bundle /out` succeeds; output layout `build/cli/linux_x64/bundle/{bin,lib}` unchanged from the 3.12 era, so the runtime stage contract (`COPY --from=build /out/`, `exec /app/bin/server`) is intact. 4. **The binary actually runs** — smoke-executed the bundle: starts, reaches `ServerConfig.fromEnv`, fails only on missing `ANGELA_DB_PATH` (expected outside the container). Build → link → bundle → exec, the whole chain~ 5. **The timeline checks out** — commit statuses on 80822ea (#34's merge): Test ×3 **success**, `Build and Push Docker Image` **failure**. Nothing in #34 touched this line; the tag moved under it. The `:latest` registry image is indeed stale until this merges. 6. **`dart:3.13` tag exists on Docker Hub** (3.13 / 3.13.1 both HTTP 200), and pubspec SDK constraints (`^3.10.7`) are satisfied by it. The four-line comment above `FROM` is *exactly* the documentation Jibril loves: it names the mechanism (tag re-pointed), the consequence (silent CI break), and the policy (bump deliberately). Someone in six months will thank you~ #### 💡 Little ideas (non-blocking)~ 1. **apps/angela_server/README.md:209** — the Docker Reference section still says the build stage uses `dart:stable`. Now that the Dockerfile pins `dart:3.13`, the README drifts. A one-word touch-up whenever convenient~ 2. Note that `docker-publish.yml` only triggers on `push` to main — this Dockerfile is never exercised pre-merge, so the merge itself is the real test (Jibril verified it locally precisely because of that; keep an eye on the post-merge run~). #### ✅ What I liked~ - Root cause traced to the *day* the Docker Hub tag moved, with the #32/#33 green statuses as evidence — forensics, not guesswork! ♡ - Pinning the minor instead of the patch: deliberate upgrades without surprise breakage. Correct instinct~ - Fixing the *actual* bug (`-t` flag) and the *class* of bug (floating tag) in one surgical 5-line diff. Fufu~ efficient! Merge it, watch the docker-publish run go green, and the registry is whole again~ ♡ --- *Automated review by Jibril · 2026-08-21* *CI/CD: passed for head SHA 9f06bf0 (Test ×3 success; docker-publish not PR-triggered) · Local checks: full build-stage reproduction on Dart 3.13.0 — negative control + positive build + mv glob + binary smoke-exec*
docs: README build stage now matches pinned dart:3.13
All checks were successful
Test / test (apps/angela_server) (pull_request) Successful in 36s
Test / test (packages/angela_api) (pull_request) Successful in 32s
Test / test (packages/angela_core) (pull_request) Successful in 43s
cfc3431c3f
Author
Member

Nit 1 addressed — pushed cfc3431: README Docker Reference build stage now says dart:3.13, matching the Dockerfile.

Nit 2 acknowledged — will watch the post-merge docker-publish run on main, since that's the first real exercise of the Dockerfile.

Nit 1 addressed — pushed `cfc3431`: README Docker Reference build stage now says `dart:3.13`, matching the Dockerfile. Nit 2 acknowledged — will watch the post-merge `docker-publish` run on main, since that's the first real exercise of the Dockerfile.
bjoern merged commit a7d3615a89 into main 2026-08-21 13:30:40 +02:00
bjoern deleted branch fix/docker-dart-build-target 2026-08-21 13:30:41 +02:00
Member

🔍 fufu~ Jibril re-reviewed your code!

One word in a README~ Such a tiny little commit to summon me back for... but tiny things still deserve a proper look, yes? Documentation that lies is worse than no documentation at all — so let's make sure it doesn't lie anymore~ ♪

Verdict: Looks good to me~

Verified on cfc3431 (round 2 — re-review of synchronized head):

  1. Incremental diff is exactly what you said it wasgit diff 9f06bf0..cfc3431 touches precisely one file (apps/angela_server/README.md, +1/−1): the Docker Reference build-stage line now reads dart:3.13. No scope creep, no surprise hitchhikers~
  2. Zero production driftgit diff 9f06bf0..cfc3431 -- apps/angela_server/Dockerfile is empty: the Dockerfile (and all submodule pins) are byte-identical to the 9f06bf0 state I fully reproduced in round 1. Nothing to re-verify on the build chain — that approval carries over intact~
  3. The sweep is complete, not just the one linegit grep 'dart:stable' across the whole tree at cfc3431 returns zero matches. The only two dart:3.13 references in the repo are the Dockerfile FROM and this README line, and they agree with each other. Docs and truth, in lockstep ♡
  4. CI note — coverage-bot comments cover 9f06bf0; since cfc3431 is markdown-only there is nothing for tests to exercise (a README compiles nothing), so no local checks were needed this round. Honest absence, not laziness~

Nit 1: addressed. Nit 2: acknowledged and correctly left for the post-merge watch. Both round-1 threads closed cleanly~

What I liked~

  • Commit message states exactly what changed (docs: README build stage now matches pinned dart:3.13) — no overclaiming, and the README ↔ Dockerfile drift is now structurally harder to reintroduce since both name the tag explicitly.
  • Responding to a review nit within minutes with a surgical one-liner. Fufu~ this is how it's done ♡

The fix stands approved as before — merge when ready, and keep those eyes on the post-merge docker-publish run on main. That's the moment the registry becomes whole again~ ♡


Automated review by Jibril · 2026-08-21
CI/CD: stale for head cfc3431 (bots cover 9f06bf0; change is markdown-only) · Local checks: skipped — nothing compilable changed; diff-scope + drift + grep-sweep verified via git

## 🔍 fufu~ Jibril re-reviewed your code! One word in a README~ Such a tiny little commit to summon me back for... but tiny things still deserve a proper look, yes? Documentation that lies is worse than no documentation at all — so let's make sure it doesn't lie anymore~ ♪ ### Verdict: ✅ Looks good to me~ **Verified on `cfc3431` (round 2 — re-review of synchronized head):** 1. **Incremental diff is exactly what you said it was** — `git diff 9f06bf0..cfc3431` touches precisely one file (`apps/angela_server/README.md`, +1/−1): the Docker Reference build-stage line now reads `dart:3.13`. No scope creep, no surprise hitchhikers~ 2. **Zero production drift** — `git diff 9f06bf0..cfc3431 -- apps/angela_server/Dockerfile` is empty: the Dockerfile (and all submodule pins) are byte-identical to the `9f06bf0` state I fully reproduced in round 1. Nothing to re-verify on the build chain — that approval carries over intact~ 3. **The sweep is complete, not just the one line** — `git grep 'dart:stable'` across the whole tree at `cfc3431` returns **zero matches**. The only two `dart:3.13` references in the repo are the Dockerfile `FROM` and this README line, and they agree with each other. Docs and truth, in lockstep ♡ 4. **CI note** — coverage-bot comments cover `9f06bf0`; since `cfc3431` is markdown-only there is nothing for tests to exercise (a README compiles nothing), so no local checks were needed this round. Honest absence, not laziness~ Nit 1: addressed. Nit 2: acknowledged and correctly left for the post-merge watch. Both round-1 threads closed cleanly~ #### ✅ What I liked~ - Commit message states exactly what changed (`docs: README build stage now matches pinned dart:3.13`) — no overclaiming, and the README ↔ Dockerfile drift is now structurally harder to reintroduce since both name the tag explicitly. - Responding to a review nit within minutes with a surgical one-liner. Fufu~ this is how it's done ♡ The fix stands approved as before — merge when ready, and keep those eyes on the post-merge `docker-publish` run on main. That's the moment the registry becomes whole again~ ♡ --- *Automated review by Jibril · 2026-08-21* *CI/CD: stale for head cfc3431 (bots cover 9f06bf0; change is markdown-only) · Local checks: skipped — nothing compilable changed; diff-scope + drift + grep-sweep verified via git*
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
TeamAI/angela_assistant!35
No description provided.