field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

commit 2b33144e628bf10e1ddd29829f801ae94cf922b6
parent d2cea073047adefac2f0d3cd0ace0a65a89bbc2d
Author: triesap <tyson@radroots.org>
Date:   Tue,  8 Sep 2026 23:02:36 +0000

tera: guard intentional legacy identifiers

- require exact owned exceptions for shared and persisted names
- enforce current app naming without changing stored identities
- retire obsolete tooling and refresh producer-bound provenance
- verify native linux simulator contracts and artifact freshness

Diffstat:
MREADME.md | 9+++++++++
MTera/App/TeraAppModel.swift | 2+-
MTera/Runtime/TeraLifecycleCoordinator.swift | 2+-
MTera/State/TeraConfigurationStore.swift | 8++++----
MTeraFFI/producer.toml | 1+
MTeraFFI/provenance.json | 52++++++++++++++++++++++++++--------------------------
MTeraFFI/source.lock | 4++--
MTeraFFI/source/aarch64-apple-darwin.json | 86++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
MTeraFFI/source/aarch64-apple-ios-sim.json | 86++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
MTeraFFI/source/aarch64-apple-ios.json | 86++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
MTeraTests/TeraAddStoreTests.swift | 2+-
MTeraTests/TeraLifecycleTests.swift | 2+-
MTeraTests/TeraMediaStoreTests.swift | 2+-
MTeraTests/TeraRuntimeClientTests.swift | 2+-
MTeraTests/TeraSupportingStoreTests.swift | 2+-
MTeraTests/TeraTodayStoreTests.swift | 2+-
Mcore/crates/tera_ffi/src/logging.rs | 2+-
Mcore/crates/tera_ffi/src/subscription.rs | 2+-
Mrelease/provenance.json | 4++--
Mscripts/app-api-snapshot.sh | 2+-
Mscripts/ffi_source.py | 1+
Ascripts/legacy_identifiers.py | 284+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mscripts/package_contract.py | 26++++++++------------------
Mscripts/persona-verifier/pyproject.toml | 2+-
Mscripts/persona-verifier/uv.lock | 2+-
Mscripts/swift-quality.sh | 2++
Ascripts/test_legacy_identifiers.py | 130+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mscripts/test_package_contract.py | 14--------------
Mscripts/verify-package-contract.sh | 1+
Atest-fixtures/legacy-identifiers.v1.json | 4436+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
30 files changed, 5075 insertions(+), 181 deletions(-)

diff --git a/README.md b/README.md @@ -213,6 +213,15 @@ these checks. Comments, examples, unreachable source, and arbitrary matching text cannot satisfy a behavior-bearing package assertion; application behavior is proven by the compiled Swift and simulator test lanes. +Legacy identifiers are governed by `test-fixtures/legacy-identifiers.v1.json`. +Each exact name/path/count refers to an owner, reason, reader, and removal +condition. Unknown names, expanded or stale exceptions, old app declarations, +and changed display names fail the package check. Shared Apple/foundation APIs, +installed identities, persisted namespaces, and existing compatibility readers +retain their names. Generated FFI names are checked through owned generation +and API freshness; dependency caches and generated binaries are not source +exceptions. The policy is part of the native producer's declared input tree. + The contract also binds the exact Ruff development tool, both maintainability baselines, and their executable verifier, so local lint behavior cannot drift with an ambient Python installation. diff --git a/Tera/App/TeraAppModel.swift b/Tera/App/TeraAppModel.swift @@ -350,7 +350,7 @@ final class TeraAppModel: ObservableObject { ), blossomConfiguration: nil, blossomEvidence: nil, - crateName: "radroots_mobile_ffi", + crateName: "tera_ffi", crateVersion: "0.1.0-alpha", isClosed: false ) diff --git a/Tera/Runtime/TeraLifecycleCoordinator.swift b/Tera/Runtime/TeraLifecycleCoordinator.swift @@ -370,7 +370,7 @@ actor TeraLifecycleCoordinator { return try fileAccess.prepareExport( RadrootsExportDocumentRequest( source: .inlineData(data), - suggestedFilename: "radroots-diagnostics.json", + suggestedFilename: "tera-diagnostics.json", mediaType: "application/json", sizeBytes: UInt64(data.count) ) diff --git a/Tera/State/TeraConfigurationStore.swift b/Tera/State/TeraConfigurationStore.swift @@ -363,7 +363,7 @@ actor TeraConfigurationStore { createdAtUnixMilliseconds: createdAtUnixMilliseconds ) do { - let data = try JSONEncoder.radroots.encode(value) + let data = try JSONEncoder.tera.encode(value) try fileAccess.write(.inline(data), to: Self.sourceGenerationFile) return value } catch let error as TeraConfigurationError { @@ -417,7 +417,7 @@ actor TeraConfigurationStore { private func persist(_ configuration: StoredConfigurationV3) throws { do { - let data = try JSONEncoder.radroots.encode(configuration) + let data = try JSONEncoder.tera.encode(configuration) try fileAccess.write(.inline(data), to: Self.configurationFile) } catch { throw TeraConfigurationError.persistenceFailed @@ -515,7 +515,7 @@ actor TeraConfigurationStore { profile: TeraAppNetworkProfile ) throws -> String { do { - let data = try JSONEncoder.radroots.encode( + let data = try JSONEncoder.tera.encode( BootstrapNetworkIdentity( profile: profile, relayURLs: bootstrap.relayURLs, @@ -751,7 +751,7 @@ private struct IPv6Address { } private extension JSONEncoder { - static var radroots: JSONEncoder { + static var tera: JSONEncoder { let encoder = JSONEncoder() encoder.outputFormatting = [.prettyPrinted, .sortedKeys] return encoder diff --git a/TeraFFI/producer.toml b/TeraFFI/producer.toml @@ -2,6 +2,7 @@ schema = "tera.native-producer.v1" repository = "https://github.com/radrootslabs/tera" foundation_lock = "radroots.lib.source-lock.v1.toml" source_inputs = [ + "test-fixtures/legacy-identifiers.v1.json", "Cargo.toml", "Cargo.lock", "rust-toolchain.toml", "Makefile", "core", "scripts", "TeraFFI/Makefile", "TeraFFI/scripts", "TeraFFI/producer.toml", "radroots.lib.source-lock.v1.toml", diff --git a/TeraFFI/provenance.json b/TeraFFI/provenance.json @@ -22,9 +22,9 @@ "sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c" }, { - "bytes": 71177136, + "bytes": 71177128, "path": "TeraFFI.xcframework/ios-arm64-simulator/libtera_ffi.a", - "sha256": "f6472f376aac07d57c961afe7ea93ce13330c7faf50b38b5dc74fd38d8a1c347" + "sha256": "4e150bccf169257bf39539bcc97660b9c39fa25cb0187c7cfd57db4460dd624d" }, { "bytes": 68654, @@ -37,9 +37,9 @@ "sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c" }, { - "bytes": 71229544, + "bytes": 71229312, "path": "TeraFFI.xcframework/ios-arm64/libtera_ffi.a", - "sha256": "a2b3b65e4e3c6359d342ae802326ab755f87f837e15f2c53927be48b3d7f7587" + "sha256": "005a6f155fb78da2e1d560fd1bc5f62a1ff17dfa101419b1b7fe33ca86c9a458" }, { "bytes": 40735, @@ -79,32 +79,32 @@ { "bytes": 19797472, "path": "native/aarch64-apple-darwin/libtera_ffi.dylib", - "sha256": "64da3d4d7cad89a5ecfb3d86c82f550b2f4385ca5aebd1a37e6198e74899bd1d" + "sha256": "7fc22f57a70b0c46d62dfdcd2521c670f6c77ef37ad44c27688c5625af1c7175" }, { - "bytes": 71177136, + "bytes": 71177128, "path": "native/aarch64-apple-ios-sim/libtera_ffi.a", - "sha256": "f6472f376aac07d57c961afe7ea93ce13330c7faf50b38b5dc74fd38d8a1c347" + "sha256": "4e150bccf169257bf39539bcc97660b9c39fa25cb0187c7cfd57db4460dd624d" }, { - "bytes": 71229544, + "bytes": 71229312, "path": "native/aarch64-apple-ios/libtera_ffi.a", - "sha256": "a2b3b65e4e3c6359d342ae802326ab755f87f837e15f2c53927be48b3d7f7587" + "sha256": "005a6f155fb78da2e1d560fd1bc5f62a1ff17dfa101419b1b7fe33ca86c9a458" }, { - "bytes": 52795, + "bytes": 53557, "path": "source/aarch64-apple-darwin.json", - "sha256": "2dd0558e69f6119b49edb04b70754b7a61315dfbb0062292c7c8ad4106c3d522" + "sha256": "dce04cf1b608641658cc4ab3cfec8d6a7c050e744ebc208c96811f0c72b31ccf" }, { - "bytes": 52796, + "bytes": 53558, "path": "source/aarch64-apple-ios-sim.json", - "sha256": "da7f20d4c59c4de9db00d19f042ec2d54e8c07acbf1362f478888ced9e2c41df" + "sha256": "f3532c471ab814083d80dba6f2f1630a42daa97152d14c36ba403893ec815daf" }, { - "bytes": 52792, + "bytes": 53554, "path": "source/aarch64-apple-ios.json", - "sha256": "e62015a85cb77e336f9b898136ab0cf5a2679742c99233ea86f9599de1c723d6" + "sha256": "272da0800b5c6a4f11994a0156dda3973d2db3d56fa5b5ede71e26e8f412ad4a" } ], "language": "swift", @@ -112,7 +112,7 @@ "schema": "radroots.artifact-manifest.v2", "source": { "repository": "https://github.com/radrootslabs/tera", - "tree": "b9b252434caf06c74f2d6bd9fbfd569784f22745" + "tree": "5364e38f7c08b01eef0d63a2eb48383215e887d8" }, "source_records": { "aarch64-apple-darwin": "source/aarch64-apple-darwin.json", @@ -139,9 +139,9 @@ "sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c" }, { - "bytes": 71177136, + "bytes": 71177128, "path": "Tera/Frameworks/TeraFFI.xcframework/ios-arm64-simulator/libtera_ffi.a", - "sha256": "f6472f376aac07d57c961afe7ea93ce13330c7faf50b38b5dc74fd38d8a1c347" + "sha256": "4e150bccf169257bf39539bcc97660b9c39fa25cb0187c7cfd57db4460dd624d" }, { "bytes": 68654, @@ -154,9 +154,9 @@ "sha256": "3ed9b7ece2f86e5b5d1ddc6ecbb97deb49c46ca2ea91a930eaec1b580232345c" }, { - "bytes": 71229544, + "bytes": 71229312, "path": "Tera/Frameworks/TeraFFI.xcframework/ios-arm64/libtera_ffi.a", - "sha256": "a2b3b65e4e3c6359d342ae802326ab755f87f837e15f2c53927be48b3d7f7587" + "sha256": "005a6f155fb78da2e1d560fd1bc5f62a1ff17dfa101419b1b7fe33ca86c9a458" }, { "bytes": 481606, @@ -174,19 +174,19 @@ "sha256": "6542c8294920b3c41e987619de58690e2af16896079910b657129d3573b34e68" }, { - "bytes": 52795, + "bytes": 53557, "path": "TeraFFI/source/aarch64-apple-darwin.json", - "sha256": "2dd0558e69f6119b49edb04b70754b7a61315dfbb0062292c7c8ad4106c3d522" + "sha256": "dce04cf1b608641658cc4ab3cfec8d6a7c050e744ebc208c96811f0c72b31ccf" }, { - "bytes": 52796, + "bytes": 53558, "path": "TeraFFI/source/aarch64-apple-ios-sim.json", - "sha256": "da7f20d4c59c4de9db00d19f042ec2d54e8c07acbf1362f478888ced9e2c41df" + "sha256": "f3532c471ab814083d80dba6f2f1630a42daa97152d14c36ba403893ec815daf" }, { - "bytes": 52792, + "bytes": 53554, "path": "TeraFFI/source/aarch64-apple-ios.json", - "sha256": "e62015a85cb77e336f9b898136ab0cf5a2679742c99233ea86f9599de1c723d6" + "sha256": "272da0800b5c6a4f11994a0156dda3973d2db3d56fa5b5ede71e26e8f412ad4a" } ], "schema": "tera.installed-native-artifacts.v1" diff --git a/TeraFFI/source.lock b/TeraFFI/source.lock @@ -1,7 +1,7 @@ schema = "tera.installed-source.v1" repository = "https://github.com/radrootslabs/tera" -source_tree = "b9b252434caf06c74f2d6bd9fbfd569784f22745" -manifest_sha256 = "9179e5238481b79193477fe555c886d9825440942bd8013fd0c399fc5b547147" +source_tree = "5364e38f7c08b01eef0d63a2eb48383215e887d8" +manifest_sha256 = "c338c32c516a767f1e1215f5c6b8841927d86c38cdd88ca5c598986a0ca2de89" source_date_epoch = 1787871027 [foundation] diff --git a/TeraFFI/source/aarch64-apple-darwin.json b/TeraFFI/source/aarch64-apple-darwin.json @@ -518,10 +518,10 @@ "sha256": "7e9bc238cc27041e3f6b63d40d28712f3276bf0b3f3deb7609f4fb962db4f4c1" }, "TeraFFI/producer.toml": { - "bytes": 917, - "git_blob": "228af307ce185c6abd1b62e76bdf068800a41782", + "bytes": 963, + "git_blob": "87e4526a6595ded35ea62b6ef1b3aa67b923b515", "mode": "100644", - "sha256": "23de4d65f7ca7d1dbf66610c24ff0f833f5c9e95bb31d933a593822a62358ecd" + "sha256": "c497212bfb54d997bbf5938cd04c7a41c3ef2ce7adaef861fc07e2565cd26661" }, "TeraFFI/scripts/verify-installed-artifacts.sh": { "bytes": 255, @@ -734,10 +734,10 @@ "sha256": "f44553f903d7d068de8c077b5908446a369d8c59a5f82d0746828585af611a7f" }, "core/crates/tera_ffi/src/logging.rs": { - "bytes": 9317, - "git_blob": "1f70a805e615aae34dae811c8bf84cf22475903a", + "bytes": 9313, + "git_blob": "aaed371f0f074bfa2d2ccb6d5e958c75d066fff6", "mode": "100644", - "sha256": "e3b4cde336489eeb76b7ef76967b65359a1de9221d90f4ff3c66917c91a9e580" + "sha256": "59911489707924bb42302894800a77551f9038b56f783e4c634bd66d800f92a2" }, "core/crates/tera_ffi/src/logging/writer.rs": { "bytes": 15077, @@ -764,10 +764,10 @@ "sha256": "4c0800499f248e61011f7ffe78968e0d8afb13ddfe2332390fb25de444f7e6b7" }, "core/crates/tera_ffi/src/subscription.rs": { - "bytes": 10305, - "git_blob": "2ad8a6bc15138eef15d080b4c80bd984da4892f5", + "bytes": 10301, + "git_blob": "7ade122c46c8bd36480b9e7540a013ed45ced3e7", "mode": "100644", - "sha256": "87dd5a2b0437357a959f221779a8d962f8abc6d836e7250c01c74d62cb930237" + "sha256": "4c57fca52ef318b6b052aebe7ff7e32566d4546c059990d2bd141c429bfb325f" }, "core/crates/tera_ffi/tests/compatibility.rs": { "bytes": 7548, @@ -956,10 +956,10 @@ "sha256": "04b90cfb1e42ae7aebfdbac44b2b58845969c98240c27636213d619af5cb1510" }, "scripts/app-api-snapshot.sh": { - "bytes": 2208, - "git_blob": "3357e4729d70642ae6b600fdd576df3766c8c0bc", + "bytes": 2204, + "git_blob": "57cefe0d1867da964e90c5d5d07916a9057c7732", "mode": "100755", - "sha256": "6e657582fa823c6ae702f7241c9770c7ef152f3c403b8bbc800964061b35e829" + "sha256": "77c04fc15b741eb7db11294517b9fa509b11df39190b32a1fb0147434b0e48e1" }, "scripts/app_dependency_graph.py": { "bytes": 4524, @@ -1004,10 +1004,10 @@ "sha256": "e032f5d2f92de7b5e9761196c30ff2209108231d664a95a25a653c353b16f9fa" }, "scripts/ffi_source.py": { - "bytes": 12484, - "git_blob": "23f108b6a7d18ddce608ede5f7de35eaaed1ed56", + "bytes": 12532, + "git_blob": "9287d6f6f3f924f2a6572def96dd3d3bf9554c7f", "mode": "100644", - "sha256": "05621be0df39968db8706ca1d7a6527e569f1019bdd5b8fc081ecdbf1c0027c6" + "sha256": "8470f7dba319fad00e7ed257d144917e7084330285b1bd706540c554899c5d34" }, "scripts/generate-project.sh": { "bytes": 2964, @@ -1015,6 +1015,12 @@ "mode": "100755", "sha256": "36f5b334f88928c2bb96d5b0f9e560b148c0b4d449696c13ef0d201f1355db3e" }, + "scripts/legacy_identifiers.py": { + "bytes": 9237, + "git_blob": "a52415f3391d69ea278673e7531faa4f38814587", + "mode": "100644", + "sha256": "743736ae176e84c7c46ba53bebe23f6435b5969d310bb57562b636c435ba8d2b" + }, "scripts/linux-shared-rust.sh": { "bytes": 1313, "git_blob": "cba195bbea7afecf58375b8b2d72906057219e47", @@ -1034,10 +1040,10 @@ "sha256": "fff99e755f35fa9f00708427b1b29290c0ecc2733c0ea070f5807ec7c37f6f11" }, "scripts/package_contract.py": { - "bytes": 26134, - "git_blob": "5dae06288f14200c699d8f043feb7050bd903dd8", + "bytes": 25795, + "git_blob": "d68f5df2cc26d252be264fe55ece761070d02bee", "mode": "100755", - "sha256": "d89ea3b8cd0fbc0ef179b8a07c0ef75ed11218fe7565c058fd94b4e4a6707874" + "sha256": "b88df13f9c0da49fc535cf9997c668ec1357e9dbf6db2b472ac29fc3304c888c" }, "scripts/persona-verifier.sh": { "bytes": 240, @@ -1046,16 +1052,16 @@ "sha256": "834fa861892b9185abdf99d39a1aa9a19eba95447afd2c71ac6ffabcd1854a74" }, "scripts/persona-verifier/pyproject.toml": { - "bytes": 209, - "git_blob": "1b6cf802a836c378049b52f71d66b092cac328d9", + "bytes": 205, + "git_blob": "3ad15bb37144d52196e66dcbfaf59f031fe5eaf7", "mode": "100644", - "sha256": "055c3ee021aa610715d40b978df63eac1b7b09b48f34362415eb181077a36d89" + "sha256": "be776357c7adfda4c28036739ef258741a7329e8da03db07bee354561fcda251" }, "scripts/persona-verifier/uv.lock": { - "bytes": 19438, - "git_blob": "71acde851705df211f19c17ba5f02cc99e9efab9", + "bytes": 19434, + "git_blob": "2b6aea10b8ea24b6cdc1075e78ed7a37fb88249d", "mode": "100644", - "sha256": "eacbed52be8f820563aa46092533d123a724f49bacf549f8109e4eb31443d6fb" + "sha256": "af175b24907863f548d0d93a585ceab8d65a686e5152f70739384dd5b8ef2b96" }, "scripts/release-evidence.sh": { "bytes": 8527, @@ -1076,10 +1082,10 @@ "sha256": "1803572abdb2e22bedd275724edae5f09c523b132bc59086aacca0f5183905d0" }, "scripts/swift-quality.sh": { - "bytes": 1920, - "git_blob": "ba64f9f2d37b66e4d7ec3dd3488b9947bd3a2c68", + "bytes": 1989, + "git_blob": "1dc67baa1ccdb27e2816ca139aa0cb177bb40806", "mode": "100755", - "sha256": "b57d6a6499f65ee7ce2c94b2b103c5de84be7a4ff79af2c8e5fde9ac827ed4f9" + "sha256": "63df08c308431557f4ca570d81f63167e5c02c084293c39fe877a66ff6e57280" }, "scripts/test_app_dependency_graph.py": { "bytes": 4007, @@ -1105,6 +1111,12 @@ "mode": "100644", "sha256": "6f0196a26af8c1e63ce400ca351c56e95f1122142cecb5fd8d09f4bdc9a2fb83" }, + "scripts/test_legacy_identifiers.py": { + "bytes": 5760, + "git_blob": "2822ae9309e539dd73ae19167f723a7014576408", + "mode": "100644", + "sha256": "4305514195999645f6e29e069f348e54fbd170b06a81754658f7c65dd4c51b64" + }, "scripts/test_local_social_fixture.py": { "bytes": 50487, "git_blob": "7aac3d824e1c395e467ae46e03ad44d4ca66c43d", @@ -1118,25 +1130,31 @@ "sha256": "1a5384a6109d495477dd7848a367c2452f87c36e46dbab2c20b98940a4d4fed6" }, "scripts/test_package_contract.py": { - "bytes": 9119, - "git_blob": "2136f76eb701b68ec9dca85d4c8d25c9bcf6e4fa", + "bytes": 8414, + "git_blob": "02af049946156f96c79c4b4129f7e4d532be2dc6", "mode": "100644", - "sha256": "c4d602dc30b0865d6eab40b4703712d237911e64ec95f450f316faea7e123b49" + "sha256": "9073f8edaa80c71f7c1f718c4dcff954a30ac42218fbd19378803ecfb9b3b33f" }, "scripts/verify-package-contract.sh": { - "bytes": 1388, - "git_blob": "4a20535a8810a4d03d7ebf0cec5a2f55c1f3d2ac", + "bytes": 1427, + "git_blob": "5b414baa6fad6b1308b028ac02670817bcace5aa", "mode": "100755", - "sha256": "0bceebe7678eb44ab8518bda8cfcfd76190ee341982d66ba1c940c3461f0944d" + "sha256": "ba4d48ce7f3c31340e527a2e1c832818e007c8ccfc7e5493916d98a1ae855ac7" }, "scripts/xcode.sh": { "bytes": 21183, "git_blob": "2cd94ce793f8dd4591bc7f410cfb06ca39ed7025", "mode": "100755", "sha256": "b052a73a824e8f8b26af2646a4758f13655e04de9551a8271890d3cf2b63209d" + }, + "test-fixtures/legacy-identifiers.v1.json": { + "bytes": 109807, + "git_blob": "df2cff39e67e170db7c57b3c4d5e57149dbc9c69", + "mode": "100644", + "sha256": "84a114a8803778895a504655d0836ffd8d71dfc8953b06911ca78f93f711be6c" } }, "policy": "staged_inputs", - "tree": "b9b252434caf06c74f2d6bd9fbfd569784f22745" + "tree": "5364e38f7c08b01eef0d63a2eb48383215e887d8" } } diff --git a/TeraFFI/source/aarch64-apple-ios-sim.json b/TeraFFI/source/aarch64-apple-ios-sim.json @@ -518,10 +518,10 @@ "sha256": "7e9bc238cc27041e3f6b63d40d28712f3276bf0b3f3deb7609f4fb962db4f4c1" }, "TeraFFI/producer.toml": { - "bytes": 917, - "git_blob": "228af307ce185c6abd1b62e76bdf068800a41782", + "bytes": 963, + "git_blob": "87e4526a6595ded35ea62b6ef1b3aa67b923b515", "mode": "100644", - "sha256": "23de4d65f7ca7d1dbf66610c24ff0f833f5c9e95bb31d933a593822a62358ecd" + "sha256": "c497212bfb54d997bbf5938cd04c7a41c3ef2ce7adaef861fc07e2565cd26661" }, "TeraFFI/scripts/verify-installed-artifacts.sh": { "bytes": 255, @@ -734,10 +734,10 @@ "sha256": "f44553f903d7d068de8c077b5908446a369d8c59a5f82d0746828585af611a7f" }, "core/crates/tera_ffi/src/logging.rs": { - "bytes": 9317, - "git_blob": "1f70a805e615aae34dae811c8bf84cf22475903a", + "bytes": 9313, + "git_blob": "aaed371f0f074bfa2d2ccb6d5e958c75d066fff6", "mode": "100644", - "sha256": "e3b4cde336489eeb76b7ef76967b65359a1de9221d90f4ff3c66917c91a9e580" + "sha256": "59911489707924bb42302894800a77551f9038b56f783e4c634bd66d800f92a2" }, "core/crates/tera_ffi/src/logging/writer.rs": { "bytes": 15077, @@ -764,10 +764,10 @@ "sha256": "4c0800499f248e61011f7ffe78968e0d8afb13ddfe2332390fb25de444f7e6b7" }, "core/crates/tera_ffi/src/subscription.rs": { - "bytes": 10305, - "git_blob": "2ad8a6bc15138eef15d080b4c80bd984da4892f5", + "bytes": 10301, + "git_blob": "7ade122c46c8bd36480b9e7540a013ed45ced3e7", "mode": "100644", - "sha256": "87dd5a2b0437357a959f221779a8d962f8abc6d836e7250c01c74d62cb930237" + "sha256": "4c57fca52ef318b6b052aebe7ff7e32566d4546c059990d2bd141c429bfb325f" }, "core/crates/tera_ffi/tests/compatibility.rs": { "bytes": 7548, @@ -956,10 +956,10 @@ "sha256": "04b90cfb1e42ae7aebfdbac44b2b58845969c98240c27636213d619af5cb1510" }, "scripts/app-api-snapshot.sh": { - "bytes": 2208, - "git_blob": "3357e4729d70642ae6b600fdd576df3766c8c0bc", + "bytes": 2204, + "git_blob": "57cefe0d1867da964e90c5d5d07916a9057c7732", "mode": "100755", - "sha256": "6e657582fa823c6ae702f7241c9770c7ef152f3c403b8bbc800964061b35e829" + "sha256": "77c04fc15b741eb7db11294517b9fa509b11df39190b32a1fb0147434b0e48e1" }, "scripts/app_dependency_graph.py": { "bytes": 4524, @@ -1004,10 +1004,10 @@ "sha256": "e032f5d2f92de7b5e9761196c30ff2209108231d664a95a25a653c353b16f9fa" }, "scripts/ffi_source.py": { - "bytes": 12484, - "git_blob": "23f108b6a7d18ddce608ede5f7de35eaaed1ed56", + "bytes": 12532, + "git_blob": "9287d6f6f3f924f2a6572def96dd3d3bf9554c7f", "mode": "100644", - "sha256": "05621be0df39968db8706ca1d7a6527e569f1019bdd5b8fc081ecdbf1c0027c6" + "sha256": "8470f7dba319fad00e7ed257d144917e7084330285b1bd706540c554899c5d34" }, "scripts/generate-project.sh": { "bytes": 2964, @@ -1015,6 +1015,12 @@ "mode": "100755", "sha256": "36f5b334f88928c2bb96d5b0f9e560b148c0b4d449696c13ef0d201f1355db3e" }, + "scripts/legacy_identifiers.py": { + "bytes": 9237, + "git_blob": "a52415f3391d69ea278673e7531faa4f38814587", + "mode": "100644", + "sha256": "743736ae176e84c7c46ba53bebe23f6435b5969d310bb57562b636c435ba8d2b" + }, "scripts/linux-shared-rust.sh": { "bytes": 1313, "git_blob": "cba195bbea7afecf58375b8b2d72906057219e47", @@ -1034,10 +1040,10 @@ "sha256": "fff99e755f35fa9f00708427b1b29290c0ecc2733c0ea070f5807ec7c37f6f11" }, "scripts/package_contract.py": { - "bytes": 26134, - "git_blob": "5dae06288f14200c699d8f043feb7050bd903dd8", + "bytes": 25795, + "git_blob": "d68f5df2cc26d252be264fe55ece761070d02bee", "mode": "100755", - "sha256": "d89ea3b8cd0fbc0ef179b8a07c0ef75ed11218fe7565c058fd94b4e4a6707874" + "sha256": "b88df13f9c0da49fc535cf9997c668ec1357e9dbf6db2b472ac29fc3304c888c" }, "scripts/persona-verifier.sh": { "bytes": 240, @@ -1046,16 +1052,16 @@ "sha256": "834fa861892b9185abdf99d39a1aa9a19eba95447afd2c71ac6ffabcd1854a74" }, "scripts/persona-verifier/pyproject.toml": { - "bytes": 209, - "git_blob": "1b6cf802a836c378049b52f71d66b092cac328d9", + "bytes": 205, + "git_blob": "3ad15bb37144d52196e66dcbfaf59f031fe5eaf7", "mode": "100644", - "sha256": "055c3ee021aa610715d40b978df63eac1b7b09b48f34362415eb181077a36d89" + "sha256": "be776357c7adfda4c28036739ef258741a7329e8da03db07bee354561fcda251" }, "scripts/persona-verifier/uv.lock": { - "bytes": 19438, - "git_blob": "71acde851705df211f19c17ba5f02cc99e9efab9", + "bytes": 19434, + "git_blob": "2b6aea10b8ea24b6cdc1075e78ed7a37fb88249d", "mode": "100644", - "sha256": "eacbed52be8f820563aa46092533d123a724f49bacf549f8109e4eb31443d6fb" + "sha256": "af175b24907863f548d0d93a585ceab8d65a686e5152f70739384dd5b8ef2b96" }, "scripts/release-evidence.sh": { "bytes": 8527, @@ -1076,10 +1082,10 @@ "sha256": "1803572abdb2e22bedd275724edae5f09c523b132bc59086aacca0f5183905d0" }, "scripts/swift-quality.sh": { - "bytes": 1920, - "git_blob": "ba64f9f2d37b66e4d7ec3dd3488b9947bd3a2c68", + "bytes": 1989, + "git_blob": "1dc67baa1ccdb27e2816ca139aa0cb177bb40806", "mode": "100755", - "sha256": "b57d6a6499f65ee7ce2c94b2b103c5de84be7a4ff79af2c8e5fde9ac827ed4f9" + "sha256": "63df08c308431557f4ca570d81f63167e5c02c084293c39fe877a66ff6e57280" }, "scripts/test_app_dependency_graph.py": { "bytes": 4007, @@ -1105,6 +1111,12 @@ "mode": "100644", "sha256": "6f0196a26af8c1e63ce400ca351c56e95f1122142cecb5fd8d09f4bdc9a2fb83" }, + "scripts/test_legacy_identifiers.py": { + "bytes": 5760, + "git_blob": "2822ae9309e539dd73ae19167f723a7014576408", + "mode": "100644", + "sha256": "4305514195999645f6e29e069f348e54fbd170b06a81754658f7c65dd4c51b64" + }, "scripts/test_local_social_fixture.py": { "bytes": 50487, "git_blob": "7aac3d824e1c395e467ae46e03ad44d4ca66c43d", @@ -1118,25 +1130,31 @@ "sha256": "1a5384a6109d495477dd7848a367c2452f87c36e46dbab2c20b98940a4d4fed6" }, "scripts/test_package_contract.py": { - "bytes": 9119, - "git_blob": "2136f76eb701b68ec9dca85d4c8d25c9bcf6e4fa", + "bytes": 8414, + "git_blob": "02af049946156f96c79c4b4129f7e4d532be2dc6", "mode": "100644", - "sha256": "c4d602dc30b0865d6eab40b4703712d237911e64ec95f450f316faea7e123b49" + "sha256": "9073f8edaa80c71f7c1f718c4dcff954a30ac42218fbd19378803ecfb9b3b33f" }, "scripts/verify-package-contract.sh": { - "bytes": 1388, - "git_blob": "4a20535a8810a4d03d7ebf0cec5a2f55c1f3d2ac", + "bytes": 1427, + "git_blob": "5b414baa6fad6b1308b028ac02670817bcace5aa", "mode": "100755", - "sha256": "0bceebe7678eb44ab8518bda8cfcfd76190ee341982d66ba1c940c3461f0944d" + "sha256": "ba4d48ce7f3c31340e527a2e1c832818e007c8ccfc7e5493916d98a1ae855ac7" }, "scripts/xcode.sh": { "bytes": 21183, "git_blob": "2cd94ce793f8dd4591bc7f410cfb06ca39ed7025", "mode": "100755", "sha256": "b052a73a824e8f8b26af2646a4758f13655e04de9551a8271890d3cf2b63209d" + }, + "test-fixtures/legacy-identifiers.v1.json": { + "bytes": 109807, + "git_blob": "df2cff39e67e170db7c57b3c4d5e57149dbc9c69", + "mode": "100644", + "sha256": "84a114a8803778895a504655d0836ffd8d71dfc8953b06911ca78f93f711be6c" } }, "policy": "staged_inputs", - "tree": "b9b252434caf06c74f2d6bd9fbfd569784f22745" + "tree": "5364e38f7c08b01eef0d63a2eb48383215e887d8" } } diff --git a/TeraFFI/source/aarch64-apple-ios.json b/TeraFFI/source/aarch64-apple-ios.json @@ -518,10 +518,10 @@ "sha256": "7e9bc238cc27041e3f6b63d40d28712f3276bf0b3f3deb7609f4fb962db4f4c1" }, "TeraFFI/producer.toml": { - "bytes": 917, - "git_blob": "228af307ce185c6abd1b62e76bdf068800a41782", + "bytes": 963, + "git_blob": "87e4526a6595ded35ea62b6ef1b3aa67b923b515", "mode": "100644", - "sha256": "23de4d65f7ca7d1dbf66610c24ff0f833f5c9e95bb31d933a593822a62358ecd" + "sha256": "c497212bfb54d997bbf5938cd04c7a41c3ef2ce7adaef861fc07e2565cd26661" }, "TeraFFI/scripts/verify-installed-artifacts.sh": { "bytes": 255, @@ -734,10 +734,10 @@ "sha256": "f44553f903d7d068de8c077b5908446a369d8c59a5f82d0746828585af611a7f" }, "core/crates/tera_ffi/src/logging.rs": { - "bytes": 9317, - "git_blob": "1f70a805e615aae34dae811c8bf84cf22475903a", + "bytes": 9313, + "git_blob": "aaed371f0f074bfa2d2ccb6d5e958c75d066fff6", "mode": "100644", - "sha256": "e3b4cde336489eeb76b7ef76967b65359a1de9221d90f4ff3c66917c91a9e580" + "sha256": "59911489707924bb42302894800a77551f9038b56f783e4c634bd66d800f92a2" }, "core/crates/tera_ffi/src/logging/writer.rs": { "bytes": 15077, @@ -764,10 +764,10 @@ "sha256": "4c0800499f248e61011f7ffe78968e0d8afb13ddfe2332390fb25de444f7e6b7" }, "core/crates/tera_ffi/src/subscription.rs": { - "bytes": 10305, - "git_blob": "2ad8a6bc15138eef15d080b4c80bd984da4892f5", + "bytes": 10301, + "git_blob": "7ade122c46c8bd36480b9e7540a013ed45ced3e7", "mode": "100644", - "sha256": "87dd5a2b0437357a959f221779a8d962f8abc6d836e7250c01c74d62cb930237" + "sha256": "4c57fca52ef318b6b052aebe7ff7e32566d4546c059990d2bd141c429bfb325f" }, "core/crates/tera_ffi/tests/compatibility.rs": { "bytes": 7548, @@ -956,10 +956,10 @@ "sha256": "04b90cfb1e42ae7aebfdbac44b2b58845969c98240c27636213d619af5cb1510" }, "scripts/app-api-snapshot.sh": { - "bytes": 2208, - "git_blob": "3357e4729d70642ae6b600fdd576df3766c8c0bc", + "bytes": 2204, + "git_blob": "57cefe0d1867da964e90c5d5d07916a9057c7732", "mode": "100755", - "sha256": "6e657582fa823c6ae702f7241c9770c7ef152f3c403b8bbc800964061b35e829" + "sha256": "77c04fc15b741eb7db11294517b9fa509b11df39190b32a1fb0147434b0e48e1" }, "scripts/app_dependency_graph.py": { "bytes": 4524, @@ -1004,10 +1004,10 @@ "sha256": "e032f5d2f92de7b5e9761196c30ff2209108231d664a95a25a653c353b16f9fa" }, "scripts/ffi_source.py": { - "bytes": 12484, - "git_blob": "23f108b6a7d18ddce608ede5f7de35eaaed1ed56", + "bytes": 12532, + "git_blob": "9287d6f6f3f924f2a6572def96dd3d3bf9554c7f", "mode": "100644", - "sha256": "05621be0df39968db8706ca1d7a6527e569f1019bdd5b8fc081ecdbf1c0027c6" + "sha256": "8470f7dba319fad00e7ed257d144917e7084330285b1bd706540c554899c5d34" }, "scripts/generate-project.sh": { "bytes": 2964, @@ -1015,6 +1015,12 @@ "mode": "100755", "sha256": "36f5b334f88928c2bb96d5b0f9e560b148c0b4d449696c13ef0d201f1355db3e" }, + "scripts/legacy_identifiers.py": { + "bytes": 9237, + "git_blob": "a52415f3391d69ea278673e7531faa4f38814587", + "mode": "100644", + "sha256": "743736ae176e84c7c46ba53bebe23f6435b5969d310bb57562b636c435ba8d2b" + }, "scripts/linux-shared-rust.sh": { "bytes": 1313, "git_blob": "cba195bbea7afecf58375b8b2d72906057219e47", @@ -1034,10 +1040,10 @@ "sha256": "fff99e755f35fa9f00708427b1b29290c0ecc2733c0ea070f5807ec7c37f6f11" }, "scripts/package_contract.py": { - "bytes": 26134, - "git_blob": "5dae06288f14200c699d8f043feb7050bd903dd8", + "bytes": 25795, + "git_blob": "d68f5df2cc26d252be264fe55ece761070d02bee", "mode": "100755", - "sha256": "d89ea3b8cd0fbc0ef179b8a07c0ef75ed11218fe7565c058fd94b4e4a6707874" + "sha256": "b88df13f9c0da49fc535cf9997c668ec1357e9dbf6db2b472ac29fc3304c888c" }, "scripts/persona-verifier.sh": { "bytes": 240, @@ -1046,16 +1052,16 @@ "sha256": "834fa861892b9185abdf99d39a1aa9a19eba95447afd2c71ac6ffabcd1854a74" }, "scripts/persona-verifier/pyproject.toml": { - "bytes": 209, - "git_blob": "1b6cf802a836c378049b52f71d66b092cac328d9", + "bytes": 205, + "git_blob": "3ad15bb37144d52196e66dcbfaf59f031fe5eaf7", "mode": "100644", - "sha256": "055c3ee021aa610715d40b978df63eac1b7b09b48f34362415eb181077a36d89" + "sha256": "be776357c7adfda4c28036739ef258741a7329e8da03db07bee354561fcda251" }, "scripts/persona-verifier/uv.lock": { - "bytes": 19438, - "git_blob": "71acde851705df211f19c17ba5f02cc99e9efab9", + "bytes": 19434, + "git_blob": "2b6aea10b8ea24b6cdc1075e78ed7a37fb88249d", "mode": "100644", - "sha256": "eacbed52be8f820563aa46092533d123a724f49bacf549f8109e4eb31443d6fb" + "sha256": "af175b24907863f548d0d93a585ceab8d65a686e5152f70739384dd5b8ef2b96" }, "scripts/release-evidence.sh": { "bytes": 8527, @@ -1076,10 +1082,10 @@ "sha256": "1803572abdb2e22bedd275724edae5f09c523b132bc59086aacca0f5183905d0" }, "scripts/swift-quality.sh": { - "bytes": 1920, - "git_blob": "ba64f9f2d37b66e4d7ec3dd3488b9947bd3a2c68", + "bytes": 1989, + "git_blob": "1dc67baa1ccdb27e2816ca139aa0cb177bb40806", "mode": "100755", - "sha256": "b57d6a6499f65ee7ce2c94b2b103c5de84be7a4ff79af2c8e5fde9ac827ed4f9" + "sha256": "63df08c308431557f4ca570d81f63167e5c02c084293c39fe877a66ff6e57280" }, "scripts/test_app_dependency_graph.py": { "bytes": 4007, @@ -1105,6 +1111,12 @@ "mode": "100644", "sha256": "6f0196a26af8c1e63ce400ca351c56e95f1122142cecb5fd8d09f4bdc9a2fb83" }, + "scripts/test_legacy_identifiers.py": { + "bytes": 5760, + "git_blob": "2822ae9309e539dd73ae19167f723a7014576408", + "mode": "100644", + "sha256": "4305514195999645f6e29e069f348e54fbd170b06a81754658f7c65dd4c51b64" + }, "scripts/test_local_social_fixture.py": { "bytes": 50487, "git_blob": "7aac3d824e1c395e467ae46e03ad44d4ca66c43d", @@ -1118,25 +1130,31 @@ "sha256": "1a5384a6109d495477dd7848a367c2452f87c36e46dbab2c20b98940a4d4fed6" }, "scripts/test_package_contract.py": { - "bytes": 9119, - "git_blob": "2136f76eb701b68ec9dca85d4c8d25c9bcf6e4fa", + "bytes": 8414, + "git_blob": "02af049946156f96c79c4b4129f7e4d532be2dc6", "mode": "100644", - "sha256": "c4d602dc30b0865d6eab40b4703712d237911e64ec95f450f316faea7e123b49" + "sha256": "9073f8edaa80c71f7c1f718c4dcff954a30ac42218fbd19378803ecfb9b3b33f" }, "scripts/verify-package-contract.sh": { - "bytes": 1388, - "git_blob": "4a20535a8810a4d03d7ebf0cec5a2f55c1f3d2ac", + "bytes": 1427, + "git_blob": "5b414baa6fad6b1308b028ac02670817bcace5aa", "mode": "100755", - "sha256": "0bceebe7678eb44ab8518bda8cfcfd76190ee341982d66ba1c940c3461f0944d" + "sha256": "ba4d48ce7f3c31340e527a2e1c832818e007c8ccfc7e5493916d98a1ae855ac7" }, "scripts/xcode.sh": { "bytes": 21183, "git_blob": "2cd94ce793f8dd4591bc7f410cfb06ca39ed7025", "mode": "100755", "sha256": "b052a73a824e8f8b26af2646a4758f13655e04de9551a8271890d3cf2b63209d" + }, + "test-fixtures/legacy-identifiers.v1.json": { + "bytes": 109807, + "git_blob": "df2cff39e67e170db7c57b3c4d5e57149dbc9c69", + "mode": "100644", + "sha256": "84a114a8803778895a504655d0836ffd8d71dfc8953b06911ca78f93f711be6c" } }, "policy": "staged_inputs", - "tree": "b9b252434caf06c74f2d6bd9fbfd569784f22745" + "tree": "5364e38f7c08b01eef0d63a2eb48383215e887d8" } } diff --git a/TeraTests/TeraAddStoreTests.swift b/TeraTests/TeraAddStoreTests.swift @@ -909,7 +909,7 @@ private actor AddBackend: TeraRuntimeBackend { configFingerprint: String(repeating: "f", count: 64) ), blossomEvidence: nil, - crateName: "radroots_mobile_ffi", + crateName: "tera_ffi", crateVersion: "0.1.0-alpha", isClosed: closed ) diff --git a/TeraTests/TeraLifecycleTests.swift b/TeraTests/TeraLifecycleTests.swift @@ -164,7 +164,7 @@ final class TeraLifecycleTests: XCTestCase { ), blossomConfiguration: nil, blossomEvidence: nil, - crateName: "radroots_mobile_ffi", + crateName: "tera_ffi", crateVersion: "0.1.0-alpha", isClosed: false ) diff --git a/TeraTests/TeraMediaStoreTests.swift b/TeraTests/TeraMediaStoreTests.swift @@ -217,7 +217,7 @@ private actor MediaBackend: TeraRuntimeBackend { relay: nil, blossomConfiguration: nil, blossomEvidence: nil, - crateName: "radroots_mobile_ffi", + crateName: "tera_ffi", crateVersion: "0.1.0-alpha", isClosed: closed ) diff --git a/TeraTests/TeraRuntimeClientTests.swift b/TeraTests/TeraRuntimeClientTests.swift @@ -512,7 +512,7 @@ private actor TestRuntimeBackend: TeraRuntimeBackend { relay: nil, blossomConfiguration: nil, blossomEvidence: nil, - crateName: "radroots_mobile_ffi", + crateName: "tera_ffi", crateVersion: "0.1.0-alpha", isClosed: false ) diff --git a/TeraTests/TeraSupportingStoreTests.swift b/TeraTests/TeraSupportingStoreTests.swift @@ -229,7 +229,7 @@ private actor SupportingBackend: TeraRuntimeBackend { relay: nil, blossomConfiguration: nil, blossomEvidence: nil, - crateName: "radroots_mobile_ffi", + crateName: "tera_ffi", crateVersion: "0.1.0-alpha", isClosed: closed ) diff --git a/TeraTests/TeraTodayStoreTests.swift b/TeraTests/TeraTodayStoreTests.swift @@ -306,7 +306,7 @@ private actor TodayBackend: TeraRuntimeBackend { relay: nil, blossomConfiguration: nil, blossomEvidence: nil, - crateName: "radroots_mobile_ffi", + crateName: "tera_ffi", crateVersion: "0.1.0-alpha", isClosed: closed ) diff --git a/core/crates/tera_ffi/src/logging.rs b/core/crates/tera_ffi/src/logging.rs @@ -136,7 +136,7 @@ fn build_file_writer( let (writer, guard) = tracing_appender::non_blocking::NonBlockingBuilder::default() .buffered_lines_limit(8192) .lossy(false) - .thread_name("radroots-app-log-writer") + .thread_name("tera-app-log-writer") .finish(writer); Ok((Some(writer), Some(guard))) } diff --git a/core/crates/tera_ffi/src/subscription.rs b/core/crates/tera_ffi/src/subscription.rs @@ -66,7 +66,7 @@ impl SubscriptionHub { let observer: Arc<dyn TeraRuntimeObserver> = Arc::from(observer); let hub = Arc::downgrade(self); std::thread::Builder::new() - .name(format!("radroots-ffi-observer-{id}")) + .name(format!("tera-ffi-observer-{id}")) .spawn(move || { while let Ok(change) = receiver.recv() { if catch_unwind(AssertUnwindSafe(|| observer.on_change(change))).is_err() { diff --git a/release/provenance.json b/release/provenance.json @@ -2,7 +2,7 @@ "artifacts": { "app_api_sha256": "020924097c0d7efc33128cb8fd3d3b2026d95f57c44da71880e585aff80f070b", "ffi_api_sha256": "6542c8294920b3c41e987619de58690e2af16896079910b657129d3573b34e68", - "ffi_provenance_sha256": "9179e5238481b79193477fe555c886d9825440942bd8013fd0c399fc5b547147", + "ffi_provenance_sha256": "c338c32c516a767f1e1215f5c6b8841927d86c38cdd88ca5c598986a0ca2de89", "info_plist_sha256": "15ef08b1cdd1096cfb9eeaf5be5bf8f814807a7ca9350bbbb47860fa72ec13ef", "privacy_manifest_sha256": "a331d51864743ebe4e00dd22360b4a538b6b3ac26a6b3eb54094e60a36959a12", "sbom_sha256": "6b5ce897d5273290febc8b831663e12dea759cb0084f182ba7949e1c593fc410", @@ -22,7 +22,7 @@ "lib_revision": "ad17b7d3455a7147cfa303d976fc5c70c3a4c0cb", "source_date_epoch": 1787871027, "swift_package_lock_sha256": "94ae067a374726cdaf6b4ca0a5e44663c57fcdc5334060c5ffef5e79cfbf04c0", - "tera_ffi_source_tree": "b9b252434caf06c74f2d6bd9fbfd569784f22745", + "tera_ffi_source_tree": "5364e38f7c08b01eef0d63a2eb48383215e887d8", "xcode_package_lock_sha256": "c7f41934ea25f7a287bdc4f3a6ecabbf09a3a0bdd0f5a3e58183f355ca814096" }, "version": "0.1.0-alpha" diff --git a/scripts/app-api-snapshot.sh b/scripts/app-api-snapshot.sh @@ -15,7 +15,7 @@ for variable in XCODE_DERIVED_DATA XCODE_SOURCE_PACKAGES; do done repo_root=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd) -work_dir="$XCODE_DERIVED_DATA/radroots-app-api" +work_dir="$XCODE_DERIVED_DATA/tera-app-api" symbol_dir="$work_dir/symbols" rendered="$work_dir/TeraApp.symbols.json" snapshot="$repo_root/api/TeraApp.symbols.json" diff --git a/scripts/ffi_source.py b/scripts/ffi_source.py @@ -15,6 +15,7 @@ import package_contract as contract MAX_BYTES = 2 * 1024 * 1024 MAX_INPUTS = 2048 INPUTS = [ + "test-fixtures/legacy-identifiers.v1.json", "Cargo.toml", "Cargo.lock", "rust-toolchain.toml", diff --git a/scripts/legacy_identifiers.py b/scripts/legacy_identifiers.py @@ -0,0 +1,284 @@ +"""Exact legacy-name exceptions, separate from current app naming.""" + +from __future__ import annotations + +import collections +import json +import re +import subprocess +import tempfile +from pathlib import Path +from typing import Any + +POLICY = "test-fixtures/legacy-identifiers.v1.json" +MAX_BYTES = 2 * 1024 * 1024 +MAX_FILES = 4096 +ROOTS = ( + "Tera/", + "TeraTests/", + "TeraUITests/", + "TeraPublicAPITests/", + "core/crates/", + "scripts/", + "TeraFFI/scripts/", +) +ROOT_FILES = { + "AGENTS.md", + "README.md", + "Cargo.toml", + "Package.swift", + "project.yml", + "Makefile", + "TeraFFI/Makefile", + "TeraFFI/producer.toml", + "radroots.lib.source-lock.v1.toml", +} +GENERATED_OR_TOOL_CACHE = ( + "Tera/Generated/", + "Tera/Frameworks/", + "scripts/persona-verifier/.venv/", +) +TEXT_SUFFIXES = { + ".swift", + ".rs", + ".py", + ".sh", + ".toml", + ".plist", + ".xcconfig", + ".strings", + ".json", + ".yml", + ".md", +} +IDENTIFIER = re.compile(r"(?i)\b[a-z0-9_]*radroots[a-z0-9_]*(?:[.-][a-z0-9_-]+)*") +DECLARATION = re.compile( + r"(?m)^\s*(?:(?:public|private|internal|fileprivate|final|open|indirect|" + r"nonisolated|static|async|unsafe|pub(?:\([^\n)]*\))?)\s+)*" + r"(?:class|struct|enum|actor|protocol|typealias|trait|type|fn|func|static\s+(?:var|let))\s+" + r"(?i:radroots)[a-zA-Z0-9_]*\b" +) +CATEGORY_FIELDS = {"owner", "reason", "reader", "removal_condition"} + + +class LegacyIdentifierError(ValueError): + """A source-free naming contract rejection.""" + + +def require(condition: bool, message: str) -> None: + if not condition: + raise LegacyIdentifierError(message) + + +def safe_path(value: Any) -> str: + require(isinstance(value, str) and bool(value), "legacy path is absent") + path = Path(value) + require( + not path.is_absolute() and ".." not in path.parts and str(path) == value, + "legacy path is unsafe", + ) + require( + not any(character in value for character in "*?[]\0\n"), + "legacy path must be exact", + ) + return value + + +def selected(path: str) -> bool: + if path.startswith(GENERATED_OR_TOOL_CACHE) or "__pycache__" in Path(path).parts: + return False + return path in ROOT_FILES or ( + path.startswith(ROOTS) and Path(path).suffix in TEXT_SUFFIXES + ) + + +def read_regular(root: Path, relative: str) -> bytes: + path = root + for part in Path(safe_path(relative)).parts: + path /= part + require(not path.is_symlink(), "legacy source contains a symlink") + require(path.is_file(), "legacy source is not a regular file") + size = path.stat().st_size + require(size <= MAX_BYTES, "legacy source exceeds its byte bound") + value = path.read_bytes() + require(len(value) == size, "legacy source changed during inspection") + return value + + +def git_paths(root: Path, *, ignored: bool = False) -> list[str]: + flags = ["--others", "--ignored"] if ignored else ["--cached", "--others"] + paths = [*ROOTS, *sorted(ROOT_FILES)] + paths.extend(f":(exclude,glob){path}**" for path in GENERATED_OR_TOOL_CACHE) + with tempfile.TemporaryFile() as output, tempfile.TemporaryFile() as errors: + try: + result = subprocess.run( + ["git", "ls-files", "-z", *flags, "--exclude-standard", "--", *paths], + cwd=root, + stdin=subprocess.DEVNULL, + stdout=output, + stderr=errors, + timeout=30, + check=False, + ) + except (OSError, subprocess.TimeoutExpired) as error: + raise LegacyIdentifierError( + "legacy source inventory is unavailable" + ) from error + output.seek(0) + value = output.read(MAX_BYTES + 1) + require( + result.returncode == 0 and len(value) <= MAX_BYTES, + "legacy source inventory failed or exceeded its bound", + ) + return sorted(set(value.decode("utf-8").split("\0")) - {""}) + + +def source_texts(root: Path) -> dict[str, str]: + require( + not any(selected(path) for path in git_paths(root, ignored=True)), + "ignored app source cannot bypass the legacy guard", + ) + paths = [path for path in git_paths(root) if selected(path)] + require( + 0 < len(paths) <= MAX_FILES, "legacy source file inventory exceeds its bound" + ) + sources = {} + total = 0 + for path in paths: + value = read_regular(root, path) + total += len(value) + require(total <= 32 * MAX_BYTES, "legacy source aggregate exceeds its bound") + sources[path] = value.decode("utf-8") + return sources + + +def categories(value: Any) -> set[str]: + require(isinstance(value, dict) and bool(value), "legacy categories are absent") + for item in value.values(): + require( + isinstance(item, dict) and set(item) == CATEGORY_FIELDS, + "legacy category metadata differs", + ) + require( + all(isinstance(text, str) and bool(text.strip()) for text in item.values()), + "legacy category owner, reader or removal condition is absent", + ) + return set(value) + + +def occurrences(value: Any, identifier: str) -> dict[tuple[str, str], int]: + require(isinstance(value, list) and bool(value), "legacy occurrences are absent") + result = {} + for item in value: + require( + isinstance(item, dict) and set(item) == {"path", "count"}, + "legacy occurrence fields differ", + ) + path = safe_path(item["path"]) + require( + selected(path), "legacy exception is outside the inspected source scope" + ) + count = item["count"] + require( + type(count) is int and 0 < count <= 10000, + "legacy occurrence count is invalid", + ) + key = (path, identifier) + require(key not in result, "legacy occurrence is duplicated") + result[key] = count + return result + + +def policy_index(policy: Any) -> dict[tuple[str, str], int]: + require( + isinstance(policy, dict) + and set(policy) == {"schema", "baseline_commit", "categories", "entries"}, + "legacy policy fields differ", + ) + require( + policy["schema"] == "tera.legacy-identifiers.v1", "legacy policy schema differs" + ) + require( + isinstance(policy["baseline_commit"], str) + and re.fullmatch(r"[0-9a-f]{40}", policy["baseline_commit"]) is not None, + "legacy baseline revision is invalid", + ) + kinds = categories(policy["categories"]) + entries = policy["entries"] + require( + isinstance(entries, list) and 0 < len(entries) <= 1024, + "legacy entry inventory exceeds its bound", + ) + result = {} + seen = set() + for item in entries: + require( + isinstance(item, dict) + and set(item) == {"identifier", "category", "occurrences"}, + "legacy entry fields differ", + ) + identifier = item["identifier"] + require( + isinstance(identifier, str) + and IDENTIFIER.fullmatch(identifier) is not None, + "legacy identifier must be exact", + ) + require(identifier not in seen, "legacy identifier is duplicated") + require( + isinstance(item["category"], str) and item["category"] in kinds, + "legacy category is unknown", + ) + seen.add(identifier) + result.update(occurrences(item["occurrences"], identifier)) + return result + + +def inspect_sources(sources: dict[str, str]) -> collections.Counter: + observed = collections.Counter() + for path, text in sources.items(): + if Path(path).suffix in {".swift", ".rs"}: + require( + not Path(path).name.lower().startswith("radroots"), + "app-owned source filename uses the legacy brand", + ) + require( + DECLARATION.search(text) is None, + "app-owned declaration uses the legacy brand", + ) + observed.update((path, match[0]) for match in IDENTIFIER.finditer(text)) + return observed + + +def validate(policy: Any, sources: dict[str, str]) -> dict[str, int]: + expected = policy_index(policy) + observed = inspect_sources(sources) + require( + set(observed) <= set(expected), "unapproved legacy identifier or source path" + ) + require( + observed == expected, + "legacy exception is stale or its occurrence count differs", + ) + return { + "identifiers": len(policy["entries"]), + "source_identifier_pairs": len(expected), + "occurrences": sum(observed.values()), + } + + +def unique_object(pairs: list[tuple[str, Any]]) -> dict[str, Any]: + result = {} + for key, value in pairs: + require(key not in result, "legacy JSON field is duplicated") + result[key] = value + return result + + +def verify(root: Path) -> dict[str, int]: + try: + policy = json.loads(read_regular(root, POLICY), object_pairs_hook=unique_object) + return validate(policy, source_texts(root)) + except (OSError, UnicodeError, json.JSONDecodeError) as error: + raise LegacyIdentifierError( + "legacy source or policy cannot be decoded" + ) from error diff --git a/scripts/package_contract.py b/scripts/package_contract.py @@ -18,6 +18,7 @@ from pathlib import Path from typing import Any import app_dependency_graph +import legacy_identifiers MAX_CONTRACT_BYTES = 2 * 1024 * 1024 GIT_REVISION = re.compile(r"^[0-9a-f]{40}$") @@ -95,24 +96,6 @@ def _exact(value: object, expected: object, key: str) -> None: raise PackageContractError(f"structured contract field differs: {key}") -def parse_make_assignments(text: str) -> dict[str, str]: - assignments: dict[str, str] = {} - expression = re.compile(r"^override ([A-Z0-9_]+) := ([^\r\n]+)$") - for line in text.splitlines(): - match = expression.fullmatch(line) - if match is None: - if line.strip() and not line.lstrip().startswith("#"): - raise PackageContractError( - "source-lock contains an unsupported statement" - ) - continue - key, value = match.groups() - if key in assignments: - raise PackageContractError("source-lock assignment is duplicated") - assignments[key] = value - return assignments - - def parse_xcconfig_assignments(text: str) -> dict[str, str]: assignments: dict[str, str] = {} expression = re.compile(r"^([A-Z][A-Z0-9_]*)\s*=\s*(\S(?:.*\S)?)$") @@ -316,6 +299,9 @@ def _validate_app_plist(document: dict[str, Any]) -> None: if forbidden in document: raise PackageContractError(f"forbidden plist field is present: {forbidden}") + _exact(document.get("CFBundleDisplayName"), "Tera", "app display name") + _exact(document.get("CFBundleName"), "$(PRODUCT_NAME)", "app bundle name") + def _validate_ui_test_plist(document: dict[str, Any]) -> None: required = { @@ -643,6 +629,10 @@ def _verify_required_files(root: Path) -> None: def verify(repo_root: Path) -> tuple[str, str]: root = repo_root.resolve() _verify_repository_layout(root) + try: + legacy_identifiers.verify(root) + except legacy_identifiers.LegacyIdentifierError as error: + raise PackageContractError(str(error)) from error _validate_app_workspace(_cargo_workspace(root), root) release_version, _ = _verify_cargo_and_source(root) apple_revision = _verify_apple_dependencies(root) diff --git a/scripts/persona-verifier/pyproject.toml b/scripts/persona-verifier/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "radroots-persona-verifier" +name = "tera-persona-verifier" version = "0.0.0" requires-python = "==3.14.7" dependencies = ["jsonschema==4.26.0"] diff --git a/scripts/persona-verifier/uv.lock b/scripts/persona-verifier/uv.lock @@ -39,7 +39,7 @@ wheels = [ ] [[package]] -name = "radroots-persona-verifier" +name = "tera-persona-verifier" version = "0.0.0" source = { virtual = "." } dependencies = [ diff --git a/scripts/swift-quality.sh b/scripts/swift-quality.sh @@ -30,6 +30,8 @@ readonly -a PYTHON_QUALITY_PATHS=( scripts/test_ffi_provenance.py scripts/maintainability_ratchet.py scripts/package_contract.py + scripts/legacy_identifiers.py + scripts/test_legacy_identifiers.py scripts/app_dependency_graph.py scripts/test_app_dependency_graph.py scripts/test_maintainability_ratchet.py diff --git a/scripts/test_legacy_identifiers.py b/scripts/test_legacy_identifiers.py @@ -0,0 +1,130 @@ +from __future__ import annotations + +import copy +import json +import plistlib +import sys +import tempfile +import unittest +from pathlib import Path + +SCRIPTS = Path(__file__).resolve().parent +if str(SCRIPTS) not in sys.path: + sys.path.insert(0, str(SCRIPTS)) + +import legacy_identifiers as legacy # noqa: E402 +import package_contract as contract # noqa: E402 + + +class LegacyIdentifierTests(unittest.TestCase): + def setUp(self) -> None: + self.path = "Tera/Runtime/TeraExample.swift" + self.sources = { + self.path: 'import RadrootsKit\nlet oldKey = "radroots.mobile.settings.v1"\n' + } + self.policy = { + "schema": "tera.legacy-identifiers.v1", + "baseline_commit": "a" * 40, + "categories": { + "synthetic": { + "owner": "synthetic public producer", + "reason": "synthetic shared API and persisted reader", + "reader": "synthetic app consumer", + "removal_condition": "explicit versioned reader migration", + } + }, + "entries": [ + { + "identifier": identifier, + "category": "synthetic", + "occurrences": [{"path": self.path, "count": 1}], + } + for identifier in ("RadrootsKit", "radroots.mobile.settings.v1") + ], + } + + def test_shared_and_persisted_names_are_exact_exceptions(self) -> None: + self.assertEqual(legacy.validate(self.policy, self.sources)["identifiers"], 2) + + def test_unknown_identifier_is_rejected_even_in_an_allowed_file(self) -> None: + sources = { + self.path: self.sources[self.path] + 'let old = "radroots.unapproved.v1"\n' + } + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "unapproved"): + legacy.validate(self.policy, sources) + + def test_known_identifier_cannot_expand_to_another_file(self) -> None: + sources = {**self.sources, "Tera/New.swift": "import RadrootsKit\n"} + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "unapproved"): + legacy.validate(self.policy, sources) + + def test_removed_or_duplicated_occurrences_require_review(self) -> None: + for text in ("", self.sources[self.path] * 2): + with self.subTest(text=text): + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "stale"): + legacy.validate(self.policy, {self.path: text}) + + def test_shared_name_exception_cannot_authorize_an_app_declaration(self) -> None: + for declaration in ( + "struct RadrootsKit {}", + "public actor RadrootsKit {}", + "pub struct RadrootsKit;", + "private func RadrootsKit() {}", + "private static var RadrootsKit: Int { 0 }", + ): + with self.subTest(declaration=declaration): + with self.assertRaisesRegex( + legacy.LegacyIdentifierError, "declaration" + ): + legacy.validate(self.policy, {self.path: declaration}) + + def test_missing_owner_reader_or_removal_condition_is_rejected(self) -> None: + for field in legacy.CATEGORY_FIELDS: + with self.subTest(field=field): + policy = copy.deepcopy(self.policy) + policy["categories"]["synthetic"][field] = "" + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "absent"): + legacy.validate(policy, self.sources) + + def test_wildcard_and_traversal_exceptions_are_rejected(self) -> None: + for path in ("Tera/*.swift", "../Tera/Runtime/TeraExample.swift"): + with self.subTest(path=path): + policy = copy.deepcopy(self.policy) + policy["entries"][0]["occurrences"][0]["path"] = path + with self.assertRaises(legacy.LegacyIdentifierError): + legacy.validate(policy, self.sources) + + def test_duplicate_policy_fields_and_rows_are_rejected(self) -> None: + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "duplicated"): + json.loads( + '{"schema": 1, "schema": 2}', object_pairs_hook=legacy.unique_object + ) + policy = copy.deepcopy(self.policy) + policy["entries"].append(policy["entries"][0]) + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "duplicated"): + legacy.validate(policy, self.sources) + + def test_source_parent_symlinks_and_oversized_files_fail_closed(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + (root / "outside").mkdir() + (root / "Tera").symlink_to(root / "outside", target_is_directory=True) + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "symlink"): + legacy.read_regular(root, "Tera/Example.swift") + (root / "large").write_bytes(b"x" * (legacy.MAX_BYTES + 1)) + with self.assertRaisesRegex(legacy.LegacyIdentifierError, "byte bound"): + legacy.read_regular(root, "large") + + def test_display_name_is_independent_of_legacy_namespace_exceptions(self) -> None: + document = plistlib.loads((SCRIPTS.parent / "Tera/Info.plist").read_bytes()) + document["CFBundleDisplayName"] = "Radroots" + with self.assertRaisesRegex(contract.PackageContractError, "display name"): + contract._validate_app_plist(document) + + def test_current_source_has_only_reviewed_legacy_occurrences(self) -> None: + result = legacy.verify(SCRIPTS.parent) + self.assertGreater(result["identifiers"], 0) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_package_contract.py b/scripts/test_package_contract.py @@ -162,20 +162,6 @@ class PackageContractTests(unittest.TestCase): with self.assertRaisesRegex(contract.PackageContractError, "purpose"): contract._validate_app_plist(document) - def test_duplicate_source_lock_assignment_is_rejected(self) -> None: - with self.assertRaisesRegex(contract.PackageContractError, "duplicated"): - contract.parse_make_assignments( - "override RADROOTS_FIELD_LIB_GIT_REV := " + "a" * 40 + "\n" - "override RADROOTS_FIELD_LIB_GIT_REV := " + "b" * 40 + "\n" - ) - - def test_source_lock_dead_assignment_is_rejected(self) -> None: - with self.assertRaisesRegex(contract.PackageContractError, "unsupported"): - contract.parse_make_assignments( - "ifneq ($(UNREACHABLE),)\n" - "override RADROOTS_FIELD_LIB_GIT_REV := " + "a" * 40 + "\nendif\n" - ) - def test_duplicate_xcconfig_assignment_is_rejected(self) -> None: with self.assertRaisesRegex(contract.PackageContractError, "duplicated"): contract.parse_xcconfig_assignments("FIELD = one\nFIELD = two\n") diff --git a/scripts/verify-package-contract.sh b/scripts/verify-package-contract.sh @@ -14,6 +14,7 @@ sh "$repo_root/scripts/ffi-provenance.sh" contract-check uv run --project "$python_project" --offline --frozen \ python -m unittest \ scripts/test_package_contract.py \ + scripts/test_legacy_identifiers.py \ scripts/test_app_dependency_graph.py \ scripts/test_ffi_provenance.py \ scripts/test_ffi_artifacts.py \ diff --git a/test-fixtures/legacy-identifiers.v1.json b/test-fixtures/legacy-identifiers.v1.json @@ -0,0 +1,4436 @@ +{ + "schema": "tera.legacy-identifiers.v1", + "baseline_commit": "d2cea073047adefac2f0d3cd0ace0a65a89bbc2d", + "categories": { + "shared_apple_api": { + "owner": "AppleKit public producer", + "reason": "Exact shared Apple API spellings are producer-owned; they are not Tera declarations.", + "reader": "Tera Swift adapters, custody/media/lifecycle integrations and their tests", + "removal_condition": "Only with an explicit shared Apple API migration and verified consumers; never a cosmetic application rename." + }, + "shared_foundation_api": { + "owner": "Radroots public foundation producers", + "reason": "Published crate, protocol, DTO, manifest and source-lock identifiers remain shared contracts.", + "reader": "Tera Rust/FFI adapters, source/graph verifiers and generated artifact readers", + "removal_condition": "Only with an explicit shared producer contract revision and compatibility verification at its consuming boundary." + }, + "public_namespace": { + "owner": "Public Radroots repositories and protocol namespace", + "reason": "The public organization/domain, registered URL scheme and shared SDK namespace retain their identity.", + "reader": "Exact source-lock consumers, endpoint configuration, native deep-link readers and namespace guards", + "removal_condition": "Only through a reviewed public identity or protocol migration that preserves installed readers and exact source ownership." + }, + "installed_identity": { + "owner": "Existing Apple installation and credential boundary", + "reason": "Bundle and Keychain namespaces identify existing installations and credentials.", + "reader": "Tera configuration, Apple credential lookup and frozen compatibility tests", + "removal_condition": "Retain unless an explicitly approved migration proves old installations and credentials remain readable." + }, + "persisted_data": { + "owner": "Existing application persistence and signed-operation formats", + "reason": "Stored keys, filenames, schema/cursor/hash domains and diagnostic document schemas retain their old bytes.", + "reader": "Tera persistence/migration readers, projection and operation-ID derivation, existing diagnostic document readers", + "removal_condition": "Only with explicit versioned readers and upgrade/restart tests preserving pending operation identity; never a branding replacement." + }, + "native_ui_contract": { + "owner": "Existing native navigation and accessibility contract", + "reason": "Current URL/action/accessibility identifiers remain stable across the application rename.", + "reader": "Tera navigation, UI automation and accessibility consumers", + "removal_condition": "Only through a coordinated control/reader migration with all affected navigation and accessibility tests." + }, + "verification_compatibility": { + "owner": "Existing fixture, result and development command contracts", + "reason": "Synthetic namespaces, result filenames/hash domains, ratchet schemas and device output paths retain their existing readers.", + "reader": "Native/Rust fixture tests, fixture/result verifiers and device launcher output consumers", + "removal_condition": "Only with a versioned fixture/result/command migration; retain any still-supported historical reader." + }, + "retired_producer_rejection": { + "owner": "Tera package and legacy-name verifiers", + "reason": "These exact retired names appear only as forbidden producer identities or negative naming cases, not supported routes.", + "reader": "Resolved dependency and legacy-identifier regression tests", + "removal_condition": "Retain while enforcing rejection; remove only when an equally strong replacement guard covers the retired producer/name." + }, + "asset_provenance": { + "owner": "Native asset producer", + "reason": "The existing generated asset author field records its source producer.", + "reader": "Native asset catalogs and source provenance review", + "removal_condition": "Only when the canonical asset producer changes and the native cohort is regenerated coherently." + } + }, + "entries": [ + { + "identifier": "RADROOTS", + "category": "public_namespace", + "occurrences": [ + { + "path": "TeraTests/TeraRootShellTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RADROOTS-ASK", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 1 + } + ] + }, + { + "identifier": "RADROOTS_LIB_REVISION", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/build.rs", + "count": 4 + }, + { + "path": "core/crates/tera_core/src/build_info.rs", + "count": 1 + }, + { + "path": "scripts/ffi_build.py", + "count": 1 + }, + { + "path": "scripts/test_ffi_artifacts.py", + "count": 1 + } + ] + }, + { + "identifier": "RadRoots", + "category": "public_namespace", + "occurrences": [ + { + "path": "TeraTests/TeraRootShellTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "Radroots", + "category": "retired_producer_rejection", + "occurrences": [ + { + "path": "scripts/test_legacy_identifiers.py", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAdmittedEvent", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 14 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 11 + } + ] + }, + { + "identifier": "RadrootsAppLocalStateResetError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsAppLocalStateResetError.keychainFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleBackgroundTransfer", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleFileAccess", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 4 + }, + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 10 + } + ] + }, + { + "identifier": "RadrootsAppleFileError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsAppleFileError.notFound", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleFileError.permissionDenied", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleFileRoots", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 4 + }, + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 4 + }, + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraSessionStore.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraRemoteQualificationTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsAppleFileRoots.appContainer", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleIdentityMetadataStore", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleImagePreparationRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleKeychainSecureStore", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleLoggerTelemetry", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleMediaPicker", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsAppleMediaPreparationError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsAppleMediaPreparationError.preparationFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleMediaPreparer", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 3 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleMobileStore.prepare", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraSessionStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleMobileStoreError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsAppleMobileStoreError.fileSystemFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleMobileStoreError.invalidPublicKey", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsApplePreparedImage", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleSecurityError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsAppleSecurityError.keychainFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleSecurityError.userCancelled", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsAppleUserPresence", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsBackgroundTaskError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsBackgroundTaskError.schedulerFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransfer", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraAppModel.swift", + "count": 1 + }, + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 3 + }, + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 3 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferError.invalidRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferError.persistenceFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferError.transferFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferError.unavailable", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferHandle", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 4 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferIdentifier", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 7 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 6 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 8 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 9 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferRequest.defaultMaximumTransferBytes", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferResponse", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferResponsePolicy.boundedJSON", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferSnapshot", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 6 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferState", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 6 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferValidation.normalizedIdentifier", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsBackgroundTransferVerification", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsCaptureIntakeError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsCaptureIntakeError.invalidRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsCaptureIntakeError.permanentFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsCaptureIntakeError.permissionDenied", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsCaptureIntakeError.transientFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsCaptureIntakeError.unavailable", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsCaptureIntakeError.userCancelled", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsDocumentInterchangeError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsDocumentInterchangeError.notFound", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsDocumentInterchangeError.permissionDenied", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsDocumentInterchangeError.userCancelled", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsExportDocumentRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsExportDocumentResult", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsExternalActionError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsExternalActionError.blockedByPolicy", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsExternalActionError.transientFailure", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsFileReference", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 2 + }, + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 5 + }, + { + "path": "TeraTests/TeraRemoteQualificationTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 7 + } + ] + }, + { + "identifier": "RadrootsIdentityCustody", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 5 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 3 + } + ] + }, + { + "identifier": "RadrootsIdentityCustodyConfiguration", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 4 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 3 + } + ] + }, + { + "identifier": "RadrootsIdentityCustodyError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsIdentityCustodyError.cryptographyFailed", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsIdentityMetadataSlot", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 4 + } + ] + }, + { + "identifier": "RadrootsIdentityMetadataStore", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsIdentitySecretMaterial", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraAppModel.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraSessionStore.swift", + "count": 1 + }, + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 5 + } + ] + }, + { + "identifier": "RadrootsIdentitySnapshot", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsIdentityState", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsInboundFoodAvailabilityProjection", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsInboundPostProjection", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsKit", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Package.swift", + "count": 1 + }, + { + "path": "Tera/App/TeraAppModel.swift", + "count": 1 + }, + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 1 + }, + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + }, + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + }, + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 1 + }, + { + "path": "Tera/Runtime/TeraUserMessages.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraSessionStore.swift", + "count": 1 + }, + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + }, + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraRemoteQualificationTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + }, + { + "path": "project.yml", + "count": 2 + }, + { + "path": "scripts/package_contract.py", + "count": 1 + }, + { + "path": "scripts/test_legacy_identifiers.py", + "count": 8 + }, + { + "path": "scripts/test_package_contract.py", + "count": 4 + } + ] + }, + { + "identifier": "RadrootsLocationServicesError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsLocationServicesError.permissionDenied", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsLocationServicesError.timeout", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsMediaAsset", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsMediaCaptureRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsMediaCaptureResult", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsMediaImportRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsMediaImportResult", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsMediaPicker", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 4 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsMediaPickerSupport", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsMultiplexTelemetry", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsOpaqueSignPurpose", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsOpaqueSignRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsPostClassification", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 5 + } + ] + }, + { + "identifier": "RadrootsPreparedExportDocument", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 4 + } + ] + }, + { + "identifier": "RadrootsProtectedDataProvider", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsRedactingTelemetry", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 3 + } + ] + }, + { + "identifier": "RadrootsRhiEvidenceAttestationOutcomeV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 3 + } + ] + }, + { + "identifier": "RadrootsRhiEvidenceReportV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/sdk.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/tests/package_boundary.rs", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsSecretAccessPolicy", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsSecureStore", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsSecureStoreKey", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 3 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 6 + } + ] + }, + { + "identifier": "RadrootsStagedBlobReference", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 3 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsTelemetry", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 3 + } + ] + }, + { + "identifier": "RadrootsTelemetryError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTelemetryError.invalidRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsTelemetryEvent", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 3 + }, + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsTelemetryField.string", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsTelemetryLevel", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsTelemetryRedactionPolicy.default", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceCoverageV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/sdk.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/tests/package_boundary.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 10 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceManifestSourceResultV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceManifestV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/sdk.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/tests/package_boundary.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceOutcomeV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/sdk.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/tests/package_boundary.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 8 + } + ] + }, + { + "identifier": "RadrootsTradeEvidencePolicyDigestV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceScopePrerequisitesV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceSourceCompletionV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceSourceIdV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceSourceRequirementV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceSourceResultDigestV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsTradeEvidenceSourceResultV1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsUserPresence", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 1 + }, + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsUserPresenceError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsUserPresenceError.unavailable", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsUserPresenceError.userCancelled", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsUserPresenceRequest", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraRemoteQualificationTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsUserPresenceResult", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsUserPresenceStatus", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsVerifiedArtifactAccessError", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Runtime/TeraUserMessageClassifier.swift", + "count": 2 + } + ] + }, + { + "identifier": "RadrootsVerifiedArtifactAccessError.artifactCorrupt", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "RadrootsVerifiedArtifactAccessError.invalidDescriptor", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "TeraTests/TeraUserMessagesTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots", + "category": "public_namespace", + "occurrences": [ + { + "path": "AGENTS.md", + "count": 1 + }, + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + }, + { + "path": "Tera/Config/Debug.xcconfig", + "count": 1 + }, + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraCalendarFFICompatibilityTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraRootShellTests.swift", + "count": 24 + }, + { + "path": "TeraUITests/TeraRootShellUITests.swift", + "count": 3 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 7 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 3 + }, + { + "path": "core/crates/tera_core/src/runtime/store.rs", + "count": 2 + }, + { + "path": "core/crates/tera_ffi/src/error.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/tests/compatibility.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/tests/support/mod.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/tests/uniffi_contract.rs", + "count": 1 + }, + { + "path": "scripts/legacy_identifiers.py", + "count": 3 + }, + { + "path": "scripts/test_local_social_fixture.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots-add-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-background-tests-", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-background-upload", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-ios-device", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "README.md", + "count": 1 + } + ] + }, + { + "identifier": "radroots-ios-lifecycle-tests-", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-local-social-", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + }, + { + "path": "scripts/local-social-fixture.py", + "count": 2 + } + ] + }, + { + "identifier": "radroots-local-social-P", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "scripts/local-social-fixture.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots-local-social-P01-A01.json", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "scripts/test_local_social_fixture.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots-local-social-P01-A01_0_", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "scripts/test_local_social_fixture.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots-media-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraMediaStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-qualification-evidence", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualificationEvidence.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-remote-qualification-bootstrap.json", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-remote-qualification-bud11.json", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualificationEvidence.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-runtime-tests-", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraRuntimeClientTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-state-tests-", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-supporting-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraSupportingStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots-today-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraTodayStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Runtime/TeraAddMediaCoordinator.swift", + "count": 2 + }, + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.cancel", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.content", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 16 + } + ] + }, + { + "identifier": "radroots.add.currency", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 5 + } + ] + }, + { + "identifier": "radroots.add.draft", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.draft.media_status", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.drafts", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.drafts.sheet", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.error", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.event.end", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 2 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.add.event.start", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 2 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.add.event_timing", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.add.keyboard.done", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.loading", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.location", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 2 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 6 + } + ] + }, + { + "identifier": "radroots.add.media.alt", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.media.camera", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.media.library", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.add.media.prepared", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.new", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.price", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 5 + } + ] + }, + { + "identifier": "radroots.add.progress", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.quantity", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.add.root", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + }, + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 5 + }, + { + "path": "TeraUITests/TeraRootShellUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.save", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.add.status", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.add.submit", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.add.summary", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 5 + } + ] + }, + { + "identifier": "radroots.add.title", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 2 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 9 + } + ] + }, + { + "identifier": "radroots.add.type", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.add.unit", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraAddView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 5 + } + ] + }, + { + "identifier": "radroots.app", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/mod.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/tests/runtime_delegation.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.app_entry", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/AppEntry.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.artifact-manifest.v2", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "scripts/ffi_artifacts.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots.avatar.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.background-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.calendar.date_event.v1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.calendar.time_event.v1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.configuration.reconfigure", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.context", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.context.picker", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.crates.release.v2", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "radroots.lib.source-lock.v1.toml", + "count": 1 + } + ] + }, + { + "identifier": "radroots.field-ios", + "category": "installed_identity", + "occurrences": [ + { + "path": "Tera/tera.xcconfig", + "count": 1 + }, + { + "path": "TeraTests/TeraRemoteQualificationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.field-ios.tests", + "category": "installed_identity", + "occurrences": [ + { + "path": "project.yml", + "count": 1 + } + ] + }, + { + "identifier": "radroots.field-ios.uitests", + "category": "installed_identity", + "occurrences": [ + { + "path": "project.yml", + "count": 1 + } + ] + }, + { + "identifier": "radroots.field_ios", + "category": "installed_identity", + "occurrences": [ + { + "path": "Tera/Config/Base.xcconfig", + "count": 1 + } + ] + }, + { + "identifier": "radroots.field_ios.local", + "category": "installed_identity", + "occurrences": [ + { + "path": "Tera/Config/Debug.xcconfig", + "count": 1 + } + ] + }, + { + "identifier": "radroots.food_availability.v1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "TeraTests/TeraAddStoreTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraSupportingStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.identity.create", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.identity.import", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.identity.import.error", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.identity.import.secret", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.identity.import.submit", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.identity.recover", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.identity.unlock", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.inbound-media-reference.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/media.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.diagnostics.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/Runtime/TeraLifecycleCoordinator.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.identity", + "category": "installed_identity", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.local-social.app-build.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "scripts/xcode.sh", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.local-social.endpoint-policy.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.local-social.persona-identity.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "scripts/local-social-fixture.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.local-social.persona-run.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.maintainability-baseline.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "scripts/maintainability_ratchet.py", + "count": 1 + }, + { + "path": "scripts/test_maintainability_ratchet.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.persona_result_bundle.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "scripts/local-social-fixture.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.remote-qualification", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualification.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.remote-qualification.authorization-digest.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualificationEvidence.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.remote-qualification.authorization-evidence.v1", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "Tera/App/TeraRemoteQualificationEvidence.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.remote-qualification.gbrqv1-12345678", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraRemoteQualificationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.ios.remote-qualification.gbrqv1-12345678.identity", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraRemoteQualificationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.lib.source-lock.v1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "radroots.lib.source-lock.v1.toml", + "count": 1 + }, + { + "path": "scripts/ffi_source.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots.lib.source-lock.v1.toml", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "AGENTS.md", + "count": 1 + }, + { + "path": "TeraFFI/producer.toml", + "count": 2 + }, + { + "path": "scripts/ffi_source.py", + "count": 2 + }, + { + "path": "scripts/legacy_identifiers.py", + "count": 1 + }, + { + "path": "scripts/package_contract.py", + "count": 1 + }, + { + "path": "scripts/release-evidence.sh", + "count": 1 + }, + { + "path": "scripts/test_app_dependency_graph.py", + "count": 1 + }, + { + "path": "scripts/test_ffi_artifacts.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots.log", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_ffi/src/logging.rs", + "count": 6 + }, + { + "path": "core/crates/tera_ffi/src/logging/writer.rs", + "count": 7 + } + ] + }, + { + "identifier": "radroots.media-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraMediaStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.mobile.phase1-draft-operation.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.mobile.phase1-draft.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.mobile.phase1-profile.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.mobile.settings.generation.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/settings.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.mobile.settings.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/settings.rs", + "count": 1 + }, + { + "path": "scripts/test_legacy_identifiers.py", + "count": 2 + } + ] + }, + { + "identifier": "radroots.mobile.today.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.org", + "category": "public_namespace", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "Tera/Config/Base.xcconfig", + "count": 2 + }, + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraSupportingStoreTests.swift", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/builder.rs", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/settings.rs", + "count": 2 + }, + { + "path": "scripts/local-social-fixture.py", + "count": 10 + }, + { + "path": "scripts/package_contract.py", + "count": 2 + }, + { + "path": "scripts/test_local_social_fixture.py", + "count": 8 + } + ] + }, + { + "identifier": "radroots.package.manager", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "scripts/release-evidence.sh", + "count": 2 + } + ] + }, + { + "identifier": "radroots.package.revision", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "scripts/release-evidence.sh", + "count": 1 + } + ] + }, + { + "identifier": "radroots.package.source", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "scripts/release-evidence.sh", + "count": 2 + } + ] + }, + { + "identifier": "radroots.profile", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.root.tabs", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.runtime.failure_code", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.runtime.retry", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.runtime.status", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/RuntimeStatusView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.search.card", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.search.profile", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.search.results", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.selected_root_tab", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.blossom.error_code", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.blossom.fingerprint", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.blossom.http_status", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.blossom.origin", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.blossom.primary", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.blossom.server_error_code", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.blossom.state", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.diagnostics", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.failure_code", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.identity.lock", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.identity.public_key", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.network.environment", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.profile.about", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.profile.display_name", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.profile.name", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.profile.nip05", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.profile.save", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.relays.add", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.retry.blossom", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.retry.network", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.settings.save", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.support.account", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + }, + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.support.account.sheet", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.support.context", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.support.me.sheet", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.support.outbox", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.support.search", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + }, + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.support.search.sheet", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + }, + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.support.settings", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.support.settings.view", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.supporting-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraSupportingStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.swift-api-snapshot.v1", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "scripts/app-api-snapshot.sh", + "count": 1 + }, + { + "path": "scripts/ffi_artifacts.py", + "count": 1 + }, + { + "path": "scripts/ffi_build.py", + "count": 1 + }, + { + "path": "scripts/test_ffi_artifacts.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots.tab.add", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.tab.today", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraRuntimeClientTests.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 4 + } + ] + }, + { + "identifier": "radroots.tests.background.other", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.tests.background.transfer", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraLifecycleTests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots.tests.corrupt", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.tests.identity", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.tests.signer", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-card.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/identity.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-content-generation.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-cursor.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/cursor.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-document-key.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-projection.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-rank.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/ranking.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-snapshot-id.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today-tests", + "category": "verification_compatibility", + "occurrences": [ + { + "path": "TeraTests/TeraTodayStoreTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.card", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.detail", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.error", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.feed", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.loading", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.loading_more", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.offline", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.refresh", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRemoteQualificationUITests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.refresh.empty", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.retract", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.revise", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.root", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/App/TeraRootShell.swift", + "count": 1 + }, + { + "path": "TeraUITests/TeraRootShellUITests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots.today.status", + "category": "native_ui_contract", + "occurrences": [ + { + "path": "Tera/Views/TeraTodayView.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots.today.v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots.unapproved.v1", + "category": "retired_producer_rejection", + "occurrences": [ + { + "path": "scripts/test_legacy_identifiers.py", + "count": 1 + } + ] + }, + { + "identifier": "radrootsDocumentExporter", + "category": "shared_apple_api", + "occurrences": [ + { + "path": "Tera/Views/TeraSupportingViews.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots_", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "scripts/app_dependency_graph.py", + "count": 1 + }, + { + "path": "scripts/ffi_source.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots_assetgen", + "category": "asset_provenance", + "occurrences": [ + { + "path": "Tera/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json", + "count": 1 + } + ] + }, + { + "identifier": "radroots_blossom", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/authoring.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/media.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 6 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 2 + }, + { + "path": "core/crates/tera_ffi/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + }, + { + "path": "core/crates/tera_ffi/src/runtime.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/tests/local_mvp_real_io.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots_configuration_v2.json", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots_configuration_v3.json", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 4 + } + ] + }, + { + "identifier": "radroots_event", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/authoring.rs", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/identity.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 5 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/settings.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 5 + }, + { + "path": "core/crates/tera_ffi/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 4 + }, + { + "path": "core/crates/tera_ffi/src/signer.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/tests/runtime_delegation.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots_event_codec", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/authoring.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/projection.rs", + "count": 4 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 2 + } + ] + }, + { + "identifier": "radroots_field_ios_relay_settings_v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots_identity", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/mod.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/settings.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/store.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots_identity_v1", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/State/TeraIdentityStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 3 + } + ] + }, + { + "identifier": "radroots_ios_configuration_v2", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 1 + } + ] + }, + { + "identifier": "radroots_ios_configuration_v3", + "category": "persisted_data", + "occurrences": [ + { + "path": "Tera/State/TeraConfigurationStore.swift", + "count": 1 + }, + { + "path": "TeraTests/TeraStateMigrationTests.swift", + "count": 2 + } + ] + }, + { + "identifier": "radroots_ios_source_lock", + "category": "retired_producer_rejection", + "occurrences": [ + { + "path": "scripts/app_dependency_graph.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots_mobile_bindgen", + "category": "retired_producer_rejection", + "occurrences": [ + { + "path": "scripts/app_dependency_graph.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots_mobile_core", + "category": "retired_producer_rejection", + "occurrences": [ + { + "path": "scripts/app_dependency_graph.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots_mobile_ffi", + "category": "retired_producer_rejection", + "occurrences": [ + { + "path": "scripts/app_dependency_graph.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots_mobile_wasm", + "category": "retired_producer_rejection", + "occurrences": [ + { + "path": "scripts/app_dependency_graph.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots_nostr", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 5 + } + ] + }, + { + "identifier": "radroots_protocol", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots_sdk", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 5 + }, + { + "path": "core/crates/tera_core/src/error.rs", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/builder.rs", + "count": 14 + }, + { + "path": "core/crates/tera_core/src/runtime/info.rs", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/mod.rs", + "count": 8 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 41 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/settings.rs", + "count": 23 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 4 + }, + { + "path": "core/crates/tera_core/src/runtime/sdk.rs", + "count": 70 + }, + { + "path": "core/crates/tera_core/src/runtime/store.rs", + "count": 4 + }, + { + "path": "core/crates/tera_core/tests/package_boundary.rs", + "count": 2 + }, + { + "path": "core/crates/tera_ffi/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 52 + }, + { + "path": "core/crates/tera_ffi/src/operations.rs", + "count": 4 + }, + { + "path": "core/crates/tera_ffi/src/runtime.rs", + "count": 1 + }, + { + "path": "scripts/test_app_dependency_graph.py", + "count": 1 + }, + { + "path": "scripts/test_ffi_provenance.py", + "count": 1 + } + ] + }, + { + "identifier": "radroots_signing", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/builder.rs", + "count": 2 + }, + { + "path": "core/crates/tera_core/src/runtime/mod.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/signer.rs", + "count": 3 + } + ] + }, + { + "identifier": "radroots_storage", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 5 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/settings.rs", + "count": 3 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 11 + }, + { + "path": "core/crates/tera_core/src/runtime/store.rs", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_ffi/src/dto.rs", + "count": 2 + } + ] + }, + { + "identifier": "radroots_sync", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 1 + } + ] + }, + { + "identifier": "radroots_transport", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/outbox.rs", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/today.rs", + "count": 5 + }, + { + "path": "core/crates/tera_core/src/runtime/sdk.rs", + "count": 4 + } + ] + }, + { + "identifier": "radroots_transport_nostr", + "category": "shared_foundation_api", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 2 + }, + { + "path": "core/crates/tera_core/Cargo.toml", + "count": 1 + }, + { + "path": "core/crates/tera_core/src/runtime/product_surface/context.rs", + "count": 1 + } + ] + }, + { + "identifier": "radrootslabs", + "category": "public_namespace", + "occurrences": [ + { + "path": "Cargo.toml", + "count": 13 + }, + { + "path": "Package.swift", + "count": 1 + }, + { + "path": "TeraFFI/producer.toml", + "count": 1 + }, + { + "path": "project.yml", + "count": 1 + }, + { + "path": "radroots.lib.source-lock.v1.toml", + "count": 1 + }, + { + "path": "scripts/ffi_source.py", + "count": 1 + }, + { + "path": "scripts/package_contract.py", + "count": 4 + }, + { + "path": "scripts/release-evidence.sh", + "count": 3 + }, + { + "path": "scripts/test_ffi_artifacts.py", + "count": 1 + }, + { + "path": "scripts/test_ffi_provenance.py", + "count": 1 + }, + { + "path": "scripts/test_package_contract.py", + "count": 2 + } + ] + } + ] +}