Refresh architecture documentation
This commit is contained in:
1 parent
4feec3e021
commit
1ffd25eebe
36 files changed
+781
-264
No files matched your search
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:ced917378133d346e25f9793e04d360a19ff15bd567435b4183562c3dc9fab09",
|
||||
"pageVersion": "sha256:35da0200127e36e0161d9ebfabc103070580eff4d348f77b92091549c2d15e27",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_72f9329a158e418cbf0fd6394f82815e",
|
||||
@@ -44,7 +44,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileSceneModel.swift",
|
||||
@@ -440,7 +440,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L577",
|
||||
"version": "repo-lines-v1:sha256:a270cc13b36412458b74942420cae0e8abaa6638637ae686fba94b336f5c53ed:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI0NTg0ZDFiMmZhZDA3YjA0ZTIwZTVjOGE2MTM3OGEzNDFjZGJlN2E4ZDgwMzAwZDQ2NzJlNjhhYjcxZTFjZjMifQ"
|
||||
"version": "repo-lines-v1:sha256:b0fa484bcb19ae7f887f203d3b438c9bccc7b5936706cd85d285e53c0f9b31d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI0NTg0ZDFiMmZhZDA3YjA0ZTIwZTVjOGE2MTM3OGEzNDFjZGJlN2E4ZDgwMzAwZDQ2NzJlNjhhYjcxZTFjZjMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L115-L158",
|
||||
@@ -484,32 +484,20 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_0041eaa146234943af67a02b8797e991",
|
||||
"statement": "The macOS termination reply independently falls back after three seconds and replies once; captured-turn joins do not guarantee save success, SSH setup completion, remote-command settlement, or drainage of manual compaction, title generation and memory indexing, and successful terminal saves may schedule memory indexing after suspension.",
|
||||
"statement": "The macOS termination reply independently falls back after three seconds and replies once; captured-turn joins do not guarantee save success or remote-command settlement and exclude manual compaction and title generation, while memory suspension now remains an admission fence until resume reloads state and backfills history.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/Agent/MemoryIndexedAgentRepository.swift#L13-L16",
|
||||
"version": "repo-lines-v1:sha256:dd81b44cc0557db5439accd290c19cb9b58b2c232fd0f3255a0504d4c2cc9d18:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNzdmNTQ1ZWVjNjkzZmZiNDU2YWM2NGRmZjc4YTA2MTcxYjYxZDI3MjVjZGUyNTdhYjg2ODgzNTc0NmQ5YzM3NSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNWMwZTU3ZGY4OGJhMmExOGMyZDQwOTJmNzM4N2E3MmFjMTBlYjc1NWNjNjFiZDlkYTFlYzU2NzdkMWNjZjE1YSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzRhYjk4MjQ4YzViYmM1M2IzZmFjZjQxYmI2NWQ3ODk5YzhjYmRiYWJmYzJhYTQ1ZWVjYWMxNjhmNmQ0MzU1OCJ9"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L177-L204",
|
||||
"version": "repo-lines-v1:sha256:463d4609d3eaa2a49b28fa86063677b92b26cb06a7c30dc499260f0aa1a5278c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIxNjhmZjRmY2M1OGUzOTQxNjdmNmMwYTkwOGZiMzIzZDJmZmM3YWRmYWEzMTNjZjk3MDhhOTNmMGM2MmFjYjgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNhMTc5NmZiOTc5MjY1ODlhZjExYTQ5ZGNhMjViNTgwMDlkYjVhZjhhMWQ3Y2UwMjhjZmYxNDBjYzJhNWEwNjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZhYTc3MTExMzFhNDc3MTA0NWFhMWU0NDlhZmI3YjkyOTg3Njk1ZDRjNTkzZDYyZGI5Mzc0MTQxNGFmNTMzZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L153-L180",
|
||||
"version": "repo-lines-v1:sha256:70176bb0b07b5d039e790f72be2fd529f699f1cd9b61d2019f01e7243c5542a0:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIxNjhmZjRmY2M1OGUzOTQxNjdmNmMwYTkwOGZiMzIzZDJmZmM3YWRmYWEzMTNjZjk3MDhhOTNmMGM2MmFjYjgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNhMTc5NmZiOTc5MjY1ODlhZjExYTQ5ZGNhMjViNTgwMDlkYjVhZjhhMWQ3Y2UwMjhjZmYxNDBjYzJhNWEwNjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZhYTc3MTExMzFhNDc3MTA0NWFhMWU0NDlhZmI3YjkyOTg3Njk1ZDRjNTkzZDYyZGI5Mzc0MTQxNGFmNTMzZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L251-L255",
|
||||
"version": "repo-lines-v1:sha256:46b0558ae01ecd5d23e50f403021b1076616087e98308d4065bd3d8626dc7a58:eyJzZWxlY3RlZExpbmVDb3VudCI6NSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZjU1OWVmYWQzMjUzOTliYWNiNTA5OGJkNmQyMDFjMDEyODQ1MjhiMzFkMjBhMDNkMzI0Y2NmOWQ2N2IxYTlmZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDgzNTRmZTc1YTVjYmMzYzViYmVlYTdkNThkMmUyMGY4MDJmYTgyYmNlOWVkOTRhMzJjODljOTkzMzM1MWZiYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiODYyODEyOGQwOTU4NjAyZTI1NGQ2YWU2ZWE5MGNmMzQ3MDQ5ZjM2N2EwMTcwMTAyMmY1MjhkZGE0OTMwNTk5OCJ9"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L274-L284",
|
||||
"version": "repo-lines-v1:sha256:c6bd184fd629fc2765d33f8ae15143e6791863bd814b8356a2ceefdd5dcfe82e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1NTllZmFkMzI1Mzk5YmFjYjUwOThiZDZkMjAxYzAxMjg0NTI4YjMxZDIwYTAzZDMyNGNjZjlkNjdiMWE5ZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4MzU0ZmU3NWE1Y2JjM2M1YmJlZWE3ZDU4ZDJlMjBmODAyZmE4MmJjZTllZDk0YTMyYzg5Yzk5MzMzNTFmYmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentBackgroundCommands.swift#L161-L168",
|
||||
"version": "repo-lines-v1:sha256:0cf7f999434cae91c1dad2c325405a08e8456edc6bb0625623dd3016bfbd4236:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNjAwM2RjOTQyY2M5M2MyY2E2MWM4ZDc1YzFkM2NmNWM1OTUzNjg1YmY1YmZhNzRlZjIzMDY5YTJkYmU5Mzg0MCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZmExM2NkOGJlNzIzNDcxZmEzZGE3ZWI4NTdjMjYxYzJmNjRlZWQxZTUwMzMyNTQ3NTlmOGYyZGUxY2Q2NjNkNiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMzg2Nzg2ZDIwN2ZlMzE4MDZjYjIzYzA0ZGExZTQ2Y2ZkYTNlMjNmNDg3ZGJhOWFmMmIzZGYzMTIyOGY2ZjAwNCJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1543-L1575",
|
||||
"version": "repo-lines-v1:sha256:32cc2e0c42513700520084d4401216b1a3f77cfc0dba7999d7f25613103a928f:eyJzZWxlY3RlZExpbmVDb3VudCI6MzMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFlMTUzZjdkNDRmYWI0YTU0Njc3N2Y5MTRiNmRkMGUwMjIyMTA0ZjM5OTY0OTdhMDYzNDJmYTFiZWUzYWU1NWYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ3YTBlZjQ2NDQzM2JjZjY0MDBhM2RlZTVhNTZlMjQyMmFkYmFmYTVjNDBmMGJhNzY3MzJlOWU4NGY1Y2QyM2EiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQ2YzJjMWEzYjJlYzM4ZjE5MGJkNzllM2M2NzNiOGNkNWE5MWMyZGEyYThkODM4MzdlZjgzNGVhNzU3ZjZiMDciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjM4OTQ4NjdkZDBkYTNjOWE2MTdhYjIxODMzODc3NjkwZmJkZDhjNTEzZTg5N2MyZDBhZGY0ODM1NGU2ZmJlMTAifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L599-L649",
|
||||
"version": "repo-lines-v1:sha256:264009231dd112a56fb55f2187bd34367716c9df86e21870d47ee40f60cf2884:eyJzZWxlY3RlZExpbmVDb3VudCI6NTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdjOWRhNzhjOTJlMzEzNzI1OGY0NzA5MGQ1MjM5OTY2ZWEyYWQ4MTczYzRiZGZkMTQyMzhjYjE2NzcxZjM1MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZmNGQxOGNmNDZiOWM5ZmQ0MDViYmVkZjlhZDc5ZmVmMGNhNGYzYjI4NTdmYWQ5MDA0NDI5MGJkNWM0NTVkMGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA5ZmMwMWRiNDUzOWNjNTgxNGFhOTk0NDQ0NzhlMWY2MTI5ZjNhODllYzFjYTEyOTllYWM5ODBhZjZhZTRlMTEifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/AppModel.swift#L724-L777",
|
||||
"version": "repo-lines-v1:sha256:1fc048283823ebca7238e66af31e150e119b83645a4e5f760aa9bf444ce1337b:eyJzZWxlY3RlZExpbmVDb3VudCI6NTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRiNmE1OWU3Nzg2NmU1MGRiZDYxZjA5ZmQ1YWM2MjQwN2Q0ZGVlNjdkNGIyNTJhNDExYzRhZTEwZWNmMWQwNmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNkYmExMmRjNjgzMWEzMWU5NzdjMTMzMDU0NWZiMzZhMTFjYjE2MDQ5YjQ5ZGYwN2MzYjAyNjM4YjIwNzA2YzIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjUzODNlN2M2MmI5ZmI0ZGU3YjNjNTc3ZmFkNjNiOTYxMGRlZTcyNmI4NzljYzZjN2M5ZjYzNTljOTU5YWEwODQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRkYjkxZWUwZThhZmIwMWVmNzYyMmM2ZTg0NzA2MDM2YmVmMzAwNTc5YWU1ZjcyYmQzOTViMmY3MjllNmRjOWUifQ"
|
||||
@@ -519,10 +507,42 @@
|
||||
"version": "repo-lines-v1:sha256:95d9d41a8e9a63b0bbdf8354b715f24f754a017b597e2b2228218077a6ed4d25:eyJzZWxlY3RlZExpbmVDb3VudCI6MzAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZkNjgzYjc5NGVkOWI1NjQ2Y2Q2ZTZjMGEyYmMzYTk4YTFjN2NiYmMzMDUxZWZiN2E0NWQzYWI5MWI0MDRhZmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjcwMWZjNjEwMWEwZjJiMGNiNmFkNTEyYzg2MzExYzEyNzllM2VlZjMwNWExMDQwMTc5MzUzMTQ4N2MxYTllNDMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImIwZTJhYTI2ZTg3N2YxZWE5MzA4NjE5NmU0Nzg2N2U5MGYzNTk4ODI2MDA0MmY2YTM1YzEzZTlkNDRlOTVhM2MifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_70b3d256afb7415ba484d3c1e0cd7e02",
|
||||
"statement": "Shared SSH configuration and pooled connection openings register one continuation per waiter; cancelling one waiter leaves shared work alive for the others, and only the last waiter or explicit Host retirement cancels the underlying opening task.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1638-L1774",
|
||||
"version": "repo-lines-v1:sha256:23aaca80cf4e2215a2f75373a0dcf3b4d6ee051aa3b90f8a3ad089893590f8a8:eyJzZWxlY3RlZExpbmVDb3VudCI6MTM3LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJhZTE1M2Y3ZDQ0ZmFiNGE1NDY3NzdmOTE0YjZkZDBlMDIyMjEwNGYzOTk2NDk3YTA2MzQyZmExYmVlM2FlNTVmIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJlNmIwNDQ5MTQ2OTcyMmU4MzYzYTk0ZTQwNDQ1MzhlMDEzYTJhMjE3ZTM2YjFlNTY4YmE2MGFjYjdiNGM4ZjJlIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJkNmMyYzFhM2IyZWMzOGYxOTBiZDc5ZTNjNjczYjhjZDVhOTFjMmRhMmE4ZDgzODM3ZWY4MzRlYTc1N2Y2YjA3IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI3NDcyMmRmYjk2MDYxMDVlNTFhZjZkZDllYzI0YjNjZGE4ZDQ1MDU0NzA1YzUxN2UwNGU4OTJlM2U1YzQ2MjZhIn0"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L700-L774",
|
||||
"version": "repo-lines-v1:sha256:9bfcbf42450fdb97123b2ad5a7f98b81d110c3f3314600403d93ad7b04860dab:eyJzZWxlY3RlZExpbmVDb3VudCI6NzUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQwMzg4ZDNjZDU0YTVlOGYxZmVkZjlmOGY0ZjYxYTBiYWNkMDI1YWU0NGE1MDUzMDMxYjExNzU1YTQ5MmI1NzUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEwZTI3M2YyMzE3MjgwZjUwYWJkMzkyMzQxNTg4YTNiOWVmOGRhZjA3YjI1YTkxNmMyMmFlZGQxYWVhMDdlNzMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNhNzc4Yjc5MjgwMzkyYWQyMjYzNjJmYzk5OGQwNGJhNzdhZjU4ZmYzYWQ2MWYyZjc2NzA0ZWZjMjNkNWU2YzciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_2db38fa50ac84875baa964c4ad074ab2",
|
||||
"statement": "An MCP upload disconnect synchronously cancels the attempt's transfer token and separately records disconnect provenance, so the response maps to cancellation and remains resumable without treating unrelated SFTP failures as HTTP disconnects.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift#L177-L197",
|
||||
"version": "repo-lines-v1:sha256:09225b7b105df303acc8396e48c42c5251ddf2feff12b03d2c52d91c79fb352e:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE2YjJkOTVmZTFiOTA3OGRkZDkzZWExMWM5MjlhODc4MzAyMzQwOWVmYWIyMDdmMDcwNmRkZDllZGM4NDJlZjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImI2NWU4NzRiZTc5MTIwY2ExMDZjMzcyZmM5ODlkNjZiZWQxOWMzZTQ0ZjRjMmIzNjJiZjUxMmU5ZWZhYWI4MjkiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImEyZTVkNGJlYjE4YmNmZTY3NjVlZTBlYzQ4MjZhODg2ZWY0ZTFlMGNiYjc3NTE0ZmQ2M2ZhOTIwNDRmNzEzODQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImE5MTFhMDA0NWFiYzgzOWNjYzM0YjVkZjRkYWNiY2ZiYTFjMmUyMjBlOTQ0NDM1MTM0ZTY1NjA1YmJmNGU0MmYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift#L251-L276",
|
||||
"version": "repo-lines-v1:sha256:3792a7f25d2ec146b7b352c37c6e4a5fd9883de3c0451915c4f7da84dbc9887e:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlMWQ3MjAzODMyYmQ5ZTZlNDY5ZjUzYTdkMWQ2MWE5YjM3NTQxOTIyNzliZTY0OTYyYTg5MDVlNzAyNWMzNjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU5ZDk1ZWE2MmVhNjlkZmZkZTJmYmI1ODE4MDZhNzgyMTViODcxYzU3ZTliZWZmNjMxN2YxN2YwYjVmMmM1YzIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNiODM5NTZmZDAzNzU5M2UyNzUyMGYwN2I1ZDQwYzhiZWRjOTkyMTVlNDMxMTA0ODA0NWZiYjJmY2IwMGZlMzMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUxODUyZWMwMmU4N2ZiYTQ5MDQ1OGJlNDc0YWY1ZDliYmJhZjk0NWJmYjQ4MzhjNmIxY2Y5NGVmYjRmMWZmYmYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/MCPUploadTests.swift#L349-L385",
|
||||
"version": "repo-lines-v1:sha256:abaaf8c46f62023236e935d4b7d44779766e48bbd0cc68f16f6592abfb97c637:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRlMDQzYTczOTBlMWNhN2FhMDU2ZTk1YWFmMjE2NTM5YTIyNTkwNjU2ZGI4ZmIwNmI2ZWU5YzMyMWMxMjNlYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlZDdlYjk1NWQzOTAwMmZhMTlmM2MzNTJmYzhmNDNiMTg1MDNiYjRjYjIyNzhiNTFlMjFlMjdkMWFiYjU3ZTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRlOWZjNmY2NzhjN2U5Y2EwY2YxOTY1YmVjZWUzMjA5OWEzNzRlZTc0N2Q2NTE2ZWViZWFiMzQ2NDU0NGVhMTAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA3N2U0MDI5NjM5ZmIzOGQxZGRmYzZjMjllOWJiZTRkNGMxMWVmMjBlOTRiZmM4ZWE5YTdjYzI3NmVlYjUxOTMifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:3e4fffdec19e331d34ec12f5b4ead52c83e7d4d17e8f0937e8ba884b0d26ed34",
|
||||
"pageVersion": "sha256:6f758688dba0fd6ecc5da1905671f8372325879f816a81755431c0cc4469c04e",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_fbb919f62a2d4ab88aafcc4c1186731b",
|
||||
@@ -40,7 +40,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileSceneModel.swift",
|
||||
@@ -160,7 +160,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:e1458e03b4dc3d86d48461e276ad947b989000475cf59e42b68402a40297a355:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
"version": "repo-lines-v1:sha256:0569dc2b10c701c3b0c48b14a14a2521ba0f40ec2645f7220d7e5a61e98501d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L635-L663",
|
||||
@@ -178,7 +178,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFITests/MobileAdaptiveLayoutTests.swift#L9-L180",
|
||||
"version": "repo-lines-v1:sha256:fd1dfb3439ec991b16afb53f24aebc218d39fe34cb89144a79d75a4fa14cad8c:eyJzZWxlY3RlZExpbmVDb3VudCI6MTcyLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI2MTcxN2I0ZjY1MWU3NTQ5ZTUzN2QxZDg3ZGNmODNhNWRiYjkxODAzNmJjZDExMDRkYWM4M2QxMmNkNzZlNTYzIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJhMGE4ODZkMjJlMjhmYThjZmFkMzg2ZTUzMzlmN2JhNGFmNDEzM2U4NGRmMjU5YTYwNTNjNjJiMzI4ZjQ2Y2U3IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJiY2JlNmZkZjFkNDEyOTVmNjUwMmJhODFjNWQyYjdmZTdkOWZhMDFmZTU0NWQ3ZTZhMmFiY2M5YmUzMjRiOGI0IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJjMTNhOTQ2OThjNjNhZjM5MmJkMWI0YTZkZWIwZWI5ZjdmYzFlNWVjZTQ0MGM1OTU3MTdkYmEyYjM2ZGJjYTU4In0"
|
||||
"version": "repo-lines-v1:sha256:81dac028bbcfd23568873033feb932627182fdd7dba20e6b887a28fc7cbd83ca:eyJzZWxlY3RlZExpbmVDb3VudCI6MTcyLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI2MTcxN2I0ZjY1MWU3NTQ5ZTUzN2QxZDg3ZGNmODNhNWRiYjkxODAzNmJjZDExMDRkYWM4M2QxMmNkNzZlNTYzIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJhMGE4ODZkMjJlMjhmYThjZmFkMzg2ZTUzMzlmN2JhNGFmNDEzM2U4NGRmMjU5YTYwNTNjNjJiMzI4ZjQ2Y2U3IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJiY2JlNmZkZjFkNDEyOTVmNjUwMmJhODFjNWQyYjdmZTdkOWZhMDFmZTU0NWQ3ZTZhMmFiY2M5YmUzMjRiOGI0IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJjMTNhOTQ2OThjNjNhZjM5MmJkMWI0YTZkZWIwZWI5ZjdmYzFlNWVjZTQ0MGM1OTU3MTdkYmEyYjM2ZGJjYTU4In0"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -252,21 +252,79 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileAdaptiveLayoutTests.swift",
|
||||
"version": "repo-file-v1:sha256:6062bded1a57eef49e3f62a7e11af7921c06564a64b679eb0347da7f09237aeb"
|
||||
"version": "repo-file-v1:sha256:e9acaf0cde5c2fc6c94b78739cfcdd483f74e97266a4a750b1743e93b05de665"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileAppTests.swift",
|
||||
"version": "repo-file-v1:sha256:b2c528520ad5272155355404f91af52e490c6f17780a845d9e8a596c523484ef"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_506fae6d86df4792826c6839024000b4",
|
||||
"statement": "Mobile backgrounding keeps Hermes memory suspended until an active scene resumes it, and resume reloads committed state and schedules history backfill; the fence rejects sessions, edits, reviews and index starts while suspended.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L166-L210",
|
||||
"version": "repo-lines-v1:sha256:01dacfbd3e9893e55161de481ae823baa1c00522c74314ff218ba47cdcdfc670:eyJzZWxlY3RlZExpbmVDb3VudCI6NDUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjJlZjA2ZTY0Y2I2ODdiNjc5NDFhMjAxMWYxNDkwNGM4YTFlNmU2NjViYzc1M2FmNjhhMTBiMzQ1NmVjNjA4NTgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJhMTAwZmFlNmRmYzYyMDcxYmM0ZWU4NzMyNDkxZDM0Zjc0ZTBlNDQ1YjU0MDIwODVhOWNmMjY1MTg5ZTA4M2YiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRkZmIwY2MzNmY4OTdhZjM4NGY1ZDlkODVlZDU4MjMwOTBjNTcxYjBkNjZkMjUyODZmMjM0ZGVjMWQ5MDY2Y2QiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjNiY2ZlZTE2NTRhNWI0ZmJmOGVjMGMzOTEzZmUyOTUyZmUyNGZlZmIyYWZhOGVlNzBkM2QzZDI0ZjMyOTFhM2YifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L274-L284",
|
||||
"version": "repo-lines-v1:sha256:c6bd184fd629fc2765d33f8ae15143e6791863bd814b8356a2ceefdd5dcfe82e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1NTllZmFkMzI1Mzk5YmFjYjUwOThiZDZkMjAxYzAxMjg0NTI4YjMxZDIwYTAzZDMyNGNjZjlkNjdiMWE5ZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4MzU0ZmU3NWE1Y2JjM2M1YmJlZWE3ZDU4ZDJlMjBmODAyZmE4MmJjZTllZDk0YTMyYzg5Yzk5MzMzNTFmYmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:b0fa484bcb19ae7f887f203d3b438c9bccc7b5936706cd85d285e53c0f9b31d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI0NTg0ZDFiMmZhZDA3YjA0ZTIwZTVjOGE2MTM3OGEzNDFjZGJlN2E4ZDgwMzAwZDQ2NzJlNjhhYjcxZTFjZjMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L647-L663",
|
||||
"version": "repo-lines-v1:sha256:be3d7ace4663375024627ad072542aab75a2ee635ebaf20ee80f0a63f51e0d0d:eyJzZWxlY3RlZExpbmVDb3VudCI6MTcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZDY0ZTIzNWJjNzZlYTM1MDI3NmE4MGZlMGM1NjM0ZTYwZDFkZmUwN2FjYWQ4NTJlMTFhMWQ2MjkzM2ViMTAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhjYWNjN2E0NzlkMjI5N2FiYTI4NWJlYWFlMThhZmI4ZWE3YmQzODEwMTkxNTA3MTIwYmRhNzVjNjBhYTBhZTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImMyMWFjNTE4NDc5MWIzNWNkZTM4MDkzNDU1MTVjMGFjMDEwZjA3MGVhZTAyMTRjZGY0MzIwZDE4NzI5N2M3MDEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjI5ZjIwMmJmNzJkZjZiODUwNjM5ZmNjZmRiZjY4ZDJhMDdmZWY0ZjMzYThlZjQ3MWM0OWUwMDEwY2Y0YmRhYWQifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_537842bf0ce14cf58f3ec5a37228eaba",
|
||||
"statement": "The four mobile UIKit key-window integration suites are opt-in and serialized; they require TERMIND_MOBILE_UI_TESTS=1 and a test invocation with parallel testing disabled.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFITests/MobileEditorToolbarTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:f3c48bd72cbd1f8c19ae509d0b42757cc76641b1ba1ab1eba51d555a48751658:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkNGQ0Njk5YWY0MjE4ZTg0M2FhOGQwYzZjNTY3YjEzMzMxYzA5MWQxYTgxMzI0ODE4MWM1ZTRjMjQ5MDRlN2IifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileForwardingRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:1c43b4b67ff75200d330c0e6dcb8a7c652af56899d58c6fccc9aca89262ec5fe:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1OTEzNmM3MGIwNGU3YjM0Y2U1OWIzODMxZGFiNjY0NWIwY2MxOWIzMjg3NmQ1ZmFiZjNmMmVlMjY5NTg4MmMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4M2IxNTM3YjRlN2Q0NWFhNWJmZGM5YjZlY2RkZGUwMmM5ZGFmYTEyNTQ5ZjUyMjRkMDc3Mzk5MGZjZjFhZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileHostIntegrationRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:07c662e83a529833bf9aea2b962509e8653d5bf9062d208b941f887f04216160:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMxOGMxYWY1Y2Q1MjFiYTJlYmNkZGZjM2U1YzEzMWRhNDhmMjA1YTAyNWMwOTU2Nzk2Yjc2NTBkMDg3NDQzOGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjN2VkN2ZlM2FkNDdlMGNlOWFkZjhjODdkZDEyZmZlYzczMmI5Y2FkNjZhODYyMzI4ZTgwNTM2ZjIzMzBlOGUifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileSavedNameRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:0eddd809cc4a05cb51814cbb15b23dc1a881757e4f63cd610d210108342a4038:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlOTE5NjUyYjQ3ZmJjZTM2Y2UxYzA4NTE5MjFlZWY4YjBmZjE1NGNiODMyYjlkNTY2YTY0MDYyMGQ2MjFmNGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxODAyNTA0ZjI1YmEzY2QwYjhmZjEwMGI5NGJlYjUyNmQ1ZWUyNTQxYzJkODkwZDgxZjNhNDk2NjNiMTIxYzAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhiY2E3MWVjMzZhNzBmOGVmYTc5MjkzNWJjZDAzYWM5YjdhZjhiZjAzNmExMjI5NmM1NTFlYjA3OGQyMjI5YmEifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_85460ef46a6b4179ba50bff519dab4a9",
|
||||
"statement": "Mobile Assistant suspension blocks sending while its retained-owner drain is active and synchronously requests cancellation for every conversation before awaiting persistence and resource cleanup.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L115-L155",
|
||||
"version": "repo-lines-v1:sha256:8c82421c493d71a46a31cea25dee42618562d9e3080c889c363ebef1d1f47b25:eyJzZWxlY3RlZExpbmVDb3VudCI6NDEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ3N2Q1YWM0NmZkNzdmMWZlYWMyMTM1ZTlmZDAxMGYyMzk4MWQxYzBhMzMzZWJkMTNlZjE2MmUyYzZiNTg0MDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjMzZDE2ODk4MTU0MTExNzUyNDc4NGZlZWJjNTY5NzIzNmYyZDk2ZDI2YWJmYjA2ZTIxYmM2OWQ4MzIwODY0MTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjAzNjFmYmU2YTJkNzg3MDAzYjc5NDliMDY4NTFjOGJlNDczNTI3MDNiZjAwYmZkYjM5YTVlZmEwZDAxYTdkNmQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileAssistantTests.swift#L493-L551",
|
||||
"version": "repo-lines-v1:sha256:65515a4e9bdd6ebad25be3bccb372ded2a1a7af650a3a47ab525c5daa87a2c49:eyJzZWxlY3RlZExpbmVDb3VudCI6NTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxNWNkMzA5ODJjNzNiNzE4ZGVlNzZmNTU0MmRlNTY4NjBmYzMzYjdkM2QzOTk5NTA3YWVmNjRiYTNiNTgyOTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQxOWUxMzBmOWU5ZWJmMzY5ODJhNzdjYzg1M2M3NGQzNWNlZjVmNDgyOWEyYTA5NmM0OWM3ODBmZmFjNjFlZGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjNjODI0MDgxOWY3NzlmNjQ5ODAwYjY3ODkwMjEzOWQzNDM0MTFhZTI3YjA4OWU3YWJiOTFlYThlYTAzYTQ3NjgifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T07:36:39.730Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:eebf0a77f06515f063a173fdf53ac96cca81aeae0519a99c3c2697d94c59429d",
|
||||
"pageVersion": "sha256:4f2820877ec3b78a77319f48a9cfee8f397b3bf2216d9de35fce3ebdf601f2c9",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_34230e88036241baad093fb8de5bac8e",
|
||||
@@ -32,7 +32,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileSceneModel.swift",
|
||||
@@ -140,7 +140,7 @@
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/TermindApp.swift",
|
||||
@@ -151,6 +151,6 @@
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:7b943e2d155437d61aafb7681db058ef94efb0afbdab534a552eeaee29dc8413",
|
||||
"pageVersion": "sha256:71a3c6e74feb945c25eb8f6d8025534596d9d7cdb41b67b79887004ca006d40d",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_8e9cf2adb50847f98fcd4516cb0ed521",
|
||||
@@ -60,7 +60,7 @@
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift",
|
||||
"version": "repo-file-v1:sha256:303d0a53d1bfa67f4ce602a193bc9c1e917b9f2075f5654acf19e9166dee9f1f"
|
||||
"version": "repo-file-v1:sha256:d4b9205cc908ce2c38eb1e82ca1ea0a84a45794fa0613b0e794177ae9e48a48a"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/Infrastructure/MCP/MCPServerSession.swift",
|
||||
@@ -216,7 +216,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:e1458e03b4dc3d86d48461e276ad947b989000475cf59e42b68402a40297a355:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
"version": "repo-lines-v1:sha256:0569dc2b10c701c3b0c48b14a14a2521ba0f40ec2645f7220d7e5a61e98501d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/TermindApp.swift#L285-L294",
|
||||
@@ -231,6 +231,6 @@
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:ed3f410b516491c6b31b18037bf8c9a0274dc08a50a13080e5d7906c041da1af",
|
||||
"pageVersion": "sha256:63336e85b6d432a53dd31486e99e84d3cb86d592f42771810bab0fc8e9e52392",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_bd9f5ddda6b6466eb79c622b02fd73f2",
|
||||
@@ -128,7 +128,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -156,7 +156,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileSceneModel.swift",
|
||||
@@ -192,7 +192,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:e1458e03b4dc3d86d48461e276ad947b989000475cf59e42b68402a40297a355:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
"version": "repo-lines-v1:sha256:0569dc2b10c701c3b0c48b14a14a2521ba0f40ec2645f7220d7e5a61e98501d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L635-L663",
|
||||
@@ -228,7 +228,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/Features/Workspaces/Pane.swift",
|
||||
@@ -250,7 +250,7 @@
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:e1458e03b4dc3d86d48461e276ad947b989000475cf59e42b68402a40297a355:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
"version": "repo-lines-v1:sha256:0569dc2b10c701c3b0c48b14a14a2521ba0f40ec2645f7220d7e5a61e98501d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/TermindApp.swift#L285-L294",
|
||||
@@ -286,7 +286,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:e1458e03b4dc3d86d48461e276ad947b989000475cf59e42b68402a40297a355:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
"version": "repo-lines-v1:sha256:0569dc2b10c701c3b0c48b14a14a2521ba0f40ec2645f7220d7e5a61e98501d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L115-L158",
|
||||
@@ -334,35 +334,27 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_d0076b157c24486fadd4f8c45203ef7f",
|
||||
"statement": "The desktop captured-turn drain is best effort: a joined save attempt may fail, shared SSH authentication/pool setup may not settle from runtime cancellation, background-command close only requests cancellation, and existing compaction/title/index tasks are not joined; successful terminal saves can schedule indexing after memory suspension, while fallback can reply before later cleanup runs.",
|
||||
"statement": "The desktop captured-turn drain is best effort: joined save attempts may fail, background-command close only requests cancellation, manual compaction and title generation are not joined, and shared SSH openings remain alive while other waiters exist; memory suspension now stays fenced until resume reloads state and backfills history rather than allowing terminal saves to restart indexing.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L784-L820",
|
||||
"version": "repo-lines-v1:sha256:3a8d4faf591d7bce9a67365af3b6cc4e062c09c1dbfd76139ac4ecaa6412c6f8:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ5NDc3Yzk3MjM2ZjdjMzNlNGNlYmM4Y2Y0MzQ4NmEwYzU3YmQ1ZjFhMWFlZTY1ZTc4YzM1ODZkNmIxM2Q3MDMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3NWRkNzE5N2NkYzMzYzYwMDAwODY3MmM2NjEyZGFmNWUyMmMzMzAyNDdhM2FmMGJmODJlNDgwMmYzNmVlMjMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ3MTVmNGViNzI5YTZmMGMwMDk2MWMyN2JhMzFjNmU2ZGQxNWIwNTFkOTRhOGI5NzY3YWQ4Zjg3NGZmODBjZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/Agent/MemoryIndexedAgentRepository.swift#L13-L16",
|
||||
"version": "repo-lines-v1:sha256:dd81b44cc0557db5439accd290c19cb9b58b2c232fd0f3255a0504d4c2cc9d18:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNzdmNTQ1ZWVjNjkzZmZiNDU2YWM2NGRmZjc4YTA2MTcxYjYxZDI3MjVjZGUyNTdhYjg2ODgzNTc0NmQ5YzM3NSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNWMwZTU3ZGY4OGJhMmExOGMyZDQwOTJmNzM4N2E3MmFjMTBlYjc1NWNjNjFiZDlkYTFlYzU2NzdkMWNjZjE1YSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzRhYjk4MjQ4YzViYmM1M2IzZmFjZjQxYmI2NWQ3ODk5YzhjYmRiYWJmYzJhYTQ1ZWVjYWMxNjhmNmQ0MzU1OCJ9"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L177-L204",
|
||||
"version": "repo-lines-v1:sha256:463d4609d3eaa2a49b28fa86063677b92b26cb06a7c30dc499260f0aa1a5278c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIxNjhmZjRmY2M1OGUzOTQxNjdmNmMwYTkwOGZiMzIzZDJmZmM3YWRmYWEzMTNjZjk3MDhhOTNmMGM2MmFjYjgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNhMTc5NmZiOTc5MjY1ODlhZjExYTQ5ZGNhMjViNTgwMDlkYjVhZjhhMWQ3Y2UwMjhjZmYxNDBjYzJhNWEwNjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZhYTc3MTExMzFhNDc3MTA0NWFhMWU0NDlhZmI3YjkyOTg3Njk1ZDRjNTkzZDYyZGI5Mzc0MTQxNGFmNTMzZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L153-L180",
|
||||
"version": "repo-lines-v1:sha256:70176bb0b07b5d039e790f72be2fd529f699f1cd9b61d2019f01e7243c5542a0:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIxNjhmZjRmY2M1OGUzOTQxNjdmNmMwYTkwOGZiMzIzZDJmZmM3YWRmYWEzMTNjZjk3MDhhOTNmMGM2MmFjYjgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNhMTc5NmZiOTc5MjY1ODlhZjExYTQ5ZGNhMjViNTgwMDlkYjVhZjhhMWQ3Y2UwMjhjZmYxNDBjYzJhNWEwNjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZhYTc3MTExMzFhNDc3MTA0NWFhMWU0NDlhZmI3YjkyOTg3Njk1ZDRjNTkzZDYyZGI5Mzc0MTQxNGFmNTMzZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L251-L255",
|
||||
"version": "repo-lines-v1:sha256:46b0558ae01ecd5d23e50f403021b1076616087e98308d4065bd3d8626dc7a58:eyJzZWxlY3RlZExpbmVDb3VudCI6NSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZjU1OWVmYWQzMjUzOTliYWNiNTA5OGJkNmQyMDFjMDEyODQ1MjhiMzFkMjBhMDNkMzI0Y2NmOWQ2N2IxYTlmZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDgzNTRmZTc1YTVjYmMzYzViYmVlYTdkNThkMmUyMGY4MDJmYTgyYmNlOWVkOTRhMzJjODljOTkzMzM1MWZiYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiODYyODEyOGQwOTU4NjAyZTI1NGQ2YWU2ZWE5MGNmMzQ3MDQ5ZjM2N2EwMTcwMTAyMmY1MjhkZGE0OTMwNTk5OCJ9"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L274-L284",
|
||||
"version": "repo-lines-v1:sha256:c6bd184fd629fc2765d33f8ae15143e6791863bd814b8356a2ceefdd5dcfe82e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1NTllZmFkMzI1Mzk5YmFjYjUwOThiZDZkMjAxYzAxMjg0NTI4YjMxZDIwYTAzZDMyNGNjZjlkNjdiMWE5ZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4MzU0ZmU3NWE1Y2JjM2M1YmJlZWE3ZDU4ZDJlMjBmODAyZmE4MmJjZTllZDk0YTMyYzg5Yzk5MzMzNTFmYmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentBackgroundCommands.swift#L161-L168",
|
||||
"version": "repo-lines-v1:sha256:0cf7f999434cae91c1dad2c325405a08e8456edc6bb0625623dd3016bfbd4236:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNjAwM2RjOTQyY2M5M2MyY2E2MWM4ZDc1YzFkM2NmNWM1OTUzNjg1YmY1YmZhNzRlZjIzMDY5YTJkYmU5Mzg0MCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZmExM2NkOGJlNzIzNDcxZmEzZGE3ZWI4NTdjMjYxYzJmNjRlZWQxZTUwMzMyNTQ3NTlmOGYyZGUxY2Q2NjNkNiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMzg2Nzg2ZDIwN2ZlMzE4MDZjYjIzYzA0ZGExZTQ2Y2ZkYTNlMjNmNDg3ZGJhOWFmMmIzZGYzMTIyOGY2ZjAwNCJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1543-L1575",
|
||||
"version": "repo-lines-v1:sha256:32cc2e0c42513700520084d4401216b1a3f77cfc0dba7999d7f25613103a928f:eyJzZWxlY3RlZExpbmVDb3VudCI6MzMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFlMTUzZjdkNDRmYWI0YTU0Njc3N2Y5MTRiNmRkMGUwMjIyMTA0ZjM5OTY0OTdhMDYzNDJmYTFiZWUzYWU1NWYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ3YTBlZjQ2NDQzM2JjZjY0MDBhM2RlZTVhNTZlMjQyMmFkYmFmYTVjNDBmMGJhNzY3MzJlOWU4NGY1Y2QyM2EiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQ2YzJjMWEzYjJlYzM4ZjE5MGJkNzllM2M2NzNiOGNkNWE5MWMyZGEyYThkODM4MzdlZjgzNGVhNzU3ZjZiMDciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjM4OTQ4NjdkZDBkYTNjOWE2MTdhYjIxODMzODc3NjkwZmJkZDhjNTEzZTg5N2MyZDBhZGY0ODM1NGU2ZmJlMTAifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L599-L649",
|
||||
"version": "repo-lines-v1:sha256:264009231dd112a56fb55f2187bd34367716c9df86e21870d47ee40f60cf2884:eyJzZWxlY3RlZExpbmVDb3VudCI6NTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdjOWRhNzhjOTJlMzEzNzI1OGY0NzA5MGQ1MjM5OTY2ZWEyYWQ4MTczYzRiZGZkMTQyMzhjYjE2NzcxZjM1MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZmNGQxOGNmNDZiOWM5ZmQ0MDViYmVkZjlhZDc5ZmVmMGNhNGYzYjI4NTdmYWQ5MDA0NDI5MGJkNWM0NTVkMGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA5ZmMwMWRiNDUzOWNjNTgxNGFhOTk0NDQ0NzhlMWY2MTI5ZjNhODllYzFjYTEyOTllYWM5ODBhZjZhZTRlMTEifQ"
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1675-L1774",
|
||||
"version": "repo-lines-v1:sha256:4847b31059874bdbaee91f89d037bedc3d8dd27b943965835fd217cd28a0a7e3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAwLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIxYjhiOGI5NmRlMjNiYjM5ODI5OGU1MjIxODE1ZGI2MjViZGYyYzgxYjYwYTQ2ZGJiM2VjMmQzNDJmMzU0NTUwIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJlNmIwNDQ5MTQ2OTcyMmU4MzYzYTk0ZTQwNDQ1MzhlMDEzYTJhMjE3ZTM2YjFlNTY4YmE2MGFjYjdiNGM4ZjJlIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI5NjQ1MzUwNzkyMTM0YjdhMWIwYjM0YzM5MWU4Nzc3YTI3Mjk4NmEyNjQyYWI0M2E3M2M3YThiYjI5MTcwZTRlIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI3NDcyMmRmYjk2MDYxMDVlNTFhZjZkZDllYzI0YjNjZGE4ZDQ1MDU0NzA1YzUxN2UwNGU4OTJlM2U1YzQ2MjZhIn0"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/AppModel.swift#L724-L777",
|
||||
@@ -373,10 +365,46 @@
|
||||
"version": "repo-lines-v1:sha256:95d9d41a8e9a63b0bbdf8354b715f24f754a017b597e2b2228218077a6ed4d25:eyJzZWxlY3RlZExpbmVDb3VudCI6MzAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZkNjgzYjc5NGVkOWI1NjQ2Y2Q2ZTZjMGEyYmMzYTk4YTFjN2NiYmMzMDUxZWZiN2E0NWQzYWI5MWI0MDRhZmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjcwMWZjNjEwMWEwZjJiMGNiNmFkNTEyYzg2MzExYzEyNzllM2VlZjMwNWExMDQwMTc5MzUzMTQ4N2MxYTllNDMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImIwZTJhYTI2ZTg3N2YxZWE5MzA4NjE5NmU0Nzg2N2U5MGYzNTk4ODI2MDA0MmY2YTM1YzEzZTlkNDRlOTVhM2MifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_debf1f28fcf94eaeacdf2c9260ce0947",
|
||||
"statement": "Mobile Assistant background expiration blocks send, edit, plan implementation and manual compaction until its retained-consumer and connection cleanup task returns, even if a scene becomes active first.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L115-L155",
|
||||
"version": "repo-lines-v1:sha256:8c82421c493d71a46a31cea25dee42618562d9e3080c889c363ebef1d1f47b25:eyJzZWxlY3RlZExpbmVDb3VudCI6NDEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ3N2Q1YWM0NmZkNzdmMWZlYWMyMTM1ZTlmZDAxMGYyMzk4MWQxYzBhMzMzZWJkMTNlZjE2MmUyYzZiNTg0MDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjMzZDE2ODk4MTU0MTExNzUyNDc4NGZlZWJjNTY5NzIzNmYyZDk2ZDI2YWJmYjA2ZTIxYmM2OWQ4MzIwODY0MTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjAzNjFmYmU2YTJkNzg3MDAzYjc5NDliMDY4NTFjOGJlNDczNTI3MDNiZjAwYmZkYjM5YTVlZmEwZDAxYTdkNmQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L180-L260",
|
||||
"version": "repo-lines-v1:sha256:c377573e0d98f0eb75f9769c7e3753d2c3bb1fdc6bb040c7a00bc27da2b71ae6:eyJzZWxlY3RlZExpbmVDb3VudCI6ODEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjY5NmFiZTAwOGM2OTQ0YjBhMzJiZTcyZDM2Y2ZmMjNkMDc0MmE0MDEwMDIzY2I4NmFhNjYwNjAxMGFmMWM3NmQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJmM2UzN2Y2NzljZDY2NzAyYjcxZjNmOThkN2IyYjYyZTAwMGEzM2FkYjQ4OTE1NDdjNjZhOTJkNDEyNGIxNzkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA0OWUyMjI0YTkyOGRhNTQ1YmEyMjYxOGQ1MzVlYmVlZWNlZGYyMmJhMzJlNzhhMmY4ZGQyMDU2ZDQxN2EyMzUifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileAssistantTests.swift#L493-L551",
|
||||
"version": "repo-lines-v1:sha256:65515a4e9bdd6ebad25be3bccb372ded2a1a7af650a3a47ab525c5daa87a2c49:eyJzZWxlY3RlZExpbmVDb3VudCI6NTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxNWNkMzA5ODJjNzNiNzE4ZGVlNzZmNTU0MmRlNTY4NjBmYzMzYjdkM2QzOTk5NTA3YWVmNjRiYTNiNTgyOTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQxOWUxMzBmOWU5ZWJmMzY5ODJhNzdjYzg1M2M3NGQzNWNlZjVmNDgyOWEyYTA5NmM0OWM3ODBmZmFjNjFlZGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjNjODI0MDgxOWY3NzlmNjQ5ODAwYjY3ODkwMjEzOWQzNDM0MTFhZTI3YjA4OWU3YWJiOTFlYThlYTAzYTQ3NjgifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_0e5b894c36874fc79d38240142ad81e8",
|
||||
"statement": "An active mobile scene resumes Hermes memory by reopening admission, reloading committed state and scheduling history backfill before later memory work uses the new generation.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://FrameworkTests/HermesMemoryTests.swift#L116-L181",
|
||||
"version": "repo-lines-v1:sha256:ce72d05810dc1671686e744e8d2fdaf825e3662b3dd2f726191909a92e01ab3a:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE3MjA1MzIyZDIyNTY5NmVkODY4OGRlYzk5N2NjNGMyMzZlN2M4ZDVhMDY4ZjBmOGEwNzg0NWJkYzk4NWJhYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFkMmZlMGM5ZTQ2MGJjYjM4YTQ0YzY4YTY2OWNlZWY3NDA4YWExNjcxMmUwMjZlMmFmZGI0Yzk4NTc5YzlmMjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY0ZWMyOTlmNTE0NWQ5M2I1YWM4OWZmMzVlOTE2YjE5ZDE3ZTA3NTg0MWQ1ODIwODI4YzdlMjJjZDMzZjdiYzYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L274-L284",
|
||||
"version": "repo-lines-v1:sha256:c6bd184fd629fc2765d33f8ae15143e6791863bd814b8356a2ceefdd5dcfe82e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1NTllZmFkMzI1Mzk5YmFjYjUwOThiZDZkMjAxYzAxMjg0NTI4YjMxZDIwYTAzZDMyNGNjZjlkNjdiMWE5ZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4MzU0ZmU3NWE1Y2JjM2M1YmJlZWE3ZDU4ZDJlMjBmODAyZmE4MmJjZTllZDk0YTMyYzg5Yzk5MzMzNTFmYmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:b0fa484bcb19ae7f887f203d3b438c9bccc7b5936706cd85d285e53c0f9b31d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI0NTg0ZDFiMmZhZDA3YjA0ZTIwZTVjOGE2MTM3OGEzNDFjZGJlN2E4ZDgwMzAwZDQ2NzJlNjhhYjcxZTFjZjMifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:bc62050f5799c6e7764ff9d08a0e721dda371eb74b7b8342346c59f747abb3b5",
|
||||
"pageVersion": "sha256:6971c304cb02eb6f308dbbbc6833b74c5a84b608c4e4a8435a9716000c404ec9",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_8809151c43594803b83cf0451d849112",
|
||||
@@ -241,10 +241,50 @@
|
||||
"version": "repo-file-v1:sha256:6215ae5d2e32c9f76d70d6401196b14937f7be4b1e06b67db2297f3b81d86aa4"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_8e381cddf0fb4803b848b245806f77f1",
|
||||
"statement": "StoreKitTrialTests is a separately gated desktop suite that stays disabled unless TERMIND_STOREKIT_TESTS=1 because running it requires manual StoreKit authorization.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L56-L58",
|
||||
"version": "repo-lines-v1:sha256:59b48c1c93af632d0d54f375f34be63bfe084da21dbf98d89f2c5174f4f566ea:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNWYxODBmOWMxMjY5MDNiY2MzMzFhYTk1NDU2ZTQ5NDQ0YTdkNGQwMTFlOGEyYTgzZjVkYzg3MDIzOTE4MTJkMCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYjQ4MzZlZDdlMDA1Mzc3NWEwYTk2NmNlODYxMzRiMjM0N2Q4NTFhN2IwMmY0ODEyYmViMmM1OWQxYzY4ZDUyNiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZGMwNmIzZDc5NGYzMzczOTYxOGNhZmVjOTQwY2ZkY2YxZjllYjI1ZjI5YjUyYWJjZmNkZjA0MWY3NTg2YWZmYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTA1MTY5OTI5YTliMjNhOWIwMDJiYjE5MDNhYTA3ZWMxZGE0ODA1ZjY3ZTEyNTBmYzZjOTQ4MDlmMzJlMGM3ZSJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/StoreKitTrialTests.swift#L1-L18",
|
||||
"version": "repo-lines-v1:sha256:01f6bcd9c1be6ab834bd576093f823f2b13ebdc7043b843fc256fa8ab1b51bb3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjUyMzkxMGFkMTQyYWFlZTQ0YzE0ZGU2YTYxODVkZTBiY2NhNDhlYzZlZGQ3ODFlNWU1MjQzYjdiODk2N2VkMTkifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_3900a257383845c3891e337c052955f7",
|
||||
"statement": "Mobile UIKit key-window integration suites are opt-in and must run with parallel testing disabled because they share process-global presentation state.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L50-L54",
|
||||
"version": "repo-lines-v1:sha256:5119b61ad141f6edb840c60139e371386a18a8cd4b9f5912a76c1c142abedb1f:eyJzZWxlY3RlZExpbmVDb3VudCI6NSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiODQ1MThlZDQyNWZhZWNhNTgxNGExYzEwMTU0ZjEzMjgxOGViM2VjMGI2ZTgzOThkZjQ5NGI4YWRmN2MzYTI0NiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNTAzYWFlMjllMDYzMTZkNmRhNmY4YzJhOTFmNmU0NGE2MTJmYWJkNzkzYWQxZjVhMWZjYTUyMDZiY2VkYTQ3YyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZmVjYzgxYWMyZjE3ZWVjMDQwYzhjNWM2NzYwODkzYjJkNmJmMmJkMjVhN2M4MTlkMTBhMGMzMWZmMjE5M2NhZiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZWIxYmM1YmM0YTIzN2Y1NzhlNmFmNGE0MTVkMDY0N2Y5OTEwYjAzYjM2NGUxZTI3YzFmMWRiYWE3NDNkMDNiYSJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileEditorToolbarTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:f3c48bd72cbd1f8c19ae509d0b42757cc76641b1ba1ab1eba51d555a48751658:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkNGQ0Njk5YWY0MjE4ZTg0M2FhOGQwYzZjNTY3YjEzMzMxYzA5MWQxYTgxMzI0ODE4MWM1ZTRjMjQ5MDRlN2IifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileForwardingRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:1c43b4b67ff75200d330c0e6dcb8a7c652af56899d58c6fccc9aca89262ec5fe:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1OTEzNmM3MGIwNGU3YjM0Y2U1OWIzODMxZGFiNjY0NWIwY2MxOWIzMjg3NmQ1ZmFiZjNmMmVlMjY5NTg4MmMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4M2IxNTM3YjRlN2Q0NWFhNWJmZGM5YjZlY2RkZGUwMmM5ZGFmYTEyNTQ5ZjUyMjRkMDc3Mzk5MGZjZjFhZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileHostIntegrationRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:07c662e83a529833bf9aea2b962509e8653d5bf9062d208b941f887f04216160:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMxOGMxYWY1Y2Q1MjFiYTJlYmNkZGZjM2U1YzEzMWRhNDhmMjA1YTAyNWMwOTU2Nzk2Yjc2NTBkMDg3NDQzOGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjN2VkN2ZlM2FkNDdlMGNlOWFkZjhjODdkZDEyZmZlYzczMmI5Y2FkNjZhODYyMzI4ZTgwNTM2ZjIzMzBlOGUifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileSavedNameRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:0eddd809cc4a05cb51814cbb15b23dc1a881757e4f63cd610d210108342a4038:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlOTE5NjUyYjQ3ZmJjZTM2Y2UxYzA4NTE5MjFlZWY4YjBmZjE1NGNiODMyYjlkNTY2YTY0MDYyMGQ2MjFmNGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxODAyNTA0ZjI1YmEzY2QwYjhmZjEwMGI5NGJlYjUyNmQ1ZWUyNTQxYzJkODkwZDgxZjNhNDk2NjNiMTIxYzAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhiY2E3MWVjMzZhNzBmOGVmYTc5MjkzNWJjZDAzYWM5YjdhZjhiZjAzNmExMjI5NmM1NTFlYjA3OGQyMjI5YmEifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T06:11:02.802Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:2552fa8187812755085075681b5a5148ef62a16224616146ec131bd1fb880d64",
|
||||
"pageVersion": "sha256:18ed1963cf31915d010fc6c2937f77cd377fff2d65fae74d1c7ae7c9793f3700",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_085ce722f39f48eea75366ec3b3f7554",
|
||||
@@ -40,7 +40,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md",
|
||||
"version": "repo-file-v1:sha256:d9c994a1f4dde96fe39505281f40e992ce4760d2d6752de29f59060250bbdca9"
|
||||
"version": "repo-file-v1:sha256:7c19a99ec73d4473ac94bb134b62a1306c62d1285e5b8af26430f1d466de35a7"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindPersistence/HostPersistence.swift",
|
||||
@@ -66,7 +66,7 @@
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/TermindIOSApp.swift",
|
||||
@@ -176,7 +176,7 @@
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/TermindApp.swift",
|
||||
@@ -191,6 +191,6 @@
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:ee7c8c1d70af9d78c4effdc07f9f5b65fb08c92a14abee40c88be00a9df41c87",
|
||||
"pageVersion": "sha256:7fbe6994d8040bdf4a14e40af86c0197d0e560cafa0f7f62a0803988dbf4f85e",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_981f16f030e9469588af705aa377161e",
|
||||
@@ -234,7 +234,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift",
|
||||
"version": "repo-file-v1:sha256:3a875082b9ca385a928fcf0e8bda396e66be74ac882859697c6ccf5423058df7"
|
||||
"version": "repo-file-v1:sha256:53303b99278ef87af5bc0365c6546c10de8ea4cc6462f0bc9e1d39ba048515a7"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindPersistence/GRDBMemoryStore.swift#L123-L224",
|
||||
@@ -252,19 +252,19 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_a3ad24a30cc74874af7e95eba686afbc",
|
||||
"statement": "Disabling Hermes memory invalidates contexts and cancels indexing/reviews while retaining storage, whereas destroy persists disabled state, joins work, and removes the owned database directory; stale accesses are rejected by generation checks.",
|
||||
"statement": "Disabling Hermes memory invalidates contexts and cancels indexing/reviews while retaining storage, whereas destroy persists disabled state, joins work, and removes the owned database directory; stale accesses are rejected by generation and suspension checks.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L232-L255",
|
||||
"version": "repo-lines-v1:sha256:1f1936e4e3cbc44909d06cc25a5f18b6c26588b7ff8596107fe54c2e1c9e1a5c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhlNzEwNmQ4YmYxZmZiMTA5ZGJhZjNlNzU3ZDYyMzA0NGEyYTE4YTZhODg4ZmU1YzllZGFiNjFjMWQ1NjBkMjEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjhjYThiNmYwOTgwNzYzZjgwY2I3Mjk4ODliYzM3MTdlMTQ1MjBiOTkxZGVkODdhZDNhNWZmOGUxY2FmYTJjMzgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L255-L284",
|
||||
"version": "repo-lines-v1:sha256:e1784330f269064b86773f626a5b55f7a2fd71523446b7fb6ae744741c90b8ab:eyJzZWxlY3RlZExpbmVDb3VudCI6MzAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhlNzEwNmQ4YmYxZmZiMTA5ZGJhZjNlNzU3ZDYyMzA0NGEyYTE4YTZhODg4ZmU1YzllZGFiNjFjMWQ1NjBkMjEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjhjYThiNmYwOTgwNzYzZjgwY2I3Mjk4ODliYzM3MTdlMTQ1MjBiOTkxZGVkODdhZDNhNWZmOGUxY2FmYTJjMzgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L52-L76",
|
||||
"version": "repo-lines-v1:sha256:63ceffb701cb214698f1c57e2105b4dc02d7d20d26ec8b71c4eb50058a6e8aed:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMwYzVkNTIyNmFhZThmY2Y0MzhjMzM0OTQ3MWY0M2JlYWU3ZjkzYjAwMTlmOWY3MTIxOWQyMzhhNTY3MWU0YWIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJmMjE1Y2QxMWU4MjNlM2M0M2IxYWY0OGI2MDBmNDQ1ZTY5MDA4OTZmNmU1MmFlN2U1ZGI3M2FmYjFkNjMwMmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU5NzJkNjIzZGZjOTFjMGU2YzQ4MDU1YzY3NzhlYThmNWUxZGQxOTYyZGNlYmY3YjY1NDQ4M2NlZGUzZGY0OGEifQ"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L53-L76",
|
||||
"version": "repo-lines-v1:sha256:7c4365b3144f820a6bf6277f89ffedc136cf093a4d1dbfd34b12228c640a16ec:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMwYzVkNTIyNmFhZThmY2Y0MzhjMzM0OTQ3MWY0M2JlYWU3ZjkzYjAwMTlmOWY3MTIxOWQyMzhhNTY3MWU0YWIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImZmZWNjOTI3NDViZjE3YmEyOGU5N2Y3ZDM3ZDUwNjExYzQ4NmU2ZmYwMDFmZGM3NDBmZTVlN2YyMDYxMTYwNDMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJmMjE1Y2QxMWU4MjNlM2M0M2IxYWY0OGI2MDBmNDQ1ZTY5MDA4OTZmNmU1MmFlN2U1ZGI3M2FmYjFkNjMwMmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRkNWI4OTE4YjQ5NWU5NDY3NjA4OWMyMjY0MTAxNGY4ODFiZTJmODg2N2QwOWRkOTdjNDNhZDk2YTBiMjAxZjcifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L98-L140",
|
||||
"version": "repo-lines-v1:sha256:63a4e0832eb58af19f1014b010116530bd83aa6cfe5c62c9e3643d154d77383e:eyJzZWxlY3RlZExpbmVDb3VudCI6NDMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk5MmZkOWM4MzE1NGM3OTBiNGI3MDUyY2ViZTk3ZWI5ZjVjZjYyNjZhOGFkNGY2ZWMyOGY4NjY5MjU4NWNhMmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3MmY5Njk1Yzc0NjdjNzQ3NzNjOWNlN2ZjNDI5YzVkMGQwZTQ4N2YzYzUxZDE1ZDY2NjhhM2QyNDA3MmJiOTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFiYzgyYTk3NzE1YzQ3N2I3MzM1MWJkN2M4NGVkYWRjNTdmMTlhM2QzOTIyYjE2NjRjZTlmOGZlNTdkNzU3ODIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImQyNWZmZTlhNjZiY2Q1Y2QwNWE0NDhhYjFlYmQ1NmVjMTJkNTg1ZjYyN2RhOGM5YmI2ZjYxYTVhNWUzOWU2YzcifQ"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L98-L156",
|
||||
"version": "repo-lines-v1:sha256:fefd73279e7bae150fd1456fb9c4fe71c6894b670f2e57f9465b7153df418934:eyJzZWxlY3RlZExpbmVDb3VudCI6NTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk5MmZkOWM4MzE1NGM3OTBiNGI3MDUyY2ViZTk3ZWI5ZjVjZjYyNjZhOGFkNGY2ZWMyOGY4NjY5MjU4NWNhMmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3MmY5Njk1Yzc0NjdjNzQ3NzNjOWNlN2ZjNDI5YzVkMGQwZTQ4N2YzYzUxZDE1ZDY2NjhhM2QyNDA3MmJiOTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFiYzgyYTk3NzE1YzQ3N2I3MzM1MWJkN2M4NGVkYWRjNTdmMTlhM2QzOTIyYjE2NjRjZTlmOGZlNTdkNzU3ODIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5MTIwOTlkZjRlMDZjMzE2MGQxNmVmODEyNzE2ZDFjNmE2MDJjNTRiYzAyODUxNGNmZmRmYmQ0ZmU3OTRkYzAifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -485,12 +485,12 @@
|
||||
"version": "repo-lines-v1:sha256:70eb20eff459aff69f606cacc64e2820ff4dfef497ac0aa9b4d16242c3ebe5e9:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ5Yjk2NjZhZTAyNTVlNjdiODYwZTUxNmU2NTNjNDg2NThhZmYxN2Y3NjdhNTk2MjIxMDI4ZjQ3ZTcwMjJiM2YiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJlNTU4YzYzYTI3MmJmMmFmZmE5YTc2NGViNDBjOWIzMWU3NzUyMjBlOWI3ZTg0YTk3ZWJhNzk1YjIwNGQ0ODIifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L215-L227",
|
||||
"version": "repo-lines-v1:sha256:cd20a3869cf3d54e2dba2169f1e5d4a254f24780ec533eae7cebbc62715da7e2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU5ZjlhOGZjNjI0YTNlM2JjNjU0ZjJiMGJjYTRhYjk4ZDgzNGJiZmY0M2Q2MTI2ZGNiYzg3OThhODE4Njg0MzMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImVmMzBhYTA1MGU1ZjU1NjUzODUyZDU3YzU5ZDBmZWFhMWUxZTJkNmJlYzc3Mjk1NTQ4ZjFlNjExZWZmNzc0OTEifQ"
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L217-L229",
|
||||
"version": "repo-lines-v1:sha256:b16064d85b0614fc662b49558b83b061cfe3dda7168cb2a60b948cb891506760:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU5ZjlhOGZjNjI0YTNlM2JjNjU0ZjJiMGJjYTRhYjk4ZDgzNGJiZmY0M2Q2MTI2ZGNiYzg3OThhODE4Njg0MzMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhjMmU5YTYzYjZiYjJlNWQwZmMxZmYxZWFiZjhmNDJiODYzNGQwNTQxMmQyODRkYzA4NTNiNzcxMTI5ZTZhOGMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/AppModel.swift#L638-L654",
|
||||
"version": "repo-lines-v1:sha256:52f1ee86dd5715fa752288f82f000ad9f5df3df9a8b00a1cd9ca301d14921032:eyJzZWxlY3RlZExpbmVDb3VudCI6MTcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjFjNDJhZWNiYjEyMjRmOWZlOGI3NjQwMDJhOTcyYzgwMzBiNDNiZjY5NGI2MDdjZmIzNTFlM2QwYzFmZmJhMzUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjFlZWMxYmQwNjQ0MjU2MWMzNjBkM2Q1MzgzZmQ3MTQwMjEwNzMwMWI2NWQ5NGYyZjk1YWI1MDIwYmRiYjdkOWMifQ"
|
||||
"version": "repo-lines-v1:sha256:87b8f260970cb6208ef05500d29e9b3b0e132c0ed86e8e2a2e54b79401534f07:eyJzZWxlY3RlZExpbmVDb3VudCI6MTcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImViNWVhODgxYzA2ODA5ZTRhMzRjNjJhM2NkNDVhMDEzMzZmYTk3MzE4NWM2ZmExMTJiZWJhYzdhOTY0MDA0NjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3ODY0MDg0NmE5MzJkZWQzYTNhNTkyYmJkMzc5MTA4YzVhYmZlY2M2NTE3MDFjNDVkNTg5YzRmYjUxMzBjZDUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjMzYjYxOGJlODcwZGM3ZWE5ZTZlODVjNWViYjI1MDdiMDZlZWJiODYxYjUzMjYzMWNlNDIzNGMxYzEzMDY4Y2UiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImMxMjI2NTBmNWU1Mjg1ZGI3YzJiZmMyMjA4NzRhMzIxNDBlY2I2MmMwY2VlYjlkMjcwZmIyZmQxNTkyYzUwNzEifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -622,27 +622,31 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_1b7003b57ebd41dfbc14412d029a7f28",
|
||||
"statement": "New submissions capture memory-session eligibility before preparation; later enabling does not add a session to the turn, while disabling revokes existing contexts and rejects late loads from the prior generation.",
|
||||
"statement": "New submissions capture memory-session eligibility before preparation; later enabling does not add a session to the turn, while disabling or suspending revokes existing contexts and rejects late loads from the prior generation.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L395-L428",
|
||||
"version": "repo-lines-v1:sha256:a08af3f8158f08c746947fff72a037f53c6abcef3acc5a298d04c24e3a817d93:eyJzZWxlY3RlZExpbmVDb3VudCI6MzQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFmODg2Mjk4OTI2YzJmYTAwODkxNDQ4MzdhZjIyYzFmOThlNWRiNTlhZDJiNDI3MDFlMWY4OWYwOTZlNjNiZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjFkZWFjMjgxZjBmYTk0OTMzODI3YzJlYzFlNGFmMThiZTk0Yjk0NjRmMzMyNDIyYzUxMzNiZDNmYThkODg0YmMifQ"
|
||||
"version": "repo-lines-v1:sha256:e0c628005bbd0a7b21b41f4d06fe389d8994c372892bab2fa31f47b2a7ef6552:eyJzZWxlY3RlZExpbmVDb3VudCI6MzQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFjOWM3NDk2NjVhYzY2ZWIzZjIzOTc3NmY5MWFiNTdjZDZjNWZjMDhmNjQ3YmUyMTBjNDUyYjMwZDBkNWQxNTYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU2ZTk4NzI4MTZlNDQwYjg5OTBkODc1NGNmOTY1ODNlOGY0MTQ2MzhmNzA5MjI1M2M4YTA2MTViOTlmNmE1NjgiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjJiMGJkZjExMTljYjZkMTBmYmM2NDg1MDZhZTA1MDUyNzAyODBhNjhiM2Y1ZDY3NWMxM2FmMTc1NmVlNTZmOTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJkNWI4OWU2MGQyY2NhOTBjZmQ1NWRlY2NmZGQ3OWZmYmFkNDExMGMxYzI3YTE1ODE4NmRkNTIzZWU0NmI2ODQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L611-L619",
|
||||
"version": "repo-lines-v1:sha256:04ba197fac5b56c77ec0c0f30bbd76411d9455f58e9d396d84d2b36c9e6967c8:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMzFmOWYwZmE1Mjg2ZTNjNWNjODQyMGM4OTlhNDllOWE4MDg5YzdlODFmNDM4MjhkM2ZmODE1YWZkNjhhYmU1NiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZjJhYjU2YWMwYTg2OWJmODA5ZWVlMWJkZGNlMzg4YWYwNzdjOWZiMzY3MjUyMWRjN2ZjOTVlMjA5YTExNzdjYSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMDY0NzlmM2RlOGUxNmNkMWJkMjcxMjk5YzlhYTY3MTBiOWFkMjU0Yzk5NTBmNGRiYjZkZjFmMDAyYzYwMjBiMCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzY0ZTM0ZWNiZjkzMjgzZDEzYTVlN2UyNGY0MTAxZTg2NzQ1YzI2NjZjMmNiOGEwNGY3YmE0N2QwM2Y5MTkyMiJ9"
|
||||
"version": "repo-lines-v1:sha256:797c520b75143282d1d5cf6143484c6e0f6a95f0bb2615d2a77457078b62bb6b:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNTUyMmM0MmNkMTljNmQwM2Q4MDhjNDUyNzIwNTUyODI1YjdlYTFjNWI0OTFiMjE4NTExY2FjNzQxNWNmOWQ5YiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmM3NWU3MTE3ZmE4MDQ5MWM3MTZlNjdkOWZhNjJiYWI2YjM1ZmJmOWEwMzczNDE4NjM4YWZhN2EwYjkyMDdhMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZDMyYzExYTI2ZDM4M2FkYjdiMmViY2RlNmE3ZWU1NmJlZTBhYWRhZTNjMjA2MmEzODhlYWUxYWY0ZjA3NzMxZSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMDY0NzlmM2RlOGUxNmNkMWJkMjcxMjk5YzlhYTY3MTBiOWFkMjU0Yzk5NTBmNGRiYjZkZjFmMDAyYzYwMjBiMCJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L794-L809",
|
||||
"version": "repo-lines-v1:sha256:f5bad0e8ec4b31fdac4505332e2c746548c179c72239909f782501aec3db7129:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRjYTA3Y2I3YmYxMDg4OGZkZDFlMmMwMDMzYzI4MDIzMGVkMTRkNjkzNGY0NjFiNTZhNTg3NDllNmRjOTUyNWYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjViOGQzYzU0YjEwNzZiYmJmNTcwMmQyMTc3NDA0NmFlZDI3ZmNlYzVhM2JiNzYzNzQ0NjNlN2RlYTEwNGMwMmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjcwYmFhMzUxMmU3OGFiOGM2NzBiZWU2NWVlNDQ4MzQ4ZTNjODVkNWZkYTFmM2JmYmYzYWRlMzI3MGIyNDY3MDgifQ"
|
||||
"version": "repo-lines-v1:sha256:a64446cfb2f421e6f070a56abb737a1236e081aa2786a60ee03a32f01e419be6:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMzNDAxNTgxMjg1YmEzYzg2NmNkZmVlMDFlZDE0ODhmZmQ1YmM4NDYxMmZhZTg2MTE4MDlkNDdmYTZhYzM0MGEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNiYzUzMDFiNzY2N2NjNmE5MGQzNzIxMjI5NWE0YmE5NTM3MTM3NDAwNjhjMzA2NmExYTYwOGUwNzg5ZTlkMDEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFlZjNmNzdkMzZmYzRmMmNjZjBiN2FiODYxYjA1NjYyZjA5OWNkMTg5YTg4ZmM4NDE3YjE1MmE1NGEzMTFiNDEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImJmNDVhNTRjOWY3NzBiOGQzZDAwNmU5ZjBkNzExNGMyZDgzZTkwYzU5ZDhhNzY0MjA3MDU5ZTgzZDAxN2UwOGMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L52-L76",
|
||||
"version": "repo-lines-v1:sha256:63ceffb701cb214698f1c57e2105b4dc02d7d20d26ec8b71c4eb50058a6e8aed:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMwYzVkNTIyNmFhZThmY2Y0MzhjMzM0OTQ3MWY0M2JlYWU3ZjkzYjAwMTlmOWY3MTIxOWQyMzhhNTY3MWU0YWIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJmMjE1Y2QxMWU4MjNlM2M0M2IxYWY0OGI2MDBmNDQ1ZTY5MDA4OTZmNmU1MmFlN2U1ZGI3M2FmYjFkNjMwMmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU5NzJkNjIzZGZjOTFjMGU2YzQ4MDU1YzY3NzhlYThmNWUxZGQxOTYyZGNlYmY3YjY1NDQ4M2NlZGUzZGY0OGEifQ"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L274-L284",
|
||||
"version": "repo-lines-v1:sha256:c6bd184fd629fc2765d33f8ae15143e6791863bd814b8356a2ceefdd5dcfe82e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1NTllZmFkMzI1Mzk5YmFjYjUwOThiZDZkMjAxYzAxMjg0NTI4YjMxZDIwYTAzZDMyNGNjZjlkNjdiMWE5ZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4MzU0ZmU3NWE1Y2JjM2M1YmJlZWE3ZDU4ZDJlMjBmODAyZmE4MmJjZTllZDk0YTMyYzg5Yzk5MzMzNTFmYmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L98-L116",
|
||||
"version": "repo-lines-v1:sha256:ae20e9db15b84f07e0787f36390d963dfb0425b2ba7f5a5cec258e46ddc6598f:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk5MmZkOWM4MzE1NGM3OTBiNGI3MDUyY2ViZTk3ZWI5ZjVjZjYyNjZhOGFkNGY2ZWMyOGY4NjY5MjU4NWNhMmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFiYzgyYTk3NzE1YzQ3N2I3MzM1MWJkN2M4NGVkYWRjNTdmMTlhM2QzOTIyYjE2NjRjZTlmOGZlNTdkNzU3ODIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjZmQ4ZjZmYzk3NjQ5MmIzNjQ2MmQ4NmUyNjVhODNkNGRjYzlhN2YwMDViYmZjYmI1NjYwZThkOGM0NmQ1MzkifQ"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L53-L76",
|
||||
"version": "repo-lines-v1:sha256:7c4365b3144f820a6bf6277f89ffedc136cf093a4d1dbfd34b12228c640a16ec:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMwYzVkNTIyNmFhZThmY2Y0MzhjMzM0OTQ3MWY0M2JlYWU3ZjkzYjAwMTlmOWY3MTIxOWQyMzhhNTY3MWU0YWIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImZmZWNjOTI3NDViZjE3YmEyOGU5N2Y3ZDM3ZDUwNjExYzQ4NmU2ZmYwMDFmZGM3NDBmZTVlN2YyMDYxMTYwNDMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJmMjE1Y2QxMWU4MjNlM2M0M2IxYWY0OGI2MDBmNDQ1ZTY5MDA4OTZmNmU1MmFlN2U1ZGI3M2FmYjFkNjMwMmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRkNWI4OTE4YjQ5NWU5NDY3NjA4OWMyMjY0MTAxNGY4ODFiZTJmODg2N2QwOWRkOTdjNDNhZDk2YTBiMjAxZjcifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L98-L150",
|
||||
"version": "repo-lines-v1:sha256:4861df2a432fb0b946b8527e319163182d0e31dd2ea3e4d569edb846c98f4860:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk5MmZkOWM4MzE1NGM3OTBiNGI3MDUyY2ViZTk3ZWI5ZjVjZjYyNjZhOGFkNGY2ZWMyOGY4NjY5MjU4NWNhMmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3MmY5Njk1Yzc0NjdjNzQ3NzNjOWNlN2ZjNDI5YzVkMGQwZTQ4N2YzYzUxZDE1ZDY2NjhhM2QyNDA3MmJiOTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFiYzgyYTk3NzE1YzQ3N2I3MzM1MWJkN2M4NGVkYWRjNTdmMTlhM2QzOTIyYjE2NjRjZTlmOGZlNTdkNzU3ODIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTlhN2I4OGVlMzgyYzM4Y2VjMjZiNWYxZDhiNDczNGYwNDRlNDRhYjRiNTM0ZDE2Yzg0MjBlMzZiOTZlOGYifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1000,19 +1004,19 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_750079dc18ec48c1be4abb0842993534",
|
||||
"statement": "An independent three-second macOS reply fallback can end quit waiting before save/resource cleanup finishes; shared unstructured SSH authentication/pool tasks may not settle on runtime cancellation and background-command close only requests cancellation.",
|
||||
"statement": "An independent three-second macOS reply fallback can end quit waiting before save/resource cleanup finishes; shared SSH configuration or pool work remains alive when other waiters still own it, while the last waiter or explicit Host retirement cancels the underlying task, and background-command close only requests cancellation.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentBackgroundCommands.swift#L161-L168",
|
||||
"version": "repo-lines-v1:sha256:0cf7f999434cae91c1dad2c325405a08e8456edc6bb0625623dd3016bfbd4236:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNjAwM2RjOTQyY2M5M2MyY2E2MWM4ZDc1YzFkM2NmNWM1OTUzNjg1YmY1YmZhNzRlZjIzMDY5YTJkYmU5Mzg0MCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZmExM2NkOGJlNzIzNDcxZmEzZGE3ZWI4NTdjMjYxYzJmNjRlZWQxZTUwMzMyNTQ3NTlmOGYyZGUxY2Q2NjNkNiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMzg2Nzg2ZDIwN2ZlMzE4MDZjYjIzYzA0ZGExZTQ2Y2ZkYTNlMjNmNDg3ZGJhOWFmMmIzZGYzMTIyOGY2ZjAwNCJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1543-L1575",
|
||||
"version": "repo-lines-v1:sha256:32cc2e0c42513700520084d4401216b1a3f77cfc0dba7999d7f25613103a928f:eyJzZWxlY3RlZExpbmVDb3VudCI6MzMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFlMTUzZjdkNDRmYWI0YTU0Njc3N2Y5MTRiNmRkMGUwMjIyMTA0ZjM5OTY0OTdhMDYzNDJmYTFiZWUzYWU1NWYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ3YTBlZjQ2NDQzM2JjZjY0MDBhM2RlZTVhNTZlMjQyMmFkYmFmYTVjNDBmMGJhNzY3MzJlOWU4NGY1Y2QyM2EiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQ2YzJjMWEzYjJlYzM4ZjE5MGJkNzllM2M2NzNiOGNkNWE5MWMyZGEyYThkODM4MzdlZjgzNGVhNzU3ZjZiMDciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjM4OTQ4NjdkZDBkYTNjOWE2MTdhYjIxODMzODc3NjkwZmJkZDhjNTEzZTg5N2MyZDBhZGY0ODM1NGU2ZmJlMTAifQ"
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1638-L1774",
|
||||
"version": "repo-lines-v1:sha256:23aaca80cf4e2215a2f75373a0dcf3b4d6ee051aa3b90f8a3ad089893590f8a8:eyJzZWxlY3RlZExpbmVDb3VudCI6MTM3LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJhZTE1M2Y3ZDQ0ZmFiNGE1NDY3NzdmOTE0YjZkZDBlMDIyMjEwNGYzOTk2NDk3YTA2MzQyZmExYmVlM2FlNTVmIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJlNmIwNDQ5MTQ2OTcyMmU4MzYzYTk0ZTQwNDQ1MzhlMDEzYTJhMjE3ZTM2YjFlNTY4YmE2MGFjYjdiNGM4ZjJlIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJkNmMyYzFhM2IyZWMzOGYxOTBiZDc5ZTNjNjczYjhjZDVhOTFjMmRhMmE4ZDgzODM3ZWY4MzRlYTc1N2Y2YjA3IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI3NDcyMmRmYjk2MDYxMDVlNTFhZjZkZDllYzI0YjNjZGE4ZDQ1MDU0NzA1YzUxN2UwNGU4OTJlM2U1YzQ2MjZhIn0"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L599-L649",
|
||||
"version": "repo-lines-v1:sha256:264009231dd112a56fb55f2187bd34367716c9df86e21870d47ee40f60cf2884:eyJzZWxlY3RlZExpbmVDb3VudCI6NTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdjOWRhNzhjOTJlMzEzNzI1OGY0NzA5MGQ1MjM5OTY2ZWEyYWQ4MTczYzRiZGZkMTQyMzhjYjE2NzcxZjM1MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZmNGQxOGNmNDZiOWM5ZmQ0MDViYmVkZjlhZDc5ZmVmMGNhNGYzYjI4NTdmYWQ5MDA0NDI5MGJkNWM0NTVkMGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA5ZmMwMWRiNDUzOWNjNTgxNGFhOTk0NDQ0NzhlMWY2MTI5ZjNhODllYzFjYTEyOTllYWM5ODBhZjZhZTRlMTEifQ"
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L700-L774",
|
||||
"version": "repo-lines-v1:sha256:9bfcbf42450fdb97123b2ad5a7f98b81d110c3f3314600403d93ad7b04860dab:eyJzZWxlY3RlZExpbmVDb3VudCI6NzUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQwMzg4ZDNjZDU0YTVlOGYxZmVkZjlmOGY0ZjYxYTBiYWNkMDI1YWU0NGE1MDUzMDMxYjExNzU1YTQ5MmI1NzUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEwZTI3M2YyMzE3MjgwZjUwYWJkMzkyMzQxNTg4YTNiOWVmOGRhZjA3YjI1YTkxNmMyMmFlZGQxYWVhMDdlNzMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNhNzc4Yjc5MjgwMzkyYWQyMjYzNjJmYzk5OGQwNGJhNzdhZjU4ZmYzYWQ2MWYyZjc2NzA0ZWZjMjNkNWU2YzciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/TermindApp.swift#L215-L244",
|
||||
@@ -1026,29 +1030,69 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_1dc38eea858b41789f6c9b273549ec5b",
|
||||
"statement": "Captured-turn termination joins exclude existing manual compaction, title generation and memory indexing; MemoryModel.suspend cancels current tasks, but successful terminal repository saves invoke historyChanged and can start indexing again.",
|
||||
"statement": "Captured-turn termination joins exclude existing manual compaction and title generation; MemoryModel.suspend now establishes a persistent admission fence that invalidates current access and suppresses history indexing until resume reloads state and backfills history.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://FrameworkTests/HermesMemoryTests.swift#L116-L181",
|
||||
"version": "repo-lines-v1:sha256:ce72d05810dc1671686e744e8d2fdaf825e3662b3dd2f726191909a92e01ab3a:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE3MjA1MzIyZDIyNTY5NmVkODY4OGRlYzk5N2NjNGMyMzZlN2M4ZDVhMDY4ZjBmOGEwNzg0NWJkYzk4NWJhYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFkMmZlMGM5ZTQ2MGJjYjM4YTQ0YzY4YTY2OWNlZWY3NDA4YWExNjcxMmUwMjZlMmFmZGI0Yzk4NTc5YzlmMjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY0ZWMyOTlmNTE0NWQ5M2I1YWM4OWZmMzVlOTE2YjE5ZDE3ZTA3NTg0MWQ1ODIwODI4YzdlMjJjZDMzZjdiYzYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/Agent/MemoryIndexedAgentRepository.swift#L13-L16",
|
||||
"version": "repo-lines-v1:sha256:dd81b44cc0557db5439accd290c19cb9b58b2c232fd0f3255a0504d4c2cc9d18:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNzdmNTQ1ZWVjNjkzZmZiNDU2YWM2NGRmZjc4YTA2MTcxYjYxZDI3MjVjZGUyNTdhYjg2ODgzNTc0NmQ5YzM3NSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNWMwZTU3ZGY4OGJhMmExOGMyZDQwOTJmNzM4N2E3MmFjMTBlYjc1NWNjNjFiZDlkYTFlYzU2NzdkMWNjZjE1YSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzRhYjk4MjQ4YzViYmM1M2IzZmFjZjQxYmI2NWQ3ODk5YzhjYmRiYWJmYzJhYTQ1ZWVjYWMxNjhmNmQ0MzU1OCJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L153-L180",
|
||||
"version": "repo-lines-v1:sha256:70176bb0b07b5d039e790f72be2fd529f699f1cd9b61d2019f01e7243c5542a0:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIxNjhmZjRmY2M1OGUzOTQxNjdmNmMwYTkwOGZiMzIzZDJmZmM3YWRmYWEzMTNjZjk3MDhhOTNmMGM2MmFjYjgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNhMTc5NmZiOTc5MjY1ODlhZjExYTQ5ZGNhMjViNTgwMDlkYjVhZjhhMWQ3Y2UwMjhjZmYxNDBjYzJhNWEwNjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZhYTc3MTExMzFhNDc3MTA0NWFhMWU0NDlhZmI3YjkyOTg3Njk1ZDRjNTkzZDYyZGI5Mzc0MTQxNGFmNTMzZTQifQ"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L177-L204",
|
||||
"version": "repo-lines-v1:sha256:463d4609d3eaa2a49b28fa86063677b92b26cb06a7c30dc499260f0aa1a5278c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIxNjhmZjRmY2M1OGUzOTQxNjdmNmMwYTkwOGZiMzIzZDJmZmM3YWRmYWEzMTNjZjk3MDhhOTNmMGM2MmFjYjgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNhMTc5NmZiOTc5MjY1ODlhZjExYTQ5ZGNhMjViNTgwMDlkYjVhZjhhMWQ3Y2UwMjhjZmYxNDBjYzJhNWEwNjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZhYTc3MTExMzFhNDc3MTA0NWFhMWU0NDlhZmI3YjkyOTg3Njk1ZDRjNTkzZDYyZGI5Mzc0MTQxNGFmNTMzZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L251-L255",
|
||||
"version": "repo-lines-v1:sha256:46b0558ae01ecd5d23e50f403021b1076616087e98308d4065bd3d8626dc7a58:eyJzZWxlY3RlZExpbmVDb3VudCI6NSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZjU1OWVmYWQzMjUzOTliYWNiNTA5OGJkNmQyMDFjMDEyODQ1MjhiMzFkMjBhMDNkMzI0Y2NmOWQ2N2IxYTlmZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDgzNTRmZTc1YTVjYmMzYzViYmVlYTdkNThkMmUyMGY4MDJmYTgyYmNlOWVkOTRhMzJjODljOTkzMzM1MWZiYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiODYyODEyOGQwOTU4NjAyZTI1NGQ2YWU2ZWE5MGNmMzQ3MDQ5ZjM2N2EwMTcwMTAyMmY1MjhkZGE0OTMwNTk5OCJ9"
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L274-L284",
|
||||
"version": "repo-lines-v1:sha256:c6bd184fd629fc2765d33f8ae15143e6791863bd814b8356a2ceefdd5dcfe82e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1NTllZmFkMzI1Mzk5YmFjYjUwOThiZDZkMjAxYzAxMjg0NTI4YjMxZDIwYTAzZDMyNGNjZjlkNjdiMWE5ZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4MzU0ZmU3NWE1Y2JjM2M1YmJlZWE3ZDU4ZDJlMjBmODAyZmE4MmJjZTllZDk0YTMyYzg5Yzk5MzMzNTFmYmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/AppModel.swift#L724-L777",
|
||||
"version": "repo-lines-v1:sha256:1fc048283823ebca7238e66af31e150e119b83645a4e5f760aa9bf444ce1337b:eyJzZWxlY3RlZExpbmVDb3VudCI6NTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRiNmE1OWU3Nzg2NmU1MGRiZDYxZjA5ZmQ1YWM2MjQwN2Q0ZGVlNjdkNGIyNTJhNDExYzRhZTEwZWNmMWQwNmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNkYmExMmRjNjgzMWEzMWU5NzdjMTMzMDU0NWZiMzZhMTFjYjE2MDQ5YjQ5ZGYwN2MzYjAyNjM4YjIwNzA2YzIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjUzODNlN2M2MmI5ZmI0ZGU3YjNjNTc3ZmFkNjNiOTYxMGRlZTcyNmI4NzljYzZjN2M5ZjYzNTljOTU5YWEwODQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRkYjkxZWUwZThhZmIwMWVmNzYyMmM2ZTg0NzA2MDM2YmVmMzAwNTc5YWU1ZjcyYmQzOTViMmY3MjllNmRjOWUifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_3ef78f9811f847169b4d6b6346c628a6",
|
||||
"statement": "Hermes suspension retains the enabled preference and storage but revokes the current generation, refuses new memory work, reloads committed state on resume and reconciles writes that committed after their old-generation caller was invalidated.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://FrameworkTests/HermesMemoryTests.swift#L116-L181",
|
||||
"version": "repo-lines-v1:sha256:ce72d05810dc1671686e744e8d2fdaf825e3662b3dd2f726191909a92e01ab3a:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE3MjA1MzIyZDIyNTY5NmVkODY4OGRlYzk5N2NjNGMyMzZlN2M4ZDVhMDY4ZjBmOGEwNzg0NWJkYzk4NWJhYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFkMmZlMGM5ZTQ2MGJjYjM4YTQ0YzY4YTY2OWNlZWY3NDA4YWExNjcxMmUwMjZlMmFmZGI0Yzk4NTc5YzlmMjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY0ZWMyOTlmNTE0NWQ5M2I1YWM4OWZmMzVlOTE2YjE5ZDE3ZTA3NTg0MWQ1ODIwODI4YzdlMjJjZDMzZjdiYzYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L274-L284",
|
||||
"version": "repo-lines-v1:sha256:c6bd184fd629fc2765d33f8ae15143e6791863bd814b8356a2ceefdd5dcfe82e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1NTllZmFkMzI1Mzk5YmFjYjUwOThiZDZkMjAxYzAxMjg0NTI4YjMxZDIwYTAzZDMyNGNjZjlkNjdiMWE5ZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4MzU0ZmU3NWE1Y2JjM2M1YmJlZWE3ZDU4ZDJlMjBmODAyZmE4MmJjZTllZDk0YTMyYzg5Yzk5MzMzNTFmYmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2MjgxMjhkMDk1ODYwMmUyNTRkNmFlNmVhOTBjZjM0NzA0OWYzNjdhMDE3MDEwMjJmNTI4ZGRhNDkzMDU5OTgifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift#L78-L164",
|
||||
"version": "repo-lines-v1:sha256:67d507f673f714fbd8442cbbac6e38841b3be5a78042e349430e664b1c646143:eyJzZWxlY3RlZExpbmVDb3VudCI6ODcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxYmJlOTJmOGFhMDlkNDE4MGVjMWU4ZmY1NTAwOGY0NDJmNzhlZDAxYmFlZDNmNDEwNTczYjA1OWFmMGI1MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3MmY5Njk1Yzc0NjdjNzQ3NzNjOWNlN2ZjNDI5YzVkMGQwZTQ4N2YzYzUxZDE1ZDY2NjhhM2QyNDA3MmJiOTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE4OGNlZThkZTU2Y2FmYjQzMGRhYmU4ODYzZTk1ZjA5ZTU2OGQ3NjU5Nzk0YTg4MmNiNmNkZTI1NTFmNzlhMmYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEwNGY4YmMyNjM5OTg1OGYwM2VhMGQxMDIwNDBhNzVhNzkwMDliNGMzNjUzZDAxZTU0Y2NiODI4YjAyODQyZjYifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_ae78c3e5358a4cd7b7bd9377f8a515f2",
|
||||
"statement": "Mobile Assistant background suspension keeps send, edit, plan implementation and manual compaction admissions closed until the retained conversation and connection cleanup task completes.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L115-L155",
|
||||
"version": "repo-lines-v1:sha256:8c82421c493d71a46a31cea25dee42618562d9e3080c889c363ebef1d1f47b25:eyJzZWxlY3RlZExpbmVDb3VudCI6NDEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ3N2Q1YWM0NmZkNzdmMWZlYWMyMTM1ZTlmZDAxMGYyMzk4MWQxYzBhMzMzZWJkMTNlZjE2MmUyYzZiNTg0MDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjMzZDE2ODk4MTU0MTExNzUyNDc4NGZlZWJjNTY5NzIzNmYyZDk2ZDI2YWJmYjA2ZTIxYmM2OWQ4MzIwODY0MTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjAzNjFmYmU2YTJkNzg3MDAzYjc5NDliMDY4NTFjOGJlNDczNTI3MDNiZjAwYmZkYjM5YTVlZmEwZDAxYTdkNmQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L217-L245",
|
||||
"version": "repo-lines-v1:sha256:b75dd4e03723d8a10cdffed754b346623c2cb81c76b67c816179f18641779a94:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU5ZjlhOGZjNjI0YTNlM2JjNjU0ZjJiMGJjYTRhYjk4ZDgzNGJiZmY0M2Q2MTI2ZGNiYzg3OThhODE4Njg0MzMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3ODY0MDg0NmE5MzJkZWQzYTNhNTkyYmJkMzc5MTA4YzVhYmZlY2M2NTE3MDFjNDVkNTg5YzRmYjUxMzBjZDUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg4YThkZDliYTFlODExZjZkNDY3NWU3ZDI0MWE3OTU2OTRhY2ViYWNhODhiYTlmYjU0Nzc5Y2M1YmQ5YTA4N2UifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileAssistantTests.swift#L493-L551",
|
||||
"version": "repo-lines-v1:sha256:65515a4e9bdd6ebad25be3bccb372ded2a1a7af650a3a47ab525c5daa87a2c49:eyJzZWxlY3RlZExpbmVDb3VudCI6NTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxNWNkMzA5ODJjNzNiNzE4ZGVlNzZmNTU0MmRlNTY4NjBmYzMzYjdkM2QzOTk5NTA3YWVmNjRiYTNiNTgyOTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQxOWUxMzBmOWU5ZWJmMzY5ODJhNzdjYzg1M2M3NGQzNWNlZjVmNDgyOWEyYTA5NmM0OWM3ODBmZmFjNjFlZGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjNjODI0MDgxOWY3NzlmNjQ5ODAwYjY3ODkwMjEzOWQzNDM0MTFhZTI3YjA4OWU3YWJiOTFlYThlYTAzYTQ3NjgifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:a1c9a480314b124cb096731918e3a208c7dab2e590e8c42bcfa94456f9440b9c",
|
||||
"pageVersion": "sha256:0387b384f0e9df7daaf614e6d1e66ed31e2d0bd1f198bce95d1d8e6191d2e00b",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_70c5c3da992944188e719c65adc9b06c",
|
||||
@@ -233,10 +233,24 @@
|
||||
"version": "repo-file-v1:sha256:97866af84c8b01df60e0e125b61a85836eaa9156052aeac3c3ddb0c234cad81f"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_57342484912448139dbc6265eedd1769",
|
||||
"statement": "StoreKitTrialTests is skipped during routine unattended runs and requires an explicit TERMIND_STOREKIT_TESTS=1 opt-in because the local SKTestSession test host needs manual StoreKit authorization.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L56-L58",
|
||||
"version": "repo-lines-v1:sha256:59b48c1c93af632d0d54f375f34be63bfe084da21dbf98d89f2c5174f4f566ea:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNWYxODBmOWMxMjY5MDNiY2MzMzFhYTk1NDU2ZTQ5NDQ0YTdkNGQwMTFlOGEyYTgzZjVkYzg3MDIzOTE4MTJkMCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYjQ4MzZlZDdlMDA1Mzc3NWEwYTk2NmNlODYxMzRiMjM0N2Q4NTFhN2IwMmY0ODEyYmViMmM1OWQxYzY4ZDUyNiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZGMwNmIzZDc5NGYzMzczOTYxOGNhZmVjOTQwY2ZkY2YxZjllYjI1ZjI5YjUyYWJjZmNkZjA0MWY3NTg2YWZmYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTA1MTY5OTI5YTliMjNhOWIwMDJiYjE5MDNhYTA3ZWMxZGE0ODA1ZjY3ZTEyNTBmYzZjOTQ4MDlmMzJlMGM3ZSJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/StoreKitTrialTests.swift#L1-L18",
|
||||
"version": "repo-lines-v1:sha256:01f6bcd9c1be6ab834bd576093f823f2b13ebdc7043b843fc256fa8ab1b51bb3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjUyMzkxMGFkMTQyYWFlZTQ0YzE0ZGU2YTYxODVkZTBiY2NhNDhlYzZlZGQ3ODFlNWU1MjQzYjdiODk2N2VkMTkifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-22T03:23:14.035Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:2c7b5e94e1ecc8ef99eb9c4ea83b9ffb4420e8a9229b17a20f93376b48e8633f",
|
||||
"pageVersion": "sha256:b564d4439f025bc55d8b4c0a8f3054174469499c9351087e0dd6383a4c70fe33",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_e50b505da2214c6781fa8eb1a146dacf",
|
||||
@@ -12,7 +12,7 @@
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/TermindApp.swift",
|
||||
@@ -26,7 +26,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/TermindApp.swift",
|
||||
@@ -457,6 +457,6 @@
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:eedd08fcec41ac31b854d4f0375e28efcca4b20b1dfac2d25880b18421e8d199",
|
||||
"pageVersion": "sha256:ec75319c1b21afb2ec24dfee47fe74a0d32ad67f1f7e04314e7c3a6a07e65937",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_c56b98e3167443d9a8aa8d3405b35eca",
|
||||
@@ -130,19 +130,23 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_1fd2c2f8970047b8bf324a93ca5f2650",
|
||||
"statement": "AgentConnectionPool reuses Host/fingerprint keyed connections and primary SFTP across runs, joins in-flight opens and protects active exec/SFTP leases from its default 180-second idle retirement; replacement exec retry is limited to connectionUnavailable.",
|
||||
"statement": "AgentConnectionPool reuses Host/fingerprint keyed connections and primary SFTP across runs, joins in-flight opens with independently cancellable waiters, protects active exec/SFTP leases from its default 180-second idle retirement, and limits replacement exec retry to connectionUnavailable.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1051-L1093",
|
||||
"version": "repo-lines-v1:sha256:2f42e9d3dec1ae9ef7bebbca339793f38e26964a5da29fdac17952be06061ded:eyJzZWxlY3RlZExpbmVDb3VudCI6NDMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk0ZTQ2MDk3Yzg0MjkwZmY4YjdmOWNmOWUwMmYxMTRlZWU5N2VhYmM2MDZiZTdjZmJhMjI3ZjEzNjFhYzNiZjciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE0MGVhYTUxNDQzMTlkMjQ4ZmM1MGEyMGY3M2VmYmM4ZGIxZmQwYjIzZmRhNjVkYTM1MDU2YjhmM2I3YTNkNWYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUxMDE0Mzc2ZTEyOWYzZjE2ZjM3ZWQ3ZDUxMTQ0YzY1YjAyYzlkMGViN2Y1MzNkNjg0NDZkOGI4N2Q4OTJhODIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImE2OWMzZTIxNmM4N2M1YmU4MjdlNzM0M2IxZGEwNDM0MGY3NjMzMzJmYTc0ZTNjNzZkNWY4MDgwN2ZkNDRiODEifQ"
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1238-L1392",
|
||||
"version": "repo-lines-v1:sha256:3216969f4007ddb5dd8ee451ff76370ce052ada7caf174a7779d2d40ec5aa2bf:eyJzZWxlY3RlZExpbmVDb3VudCI6MTU1LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIyOWVlODg1MWQ1MDM1OTdlMTgzMjIxMDg1NDNiZGQwMThhZjFlYjVmNGViZWNhNjk4MzQxZDgzNWU3MGYwZTc4IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJkOWE0MGRjMDdlNjNiMjQxZTRkMWM2YTM4NGZhM2QwYzJiZTg3ZWE1ODM0MGQ4YzU2ZGIyNDU1ZjNlY2NiNWQwIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiIyM2MzNWUwZTc5NTJiMGJiNjg4YjI3ZTM2MmY5NGIxZDRiMjk4M2Y0YTgwM2IxYzBmYjM0Mzc1N2EyMmU4MGNmIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIzN2U4YzZmNTA3YzVhNTAxNThjYzBjY2RjYWM0MDY3MzZkYTNlNmU0MzYwOGU5ZTEwYzY2MmU4OWE1ZGQ3N2M4In0"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1318-L1432",
|
||||
"version": "repo-lines-v1:sha256:707e4db604c194ca27b91f7ad568cca6fc34450bb25dcc1a35ea700157cc5e6f:eyJzZWxlY3RlZExpbmVDb3VudCI6MTE1LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJiMjdlNTE3ZjU0YWJjYmJhZjMxMzRlZWE1YmZlYjQzNjBkYTQ3ZWIyN2Q2NWZjMWEzMGM5N2RlMWY1YmI1MjQ1IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI0ODkzZjQwZTM3ODFlYjg5NmM4MmQwNDZhMDgwNjdhMTFlMzVjZGYyZjFkZmFmMjZmZWE5MGI4ZGI2Njc2NDEzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJlMzIwZmNkZDBjNmFkNDQ0ZDIzM2Y3M2Q3ODIyMTY2MDcyZTEwYWJlOGZkZmRmNzgyYWNjMWVlODNmZjU2Y2Y1IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI2YTBmYmI0NWVjZWU3ZmMwMWY3NDZiZGU2ODJlMTE0YjkyYzU1OTlkZDllMDUxNmQyMmQzYzMyNWVkMDM3NDZmIn0"
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1564-L1595",
|
||||
"version": "repo-lines-v1:sha256:3a9acd4c8114408922da435777791b50ceee74096f97e7bd23054a9d5189cf9e:eyJzZWxlY3RlZExpbmVDb3VudCI6MzIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM5MDZjYTI5YmVjMjdhMGQzNTFiNGVjZGVjMTg0YWQyNmY3ODM5ODM0MWIyYjM4OWNhMzUxMzcwYTAzZDI3NGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE3NjU3YjNhNDRiZjMxYzhkNDI1MWIzZWI5NWYwYWRhOTUxYTViNTA1Yjk5Mjk5ODhiMmI2MTFlM2FiNjI3OGYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE1MDU5MDUwMWE4YjVhYzQ5YmJkOTc5NzZjZTJkYTk1MDRhNDQzNzE2ZmNjNjgzYTllNGQ3YzQyZGY5ZGE4MTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg3YWMyMGYzMTBiNjNkMjM4MzNmYWZmMDk2ODM3MWM1MzhjY2MyZmYwNzc1MTVkNzI5MGNmM2JmZGQ2OWY1MjYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1469-L1584",
|
||||
"version": "repo-lines-v1:sha256:aba7ec5c1e1cccd658c5215426672c337e11ebdcdc7d2878000d06641ed5a32f:eyJzZWxlY3RlZExpbmVDb3VudCI6MTE2LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIzOTA2Y2EyOWJlYzI3YTBkMzUxYjRlY2RlYzE4NGFkMjZmNzgzOTgzNDFiMmIzODljYTM1MTM3MGEwM2QyNzRkIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI0ODkzZjQwZTM3ODFlYjg5NmM4MmQwNDZhMDgwNjdhMTFlMzVjZGYyZjFkZmFmMjZmZWE5MGI4ZGI2Njc2NDEzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiIxNTA1OTA1MDFhOGI1YWM0OWJiZDk3OTc2Y2UyZGE5NTA0YTQ0MzcxNmZjYzY4M2E5ZTRkN2M0MmRmOWRhODE5IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwOTIwZjM4ZTMwOGI1NDBkZDU2YzQxZDUyN2NkNjQyYTZkNmQyOTNhZTNmMzkyNGY4NGVlNjNkZTUxZWQyYzBkIn0"
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1638-L1774",
|
||||
"version": "repo-lines-v1:sha256:23aaca80cf4e2215a2f75373a0dcf3b4d6ee051aa3b90f8a3ad089893590f8a8:eyJzZWxlY3RlZExpbmVDb3VudCI6MTM3LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJhZTE1M2Y3ZDQ0ZmFiNGE1NDY3NzdmOTE0YjZkZDBlMDIyMjEwNGYzOTk2NDk3YTA2MzQyZmExYmVlM2FlNTVmIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJlNmIwNDQ5MTQ2OTcyMmU4MzYzYTk0ZTQwNDQ1MzhlMDEzYTJhMjE3ZTM2YjFlNTY4YmE2MGFjYjdiNGM4ZjJlIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJkNmMyYzFhM2IyZWMzOGYxOTBiZDc5ZTNjNjczYjhjZDVhOTFjMmRhMmE4ZDgzODM3ZWY4MzRlYTc1N2Y2YjA3IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI3NDcyMmRmYjk2MDYxMDVlNTFhZjZkZDllYzI0YjNjZGE4ZDQ1MDU0NzA1YzUxN2UwNGU4OTJlM2U1YzQ2MjZhIn0"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/AgentConnectionPoolTests.swift",
|
||||
"version": "repo-file-v1:sha256:a10e41bdc9f97276bec620b1cedc8390702681153cdbca815308c91e29eb4799"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -155,10 +159,24 @@
|
||||
"version": "repo-lines-v1:sha256:ef2acbffed6b7a7fd6955d7fa3a6f0c7c93e6cca2ed82d431dbc1a64ff794d6d:eyJzZWxlY3RlZExpbmVDb3VudCI6MzQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk0OWUxM2UyOGRlY2Q3Y2U5NDdmMjMzNzM5NGQ2MWQ5Y2I1MGIzZGI1OGJlYjUzM2M1Zjg1NjVmNGUwNzdiYzIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjoyLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExOGJmY2MwNWRhNWVkOWI1NWRjNTcyNWE0ZmNkYWVjNWMyNTc1ZmRmNGNlMjJhMTk5MDliMWIzZjRkZTgxZmQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjowLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_09d7ae1b456b450cb059570dcfb03de0",
|
||||
"statement": "Cancelling one joined Agent connection waiter does not cancel an opening still owned by other waiters; the last waiter cancels it, explicit Host retirement cancels all waiters, and a late success for a retired opening is disconnected rather than pooled.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift#L1675-L1774",
|
||||
"version": "repo-lines-v1:sha256:4847b31059874bdbaee91f89d037bedc3d8dd27b943965835fd217cd28a0a7e3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAwLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIxYjhiOGI5NmRlMjNiYjM5ODI5OGU1MjIxODE1ZGI2MjViZGYyYzgxYjYwYTQ2ZGJiM2VjMmQzNDJmMzU0NTUwIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJlNmIwNDQ5MTQ2OTcyMmU4MzYzYTk0ZTQwNDQ1MzhlMDEzYTJhMjE3ZTM2YjFlNTY4YmE2MGFjYjdiNGM4ZjJlIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI5NjQ1MzUwNzkyMTM0YjdhMWIwYjM0YzM5MWU4Nzc3YTI3Mjk4NmEyNjQyYWI0M2E3M2M3YThiYjI5MTcwZTRlIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI3NDcyMmRmYjk2MDYxMDVlNTFhZjZkZDllYzI0YjNjZGE4ZDQ1MDU0NzA1YzUxN2UwNGU4OTJlM2U1YzQ2MjZhIn0"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/AgentConnectionPoolTests.swift",
|
||||
"version": "repo-file-v1:sha256:a10e41bdc9f97276bec620b1cedc8390702681153cdbca815308c91e29eb4799"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-22T03:23:14.035Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:3204534fc02c6315b0c2fe23d6cb486a18f8b86be9b8a42dd31523c3bbfd560c",
|
||||
"pageVersion": "sha256:c449e2380e48e619eda9f0ac0151d8491634d439a2740a92763fb4df6b8b7fcc",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_3a403468456840acbfe0a524b90d5717",
|
||||
@@ -160,7 +160,7 @@
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileAdaptiveLayoutTests.swift#L75-L180",
|
||||
"version": "repo-lines-v1:sha256:7029c2d16c93e885407ee0ac5dcf872a2cf816cf64cf5a6e1c2f1468bc6a7609:eyJzZWxlY3RlZExpbmVDb3VudCI6MTA2LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIwMWJhNDcxOWM4MGI2ZmU5MTFiMDkxYTdjMDUxMjRiNjRlZWVjZTk2NGUwOWMwNThlZjhmOTgwNWRhY2E1NDZiIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJhMGE4ODZkMjJlMjhmYThjZmFkMzg2ZTUzMzlmN2JhNGFmNDEzM2U4NGRmMjU5YTYwNTNjNjJiMzI4ZjQ2Y2U3IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI5M2IxZTE2YzVlMWYyNGI4Njc3YzQzYjI2ZmYyMGI3ZDM3MGE2OGIyMWIwY2ZlZTA3NmQ4OWNlNmNjYmEwMmFmIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJjMTNhOTQ2OThjNjNhZjM5MmJkMWI0YTZkZWIwZWI5ZjdmYzFlNWVjZTQ0MGM1OTU3MTdkYmEyYjM2ZGJjYTU4In0"
|
||||
"version": "repo-lines-v1:sha256:183c09e20a2fe787af9ee1eb4e3bcc40d84b9789653fde93b7209b166ef6cc10:eyJzZWxlY3RlZExpbmVDb3VudCI6MTA2LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIwMWJhNDcxOWM4MGI2ZmU5MTFiMDkxYTdjMDUxMjRiNjRlZWVjZTk2NGUwOWMwNThlZjhmOTgwNWRhY2E1NDZiIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJhMGE4ODZkMjJlMjhmYThjZmFkMzg2ZTUzMzlmN2JhNGFmNDEzM2U4NGRmMjU5YTYwNTNjNjJiMzI4ZjQ2Y2U3IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI5M2IxZTE2YzVlMWYyNGI4Njc3YzQzYjI2ZmYyMGI3ZDM3MGE2OGIyMWIwY2ZlZTA3NmQ4OWNlNmNjYmEwMmFmIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJjMTNhOTQ2OThjNjNhZjM5MmJkMWI0YTZkZWIwZWI5ZjdmYzFlNWVjZTQ0MGM1OTU3MTdkYmEyYjM2ZGJjYTU4In0"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/RootView.swift#L342-L351",
|
||||
@@ -182,7 +182,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L560-L578",
|
||||
"version": "repo-lines-v1:sha256:e1458e03b4dc3d86d48461e276ad947b989000475cf59e42b68402a40297a355:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
"version": "repo-lines-v1:sha256:0569dc2b10c701c3b0c48b14a14a2521ba0f40ec2645f7220d7e5a61e98501d2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjExYjYwOWM3ODJiMmM2NDVhM2M2ZDFmOWMyMDA3YzdjMGVlMWI5MTI1YjJjOGIxOTU0YTFlMTVjY2UxM2VkYjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExMGVhYzUyYWE2NjM0MDczNjQ0MjU1MTg2YTc5NGIxMjdmYzQ5MTA2NTRmYTNhMjBiOTgzMjMxOTIxZWU2ZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZTJhMWYwNzIwY2I4YWNhODQ4ZjIzNzM0N2E4YjUzNGY2YTEzZDVhZTBmMTQ3MDE4ODQ5ZmZjYjkxOTRlZWMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift#L635-L663",
|
||||
@@ -347,10 +347,32 @@
|
||||
"version": "repo-lines-v1:sha256:9601001fe4af32f37a89a620b06175d054106430cb8d592abab3542ee6f56bc8:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiY2IzZWIyODgwNTgxMGU0OTgwMjE3ZGJmMmJkMjNhOWM5M2Y4ZTFiZjAyMDdkZGVlOThmZDlhNTQ1ZTYxMGRjOCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMTkxMmRjZmY4ZDViM2RiNmEyNjY0NGE1ZTVlMTA0MzBmNDhkNTBmYmM0Y2U2MDYyZjEwNDY2MjQyMDEyOWMyMSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZWUwY2ViM2FjNjViZDYzZTdiNTI4NjE1YzM5YzMxMTNlMTUyNWY2MzY0YjliMjg2ZGNiYjI3YjI4MWZjMzdkMSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzE1MWE5ZGJhY2E5NmQxYjg4NjU2ZTM0YTgzMjVkNDRhNjAzZjhkYThlNjE3ZjNiZjdmNDMxMTY2YjZhMzIwNSJ9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_730c2f34dd7b4af986db922cd376b22c",
|
||||
"statement": "Mobile editor-toolbar, forwarding, host-integration and saved-name rendering suites install process-global UIKit key windows and therefore require TERMIND_MOBILE_UI_TESTS=1 with cross-suite parallel testing disabled.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFITests/MobileEditorToolbarTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:f3c48bd72cbd1f8c19ae509d0b42757cc76641b1ba1ab1eba51d555a48751658:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkNGQ0Njk5YWY0MjE4ZTg0M2FhOGQwYzZjNTY3YjEzMzMxYzA5MWQxYTgxMzI0ODE4MWM1ZTRjMjQ5MDRlN2IifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileForwardingRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:1c43b4b67ff75200d330c0e6dcb8a7c652af56899d58c6fccc9aca89262ec5fe:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1OTEzNmM3MGIwNGU3YjM0Y2U1OWIzODMxZGFiNjY0NWIwY2MxOWIzMjg3NmQ1ZmFiZjNmMmVlMjY5NTg4MmMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4M2IxNTM3YjRlN2Q0NWFhNWJmZGM5YjZlY2RkZGUwMmM5ZGFmYTEyNTQ5ZjUyMjRkMDc3Mzk5MGZjZjFhZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileHostIntegrationRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:07c662e83a529833bf9aea2b962509e8653d5bf9062d208b941f887f04216160:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMxOGMxYWY1Y2Q1MjFiYTJlYmNkZGZjM2U1YzEzMWRhNDhmMjA1YTAyNWMwOTU2Nzk2Yjc2NTBkMDg3NDQzOGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjN2VkN2ZlM2FkNDdlMGNlOWFkZjhjODdkZDEyZmZlYzczMmI5Y2FkNjZhODYyMzI4ZTgwNTM2ZjIzMzBlOGUifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileSavedNameRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:0eddd809cc4a05cb51814cbb15b23dc1a881757e4f63cd610d210108342a4038:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlOTE5NjUyYjQ3ZmJjZTM2Y2UxYzA4NTE5MjFlZWY4YjBmZjE1NGNiODMyYjlkNTY2YTY0MDYyMGQ2MjFmNGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxODAyNTA0ZjI1YmEzY2QwYjhmZjEwMGI5NGJlYjUyNmQ1ZWUyNTQxYzJkODkwZDgxZjNhNDk2NjNiMTIxYzAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhiY2E3MWVjMzZhNzBmOGVmYTc5MjkzNWJjZDAzYWM5YjdhZjhiZjAzNmExMjI5NmM1NTFlYjA3OGQyMjI5YmEifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T07:36:39.730Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:e8702d030f8cc69c70ce0b630321aa0bf139b70e4dfb9e29b469cb5cfd77a53c",
|
||||
"pageVersion": "sha256:ecf21d72d9c031ff95071424e149d92da037b8ec6e0151dd5b9c4a80fea18ceb",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_b47979774aa94e7dae517a6894c508d4",
|
||||
@@ -8,7 +8,7 @@
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFI/App/MobileAppModel.swift",
|
||||
"version": "repo-file-v1:sha256:c2cb4b92ca17a7787641c64d2e87058979c4f731f2d098c63aa164ebc695c02b"
|
||||
"version": "repo-file-v1:sha256:fc361c911553c831e066539b9f2c0df902eb588f71f3bac8606c0a48048a196e"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/App/MCPServerController.swift",
|
||||
@@ -315,10 +315,36 @@
|
||||
"version": "repo-lines-v1:sha256:bbe609256f29f5d3f57df07fd079fd2175c599b92d24faf60060b97a17b592d7:eyJzZWxlY3RlZExpbmVDb3VudCI6NDEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA0MWJjMzU3ZWE2YzA2MmNiNjE1MGRiZmIwY2Q3YTBhZTM4ZTA3MTllYzU1Y2QwOWY0OGY3Y2U4MGVjOTcyZmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhjYzgwYmFjZGQ0ZWUwOTdkYmRlMzFjZTEzNGIzM2YyODlhMzVhMWM1ZTBmZjNhYmFhZWI3YTVhNmY5ZmVmNDEifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_43b43ec4cc7648a6b1aa639440f83140",
|
||||
"statement": "MCP upload disconnect synchronously cancels the active transfer token and records disconnect provenance separately, allowing 410 cancellation plus resumable pause while preserving 502 mapping for unrelated SFTP cleanup failures; attempt IDs isolate old callbacks and committed success survives late disconnect.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift#L177-L197",
|
||||
"version": "repo-lines-v1:sha256:09225b7b105df303acc8396e48c42c5251ddf2feff12b03d2c52d91c79fb352e:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE2YjJkOTVmZTFiOTA3OGRkZDkzZWExMWM5MjlhODc4MzAyMzQwOWVmYWIyMDdmMDcwNmRkZDllZGM4NDJlZjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImI2NWU4NzRiZTc5MTIwY2ExMDZjMzcyZmM5ODlkNjZiZWQxOWMzZTQ0ZjRjMmIzNjJiZjUxMmU5ZWZhYWI4MjkiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImEyZTVkNGJlYjE4YmNmZTY3NjVlZTBlYzQ4MjZhODg2ZWY0ZTFlMGNiYjc3NTE0ZmQ2M2ZhOTIwNDRmNzEzODQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImE5MTFhMDA0NWFiYzgzOWNjYzM0YjVkZjRkYWNiY2ZiYTFjMmUyMjBlOTQ0NDM1MTM0ZTY1NjA1YmJmNGU0MmYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift#L251-L276",
|
||||
"version": "repo-lines-v1:sha256:3792a7f25d2ec146b7b352c37c6e4a5fd9883de3c0451915c4f7da84dbc9887e:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlMWQ3MjAzODMyYmQ5ZTZlNDY5ZjUzYTdkMWQ2MWE5YjM3NTQxOTIyNzliZTY0OTYyYTg5MDVlNzAyNWMzNjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU5ZDk1ZWE2MmVhNjlkZmZkZTJmYmI1ODE4MDZhNzgyMTViODcxYzU3ZTliZWZmNjMxN2YxN2YwYjVmMmM1YzIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNiODM5NTZmZDAzNzU5M2UyNzUyMGYwN2I1ZDQwYzhiZWRjOTkyMTVlNDMxMTA0ODA0NWZiYjJmY2IwMGZlMzMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUxODUyZWMwMmU4N2ZiYTQ5MDQ1OGJlNDc0YWY1ZDliYmJhZjk0NWJmYjQ4MzhjNmIxY2Y5NGVmYjRmMWZmYmYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/MCPUploadTests.swift#L21-L53",
|
||||
"version": "repo-lines-v1:sha256:2e8d63e4f97cfb831287755652f9f735659bc2871d71a3b7827defbae6ff055c:eyJzZWxlY3RlZExpbmVDb3VudCI6MzMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA3ZjY0NGJkNTI1YmI3YjdjMjFhYzJhODY3ZDgyM2IwM2M3NzQ3NjFkYzQxMzg2NDIxMzYxMDNlYjNjNjcyYjciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg5NWEyYTgzNmJjZWYyMjY5YTI4MWRkMzQ3MjdlN2Q0ZTI1YTlhMGU4MDc4ZTI5YjM5MTg1OTQ2MDZlNzNmN2MiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgyYzFjZjUxZDU4ZWIzOWQyNDBjM2EzNjc2NTM0NzhhMWYwOWFkNGM3NjAwOWY3YWU1M2U2Y2E2OThiOWM1MjQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjlmMmMyMDczMWRiOTVmNTA1MGU4NTgwNDY4MDYwNGQ5MzZiY2MxNWIwMjI4MzNhMDBlM2I1ZWQ4ZWZkYjViYTAifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/MCPUploadTests.swift#L349-L385",
|
||||
"version": "repo-lines-v1:sha256:abaaf8c46f62023236e935d4b7d44779766e48bbd0cc68f16f6592abfb97c637:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRlMDQzYTczOTBlMWNhN2FhMDU2ZTk1YWFmMjE2NTM5YTIyNTkwNjU2ZGI4ZmIwNmI2ZWU5YzMyMWMxMjNlYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlZDdlYjk1NWQzOTAwMmZhMTlmM2MzNTJmYzhmNDNiMTg1MDNiYjRjYjIyNzhiNTFlMjFlMjdkMWFiYjU3ZTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRlOWZjNmY2NzhjN2U5Y2EwY2YxOTY1YmVjZWUzMjA5OWEzNzRlZTc0N2Q2NTE2ZWViZWFiMzQ2NDU0NGVhMTAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA3N2U0MDI5NjM5ZmIzOGQxZGRmYzZjMjllOWJiZTRkNGMxMWVmMjBlOTRiZmM4ZWE5YTdjYzI3NmVlYjUxOTMifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/MCPUploadTests.swift#L409-L423",
|
||||
"version": "repo-lines-v1:sha256:1b322d04c0951a6a53f975af182a52d23521961f78ab35983ea597819276dbd4:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjlmNzNlODA1NDZmYTc2MThhODBmNTNiNjFhMTA3NGYzMGI1MjRlOWE5NzZmNTAxOGJmOWQzY2RlNjNkMDQ1NzMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU5MGRjYjA1YTgxZTQ0NTJkZTczZGU2YjIyNmEyNTg5ZTY2MzY0NDk4OGYxNmJhOTBhOTQ4NzkwMTJlOTZlMTAifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T07:36:39.730Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:0049d9723b546cae3375f18e49fc5c7fc515150d30a5a18e696c9fbb9120813f",
|
||||
"pageVersion": "sha256:67a0bedc5f971d2d6d6f41e11480cdd93f3b1450d460d8ac56bc1ed65a40264b",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_d34d7b16495a44a4a946d3dc9e0456f4",
|
||||
@@ -197,10 +197,50 @@
|
||||
"version": "repo-lines-v1:sha256:c11f26108030abfcf1f2cdd98655ff0116e1d44180c4d5eec36e9b6bb15895e9:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNjRjMjMzMjczNTc4NTMyYWE3NWIxM2ZiMzRjYzkwYjdkMDIwYWVkNDhmNjY1YTE4MjYxNjdiOTAwMjljN2MzYSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNTAzYWFlMjllMDYzMTZkNmRhNmY4YzJhOTFmNmU0NGE2MTJmYWJkNzkzYWQxZjVhMWZjYTUyMDZiY2VkYTQ3YyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMjE3MWVmNzc1NWEyMTNkNzkwZTA1OTU2ZGNhOTRiZjE5Nzk4YmYwNGZhOTNhOGE3MjE0OTgyNTczMDdiM2UwYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZWIxYmM1YmM0YTIzN2Y1NzhlNmFmNGE0MTVkMDY0N2Y5OTEwYjAzYjM2NGUxZTI3YzFmMWRiYWE3NDNkMDNiYSJ9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_ad8c264a95cc4d3289e82ff5a7bb19fb",
|
||||
"statement": "StoreKitTrialTests is a manually authorized, default-off suite enabled with TERMIND_STOREKIT_TESTS=1 and is best run through a narrow TFM only-testing selection.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L56-L58",
|
||||
"version": "repo-lines-v1:sha256:59b48c1c93af632d0d54f375f34be63bfe084da21dbf98d89f2c5174f4f566ea:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNWYxODBmOWMxMjY5MDNiY2MzMzFhYTk1NDU2ZTQ5NDQ0YTdkNGQwMTFlOGEyYTgzZjVkYzg3MDIzOTE4MTJkMCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYjQ4MzZlZDdlMDA1Mzc3NWEwYTk2NmNlODYxMzRiMjM0N2Q4NTFhN2IwMmY0ODEyYmViMmM1OWQxYzY4ZDUyNiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZGMwNmIzZDc5NGYzMzczOTYxOGNhZmVjOTQwY2ZkY2YxZjllYjI1ZjI5YjUyYWJjZmNkZjA0MWY3NTg2YWZmYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTA1MTY5OTI5YTliMjNhOWIwMDJiYjE5MDNhYTA3ZWMxZGE0ODA1ZjY3ZTEyNTBmYzZjOTQ4MDlmMzJlMGM3ZSJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/StoreKitTrialTests.swift#L1-L18",
|
||||
"version": "repo-lines-v1:sha256:01f6bcd9c1be6ab834bd576093f823f2b13ebdc7043b843fc256fa8ab1b51bb3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjUyMzkxMGFkMTQyYWFlZTQ0YzE0ZGU2YTYxODVkZTBiY2NhNDhlYzZlZGQ3ODFlNWU1MjQzYjdiODk2N2VkMTkifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_8dd9feb7f27b4681a46083d7f10dd0d9",
|
||||
"statement": "The four mobile UIKit key-window integration suites require TEST_RUNNER_TERMIND_MOBILE_UI_TESTS=1 and an Xcode invocation with parallel testing disabled; they are not covered by default-suite success.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L50-L54",
|
||||
"version": "repo-lines-v1:sha256:5119b61ad141f6edb840c60139e371386a18a8cd4b9f5912a76c1c142abedb1f:eyJzZWxlY3RlZExpbmVDb3VudCI6NSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiODQ1MThlZDQyNWZhZWNhNTgxNGExYzEwMTU0ZjEzMjgxOGViM2VjMGI2ZTgzOThkZjQ5NGI4YWRmN2MzYTI0NiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNTAzYWFlMjllMDYzMTZkNmRhNmY4YzJhOTFmNmU0NGE2MTJmYWJkNzkzYWQxZjVhMWZjYTUyMDZiY2VkYTQ3YyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZmVjYzgxYWMyZjE3ZWVjMDQwYzhjNWM2NzYwODkzYjJkNmJmMmJkMjVhN2M4MTlkMTBhMGMzMWZmMjE5M2NhZiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZWIxYmM1YmM0YTIzN2Y1NzhlNmFmNGE0MTVkMDY0N2Y5OTEwYjAzYjM2NGUxZTI3YzFmMWRiYWE3NDNkMDNiYSJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileEditorToolbarTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:f3c48bd72cbd1f8c19ae509d0b42757cc76641b1ba1ab1eba51d555a48751658:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkNGQ0Njk5YWY0MjE4ZTg0M2FhOGQwYzZjNTY3YjEzMzMxYzA5MWQxYTgxMzI0ODE4MWM1ZTRjMjQ5MDRlN2IifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileForwardingRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:1c43b4b67ff75200d330c0e6dcb8a7c652af56899d58c6fccc9aca89262ec5fe:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1OTEzNmM3MGIwNGU3YjM0Y2U1OWIzODMxZGFiNjY0NWIwY2MxOWIzMjg3NmQ1ZmFiZjNmMmVlMjY5NTg4MmMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4M2IxNTM3YjRlN2Q0NWFhNWJmZGM5YjZlY2RkZGUwMmM5ZGFmYTEyNTQ5ZjUyMjRkMDc3Mzk5MGZjZjFhZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileHostIntegrationRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:07c662e83a529833bf9aea2b962509e8653d5bf9062d208b941f887f04216160:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMxOGMxYWY1Y2Q1MjFiYTJlYmNkZGZjM2U1YzEzMWRhNDhmMjA1YTAyNWMwOTU2Nzk2Yjc2NTBkMDg3NDQzOGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjN2VkN2ZlM2FkNDdlMGNlOWFkZjhjODdkZDEyZmZlYzczMmI5Y2FkNjZhODYyMzI4ZTgwNTM2ZjIzMzBlOGUifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileSavedNameRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:0eddd809cc4a05cb51814cbb15b23dc1a881757e4f63cd610d210108342a4038:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlOTE5NjUyYjQ3ZmJjZTM2Y2UxYzA4NTE5MjFlZWY4YjBmZjE1NGNiODMyYjlkNTY2YTY0MDYyMGQ2MjFmNGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxODAyNTA0ZjI1YmEzY2QwYjhmZjEwMGI5NGJlYjUyNmQ1ZWUyNTQxYzJkODkwZDgxZjNhNDk2NjNiMTIxYzAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhiY2E3MWVjMzZhNzBmOGVmYTc5MjkzNWJjZDAzYWM5YjdhZjhiZjAzNmExMjI5NmM1NTFlYjA3OGQyMjI5YmEifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-22T03:23:14.035Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:1f74472fe60ef3963fee0dcf3fb7a78120097f664925842fc6db119dbd10d57f",
|
||||
"pageVersion": "sha256:d7f1ff3b8eb7120aba2d023df8fc286ed253a0f183a332c4d4c6df27aba330a7",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_3d431c8c7b804187a1ef5a7d9178c430",
|
||||
@@ -71,10 +71,24 @@
|
||||
"version": "repo-lines-v1:sha256:6a76d54ef19ad5c6b564234115af5f6d34dd4d600f01435ccb6ed36cebdbdf5f:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNkMDE3YjUwYWY0OTFiMzExZTAwMzA0N2UzMGMyYWUxMDFkZDRkZjllMzRkNmE5YmI5OGEyZTIzZjIzNDI4NWQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImEzMGQ3MDNjMjIxZGFkNmRhMzg4Yzk5MjdjOTQyN2I5YTY5NTBiYmNlZTliMzM0NGY4OGY4YjAxOTZmNGU0OWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk3YWNjMWEyNTVjNDVmNzk5ZTAyYjM4Zjg1MGVmOGIzMDMwOTNiZTE5OTZiMDIwNTE5MjU0YzRkNjYyYTViMzAifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_d3350be7dc9c4d2faf80fbc61d192968",
|
||||
"statement": "StoreKitTrialTests requires manual StoreKit authorization and an explicit TERMIND_STOREKIT_TESTS=1 opt-in; default test-suite success does not count as storefront lifecycle evidence.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L56-L58",
|
||||
"version": "repo-lines-v1:sha256:59b48c1c93af632d0d54f375f34be63bfe084da21dbf98d89f2c5174f4f566ea:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNWYxODBmOWMxMjY5MDNiY2MzMzFhYTk1NDU2ZTQ5NDQ0YTdkNGQwMTFlOGEyYTgzZjVkYzg3MDIzOTE4MTJkMCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYjQ4MzZlZDdlMDA1Mzc3NWEwYTk2NmNlODYxMzRiMjM0N2Q4NTFhN2IwMmY0ODEyYmViMmM1OWQxYzY4ZDUyNiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZGMwNmIzZDc5NGYzMzczOTYxOGNhZmVjOTQwY2ZkY2YxZjllYjI1ZjI5YjUyYWJjZmNkZjA0MWY3NTg2YWZmYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTA1MTY5OTI5YTliMjNhOWIwMDJiYjE5MDNhYTA3ZWMxZGE0ODA1ZjY3ZTEyNTBmYzZjOTQ4MDlmMzJlMGM3ZSJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/StoreKitTrialTests.swift#L1-L18",
|
||||
"version": "repo-lines-v1:sha256:01f6bcd9c1be6ab834bd576093f823f2b13ebdc7043b843fc256fa8ab1b51bb3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjUyMzkxMGFkMTQyYWFlZTQ0YzE0ZGU2YTYxODVkZTBiY2NhNDhlYzZlZGQ3ODFlNWU1MjQzYjdiODk2N2VkMTkifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-22T03:23:14.035Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:255121c2ef0130528b47855870bb8f42015ef543c8d3f140d6f7673f0051a3bb",
|
||||
"pageVersion": "sha256:582572b4a7b9b58da44bb0abd4c5be3d8b7d6890b0653e69a98f75ceaabb4dc7",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_83870f4f1ad6403ea0d8bd8775729a76",
|
||||
@@ -104,15 +104,15 @@
|
||||
},
|
||||
{
|
||||
"id": "claim_49b7e46dc58948ad8a9cfb47be7bd41d",
|
||||
"statement": "Routine Xcode validation must use `-onlyUsePackageVersionsFromResolvedFile`; the repository defines TFM/TFI build entrypoints, strict Swift formatting, and a localization validation script.",
|
||||
"statement": "Routine Xcode validation must use -onlyUsePackageVersionsFromResolvedFile; the repository defines TFM/TFI build entrypoints, strict Swift formatting, localization validation, and explicit gates for visible-window, StoreKit, and mobile key-window tests.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L26-L34",
|
||||
"version": "repo-lines-v1:sha256:a91f88bee69fc799fe765bb122f6b5106642c565be05fb945780ea3d3248ebf3:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNTczYmEyNjc2YzMzZGE1MjMyNTFkNWNjZjUzNjViODFhMGEwMjMyZWU3MGI3OTFlNmJjMTNmYTIyNTFhMGQ4MiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYjNkZGYwYjM4NzRlMWFmZmJlMzgwYTg1YWUxM2E2MDNhMzNjZmNmMDQ4YzBmNDM0NTNmYThkOTY4OTcyOTk2OCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMzE4ODJlOTJlMDU3MTI0MDRlN2M4MWQ2Mjc2NTIzMWQ5Y2VkZjg5MGNlNmUwZTVlMDBhZDk2NzIzOTA5YzA3OSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNTMwM2VlYzhlNjU1MjZiMzI1MWUyNDRmNjljMGIwOTMwY2ZmNTFiZDhiODRkMzZhMzk1NzJlZDg3YjIyOWZkOSJ9"
|
||||
"resource": "repo://AGENTS.md#L24-L32",
|
||||
"version": "repo-lines-v1:sha256:a91f88bee69fc799fe765bb122f6b5106642c565be05fb945780ea3d3248ebf3:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNTczYmEyNjc2YzMzZGE1MjMyNTFkNWNjZjUzNjViODFhMGEwMjMyZWU3MGI3OTFlNmJjMTNmYTIyNTFhMGQ4MiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYjNkZGYwYjM4NzRlMWFmZmJlMzgwYTg1YWUxM2E2MDNhMzNjZmNmMDQ4YzBmNDM0NTNmYThkOTY4OTcyOTk2OCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZGI1ODA1YWE0ZDNjNDk5NWQ4OWQxZTA4ZjY5NjkyNDg2MjMyNzJkYTZiNjk2ZGEwZWNlMjUxMGY2NjE3Y2RjMSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNTMwM2VlYzhlNjU1MjZiMzI1MWUyNDRmNjljMGIwOTMwY2ZmNTFiZDhiODRkMzZhMzk1NzJlZDg3YjIyOWZkOSJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L40-L48",
|
||||
"version": "repo-lines-v1:sha256:b27ae6846aa3bf61e897870b4f13db11ff5622aa74b65e7c5b153d79066742e2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk3ZmM5ODZlZjAxZWU1ZjU4YzZmMWZhMjY1YjhhNjQxMzExNjhmOGFhNTk5M2Q3ODg2ZDk2YzZlMTg5ODk0MzIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg0NTE4ZWQ0MjVmYWVjYTU4MTRhMWMxMDE1NGYxMzI4MThlYjNlYzBiNmU4Mzk4ZGY0OTRiOGFkZjdjM2EyNDYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQxZGE4Nzc5OGNjOTU3NTdiNzc0NDU4ZWM0OWI4NDFkY2FjMzgwNTFkOTI5Y2RiOTgxOTBiYjE3YjI3ZGZkODgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjBlZGM0MzMyOThhZDU4MTI5ZWUwYTg4NTJjMTNmNTI5MjBkYWFmOTRhOGM2NGE0ODcxZWVlZjQ2ZTEzMTVlZDIifQ"
|
||||
"resource": "repo://AGENTS.md#L38-L50",
|
||||
"version": "repo-lines-v1:sha256:1504391daf2c6128093191cf4154eebb7c2a830ea322086e3cbf2a30066708cc:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk3ZmM5ODZlZjAxZWU1ZjU4YzZmMWZhMjY1YjhhNjQxMzExNjhmOGFhNTk5M2Q3ODg2ZDk2YzZlMTg5ODk0MzIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg0NTE4ZWQ0MjVmYWVjYTU4MTRhMWMxMDE1NGYxMzI4MThlYjNlYzBiNmU4Mzk4ZGY0OTRiOGFkZjdjM2EyNDYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQxZGE4Nzc5OGNjOTU3NTdiNzc0NDU4ZWM0OWI4NDFkY2FjMzgwNTFkOTI5Y2RiOTgxOTBiYjE3YjI3ZGZkODgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjBlZGM0MzMyOThhZDU4MTI5ZWUwYTg4NTJjMTNmNTI5MjBkYWFmOTRhOGM2NGE0ODcxZWVlZjQ2ZTEzMTVlZDIifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -139,10 +139,36 @@
|
||||
"version": "repo-lines-v1:sha256:c502b82a80a53329d256f638301cdaa11432ebba24ee9005eec7d39ed1f5dd65:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEzYTU3NzFmOGY3ZmZmZjlhMjNkOWZiZTMyYTlmYzAwYzc0ZjRjYTU2NWY2NjFhNmQ2YmYxNGRiNmY2ZTlkNmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRiNjVlZGIzMWM5NDAzM2M2ZWVmOTIzOTQ3OWMzODczYzY0NzhhYmMyMWZhZDZlODJkYjJhNWU5ZDMyYzRhNmYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgwNjZjMGUyZDJhNzZhZGViYTcyYzdmMjY3OWJlMTNkM2UzZWM5MzgzNzFhODliNTUzM2I0OTk0OTQwZTBhOGMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEzY2EyMjE1MzJlMmQwOGM1YTgwYjA2MDJmNTBkMzIyMjBmMjZhMTBlNGFmYmYyMzA1NWU2ZGU2MmY3Yjk2ZDkifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_a6f36ae9e4474af5b27f98e2f5d44acd",
|
||||
"statement": "The four mobile UIKit key-window suites are omitted from routine parallel validation and require TEST_RUNNER_TERMIND_MOBILE_UI_TESTS=1, narrow only-testing filters and parallel testing disabled.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://AGENTS.md#L46-L46",
|
||||
"version": "repo-lines-v1:sha256:20f70f81c29f72ceb3b8c0d0ed710e433bbc08043f50f8fa17d7544dbd06708d:eyJzZWxlY3RlZExpbmVDb3VudCI6MSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjBmNzBmODFjMjlmNzJjZWIzYjhjMGQwZWQ3MTBlNDMzYmJjMDgwNDNmNTBmOGZhMTdkNzU0NGRiZDA2NzA4ZCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMjBmNzBmODFjMjlmNzJjZWIzYjhjMGQwZWQ3MTBlNDMzYmJjMDgwNDNmNTBmOGZhMTdkNzU0NGRiZDA2NzA4ZCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNjc0N2NkNGE1NTI3OTAxN2Q1ODYxMzE3ZjlhZDcwZWY0ODIwZTFiOTAxYzI4MDFhYjE1MTdjZGI5NjhiZjliYiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZmVjYzgxYWMyZjE3ZWVjMDQwYzhjNWM2NzYwODkzYjJkNmJmMmJkMjVhN2M4MTlkMTBhMGMzMWZmMjE5M2NhZiJ9"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileEditorToolbarTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:f3c48bd72cbd1f8c19ae509d0b42757cc76641b1ba1ab1eba51d555a48751658:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkNGQ0Njk5YWY0MjE4ZTg0M2FhOGQwYzZjNTY3YjEzMzMxYzA5MWQxYTgxMzI0ODE4MWM1ZTRjMjQ5MDRlN2IifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileForwardingRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:1c43b4b67ff75200d330c0e6dcb8a7c652af56899d58c6fccc9aca89262ec5fe:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1OTEzNmM3MGIwNGU3YjM0Y2U1OWIzODMxZGFiNjY0NWIwY2MxOWIzMjg3NmQ1ZmFiZjNmMmVlMjY5NTg4MmMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4M2IxNTM3YjRlN2Q0NWFhNWJmZGM5YjZlY2RkZGUwMmM5ZGFmYTEyNTQ5ZjUyMjRkMDc3Mzk5MGZjZjFhZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileHostIntegrationRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:07c662e83a529833bf9aea2b962509e8653d5bf9062d208b941f887f04216160:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMxOGMxYWY1Y2Q1MjFiYTJlYmNkZGZjM2U1YzEzMWRhNDhmMjA1YTAyNWMwOTU2Nzk2Yjc2NTBkMDg3NDQzOGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjN2VkN2ZlM2FkNDdlMGNlOWFkZjhjODdkZDEyZmZlYzczMmI5Y2FkNjZhODYyMzI4ZTgwNTM2ZjIzMzBlOGUifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileSavedNameRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:0eddd809cc4a05cb51814cbb15b23dc1a881757e4f63cd610d210108342a4038:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlOTE5NjUyYjQ3ZmJjZTM2Y2UxYzA4NTE5MjFlZWY4YjBmZjE1NGNiODMyYjlkNTY2YTY0MDYyMGQ2MjFmNGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxODAyNTA0ZjI1YmEzY2QwYjhmZjEwMGI5NGJlYjUyNmQ1ZWUyNTQxYzJkODkwZDgxZjNhNDk2NjNiMTIxYzAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhiY2E3MWVjMzZhNzBmOGVmYTc5MjkzNWJjZDAzYWM5YjdhZjhiZjAzNmExMjI5NmM1NTFlYjA3OGQyMjI5YmEifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T08:21:59.182Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"pageVersion": "sha256:3c5890c5831313021a01c7840ee3ab3fa0b82708cc9e2b60a336255809efbf3f",
|
||||
"pageVersion": "sha256:af03fbc03d89a8fd3c34ff1e83c1df89dc2a3c9f26c59993e76ae74434fe1ffa",
|
||||
"claims": [
|
||||
{
|
||||
"id": "claim_b7fbd64158554b8b8ca80a0a613b3bc3",
|
||||
@@ -369,10 +369,64 @@
|
||||
"version": "repo-lines-v1:sha256:c502b82a80a53329d256f638301cdaa11432ebba24ee9005eec7d39ed1f5dd65:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEzYTU3NzFmOGY3ZmZmZjlhMjNkOWZiZTMyYTlmYzAwYzc0ZjRjYTU2NWY2NjFhNmQ2YmYxNGRiNmY2ZTlkNmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRiNjVlZGIzMWM5NDAzM2M2ZWVmOTIzOTQ3OWMzODczYzY0NzhhYmMyMWZhZDZlODJkYjJhNWU5ZDMyYzRhNmYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgwNjZjMGUyZDJhNzZhZGViYTcyYzdmMjY3OWJlMTNkM2UzZWM5MzgzNzFhODliNTUzM2I0OTk0OTQwZTBhOGMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEzY2EyMjE1MzJlMmQwOGM1YTgwYjA2MDJmNTBkMzIyMjBmMjZhMTBlNGFmYmYyMzA1NWU2ZGU2MmY3Yjk2ZDkifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_07d623d7949c46aaa9ae28d047d5c2d9",
|
||||
"statement": "HermesMemoryTests uses actor continuations to await history-index replacement counts and controlled barriers for stale-generation writes/reviews, avoiding load-sensitive wall-clock polling for the key lifecycle event.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://FrameworkTests/HermesMemoryTests.swift#L116-L181",
|
||||
"version": "repo-lines-v1:sha256:ce72d05810dc1671686e744e8d2fdaf825e3662b3dd2f726191909a92e01ab3a:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE3MjA1MzIyZDIyNTY5NmVkODY4OGRlYzk5N2NjNGMyMzZlN2M4ZDVhMDY4ZjBmOGEwNzg0NWJkYzk4NWJhYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFkMmZlMGM5ZTQ2MGJjYjM4YTQ0YzY4YTY2OWNlZWY3NDA4YWExNjcxMmUwMjZlMmFmZGI0Yzk4NTc5YzlmMjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY0ZWMyOTlmNTE0NWQ5M2I1YWM4OWZmMzVlOTE2YjE5ZDE3ZTA3NTg0MWQ1ODIwODI4YzdlMjJjZDMzZjdiYzYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://FrameworkTests/HermesMemoryTests.swift#L247-L337",
|
||||
"version": "repo-lines-v1:sha256:f5eb0859e6d2cb250d5574f7a492c1bd5042b86eb01c1632cfcb4a76b6933dff:eyJzZWxlY3RlZExpbmVDb3VudCI6OTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjUxNTlkY2U2MjQxZGRhYzhmODgzNGVkYjM2ODgwZmJiMDdhZGMyOTI0MjQ3M2VlMTViZWRjYjgyNGM3MjZmYjciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhiOGVkOWM5YmY2NmU1ZGI0ODc0ZjE5NThiNDA1OThjMmE1MjFjODUzMTk1ZDk3NjdmNWVmYWJiNjAwOThhNjQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImE2NzRiNjdiYWYyYmMwZDEwOGJmMWJkZjIwMDVkZWVjNjM3NThlNDVjNGJiMTE2ODk3ZjliZGM2YjhkMGQ0OTAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImE4MWRiYzk0YmUzNzhmYjY1OGU4MTAyZGU2ZGRlNDBkMzgwMmRmNzJmY2MwYjc5ZGVhOWU0ZDM3Y2FiNmFkZTYifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_479a7f8dcd7d4fe9918a9b225ad08471",
|
||||
"statement": "MCPUploadTests waits for the fake destination to start before exercising cancellation owners and requires HTTP disconnect to return 410, avoid commit, release activity, record an error audit and leave the ticket paused.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift#L177-L197",
|
||||
"version": "repo-lines-v1:sha256:09225b7b105df303acc8396e48c42c5251ddf2feff12b03d2c52d91c79fb352e:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE2YjJkOTVmZTFiOTA3OGRkZDkzZWExMWM5MjlhODc4MzAyMzQwOWVmYWIyMDdmMDcwNmRkZDllZGM4NDJlZjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImI2NWU4NzRiZTc5MTIwY2ExMDZjMzcyZmM5ODlkNjZiZWQxOWMzZTQ0ZjRjMmIzNjJiZjUxMmU5ZWZhYWI4MjkiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImEyZTVkNGJlYjE4YmNmZTY3NjVlZTBlYzQ4MjZhODg2ZWY0ZTFlMGNiYjc3NTE0ZmQ2M2ZhOTIwNDRmNzEzODQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImE5MTFhMDA0NWFiYzgzOWNjYzM0YjVkZjRkYWNiY2ZiYTFjMmUyMjBlOTQ0NDM1MTM0ZTY1NjA1YmJmNGU0MmYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift#L251-L276",
|
||||
"version": "repo-lines-v1:sha256:3792a7f25d2ec146b7b352c37c6e4a5fd9883de3c0451915c4f7da84dbc9887e:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlMWQ3MjAzODMyYmQ5ZTZlNDY5ZjUzYTdkMWQ2MWE5YjM3NTQxOTIyNzliZTY0OTYyYTg5MDVlNzAyNWMzNjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU5ZDk1ZWE2MmVhNjlkZmZkZTJmYmI1ODE4MDZhNzgyMTViODcxYzU3ZTliZWZmNjMxN2YxN2YwYjVmMmM1YzIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNiODM5NTZmZDAzNzU5M2UyNzUyMGYwN2I1ZDQwYzhiZWRjOTkyMTVlNDMxMTA0ODA0NWZiYjJmY2IwMGZlMzMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUxODUyZWMwMmU4N2ZiYTQ5MDQ1OGJlNDc0YWY1ZDliYmJhZjk0NWJmYjQ4MzhjNmIxY2Y5NGVmYjRmMWZmYmYifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFMTests/MCPUploadTests.swift#L349-L390",
|
||||
"version": "repo-lines-v1:sha256:53c278ee0d7b5f24c8d269dcbe6263662af712762339d7d30f00ec928b8692ab:eyJzZWxlY3RlZExpbmVDb3VudCI6NDIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRlMDQzYTczOTBlMWNhN2FhMDU2ZTk1YWFmMjE2NTM5YTIyNTkwNjU2ZGI4ZmIwNmI2ZWU5YzMyMWMxMjNlYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk3MWZmNDc1YjI4ZjA3ZTAxZmYyZDlkMDNlNGI1Njg3MWU5ZmE2ZDZiN2RkZmU2NTBmOGQyYjEyYmE3ZWZlZWIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRlOWZjNmY2NzhjN2U5Y2EwY2YxOTY1YmVjZWUzMjA5OWEzNzRlZTc0N2Q2NTE2ZWViZWFiMzQ2NDU0NGVhMTAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjVmNTFmNjliM2QwYWU0YWZiNDk3MDc0MmQzNTcxMzZhMzc2MGFhM2QxMjM5ZWZhY2RjMmQ1ZTEwYzhjNDA4MDMifQ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "claim_b9219599d1c743eea0f97eb6a7798624",
|
||||
"statement": "The four mobile process-global key-window suites are disabled by default and must run with TERMIND_MOBILE_UI_TESTS=1 plus Xcode parallel testing disabled; serialization within each suite is insufficient to coordinate separate suites.",
|
||||
"evidence": [
|
||||
{
|
||||
"resource": "repo://TFITests/MobileEditorToolbarTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:f3c48bd72cbd1f8c19ae509d0b42757cc76641b1ba1ab1eba51d555a48751658:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxNTMzZDM3NTZmOGMwZjgyNDc4YjE4NWUzODYwNWNlOTA0MDBhM2Q1ZjlmMDA0MGIxMDgzZjllMmRjYjVkMWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkNGQ0Njk5YWY0MjE4ZTg0M2FhOGQwYzZjNTY3YjEzMzMxYzA5MWQxYTgxMzI0ODE4MWM1ZTRjMjQ5MDRlN2IifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileForwardingRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:1c43b4b67ff75200d330c0e6dcb8a7c652af56899d58c6fccc9aca89262ec5fe:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1OTEzNmM3MGIwNGU3YjM0Y2U1OWIzODMxZGFiNjY0NWIwY2MxOWIzMjg3NmQ1ZmFiZjNmMmVlMjY5NTg4MmMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4M2IxNTM3YjRlN2Q0NWFhNWJmZGM5YjZlY2RkZGUwMmM5ZGFmYTEyNTQ5ZjUyMjRkMDc3Mzk5MGZjZjFhZTQifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileHostIntegrationRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:07c662e83a529833bf9aea2b962509e8653d5bf9062d208b941f887f04216160:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMxOGMxYWY1Y2Q1MjFiYTJlYmNkZGZjM2U1YzEzMWRhNDhmMjA1YTAyNWMwOTU2Nzk2Yjc2NTBkMDg3NDQzOGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjN2VkN2ZlM2FkNDdlMGNlOWFkZjhjODdkZDEyZmZlYzczMmI5Y2FkNjZhODYyMzI4ZTgwNTM2ZjIzMzBlOGUifQ"
|
||||
},
|
||||
{
|
||||
"resource": "repo://TFITests/MobileSavedNameRenderingTests.swift#L1-L12",
|
||||
"version": "repo-lines-v1:sha256:0eddd809cc4a05cb51814cbb15b23dc1a881757e4f63cd610d210108342a4038:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlOTE5NjUyYjQ3ZmJjZTM2Y2UxYzA4NTE5MjFlZWY4YjBmZjE1NGNiODMyYjlkNTY2YTY0MDYyMGQ2MjFmNGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxODAyNTA0ZjI1YmEzY2QwYjhmZjEwMGI5NGJlYjUyNmQ1ZWUyNTQxYzJkODkwZDgxZjNhNDk2NjNiMTIxYzAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhiY2E3MWVjMzZhNzBmOGVmYTc5MjkzNWJjZDAzYWM5YjdhZjhiZjAzNmExMjI5NmM1NTFlYjA3OGQyMjI5YmEifQ"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"by": "openwiki/0.5.2",
|
||||
"at": "2026-09-23T06:54:45.592Z"
|
||||
"at": "2026-09-23T10:06:09.363Z"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"updatedAt": "2026-09-23T08:26:51.160Z",
|
||||
"updatedAt": "2026-09-23T10:25:40.794Z",
|
||||
"command": "update",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"model": "host-agent/codex",
|
||||
"status": "complete",
|
||||
"language": "en"
|
||||
|
||||
@@ -2,46 +2,46 @@
|
||||
"schemaVersion": 1,
|
||||
"pages": {
|
||||
"/openwiki/architecture/desktop-ui.md": {
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c",
|
||||
"pageVersion": "sha256:fb2e8faf240307b667e408bf1a3ffe425899dcf6d34f9dae8cccab4e30a70c88",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e"
|
||||
},
|
||||
"/openwiki/architecture/engineering-invariants.md": {
|
||||
"pageVersion": "sha256:ced917378133d346e25f9793e04d360a19ff15bd567435b4183562c3dc9fab09",
|
||||
"pageVersion": "sha256:35da0200127e36e0161d9ebfabc103070580eff4d348f77b92091549c2d15e27",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/architecture/mobile-ui.md": {
|
||||
"gitHead": "42e7766127e4b31d41296740f46c08c9b0bb063f",
|
||||
"sourceFingerprint": "sha256:abf4e2d831f004bdc87fc30b20d0c3c96e898a5cec5654d292675be4a3378a82",
|
||||
"pageVersion": "sha256:3e4fffdec19e331d34ec12f5b4ead52c83e7d4d17e8f0937e8ba884b0d26ed34",
|
||||
"pageVersion": "sha256:6f758688dba0fd6ecc5da1905671f8372325879f816a81755431c0cc4469c04e",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "2fd5fd33-d302-431f-8b58-eecdb3c5515e"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/architecture/module-map.md": {
|
||||
"pageVersion": "sha256:eebf0a77f06515f063a173fdf53ac96cca81aeae0519a99c3c2697d94c59429d",
|
||||
"pageVersion": "sha256:4f2820877ec3b78a77319f48a9cfee8f397b3bf2216d9de35fce3ebdf601f2c9",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/architecture/native-app-directories.md": {
|
||||
"pageVersion": "sha256:7b943e2d155437d61aafb7681db058ef94efb0afbdab534a552eeaee29dc8413",
|
||||
"pageVersion": "sha256:71a3c6e74feb945c25eb8f6d8025534596d9d7cdb41b67b79887004ca006d40d",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/architecture/platform-runtime.md": {
|
||||
"pageVersion": "sha256:ed3f410b516491c6b31b18037bf8c9a0274dc08a50a13080e5d7906c041da1af",
|
||||
"pageVersion": "sha256:63336e85b6d432a53dd31486e99e84d3cb86d592f42771810bab0fc8e9e52392",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/architecture/shared-module-directories.md": {
|
||||
"gitHead": "ae38d77013b7502c185781920ebfd4236afb1e6b",
|
||||
@@ -51,39 +51,39 @@
|
||||
"completedRunId": "3212507d-fdea-4335-9994-e4980af3ccef"
|
||||
},
|
||||
"/openwiki/architecture/supporting-system-directories.md": {
|
||||
"gitHead": "12fee3a5c735ed6f5b9ef8ecd854e326527f186c",
|
||||
"sourceFingerprint": "sha256:2d19bb85bb852de045b9a3c58808dc15f2c945041b63d4a53ead6dd37ceef43d",
|
||||
"pageVersion": "sha256:bc62050f5799c6e7764ff9d08a0e721dda371eb74b7b8342346c59f747abb3b5",
|
||||
"pageVersion": "sha256:6971c304cb02eb6f308dbbbc6833b74c5a84b608c4e4a8435a9716000c404ec9",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "fad30cd1-ec54-497a-96f1-7175412c6b64"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/architecture/system-boundaries.md": {
|
||||
"pageVersion": "sha256:2552fa8187812755085075681b5a5148ef62a16224616146ec131bd1fb880d64",
|
||||
"pageVersion": "sha256:18ed1963cf31915d010fc6c2937f77cd377fff2d65fae74d1c7ae7c9793f3700",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/concepts/agent-runtime-and-assistant.md": {
|
||||
"pageVersion": "sha256:ee7c8c1d70af9d78c4effdc07f9f5b65fb08c92a14abee40c88be00a9df41c87",
|
||||
"pageVersion": "sha256:7fbe6994d8040bdf4a14e40af86c0197d0e560cafa0f7f62a0803988dbf4f85e",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/concepts/commerce-localization-and-product-surfaces.md": {
|
||||
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
|
||||
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
|
||||
"pageVersion": "sha256:a1c9a480314b124cb096731918e3a208c7dab2e590e8c42bcfa94456f9440b9c",
|
||||
"completedBy": "omp",
|
||||
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
|
||||
"pageVersion": "sha256:0387b384f0e9df7daaf614e6d1e66ed31e2d0bd1f198bce95d1d8e6191d2e00b",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/concepts/persistence-and-secrets.md": {
|
||||
"pageVersion": "sha256:2c7b5e94e1ecc8ef99eb9c4ea83b9ffb4420e8a9229b17a20f93376b48e8633f",
|
||||
"pageVersion": "sha256:b564d4439f025bc55d8b4c0a8f3054174469499c9351087e0dd6383a4c70fe33",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/concepts/remote-services-and-forwarding.md": {
|
||||
"gitHead": "bdeb201d19b1d86d1bf1145d6cd6bbfbd95bd4a1",
|
||||
@@ -100,32 +100,32 @@
|
||||
"completedRunId": "1928445d-30c0-4dcb-b85b-38ecfc74a433"
|
||||
},
|
||||
"/openwiki/concepts/ssh-multiplexing-and-scheduling.md": {
|
||||
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
|
||||
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
|
||||
"pageVersion": "sha256:eedd08fcec41ac31b854d4f0375e28efcca4b20b1dfac2d25880b18421e8d199",
|
||||
"completedBy": "omp",
|
||||
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
|
||||
"pageVersion": "sha256:ec75319c1b21afb2ec24dfee47fe74a0d32ad67f1f7e04314e7c3a6a07e65937",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/concepts/ui-design-principles.md": {
|
||||
"gitHead": "42e7766127e4b31d41296740f46c08c9b0bb063f",
|
||||
"sourceFingerprint": "sha256:abf4e2d831f004bdc87fc30b20d0c3c96e898a5cec5654d292675be4a3378a82",
|
||||
"pageVersion": "sha256:3204534fc02c6315b0c2fe23d6cb486a18f8b86be9b8a42dd31523c3bbfd560c",
|
||||
"pageVersion": "sha256:c449e2380e48e619eda9f0ac0151d8491634d439a2740a92763fb4df6b8b7fcc",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "2fd5fd33-d302-431f-8b58-eecdb3c5515e"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/integrations/mcp-server-and-bridge.md": {
|
||||
"gitHead": "42e7766127e4b31d41296740f46c08c9b0bb063f",
|
||||
"sourceFingerprint": "sha256:abf4e2d831f004bdc87fc30b20d0c3c96e898a5cec5654d292675be4a3378a82",
|
||||
"pageVersion": "sha256:e8702d030f8cc69c70ce0b630321aa0bf139b70e4dfb9e29b469cb5cfd77a53c",
|
||||
"pageVersion": "sha256:ecf21d72d9c031ff95071424e149d92da037b8ec6e0151dd5b9c4a80fea18ceb",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "2fd5fd33-d302-431f-8b58-eecdb3c5515e"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/operations/build-test-and-release.md": {
|
||||
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
|
||||
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
|
||||
"pageVersion": "sha256:0049d9723b546cae3375f18e49fc5c7fc515150d30a5a18e696c9fbb9120813f",
|
||||
"completedBy": "omp",
|
||||
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
|
||||
"pageVersion": "sha256:67a0bedc5f971d2d6d6f41e11480cdd93f3b1450d460d8ac56bc1ed65a40264b",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/operations/cloudkit-release-readiness.md": {
|
||||
"gitHead": "2ded2a56a35c168034bdb82043a88bc0466e2088",
|
||||
@@ -149,25 +149,25 @@
|
||||
"completedRunId": "8bdb277a-cf85-4174-a91f-b6a4f89a046d"
|
||||
},
|
||||
"/openwiki/operations/storefront-commerce-release.md": {
|
||||
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
|
||||
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
|
||||
"pageVersion": "sha256:1f74472fe60ef3963fee0dcf3fb7a78120097f664925842fc6db119dbd10d57f",
|
||||
"completedBy": "omp",
|
||||
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
|
||||
"pageVersion": "sha256:d7f1ff3b8eb7120aba2d023df8fc286ed253a0f183a332c4d4c6df27aba330a7",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/quickstart.md": {
|
||||
"pageVersion": "sha256:255121c2ef0130528b47855870bb8f42015ef543c8d3f140d6f7673f0051a3bb",
|
||||
"pageVersion": "sha256:582572b4a7b9b58da44bb0abd4c5be3d8b7d6890b0653e69a98f75ceaabb4dc7",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/testing/behavioral-boundaries-and-fixtures.md": {
|
||||
"gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496",
|
||||
"sourceFingerprint": "sha256:470a7b67217aacb7d87b7fddf13971bf2d3fbdef0393232dd0af8c1a20c38167",
|
||||
"pageVersion": "sha256:3c5890c5831313021a01c7840ee3ab3fa0b82708cc9e2b60a336255809efbf3f",
|
||||
"pageVersion": "sha256:af03fbc03d89a8fd3c34ff1e83c1df89dc2a3c9f26c59993e76ae74434fe1ffa",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "21cd41b9-0003-416e-86e9-126eaf940714"
|
||||
"completedRunId": "b656c41e-8a8b-416f-97a3-1d80a5d73048",
|
||||
"gitHead": "93717005b8635e95454721bb769dbc134b09a023",
|
||||
"sourceFingerprint": "sha256:94019c07d8390b8b80f999dedb97c249f32c1bc428f3be0de99d102add10a829"
|
||||
},
|
||||
"/openwiki/workflows/port-forwarding-pool-and-dispatch.md": {
|
||||
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
|
||||
@@ -191,11 +191,11 @@
|
||||
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
|
||||
},
|
||||
"/openwiki/workflows/ssh-session-lifecycle.md": {
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c",
|
||||
"pageVersion": "sha256:c2af67d394cef803d994353ab5c3de83d224bf76ea40f58ab3cc274a8ec6329b",
|
||||
"completedBy": "codex",
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e",
|
||||
"gitHead": "9dc90787df17eecdf99fe3772b6d3940b11dca6b",
|
||||
"sourceFingerprint": "sha256:0ee98d82fdc0728e69cf29d5feb2cee02a6f4f906947caa959ad13197eb9210c"
|
||||
"completedRunId": "0f19cd13-5045-4067-a13c-959543e6781e"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,6 @@ sources:
|
||||
resource: repo://Frameworks/TermindApplication/Agent/AssistantLibraryModel.swift
|
||||
- id: openwiki-source-1c48f72c0c7a3164d7d5c715
|
||||
resource: repo://Frameworks/TermindApplication/Agent/ConversationModel.swift
|
||||
- id: openwiki-source-2d98a2885dc21f508f49b749
|
||||
resource: repo://Frameworks/TermindApplication/Agent/MemoryIndexedAgentRepository.swift
|
||||
- id: openwiki-source-5c91b796f7e6d651aedf3023
|
||||
resource: repo://Frameworks/TermindApplication/FeatureModels/CommandHistoryModel.swift
|
||||
- id: openwiki-source-dc7b363138921b0923d2dc2f
|
||||
@@ -118,6 +116,8 @@ sources:
|
||||
resource: repo://TFM/App/AppModel.swift
|
||||
- id: openwiki-source-6570374eaac2e0278fa84640
|
||||
resource: repo://TFM/App/TermindApp.swift
|
||||
- id: openwiki-source-396f97a332870d48c065d7e9
|
||||
resource: repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift
|
||||
- id: openwiki-source-0854be84b166268626a3cb08
|
||||
resource: repo://TFM/Features/Sidebar/WindowSidebarView.swift
|
||||
- id: openwiki-source-22b9fca540c3029c5ace451e
|
||||
@@ -128,12 +128,14 @@ sources:
|
||||
resource: repo://TFMTests/AppTerminationTests.swift
|
||||
- id: openwiki-source-d3d065330c730839f5cc6112
|
||||
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
|
||||
- id: openwiki-source-47dc468698b2904f0004ee04
|
||||
resource: repo://TFMTests/MCPUploadTests.swift
|
||||
- id: openwiki-source-9442022b3dba1be62a55f0f0
|
||||
resource: repo://TFMTests/TerminalThemeTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T08:21:59.182Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Cross-Cutting Engineering Invariants
|
||||
@@ -216,9 +218,11 @@ sibling working tree is not the app dependency. Follow `AGENTS.md` for package r
|
||||
MCP/SFTP cleanup. Only after those joins return does it close Agent background commands, then the connection pool.
|
||||
Repeated shutdown returns the same cleanup task; an independent three-second native fallback replies once even if a save
|
||||
or drain remains blocked. Joining an attempt does not prove save success or completion before process exit.
|
||||
Shared unstructured SSH authentication/pool setup can outlive runtime cancellation. Existing manual compaction, titles and
|
||||
memory indexing are outside these captured-turn joins; memory suspension cancels current tasks but successful terminal
|
||||
saves can schedule indexing again. Background-command close requests cancellation without proving remote settlement.
|
||||
Shared SSH configuration and connection openings use independently cancellable waiters; their underlying task is cancelled
|
||||
only after the last waiter leaves, while explicit Host retirement cancels the whole opening. Existing manual compaction and
|
||||
title generation remain outside the captured-turn joins. Memory suspension is a persistent admission fence: it invalidates
|
||||
current sessions and tasks, ignores history notifications while suspended, then reloads state and backfills history on resume.
|
||||
Background-command close requests cancellation without proving remote settlement.
|
||||
See [Platform Runtime](/openwiki/architecture/platform-runtime.md) and `AppTerminationTests` for scope and verification.
|
||||
- Connection/authentication/forwarding state is memory-only, excluded from domain records, sync and UserDefaults.
|
||||
Serial is local/temporary, never persisted or an Agent host. Vault-synced Workspace templates contain named
|
||||
@@ -482,7 +486,9 @@ sibling working tree is not the app dependency. Follow `AGENTS.md` for package r
|
||||
HTTP 200/Content-Length alone proves neither success nor persistence.
|
||||
- Shared metadata/expiry policy, separate directional state/claims/errors/ordering. Four active slots, each direction at most 64 unfinished
|
||||
and 256 terminal records for thirty minutes. Live work blocks idle expiry; completion remains queryable. Disconnect/recoverable SSH
|
||||
failure pauses; explicit revocation cancels. Resume needs original active session/unexpired capability; exit loses both. Generation IDs
|
||||
failure pauses; upload disconnect synchronously cancels that attempt's thread-safe transfer token before MainActor bookkeeping, while a
|
||||
separate per-attempt disconnect signal preserves 410 mapping and resumability without misclassifying ordinary SFTP cleanup failures.
|
||||
Explicit revocation cancels. Resume needs original active session/unexpired capability; exit loses both. Generation IDs
|
||||
reject old callbacks. Host/session retirement, stop/token rotation/direction disable revoke; release capacity after cleanup. Audits never
|
||||
include bytes/tokens. Upload expiry may clean partials; download allows valid Range after success.
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ title: TFI Mobile UI Architecture
|
||||
description: "How the iPhone/iPad app composes registered feature stacks, scene-local navigation, shared runtimes, adaptive content regions, native terminal/transcript surfaces and mobile interaction policies."
|
||||
tags: [ios, ipados, tfi, ui, navigation, adaptive-layout, swiftui, uikit]
|
||||
sources:
|
||||
- id: openwiki-source-7397a04f40a393c81b0ca52d
|
||||
resource: repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift
|
||||
- id: openwiki-source-906678adb91c2fce2d3fcaed
|
||||
resource: repo://TFI/App/MobileAppModel.swift
|
||||
- id: openwiki-source-60d390fe6fbfea55a2a8230a
|
||||
@@ -42,14 +44,24 @@ sources:
|
||||
resource: repo://TFITests/MobileAdaptiveLayoutTests.swift
|
||||
- id: openwiki-source-b822b041afbf829d09a8555a
|
||||
resource: repo://TFITests/MobileAppTests.swift
|
||||
- id: openwiki-source-a154b5d36ec59496392d45e4
|
||||
resource: repo://TFITests/MobileAssistantTests.swift
|
||||
- id: openwiki-source-16ec96bd78162e7e62effd0e
|
||||
resource: repo://TFITests/MobileConnectionPickerTests.swift
|
||||
- id: openwiki-source-7341d7b266d976d7aac5d161
|
||||
resource: repo://TFITests/MobileEditorToolbarTests.swift
|
||||
- id: openwiki-source-f4b87eae375fa9241ff8cb35
|
||||
resource: repo://TFITests/MobileForwardingRenderingTests.swift
|
||||
- id: openwiki-source-96b0d4f1528e0e0e4e7b6a12
|
||||
resource: repo://TFITests/MobileHostIntegrationRenderingTests.swift
|
||||
- id: openwiki-source-1068a19b8ad42f734f4b4bb6
|
||||
resource: repo://TFITests/MobileSavedNameRenderingTests.swift
|
||||
- id: openwiki-source-11c91698354a4f95be3c4654
|
||||
resource: repo://TFITests/MobileWorkspaceMenuTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T00:59:31.979Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T07:36:39.730Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# TFI Mobile UI Architecture
|
||||
@@ -221,7 +233,7 @@ The application runtime owns execution, not `onDisappear` on the conversation vi
|
||||
|
||||
`MobileRootView` reports its scene phase; `MobileAppModel` aggregates all scenes. Entering background handling occurs when **all tracked scenes** are backgrounded, not whenever one feature disappears or one scene resigns activity.
|
||||
|
||||
At that boundary the app pauses edit monitoring, memory/sync/Metrics/outbox work and recording, then starts its background allowance. Expiration suspends workspaces, stops forwarding, pauses transfers and expires Assistant background execution. An active scene ends the allowance and asks retained workspaces to resume, rechecks edited files, and restarts the appropriate services. This is best-effort mobile continuity, not unlimited background network execution.
|
||||
At that boundary the app pauses edit monitoring, memory/sync/Metrics/outbox work and recording, then starts its background allowance. Memory suspension is an admission fence rather than a one-shot cancellation: existing memory sessions are invalidated, new indexing/review/edit access is refused, and resume reloads committed state before backfilling history. Expiration suspends workspaces, stops forwarding, pauses transfers and expires Assistant background execution. While the Assistant suspension drain is active, send, edit, plan implementation and manual compaction remain blocked even if a scene becomes active. An active scene ends the platform allowance and asks retained workspaces to resume, rechecks edited files, and restarts the appropriate services, but it does not bypass that Assistant drain. This is best-effort mobile continuity, not unlimited background network execution.
|
||||
|
||||
Closing a workspace, navigating back from its detail, switching tabs, and exhausting background allowance are therefore four different actions with different owners. A UI refactor must preserve that distinction.
|
||||
|
||||
@@ -238,4 +250,6 @@ Implemented principles:
|
||||
|
||||
`MobileAdaptiveLayoutTests` exercises native tab identity across compact/regular widths, all five destinations, Dynamic Type and English/Chinese variants. It also checks that region changes retain the Metrics list and scroll position, and preserve Assistant conversation identity, native transcript, composer focus and marked Chinese text. These tests validate injected geometry and navigation behavior; platform availability and real-device presentation still need appropriate device verification.
|
||||
|
||||
Four suites that create or replace a process-global UIKit key window are excluded from the default parallel run. Run `MobileEditorToolbarTests`, `MobileForwardingRenderingTests`, `MobileHostIntegrationRenderingTests` and `MobileSavedNameRenderingTests` explicitly with `TERMIND_MOBILE_UI_TESTS=1` and parallel testing disabled; their shared presentation surface makes concurrent execution nondeterministic even though each suite is serialized internally.
|
||||
|
||||
For a change, inspect scene routing tests for navigation, region/layout tests for geometry, workspace/terminal tests for session continuity, and Assistant tests for run-versus-selection ownership. See [Platform Runtime Composition](/openwiki/architecture/platform-runtime.md) and [Build, Test, and Release Operations](/openwiki/operations/build-test-and-release.md) before changing the lifetime boundary.
|
||||
@@ -49,7 +49,7 @@ sources:
|
||||
generated: { by: "codex", at: "2026-09-22T09:17:11.491Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Module and Directory Architecture Map
|
||||
|
||||
@@ -87,7 +87,7 @@ sources:
|
||||
generated: { by: "codex", at: "2026-09-23T00:14:42.075Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Native App Directory Responsibilities
|
||||
|
||||
@@ -10,14 +10,14 @@ sources:
|
||||
resource: repo://Frameworks/TermindApplication/Agent/AssistantLibraryModel.swift
|
||||
- id: openwiki-source-1c48f72c0c7a3164d7d5c715
|
||||
resource: repo://Frameworks/TermindApplication/Agent/ConversationModel.swift
|
||||
- id: openwiki-source-2d98a2885dc21f508f49b749
|
||||
resource: repo://Frameworks/TermindApplication/Agent/MemoryIndexedAgentRepository.swift
|
||||
- id: openwiki-source-7397a04f40a393c81b0ca52d
|
||||
resource: repo://Frameworks/TermindApplication/FeatureModels/MemoryModel.swift
|
||||
- id: openwiki-source-ee4e94c8b189e0881ec4fd15
|
||||
resource: repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentBackgroundCommands.swift
|
||||
- id: openwiki-source-0c82bf45bc197f879a54fd3a
|
||||
resource: repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentConnections.swift
|
||||
- id: openwiki-source-256e2b134a8446ea63b15585
|
||||
resource: repo://FrameworkTests/HermesMemoryTests.swift
|
||||
- id: openwiki-source-cd0be716a2446029f345525a
|
||||
resource: repo://Termind.xcodeproj/project.pbxproj
|
||||
- id: openwiki-source-dc9295278cc250ed20567540
|
||||
@@ -66,10 +66,10 @@ sources:
|
||||
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
|
||||
- id: openwiki-source-531f6567ecf96fd4b0c5e97a
|
||||
resource: repo://TFMTests/ExternalConnectionURLTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T08:21:59.182Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Platform Runtime, App Composition, and Lifetimes
|
||||
@@ -151,7 +151,7 @@ The returned cleanup task separately joins the controller's captured preparation
|
||||
|
||||
The app publishes that one cleanup task before suspending memory/edit monitoring and stopping metrics, speech, window-owned workspaces, SFTP work, external authentication, forwarding and the outbox. Repeated calls return the same task. `AppTerminationReplyCoordinator` independently races cleanup completion against a three-second fallback and replies to AppKit once. The fallback can permit exit while persistence or resource cleanup is still pending; returning from a save attempt does not establish that it succeeded.
|
||||
|
||||
This is a captured-turn shutdown boundary, not a join of every Assistant task. Already-running manual compaction, title generation and memory indexing are outside it. `memory.suspend()` cancels current work, but a successful terminal save through `MemoryIndexedAgentRepository` can schedule indexing again. Shared unstructured SSH authentication and pool-opening tasks may not inherit runtime cancellation, leaving a consumer drain blocked and later resource closes unreached before fallback. Background-command close itself requests cancellation rather than proving remote settlement. These limitations make the native fallback necessary; the iOS lifecycle remains separate.
|
||||
This is a captured-turn shutdown boundary, not a join of every Assistant task. Already-running manual compaction and title generation are outside it. `memory.suspend()` now establishes a persistent admission fence: it invalidates current access, ignores later history notifications, and reloads state plus backfills history only after resume. Shared SSH configuration and pool-opening work may still outlive one cancelled caller when other waiters remain; each waiter cancels independently, the final waiter cancels the underlying task, and explicit Host retirement cancels the whole opening. Background-command close itself requests cancellation rather than proving remote settlement. These limitations make the native fallback necessary; the iOS lifecycle remains separate.
|
||||
|
||||
## Mobile composition
|
||||
|
||||
@@ -199,9 +199,9 @@ Scene phases are aggregated by scene ID. The app enters global background behavi
|
||||
|
||||
`MobileBackgroundController` keeps one identity-bearing lease around the UIKit identifier. The expiration handler runs synchronously on the MainActor: it detaches the matching lease, invokes the app's cancellation callback, and ends that lease's valid identifier before returning. Finishing or replacing a lease makes its old callbacks inert. A denied acquisition immediately invokes expiration without ending an invalid identifier. If expiration reenters `begin`, the old lease cannot end or overwrite its replacement; if the platform calls expiration before returning an identifier, the outer acquisition retires the returned old identifier afterward. Each valid identifier is ended at most once.
|
||||
|
||||
The callback requests suspension; it does not await network teardown or persistence. Workspaces detach their sessions and start asynchronous disconnects. Assistant synchronously requests cancellation for every conversation before joining retained consumers, then closes background commands and connection pools. Those drains remain best effort under iOS suspension or termination, so an ended platform lease is not evidence that a save or remote cleanup completed. The Assistant composer-send guard remains set until its cleanup task returns, even if a scene becomes active meanwhile.
|
||||
The callback requests suspension; it does not await network teardown or persistence. Workspaces detach their sessions and start asynchronous disconnects. Assistant synchronously requests cancellation for every conversation before joining retained consumers, then closes background commands and connection pools. Those drains remain best effort under iOS suspension or termination, so an ended platform lease is not evidence that a save or remote cleanup completed. The Assistant admission fence remains set until its cleanup task returns—even if a scene becomes active meanwhile—and blocks send, edit, plan implementation and manual compaction rather than merely disabling the composer.
|
||||
|
||||
When any scene becomes active, mobile refreshes its current device-directory record, reenables edit monitoring, finishes the background task, asks existing workspaces to resume, reconciles sync according to foreground entitlement, restarts the outbox and metrics, refreshes entitlement asynchronously, and updates activities. Returning before expiration therefore preserves healthy connections; after expiration, workspace recovery follows the workspace's reconnection journey. Expired forwarding and pending interactive authentication are stopped rather than silently restarted on foreground.
|
||||
When any scene becomes active, mobile refreshes its current device-directory record, reenables edit monitoring, resumes memory (which reloads committed state and schedules history backfill), finishes the background task, asks existing workspaces to resume, reconciles sync according to foreground entitlement, restarts the outbox and metrics, refreshes entitlement asynchronously, and updates activities. Returning before expiration therefore preserves healthy connections; after expiration, workspace recovery follows the workspace's reconnection journey. Expired forwarding and pending interactive authentication are stopped rather than silently restarted on foreground, and an unfinished Assistant suspension drain keeps its own admission fence until cleanup completes.
|
||||
|
||||
## Ownership invariants and safe extension points
|
||||
|
||||
|
||||
@@ -54,6 +54,14 @@ sources:
|
||||
resource: repo://TermindMCPBridge/main.swift
|
||||
- id: openwiki-source-637644793f7e37cc057eb973
|
||||
resource: repo://TFI/Platform/MobileLiveActivityController.swift
|
||||
- id: openwiki-source-7341d7b266d976d7aac5d161
|
||||
resource: repo://TFITests/MobileEditorToolbarTests.swift
|
||||
- id: openwiki-source-f4b87eae375fa9241ff8cb35
|
||||
resource: repo://TFITests/MobileForwardingRenderingTests.swift
|
||||
- id: openwiki-source-96b0d4f1528e0e0e4e7b6a12
|
||||
resource: repo://TFITests/MobileHostIntegrationRenderingTests.swift
|
||||
- id: openwiki-source-1068a19b8ad42f734f4b4bb6
|
||||
resource: repo://TFITests/MobileSavedNameRenderingTests.swift
|
||||
- id: openwiki-source-d1ffd558b3360478aa85b5af
|
||||
resource: repo://TFIWidgets/WorkspaceLiveActivity.swift
|
||||
- id: openwiki-source-76b1cdca4a02038756187f92
|
||||
@@ -64,12 +72,14 @@ sources:
|
||||
resource: repo://TFM/Infrastructure/Networking/LoopbackHTTPServer.swift
|
||||
- id: openwiki-source-d3d065330c730839f5cc6112
|
||||
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
|
||||
- id: openwiki-source-0dd012e3740bcc348fc36ccb
|
||||
resource: repo://TFMTests/StoreKitTrialTests.swift
|
||||
- id: openwiki-source-0f8d0f9d08d6674698dd054c
|
||||
resource: repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift
|
||||
generated: { by: "omp", at: "2026-09-22T03:45:03.442Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T06:11:02.802Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Supporting Products, Packages, and Tooling
|
||||
@@ -159,8 +169,8 @@ Here solid arrows are updates/navigation and dashed arrows are shared type contr
|
||||
| --- | --- |
|
||||
| `FrameworkTests` | Flat shared-layer test suites for values/use cases, persistence/migration, sync, shared presentation, and other framework contracts. |
|
||||
| `FrameworkTests/Fixtures` | Synthetic original-module V1/V14 SwiftData stores. They preserve cross-module migration evidence and must not be regenerated from the extracted models. |
|
||||
| `TFMTests` | Flat desktop and integration suites: architecture boundaries, windows/navigation, terminal/remote flows, transfers, MCP, and rendering. Visible-window and screenshot cases have explicit opt-in gates. |
|
||||
| `TFITests` | Flat mobile suites: app/scene ownership, workspace/session behavior, backgrounding, editor/Assistant behavior, adaptive layout, and screenshots. |
|
||||
| `TFMTests` | Flat desktop and integration suites: architecture boundaries, windows/navigation, terminal/remote flows, transfers, MCP, and rendering. Visible-window and screenshot cases have explicit opt-in gates; manually authorized StoreKit tests use their own default-off gate. |
|
||||
| `TFITests` | Flat mobile suites: app/scene ownership, workspace/session behavior, backgrounding, editor/Assistant behavior, adaptive layout, and screenshots. Suites that replace the process-global UIKit key window are opt-in and run with parallel testing disabled. |
|
||||
| `Benchmarks/PortForwarding` | Standalone forwarding benchmark executable over shared-framework SPI; not hosted by an app or test bundle. |
|
||||
| `Scripts` | Flat executable utilities grouped by function below. |
|
||||
| `Scripts/Tests` | Python regression tests for version bumping and forwarding-benchmark tooling. |
|
||||
|
||||
@@ -43,7 +43,7 @@ sources:
|
||||
generated: { by: "codex", at: "2026-09-23T00:14:42.075Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# System Boundaries and Dependency Ownership
|
||||
|
||||
@@ -48,6 +48,8 @@ sources:
|
||||
resource: repo://FrameworkTests/AssistantConversationOperationsTests.swift
|
||||
- id: openwiki-source-6ec3fb4cd6a582cdf278bab9
|
||||
resource: repo://FrameworkTests/AssistantExecutionControllerTests.swift
|
||||
- id: openwiki-source-256e2b134a8446ea63b15585
|
||||
resource: repo://FrameworkTests/HermesMemoryTests.swift
|
||||
- id: openwiki-source-105d05d558f14996921a83f6
|
||||
resource: repo://Termind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
|
||||
- id: openwiki-source-a62bfbbc7de13a894444718b
|
||||
@@ -90,10 +92,10 @@ sources:
|
||||
resource: repo://TFMTests/ChatComposerStateTests.swift
|
||||
- id: openwiki-source-8d265a8732f0af93c5d4e274
|
||||
resource: repo://TFMTests/MCPServerToolsTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T08:21:59.182Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Assistant, Agent Runtime, Skills, and Memory
|
||||
@@ -220,11 +222,11 @@ The app snapshots its `AssistantConversationStore`, separately requests controll
|
||||
|
||||
MCP shutdown and SFTP cancellation proceed alongside those Assistant joins. Agent background commands are closed only after all these waits return, followed by the Agent connection pool. Repeated shutdown returns the same cleanup task. The native reply coordinator separately replies once when cleanup returns or its three-second fallback fires; termination can therefore happen before a blocked save or later resource closure completes. A joined save attempt remains distinct from save success.
|
||||
|
||||
Cancellation is cooperative across the remote stack. `AgentSSHAuthenticationContext.configurationAttempt()` and shared pool opening await unstructured tasks; cancelling the runtime does not necessarily cancel those tasks or settle their interaction continuations. Such a drain may remain blocked until exit, before background-command or pool closure is reached. `AgentBackgroundCommands.closeAll()` itself requests command-task cancellation without awaiting remote settlement. These joins also exclude already-running manual compaction, title generation and memory indexing. `memory.suspend()` cancels current work, but successful terminal saves call `historyChanged()` and can schedule indexing again. The shutdown contract therefore covers captured turns and retained consumers, with the native fallback bounding the quit reply.
|
||||
Cancellation is cooperative across the remote stack. Shared SSH configuration and pool openings register one continuation per caller. Cancelling one waiter resumes only that caller with cancellation and keeps the underlying task alive for remaining waiters; the last waiter cancels the task, while explicit Host retirement cancels the whole opening. A shared drain can therefore remain blocked while another legitimate waiter still owns it. `AgentBackgroundCommands.closeAll()` itself requests command-task cancellation without awaiting remote settlement. These joins also exclude already-running manual compaction and title generation. Memory suspension now remains an admission fence: it invalidates current sessions/tasks and ignores later history notifications until resume reloads committed state and schedules backfill. The shutdown contract therefore covers captured turns and retained consumers, with the native fallback bounding the quit reply.
|
||||
|
||||
### Mobile background expiration
|
||||
|
||||
Mobile background expiration first sets `isSuspending`, cancels pending preparations and recording, snapshots the stored conversations, and calls `stop()` on every conversation synchronously. Only after all cancellation requests are issued does its cleanup task call `stopAndWait()` for each snapshot member, then close background commands and Agent connections. A first conversation's blocked save therefore cannot postpone cancellation of a later queued or active run. Repeated expiration during that cleanup is inert, and composer sends remain blocked until cleanup returns, including when a scene has already returned to the foreground.
|
||||
Mobile background expiration first sets `isSuspending`, cancels pending preparations and recording, snapshots the stored conversations, and calls `stop()` on every conversation synchronously. Only after all cancellation requests are issued does its cleanup task call `stopAndWait()` for each snapshot member, then close background commands and Agent connections. A first conversation's blocked save therefore cannot postpone cancellation of a later queued or active run. Repeated expiration during that cleanup is inert. Send, prepared edit, plan implementation and manual compaction admissions all remain blocked until cleanup returns, including when a scene has already returned to the foreground.
|
||||
|
||||
The finite UIKit lease has a separate boundary: its expiration callback requests this cleanup and ends the matching valid lease synchronously, without awaiting those drains. Cleanup may continue when execution is available, but iOS suspension or termination can prevent completion. Neither the lease nor Live Activities guarantee persistence or continued network work. See [Platform Runtime](/openwiki/architecture/platform-runtime.md) for scene aggregation, lease identity and workspace recovery.
|
||||
|
||||
@@ -332,6 +334,8 @@ A memory session receives a frozen snapshot for its conversation. Memory reviews
|
||||
|
||||
New submissions capture whether they have a memory-session identity before preparation awaits. Enabling memory afterward does not add a session to that captured turn. Disabling it remains a revocation boundary: `MemoryModel` invalidates existing contexts and rejects a late snapshot load from the old generation, so capture does not override a later disable.
|
||||
|
||||
Suspension is distinct from disabling. It keeps the user's enabled preference and database, but advances the generation, revokes active access, cancels indexing/reviews, refuses refresh/edit/session/search/index/review admission, and ignores terminal history notifications while suspended. Resume opens admission, reloads the store for the new generation, and schedules a full history replacement. If an old-generation write committed in storage while suspension invalidated its caller, the reload reconciles that committed state instead of publishing the stale return value.
|
||||
|
||||
## Focused verification
|
||||
|
||||
The focused tests establish behavior that is important when changing this area:
|
||||
|
||||
@@ -5,7 +5,7 @@ description: Explains StoreKit-derived Pro access, native paywall and review own
|
||||
tags: [commerce, storekit, localization, product-surfaces, marketing, widgets]
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-22T03:23:14.035Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
sources:
|
||||
- id: openwiki-source-8037e2358a2c4f9b2c722a11
|
||||
resource: repo://AGENTS.md
|
||||
@@ -55,7 +55,7 @@ sources:
|
||||
resource: repo://TFMTests/StoreKitTrialTests.swift
|
||||
- id: openwiki-source-0f8d0f9d08d6674698dd054c
|
||||
resource: repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift
|
||||
generated: { by: "openwiki/0.5.2", at: "2026-09-22T00:31:10.149Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
---
|
||||
|
||||
## Scope and ownership
|
||||
@@ -124,7 +124,7 @@ The public site is a separate Astro app in `LandingPage/`, with strict TypeScrip
|
||||
|
||||
## Change and verification guide
|
||||
|
||||
- For an access change, update `ProFeature`/callers and `ProAccessController` together; test entitlement phases, verification failures, pending Ask to Buy, restore, and metadata failure separately. `StoreKitTrialTests` exercises the local `SKTestSession` configuration, while `CommerceConfigurationTests` catches drift between product identifiers and the fixture.
|
||||
- For an access change, update `ProFeature`/callers and `ProAccessController` together; test entitlement phases, verification failures, pending Ask to Buy, restore, and metadata failure separately. `StoreKitTrialTests` exercises the local `SKTestSession` configuration, while `CommerceConfigurationTests` catches drift between product identifiers and the fixture. Because `SKTestSession` needs manual StoreKit authorization on the test host, that suite is skipped by default and runs only when `TERMIND_STOREKIT_TESTS=1` is explicitly supplied; routine unattended suite success does not mean it ran.
|
||||
- Treat local StoreKit testing as insufficient evidence for production: configure and verify App Store Connect metadata and use Sandbox/review environments for storefront prices, subscription lifecycle, restore, Family Sharing, and cross-device behavior.
|
||||
- For paywall or review work, test both platform presenters and the shared controller’s cancellation, persistence, cooldown, and multi-surface rules. Do not infer a rating or prompt display from an attempt record.
|
||||
- For text or product-copy changes, complete all three languages, run `Scripts/check-zh-localization.sh`, and run `AppLanguageTests` where applicable.
|
||||
|
||||
@@ -87,7 +87,7 @@ sources:
|
||||
generated: { by: "codex", at: "2026-09-23T06:59:53.554Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Persistent Data, Migrations, and Secret Boundaries
|
||||
|
||||
@@ -3,9 +3,6 @@ type: implementation guide
|
||||
title: SSH Multiplexing, Channel Admission, and I/O Scheduling
|
||||
description: "The concrete ownership and scheduling layers behind Termind SSH: per-connection session leases, serial libssh2 workers, exec state machines, multiplexed SFTP retries, readiness, backpressure, and feature-specific connection reuse."
|
||||
tags: [ssh, multiplexing, scheduling, libssh2, backpressure, sftp, concurrency]
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-22T03:23:14.035Z
|
||||
sources:
|
||||
- id: openwiki-source-8e06414c0a0a26e45de192bd
|
||||
resource: repo://Frameworks/TermindDomain/Connections/SSHPreferences.swift
|
||||
@@ -29,11 +26,16 @@ sources:
|
||||
resource: repo://Frameworks/TermindRemoteInfrastructure/SSH/SSHPTYChannel.swift
|
||||
- id: openwiki-source-e63615bc111f4678ec12525d
|
||||
resource: repo://Frameworks/TermindRemoteInfrastructure/SSH/SSHStreamPump.swift
|
||||
- id: openwiki-source-0260a25fb41739d94e23d2ea
|
||||
resource: repo://TFMTests/AgentConnectionPoolTests.swift
|
||||
- id: openwiki-source-7364a5d16e49e89eb03bbee2
|
||||
resource: repo://TFMTests/SSHForwardingPumpTests.swift
|
||||
- id: openwiki-source-ec3ec372dd69a7df3113c6b1
|
||||
resource: repo://TFMTests/SSHMaxSessionsPolicyTests.swift
|
||||
generated: { by: "omp", at: "2026-09-22T02:43:23.140Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# SSH Multiplexing, Channel Admission, and I/O Scheduling
|
||||
@@ -76,7 +78,7 @@ This is a conceptual layering diagram, not a claim that every owner supports eve
|
||||
|
||||
Metrics deliberately opts out of concurrent operations: `SSHExclusiveConnectionAdapter.withConnection` uses a busy flag and FIFO continuations to serialize complete operations on its owned connection. That adapter has no topology/fallback policy. Similar-looking SSH usage does not authorize merging Metrics, terminal, Agent, and forwarding lifetimes.
|
||||
|
||||
The Agent has a separate higher-level reuse policy: `AgentConnectionPool` keys connections by Host ID plus route fingerprint, joins same-fingerprint in-flight opens, and opens primary SFTP on its pooled SSH connection. Reuse survives a follow-up Agent run; default idle expiry is 180 seconds, and active exec/SFTP leases prevent whole-host idle retirement. Missing/changed routes invalidate reuse. This is an Agent-owned pool, not the terminal or forwarding pool.
|
||||
The Agent has a separate higher-level reuse policy: `AgentConnectionPool` keys connections by Host ID plus route fingerprint, joins same-fingerprint in-flight opens, and opens primary SFTP on its pooled SSH connection. Every joined caller has its own waiter identity. Cancelling one waiter resumes only that caller; the underlying open continues for remaining waiters, but is cancelled and removed when the last waiter leaves. Explicit Host disconnect cancels the whole opening and all waiters, and a late successful connection whose opening identity was retired is disconnected instead of entering the pool. Reuse survives a follow-up Agent run; default idle expiry is 180 seconds, and active exec/SFTP leases prevent whole-host idle retirement. Missing/changed routes invalidate reuse. This is an Agent-owned pool, not the terminal or forwarding pool.
|
||||
|
||||
## Session-channel budget: local FIFO, not server discovery
|
||||
|
||||
@@ -159,6 +161,6 @@ The Agent's automatic replacement retry is deliberately narrow: `AgentConnection
|
||||
| Can a busy/slow flow starve or corrupt a peer? | `SSHForwardingPumpTests`: ready-queue rotation, watermarks, window updates, half-close; `SSHForwardingWireTests`: concurrent streams and slow consumer. |
|
||||
| Why did SFTP open another socket rather than a sibling? | File permit's selected mode and `SFTPTransferContext.capability`, not the exec ready queue. |
|
||||
| Why does closing the terminal not close SSH yet? | PTY `closeTerminalSession` and last-sibling callback; an SFTP subsystem can still own the transport. |
|
||||
| Why was an Agent connection retained or rebuilt? | `AgentConnectionPool` route fingerprint, in-flight join, active leases and idle sweep; `AgentConnectionPoolTests`. |
|
||||
| Why was an Agent connection retained or rebuilt? | `AgentConnectionPool` route fingerprint, per-caller in-flight waiters, active leases and idle sweep; `AgentConnectionPoolTests`. |
|
||||
|
||||
Tests cited here are implementation evidence; they are not a performance guarantee for arbitrary servers/routes. Keep the pinned dependency graph when validating changes, and do not turn the [historical forwarding benchmarks](/openwiki/operations/port-forwarding-benchmarks.md) into general WAN latency claims.
|
||||
@@ -50,6 +50,14 @@ sources:
|
||||
resource: repo://TFI/UI/Managed/MobileCards.swift
|
||||
- id: openwiki-source-fffc181d864b6caea779a6f5
|
||||
resource: repo://TFITests/MobileAdaptiveLayoutTests.swift
|
||||
- id: openwiki-source-7341d7b266d976d7aac5d161
|
||||
resource: repo://TFITests/MobileEditorToolbarTests.swift
|
||||
- id: openwiki-source-f4b87eae375fa9241ff8cb35
|
||||
resource: repo://TFITests/MobileForwardingRenderingTests.swift
|
||||
- id: openwiki-source-96b0d4f1528e0e0e4e7b6a12
|
||||
resource: repo://TFITests/MobileHostIntegrationRenderingTests.swift
|
||||
- id: openwiki-source-1068a19b8ad42f734f4b4bb6
|
||||
resource: repo://TFITests/MobileSavedNameRenderingTests.swift
|
||||
- id: openwiki-source-8194e1eb3652c7ad61d75cfa
|
||||
resource: repo://TFITests/MobileTerminalFontTests.swift
|
||||
- id: openwiki-source-873894299539cce9a737a860
|
||||
@@ -88,10 +96,10 @@ sources:
|
||||
resource: repo://TFMTests/TerminalFontRenderingTests.swift
|
||||
- id: openwiki-source-9442022b3dba1be62a55f0f0
|
||||
resource: repo://TFMTests/TerminalThemeTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T05:17:08.701Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T07:36:39.730Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# UI Design Principles and Shared Presentation Boundaries
|
||||
@@ -242,6 +250,8 @@ The implementation already treats accessibility as behavior, not a final label p
|
||||
|
||||
Localization likewise affects measurement and identity-sensitive presentation. The existing adaptive/rendering cases exercise English, Simplified Chinese and Traditional Chinese, including narrow desktop editors and the mobile tab set. A layout that works only with the shortest English label is not proven by a source-level logic test.
|
||||
|
||||
Mobile tests that must install a real UIKit key window are a different seam from injected geometry tests. The editor-toolbar, forwarding, host-integration and saved-name rendering suites share process-global presentation state, so they are disabled in the default parallel run and must be invoked with `TERMIND_MOBILE_UI_TESTS=1` plus parallel testing disabled. Serialization inside each suite does not make separate key-window suites safe to overlap.
|
||||
|
||||
Do not claim all animation sites are already Reduce Motion-aware: the helpers make that policy available, but each changed call site still needs inspection. Likewise, an accessibility label does not prove that focus order, clipping, menu reachability or large-text layout is correct.
|
||||
|
||||
## 8. Continuity has a cost budget
|
||||
|
||||
@@ -16,6 +16,8 @@ sources:
|
||||
resource: repo://TFM/App/MCPServerController.swift
|
||||
- id: openwiki-source-76b1cdca4a02038756187f92
|
||||
resource: repo://TFM/Application/MCPServer/MCPServerTools.swift
|
||||
- id: openwiki-source-396f97a332870d48c065d7e9
|
||||
resource: repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift
|
||||
- id: openwiki-source-d485ebb339c77875a3b2701e
|
||||
resource: repo://TFM/Features/ExternalRequests/ExternalAuthCoordinator.swift
|
||||
- id: openwiki-source-ef4c6426a19087a6c49e4841
|
||||
@@ -42,10 +44,10 @@ sources:
|
||||
resource: repo://TFMTests/MCPTransferTicketTests.swift
|
||||
- id: openwiki-source-47dc468698b2904f0004ee04
|
||||
resource: repo://TFMTests/MCPUploadTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T01:34:03.251Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T07:36:39.730Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# MCP Server, Transfer APIs, and Stdio Bridge
|
||||
@@ -145,6 +147,8 @@ The upload ticket binds the expected byte count, SHA-256 digest, target path, an
|
||||
|
||||
Interrupted uploads can resume only from the coordinator’s acknowledged remote offset. The client must provide matching `Upload-Offset` and suffix `Content-Length`; the remote prefix is verified before continuation. Digest mismatch, truncation, cancellation, or cleanup failure does not publish a successful remote file. The status may report a possible temporary remote path if cleanup fails. Uploads never overwrite directories; `overwrite` is only meaningful for an existing regular file.
|
||||
|
||||
HTTP disconnect is signaled outside the MainActor, so its callback synchronously cancels the attempt's thread-safe transfer token before scheduling coordinator bookkeeping. A second per-attempt token records that the cancellation came from this HTTP connection: failure mapping can return `410 upload_cancelled` and preserve a resumable paused ticket without interpreting every internal SFTP failure—which also cancels the transfer token—as a disconnect. Attempt IDs keep a late callback from an old connection from cancelling a resumed upload, and a disconnect after remote commit cannot erase success.
|
||||
|
||||
### Download: `sftp_download` then `GET /downloads/<id>`
|
||||
|
||||
Creating a download ticket performs no remote I/O. On GET, the coordinator accepts regular files only, opens a dedicated SFTP stream, fixes the length, and returns binary bytes without local staging. It does not support `HEAD`, body/query credentials, or arbitrary ranges. A client may use one `Range: bytes=N-` continuation from its saved length; invalid range returns `416` without consuming a waiting ticket, and a resume verifies the existing prefix and source metadata before headers.
|
||||
|
||||
@@ -5,7 +5,7 @@ description: Safe, targeted validation and release procedures for Termind’s Xc
|
||||
tags: [operations, build, testing, localization, release, agentkit, screenshots]
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-22T03:23:14.035Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
sources:
|
||||
- id: openwiki-source-ea70eb6c045047448e446296
|
||||
resource: repo://.gitignore
|
||||
@@ -27,11 +27,21 @@ sources:
|
||||
resource: repo://Termind.xcodeproj/project.pbxproj
|
||||
- id: openwiki-source-105d05d558f14996921a83f6
|
||||
resource: repo://Termind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
|
||||
- id: openwiki-source-7341d7b266d976d7aac5d161
|
||||
resource: repo://TFITests/MobileEditorToolbarTests.swift
|
||||
- id: openwiki-source-f4b87eae375fa9241ff8cb35
|
||||
resource: repo://TFITests/MobileForwardingRenderingTests.swift
|
||||
- id: openwiki-source-96b0d4f1528e0e0e4e7b6a12
|
||||
resource: repo://TFITests/MobileHostIntegrationRenderingTests.swift
|
||||
- id: openwiki-source-1068a19b8ad42f734f4b4bb6
|
||||
resource: repo://TFITests/MobileSavedNameRenderingTests.swift
|
||||
- id: openwiki-source-793d7861000adc19f0c3df01
|
||||
resource: repo://TFMTests/AppLanguageTests.swift
|
||||
- id: openwiki-source-0dd012e3740bcc348fc36ccb
|
||||
resource: repo://TFMTests/StoreKitTrialTests.swift
|
||||
- id: openwiki-source-a08489338be00125d646c77e
|
||||
resource: repo://TFMTests/VisibleWindowTestTrait.swift
|
||||
generated: { by: "codex", at: "2026-09-22T01:13:21.371Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
---
|
||||
|
||||
# Build, Validation, Localization, and Dependency Release Operations
|
||||
@@ -103,6 +113,24 @@ TEST_RUNNER_TERMIND_WINDOW_TESTS=1 xcodebuild -project Termind.xcodeproj -scheme
|
||||
|
||||
In Xcode, set `TERMIND_WINDOW_TESTS=1` in the Test action environment. Existing screenshot tests may retain their own dedicated opt-in variables; offscreen layout and logic tests remain part of normal validation. This separation prevents a routine test run from activating the app, stealing focus, or becoming display-dependent.
|
||||
|
||||
StoreKit integration tests have a separate default-off gate because the test host requires manual StoreKit authorization. Run only the focused suite after authorizing the host:
|
||||
|
||||
```sh
|
||||
TERMIND_STOREKIT_TESTS=1 xcodebuild -project Termind.xcodeproj -scheme TFM -destination 'platform=macOS' -onlyUsePackageVersionsFromResolvedFile test -only-testing:TFMTests/StoreKitTrialTests
|
||||
```
|
||||
|
||||
On mobile, four UIKit integration suites replace the process-global key window. They remain skipped in the normal parallel suite and must run together with their opt-in enabled and Xcode parallel testing disabled:
|
||||
|
||||
```sh
|
||||
TEST_RUNNER_TERMIND_MOBILE_UI_TESTS=1 xcodebuild -project Termind.xcodeproj -scheme TFI -destination '<installed iOS simulator>' -onlyUsePackageVersionsFromResolvedFile -parallel-testing-enabled NO test \
|
||||
-only-testing:TFITests/MobileEditorToolbarTests \
|
||||
-only-testing:TFITests/MobileForwardingRenderingTests \
|
||||
-only-testing:TFITests/MobileHostIntegrationRenderingTests \
|
||||
-only-testing:TFITests/MobileSavedNameRenderingTests
|
||||
```
|
||||
|
||||
Default-suite success does not imply either manually gated group ran.
|
||||
|
||||
For an isolated interactive desktop demo, use a supported scene and one of the three supported languages:
|
||||
|
||||
```sh
|
||||
|
||||
@@ -5,8 +5,10 @@ description: Product metadata, entitlement expectations, App Store Connect owner
|
||||
tags: [app-store, storekit, commerce, subscriptions, release]
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-22T03:23:14.035Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
sources:
|
||||
- id: openwiki-source-8037e2358a2c4f9b2c722a11
|
||||
resource: repo://AGENTS.md
|
||||
- id: openwiki-source-b37c974aaea12bd08606d67d
|
||||
resource: repo://Frameworks/TermindDomain/Commerce/ProAccessTypes.swift
|
||||
- id: openwiki-source-3aa42bdd0f8eaf866f06599f
|
||||
@@ -17,7 +19,7 @@ sources:
|
||||
resource: repo://TFMTests/ProAccessTests.swift
|
||||
- id: openwiki-source-0dd012e3740bcc348fc36ccb
|
||||
resource: repo://TFMTests/StoreKitTrialTests.swift
|
||||
generated: { by: "codex", at: "2026-09-22T01:13:21.371Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
---
|
||||
|
||||
# App Store Commerce Configuration and Release Verification
|
||||
@@ -52,7 +54,7 @@ Keep runtime access behavior in the shared commerce controller and domain types.
|
||||
|
||||
## Release verification
|
||||
|
||||
1. Run `StoreKitTrialTests` and the relevant `SKTestSession`/Pro access suites. Verify purchase, introductory trial, renewal, cancellation, restore, expiration, billing retry, paid-to-paid grace, refund, revocation, Ask to Buy, deferred completion, and transaction updates.
|
||||
1. After manually authorizing StoreKit for the test host, run `StoreKitTrialTests` explicitly with `TERMIND_STOREKIT_TESTS=1`, preferably using `-only-testing:TFMTests/StoreKitTrialTests`, plus the relevant Pro access suites. The StoreKit suite is skipped by default, so routine suite success is not evidence that it ran. Verify purchase, introductory trial, renewal, cancellation, restore, expiration, billing retry, paid-to-paid grace, refund, revocation, Ask to Buy, deferred completion, and transaction updates.
|
||||
2. With a new Sandbox account, verify the localized annual and lifetime product names, descriptions, prices, annual period, introductory eligibility/duration, and Family Sharing. Existing accounts may already have consumed introductory eligibility.
|
||||
3. Verify the same Apple-account entitlement on Mac, iPhone, and iPad, then verify Family Sharing separately. Confirm lifetime precedence and cancellation-through-expiry behavior.
|
||||
4. Apply all English, Simplified Chinese, and Traditional Chinese metadata changes in App Store Connect. Coordinate storefront text with website and free-Workspace messaging while preserving the product IDs, prices, subscription group, offer, and grace policy.
|
||||
|
||||
+12
-2
@@ -16,6 +16,14 @@ sources:
|
||||
resource: repo://TFI/App/MobileRootView.swift
|
||||
- id: openwiki-source-6c9f797fc6a1e7ce639b72b8
|
||||
resource: repo://TFI/App/TermindIOSApp.swift
|
||||
- id: openwiki-source-7341d7b266d976d7aac5d161
|
||||
resource: repo://TFITests/MobileEditorToolbarTests.swift
|
||||
- id: openwiki-source-f4b87eae375fa9241ff8cb35
|
||||
resource: repo://TFITests/MobileForwardingRenderingTests.swift
|
||||
- id: openwiki-source-96b0d4f1528e0e0e4e7b6a12
|
||||
resource: repo://TFITests/MobileHostIntegrationRenderingTests.swift
|
||||
- id: openwiki-source-1068a19b8ad42f734f4b4bb6
|
||||
resource: repo://TFITests/MobileSavedNameRenderingTests.swift
|
||||
- id: openwiki-source-6570374eaac2e0278fa84640
|
||||
resource: repo://TFM/App/TermindApp.swift
|
||||
- id: openwiki-source-22b9fca540c3029c5ace451e
|
||||
@@ -24,10 +32,10 @@ sources:
|
||||
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
|
||||
- id: openwiki-source-0dd012e3740bcc348fc36ccb
|
||||
resource: repo://TFMTests/StoreKitTrialTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T06:54:45.592Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T08:21:59.182Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Termind Engineering Quickstart
|
||||
@@ -103,6 +111,8 @@ Use an installed iPhone or iPad simulator destination for `TFI` tests. Keep visi
|
||||
|
||||
StoreKit tests also remain skipped by default because they require manual authorization. When explicitly running them, set `TERMIND_STOREKIT_TESTS=1` and prefer `-only-testing:TFMTests/StoreKitTrialTests`. Default-suite success does not imply that opt-in suite ran.
|
||||
|
||||
Four mobile UIKit suites that replace the process-global key window are also default-off: `MobileEditorToolbarTests`, `MobileForwardingRenderingTests`, `MobileHostIntegrationRenderingTests`, and `MobileSavedNameRenderingTests`. Run them with `TEST_RUNNER_TERMIND_MOBILE_UI_TESTS=1`, narrow `-only-testing` selections, and `-parallel-testing-enabled NO`; suite-level serialization does not coordinate key-window ownership across separate suites.
|
||||
|
||||
## Change checklist
|
||||
|
||||
- Identify the domain and owner in the routing map; read the detailed page before implementing.
|
||||
|
||||
@@ -24,6 +24,8 @@ sources:
|
||||
resource: repo://FrameworkTests/CloudSyncSafetyPersistenceTests.swift
|
||||
- id: openwiki-source-eb9518e5c7eb3782fa0cccc0
|
||||
resource: repo://FrameworkTests/CloudSyncSafetyTests.swift
|
||||
- id: openwiki-source-256e2b134a8446ea63b15585
|
||||
resource: repo://FrameworkTests/HermesMemoryTests.swift
|
||||
- id: openwiki-source-8428b9f5de49b8a561d93fa5
|
||||
resource: repo://FrameworkTests/PersistenceCompatibilityTests.swift
|
||||
- id: openwiki-source-db40aa993661b07f1a9aff6d
|
||||
@@ -38,8 +40,18 @@ sources:
|
||||
resource: repo://TFITests/MobileCardRenderingTests.swift
|
||||
- id: openwiki-source-16ec96bd78162e7e62effd0e
|
||||
resource: repo://TFITests/MobileConnectionPickerTests.swift
|
||||
- id: openwiki-source-7341d7b266d976d7aac5d161
|
||||
resource: repo://TFITests/MobileEditorToolbarTests.swift
|
||||
- id: openwiki-source-f4b87eae375fa9241ff8cb35
|
||||
resource: repo://TFITests/MobileForwardingRenderingTests.swift
|
||||
- id: openwiki-source-96b0d4f1528e0e0e4e7b6a12
|
||||
resource: repo://TFITests/MobileHostIntegrationRenderingTests.swift
|
||||
- id: openwiki-source-1068a19b8ad42f734f4b4bb6
|
||||
resource: repo://TFITests/MobileSavedNameRenderingTests.swift
|
||||
- id: openwiki-source-9b78a7e39bfa08bea5192722
|
||||
resource: repo://TFITests/MobileWorkspaceStoreTests.swift
|
||||
- id: openwiki-source-396f97a332870d48c065d7e9
|
||||
resource: repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift
|
||||
- id: openwiki-source-7e364c6182a8339831ecab24
|
||||
resource: repo://TFM/Features/Workspaces/WorkspaceNavigatorView.swift
|
||||
- id: openwiki-source-cfbc34def649c94f760c5695
|
||||
@@ -52,6 +64,8 @@ sources:
|
||||
resource: repo://TFMTests/ChatComposerStateTests.swift
|
||||
- id: openwiki-source-c15cd5bef4646aaf64df407e
|
||||
resource: repo://TFMTests/ConnectionHistoryTests.swift
|
||||
- id: openwiki-source-47dc468698b2904f0004ee04
|
||||
resource: repo://TFMTests/MCPUploadTests.swift
|
||||
- id: openwiki-source-53e2b2fd2e661123f63e69e1
|
||||
resource: repo://TFMTests/SFTPTransferContextTests.swift
|
||||
- id: openwiki-source-0dd012e3740bcc348fc36ccb
|
||||
@@ -62,10 +76,10 @@ sources:
|
||||
resource: repo://TFMTests/VisibleWindowTestTrait.swift
|
||||
- id: openwiki-source-05f0aeba12df8388b97b3c76
|
||||
resource: repo://TFMTests/WorkspaceNavigatorRenameTests.swift
|
||||
generated: { by: "codex", at: "2026-09-23T06:54:45.592Z" }
|
||||
generated: { by: "codex", at: "2026-09-23T10:06:09.363Z" }
|
||||
verified:
|
||||
- by: openwiki/0.5.2
|
||||
at: 2026-09-23T06:54:45.592Z
|
||||
at: 2026-09-23T10:06:09.363Z
|
||||
---
|
||||
|
||||
# Testing Strategy and Behavioral Boundaries
|
||||
@@ -152,6 +166,10 @@ SFTP transfer tests use a controlled `TransferChannelHarness`, a `TransferChanne
|
||||
|
||||
Those tests are intentionally actor-driven and use polling only to wait for observable harness state. Prefer this style for races: hold the transfer at a known point, make the ownership transition, then release it and assert the terminal state and disconnect count.
|
||||
|
||||
MCP upload cancellation uses the same principle. `MCPUploadTests` waits until the fake destination has actually entered the transfer, fires each cancellation owner—including HTTP disconnect—and then requires a `410`, no remote commit, released activity and failed audit. The disconnect case additionally requires a paused ticket. This catches the ordering gap where a socket callback could enqueue MainActor bookkeeping after the transfer had already mapped an ordinary failure to `502`.
|
||||
|
||||
Hermes lifecycle tests avoid wall-clock polling for the index replacement itself. The actor-backed store resumes continuations when the first or second history replacement arrives, then the test yields only for the MainActor indexing flag to settle. Separate barriers hold an old-generation memory write or review at the commit/model boundary, suspend and resume the feature, and verify stale publication is rejected while committed storage is reloaded. Under a highly parallel full suite, event ownership is more deterministic than increasing a timeout.
|
||||
|
||||
### Mobile: app state, scenes, and device-local restoration
|
||||
|
||||
`TFITests` owns `MobileAppModel` composition and mobile scene behavior. Mobile app tests build `MobileAppModel(inMemory: true)` or supply dependency seams, which permits assertions over the actual shared schema and repositories without using the user's database or Keychain. Representative tests verify that scenes share durable conversations while navigation, selected conversation, and composer drafts stay scene-local; shared SwiftData history is observable from fresh repositories over the same container.
|
||||
@@ -184,6 +202,8 @@ In Xcode, set `TERMIND_WINDOW_TESTS=1` in the Test action environment. Existing
|
||||
|
||||
StoreKit tests use a separate opt-in because they require manual authorization. `StoreKitTrialTests` is serialized and skipped unless `TERMIND_STOREKIT_TESTS=1`; when explicitly authorized, prefer the narrow `-only-testing:TFMTests/StoreKitTrialTests` selection. Ordinary default-suite success therefore does not imply this StoreKit suite ran.
|
||||
|
||||
Mobile UIKit tests that create a replacement key window also use a separate gate. `MobileEditorToolbarTests`, `MobileForwardingRenderingTests`, `MobileHostIntegrationRenderingTests` and `MobileSavedNameRenderingTests` are serialized and skipped unless `TERMIND_MOBILE_UI_TESTS=1`. Run the four suites with Xcode parallel testing disabled because suite-level serialization does not coordinate process-global key-window state across separate suites.
|
||||
|
||||
## Change-to-regression matrix
|
||||
|
||||
| Change type | Primary regression seam | Required behavior to protect |
|
||||
@@ -196,7 +216,10 @@ StoreKit tests use a separate opt-in because they require manual authorization.
|
||||
| SSH credentials, prompts, host trust, or agent authentication | Authentication and interaction-policy fixtures | Ephemeral secrets stay ephemeral, prompt scope/order/coalescing is correct, forbidden work stays noninteractive, and secrets are invalidated after use. |
|
||||
| SSH/SFTP transfer scheduling or pane/session teardown | `SFTPTransferContextTests` with a controlled channel harness | Concurrency bounds hold, background transfer ownership survives UI teardown, cancellation cleans up, and fallback does not invite interaction. |
|
||||
| Mobile workspace, scene, restoration, or background lifecycle | `MobileAppTests` and `MobileWorkspaceStoreTests` | State is shared or local at the intended scope, external sessions remain ephemeral, restoration is safe, and callbacks cannot revive retired state. |
|
||||
| Hermes suspension or resume reconciliation | `HermesMemoryTests` with actor continuations and controlled write/review barriers | Suspended work cannot publish, history waits until resume, and committed stale-generation writes are reloaded. |
|
||||
| MCP upload disconnect/cancellation | `MCPUploadTests` with a blocked source and started destination | Every owner unblocks both sides without commit; disconnect maps to 410 and leaves a resumable paused ticket without changing ordinary failures. |
|
||||
| macOS rendering or focus behavior | Focused offscreen test plus `.requiresVisibleWindow` suite when needed | Default tests stay headless; opted-in tests prove the user-visible interaction. |
|
||||
| Mobile process-global key-window rendering | Four TERMIND_MOBILE_UI_TESTS suites with Xcode parallel testing disabled | Native navigation, toolbars and localized rendering run without cross-suite key-window interference. |
|
||||
|
||||
## Execution strategy
|
||||
|
||||
|
||||
Reference in new issue
Block a user