diff --git a/openwiki/.claims/architecture/engineering-invariants.json b/openwiki/.claims/architecture/engineering-invariants.json index 34bb413e..9a57af47 100644 --- a/openwiki/.claims/architecture/engineering-invariants.json +++ b/openwiki/.claims/architecture/engineering-invariants.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:f62db2005beea84e609b860cb6d2e52e7a742faf98e3d9f088179b031465fbbe", + "pageVersion": "sha256:c8ad1f11ac788af965dd38b668950c45dda95ab336ac725cd1d9ab3e8f7ce8a8", "claims": [ { "id": "claim_72f9329a158e418cbf0fd6394f82815e", @@ -332,37 +332,37 @@ }, { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L516-L630", - "version": "repo-lines-v1:sha256:b1882f48ba2a0c4f0faaa010c3ad73fbbfed243a2f0f51c0d883ed8058e5a3d3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTE1LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIzN2U2Yzk0MTIwZGUzNjU0OGMxZjcwMTkzYzMxYzg0NTQ1ODI0OGQ0M2E4N2U2ZTU0MjY5MTBmY2VkYmJlOGJiIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI0ODkzZjQwZTM3ODFlYjg5NmM4MmQwNDZhMDgwNjdhMTFlMzVjZGYyZjFkZmFmMjZmZWE5MGI4ZGI2Njc2NDEzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI3NDhiNTNjYTI2MWZjOWVmMTVjMzg5YWVkYTA0Zjg2MTFjN2I0N2UxOGU2MjA5NWQxMWRmODkwYWNjMWQ4ZjRjIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwZWE5ZjA1OWViZGRiM2M1YTA1MTQwYTNhNTJjMTM2MmU4ZGVhZDhlNmU1MjllZWNhNWMyNjkxOGZhNTMyNTY1In0" + "version": "repo-lines-v1:sha256:6f0586148546ed005af984580253f2dc7d5de8689160a50bb5889c18111981cb:eyJzZWxlY3RlZExpbmVDb3VudCI6MTI0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIzN2U2Yzk0MTIwZGUzNjU0OGMxZjcwMTkzYzMxYzg0NTQ1ODI0OGQ0M2E4N2U2ZTU0MjY5MTBmY2VkYmJlOGJiIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI0ODkzZjQwZTM3ODFlYjg5NmM4MmQwNDZhMDgwNjdhMTFlMzVjZGYyZjFkZmFmMjZmZWE5MGI4ZGI2Njc2NDEzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI3NDhiNTNjYTI2MWZjOWVmMTVjMzg5YWVkYTA0Zjg2MTFjN2I0N2UxOGU2MjA5NWQxMWRmODkwYWNjMWQ4ZjRjIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwZWE5ZjA1OWViZGRiM2M1YTA1MTQwYTNhNTJjMTM2MmU4ZGVhZDhlNmU1MjllZWNhNWMyNjkxOGZhNTMyNTY1In0" } ] }, { "id": "claim_bbae8e4110c5473b83d5d2803745fea5", - "statement": "Preparation has a separate identity from streaming: cancellation invalidates it synchronously and joins tracked history/preparation work before interrupted persistence; stale edits are rejected, archive/delete cancel preparation, manual compaction refuses it, and changing selection alone does not cancel it.", + "statement": "Preparation has a separate identity from streaming: ordinary cancellation invalidates it synchronously and joins tracked history/preparation work before interrupted persistence; savingFailure instead joins its existing terminal save without cancellation or an added interrupted write. Archive/delete await preparation, edits/forks cannot overtake failure persistence, manual compaction refuses preparation, and changing selection alone does not cancel it.", "evidence": [ { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L231-L255", - "version": "repo-lines-v1:sha256:63509c11ab1c2718bead3930614de6427e1e6df47c0e787aeed401498661891c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjY0YzVmZGJhOWRmZTUwNjMwNjlkYTdlN2RiZWVjM2QzZWRiNjE3YmUzMTQxYjBmNGEyYzY0OTEzNWI0N2M2ZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImIyMzkzYWYzYmRiOTExYzA2ZWFmMjNkYjMxZTkyMmNkNGY3NDc2MmYzNGFmMTE1NTJkNDczYzc1ODhhZmFhZTkifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L377-L399", + "version": "repo-lines-v1:sha256:57fc8a5056ef2daacc45c49b9c7531b6e09dc48efa4c91167e87e481dc29f343:eyJzZWxlY3RlZExpbmVDb3VudCI6MjMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM0NDQ1ZGQ3NzZkZGY3MmE2OGI5ODIzMjUxMjgyYzFlNTI3NmIwNTQwYWVlMzQ3YmViZjEwMWQyODlkZGNmZDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJhNTdlYjBlMmFlMGQwZTFjNGJkOGY0MTFjZTc4NjU4ZjIzZjJmZWFmZTU3YTg5ZTUzN2E5YmNlNjljM2JhN2QiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantConversationOperations.swift#L12-L21", - "version": "repo-lines-v1:sha256:e2ba6b40bc2c5a1843a0a570f28c471ba3a74682cf31c79865a8472029912a21:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImZkNWFkOTQ4ZjVhN2JlOWJlMTVkNTRhY2EwNzlmZWI4MDYwMjNlMjVjNjIzNmVmMWI0NTM0YzQ0NDA1ZTk1NDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImI5NDU0MDY3MDk1MTM2ZmQyMDViNmNhM2JkMGFjYjk5N2M0MDg5M2JjNGI4OWFjMzMxN2YxZmNhYzFiMzc5ZmUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4ZGJjMzU4MWFjZTk4MTNjMmE3ZmQ5OWI2YjNmN2I2ZTBlNmE5ZjJiMGJlZDUzNmUwOTJiZjI2NWMzOWNmNGIifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantConversationOperations.swift#L12-L78", + "version": "repo-lines-v1:sha256:47f9649159474c18daf04dc654d59d4abe46412f888301de329dc1fac7d065db:eyJzZWxlY3RlZExpbmVDb3VudCI6NjcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImZkNWFkOTQ4ZjVhN2JlOWJlMTVkNTRhY2EwNzlmZWI4MDYwMjNlMjVjNjIzNmVmMWI0NTM0YzQ0NDA1ZTk1NDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjliYzBlMDVjYjgzMDgyMGE3NzRjYmQxM2IyZDNjZTU1ZjgyNTExNTJmNDExM2IxZGYwYzc1YzBjYTMxZmMxMGIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImI5NDU0MDY3MDk1MTM2ZmQyMDViNmNhM2JkMGFjYjk5N2M0MDg5M2JjNGI4OWFjMzMxN2YxZmNhYzFiMzc5ZmUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjVmZmJlYWQ0YmM2ZjEzMjI0MzRkMDE2OWNiMGFkOGM1MTQwOGExNDdmN2IyODA4ZmI5NjA4MDFkYmRhODc1ZjYifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantConversationOperations.swift#L63-L75", - "version": "repo-lines-v1:sha256:c49e78dca59df1fa504084f70e5870b13c95199d99512f713215e4d963559c1c:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjBlZGZjY2UzODdkY2Y5MTEzNWQ4YjcyMzViYjIzZGU4ZDM4OGVkOWY0YjU5MzhkODdlMTM1ZjA3OGU5MzBlNjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFmNTU2NmQyMjg3Mjk1MmM0NDc3MmQ1NDEyZTgwZjE2MzI4ZWM1ZGM5YmIxM2YyNjVkODFmNTg0MGFhYWM1ZjIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImVmM2MyYmU5Yzg4ODZjMmM1YzI4MjYzOTk4MTBmZTYyMDY0YWZhZWEyN2RmMTNmNzQ5OGI4M2QyMmVlODBjODkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZjZjMxNzMzMTFlZjYxMGRlNTllOTE2MjM5ZDBiZDQ3YjA5OTU3MTNjYThiYWY1NGZmYWVkY2Y2ZmJmZTQxZjUifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L599-L645", + "version": "repo-lines-v1:sha256:8201388ed1b0d58cbc3f131eb4c51402d7be4e097f7707cc64ff4e21ed71e12e:eyJzZWxlY3RlZExpbmVDb3VudCI6NDcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjBmYTJhNDJkMzQyNjUwODBkNDg5OTA0NDI0MjlkZTcxODEwYzkwMjA5ODQxYTRkZTgzOTFjOTIxODNkNjc0OGEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3NWRkNzE5N2NkYzMzYzYwMDAwODY3MmM2NjEyZGFmNWUyMmMzMzAyNDdhM2FmMGJmODJlNDgwMmYzNmVlMjMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ0OGJmNTE3NmViOWRmZDcxNmVlZjIzYjMwMTU4ZTE1ZWVjYWEwZDM4NGMzMTczOTA4YjJiZGJhMjA2MjU0ODAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjI5ZDI3MjNlYzczZWMzZTlhODdmM2QzNmI0ZTU2Y2NkZGYxZGI0MDM4OTk2YjQ4NTczODEwM2UxOWFkMjdhODEifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L241-L280", - "version": "repo-lines-v1:sha256:10dde8f96383fc4e7c331b4e927c1c5e61a7173356ef4b5b49d67c68ba29e2e3:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImExMGUxZDhkNTQ2OGFiNjQ4MzUxNzE3MWM1ZDQ0NzZiNjUzNjIwNDJlYzVlNzZhYjNlZWQ2NTM4YjhmZmRiN2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJiZWNkMDQ0NWJmNGEzYTg5NTcwNTczNGE0YmEyYjFjYzQxMjRiNzM1NzYyYWY0ZWYxYzQyODcyNTkyMThlNzQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjBiNDkxY2E1OGFjYmFiYWNhOTBhZDBkYmQyNjgxODk3NzFhMjY2YTYyM2FhZmE3NzRhYzY1MTg5OTk3YjU1YWMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L697-L820", + "version": "repo-lines-v1:sha256:573ad87c0b11a4de84485b6efb502dec46851957f042f8e9ec82bd6e97473bd1:eyJzZWxlY3RlZExpbmVDb3VudCI6MTI0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI5NjAyZDY4M2JmOTNkNjM2MTgwMmU2Nzg5Y2UzODc1Yjc4MDJhYzk3MWU2YmRjNzhkNGJjNmJiZDRiN2FmN2ViIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI4NzVkZDcxOTdjZGMzM2M2MDAwMDg2NzJjNjYxMmRhZjVlMjJjMzMwMjQ3YTNhZjBiZjgyZTQ4MDJmMzZlZTIzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI2YjBkM2YxNGUzNjMyYmE5ZjBlM2I5YTJhYTM4M2UwNjVhYTBhY2UxOWM1MTU4NTA2YTliMWJjNzQ1MjExYWU4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI0YzZjN2NkYzhjNGVjMGJjOWRlOGU2OTE4ZmFlMGFhOTg0NDEyYjQyY2U1YzM2OWVhMWUzMzI4NDdmOGYyMjliIn0" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L684-L762", - "version": "repo-lines-v1:sha256:7a08479880142384554fef4c4143ed597856d65be0c552a76400a967ada09df3:eyJzZWxlY3RlZExpbmVDb3VudCI6NzksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxMGEwMjJhZTMxNzI3ZmIzMmUxNTFiMmY3NzA0ZmE4ODVkYTZjZTc0NTdhMjU1OTNiMWIxY2M3YTA3ZGY5NjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjI5YWI2ZThkYTBmYzkwMDY0YjdjNGEzNTI3YTVlNWFiZDI1NWI2YjBmZTE3NTc5YWFiNDI1Nzg1YjA2NmZmNDUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjdiZTFlNjJiNzdiZmE0MWYyZjNjYzlhMDU1MDI1MzY4MWI3Y2VhN2M2ZDZhMTk5MzljYjVkNTEyMGFjNTI4M2UiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjBkOTk4NGRkMWE0Y2M1Y2ZlMTkyYzE1NzRkZWMzYTk1MmFmZDgyMWVjNzZjMGJmZTAxM2Y3OWMzNjJmODlkODIifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L854-L862", + "version": "repo-lines-v1:sha256:504cda2464237420ec63c343898675c595d777aaaa1d5a37b00a8723ac6f734d:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMzI5ZjgxOTIzYTdiY2NkMzMzYWQwNDZiMTgzYmIyZGQzODllZDViYzJhMDZkNjk4NTliZWQ2YWU1YmI3NjgzNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiM2Y3Yjk4MGEyMGJhMTc5NGU2YjM1NmU2YTZlOTAyNjZmYTU4MmNkYWRkN2I5NWM5ZWM5MjdmNWY5ZjAzMzYzYiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMDVlYjdlNGI2YTk2YmJlNWNiYTMxZDY4ZDdhYWRiNzAxNWJhMGIzYWM1YzU5ZTNmY2I4M2QwMWE4OTdlOGVlMyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiODFlYWE3ZWIzN2Q3NzY1N2QyZjU3NjE4NzZhZmE5MDU2MGY3NjcyYTQ3NzEwZTQ1MWRiZTU1ZWRkZDQzZjYyZiJ9" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L830-L839", - "version": "repo-lines-v1:sha256:ce3f227083ebc0587a705272d2c18cfa110d702714310ad736937b34384653a6:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjlhZDUzYmFhYzE4Nzg1MmI0MzFjMjMyZTA1MTYwNjFkNDk2ZjdhMjE1NmVlNGJmN2RlYTY0N2ZjNjY0OTg2NmQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNmNzA5MTI3NmEyNGM5MTU5YzRjZGUzZWZiY2RlYWM3YmQ4ZWM3ZjQxYzVkYjNhNmIyOWM3MTE1OGZkZDg5Y2IiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNlOGQzZmM2YzYwOTVmMmM4OTlhMmM0MTRlMTg4Zjg4MjY3MTA1ZjQ0ZTQ3ZTZhODQ4NjE3MTM1NGE1ZmYzYzMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY5MTNmNzA3ZWY5NzdkM2FlMDUxOTgzMGM2YTc2NmYxYmI1OTdjZjJlMDgxOTQ3MDM0MzU0ZWU0MTQ1ZjA0NmUifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L1088-L1127", + "version": "repo-lines-v1:sha256:b17c24ee237eab5393c8275af0750d4c90435d607878c72ba65fb3664e1f1664:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImI1MmFjMDJlY2QwNWE5M2M1NGI3NDdjNDIxM2IxZDdmMjY5OGM4ZTRlMjBiYjNhMGI2ZGZiYjZjMTc4MDE0OGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3YzRmZjVmY2EyMGUzODk0Zjc3ZmY2NDk0Y2FmNmVkZDU2NzFiZjE3N2YyMmVmMDE3NDBlNzNhMTYwMTc3OWMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjBmMDMzM2U2ZTFlZjc5ZTY1MDliN2ZkNTA5MmZiMDFmMzY5NDQxODk0YzNmZGVjMTliOTU3NTY4NmJjNzc5ZDUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU1YjAwYjk5MjY2NDI4ZmU1NTI1NDYwZDE0YzNhMjZlNDI5Yzc3Yjk1ODUyZmEzNzEyYzEzYmNiMTMwM2I3MTAifQ" } ] }, @@ -386,19 +386,15 @@ }, { "id": "claim_fd359e43825344cb87abb3a4938e1663", - "statement": "An edited message first owns its same-ID staging run; the first real snapshot atomically reassigns only the staged row and removes staging, while live running/failed/interrupted adoption preserves provenance and chronology. Repository-instance retired IDs reject late saves/events; missing-model/credential failures still publish live before asynchronous save.", + "statement": "An edited message first owns its same-ID staging run; the first real snapshot atomically reassigns only the staged row and removes staging while preserving provenance and chronology. Repository-instance retired IDs reject late saves/events. Captured configuration failures project and adopt only after save success and an identity check; rejection reports an error and retires preparation without adoption. Queued-runtime cancellation remains live-before-save, and joining a save attempt does not guarantee storage success.", "evidence": [ { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L719-L793", - "version": "repo-lines-v1:sha256:81156ef97d808d87d63a184f6020940cf4a5bbbdecd8dc55a2d3a3c7e7b0b60c:eyJzZWxlY3RlZExpbmVDb3VudCI6NzUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE2YjhlMjRkZDNlZmY5YzY3YTZiNzg3ZWMwMjA3ZmMxZTI0ZGMxZTcwZmRlZWViNmFjOTljOGFkNjA1Yzk3YmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE2ODhmNzU3ODA1NDczNjk2N2U4NzY5MmJiYTg2YjI4MDhmMzI0MTk3NTQ0MDVlYmZkNmM0NWI3MTk4OWQ0NzQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRhNzdhMDY4Y2ZiMmUwMWRiMDJlMTAyZDRiODhhOWMzYWRlOTU3YTNhMWMzYjczOGE3ZTBjMWNmMTc5MTUwMjgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L784-L820", + "version": "repo-lines-v1:sha256:3a8d4faf591d7bce9a67365af3b6cc4e062c09c1dbfd76139ac4ecaa6412c6f8:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ5NDc3Yzk3MjM2ZjdjMzNlNGNlYmM4Y2Y0MzQ4NmEwYzU3YmQ1ZjFhMWFlZTY1ZTc4YzM1ODZkNmIxM2Q3MDMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3NWRkNzE5N2NkYzMzYzYwMDAwODY3MmM2NjEyZGFmNWUyMmMzMzAyNDdhM2FmMGJmODJlNDgwMmYzNmVlMjMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ3MTVmNGViNzI5YTZmMGMwMDk2MWMyN2JhMzFjNmU2ZGQxNWIwNTFkOTRhOGI5NzY3YWQ4Zjg3NGZmODBjZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2040-L2092", - "version": "repo-lines-v1:sha256:d1a56a12b39372c0277e40115884e11b8c29d16d3df1e847c7407b89efbd1881:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVkOGQ3MGNkOTIxY2E1NTJmMGEwZWIxMGJhNzc3OWQ2OTk0M2RlZjUwY2NhNjQ5YjIyZTg2MzU3OTgyM2ExM2UiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3YzRmZjVmY2EyMGUzODk0Zjc3ZmY2NDk0Y2FmNmVkZDU2NzFiZjE3N2YyMmVmMDE3NDBlNzNhMTYwMTc3OWMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjlhZDUyYWNhNzhkODcxNDMzZjJhNzMzZGJmMDQ3MGNmYTZhNGEwZGQzM2IzY2IwYzgyMTJlODNkYTIxY2ExZmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImJiNTdmZTYwMTUxZDJlN2IwYWNlZTEzOTJhYzI5OGUxYzBjOGE2OWRiMzlkNWU4OTllYzNkMzdkMTM4Njc3ZjMifQ" - }, - { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2625-L2646", - "version": "repo-lines-v1:sha256:078528287f4cac7401a61342ac1db3154e36f5566407f8bb9332cd63c543e273:eyJzZWxlY3RlZExpbmVDb3VudCI6MjIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdjZWUwZWU1M2M2NjUxODNlOTE0NjU5MDViZWY3ZDQyMTI0ZDRmM2JkYTJkNDg5MzlkNWIwNWQ1Yzc1MzIyODgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNmODMwOTk4YzhiZmMyY2EwMGQ0MGM5NDlmZTgxOTQ5ZmQwZDg4MTg1ZWUzOGNlMDNjMjAzNzg4MDZhZWQ4YWEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjA2YzUyZmU0ZTgxMjIzMWU2NGIyMGFmODc0MmI0ZGJjZWNhMjlkMDFjMTVjYzk1NDNjYzc0ZGFhNDAzNjlkZGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJmZGI5NTg3M2IxNmNiMTEwMGJjNGVmMGZmYWFiMzZmODc1Y2EzYmVjODY2MmIwMDA5YzEwY2JlNWE2YWVjNTMifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2147-L2240", + "version": "repo-lines-v1:sha256:aeadd4638c2467afe946e610f83cedce67e3e7eea89f5e2100233a4f9b700abd:eyJzZWxlY3RlZExpbmVDb3VudCI6OTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjBmMDExYjE4NWI1ZWM1M2UwMGY0YmIzZGMwNWFkOTNkMGVkOWQ3YTU4NDA5Y2FkYTc0OTBmYWU2NGY4M2ZiOWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRhYTU1YTdhMTYxOTZiOTEzNDVhNDI3NTMyZWYyNDdhM2NkMzIzMjY5YWVkOGJmZDI0NzMwZTQxMzdlOTkzMDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImQyYTlhNzI0OTZlMWQ2NWUyMWYxMzg2MmYwNzU1YjJkYWZjMjE3MmI1MTM3NmRiYTExYmIxYjI4YmE4MGRiNjUifQ" }, { "resource": "repo://Frameworks/TermindPersistence/SwiftDataAgentRunRepository.swift#L156-L165", @@ -409,10 +405,24 @@ "version": "repo-lines-v1:sha256:c1a4a9f265c86d77937e83acae5e2b69a2523713431a89d470dad62099d6b376:eyJzZWxlY3RlZExpbmVDb3VudCI6MTA2LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI3MmJiNmQ1NzgzMTJmNjJmZGQ3OWM4ODdhMGNjNmVkMDRjZDkwOTQwZjFhYWE3ZTlhNTAyMGVmNjkyOTFhOTU3IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJkY2UzN2IzN2YwNGIxOGQwODk0NmFmYTY3M2UwYzIzNjcyMWEwMzkwNTQ2YjM4NTUyYzI0YWY3MDc4ZTdhYjMyIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJlY2U5NjA2M2ViYmNhNjY1M2Q0YTYwYTViNjBjZWE4OTRkOTVmOWExNjQyZTQxNDEwMjFkNDZlNjQ4MjgyNGVlIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJmNTcxZWY2ZjVlOTYzMTE4ZDM3MTdiNGQ4MmI0YjBiOTliMmI0OTI3NjYzNGFjNWZiNmZhMGE3ZTVjNDBlZjhjIn0" } ] + }, + { + "id": "claim_c56eb71da18644078b4f56c48144c2c8", + "statement": "The captured configuration-failure save task strongly retains its controller and conversation until the attempt returns and preparation retires, including after callers release their handles.", + "evidence": [ + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L134-L157", + "version": "repo-lines-v1:sha256:b98f89f38a02619fe24af1c5df67726ef33c1f3737119fc09f407ec57de37c4d:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNmYjUwYTQxZDQ1MjY0ZjQyZDRiZGJkYzA1ZmQxODQ5NDdlODQ1MGRkNmJlNjFjOWRiN2ZiYThmYjA5ZDRiMmQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRmY2MxYmZiNTgzZDUyMDA0NjUwMTdlZTE3YzBlNzE5MWQwOTZjYWQ1MDVlYzcxOGY3NTQ3ODEzMTFlZjcyODQifQ" + }, + { + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L784-L820", + "version": "repo-lines-v1:sha256:3a8d4faf591d7bce9a67365af3b6cc4e062c09c1dbfd76139ac4ecaa6412c6f8:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ5NDc3Yzk3MjM2ZjdjMzNlNGNlYmM4Y2Y0MzQ4NmEwYzU3YmQ1ZjFhMWFlZTY1ZTc4YzM1ODZkNmIxM2Q3MDMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3NWRkNzE5N2NkYzMzYzYwMDAwODY3MmM2NjEyZGFmNWUyMmMzMzAyNDdhM2FmMGJmODJlNDgwMmYzNmVlMjMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ3MTVmNGViNzI5YTZmMGMwMDk2MWMyN2JhMzFjNmU2ZGQxNWIwNTFkOTRhOGI5NzY3YWQ4Zjg3NGZmODBjZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ" + } + ] } ], "verification": { "by": "openwiki/0.5.2", - "at": "2026-09-23T05:17:08.701Z" + "at": "2026-09-23T06:54:45.592Z" } } diff --git a/openwiki/.claims/architecture/system-boundaries.json b/openwiki/.claims/architecture/system-boundaries.json index 5383f219..e551363e 100644 --- a/openwiki/.claims/architecture/system-boundaries.json +++ b/openwiki/.claims/architecture/system-boundaries.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:3cbf1be9eb94f0eb87d83be0a1277c9801cb4df9a3da898ef95b63b20b72a785", + "pageVersion": "sha256:47037593b68f4328e80cb60aadad6bb3290eb90e38ef9005c31e46440925be24", "claims": [ { "id": "claim_085ce722f39f48eea75366ec3b3f7554", @@ -40,7 +40,7 @@ "evidence": [ { "resource": "repo://AGENTS.md", - "version": "repo-file-v1:sha256:7cd9b9e940106ce07b1fc987586fc9c6ca1c4f9489cabb02791b627a05a1eedb" + "version": "repo-file-v1:sha256:d9c994a1f4dde96fe39505281f40e992ce4760d2d6752de29f59060250bbdca9" }, { "resource": "repo://Frameworks/TermindPersistence/HostPersistence.swift", @@ -191,6 +191,6 @@ ], "verification": { "by": "openwiki/0.5.2", - "at": "2026-09-23T01:34:03.251Z" + "at": "2026-09-23T06:54:45.592Z" } } diff --git a/openwiki/.claims/concepts/agent-runtime-and-assistant.json b/openwiki/.claims/concepts/agent-runtime-and-assistant.json index e431b785..81bf642a 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:d3bcf7c3b342b7c7e0a24bff200d9de3fd902e66a05ac6d1f8ff1046b23948d5", + "pageVersion": "sha256:7b1c2e0d961fa1fba7e88eb2273136e7a6950c3a06f80900d23aab9694031e69", "claims": [ { "id": "claim_981f16f030e9469588af705aa377161e", @@ -12,7 +12,7 @@ }, { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L385-L504", - "version": "repo-lines-v1:sha256:0d91636ed62e262b1faebe69349c0c5b974af977be6c0af5e6b929b117ee81b7:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIwLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJlYzFiOGExODllNmEyYWM4ZTM1MmJlMDMxYmIzYWY0NTI2MjM2NDU0MDI2NzIwODY5NzZkNWVhNTQyYjk5MDQ0IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJlNmY0Y2JlMGYwMWM4NzRjOTVjMjU2YTY5ZTUyMDc1YTkyODI2YmE3YWFjMjQ0NmQ3MTczY2YyZjdmODI4YTQ1IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiIyYzE1ZWYyMzVmYjkyZDFkYmQwNTRjZTlmMTFiZTRmMzA0NTVkYmRjMmU3MzkwNGY0MDYzYzA2M2M5ZjM5MzI2IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwYTgyMDE0NmQwZGY4OGNkZmJjOWI2OTc3ZDZiODNhODBiNDYxNTkzNzRkMzQzNGRkOWQxYWRmNzk3YzgyYmI2In0" + "version": "repo-lines-v1:sha256:038f1d1dcab608d9de5e052060d6f9d7784a0fc9367aaf40c2fd00f978552040:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIwLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJlYzFiOGExODllNmEyYWM4ZTM1MmJlMDMxYmIzYWY0NTI2MjM2NDU0MDI2NzIwODY5NzZkNWVhNTQyYjk5MDQ0IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJlNmY0Y2JlMGYwMWM4NzRjOTVjMjU2YTY5ZTUyMDc1YTkyODI2YmE3YWFjMjQ0NmQ3MTczY2YyZjdmODI4YTQ1IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiIyYzE1ZWYyMzVmYjkyZDFkYmQwNTRjZTlmMTFiZTRmMzA0NTVkYmRjMmU3MzkwNGY0MDYzYzA2M2M5ZjM5MzI2IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwYTgyMDE0NmQwZGY4OGNkZmJjOWI2OTc3ZDZiODNhODBiNDYxNTkzNzRkMzQzNGRkOWQxYWRmNzk3YzgyYmI2In0" }, { "resource": "repo://Frameworks/TermindRemoteInfrastructure/Agent/AssistantToolRegistry.swift#L42-L68", @@ -34,7 +34,7 @@ }, { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L518-L632", - "version": "repo-lines-v1:sha256:b1882f48ba2a0c4f0faaa010c3ad73fbbfed243a2f0f51c0d883ed8058e5a3d3:eyJzZWxlY3RlZExpbmVDb3VudCI6MTE1LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIzN2U2Yzk0MTIwZGUzNjU0OGMxZjcwMTkzYzMxYzg0NTQ1ODI0OGQ0M2E4N2U2ZTU0MjY5MTBmY2VkYmJlOGJiIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI0ODkzZjQwZTM3ODFlYjg5NmM4MmQwNDZhMDgwNjdhMTFlMzVjZGYyZjFkZmFmMjZmZWE5MGI4ZGI2Njc2NDEzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI3NDhiNTNjYTI2MWZjOWVmMTVjMzg5YWVkYTA0Zjg2MTFjN2I0N2UxOGU2MjA5NWQxMWRmODkwYWNjMWQ4ZjRjIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwZWE5ZjA1OWViZGRiM2M1YTA1MTQwYTNhNTJjMTM2MmU4ZGVhZDhlNmU1MjllZWNhNWMyNjkxOGZhNTMyNTY1In0" + "version": "repo-lines-v1:sha256:6f0586148546ed005af984580253f2dc7d5de8689160a50bb5889c18111981cb:eyJzZWxlY3RlZExpbmVDb3VudCI6MTI0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIzN2U2Yzk0MTIwZGUzNjU0OGMxZjcwMTkzYzMxYzg0NTQ1ODI0OGQ0M2E4N2U2ZTU0MjY5MTBmY2VkYmJlOGJiIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI0ODkzZjQwZTM3ODFlYjg5NmM4MmQwNDZhMDgwNjdhMTFlMzVjZGYyZjFkZmFmMjZmZWE5MGI4ZGI2Njc2NDEzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI3NDhiNTNjYTI2MWZjOWVmMTVjMzg5YWVkYTA0Zjg2MTFjN2I0N2UxOGU2MjA5NWQxMWRmODkwYWNjMWQ4ZjRjIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwZWE5ZjA1OWViZGRiM2M1YTA1MTQwYTNhNTJjMTM2MmU4ZGVhZDhlNmU1MjllZWNhNWMyNjkxOGZhNTMyNTY1In0" }, { "resource": "repo://TFMTests/AgentRuntimeTests.swift#L141-L203", @@ -212,7 +212,7 @@ "evidence": [ { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L394-L404", - "version": "repo-lines-v1:sha256:3bcf15a3ce14b9ed88dd81ab4acccf0d8910eee98b7e5e350a7647991cea8ba8:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY4YjYyNmIxMGUzNGMyYmYxMTE1OTg5NGYyYjA1MTU4Y2I0NzVjYjJmODYyMjRiNjg2NjA2Nzk5M2JjNGEyZmQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA5MDJhM2QzZDU4YjYwMmY0YjZlNjhkMTAxMjRjZjE1YThmMTMwOGYyYThlMzdhY2RhNzQ1NDkzOWEyOTllOWEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijc0MDU4ZjhjMjAyYjNmM2Q5YTEzOGY2ZTMxOTAwZjc1YTVlZmM4N2Y3OWM1OGZmMzQ4Mzc2ODJkNzkyMTVkYmMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjNGM2YzQwNjcxOGIzOWFjYzE3Zjk5ZGE2NDhjZWJkNmRmODZiZWUwMmFkZjAzNDUxZTQ5YTRkZDExYmIwZjUifQ" + "version": "repo-lines-v1:sha256:66d30b530a00dffe56c652406a651bf0830bb3ee8b41fd7eb1e9143040eae97f:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImM2MGY0MjE3OTNjOGRmNzZlY2NhNjg2MDM4NzBlNzU3OWMxYzAwMGU2ZmMwZWVmOTJkZGY4OTBjNzU1OWEyN2UiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA5MDJhM2QzZDU4YjYwMmY0YjZlNjhkMTAxMjRjZjE1YThmMTMwOGYyYThlMzdhY2RhNzQ1NDkzOWEyOTllOWEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijc0MDU4ZjhjMjAyYjNmM2Q5YTEzOGY2ZTMxOTAwZjc1YTVlZmM4N2Y3OWM1OGZmMzQ4Mzc2ODJkNzkyMTVkYmMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRjNGM2YzQwNjcxOGIzOWFjYzE3Zjk5ZGE2NDhjZWJkNmRmODZiZWUwMmFkZjAzNDUxZTQ5YTRkZDExYmIwZjUifQ" }, { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L532-L566", @@ -469,20 +469,20 @@ "statement": "Desktop and mobile prepare edits synchronously before creating a UI task, preserving original attachment payload/suffix but capturing fresh submission context; performAgentEdit checks identity before tracked persistence and again before runtime preparation, and failed persistence does not apply the live edit.", "evidence": [ { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L450-L503", - "version": "repo-lines-v1:sha256:1c6b9ba0438e47aa7828a8f0a41cdc7625ac586fd9baee676a531b04a954769a:eyJzZWxlY3RlZExpbmVDb3VudCI6NTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZkYTc3OGQ5NDJjNzRkNGFjOGYzMmM1MTgyMDg2MGFlOGE2MDQ5YWE1NDUwYTE5NjMzMTM4MmNmNWVmNWU1MGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJhOTU4ZTIzMDAzNTJiNWU3NmQ0YzYyZWM3ODUyYjY4NjViZTQ4ZDgxODg3NDg2Nzk2ZTkyMTI2MmZkNGRmNTcifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L595-L649", + "version": "repo-lines-v1:sha256:3dd6107e821741808139e76b0838e0c52fbdfc6508eb6a1b57767ca1182fe492:eyJzZWxlY3RlZExpbmVDb3VudCI6NTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZkYTc3OGQ5NDJjNzRkNGFjOGYzMmM1MTgyMDg2MGFlOGE2MDQ5YWE1NDUwYTE5NjMzMTM4MmNmNWVmNWU1MGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImY0NjE2MTU1NzMzYmU0ZWIxN2MxYTlmODAxYWIyNmJjMWNmNDEyNzQyOWQwMzA0NzdlZGYzOWNkODVhN2YwMGIifQ" }, { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantConversationOperations.swift#L129-L147", "version": "repo-lines-v1:sha256:45383d212fb6991f01b24f3ea84538b0f619b50ed950673b4c79037e4de1652d:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU3ODhmN2QzZWVhNGY0NTY0NzdmM2QwMjliNTAzZDI5YmU4YjExOTNiNjJjZTZlOWMzZTk5ZDQ1NDczMjViNDYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijc4MzBkMzQxYjc5NmIyZjQyNTk4YTk3M2UwMTJkOGIyZTZjNTE2MDkwYzliMDQ0YWMwZDhkYTIyZjU2MzI4MzciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjoxLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L216-L281", - "version": "repo-lines-v1:sha256:0b8c25408aec78da9722af3b9358ea9a949a5bf115e9d69ec12834362b0fbdee:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk3MTI1MTA3NjE5NmE2NjI3OWU2MDFjYjExNTRjYjNkYTQyNmM0NmUxYzVkMjBmZDJiYmYyMWM3Yjg2MzE5MDEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImM4MDU1NTIyN2IxNGM1ZmEwYTQ0NTA1NjhmM2U0N2RmNzAxMDg1NjFlZDU4NjM3ZTZiODlkZDc5ZmVhOGE3NzgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjAwNDYxNmUzZjI2ZjhhZWRkMzU4YmNjODQ3OTZkZDA1MThhOTIzOWYxODRhMTAyMTY2ZDFkZTRmOGRmOTRmODIifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L228-L294", + "version": "repo-lines-v1:sha256:63f3e77065abfa4bf5f6b024bfcb930004c1dd89497d0ea4dfb16f4cffbb2689:eyJzZWxlY3RlZExpbmVDb3VudCI6NjcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk3MTI1MTA3NjE5NmE2NjI3OWU2MDFjYjExNTRjYjNkYTQyNmM0NmUxYzVkMjBmZDJiYmYyMWM3Yjg2MzE5MDEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImM4MDU1NTIyN2IxNGM1ZmEwYTQ0NTA1NjhmM2U0N2RmNzAxMDg1NjFlZDU4NjM3ZTZiODlkZDc5ZmVhOGE3NzgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhmNGEzZTYwN2U5Y2EwYTM1NTkxZmM2ZTIxNjZhNWUyMGU1MzNmZjNjYjY3Yjc5NWVlMTc1ZTE2NDM3ODgzOTEifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L1054-L1067", - "version": "repo-lines-v1:sha256:4f484d7cfc22662766e35da9dbd2bbae1e661c48fb02f3e454ed67e39e0efe50:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImZkNDEwYjZlNzRkZThiNjdmYWNlOGI5MDE5M2EzYWNiMzg2Y2U2OTk1YjQzMGUwZTVlNThhZmFiZWE0NDFmYTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU5MDlhNTNhNjE4ZDAyOGUxZDMwMDBjMGE3YWJjZWVjYmU1ZmIzN2Y0ZTUxMWVmZTQ2NjQzZmFkNmU2Njg3MmYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNmOWI5MjU0ZmFlZTRiMGFkZWU1YmRlMDZjYjY3MjI2ZGI3MDQ2NzUwYjU3NDVkZWQxNzI4YjQ2OTMyODEwZjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImMxODE2NWIyNGI3ZDdhMjdiNTZlZTIxZDVmNzk5NTFmODRkNTk5MDY1YmY3YzZlMzZkYzE5ZjBkZjM2ZWYyZGMifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L1101-L1116", + "version": "repo-lines-v1:sha256:70eb20eff459aff69f606cacc64e2820ff4dfef497ac0aa9b4d16242c3ebe5e9:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ5Yjk2NjZhZTAyNTVlNjdiODYwZTUxNmU2NTNjNDg2NThhZmYxN2Y3NjdhNTk2MjIxMDI4ZjQ3ZTcwMjJiM2YiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJlNTU4YzYzYTI3MmJmMmFmZmE5YTc2NGViNDBjOWIzMWU3NzUyMjBlOWI3ZTg0YTk3ZWJhNzk1YjIwNGQ0ODIifQ" }, { "resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L215-L227", @@ -496,45 +496,41 @@ }, { "id": "claim_52455054e49840aca30138327ea628e3", - "statement": "Preparation is separate from streaming, with combined activity guards; stop, global cancellation and mobile background expiration synchronously invalidate preparation identity, cancel and join tracked history/preparation work, and recheck identity after the interrupted save so stale work cannot retire a newer capture.", + "statement": "Preparation is separate from streaming, with combined activity guards. Ordinary cancellation synchronously invalidates identity, cancels and joins tracked history/preparation work, and rechecks identity after interrupted persistence. Once preparation enters savingFailure, cancellation instead returns its one existing terminal save task without cancelling it or adding interruption; successful save and identity recheck precede failure publication, while rejection reports an error and retires preparation without staging adoption.", "evidence": [ { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L88-L228", - "version": "repo-lines-v1:sha256:0034c170196c42d318ce328d8ce9ee1dd89409998248de0843e6a3e36d0aa5de:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQxLCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI0Y2YwOWViMGM1NzQ0ZmI5NzMzMWI5OGZmM2ZiZjA1YTYwMmJhM2Y3ZjY3ZTVkYTViZTkwOTUwMzNmNjI1ODI1IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI4NTU1MzI0NWZhOWIzYTg5Nzc5YTQ0MzliN2M3OTNjYzhjZDc2MjM3ZTIxMGI3YjI5ZDEyYmQ0OGEyYjNhOTkzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJhOTdmOTEwNGNiNzExYWZlYzlkMDQ4ZDZlNzA4OWU4YzFkMTIzMzRiN2Y0YjA2ODQzM2JjNjkxZDZmZTUxYmI4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJlOGVhZjNlMWRiMjg0ZjZhNmZkNGUwNjZhZTJmYjY1NGFlNjhmZGZjZjNlN2U0ZGNhNGMyZGQyMTRhNDliOWQwIn0" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L689-L717", + "version": "repo-lines-v1:sha256:bbb94ddd10755f8cf1b1844ea133c2896ffb57c69057eddb56ec03c7c3ea745f:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2MDA0NjNkOTgwYTgxZjIxMzI3OTc0MTJmY2M1M2RlODJkNTg0YWNjNGJhMTFjODdkN2NmNzNmZTg0MmRkY2YiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdiM2M1MzE3OGIwNjU0NDdkYTk1NjJlYjVhMTRjNDMzNDVlYmQyZWRkYjlkMmQ5OTFkZGIxNTQzNjkyNWYyMGQifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L684-L760", - "version": "repo-lines-v1:sha256:c80221e2f4c3085f440c78419a9e28c93800587fc504c207638be94c60943f8e:eyJzZWxlY3RlZExpbmVDb3VudCI6NzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc5MWU5ZTRiNmRkNTg0ODk5NmNmOTE2ZDQ1OWJiOGI1MTBkMzBjMWNmN2ZlYmYyYWI0N2MyOWY5MzU3MjI4ZWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU3OTg4YmRiMDg1OTc2MDA1ZWEyYjgxNzNjYmYxMjFjOTkwZjIzYWQzOWU0YzkxYmI1NDAyMDU3MWE2MTdiYWUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjhmZjgyYTA0NWVkNzg5MzI5YzJmZDc1N2ExNTA0OTdkZTJhYzI3ZmZhZWQzNmE0MWI4NGRmZjIzZmI0ZTRjMmUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjFkYzRmZjQwN2IwN2IxNDA1OTllZjEyNTQ3MzcxNTBjZjc2Mzk4ZTNkMDg0MTkwMWViZTE2ZDJiM2VhZGY1MTgifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L89-L232", + "version": "repo-lines-v1:sha256:06417f664159d51d61d0c4b32815f91c17e12c0127151e5dc657a463e34aa7cc:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQ0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI2ODc2Yjk2OGUwYmE1M2U1NTE2ZDdkMjM4ODIwMjU2NTYzZDk1NTM0NzhlZmMxMDZhMWFhOTQ5ZTFjNGE5OTJmIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiIwMWJhNDcxOWM4MGI2ZmU5MTFiMDkxYTdjMDUxMjRiNjRlZWVjZTk2NGUwOWMwNThlZjhmOTgwNWRhY2E1NDZiIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJlOGVhZjNlMWRiMjg0ZjZhNmZkNGUwNjZhZTJmYjY1NGFlNjhmZGZjZjNlN2U0ZGNhNGMyZGQyMTRhNDliOWQwIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJmYmE3MWNhMmVmMjRjOTljYWUwYzAyNjNiMzdlZTBkNzlhNjI0MWQyY2FhYzU2ODRhOWYyMDlmNzYyN2ZmMDZkIn0" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L69-L83", - "version": "repo-lines-v1:sha256:0d5f7cf554fd4cb9799565481fd35f87cf6deabc07509813f9f40d913426acea:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjlhZDUzYmFhYzE4Nzg1MmI0MzFjMjMyZTA1MTYwNjFkNDk2ZjdhMjE1NmVlNGJmN2RlYTY0N2ZjNjY0OTg2NmQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjY3MzJiN2I3NTFlYmQ1MmM4OWQxOGYwNzU4M2EwYjQ1MDY4OWNlMjkyYTIyNzJmNDVlNGZkNTY5ZGZhYjg1YmMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImExMjMyNjI1MGIyOGY3Yzg0NmRmODVkODZhMWM1MmM1MjBhNjM1Y2Y5ZGIzMTY3MjFhNTE1MDdjY2E2NjE4NGYifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L697-L820", + "version": "repo-lines-v1:sha256:573ad87c0b11a4de84485b6efb502dec46851957f042f8e9ec82bd6e97473bd1:eyJzZWxlY3RlZExpbmVDb3VudCI6MTI0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI5NjAyZDY4M2JmOTNkNjM2MTgwMmU2Nzg5Y2UzODc1Yjc4MDJhYzk3MWU2YmRjNzhkNGJjNmJiZDRiN2FmN2ViIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI4NzVkZDcxOTdjZGMzM2M2MDAwMDg2NzJjNjYxMmRhZjVlMjJjMzMwMjQ3YTNhZjBiZjgyZTQ4MDJmMzZlZTIzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI2YjBkM2YxNGUzNjMyYmE5ZjBlM2I5YTJhYTM4M2UwNjVhYTBhY2UxOWM1MTU4NTA2YTliMWJjNzQ1MjExYWU4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI0YzZjN2NkYzhjNGVjMGJjOWRlOGU2OTE4ZmFlMGFhOTg0NDEyYjQyY2U1YzM2OWVhMWUzMzI4NDdmOGYyMjliIn0" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2002-L2044", - "version": "repo-lines-v1:sha256:5f7c207116c45771d4001646f206431e25efa58c2af14a14e1a3dd246214827a:eyJzZWxlY3RlZExpbmVDb3VudCI6NDMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjJhNmU1M2Y5MmUyYzc2YmFhNWU3ZTY0NWE2YzczODVmZTU1NTYxMTkxOTczMWY3ZTczMTIwZTMwYjQxY2IxMDciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ1YTY2MjU5MDc5M2ZlMzYwNDc3ZTJkNzYzMWEyNTdjYzk2YmY3OWI5OWE5MzliZDJhNjZkOTBmNDM0MzY1ZjIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZiMWY2NWVjZTVlNWRlN2I1MGM5YmUwZWI4Yzg5NjZlMWRlYTliNzI4ZGQ3YTI5ZDIzZjNmN2U1NjM2MWM2ZjUifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2021-L2060", + "version": "repo-lines-v1:sha256:8d4c3fb9b24dfa0ab3d8fb7cb45f87ed9b26dfd5b8968fe78a901620259fc572:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjgzMzczZWM0MDZhNWVmOTI3NjRiZTgyZjMwMGUzNzYxOTE3Nzk0ODc5MDA0ZTkyMmM2NWI5NzllMjNmYTFlMDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQzYTY3OWY3NjY0ZmU2OGU3MDViYmQ2NDU1NjUwNmE3YmU3MmI4N2E5OGUwYWFkMTIzZjViNGRkYjIxZDc0ODAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjM1M2MwMzAxNDBiMDg4NjZhMWFlZjNiZGNjOWNkYjdjM2Y1ZDUwNDU2MTc1ZWYwMjI1Y2IyYjc2ZWNkM2QxOWEifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2227-L2242", - "version": "repo-lines-v1:sha256:0877731fa1e8352dfc7c8b1bdfee9b3fc14252c3499600a5e0969727f7c89879:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhmN2VjZjg2MjQ3ZmRjYTUwNThhY2VmOGMzNGE3ZTNjYzA2ZmU3ZDA1MGU1YWE0OGNjNDNkNmE0ZWRjZmViYTkiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJiNTdmZTYwMTUxZDJlN2IwYWNlZTEzOTJhYzI5OGUxYzBjOGE2OWRiMzlkNWU4OTllYzNkMzdkMTM4Njc3ZjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjE5NGMwNjM0YWI1Nzk0YTg2OTJlN2U2ZDI0M2FhYzEyYmEyOTM2ZDc2ODY5NTdkZDcxYWI0NGUzNDYyNzc1OGUifQ" - }, - { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L895-L900", - "version": "repo-lines-v1:sha256:9fcf92bd03be2ed38be9f053105c95d1fc4299bd68565fde983ed6b044b787c2:eyJzZWxlY3RlZExpbmVDb3VudCI6NiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZGJjZDc5Njg3ODBjY2VlZDAwMzExZWE1MmE3MDdiZTk2NWYxODZlYTJhNGM4NGEwZWUxMGQ2Y2M1YWM2NTdlOCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMzZiMTI5ODBjNTljNDNiNTBkZDIxYmJlZDczMzZiMzZjNjQ0OTdhYzg5ZDlhMWU0ZWQxNDIyOGFjZjIxMzFjZiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiYjg0YTExYWVkOTE4MTlhZGYxNjA4MjNjNzZjMjhkNzRjMjc1OGE1ZWIxOWQxNmY5ZTI5OWRhYTg0YTBhYmJmZiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZDgxOTI4NGM5ZmE5NWJhNzRkYmZiNjBhNTA0ZjI5Njc4OTU1NTQ4NzJmMjYxYjZjODA1YmNhMzMwNGM0Y2Q1OSJ9" - }, - { - "resource": "repo://TFI/Application/Agent/MobileAssistantModel.swift#L141-L153", - "version": "repo-lines-v1:sha256:a447b5e91a0ff06e0586ba98bce9ea20c40d2acd56bae2b931f831e2e81f8b7c:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU2ZjMxZTAyNWIyZDQ2MGNjNGNjZGY5NTdkNjkzMGM4MTRiM2JlZGRlZGQ5MDVjMjNkOTg1MGIxMTNmNTFiMDciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjA2NTdhYTY2MTFhOTk2ZTA3NjllNjNiN2VhYjJmMzIzYTEwZTA3YTAxMmViYjk1MTBjYTdhMTE4M2U1MzQ4ZDQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjAzNjFmYmU2YTJkNzg3MDAzYjc5NDliMDY4NTFjOGJlNDczNTI3MDNiZjAwYmZkYjM5YTVlZmEwZDAxYTdkNmQifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L880-L894", + "version": "repo-lines-v1:sha256:effe69b144bd9d7c0a32076fdae06243bc39251f850db112c0d6ff2c1b563740:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNhYzI2YWFiZWQxNTc5NjAxMzg4OWViMTk2ZGIzYzM1YzBlMjljMjU3MjkwZTI3Y2M0ZjdjNWZmZmMwMTc5ZjYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjIzY2ZiNzUzNjUxMjEyMTZkNjk0ZjlhMjQ3NWU2Y2IwNDFmMTdhMmVlZGYxNzdkNDk0YzdkMjgzZGRjYzA3YmQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjAwNTI0ZGU2ZDc2YzhhYTJkMzlmOGIzOGZlZTIwZjc1NWZkNDFlMzE3NzI1YzBhNTJjMGZkOTMzNjRjZGU3MzMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc2NjcwZjc1NjIzOThkYzdmZjNlZjVhMzVkOWRkMDY0NGY2NTU3ODY4ODA1ZmI4M2QyYzFjN2U1NzUzM2I2OTIifQ" } ] }, { "id": "claim_21c0e6a726c9423098e4ca8f42b2651b", - "statement": "Archive/delete cancel and join pending preparation before their activity guards; manual compaction refuses preparation, navigation leaves it active, and automatic compaction uses captured preparation settings while preserving persistence-before-live-apply ordering.", + "statement": "Archive/delete request cancellation and join pending preparation or captured failure persistence before their activity guards; manual compaction refuses preparation, navigation leaves it active, and automatic compaction uses captured preparation settings with persistence-before-live-apply ordering.", "evidence": [ { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L231-L255", - "version": "repo-lines-v1:sha256:63509c11ab1c2718bead3930614de6427e1e6df47c0e787aeed401498661891c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjY0YzVmZGJhOWRmZTUwNjMwNjlkYTdlN2RiZWVjM2QzZWRiNjE3YmUzMTQxYjBmNGEyYzY0OTEzNWI0N2M2ZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImIyMzkzYWYzYmRiOTExYzA2ZWFmMjNkYjMxZTkyMmNkNGY3NDc2MmYzNGFmMTE1NTJkNDczYzc1ODhhZmFhZTkifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L186-L232", + "version": "repo-lines-v1:sha256:097594636389e9cd19fc96d08c329f1f1bf55ec16f7f52bf5a8dcc5845eea1ef:eyJzZWxlY3RlZExpbmVDb3VudCI6NDcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjA3NmZlNzYwMGU0N2E1Y2E4NzcyYThjNmU0MThkMDEwNzFiM2RhNDAxODQ2NjFjN2Q2MzAzN2RjMzIzMWNkZjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZiYTcxY2EyZWYyNGM5OWNhZTBjMDI2M2IzN2VlMGQ3OWE2MjQxZDJjYWFjNTY4NGE5ZjIwOWY3NjI3ZmYwNmQifQ" + }, + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L377-L399", + "version": "repo-lines-v1:sha256:57fc8a5056ef2daacc45c49b9c7531b6e09dc48efa4c91167e87e481dc29f343:eyJzZWxlY3RlZExpbmVDb3VudCI6MjMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM0NDQ1ZGQ3NzZkZGY3MmE2OGI5ODIzMjUxMjgyYzFlNTI3NmIwNTQwYWVlMzQ3YmViZjEwMWQyODlkZGNmZDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJhNTdlYjBlMmFlMGQwZTFjNGJkOGY0MTFjZTc4NjU4ZjIzZjJmZWFmZTU3YTg5ZTUzN2E5YmNlNjljM2JhN2QiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAifQ" }, { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantConversationOperations.swift#L12-L28", @@ -545,16 +541,12 @@ "version": "repo-lines-v1:sha256:da559c6fb05b1afa694d3397263759479e8be0ff76854ea7fa06fd269153b9e5:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjBlZGZjY2UzODdkY2Y5MTEzNWQ4YjcyMzViYjIzZGU4ZDM4OGVkOWY0YjU5MzhkODdlMTM1ZjA3OGU5MzBlNjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImVmM2MyYmU5Yzg4ODZjMmM1YzI4MjYzOTk4MTBmZTYyMDY0YWZhZWEyN2RmMTNmNzQ5OGI4M2QyMmVlODBjODkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjViZDk1YzE1MTE4MTI1NDYxYzI5ZGMzMGJjNGJlOTFkZGUyOGI1NDFlYjJjM2NiZTkwNzc4NDA4NTFiZDMyZDcifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L632-L660", - "version": "repo-lines-v1:sha256:b7ea68c5df571de68ab0ae45d9c94ed876783cac80350d6c5d0b17aaf3a8683e:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVjMGM5OTdhNmNkYjEzZjBmMGY3NDJjNjE2YWRkMmMzYjRlOGMwZDY2OTQ2ZTlkNzQ5Nzc1YjY3YTBkNGY5Y2QiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZmNTNlNmY5NWE4YTI0ODczYjhiMTUyMjJmODMwOWNmNTE2OTY3N2NmYjgwN2JhN2YwYWQwMWQxYTAxMWJhMzMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijg1ZThlZjg0MGM3NWUwYTg0ZDlhYTdjN2NkMWY4MmRhMWU2ZmNlM2VjOTY4Yjk5YjIwYzYyZmU1MWYwZDg2OTciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L648-L677", + "version": "repo-lines-v1:sha256:20e8d55102d4e34a447997f0633dac52e0ef24bf81e6a7d5626490f158b51c34:eyJzZWxlY3RlZExpbmVDb3VudCI6MzAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVjMGM5OTdhNmNkYjEzZjBmMGY3NDJjNjE2YWRkMmMzYjRlOGMwZDY2OTQ2ZTlkNzQ5Nzc1YjY3YTBkNGY5Y2QiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2YjA0NDkxNDY5NzIyZTgzNjNhOTRlNDA0NDUzOGUwMTNhMmEyMTdlMzZiMWU1NjhiYTYwYWNiN2I0YzhmMmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijg1ZThlZjg0MGM3NWUwYTg0ZDlhYTdjN2NkMWY4MmRhMWU2ZmNlM2VjOTY4Yjk5YjIwYzYyZmU1MWYwZDg2OTciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQzNTAzNmFmMzFkMDY5MDkxNTZmZmIwOTU2MmE2YWIwYzYwNzI2OWEyNTg4OTdmMmM3MDQ1NTJiMTI4MTZlMDIifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L830-L839", - "version": "repo-lines-v1:sha256:ce3f227083ebc0587a705272d2c18cfa110d702714310ad736937b34384653a6:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjlhZDUzYmFhYzE4Nzg1MmI0MzFjMjMyZTA1MTYwNjFkNDk2ZjdhMjE1NmVlNGJmN2RlYTY0N2ZjNjY0OTg2NmQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNmNzA5MTI3NmEyNGM5MTU5YzRjZGUzZWZiY2RlYWM3YmQ4ZWM3ZjQxYzVkYjNhNmIyOWM3MTE1OGZkZDg5Y2IiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNlOGQzZmM2YzYwOTVmMmM4OTlhMmM0MTRlMTg4Zjg4MjY3MTA1ZjQ0ZTQ3ZTZhODQ4NjE3MTM1NGE1ZmYzYzMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY5MTNmNzA3ZWY5NzdkM2FlMDUxOTgzMGM2YTc2NmYxYmI1OTdjZjJlMDgxOTQ3MDM0MzU0ZWU0MTQ1ZjA0NmUifQ" - }, - { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L881-L892", - "version": "repo-lines-v1:sha256:511d122c9d8b8981de6d7c39b078ca3b5f6af4930853207aa98b7d3365557bf8:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZkNWViODBiM2MyZWVhZTUwMjUzNWRmMTM0YzJjMGY2NzljZGU3OTU4NDQzNjdmYzNhZjVjNDAzZWE4YzMyNjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJlMGJhYWZiMDE3NmFmY2M1Yzg3NzI0MTkzYmY4ZmM2NWU4MzgwNGUyYWUwYzk5YjZkODViZjViMmY2ZWFmODEifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L854-L862", + "version": "repo-lines-v1:sha256:504cda2464237420ec63c343898675c595d777aaaa1d5a37b00a8723ac6f734d:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMzI5ZjgxOTIzYTdiY2NkMzMzYWQwNDZiMTgzYmIyZGQzODllZDViYzJhMDZkNjk4NTliZWQ2YWU1YmI3NjgzNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiM2Y3Yjk4MGEyMGJhMTc5NGU2YjM1NmU2YTZlOTAyNjZmYTU4MmNkYWRkN2I5NWM5ZWM5MjdmNWY5ZjAzMzYzYiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMDVlYjdlNGI2YTk2YmJlNWNiYTMxZDY4ZDdhYWRiNzAxNWJhMGIzYWM1YzU5ZTNmY2I4M2QwMWE4OTdlOGVlMyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiODFlYWE3ZWIzN2Q3NzY1N2QyZjU3NjE4NzZhZmE5MDU2MGY3NjcyYTQ3NzEwZTQ1MWRiZTU1ZWRkZDQzZjYyZiJ9" } ] }, @@ -615,16 +607,16 @@ "statement": "A missing model or credential at capture stays a failed submission even if configuration is supplied during preparation.", "evidence": [ { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L66-L85", - "version": "repo-lines-v1:sha256:80d25cc0451a928bc50f91e07a28b411b83c0d7299889938c179b8d5e96fb33b:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImY1OGZlNzcyYzJiNDExMGEyYzJhOWQxYTk5MjI3OGY4ZTNmZDg5YzMzNzJlZjZmYjE0Y2NjYmU1NDU3MmQyMWQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZkMzMwZjllZDlkNjUwYTVhMDRlNTk4Y2YxNmE2NmZkOTM3NWZjYWIxMzhkMmJiNmE0MWYxNTJjYzRjMjExNDQifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L66-L86", + "version": "repo-lines-v1:sha256:80d25cc0451a928bc50f91e07a28b411b83c0d7299889938c179b8d5e96fb33b:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImY1OGZlNzcyYzJiNDExMGEyYzJhOWQxYTk5MjI3OGY4ZTNmZDg5YzMzNzJlZjZmYjE0Y2NjYmU1NDU3MmQyMWQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk3ZGY0M2ExZTA3MDM2YzJmMjk2OGUwYzdmMjZhMzQ2ZDJjOTliNWU4MmUyYWU2ODFkZWVhODQ5MWFlMmE2ZWUifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L348-L379", - "version": "repo-lines-v1:sha256:6eaf43bb757978c5badc8b8bc08b8d551439733c979c24ef1a948607211463ce:eyJzZWxlY3RlZExpbmVDb3VudCI6MzIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjBjNmE0YjUxN2VkYTk2ZmVhODI1MDU2NzdjMGJlNmY0NTYzM2E1NTVjNzg3MTM4OTkxOTcxN2M4YWY2ZTY3MzUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU1MDMyZTk2NGQwOTMyMzUxZTVkMTg1MjY5MjgxYjE3MWEzYTA5YjA4YjI4NmU2NjFlYTQ3MDMyM2M4MmViNGQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk3MWE2YmMwYjNlZDNlZmEzMmI4NjkzYmQxYTljOTg4NjZhYjU5YjM1NjlmMTMxYmNjOWU1YjBkNDE1MGJkYzMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRiYTg0YTA3Nzk4ZjI3OTg2OWI0MzVlN2JkZTYyZmRjODZkNGFmOTM3MmRhNzIyZjk1YzYyNjlhMmFiOTAzZTcifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L351-L386", + "version": "repo-lines-v1:sha256:b745e63d660e2fa89e550983ab77ec29af93c029251043b7869e16a2bd346733:eyJzZWxlY3RlZExpbmVDb3VudCI6MzYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIwYzRmYjc2MWFjNmVmZDQ0YzY2Zjc1ZjMyZmJlMmI2MDBlZWMyYzdmMGQwYjBmMGZhM2JjYmFlMzY5MWQzZjgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjAwYWFhOGQ2YTcxZmY4OTIyNzczMzM4NDIxMWM5MTJjZmVlYTY1MGJmYTExODgzNGUzNjAxZDgxM2M4YmQxOGUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJiZjg5OWQzZTUyNzU4YjE5ODcxMjc5NzVlMzcyYTU1OTE4MTUzNjFhZGQ4ZmNlZWFiYjNlMmUwYzBiZjM3YTIifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L523-L525", - "version": "repo-lines-v1:sha256:3cad3b5cb26d6fd2806c7989d5cd8b766f0080b717490e9a6998983f8650f32b:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNDcwYjdhMjk5OTAzODQzNTQ2ZDM5YmFkZDg5NzQ4YmNjMTUzZTQ0NmZkZWY5OGQwZWQ1ZGZmZWI3MWZlMjYwZSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMjFiNmJkZjk5Njg4ZWIwNmJkNWI1YjVhOGI4ZDZhODg2NzExYjVkMzY2YTY2Mjg1YWQ2YjAwOTU1YjRlZmQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiM2RkZmFhMDUwMzQ3NzIxMThiMjE4ZWU1MWZjZjMyN2U5ZGMwYjUwNTRjYjE5OGFmOTcwMGI4MzM5YTJhZTkzNSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNTEzM2Q3NzZkZWFkNDA1ZTEyOTNiZWRiMzdkZGRmMmFjNDA0OTJhNGE1NDRjYjhjZTQxZDQ4Y2JhMmQ3ZTBlMyJ9" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L523-L533", + "version": "repo-lines-v1:sha256:b3860a4f7d61bdc1c99d7174ee8c662324e9f8fd786246d547aaaccf84ce6a0c:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM3ZTZjOTQxMjBkZTM2NTQ4YzFmNzAxOTNjMzFjODQ1NDU4MjQ4ZDQzYTg3ZTZlNTQyNjkxMGZjZWRiYmU4YmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg5MDUzNmU5MDk0YTUwNGNkMWZkODY2ZjUxZDliMWI3NWU2NmU3MzZiZGYwNmU1NmY1ZjU1MDM4YTUxNWE1ODYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijc0OGI1M2NhMjYxZmM5ZWYxNWMzODlhZWRhMDRmODYxMWM3YjQ3ZTE4ZTYyMDk1ZDExZGY4OTBhY2MxZDhmNGMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdhZmUxNTg2Yzk2OGI2MDgzMTE1MzhlZWFhMTE0ZDEyOThkM2RjNjk4ZWU4YTUwY2U1MDEzOTIwMjJlNjBhMmQifQ" } ] }, @@ -744,31 +736,23 @@ }, { "id": "claim_eb12b2d099c145dba48004e4797b19a7", - "statement": "Live run-started, captured-failure, preparation-interrupted and queued-runtime-cancelled paths adopt the staged replacement's actual run provenance and chronology. Preparation cancellation awaits save and rechecks identity before adoption, whereas queued-runtime cancellation and missing-model/credential failure project live before asynchronous save; only the queued cancellation's stopAndWait joins its save attempt.", + "statement": "Live run-started, captured-failure, preparation-interrupted and queued-runtime-cancelled paths adopt the staged replacement's actual run provenance and chronology. Preparation interruption and captured configuration failure await successful save and recheck identity before adoption; rejected failure persistence leaves staging intact. Queued-runtime cancellation projects before save. stopAndWait joins the relevant save attempt, which does not guarantee storage success.", "evidence": [ { - "resource": "repo://FrameworkTests/AgentReplayPersistenceTests.swift#L114-L195", - "version": "repo-lines-v1:sha256:e04b4abd57b7b220f9a0e87a9be347cc76190405efb19f7ffeda06c847620bdc:eyJzZWxlY3RlZExpbmVDb3VudCI6ODIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRhMTMwMDNhMmEyMDc0NmI2ZGY4NjAxNjVlZDkwNjg4OTZlNjUyODA4Y2Q3YTM2MDdlNjhjMjRhYTlkMmFmOGYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc5MjQxN2JmMzllNTM0Nzc3NGNkOTQ1NmY5NjExNzQzMDA1NWVjYTU0MDFkOGI3OWNmN2Q5YzJiYzM3YWQ5MzYifQ" + "resource": "repo://FrameworkTests/AgentReplayPersistenceTests.swift#L114-L269", + "version": "repo-lines-v1:sha256:97fd1f52a5ac06c31001c84eab8a533c78eaccbff1efd2975553de5780ee2b9e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTU2LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI0Y2YwOWViMGM1NzQ0ZmI5NzMzMWI5OGZmM2ZiZjA1YTYwMmJhM2Y3ZjY3ZTVkYTViZTkwOTUwMzNmNjI1ODI1IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiIwMWJhNDcxOWM4MGI2ZmU5MTFiMDkxYTdjMDUxMjRiNjRlZWVjZTk2NGUwOWMwNThlZjhmOTgwNWRhY2E1NDZiIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI0YTEzMDAzYTJhMjA3NDZiNmRmODYwMTY1ZWQ5MDY4ODk2ZTY1MjgwOGNkN2EzNjA3ZTY4YzI0YWE5ZDJhZjhmIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI3OTI0MTdiZjM5ZTUzNDc3NzRjZDk0NTZmOTYxMTc0MzAwNTVlY2E1NDAxZDhiNzljZjdkOWMyYmMzN2FkOTM2In0" }, { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L476-L534", - "version": "repo-lines-v1:sha256:435b7b43d6dfe28c7d197656e31af82f72b308168427674bccfeb12777d04735:eyJzZWxlY3RlZExpbmVDb3VudCI6NTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjYwZWU0MDJjOGFkMzY5M2YwZjFjNzY1MzZlZTk5OTVmZWMxYjkzNTBkNzU5YTVkOGUyMDY0YmRhYjRlN2Y1MzAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk1NTUyNmNmOWEwOGQ4Yzc1ZTA5ZThhMWZhMTIwODkxZmQ3MWEwMDNhMjkwY2U5ZTEzY2YwOWQ5NjRmYjkxYWUifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L689-L717", + "version": "repo-lines-v1:sha256:bbb94ddd10755f8cf1b1844ea133c2896ffb57c69057eddb56ec03c7c3ea745f:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2MDA0NjNkOTgwYTgxZjIxMzI3OTc0MTJmY2M1M2RlODJkNTg0YWNjNGJhMTFjODdkN2NmNzNmZTg0MmRkY2YiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdiM2M1MzE3OGIwNjU0NDdkYTk1NjJlYjVhMTRjNDMzNDVlYmQyZWRkYjlkMmQ5OTFkZGIxNTQzNjkyNWYyMGQifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L719-L797", - "version": "repo-lines-v1:sha256:264e0504f5139486947350a5ec872d5440593d50d499f73e6156a8fc3b7a6ffc:eyJzZWxlY3RlZExpbmVDb3VudCI6NzksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjUyNjU3ODFmNGU1ZDY5ZTk4OWU5YjFkOWQ5YzRlMTgyMDZmMTI1ZGUwNmU0OTVjOWUyOGE1OGMzYTEwOWY3ZDUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImMzZDYyMjM4YjljY2EzZTg2ZTlmMDM1ZWM0YzFhMmJkNDI0ZWIxYmEwMzUzYzU4ZjhkMGVjMjMzYWE0MDMyOGQifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L738-L820", + "version": "repo-lines-v1:sha256:6d146eff97275cd62487bfad2c03014fc984feffae2753012b1c6107e541c5f4:eyJzZWxlY3RlZExpbmVDb3VudCI6ODMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE2YjhlMjRkZDNlZmY5YzY3YTZiNzg3ZWMwMjA3ZmMxZTI0ZGMxZTcwZmRlZWViNmFjOTljOGFkNjA1Yzk3YmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3NWRkNzE5N2NkYzMzYzYwMDAwODY3MmM2NjEyZGFmNWUyMmMzMzAyNDdhM2FmMGJmODJlNDgwMmYzNmVlMjMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRhNzdhMDY4Y2ZiMmUwMWRiMDJlMTAyZDRiODhhOWMzYWRlOTU3YTNhMWMzYjczOGE3ZTBjMWNmMTc5MTUwMjgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2131-L2166", - "version": "repo-lines-v1:sha256:20935b8e4d562e7318f72909f63c38e93c8c3eea78fc9e624b0dd6507ccb26fc:eyJzZWxlY3RlZExpbmVDb3VudCI6MzYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjYxZjE5MzcwNTE4YzZmN2QwYTk3YmU0ZTFkMThiMTliMzk1MzMwM2E2ZjA1YWY1NTVhZjYzYTg5NTZhYzQ0NjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZmMGQ3NTk1MGRmMGZmOWEzZWU5NjYzOWRjYzhmZjVlYWVkYjQwZDY4MmJlYTkyNjIyYjUyMGRkODg3ZDkzZTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRiOWM2YjNmMTRkNjAwZjcxY2Y5YzBmZDdkOThiMTljZjQ1MzMxOWYzYWQyMzFhMmIxNDA4YjRjZmQ2NTNjNDkifQ" - }, - { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2171-L2224", - "version": "repo-lines-v1:sha256:02cd0d582029e215a49f5473ec19e433dda398fb1bf3526919d5b4d87cad0e2b:eyJzZWxlY3RlZExpbmVDb3VudCI6NTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVkOGQ3MGNkOTIxY2E1NTJmMGEwZWIxMGJhNzc3OWQ2OTk0M2RlZjUwY2NhNjQ5YjIyZTg2MzU3OTgyM2ExM2UiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjlhZDUyYWNhNzhkODcxNDMzZjJhNzMzZGJmMDQ3MGNmYTZhNGEwZGQzM2IzY2IwYzgyMTJlODNkYTIxY2ExZmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjAyMDJkMWVjMzI2MWJhMDI3M2Y4M2Y4NzVjZDYyMDE0NGVlYjdmNmE4OGQ3NjRjZjUwMDFkNGY3MzI2ZGE4ZjAifQ" - }, - { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2790-L2820", - "version": "repo-lines-v1:sha256:9f1fd5a5eabda463aa83e327bcdf01a23021582c819550c870538be441fa237d:eyJzZWxlY3RlZExpbmVDb3VudCI6MzEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNkOWI4N2E4OTdlYjVhOTk0MmY4ZTliNjFhMTk0ZThlZDQzODg3MzE3YTlkMmZmZWUxYzI2NzgyYWRjYmUwOWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjJkMGJhMmVmZGVlZTg3MTExODdlMWRlMDc5ZTZkNmYzMTVkYzUyMTY1MzdmMWMzZjc4NzFlMjE4ODljYjY0YzkiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ4ZDUxOWQ4ZGMzYjIyZmUxOGIzMDY2MjU0OTU1NGI1Zjc2NDMwM2MyOWI0NTZjNWNhYzdiZjUzMDM5NTdlNDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEwNWNmZjQ1MWYyZTI3MmQwOTc3OWQwYmExODM3NzU2NzcxYzIzMzA5YjQzMmQ4OWMzNTIyYmI3YWM0ZmJlMWUifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2147-L2255", + "version": "repo-lines-v1:sha256:f7c4fb5c08a0616ca44af1d854b265e1fdf05d6e8d98c0ba3659712fb92a714e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTA5LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIwZjAxMWIxODViNWVjNTNlMDBmNGJiM2RjMDVhZDkzZDBlZDlkN2E1ODQwOWNhZGE3NDkwZmFlNjRmODNmYjljIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiJhZDllZDdlZjJmZTQ4ODA2MjdhYTIxNDdkYzRlN2IxNDgwYzJmMGY0NTQxNGFhYTJmZGNmNGNjNmEyNjUyMTJjIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI0YWE1NWE3YTE2MTk2YjkxMzQ1YTQyNzUzMmVmMjQ3YTNjZDMyMzI2OWFlZDhiZmQyNDczMGU0MTM3ZTk5MzAzIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIxOTNjNGJiNDJjZGQxYjg4NzQwMmM2ZDUyMGE2NGY5NmJlNmRhMmRjYmFhN2IwZjA4NTQyMjE5MmM0NDk3YmZkIn0" } ] }, @@ -877,10 +861,58 @@ "version": "repo-lines-v1:sha256:b7653b07c27d97951ef1ff2e860483c8774a6281bedddb2049bb368cfcb7a2f5:eyJzZWxlY3RlZExpbmVDb3VudCI6NjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImM4NzY2NjhiZmJlNjM1NGJjNGVmNjQ4NjBlMjVmOTkzY2ZjMWJmZWM4NGVmMjFhMmE1ZWY4OTM5YzBlZjdiMWEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3NmM1MmY0NWEyMTRkNmRiYmJmMTIwMDRlYmMwNTE1MjkyNzVhZmE2OTlmZGEwNjcxYmFhNmFjYzZlNzVkNWYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ2NmU4ZjFjYzllNzRkNTllYzgxYjhiZjBmNmY5ZWQ4YjRjNjI2YjRlNjg4MmZjMDBhZGU3MTgyMzk3Y2Q4YmUifQ" } ] + }, + { + "id": "claim_4a9771452ead45e28f2078d9182a28b6", + "statement": "Captured configuration failure persistence retains the controller, conversation and repository until the save task returns, replaces the enclosing preparation task without self-await, and refuses edit supersession plus direct edit/fork operations until retirement; ordinary prepared edits remain supersedable.", + "evidence": [ + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L134-L157", + "version": "repo-lines-v1:sha256:b98f89f38a02619fe24af1c5df67726ef33c1f3737119fc09f407ec57de37c4d:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNmYjUwYTQxZDQ1MjY0ZjQyZDRiZGJkYzA1ZmQxODQ5NDdlODQ1MGRkNmJlNjFjOWRiN2ZiYThmYjA5ZDRiMmQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRmY2MxYmZiNTgzZDUyMDA0NjUwMTdlZTE3YzBlNzE5MWQwOTZjYWQ1MDVlYzcxOGY3NTQ3ODEzMTFlZjcyODQifQ" + }, + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L652-L686", + "version": "repo-lines-v1:sha256:204b187bc56e58ba5718dae42d8c67838ce91fe119dddd523ff2b5b479bf3157:eyJzZWxlY3RlZExpbmVDb3VudCI6MzUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjFhYTU4ZmU0MmEyZWE4ODVmNDg3OWQ3MzVlOGJkMzU2ZTczYmEwZDFkNjkxYzc5MWVmZmU5YmE5YzJjNDg5ZjciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg3ZGNlYTZjODRkNTBjODkyMjYzNTcxMDQwMmQ5NTdhZGViMzI0ZDg2YmY5NzBiOTQ4NWRjNmUzZGY0NGFjOGEifQ" + }, + { + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L580-L645", + "version": "repo-lines-v1:sha256:78614a89ac0b4b379fa6a786e94ecde151212950698960df912627c62ae98356:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU0ZDAxODA3ZGNmMmZiYmQ5OTlhOTJjMWJhMGY2YmRkNWY4MGViYmRkOThjZTQ2MWYwMGRlZjBiNTQ3OTgwZDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3NWRkNzE5N2NkYzMzYzYwMDAwODY3MmM2NjEyZGFmNWUyMmMzMzAyNDdhM2FmMGJmODJlNDgwMmYzNmVlMjMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjEzOTk1MmMwODMwOWU3Zjk4MzNiMDc1MmI5NjNlNDIyZWZlYWUyZDI2NmQxY2YzYTc2NWEzZDZhN2M3YTU3OTciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjI5ZDI3MjNlYzczZWMzZTlhODdmM2QzNmI0ZTU2Y2NkZGYxZGI0MDM4OTk2YjQ4NTczODEwM2UxOWFkMjdhODEifQ" + }, + { + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L784-L820", + "version": "repo-lines-v1:sha256:3a8d4faf591d7bce9a67365af3b6cc4e062c09c1dbfd76139ac4ecaa6412c6f8:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ5NDc3Yzk3MjM2ZjdjMzNlNGNlYmM4Y2Y0MzQ4NmEwYzU3YmQ1ZjFhMWFlZTY1ZTc4YzM1ODZkNmIxM2Q3MDMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3NWRkNzE5N2NkYzMzYzYwMDAwODY3MmM2NjEyZGFmNWUyMmMzMzAyNDdhM2FmMGJmODJlNDgwMmYzNmVlMjMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ3MTVmNGViNzI5YTZmMGMwMDk2MWMyN2JhMzFjNmU2ZGQxNWIwNTFkOTRhOGI5NzY3YWQ4Zjg3NGZmODBjZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ" + }, + { + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L1088-L1127", + "version": "repo-lines-v1:sha256:b17c24ee237eab5393c8275af0750d4c90435d607878c72ba65fb3664e1f1664:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImI1MmFjMDJlY2QwNWE5M2M1NGI3NDdjNDIxM2IxZDdmMjY5OGM4ZTRlMjBiYjNhMGI2ZGZiYjZjMTc4MDE0OGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3YzRmZjVmY2EyMGUzODk0Zjc3ZmY2NDk0Y2FmNmVkZDU2NzFiZjE3N2YyMmVmMDE3NDBlNzNhMTYwMTc3OWMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjBmMDMzM2U2ZTFlZjc5ZTY1MDliN2ZkNTA5MmZiMDFmMzY5NDQxODk0YzNmZGVjMTliOTU3NTY4NmJjNzc5ZDUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU1YjAwYjk5MjY2NDI4ZmU1NTI1NDYwZDE0YzNhMjZlNDI5Yzc3Yjk1ODUyZmEzNzEyYzEzYmNiMTMwM2I3MTAifQ" + } + ] + }, + { + "id": "claim_72ba80e4518341798ba555bef3508fca", + "statement": "Controller regression fixtures use blocked save attempts and synchronous MainActor join probes to check ownership, Stop/controller joins, save-before-archive/delete ordering, edit/fork refusal, lifetime after caller release and injected save rejection without staging adoption. The controller failed-edit restore fixture checks payload, context, permission and chronology through a fresh ModelContext in an in-memory SwiftData container, not a disk failure or process restart.", + "evidence": [ + { + "resource": "repo://FrameworkTests/AgentReplayPersistenceTests.swift#L196-L269", + "version": "repo-lines-v1:sha256:7697da7b2aab9dddc1b7d45cb0d33eb8cd52a84562a516b2156d742ce8a0d558:eyJzZWxlY3RlZExpbmVDb3VudCI6NzQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNiYjg4ZDJmYmY0Njc5YmVjNzJmYjM3MWQ4ZjVmNWMwZGU3YzM2YWEyNDFjN2ZjYzU3Y2NhZGM2NmQ2MTQ3NzkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc5MjQxN2JmMzllNTM0Nzc3NGNkOTQ1NmY5NjExNzQzMDA1NWVjYTU0MDFkOGI3OWNmN2Q5YzJiYzM3YWQ5MzYifQ" + }, + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L652-L717", + "version": "repo-lines-v1:sha256:6b8eb70bb6c318b4e14ac50fde58fbd362830d046c50e1727140d6980e727740:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjFhYTU4ZmU0MmEyZWE4ODVmNDg3OWQ3MzVlOGJkMzU2ZTczYmEwZDFkNjkxYzc5MWVmZmU5YmE5YzJjNDg5ZjciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdiM2M1MzE3OGIwNjU0NDdkYTk1NjJlYjVhMTRjNDMzNDVlYmQyZWRkYjlkMmQ5OTFkZGIxNTQzNjkyNWYyMGQifQ" + }, + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L797-L814", + "version": "repo-lines-v1:sha256:af356e00debb9d78ef75b58cde8ef7cbc573512c578ef87eb17ed868648285b6:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ0NzUxNDBlMjZlOWM1YTE3MTFkNjQ0NWExOGI3ZjRhZTIwMjJmOTkzZWY2Mjg0MDc1NTQzMDFiOTZlMGRjMjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjBmN2Q5MjQ1MDBjZTE0ODEwOTUzODdhNWU5ZWIxYmMzYjFlM2VhYWY1Y2ViMzBkMTQ2Y2MwNTU0YWU1MWRlNmIifQ" + }, + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L89-L232", + "version": "repo-lines-v1:sha256:06417f664159d51d61d0c4b32815f91c17e12c0127151e5dc657a463e34aa7cc:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQ0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI2ODc2Yjk2OGUwYmE1M2U1NTE2ZDdkMjM4ODIwMjU2NTYzZDk1NTM0NzhlZmMxMDZhMWFhOTQ5ZTFjNGE5OTJmIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiIwMWJhNDcxOWM4MGI2ZmU5MTFiMDkxYTdjMDUxMjRiNjRlZWVjZTk2NGUwOWMwNThlZjhmOTgwNWRhY2E1NDZiIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJlOGVhZjNlMWRiMjg0ZjZhNmZkNGUwNjZhZTJmYjY1NGFlNjhmZGZjZjNlN2U0ZGNhNGMyZGQyMTRhNDliOWQwIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiJmYmE3MWNhMmVmMjRjOTljYWUwYzAyNjNiMzdlZTBkNzlhNjI0MWQyY2FhYzU2ODRhOWYyMDlmNzYyN2ZmMDZkIn0" + } + ] } ], "verification": { "by": "openwiki/0.5.2", - "at": "2026-09-23T06:11:02.802Z" + "at": "2026-09-23T06:54:45.592Z" } } diff --git a/openwiki/.claims/concepts/persistence-and-secrets.json b/openwiki/.claims/concepts/persistence-and-secrets.json index abfa490f..2c3475dd 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:6f9cbf0a3aa5fea9637709e225bee6cf28af7cdf172609b3c903f75bade148b7", + "pageVersion": "sha256:f69ed12d7d30fae123a7513fe0417b3822282a643f6ae6127089ba9bc407b7c8", "claims": [ { "id": "claim_e50b505da2214c6781fa8eb1a146dacf", @@ -412,25 +412,51 @@ }, { "id": "claim_b0b5b4708fda4de6bcc5775728746d34", - "statement": "Application history mutation publishes only after truncation commits, but captured missing-model/credential failure still projects live before a separate asynchronous save; live failed/interrupted adoption therefore does not turn preparation completion into a universal persistence barrier.", + "statement": "Application history edits publish after truncation commits. Captured configuration-failure persistence remains preparation-owned until return, and success plus identity recheck precede failed projection and staging adoption; rejection reports a persistence error and retires with staging intact. Synchronous Stop preserves the save task without cancelling it or adding interruption; stopAndWait or awaiting the controller-cancellation task joins it. Archive/delete await it and edits/forks cannot overtake it. Queued-runtime cancellation still projects before saving, and a join guarantees attempt completion rather than storage success.", "evidence": [ + { + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantConversationOperations.swift#L12-L81", + "version": "repo-lines-v1:sha256:5094626afffa14ec455d6b6233a6753c625cc0d6c8892b5acd4403a8649d1e3d:eyJzZWxlY3RlZExpbmVDb3VudCI6NzAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImZkNWFkOTQ4ZjVhN2JlOWJlMTVkNTRhY2EwNzlmZWI4MDYwMjNlMjVjNjIzNmVmMWI0NTM0YzQ0NDA1ZTk1NDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImI5NDU0MDY3MDk1MTM2ZmQyMDViNmNhM2JkMGFjYjk5N2M0MDg5M2JjNGI4OWFjMzMxN2YxZmNhYzFiMzc5ZmUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjViZDk1YzE1MTE4MTI1NDYxYzI5ZGMzMGJjNGJlOTFkZGUyOGI1NDFlYjJjM2NiZTkwNzc4NDA4NTFiZDMyZDcifQ" + }, { "resource": "repo://Frameworks/TermindApplication/Agent/AssistantConversationOperations.swift#L129-L147", "version": "repo-lines-v1:sha256:45383d212fb6991f01b24f3ea84538b0f619b50ed950673b4c79037e4de1652d:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU3ODhmN2QzZWVhNGY0NTY0NzdmM2QwMjliNTAzZDI5YmU4YjExOTNiNjJjZTZlOWMzZTk5ZDQ1NDczMjViNDYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijc4MzBkMzQxYjc5NmIyZjQyNTk4YTk3M2UwMTJkOGIyZTZjNTE2MDkwYzliMDQ0YWMwZDhkYTIyZjU2MzI4MzciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjoxLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L719-L793", - "version": "repo-lines-v1:sha256:81156ef97d808d87d63a184f6020940cf4a5bbbdecd8dc55a2d3a3c7e7b0b60c:eyJzZWxlY3RlZExpbmVDb3VudCI6NzUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE2YjhlMjRkZDNlZmY5YzY3YTZiNzg3ZWMwMjA3ZmMxZTI0ZGMxZTcwZmRlZWViNmFjOTljOGFkNjA1Yzk3YmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE2ODhmNzU3ODA1NDczNjk2N2U4NzY5MmJiYTg2YjI4MDhmMzI0MTk3NTQ0MDVlYmZkNmM0NWI3MTk4OWQ0NzQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRhNzdhMDY4Y2ZiMmUwMWRiMDJlMTAyZDRiODhhOWMzYWRlOTU3YTNhMWMzYjczOGE3ZTBjMWNmMTc5MTUwMjgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L697-L820", + "version": "repo-lines-v1:sha256:573ad87c0b11a4de84485b6efb502dec46851957f042f8e9ec82bd6e97473bd1:eyJzZWxlY3RlZExpbmVDb3VudCI6MTI0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI5NjAyZDY4M2JmOTNkNjM2MTgwMmU2Nzg5Y2UzODc1Yjc4MDJhYzk3MWU2YmRjNzhkNGJjNmJiZDRiN2FmN2ViIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI4NzVkZDcxOTdjZGMzM2M2MDAwMDg2NzJjNjYxMmRhZjVlMjJjMzMwMjQ3YTNhZjBiZjgyZTQ4MDJmMzZlZTIzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI2YjBkM2YxNGUzNjMyYmE5ZjBlM2I5YTJhYTM4M2UwNjVhYTBhY2UxOWM1MTU4NTA2YTliMWJjNzQ1MjExYWU4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI0YzZjN2NkYzhjNGVjMGJjOWRlOGU2OTE4ZmFlMGFhOTg0NDEyYjQyY2U1YzM2OWVhMWUzMzI4NDdmOGYyMjliIn0" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2040-L2092", - "version": "repo-lines-v1:sha256:d1a56a12b39372c0277e40115884e11b8c29d16d3df1e847c7407b89efbd1881:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVkOGQ3MGNkOTIxY2E1NTJmMGEwZWIxMGJhNzc3OWQ2OTk0M2RlZjUwY2NhNjQ5YjIyZTg2MzU3OTgyM2ExM2UiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3YzRmZjVmY2EyMGUzODk0Zjc3ZmY2NDk0Y2FmNmVkZDU2NzFiZjE3N2YyMmVmMDE3NDBlNzNhMTYwMTc3OWMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjlhZDUyYWNhNzhkODcxNDMzZjJhNzMzZGJmMDQ3MGNmYTZhNGEwZGQzM2IzY2IwYzgyMTJlODNkYTIxY2ExZmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImJiNTdmZTYwMTUxZDJlN2IwYWNlZTEzOTJhYzI5OGUxYzBjOGE2OWRiMzlkNWU4OTllYzNkMzdkMTM4Njc3ZjMifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L78-L96", + "version": "repo-lines-v1:sha256:a441f3d481d80a2027d336b7fb106ab185a3e064fd227d09b20118538b189c60:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVkZmM5ODBiNzAzODQyOTJlMmNkMTMyMzZiYTg3YTM3NmFkOGYyYjVmZGUxZmRmNzlhNTYxODk1NzI1NzA1NjMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZhMzFiOTVhMTAzODBmZTgyY2ZlNjM1ODRkZDgyZDc0ODFmNjZjMDM0YmJlNjQ5ZDA0NmI5M2QzZjE0M2M2MDciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhmNWY2ZGIwODM0YjM4NzEyNGRlZWVmZGZhMjFhOGIwN2UwN2FiYTM0OWFiMWRkZTNlMDg3Yzg0ZGE5NmEyYTIifQ" + }, + { + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L1088-L1127", + "version": "repo-lines-v1:sha256:b17c24ee237eab5393c8275af0750d4c90435d607878c72ba65fb3664e1f1664:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImI1MmFjMDJlY2QwNWE5M2M1NGI3NDdjNDIxM2IxZDdmMjY5OGM4ZTRlMjBiYjNhMGI2ZGZiYjZjMTc4MDE0OGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3YzRmZjVmY2EyMGUzODk0Zjc3ZmY2NDk0Y2FmNmVkZDU2NzFiZjE3N2YyMmVmMDE3NDBlNzNhMTYwMTc3OWMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjBmMDMzM2U2ZTFlZjc5ZTY1MDliN2ZkNTA5MmZiMDFmMzY5NDQxODk0YzNmZGVjMTliOTU3NTY4NmJjNzc5ZDUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU1YjAwYjk5MjY2NDI4ZmU1NTI1NDYwZDE0YzNhMjZlNDI5Yzc3Yjk1ODUyZmEzNzEyYzEzYmNiMTMwM2I3MTAifQ" + }, + { + "resource": "repo://Frameworks/TermindApplication/Agent/ConversationModel.swift#L2147-L2261", + "version": "repo-lines-v1:sha256:0507eb851091785bbec9ddf2adbdc3047ef267037f79729cb97dbdf4633d0da4:eyJzZWxlY3RlZExpbmVDb3VudCI6MTE1LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiIwZjAxMWIxODViNWVjNTNlMDBmNGJiM2RjMDVhZDkzZDBlZDlkN2E1ODQwOWNhZGE3NDkwZmFlNjRmODNmYjljIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI2MWU3ZGUzMTg3MTE0YzQyZDkxNGMzMDQzOTgxNGRlMzg3ZmMxMTAyOTRkNDcyZWY0NDBmM2E0ZDMwMjAxNGIxIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI0YWE1NWE3YTE2MTk2YjkxMzQ1YTQyNzUzMmVmMjQ3YTNjZDMyMzI2OWFlZDhiZmQyNDczMGU0MTM3ZTk5MzAzIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIwNmVkYWIyM2FkYTZkZjU4NjgzZTE0MDliODIzMmVlNDk2MjgxNGFjMTNjOGE2M2QxOWJlYWQ2ZDA0YzFlNDYzIn0" + } + ] + }, + { + "id": "claim_58181193299f42449d8640e3a109a2cc", + "statement": "The controller-owned failed-edit restore regression uses a fresh ModelContext in an in-memory SwiftData container to verify one failed adopted run, captured payload/context/permission and staging chronology; a separate controller fixture injects repository save rejection without adoption rather than simulating a disk transaction failure or process restart.", + "evidence": [ + { + "resource": "repo://FrameworkTests/AgentReplayPersistenceTests.swift#L196-L269", + "version": "repo-lines-v1:sha256:7697da7b2aab9dddc1b7d45cb0d33eb8cd52a84562a516b2156d742ce8a0d558:eyJzZWxlY3RlZExpbmVDb3VudCI6NzQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNiYjg4ZDJmYmY0Njc5YmVjNzJmYjM3MWQ4ZjVmNWMwZGU3YzM2YWEyNDFjN2ZjYzU3Y2NhZGM2NmQ2MTQ3NzkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc5MjQxN2JmMzllNTM0Nzc3NGNkOTQ1NmY5NjExNzQzMDA1NWVjYTU0MDFkOGI3OWNmN2Q5YzJiYzM3YWQ5MzYifQ" + }, + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L689-L717", + "version": "repo-lines-v1:sha256:bbb94ddd10755f8cf1b1844ea133c2896ffb57c69057eddb56ec03c7c3ea745f:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU2MDA0NjNkOTgwYTgxZjIxMzI3OTc0MTJmY2M1M2RlODJkNTg0YWNjNGJhMTFjODdkN2NmNzNmZTg0MmRkY2YiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdiM2M1MzE3OGIwNjU0NDdkYTk1NjJlYjVhMTRjNDMzNDVlYmQyZWRkYjlkMmQ5OTFkZGIxNTQzNjkyNWYyMGQifQ" } ] } ], "verification": { "by": "openwiki/0.5.2", - "at": "2026-09-23T03:40:50.823Z" + "at": "2026-09-23T06:59:53.554Z" } } diff --git a/openwiki/.claims/quickstart.json b/openwiki/.claims/quickstart.json index 342ccfe7..f1c1f8ae 100644 --- a/openwiki/.claims/quickstart.json +++ b/openwiki/.claims/quickstart.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:5533c3350dcd3e0218aa0071621fea4658eb209ed33958d8f719a4f6752f4cc6", + "pageVersion": "sha256:dfca6fed3c974476cc25cd9f575515138b3897864e77e682e4f791d86f56756e", "claims": [ { "id": "claim_83870f4f1ad6403ea0d8bd8775729a76", @@ -112,7 +112,7 @@ }, { "resource": "repo://AGENTS.md#L40-L48", - "version": "repo-lines-v1:sha256:e0e8c9958812182ec2d7001a28a31979a8ef4bba9255fe9f04867d56046faca6:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOTdmYzk4NmVmMDFlZTVmNThjNmYxZmEyNjViOGE2NDEzMTE2OGY4YWE1OTkzZDc4ODZkOTZjNmUxODk4OTQzMiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiODQ1MThlZDQyNWZhZWNhNTgxNGExYzEwMTU0ZjEzMjgxOGViM2VjMGI2ZTgzOThkZjQ5NGI4YWRmN2MzYTI0NiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZDFkYTg3Nzk4Y2M5NTc1N2I3NzQ0NThlYzQ5Yjg0MWRjYWMzODA1MWQ5MjljZGI5ODE5MGJiMTdiMjdkZmQ4OCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMGVkYzQzMzI5OGFkNTgxMjllZTBhODg1MmMxM2Y1MjkyMGRhYWY5NGE4YzY0YTQ4NzFlZWVmNDZlMTMxNWVkMiJ9" + "version": "repo-lines-v1:sha256:b27ae6846aa3bf61e897870b4f13db11ff5622aa74b65e7c5b153d79066742e2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk3ZmM5ODZlZjAxZWU1ZjU4YzZmMWZhMjY1YjhhNjQxMzExNjhmOGFhNTk5M2Q3ODg2ZDk2YzZlMTg5ODk0MzIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg0NTE4ZWQ0MjVmYWVjYTU4MTRhMWMxMDE1NGYxMzI4MThlYjNlYzBiNmU4Mzk4ZGY0OTRiOGFkZjdjM2EyNDYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQxZGE4Nzc5OGNjOTU3NTdiNzc0NDU4ZWM0OWI4NDFkY2FjMzgwNTFkOTI5Y2RiOTgxOTBiYjE3YjI3ZGZkODgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjBlZGM0MzMyOThhZDU4MTI5ZWUwYTg4NTJjMTNmNTI5MjBkYWFmOTRhOGM2NGE0ODcxZWVlZjQ2ZTEzMTVlZDIifQ" } ] }, @@ -125,10 +125,24 @@ "version": "repo-lines-v1:sha256:a556c3aea2c14cdaa85d89a15243c4606e48562f600fe675a3e4f75594c7a07e:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiM2VkMDNiODMzODVkNTYyYTZmN2VhN2FjNzljMDRjOTAyYjliNDc1YmU2ZGRmMGJmZWU4NmJmNGY1MWYxMTAyOSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiODI1YTI1OWIwZmM4NzNiZDgwYjhhOTVlYzE0NTVlYjI4YWNmMDBjZDE1YzAzZGQxN2Q5NGU4YmVlNDI4NTEzYyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiYTAyZjA5NDM5NjA4ZjcyZGY0MzQxYzNiZWJlODVjNDFiMGI1YWQyNmFmZjY1ZTYwZDhjZGI2MzAzNjAyNjAxMSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZmVjYzgxYWMyZjE3ZWVjMDQwYzhjNWM2NzYwODkzYjJkNmJmMmJkMjVhN2M4MTlkMTBhMGMzMWZmMjE5M2NhZiJ9" } ] + }, + { + "id": "claim_f46780cd3b9b4898b21d6d93e20fafda", + "statement": "StoreKitTrialTests requires manual authorization, is skipped by default and runs only with TERMIND_STOREKIT_TESTS=1; repository guidance recommends an explicit narrow suite selection.", + "evidence": [ + { + "resource": "repo://AGENTS.md#L38-L44", + "version": "repo-lines-v1:sha256:b4bdfc1dd31e3110c8db7dc96616e1c6f44099a823533aba94f92226bd89d638:eyJzZWxlY3RlZExpbmVDb3VudCI6NywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOTdmYzk4NmVmMDFlZTVmNThjNmYxZmEyNjViOGE2NDEzMTE2OGY4YWE1OTkzZDc4ODZkOTZjNmUxODk4OTQzMiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOGUwNDgwMzIwNDhlODdiMGE2MWE3ZjMwMTU4YTE3YTZlODA1MWI0YzQ4ZDUwZTE0YjJmYjY3NmI4MDBlYTJjYyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZDFkYTg3Nzk4Y2M5NTc1N2I3NzQ0NThlYzQ5Yjg0MWRjYWMzODA1MWQ5MjljZGI5ODE5MGJiMTdiMjdkZmQ4OCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZmVjYzgxYWMyZjE3ZWVjMDQwYzhjNWM2NzYwODkzYjJkNmJmMmJkMjVhN2M4MTlkMTBhMGMzMWZmMjE5M2NhZiJ9" + }, + { + "resource": "repo://TFMTests/StoreKitTrialTests.swift#L12-L22", + "version": "repo-lines-v1:sha256:c502b82a80a53329d256f638301cdaa11432ebba24ee9005eec7d39ed1f5dd65:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEzYTU3NzFmOGY3ZmZmZjlhMjNkOWZiZTMyYTlmYzAwYzc0ZjRjYTU2NWY2NjFhNmQ2YmYxNGRiNmY2ZTlkNmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRiNjVlZGIzMWM5NDAzM2M2ZWVmOTIzOTQ3OWMzODczYzY0NzhhYmMyMWZhZDZlODJkYjJhNWU5ZDMyYzRhNmYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgwNjZjMGUyZDJhNzZhZGViYTcyYzdmMjY3OWJlMTNkM2UzZWM5MzgzNzFhODliNTUzM2I0OTk0OTQwZTBhOGMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEzY2EyMjE1MzJlMmQwOGM1YTgwYjA2MDJmNTBkMzIyMjBmMjZhMTBlNGFmYmYyMzA1NWU2ZGU2MmY3Yjk2ZDkifQ" + } + ] } ], "verification": { "by": "openwiki/0.5.2", - "at": "2026-09-23T05:17:08.701Z" + "at": "2026-09-23T06:54:45.592Z" } } diff --git a/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json b/openwiki/.claims/testing/behavioral-boundaries-and-fixtures.json index 564f5210..d7fcc69e 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:6bee77cc55ac7f4209d5ea3e889e5ef21b88a7e3f39118c9fa0dffe665855886", + "pageVersion": "sha256:3c5890c5831313021a01c7840ee3ab3fa0b82708cc9e2b60a336255809efbf3f", "claims": [ { "id": "claim_b7fbd64158554b8b8ca80a0a613b3bc3", @@ -275,44 +275,104 @@ "statement": "Application edit tests reject invalid replacements before repository calls and preserve live history after injected repository rejection; controller cancellation after committed editing checks interrupted staging adoption. These fixtures replace the persistence port and do not inject real SwiftData storage failure.", "evidence": [ { - "resource": "repo://FrameworkTests/AssistantConversationOperationsTests.swift#L228-L266", - "version": "repo-lines-v1:sha256:d504dc650e02ce7236152c633382cef19bd6762a026047c05f7c1ad0785f7a7c:eyJzZWxlY3RlZExpbmVDb3VudCI6MzksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEyNWIwMmI1NzE0ZDA2NmZkMzIxNmQyMjMxYmRkZGFjYjM2ZDcwODc3OTE4NmRhYzg5MjQyYWViZDA2ZjQ1M2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNiYjYzYjhkYTE1ZTdkOGZhNDBlNjhmYjhkNjY0YzhjZDQ4NGFlMzQ4NGEyMjEzNWU0NDAwYjA4NjI3Yjg2ZjciLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImIyNWU4YzMwNjkwMDIyNmYwNDA2OWM5YTZmMTZjNmY0ODE2NzkzYzM5NTNjZDM3YWFlNzQ5OWY2OGQ1YjAyNmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUifQ" + "resource": "repo://FrameworkTests/AssistantConversationOperationsTests.swift#L473-L514", + "version": "repo-lines-v1:sha256:70c017e4fd4742ac1a8eff8c685ae4daf7c00755d6c14a68ae2e962fa7c18613:eyJzZWxlY3RlZExpbmVDb3VudCI6NDIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEyNWIwMmI1NzE0ZDA2NmZkMzIxNmQyMjMxYmRkZGFjYjM2ZDcwODc3OTE4NmRhYzg5MjQyYWViZDA2ZjQ1M2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImIyNWU4YzMwNjkwMDIyNmYwNDA2OWM5YTZmMTZjNmY0ODE2NzkzYzM5NTNjZDM3YWFlNzQ5OWY2OGQ1YjAyNmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImNmNzlkNTgyZDc4ODhjODJjODQ4Y2M2MGUxMmNhNGYxMzU3MjhjNWIwMmEyYjM1NGMzZDE3YTBmOGI0YmMyNDIifQ" }, { - "resource": "repo://FrameworkTests/AssistantConversationOperationsTests.swift#L290-L309", - "version": "repo-lines-v1:sha256:1aadebda28ab65aaf172c7524dd75bfbc882c73879618892eee83488349e51aa:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImIyMGI5NDg0YjQ4YTE3M2QzMTM2ZjhkYWRiNzdiNTUwYWQ5ZmRiMzU4YjMyMjllNTRjOGQyNjg1NGNkMWVlNGMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijc1MjhmNGExMDgwN2M3ZDcxOTRjZTUxNTlmMzNmMjFiZjM1YzYxMzA5ZGNhNDkzNjgyOTViZjBkYzE3Y2QyYTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZkMWY5Njk2ZTM2ODQ2MzcxNzIxODJiOGMzZmNlMWFlMzQ4Yzc4MzJkOGU4OTE0ZDVjZjJlZjU1NDIxNDIwYWUifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L596-L619", + "version": "repo-lines-v1:sha256:9013a9b0c8dda08deb9c74c8b93dd354b89a5d981c5c43457c083341a7639434:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZjMWE5ZjIzZTE1YzkwM2U4NGYxMDdkNGI4YmQ2NDZhYjcwNmRkNmEyNjczZWI5N2VhMTZkODc0ZTRhYzMxZTUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImEwNTYyNGUyNDJmZjU3YTY0YjU1M2YxMTQzNzBlMmQxZmViYmU4ODIyZjI5NzA2ZmZlYmI4YTgwZjVhM2FiMzcifQ" }, { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L450-L534", - "version": "repo-lines-v1:sha256:fd0683e00df11cd8ca35568565d1b1d43a68ad37ab7bf54e5f68803954f14349:eyJzZWxlY3RlZExpbmVDb3VudCI6ODUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZkYTc3OGQ5NDJjNzRkNGFjOGYzMmM1MTgyMDg2MGFlOGE2MDQ5YWE1NDUwYTE5NjMzMTM4MmNmNWVmNWU1MGEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk1NTUyNmNmOWEwOGQ4Yzc1ZTA5ZThhMWZhMTIwODkxZmQ3MWEwMDNhMjkwY2U5ZTEzY2YwOWQ5NjRmYjkxYWUifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L719-L747", + "version": "repo-lines-v1:sha256:cafc285231544b00272d58ff3d5e4205703f2bd167937c426e285a131b1184ec:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE4ZGIwNzEzYzU1NTE0MjI3ZmQ3NGRmMTNlODYzZjQyMTU0MGFiMDk1YzVhNDU2Mjg5OTJiYzE3YjdlZDE1M2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk1NTUyNmNmOWEwOGQ4Yzc1ZTA5ZThhMWZhMTIwODkxZmQ3MWEwMDNhMjkwY2U5ZTEzY2YwOWQ5NjRmYjkxYWUifQ" } ] }, { "id": "claim_9b91e98a29a34c4caa268050b13a5f3e", - "statement": "Missing-credential and selection-during-preparation tests wait for the recording repository's failed snapshot as well as checking live failure because production captured failures publish before asynchronous save; actor waiters handle both already-recorded and future snapshots.", + "statement": "Captured configuration-failure tests distinguish attempted snapshots from completed saves: preparation remains owned until return, successful save and identity recheck precede failed projection, and rejection retires without adoption. The recording repository uses actor waiters for existing or future events; synchronous MainActor join probes check Stop/controller joins remain pending while the single terminal save is blocked.", "evidence": [ { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L231-L255", - "version": "repo-lines-v1:sha256:63509c11ab1c2718bead3930614de6427e1e6df47c0e787aeed401498661891c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjY0YzVmZGJhOWRmZTUwNjMwNjlkYTdlN2RiZWVjM2QzZWRiNjE3YmUzMTQxYjBmNGEyYzY0OTEzNWI0N2M2ZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImIyMzkzYWYzYmRiOTExYzA2ZWFmMjNkYjMxZTkyMmNkNGY3NDc2MmYzNGFmMTE1NTJkNDczYzc1ODhhZmFhZTkifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L797-L814", + "version": "repo-lines-v1:sha256:af356e00debb9d78ef75b58cde8ef7cbc573512c578ef87eb17ed868648285b6:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ0NzUxNDBlMjZlOWM1YTE3MTFkNjQ0NWExOGI3ZjRhZTIwMjJmOTkzZWY2Mjg0MDc1NTQzMDFiOTZlMGRjMjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjBmN2Q5MjQ1MDBjZTE0ODEwOTUzODdhNWU5ZWIxYmMzYjFlM2VhYWY1Y2ViMzBkMTQ2Y2MwNTU0YWU1MWRlNmIifQ" }, { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L66-L86", - "version": "repo-lines-v1:sha256:80d25cc0451a928bc50f91e07a28b411b83c0d7299889938c179b8d5e96fb33b:eyJzZWxlY3RlZExpbmVDb3VudCI6MjEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImY1OGZlNzcyYzJiNDExMGEyYzJhOWQxYTk5MjI3OGY4ZTNmZDg5YzMzNzJlZjZmYjE0Y2NjYmU1NDU3MmQyMWQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZkMzMwZjllZDlkNjUwYTVhMDRlNTk4Y2YxNmE2NmZkOTM3NWZjYWIxMzhkMmJiNmE0MWYxNTJjYzRjMjExNDQifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L876-L963", + "version": "repo-lines-v1:sha256:3375908ebaf9b2d4c4f15c8b1a3cf12eb10655fea5770f3f4c8166873cd09c59:eyJzZWxlY3RlZExpbmVDb3VudCI6ODgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVkYTE1MzZiMTI0MWUxNzZmNjhjNjhmYTdlZWM3NTkwYmI4M2JmMmExNTVmNmEwNGE2N2FkMDJjODJlZTYzYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAwMDQyZDA4N2MwMjJlZDJjZDM1YjkzODg0YTkyZTU3NDAzN2UyNjJhMjg0Mjc3MzI3MTRkNjM2ZjkxMWVlOWUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjdjMzk2ZGVjMGY5OGEyZjE4ZGUxMTk1NGMxOGJlOGQxYjdiY2VhOTc2YTQ5ZjQ3ZjQzNTgzZGE5ZGY5ZTY5ODMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUwNjNhNTViZWUzYmQxYjU3Nzc4NDgzYWRhOWRkOWEzZDE4OTM1OTcyOGI3NGU4YzE3ZTBlNmU0ZmVhZWVmODgifQ" }, { - "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L661-L689", - "version": "repo-lines-v1:sha256:74df831f049f3d94b2df3e3684005e41efcfdbae4210f2a76d72f07088772ff4:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjI3M2UyMmU5ZjA4MTYzZWY3NDM5ODE2MTc3YzcyODZiZjg0MGRhODFhYTAxODc0ZTUxOTExNDM3NTNhNTIzNTMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM4YTQ5OThkMTFmOGNhNTNkOWY1ZWE2OWQ3ZmJmYmE1MGViMTFhMzBhMTdkNDZiNzQzZDZiN2EyNzA5MDhlYzciLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImVjYWZkOTVhYTdjMWM0MzA0YWEyNTI0OTg4YWNlMTM1NjQwMjU1MGZjYTg1ZmY5ODlhODEzYjNmNTEwNmJmZDciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImRlMzE4ODBjNjRmODIxZTk5ZmMxNGNjNWE0MDY5OTE0MzQzZTIwNGUwYmQ3N2U4NjU5ODhjMzQ1Y2RkZTdiMDgifQ" + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L89-L131", + "version": "repo-lines-v1:sha256:0aabaf1fd1e04c8fba54bf8ea2f77d091b5d3ea63e944027c2702ee290dfe3e4:eyJzZWxlY3RlZExpbmVDb3VudCI6NDMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjY4NzZiOTY4ZTBiYTUzZTU1MTZkN2QyMzg4MjAyNTY1NjNkOTU1MzQ3OGVmYzEwNmExYWE5NDllMWM0YTk5MmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjUzZWNkNjA4NmI0MGM1OWViOGRiZGFmOThjNzMzYzMyMWM5MDgxMzFjNWU2ZmQ4NjBhNWY5NjQ4ZDZiOGM3YmEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAifQ" }, { - "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L765-L793", - "version": "repo-lines-v1:sha256:e87d08aec434dbaca6f03d91f4f5c0cab6e7e04e6040b3e13dc277d1eff4ed2f:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU4MzY5NDdmMWVlZjZmNjIwZWJlZmQzMGE0N2EwNWI4ZDhiZWI2ZTNkYTFlZjkzOTM3MTg5OTZiZTI1NDkxYWEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE2ODhmNzU3ODA1NDczNjk2N2U4NzY5MmJiYTg2YjI4MDhmMzI0MTk3NTQ0MDVlYmZkNmM0NWI3MTk4OWQ0NzQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQ3MTVmNGViNzI5YTZmMGMwMDk2MWMyN2JhMzFjNmU2ZGQxNWIwNTFkOTRhOGI5NzY3YWQ4Zjg3NGZmODBjZDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRjNmM3Y2RjOGM0ZWMwYmM5ZGU4ZTY5MThmYWUwYWE5ODQ0MTJiNDJjZTVjMzY5ZWExZTMzMjg0N2Y4ZjIyOWIifQ" + "resource": "repo://Frameworks/TermindApplication/Agent/AssistantExecutionController.swift#L697-L820", + "version": "repo-lines-v1:sha256:573ad87c0b11a4de84485b6efb502dec46851957f042f8e9ec82bd6e97473bd1:eyJzZWxlY3RlZExpbmVDb3VudCI6MTI0LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiI5NjAyZDY4M2JmOTNkNjM2MTgwMmU2Nzg5Y2UzODc1Yjc4MDJhYzk3MWU2YmRjNzhkNGJjNmJiZDRiN2FmN2ViIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI4NzVkZDcxOTdjZGMzM2M2MDAwMDg2NzJjNjYxMmRhZjVlMjJjMzMwMjQ3YTNhZjBiZjgyZTQ4MDJmMzZlZTIzIiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiI2YjBkM2YxNGUzNjMyYmE5ZjBlM2I5YTJhYTM4M2UwNjVhYTBhY2UxOWM1MTU4NTA2YTliMWJjNzQ1MjExYWU4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiI0YzZjN2NkYzhjNGVjMGJjOWRlOGU2OTE4ZmFlMGFhOTg0NDEyYjQyY2U1YzM2OWVhMWUzMzI4NDdmOGYyMjliIn0" + } + ] + }, + { + "id": "claim_7dd64768ed39484797fa78c85266ebd4", + "statement": "Captured failure regressions verify save-before-archive/delete event order, asynchronous memory-to-failure transition, controller/conversation retention after caller release, superseding/direct edit and fork refusal with a retained assistant prefix, and injected save rejection preserving staging while reporting the error.", + "evidence": [ + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L134-L232", + "version": "repo-lines-v1:sha256:add34c3dc6b409429595dda053aa9f9a9f4e6a3da7dbf513bd2d2bfde8f03436:eyJzZWxlY3RlZExpbmVDb3VudCI6OTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNmYjUwYTQxZDQ1MjY0ZjQyZDRiZGJkYzA1ZmQxODQ5NDdlODQ1MGRkNmJlNjFjOWRiN2ZiYThmYjA5ZDRiMmQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImZiYTcxY2EyZWYyNGM5OWNhZTBjMDI2M2IzN2VlMGQ3OWE2MjQxZDJjYWFjNTY4NGE5ZjIwOWY3NjI3ZmYwNmQifQ" + }, + { + "resource": "repo://FrameworkTests/AssistantExecutionControllerTests.swift#L652-L717", + "version": "repo-lines-v1:sha256:6b8eb70bb6c318b4e14ac50fde58fbd362830d046c50e1727140d6980e727740:eyJzZWxlY3RlZExpbmVDb3VudCI6NjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjFhYTU4ZmU0MmEyZWE4ODVmNDg3OWQ3MzVlOGJkMzU2ZTczYmEwZDFkNjkxYzc5MWVmZmU5YmE5YzJjNDg5ZjciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU4ZWFmM2UxZGIyODRmNmE2ZmQ0ZTA2NmFlMmZiNjU0YWU2OGZkZmNmM2U3ZTRkY2E0YzJkZDIxNGE0OWI5ZDAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdiM2M1MzE3OGIwNjU0NDdkYTk1NjJlYjVhMTRjNDMzNDVlYmQyZWRkYjlkMmQ5OTFkZGIxNTQzNjkyNWYyMGQifQ" + } + ] + }, + { + "id": "claim_93d64172184241cf8f5472dfee5a85ae", + "statement": "The controller-owned failed-edit SwiftData regression restores through a fresh ModelContext over an in-memory container and checks one failed adopted run, text/images/attachments/context/permission, removed staging and monotonic chronology; it is not a disk-failure or process-restart test.", + "evidence": [ + { + "resource": "repo://FrameworkTests/AgentReplayPersistenceTests.swift#L196-L269", + "version": "repo-lines-v1:sha256:7697da7b2aab9dddc1b7d45cb0d33eb8cd52a84562a516b2156d742ce8a0d558:eyJzZWxlY3RlZExpbmVDb3VudCI6NzQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjZjA5ZWIwYzU3NDRmYjk3MzMxYjk4ZmYzZmJmMDVhNjAyYmEzZjdmNjdlNWRhNWJlOTA5NTAzM2Y2MjU4MjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjNiYjg4ZDJmYmY0Njc5YmVjNzJmYjM3MWQ4ZjVmNWMwZGU3YzM2YWEyNDFjN2ZjYzU3Y2NhZGM2NmQ2MTQ3NzkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc5MjQxN2JmMzllNTM0Nzc3NGNkOTQ1NmY5NjExNzQzMDA1NWVjYTU0MDFkOGI3OWNmN2Q5YzJiYzM3YWQ5MzYifQ" + } + ] + }, + { + "id": "claim_f5aac7bd4e8b450088cc9bf29e8beeaf", + "statement": "WorkspaceNavigatorRenameTests is serialized and requires the visible-window opt-in; it exercises context-menu and double-click rename and verifies the editor starts with the complete title, which production seeds before publishing the workspace rename identity.", + "evidence": [ + { + "resource": "repo://TFM/Features/Workspaces/WorkspaceNavigatorView.swift#L324-L328", + "version": "repo-lines-v1:sha256:f8e4a5c0e7a2300738f7cce45a7c486f0bacfc92825f6d761fac53bc50ef1695:eyJzZWxlY3RlZExpbmVDb3VudCI6NSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMWNiNGMyNDM1MzhjMjRmY2M0YmUyYTY0ZTdkMTBiNzkwNmI4OGUyNTliNmNmYWE5ZDJhNTZkMWE3Zjk4YWY3ZCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiOTUzMjgyNGM2OTFiNzdhNDUwN2EyNDhkNmVmMjNjMjRkNzRkZDIwNDQ0YTA2Nzc3ODI3YTcxNTljNzZhZjVkOCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiOGYyN2ViYzQwNDY2MWU1NjQzZTZhYmE1MTQwNzNiN2RiOGJmNDlmMjAzMmYxMTRjYmI4OGI4YWU2ODVlN2UyNyJ9" + }, + { + "resource": "repo://TFMTests/VisibleWindowTestTrait.swift#L4-L12", + "version": "repo-lines-v1:sha256:cfd19f71f216d3c053e0e94522292d5084c78db67cbe7e2d740a830c1c08390d:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZDZkYzRhNmI2NzJiZTRkMGI5ZjA5ODI5ZGNkMzgyYzEwMWJhMWMwMGQxZjYzNTY3MDI4OWFiNWE1NzBiNTYzZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNzNkOTM2OTExYzY5MzE5OTAxOGFmMTI5ZTA3Njg2YjY5NjgyMDZmMjk0MmY2ZGViNzdkNWJjMmQ0MGI1ZTJhMiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjAsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSJ9" + }, + { + "resource": "repo://TFMTests/WorkspaceNavigatorRenameTests.swift#L1-L32", + "version": "repo-lines-v1:sha256:2c721458e519a812013020dc767cdd9f740f66ad200910e07c7aeff4a9e79b1b:eyJzZWxlY3RlZExpbmVDb3VudCI6MzIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFjMzYyZGQ0NjUwMDgyZDM0N2RhMTFjMmRlYzc0MjBjNDJjNmMwZDEzMzYwNTAzYjg4OGZjOTgxZmU3Njk3ZDAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZjNGY2MWQ0YWEzNzkxMTQ4YTUyNGZmNzA2YWE5YTg2MjQwMDZkNGNhMTIzZWM3NWU4YjQzOTRlYmZkYjdhOWUifQ" + }, + { + "resource": "repo://TFMTests/WorkspaceNavigatorRenameTests.swift#L94-L104", + "version": "repo-lines-v1:sha256:7f43f16b1edffd49fc0d67c0ad2f6b0b02929bb07166fa9c92645704ac36aaa2:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMzYTVmMTM3YmZhZTRiNWFmN2ZjZGFkYzg3NjA4Njc5YjkyYmMwMTdmNTQ2OTIzZDg1NmU3OWM0YjNjZDYyYzEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImVkNWFhMDZhNzQ1NzBjMWVmMjU3OWM2ZmYyNGEyODM2YzI4YjdjMTBjMjMwN2MwNmZkMzYyYzUzOTBlYTJiMDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjI0NzM4ODM3Zjk3OWNlYmIzODdjOGU1OTc2ZTQ5YjVhOWNkNGMxYzcyNmI4OWVmZTMyNGIxMmQ0ZDNhYzU3NDQifQ" + } + ] + }, + { + "id": "claim_7c9b6608858b4bcc8a896f22150b1e9f", + "statement": "StoreKitTrialTests is serialized and skipped unless TERMIND_STOREKIT_TESTS=1; repository guidance requires manual authorization and recommends selecting that suite explicitly, so default-suite success does not show it ran.", + "evidence": [ + { + "resource": "repo://AGENTS.md#L38-L44", + "version": "repo-lines-v1:sha256:b4bdfc1dd31e3110c8db7dc96616e1c6f44099a823533aba94f92226bd89d638:eyJzZWxlY3RlZExpbmVDb3VudCI6NywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOTdmYzk4NmVmMDFlZTVmNThjNmYxZmEyNjViOGE2NDEzMTE2OGY4YWE1OTkzZDc4ODZkOTZjNmUxODk4OTQzMiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOGUwNDgwMzIwNDhlODdiMGE2MWE3ZjMwMTU4YTE3YTZlODA1MWI0YzQ4ZDUwZTE0YjJmYjY3NmI4MDBlYTJjYyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZDFkYTg3Nzk4Y2M5NTc1N2I3NzQ0NThlYzQ5Yjg0MWRjYWMzODA1MWQ5MjljZGI5ODE5MGJiMTdiMjdkZmQ4OCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZmVjYzgxYWMyZjE3ZWVjMDQwYzhjNWM2NzYwODkzYjJkNmJmMmJkMjVhN2M4MTlkMTBhMGMzMWZmMjE5M2NhZiJ9" + }, + { + "resource": "repo://TFMTests/StoreKitTrialTests.swift#L12-L22", + "version": "repo-lines-v1:sha256:c502b82a80a53329d256f638301cdaa11432ebba24ee9005eec7d39ed1f5dd65:eyJzZWxlY3RlZExpbmVDb3VudCI6MTEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEzYTU3NzFmOGY3ZmZmZjlhMjNkOWZiZTMyYTlmYzAwYzc0ZjRjYTU2NWY2NjFhNmQ2YmYxNGRiNmY2ZTlkNmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRiNjVlZGIzMWM5NDAzM2M2ZWVmOTIzOTQ3OWMzODczYzY0NzhhYmMyMWZhZDZlODJkYjJhNWU5ZDMyYzRhNmYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgwNjZjMGUyZDJhNzZhZGViYTcyYzdmMjY3OWJlMTNkM2UzZWM5MzgzNzFhODliNTUzM2I0OTk0OTQwZTBhOGMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEzY2EyMjE1MzJlMmQwOGM1YTgwYjA2MDJmNTBkMzIyMjBmMjZhMTBlNGFmYmYyMzA1NWU2ZGU2MmY3Yjk2ZDkifQ" } ] } ], "verification": { "by": "openwiki/0.5.2", - "at": "2026-09-23T05:17:08.701Z" + "at": "2026-09-23T06:54:45.592Z" } } diff --git a/openwiki/.last-update.json b/openwiki/.last-update.json index 15520fa4..52c497a7 100644 --- a/openwiki/.last-update.json +++ b/openwiki/.last-update.json @@ -1,7 +1,7 @@ { - "updatedAt": "2026-09-23T06:15:26.424Z", + "updatedAt": "2026-09-23T07:00:31.695Z", "command": "update", - "gitHead": "12fee3a5c735ed6f5b9ef8ecd854e326527f186c", + "gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496", "model": "host-agent/codex", "status": "complete", "language": "en" diff --git a/openwiki/.page-manifest.json b/openwiki/.page-manifest.json index 04cb2f23..efaef30e 100644 --- a/openwiki/.page-manifest.json +++ b/openwiki/.page-manifest.json @@ -9,11 +9,11 @@ "completedRunId": "60f8c625-152f-4c3f-8755-bcc5d849e8d9" }, "/openwiki/architecture/engineering-invariants.md": { - "gitHead": "82ba6dc050bf2e3f907717bba4dd30bb9198b6a3", - "sourceFingerprint": "sha256:f625b15b2999e260a4375e9254de0e5fc1e622bbc3d1daf39aad616d6ff28ccc", - "pageVersion": "sha256:f62db2005beea84e609b860cb6d2e52e7a742faf98e3d9f088179b031465fbbe", + "gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496", + "sourceFingerprint": "sha256:470a7b67217aacb7d87b7fddf13971bf2d3fbdef0393232dd0af8c1a20c38167", + "pageVersion": "sha256:c8ad1f11ac788af965dd38b668950c45dda95ab336ac725cd1d9ab3e8f7ce8a8", "completedBy": "codex", - "completedRunId": "60f8c625-152f-4c3f-8755-bcc5d849e8d9" + "completedRunId": "21cd41b9-0003-416e-86e9-126eaf940714" }, "/openwiki/architecture/mobile-ui.md": { "gitHead": "ae38d77013b7502c185781920ebfd4236afb1e6b", @@ -51,25 +51,25 @@ "completedRunId": "3212507d-fdea-4335-9994-e4980af3ccef" }, "/openwiki/architecture/supporting-system-directories.md": { + "gitHead": "12fee3a5c735ed6f5b9ef8ecd854e326527f186c", + "sourceFingerprint": "sha256:2d19bb85bb852de045b9a3c58808dc15f2c945041b63d4a53ead6dd37ceef43d", "pageVersion": "sha256:bc62050f5799c6e7764ff9d08a0e721dda371eb74b7b8342346c59f747abb3b5", "completedBy": "codex", - "completedRunId": "fad30cd1-ec54-497a-96f1-7175412c6b64", - "gitHead": "12fee3a5c735ed6f5b9ef8ecd854e326527f186c", - "sourceFingerprint": "sha256:2d19bb85bb852de045b9a3c58808dc15f2c945041b63d4a53ead6dd37ceef43d" + "completedRunId": "fad30cd1-ec54-497a-96f1-7175412c6b64" }, "/openwiki/architecture/system-boundaries.md": { - "gitHead": "bdeb201d19b1d86d1bf1145d6cd6bbfbd95bd4a1", - "sourceFingerprint": "sha256:f9936767fcb96648d4077d9b0eda87d3b9e9f36d42c78ac381d7c200080bcbf8", - "pageVersion": "sha256:3cbf1be9eb94f0eb87d83be0a1277c9801cb4df9a3da898ef95b63b20b72a785", + "gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496", + "sourceFingerprint": "sha256:470a7b67217aacb7d87b7fddf13971bf2d3fbdef0393232dd0af8c1a20c38167", + "pageVersion": "sha256:47037593b68f4328e80cb60aadad6bb3290eb90e38ef9005c31e46440925be24", "completedBy": "codex", - "completedRunId": "07775097-b8b6-4b52-9321-61697240352d" + "completedRunId": "21cd41b9-0003-416e-86e9-126eaf940714" }, "/openwiki/concepts/agent-runtime-and-assistant.md": { - "pageVersion": "sha256:d3bcf7c3b342b7c7e0a24bff200d9de3fd902e66a05ac6d1f8ff1046b23948d5", + "gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496", + "sourceFingerprint": "sha256:470a7b67217aacb7d87b7fddf13971bf2d3fbdef0393232dd0af8c1a20c38167", + "pageVersion": "sha256:7b1c2e0d961fa1fba7e88eb2273136e7a6950c3a06f80900d23aab9694031e69", "completedBy": "codex", - "completedRunId": "fad30cd1-ec54-497a-96f1-7175412c6b64", - "gitHead": "12fee3a5c735ed6f5b9ef8ecd854e326527f186c", - "sourceFingerprint": "sha256:2d19bb85bb852de045b9a3c58808dc15f2c945041b63d4a53ead6dd37ceef43d" + "completedRunId": "21cd41b9-0003-416e-86e9-126eaf940714" }, "/openwiki/concepts/commerce-localization-and-product-surfaces.md": { "gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e", @@ -79,11 +79,11 @@ "completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38" }, "/openwiki/concepts/persistence-and-secrets.md": { - "gitHead": "73b40a1b937fc7fa4e24208563cce22e50674495", - "sourceFingerprint": "sha256:606589a25f14109f9d01d3e3e814a6bcbf889bb3e8c86ffa63bd3f27ca488827", - "pageVersion": "sha256:6f9cbf0a3aa5fea9637709e225bee6cf28af7cdf172609b3c903f75bade148b7", + "pageVersion": "sha256:f69ed12d7d30fae123a7513fe0417b3822282a643f6ae6127089ba9bc407b7c8", "completedBy": "codex", - "completedRunId": "5cf94351-ac48-4e6e-b587-76affa9694d9" + "completedRunId": "8631be05-cca1-48cf-9f9c-5426ae3f8660", + "gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496", + "sourceFingerprint": "sha256:470a7b67217aacb7d87b7fddf13971bf2d3fbdef0393232dd0af8c1a20c38167" }, "/openwiki/concepts/remote-services-and-forwarding.md": { "gitHead": "bdeb201d19b1d86d1bf1145d6cd6bbfbd95bd4a1", @@ -156,18 +156,18 @@ "completedRunId": "691ddd1f-2966-4a5b-b437-127adf28ff38" }, "/openwiki/quickstart.md": { - "gitHead": "82ba6dc050bf2e3f907717bba4dd30bb9198b6a3", - "sourceFingerprint": "sha256:f625b15b2999e260a4375e9254de0e5fc1e622bbc3d1daf39aad616d6ff28ccc", - "pageVersion": "sha256:5533c3350dcd3e0218aa0071621fea4658eb209ed33958d8f719a4f6752f4cc6", + "gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496", + "sourceFingerprint": "sha256:470a7b67217aacb7d87b7fddf13971bf2d3fbdef0393232dd0af8c1a20c38167", + "pageVersion": "sha256:dfca6fed3c974476cc25cd9f575515138b3897864e77e682e4f791d86f56756e", "completedBy": "codex", - "completedRunId": "60f8c625-152f-4c3f-8755-bcc5d849e8d9" + "completedRunId": "21cd41b9-0003-416e-86e9-126eaf940714" }, "/openwiki/testing/behavioral-boundaries-and-fixtures.md": { - "gitHead": "82ba6dc050bf2e3f907717bba4dd30bb9198b6a3", - "sourceFingerprint": "sha256:f625b15b2999e260a4375e9254de0e5fc1e622bbc3d1daf39aad616d6ff28ccc", - "pageVersion": "sha256:6bee77cc55ac7f4209d5ea3e889e5ef21b88a7e3f39118c9fa0dffe665855886", + "gitHead": "f9d3cd9e6831951262ed934f7d6fb5f782401496", + "sourceFingerprint": "sha256:470a7b67217aacb7d87b7fddf13971bf2d3fbdef0393232dd0af8c1a20c38167", + "pageVersion": "sha256:3c5890c5831313021a01c7840ee3ab3fa0b82708cc9e2b60a336255809efbf3f", "completedBy": "codex", - "completedRunId": "60f8c625-152f-4c3f-8755-bcc5d849e8d9" + "completedRunId": "21cd41b9-0003-416e-86e9-126eaf940714" }, "/openwiki/workflows/port-forwarding-pool-and-dispatch.md": { "gitHead": "58a0cfd1bf9d08057801c740e79bbcb3c1fcc37e", diff --git a/openwiki/architecture/engineering-invariants.md b/openwiki/architecture/engineering-invariants.md index e4105cf3..ca104f1a 100644 --- a/openwiki/architecture/engineering-invariants.md +++ b/openwiki/architecture/engineering-invariants.md @@ -114,10 +114,10 @@ sources: resource: repo://TFMTests/ArchitectureBoundaryTests.swift - id: openwiki-source-9442022b3dba1be62a55f0f0 resource: repo://TFMTests/TerminalThemeTests.swift -generated: { by: "codex", at: "2026-09-23T03:34:06.838Z" } +generated: { by: "codex", at: "2026-09-23T06:54:45.592Z" } verified: - by: openwiki/0.5.2 - at: 2026-09-23T05:17:08.701Z + at: 2026-09-23T06:54:45.592Z --- # Cross-Cutting Engineering Invariants @@ -506,8 +506,11 @@ factories/Sendable buffer handlers. Timers/workers enter explicit short MainActo search, skills/registry, Guardian and preparation settings synchronously before memory or automatic compaction awaits. First-send promotion follows accepted capture; edit UI captures before creating its persistence task. Plan implementation captures acting mode and consumes attachments/armed skills once. Historical context replay does not reconstruct old model settings or skill-package bytes. -- Preparation is distinct from streaming. Stop/background expiration invalidates preparation identity synchronously and joins pending - history/preparation work before its interrupted save; stale captures cannot edit or start. Archive/delete cancel pending preparation, +- Preparation is distinct from streaming. While preparing, Stop/background expiration invalidates its identity synchronously and joins pending + history/preparation work before its interrupted save; stale captures cannot edit or start. Once a captured configuration failure enters + `savingFailure`, cancellation joins that one terminal save attempt without cancelling it or adding an interrupted snapshot. Archive/delete + await the same boundary, and edits/forks cannot overtake it. The save task retains its controller and conversation until it returns. + Archive/delete cancel ordinary pending preparation, manual compaction refuses it, and navigation alone leaves it running. See [Assistant Runtime](/openwiki/concepts/agent-runtime-and-assistant.md) for the preparation boundary and existing runtime/recovery limitations. - History edits validate before persistence and publish their live replacement only after truncation commits. The boundary is the selected @@ -517,7 +520,9 @@ factories/Sendable buffer handlers. Timers/workers enter explicit short MainActo - An edited replacement initially owns a staging run whose ID equals its message ID. The first real snapshot transaction adopts only that staged row and deletes the staging run; historical replay rows keep their owners. Live running, failed and interrupted projections use the same provenance and preserve the staging chronology lower bound. Retired run IDs reject late saves/events in the repository instance. - This is not universal persist-before-publish: missing-model/credential failures still project live before their asynchronous save. + Missing-model/credential failures publish failed state and adopt staging only after their save succeeds and identity is rechecked. + Save rejection reports the persistence error and retires preparation without adopting staging; joining the attempt does not guarantee storage + success. Queued-runtime cancellation retains its separate live-before-save projection contract. - Project tool output once before `toolFinished`: bounded preview and scratch reference, retaining crash/replay metadata and paging offsets. Later completion never shortens earlier results; `sftp_read`/`scratch_read` report complete lines/truthful offsets. - Terminal suggestions use latest delivered user snapshot, not focus. Surface availability is partial and does not restrict independent SSH/ diff --git a/openwiki/architecture/system-boundaries.md b/openwiki/architecture/system-boundaries.md index ed6e9a8a..55372f0d 100644 --- a/openwiki/architecture/system-boundaries.md +++ b/openwiki/architecture/system-boundaries.md @@ -43,7 +43,7 @@ sources: generated: { by: "codex", at: "2026-09-23T00:14:42.075Z" } verified: - by: openwiki/0.5.2 - at: 2026-09-23T01:34:03.251Z + at: 2026-09-23T06:54:45.592Z --- # System Boundaries and Dependency Ownership diff --git a/openwiki/concepts/agent-runtime-and-assistant.md b/openwiki/concepts/agent-runtime-and-assistant.md index eef1b671..b10fb783 100644 --- a/openwiki/concepts/agent-runtime-and-assistant.md +++ b/openwiki/concepts/agent-runtime-and-assistant.md @@ -80,10 +80,10 @@ sources: resource: repo://TFMTests/ChatComposerStateTests.swift - id: openwiki-source-8d265a8732f0af93c5d4e274 resource: repo://TFMTests/MCPServerToolsTests.swift -generated: { by: "codex", at: "2026-09-23T06:11:02.802Z" } +generated: { by: "codex", at: "2026-09-23T06:54:45.592Z" } verified: - by: openwiki/0.5.2 - at: 2026-09-23T06:11:02.802Z + at: 2026-09-23T06:54:45.592Z --- # Assistant, Agent Runtime, Skills, and Memory @@ -176,9 +176,13 @@ This sequence shows an accepted draft submission and the persistence points afte `ConversationModel.isPreparingAgentRun` is distinct from `isStreaming`; `isAgentRunActive` combines them for activity guards. Preparation has no runtime that can accept steering, so it must not masquerade as streaming. When neither compaction nor memory loading is needed, preparation can hand off synchronously without an asynchronous preparation task. -Stop, controller-wide cancellation and mobile background expiration invalidate preparation identity synchronously. Cancellation cancels and joins tracked edit-history/preparation work before finishing its interrupted save; completion rechecks identity after the save so an older cancellation cannot retire a replacement capture. The concrete SwiftData truncation method checks cancellation before entering its synchronous transaction. These boundaries prevent a stopped or superseded preparation from later editing history or starting a runtime; they do not roll back a history transaction that already committed. +While a capture is still preparing, Stop, controller-wide cancellation and mobile background expiration invalidate its identity synchronously. Cancellation cancels and joins tracked edit-history/preparation work before finishing its interrupted save; completion rechecks identity after the save so an older cancellation cannot retire a replacement capture. The concrete SwiftData truncation method checks cancellation before entering its synchronous transaction. These boundaries prevent a stopped or superseded preparation from later editing history or starting a runtime; they do not roll back a history transaction that already committed. -Archive/delete operations cancel and await pending preparation before their existing activity guards and persistence work. Manual compaction refuses preparation, while selecting another conversation leaves its preparation running. Automatic compaction uses the captured model/settings and the valid transcript available during preparation, with persistence preceding the live projection change. +A captured missing model or credential moves preparation into `savingFailure`. Its one terminal snapshot save replaces the tracked preparation task, and the enclosing preparation task returns without awaiting itself. The failure task retains the controller, conversation and repository until the attempt returns. Preparation remains active throughout the save; only success followed by the current-identity check publishes failed state and adopts an edited staging run. A rejected save appends the persistence error and retires preparation without publishing a failed run or adopting staging. + +Cancellation during `savingFailure` returns that existing task without cancelling it, dropping it, or adding an interrupted snapshot. Thus Stop followed by `stopAndWait`, controller cancellation and archive/delete all join the same save attempt. This join includes a rejected attempt and does not guarantee storage success. While it is pending, edit supersession and direct edit/fork operations are refused, preventing a new history mutation from overtaking the failure snapshot. Ordinary prepared edits remain supersedable. + +Archive/delete operations request cancellation and await pending preparation or failure persistence before their existing activity guards and persistence work. Manual compaction refuses preparation, while selecting another conversation leaves its preparation running. Automatic compaction uses the captured model/settings and the valid transcript available during preparation, with persistence preceding the live projection change. ### Streaming, steering, and cancellation @@ -250,7 +254,7 @@ Tool cleanup follows ownership before time. Known source-message and run-local c The replacement is durable before a runtime exists: its message ID also identifies an independent, completed, failure-free staging run containing that one user row and no tool graph. Its start time is placed after the latest retained run if clocks tie or move backward, including when the earlier retained run has no messages. On the first real snapshot containing that staged final user turn, `save` transactionally moves only the staged message to the real run, assigns its snapshot sequence, retains its attachments/replay backing, deletes the staging run and retires its ID. Historical messages replayed into the snapshot keep their existing owners and are not duplicated. Adoption preserves the staging start-time lower bound; subsequent snapshots cannot move it backward, and terminal time is clamped to that start when necessary. -`ConversationModel` mirrors adoption on `runStarted`, captured failure, preparation interruption, and queued-runtime cancellation; `runFinished` retains the adjusted chronology. Failed, interrupted, and cancelled replacements therefore use their actual run provenance rather than an abandoned staging summary. Publication order still depends on the path: preparation cancellation awaits the interrupted save and rechecks identity before adopting, while queued-runtime cancellation and `recordFailedRun` for a missing model/credential project live before their asynchronous save. Neither the end of preparation nor visible terminal state alone proves that persistence finished. For queued cancellation, `stopAndWait()` joins that save attempt. The persist-before-live contract above is specifically the history mutation boundary. +`ConversationModel` mirrors adoption on `runStarted`, captured failure, preparation interruption, and queued-runtime cancellation; `runFinished` retains the adjusted chronology. Preparation interruption and captured configuration failure await a successful save and recheck identity before adoption. A failed save leaves the edited staging provenance intact. Queued-runtime cancellation retains its separate immediate live projection before asynchronous save. `stopAndWait()` joins the relevant attempt in either cancellation path; a visible runtime terminal event alone remains insufficient evidence of save completion or success. The repository instance retires the edited target run, removed later runs and adopted staging run so late snapshots or durable tool events cannot resurrect the discarded suffix. Truncation and snapshot save roll back SwiftData changes and restore the previous in-memory retired-ID set on error. These rules use the existing schema and Termind's Application/Persistence adapters, without changing AgentKit or its package pin. See [Persistent Data](persistence-and-secrets.md) for the storage contract. @@ -268,7 +272,7 @@ stateDiagram-v2 Ready --> Preparing: accepted capture Preparing --> Running: current capture handed to runtime Preparing --> Interrupted: cancellation saved - Preparing --> Failed: captured configuration unavailable + Preparing --> Failed: captured failure saved Running --> WaitingApproval: Ask action pending WaitingApproval --> Running: allow WaitingApproval --> Running: denial result recorded @@ -308,15 +312,15 @@ The focused tests establish behavior that is important when changing this area: - `TFMTests/AgentRuntimeTests.swift` covers schema-before-approval/execution, approval mode routing, Guardian timeout/failure fail-closed behavior, single-use secret handles, steering delivery, tool cancellation, registry shadowing, and durable-event filtering. - `TFMTests/AgentPersistenceTests.swift` covers redaction, interrupted-run recovery, replay deduplication, tool-result repair, graph deletion, same-run edit prefix/tool preservation, canonical equal-time ordering, empty retained runs, staging adoption, late-write rejection, fork persistence and compaction restoration. `ChatComposerStateTests.swift` checks the compacted live prefix, tool cards, title, plans and adopted run summaries. -- `FrameworkTests/AgentReplayPersistenceTests.swift` checks failed/interrupted staging adoption and queued cancellation of an edited replacement. The cancellation fixture reloads through a fresh `ModelContext` and repository, checking one adopted run, captured text/images/attachments/context, permission mode, and staging/terminal chronology. -- `FrameworkTests/AssistantExecutionControllerTests.swift` covers capture across a memory barrier, missing credentials, first-send guards and payload folding, plan implementation, edit persistence/cancellation barriers, failed/interrupted replacement provenance, superseded captures, navigation, compaction refusal, memory revocation, and neutral legacy context. Repository snapshot waiters distinguish async save completion from a live failed state. +- `FrameworkTests/AgentReplayPersistenceTests.swift` checks failed/interrupted staging adoption, queued cancellation, and controller-owned configuration failure of an edited replacement. The cancellation and captured-failure fixtures reload through a fresh `ModelContext` and repository, checking one adopted run, captured text/images/attachments/context, permission mode, and staging/terminal chronology. +- `FrameworkTests/AssistantExecutionControllerTests.swift` covers capture across a memory barrier, missing credentials, first-send guards and payload folding, plan implementation, edit persistence/cancellation barriers, failed/interrupted replacement provenance, superseded captures, navigation, compaction refusal, memory revocation, and neutral legacy context. Failure-save barriers verify preparation stays owned, Stop/controller joins, exact save-before-archive/delete ordering, edit/fork refusal, retention after caller release, and rejection without staging adoption. Synchronous MainActor join probes distinguish entered joins from completed joins while the save is blocked. - `FrameworkTests/AssistantConversationOperationsTests.swift` verifies persistence-first history mutations and activity guards, plus queued Stop/Stop-and-Wait with zero provider/tool calls, captured cancelled snapshots, Stop followed by a blocked-save join, persistence after presentation release, direct queued-owner displacement, pending approval cancellation, and an old persistence drain finishing while a replacement remains running. Injected review events verify that the stopped run's review state and card do not contaminate that replacement. - `TFMTests/AgentScratchTests.swift` verifies workspace containment, symlink refusal, inter-conversation isolation, quotas, and bounded reads. - `TFMTests/AgentBuiltInToolAvailabilityTests.swift` checks exact Termind planning/acting/reviewing sets, the shared SSH schema with mode-specific preflight, and execution spies proving the surface gate blocks only terminal suggestions. - `FrameworkTests/AgentSteeringTests.swift` and `TFITests/MobileAssistantTests.swift` check snapshot preservation, delivery timing, legacy unknown context, mobile send/steer availability, acting-mode plan implementation, and tool-incapable models. Mobile's SwiftData restore/edit fixture also verifies same-run prefix preservation and replacement provenance. - `TFMTests/MCPServerToolsTests.swift` checks the exported acting subset against shared descriptors, transfer tools and disabled calls; `AgentHostProtocolListingTests.swift` checks protocol-neutral discovery, and `AgentToolPresentationTests.swift` retains legacy presentation coverage alongside the persistence suite. -The queued-cancellation SwiftData regression uses an in-memory container with a fresh read context, not a process restart or an on-disk crash test. Barrier fixtures establish save-attempt ordering; they do not exercise storage failure. The review-state fixture injects presentation events rather than contacting a Guardian provider. Preserve these distinctions when choosing additional validation. +The queued-cancellation and captured-failure SwiftData regressions use an in-memory container with a fresh read context, not a process restart or an on-disk crash test. Controller barriers establish save-attempt ordering and inject a repository save rejection; they do not simulate a failing SwiftData disk transaction. The queued-runtime barrier and review-state fixtures remain ordering/presentation tests, with injected events rather than a live Guardian provider. Preserve these distinctions when choosing additional validation. ## Change guidance diff --git a/openwiki/concepts/persistence-and-secrets.md b/openwiki/concepts/persistence-and-secrets.md index 2a5adf79..3c368757 100644 --- a/openwiki/concepts/persistence-and-secrets.md +++ b/openwiki/concepts/persistence-and-secrets.md @@ -62,6 +62,8 @@ sources: resource: repo://Frameworks/TermindPersistence/TermindSchemaV33IdentityModels.swift - id: openwiki-source-017f5e2abe9b13df755a5322 resource: repo://FrameworkTests/AgentReplayPersistenceTests.swift + - id: openwiki-source-6ec3fb4cd6a582cdf278bab9 + resource: repo://FrameworkTests/AssistantExecutionControllerTests.swift - id: openwiki-source-bf7a64e7c819eb9279e2f9e4 resource: repo://FrameworkTests/CloudSyncLifecycleTests.swift - id: openwiki-source-40cfadc2320da9a292c64d26 @@ -82,10 +84,10 @@ sources: resource: repo://TFMTests/AgentPersistenceTests.swift - id: openwiki-source-1d1efb20e239b1f2142f6cb7 resource: repo://TFMTests/SettingsSyncTests.swift -generated: { by: "codex", at: "2026-09-23T03:40:50.823Z" } +generated: { by: "codex", at: "2026-09-23T06:59:53.554Z" } verified: - by: openwiki/0.5.2 - at: 2026-09-23T03:40:50.823Z + at: 2026-09-23T06:59:53.554Z --- # Persistent Data, Migrations, and Secret Boundaries @@ -136,7 +138,9 @@ The first real snapshot whose final ordinary user turn is this staged replacemen The repository's in-memory retired-ID set includes the edited target run even when its prefix survives, all removed later runs, and adopted staging runs. `save` and durable-event `record` ignore retired IDs, preventing late work from rebuilding the discarded suffix. This is a repository-instance guard, not a new persisted tombstone or schema migration. Both truncation and snapshot save restore the previous retired-ID set and roll back their `ModelContext` changes if the transaction fails. -`AssistantConversationOperations` applies the live history edit only after the repository commits; invalid replacements and rejected writes leave history unchanged. Live running, failed and interrupted projections adopt staging provenance too, but publication ordering is not universal: a captured missing-model/credential failure still updates live state before its separate asynchronous save. See [Assistant Runtime](agent-runtime-and-assistant.md) for that boundary and the distinct immediate-stop runtime-handoff limitation. Shared replay tests restore failed/interrupted adoption through a fresh context; desktop and mobile fixtures compare same-run prefix history and provenance after edits. These fixtures do not inject a real disk-full or read-only SwiftData failure. +`AssistantConversationOperations` applies the live history edit only after the repository commits; invalid replacements and rejected writes leave history unchanged. A captured missing-model/credential failure remains owned by preparation until its terminal save returns. Success and a current-identity check precede failed projection and staging adoption; rejection reports the persistence error and retires preparation with staging intact. Synchronous Stop preserves this one save task without cancelling it or adding interruption; `stopAndWait()` or awaiting the task returned by controller cancellation joins the attempt. Archive/delete await it, while edit supersession and direct edit/fork operations are refused until it finishes. A completed join therefore proves the attempt returned, not that storage succeeded. + +Queued-runtime cancellation retains its separate immediate live projection before saving; see [Assistant Runtime](agent-runtime-and-assistant.md) for its save-attempt join and runtime-handoff contract. Shared replay tests restore failed/interrupted adoption and a controller-owned failed edit through fresh contexts; desktop and mobile fixtures compare same-run prefix history and provenance after edits. The controller rejection fixture uses an injected repository error, and fresh-context restore uses in-memory SwiftData. Neither is a real disk-full/read-only SwiftData failure or process-restart test. ## Schema evolution: preserve the past exactly diff --git a/openwiki/quickstart.md b/openwiki/quickstart.md index d7031fa4..8ea107de 100644 --- a/openwiki/quickstart.md +++ b/openwiki/quickstart.md @@ -22,10 +22,12 @@ sources: resource: repo://TFM/Features/Workspaces/WindowModel.swift - id: openwiki-source-d3d065330c730839f5cc6112 resource: repo://TFMTests/ArchitectureBoundaryTests.swift -generated: { by: "omp", at: "2026-09-22T03:23:14.035Z" } + - id: openwiki-source-0dd012e3740bcc348fc36ccb + resource: repo://TFMTests/StoreKitTrialTests.swift +generated: { by: "codex", at: "2026-09-23T06:54:45.592Z" } verified: - by: openwiki/0.5.2 - at: 2026-09-23T05:17:08.701Z + at: 2026-09-23T06:54:45.592Z --- # Termind Engineering Quickstart @@ -99,6 +101,8 @@ Scripts/check-zh-localization.sh Use an installed iPhone or iPad simulator destination for `TFI` tests. Keep visible-window macOS tests opt-in with `TEST_RUNNER_TERMIND_WINDOW_TESTS=1` and a narrow `-only-testing` selection; routine checks should stay headless. UI string changes require completed `zh-Hans` and `zh-Hant` translations in `Frameworks/Resources/Localizable.xcstrings`; landing-page work is separately validated with `cd LandingPage && npm ci && npm run build`. +StoreKit tests also remain skipped by default because they require manual authorization. When explicitly running them, set `TERMIND_STOREKIT_TESTS=1` and prefer `-only-testing:TFMTests/StoreKitTrialTests`. Default-suite success does not imply that opt-in suite ran. + ## Change checklist - Identify the domain and owner in the routing map; read the detailed page before implementing. diff --git a/openwiki/testing/behavioral-boundaries-and-fixtures.md b/openwiki/testing/behavioral-boundaries-and-fixtures.md index ad6049ba..a558389b 100644 --- a/openwiki/testing/behavioral-boundaries-and-fixtures.md +++ b/openwiki/testing/behavioral-boundaries-and-fixtures.md @@ -40,6 +40,8 @@ sources: resource: repo://TFITests/MobileConnectionPickerTests.swift - id: openwiki-source-9b78a7e39bfa08bea5192722 resource: repo://TFITests/MobileWorkspaceStoreTests.swift + - id: openwiki-source-7e364c6182a8339831ecab24 + resource: repo://TFM/Features/Workspaces/WorkspaceNavigatorView.swift - id: openwiki-source-cfbc34def649c94f760c5695 resource: repo://TFMTests/AgentHostAuthenticationTests.swift - id: openwiki-source-715de8d16be5a3d06ae915ad @@ -52,14 +54,18 @@ sources: resource: repo://TFMTests/ConnectionHistoryTests.swift - id: openwiki-source-53e2b2fd2e661123f63e69e1 resource: repo://TFMTests/SFTPTransferContextTests.swift + - id: openwiki-source-0dd012e3740bcc348fc36ccb + resource: repo://TFMTests/StoreKitTrialTests.swift - id: openwiki-source-960109cd5bc0de7a879c1e16 resource: repo://TFMTests/VaultSyncTests.swift - id: openwiki-source-a08489338be00125d646c77e resource: repo://TFMTests/VisibleWindowTestTrait.swift -generated: { by: "codex", at: "2026-09-23T03:34:06.838Z" } + - id: openwiki-source-05f0aeba12df8388b97b3c76 + resource: repo://TFMTests/WorkspaceNavigatorRenameTests.swift +generated: { by: "codex", at: "2026-09-23T06:54:45.592Z" } verified: - by: openwiki/0.5.2 - at: 2026-09-23T05:17:08.701Z + at: 2026-09-23T06:54:45.592Z --- # Testing Strategy and Behavioral Boundaries @@ -105,7 +111,11 @@ A message edit inside one run needs a fixture such as `opening → assistant/too Application error and timing fixtures complement those real SwiftData checks. `AssistantConversationOperationsTests` proves an invalid replacement never reaches persistence and a rejecting truncation leaves both visible and model history unchanged. Controller tests hold preparation at a memory barrier, cancel after a successful edit, and assert interrupted real-run provenance replaces staging. These seams do not inject disk-full or read-only failures into the real SwiftData transaction; its rollback path must not be described as fault-injection tested. -Use the boundary that the assertion needs as its wait condition. Captured missing-model/credential failure projects `.failed` before launching a separate asynchronous repository save, so `!isPreparingAgentRun` is not a save barrier. The controller fixture's `waitUntilSnapshot(state:)` checks existing snapshots or suspends an actor-owned continuation; `save` records the snapshot before resuming matching waiters. The missing-credential and navigation tests retain both live-state and repository-state assertions and wait for the latter explicitly. This does not change production failure ordering or prove durability across the separate queued-runtime immediate-stop handoff. +Use the boundary that the assertion needs as its wait condition. Captured missing-model/credential failure stays in preparation until its save attempt returns; `.failed` and staging adoption publish only after success and an identity check. A retired preparation can also mean a rejected save, so retirement alone does not prove durability. The recording repository distinguishes attempted snapshots from completed saves; actor waiters handle both already-observed and future events. + +`AssistantExecutionControllerTests` blocks the first failure save and verifies preparation remains active without failed projection. Stop followed by `stopAndWait` and controller cancellation join the single failed snapshot, with no interrupted write. Synchronous MainActor start/completion probes establish that those joins are pending before releasing the save. Archive/delete tests assert the exact save-attempt → save-completed → metadata/delete sequence. Further fixtures cover the memory-preparation transition, controller/conversation lifetime after callers release them, rejection of superseding and direct edits/forks over a retained assistant prefix, and injected save rejection leaving staging intact while reporting the error. + +`AgentReplayPersistenceTests.capturedConfigurationFailureAdoptsEditedStagingOnlyAfterDurableSave` exercises the production controller, operations and SwiftData repository, then restores through a fresh context. It checks one failed run with the edited message's text, images, attachments, context and permission, no remaining staging run, and monotonic staging/terminal chronology. This in-memory fixture and the injected rejection do not test a disk failure or process restart. Queued-runtime cancellation retains its separate live-before-save behavior and save-attempt join described in [Assistant Runtime](../concepts/agent-runtime-and-assistant.md). ### CloudKit compatibility: test prohibited uploads, not just decoding @@ -170,6 +180,10 @@ TEST_RUNNER_TERMIND_WINDOW_TESTS=1 xcodebuild -project Termind.xcodeproj -scheme In Xcode, set `TERMIND_WINDOW_TESTS=1` in the Test action environment. Existing screenshot suites can retain their dedicated gates. A visual change still needs behavior-appropriate coverage: an offscreen test for state/policy, a visible-window test for focus/presentation when applicable, and screenshot/marketing capture only where that workflow owns the deliverable. +`WorkspaceNavigatorRenameTests` is a serialized visible-window suite. It exercises both the context-menu and double-click rename paths and checks that the editor starts with the complete workspace title. The production view seeds the title before publishing the renamed workspace ID, so mounting the editor sees its initial value. + +StoreKit tests use a separate opt-in because they require manual authorization. `StoreKitTrialTests` is serialized and skipped unless `TERMIND_STOREKIT_TESTS=1`; when explicitly authorized, prefer the narrow `-only-testing:TFMTests/StoreKitTrialTests` selection. Ordinary default-suite success therefore does not imply this StoreKit suite ran. + ## Change-to-regression matrix | Change type | Primary regression seam | Required behavior to protect | @@ -177,6 +191,7 @@ In Xcode, set `TERMIND_WINDOW_TESTS=1` in the Test action environment. Existing | Framework dependency or data-owner change | `ArchitectureBoundaryTests` plus affected framework suite | No reverse import, concrete implementation leak, duplicate AgentKit type, or SwiftData model outside Persistence. | | SwiftData schema, migration, or durable agent record | Persistence compatibility/replay fixtures | Old stores open, records retain intended values, interrupted timing remains recoverable, and deletes clean backing rows. | | Assistant message-boundary edits or replacement provenance | Agent persistence/replay, conversation operations/controller, composer and mobile Assistant fixtures | Same-run prefix and graph survive, suffix backing is removed, staging adopts once, chronology remains stable, live/restore agree, and late retired writes cannot resurrect history. | +| Captured Assistant configuration-failure persistence | Controller save barriers and fresh-context replay restore | Failure remains owned until save return; joins add no interrupted write; success precedes adoption, rejected saves retain staging, and edits/forks cannot overtake the attempt. | | CloudKit format, upload scheduling, conflict or recovery behavior | Shared lifecycle, coordinator-safety and on-disk safety fixtures | Unsupported IDs never upload, compatible peers progress, restrictions survive retry/reopen, and failed reconciliation cannot unblock data. | | SSH credentials, prompts, host trust, or agent authentication | Authentication and interaction-policy fixtures | Ephemeral secrets stay ephemeral, prompt scope/order/coalescing is correct, forbidden work stays noninteractive, and secrets are invalidated after use. | | SSH/SFTP transfer scheduling or pane/session teardown | `SFTPTransferContextTests` with a controlled channel harness | Concurrency bounds hold, background transfer ownership survives UI teardown, cancellation cleans up, and fallback does not invite interaction. |