workspace root: /d/pipeline/workspaces/0/sdlc_general --- A1~A5: 4 个落点全部执行同一套 spec 断言 --- == reference: /d/pipeline/workspaces/0/sdlc_general/modules/world_sync/models/pbl_runtime_event.json ok A1 json-is-object ok A2 root-keys == {key,schema} (got ['key', 'schema']) ok A2 key == "schema" ok A2 schema-is-object ok A3 no self-carried struct: summary ok A3 no self-carried struct: fields ok A3 no self-carried struct: indexes ok A3 no self-carried struct: codes ok A4 reference keys subset whitelist (extra=[]) ok A5 table non-empty ok A5 authority_module == pbl_runtime_ext ok A5 authority_path non-empty ok A5 authority file exists: modules/pbl_runtime_ext/models/pbl_runtime_event.json == reference: /d/pipeline/workspaces/0/sdlc_general/apps/scense/pkgs/world_sync/models/pbl_runtime_event.json ok A1 json-is-object ok A2 root-keys == {key,schema} (got ['key', 'schema']) ok A2 key == "schema" ok A2 schema-is-object ok A3 no self-carried struct: summary ok A3 no self-carried struct: fields ok A3 no self-carried struct: indexes ok A3 no self-carried struct: codes ok A4 reference keys subset whitelist (extra=[]) ok A5 table non-empty ok A5 authority_module == pbl_runtime_ext ok A5 authority_path non-empty ok A5 authority file exists: modules/pbl_runtime_ext/models/pbl_runtime_event.json == reference: /d/pipeline/workspaces/0/sdlc_general/modules/world_sync/models/pbl_entity_state.json ok A1 json-is-object ok A2 root-keys == {key,schema} (got ['key', 'schema']) ok A2 key == "schema" ok A2 schema-is-object ok A3 no self-carried struct: summary ok A3 no self-carried struct: fields ok A3 no self-carried struct: indexes ok A3 no self-carried struct: codes ok A4 reference keys subset whitelist (extra=[]) ok A5 table non-empty ok A5 authority_module == pbl_runtime_ext ok A5 authority_path non-empty ok A5 authority file exists: modules/pbl_runtime_ext/models/pbl_entity_state.json == reference: /d/pipeline/workspaces/0/sdlc_general/apps/scense/pkgs/world_sync/models/pbl_entity_state.json ok A1 json-is-object ok A2 root-keys == {key,schema} (got ['key', 'schema']) ok A2 key == "schema" ok A2 schema-is-object ok A3 no self-carried struct: summary ok A3 no self-carried struct: fields ok A3 no self-carried struct: indexes ok A3 no self-carried struct: codes ok A4 reference keys subset whitelist (extra=[]) ok A5 table non-empty ok A5 authority_module == pbl_runtime_ext ok A5 authority_path non-empty ok A5 authority file exists: modules/pbl_runtime_ext/models/pbl_entity_state.json --- A7: 真源与镜像 sha256 两两相同 --- pbl_runtime_event.json src=58b09abf9982d154554522ce41f9c1f964170b02e3266819714f69f2c1ac9c0e dst=58b09abf9982d154554522ce41f9c1f964170b02e3266819714f69f2c1ac9c0e ok A7 sha256 equal: pbl_runtime_event.json pbl_entity_state.json src=e8561399150b818918a55f41c6fefd0a7a0b01048768a2a4ab7567004a947014 dst=e8561399150b818918a55f41c6fefd0a7a0b01048768a2a4ab7567004a947014 ok A7 sha256 equal: pbl_entity_state.json --- A6: 权威真源(pbl_runtime_ext)上游体检,只登记不判定 --- == authority(upstream audit): /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/models/pbl_runtime_event.json ok A6 root-is-object ok A6 root-keys subset of four-section (got ['codes', 'fields', 'indexes', 'summary']) ok A6 summary has exactly one record (got 1) DEFECT A6 summary keys subset whitelist (got ['append_only', 'charset', 'collate', 'comment', 'ddl_source', 'engine', 'guards', 'module', 'name', 'partition', 'primary', 'tenant_scoped', 'title', 'write_paths']) ok A6 summary.name non-empty ok A6 summary.primary is non-empty array ok A6 fields non-empty DEFECT A6[id] field keys subset whitelist (got ['auto_increment', 'comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) ok A6[id] abstract type ('long') ok A6[id] nullable in yes|no DEFECT A6[tenant_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[tenant_id] abstract type ('str') ok A6[tenant_id] positive int length ok A6[tenant_id] nullable in yes|no DEFECT A6[event_uid] field keys subset whitelist (got ['comment', 'ddl_type', 'length', 'name', 'nullable', 'title', 'type']) ok A6[event_uid] abstract type ('str') ok A6[event_uid] positive int length ok A6[event_uid] nullable in yes|no DEFECT A6[event_code] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[event_code] abstract type ('str') ok A6[event_code] positive int length ok A6[event_code] nullable in yes|no DEFECT A6[idem_key] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[idem_key] abstract type ('str') ok A6[idem_key] positive int length ok A6[idem_key] nullable in yes|no DEFECT A6[world_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[world_id] abstract type ('long') ok A6[world_id] nullable in yes|no DEFECT A6[scene_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[scene_id] abstract type ('long') ok A6[scene_id] nullable in yes|no DEFECT A6[session_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[session_id] abstract type ('long') ok A6[session_id] nullable in yes|no DEFECT A6[entity_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[entity_id] abstract type ('str') ok A6[entity_id] positive int length ok A6[entity_id] nullable in yes|no DEFECT A6[actor_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[actor_id] abstract type ('str') ok A6[actor_id] positive int length ok A6[actor_id] nullable in yes|no DEFECT A6[event_type] field keys subset whitelist (got ['comment', 'ddl_type', 'length', 'name', 'nullable', 'title', 'type']) ok A6[event_type] abstract type ('str') ok A6[event_type] positive int length ok A6[event_type] nullable in yes|no DEFECT A6[payload] field keys subset whitelist (got ['comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) ok A6[payload] abstract type ('text') ok A6[payload] nullable in yes|no DEFECT A6[payload_json] field keys subset whitelist (got ['comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) ok A6[payload_json] abstract type ('text') ok A6[payload_json] nullable in yes|no DEFECT A6[causation_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[causation_id] abstract type ('str') ok A6[causation_id] positive int length ok A6[causation_id] nullable in yes|no DEFECT A6[seq] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[seq] abstract type ('long') ok A6[seq] nullable in yes|no DEFECT A6[seq_no] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[seq_no] abstract type ('long') ok A6[seq_no] nullable in yes|no DEFECT A6[source] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[source] abstract type ('str') ok A6[source] positive int length ok A6[source] nullable in yes|no DEFECT A6[state] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[state] abstract type ('str') ok A6[state] positive int length ok A6[state] nullable in yes|no DEFECT A6[state_version] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[state_version] abstract type ('long') ok A6[state_version] nullable in yes|no DEFECT A6[tx_group] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) ok A6[tx_group] abstract type ('str') ok A6[tx_group] positive int length ok A6[tx_group] nullable in yes|no DEFECT A6[broadcast] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[broadcast] abstract type ('short') ok A6[broadcast] nullable in yes|no DEFECT A6[created_by] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[created_by] abstract type ('long') ok A6[created_by] nullable in yes|no DEFECT A6[created_at] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[created_at] abstract type ('datetime') ok A6[created_at] nullable in yes|no DEFECT A6[updated_at] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) ok A6[updated_at] abstract type ('datetime') ok A6[updated_at] nullable in yes|no DEFECT A6[occurred_at] field keys subset whitelist (got ['comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) ok A6[occurred_at] abstract type ('datetime') ok A6[occurred_at] nullable in yes|no DEFECT A6[uk_event_uid] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[uk_event_uid] idxfields non-empty array ok A6[uk_event_uid] idxtype unique|index ok A6[uk_event_uid] idxfield exists in fields: tenant_id ok A6[uk_event_uid] idxfield exists in fields: event_uid ok A6[uk_event_uid] idxfield exists in fields: created_at DEFECT A6[uk_tenant_idem] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[uk_tenant_idem] idxfields non-empty array ok A6[uk_tenant_idem] idxtype unique|index ok A6[uk_tenant_idem] idxfield exists in fields: tenant_id ok A6[uk_tenant_idem] idxfield exists in fields: idem_key ok A6[uk_tenant_idem] idxfield exists in fields: created_at DEFECT A6[ix_scene_created] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[ix_scene_created] idxfields non-empty array ok A6[ix_scene_created] idxtype unique|index ok A6[ix_scene_created] idxfield exists in fields: scene_id ok A6[ix_scene_created] idxfield exists in fields: created_at DEFECT A6[ix_tenant_session_seq] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[ix_tenant_session_seq] idxfields non-empty array ok A6[ix_tenant_session_seq] idxtype unique|index ok A6[ix_tenant_session_seq] idxfield exists in fields: tenant_id ok A6[ix_tenant_session_seq] idxfield exists in fields: session_id ok A6[ix_tenant_session_seq] idxfield exists in fields: seq DEFECT A6[ix_tenant_session_seqno] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[ix_tenant_session_seqno] idxfields non-empty array ok A6[ix_tenant_session_seqno] idxtype unique|index ok A6[ix_tenant_session_seqno] idxfield exists in fields: tenant_id ok A6[ix_tenant_session_seqno] idxfield exists in fields: session_id ok A6[ix_tenant_session_seqno] idxfield exists in fields: seq_no DEFECT A6[ix_tenant_world_type] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[ix_tenant_world_type] idxfields non-empty array ok A6[ix_tenant_world_type] idxtype unique|index ok A6[ix_tenant_world_type] idxfield exists in fields: tenant_id ok A6[ix_tenant_world_type] idxfield exists in fields: world_id ok A6[ix_tenant_world_type] idxfield exists in fields: event_type DEFECT A6[ix_tx_group] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[ix_tx_group] idxfields non-empty array ok A6[ix_tx_group] idxtype unique|index ok A6[ix_tx_group] idxfield exists in fields: tx_group DEFECT A6[ix_created_at] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) ok A6[ix_created_at] idxfields non-empty array ok A6[ix_created_at] idxtype unique|index ok A6[ix_created_at] idxfield exists in fields: created_at DEFECT A6 code keys subset whitelist (got ['comment', 'cond', 'field', 'table', 'textfield', 'valuefield']) ok A6 appcodes_kv cond uses parentid= ok A6 codes.table has no dot notation == authority(upstream audit): /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/models/pbl_entity_state.json ok A6 root-is-object ok A6 root-keys subset of four-section (got ['codes', 'fields', 'indexes', 'summary']) ok A6 summary has exactly one record (got 1) DEFECT A6 summary keys subset whitelist (got ['charset', 'comment', 'engine', 'module', 'name', 'tenant_scoped']) ok A6 summary.name non-empty DEFECT A6 summary.primary is non-empty array ok A6 fields non-empty DEFECT A6[tenant_id] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) ok A6[tenant_id] abstract type ('str') ok A6[tenant_id] positive int length ok A6[tenant_id] nullable in yes|no DEFECT A6[id] field keys subset whitelist (got ['auto_increment', 'comment', 'length', 'name', 'null', 'type', 'unsigned']) ok A6[id] abstract type ('int') ok A6[id] nullable in yes|no DEFECT A6[session_id] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) DEFECT A6[session_id] abstract type ('bigint') ok A6[session_id] nullable in yes|no DEFECT A6[entity_id] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) ok A6[entity_id] abstract type ('str') ok A6[entity_id] positive int length ok A6[entity_id] nullable in yes|no DEFECT A6[state_json] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) DEFECT A6[state_json] abstract type ('json') ok A6[state_json] nullable in yes|no DEFECT A6[state_version] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) DEFECT A6[state_version] abstract type ('bigint') ok A6[state_version] nullable in yes|no DEFECT A6[checksum] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) ok A6[checksum] abstract type ('str') ok A6[checksum] positive int length ok A6[checksum] nullable in yes|no DEFECT A6[updated_by] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) ok A6[updated_by] abstract type ('str') ok A6[updated_by] positive int length ok A6[updated_by] nullable in yes|no DEFECT A6[created_at] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) ok A6[created_at] abstract type ('datetime') ok A6[created_at] nullable in yes|no DEFECT A6[updated_at] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) ok A6[updated_at] abstract type ('datetime') ok A6[updated_at] nullable in yes|no DEFECT A6[uk_es] index keys subset whitelist (got ['fields', 'name', 'unique']) DEFECT A6[uk_es] idxfields non-empty array DEFECT A6[uk_es] idxtype unique|index DEFECT A6[PRIMARY] index keys subset whitelist (got ['fields', 'name', 'unique']) DEFECT A6[PRIMARY] idxfields non-empty array DEFECT A6[PRIMARY] idxtype unique|index judged assertions executed: 54 upstream audit checks executed: 186 UPSTREAM DEFECTS (56) -> 已登记,需冒泡 agent.pm / pbl_runtime_ext owner: * A6 summary keys subset whitelist (got ['append_only', 'charset', 'collate', 'comment', 'ddl_source', 'engine', 'guards', 'module', 'name', 'partition', 'primary', 'tenant_scoped', 'title', 'write_paths']) * A6[id] field keys subset whitelist (got ['auto_increment', 'comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) * A6[tenant_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[event_uid] field keys subset whitelist (got ['comment', 'ddl_type', 'length', 'name', 'nullable', 'title', 'type']) * A6[event_code] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[idem_key] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[world_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[scene_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[session_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[entity_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[actor_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[event_type] field keys subset whitelist (got ['comment', 'ddl_type', 'length', 'name', 'nullable', 'title', 'type']) * A6[payload] field keys subset whitelist (got ['comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) * A6[payload_json] field keys subset whitelist (got ['comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) * A6[causation_id] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[seq] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[seq_no] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[source] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[state] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[state_version] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[tx_group] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'length', 'name', 'nullable', 'title', 'type']) * A6[broadcast] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[created_by] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[created_at] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[updated_at] field keys subset whitelist (got ['comment', 'ddl_type', 'default', 'name', 'nullable', 'title', 'type']) * A6[occurred_at] field keys subset whitelist (got ['comment', 'ddl_type', 'name', 'nullable', 'title', 'type']) * A6[uk_event_uid] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6[uk_tenant_idem] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6[ix_scene_created] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6[ix_tenant_session_seq] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6[ix_tenant_session_seqno] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6[ix_tenant_world_type] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6[ix_tx_group] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6[ix_created_at] index keys subset whitelist (got ['comment', 'idxfields', 'idxtype', 'name']) * A6 code keys subset whitelist (got ['comment', 'cond', 'field', 'table', 'textfield', 'valuefield']) * A6 summary keys subset whitelist (got ['charset', 'comment', 'engine', 'module', 'name', 'tenant_scoped']) * A6 summary.primary is non-empty array * A6[tenant_id] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) * A6[id] field keys subset whitelist (got ['auto_increment', 'comment', 'length', 'name', 'null', 'type', 'unsigned']) * A6[session_id] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) * A6[session_id] abstract type ('bigint') * A6[entity_id] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) * A6[state_json] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) * A6[state_json] abstract type ('json') * A6[state_version] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) * A6[state_version] abstract type ('bigint') * A6[checksum] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) * A6[updated_by] field keys subset whitelist (got ['comment', 'length', 'name', 'null', 'type']) * A6[created_at] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) * A6[updated_at] field keys subset whitelist (got ['comment', 'name', 'null', 'type']) * A6[uk_es] index keys subset whitelist (got ['fields', 'name', 'unique']) * A6[uk_es] idxfields non-empty array * A6[uk_es] idxtype unique|index * A6[PRIMARY] index keys subset whitelist (got ['fields', 'name', 'unique']) * A6[PRIMARY] idxfields non-empty array * A6[PRIMARY] idxtype unique|index RESULT: PASS