"""Fail-closed request planner for the frozen ``glyph_ascii_v1`` profile. This module is deliberately limited to text and provenance. It does not load audio, generate speech, join waveforms, or alter the legacy frontend. A request either receives one complete, reversible hybrid plan or remains on the unchanged legacy path. The profile scans *maximal printable-ASCII runs*. A run is network-looking when a case-insensitive preflight finds a network marker anywhere within it. Every such complete run must independently satisfy the strict, native- lowercase ``glyph_ascii_v1`` grammar. There is no stripping, case folding, Unicode repair, substring borrowing, or partial activation. Canonical boundary contract --------------------------- Every non-empty canonical payload is separated from the next payload by exactly one ASCII space. The same rule applies between glyph atoms. Spaces are represented by explicit, zero-raw/zero-audio separator segments. Carrier punctuation comes only from the existing zh-TW production normalizer; this planner injects no lexical cue or punctuation. """ from __future__ import annotations from collections.abc import Mapping from dataclasses import asdict, dataclass import hashlib import json import re from types import MappingProxyType import unicodedata from glyph_ascii_v1 import ( GLYPH_ASCII_V1_GRAMMAR_ID, GlyphAsciiV1Error, GlyphAsciiV1Proof, glyph_ascii_v1_asset_manifest_sha256, glyph_ascii_v1_identifier_kind, inverse_glyph_ascii_v1, render_glyph_ascii_v1, ) from production import ( contains_network_identifier, count_speech_units, normalize_spoken_forms, ) GLYPH_HYBRID_PROFILE_ID = "glyph_hybrid_request_v1" GLYPH_HYBRID_NORMALIZATION_ID = "production.normalize_spoken_forms:zh-TW" GLYPH_HYBRID_BOUNDARY_ID = "single_ascii_space_zero_audio_v1" # These reservations are independent from the ordinary cascade ledger. The # planner runs before generation, so a request cannot consume model or asset # work and then discover that it exceeded a profile cap. GLYPH_HYBRID_MAX_RAW_CHARS = 360 GLYPH_HYBRID_MAX_IDENTIFIERS = 8 GLYPH_HYBRID_MAX_ASSET_ATOMS = 128 GLYPH_HYBRID_MAX_ASSET_CANONICAL_UNITS = 512 GLYPH_HYBRID_ASSET_AUDIO_PLACEHOLDER_SAMPLES_PER_ATOM = 144_000 GLYPH_HYBRID_MAX_ASSET_AUDIO_PLACEHOLDER_SAMPLES = ( GLYPH_HYBRID_MAX_ASSET_ATOMS * GLYPH_HYBRID_ASSET_AUDIO_PLACEHOLDER_SAMPLES_PER_ATOM ) GLYPH_HYBRID_MAX_MODEL_GENERATED_CHUNKS = 32 GLYPH_HYBRID_MAX_MODEL_GENERATED_TEXT_UNITS = 800 _PRINTABLE_ASCII_RUN_RE = re.compile(r"[ -~]+", flags=re.ASCII) _SHA256_RE = re.compile(r"[0-9a-f]{64}\Z", flags=re.ASCII) _NETWORK_MARKERS = ("http://", "https://", "ftp://", "www.", "@", "://") _ZH_CARRIER_COMPATIBILITY_PUNCTUATION = frozenset( ",。!?;:、()【】「」『』《》〈〉“”‘’[]{}" "…⋯—–.。、〔〕〖〗〘〙〚〛﹁﹂︰﹐﹑﹒﹔﹕﹖﹗" ) _BIDI_UNSAFE = frozenset( { "BN", "LRE", "LRO", "RLE", "RLO", "PDF", "LRI", "RLI", "FSI", "PDI", } ) _SEGMENT_KINDS = frozenset({"carrier", "asset_atom", "control", "separator"}) _AUDIO_SOURCES = frozenset({"model", "asset", "zero_audio"}) class GlyphHybridPlanError(ValueError): """Raised when a plan, proof, manifest, or expected request is invalid.""" @dataclass(frozen=True) class HybridSegmentSpec: """One exact raw/canonical segment in assembly order. ``raw_text`` is retained for carrier/control provenance and for the one ASCII byte represented by an asset atom. Separator segments have empty raw text and a zero-width raw range. """ ordinal: int kind: str audio_source: str absolute_raw_start: int absolute_raw_end: int canonical_start: int canonical_end: int raw_text: str canonical_text: str raw_sha256: str canonical_sha256: str identifier_ordinal: int | None atom_ordinal: int | None asset_id: str | None manifest_entry_sha256: str | None @dataclass(frozen=True) class HybridReservation: """Pre-generation resource reservation for one complete request.""" raw_chars: int identifiers: int asset_atoms: int asset_canonical_units: int asset_audio_placeholder_samples: int model_generated_chunks: int model_generated_text_units: int @dataclass(frozen=True) class HybridRenderPlan: """Complete request-level proof and canonical assembly plan.""" profile_id: str grammar_id: str normalization_id: str boundary_contract_id: str raw_input_sha256: str canonical_target: str canonical_target_sha256: str asset_manifest_logical_sha256: str identifier_proofs: tuple[GlyphAsciiV1Proof, ...] segments: tuple[HybridSegmentSpec, ...] reservation: HybridReservation plan_sha256: str @dataclass(frozen=True) class _RawPiece: kind: str start: int end: int text: str def _sha256_text(value: str) -> str: return hashlib.sha256(value.encode("utf-8")).hexdigest() def _require_sha256(value: object, *, field: str) -> str: if type(value) is not str or _SHA256_RE.fullmatch(value) is None: raise GlyphHybridPlanError(f"{field} must be a lowercase SHA-256 digest") return value def _plan_payload(plan: HybridRenderPlan) -> dict[str, object]: payload = asdict(plan) payload.pop("plan_sha256") return payload def _logical_plan_sha256(plan: HybridRenderPlan) -> str: payload = json.dumps( _plan_payload(plan), ensure_ascii=True, separators=(",", ":"), sort_keys=True, ).encode("ascii") return hashlib.sha256(payload).hexdigest() def glyph_hybrid_plan_sha256(plan: HybridRenderPlan) -> str: """Validate the plan type and return its recomputed logical digest.""" if type(plan) is not HybridRenderPlan: raise GlyphHybridPlanError("hybrid plan has an invalid type") return _logical_plan_sha256(plan) def _network_looking(run: str) -> bool: folded = run.lower() return any(marker in folded for marker in _NETWORK_MARKERS) def _request_has_unsafe_unicode(raw_request: str) -> bool: """Reject characters that can split or visually rewrite an identifier. Han text and ordinary zh-TW punctuation remain eligible. Non-ASCII Latin, Greek, Cyrillic, combining marks, compatibility forms that fold to printable ASCII, controls, and bidi formatting are intentionally outside this narrow profile. """ for character in raw_request: if character.isascii(): if unicodedata.category(character)[0] == "C": return True continue category = unicodedata.category(character) bidi = unicodedata.bidirectional(character) if category[0] in {"C", "M"} or bidi in _BIDI_UNSAFE: return True if character in _ZH_CARRIER_COMPATIBILITY_PUNCTUATION: continue folded = unicodedata.normalize("NFKC", character) if folded != character and any( folded_character.isascii() and 0x20 <= ord(folded_character) <= 0x7E for folded_character in folded ): return True unicode_name = unicodedata.name(character, "") if any( script in unicode_name for script in ("LATIN", "GREEK", "CYRILLIC") ): return True return False def _raw_pieces(raw_request: str) -> tuple[_RawPiece, ...] | None: network_runs: list[re.Match[str]] = [] for match in _PRINTABLE_ASCII_RUN_RE.finditer(raw_request): run = match.group(0) if not _network_looking(run): continue try: # A marker anywhere in a maximal printable-ASCII run makes that # complete run security-relevant. Only the exact, lowercase v1 # grammar may activate; never borrow a valid-looking substring. glyph_ascii_v1_identifier_kind(run) except GlyphAsciiV1Error: return None network_runs.append(match) if not network_runs: return None if len(network_runs) > GLYPH_HYBRID_MAX_IDENTIFIERS: return None pieces: list[_RawPiece] = [] cursor = 0 for match in network_runs: if cursor < match.start(): pieces.append( _RawPiece( kind="carrier", start=cursor, end=match.start(), text=raw_request[cursor : match.start()], ) ) pieces.append( _RawPiece( kind="identifier", start=match.start(), end=match.end(), text=match.group(0), ) ) cursor = match.end() if cursor < len(raw_request): pieces.append( _RawPiece( kind="carrier", start=cursor, end=len(raw_request), text=raw_request[cursor:], ) ) return tuple(pieces) def _carrier_canonical(raw_fragment: str) -> str | None: # A network form outside the strict maximal run would make activation # partial. Reject both before and after legacy normalization. if contains_network_identifier(raw_fragment): return None try: canonical = normalize_spoken_forms(raw_fragment, locale="zh-TW") except (TypeError, ValueError): return None if ( contains_network_identifier(canonical) or canonical != " ".join(canonical.split()) ): return None return canonical def _manifest_snapshot( asset_entry_sha256_by_asset_id: Mapping[str, str], ) -> tuple[Mapping[str, str], str]: if not isinstance(asset_entry_sha256_by_asset_id, Mapping): raise GlyphHybridPlanError("glyph asset manifest entries must be a mapping") try: # A caller-supplied Mapping may compute or cycle values on each # access. Materialize it exactly once into an owned plain dict, then # expose only an immutable view for every subsequent proof operation. owned = dict(asset_entry_sha256_by_asset_id.items()) except Exception as error: raise GlyphHybridPlanError( "glyph asset manifest cannot be materialized" ) from error snapshot: Mapping[str, str] = MappingProxyType(owned) try: digest = glyph_ascii_v1_asset_manifest_sha256(snapshot) except GlyphAsciiV1Error as error: raise GlyphHybridPlanError("glyph asset manifest is invalid") from error return snapshot, digest def _segment( *, ordinal: int, kind: str, audio_source: str, absolute_raw_start: int, absolute_raw_end: int, canonical_start: int, raw_text: str, canonical_text: str, identifier_ordinal: int | None = None, atom_ordinal: int | None = None, asset_id: str | None = None, manifest_entry_sha256: str | None = None, ) -> HybridSegmentSpec: return HybridSegmentSpec( ordinal=ordinal, kind=kind, audio_source=audio_source, absolute_raw_start=absolute_raw_start, absolute_raw_end=absolute_raw_end, canonical_start=canonical_start, canonical_end=canonical_start + len(canonical_text), raw_text=raw_text, canonical_text=canonical_text, raw_sha256=_sha256_text(raw_text), canonical_sha256=_sha256_text(canonical_text), identifier_ordinal=identifier_ordinal, atom_ordinal=atom_ordinal, asset_id=asset_id, manifest_entry_sha256=manifest_entry_sha256, ) def build_glyph_hybrid_plan( raw_request: str, *, asset_entry_sha256_by_asset_id: Mapping[str, str], ) -> HybridRenderPlan | None: """Build one complete strict plan, or return ``None`` without side effects. ``None`` means that the whole request must remain on the unchanged legacy path. Invalid manifest configuration raises because silently falling back would conceal a deployment-integrity error. """ if type(raw_request) is not str: raise GlyphHybridPlanError("raw request must be an exact string") manifest_snapshot, manifest_sha256 = _manifest_snapshot( asset_entry_sha256_by_asset_id ) return _build_glyph_hybrid_plan_from_snapshot( raw_request, manifest_snapshot=manifest_snapshot, manifest_sha256=manifest_sha256, ) def _build_glyph_hybrid_plan_from_snapshot( raw_request: str, *, manifest_snapshot: Mapping[str, str], manifest_sha256: str, ) -> HybridRenderPlan | None: """Build using one already validated, immutable manifest snapshot.""" if ( not raw_request or len(raw_request) > GLYPH_HYBRID_MAX_RAW_CHARS or _request_has_unsafe_unicode(raw_request) ): return None pieces = _raw_pieces(raw_request) if pieces is None: return None segments: list[HybridSegmentSpec] = [] identifier_proofs: list[GlyphAsciiV1Proof] = [] canonical_parts: list[str] = [] canonical_cursor = 0 last_payload_raw_boundary: int | None = None asset_canonical_units = 0 model_generated_chunks = 0 model_generated_text_units = 0 def append_separator(raw_boundary: int) -> None: nonlocal canonical_cursor separator = _segment( ordinal=len(segments), kind="separator", audio_source="zero_audio", absolute_raw_start=raw_boundary, absolute_raw_end=raw_boundary, canonical_start=canonical_cursor, raw_text="", canonical_text=" ", ) segments.append(separator) canonical_parts.append(separator.canonical_text) canonical_cursor = separator.canonical_end def prepare_payload(raw_boundary: int) -> None: if canonical_parts and canonical_parts[-1] != " ": append_separator(raw_boundary) for piece in pieces: if piece.kind == "carrier": canonical = _carrier_canonical(piece.text) if canonical is None: return None speech_units = count_speech_units(canonical) if canonical: prepare_payload(piece.start) kind = "carrier" if speech_units > 0 else "control" audio_source = "model" if kind == "carrier" else "zero_audio" carrier = _segment( ordinal=len(segments), kind=kind, audio_source=audio_source, absolute_raw_start=piece.start, absolute_raw_end=piece.end, canonical_start=canonical_cursor, raw_text=piece.text, canonical_text=canonical, ) segments.append(carrier) if canonical: canonical_parts.append(canonical) canonical_cursor = carrier.canonical_end last_payload_raw_boundary = piece.end if kind == "carrier": model_generated_chunks += 1 model_generated_text_units += speech_units continue if piece.kind != "identifier": raise GlyphHybridPlanError("internal raw piece kind is invalid") try: # Strict eligibility is checked before adding any segment. There # is no chance to render a valid prefix of an invalid run. if canonical_parts and canonical_parts[-1] != " ": append_separator(piece.start) canonical, proof = render_glyph_ascii_v1( piece.text, asset_entry_sha256_by_asset_id=manifest_snapshot, absolute_raw_start=piece.start, canonical_start=canonical_cursor, ) except GlyphAsciiV1Error: return None if proof.asset_manifest_sha256 != manifest_sha256: raise GlyphHybridPlanError( "identifier proof manifest does not match plan header" ) identifier_ordinal = len(identifier_proofs) identifier_proofs.append(proof) for atom_index, atom in enumerate(proof.atoms): if atom_index: append_separator(atom.absolute_raw_start) raw_character = chr(atom.raw_byte) asset = _segment( ordinal=len(segments), kind="asset_atom", audio_source="asset", absolute_raw_start=atom.absolute_raw_start, absolute_raw_end=atom.absolute_raw_end, canonical_start=atom.canonical_start, raw_text=raw_character, canonical_text=atom.canonical_token, identifier_ordinal=identifier_ordinal, atom_ordinal=atom.ordinal, asset_id=atom.asset_id, manifest_entry_sha256=atom.manifest_entry_sha256, ) segments.append(asset) canonical_parts.append(asset.canonical_text) canonical_cursor = asset.canonical_end asset_canonical_units += count_speech_units(atom.canonical_token) if canonical != "".join( segment.canonical_text for segment in segments if ( segment.identifier_ordinal == identifier_ordinal or ( segment.kind == "separator" and proof.canonical_start <= segment.canonical_start < proof.canonical_end ) ) ): raise GlyphHybridPlanError("core identifier rendering was not preserved") last_payload_raw_boundary = piece.end # ``last_payload_raw_boundary`` is an internal construction assertion. A # valid network request necessarily emitted at least one canonical atom. if last_payload_raw_boundary is None or not identifier_proofs: return None canonical_target = "".join(canonical_parts) asset_atoms = sum(len(proof.atoms) for proof in identifier_proofs) reservation = HybridReservation( raw_chars=len(raw_request), identifiers=len(identifier_proofs), asset_atoms=asset_atoms, asset_canonical_units=asset_canonical_units, asset_audio_placeholder_samples=( asset_atoms * GLYPH_HYBRID_ASSET_AUDIO_PLACEHOLDER_SAMPLES_PER_ATOM ), model_generated_chunks=model_generated_chunks, model_generated_text_units=model_generated_text_units, ) if ( reservation.identifiers > GLYPH_HYBRID_MAX_IDENTIFIERS or reservation.asset_atoms > GLYPH_HYBRID_MAX_ASSET_ATOMS or reservation.asset_canonical_units > GLYPH_HYBRID_MAX_ASSET_CANONICAL_UNITS or reservation.asset_audio_placeholder_samples > GLYPH_HYBRID_MAX_ASSET_AUDIO_PLACEHOLDER_SAMPLES or reservation.model_generated_chunks > GLYPH_HYBRID_MAX_MODEL_GENERATED_CHUNKS or reservation.model_generated_text_units > GLYPH_HYBRID_MAX_MODEL_GENERATED_TEXT_UNITS ): return None unfinished = HybridRenderPlan( profile_id=GLYPH_HYBRID_PROFILE_ID, grammar_id=GLYPH_ASCII_V1_GRAMMAR_ID, normalization_id=GLYPH_HYBRID_NORMALIZATION_ID, boundary_contract_id=GLYPH_HYBRID_BOUNDARY_ID, raw_input_sha256=_sha256_text(raw_request), canonical_target=canonical_target, canonical_target_sha256=_sha256_text(canonical_target), asset_manifest_logical_sha256=manifest_sha256, identifier_proofs=tuple(identifier_proofs), segments=tuple(segments), reservation=reservation, plan_sha256="", ) return HybridRenderPlan( **{ **unfinished.__dict__, "plan_sha256": _logical_plan_sha256(unfinished), } ) def inverse_glyph_hybrid_plan( plan: HybridRenderPlan, *, asset_entry_sha256_by_asset_id: Mapping[str, str], expected_raw_request: str, ) -> str: """Validate from first principles and reconstruct the exact raw request. The original request is mandatory external provenance. This prevents an attacker from replacing a whole internally-consistent plan and merely recomputing its unkeyed digests. """ if type(plan) is not HybridRenderPlan: raise GlyphHybridPlanError("hybrid plan has an invalid type") if type(expected_raw_request) is not str: raise GlyphHybridPlanError("expected raw request must be an exact string") manifest_snapshot, manifest_sha256 = _manifest_snapshot( asset_entry_sha256_by_asset_id ) if ( type(plan.identifier_proofs) is not tuple or type(plan.segments) is not tuple or type(plan.reservation) is not HybridReservation or plan.profile_id != GLYPH_HYBRID_PROFILE_ID or plan.grammar_id != GLYPH_ASCII_V1_GRAMMAR_ID or plan.normalization_id != GLYPH_HYBRID_NORMALIZATION_ID or plan.boundary_contract_id != GLYPH_HYBRID_BOUNDARY_ID or _require_sha256( plan.raw_input_sha256, field="plan.raw_input_sha256", ) != plan.raw_input_sha256 or _require_sha256( plan.canonical_target_sha256, field="plan.canonical_target_sha256", ) != plan.canonical_target_sha256 or _require_sha256( plan.asset_manifest_logical_sha256, field="plan.asset_manifest_logical_sha256", ) != plan.asset_manifest_logical_sha256 or _require_sha256(plan.plan_sha256, field="plan.plan_sha256") != plan.plan_sha256 or plan.asset_manifest_logical_sha256 != manifest_sha256 or plan.raw_input_sha256 != _sha256_text(expected_raw_request) or plan.canonical_target_sha256 != _sha256_text(plan.canonical_target) or plan.plan_sha256 != _logical_plan_sha256(plan) ): raise GlyphHybridPlanError("hybrid plan header is inconsistent") reconstructed_parts: list[str] = [] canonical_parts: list[str] = [] raw_cursor = 0 canonical_cursor = 0 asset_segments: dict[tuple[int, int], HybridSegmentSpec] = {} previous_nonempty_payload = False for ordinal, segment in enumerate(plan.segments): if type(segment) is not HybridSegmentSpec: raise GlyphHybridPlanError("hybrid segment has an invalid type") integer_fields = ( segment.ordinal, segment.absolute_raw_start, segment.absolute_raw_end, segment.canonical_start, segment.canonical_end, ) if any(type(value) is not int for value in integer_fields): raise GlyphHybridPlanError("hybrid segment integer field is invalid") if ( segment.ordinal != ordinal or segment.kind not in _SEGMENT_KINDS or segment.audio_source not in _AUDIO_SOURCES or type(segment.raw_text) is not str or type(segment.canonical_text) is not str or segment.absolute_raw_start != raw_cursor or segment.absolute_raw_end < segment.absolute_raw_start or segment.canonical_start != canonical_cursor or segment.canonical_end != segment.canonical_start + len(segment.canonical_text) or _require_sha256( segment.raw_sha256, field="segment.raw_sha256", ) != _sha256_text(segment.raw_text) or _require_sha256( segment.canonical_sha256, field="segment.canonical_sha256", ) != _sha256_text(segment.canonical_text) ): raise GlyphHybridPlanError("hybrid segment is inconsistent") if segment.kind == "separator": if ( segment.audio_source != "zero_audio" or segment.absolute_raw_end != segment.absolute_raw_start or segment.raw_text or segment.canonical_text != " " or any( value is not None for value in ( segment.identifier_ordinal, segment.atom_ordinal, segment.asset_id, segment.manifest_entry_sha256, ) ) or not previous_nonempty_payload ): raise GlyphHybridPlanError("separator contract is inconsistent") previous_nonempty_payload = False elif segment.kind == "asset_atom": if ( segment.audio_source != "asset" or segment.absolute_raw_end != segment.absolute_raw_start + 1 or len(segment.raw_text) != 1 or not segment.raw_text.isascii() or not segment.canonical_text or type(segment.identifier_ordinal) is not int or type(segment.atom_ordinal) is not int or type(segment.asset_id) is not str or _require_sha256( segment.manifest_entry_sha256, field="segment.manifest_entry_sha256", ) != segment.manifest_entry_sha256 or previous_nonempty_payload ): raise GlyphHybridPlanError("asset segment contract is inconsistent") key = (segment.identifier_ordinal, segment.atom_ordinal) if key in asset_segments: raise GlyphHybridPlanError("asset segment provenance is duplicated") asset_segments[key] = segment reconstructed_parts.append(segment.raw_text) raw_cursor = segment.absolute_raw_end previous_nonempty_payload = True elif segment.kind in {"carrier", "control"}: if ( segment.absolute_raw_end <= segment.absolute_raw_start or len(segment.raw_text) != segment.absolute_raw_end - segment.absolute_raw_start or any( value is not None for value in ( segment.identifier_ordinal, segment.atom_ordinal, segment.asset_id, segment.manifest_entry_sha256, ) ) ): raise GlyphHybridPlanError("carrier/control provenance is inconsistent") canonical = _carrier_canonical(segment.raw_text) speech_units = ( count_speech_units(segment.canonical_text) if canonical is not None else -1 ) if ( canonical is None or canonical != segment.canonical_text or ( segment.kind == "carrier" and ( segment.audio_source != "model" or speech_units <= 0 ) ) or ( segment.kind == "control" and ( segment.audio_source != "zero_audio" or speech_units != 0 ) ) or (segment.canonical_text and previous_nonempty_payload) ): raise GlyphHybridPlanError("carrier/control contract is inconsistent") reconstructed_parts.append(segment.raw_text) raw_cursor = segment.absolute_raw_end if segment.canonical_text: previous_nonempty_payload = True else: raise GlyphHybridPlanError("unknown hybrid segment kind") canonical_parts.append(segment.canonical_text) canonical_cursor = segment.canonical_end reconstructed = "".join(reconstructed_parts) canonical = "".join(canonical_parts) if ( raw_cursor != len(reconstructed) or reconstructed != expected_raw_request or canonical != plan.canonical_target or canonical_cursor != len(canonical) or canonical.startswith(" ") or canonical.endswith(" ") or " " in canonical ): raise GlyphHybridPlanError("hybrid segments do not provide exact coverage") expected_asset_keys: set[tuple[int, int]] = set() previous_raw_end = -1 previous_canonical_end = -1 for identifier_ordinal, proof in enumerate(plan.identifier_proofs): if type(proof) is not GlyphAsciiV1Proof: raise GlyphHybridPlanError("identifier proof has an invalid type") if ( _require_sha256( proof.asset_manifest_sha256, field="proof.asset_manifest_sha256", ) != plan.asset_manifest_logical_sha256 ): raise GlyphHybridPlanError( "identifier proof manifest does not match plan header" ) try: raw_identifier = inverse_glyph_ascii_v1( proof, asset_entry_sha256_by_asset_id=manifest_snapshot, ) except GlyphAsciiV1Error as error: raise GlyphHybridPlanError("identifier proof is invalid") from error if ( proof.absolute_raw_start <= previous_raw_end or proof.canonical_start <= previous_canonical_end or expected_raw_request[ proof.absolute_raw_start : proof.absolute_raw_end ] != raw_identifier or plan.canonical_target[ proof.canonical_start : proof.canonical_end ] != " ".join(atom.canonical_token for atom in proof.atoms) ): raise GlyphHybridPlanError("identifier proof range is inconsistent") previous_raw_end = proof.absolute_raw_end previous_canonical_end = proof.canonical_end for atom in proof.atoms: key = (identifier_ordinal, atom.ordinal) segment = asset_segments.get(key) if ( segment is None or segment.absolute_raw_start != atom.absolute_raw_start or segment.absolute_raw_end != atom.absolute_raw_end or segment.canonical_start != atom.canonical_start or segment.canonical_end != atom.canonical_end or ord(segment.raw_text) != atom.raw_byte or segment.canonical_text != atom.canonical_token or segment.asset_id != atom.asset_id or segment.manifest_entry_sha256 != atom.manifest_entry_sha256 ): raise GlyphHybridPlanError("asset segment does not match its proof") expected_asset_keys.add(key) if set(asset_segments) != expected_asset_keys: raise GlyphHybridPlanError("asset segment set does not match identifier proofs") expected_plan = _build_glyph_hybrid_plan_from_snapshot( reconstructed, manifest_snapshot=manifest_snapshot, manifest_sha256=manifest_sha256, ) if ( expected_plan is None or type(expected_plan) is not type(plan) or expected_plan != plan ): raise GlyphHybridPlanError("hybrid plan is not the unique expected plan") return reconstructed