Document module and directory architecture

This commit is contained in:
Kaede Akino committed 2026-09-22 12:07:14 +08:00
1 parent 5c67cb50c0
commit bc1ffb3ac3
59 files changed
+1989 -201

No files matched your search

@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:d3b79d8cc51a720b38f06a1c8dc127782900a85f704bee57b59abaf8bf3f8d30",
"pageVersion": "sha256:bb94da4e49901db707f0db54a47d7303c3a320729b5d4ccdf12b7a2a87a38d4f",
"claims": [
{
"id": "claim_5a53c5a47b7445f7a7b6f8865297a805",
@@ -149,6 +149,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:51:54.212Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:d955bf8ea7e79e305ab97b3b669217079fa7d038ed7599d3ee8210a283b936f8",
"pageVersion": "sha256:f192be66f9909ddee1c5edc73e65579a9e460133180f71507dd445b65724e778",
"claims": [
{
"id": "claim_72f9329a158e418cbf0fd6394f82815e",
@@ -181,6 +181,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:33:04.232Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:a662291087c13d029a1df20ca0146d683e78704cee78016e30152e3701dcfe4c",
"pageVersion": "sha256:ff129fd4d82995b518da4a70a87e87f8f3bf920a0f4425d866ba0f36aa86ec79",
"claims": [
{
"id": "claim_fbb919f62a2d4ab88aafcc4c1186731b",
@@ -195,6 +195,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:51:54.212Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -0,0 +1,126 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:c740751a98fe7565940e6e626722edf984d736c49aba612260c8d8fb2ef94c56",
"claims": [
{
"id": "claim_34230e88036241baad093fb8de5bac8e",
"statement": "The six shared framework targets have explicit inward build dependencies: Application depends on Domain; Persistence and Presentation on Application and Domain; Infrastructure on Persistence, Application and Domain; Remote Infrastructure on Infrastructure, Application and Domain. Both native app targets depend on all six.",
"evidence": [
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
},
{
"id": "claim_2324a55cebbd45be98b1e10c43bd8612",
"statement": "Shared frameworks cannot import either app target, while Domain, Application and Presentation have additional implementation and platform restrictions enforced by ArchitectureBoundaryTests.",
"evidence": [
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L163-L205",
"version": "repo-lines-v1:sha256:6f9d39ddb763be1beb60a35b34cd7d75ce295813b69e1c913dabfa886fb87672:eyJzZWxlY3RlZExpbmVDb3VudCI6NDMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlMDlmOWExMjczZjgzNDQ3YzRiNzFiYmEyN2YwODAzMzcyMTkyZWZlODBiNmMwMmM1MzA4Y2U1YThkOTI4N2QiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ0MzM5NTc5NTQ5OTAyMTEzNTE2MTA2Mzc0OGM4NTM0ODkyODlkOWExYzlmNDIzMGJkMmM5NzliYjU0NjZlNzYifQ"
},
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L70-L122",
"version": "repo-lines-v1:sha256:99e13181818902dd10a0752232d9b88d1202274b2d8bb1f6662e37bd185bcdb5:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZkOTZjN2U3ZTUxOGViZWYxZjQ2ZGJiNmM3OGRmYTM5MjBkZjE3OGE0NmQ1MTQ0MGFjY2YwNjc3ZTE5YjMyMDkiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijg5MjdkODJhMjlhYzUyNjBiY2I0NjJkZjEwYmI2MmQ3ZjUwODg1ZjAwNWVmY2MwMTcyY2Y0ZjRjMDliZjE0MTAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU3MzQyYWI0YTU1NDg5ZmFhZjMxZDM3NTgwY2YzZjI5MmYxZmUwMjI2MzhhMWRkZGQxNzM0YTBiYzZkM2ZhZjAifQ"
}
]
},
{
"id": "claim_21d4af48001440ed87086cb064ff3378",
"statement": "The application targets assemble concrete stores and services; desktop WindowModel owns window-local workspaces and navigation, whereas mobile scene navigation selects app-owned live workspace instances.",
"evidence": [
{
"resource": "repo://TFI/App/MobileAppModel.swift",
"version": "repo-file-v1:sha256:f84584e85c49f80b312450980f1a741b62d7816892c3a0574edf5312e8fa4adc"
},
{
"resource": "repo://TFI/App/MobileSceneModel.swift#L9-L48",
"version": "repo-lines-v1:sha256:c97b3079703d5b843ec181ca74ca90ffdaba21804a82899731ee8a8e6e6fee56:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdlMzBiMWNmYzNlMDdhNWQzNDFjZTY5NjdjZDYzMTI4MWQzYzQwYmYzMWQzNTI1MTM2M2MyNzYxN2NiZmIwMzYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFiNTQ1YzBjNDIzZTliY2M2YjQ2MmYyZDE3MjM1MzA5NzkwNzI5ZDAyNzEwYjIzYWM0MjA1YWUxYjdkYzgzN2EiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNkYTMxMmZlMTU1NzA0MzkzMzRiYzkwMGRiNDQyOTUzNjJmMzg5ZjVjNmVkOGU0MTViODIyYzBmN2YwNDJjNDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZlMzM2NGIwNzc5MDQ0MmMxZjE2NTM1MjJlZDhiMzY1ODcxNDNiZTZlNzEwNDA2ZmZjOTI5ZDZhM2U5ODcyY2IifQ"
},
{
"resource": "repo://TFM/App/TermindApp.swift#L13-L159",
"version": "repo-lines-v1:sha256:4c3e634889e145d4c87210fbe24bbe3604039684abb44ccebb708343b5ac6cd2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQ3LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI1Y2ZiZGJiNTAxNmFjN2RlZWE1NmU4OTBhZTkzYWQ3NzM2NWNiNGQ4YTBkODY4YjJlNmM5YmUzY2MxMWM0NjRkIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI5YTE1YWJkZGFiMDU4NmY2YmMxYjFhYzVmYzdiMGIyYTk3MzM1ZWNjOTYyNTg5ZDc3YThiMGJiMTNkYThmNGQzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI1YTJkYjY2ZjRhNTMyNTc1ZGM1MGZiYzkxY2Y0YmNhOGIxNWQ3ZThkMmJlOWY1Y2MxOGUwNjYyNjU5YzBhNWY4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI0MmMzODZhMWQ3MWExZDc1Nzk2NzM1MWJiMTdiNTU2MWVkMjNkODYwYzc0NjUxODVkZTBmNjliN2ZkZjFlYTViIn0"
},
{
"resource": "repo://TFM/Features/Workspaces/WindowModel.swift#L15-L106",
"version": "repo-lines-v1:sha256:6531d20ce697bdbcd8d29c4d93f1ced4851f4d6bc48e5e9f9d8f0609eaab3034:eyJzZWxlY3RlZExpbmVDb3VudCI6OTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgwOTJkZGExNzNhMjQyOTg1N2E4ZTE0NjQzODVlOTU3MDFjZTM5MDU5ZDFhYzhjNGIwYjMzY2RhMmE1ZWEyMDQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjkyYzE3ZTc4YTkyNDNkYmFhZWY3ZDczZDdlMTZjYTc5YmFlMjNlOTlkNDE4ZjE2NTAwZTgwZjYyNmNmMzMzYzEifQ"
}
]
},
{
"id": "claim_caa2ceec25e74113b09ace71e14dff97",
"statement": "The MCP bridge is a separate authenticated stdio-to-HTTP executable, the widget renders ActivityKit workspace summaries, and the forwarding benchmark is a standalone shared-framework consumer rather than app/test-host logic.",
"evidence": [
{
"resource": "repo://Benchmarks/PortForwarding/main.swift#L1-L21",
"version": "repo-lines-v1:sha256:e3ddb6b1bcb7563b63da531f216d3acb8837d52222548b173b661a217a6ab01c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE1OGEyZDdmYzIzNTUyOWMzYWJiMjVmNmUzZDA4N2I2NGE1YmJkMGRkZTU5OTgxMTMzNGU3NDkzNTAyMmQxMzYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc4OTJkZmZiOTYyYjg1NzE3MGE5ZGYwMDIwYzJlNWZmMTY0MzE0NDk3YzI4ZjBmZWU3NDQ5ZGJmZGNmZGRlMDcifQ"
},
{
"resource": "repo://TFIWidgets/WorkspaceLiveActivity.swift#L6-L52",
"version": "repo-lines-v1:sha256:cd3c4ccacb8be12c499b6aba3117a2c5233ef2beb1ce0a7f5bb96a1742d9c690:eyJzZWxlY3RlZExpbmVDb3VudCI6NDcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVjZmJkYmI1MDE2YWM3ZGVlYTU2ZTg5MGFlOTNhZDc3MzY1Y2I0ZDhhMGQ4NjhiMmU2YzliZTNjYzExYzQ2NGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRmODhlNjc1Yzg4M2QwZTJiNWU2ZTkzMmNkNjU1NDVhMGVlOTU3MzJjODk2ZmZjZjBjMGMzYTRhMzIzMDk0Y2UiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImFiZjQxNGZiMjQ2NmU1MmIzYzA1N2M1NjUyZmVkZmVmYjljYjYyYWVmMzJiZmRlMWU4NjkyODkxYTU3NTdkOGQifQ"
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
},
{
"resource": "repo://TermindMCPBridge/main.swift#L4-L87",
"version": "repo-lines-v1:sha256:ecccf30acbd284a663e31c1aa7f40e224b2264fb038003a81dceaa30c6449866:eyJzZWxlY3RlZExpbmVDb3VudCI6ODQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVjZmJkYmI1MDE2YWM3ZGVlYTU2ZTg5MGFlOTNhZDc3MzY1Y2I0ZDhhMGQ4NjhiMmU2YzliZTNjYzExYzQ2NGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE3M2Y1YTY5MGEwZjAwODY0Y2RmNDU3MjY3OTAxZjNkNzg5ZmRjYzgwNzQ5NzlmNWUzMDQ2ODVlMjFiMzNlNTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE0ODcxYWY5NDg1Yzg3ZThjMGM0ZGNhN2IyYTI3MThiOWY5YTJmN2QxM2RlYWM1Y2MyYTY5YzgyNWVhY2ViZmQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgifQ"
},
{
"resource": "repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift#L4-L41",
"version": "repo-lines-v1:sha256:b23f58dadcdfc0f02ca591368dc6b9ab3c6792391da006474389c3dc4df14cab:eyJzZWxlY3RlZExpbmVDb3VudCI6MzgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc0MzJiYWQ2MmU2M2RlM2Q2MmI4NmZjMGYwZGI3OTk2ODAwNzdhOTgxMTc1MmUzYTYzNWE1NDZjMjY2NTY3MjIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRhNWU1NDIyN2I4NTBjMGQ1MzE2ZDcwMDBkMDkxNDEyMTMwNzI1YjU2ZWQxZjk5MjlkNDhjZTIwZWE2NDU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFiZWNmMmM1YzNiMzhlM2IwOThjM2JmYjk2MjhkODdiYmQxMDQ1MGM5M2U4ZWFhMGE5YmUzNGZiZGY3MjUwYmYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgifQ"
}
]
},
{
"id": "claim_3838ae44b04f4f94b54d6354e7287a49",
"statement": "AgentKit has a reference submodule checkout but Xcode declares a versioned remote package; Termind registers host-specific SSH/SFTP tools on its side of the host-neutral runtime boundary.",
"evidence": [
{
"resource": "repo://.gitmodules",
"version": "repo-file-v1:sha256:d44aba833f5460dbae6fe83e58327069b8ca0528c32f0bd299bf7d56e1acb99c"
},
{
"resource": "repo://AGENTS.md#L16-L18",
"version": "repo-lines-v1:sha256:79d9222951afd1cde2967f4987b4aa7b4347f1510f1fc4d1141010690b9c8bff:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOGI2ZWFiNGFjNWIwNmRiMjY5NmQ0ZDUzZTJlN2YwZDE3MzhmMWI3NTAyY2UyZWY1YjcwMzIzZjg3NjdjYTllNiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZGRkZTk1MTMwNGUxYWVlNjRiM2IyYmY3NWZkMzI2YjAyZGM0OTE5YjlhODM4MGZjZTY1YTAyY2VjOTE3MzdjMiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiYWM1NjRmZjMwNzY2N2QwZTgzMGJkYjkxYmY1MDYwY2FlODNhMjc2NzRkNTU5NWNiYTU0ZGMwNmQzNmE2NWMzYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMTVkOTdmMmUwNzM5MTAzZjc1MTA1MjljNjA1Zjg0OTIzMTdkNDJmNDA5NzEwNGFmMmRkMjBiOGUyNmZhMmNmNyJ9"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/TermindAgentTools.swift#L5-L68",
"version": "repo-lines-v1:sha256:b37728d2b6eed175b24a9d2761439467c6455e58de8c995e99c80bcdd740c58f:eyJzZWxlY3RlZExpbmVDb3VudCI6NjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM2NTgzYWUxYWM2NTU4YTlmNGQ0MTYyYzcxZDJjMTk4OTE3OWI2MDljYWE0MDg0OTMzYjZlY2E5YWEzYWU1ZDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjgzMDBjMjE3MTcwZWFmOGZmOGRmMTgyYzc0Y2FkZDY2YjQ0NWFiOTZiYTVmY2YzOWYyZGE0MjM3YzdmYTA3ZDYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImM0NmY4Y2RkMDA0NDk4MWZkNzI0N2EwYzg5MzE2ODM0ZDNlZGFjOWU1MTAwNThkNGMwNGNhM2RkODczYzFhYTYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImQxOGJkYjA3YzQ1MDc0ZDQ1OGM1ZTE2N2I2YmNiYzNkNDQ3M2E1NzNlZTExYzQyMzI0NjBjMmIyODZmNmRiNDgifQ"
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
},
{
"id": "claim_8a0a58443efc4ec8ac181749aa968477",
"statement": "Cross-feature responsibility is split among Application policy, concrete shared adapters, Persistence stores and native owners: remote files use a filesystem port plus a transfer coordinator; Assistant execution uses an injected tool-registry factory; Vault sync uses persistence journals; speech uses an injected native audio input.",
"evidence": [
{
"resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L6-L44",
"version": "repo-lines-v1:sha256:c45de1cccebc1889e8de88bb9520e33aeaba05e6c2c8faa7876eba2acb7f3493:eyJzZWxlY3RlZExpbmVDb3VudCI6MzksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA3YzgyYWM5Yzk2MGJhNjIyNDBlYWZkZDE0ZTY2NTI1NjQ2MTMzOTE5NjU2MzNiODhlMWIwNjk5MjY2MGI2NTEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFhZDFiYmYwZjdkYWQyYTAyNGQxMzBmZjQzOWQ5M2Y0ODZhZDQwMmQ5Y2U5N2Q3ZDVhMDZhYTUxNjFlMmIyZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI4MjgyYmRhZjE5OTYzODdkODg5MzczMjM0Njc1ZjQ2YTI5N2UxN2RhZjAxMGJjMWI5OGMzNjA0Zjk5OGEwNDMifQ"
},
{
"resource": "repo://Frameworks/TermindApplication/Transfers/RemoteFileSystem.swift#L4-L14",
"version": "repo-lines-v1:sha256:ce92958f184f7427126be5f0045c85a121a0317b2bcd2c60fe14cd86865a6729:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA4MjFjYzM3NDQ0NmVjYzg1NGM1ZjEzZGQ2MjI2YTk3YzI1NGJhOWJjOGM2YTY2MzE3YWQ4ZTgxODI5N2FkODkiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImE1OGQ0YTkxMDc0MDU5ZjBjOGQyMTM2ZjliZjgwODM0NjE0OGZjOGNmYjM1NDNkZGNiYzc1MGU3NTc2ZTcyNjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA3NDk0Mzc2NWVlNTY3ZGY4Zjk2MjA3OTkwNzBhY2ViNjVmYmRmNDdjMDA4OGZkMTUzNTBlNGRhNzAzNDY4YWYifQ"
},
{
"resource": "repo://Frameworks/TermindInfrastructure/Cloud/VaultSyncCoordinator.swift#L7-L62",
"version": "repo-lines-v1:sha256:fc034f6f2bbd33b6ba610a823bc3bee643f198b20401f96a82f0cda5e6f7e1a5:eyJzZWxlY3RlZExpbmVDb3VudCI6NTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjViN2UyZjcwMjk4NGM5OTNlNzcwOGRlZmJlYmE3N2VkNDUwOTJiNGE1M2UwZmQzYjRjNDMyOTE3ZDc5ZTcwYWIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY0ODdhNjEwMjAzMTE4NmJmNzcxYzA2YjAxMGQ4NWZiZGUyZGVlNzFkOTA5YmVkZDM2OTUwMTc5ZDM1NWM4NjgifQ"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferCoordinator.swift#L78-L130",
"version": "repo-lines-v1:sha256:e40e7d35b50b70b7b5c4f18fb5197a6ef3ce99dc496bcd4f962b9267320b4431:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNhNjJhYTkyN2M1ZmY1YzlmNjk0ZDJlNGJjZWFmODVmNTg3MDUyMjkxODYzNjJkNWU1MzFjZDRmY2JlZDkwNGIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAzZjljZGY2MTc5ZWZmZjc5OThlZWJkNDhmNzRlYTJhYmU2OTA2YjM5MmFiMzljYmMyMjVhOWRhMmFkMzVkZmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZmYTUyMmViMzUwNWYwNjhiNTJkZjYxNTVmZmE5OGMzZDA0YzE1MzhjMWUxZWNiNmUyMzIzMDZhMjZiY2FiNTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZiZTdlYjA0YjEyNzE1YzZjYzlmNDFjNzk1M2ZhMzRmNjM1NjM0ZGJmZWE0OTU1ZWEwN2I5ZjM4NTVlNjRkYWYifQ"
}
]
}
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -0,0 +1,218 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:b80a3e4c39b80b3b1b701983db69b57bc48fa869ab0b4e6b6955c7150766f692",
"claims": [
{
"id": "claim_8e9cf2adb50847f98fcd4516cb0ed521",
"statement": "TFM App assembles app-wide services and per-window composition; WindowModel owns workspace and UI state, while TFI uses app-owned workspace runtimes and scene-local navigation and presentation.",
"evidence": [
{
"resource": "repo://TFI/App/MobileSceneModel.swift#L9-L48",
"version": "repo-lines-v1:sha256:c97b3079703d5b843ec181ca74ca90ffdaba21804a82899731ee8a8e6e6fee56:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdlMzBiMWNmYzNlMDdhNWQzNDFjZTY5NjdjZDYzMTI4MWQzYzQwYmYzMWQzNTI1MTM2M2MyNzYxN2NiZmIwMzYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFiNTQ1YzBjNDIzZTliY2M2YjQ2MmYyZDE3MjM1MzA5NzkwNzI5ZDAyNzEwYjIzYWM0MjA1YWUxYjdkYzgzN2EiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNkYTMxMmZlMTU1NzA0MzkzMzRiYzkwMGRiNDQyOTUzNjJmMzg5ZjVjNmVkOGU0MTViODIyYzBmN2YwNDJjNDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZlMzM2NGIwNzc5MDQ0MmMxZjE2NTM1MjJlZDhiMzY1ODcxNDNiZTZlNzEwNDA2ZmZjOTI5ZDZhM2U5ODcyY2IifQ"
},
{
"resource": "repo://TFI/Features/Workspaces/MobileWorkspace.swift#L48-L150",
"version": "repo-lines-v1:sha256:16fc9803a6aac8d551214f3531c532b699e4560a0f7fd9a4b8eeee7d1d463168:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAzLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI2OTZhYmUwMDhjNjk0NGIwYTMyYmU3MmQzNmNmZjIzZDA3NDJhNDAxMDAyM2NiODZhYTY2MDYwMTBhZjFjNzZkIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI5MGIxYjkzYTJlYTViNmUxZjBlOTFkNDAxMTI4NjRkMjVhMjZjNGRlMzAzZmY4MDk5YzVmOGI5MzY4NDg4N2Y2IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI2YzRmNjFkNGFhMzc5MTE0OGE1MjRmZjcwNmFhOWE4NjI0MDA2ZDRjYTEyM2VjNzVlOGI0Mzk0ZWJmZGI3YTllIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIyZWI5MTIzYmRmYTY5N2RhODdlMWUzYzRlY2Q3OGEzMjQ2ODA3MzM3MjVhZjQyMDMwYWExOWZkMWJkMzhmNDIyIn0"
},
{
"resource": "repo://TFM/App/TermindApp.swift#L13-L159",
"version": "repo-lines-v1:sha256:4c3e634889e145d4c87210fbe24bbe3604039684abb44ccebb708343b5ac6cd2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQ3LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI1Y2ZiZGJiNTAxNmFjN2RlZWE1NmU4OTBhZTkzYWQ3NzM2NWNiNGQ4YTBkODY4YjJlNmM5YmUzY2MxMWM0NjRkIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI5YTE1YWJkZGFiMDU4NmY2YmMxYjFhYzVmYzdiMGIyYTk3MzM1ZWNjOTYyNTg5ZDc3YThiMGJiMTNkYThmNGQzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI1YTJkYjY2ZjRhNTMyNTc1ZGM1MGZiYzkxY2Y0YmNhOGIxNWQ3ZThkMmJlOWY1Y2MxOGUwNjYyNjU5YzBhNWY4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI0MmMzODZhMWQ3MWExZDc1Nzk2NzM1MWJiMTdiNTU2MWVkMjNkODYwYzc0NjUxODVkZTBmNjliN2ZkZjFlYTViIn0"
},
{
"resource": "repo://TFM/Features/Workspaces/WindowModel.swift#L15-L106",
"version": "repo-lines-v1:sha256:6531d20ce697bdbcd8d29c4d93f1ced4851f4d6bc48e5e9f9d8f0609eaab3034:eyJzZWxlY3RlZExpbmVDb3VudCI6OTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgwOTJkZGExNzNhMjQyOTg1N2E4ZTE0NjQzODVlOTU3MDFjZTM5MDU5ZDFhYzhjNGIwYjMzY2RhMmE1ZWEyMDQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjkyYzE3ZTc4YTkyNDNkYmFhZWY3ZDczZDdlMTZjYTc5YmFlMjNlOTlkNDE4ZjE2NTAwZTgwZjYyNmNmMzMzYzEifQ"
}
]
},
{
"id": "claim_b243e53015154ed1b22bf60930c55bec",
"statement": "Platform-local Application directories contain injected service/use-case state rather than native UI or persistence implementations, and architecture tests reject forbidden imports and concrete construction in those layers and feature code.",
"evidence": [
{
"resource": "repo://TFI/Application/Connections/MobileWorkspaceConnectionServices.swift",
"version": "repo-file-v1:sha256:ef59c5a0c8f3a85f06ebc889641b86f279388044be2140e86615e2e10a1ab9da"
},
{
"resource": "repo://TFM/Application/Repositories/ToolAuditRepository.swift",
"version": "repo-file-v1:sha256:e8f3fef7528eb405bc5537e5fbd89a90bec0304e9be075419b3b916d6ad85147"
},
{
"resource": "repo://TFM/Application/Serial/SerialPortService.swift",
"version": "repo-file-v1:sha256:a46f15942b08e733481d2b315d7810a198229852bb0213dcb56dfd0ce3870c7a"
},
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L70-L122",
"version": "repo-lines-v1:sha256:99e13181818902dd10a0752232d9b88d1202274b2d8bb1f6662e37bd185bcdb5:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZkOTZjN2U3ZTUxOGViZWYxZjQ2ZGJiNmM3OGRmYTM5MjBkZjE3OGE0NmQ1MTQ0MGFjY2YwNjc3ZTE5YjMyMDkiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijg5MjdkODJhMjlhYzUyNjBiY2I0NjJkZjEwYmI2MmQ3ZjUwODg1ZjAwNWVmY2MwMTcyY2Y0ZjRjMDliZjE0MTAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU3MzQyYWI0YTU1NDg5ZmFhZjMxZDM3NTgwY2YzZjI5MmYxZmUwMjI2MzhhMWRkZGQxNzM0YTBiYzZkM2ZhZjAifQ"
}
]
},
{
"id": "claim_8c04cae50be94dda8149c4fdb00c193a",
"statement": "The desktop MCP application directory implements external tool and transfer operations, whereas desktop Infrastructure separates loopback HTTP transport, MCP protocol/session handling, and token storage.",
"evidence": [
{
"resource": "repo://TFM/Application/MCPServer/MCPDownloadCoordinator.swift",
"version": "repo-file-v1:sha256:e5ffbb3acd1e863e6146f4f5c23e244fa9d028254f02f1358d6fcc0b8664e5e8"
},
{
"resource": "repo://TFM/Application/MCPServer/MCPServerTools.swift",
"version": "repo-file-v1:sha256:ad52ce8d73955e9220c24a05db6827b45359c2de46b59d5f315f733354bfc0fd"
},
{
"resource": "repo://TFM/Application/MCPServer/MCPUploadCoordinator.swift",
"version": "repo-file-v1:sha256:303d0a53d1bfa67f4ce602a193bc9c1e917b9f2075f5654acf19e9166dee9f1f"
},
{
"resource": "repo://TFM/Infrastructure/MCP/MCPServerSession.swift",
"version": "repo-file-v1:sha256:9757ec7e8d8f430cd49b5d95587dc362883d16d7fceaa12efda1036e25865b92"
},
{
"resource": "repo://TFM/Infrastructure/Networking/LoopbackHTTPServer.swift",
"version": "repo-file-v1:sha256:5a91a4b29083f71858834b4b1adee9fb64551de704e850ebe8026926ff9a6b9b"
},
{
"resource": "repo://TFM/Infrastructure/Security/MCPServerTokenStore.swift",
"version": "repo-file-v1:sha256:c9e2fd8b5799e2600c1579b442843811d577872115102655a406fced6468a6e7"
}
]
},
{
"id": "claim_6b4de7c02678451e9e7111a06cbf0cf5",
"statement": "Desktop Database contains adapters over Persistence-owned entities rather than a second schema; mobile Infrastructure stores connection-intent descriptors, excludes credentials and live state, and preserves unreadable snapshots.",
"evidence": [
{
"resource": "repo://TFI/Infrastructure/MobileWorkspaceStore.swift",
"version": "repo-file-v1:sha256:da11b540bc3069f5ec53bf886c288e3e1af1271b0812cdd05e35efc408d9d9d8"
},
{
"resource": "repo://TFM/Infrastructure/Database/SwiftDataToolAuditRepository.swift#L8-L39",
"version": "repo-lines-v1:sha256:38b8970feee35b8cbaae0f8b45bc929123bede6525aa60b92af877931f846081:eyJzZWxlY3RlZExpbmVDb3VudCI6MzIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ0NzUxNDBlMjZlOWM1YTE3MTFkNjQ0NWExOGI3ZjRhZTIwMjJmOTkzZWY2Mjg0MDc1NTQzMDFiOTZlMGRjMjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZjYTIwNzI5YzQ2YjVhYTQ3ODI2MTBkYjZhYmFmYTg2ZWRjNmNmNzdiNmM2NDA5MmFmYmEwOWJlNTdlODE2ZDEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNkYTMxMmZlMTU1NzA0MzkzMzRiYzkwMGRiNDQyOTUzNjJmMzg5ZjVjNmVkOGU0MTViODIyYzBmN2YwNDJjNDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkNDdhZjBlMDg4MzA4MmQ1N2JkNzAzMzMyZDU4ZjNjZjBiMGQ5ZmY0M2VjOGMyNGEyOWU4MzNlYTZlOTJhY2MifQ"
},
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L191-L205",
"version": "repo-lines-v1:sha256:c4ec94e716e4cb8b2c13ee93ce7d370e5a3800eae469b89cf13c6870f5fcc45a:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlMDlmOWExMjczZjgzNDQ3YzRiNzFiYmEyN2YwODAzMzcyMTkyZWZlODBiNmMwMmM1MzA4Y2U1YThkOTI4N2QiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImM5YjJkYjM3YThjY2FiMDIzMTkyOGUwZGY0MzcxOTc3ZWQzYzQwNzBkYTlkMDUwMjEzMzQyYmMwMmQyOGE0YWYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ0MzM5NTc5NTQ5OTAyMTEzNTE2MTA2Mzc0OGM4NTM0ODkyODlkOWExYzlmNDIzMGJkMmM5NzliYjU0NjZlNzYifQ"
}
]
},
{
"id": "claim_47ab74e25220443cb1c247d02f57045f",
"statement": "AI feature directories provide conversation components while Assistant directories compose Assistant navigation; Shell directories define app navigation rather than remote shell execution, and desktop Terminal versus mobile Workspaces retain different native runtime owners.",
"evidence": [
{
"resource": "repo://TFI/Features/Assistant/MobileAssistantView.swift",
"version": "repo-file-v1:sha256:0fddf4b52985fd4751bd49999edac5564d870aa83581e8310b97abc769036c7b"
},
{
"resource": "repo://TFI/Features/Shell/MobileNavigation.swift",
"version": "repo-file-v1:sha256:3990f0736d3218c6b7720fae9650f413d8472178d755dfabb69321df8c5bf4d1"
},
{
"resource": "repo://TFI/Features/Workspaces/MobileWorkspace.swift#L48-L150",
"version": "repo-lines-v1:sha256:16fc9803a6aac8d551214f3531c532b699e4560a0f7fd9a4b8eeee7d1d463168:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAzLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI2OTZhYmUwMDhjNjk0NGIwYTMyYmU3MmQzNmNmZjIzZDA3NDJhNDAxMDAyM2NiODZhYTY2MDYwMTBhZjFjNzZkIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI5MGIxYjkzYTJlYTViNmUxZjBlOTFkNDAxMTI4NjRkMjVhMjZjNGRlMzAzZmY4MDk5YzVmOGI5MzY4NDg4N2Y2IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI2YzRmNjFkNGFhMzc5MTE0OGE1MjRmZjcwNmFhOWE4NjI0MDA2ZDRjYTEyM2VjNzVlOGI0Mzk0ZWJmZGI3YTllIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIyZWI5MTIzYmRmYTY5N2RhODdlMWUzYzRlY2Q3OGEzMjQ2ODA3MzM3MjVhZjQyMDMwYWExOWZkMWJkMzhmNDIyIn0"
},
{
"resource": "repo://TFM/Features/Assistant/AssistantView.swift",
"version": "repo-file-v1:sha256:f6683637b8bfb3975c568b706682d4f07f99fb65cdb432a8fad1e2b53e227ef8"
},
{
"resource": "repo://TFM/Features/Shell/WindowRoute.swift",
"version": "repo-file-v1:sha256:e765b000ace38183f77e6d39a59079a4761888b80f90baa15798d27fe5e42a6e"
},
{
"resource": "repo://TFM/Features/Terminal/SSHSessionModel.swift",
"version": "repo-file-v1:sha256:f601f3a81dc8abdf43f67679854b7e601d9946cdd7bc06628f798c83a0da4d9f"
}
]
},
{
"id": "claim_ef5c4d1ae387422d944639d480f8013b",
"statement": "Native UI helpers separate reusable interaction from resource-specific operations: desktop managed cards receive selection/reordering capabilities, while mobile DesignSystem computes safe continuous or split content regions without becoming a session owner.",
"evidence": [
{
"resource": "repo://TFI/DesignSystem/MobileContentRegions.swift#L3-L99",
"version": "repo-lines-v1:sha256:098a90937f58a9a65e356b206a415202dff793579f410fd39dda027b5208d8f5:eyJzZWxlY3RlZExpbmVDb3VudCI6OTcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFlYmYxODcwYWIyY2FlYjYyNWVhNzhjNzYyMzExYTA2MzJiZmRiMzNmZDBlNzIzOWMxYTRlMDcwMzM1NDUyNjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjljMzMxYTMyZmRmNWU0NjZmYjlmNjhiYzA2NjcxMDM3ZWRlYzk2M2YyYmYyMGNhZmM4ZTQ5ZGQ3OGExMjhiNGEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjoyLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjM1OTY1ZmU4Zjg5ZDU0OWU2YTkxY2Y5YjIxMGRjNTcwOGEwZDg1OTE5MWI5OTQyNmY5YTBjMzBkYzVkNmU5ZmMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImQ3YmFhZDk5ZjI2OTBiODBlYmJhMGM1Zjc2Y2U4NjQ0OTI5NjhiNWRjOTYyYzlhYWM0ZmE5MTMwNmY1ZmVhM2UifQ"
},
{
"resource": "repo://TFI/Platform/MobileTerminalSurface.swift",
"version": "repo-file-v1:sha256:65daa3f685db120e61b593978ae57dec6feba8b15fb429f93922adb112ea3b08"
},
{
"resource": "repo://TFM/UI/Managed/ManagedCardPage.swift#L6-L64",
"version": "repo-lines-v1:sha256:50519dba5824748290013520351ca42cda77c594bb9fb98b9219a556ed057668:eyJzZWxlY3RlZExpbmVDb3VudCI6NTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjYzZDliMTBiNTMwNTAyODEzYzUwZGEyZTAwM2M1YWMzYWYyN2RmOTQwNGRmYTQ3ZmU4YzUwMWUzMmNiNGEyZTEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4ODFmYzEzN2IyMjE5YTdiNzZlNzdiY2U4NGMzNjIzMDA0OTNjYjM5MjBmZmYzMWNjMGNjZDQ0NDY2MjZlMWMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg2NTNmMTNlYWZhYjdjODdjZTFhY2ZiMGQwNTMzN2M5ZmY0NjEyYmMxMDVmZTk1NjRmNWVjODBmZjg3NWI5ZWEifQ"
}
]
},
{
"id": "claim_93d1823292234666a2e4ce42906b2126",
"statement": "Vault composes specialized native resource-management surfaces, while Settings assembles multiple independently owned settings capabilities and SFTP browser presentation is separate from process-level transfer coordination.",
"evidence": [
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferCoordinator.swift#L78-L130",
"version": "repo-lines-v1:sha256:e40e7d35b50b70b7b5c4f18fb5197a6ef3ce99dc496bcd4f962b9267320b4431:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNhNjJhYTkyN2M1ZmY1YzlmNjk0ZDJlNGJjZWFmODVmNTg3MDUyMjkxODYzNjJkNWU1MzFjZDRmY2JlZDkwNGIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAzZjljZGY2MTc5ZWZmZjc5OThlZWJkNDhmNzRlYTJhYmU2OTA2YjM5MmFiMzljYmMyMjVhOWRhMmFkMzVkZmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZmYTUyMmViMzUwNWYwNjhiNTJkZjYxNTVmZmE5OGMzZDA0YzE1MzhjMWUxZWNiNmUyMzIzMDZhMjZiY2FiNTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZiZTdlYjA0YjEyNzE1YzZjYzlmNDFjNzk1M2ZhMzRmNjM1NjM0ZGJmZWE0OTU1ZWEwN2I5ZjM4NTVlNjRkYWYifQ"
},
{
"resource": "repo://TFI/Application/Transfers/MobileSFTPChannelModel.swift",
"version": "repo-file-v1:sha256:0f50cc24589a84f8948d4f22d5b0c4b89f83968249c1048da9706dbfab71ae18"
},
{
"resource": "repo://TFI/Features/Settings/MobileSettingsView.swift",
"version": "repo-file-v1:sha256:657a98d0add321476c81dfed4ac37ece39a7a4131be136aff838df209ec83535"
},
{
"resource": "repo://TFI/Features/Vault/MobileVaultView.swift",
"version": "repo-file-v1:sha256:dac393fd064055573a5cd6e8334601c2cd92c14b889cc30b8951c31f4220ea30"
},
{
"resource": "repo://TFM/Features/SFTP/SFTPChannelModel.swift",
"version": "repo-file-v1:sha256:8f11ae81ad99513aad7fe243161e146ab2cd353ea71e3d1f9028378d3d3ec3bb"
},
{
"resource": "repo://TFM/Features/Settings/SettingsPageView.swift",
"version": "repo-file-v1:sha256:eae627b1a3f2bbc042c018d93d8e936e898ed6bef0729083bd6b713458744ab4"
},
{
"resource": "repo://TFM/Features/Vault/VaultView.swift",
"version": "repo-file-v1:sha256:a99d7529670af1e186dbf3e38f4f086d81df0a44a87d3c36ff6bfe1476036c94"
}
]
},
{
"id": "claim_87d944e250ee4a1e9775c79a37516101",
"statement": "Platform folders implement native OS integrations, including desktop window/menu-bar/file and audio services and mobile background, Live Activity, document, camera and terminal services; app resource groups retain platform-specific icons.",
"evidence": [
{
"resource": "repo://TFI/Platform/MobileBackgroundController.swift",
"version": "repo-file-v1:sha256:0fbc54522867c50f4c6ddff1294d936dd65a21acf6dbdec239bb78866166e525"
},
{
"resource": "repo://TFI/Platform/MobileLiveActivityController.swift",
"version": "repo-file-v1:sha256:f10587ec652f59536cc9e3051ea887a94999182c3dfc5e3d8852b8f442671a2a"
},
{
"resource": "repo://TFI/Platform/MobileSFTPOpenWithPresenter.swift",
"version": "repo-file-v1:sha256:a3dc3b210daa21ecc935650566c71756cc18aa99617985a616a785350f7ce990"
},
{
"resource": "repo://TFM/Platform/MacOSSpeechAudioInput.swift",
"version": "repo-file-v1:sha256:e77368e3fdb1387401739cbe782c56dba7843705cb950e968598e01c413ddfd3"
},
{
"resource": "repo://TFM/Platform/MainWindowCoordinator.swift",
"version": "repo-file-v1:sha256:5225124cc24e1d8c5858385ce4e7d8c924938fdd6ea6102f195f98ebdd98e40c"
},
{
"resource": "repo://TFM/Platform/MetricsMenuBarController.swift",
"version": "repo-file-v1:sha256:1f536944f2c03fb2c2814441e0f6476e0dcd806b21a0f7a8273ddd2f79317b0f"
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
}
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T03:45:03.442Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:714b4eca157c6f95f4ef0792e6f173f13d9134413253216b19e74bc1fad3e833",
"pageVersion": "sha256:bfdbf08838e9b40f4ef1ada0196cdae85e92b080be2cb4d313613cb70bf05086",
"claims": [
{
"id": "claim_bd9f5ddda6b6466eb79c622b02fd73f2",
@@ -20,7 +20,7 @@
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:2a2bcccf7f6514fee0573fdd868c54bd98fa151a69e0eb4ae45f9b09fa2f956b"
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
},
@@ -233,6 +233,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:51:54.212Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -0,0 +1,258 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:d1599e833448b20031493f69c8c932476f7baf92aa01314913874144abcbae24",
"claims": [
{
"id": "claim_6e30bc8cde134c23815d274543d0786c",
"statement": "Domain directories hold portable records and rules for hosts, credentials, connections, sessions, transfers, shell commands, sync and templates rather than live transports or concrete storage, and forbidden imports are checked by ArchitectureBoundaryTests.",
"evidence": [
{
"resource": "repo://Frameworks/TermindDomain/Credentials/Identity.swift",
"version": "repo-file-v1:sha256:48c8c56526f0623938b4509df03fe907e1e2e3066ada5be644b2f752136cdb13"
},
{
"resource": "repo://Frameworks/TermindDomain/Hosts/Host.swift",
"version": "repo-file-v1:sha256:98a984b1d0adac4987eed0397fed2ec13c97a8cabffd1af4962729391cfcff6e"
},
{
"resource": "repo://Frameworks/TermindDomain/Shell/CommandRiskEngine.swift",
"version": "repo-file-v1:sha256:9a0c652e044686cf640298be1a540d481365619f68082dc61e07e3a1550c5396"
},
{
"resource": "repo://Frameworks/TermindDomain/Transfers/SFTPTransfer.swift",
"version": "repo-file-v1:sha256:429494882181f1e24f40b546dea9b663bc60bd7902615cb6f92c25558092fea2"
},
{
"resource": "repo://Frameworks/TermindDomain/Workspaces/WorkspaceTemplate.swift",
"version": "repo-file-v1:sha256:f8f290109abf9bc7dfdd8ac83e5364a21c6e3af84d925f17d4a34c6e9640f2ee"
},
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L80-L90",
"version": "repo-lines-v1:sha256:a70e1a96a99859ec9b7f3e1565cbbb3bdcf6991b3d966bd5ffd2c694de8b1225:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc5YzFiMjZiYzE3ODkyMDBjMGY1MmVlMjhhM2IyZjkzNTRjNWY5YWNhZWUyYzM4NGExNWUyN2FiYmM3NjYwYzgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNjNTgwYmEwNmVkMzJhOGFhYWJlYWVkNmM5NTgzYTBlMWU3ODllY2QzOGYxMzlmNjcyYWMzMGQ5ZTExNzEzOGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJmMmRmOWFkMzQwYjRjNzdlZWE0ODZkNGI4MGJkZWUwNDYwNjQ2ODgzMmVlMDc5NjJkOTRiYzA4YjA1NzRhMmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU3ZWFjNmUzNGY1Nzg0NTJlMzc5YWU4NTgxMjdmMzJjNDQwZTk4MjVjYTM0N2ZiMDAxZTZiMDJjZWNhY2IxMjgifQ"
}
]
},
{
"id": "claim_b0f4b9a91a374bf5840d021723955410",
"statement": "Application owns portable use-case and feature state, including broad HostLibraryModel projections, connection journey/trust/retry coordination, and remote-filesystem and repository ports instead of concrete storage and transports.",
"evidence": [
{
"resource": "repo://Frameworks/TermindApplication/Connections/RemoteSessionConnectionController.swift#L101-L179",
"version": "repo-lines-v1:sha256:533ca74e852fad806712c7bbfa14a245975770751697182a16e72cb80eabaa5b:eyJzZWxlY3RlZExpbmVDb3VudCI6NzksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImE1NWU3MzgwNTBkYTA4Y2YyMTc2ZTk2ZTljMTY3OWVlYTJkN2JkM2FmMTY4OTY2YmZhYWQ0ZWYwZWI0MDRiYjIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhlZjgwMTAyNmM3NTkzM2I1NTdhZGYyYzNiZGRiNmVkYjg1Y2Y3MWMwZTcwYTczYTU5OTBmNjA0MzBjMzhjNjQifQ"
},
{
"resource": "repo://Frameworks/TermindApplication/FeatureModels/HostLibraryModel.swift#L7-L58",
"version": "repo-lines-v1:sha256:00b21bada37700f2f5d9ce78816cc1ed89498d6ecb0ea0a9a11016a3f8465358:eyJzZWxlY3RlZExpbmVDb3VudCI6NTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjI5MjlmNGU2OTQ5Y2I4MDA4NjM5YjNjYjkzM2UwNWVmZjRkZWMxNjZhNjdjZDBkOGVjMWVlOGRmYjQzYTQ2YmEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjM0ZjI4MTVkYTkyMmViNWViYTAxNTcxYmViZTlhOTI3ZjM0NDMxODYyMjA0NDYwMDU5MzA0NzdmYTdiYmI2ODgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUyNDU3YzEzMDE3YjZmZjJkZmI0ZTE1ODFlMGU1MWVjYzNkZGEzNGI1YzEzYjlmM2NiMDM0NTg1Y2FmMzIzNjQifQ"
},
{
"resource": "repo://Frameworks/TermindApplication/Repositories/VaultStore.swift",
"version": "repo-file-v1:sha256:d8bb004dde7b76449c9eb658f138263fdb6ae45dcc161b1a5a0c73bc12d3d92f"
},
{
"resource": "repo://Frameworks/TermindApplication/Transfers/RemoteFileSystem.swift",
"version": "repo-file-v1:sha256:b3b3059070319461a5def85944e803948e907b87ff3c749fc83ba24e184afe0e"
}
]
},
{
"id": "claim_669c4efa77b1457a9e7a8c398bdf1243",
"statement": "Application Agent coordinates conversation execution through an injected registry and AgentKit services; Remote Infrastructure Agent registers host resolution, SSH/SFTP, metrics and scratch-transfer capabilities alongside runtime-owned tools.",
"evidence": [
{
"resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L6-L44",
"version": "repo-lines-v1:sha256:c45de1cccebc1889e8de88bb9520e33aeaba05e6c2c8faa7876eba2acb7f3493:eyJzZWxlY3RlZExpbmVDb3VudCI6MzksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA3YzgyYWM5Yzk2MGJhNjIyNDBlYWZkZDE0ZTY2NTI1NjQ2MTMzOTE5NjU2MzNiODhlMWIwNjk5MjY2MGI2NTEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFhZDFiYmYwZjdkYWQyYTAyNGQxMzBmZjQzOWQ5M2Y0ODZhZDQwMmQ5Y2U5N2Q3ZDVhMDZhYTUxNjFlMmIyZWEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI4MjgyYmRhZjE5OTYzODdkODg5MzczMjM0Njc1ZjQ2YTI5N2UxN2RhZjAxMGJjMWI5OGMzNjA0Zjk5OGEwNDMifQ"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/TermindAgentTools.swift#L5-L68",
"version": "repo-lines-v1:sha256:b37728d2b6eed175b24a9d2761439467c6455e58de8c995e99c80bcdd740c58f:eyJzZWxlY3RlZExpbmVDb3VudCI6NjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM2NTgzYWUxYWM2NTU4YTlmNGQ0MTYyYzcxZDJjMTk4OTE3OWI2MDljYWE0MDg0OTMzYjZlY2E5YWEzYWU1ZDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjgzMDBjMjE3MTcwZWFmOGZmOGRmMTgyYzc0Y2FkZDY2YjQ0NWFiOTZiYTVmY2YzOWYyZGE0MjM3YzdmYTA3ZDYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImM0NmY4Y2RkMDA0NDk4MWZkNzI0N2EwYzg5MzE2ODM0ZDNlZGFjOWU1MTAwNThkNGMwNGNhM2RkODczYzFhYTYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImQxOGJkYjA3YzQ1MDc0ZDQ1OGM1ZTE2N2I2YmNiYzNkNDQ3M2E1NzNlZTExYzQyMzI0NjBjMmIyODZmNmRiNDgifQ"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/TermindAgentTools.swift#L92-L162",
"version": "repo-lines-v1:sha256:09fca2c0116fdebff0ef1b1a8a2dca8ab7fb0923bc8c7d9bab717fd87297bee5:eyJzZWxlY3RlZExpbmVDb3VudCI6NzEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY4YWJiMjc3OTAyNGI2NzIxNWQ5ODVjYzIwODdjZDRmMzU2YWFiZTJiNWNmMTNmNDA2ZDA3YWFhMjE1ZTBlZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjkzNWVhY2VkYTg4Yzg0MTA1MTk1ZjI1ODQ0MGQwNTYzMjMwNjM1YWJlZDA2YjhlOTM2NzYwZDM1MDk5OGU5MTQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjowLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUifQ"
}
]
},
{
"id": "claim_4ed733207e8b495f9fb9f0db86f1ad04",
"statement": "Persistence owns the versioned SwiftData schema/container and persistence adapters, while GRDBMemoryStore separately owns a lazily opened SQLite memory database and full-text message index.",
"evidence": [
{
"resource": "repo://Frameworks/TermindPersistence/AISecretStore.swift",
"version": "repo-file-v1:sha256:39f0b10f3adf7bf4bf751f9e370e221c8613b8924c40063e8865bc75b6bbdafd"
},
{
"resource": "repo://Frameworks/TermindPersistence/GRDBMemoryStore.swift#L6-L47",
"version": "repo-lines-v1:sha256:367ad381b7e20356b66e497b9e380ad6c8d11ce26150386d054664175c7b2dda:eyJzZWxlY3RlZExpbmVDb3VudCI6NDIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2ZTgzNWJiMzkzNjdhODBkMDdiMDkxZDJmZGIwODFhZGM0YThkYTg0NmQ4MjhjYjM1YzUzY2IwYzUyMjc4MDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNiZWFjYTU1MGI4N2Y4MTM4MGM0NDM2MDc1YTA3MDQ0NGJkMTRhYWQ4MzMwNTZmNjE0MmYyMDdiNzlhNjdkMDUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjE3NTFkYmVhZWI2MDk3MWM4NGIwNWEzYjVjNWZlMmIyN2E2NmY0MjQxZTM5NTkwOTQ1NzU4NzljZGVkMjg1YTEifQ"
},
{
"resource": "repo://Frameworks/TermindPersistence/TermindPersistence.swift",
"version": "repo-file-v1:sha256:3f83df3e24721a73fd95f95172c13eeddbf3cfe6c815d51601f6e856068c27b8"
},
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L191-L205",
"version": "repo-lines-v1:sha256:c4ec94e716e4cb8b2c13ee93ce7d370e5a3800eae469b89cf13c6870f5fcc45a:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlMDlmOWExMjczZjgzNDQ3YzRiNzFiYmEyN2YwODAzMzcyMTkyZWZlODBiNmMwMmM1MzA4Y2U1YThkOTI4N2QiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImM5YjJkYjM3YThjY2FiMDIzMTkyOGUwZGY0MzcxOTc3ZWQzYzQwNzBkYTlkMDUwMjEzMzQyYmMwMmQyOGE0YWYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ0MzM5NTc5NTQ5OTAyMTEzNTE2MTA2Mzc0OGM4NTM0ODkyODlkOWExYzlmNDIzMGJkMmM5NzliYjU0NjZlNzYifQ"
}
]
},
{
"id": "claim_15c2069e54654cb49ac2a21c36d8dae6",
"statement": "Explicit Infrastructure CloudKit coordinators use Persistence journals and stores; the shared SwiftData container disables automatic CloudKit storage, so sync is not an automatic model-container transport.",
"evidence": [
{
"resource": "repo://Frameworks/TermindInfrastructure/Cloud/MetricsSyncCoordinator.swift",
"version": "repo-file-v1:sha256:0231838249d91135b86f0d348eff2d704d3f48820530225f4fb7b3ca71bae69b"
},
{
"resource": "repo://Frameworks/TermindInfrastructure/Cloud/SettingsSyncCoordinator.swift",
"version": "repo-file-v1:sha256:e3743dd6e71f7d3f182c325c1006c3a88aaaa5cd0f96e5cc043e9a6538128c58"
},
{
"resource": "repo://Frameworks/TermindInfrastructure/Cloud/VaultSyncCoordinator.swift#L7-L110",
"version": "repo-lines-v1:sha256:7c39d427cfa35171fc07fba08e4211e6ad13bab2d90ae186502c9db6c6bb3776:eyJzZWxlY3RlZExpbmVDb3VudCI6MTA0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIwMWJhNDcxOWM4MGI2ZmU5MTFiMDkxYTdjMDUxMjRiNjRlZWVjZTk2NGUwOWMwNThlZjhmOTgwNWRhY2E1NDZiIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiIzZGRhYzFmMWExMTQ1ZGI0NzdlMzA3NGY2N2FiYjk2ZTk3NDc0M2RhYTYxYzZiZGQ3Mjg0MTAxMWJlYWE2OTU0IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI1YjdlMmY3MDI5ODRjOTkzZTc3MDhkZWZiZWJhNzdlZDQ1MDkyYjRhNTNlMGZkM2I0YzQzMjkxN2Q3OWU3MGFiIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJhMzBjNzI1ZjE3YjkzYjRkNTA1YmExMjA5Nzk0MTdmM2U1NzM1MzYxZGY5NjFiY2JkMGM0ZjhlOGRlNmYxNjJmIn0"
},
{
"resource": "repo://Frameworks/TermindPersistence/TermindPersistence.swift",
"version": "repo-file-v1:sha256:3f83df3e24721a73fd95f95172c13eeddbf3cfe6c815d51601f6e856068c27b8"
}
]
},
{
"id": "claim_0c911060db0b42a2bd8558b9e730a09b",
"statement": "General Infrastructure separates StoreKit entitlement services, launch-file logging, attachment/skill imports, metrics parsers and Apple speech recognition; speech recognition receives an injected audio-input capability rather than owning app-native capture policy.",
"evidence": [
{
"resource": "repo://Frameworks/TermindInfrastructure/Agent/ContextAttachmentImporter.swift",
"version": "repo-file-v1:sha256:04545870ebec216975e2c1ae4359e31bb2763b2681005afdcda57023886c7b78"
},
{
"resource": "repo://Frameworks/TermindInfrastructure/Commerce/ProAccessController.swift#L1-L85",
"version": "repo-lines-v1:sha256:648ae54b495db3779ce5c2f968ce50b65010eaaff4484506f081c03457ea3ee8:eyJzZWxlY3RlZExpbmVDb3VudCI6ODUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkYTliNzVmNjRiMTA2ZWI1NDRkZTIwMWY1OTkxMjJkNzVhYmM0ODNjNWIxNTZiYmE2YzA1YzBmOTU2ZGJjM2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImZhNWVlMDUwYjRiOGIxZjczMTcwM2E3ZTkwZjQ3NzgxNWNiMjAzZTUzYzE4MjhjN2Q0ZWRlODdmZTQ5ZjM5MWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjIwNTE3NmU4MmQyODI4MzNmZGU5Nzk4NGExZTc3MjIzOTdjOGQzNWFhNjYyNjQ1MWI2NjQ2NWIwNjJmYzhlYmQifQ"
},
{
"resource": "repo://Frameworks/TermindInfrastructure/LinuxMetricsParser.swift",
"version": "repo-file-v1:sha256:5593aa4e03f0a3c57a9e944395205c121e48ce03ff3bb9b8ed9e59ccec66b4ca"
},
{
"resource": "repo://Frameworks/TermindInfrastructure/Logging/LaunchFileLogService.swift",
"version": "repo-file-v1:sha256:3007e0e7092d7615cecf67b91d1bc947509ac91024158fcc050c3f0c501f2a65"
},
{
"resource": "repo://Frameworks/TermindInfrastructure/Speech/AppleSpeechTranscriptionService.swift#L1-L87",
"version": "repo-lines-v1:sha256:6352972ae1a937dff795e1f856178f850d5e918b8402c3a58e00774e9f07e791:eyJzZWxlY3RlZExpbmVDb3VudCI6ODcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlZmQxOTg3MWRkOTZjYmM5YTM5Y2RhYmNkZDY1YmUwMjBhODQ0OTRkMzMwNDUxODM1OTNmNGRlMTJmODhlNDMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImVjOWEyZmZhM2I3MjdlYjRlY2NlYmQ5MjU1MWVmZGYzZDUyYzljMDFmZTZlNWI2NTg3NzRkNDY3Njc3MTA1MTUifQ"
}
]
},
{
"id": "claim_b3f4b0e1f8f04be6a1b215ce680e698d",
"statement": "Remote Infrastructure SSH owns connection and channel protocol machinery while Transfers owns file-operation scheduling, transfer contexts and edit lifecycles; logical file admission, SSH session-channel admission and physical connection count are distinct controls.",
"evidence": [
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/SSH/SSHConnection.swift#L63-L90",
"version": "repo-lines-v1:sha256:3164f5fe477a6bc014fca034c0fed56c8c039884e744eb6e994b6b76166fe1b1:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImI0YTM2NWE5MGVjMTFlOTA0MzI3NTJjZjkzNzZlYzVlZDM2YjgwYmE1ZThlNjg1NGZjZjk4OTcwZDMwNDQ0NjkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImVmODRiMDEwYjZlMWY0OGQ4MmMyYmM4ZTlhYmQ5Y2Q4NWRkNDVhYWI0YmYwMjdhZDI2YTA5OTU2ZDAwMWZlNjQifQ"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/SSH/SSHMaxSessionsPolicy.swift",
"version": "repo-file-v1:sha256:d70a2d3a8181b8823d7662fb60d0c16b1b20d32c4e0607f99a453c44e3db62ad"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPConcurrencyScheduler.swift",
"version": "repo-file-v1:sha256:5de1464ab564c4f8e6f070cfcfb9b58d10ce2ed5db963787ea3e9a1b412755cd"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPEditService.swift",
"version": "repo-file-v1:sha256:7018e5ad54cbb39036eaa1f953e0e2f8cd47315c16ce9f51fcc2dca0fe9c06f4"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferContext.swift",
"version": "repo-file-v1:sha256:d3b7475b33fb9336feff196b058ff9a4824f776b92ff9672fb49d6f69e70d978"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferCoordinator.swift#L78-L130",
"version": "repo-lines-v1:sha256:e40e7d35b50b70b7b5c4f18fb5197a6ef3ce99dc496bcd4f962b9267320b4431:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNhNjJhYTkyN2M1ZmY1YzlmNjk0ZDJlNGJjZWFmODVmNTg3MDUyMjkxODYzNjJkNWU1MzFjZDRmY2JlZDkwNGIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAzZjljZGY2MTc5ZWZmZjc5OThlZWJkNDhmNzRlYTJhYmU2OTA2YjM5MmFiMzljYmMyMjVhOWRhMmFkMzVkZmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZmYTUyMmViMzUwNWYwNjhiNTJkZjYxNTVmZmE5OGMzZDA0YzE1MzhjMWUxZWNiNmUyMzIzMDZhMjZiY2FiNTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZiZTdlYjA0YjEyNzE1YzZjYzlmNDFjNzk1M2ZhMzRmNjM1NjM0ZGJmZWE0OTU1ZWEwN2I5ZjM4NTVlNjRkYWYifQ"
}
]
},
{
"id": "claim_8bd04d4baab849948d47145b459c0829",
"statement": "Remote Infrastructure Security implements Keychain and key handling, SSHImport reads/stages concrete import sources, and Telnet is a separate transport rather than a path to SSH-only functionality.",
"evidence": [
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/SSHImport/SSHImportReader.swift",
"version": "repo-file-v1:sha256:c9cc26d252d733380b45186c70699fc3ef7e1d09fa323b5fbd40a82d466ebece"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Security/KeychainSecretStore.swift",
"version": "repo-file-v1:sha256:2405251e16865f91611d0e4a999663542dfec5fc318785d1e9f66457632619e4"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Security/SecureEnclaveKey.swift",
"version": "repo-file-v1:sha256:a514900656b0f5fca4f65a51d01b623035cdd8a38f2052270e612256a03a730c"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Telnet/TelnetConnection.swift",
"version": "repo-file-v1:sha256:3d74287bd690b560f5feacf29180580fb4552f6d56be4247d00a7011642376d0"
}
]
},
{
"id": "claim_00ce8379c73c4b37a5316b4cfb07a86c",
"statement": "Presentation contains shared forms, formatting, transcript state, SFTP presentation and terminal appearance, while architecture tests prohibit native UI, persistence and remote-infrastructure dependencies in this framework.",
"evidence": [
{
"resource": "repo://Frameworks/TermindPresentation/AssistantTranscriptPresentationState.swift#L6-L44",
"version": "repo-lines-v1:sha256:f9ecbc961f95aecdc449c42921074a82d24baeb3a14a49d0eb6e53f3d6b2dcad:eyJzZWxlY3RlZExpbmVDb3VudCI6MzksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ5YmYzM2M3N2QyMzg5MzY2ODA4Y2RlZmNhNTNjNzUzMjMzNzMxYzI0ZWYyOWM2ZjIzNTE1NWM5NDliYTZjYTAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjEzOGNiZTU0MDNhODcyNDlmNWE4MjY3ZGEwOTg1MDk2ZmVkMDQ3ZTZjOTJkOGMyZmE2YTUxYmMwMWVjZDdiOTAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImE4Zjg1M2VhNGM5ZDhhMmRkNDk3M2M5MDRjMmJlM2FjZTZkNjE1NDdiYTQxYWYxZDBjZTM0ZDJiZjAzNGJhNGEifQ"
},
{
"resource": "repo://Frameworks/TermindPresentation/IdentityFormSections.swift",
"version": "repo-file-v1:sha256:7c3c7dd1ba4148f10f1ce45aa97b648555ff481c59d69097d544dce24e66aac0"
},
{
"resource": "repo://Frameworks/TermindPresentation/SFTP/RemoteFile%2BPresentation.swift",
"version": "repo-file-v1:sha256:e27e838481f8b11824eb5d37bce36d22b5c66cbb14464fae3785f77ecd058aa5"
},
{
"resource": "repo://Frameworks/TermindPresentation/Terminal/TerminalAppearance.swift",
"version": "repo-file-v1:sha256:a8ac25cdd81d3d6205d9a1645a307d05b17e4f7690cdb2d8d25cd536d9ca449b"
},
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L179-L189",
"version": "repo-lines-v1:sha256:9ae795cb580db70eb440a08fa626cf8b370a155c52c4f587825aa8585d631216:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjBkNDI5OTVlMWFiMGZhNTYyM2ViZDQ4NzRmMDliZDFhYjBmMjY2OWVkOGQ0Y2E3ZmIyMjU4NjMzYmE0MTVkNjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ3NDI5ODQ5YmU0MTZhMzMzMmY5NTcyYmY1NTM5ZDkzOTZjNDEzMjY1MWE4MzhiZGRhZGIzN2IwNzg1OWViMmUifQ"
}
]
},
{
"id": "claim_a394377c2c224dd28a7ce8861088948f",
"statement": "Shared resources provide bundle localization, privacy/model metadata and distribution-icon catalogs/assets, while distribution-icon licensing is stored separately and platform-specific icons remain app-owned.",
"evidence": [
{
"resource": "repo://AGENTS.md#L5-L13",
"version": "repo-lines-v1:sha256:5bf8f722418eac38057a37c2f664f7f78762650fe7e8d0d55318d6aa97bcaba3:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZjM4YmQ4MDg4Y2Q5OGMyYTJiZjdjZWUwMjg2NjU0OTRlOTA0MGI0YmIzNTBhYjMwY2VjOThmMmZmNDlkMjUyMyIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQxNDRhYTY2MzdkYjRiY2Q3MWYxZmE2NDc0MGI1YTJmMDk1YzZiYWYyM2JlOWU1NzJhMGE4Y2VkODJkNzIyZSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMmQ1ZDk4ZDMyNTIxNzM5OGEyYzA4Mzg5YzFlMjg1MDQyMTA2MDQ2OGUzYzI5ODdhODRiMDFjNDM0ZWU2ZDcyZiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYWQwMTdmYTAzMWI3MzUzMDUxZTQ5YWQxNjI0YTFhNjBlMjAzYzhmYTljN2QxYjE0YjY2ZjU3YjlkMTU5Mzg5NSJ9"
},
{
"resource": "repo://Frameworks/Resources/LinuxDistributionIcons.json",
"version": "repo-file-v1:sha256:be46e0d01c6afe28488d3994494278effe58c68d38004913c78b7b76e3bc5abe"
},
{
"resource": "repo://Frameworks/Resources/LinuxDistributionIcons/SimpleIcons.DISCLAIMER.md",
"version": "repo-file-v1:sha256:f921095158b73e61e675ff99b327930fa95ad6f4cf667d414ffe8ae585205724"
},
{
"resource": "repo://Frameworks/Resources/PrivacyInfo.xcprivacy",
"version": "repo-file-v1:sha256:b844a37603d2a0333ffc87d7c6e50cd7f2563a456f8754ad817778036207cece"
},
{
"resource": "repo://Frameworks/TermindPresentation/LinuxDistributionIconCatalog.swift",
"version": "repo-file-v1:sha256:a129d782efe875c18706468fc0aaf8d5191c71287e0ac1f1559027f1fcc13821"
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
}
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T03:45:03.442Z"
}
}
@@ -0,0 +1,242 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:d571512d2bbb036fb97369a80a51af74729053b8d7d4164b178ba7b1e0919d80",
"claims": [
{
"id": "claim_8809151c43594803b83cf0451d849112",
"statement": "The AgentKit directory is a Git submodule reference checkout, while the app build declares a remote versioned AgentKit dependency and records its resolved revision separately.",
"evidence": [
{
"resource": "repo://.gitmodules",
"version": "repo-file-v1:sha256:d44aba833f5460dbae6fe83e58327069b8ca0528c32f0bd299bf7d56e1acb99c"
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
},
{
"resource": "repo://Termind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved",
"version": "repo-file-v1:sha256:02109cb8656598ce20a6c8f9a527e97630ffd1b5f00ea9536425abc0417187fd"
}
]
},
{
"id": "claim_c30ab060a63746de941e1d93178d3177",
"statement": "AgentKit separates its dependency-free core product from the optional AgentKitScrubber web adapter, package tests and localized runtime resources.",
"evidence": [
{
"resource": "repo://AgentKit/Package.swift",
"version": "repo-file-v1:sha256:1c36e29cab099a934aefdd13b4b69aa25d2d1112ceebe79814bf76f82a8119eb"
},
{
"resource": "repo://AgentKit/Scripts/build-localizations.sh",
"version": "repo-file-v1:sha256:4aa30ad6ba5f603cb6a9273caff26c795dd289b3975f073135aec9bb0dfbd7b4"
},
{
"resource": "repo://AgentKit/Sources/AgentKitScrubber/ScrubberWebClient.swift#L5-L42",
"version": "repo-lines-v1:sha256:52b4ba668c4d518aadf28ba19616de10ed9d3cec835ac363425edfe56c7974b9:eyJzZWxlY3RlZExpbmVDb3VudCI6MzgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA4MjQ0NjI3Yjc0YzgwZTgxZmQxNzBkMWE0Yzg2NzQ2YmUyNjlmYTU1OTliZjllNThjMGY1MzdiZmY5N2JiMWIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjYyMDZmNDQ4MzJkNjEzY2VkNTAzZDU1MDYyMjQ2NWI0YjkxMTE3OWUyNzc4OTZiYmQ1NzZmY2U3NjRmODdkYTgiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjAyNTM1ZGM2M2FjMjAzMmZkMzNjOGMzODkwYjI3ZTgzZWM1M2U3MzQzNjIyMTA4NjBjNWEzNjUyZThlOGJlNzIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjMyMWY5MDkxYmZiMTcyOGFhMjM1YThkODRkMDFlNGU0ODMyZDJlNzQ0NDNiMWYxZTM2NDU0ZmNhYTY5MGFkZWIifQ"
}
]
},
{
"id": "claim_4f82ef52c1ca40a590331502b7555a7e",
"statement": "AgentKit's core separates runtime/provider/security/MCP responsibilities and supplies built-in tool families for planning/tasks, scratch files, skills/memory, user interaction and web access; Termind host tools are supplied externally.",
"evidence": [
{
"resource": "repo://AgentKit/Sources/AgentKit/MCP/MCPClient.swift",
"version": "repo-file-v1:sha256:aed93434f1924318015810fafd1b9b3ce15cad1212fcc84fc1d1e72c5ab7725c"
},
{
"resource": "repo://AgentKit/Sources/AgentKit/Runtime/AgentRuntime.swift",
"version": "repo-file-v1:sha256:dd5e6ea3dd365910d2a30a88da9029bd972a547b511503e9665857da494271c3"
},
{
"resource": "repo://AgentKit/Sources/AgentKit/Security/AgentSecurity.swift",
"version": "repo-file-v1:sha256:efd9b3e1b6c1e46095286e26371b2a16a8873cabfc6b755f4e500541725ebe7e"
},
{
"resource": "repo://AgentKit/Sources/AgentKit/Tools/AgentToolCatalog.swift#L3-L87",
"version": "repo-lines-v1:sha256:e60d96794abf3e3a386b20497dbf7fec55f57322d0990a4dace69a920df6e4c0:eyJzZWxlY3RlZExpbmVDb3VudCI6ODUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM0YzNmZmM3NDEwZmU0M2UwYTgzNDk1YTJmOTFhZDhjZDc0NzRlYjBjMDkyZmZmZjMwZTUyZWRhZjczNzZjNTgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVjYjc4YTBhYmU3YWE5YTA1YmY5NDJhYWZhMmQ0Y2Y5NjQ0ZTVlZDc4MjAwYTcyZTYxY2EzMDM1YmU5ZTc2ODAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjoyLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjExOGJmY2MwNWRhNWVkOWI1NWRjNTcyNWE0ZmNkYWVjNWMyNTc1ZmRmNGNlMjJhMTk5MDliMWIzZjRkZTgxZmQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjczZjlmOGMyNTYyM2ZkYzAwNTEzNGIzYzFiZmRhM2JiNWRmYjgyZTE0NzE3NjQyNTBmMDNhMzI2YTNiMWY3OGQifQ"
},
{
"resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/TermindAgentTools.swift#L5-L68",
"version": "repo-lines-v1:sha256:b37728d2b6eed175b24a9d2761439467c6455e58de8c995e99c80bcdd740c58f:eyJzZWxlY3RlZExpbmVDb3VudCI6NjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM2NTgzYWUxYWM2NTU4YTlmNGQ0MTYyYzcxZDJjMTk4OTE3OWI2MDljYWE0MDg0OTMzYjZlY2E5YWEzYWU1ZDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjgzMDBjMjE3MTcwZWFmOGZmOGRmMTgyYzc0Y2FkZDY2YjQ0NWFiOTZiYTVmY2YzOWYyZGE0MjM3YzdmYTA3ZDYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImM0NmY4Y2RkMDA0NDk4MWZkNzI0N2EwYzg5MzE2ODM0ZDNlZGFjOWU1MTAwNThkNGMwNGNhM2RkODczYzFhYTYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImQxOGJkYjA3YzQ1MDc0ZDQ1OGM1ZTE2N2I2YmNiYzNkNDQ3M2E1NzNlZTExYzQyMzI0NjBjMmIyODZmNmRiNDgifQ"
}
]
},
{
"id": "claim_0b2e0fe8e2d147048e55cd6d6711c104",
"statement": "TermindMCPBridge translates newline-delimited stdio JSON-RPC to bearer-authenticated HTTP, retains session/protocol headers, forwards responses, and requests session deletion at EOF; desktop HTTP transport and MCP application tools remain separate owners.",
"evidence": [
{
"resource": "repo://TFM/Application/MCPServer/MCPServerTools.swift",
"version": "repo-file-v1:sha256:ad52ce8d73955e9220c24a05db6827b45359c2de46b59d5f315f733354bfc0fd"
},
{
"resource": "repo://TFM/Infrastructure/MCP/MCPServerSession.swift",
"version": "repo-file-v1:sha256:9757ec7e8d8f430cd49b5d95587dc362883d16d7fceaa12efda1036e25865b92"
},
{
"resource": "repo://TFM/Infrastructure/Networking/LoopbackHTTPServer.swift",
"version": "repo-file-v1:sha256:5a91a4b29083f71858834b4b1adee9fb64551de704e850ebe8026926ff9a6b9b"
},
{
"resource": "repo://TermindMCPBridge/main.swift#L4-L87",
"version": "repo-lines-v1:sha256:ecccf30acbd284a663e31c1aa7f40e224b2264fb038003a81dceaa30c6449866:eyJzZWxlY3RlZExpbmVDb3VudCI6ODQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVjZmJkYmI1MDE2YWM3ZGVlYTU2ZTg5MGFlOTNhZDc3MzY1Y2I0ZDhhMGQ4NjhiMmU2YzliZTNjYzExYzQ2NGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE3M2Y1YTY5MGEwZjAwODY0Y2RmNDU3MjY3OTAxZjNkNzg5ZmRjYzgwNzQ5NzlmNWUzMDQ2ODVlMjFiMzNlNTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE0ODcxYWY5NDg1Yzg3ZThjMGM0ZGNhN2IyYTI3MThiOWY5YTJmN2QxM2RlYWM1Y2MyYTY5YzgyNWVhY2ViZmQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgifQ"
}
]
},
{
"id": "claim_8b29b34cd7fb44258296dad1567c4158",
"statement": "TermindWidgets renders ActivityKit summaries and workspace links using WorkspaceActivitySupport source shared with TFI; the bounded payload contains session summaries but no credentials or terminal output, and app-native services own activity updates.",
"evidence": [
{
"resource": "repo://TFI/Platform/MobileLiveActivityController.swift",
"version": "repo-file-v1:sha256:f10587ec652f59536cc9e3051ea887a94999182c3dfc5e3d8852b8f442671a2a"
},
{
"resource": "repo://TFIWidgets/WorkspaceLiveActivity.swift#L6-L52",
"version": "repo-lines-v1:sha256:cd3c4ccacb8be12c499b6aba3117a2c5233ef2beb1ce0a7f5bb96a1742d9c690:eyJzZWxlY3RlZExpbmVDb3VudCI6NDcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVjZmJkYmI1MDE2YWM3ZGVlYTU2ZTg5MGFlOTNhZDc3MzY1Y2I0ZDhhMGQ4NjhiMmU2YzliZTNjYzExYzQ2NGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRmODhlNjc1Yzg4M2QwZTJiNWU2ZTkzMmNkNjU1NDVhMGVlOTU3MzJjODk2ZmZjZjBjMGMzYTRhMzIzMDk0Y2UiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImFiZjQxNGZiMjQ2NmU1MmIzYzA1N2M1NjUyZmVkZmVmYjljYjYyYWVmMzJiZmRlMWU4NjkyODkxYTU3NTdkOGQifQ"
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
},
{
"resource": "repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift",
"version": "repo-file-v1:sha256:6a3a6d3f4c71848cedcee5af633454d0dbc37f946f9ecf07c8a1d70ae635600c"
}
]
},
{
"id": "claim_871ae8626cd744a19f5702b2dcb3e281",
"statement": "The three test targets separate shared, desktop and mobile checks; original-module synthetic V1/V14 stores preserve migration evidence, and the forwarding benchmark is a standalone executable independent of app/test hosting.",
"evidence": [
{
"resource": "repo://AGENTS.md#L46-L52",
"version": "repo-lines-v1:sha256:436355ec1ca59bf6c5029bbfbe5c16334f8af9488288634641a1bfc7b98288c4:eyJzZWxlY3RlZExpbmVDb3VudCI6NywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiODQ1MThlZDQyNWZhZWNhNTgxNGExYzEwMTU0ZjEzMjgxOGViM2VjMGI2ZTgzOThkZjQ5NGI4YWRmN2MzYTI0NiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNWYxODBmOWMxMjY5MDNiY2MzMzFhYTk1NDU2ZTQ5NDQ0YTdkNGQwMTFlOGEyYTgzZjVkYzg3MDIzOTE4MTJkMCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZmVjYzgxYWMyZjE3ZWVjMDQwYzhjNWM2NzYwODkzYjJkNmJmMmJkMjVhN2M4MTlkMTBhMGMzMWZmMjE5M2NhZiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMWFmYjk2MDZmNWIwZDhmNjM0YjI2MDM3OGQ2ZWNlMjUzYjVjMTQ0N2E5YmYxZDA0OTM0OTQ0MGE4YjVlYmYwOSJ9"
},
{
"resource": "repo://AGENTS.md#L5-L14",
"version": "repo-lines-v1:sha256:4d2ece4bd3cc980ac07ceebbe3c6f012cf2a17d5e087150df1ad69e91ea5b976:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImYzOGJkODA4OGNkOThjMmEyYmY3Y2VlMDI4NjY1NDk0ZTkwNDBiNGJiMzUwYWIzMGNlYzk4ZjJmZjQ5ZDI1MjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJmNGQ3NzU3NjdlNzBiMGI3ZDE3YjNhNTkzNmM2ZDY2NDc3YmE3NzZlMTNmYzM5NmEyOGMxODY5MzQyMjQwODIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjJkNWQ5OGQzMjUyMTczOThhMmMwODM4OWMxZTI4NTA0MjEwNjA0NjhlM2MyOTg3YTg0YjAxYzQzNGVlNmQ3MmYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRkMzUwNTE2MzRmYzcyMzY3ZGVlYTFhZTI4NzFkMjk0MTY2ZDNlNDM5MTgwOTdiOGUzMTVlZmE3OTU1ZDM5YjcifQ"
},
{
"resource": "repo://Benchmarks/PortForwarding/main.swift#L1-L21",
"version": "repo-lines-v1:sha256:e3ddb6b1bcb7563b63da531f216d3acb8837d52222548b173b661a217a6ab01c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE1OGEyZDdmYzIzNTUyOWMzYWJiMjVmNmUzZDA4N2I2NGE1YmJkMGRkZTU5OTgxMTMzNGU3NDkzNTAyMmQxMzYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc4OTJkZmZiOTYyYjg1NzE3MGE5ZGYwMDIwYzJlNWZmMTY0MzE0NDk3YzI4ZjBmZWU3NDQ5ZGJmZGNmZGRlMDcifQ"
},
{
"resource": "repo://FrameworkTests/Fixtures/README.md",
"version": "repo-file-v1:sha256:df7270ec39f1e785912f5f41e0a9ac12dc140f051530f35f350ee927ffbccd4a"
},
{
"resource": "repo://TFMTests/ArchitectureBoundaryTests.swift#L5-L21",
"version": "repo-lines-v1:sha256:98306357e42814b24b1aa8f79d3e9d07347124bc26ff146d80b8ed5d90d4ef9f:eyJzZWxlY3RlZExpbmVDb3VudCI6MTcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ2ZGQ1ZmEyNWE4NWIwYTBhODU3MDBkOTk2ZTIxMzgyMWEwZjk2MmU0NmVkNGU5NDY5ZDVlYzNkYmI2YmM4ZmUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNkMTZmOTdkOTZhZjllZjZjYjY3NGUyNzIxZTU3MmQ2YTFlNWRkOTY4MDJmOGIwZmIxM2RhZGVkNGI3NjYwNGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImMyNTMyNzdkNWRjOTAyZTI1OGVlNmZmMmY0MzA4YjRkYTQ2ZGJmM2Y3NmI1N2Q4MzQ1NWU5OGMyMTg3OGU5NTgifQ"
}
]
},
{
"id": "claim_a945a4b41dcf4e69849bbdcee724ffd4",
"statement": "Repository scripts cover version/resource maintenance, remote fixtures/forwarding measurement, and screenshot/device-frame production, with Python tests for version and benchmark tooling.",
"evidence": [
{
"resource": "repo://Marketing/README.md",
"version": "repo-file-v1:sha256:97866af84c8b01df60e0e125b61a85836eaa9156052aeac3c3ddb0c234cad81f"
},
{
"resource": "repo://Scripts/Tests/test_bump_version.py",
"version": "repo-file-v1:sha256:3ea79fc679ff9d01f34a2c7b9f8b6b461793c19a061befd29d9471401f8e58d9"
},
{
"resource": "repo://Scripts/Tests/test_port_forwarding_benchmark.py",
"version": "repo-file-v1:sha256:131e9bb9089ea820c28f57c7096e8e55fb78f73598bb4ab641a2cf45c3f3a04e"
},
{
"resource": "repo://Scripts/check-zh-localization.sh",
"version": "repo-file-v1:sha256:065d662aa579090c80e0fe93ab13ecb447c112ceebbc8a1ec29a1c39b9b8e3ef"
},
{
"resource": "repo://Scripts/update-linux-distribution-icons.sh",
"version": "repo-file-v1:sha256:6554e0ab2064d73f9aedf5c5334a7b113a5e78f2964f95812ebadaefba0b23b1"
},
{
"resource": "repo://Scripts/update-pi-model-catalog.sh",
"version": "repo-file-v1:sha256:27158e0d707210321d7c9b73cedd3f3cc81056dc72b5dc42cd764db12bb13990"
}
]
},
{
"id": "claim_064e94c9f0bc42d8b09bc1a831c38961",
"statement": "LandingPage is a separate Astro build with English, Simplified Chinese and Traditional Chinese locale helpers, legacy zh redirects, shared components/layouts, and an explicit allowlist importing marketing device frames rather than copying them into public assets.",
"evidence": [
{
"resource": "repo://LandingPage/package.json",
"version": "repo-file-v1:sha256:394edb8c9c67744600e13244e95a3a3089556fb93f3b9727bf35ec9eb979c8ed"
},
{
"resource": "repo://LandingPage/src/layouts/BaseLayout.astro",
"version": "repo-file-v1:sha256:0a7aa51bcd06be442a2f6d81e5346a70441c6aab3292363731f7f917d9020690"
},
{
"resource": "repo://LandingPage/src/lib/i18n.ts",
"version": "repo-file-v1:sha256:2af667afc033d02b9af34d1a7b9757cfe72e20823c4228ad7c07049f6cfe21cb"
},
{
"resource": "repo://LandingPage/src/lib/marketingImages.ts",
"version": "repo-file-v1:sha256:a833aaad7967fd7a2a5acaf51a2ce83ae3183e60d074916117dbc3cd29c87303"
},
{
"resource": "repo://LandingPage/src/pages/zh/index.astro",
"version": "repo-file-v1:sha256:ae726a2708c03ede9aafa9d5a639e390e42fd8121824d7c4885267e1ec38f66e"
},
{
"resource": "repo://Marketing/README.md#L1-L15",
"version": "repo-lines-v1:sha256:79a161d0d13113d989c6294c39a83615a1aab840ddd1a0b34cee9a6aa3b673dc:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA3ZWVjOTcwYTBkNmExMWI0Y2UzYzEzYmI3MTE2N2MyZTFiNmQ2OTYyZTU0NmFjM2U3YjE4ZTNjY2NjODFkODQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjY1ZGZmNDIxOTMxNDE2ZWQ2MjcyYzhiMmEwZDVlZTgyMDAwYjFlYmNiZTAyNzNmZWVkZmM2MDhkMTdhNjZkMDIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg1M2Q2M2MwZTM2ZTUwY2VhZjkwZmY4ZjBkYjkxZDg0ZDcxZjVhZWUxYWMzYjFlMzcyYjIzYjdkM2YxZTVlODYifQ"
}
]
},
{
"id": "claim_007ca03617d6410daff00909e70a2a96",
"statement": "Marketing separates final locale/device App Store artwork from immutable source captures and reproducible device frames; Astro produces optimized image outputs from allowlisted frame imports, while Design/Brand retains the brand master and visual guidance.",
"evidence": [
{
"resource": "repo://Design/Brand/README.md",
"version": "repo-file-v1:sha256:0a6acb7b1c5971e5cc513cf9f8de6625465d0ca79c5dcf02e3dc25f2ef72cf06"
},
{
"resource": "repo://LandingPage/src/components/ScreenshotPicture.astro",
"version": "repo-file-v1:sha256:b681fc11c50f4bd3eadc1f0353c4e82f2c3045624b95273efed055d1ae414bfa"
},
{
"resource": "repo://LandingPage/src/lib/marketingImages.ts",
"version": "repo-file-v1:sha256:a833aaad7967fd7a2a5acaf51a2ce83ae3183e60d074916117dbc3cd29c87303"
},
{
"resource": "repo://Marketing/README.md",
"version": "repo-file-v1:sha256:97866af84c8b01df60e0e125b61a85836eaa9156052aeac3c3ddb0c234cad81f"
}
]
},
{
"id": "claim_6e998ef58d954dc5a3fffb452ee4e7d1",
"statement": "Xcode project metadata controls build targets, schemes, embedding and package resolution, while scheduled/manual repository automation refreshes OpenWiki and opens a documentation pull request rather than serving app runtime behavior.",
"evidence": [
{
"resource": "repo://.github/workflows/openwiki-update.yml",
"version": "repo-file-v1:sha256:ced8692496880cc64d341ffc8dc0f5a507006bca94ad7f48e2d01afad096acaf"
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
},
{
"resource": "repo://Termind.xcodeproj/xcshareddata/xcschemes/TFM.xcscheme",
"version": "repo-file-v1:sha256:6215ae5d2e32c9f76d70d6401196b14937f7be4b1e06b67db2297f3b81d86aa4"
}
]
}
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T03:45:03.442Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:94362b50650901920bd18fe05d872f1c1e750025fddb41c087321de376e741be",
"pageVersion": "sha256:70a98befc109c68435ca90197485bbf234a8abb2fe0f39b53b8b1894a085f6df",
"claims": [
{
"id": "claim_085ce722f39f48eea75366ec3b3f7554",
@@ -16,7 +16,7 @@
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:2a2bcccf7f6514fee0573fdd868c54bd98fa151a69e0eb4ae45f9b09fa2f956b"
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
},
@@ -149,6 +149,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:baefc5b1b6f7ed2483eb0b8055d380f8d7b24422271b2cceeed7367b3791874b",
"pageVersion": "sha256:6ba8f89374ad018a257cf1c10e91f9d4b3641420f6187d07c8829858671948d1",
"claims": [
{
"id": "claim_981f16f030e9469588af705aa377161e",
@@ -239,6 +239,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:9fab0c6c44bd964238a9d403f45ab6c585521590be6c5cadce55824e5594a132",
"pageVersion": "sha256:a1c9a480314b124cb096731918e3a208c7dab2e590e8c42bcfa94456f9440b9c",
"claims": [
{
"id": "claim_70c5c3da992944188e719c65adc9b06c",
@@ -237,6 +237,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:28:26.942Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:6ceee04608819d00be5701b025640cda218eada05658d907b7f42d29b2cc4e9a",
"pageVersion": "sha256:267e44eb9900960e4bd0ccf4510939691311fcc1c28a28c29fbe3208abfb3182",
"claims": [
{
"id": "claim_e50b505da2214c6781fa8eb1a146dacf",
@@ -237,6 +237,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:10ea95f6fb5ea0feb5b5f8460c1c8c84091a3d340782befcf5566bda2d187362",
"pageVersion": "sha256:e8db6dcac9048304c352ba94dabfb8b5085a83d1526e3ded743e49ba354dee43",
"claims": [
{
"id": "claim_7c677489fd8b4a4fadd006a4da4e9937",
@@ -195,6 +195,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:43:23.140Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:3080e12d34f1ea00779670c9322ef8a881013cc0b9818b54ea393ff11c802b17",
"pageVersion": "sha256:e27880aa34f40deedddffbc3737c872c8b3018d93003f868cd5fa14e7ddf78e0",
"claims": [
{
"id": "claim_bc1531cd55cc445cbd6964ff7331b6c1",
@@ -153,6 +153,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:43:23.140Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:47c2d7e416b47c5104e7fa88cf33c353214d35e4e26759a0bff70dcbd3adda04",
"pageVersion": "sha256:eedd08fcec41ac31b854d4f0375e28efcca4b20b1dfac2d25880b18421e8d199",
"claims": [
{
"id": "claim_c56b98e3167443d9a8aa8d3405b35eca",
@@ -159,6 +159,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:43:23.140Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:d4f1f7d73a06d827f38ce7288a9b41c230491a7091ac8cc51be5f45c67272655",
"pageVersion": "sha256:0ef048b57e0be46c11bece53519653eaa7e6e4106f7a43d19b73af10bf2d560a",
"claims": [
{
"id": "claim_3a403468456840acbfe0a524b90d5717",
@@ -193,6 +193,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:51:54.212Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:1defa34289e2e145e7004bb2e383c3dcb89282051eeae2674e3a8914943d96e5",
"pageVersion": "sha256:0dd44becda4b103f8f913c5fb5293ffc1b0a87287a43708514270a266cafd70a",
"claims": [
{
"id": "claim_b47979774aa94e7dae517a6894c508d4",
@@ -293,6 +293,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:ba0b96e2c8c52703c9768ac9b1a46645de750dabda92b80924ceb42df95ccc44",
"pageVersion": "sha256:0049d9723b546cae3375f18e49fc5c7fc515150d30a5a18e696c9fbb9120813f",
"claims": [
{
"id": "claim_d34d7b16495a44a4a946d3dc9e0456f4",
@@ -201,6 +201,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:3d3f33ddbd0ae25c9b844013736d720c7b810ee44834462e85d00a617864556a",
"pageVersion": "sha256:8fa646bfd9f2cd1c2640f78e4b35d4534f2e5ddaa4fe47ae59021930d50c50a5",
"claims": [
{
"id": "claim_bca4a6f8574343d5b8310421bbdd595d",
@@ -109,6 +109,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:4b9fd6f22c64cf0d1a0bc5bb84b6564a5adb41d9e096bd5f2ef479e11566a065",
"pageVersion": "sha256:e6a8ef81cbf7d5ffb6373e73605d753866c3eebed9436ce6cca2345caa77b629",
"claims": [
{
"id": "claim_bf6e7f1d333040099a25edc9d0d96b84",
@@ -132,7 +132,7 @@
"evidence": [
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:2a2bcccf7f6514fee0573fdd868c54bd98fa151a69e0eb4ae45f9b09fa2f956b"
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
},
@@ -153,6 +153,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:6d64333d6440655b2663ee2802480187835c8ef6b24a2b99299bcf6521636723",
"pageVersion": "sha256:7b9983afed4d964330e5d0357dbd1f4e32b5d0c9bbfd5877f550fd42b994924b",
"claims": [
{
"id": "claim_9f166728e8ab4376a5da23e8b49d166d",
@@ -12,7 +12,7 @@
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:2a2bcccf7f6514fee0573fdd868c54bd98fa151a69e0eb4ae45f9b09fa2f956b"
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
},
@@ -67,6 +67,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:cba3a7b25399102a3dc8fd6a8803c805a21563cd3eec49c896beecc20840f84d",
"pageVersion": "sha256:1f74472fe60ef3963fee0dcf3fb7a78120097f664925842fc6db119dbd10d57f",
"claims": [
{
"id": "claim_3d431c8c7b804187a1ef5a7d9178c430",
@@ -75,6 +75,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
+4 -4
View File
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:1a4657f6bcb6994d787c4a157adc6dea712f0eb0512567400e87efceb803eb7c",
"pageVersion": "sha256:ec8e8d5b8e8eb8a6a6c62c8622e990c93c4d4916dafdd0383ab1cf9b0afd832d",
"claims": [
{
"id": "claim_83870f4f1ad6403ea0d8bd8775729a76",
@@ -16,7 +16,7 @@
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:2a2bcccf7f6514fee0573fdd868c54bd98fa151a69e0eb4ae45f9b09fa2f956b"
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
}
]
},
@@ -90,7 +90,7 @@
},
{
"resource": "repo://Termind.xcodeproj/project.pbxproj",
"version": "repo-file-v1:sha256:2a2bcccf7f6514fee0573fdd868c54bd98fa151a69e0eb4ae45f9b09fa2f956b"
"version": "repo-file-v1:sha256:7fd62e9ff166991e2fd7fc844e3b6b2b91905af211a8fe1fb910608731440746"
},
{
"resource": "repo://Termind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved",
@@ -125,6 +125,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:51:54.212Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:416fbd9177bec0bb843561f5c7a09dca5dc61360b7dec7cae14e42a7cc6addf5",
"pageVersion": "sha256:bd7994885ddcd011510eb224fbed0bdf195da9969a1fe0deabb54712a605aa8b",
"claims": [
{
"id": "claim_b7fbd64158554b8b8ca80a0a613b3bc3",
@@ -193,6 +193,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:280d89c1f4f2470dfcd630f23d2ab2a54dc8d48654a2788a54a6b70c99819b4e",
"pageVersion": "sha256:146cbb4c2b58db89dbdf99605f467384eeb85ed0178d8bfa572561e7706d284a",
"claims": [
{
"id": "claim_a66f64ff267243989e5b4bbc103576dd",
@@ -153,6 +153,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:43:23.140Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:2b0128ca266ea3932ea6870e24b62ecb94d6ac753f3e9b7d1861c2253e75d9f6",
"pageVersion": "sha256:b4c0e7af107add3b8e47f0bd7860a7fb943c86d958c1882aceccd45f34dd0fd4",
"claims": [
{
"id": "claim_dc6281a3ccb7415ea961d1a954248647",
@@ -241,6 +241,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T01:13:21.371Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:ac1d6af9add7224acf9b9b467bccfe03d9c9632a41e2912a092e0346161f2a3f",
"pageVersion": "sha256:4690819b1bd53a8522b263c35c5656b8be21347386f9273f20230b4f9f21c14b",
"claims": [
{
"id": "claim_5ca6241ea6cc4ebbb915ccbe304f8430",
@@ -423,6 +423,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:21:47.705Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"pageVersion": "sha256:bdb748dc4ba8eb5e1f311f8c6695e023e429c8d19fac4ed2443dac2bb50a8964",
"pageVersion": "sha256:de289b6e1e1e71bba3d5a3c274bc561e74dbd8732e2f57e0adbdb3e69f7a7fb2",
"claims": [
{
"id": "claim_69a9de4ce918417c8a44c6c87c9f6564",
@@ -167,6 +167,6 @@
],
"verification": {
"by": "openwiki/0.5.2",
"at": "2026-09-22T02:21:47.705Z"
"at": "2026-09-22T03:23:14.035Z"
}
}
+2 -2
View File
@@ -1,7 +1,7 @@
{
"updatedAt": "2026-09-22T03:08:43.734Z",
"updatedAt": "2026-09-22T03:47:43.182Z",
"command": "update",
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"model": "host-agent/omp",
"status": "complete",
"language": "en"
+137 -109
View File
@@ -2,172 +2,200 @@
"schemaVersion": 1,
"pages": {
"/openwiki/architecture/desktop-ui.md": {
"pageVersion": "sha256:d3b79d8cc51a720b38f06a1c8dc127782900a85f704bee57b59abaf8bf3f8d30",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:bb94da4e49901db707f0db54a47d7303c3a320729b5d4ccdf12b7a2a87a38d4f",
"completedBy": "omp",
"completedRunId": "a8323adb-a617-401f-bf5f-4dcc24de41b9",
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/architecture/engineering-invariants.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:af2a6bdb282660739034c16a2084d4badceb69466956e716e9f07108af38c0a7",
"pageVersion": "sha256:d955bf8ea7e79e305ab97b3b669217079fa7d038ed7599d3ee8210a283b936f8",
"completedBy": "codex",
"completedRunId": "9d891a43-76f9-45f6-8f19-3f5b61e8da37"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:f192be66f9909ddee1c5edc73e65579a9e460133180f71507dd445b65724e778",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/architecture/mobile-ui.md": {
"pageVersion": "sha256:a662291087c13d029a1df20ca0146d683e78704cee78016e30152e3701dcfe4c",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:ff129fd4d82995b518da4a70a87e87f8f3bf920a0f4425d866ba0f36aa86ec79",
"completedBy": "omp",
"completedRunId": "a8323adb-a617-401f-bf5f-4dcc24de41b9",
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/architecture/module-map.md": {
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:c740751a98fe7565940e6e626722edf984d736c49aba612260c8d8fb2ef94c56",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/architecture/native-app-directories.md": {
"pageVersion": "sha256:b80a3e4c39b80b3b1b701983db69b57bc48fa869ab0b4e6b6955c7150766f692",
"completedBy": "omp",
"completedRunId": "805ed659-4a16-4cbd-b7e1-db39328cb9c4",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6"
},
"/openwiki/architecture/platform-runtime.md": {
"pageVersion": "sha256:714b4eca157c6f95f4ef0792e6f173f13d9134413253216b19e74bc1fad3e833",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:bfdbf08838e9b40f4ef1ada0196cdae85e92b080be2cb4d313613cb70bf05086",
"completedBy": "omp",
"completedRunId": "a8323adb-a617-401f-bf5f-4dcc24de41b9",
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/architecture/shared-module-directories.md": {
"pageVersion": "sha256:d1599e833448b20031493f69c8c932476f7baf92aa01314913874144abcbae24",
"completedBy": "omp",
"completedRunId": "805ed659-4a16-4cbd-b7e1-db39328cb9c4",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6"
},
"/openwiki/architecture/supporting-system-directories.md": {
"pageVersion": "sha256:d571512d2bbb036fb97369a80a51af74729053b8d7d4164b178ba7b1e0919d80",
"completedBy": "omp",
"completedRunId": "805ed659-4a16-4cbd-b7e1-db39328cb9c4",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6"
},
"/openwiki/architecture/system-boundaries.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:94362b50650901920bd18fe05d872f1c1e750025fddb41c087321de376e741be",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:70a98befc109c68435ca90197485bbf234a8abb2fe0f39b53b8b1894a085f6df",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/concepts/agent-runtime-and-assistant.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:baefc5b1b6f7ed2483eb0b8055d380f8d7b24422271b2cceeed7367b3791874b",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:6ba8f89374ad018a257cf1c10e91f9d4b3641420f6187d07c8829858671948d1",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/concepts/commerce-localization-and-product-surfaces.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:af2a6bdb282660739034c16a2084d4badceb69466956e716e9f07108af38c0a7",
"pageVersion": "sha256:9fab0c6c44bd964238a9d403f45ab6c585521590be6c5cadce55824e5594a132",
"completedBy": "codex",
"completedRunId": "3f16943d-2591-409c-aacc-7a40162b1c5a"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:a1c9a480314b124cb096731918e3a208c7dab2e590e8c42bcfa94456f9440b9c",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/concepts/persistence-and-secrets.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:6ceee04608819d00be5701b025640cda218eada05658d907b7f42d29b2cc4e9a",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:267e44eb9900960e4bd0ccf4510939691311fcc1c28a28c29fbe3208abfb3182",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/concepts/remote-services-and-forwarding.md": {
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3",
"pageVersion": "sha256:10ea95f6fb5ea0feb5b5f8460c1c8c84091a3d340782befcf5566bda2d187362",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:e8db6dcac9048304c352ba94dabfb8b5085a83d1526e3ded743e49ba354dee43",
"completedBy": "omp",
"completedRunId": "90d9a42c-23ff-4e6c-bd6f-46d9565a59bc"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/concepts/shell-integration.md": {
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3",
"pageVersion": "sha256:3080e12d34f1ea00779670c9322ef8a881013cc0b9818b54ea393ff11c802b17",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:e27880aa34f40deedddffbc3737c872c8b3018d93003f868cd5fa14e7ddf78e0",
"completedBy": "omp",
"completedRunId": "90d9a42c-23ff-4e6c-bd6f-46d9565a59bc"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/concepts/ssh-multiplexing-and-scheduling.md": {
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3",
"pageVersion": "sha256:47c2d7e416b47c5104e7fa88cf33c353214d35e4e26759a0bff70dcbd3adda04",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:eedd08fcec41ac31b854d4f0375e28efcca4b20b1dfac2d25880b18421e8d199",
"completedBy": "omp",
"completedRunId": "90d9a42c-23ff-4e6c-bd6f-46d9565a59bc"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/concepts/ui-design-principles.md": {
"pageVersion": "sha256:d4f1f7d73a06d827f38ce7288a9b41c230491a7091ac8cc51be5f45c67272655",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:0ef048b57e0be46c11bece53519653eaa7e6e4106f7a43d19b73af10bf2d560a",
"completedBy": "omp",
"completedRunId": "a8323adb-a617-401f-bf5f-4dcc24de41b9",
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/integrations/mcp-server-and-bridge.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:1defa34289e2e145e7004bb2e383c3dcb89282051eeae2674e3a8914943d96e5",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:0dd44becda4b103f8f913c5fb5293ffc1b0a87287a43708514270a266cafd70a",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/operations/build-test-and-release.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:ba0b96e2c8c52703c9768ac9b1a46645de750dabda92b80924ceb42df95ccc44",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:0049d9723b546cae3375f18e49fc5c7fc515150d30a5a18e696c9fbb9120813f",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/operations/cloudkit-release-readiness.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:3d3f33ddbd0ae25c9b844013736d720c7b810ee44834462e85d00a617864556a",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:8fa646bfd9f2cd1c2640f78e4b35d4534f2e5ddaa4fe47ae59021930d50c50a5",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/operations/marketing-assets-and-app-icons.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:4b9fd6f22c64cf0d1a0bc5bb84b6564a5adb41d9e096bd5f2ef479e11566a065",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:e6a8ef81cbf7d5ffb6373e73605d753866c3eebed9436ce6cca2345caa77b629",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/operations/port-forwarding-benchmarks.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:6d64333d6440655b2663ee2802480187835c8ef6b24a2b99299bcf6521636723",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:7b9983afed4d964330e5d0357dbd1f4e32b5d0c9bbfd5877f550fd42b994924b",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/operations/storefront-commerce-release.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:cba3a7b25399102a3dc8fd6a8803c805a21563cd3eec49c896beecc20840f84d",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:1f74472fe60ef3963fee0dcf3fb7a78120097f664925842fc6db119dbd10d57f",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/quickstart.md": {
"pageVersion": "sha256:1a4657f6bcb6994d787c4a157adc6dea712f0eb0512567400e87efceb803eb7c",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:ec8e8d5b8e8eb8a6a6c62c8622e990c93c4d4916dafdd0383ab1cf9b0afd832d",
"completedBy": "omp",
"completedRunId": "a8323adb-a617-401f-bf5f-4dcc24de41b9",
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/testing/behavioral-boundaries-and-fixtures.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:416fbd9177bec0bb843561f5c7a09dca5dc61360b7dec7cae14e42a7cc6addf5",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:bd7994885ddcd011510eb224fbed0bdf195da9969a1fe0deabb54712a605aa8b",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/workflows/port-forwarding-pool-and-dispatch.md": {
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3",
"pageVersion": "sha256:280d89c1f4f2470dfcd630f23d2ab2a54dc8d48654a2788a54a6b70c99819b4e",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:146cbb4c2b58db89dbdf99605f467384eeb85ed0178d8bfa572561e7706d284a",
"completedBy": "omp",
"completedRunId": "90d9a42c-23ff-4e6c-bd6f-46d9565a59bc"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/workflows/settings-and-cloud-sync.md": {
"gitHead": "c8184c71249aceed74040582518e2e59f8e86b04",
"sourceFingerprint": "sha256:2dabea7464c088c4b7158248f32c211e1c15a2d731f94a1b71ef603c6de8e27c",
"pageVersion": "sha256:2b0128ca266ea3932ea6870e24b62ecb94d6ac753f3e9b7d1861c2253e75d9f6",
"completedBy": "codex",
"completedRunId": "c38e9577-d9ab-4c9b-aa03-fe351acada53"
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:b4c0e7af107add3b8e47f0bd7860a7fb943c86d958c1882aceccd45f34dd0fd4",
"completedBy": "omp",
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/workflows/sftp-transfer-and-external-edit.md": {
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3",
"pageVersion": "sha256:ac1d6af9add7224acf9b9b467bccfe03d9c9632a41e2912a092e0346161f2a3f",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:4690819b1bd53a8522b263c35c5656b8be21347386f9273f20230b4f9f21c14b",
"completedBy": "omp",
"completedRunId": "03c772f0-1f2f-46f6-b393-e32f369625e0"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
},
"/openwiki/workflows/ssh-session-lifecycle.md": {
"gitHead": "bddc07d2e3b0eb6dd05abbf2acab6f7ff2bb22d1",
"sourceFingerprint": "sha256:4869a4964de1bf177b90dc3f82240d72e710f5bffb10a0a71b41cbef7c2c81e3",
"pageVersion": "sha256:bdb748dc4ba8eb5e1f311f8c6695e023e429c8d19fac4ed2443dac2bb50a8964",
"gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e",
"sourceFingerprint": "sha256:8456f71ffdd978736ff6bf9aed042724573fd633b1d40f6d2b74fec0acb445f6",
"pageVersion": "sha256:de289b6e1e1e71bba3d5a3c274bc561e74dbd8732e2f57e0adbdb3e69f7a7fb2",
"completedBy": "omp",
"completedRunId": "03c772f0-1f2f-46f6-b393-e32f369625e0"
"completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38"
}
}
}
+1 -1
View File
@@ -5,7 +5,7 @@ description: "How the macOS app composes its native window shell, persistent wor
tags: [macos, tfm, ui, navigation, workspaces, swiftui, appkit, design]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:51:54.212Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-873894299539cce9a737a860
resource: repo://TFM/App/RootView.swift
@@ -5,7 +5,7 @@ description: Exhaustive architecture, ownership, lifecycle, security, persistenc
tags: [architecture, invariants, lifecycle, security, persistence, remote-sessions, agent, mobile]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:33:04.232Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
+4
View File
@@ -3,5 +3,9 @@
- [TFM Desktop UI Architecture](desktop-ui.md) - How the macOS app composes its native window shell, persistent workspace deck, split panes, management pages and Assistant surfaces, with explicit UI-state and runtime ownership.
- [Cross-Cutting Engineering Invariants](engineering-invariants.md) - Exhaustive architecture, ownership, lifecycle, security, persistence, remote-session, agent, sync, and mobile safety contracts that span Termind's specialized wiki pages.
- [TFI Mobile UI Architecture](mobile-ui.md) - 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.
- [Module and Directory Architecture Map](module-map.md) - A concise map of Termind's modules, second-level functional directories, build dependencies, and responsibility boundaries, with links to the detailed directory guides.
- [Native App Directory Responsibilities](native-app-directories.md) - Second-level directory responsibilities in TFM and TFI, including every feature area, platform adapters, reusable native UI, and the different window and scene ownership models.
- [Platform Runtime, App Composition, and Lifetimes](platform-runtime.md) - How Termind composes shared services and persistence on macOS and iOS, and where app-wide, window-local, scene-local, and session state begin and end.
- [Shared Framework Directory Responsibilities](shared-module-directories.md) - Functional directory responsibilities across Termind's six shared frameworks and shared resources, including flat-root concerns and how policy, persistence, transport, and presentation collaborate.
- [Supporting Products, Packages, and Tooling](supporting-system-directories.md) - Directory responsibilities and integration relationships for AgentKit, the MCP bridge, Live Activities, tests, benchmarks, the Astro site, marketing assets, scripts, and repository automation.
- [System Boundaries and Dependency Ownership](system-boundaries.md) - Static framework layers, platform composition roots, persistence ownership, and the external AgentKit boundary that keep Termind changes dependency-safe.
+1 -1
View File
@@ -5,7 +5,7 @@ description: "How the iPhone/iPad app composes registered feature stacks, scene-
tags: [ios, ipados, tfi, ui, navigation, adaptive-layout, swiftui, uikit]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:51:54.212Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-906678adb91c2fce2d3fcaed
resource: repo://TFI/App/MobileAppModel.swift
+139
View File
@@ -0,0 +1,139 @@
---
type: architecture map
title: Module and Directory Architecture Map
description: A concise map of Termind's modules, second-level functional directories, build dependencies, and responsibility boundaries, with links to the detailed directory guides.
tags: [architecture, modules, directories, dependencies, ownership]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-ed77bc20b48d193bace3dde6
resource: repo://.gitmodules
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
- id: openwiki-source-7f5c1cb6f348742514987bf8
resource: repo://Benchmarks/PortForwarding/main.swift
- id: openwiki-source-5f99e8af445e073ffe9bc257
resource: repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift
- id: openwiki-source-d593fb9c62c3736497a39486
resource: repo://Frameworks/TermindApplication/Transfers/RemoteFileSystem.swift
- id: openwiki-source-eaa9d39ab551840299164d96
resource: repo://Frameworks/TermindInfrastructure/Cloud/VaultSyncCoordinator.swift
- id: openwiki-source-d2d4c06f734241db3badc1f5
resource: repo://Frameworks/TermindRemoteInfrastructure/Agent/TermindAgentTools.swift
- id: openwiki-source-c4b6e224fdbea6dcd393344d
resource: repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferCoordinator.swift
- id: openwiki-source-cd0be716a2446029f345525a
resource: repo://Termind.xcodeproj/project.pbxproj
- id: openwiki-source-a62bfbbc7de13a894444718b
resource: repo://TermindMCPBridge/main.swift
- id: openwiki-source-906678adb91c2fce2d3fcaed
resource: repo://TFI/App/MobileAppModel.swift
- id: openwiki-source-e43a0da5ab77c2fc3554244d
resource: repo://TFI/App/MobileSceneModel.swift
- id: openwiki-source-d1ffd558b3360478aa85b5af
resource: repo://TFIWidgets/WorkspaceLiveActivity.swift
- id: openwiki-source-6570374eaac2e0278fa84640
resource: repo://TFM/App/TermindApp.swift
- id: openwiki-source-22b9fca540c3029c5ace451e
resource: repo://TFM/Features/Workspaces/WindowModel.swift
- id: openwiki-source-d3d065330c730839f5cc6112
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
- id: openwiki-source-0f8d0f9d08d6674698dd054c
resource: repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift
generated: { by: "omp", at: "2026-09-22T03:23:14.035Z" }
---
# Module and Directory Architecture Map
Termind has **two native apps and six shared frameworks**, not one framework per product feature. A feature such as SFTP crosses domain values, application policy, transport implementation, presentation, and native session ownership. Directory names describe responsibilities inside those layers; they are not necessarily independent build targets.
## Reading this map
The companion guides cover each module root and its functional children, including second-level directories such as `TFM/Features/SFTP`, `TFI/Application/Connections`, and `LandingPage/src/pages`. For frameworks, the module root is `Frameworks/Termind…`, not the enclosing `Frameworks` folder. Deeper functional divisions are included where useful. Flat modules are explicitly identified rather than assigned imaginary subdirectories. Repeated locale, device, and asset-catalog leaves are grouped.
| Guide | Scope |
| --- | --- |
| [Shared Framework Directory Responsibilities](shared-module-directories.md) | All six frameworks, every functional child directory, flat-root responsibilities, and shared resources. |
| [Native App Directory Responsibilities](native-app-directories.md) | Both apps, every feature directory, application/infrastructure subdirectories, native adapters, UI components, and resources. |
| [Supporting Products, Packages, and Tooling](supporting-system-directories.md) | AgentKit reference checkout, bridge, widgets, tests, benchmarks, website, assets, scripts, project metadata, and wiki automation. |
These are orientation guides, not replacements for [System Boundaries](system-boundaries.md) or [Engineering Invariants](engineering-invariants.md). Source locations and evidence are tracked in OpenWiki Claims; the tables intentionally describe directories rather than enumerate source files.
## Module owners
| Module or directory | Primary responsibility | Important distinction |
| --- | --- | --- |
| `Frameworks/TermindDomain` | Portable records, value types, parsing, and domain rules. | A Host or transfer record is not a live connection. |
| `Frameworks/TermindApplication` | Ports, use cases, observable feature models, connection policy, and Assistant coordination. | Defines/injects capabilities rather than constructing concrete storage or transports. |
| `Frameworks/TermindPersistence` | SwiftData models, historical schemas, migrations, stores, container factory, and GRDB-backed memory. | Owns stored representation, not a window or scene. |
| `Frameworks/TermindInfrastructure` | General concrete services: CloudKit, commerce, speech, logging, importers, and metrics parsing. | Separate from remote transport mechanics. |
| `Frameworks/TermindRemoteInfrastructure` | SSH/SFTP/Telnet, remote credentials, transfers, forwarding, sampling, and host-aware Agent tools. | Owns protocol machinery, not native interaction surfaces. |
| `Frameworks/TermindPresentation` | Reusable SwiftUI content, forms, formatting, transcript policy, and terminal appearance. | Does not own AppKit/UIKit surfaces or persistence. |
| `TFM` / `TFI` | Native composition, interaction, navigation, adapters, and runtime lifetimes. | macOS windows and mobile scenes are deliberately different owners. |
| `Frameworks/Resources` | Shared bundle assets, localization, model catalogs, and privacy metadata. | A resource group, not a seventh framework. |
| `AgentKit` | Reference checkout of the separately versioned, host-neutral agent package. | Xcode consumes the resolved remote package, not this checkout. |
| Supporting products | MCP stdio bridge, Live Activity extension, and standalone forwarding benchmark. | Different executable/extension boundaries, not app feature folders. |
## Shared-framework build dependencies
**Solid arrows mean “the source target directly depends on the destination target.”** This diagram shows the six shared Xcode targets only; external package products and app embedding are separate below. It is a build graph, not request order or data flow.
```mermaid
flowchart TB
Presentation["TermindPresentation"] --> Application["TermindApplication"]
Presentation --> Domain["TermindDomain"]
Remote["TermindRemoteInfrastructure"] --> Infrastructure["TermindInfrastructure"]
Remote --> Application
Remote --> Domain
Infrastructure --> Persistence["TermindPersistence"]
Infrastructure --> Application
Infrastructure --> Domain
Persistence --> Application
Persistence --> Domain
Application --> Domain
```
Both app targets directly depend on all six frameworks. The diagram also explains why Persistence is not interchangeable with general Infrastructure: Infrastructure can use Persistence, while Persistence must not depend on Infrastructure or Remote Infrastructure. Shared frameworks never depend on an app target.
## Product and package boundaries
Arrows here are **labeled relationships**, not a complete link graph. The shared-framework group expands into the graph above. AgentKit's package products are linked by multiple layers, including Domain, Application, Persistence, Remote Infrastructure, and app composition; the single package edge below groups those consumers rather than implying one exclusive entry point.
```mermaid
flowchart LR
Desktop["TFM / macOS"] -->|depends on| Shared["Six shared frameworks"]
Mobile["TFI / iPhone and iPad"] -->|depends on| Shared
Desktop -->|embeds executable| Bridge["termind-mcp"]
Mobile -->|embeds extension| Widget["TermindWidgets"]
Widget -->|depends on| Presentation["TermindPresentation"]
Activity["WorkspaceActivitySupport"] -.->|source compiled into both| Mobile
Activity -.->|source compiled into both| Widget
Package["Resolved AgentKit package products"] -.->|linked by owning consumers| Shared
Checkout["AgentKit reference checkout"] -.->|inspect separately; not an Xcode path dependency| Package
Benchmark["Port-forwarding benchmark"] -->|depends on| Remote["Remote Infrastructure + Application + Domain"]
```
The MCP bridge translates stdio requests into authenticated HTTP calls to the desktop server; it is not the server itself. The widget renders a bounded workspace summary; it does not establish SSH sessions. The benchmark is a standalone executable, not app startup logic or a test-host dependency.
## How responsibilities meet
| Task | Policy / data owner | Concrete mechanism | Native owner |
| --- | --- | --- | --- |
| Connect a terminal | Domain host/session values; Application route, trust, and retry policy. | Remote Infrastructure SSH or Telnet; desktop serial adapter for serial sessions. | Desktop session/pane or mobile workspace; native terminal surface. |
| Browse or transfer files | Domain remote-file values; Application remote-filesystem and edit model. | Remote Infrastructure SFTP channels, transfer scheduler, planners, and edit service. | Native browser, conflict UI, local file access, and Open With presentation. |
| Run an Assistant turn | Application conversation/execution coordination; AgentKit generic runtime. | Termind host tools in Remote Infrastructure; persistence and memory stores. | Native composer, approval/input presentation, transcript mounting, and navigation. |
| Edit and synchronize Vault data | Domain snapshots and mutations; Application library/use-case state. | Persistence local stores and journals; Infrastructure CloudKit coordinators; Keychain secret implementation. | Platform editors and app-level service assembly. |
| Display remote metrics | Domain metrics; Application sampling/snapshot interfaces and model. | Remote SSH sampler plus Infrastructure output parsers. | Native dashboards and desktop menu-bar integration. |
This split is also a placement rule: shared behavior belongs with its existing owner; native lifetime or platform API usage stays in the app. Similar names such as `Agent`, `Transfers`, `Terminal`, or `Metrics` in different modules do not imply duplicated responsibilities.
## State boundaries to keep in mind
- **Process-wide:** shared stores, service coordinators, and application models.
- **Desktop window:** navigation, workspace collection, pane selection, searches, and transcript caches.
- **Mobile scene:** navigation, selected workspace/conversation, and transient presentations; live workspace instances remain app-owned.
- **Session/workspace:** transport and terminal/browser runtime state. Disappearing views are not a general disconnect signal.
- **Durable storage:** metadata, histories, configuration, and separately governed memory; not live transports or transient credentials.
For lifetime diagrams, continue with [Native App Directory Responsibilities](native-app-directories.md) and [Platform Runtime](platform-runtime.md). For change-oriented navigation and verification, return to the [Engineering Quickstart](../quickstart.md).
@@ -0,0 +1,246 @@
---
type: architecture directory guide
title: Native App Directory Responsibilities
description: Second-level directory responsibilities in TFM and TFI, including every feature area, platform adapters, reusable native UI, and the different window and scene ownership models.
tags: [architecture, directories, macos, ios, ipados, navigation, lifecycle]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:45:03.442Z
sources:
- id: openwiki-source-c4b6e224fdbea6dcd393344d
resource: repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferCoordinator.swift
- id: openwiki-source-cd0be716a2446029f345525a
resource: repo://Termind.xcodeproj/project.pbxproj
- id: openwiki-source-e43a0da5ab77c2fc3554244d
resource: repo://TFI/App/MobileSceneModel.swift
- id: openwiki-source-83cf4f34941d19114f080a3a
resource: repo://TFI/Application/Connections/MobileWorkspaceConnectionServices.swift
- id: openwiki-source-deb061208994fd7d84d4f029
resource: repo://TFI/Application/Transfers/MobileSFTPChannelModel.swift
- id: openwiki-source-0368ecce931d0fb26fe8f35f
resource: repo://TFI/DesignSystem/MobileContentRegions.swift
- id: openwiki-source-d43ef236ba4bbb23d8dab797
resource: repo://TFI/Features/Assistant/MobileAssistantView.swift
- id: openwiki-source-e21fae39ef7af76f86acbff6
resource: repo://TFI/Features/Settings/MobileSettingsView.swift
- id: openwiki-source-17e754ff6e9f61a92b68cb8a
resource: repo://TFI/Features/Shell/MobileNavigation.swift
- id: openwiki-source-3f37062f55fb57a9f2e97f35
resource: repo://TFI/Features/Vault/MobileVaultView.swift
- id: openwiki-source-492f738896225c6b3acf7d2f
resource: repo://TFI/Features/Workspaces/MobileWorkspace.swift
- id: openwiki-source-350d4a794cfef67e406ddf9b
resource: repo://TFI/Infrastructure/MobileWorkspaceStore.swift
- id: openwiki-source-34542e0f07e1650e098824c7
resource: repo://TFI/Platform/MobileBackgroundController.swift
- id: openwiki-source-637644793f7e37cc057eb973
resource: repo://TFI/Platform/MobileLiveActivityController.swift
- id: openwiki-source-ce94d13059ea7e57a90adf59
resource: repo://TFI/Platform/MobileSFTPOpenWithPresenter.swift
- id: openwiki-source-ca0b3e6e839587396cdeaf54
resource: repo://TFI/Platform/MobileTerminalSurface.swift
- id: openwiki-source-6570374eaac2e0278fa84640
resource: repo://TFM/App/TermindApp.swift
- id: openwiki-source-8a6e94328a445c3566ef9d57
resource: repo://TFM/Application/MCPServer/MCPDownloadCoordinator.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-1d68a7282b3e48afbfe75c6f
resource: repo://TFM/Application/Repositories/ToolAuditRepository.swift
- id: openwiki-source-1bc9e5a8d0e790c70a371d60
resource: repo://TFM/Application/Serial/SerialPortService.swift
- id: openwiki-source-d35453512ef488d0cacdc06e
resource: repo://TFM/Features/Assistant/AssistantView.swift
- id: openwiki-source-cfe2a6b22338023c37a5b503
resource: repo://TFM/Features/Settings/SettingsPageView.swift
- id: openwiki-source-a93c339a06b550013d027e29
resource: repo://TFM/Features/SFTP/SFTPChannelModel.swift
- id: openwiki-source-07825e2cdc632a818b8c30ee
resource: repo://TFM/Features/Shell/WindowRoute.swift
- id: openwiki-source-7e796927b780e67cc73f6a5b
resource: repo://TFM/Features/Terminal/SSHSessionModel.swift
- id: openwiki-source-507cd94a8ae82f840ac8591f
resource: repo://TFM/Features/Vault/VaultView.swift
- id: openwiki-source-22b9fca540c3029c5ace451e
resource: repo://TFM/Features/Workspaces/WindowModel.swift
- id: openwiki-source-261f22416c57a70890569544
resource: repo://TFM/Infrastructure/Database/SwiftDataToolAuditRepository.swift
- id: openwiki-source-3cccceaeda63a663e84b5bfa
resource: repo://TFM/Infrastructure/MCP/MCPServerSession.swift
- id: openwiki-source-9d465cf017037915bf209e49
resource: repo://TFM/Infrastructure/Networking/LoopbackHTTPServer.swift
- id: openwiki-source-a0f4f642e37695357bc9150d
resource: repo://TFM/Infrastructure/Security/MCPServerTokenStore.swift
- id: openwiki-source-28f740582e7f32c1d0099069
resource: repo://TFM/Platform/MacOSSpeechAudioInput.swift
- id: openwiki-source-22e92f96394f292a731fc6fb
resource: repo://TFM/Platform/MainWindowCoordinator.swift
- id: openwiki-source-824d6a1342361bda8b3634b7
resource: repo://TFM/Platform/MetricsMenuBarController.swift
- id: openwiki-source-f6a967b4f14bf50d1af51b8b
resource: repo://TFM/UI/Managed/ManagedCardPage.swift
- id: openwiki-source-d3d065330c730839f5cc6112
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
generated: { by: "omp", at: "2026-09-22T03:45:03.442Z" }
---
# Native App Directory Responsibilities
`TFM` is the macOS app; `TFI` is the iPhone/iPad app. They reuse the [shared frameworks](shared-module-directories.md), but keep native interaction and lifetime decisions local. The tables below use paths **relative to the app root**. “Not present” means that directory does not exist on that platform, not necessarily that the user-facing capability is unavailable.
## Common top-level organization
| Directory | TFM responsibility | TFI responsibility |
| --- | --- | --- |
| `App` | Startup, dependency assembly, app-wide model, root window composition, commands, onboarding, reviews, MCP server control, and screenshot/demo setup. | Startup/dependencies, app-wide model, scene-local routes, registered destinations, root tabs/stacks, commands, reviews, and language migration. |
| `Application` | Desktop use cases, commands, audit/transfer models, external MCP operations, and serial-service contract. Root-level quick-connect parsing is also here. | Mobile Assistant coordination, editor models, injectable connection/metrics services, SFTP browser state, and workspace descriptors. |
| `Features` | Native product screens **and some runtime owners**, including windows, workspaces, and sessions. | Native screens plus the live workspace runtime. It is not merely a view folder. |
| `Infrastructure` | Desktop concrete adapters: persistence wiring, loopback HTTP/MCP, secrets, serial ports, imports, and transfers. | Live remote-service wiring and device-local workspace-intent storage. |
| `Platform` | AppKit/system integration: windows, appearance/relaunch, login items, shortcuts, menu-bar metrics, file opening/export, speech input, fonts, and input modality. | UIKit/system integration: app/scene delegate, background allowance, quick actions, Live Activities, camera, document handoff, terminal surface/drop handling, speech input, and fonts. |
| `Design` | Desktop tokens, status/tag components, and terminal-theme presentation. | Mobile tokens and tag-field styling. |
| `DesignSystem` | Connection presentation and menu-symbol helpers. | Available-content-region geometry, layout environment, and toolbar-placement environment. |
| `UI` | Reusable native interaction/rendering components, separate from feature-specific operations. | Reusable mobile lists, sheets, toolbars, input, drop handling, and cards. |
| `Resources` | App-specific icons and desktop assets. | App-specific icon assets. |
| Root metadata | App bundle configuration and entitlements. | App bundle configuration and entitlements. |
`App`, `Platform`, `Design`, and `DesignSystem` are currently flat source directories. Their multiple concerns are listed above rather than presented as nonexistent child folders.
## Application subdirectories
### TFM/Application
| Directory | Responsibility |
| --- | --- |
| Root files | Parse and represent quick-connect targets without executing an OpenSSH configuration or a shell. |
| `Commands` | Register desktop command identities/actions independently of the native menu surface. |
| `FeatureModels` | Assistant conversation commands, tool-audit and transfer libraries, desktop SSH-import behavior, and demo extensions. |
| `MCPServer` | External tool operations and upload/download workflows, including transfer tickets, readers, coordinators, and budgets. This is application policy, not the HTTP socket listener. |
| `Repositories` | Desktop tool-audit repository contract. |
| `Serial` | Serial-port service abstraction and injectable I/O capabilities. |
### TFI/Application
| Directory | Responsibility |
| --- | --- |
| `Agent` | App-owned Assistant execution/conversation services plus scene-specific Assistant selection models. |
| `Connections` | Injectable closures for opening SSH/SFTP and writing terminal data. Live implementations are supplied elsewhere. |
| `FeatureModels` | Host picking; key, MCP, provider, and skill editing; secret drafts; model discovery/probes; snippet operations. “Model tests” here means provider/model probing, not the app's unit-test target. |
| `Metrics` | Mobile monitoring state and injected sampling/connection services. |
| `Transfers` | SFTP browser/channel state and remote-file operations, distinct from the process-wide transfer queue. |
| `Workspaces` | Persistable connection-intent descriptors and connection-history coordination, not live terminal surfaces. |
The mobile service contracts can mention remote types, but do not construct the live transport implementation. Architecture checks prohibit UI and persistence imports in app Application directories; they do not make every platform-local type a portable shared-framework type.
## Feature subdirectories
Every current immediate child of either `Features` directory is included here.
| Directory | TFM | TFI |
| --- | --- | --- |
| `AI` | Conversation/composer pieces, command cards, Markdown rendering, native transcript rows/cache, attachments, and slash-command UI. | Composer, conversation/transcript cards, work rows, approval/input interaction, and slash-command panel. |
| `Assistant` | Full Assistant destination, compact contextual surface, and conversation-library presentation. | Assistant destination and conversation/library navigation over shared execution services. |
| `Commerce` | Pro paywall presentation. | Mobile Pro purchase presentation. |
| `ExternalRequests` | Feature-owned external authentication coordination and its dedicated window. | Not present; mobile features retain their own authentication UI. |
| `HostChooser` | Select hosts/connections for desktop actions. | Mobile connection picker. |
| `HostEditor` | Host connection and metadata editor. | Mobile host editor. |
| `Hosts` | Host management page, host actions, and group creation. | Not present as a separate directory; host management is composed into mobile Vault. |
| `Keychain` | Saved key/identity management and identity creation. | Credential list and key editor. These are metadata/editor surfaces, not the Keychain implementation. |
| `KnownHosts` | Saved server-trust management. | Mobile saved server-trust management. |
| `Metrics` | Overview/detail dashboards, responsive layouts, server details, and connection-journey presentation. | Mobile metrics dashboard and details. |
| `Ports` | Port-forwarding library and rule interaction. | Forwarding library and editor. The connection controller remains in Remote Infrastructure. |
| `QuickOpen` | Keyboard-oriented quick navigation/connection surface. | Not present. |
| `SFTP` | Browser, channel model, file context menus, and Open With menu. | Browser, remote text editor, edit preview, and browsing/download history. |
| `SSHImport` | Desktop SSH-config/key import preview and selection UI. | Not present. |
| `Settings` | App/terminal/sync settings, AI providers/models/roles, skills, MCP client/server setup, web search, developer options, and log-file management. | App/terminal/SFTP/sync settings, AI providers/models, remote MCP configuration, skills, and logging. No desktop loopback MCP-server setup surface. |
| `Shell` | Window destination/route and title values. | Mobile destination and navigation values. **Neither folder is the remote shell protocol implementation.** |
| `Sidebar` | Desktop Navigator/contextual Assistant/Snippets/History column. | Not present; mobile uses its registered tab/sidebar navigation shell. |
| `Snippets` | Snippet library and actions. | Mobile snippet library and actions. |
| `StatusBar` | Workspace status overlay and related interaction. | Not present as a separate directory. |
| `Terminal` | SSH, Telnet, and serial session models; persistent terminal surface; serial controls and placeholders. | Terminal keyboard, selection, history, snippets, and list presentation. Live connection ownership is in `Features/Workspaces`, while the native surface adapter is in `Platform`. |
| `Transfers` | Not present as a separate feature directory; transfer-library state is in `Application/FeatureModels`. | Transfer queue presentation and actions. |
| `Vault` | Vault routing/page state and list/detail workspace composition across managed resources. | Mobile Vault entry and resource-management composition. |
| `Workspaces` | Window/workspace/pane models, split layout, persistent deck, Navigator integration, templates, and empty panes. | Workspace runtime, workspace list/detail, and rename interaction. |
### Why similarly named areas stay separate
- **AI versus Assistant:** `AI` contains reusable conversation pieces; `Assistant` composes the product destination and navigation.
- **Shell versus Terminal:** `Shell` is navigation vocabulary; `Terminal` is terminal interaction/session presentation. Remote shell bootstrap and transport execution belong to the shared remote stack.
- **SFTP versus Transfers:** browsing/control state is not the scheduler or lifetime of a queued file operation.
- **Vault versus Hosts/Keychain/KnownHosts/Snippets/Ports:** Vault composes management destinations; specialized areas own resource-specific interaction.
- **Settings versus service models:** closing Settings must not end synchronization, metrics, forwarding, or transfer work.
## Infrastructure subdirectories
| TFM directory | Responsibility |
| --- | --- |
| `Database` | App-facing SwiftData adapters and convenience wiring for history/audit models. It uses Persistence-owned entities; it does not define a second model schema. |
| `Repositories` | Factories that connect feature/library models to persistent stores. |
| `MCP` | MCP protocol/session handling on top of the local HTTP transport. |
| `Networking` | Loopback HTTP listener and request/response transport. |
| `Security` | Desktop Keychain extensions, MCP bearer-token storage, and upload-token mechanics. |
| `SSH` | Production transfer-coordinator wiring using the desktop's remote services. |
| `SSHImport` | Desktop-specific SSH-import adapter extensions. |
| `Serial` | Concrete system serial-port implementation. |
| TFI directory | Responsibility |
| --- | --- |
| Root files | Store and migrate device-local workspace descriptors. Unreadable snapshots are preserved rather than overwritten with an empty collection. Credentials, commands, and live sessions are excluded. |
| `SSH` | Live implementations of the mobile workspace-connection and metrics-service contracts. |
## UI and resource subdirectories
| Directory | TFM | TFI |
| --- | --- | --- |
| `UI/Components` | Window chrome/toolbar, native context menus, hosted list rows, sidebar rows, chooser, onboarding coach marks, connection journey, single-line editing, and file-drop bridge. | Native lists, editor sheets, sheet policy, toolbar search/overflow, single-line input, connection journey, and drop payload/target helpers. |
| `UI/Managed` | Generic card-grid/page rendering, selection, marquee and reordering; resource pages provide business operations. | Adaptive managed cards, layouts, and reusable management presentation. |
| `Resources/AppIcon.icon` | Icon Composer document; its `Assets` child contains icon layers. | Icon Composer document; its `Assets` child contains icon layers. |
| `Resources/Assets.xcassets` | Desktop accent/menu-bar assets, including the `MenuBarIcon.imageset` leaf. | Not present; shared catalog assets are supplied by `Frameworks/Resources`. |
These components can reuse `TermindPresentation`, but native mounting, focus, drag/drop, AppKit/UIKit interaction, and platform layout policy remain app-owned.
## Composition and injection
**Solid arrows describe use or assembly; dashed arrows describe implementation/injection.** This is a representative collaboration pattern, not a claim that every feature follows an identical call stack.
```mermaid
flowchart TB
App["App / composition root"] -->|assembles| Concrete["Infrastructure + shared concrete services"]
App -->|creates and supplies services| Models["Application / feature models and ports"]
Features["Features / native screens and runtime owners"] -->|dispatches intent| Models
Features -->|renders with| UI["UI + Design + DesignSystem"]
Features -->|uses shared content| Presentation["TermindPresentation"]
Concrete -.->|implements injected capabilities| Models
Platform["Platform / native adapters"] -.->|supplies native capabilities| App
Models -->|uses policy and values| Shared["TermindApplication + TermindDomain"]
```
A dependency object supplies live/test alternatives; it does not itself become the lifetime owner of every object it creates. Some feature runtime owners legitimately retain remote services. The boundary tests prohibit direct concrete construction/storage access in feature code rather than pretending features contain only passive views.
## Runtime ownership: desktop is not mobile
**Solid arrows mean ownership; dashed arrows mean selection or access, not ownership.** This deliberately shows runtime state separately from directory containment.
```mermaid
flowchart TB
subgraph desktop["Desktop"]
MacApp["AppModel / shared services"]
Window["WindowModel / one per window"] --> Deck["Workspace collection and panes"]
Deck --> Sessions["SSH / Telnet / serial / SFTP runtime"]
Window --> LocalUI["Routes / queries / sidebar / transcript cache"]
Window -.->|uses| MacApp
end
subgraph mobile["Mobile"]
MobileApp["MobileAppModel"] --> Workspaces["Live MobileWorkspace instances"]
MobileApp --> Runs["Assistant execution and shared services"]
Scene["MobileSceneModel / one per scene"] --> Routes["Routes / selection / editor presentation"]
Scene -.->|selects| Workspaces
Scene -.->|accesses shared runs| Runs
end
desktop ~~~ mobile
```
Desktop destination switches park persistent workspace views; mobile route changes select retained runtime objects. Neither is equivalent to closing a connection. Mobile background expiration is a separate app-level boundary, and persisted workspace descriptors restore connection intent rather than authenticated transports.
For mechanisms and tests, continue with [Desktop UI](desktop-ui.md), [Mobile UI](mobile-ui.md), and [Platform Runtime](platform-runtime.md). `ArchitectureBoundaryTests` checks placement; window/sidebar tests, mobile scene/workspace tests, and adaptive-layout tests protect behavior. Return to the [Module Map](module-map.md) for the full dependency picture.
+3 -3
View File
@@ -3,9 +3,6 @@ type: architecture
title: Platform Runtime, App Composition, and Lifetimes
description: How Termind composes shared services and persistence on macOS and iOS, and where app-wide, window-local, scene-local, and session state begin and end.
tags: [architecture, runtime, macos, ios, lifecycle, dependency-injection]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:51:54.212Z
sources:
- id: openwiki-source-cd0be716a2446029f345525a
resource: repo://Termind.xcodeproj/project.pbxproj
@@ -36,6 +33,9 @@ sources:
- id: openwiki-source-531f6567ecf96fd4b0c5e97a
resource: repo://TFMTests/ExternalConnectionURLTests.swift
generated: { by: "omp", at: "2026-09-22T02:51:54.212Z" }
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:23:14.035Z
---
# Platform Runtime, App Composition, and Lifetimes
@@ -0,0 +1,266 @@
---
type: architecture directory guide
title: Shared Framework Directory Responsibilities
description: Functional directory responsibilities across Termind's six shared frameworks and shared resources, including flat-root concerns and how policy, persistence, transport, and presentation collaborate.
tags: [architecture, directories, frameworks, domain, persistence, presentation, ssh]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:45:03.442Z
sources:
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
- id: openwiki-source-96ab247f0823a449c632fdd9
resource: repo://Frameworks/Resources/LinuxDistributionIcons.json
- id: openwiki-source-9f18104a9eafdddd0b6ca08a
resource: repo://Frameworks/Resources/LinuxDistributionIcons/SimpleIcons.DISCLAIMER.md
- id: openwiki-source-859ed729b25c47286f7d5a83
resource: repo://Frameworks/Resources/PrivacyInfo.xcprivacy
- id: openwiki-source-5f99e8af445e073ffe9bc257
resource: repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift
- id: openwiki-source-cb178f0d078ab3218679c80e
resource: repo://Frameworks/TermindApplication/Connections/RemoteSessionConnectionController.swift
- id: openwiki-source-4143deeb06ebc3198de62e2b
resource: repo://Frameworks/TermindApplication/FeatureModels/HostLibraryModel.swift
- id: openwiki-source-ced5c103bc80a375eeb8bcef
resource: repo://Frameworks/TermindApplication/Repositories/VaultStore.swift
- id: openwiki-source-d593fb9c62c3736497a39486
resource: repo://Frameworks/TermindApplication/Transfers/RemoteFileSystem.swift
- id: openwiki-source-f402125a513db26af8c36b3e
resource: repo://Frameworks/TermindDomain/Credentials/Identity.swift
- id: openwiki-source-9bd2b93db78747d6956c2405
resource: repo://Frameworks/TermindDomain/Hosts/Host.swift
- id: openwiki-source-3626532038772ef56874c17e
resource: repo://Frameworks/TermindDomain/Shell/CommandRiskEngine.swift
- id: openwiki-source-342a31db9c80b2ac86cc1442
resource: repo://Frameworks/TermindDomain/Transfers/SFTPTransfer.swift
- id: openwiki-source-96fe5b8bf5e51592ac0ec550
resource: repo://Frameworks/TermindDomain/Workspaces/WorkspaceTemplate.swift
- id: openwiki-source-4b9f58eec58128055ac58b6f
resource: repo://Frameworks/TermindInfrastructure/Agent/ContextAttachmentImporter.swift
- id: openwiki-source-3effdff7f6b04e2a66d8f651
resource: repo://Frameworks/TermindInfrastructure/Cloud/MetricsSyncCoordinator.swift
- id: openwiki-source-04ef2b2f02773f8833db9a8b
resource: repo://Frameworks/TermindInfrastructure/Cloud/SettingsSyncCoordinator.swift
- id: openwiki-source-eaa9d39ab551840299164d96
resource: repo://Frameworks/TermindInfrastructure/Cloud/VaultSyncCoordinator.swift
- id: openwiki-source-3aa42bdd0f8eaf866f06599f
resource: repo://Frameworks/TermindInfrastructure/Commerce/ProAccessController.swift
- id: openwiki-source-ce0d1bf07660ad90431b6a2a
resource: repo://Frameworks/TermindInfrastructure/LinuxMetricsParser.swift
- id: openwiki-source-b2e6667d1d47df09577b9b52
resource: repo://Frameworks/TermindInfrastructure/Logging/LaunchFileLogService.swift
- id: openwiki-source-f18e361c4458ef5e475b60b6
resource: repo://Frameworks/TermindInfrastructure/Speech/AppleSpeechTranscriptionService.swift
- id: openwiki-source-ec0a64adad50721ec500ebc2
resource: repo://Frameworks/TermindPersistence/AISecretStore.swift
- id: openwiki-source-e14697ea11a99078be3adee9
resource: repo://Frameworks/TermindPersistence/GRDBMemoryStore.swift
- id: openwiki-source-7a9c6d90cba4ebd1d1398673
resource: repo://Frameworks/TermindPersistence/TermindPersistence.swift
- id: openwiki-source-2c20dfd15c3c8143bab58304
resource: repo://Frameworks/TermindPresentation/AssistantTranscriptPresentationState.swift
- id: openwiki-source-a9bb60a9c9cb331432c4de08
resource: repo://Frameworks/TermindPresentation/IdentityFormSections.swift
- id: openwiki-source-9f84e62524d638f4155e0c76
resource: repo://Frameworks/TermindPresentation/LinuxDistributionIconCatalog.swift
- id: openwiki-source-89c20ee8e0b6b93533722c5a
resource: repo://Frameworks/TermindPresentation/SFTP/RemoteFile%2BPresentation.swift
- id: openwiki-source-8185a608f0b79f1af097efbd
resource: repo://Frameworks/TermindPresentation/Terminal/TerminalAppearance.swift
- id: openwiki-source-d2d4c06f734241db3badc1f5
resource: repo://Frameworks/TermindRemoteInfrastructure/Agent/TermindAgentTools.swift
- id: openwiki-source-6f8db123d550d9a8718c172c
resource: repo://Frameworks/TermindRemoteInfrastructure/Security/KeychainSecretStore.swift
- id: openwiki-source-9c5b1553c1819d34c34b714b
resource: repo://Frameworks/TermindRemoteInfrastructure/Security/SecureEnclaveKey.swift
- id: openwiki-source-e980c605b1828a2d960bfd5e
resource: repo://Frameworks/TermindRemoteInfrastructure/SSH/SSHConnection.swift
- id: openwiki-source-d371db64770fd2fcc301086b
resource: repo://Frameworks/TermindRemoteInfrastructure/SSH/SSHMaxSessionsPolicy.swift
- id: openwiki-source-7d9f0c3ee94cd4060d5507d8
resource: repo://Frameworks/TermindRemoteInfrastructure/SSHImport/SSHImportReader.swift
- id: openwiki-source-1f7380cad037b68eb1bec322
resource: repo://Frameworks/TermindRemoteInfrastructure/Telnet/TelnetConnection.swift
- id: openwiki-source-b9bae3a52f35a3a412f81e10
resource: repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPConcurrencyScheduler.swift
- id: openwiki-source-79d8ded739aa8dd4fa3f5cdf
resource: repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPEditService.swift
- id: openwiki-source-b347308e8c5cc6c0b0d29b7d
resource: repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferContext.swift
- id: openwiki-source-c4b6e224fdbea6dcd393344d
resource: repo://Frameworks/TermindRemoteInfrastructure/Transfers/SFTPTransferCoordinator.swift
- id: openwiki-source-cd0be716a2446029f345525a
resource: repo://Termind.xcodeproj/project.pbxproj
- id: openwiki-source-d3d065330c730839f5cc6112
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
generated: { by: "omp", at: "2026-09-22T03:45:03.442Z" }
---
# Shared Framework Directory Responsibilities
The six module roots live under `Frameworks`. Paths in each table are **relative to the named framework root**. All current functional child directories are covered; these modules mostly stop at that level. Persistence is flat, while Presentation and Application also contain substantial root-level functionality. The “root files” rows are real responsibilities, not proposed folders.
See the [Module Map](module-map.md) for build dependencies and [Native App Directories](native-app-directories.md) for the app-owned halves of these features.
## TermindDomain — values and rules
Domain describes what the system means, not how a database, socket, or native view implements it. Its directory names denote portable concepts.
| Directory | Responsibility |
| --- | --- |
| Root files | Shared saved-name normalization/defaulting and tag-color values. |
| `AI` | Model/provider form values, API-type selection, and model-editing rules. |
| `Agent` | External tool-call audit values; the generic agent loop remains in AgentKit. |
| `Commerce` | Pro feature and entitlement/access value types. |
| `Connections` | Connection history, forwarding rules, charsets, SSH preferences/host-key identity, and temporary serial configuration. |
| `Credentials` | Identity/key references, SSH key algorithm display values, and user-certificate parsing/validation. Not secret storage. |
| `Events` | Durable outbox-job values. |
| `Hosts` | Host/group metadata, protocol capabilities, deletion descriptions, detected distributions, shell-integration preference, and Known Hosts matching. |
| `Metrics` | Server, process, filesystem, and synchronization value types plus typed read failures. |
| `SSHImport` | Parse SSH configuration/import text into previewable records; parsing does not execute the configuration. |
| `Sessions` | Session context, remote-system/shell events, terminal preferences/custom configuration, local font preferences, Find values, and palette. |
| `Settings` | Settings-sync records and synchronization policy values. |
| `Shell` | Command history, shell syntax/quoting, remote command construction, and command-risk classification/rules. |
| `Snippets` | Snippet/package values and editing rules. |
| `Transfers` | Remote file/path values, permission drafts, SFTP preferences/history, and transfer state records. |
| `Vault` | Vault snapshots, record keys, mutations, and synchronization values. |
| `Workspaces` | Saved workspace-template structure, including pane/split configuration rather than running sessions. |
**Boundary:** a secret reference is not the secret, a transfer record is not its worker, and a workspace template is not an authenticated runtime. Domain imports are constrained by architecture tests so these values do not acquire UI, storage, or transport implementation dependencies.
## TermindApplication — ports, coordination, and feature state
Application depends on Domain and AgentKit abstractions. It exposes the capabilities that concrete adapters implement and the state/operations both apps can reuse.
| Directory | Responsibility |
| --- | --- |
| Root files | Host/Vault/AI/skill/memory/preferences persistence ports; secret-store interfaces and in-memory helpers; SSH/Telnet requests, route/proxy/secret types; reconnect policy; language/settings keys and draft merging. |
| `Agent` | Conversation/composer/library state, Assistant execution assembly, title/command generation, attachments, slash commands, tool approval/presentation policy, and memory-indexed repository wrapping. It coordinates AgentKit rather than replacing its loop. |
| `Connections` | Route preparation and snapshots, external connection URLs, connection journeys, trust/MFA prompts, shared retry state, session host-store boundary, and plans for applying remote Vault changes. |
| `Events` | Outbox store contract, retry runner, and host-deletion handlers. |
| `FeatureModels` | Observable libraries/editing policy for hosts, credentials, Known Hosts, snippets, forwarding, histories, AI, skills, memory, SSH import, settings, expansion state, and review prompting. |
| `Logging` | Application log-management contract and disabled logging support. |
| `Metrics` | Sampling clock, snapshots/read interface, and shared server-monitoring model. |
| `Repositories` | History repository contracts, SSH-import batch/reader boundary, and Vault load/save/transaction coordination. |
| `Speech` | Speech-transcription service/events and coordination contract. Native microphone capture remains injected. |
| `Terminal` | Shared terminal Find controller; the native terminal view is not here. |
| `Transfers` | Remote-filesystem port and basic file operations, remote-edit model, and workspace upload-notice state. Bulk scheduling belongs to Remote Infrastructure. |
`HostLibraryModel` is broader than its name: it projects hosts, groups, identities, keys, snippets, forwarding rules, transfers, Known Hosts, and templates. Specialized feature models provide narrower operations over that shared data. Live connection status is kept separate from the saved Host values.
## TermindPersistence — one stored-model owner
This module currently has **no functional subdirectories**. Its root spans several concerns; the rows below are responsibility groups, not physical folders.
| Root-level responsibility group | What it owns |
| --- | --- |
| Schema and migration | Current SwiftData schema, frozen historical representations, migration plan, and the sole shared container factory. |
| Vault and histories | Persistent Host/credential metadata and related Vault records; command, connection, and SFTP history repositories. |
| AI, Agent, skills, and audit | Provider/configuration records, agent-run/message replay, tool-audit storage, skill packages, and persistence redaction. |
| Preferences and sync journals | SSH/SFTP/terminal settings, metrics/settings/Vault local stores, mutation journals, and sync-facing persistence adapters. |
| Secret metadata/adapters | AI secret references and storage policy bridged to the injected Keychain service; not a plaintext secret database. |
| Memory | Actor-owned GRDB/SQLite memory state, conversation snapshots, session/message indexing, and full-text search. This is distinct from SwiftData's model container. |
The container factory selects the complete versioned schema and migration plan; platform roots choose its location and lifetime. It disables automatic SwiftData CloudKit storage because the explicit CloudKit coordinators use their own records and journals. No app feature or general infrastructure module may introduce a competing `@Model` owner.
Details: [Persistent Data, Migrations, and Secrets](../concepts/persistence-and-secrets.md).
## TermindInfrastructure — general concrete services
| Directory | Responsibility |
| --- | --- |
| Root files | In-memory host repository; Linux filesystem/process/server and NVIDIA metrics parsing; provider service-account file handling; skill-package import. Parsers do not own an SSH session. |
| `Agent` | Read/import context attachments and provide the live attachment-loading adapter. Host-executing tools belong to Remote Infrastructure instead. |
| `Cloud` | Shared CloudKit lifecycle/record coding and separate Vault, Settings, and Metrics sync coordinators using Persistence stores/journals. |
| `Commerce` | StoreKit products, entitlement refresh, purchase/restore flows, transaction observation, and Pro access state. |
| `Logging` | Launch-scoped file logging and log-file lifecycle. |
| `Speech` | Apple speech-recognition implementation plus an audio-input abstraction; each app supplies its native audio capture. |
This layer can use Persistence. It does not depend on either native app, and a CloudKit coordinator is not a screen-level settings model.
## TermindRemoteInfrastructure — protocol and remote-operation machinery
| Directory | Responsibility |
| --- | --- |
| `Agent` | Host resolution and connection/authentication pools, background commands, SSH/SFTP/metrics/scratch-transfer tools, and registration/presenters alongside AgentKit built-ins. |
| `Logging` | Remote-service logging helpers and sanitization-facing formatting. |
| `SSH` | Socket/proxy/jump routing, handshake/authentication, libssh2 ownership and I/O scheduling, exec/PTY/SFTP channels, charset conversion, session-channel limits, metrics sampling, and forwarding pools/controllers. |
| `SSHImport` | Concrete SSH config/key-file reading, staging, and validated import access. Parsing rules live in Domain; import use cases live in Application. |
| `Security` | Keychain secret storage, Secure Enclave operations, and software key-file import. These mechanisms implement the higher-level secret/authentication boundaries. |
| `Telnet` | Telnet transport and negotiation, separate from SSH/SFTP capabilities. |
| `Transfers` | SFTP data-operation admission, per-session transfer contexts, upload/download/copy planning, streaming, conflict handling, resume state, rename operations, and external-edit local files/observation/upload lifecycle. |
`SSH` has multiple responsibilities because it is the protocol boundary, not just a terminal client. `Transfers` builds file-operation lifecycles on top of that boundary. **A logical file permit, an SSH session-channel lease, and a physical connection are different resources.**
The following diagram shows **collaboration**, not target dependencies. A solid arrow means “requests or uses”; a dashed arrow means an injected callback/result relationship. It summarizes representative paths without claiming all features share one live transport.
```mermaid
flowchart TB
Native["Native session / browser / Assistant owner"] --> Policy["Application / connection and feature policy"]
Native --> Transfer["Remote / Transfers"]
Assistant["Application / Agent execution"] --> Runtime["AgentKit runtime and registry"]
Runtime --> Tools["Remote / Agent host tools"]
Tools --> Transfer
Tools --> SSH["Remote / SSH channels and connections"]
Transfer --> SSH
Policy -.->|prepared request and feature-owned decisions| SSH
SSH --> Security["Remote / Security"]
SSH --> Host["Remote host"]
SSH -.->|progress and challenges| Native
Metrics["Remote / SSH metrics sampler"] --> SSH
Metrics --> Parsers["Infrastructure / metrics parsers"]
Parsers -.->|domain snapshots| Monitor["Application / Metrics"]
```
Keep trust/authentication interaction with the initiating feature. Additional silent connections and queued operations have different permissions and retirement rules from a user's interactive terminal. See [SSH Lifecycle](../workflows/ssh-session-lifecycle.md), [SSH Multiplexing and Scheduling](../concepts/ssh-multiplexing-and-scheduling.md), [SFTP Workflow](../workflows/sftp-transfer-and-external-edit.md), and [Assistant Runtime](../concepts/agent-runtime-and-assistant.md).
## TermindPresentation — shared content without native ownership
| Directory | Responsibility |
| --- | --- |
| Root files | SwiftUI forms and presentation values for hosts, identities, secrets, trust, connection journeys, forwarding, snippets, providers/models, skills, memory and sync; metrics panels/formatting; Assistant transcript/tool details and disclosure state; Markdown parsing and small input/drop/speech helpers. |
| `SFTP` | Remote-file type/icon/size presentation, transfer status formatting, SFTP settings fields, and edit-upload overlays. |
| `Terminal` | Terminal appearance/theme mapping and font-selection/settings content. Actual font discovery and native terminal mounting remain app-owned. |
Reusable content is not a shared screen controller. In particular, transcript presentation state does not own the Agent runtime, terminal appearance does not own a PTY, and an identity form does not access Keychain directly. Architecture tests prohibit native AppKit/UIKit, persistence, and remote-infrastructure dependencies here.
Details: [UI Design Principles](../concepts/ui-design-principles.md).
## Frameworks/Resources — bundle data, not code ownership
| Directory or root-level group | Responsibility |
| --- | --- |
| Root catalogs and metadata | App text and bundle-metadata localization; privacy manifest; model catalog snapshot/overrides and associated license; Linux-distribution icon mapping. |
| `Assets.xcassets/AccentColor.colorset` | Shared accent-color asset. |
| `Assets.xcassets/LinuxDistributions` | Distribution-specific `LinuxDistro-*.imageset` assets used by host/system presentation. |
| `LinuxDistributionIcons` | Upstream icon license and disclaimer material, separate from the actual image sets. |
Shared resources are compiled into product bundles; platform-specific icons stay in the apps. Resource consumers such as distribution icons and model catalogs should not create a new dependency on an app target. App localization and AgentKit localization have separate ownership.
## Cross-layer flow: edit, persist, synchronize, render
**Solid arrows describe the main action/data flow; the dashed arrow is the separately injected secret-storage path.** This is not an automatic SwiftData-to-CloudKit relationship.
```mermaid
flowchart TB
Editor["Native editor + shared form content"] --> Model["Application / feature model"]
Model --> Port["Application / persistence port"]
Port --> Store["Persistence / local store and journal"]
Store --> Sync["Infrastructure / Cloud coordinator"]
Sync --> Cloud["CloudKit records"]
Cloud --> Sync
Sync --> Projection["Updated application projection"]
Projection --> Editor
Model -.->|secret reference operations| Secrets["Remote / Security Keychain implementation"]
```
The editor owns interaction, the model owns the operation, Persistence owns stored representation, and the coordinator owns synchronization lifecycle. Secret bytes follow their separate storage policy; they do not become ordinary Vault/Settings record payloads.
## Verification seams
- `ArchitectureBoundaryTests`: import direction, feature construction boundaries, and single SwiftData-model ownership.
- `FrameworkTests`: portable model/policy, persistence compatibility, sync, presentation, and shared-service behavior.
- Remote/session/transfer suites: transport, authentication, admission, cancellation, and recovery semantics.
- Native test targets: screen routing, runtime lifetimes, and platform integration; those contracts are not proven by shared value tests alone.
Return to the [Module Map](module-map.md) for ownership choices or the [Engineering Quickstart](../quickstart.md) for task-specific validation.
@@ -0,0 +1,250 @@
---
type: architecture directory guide
title: Supporting Products, Packages, and Tooling
description: Directory responsibilities and integration relationships for AgentKit, the MCP bridge, Live Activities, tests, benchmarks, the Astro site, marketing assets, scripts, and repository automation.
tags: [architecture, directories, agentkit, mcp, widgets, testing, website, tooling]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:45:03.442Z
sources:
- id: openwiki-source-6d4b4e707b8d60b6ccfa3425
resource: repo://.github/workflows/openwiki-update.yml
- id: openwiki-source-ed77bc20b48d193bace3dde6
resource: repo://.gitmodules
- id: openwiki-source-82dc2a330fa464405febe5a2
resource: repo://AgentKit/Package.swift
- id: openwiki-source-7d407889e0fdf98a8da45d51
resource: repo://AgentKit/Scripts/build-localizations.sh
- id: openwiki-source-a8f2957ebda6de083a5e705b
resource: repo://AgentKit/Sources/AgentKit/MCP/MCPClient.swift
- id: openwiki-source-0e8cfe7d74554d8a17af60b7
resource: repo://AgentKit/Sources/AgentKit/Runtime/AgentRuntime.swift
- id: openwiki-source-1b7f4621a0a6d022a3b65b1b
resource: repo://AgentKit/Sources/AgentKit/Security/AgentSecurity.swift
- id: openwiki-source-b3c829b218957268073c0f43
resource: repo://AgentKit/Sources/AgentKit/Tools/AgentToolCatalog.swift
- id: openwiki-source-437ae5db92ccf61cdbffc8e9
resource: repo://AgentKit/Sources/AgentKitScrubber/ScrubberWebClient.swift
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
- id: openwiki-source-7f5c1cb6f348742514987bf8
resource: repo://Benchmarks/PortForwarding/main.swift
- id: openwiki-source-ea04d3d10088e2d554646adf
resource: repo://Design/Brand/README.md
- id: openwiki-source-d2d4c06f734241db3badc1f5
resource: repo://Frameworks/TermindRemoteInfrastructure/Agent/TermindAgentTools.swift
- id: openwiki-source-581eed02dfaf161420cc4d9d
resource: repo://FrameworkTests/Fixtures/README.md
- id: openwiki-source-103853faf6b28763354a1c79
resource: repo://LandingPage/package.json
- id: openwiki-source-f894c24280d3caaaf2b6dcdf
resource: repo://LandingPage/src/components/ScreenshotPicture.astro
- id: openwiki-source-d2984266929be0fa570924e0
resource: repo://LandingPage/src/layouts/BaseLayout.astro
- id: openwiki-source-dde6f9f425dc38df06be00d6
resource: repo://LandingPage/src/lib/i18n.ts
- id: openwiki-source-554fe71f1ba6efebee0d020c
resource: repo://LandingPage/src/lib/marketingImages.ts
- id: openwiki-source-af8475d091e6a266ad69723f
resource: repo://LandingPage/src/pages/zh/index.astro
- id: openwiki-source-446ef49ac8edac86b5511fe5
resource: repo://Marketing/README.md
- id: openwiki-source-41a7ded3800c9422f058a3ef
resource: repo://Scripts/check-zh-localization.sh
- id: openwiki-source-a90133154199a9c011127920
resource: repo://Scripts/Tests/test_bump_version.py
- id: openwiki-source-a1213a08e73ca7ac095748f3
resource: repo://Scripts/Tests/test_port_forwarding_benchmark.py
- id: openwiki-source-66092b0aa632065907bc7606
resource: repo://Scripts/update-linux-distribution-icons.sh
- id: openwiki-source-2241f95e71114ed235d89f10
resource: repo://Scripts/update-pi-model-catalog.sh
- id: openwiki-source-cd0be716a2446029f345525a
resource: repo://Termind.xcodeproj/project.pbxproj
- id: openwiki-source-105d05d558f14996921a83f6
resource: repo://Termind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
- id: openwiki-source-60081fe11e88625a130dd44c
resource: repo://Termind.xcodeproj/xcshareddata/xcschemes/TFM.xcscheme
- id: openwiki-source-a62bfbbc7de13a894444718b
resource: repo://TermindMCPBridge/main.swift
- id: openwiki-source-637644793f7e37cc057eb973
resource: repo://TFI/Platform/MobileLiveActivityController.swift
- id: openwiki-source-d1ffd558b3360478aa85b5af
resource: repo://TFIWidgets/WorkspaceLiveActivity.swift
- id: openwiki-source-76b1cdca4a02038756187f92
resource: repo://TFM/Application/MCPServer/MCPServerTools.swift
- id: openwiki-source-3cccceaeda63a663e84b5bfa
resource: repo://TFM/Infrastructure/MCP/MCPServerSession.swift
- id: openwiki-source-9d465cf017037915bf209e49
resource: repo://TFM/Infrastructure/Networking/LoopbackHTTPServer.swift
- id: openwiki-source-d3d065330c730839f5cc6112
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
- id: openwiki-source-0f8d0f9d08d6674698dd054c
resource: repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift
generated: { by: "omp", at: "2026-09-22T03:45:03.442Z" }
---
# Supporting Products, Packages, and Tooling
Not every top-level directory is an app module. This guide distinguishes separately built products, a package reference checkout, source-sharing groups, test targets, and development assets. It complements [Shared Framework Directories](shared-module-directories.md) and [Native App Directories](native-app-directories.md).
## AgentKit — separately versioned package
The repository includes an `AgentKit` Git submodule as a reference checkout. **The Xcode project still declares a remote, versioned Swift package**, with its actual revision recorded in the resolved dependency graph. Neither this checkout nor the sibling development repository automatically overrides that dependency.
The directory table describes the checked-out package's organization, not a guarantee that a future checkout and the app's resolved package revision are identical.
| Directory, relative to AgentKit | Responsibility |
| --- | --- |
| `Sources/AgentKit` | Dependency-free core product: host-neutral runtime, model-provider integration, tool contracts, security, and services. Its functional children are expanded below. |
| `Sources/AgentKitScrubber` | Optional ScrubberKit-backed web fetch/search adapter; kept out of the core product's dependency graph. |
| `Tests/AgentKitTests` | Package-level runtime, tools, security, provider, MCP, localization, and other behavioral tests. |
| `Localizations` | Authoring catalog for package-owned English and Chinese text. |
| `Scripts` | Localization compilation and Chinese-catalog validation. This directory is flat. |
| `Sources/AgentKit/Resources` | Generated runtime localization resources in `en.lproj`, `zh-Hans.lproj`, and `zh-Hant.lproj`. |
### Core product functional directories
Paths below are relative to `AgentKit/Sources/AgentKit`.
| Directory | Responsibility |
| --- | --- |
| `Core` | Agent/message/run values, localization access, memory and skill/package concepts. |
| `Runtime` | Turn loop/driver, event delivery, context building/estimation/compaction, streaming/pacing, tool execution/scheduling, run-persistence contract, and loop hooks. |
| `Providers` | Provider/model configuration, discovery/capabilities, authentication/networking, request encoding, response/stream decoding, and tool-name adaptation. |
| `Security` | Secret handles/lifecycle, redaction, approvals/security policy, and Guardian evaluation/session state. |
| `Services` | Conversation-title generation and memory-learning services over runtime/provider capabilities. |
| `MCP` | MCP client transport/protocol and configured-server values. This is not Termind's desktop HTTP server. |
| `Tools` | Tool/schema/argument contracts, validation, catalog/registry, output/detail presentation values, and injected services. |
| `Tools/MCP` | Adapt tools advertised by configured MCP servers into agent tools. |
| `Tools/BuiltIn/Plan` | Planning and task-management tools. |
| `Tools/BuiltIn/Scratch` | Scoped scratch workspace and local file/diff tools. |
| `Tools/BuiltIn/Skills` | Skill/package installation and file access, knowledge presentation, memory and session-search tools. |
| `Tools/BuiltIn/UserInput` | User-input and secret-request tools routed through run interaction handlers. |
| `Tools/BuiltIn/Web` | Web-fetch/search tools and injectable web capabilities. |
| `Resources` | Compiled package-local strings and plural resources; not app-bundle localization ownership. |
Termind adds host-specific tools through `TermindRemoteInfrastructure/Agent`. SSH, SFTP, app UI, and Termind-specific behavior must not be moved into this package. See [Assistant Runtime](../concepts/agent-runtime-and-assistant.md) and [Build and Release](../operations/build-test-and-release.md) for integration and release sequencing.
## MCP bridge and desktop server
`TermindMCPBridge` is flat: its entry point implements the `termind-mcp` executable, with executable entitlements alongside it. It reads newline-delimited JSON-RPC from stdin, sends authenticated HTTP requests to the desktop MCP endpoint, carries negotiated session/protocol headers, writes responses to stdout, and requests session deletion at EOF.
**Solid arrows are runtime requests; the dashed arrow is an interactive authorization request.** The bridge is a protocol adapter, not an SSH implementation or a second AgentKit runtime.
```mermaid
flowchart TB
Client["External MCP client"] -->|stdio JSON-RPC| Bridge["TermindMCPBridge"]
Bridge -->|HTTP + bearer token| HTTP["TFM / Infrastructure / Networking"]
HTTP --> Protocol["TFM / Infrastructure / MCP"]
Protocol --> Tools["TFM / Application / MCPServer"]
Tools --> Services["Shared host and remote services"]
Services -.->|when interaction is required| Auth["TFM / Features / ExternalRequests"]
```
The server's lifetime/controller is assembled by the desktop app. Upload/download application policy, transfer tickets, bearer-token handling, and native authentication presentation stay on their respective sides of this boundary. Details: [MCP Server and Bridge](../integrations/mcp-server-and-bridge.md).
## Live Activity product and shared source
| Directory | Responsibility |
| --- | --- |
| `TFIWidgets` | Flat widget entry/presentation source and bundle metadata for the `TermindWidgets` extension. Renders Lock Screen and Dynamic Island workspace summaries and links. |
| `TFIWidgets/Assets.xcassets` | Widget-owned catalog; `TermindLiveActivityIcon.imageset` supplies its template icon. |
| `WorkspaceActivitySupport` | Flat shared source group compiled into both the mobile app and widget, **not a separate framework target**. Defines ActivityKit attributes, bounded summary payloads, and workspace deep-link encoding/decoding. |
| `TFI/Platform` | Native Live Activity controller/services that create, update, and retire activities from app-owned workspace state. |
```mermaid
flowchart TB
Workspaces["Mobile app workspace state"] -->|summarize| Controller["Mobile Live Activity controller"]
Contract["WorkspaceActivitySupport / shared source"] -.->|payload contract| Controller
Contract -.->|payload contract| Widget["TermindWidgets"]
Controller -->|ActivityKit content updates| Widget
Widget -->|workspace deep link| Scene["Mobile scene routing"]
Scene -->|select retained workspace| Workspaces
```
Here solid arrows are updates/navigation and dashed arrows are shared type contracts. The payload has bounded session summaries and excludes credentials and terminal output. The extension displays state; it does not keep an SSH connection alive.
## Tests, fixtures, benchmarks, and scripts
| Directory | Responsibility |
| --- | --- |
| `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. |
| `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. |
| `StoreKit` | Local StoreKit product/test configuration; not the production entitlement implementation. |
The script root has multiple independent workflows:
- **Release and resource maintenance:** version bumping, Chinese-localization validation, Linux-distribution icon refresh, and model-catalog refresh.
- **Remote fixtures and benchmarks:** SSH authentication, OpenSSH forwarding, and Telnet fixtures; native/external forwarding runners and their shared benchmark helpers.
- **Screenshots and assets:** Mac/mobile capture runners, screenshot-demo launcher, and reproducible device-frame generation.
Use [Behavioral Boundaries and Fixtures](../testing/behavioral-boundaries-and-fixtures.md) to choose tests and [Forwarding Benchmarks](../operations/port-forwarding-benchmarks.md) for measurement semantics. Routine documentation validation does not imply these app or wire suites have run.
## LandingPage — independent Astro website
Paths below are relative to `LandingPage`. This is a separate Node/Astro build, not a Swift framework or embedded app web view.
| Directory | Responsibility |
| --- | --- |
| `src/components` | Reused page/section content for FAQ, privacy, security, support and offers; redirects; responsive screenshot rendering. |
| `src/layouts` | Shared document shell, metadata, navigation, and site-level composition. |
| `src/lib` | Locale/path/copy helpers, Traditional Chinese conversion/term adjustments, and the explicit marketing-image import allowlist. |
| `src/pages` | English route entry points for the landing page and support/legal/information pages. |
| `src/pages/zh-hans` | Simplified Chinese routes, including the email-offer page. |
| `src/pages/zh-hant` | Traditional Chinese routes. |
| `src/pages/zh` | Legacy Chinese redirects to the current Simplified Chinese routes, not another independently authored locale. |
| `src/styles` | Global styles, tokens, typography, and responsive/interaction styling. |
| `public` | Directly served static assets such as app icon, brand mark, and favicon. |
| `public/brands` | Small third-party/product brand artwork used by the site. |
| Root configuration | Astro/TypeScript/package configuration and locked web dependencies. |
Marketing screenshots are imported from the asset pipeline, not copied wholesale into `public`. The production build runs Astro checks and asset generation. See [Commerce, Localization, and Product Surfaces](../concepts/commerce-localization-and-product-surfaces.md).
## Marketing and design assets
| Directory | Responsibility |
| --- | --- |
| `Marketing/AppStore` | Final store-ready artwork. Children `en`, `zh-hans`, and `zh-hant` divide locale; each contains `mac`, `iphone-6.5`, and `ipad-13` device sets. |
| `Marketing/Screenshots/Captures` | Full-resolution source captures grouped by feature, with platform and locale in the asset identity. Source stage, not web-optimized output. |
| `Marketing/Screenshots/DeviceFrames` | Reproducible device-framed PNGs derived from captures, likewise grouped by feature. The website imports an allowlisted subset. |
| `Design/Brand` | Brand master artwork and visual guidance; separate from app icon documents and exported marketing deliverables. |
**Arrows below mean asset production or consumption, not code dependencies.**
```mermaid
flowchart TB
Native["Native demo and screenshot fixtures"] --> Capture["Scripts / capture runners"]
Capture --> Raw["Marketing / Screenshots / Captures"]
Raw --> Frames["Scripts / device-frame generation"]
Frames --> Framed["Marketing / Screenshots / DeviceFrames"]
Framed --> Images["LandingPage / src / lib image allowlist"]
Images --> Astro["Astro optimized AVIF / WebP / JPEG"]
Raw -.->|artwork composition workflow| Store["Marketing / AppStore / locale / device"]
Brand["Design / Brand"] -.->|visual source and guidance| Store
```
The App Store branch represents a separate artwork workflow, not a claim that the frame generator automatically emits final store compositions. Asset conventions and capture verification live in [Marketing Assets and App Icons](../operations/marketing-assets-and-app-icons.md).
## Project metadata and documentation tooling
| Directory | Responsibility |
| --- | --- |
| `Termind.xcodeproj` | Target definitions, build settings, source/resource membership, linking, and product embedding. |
| `Termind.xcodeproj/xcshareddata/xcschemes` | Shared build/test/run schemes for the apps, bridge, and benchmark. |
| `Termind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm` | Resolved remote-package revisions. This is the app's dependency pin, independent of the AgentKit reference checkout. |
| `.github/workflows` | Scheduled/manual OpenWiki refresh and documentation-PR automation. |
| `.agents/skills/openwiki` | Repository-installed OpenWiki lifecycle instructions and integration metadata; `agents` contains host descriptors. |
| `.codex` | Coding-agent integration configuration, not application runtime configuration. |
| `openwiki/architecture`, `concepts`, `workflows` | Ownership/directory guides, mechanism explanations, and end-to-end behavior. |
| `openwiki/integrations`, `operations`, `testing` | External interfaces, release/development procedures, and verification guidance. |
| `openwiki/.claims` | Generated, page-aligned evidence sidecars; not hand-authored documentation or app state. |
Local dependency/build caches such as `node_modules`, `.build`, `build`, and website output are excluded from the source architecture map. Git internals and user-specific IDE state are also not product modules. Generated OpenWiki indexes, Claims, and lifecycle metadata are maintained through OpenWiki rather than edited as source files.
Return to the [Module Map](module-map.md) or the [Engineering Quickstart](../quickstart.md).
+6 -4
View File
@@ -3,9 +3,6 @@ type: architecture boundaries
title: System Boundaries and Dependency Ownership
description: Static framework layers, platform composition roots, persistence ownership, and the external AgentKit boundary that keep Termind changes dependency-safe.
tags: [architecture, modularity, dependencies, persistence, agentkit, swift]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
sources:
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
@@ -27,7 +24,10 @@ sources:
resource: repo://TFM/App/TermindApp.swift
- id: openwiki-source-d3d065330c730839f5cc6112
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
generated: { by: "openwiki/0.5.2", at: "2026-09-22T00:31:10.149Z" }
generated: { by: "omp", at: "2026-09-22T03:23:14.035Z" }
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:23:14.035Z
---
# System Boundaries and Dependency Ownership
@@ -63,6 +63,8 @@ flowchart TD
This diagram shows the permitted ownership direction at a high level; apps assemble shared layers and are never dependencies of them.
For a directory-oriented view, start with the [Module and Directory Architecture Map](module-map.md). Its companion guides describe the shared frameworks, native apps, and supporting systems through their second-level functional directories; the build graph there uses explicit consumer-to-dependency arrows.
## Layer responsibilities
| Owner | Put here | Keep out |
@@ -5,7 +5,7 @@ description: How Termind assembles AgentKit into durable assistant conversations
tags: [assistant, agent-runtime, approval, persistence, skills, memory, ssh, sftp]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-66f32c7d0994c9f18c0e5a98
resource: repo://.build/verify-zh-hans/ios/SourcePackages/checkouts/AgentKit/Sources/AgentKit/Runtime/AgentRuntime.swift
@@ -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-22T01:28:26.942Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
+1 -1
View File
@@ -5,7 +5,7 @@ description: How Termind owns SwiftData and GRDB durable data, evolves compatibl
tags: [persistence, swiftdata, grdb, migrations, keychain, secrets, security]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-4ddcdd630c9bc1c622a037df
resource: repo://Frameworks/TermindApplication/SecretStoring.swift
@@ -6,7 +6,7 @@ tags: [ssh, terminal, metrics, sftp, port-forwarding, scheduling]
openwiki_generated: true
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:43:23.140Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-ca49232858afa421bf33a03b
resource: repo://Frameworks/TermindApplication/Metrics/ServerMetricsModel.swift
+1 -1
View File
@@ -5,7 +5,7 @@ description: "How Termind installs session-local Bash, Zsh, and Fish hooks over
tags: [ssh, terminal, shell-integration, osc, command-history, charset, lifecycle]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:43:23.140Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-209392b5f97bd72d0bd87a15
resource: repo://Frameworks/TermindApplication/Agent/TerminalCommandDraftController.swift
@@ -5,7 +5,7 @@ description: "The concrete ownership and scheduling layers behind Termind SSH: p
tags: [ssh, multiplexing, scheduling, libssh2, backpressure, sftp, concurrency]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:43:23.140Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-8e06414c0a0a26e45de192bd
resource: repo://Frameworks/TermindDomain/Connections/SSHPreferences.swift
+1 -1
View File
@@ -5,7 +5,7 @@ description: "Source-backed UI principles for TFM and TFI: semantic visual syste
tags: [ui, design-system, presentation, accessibility, localization, macos, ios]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:51:54.212Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-400e4d9303a3f9d98f90660d
resource: repo://Frameworks/TermindPresentation/AssistantTranscriptEntry.swift
@@ -5,7 +5,7 @@ description: How the macOS-only Termind MCP listener authenticates local clients
tags: [mcp, macos, loopback, authentication, sftp, bridge]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-1fc00d0407016efa5a0378eb
resource: repo://Frameworks/TermindRemoteInfrastructure/Agent/AgentBuiltInSSHTools.swift
@@ -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-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-ea70eb6c045047448e446296
resource: repo://.gitignore
@@ -5,7 +5,7 @@ description: Production CloudKit schema, compatibility, and signed-device checks
tags: [cloudkit, sync, release, settings, vault, metrics, sftp]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-9fbc733f79d51a7265ee9e4a
resource: repo://Frameworks/TermindApplication/SettingsKey.swift
@@ -3,9 +3,6 @@ type: asset-production-operations
title: Marketing Assets, Screenshot Production, Figma Exports, and App Icons
description: End-to-end rules for localized captures, device frames, website imagery, App Store boards, Figma exports, and layered app-icon sources.
tags: [marketing, screenshots, figma, app-store, app-icons, localization]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
sources:
- id: openwiki-source-554fe71f1ba6efebee0d020c
resource: repo://LandingPage/src/lib/marketingImages.ts
@@ -48,6 +45,9 @@ sources:
- id: openwiki-source-e2813ac17589f2155998862e
resource: repo://TFMTests/MacMarketingScreenshotTests.swift
generated: { by: "codex", at: "2026-09-22T01:13:21.371Z" }
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:23:14.035Z
---
# Marketing Assets, Screenshot Production, Figma Exports, and App Icons
@@ -3,9 +3,6 @@ type: benchmark-operations
title: Port Forwarding Benchmark Design, Results, and Reproduction
description: Historical forwarding measurements, workload semantics, retained transport decisions, comparison limits, and reproducible loopback commands.
tags: [ssh, port-forwarding, benchmark, performance, openssh]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
sources:
- id: openwiki-source-7f5c1cb6f348742514987bf8
resource: repo://Benchmarks/PortForwarding/main.swift
@@ -20,6 +17,9 @@ sources:
- id: openwiki-source-cd0be716a2446029f345525a
resource: repo://Termind.xcodeproj/project.pbxproj
generated: { by: "codex", at: "2026-09-22T01:13:21.371Z" }
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:23:14.035Z
---
# Port Forwarding Benchmark Design, Results, and Reproduction
@@ -5,7 +5,7 @@ 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-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-b37c974aaea12bd08606d67d
resource: repo://Frameworks/TermindDomain/Commerce/ProAccessTypes.swift
+13 -4
View File
@@ -3,9 +3,6 @@ type: engineering quickstart
title: Termind Engineering Quickstart
description: A task-oriented guide to finding the right Termind owner, lifecycle boundary, workflow documentation, and focused validation before making a change.
tags: [engineering, architecture, routing, testing, macos, ios]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:51:54.212Z
sources:
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
@@ -25,13 +22,24 @@ sources:
resource: repo://TFM/Features/Workspaces/WindowModel.swift
- id: openwiki-source-d3d065330c730839f5cc6112
resource: repo://TFMTests/ArchitectureBoundaryTests.swift
generated: { by: "omp", at: "2026-09-22T02:51:54.212Z" }
generated: { by: "omp", at: "2026-09-22T03:23:14.035Z" }
verified:
- by: openwiki/0.5.2
at: 2026-09-22T03:23:14.035Z
---
# Termind Engineering Quickstart
Termind is one Xcode project with two native products: `TFM` for macOS and `TFI` for iPhone/iPad. They compose shared static frameworks, but platform UI and lifecycle remain app-owned. Start from the task you intend to change, identify the state and dependency owner, then use the focused tests that protect that boundary. Source and tests are authoritative. Read [Cross-Cutting Engineering Invariants](/openwiki/architecture/engineering-invariants.md) for the exhaustive safety contract, then use the routed specialist page for mechanisms, release operations, and historical benchmark constraints.
## Explore modules and directories
Start with the [Module and Directory Architecture Map](/openwiki/architecture/module-map.md) for module ownership and dependency diagrams. Its companion guides cover at least second-level functional directories, explicitly identify flat modules, and distinguish directory containment from runtime ownership:
- [Shared Framework Directory Responsibilities](/openwiki/architecture/shared-module-directories.md): the six frameworks and shared bundle resources.
- [Native App Directory Responsibilities](/openwiki/architecture/native-app-directories.md): TFM/TFI application, feature, infrastructure, platform, UI, and resource areas.
- [Supporting Products, Packages, and Tooling](/openwiki/architecture/supporting-system-directories.md): AgentKit, bridge, widgets, tests, benchmarks, website, assets, and automation.
## Before editing
1. **Read the cross-cutting invariants and the narrowest routing page below**, then follow their cited code and tests. Do not use this page as a substitute for the detailed workflow.
@@ -44,6 +52,7 @@ Termind is one Xcode project with two native products: `TFM` for macOS and `TFI`
| If you are changing… | Start here | Also inspect | Focused validation |
| --- | --- | --- | --- |
| Finding what a module or nested directory owns, or understanding how modules collaborate | [Module and Directory Architecture Map](/openwiki/architecture/module-map.md) | Shared-framework, native-app, and supporting-system directory guides | Follow the owning feature's focused tests; use architecture checks for dependency changes |
| App startup, dependency assembly, window/scene behavior, backgrounding, or shutdown | [Platform Runtime, App Composition, and Lifetimes](/openwiki/architecture/platform-runtime.md) | `TFM/App/TermindApp.swift`, `TFI/App/TermindIOSApp.swift` | Relevant `TFMTests` or `TFITests` lifecycle/window suite |
| A module import, framework placement, SwiftData model, shared resource, or AgentKit-facing API | [System Boundaries and Dependency Ownership](/openwiki/architecture/system-boundaries.md) | `TFMTests/ArchitectureBoundaryTests.swift` and the owning composition root | `ArchitectureBoundaryTests` plus the affected feature tests |
| TFM window chrome, Navigator modes, split panes, persistent workspaces, Vault editors, or desktop Assistant rendering | [TFM Desktop UI Architecture](/openwiki/architecture/desktop-ui.md) | Component and ownership diagrams; [UI Design Principles](/openwiki/concepts/ui-design-principles.md) | Window/sidebar, workspace layout, responsive editor and transcript tests |
@@ -5,7 +5,7 @@ description: Focused regression strategy for Termind's shared frameworks and mac
tags: [testing, regression, fixtures, architecture, persistence, security, lifecycle, ui]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-8037e2358a2c4f9b2c722a11
resource: repo://AGENTS.md
@@ -5,7 +5,7 @@ description: "Trace forwarding rules through Host-scoped intent, primary and aux
tags: [ssh, port-forwarding, connection-pool, scheduling, socks5, backpressure, recovery]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:43:23.140Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-9bd2b93db78747d6956c2405
resource: repo://Frameworks/TermindDomain/Hosts/Host.swift
@@ -5,7 +5,7 @@ description: How Termind independently synchronizes Vault, Settings, and Metrics
tags: [cloudkit, synchronization, settings, vault, metrics, secrets, swiftdata]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T01:13:21.371Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-9fbc733f79d51a7265ee9e4a
resource: repo://Frameworks/TermindApplication/SettingsKey.swift
@@ -5,7 +5,7 @@ description: How SFTP browser operations become scheduled transfers, choose an S
tags: [sftp, file-transfer, ssh, scheduling, external-editing, lifecycle]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:21:47.705Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-46ef2fcd9e3aba751015021b
resource: repo://Frameworks/TermindDomain/Transfers/SFTPPreferences.swift
+1 -1
View File
@@ -5,7 +5,7 @@ description: Traces how Termind prepares SSH and Telnet connections, routes them
tags: [ssh, telnet, connection-lifecycle, host-keys, proxy, workspace, security]
verified:
- by: openwiki/0.5.2
at: 2026-09-22T02:21:47.705Z
at: 2026-09-22T03:23:14.035Z
sources:
- id: openwiki-source-cb178f0d078ab3218679c80e
resource: repo://Frameworks/TermindApplication/Connections/RemoteSessionConnectionController.swift