From 1ffd25eebeb83980b334e7cf1d616f4fa58f0504 Mon Sep 17 00:00:00 2001 From: Kaede Akino Date: Wed, 23 Sep 2026 18:25:51 +0800 Subject: [PATCH] Refresh architecture documentation --- .../architecture/engineering-invariants.json | 62 ++++--- openwiki/.claims/architecture/mobile-ui.json | 72 +++++++- openwiki/.claims/architecture/module-map.json | 8 +- .../architecture/native-app-directories.json | 8 +- .../architecture/platform-runtime.json | 74 ++++++--- .../supporting-system-directories.json | 44 ++++- .../architecture/system-boundaries.json | 10 +- .../concepts/agent-runtime-and-assistant.json | 106 ++++++++---- ...rce-localization-and-product-surfaces.json | 18 +- .../concepts/persistence-and-secrets.json | 8 +- .../ssh-multiplexing-and-scheduling.json | 36 +++- .../concepts/ui-design-principles.json | 30 +++- .../integrations/mcp-server-and-bridge.json | 32 +++- .../operations/build-test-and-release.json | 44 ++++- .../storefront-commerce-release.json | 18 +- openwiki/.claims/quickstart.json | 40 ++++- .../behavioral-boundaries-and-fixtures.json | 58 ++++++- openwiki/.last-update.json | 4 +- openwiki/.page-manifest.json | 156 +++++++++--------- .../architecture/engineering-invariants.md | 22 ++- openwiki/architecture/mobile-ui.md | 20 ++- openwiki/architecture/module-map.md | 2 +- .../architecture/native-app-directories.md | 2 +- openwiki/architecture/platform-runtime.md | 14 +- .../supporting-system-directories.md | 18 +- openwiki/architecture/system-boundaries.md | 2 +- .../concepts/agent-runtime-and-assistant.md | 12 +- ...merce-localization-and-product-surfaces.md | 6 +- openwiki/concepts/persistence-and-secrets.md | 2 +- .../ssh-multiplexing-and-scheduling.md | 14 +- openwiki/concepts/ui-design-principles.md | 14 +- .../integrations/mcp-server-and-bridge.md | 8 +- openwiki/operations/build-test-and-release.md | 32 +++- .../operations/storefront-commerce-release.md | 8 +- openwiki/quickstart.md | 14 +- .../behavioral-boundaries-and-fixtures.md | 27 ++- 36 files changed, 781 insertions(+), 264 deletions(-) diff --git a/openwiki/.claims/architecture/engineering-invariants.json b/openwiki/.claims/architecture/engineering-invariants.json index faf78a73..8282065d 100644 --- a/openwiki/.claims/architecture/engineering-invariants.json +++ b/openwiki/.claims/architecture/engineering-invariants.json @@ -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" } } diff --git a/openwiki/.claims/architecture/mobile-ui.json b/openwiki/.claims/architecture/mobile-ui.json index 944c8fad..db20fcee 100644 --- a/openwiki/.claims/architecture/mobile-ui.json +++ b/openwiki/.claims/architecture/mobile-ui.json @@ -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" } } diff --git a/openwiki/.claims/architecture/module-map.json b/openwiki/.claims/architecture/module-map.json index 3e673f61..8a931c09 100644 --- a/openwiki/.claims/architecture/module-map.json +++ b/openwiki/.claims/architecture/module-map.json @@ -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" } } diff --git a/openwiki/.claims/architecture/native-app-directories.json b/openwiki/.claims/architecture/native-app-directories.json index ac96cbca..1b23852a 100644 --- a/openwiki/.claims/architecture/native-app-directories.json +++ b/openwiki/.claims/architecture/native-app-directories.json @@ -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" } } diff --git a/openwiki/.claims/architecture/platform-runtime.json b/openwiki/.claims/architecture/platform-runtime.json index 9f794aae..ce42143d 100644 --- a/openwiki/.claims/architecture/platform-runtime.json +++ b/openwiki/.claims/architecture/platform-runtime.json @@ -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" } } diff --git a/openwiki/.claims/architecture/supporting-system-directories.json b/openwiki/.claims/architecture/supporting-system-directories.json index 40491e82..bf37e1c8 100644 --- a/openwiki/.claims/architecture/supporting-system-directories.json +++ b/openwiki/.claims/architecture/supporting-system-directories.json @@ -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" } } diff --git a/openwiki/.claims/architecture/system-boundaries.json b/openwiki/.claims/architecture/system-boundaries.json index cb4c6b08..47e7a195 100644 --- a/openwiki/.claims/architecture/system-boundaries.json +++ b/openwiki/.claims/architecture/system-boundaries.json @@ -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" } } diff --git a/openwiki/.claims/concepts/agent-runtime-and-assistant.json b/openwiki/.claims/concepts/agent-runtime-and-assistant.json index c33af32a..49a367ec 100644 --- a/openwiki/.claims/concepts/agent-runtime-and-assistant.json +++ b/openwiki/.claims/concepts/agent-runtime-and-assistant.json @@ -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" } } diff --git a/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json b/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json index 98c1669a..cf0cf79c 100644 --- a/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json +++ b/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json @@ -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" } } diff --git a/openwiki/.claims/concepts/persistence-and-secrets.json b/openwiki/.claims/concepts/persistence-and-secrets.json index 3831d6de..6e509456 100644 --- a/openwiki/.claims/concepts/persistence-and-secrets.json +++ b/openwiki/.claims/concepts/persistence-and-secrets.json @@ -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" } } diff --git a/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json b/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json index 314a9aee..8185c62d 100644 --- a/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json +++ b/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json @@ -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" } } diff --git a/openwiki/.claims/concepts/ui-design-principles.json b/openwiki/.claims/concepts/ui-design-principles.json index 047b53f2..7c4cb6a6 100644 --- a/openwiki/.claims/concepts/ui-design-principles.json +++ b/openwiki/.claims/concepts/ui-design-principles.json @@ -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" } } diff --git a/openwiki/.claims/integrations/mcp-server-and-bridge.json b/openwiki/.claims/integrations/mcp-server-and-bridge.json index 3e083082..2cccfb2c 100644 --- a/openwiki/.claims/integrations/mcp-server-and-bridge.json +++ b/openwiki/.claims/integrations/mcp-server-and-bridge.json @@ -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" } } diff --git a/openwiki/.claims/operations/build-test-and-release.json b/openwiki/.claims/operations/build-test-and-release.json index 4b5ea775..2e055c07 100644 --- a/openwiki/.claims/operations/build-test-and-release.json +++ b/openwiki/.claims/operations/build-test-and-release.json @@ -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" } } diff --git a/openwiki/.claims/operations/storefront-commerce-release.json b/openwiki/.claims/operations/storefront-commerce-release.json index 16ec63b0..88524c74 100644 --- a/openwiki/.claims/operations/storefront-commerce-release.json +++ b/openwiki/.claims/operations/storefront-commerce-release.json @@ -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" } } diff --git a/openwiki/.claims/quickstart.json b/openwiki/.claims/quickstart.json index 1f59b1a5..e1805c5a 100644 --- a/openwiki/.claims/quickstart.json +++ b/openwiki/.claims/quickstart.json @@ -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" } } diff --git a/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json b/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json index d7fcc69e..4803b3af 100644 --- a/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json +++ b/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json @@ -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" } } diff --git a/openwiki/.last-update.json b/openwiki/.last-update.json index d63103f4..420d7b67 100644 --- a/openwiki/.last-update.json +++ b/openwiki/.last-update.json @@ -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" diff --git a/openwiki/.page-manifest.json b/openwiki/.page-manifest.json index c3638c44..0a7d7c79 100644 --- a/openwiki/.page-manifest.json +++ b/openwiki/.page-manifest.json @@ -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" } } } diff --git a/openwiki/architecture/engineering-invariants.md b/openwiki/architecture/engineering-invariants.md index afed5594..3bdcbdaf 100644 --- a/openwiki/architecture/engineering-invariants.md +++ b/openwiki/architecture/engineering-invariants.md @@ -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. diff --git a/openwiki/architecture/mobile-ui.md b/openwiki/architecture/mobile-ui.md index 5e974b23..10561434 100644 --- a/openwiki/architecture/mobile-ui.md +++ b/openwiki/architecture/mobile-ui.md @@ -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. diff --git a/openwiki/architecture/module-map.md b/openwiki/architecture/module-map.md index 8e1afee5..a20f397a 100644 --- a/openwiki/architecture/module-map.md +++ b/openwiki/architecture/module-map.md @@ -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 diff --git a/openwiki/architecture/native-app-directories.md b/openwiki/architecture/native-app-directories.md index 8b26dde1..e1bb5b8a 100644 --- a/openwiki/architecture/native-app-directories.md +++ b/openwiki/architecture/native-app-directories.md @@ -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 diff --git a/openwiki/architecture/platform-runtime.md b/openwiki/architecture/platform-runtime.md index 8eada4e8..92bc9fa2 100644 --- a/openwiki/architecture/platform-runtime.md +++ b/openwiki/architecture/platform-runtime.md @@ -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 diff --git a/openwiki/architecture/supporting-system-directories.md b/openwiki/architecture/supporting-system-directories.md index 9ba12ccf..6fe08092 100644 --- a/openwiki/architecture/supporting-system-directories.md +++ b/openwiki/architecture/supporting-system-directories.md @@ -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. | diff --git a/openwiki/architecture/system-boundaries.md b/openwiki/architecture/system-boundaries.md index c8baf8e3..fa79516a 100644 --- a/openwiki/architecture/system-boundaries.md +++ b/openwiki/architecture/system-boundaries.md @@ -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 diff --git a/openwiki/concepts/agent-runtime-and-assistant.md b/openwiki/concepts/agent-runtime-and-assistant.md index 57e6481a..96bb95de 100644 --- a/openwiki/concepts/agent-runtime-and-assistant.md +++ b/openwiki/concepts/agent-runtime-and-assistant.md @@ -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: diff --git a/openwiki/concepts/commerce-localization-and-product-surfaces.md b/openwiki/concepts/commerce-localization-and-product-surfaces.md index 205f245a..ec181024 100644 --- a/openwiki/concepts/commerce-localization-and-product-surfaces.md +++ b/openwiki/concepts/commerce-localization-and-product-surfaces.md @@ -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. diff --git a/openwiki/concepts/persistence-and-secrets.md b/openwiki/concepts/persistence-and-secrets.md index 9d52e45f..d23895e1 100644 --- a/openwiki/concepts/persistence-and-secrets.md +++ b/openwiki/concepts/persistence-and-secrets.md @@ -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 diff --git a/openwiki/concepts/ssh-multiplexing-and-scheduling.md b/openwiki/concepts/ssh-multiplexing-and-scheduling.md index d9dd5498..99c5f16a 100644 --- a/openwiki/concepts/ssh-multiplexing-and-scheduling.md +++ b/openwiki/concepts/ssh-multiplexing-and-scheduling.md @@ -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. diff --git a/openwiki/concepts/ui-design-principles.md b/openwiki/concepts/ui-design-principles.md index 5c8b976f..45f26f9c 100644 --- a/openwiki/concepts/ui-design-principles.md +++ b/openwiki/concepts/ui-design-principles.md @@ -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 diff --git a/openwiki/integrations/mcp-server-and-bridge.md b/openwiki/integrations/mcp-server-and-bridge.md index 8712f92b..01fac7e9 100644 --- a/openwiki/integrations/mcp-server-and-bridge.md +++ b/openwiki/integrations/mcp-server-and-bridge.md @@ -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/` 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. diff --git a/openwiki/operations/build-test-and-release.md b/openwiki/operations/build-test-and-release.md index d646a2e0..c9d9a51a 100644 --- a/openwiki/operations/build-test-and-release.md +++ b/openwiki/operations/build-test-and-release.md @@ -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 '' -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 diff --git a/openwiki/operations/storefront-commerce-release.md b/openwiki/operations/storefront-commerce-release.md index 91e24790..6502e030 100644 --- a/openwiki/operations/storefront-commerce-release.md +++ b/openwiki/operations/storefront-commerce-release.md @@ -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. diff --git a/openwiki/quickstart.md b/openwiki/quickstart.md index 00701ef8..4c9c4428 100644 --- a/openwiki/quickstart.md +++ b/openwiki/quickstart.md @@ -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. diff --git a/openwiki/testing/behavioral-boundaries-and-fixtures.md b/openwiki/testing/behavioral-boundaries-and-fixtures.md index a558389b..168088fd 100644 --- a/openwiki/testing/behavioral-boundaries-and-fixtures.md +++ b/openwiki/testing/behavioral-boundaries-and-fixtures.md @@ -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