From bc1ffb3ac37ef4edb6731083577fd2eea14a9331 Mon Sep 17 00:00:00 2001 From: Kaede Akino Date: Tue, 22 Sep 2026 12:07:14 +0800 Subject: [PATCH] Document module and directory architecture --- openwiki/.claims/architecture/desktop-ui.json | 4 +- .../architecture/engineering-invariants.json | 4 +- openwiki/.claims/architecture/mobile-ui.json | 4 +- openwiki/.claims/architecture/module-map.json | 126 +++++++++ .../architecture/native-app-directories.json | 218 ++++++++++++++ .../architecture/platform-runtime.json | 6 +- .../shared-module-directories.json | 258 +++++++++++++++++ .../supporting-system-directories.json | 242 ++++++++++++++++ .../architecture/system-boundaries.json | 6 +- .../concepts/agent-runtime-and-assistant.json | 4 +- ...rce-localization-and-product-surfaces.json | 4 +- .../concepts/persistence-and-secrets.json | 4 +- .../remote-services-and-forwarding.json | 4 +- .../.claims/concepts/shell-integration.json | 4 +- .../ssh-multiplexing-and-scheduling.json | 4 +- .../concepts/ui-design-principles.json | 4 +- .../integrations/mcp-server-and-bridge.json | 4 +- .../operations/build-test-and-release.json | 4 +- .../cloudkit-release-readiness.json | 4 +- .../marketing-assets-and-app-icons.json | 6 +- .../port-forwarding-benchmarks.json | 6 +- .../storefront-commerce-release.json | 4 +- openwiki/.claims/quickstart.json | 8 +- .../behavioral-boundaries-and-fixtures.json | 4 +- .../port-forwarding-pool-and-dispatch.json | 4 +- .../workflows/settings-and-cloud-sync.json | 4 +- .../sftp-transfer-and-external-edit.json | 4 +- .../workflows/ssh-session-lifecycle.json | 4 +- openwiki/.last-update.json | 4 +- openwiki/.page-manifest.json | 246 +++++++++------- openwiki/architecture/desktop-ui.md | 2 +- .../architecture/engineering-invariants.md | 2 +- openwiki/architecture/index.md | 4 + openwiki/architecture/mobile-ui.md | 2 +- openwiki/architecture/module-map.md | 139 +++++++++ .../architecture/native-app-directories.md | 246 ++++++++++++++++ openwiki/architecture/platform-runtime.md | 6 +- .../architecture/shared-module-directories.md | 266 ++++++++++++++++++ .../supporting-system-directories.md | 250 ++++++++++++++++ openwiki/architecture/system-boundaries.md | 10 +- .../concepts/agent-runtime-and-assistant.md | 2 +- ...merce-localization-and-product-surfaces.md | 2 +- openwiki/concepts/persistence-and-secrets.md | 2 +- .../remote-services-and-forwarding.md | 2 +- openwiki/concepts/shell-integration.md | 2 +- .../ssh-multiplexing-and-scheduling.md | 2 +- openwiki/concepts/ui-design-principles.md | 2 +- .../integrations/mcp-server-and-bridge.md | 2 +- openwiki/operations/build-test-and-release.md | 2 +- .../operations/cloudkit-release-readiness.md | 2 +- .../marketing-assets-and-app-icons.md | 6 +- .../operations/port-forwarding-benchmarks.md | 6 +- .../operations/storefront-commerce-release.md | 2 +- openwiki/quickstart.md | 17 +- .../behavioral-boundaries-and-fixtures.md | 2 +- .../port-forwarding-pool-and-dispatch.md | 2 +- openwiki/workflows/settings-and-cloud-sync.md | 2 +- .../sftp-transfer-and-external-edit.md | 2 +- openwiki/workflows/ssh-session-lifecycle.md | 2 +- 59 files changed, 1989 insertions(+), 201 deletions(-) create mode 100644 openwiki/.claims/architecture/module-map.json create mode 100644 openwiki/.claims/architecture/native-app-directories.json create mode 100644 openwiki/.claims/architecture/shared-module-directories.json create mode 100644 openwiki/.claims/architecture/supporting-system-directories.json create mode 100644 openwiki/architecture/module-map.md create mode 100644 openwiki/architecture/native-app-directories.md create mode 100644 openwiki/architecture/shared-module-directories.md create mode 100644 openwiki/architecture/supporting-system-directories.md diff --git a/openwiki/.claims/architecture/desktop-ui.json b/openwiki/.claims/architecture/desktop-ui.json index 7a5b0a67..774d616e 100644 --- a/openwiki/.claims/architecture/desktop-ui.json +++ b/openwiki/.claims/architecture/desktop-ui.json @@ -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" } } diff --git a/openwiki/.claims/architecture/engineering-invariants.json b/openwiki/.claims/architecture/engineering-invariants.json index c697a54e..c64b4935 100644 --- a/openwiki/.claims/architecture/engineering-invariants.json +++ b/openwiki/.claims/architecture/engineering-invariants.json @@ -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" } } diff --git a/openwiki/.claims/architecture/mobile-ui.json b/openwiki/.claims/architecture/mobile-ui.json index fe2b9147..16dd6a91 100644 --- a/openwiki/.claims/architecture/mobile-ui.json +++ b/openwiki/.claims/architecture/mobile-ui.json @@ -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" } } diff --git a/openwiki/.claims/architecture/module-map.json b/openwiki/.claims/architecture/module-map.json new file mode 100644 index 00000000..091f3cb3 --- /dev/null +++ b/openwiki/.claims/architecture/module-map.json @@ -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" + } +} diff --git a/openwiki/.claims/architecture/native-app-directories.json b/openwiki/.claims/architecture/native-app-directories.json new file mode 100644 index 00000000..242a1b98 --- /dev/null +++ b/openwiki/.claims/architecture/native-app-directories.json @@ -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" + } +} diff --git a/openwiki/.claims/architecture/platform-runtime.json b/openwiki/.claims/architecture/platform-runtime.json index e1269897..ed6c4a97 100644 --- a/openwiki/.claims/architecture/platform-runtime.json +++ b/openwiki/.claims/architecture/platform-runtime.json @@ -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" } } diff --git a/openwiki/.claims/architecture/shared-module-directories.json b/openwiki/.claims/architecture/shared-module-directories.json new file mode 100644 index 00000000..151fadfa --- /dev/null +++ b/openwiki/.claims/architecture/shared-module-directories.json @@ -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" + } +} diff --git a/openwiki/.claims/architecture/supporting-system-directories.json b/openwiki/.claims/architecture/supporting-system-directories.json new file mode 100644 index 00000000..3e269701 --- /dev/null +++ b/openwiki/.claims/architecture/supporting-system-directories.json @@ -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" + } +} diff --git a/openwiki/.claims/architecture/system-boundaries.json b/openwiki/.claims/architecture/system-boundaries.json index 219790b1..0ab0863c 100644 --- a/openwiki/.claims/architecture/system-boundaries.json +++ b/openwiki/.claims/architecture/system-boundaries.json @@ -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" } } diff --git a/openwiki/.claims/concepts/agent-runtime-and-assistant.json b/openwiki/.claims/concepts/agent-runtime-and-assistant.json index e9d62958..a5a5a15a 100644 --- a/openwiki/.claims/concepts/agent-runtime-and-assistant.json +++ b/openwiki/.claims/concepts/agent-runtime-and-assistant.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json b/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json index 4364c9a4..98c1669a 100644 --- a/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json +++ b/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/concepts/persistence-and-secrets.json b/openwiki/.claims/concepts/persistence-and-secrets.json index 81dc55c1..b4de7a8e 100644 --- a/openwiki/.claims/concepts/persistence-and-secrets.json +++ b/openwiki/.claims/concepts/persistence-and-secrets.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/concepts/remote-services-and-forwarding.json b/openwiki/.claims/concepts/remote-services-and-forwarding.json index 32a54591..306fcaf8 100644 --- a/openwiki/.claims/concepts/remote-services-and-forwarding.json +++ b/openwiki/.claims/concepts/remote-services-and-forwarding.json @@ -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" } } diff --git a/openwiki/.claims/concepts/shell-integration.json b/openwiki/.claims/concepts/shell-integration.json index 05e6ade1..687c9b06 100644 --- a/openwiki/.claims/concepts/shell-integration.json +++ b/openwiki/.claims/concepts/shell-integration.json @@ -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" } } diff --git a/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json b/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json index 54abfdf0..314a9aee 100644 --- a/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json +++ b/openwiki/.claims/concepts/ssh-multiplexing-and-scheduling.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/concepts/ui-design-principles.json b/openwiki/.claims/concepts/ui-design-principles.json index 20f0d9a1..669bd84c 100644 --- a/openwiki/.claims/concepts/ui-design-principles.json +++ b/openwiki/.claims/concepts/ui-design-principles.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/integrations/mcp-server-and-bridge.json b/openwiki/.claims/integrations/mcp-server-and-bridge.json index 309a510b..1fc89a89 100644 --- a/openwiki/.claims/integrations/mcp-server-and-bridge.json +++ b/openwiki/.claims/integrations/mcp-server-and-bridge.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/operations/build-test-and-release.json b/openwiki/.claims/operations/build-test-and-release.json index 2a81ca7d..4b5ea775 100644 --- a/openwiki/.claims/operations/build-test-and-release.json +++ b/openwiki/.claims/operations/build-test-and-release.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/operations/cloudkit-release-readiness.json b/openwiki/.claims/operations/cloudkit-release-readiness.json index 95625353..6ff41174 100644 --- a/openwiki/.claims/operations/cloudkit-release-readiness.json +++ b/openwiki/.claims/operations/cloudkit-release-readiness.json @@ -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" } } diff --git a/openwiki/.claims/operations/marketing-assets-and-app-icons.json b/openwiki/.claims/operations/marketing-assets-and-app-icons.json index c01263a3..9c3f8923 100644 --- a/openwiki/.claims/operations/marketing-assets-and-app-icons.json +++ b/openwiki/.claims/operations/marketing-assets-and-app-icons.json @@ -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" } } diff --git a/openwiki/.claims/operations/port-forwarding-benchmarks.json b/openwiki/.claims/operations/port-forwarding-benchmarks.json index 23003b4c..8999488d 100644 --- a/openwiki/.claims/operations/port-forwarding-benchmarks.json +++ b/openwiki/.claims/operations/port-forwarding-benchmarks.json @@ -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" } } diff --git a/openwiki/.claims/operations/storefront-commerce-release.json b/openwiki/.claims/operations/storefront-commerce-release.json index ffe2fc92..16ec63b0 100644 --- a/openwiki/.claims/operations/storefront-commerce-release.json +++ b/openwiki/.claims/operations/storefront-commerce-release.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/quickstart.json b/openwiki/.claims/quickstart.json index 3b22e610..1e7f4e42 100644 --- a/openwiki/.claims/quickstart.json +++ b/openwiki/.claims/quickstart.json @@ -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" } } diff --git a/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json b/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json index 952fc432..2b39dad9 100644 --- a/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json +++ b/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256: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" } } diff --git a/openwiki/.claims/workflows/port-forwarding-pool-and-dispatch.json b/openwiki/.claims/workflows/port-forwarding-pool-and-dispatch.json index 6b17b8c1..405dd627 100644 --- a/openwiki/.claims/workflows/port-forwarding-pool-and-dispatch.json +++ b/openwiki/.claims/workflows/port-forwarding-pool-and-dispatch.json @@ -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" } } diff --git a/openwiki/.claims/workflows/settings-and-cloud-sync.json b/openwiki/.claims/workflows/settings-and-cloud-sync.json index f69cfe69..1d011a7a 100644 --- a/openwiki/.claims/workflows/settings-and-cloud-sync.json +++ b/openwiki/.claims/workflows/settings-and-cloud-sync.json @@ -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" } } diff --git a/openwiki/.claims/workflows/sftp-transfer-and-external-edit.json b/openwiki/.claims/workflows/sftp-transfer-and-external-edit.json index 70dd67ee..2250c3bf 100644 --- a/openwiki/.claims/workflows/sftp-transfer-and-external-edit.json +++ b/openwiki/.claims/workflows/sftp-transfer-and-external-edit.json @@ -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" } } diff --git a/openwiki/.claims/workflows/ssh-session-lifecycle.json b/openwiki/.claims/workflows/ssh-session-lifecycle.json index 3cf70eda..24342735 100644 --- a/openwiki/.claims/workflows/ssh-session-lifecycle.json +++ b/openwiki/.claims/workflows/ssh-session-lifecycle.json @@ -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" } } diff --git a/openwiki/.last-update.json b/openwiki/.last-update.json index 955639b1..909b2430 100644 --- a/openwiki/.last-update.json +++ b/openwiki/.last-update.json @@ -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" diff --git a/openwiki/.page-manifest.json b/openwiki/.page-manifest.json index f9356106..eb3be42b 100644 --- a/openwiki/.page-manifest.json +++ b/openwiki/.page-manifest.json @@ -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" } } } diff --git a/openwiki/architecture/desktop-ui.md b/openwiki/architecture/desktop-ui.md index 6228d329..f1231f8b 100644 --- a/openwiki/architecture/desktop-ui.md +++ b/openwiki/architecture/desktop-ui.md @@ -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 diff --git a/openwiki/architecture/engineering-invariants.md b/openwiki/architecture/engineering-invariants.md index 1f046209..7dbe83c2 100644 --- a/openwiki/architecture/engineering-invariants.md +++ b/openwiki/architecture/engineering-invariants.md @@ -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 diff --git a/openwiki/architecture/index.md b/openwiki/architecture/index.md index 41e45ea8..64ee0172 100644 --- a/openwiki/architecture/index.md +++ b/openwiki/architecture/index.md @@ -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. diff --git a/openwiki/architecture/mobile-ui.md b/openwiki/architecture/mobile-ui.md index d609d3c4..4195f258 100644 --- a/openwiki/architecture/mobile-ui.md +++ b/openwiki/architecture/mobile-ui.md @@ -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 diff --git a/openwiki/architecture/module-map.md b/openwiki/architecture/module-map.md new file mode 100644 index 00000000..c24e3eb2 --- /dev/null +++ b/openwiki/architecture/module-map.md @@ -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). diff --git a/openwiki/architecture/native-app-directories.md b/openwiki/architecture/native-app-directories.md new file mode 100644 index 00000000..670099e4 --- /dev/null +++ b/openwiki/architecture/native-app-directories.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. diff --git a/openwiki/architecture/platform-runtime.md b/openwiki/architecture/platform-runtime.md index e6819d8d..750654b2 100644 --- a/openwiki/architecture/platform-runtime.md +++ b/openwiki/architecture/platform-runtime.md @@ -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 diff --git a/openwiki/architecture/shared-module-directories.md b/openwiki/architecture/shared-module-directories.md new file mode 100644 index 00000000..1cf6170a --- /dev/null +++ b/openwiki/architecture/shared-module-directories.md @@ -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. diff --git a/openwiki/architecture/supporting-system-directories.md b/openwiki/architecture/supporting-system-directories.md new file mode 100644 index 00000000..6b825c19 --- /dev/null +++ b/openwiki/architecture/supporting-system-directories.md @@ -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). diff --git a/openwiki/architecture/system-boundaries.md b/openwiki/architecture/system-boundaries.md index 7ed5da46..37bb4589 100644 --- a/openwiki/architecture/system-boundaries.md +++ b/openwiki/architecture/system-boundaries.md @@ -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 | diff --git a/openwiki/concepts/agent-runtime-and-assistant.md b/openwiki/concepts/agent-runtime-and-assistant.md index b3ddf5fb..8ba9a726 100644 --- a/openwiki/concepts/agent-runtime-and-assistant.md +++ b/openwiki/concepts/agent-runtime-and-assistant.md @@ -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 diff --git a/openwiki/concepts/commerce-localization-and-product-surfaces.md b/openwiki/concepts/commerce-localization-and-product-surfaces.md index 35dfe1b2..205f245a 100644 --- a/openwiki/concepts/commerce-localization-and-product-surfaces.md +++ b/openwiki/concepts/commerce-localization-and-product-surfaces.md @@ -5,7 +5,7 @@ description: Explains StoreKit-derived Pro access, native paywall and review own tags: [commerce, storekit, localization, product-surfaces, marketing, widgets] verified: - by: openwiki/0.5.2 - at: 2026-09-22T01:28:26.942Z + at: 2026-09-22T03:23:14.035Z sources: - id: openwiki-source-8037e2358a2c4f9b2c722a11 resource: repo://AGENTS.md diff --git a/openwiki/concepts/persistence-and-secrets.md b/openwiki/concepts/persistence-and-secrets.md index a32af4df..ad58f321 100644 --- a/openwiki/concepts/persistence-and-secrets.md +++ b/openwiki/concepts/persistence-and-secrets.md @@ -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 diff --git a/openwiki/concepts/remote-services-and-forwarding.md b/openwiki/concepts/remote-services-and-forwarding.md index 5d968a6f..92d72145 100644 --- a/openwiki/concepts/remote-services-and-forwarding.md +++ b/openwiki/concepts/remote-services-and-forwarding.md @@ -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 diff --git a/openwiki/concepts/shell-integration.md b/openwiki/concepts/shell-integration.md index b21fbe04..eafd3f41 100644 --- a/openwiki/concepts/shell-integration.md +++ b/openwiki/concepts/shell-integration.md @@ -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 diff --git a/openwiki/concepts/ssh-multiplexing-and-scheduling.md b/openwiki/concepts/ssh-multiplexing-and-scheduling.md index 47a87fc7..d9dd5498 100644 --- a/openwiki/concepts/ssh-multiplexing-and-scheduling.md +++ b/openwiki/concepts/ssh-multiplexing-and-scheduling.md @@ -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 diff --git a/openwiki/concepts/ui-design-principles.md b/openwiki/concepts/ui-design-principles.md index c0864b47..4084d862 100644 --- a/openwiki/concepts/ui-design-principles.md +++ b/openwiki/concepts/ui-design-principles.md @@ -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 diff --git a/openwiki/integrations/mcp-server-and-bridge.md b/openwiki/integrations/mcp-server-and-bridge.md index b0a1d46b..48cb4059 100644 --- a/openwiki/integrations/mcp-server-and-bridge.md +++ b/openwiki/integrations/mcp-server-and-bridge.md @@ -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 diff --git a/openwiki/operations/build-test-and-release.md b/openwiki/operations/build-test-and-release.md index c54024d3..d646a2e0 100644 --- a/openwiki/operations/build-test-and-release.md +++ b/openwiki/operations/build-test-and-release.md @@ -5,7 +5,7 @@ description: Safe, targeted validation and release procedures for Termind’s Xc tags: [operations, build, testing, localization, release, agentkit, screenshots] verified: - by: openwiki/0.5.2 - at: 2026-09-22T01:13:21.371Z + at: 2026-09-22T03:23:14.035Z sources: - id: openwiki-source-ea70eb6c045047448e446296 resource: repo://.gitignore diff --git a/openwiki/operations/cloudkit-release-readiness.md b/openwiki/operations/cloudkit-release-readiness.md index 9052e828..f3e35d4c 100644 --- a/openwiki/operations/cloudkit-release-readiness.md +++ b/openwiki/operations/cloudkit-release-readiness.md @@ -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 diff --git a/openwiki/operations/marketing-assets-and-app-icons.md b/openwiki/operations/marketing-assets-and-app-icons.md index 5d89d62a..19b3f555 100644 --- a/openwiki/operations/marketing-assets-and-app-icons.md +++ b/openwiki/operations/marketing-assets-and-app-icons.md @@ -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 diff --git a/openwiki/operations/port-forwarding-benchmarks.md b/openwiki/operations/port-forwarding-benchmarks.md index 3dc1724e..846a654a 100644 --- a/openwiki/operations/port-forwarding-benchmarks.md +++ b/openwiki/operations/port-forwarding-benchmarks.md @@ -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 diff --git a/openwiki/operations/storefront-commerce-release.md b/openwiki/operations/storefront-commerce-release.md index 0eeebec2..91e24790 100644 --- a/openwiki/operations/storefront-commerce-release.md +++ b/openwiki/operations/storefront-commerce-release.md @@ -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 diff --git a/openwiki/quickstart.md b/openwiki/quickstart.md index d0603392..a01e3c30 100644 --- a/openwiki/quickstart.md +++ b/openwiki/quickstart.md @@ -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 | diff --git a/openwiki/testing/behavioral-boundaries-and-fixtures.md b/openwiki/testing/behavioral-boundaries-and-fixtures.md index 174c1215..04c9a0d5 100644 --- a/openwiki/testing/behavioral-boundaries-and-fixtures.md +++ b/openwiki/testing/behavioral-boundaries-and-fixtures.md @@ -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 diff --git a/openwiki/workflows/port-forwarding-pool-and-dispatch.md b/openwiki/workflows/port-forwarding-pool-and-dispatch.md index ba5c3d7e..d7746e2f 100644 --- a/openwiki/workflows/port-forwarding-pool-and-dispatch.md +++ b/openwiki/workflows/port-forwarding-pool-and-dispatch.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 diff --git a/openwiki/workflows/settings-and-cloud-sync.md b/openwiki/workflows/settings-and-cloud-sync.md index 56b633ee..092279b6 100644 --- a/openwiki/workflows/settings-and-cloud-sync.md +++ b/openwiki/workflows/settings-and-cloud-sync.md @@ -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 diff --git a/openwiki/workflows/sftp-transfer-and-external-edit.md b/openwiki/workflows/sftp-transfer-and-external-edit.md index d7705c25..ddf54293 100644 --- a/openwiki/workflows/sftp-transfer-and-external-edit.md +++ b/openwiki/workflows/sftp-transfer-and-external-edit.md @@ -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 diff --git a/openwiki/workflows/ssh-session-lifecycle.md b/openwiki/workflows/ssh-session-lifecycle.md index 814a664b..d9e8d6f7 100644 --- a/openwiki/workflows/ssh-session-lifecycle.md +++ b/openwiki/workflows/ssh-session-lifecycle.md @@ -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