TypeBridge 2.0.2 — security maintenance and expanded 2.1 notice¶
This 2.0.2 maintenance release publishes the expanded removal inventory approved in #189. This is a new maintainer decision: the original 2.0.0 inventory explicitly retained the wider handwritten declaration layers. Neither 2.0.0 nor 2.0.1 provided this expanded notice. Their historical release notes are not rewritten.
This release also patches the audited Rust dependency graph: PyO3 0.29.2, pythonize 0.29.0, crossbeam-epoch 0.9.20, h2 0.4.16, rustls-webpki 0.103.13, anyhow 1.0.103, rand 0.8.6, and chacha20 0.10.2. Both maintained lockfiles are checked for vulnerabilities, unsoundness, and yanked packages in CI and release acceptance. The required TypeDB transport dependency rustls-pemfile 2.2.0 retains its informational unmaintained advisory, RUSTSEC-2025-0134. The Python binding retains its GIL requirement and abi3-py312 baseline.
No API is removed in 2.0.2. Existing handwritten applications, provider bands, warning behavior, and archival recovery keep their 2.0.x contracts. There is no new handwritten-authoring warning class, code, runtime notice, or compiler warning. Generated imports, installation, hydration and direct/remote use gain no warning route. Per-scope irreversible migration adoption remains unchanged.
The entries below schedule removals for 2.1.0, not this maintenance release.
Replacement runtime names describe the 2.1 generated-only contract; this notice
does not backport that implementation or claim it is already published.
Split-YAML plus type-bridge schema generate is the replacement authoring
journey. The corresponding generated application operations must have parity
before handwritten routes are removed. No catch-all authorizes other removals.
Safe downstream pins¶
- Python:
type-bridge>=2,<2.1; the facade pins its matching native core. - Node:
"@type-bridge/node": ">=2 <2.1". - Rust: keep the generated package's exact release dependency and Cargo.lock.
For this release, use
type-bridge = "=2.0.2"; a bare"2.0.2"Cargo requirement permits 2.1. Use a committed lockfile with--locked, and keep every directly declared first-party SDK dependency on the matching 2.0.x release. The 2.0.1-and-later SDK resolves from crates.io, not a floating Git branch. Band-7/8 compatibility crates retain their independent exact versions.
Reading the inventory¶
The tables below reproduce the approved exact inventory. A “2.0.x disposition” cell identifying a call or declaration describes the affected route, not a new warning or removal in 2.0.2. The final retention section controls mixed-purpose query and archival dependencies. No other surface acquires a removal schedule.
Exact Public Inventory¶
Remove in 2.1.0 — existing #189 inventory¶
| Public identity | 2.0.x disposition | 2.1 disposition | Replacement / retained dependency |
|---|---|---|---|
type_bridge_core.TypeSchema |
Existing scheduled notice | Remove export and wrapper | Split-YAML workspace parsing; retain private/archive parser consumers only. |
type_bridge_core_lib::schema::TypeSchema |
Existing scheduled notice | Remove public export; rename/private retained parser responsibility where needed | Canonical declared-schema contracts. |
type_bridge.SchemaInfo, type_bridge.migration.SchemaInfo, type_bridge_orm::SchemaInfo |
Existing scheduled notice | Remove | Split-YAML workspace declarations. |
type_bridge.SchemaManager, type_bridge.migration.SchemaManager, type_bridge_orm::SchemaManager |
Existing scheduled notice | Remove | Canonical migration/workspace commands and generated projections. |
type_bridge.Role, type_bridge.models.Role as fused Role[T] authoring |
Existing scheduled notice | Remove | Generated relates() / plays() projections. |
type_bridge.generator.generate_models(..., format="toml") and its .toml suffix auto-routing |
Existing TOML warning | Remove the two direct TOML authoring routes | Split-YAML plus type-bridge schema generate; retain type_bridge_core.toml_to_typeql. The whole programmatic generator is separately named in the expanded inventory below. |
| TypeDB 3.8/3.10 active provider support and band-7 packages | Existing connection notice | Remove features, dependencies, packages, tests, artifacts | Bands 8/9 for 3.11/3.12. |
New root NNNN_*.py and sibling JSON migration authoring |
Existing legacy-writer notice/fence | Remove writer and active-authority routes | Canonical V2 make/plan/apply/verify/adopt; retain readers/bridge. |
Exact band-7 dependency/artifact identities¶
- Remove workspace packages
type-bridge-typedb-driver-b73.8.1 andtype-bridge-typedb-protocol-b73.7.0 and their exact directoriestype-bridge-core/vendor/typedb-driver-b7andtype-bridge-core/vendor/typedb-protocol-b7. - Remove Cargo feature
band7fromtype-bridge-typedb-runtime,type-bridge-orm, generated Rust client cratetype-bridge, andtype-bridge-server; remove it from their defaults and from ORMintegration-tests. - Remove hardwired
band7dependency activation fromtype-bridge-nodeandtype-bridge-migration. - Remove the
type-bridge-typedb-runtimeoptional dependencytype-bridge-typedb-driver-b7, band-7 driver/protocol dispatch, fallback, constants, feature-gated tests, and the 3.8/3.10 support-window branches. - Change Python optional extra
typedb-driver>=3.8,<3.13and external-driver option dispatch to the retained 3.11/3.12 contract; remove band-7 notices and active 3.8/3.10 cells without changing the retained unsupported-version diagnostic contract. - Remove 3.8/3.10/band-7 cells and artifact expectations from
.github/workflows/{ci,release}.yml,scripts/ci/validate_fresh_typedb_runtime_package.sh, active release-identity validation, new native notices, new SBOM/provenance expectations, and support-matrix docs. Retain immutable v2.0 recovery manifests/notices and the validator lanes that prove those historical artifacts exactly.
Remove in 2.1.0 — expanded Python handwritten authoring¶
| Public identity | Current consumers to migrate | 2.0.x disposition | Generated replacement |
|---|---|---|---|
type_bridge.TypeDBType, type_bridge.models.TypeDBType, type_bridge.models.base.TypeDBType |
model subclasses, V1 CRUD/query fixtures | subclass/registration metaclass path | generated ModelBase is package-private codegen runtime, not a public SDK declaration base |
type_bridge.Entity, type_bridge.models.Entity, type_bridge.models.entity.Entity |
model subclasses, CRUD/query fixtures | subclass initialization | generated entity classes |
type_bridge.Relation, type_bridge.models.Relation, type_bridge.models.relation.Relation |
model subclasses, CRUD/query fixtures | subclass initialization | generated relation classes |
type_bridge.Attribute, type_bridge.attribute.Attribute, type_bridge.attribute.base.Attribute |
handwritten attributes | attribute subclass initialization | generated attribute classes |
type_bridge.String, type_bridge.attribute.String, type_bridge.attribute.string.String; type_bridge.Integer, type_bridge.attribute.Integer, type_bridge.attribute.integer.Integer; type_bridge.Double, type_bridge.attribute.Double, type_bridge.attribute.double.Double; type_bridge.Boolean, type_bridge.attribute.Boolean, type_bridge.attribute.boolean.Boolean; type_bridge.Date, type_bridge.attribute.Date, type_bridge.attribute.date.Date; type_bridge.DateTime, type_bridge.attribute.DateTime, type_bridge.attribute.datetime.DateTime; type_bridge.DateTimeTZ, type_bridge.attribute.DateTimeTZ, type_bridge.attribute.datetimetz.DateTimeTZ; type_bridge.Decimal, type_bridge.attribute.Decimal, type_bridge.attribute.decimal.Decimal; type_bridge.Duration, type_bridge.attribute.Duration, type_bridge.attribute.duration.Duration |
handwritten attributes | attribute subclass initialization | generated scalar attribute classes |
type_bridge.AttributeFlags, type_bridge.Flag, type_bridge.Key, type_bridge.Unique, type_bridge.Ordered, type_bridge.Distinct, type_bridge.Doc, type_bridge.Meta, type_bridge.Card, type_bridge.TypeFlags, type_bridge.TypeNameCase; the matching type_bridge.attribute and type_bridge.attribute.flags identities |
handwritten type/field/role annotations | annotation/flag application | Split-YAML annotations; generated descriptors/tokens |
type_bridge.fields.FieldDescriptor, type_bridge.fields.FieldRef, type_bridge.fields.NumericFieldRef, type_bridge.fields.StringFieldRef, type_bridge.fields.RolePlayerFieldRef, type_bridge.fields.RolePlayerNumericFieldRef, type_bridge.fields.RolePlayerStringFieldRef; their defining type_bridge.fields.base / type_bridge.fields.role identities |
handwritten descriptor/query declarations | descriptor binding | generated field/role tokens plus V2 query facades |
type_bridge.models.FieldInfo, type_bridge.models.MatchClauseInfo, type_bridge.models.ModelAttrInfo, type_bridge.models.WriteQueryInfo; their defining type_bridge.models.utils identities |
handwritten model internals | model declaration construction | generated model metadata (not public authoring API) |
type_bridge.ModelRegistry, type_bridge.models.registry.ModelRegistry, type_bridge.models.schema_scanner.SchemaScanner, type_bridge.migration.ModelRegistry, type_bridge.migration.registry.ModelRegistry |
registry/scanner schema discovery | registry/scanner construction | workspace manifest plus generated projection |
type_bridge.TypeDBManager, type_bridge.crud.TypeDBManager, type_bridge.crud.typedb_manager.TypeDBManager, type_bridge.crud.rust_manager.RustTypeDBManager, and type_bridge.crud.strategies.{ModelStrategy,EntityStrategy,RelationStrategy} |
handwritten model CRUD | manager construction for handwritten model class | generated model .manager() / direct and remote generated clients. Retained V1 TypeDBQuery / GroupByQuery aliases keep only the private execution dependency required by their separately unscheduled contract. |
type_bridge.typed.QuerySession.var, exact, subtypes, and reachable when passed handwritten TypeDBType / Relation classes and type_bridge.fields references; the corresponding RemoteQuerySession delegates |
current model-oriented V2 query facade | handwritten descriptor closure and model-constructor hydration | projection-owned generated query session over exact generated model/field/role tokens; retain the model-oriented Query V2 behavior and low-level type_bridge.query_v2 |
type_bridge.migration.Migration, type_bridge.migration.MigrationDependency, type_bridge.migration.MigrationGenerator, type_bridge.migration.AuthoredMigration, type_bridge.migration.author_migration, type_bridge.migration.operations, type_bridge.migration.ref, and root alias type_bridge.migration_ops; type_bridge.migration.operations.{Operation,ModifyTypeAnnotations,ModifyRoleAnnotations,AddAttribute,RemoveAttribute,AddEntity,RemoveEntity,AddOwnership,RemoveOwnership,ModifyOwnership,AddRelation,RemoveRelation,AddRole,RemoveRole,AddRolePlayer,RemoveRolePlayer,RunTypeQL,RunPython,RenameAttribute,CopyAttribute}; type_bridge.migration.ref.{EntityRef,RelationRef,AttributeRef,entity,relation,attribute} |
legacy root Python migration authoring | migration creation/loading writer choke point | canonical V2 migration CLI/workspace; retain read-only loader, checksum, ledger import and frontier bridge |
type_bridge.generator.{generate_models,parse_tql_schema,ParsedSchema,BaseClassConfig,CompositeEntityConfig,CompositeFieldConfig,DTOConfig,EntityFieldOverride,FieldOverride,FieldSyncConfig,ValidatorConfig} and python -m type_bridge.generator |
old programmatic TypeQL/TOML-to-model and DTO generation lane | direct Python API/module invocation | type-bridge schema generate from a canonical Split-YAML workspace |
type_bridge.BreakingChangeAnalyzer, type_bridge.ChangeCategory, type_bridge.RolePlayerChange; type_bridge.migration.{BreakingChangeAnalyzer,ChangeCategory,ClassifiedChange,EntityChanges,RelationChanges,AttributeFlagChange,RolePlayerChange,RoleCardinalityChange,SchemaDiff} and their defining type_bridge.migration.breaking / type_bridge.migration.diff identities |
arbitrary handwritten-schema comparison and breaking-change classification | schema-diff authoring | canonical V2 migration planning; retain any comparison engine needed privately by canonical plans and archive verification |
Remove in 2.1.0 — Python native authoring bindings¶
These identities are public because type_bridge_core.__init__ re-exports all
non-private PyO3 registrations. Removing only the Python facade would leave a
second public authoring route through the native wheel.
| Public identity | Current consumers to migrate | 2.1 disposition | Retained responsibility |
|---|---|---|---|
type_bridge_core.TypeSchema |
old parser/validation/generator tests and type_bridge.generator.parser |
remove the PyO3 class and stub identity | keep the Rust parser private to canonical workspace generation, compatibility projection, and frozen archive tests |
type_bridge_core.render_models_json, type_bridge_core.generated_declared_descriptors_json |
old Python programmatic generator and released-input parity tests | remove both direct TypeQL-to-package/snapshot binding functions | keep the Rust schema-compat functions behind canonical workspace generation and compatibility fixtures |
type_bridge_core.generate_define_block, type_bridge_core.compute_schema_diff, type_bridge_core.classify_schema_diff, type_bridge_core.schema_diff_is_breaking |
handwritten SchemaInfo / SchemaManager and legacy migration authoring |
remove the public PyO3 functions | keep any lowering/diff implementation needed privately by canonical V2 migrations and archival verification |
type_bridge_core.PyDescriptorRegistry, type_bridge_core.PyDynamicEntityManager, type_bridge_core.PyDynamicRelationManager, type_bridge_core.CrudQueryBuilder, type_bridge_core.build_has_lookup_query |
handwritten Python descriptor registration, CRUD, and model-driven migration lowering | remove the public PyO3 constructors/functions | retain closed PyRuntimeProjection / PyProjectedModelManager and separately isolated V1-query execution inputs |
type_bridge_core.AuthoredMigration, type_bridge_core.author_migration |
creation of new root Python/JSON migrations | remove the public PyO3 authoring surface | retain legacy readers, checksums, snapshots, ledger import, and frontier adoption |
type_bridge_core.run_legacy_migration_cli |
mixed legacy CLI including writer and read-only commands | remove this unrestricted public dispatcher | retain a private/read-only archival dispatcher only if the frozen CLI disposition keeps plan, sqlmigrate, or showmigrations |
Remove in 2.1.0 — expanded Node handwritten authoring¶
| Public identity | 2.0.x disposition | Generated replacement |
|---|---|---|
@type-bridge/node Entity, Relation, field, role, FieldSpec, ListFieldSpec, RoleSpec, AttributeClass, EntitySchema, FieldValue, IidBearing, InstanceDict, InstanceFields, MergedSchema, ModelClass, ModelInstance, ParentModelClass, ParentOption, PlainFieldValue, RelationSchema, and SchemaSpec |
Entity/Relation factory invocation and arbitrary model-schema construction |
generated TypeScript model classes and package-local tokens |
@type-bridge/node Attribute, attr, AttributeBase, AttributeTypeOptions, AttributeTypeParent, ComparableAttributeBase, NumericAttributeBase, and StringAttributeBase |
attr.* or handwritten attribute creation |
generated scalar attributes |
@type-bridge/node TypeFlags, AttributeFlags, Flag, Card, Key, Unique, Doc, Meta, TypeNameCase, formatTypeName, resolveFlags, AttributeFlagsOptions, CardSpec, DocSpec, FlagInput, FlagSpec, MetaSpec, ResolvedAttributeFlags, ResolvedTypeFlags, and TypeFlagsOptions |
flag/factory invocation | Split-YAML annotations and generated projection metadata. flags.ts also exports Ordered and Distinct, but neither is reachable through the package export map or root barrel and therefore neither is a current public package identity. |
@type-bridge/node Annotation, OwnedAttributeDescriptor, EntityDescriptor, RoleDescriptor, RelationDescriptor, TypeDescriptor, OwnedAttributeEntry, RoleEntry, EntitySchemaEntry, RelationSchemaEntry, AttributeSchemaEntry, SchemaInfo, generateDefineBlock, DescriptorRegistry, RustDynamicEntityManager, and RustDynamicRelationManager |
schema/registry/manager construction | workspace generation and generated model manager methods |
@type-bridge/node root exports generateModels, generateModelsForTarget, BindgenTarget, BindgenRenderOptions, GenerateModelsOptions, GenerateTargetModelsOptions, and NamingOptions |
programmatic TypeQL-to-model generation | type-bridge schema generate. The export map has no @type-bridge/node/generator subpath; GeneratedFile, GeneratedPackage, BindgenNative, toClassName, and toFieldName are source-module exports but not current public package identities. |
@type-bridge/node parseSchema, SchemaParserNative, SchemaAttributeType, SchemaCardinality, SchemaEntityType, SchemaFunctionType, SchemaOwnedAttribute, SchemaParameter, SchemaPlayedRole, SchemaRelationType, SchemaReturnType, SchemaReturnTypeItem, SchemaRoleSpec, SchemaStructField, SchemaStructType, and TypeSchema |
parse-to-authoring entry point and public schema document shape | Split-YAML workspace parser; retain only private compatibility parser needs |
@type-bridge/node TypedEntityManager, TypedRelationManager, entityManagerFor, relationManagerFor, buildRolePlayers, and ExactFilters when constructed from handwritten ModelClass / RelationSchema |
handwritten model CRUD/manager construction | generated model managers. TypedQuery, TypedGroupByQuery, query expressions, and any private descriptor codec they require remain separately isolated V1-query compatibility. |
@type-bridge/node/typed QuerySession.registerModels, RemoteQuerySession.registerModels, and QuerySession.var / reachable when passed arbitrary handwritten model constructors/descriptors |
arbitrary descriptor registration and handwritten-constructor hydration | projection-owned generated query session over exact generated model/field/role tokens; retain model-oriented Query V2 behavior and low-level @type-bridge/node/query-v2 |
Remove in 2.1.0 — Node native and descriptor-marshalling escape hatches¶
@type-bridge/node.loadNative() is a public root export. Its returned object
currently exposes every N-API registration, so the raw identities below are
publicly reachable even when their source modules have no export-map subpath.
| Public identity | 2.1 disposition | Replacement / retained responsibility |
|---|---|---|
@type-bridge/node.loadNative, public NativeModule / NativeRuntime authoring members, and the raw constructors NodeDescriptorRegistry, NodeDynamicEntityManager, NodeDynamicRelationManager |
remove the public loader/authoring escape hatch or narrow it to a generated/runtime-only contract with no arbitrary descriptor registration | private native loader used by connection, Query V2, and runtime-projection; closed NodeRuntimeProjection / NodeProjectedModelManager |
raw native parseSchemaJson, renderModelsJson, generatedDeclaredDescriptorsJson, and generateDefineBlockJson |
remove from the publicly reachable native contract | private Rust parsing/generation behind canonical workspace commands and frozen compatibility tests |
raw native normalizeAggregatesJson, normalizeAttributeValueJson, normalizeEntityAttributesJson, normalizeFiltersJson, normalizeRelationAttributesJson, normalizeRelationFiltersJson, normalizeRelationWriteBatchJson, and normalizeRolePlayersJson |
remove with descriptor-driven handwritten managers | projection-owned generated managers and native hydration |
root Marshalling, lowerAttributeValue, lowerAttributes, lowerFilters, buildRolePlayers, keyAttributeDescriptor, hydrateAttributeEntries, hydrateAttributes, attributeToPlain, plainToAttribute, and runtimeAttributeValueFromUnknown when driven by arbitrary public descriptors |
remove the public descriptor-authoring route; split out any descriptor-independent scalar codec that retained V1 queries require | generated projection marshalling plus private V1 compatibility codec |
Remove in 2.1.0 — expanded Rust handwritten authoring¶
| Public identity | 2.0.x disposition | Generated replacement |
|---|---|---|
type_bridge_orm::{TypeBridgeEntity,TypeBridgeRelation,TypeBridgeAttribute} |
handwritten trait implementation / derive entry | generated Rust source package |
type_bridge_orm::{DeriveEntity,DeriveRelation,DeriveAttribute,define_attribute!,include_schema!}; type_bridge_orm_derive::{TypeBridgeEntity,TypeBridgeRelation,TypeBridgeAttribute,include_schema!} (excluding retained generated-query SelectedRow) |
macro expansion / manual declaration or direct TypeQL compile-time generation | generated Rust source package |
type_bridge_orm::{EntityDescriptor,RelationDescriptor,OwnedAttributeDescriptor,RoleDescriptor,TypeDescriptor,TypeDescriptorRef,DescriptorRegistry} and defining type_bridge_orm::{descriptor,registry} identities, including DescriptorIdentitySnapshot and DescriptorFingerprintRoot |
descriptor/registry construction or registration | verified InstalledRuntimeProjection from generated evidence; retain private descriptor representations required by execution |
type_bridge_orm::{EntityManager,RelationManager,DynamicEntityManager,DynamicRelationManager} and handwritten-model V1 query builders |
construction from handwritten model/descriptor | generated client direct/remote managers |
type_bridge_orm::{Annotation,OwnedAttributeInfo,RoleInfo,RolePlayerRef,FieldRef,RolePlayerFieldRef,RoleRef} when used as handwritten schema declaration data |
declaration construction | generated model tokens/descriptors |
type_bridge_orm::{SchemaDiff,SchemaInfo,SchemaManager} and type_bridge_orm::schema::{SchemaDiff,SchemaInfo,SchemaManager,SchemaError}; public schema-entry identities OwnedAttributeEntry, RoleEntry, EntitySchemaEntry, RelationSchemaEntry, AttributeSchemaEntry; diff identities ChangeCategory, ClassifiedChange, EntityChanges, RelationChanges, AttributeTypeChanges, RolePlayerChange, RoleAnnotationChange, RoleCardinalityChange; generator functions generate_define_block, card_annotation, attribute_definition, attribute_constraint_definition, and topological_sort; annotation identities AnnotationToken, AnnotationTokenDiff, split_annotation_tokens, constraint_part, typeql_uses_schema_annotations, escaped_string_literal, and diff_annotation_tokens |
arbitrary schema construction, lowering, and diffing through the public schema module tree |
canonical workspace schema/migration engine; retain required algorithms privately |
type_bridge_orm::codegen::{GeneratedModels,generate_for_target,generate_from_typeql,generate_rust_models} and the packaged type-bridge-codegen binary |
direct TypeQL-to-Rust source generation | type-bridge schema generate from a canonical Split-YAML workspace |
Remove in 2.1.0 — Rust core schema and programmatic bindgen¶
type-bridge-core-lib is a publishable crate, so removing only binding and ORM
wrappers would leave the original TypeQL schema/bindgen authority public.
| Public identity | 2.1 disposition | Replacement / retained responsibility |
|---|---|---|
type_bridge_core_lib::schema::{TypeSchema,SchemaError,Cardinality,OwnedAttribute,PlayedRole,RoleSpec,AttributeType,FunctionType,Parameter,ReturnType,ReturnTypeItem,StructType,StructField,EntityType,RelationType} and type_bridge_core_lib::parser::parse_typeql |
remove the public schema-authoring/parser identities; rename or privatize retained representations | strict canonical Split-YAML workspace parsing; frozen released-TypeQL compatibility parser remains internal to archive/conversion tests |
type_bridge_core_lib::bindgen::{AnnotationMap,TargetLanguage,PythonRenderMetadata,BindgenOptions,GeneratedFile,GeneratedPackage,GeneratedRustModels,BindgenPlan,generate_from_typeql,generate_json_from_typeql,python_class_name} |
remove the public direct TypeQL-to-model generation module/API | type-bridge schema generate; keep any old renderer privately only while frozen released-input conversion or migration snapshots require it |
Explicitly retain¶
- Generated package-internal Python runtime (
ModelBase,EntityBase,RelationBase,AttributeBase, tokens, and installer) emitted byschema-codegen; it is not a supported handwritten declaration API. type_bridge._runtime_projection,@type-bridge/node/runtime-projection, nativePyRuntimeProjection/NodeRuntimeProjection, RustSchemaPackageandInstalledRuntimeProjection; these install verified generated evidence only.- Python/Node/Rust direct and remote V2 query APIs, connection/session APIs, generated client CRUD, hydration, diagnostics, and canonical CLI workspace commands.
- Exact separately unscheduled V1 query identities: Python root
Query/QueryBuilderandtype_bridge.crudTypeDBQuery/GroupByQueryaliases; Node rootTypedQuery,TypedGroupByQuery,QueryExpr,ComparisonExpr,BooleanExpr,NotExpr,SortExpr,AggregateSpec,agg, and their error; RustMatchRequest, entity/relation query, and group-by query facades. Their descriptor/model execution dependencies become private compatibility implementation and do not enter generated packages. type_bridge_core.toml_to_typeql, frozen TOML parser, legacy migration readers/checksum/snapshots/metadata/ledger import/frontier bridge, and V1 query facades lacking their own removal schedule.