feat: ship deterministic parser and lifecycle release

This commit is contained in:
inman
2026-08-28 17:13:58 +08:00
parent 208c434b31
commit 7b5d855b09
176 changed files with 20248 additions and 1362 deletions

View File

@@ -280,6 +280,37 @@
}
}
}
},
{
"if": {
"properties": {
"action": { "const": "confirmation_export" },
"data": {
"properties": {
"existing_refs": {
"properties": { "kind": { "const": "shared_plan" } },
"required": ["kind"]
}
},
"required": ["existing_refs"]
}
},
"required": ["action", "data"]
},
"then": {
"properties": {
"data": {
"required": ["confirmation"],
"not": { "required": ["export_types"] },
"properties": {
"confirmation": {
"required": ["type"],
"properties": { "type": { "const": "visitor-list" } }
}
}
}
}
}
}
],
"$defs": {
@@ -397,6 +428,16 @@
"DBL": { "type": "integer", "minimum": 1 }
}
},
"passengerLeaderContact": {
"type": "object",
"additionalProperties": false,
"required": ["sequence", "name", "phone"],
"properties": {
"sequence": { "type": "integer", "minimum": 1, "maximum": 5000 },
"name": { "type": "string", "minLength": 1, "maxLength": 200 },
"phone": { "type": "string", "minLength": 1, "maxLength": 200 }
}
},
"passengerList": {
"type": "object",
"additionalProperties": false,
@@ -405,7 +446,8 @@
"operation": { "enum": ["import", "full_replace"] },
"confirmed": { "type": "boolean" },
"row_count": { "type": "integer", "minimum": 1, "description": "用户本次提供的游客行数,不代表订单总人数。" },
"text": { "type": "string", "minLength": 1, "description": "一个或多个完整 13 列游客行;序号用于定位对应游客位。" }
"text": { "type": "string", "minLength": 1, "description": "一个或多个完整 13 列游客行;序号用于定位对应游客位。" },
"leader_contact": { "$ref": "#/$defs/passengerLeaderContact" }
},
"allOf": [
{

View File

@@ -3,7 +3,7 @@
"$id": "https://local.lwltapi/schemas/standard_system_operation.schema.json",
"title": "Standard LTJT System Operation",
"description": "Deterministic LTJT core-lifecycle operation contract. It accepts a complete set of recognized user-visible update fields; live ERP execution remains capability-tiered and only the browser adapter's verified subset may be written automatically.",
"$comment": "ltjt-lifecycle-v2.8-updating-wide-parse-2026-08: Agent input preserves all recognized business update targets. Ordinary lifecycle execution still requires ERP-enriched exact references; unvalidated update targets are retained for manual review and must not be written automatically.",
"$comment": "ltjt-lifecycle-v2.9-roster-leader-contact-2026-08: passenger_list.leader_contact may only mirror the unique canonical passenger row whose trimmed remark is exactly 领队. Ordinary lifecycle execution still requires ERP-enriched exact references; unvalidated update targets are retained for manual review and must not be written automatically.",
"type": "object",
"additionalProperties": false,
"required": ["action", "order_nature", "submit_mode", "data"],
@@ -825,7 +825,7 @@
"properties": {
"existing_refs": {
"required": ["kind"],
"properties": { "kind": { "enum": ["independent_order", "shared_child_order"] } }
"properties": { "kind": { "enum": ["independent_order", "shared_plan", "shared_child_order"] } }
},
"confirmation": {
"not": { "required": ["format"] }
@@ -906,6 +906,60 @@
}
}
}
},
{
"if": {
"properties": {
"action": { "const": "confirmation_export" },
"data": {
"properties": {
"existing_refs": {
"properties": { "kind": { "const": "shared_plan" } },
"required": ["kind"]
}
},
"required": ["existing_refs"]
}
},
"required": ["action", "data"]
},
"then": {
"properties": {
"data": {
"required": ["confirmation"],
"not": { "required": ["export_types"] },
"properties": {
"confirmation": {
"required": ["type"],
"properties": { "type": { "const": "visitor-list" } }
},
"existing_refs": {
"required": ["tid"],
"allOf": [
{
"anyOf": [
{ "required": ["identifier"] },
{ "required": ["parent_group_no"] },
{ "required": ["parent_plan_no"] },
{ "required": ["plan_no"] }
]
},
{
"not": {
"anyOf": [
{ "required": ["ddid"] },
{ "required": ["child_did"] },
{ "required": ["ltjt_ddid"] },
{ "required": ["ltjt_child_id"] }
]
}
}
]
}
}
}
}
}
}
],
"$defs": {
@@ -1268,6 +1322,16 @@
"text": { "type": "string" }
}
},
"passengerLeaderContact": {
"type": "object",
"additionalProperties": false,
"required": ["sequence", "name", "phone"],
"properties": {
"sequence": { "type": "integer", "minimum": 1, "maximum": 5000 },
"name": { "type": "string", "minLength": 1, "maxLength": 200 },
"phone": { "type": "string", "minLength": 1, "maxLength": 200 }
}
},
"passengerList": {
"type": "object",
"additionalProperties": false,
@@ -1298,6 +1362,7 @@
"items": { "type": "object" }
},
"text": { "type": "string", "description": "Explicit synthetic import text; the adapter never reads an unreferenced real file implicitly." },
"leader_contact": { "$ref": "#/$defs/passengerLeaderContact" },
"file_count": { "type": "integer", "minimum": 0 },
"file_refs": {
"type": "array",