merge: sync feature/N7Web into feature/N7Web-Tech

# Conflicts:
#	apps/web-console/service-worker.js
#	src/cognitive_agent/application/mode_profile.py
#	src/cognitive_agent/application/mode_scene_catalog.py
#	src/cognitive_agent/application/seat_service.py
#	tests/e2e/test_seat_web_api.py
#	tests/unit/test_assistant_frontend_contract.py
#	tests/unit/test_vue_frontend_contract.py
This commit is contained in:
Miayui
2026-09-17 11:16:48 +08:00
31 changed files with 2925 additions and 127 deletions
+14 -1
View File
@@ -40,7 +40,20 @@ def validate_semantics(
for index, deferred in enumerate(parsed.get("deferred_requests", [])):
domain = str(deferred.get("domain"))
capability = str(deferred.get("capability"))
if domain not in detected_domains or not capability.startswith(f"{domain}."):
# An N7-synchronised scene may use a vehicle-owned capability namespace
# that intentionally differs from its routing domain (for example
# ``domain=local_vehicle`` with ``capability=local_scene.seat_preset``).
# It is not executed by this validator's local backend: the original
# action is forwarded unchanged to ``transto_n7/ctl``. Keep the strict
# namespace check for every ordinary deferred request, while allowing
# this explicitly marked transfer backend to retain the source contract.
n7_transfer = (
deferred.get("execution_backend") == "n7_vehicle_transfer"
and deferred.get("rejection_code") == "PC_CAPABILITY_UNAVAILABLE"
)
if domain not in detected_domains or (
not n7_transfer and not capability.startswith(f"{domain}.")
):
issues.append(
{
"severity": "error",