== 自检落点(4 个路径,真源 + 镜像同一套 spec 断言)== - modules/world_sync/models/pbl_runtime_event.json - modules/world_sync/models/pbl_entity_state.json - apps/scense/pkgs/world_sync/models/pbl_runtime_event.json - apps/scense/pkgs/world_sync/models/pbl_entity_state.json == 真源 vs 镜像 sha256 一致性断言 == pbl_runtime_event: src=705f726f455c75327790435a8743c9798bf07bffa9be25180a79fbb677dddcc9 pbl_runtime_event: mir=705f726f455c75327790435a8743c9798bf07bffa9be25180a79fbb677dddcc9 pbl_entity_state: src=d485ac409749fa41ec1eb4bfe115b11ed3144187f4a9b3f8e233a967ab6af320 pbl_entity_state: mir=d485ac409749fa41ec1eb4bfe115b11ed3144187f4a9b3f8e233a967ab6af320 PASS [exists] modules/world_sync/models/pbl_runtime_event.json PASS [json-parse] modules/world_sync/models/pbl_runtime_event.json OK PASS [root-keys] modules/world_sync/models/pbl_runtime_event.json ⊆ summary/fields/indexes/codes -> ['codes', 'fields', 'indexes', 'summary'] PASS [summary-count] modules/world_sync/models/pbl_runtime_event.json 恰好 1 条 -> 1 PASS [summary-keys] modules/world_sync/models/pbl_runtime_event.json ⊆ ['catelog', 'comment', 'name', 'primary', 'title'] PASS [summary-name] modules/world_sync/models/pbl_runtime_event.json name==pbl_runtime_event -> pbl_runtime_event PASS [summary-title] modules/world_sync/models/pbl_runtime_event.json title 非空 PASS [summary-primary] modules/world_sync/models/pbl_runtime_event.json primary==['id'] (array) -> ['id'] PASS [summary-catelog] modules/world_sync/models/pbl_runtime_event.json catelog 合法 -> relation PASS [fields-count] modules/world_sync/models/pbl_runtime_event.json >=1 -> 12 PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#id -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#id length 为正整数 -> 32 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#id -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#event_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#event_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#event_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#event_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#event_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#event_id -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#tenant_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#tenant_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#tenant_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#tenant_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#tenant_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#tenant_id -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#world_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#world_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#world_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#world_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#world_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#world_id -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#session_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#session_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#session_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#session_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#session_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#session_id -> yes PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#entity_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#entity_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#entity_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#entity_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#entity_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#entity_id -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#event_type ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#event_type type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#event_type -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#event_type title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#event_type length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#event_type -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#payload ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#payload type 抽象 -> 'text' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#payload -> 'text' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#payload title 非空(DDL COMMENT 来源) PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#payload -> yes PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#causation_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#causation_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#causation_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#causation_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#causation_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#causation_id -> yes PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#source ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#source type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#source -> 'str' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#source title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_runtime_event.json#source length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#source -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#state_version ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#state_version type 抽象 -> 'int' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#state_version -> 'int' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#state_version title 非空(DDL COMMENT 来源) PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#state_version -> no PASS [field-keys] modules/world_sync/models/pbl_runtime_event.json#created_at ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_runtime_event.json#created_at type 抽象 -> 'datetime' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_runtime_event.json#created_at -> 'datetime' PASS [field-title] modules/world_sync/models/pbl_runtime_event.json#created_at title 非空(DDL COMMENT 来源) PASS [field-nullable] modules/world_sync/models/pbl_runtime_event.json#created_at -> no PASS [field-id] modules/world_sync/models/pbl_runtime_event.json 含 id 主键列 PASS [id-str32] modules/world_sync/models/pbl_runtime_event.json id type=str length=32 -> str/32 PASS [id-notnull] modules/world_sync/models/pbl_runtime_event.json id nullable=no PASS [field-unique] modules/world_sync/models/pbl_runtime_event.json 列名无重复 PASS [index-keys] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id -> unique PASS [index-idxfields-array] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id -> ['tenant_id', 'event_id'] PASS [index-cols-exist] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id 索引列都在 fields 中 -> ['tenant_id', 'event_id'] PASS [index-keys] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created -> unique PASS [index-idxfields-array] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created -> ['tenant_id', 'world_id', 'entity_id', 'state_version'] PASS [index-cols-exist] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'entity_id', 'state_version'] PASS [index-keys] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity -> index PASS [index-idxfields-array] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-cols-exist] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-keys] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created -> index PASS [index-idxfields-array] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created -> ['tenant_id', 'world_id', 'event_type', 'created_at'] PASS [index-cols-exist] modules/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'event_type', 'created_at'] PASS [index-keys] modules/world_sync/models/pbl_runtime_event.json#ix_re_created_at ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] modules/world_sync/models/pbl_runtime_event.json#ix_re_created_at -> index PASS [index-idxfields-array] modules/world_sync/models/pbl_runtime_event.json#ix_re_created_at -> ['created_at'] PASS [index-cols-exist] modules/world_sync/models/pbl_runtime_event.json#ix_re_created_at 索引列都在 fields 中 -> ['created_at'] PASS [index-unique-name] modules/world_sync/models/pbl_runtime_event.json 索引名无重复 PASS [tenant-first] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id 唯一索引 tenant_id 打头 -> ['tenant_id', 'event_id'] PASS [tenant-first] modules/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created 唯一索引 tenant_id 打头 -> ['tenant_id', 'world_id', 'entity_id', 'state_version'] PASS [cross-check-sql] modules/world_sync/models/pbl_runtime_event.json 覆盖 EVENT_COLUMNS 11 列 PASS [code-keys] modules/world_sync/models/pbl_runtime_event.json#event_type ⊆ ['cond', 'field', 'table', 'textfield', 'valuefield'] PASS [code-table-no-dot] modules/world_sync/models/pbl_runtime_event.json#event_type table=appcodes_kv PASS [code-cond-parentid] modules/world_sync/models/pbl_runtime_event.json#event_type cond=parentid='pbl_event_type' PASS [code-no-dup] modules/world_sync/models/pbl_runtime_event.json field=event_type 不重复 PASS [code-field-exists] modules/world_sync/models/pbl_runtime_event.json field=event_type 在 fields 中 PASS [no-dialect-types] modules/world_sync/models/pbl_runtime_event.json 无方言具体类型 PASS [exists] modules/world_sync/models/pbl_entity_state.json PASS [json-parse] modules/world_sync/models/pbl_entity_state.json OK PASS [root-keys] modules/world_sync/models/pbl_entity_state.json ⊆ summary/fields/indexes/codes -> ['codes', 'fields', 'indexes', 'summary'] PASS [summary-count] modules/world_sync/models/pbl_entity_state.json 恰好 1 条 -> 1 PASS [summary-keys] modules/world_sync/models/pbl_entity_state.json ⊆ ['catelog', 'comment', 'name', 'primary', 'title'] PASS [summary-name] modules/world_sync/models/pbl_entity_state.json name==pbl_entity_state -> pbl_entity_state PASS [summary-title] modules/world_sync/models/pbl_entity_state.json title 非空 PASS [summary-primary] modules/world_sync/models/pbl_entity_state.json primary==['id'] (array) -> ['id'] PASS [summary-catelog] modules/world_sync/models/pbl_entity_state.json catelog 合法 -> relation PASS [fields-count] modules/world_sync/models/pbl_entity_state.json >=1 -> 8 PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#id -> 'str' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_entity_state.json#id length 为正整数 -> 32 PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#id -> no PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#tenant_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#tenant_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#tenant_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#tenant_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_entity_state.json#tenant_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#tenant_id -> no PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#world_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#world_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#world_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#world_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_entity_state.json#world_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#world_id -> no PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#entity_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#entity_id type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#entity_id -> 'str' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#entity_id title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_entity_state.json#entity_id length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#entity_id -> no PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#state ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#state type 抽象 -> 'text' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#state -> 'text' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#state title 非空(DDL COMMENT 来源) PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#state -> no PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#state_version ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#state_version type 抽象 -> 'int' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#state_version -> 'int' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#state_version title 非空(DDL COMMENT 来源) PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#state_version -> no PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#updated_at ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#updated_at type 抽象 -> 'datetime' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#updated_at -> 'datetime' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#updated_at title 非空(DDL COMMENT 来源) PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#updated_at -> no PASS [field-keys] modules/world_sync/models/pbl_entity_state.json#updated_by_event ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] modules/world_sync/models/pbl_entity_state.json#updated_by_event type 抽象 -> 'str' PASS [type-lower-no-dialect] modules/world_sync/models/pbl_entity_state.json#updated_by_event -> 'str' PASS [field-title] modules/world_sync/models/pbl_entity_state.json#updated_by_event title 非空(DDL COMMENT 来源) PASS [field-length] modules/world_sync/models/pbl_entity_state.json#updated_by_event length 为正整数 -> 64 PASS [field-nullable] modules/world_sync/models/pbl_entity_state.json#updated_by_event -> yes PASS [field-id] modules/world_sync/models/pbl_entity_state.json 含 id 主键列 PASS [id-str32] modules/world_sync/models/pbl_entity_state.json id type=str length=32 -> str/32 PASS [id-notnull] modules/world_sync/models/pbl_entity_state.json id nullable=no PASS [field-unique] modules/world_sync/models/pbl_entity_state.json 列名无重复 PASS [index-keys] modules/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] modules/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity -> unique PASS [index-idxfields-array] modules/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-cols-exist] modules/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-keys] modules/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] modules/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated -> index PASS [index-idxfields-array] modules/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated -> ['tenant_id', 'world_id', 'updated_at'] PASS [index-cols-exist] modules/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'updated_at'] PASS [index-unique-name] modules/world_sync/models/pbl_entity_state.json 索引名无重复 PASS [tenant-first] modules/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity 唯一索引 tenant_id 打头 -> ['tenant_id', 'world_id', 'entity_id'] PASS [cross-check-sql] modules/world_sync/models/pbl_entity_state.json 覆盖 STATE_COLUMNS 7 列 PASS [no-dialect-types] modules/world_sync/models/pbl_entity_state.json 无方言具体类型 PASS [exists] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json PASS [json-parse] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json OK PASS [root-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json ⊆ summary/fields/indexes/codes -> ['codes', 'fields', 'indexes', 'summary'] PASS [summary-count] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json 恰好 1 条 -> 1 PASS [summary-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json ⊆ ['catelog', 'comment', 'name', 'primary', 'title'] PASS [summary-name] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json name==pbl_runtime_event -> pbl_runtime_event PASS [summary-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json title 非空 PASS [summary-primary] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json primary==['id'] (array) -> ['id'] PASS [summary-catelog] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json catelog 合法 -> relation PASS [fields-count] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json >=1 -> 12 PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#id length 为正整数 -> 32 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#tenant_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#tenant_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#tenant_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#tenant_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#tenant_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#tenant_id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#world_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#world_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#world_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#world_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#world_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#world_id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#session_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#session_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#session_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#session_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#session_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#session_id -> yes PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#entity_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#entity_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#entity_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#entity_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#entity_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#entity_id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#payload ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#payload type 抽象 -> 'text' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#payload -> 'text' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#payload title 非空(DDL COMMENT 来源) PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#payload -> yes PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#causation_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#causation_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#causation_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#causation_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#causation_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#causation_id -> yes PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#source ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#source type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#source -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#source title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#source length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#source -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#state_version ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#state_version type 抽象 -> 'int' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#state_version -> 'int' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#state_version title 非空(DDL COMMENT 来源) PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#state_version -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#created_at ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#created_at type 抽象 -> 'datetime' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#created_at -> 'datetime' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#created_at title 非空(DDL COMMENT 来源) PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#created_at -> no PASS [field-id] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json 含 id 主键列 PASS [id-str32] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json id type=str length=32 -> str/32 PASS [id-notnull] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json id nullable=no PASS [field-unique] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json 列名无重复 PASS [index-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id -> unique PASS [index-idxfields-array] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id -> ['tenant_id', 'event_id'] PASS [index-cols-exist] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id 索引列都在 fields 中 -> ['tenant_id', 'event_id'] PASS [index-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created -> unique PASS [index-idxfields-array] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created -> ['tenant_id', 'world_id', 'entity_id', 'state_version'] PASS [index-cols-exist] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'entity_id', 'state_version'] PASS [index-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity -> index PASS [index-idxfields-array] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-cols-exist] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_entity 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created -> index PASS [index-idxfields-array] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created -> ['tenant_id', 'world_id', 'event_type', 'created_at'] PASS [index-cols-exist] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_tenant_world_type_created 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'event_type', 'created_at'] PASS [index-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_created_at ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_created_at -> index PASS [index-idxfields-array] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_created_at -> ['created_at'] PASS [index-cols-exist] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#ix_re_created_at 索引列都在 fields 中 -> ['created_at'] PASS [index-unique-name] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json 索引名无重复 PASS [tenant-first] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_event_id 唯一索引 tenant_id 打头 -> ['tenant_id', 'event_id'] PASS [tenant-first] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#uk_re_tenant_world_entity_created 唯一索引 tenant_id 打头 -> ['tenant_id', 'world_id', 'entity_id', 'state_version'] PASS [cross-check-sql] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json 覆盖 EVENT_COLUMNS 11 列 PASS [code-keys] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type ⊆ ['cond', 'field', 'table', 'textfield', 'valuefield'] PASS [code-table-no-dot] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type table=appcodes_kv PASS [code-cond-parentid] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json#event_type cond=parentid='pbl_event_type' PASS [code-no-dup] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json field=event_type 不重复 PASS [code-field-exists] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json field=event_type 在 fields 中 PASS [no-dialect-types] apps/scense/pkgs/world_sync/models/pbl_runtime_event.json 无方言具体类型 PASS [exists] apps/scense/pkgs/world_sync/models/pbl_entity_state.json PASS [json-parse] apps/scense/pkgs/world_sync/models/pbl_entity_state.json OK PASS [root-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json ⊆ summary/fields/indexes/codes -> ['codes', 'fields', 'indexes', 'summary'] PASS [summary-count] apps/scense/pkgs/world_sync/models/pbl_entity_state.json 恰好 1 条 -> 1 PASS [summary-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json ⊆ ['catelog', 'comment', 'name', 'primary', 'title'] PASS [summary-name] apps/scense/pkgs/world_sync/models/pbl_entity_state.json name==pbl_entity_state -> pbl_entity_state PASS [summary-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json title 非空 PASS [summary-primary] apps/scense/pkgs/world_sync/models/pbl_entity_state.json primary==['id'] (array) -> ['id'] PASS [summary-catelog] apps/scense/pkgs/world_sync/models/pbl_entity_state.json catelog 合法 -> relation PASS [fields-count] apps/scense/pkgs/world_sync/models/pbl_entity_state.json >=1 -> 8 PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#id length 为正整数 -> 32 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#tenant_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#tenant_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#tenant_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#tenant_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#tenant_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#tenant_id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#world_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#world_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#world_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#world_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#world_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#world_id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#entity_id ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#entity_id type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#entity_id -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#entity_id title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#entity_id length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#entity_id -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state type 抽象 -> 'text' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state -> 'text' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state title 非空(DDL COMMENT 来源) PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state_version ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state_version type 抽象 -> 'int' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state_version -> 'int' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state_version title 非空(DDL COMMENT 来源) PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#state_version -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_at ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_at type 抽象 -> 'datetime' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_at -> 'datetime' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_at title 非空(DDL COMMENT 来源) PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_at -> no PASS [field-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_by_event ⊆ ['dec', 'default', 'length', 'name', 'nullable', 'title', 'type'] PASS [abstract-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_by_event type 抽象 -> 'str' PASS [type-lower-no-dialect] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_by_event -> 'str' PASS [field-title] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_by_event title 非空(DDL COMMENT 来源) PASS [field-length] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_by_event length 为正整数 -> 64 PASS [field-nullable] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#updated_by_event -> yes PASS [field-id] apps/scense/pkgs/world_sync/models/pbl_entity_state.json 含 id 主键列 PASS [id-str32] apps/scense/pkgs/world_sync/models/pbl_entity_state.json id type=str length=32 -> str/32 PASS [id-notnull] apps/scense/pkgs/world_sync/models/pbl_entity_state.json id nullable=no PASS [field-unique] apps/scense/pkgs/world_sync/models/pbl_entity_state.json 列名无重复 PASS [index-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity -> unique PASS [index-idxfields-array] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-cols-exist] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'entity_id'] PASS [index-keys] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated ⊆ ['idxfields', 'idxtype', 'name'] PASS [index-type] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated -> index PASS [index-idxfields-array] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated -> ['tenant_id', 'world_id', 'updated_at'] PASS [index-cols-exist] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#ix_es_tenant_world_updated 索引列都在 fields 中 -> ['tenant_id', 'world_id', 'updated_at'] PASS [index-unique-name] apps/scense/pkgs/world_sync/models/pbl_entity_state.json 索引名无重复 PASS [tenant-first] apps/scense/pkgs/world_sync/models/pbl_entity_state.json#uk_es_tenant_world_entity 唯一索引 tenant_id 打头 -> ['tenant_id', 'world_id', 'entity_id'] PASS [cross-check-sql] apps/scense/pkgs/world_sync/models/pbl_entity_state.json 覆盖 STATE_COLUMNS 7 列 PASS [no-dialect-types] apps/scense/pkgs/world_sync/models/pbl_entity_state.json 无方言具体类型 PASS [mirror-sha256-equal] pbl_runtime_event 真源与镜像字节级一致 -> True PASS [mirror-sha256-equal] pbl_entity_state 真源与镜像字节级一致 -> True 断言合计 370:PASS 370 / FAIL 0 RESULT: PASS