Merge refactor/api-v3-blueprint-split into feat/tools-mqtt-bridge-pixlet-editor-on-split

PR #554 was branched from #553 before its CodeRabbit-fix commit
(4e91cf1) landed, leaving GitHub reporting mergeable_state: dirty and
the branch missing eight fixes to shared api_v3 package code —
including a guaranteed ModuleNotFoundError on display.py's on-demand
restart path, a credential-redaction gap, and an unguarded manifest
read-modify-write race.

Resolved the two import-list conflicts (backup.py, starlark.py) by
unioning both branches' additions; the rest of the merge was clean.
Verified the merged tree keeps every usage of the fix branch's new
helpers (_starlark_manifest_lock, _coerce_to_bool) intact, the URL map
fixture still lists all 117 routes, and the full suite passes with only
the two pre-existing tzdata-related failures (unrelated, present on
origin/main too).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwNEnaWDTzDbFE2M7MDjaq
This commit is contained in:
Claude
2026-09-11 06:33:48 +00:00
15 changed files with 705 additions and 112 deletions
+8 -8
View File
@@ -84,7 +84,7 @@ def save_schedule_config():
start_time = data.get('start_time', '07:00')
end_time = data.get('end_time', '23:00')
# Validate _pkg.time formats
# Validate time formats
is_valid, error_msg = _validate_time_format(start_time)
if not is_valid:
return error_response(
@@ -148,12 +148,12 @@ def save_schedule_config():
else:
end_time = '23:00'
# Validate _pkg.time formats
# Validate time formats
is_valid, error_msg = _validate_time_format(start_time)
if not is_valid:
return error_response(
ErrorCode.VALIDATION_ERROR,
f"Invalid start _pkg.time for {day}: {error_msg}",
f"Invalid start time for {day}: {error_msg}",
status_code=400
)
@@ -161,7 +161,7 @@ def save_schedule_config():
if not is_valid:
return error_response(
ErrorCode.VALIDATION_ERROR,
f"Invalid end _pkg.time for {day}: {error_msg}",
f"Invalid end time for {day}: {error_msg}",
status_code=400
)
@@ -313,7 +313,7 @@ def save_dim_schedule_config():
start_time = data.get('start_time', '20:00')
end_time = data.get('end_time', '07:00')
# Validate _pkg.time formats
# Validate time formats
is_valid, error_msg = _validate_time_format(start_time)
if not is_valid:
return error_response(
@@ -365,12 +365,12 @@ def save_dim_schedule_config():
start_time = data.get(start_key) or '20:00'
end_time = data.get(end_key) or '07:00'
# Validate _pkg.time formats
# Validate time formats
is_valid, error_msg = _validate_time_format(start_time)
if not is_valid:
return error_response(
ErrorCode.VALIDATION_ERROR,
f"Invalid start _pkg.time for {day}: {error_msg}",
f"Invalid start time for {day}: {error_msg}",
status_code=400
)
@@ -378,7 +378,7 @@ def save_dim_schedule_config():
if not is_valid:
return error_response(
ErrorCode.VALIDATION_ERROR,
f"Invalid end _pkg.time for {day}: {error_msg}",
f"Invalid end time for {day}: {error_msg}",
status_code=400
)