diff --git a/openwiki/.claims/architecture/supporting-system-directories.json b/openwiki/.claims/architecture/supporting-system-directories.json index 7dcdb816..b2b9a3b2 100644 --- a/openwiki/.claims/architecture/supporting-system-directories.json +++ b/openwiki/.claims/architecture/supporting-system-directories.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:d63df8fa83651d0f3c73973639b1ae0d359c73f31c6f342c42ad3f8a819c9e75", + "pageVersion": "sha256:461e81326b943f4056452e95a67a0bf967f59c5afb090aca7d16043e9d071a21", "claims": [ { "id": "claim_8809151c43594803b83cf0451d849112", @@ -126,51 +126,29 @@ } ] }, - { - "id": "claim_064e94c9f0bc42d8b09bc1a831c38961", - "statement": "The independent com.akinokaede.termind Astro project provides English, Simplified and Traditional Chinese, and Japanese routes, shared components/layouts and legacy zh redirects, and imports an explicit device-frame allowlist from assets instead of copies in public/.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" - }, - { - "resource": "repo://com.akinokaede.termind/package.json", - "version": "repo-file-v1:sha256:72831c4186784ecf365ee64baec06d0b7f41d3075a2d0630a6e77ba876b102ad" - }, - { - "resource": "repo://com.akinokaede.termind/src/layouts/BaseLayout.astro", - "version": "repo-file-v1:sha256:df2a99ddca09bde7895ff721f3da265364d2eac612ec50567a73a919e0e01a7b" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/i18n.ts", - "version": "repo-file-v1:sha256:4263ba73fd4ff4ed0033883d05166aa52bd00cfdde26c9064c844ea5de580284" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/marketingImages.ts", - "version": "repo-file-v1:sha256:a2ea1343388f3c01d27bddd01bd4466b30f659d21379cc801eb43e9efb673910" - } - ] - }, { "id": "claim_007ca03617d6410daff00909e70a2a96", - "statement": "The public asset submodule separates native captures, reproducible frame PNGs, opaque RGB sRGB App Store JPGs and brand/paywall design masters. Capture/frame directories are locale/device-first, with native iPhone Pro, iPad, 14-inch Mac and Duo display names; final store canvas folders are independently named.", + "statement": "Parent Ruby tooling defaults capture output/frame input to assets/captures and derived PNG output to assets/device_frames in the public submodule, preserving lowercased locale/device/scene identity with iphone-6.3, ipad-15, mac-14 and Duo display directories. Default asset paths require a .git marker and assets directory; explicit capture output or both explicit frame paths bypass that prerequisite with valid templates still needed. The planner selects a parent-defined scene subset, not verified website imports. Framing validates templates and native dimensions, masks staged copies, composes mobile frames via frameit and Mac frames locally, preserves source bytes, and verifies all requested renders before publication; focused Ruby tests cover missing-submodule failures, external paths, selection, dimension rejection and withheld publication on missing renders.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/assets/README.md", - "version": "repo-file-v1:sha256:de2ae13c89af67e8029b26b9d2dd77853ab50d62f58d39447f04d222fdbbd745" + "resource": "repo://Scripts/Tests/test_screenshots.rb#L20-L35", + "version": "repo-lines-v1:sha256:61afa32fa8ec764f142140b419e64dc6ee31fcbd1c19cd3cd06b9c11e398ba47:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImEzZjI4NjcxMjFjODNhYjRjOTRmZTBhYjVjZGMwMTk3YTlmNzRiYzUyNzk3YTRkMGEyZWQzYTYzYTA0MjI3MTgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU0YjI2MTMzNDdmOTQzMzE2NGI1N2Y3OTllMmIwMzYxMDU5MzNkY2NkOTJiNzQzNjk2NTQxNzQ3YTk2MWQ3MmUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjA0MmJhZDAzZjYwNmM5ZjYzZTM4YzI5YzljMTQzMGQ0ZmE1MmI3N2E3Yjk1OTczZmJjOTJmYTIyOTQwNzI5ZDUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdhNGQ3MTE2NzUzNGZjZWY1MDk0NmRjMmFkYmE4YTJiNDg0NzczOWI0ODYwYzBhNzc5YWQxYzU1NTdhYTkwZjAifQ" }, { - "resource": "repo://com.akinokaede.termind/design/README.md", - "version": "repo-file-v1:sha256:c680cb05157b9b3aa998ce85263c90dfca1f58a2fbc1ea9ee3c56790ccd5308d" + "resource": "repo://Scripts/Tests/test_screenshots.rb#L385-L529", + "version": "repo-lines-v1:sha256:812c3cfdf42c364c2286c49912882a1269f375384f8f13aafbdeef86481c257b:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQ1LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJjMTgwMWYzM2RkNDU5MTI5NGVlNjM5OGRmZWNhZDhmYmFhOTU1ZDI5MjNiMDFlZDBmYjdlOTI5YmRkZjQyMzI4IiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiI0ODMzMmZlNjY3YmM1MWFjNGE1MWJhMGVmZTczNDQ0MWM5MGRlZjU1YzYwYTI2ZDdkYjI3NWVjYmJjZjQyZjE1IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiJkNGE5NjQ2NjE4NjhkZWE2ZGY2ZGVkZWEyNzY2ZDMxZTEyYjljNWZlOWQyYzYyMGNmN2Q2NzEwMTE0NmUzMDc4IiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MCwiZm9sbG93aW5nQ29udGV4dEhhc2giOiJlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1In0" }, { - "resource": "repo://fastlane/lib/screenshot_frames.rb#L20-L44", - "version": "repo-lines-v1:sha256:cea2f6a8e1cc3cfbd3a5cedc076807ca097f990c9066bf5635cf915cc69a4f21:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkNGY3YjI0NjJhNGU4MTcyODNiM2ExYzA0ZjM4Y2Y0YTE4ZmQ4MWMxMTMzMWExODZlNWZiNWFmNzI3MDcxMjYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3OTgxMWM1ZmJlMjVjM2Q0ZTVmM2QxZmQzNWFiOWRhNmJjZjhhNjhjNWVkZjlkNmJhOTdmNjg2ODZjMzk2ODAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNmNmQ1ZThhMTM2NGVmM2Q5NzllNTRiZmU1MWVmMTM4NjM5YzBmY2RjMWY2ZDY5NDQ2NDNhNWVhMjBmYTQxOWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJkYTFkMzdjZmI3YzYyOGZkMTcyOTY2M2IzZmYwMTliODE1MDU4ODhhNzA5NDdhYTUyY2VjNzRmMTE4ZjZjNzMifQ" + "resource": "repo://fastlane/lib/screenshot_frames.rb#L7-L191", + "version": "repo-lines-v1:sha256:31ee13a91fb6ddb2aad33c0dfe2ea64f9f15cf2b38bef6160b83591e18c068e4:eyJzZWxlY3RlZExpbmVDb3VudCI6MTg1LCJmaXJzdFNlbGVjdGVkTGluZUhhc2giOiJhNGUyNGZhZTkxZjlhOTE1OWVlZDQ4MTFiZDE5MDUyNTc1NzQzZTlmZjBjNjA4ZWM1ZmUzNDY2NDZhYjJjMDYyIiwibGFzdFNlbGVjdGVkTGluZUhhc2giOiIyNmRiNmE1ZTJlN2I2OTVmMDMxMjZhMTM1NmE2ODM0MzMxZTRhMjY3NWUwZGE3NDFiOTU3NTM2YjI3YTNiYTE3IiwicHJlY2VkaW5nQ29udGV4dExpbmVDb3VudCI6MywicHJlY2VkaW5nQ29udGV4dEhhc2giOiIxODM2N2Q0NWUxMGQ0MmYwZWJlYjU2ODgwNWZiNmMzZGNkMmJmMDg2ZTlmYjZiZDc5OWE3MWU4YzRkODg2Y2NmIiwiZm9sbG93aW5nQ29udGV4dExpbmVDb3VudCI6MywiZm9sbG93aW5nQ29udGV4dEhhc2giOiIxZDczYTllYzIzYTEzMzA2OTU3MTZhYmFmMmM5YmExYzEwMjkxZGYxODkzMmRlOGEyM2ZlMmIzMWJiZTM2ZjlmIn0" }, { - "resource": "repo://fastlane/lib/screenshots.rb#L10-L18", - "version": "repo-lines-v1:sha256:df66f99050de2639199032ae0fca07cbee241eb117a72732115f69d50d628a47:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZjI2YjY5MGRiNDI1OTk3ZGRlZGEyMDMxOGE3YTdhNTQ4MjA3M2Q3YzExMTdmZjJiNWMyMDg3NWZmMGYzNTY0MyIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYTM1YTM5MTYyNDRhNmFiYjAyYzhjZmJlMWEyMjBlNTEyM2NkNDUwNDBkNmNhNmM2NThiNTczYzA2ZmE4ODUxZSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNmFiZTAxMTI4NTc2OGNhZTBlNWJmMjY3ZThlY2QwNDAxMDUzNGI0YjRjMWU0MzFmMzA2M2IzYjMxMWU1NzJiOSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYTU4ZjY2YzNlZDliZmQ5YzkxYTlkMzJiODI1YmQ5YjUzYWYxZGE2YWNjZmUxZGM4NWQxZjBiMzEyOGZkOWIzZCJ9" + "resource": "repo://fastlane/lib/screenshots.rb#L10-L23", + "version": "repo-lines-v1:sha256:14eac5c07cd9b4d69e3ca81909da03aaf8db05b05133af79da47a699a9b24e6d:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImYyNmI2OTBkYjQyNTk5N2RkZWRhMjAzMThhN2E3YTU0ODIwNzNkN2MxMTE3ZmYyYjVjMjA4NzVmZjBmMzU2NDMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3OTgxMWM1ZmJlMjVjM2Q0ZTVmM2QxZmQzNWFiOWRhNmJjZjhhNjhjNWVkZjlkNmJhOTdmNjg2ODZjMzk2ODAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZhYmUwMTEyODU3NjhjYWUwZTViZjI2N2U4ZWNkMDQwMTA1MzRiNGI0YzFlNDMxZjMwNjNiM2IzMTFlNTcyYjkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhkZTI0YjAyMjU4NWQyYzA4ZjU4ZmFmYzUzZDg0M2E4NmIwYzgyZjU0ZDk1OWE0NWU0OTAxNGQ3N2MxYjRmMDMifQ" + }, + { + "resource": "repo://fastlane/lib/screenshots.rb#L66-L81", + "version": "repo-lines-v1:sha256:14e4300122b499c9067ad530d97544041f6c6aa93bcd23abb210dc88d24d82ff:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjJmZGQyNzdlN2EwNjQyNWRjNDJlZjJiNzcxOGUxNTAxNDJjM2VmMzdhMTgwOWIxMWVmZTUzNWQ4ZjEwOTQ0YjIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhNmRhZTVlNDdhNjVlNWQ0OGVhNWJhNDY0YWUyMDljZmJjZjdjMDFhM2RhYmNiZmY1NTdhYTNiMjNhNGE5YmEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjhjMmQ3NWYwYTJjNTFlZGU5OGMyNjViZGJjYTNjNmQyYzYwNDFjMjg3OTAwMzRlMDY0YWMyYzliYzAzMmMyNmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjcxYTA4OTI4MDI4YTViOTA0NDJiNTE2Zjc0NmRmZGQ2ZmE3MmZlMjlmYWI0MjM2Y2QxYTVmYTAwNTdjZGI3OGEifQ" } ] }, @@ -414,23 +392,15 @@ }, { "id": "claim_b78d8b8a82bc4d0ba497713a74f19645", - "statement": "The public submodule's npm ci installs locked web dependencies; npm run build runs Astro checking before production generation and optimized AVIF/WebP/JPEG transforms of allowlisted device frames. Native app builds do not require this separate site build.", + "statement": "The parent repository documents npm ci and npm run dev for locked dependency installation and local Astro development, and npm run build for type-checking and production output to com.akinokaede.termind/dist/; native builds do not require this submodule. These instructions do not verify the submodule's package scripts or image transforms.", "evidence": [ { "resource": "repo://AGENTS.md#L14-L21", "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" }, { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" - }, - { - "resource": "repo://com.akinokaede.termind/package.json", - "version": "repo-file-v1:sha256:72831c4186784ecf365ee64baec06d0b7f41d3075a2d0630a6e77ba876b102ad" - }, - { - "resource": "repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro", - "version": "repo-file-v1:sha256:b681fc11c50f4bd3eadc1f0353c4e82f2c3045624b95273efed055d1ae414bfa" + "resource": "repo://AGENTS.md#L59-L60", + "version": "repo-lines-v1:sha256:d504b70e9953b1673814e4a03529f8f9eaa4802dc7b5f6a97452cca5f1da8b38:eyJzZWxlY3RlZExpbmVDb3VudCI6MiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYTg0OGEwZDI3OGNhZGI2NDA1NzY1ZDYxYTY1OTljOTUzODZmZGQ3OWRiMGUyOGM5ZDY2N2MwNDdjNWIwNTJhYyIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOWZhOTJmZDQyNWYwN2ViMmIyMWVmN2FjZWM2YmNkZWNkYTZmNzk0MWM1OTI5M2U4YzYyMmRiMjhjOGU4YWY2ZCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNTk2MWFhYjc5NWU4NjA0MDU0ZWJmMjdlNTVkZmM0NWU2NzljMzMyNTBmYzdjYzRhZDQwMGMwNzk2ZWY5YTEzNCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNTMwM2VlYzhlNjU1MjZiMzI1MWUyNDRmNjljMGIwOTMwY2ZmNTFiZDhiODRkMzZhMzk1NzJlZDg3YjIyOWZkOSJ9" } ] }, @@ -526,32 +496,6 @@ } ] }, - { - "id": "claim_691e63e327774587bdb5385d7d55caa9", - "statement": "Public comparison/pricing routes use shared evidence/features under src/lib/comparisons and centralized public USD prices in src/lib/pricing.ts across four locales; legacy zh redirects remain and public prices are separate from live RevenueCat offerings.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/comparisons/index.ts", - "version": "repo-file-v1:sha256:3750bce03077f13fdf88987ed9838e0a1f341d17741530c2e3c466c4eeb3ca75" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/comparisons/termind.ts", - "version": "repo-file-v1:sha256:235375405f1b1b189cc70a907f29466684e036f598e026e2a5f24cce09455c61" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/i18n.ts", - "version": "repo-file-v1:sha256:4263ba73fd4ff4ed0033883d05166aa52bd00cfdde26c9064c844ea5de580284" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/pricing.ts", - "version": "repo-file-v1:sha256:723353a492a9462cc3b29951d3f9235d678691c0d7c23859f7a5bdd1f9ff8695" - } - ] - }, { "id": "claim_af3ca6ae33544149a5152238fa0621ec", "statement": "libtailscale-spm tracks main as a maintenance submodule, but Xcode consumes its remote package through upToNextMinorVersion from 1.0.2, resolved to 1.0.2 at 098e6b69ea128f3a55bc560f005a3e851123dc99. TailscaleKit links into Remote Infrastructure, whose LibTailscaleNodeSession owns the app-side node.", @@ -600,25 +544,21 @@ }, { "id": "claim_2bfc5aa8143d4b7c8ce68d8aa49a5af1", - "statement": "Website, captures, frames, final store artwork and design masters live in the independent public submodule; native tools/app icons stay application-owned. Reviewed asset changes are pushed via SSH before updating the main gitlink, while the clone URL remains public HTTPS.", + "statement": "Repository guidance assigns the independent public Astro website and marketing/brand assets in assets/ and design/ to com.akinokaede.termind, while utilities and screenshot tooling remain parent-owned. Initialization is optional for native builds and intended for website/asset work; asset changes must be pushed via SSH before updating the parent gitlink, retaining the HTTPS clone URL.", "evidence": [ { - "resource": "repo://.gitmodules", - "version": "repo-file-v1:sha256:4ee3a7b7921786868dacd9587878cad13360d76d1dfe97c44cbf55b8ed8c06e9" + "resource": "repo://.gitmodules#L12-L14", + "version": "repo-lines-v1:sha256:c7d6ce76620da3eafc5c9b3ec573712bd83321c656fdee9b33e1623600ee21cc:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZDVlZTM0ZTU3NWVjNjRhODEzMjliZTk1ZWEwZDk3MTFhMTg0MDQ1MTRiNjkyMjhmNDMzODlhOGQ4ZjJjMWUxOCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOGM4NDY1YjI4NDNjZjc3ZTlmMTE5M2IzOTc0OGMyNjZkYmM5NjJhZGY0ZTlhYjVhMTAxYzcxYTdkYzlhNDlmMCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNGU4MjMyOGU4YjdlOThiZGQwMDBjZGNlMTEwNDA0YTEyYzI5MDE2YjY4NWIyZWYzOWJkYjk2OGM0YWE5YzA4NiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjAsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSJ9" }, { "resource": "repo://AGENTS.md#L14-L21", "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" - }, - { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" } ] } ], "verification": { - "by": "openwiki/0.7.1", - "at": "2026-10-08T13:46:25.102Z" + "by": "openwiki/0.7.0", + "at": "2026-10-09T00:05:26.272Z" } } diff --git a/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json b/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json index 28035c92..ba37d317 100644 --- a/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json +++ b/openwiki/.claims/concepts/commerce-localization-and-product-surfaces.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:0d2ed5a484b6d2e221490c7a609879a7aa8163f51b9469982eb932d741d9a271", + "pageVersion": "sha256:bfcc767924aef1756c700892275c7dd731393511422da859052a8d6bd27080e0", "claims": [ { "id": "claim_70c5c3da992944188e719c65adc9b06c", @@ -202,19 +202,19 @@ }, { "id": "claim_d41780eea21b46cba74c60f6d4ae01b5", - "statement": "The independent com.akinokaede.termind website/assets submodule contains the Astro project at its root; build runs astro check then astro build and imports a typed allowlist of native-scale frames instead of public-directory source copies.", + "statement": "The parent repository identifies com.akinokaede.termind as an independent public website/assets submodule with an Astro project at its root, documents initialization only for website or asset work and an npm build workflow, and states that native builds do not require it; those parent-repository instructions do not verify the submodule's current implementation or deployed content.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" + "resource": "repo://.gitmodules#L12-L14", + "version": "repo-lines-v1:sha256:c7d6ce76620da3eafc5c9b3ec573712bd83321c656fdee9b33e1623600ee21cc:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZDVlZTM0ZTU3NWVjNjRhODEzMjliZTk1ZWEwZDk3MTFhMTg0MDQ1MTRiNjkyMjhmNDMzODlhOGQ4ZjJjMWUxOCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOGM4NDY1YjI4NDNjZjc3ZTlmMTE5M2IzOTc0OGMyNjZkYmM5NjJhZGY0ZTlhYjVhMTAxYzcxYTdkYzlhNDlmMCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNGU4MjMyOGU4YjdlOThiZGQwMDBjZGNlMTEwNDA0YTEyYzI5MDE2YjY4NWIyZWYzOWJkYjk2OGM0YWE5YzA4NiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjAsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSJ9" }, { - "resource": "repo://com.akinokaede.termind/package.json", - "version": "repo-file-v1:sha256:72831c4186784ecf365ee64baec06d0b7f41d3075a2d0630a6e77ba876b102ad" + "resource": "repo://AGENTS.md#L14-L21", + "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" }, { - "resource": "repo://com.akinokaede.termind/src/lib/marketingImages.ts", - "version": "repo-file-v1:sha256:a2ea1343388f3c01d27bddd01bd4466b30f659d21379cc801eb43e9efb673910" + "resource": "repo://AGENTS.md#L59-L60", + "version": "repo-lines-v1:sha256:d504b70e9953b1673814e4a03529f8f9eaa4802dc7b5f6a97452cca5f1da8b38:eyJzZWxlY3RlZExpbmVDb3VudCI6MiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYTg0OGEwZDI3OGNhZGI2NDA1NzY1ZDYxYTY1OTljOTUzODZmZGQ3OWRiMGUyOGM5ZDY2N2MwNDdjNWIwNTJhYyIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOWZhOTJmZDQyNWYwN2ViMmIyMWVmN2FjZWM2YmNkZWNkYTZmNzk0MWM1OTI5M2U4YzYyMmRiMjhjOGU4YWY2ZCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNTk2MWFhYjc5NWU4NjA0MDU0ZWJmMjdlNTVkZmM0NWU2NzljMzMyNTBmYzdjYzRhZDQwMGMwNzk2ZWY5YTEzNCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNTMwM2VlYzhlNjU1MjZiMzI1MWUyNDRmNjljMGIwOTMwY2ZmNTFiZDhiODRkMzZhMzk1NzJlZDg3YjIyOWZkOSJ9" } ] }, @@ -540,38 +540,6 @@ } ] }, - { - "id": "claim_95a8260b49d74cc2968da0e4a7fc247a", - "statement": "FAQPage owns public free/Pro, Family Sharing, device-specific MCP and third-party AI billing disclosures independently of native catalogs; website i18n selects English/Simplified Chinese, Taiwan Traditional conversion with terminology overrides, or explicit/dictionary Japanese with English fallback.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/components/FAQPage.astro", - "version": "repo-file-v1:sha256:7d3e950ad4274181a68fa485b941a8589af0f0c75ba5c98fee213961e285fc6d" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/i18n.ts", - "version": "repo-file-v1:sha256:4263ba73fd4ff4ed0033883d05166aa52bd00cfdde26c9064c844ea5de580284" - } - ] - }, - { - "id": "claim_6c1dd9a802cb4f5da898eb04d9802228", - "statement": "Allowlisted website frames come directly from assets/device_frames//. Astro generates optimized AVIF/WebP/JPEG renditions rather than copying source PNGs into public; Hero now combines Mac Workspace and Duo outer Assistant.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro", - "version": "repo-file-v1:sha256:b681fc11c50f4bd3eadc1f0353c4e82f2c3045624b95273efed055d1ae414bfa" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/marketingImages.ts", - "version": "repo-file-v1:sha256:a2ea1343388f3c01d27bddd01bd4466b30f659d21379cc801eb43e9efb673910" - }, - { - "resource": "repo://com.akinokaede.termind/src/pages/index.astro#L49-L66", - "version": "repo-lines-v1:sha256:2e4c189ebd03eb8d4380b0b2940384215b1c1f59a1e4e609d4e55c1c4d077106:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE0NDRhMzFkOGVjN2U4OGY4NTU3MTUyNmJmMjdjOTU4ODIwZGZmZDI5ZjY4NTIxZDBjMDViNzcwNWExZjE4YjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImU4YTA3ZGRiMTVlNDU0Y2EwZjFlMWVmMWJhYTM3NDNmMjRkYmQwZDhhY2ZhOTg2M2ZiMDliY2FlNmMwOWY5NTkiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjdmOTczMjdmMTFjNTEyNTQ1MGE3MjA2OWE2N2NmZDcwYjhlNDU3MmZlOTA5MjY4ZjMzM2NmOGQ0M2YwYjI2NTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjI5YmIxNzg1NjY3NGM1NWQzNmFkNWY5MzMxODQ2ZTViMjU1ZGIyNmZhNzEwZTVmY2EzNmZjZmM4NzY1YjRiZjcifQ" - } - ] - }, { "id": "claim_540a60063eb44573908e556045122744", "statement": "The catalog normalizer defaults to the two shared app catalogs, marks entries manual without deleting stale translations, rejects duplicate JSON keys before any batch write, and checks or writes Xcode-compatible serialization; AgentKit's separately owned runtime catalog requires its own localization build step.", @@ -594,66 +562,6 @@ } ] }, - { - "id": "claim_808ab8be06da44ba8bd8cefd30a8ba16", - "statement": "Locale route wrappers serve separate public security/privacy components through BaseLayout, which owns navigation, canonical/alternate links and browser-local website language preference independent of native app settings.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/components/PrivacyPolicy.astro#L1-L20", - "version": "repo-lines-v1:sha256:c89665570a5be68902519fb4cd8c965230b0fe05c2231e47c316301669c42ab6:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1MmQ3MTExMDNkNTBhNDM3ODMwYzZmYmNkMDRmYjRiYWI0OWEwZjgyZjZkMjZkMWM3OTFjNmU4NDg4ZGQwOTAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRjMDVjNWM4NmYwOTljN2Q1ZTYzYjU3NDgwNDFjMDU1YTMxMGJmN2NhZjQxMGQzMGUwZWExYTdjMzYzNmY5MTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImJhNDRhMzJiZjM0ODBlNzRhMTQ2MTdkNmNiMGJjMGI2OWFhN2YwZmRiZjI2OGNhNjM4NTkzZDk4ZGZiMzY4YzEifQ" - }, - { - "resource": "repo://com.akinokaede.termind/src/components/SecurityPage.astro#L1-L25", - "version": "repo-lines-v1:sha256:11cb683df30d409fa81d4c215d5b30b241f0820cf5836961baf723fdfa58c35d:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1MmQ3MTExMDNkNTBhNDM3ODMwYzZmYmNkMDRmYjRiYWI0OWEwZjgyZjZkMjZkMWM3OTFjNmU4NDg4ZGQwOTAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE1YzIzMTcyMjYxNjYzYTczZmE4MmJkZjg1MDljOGExNTFmMDE1ODkwMWJmNGY1NzY5OWFiNzNkOTg3ZDUxOWQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjMyMGVmNmViNDJmZjZiYjdhNTE5OWMxNzg2YTA4Yjc3YzA2Njc0ZDQzMTkwN2QzNTU4YjE5NDk0M2YwMWNkZDIifQ" - }, - { - "resource": "repo://com.akinokaede.termind/src/layouts/BaseLayout.astro", - "version": "repo-file-v1:sha256:df2a99ddca09bde7895ff721f3da265364d2eac612ec50567a73a919e0e01a7b" - } - ] - }, - { - "id": "claim_f69e52008c8243f0934c6832a1311bf9", - "statement": "The public privacy policy discloses local/iCloud/Keychain data, Apple purchases and RevenueCat validation/paywalls/anonymous associations, optional network/AI/diagnostics and deletion controls, plus website-local language preference and possible hosting logs; it is public disclosure rather than independent runtime proof.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/components/PrivacyPolicy.astro#L192-L225", - "version": "repo-lines-v1:sha256:547fbaa1197fab731fd9fe55670ce3d091a7446374b2fe3c61da66b075deddbb:eyJzZWxlY3RlZExpbmVDb3VudCI6MzQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImUxODU2NmVjMTkzNjZlNGY4MGFhMTMxMTBiYTY1YjFmMzExYjM2ODY2Y2UyYzk2MTJkZDU0NDhjYWI3NWNmYTIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkxZGNlN2U0ODMyZmE3M2FmY2FmNGRmODBlM2YxMzYyMWExYzUxMTg0MTk4NjcyYmI2YTU0N2RiZTg4YTg0M2IiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImE1YmE2Y2U1MzU0ZTczOWI4NTA1ZmY2ZDA2YjlhOThjMGYxMzVjODQ0MTM1M2I1MmI5NGRkZmIwMDI1Nzk4MWMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhjMTE1NTEyMjc5YzUyMzdjYTU1NzhjNjkzOTU4MDI3MmZkOTI2MjMxYWI0NDBiM2VjMGI3NWY1MWFmNjg3NTgifQ" - }, - { - "resource": "repo://com.akinokaede.termind/src/components/PrivacyPolicy.astro#L42-L110", - "version": "repo-lines-v1:sha256:fb28427e9c68a58ef201bca27b508e773c3eb3df64b327068f08339ae65de2c3:eyJzZWxlY3RlZExpbmVDb3VudCI6NjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE2ZWMzMTAxY2U5ZTk3M2QzNDRjYzZkMzgxZGNhZGRiNDFhYWZmNzRiMDBkMGQ3MGEzMmZmZWU4ZGZiZGIzMTIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlYjFmOWQxN2IyZTUxZDkyNjRmYjQ1NzY3YWRlYjRlZjc5ZWFkZTIyZTQ0ZGUzZDY5MjE4MTdkNzU0MWYzOTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNhYjg1MGQxMjc3M2Y2ZDkzMDczZTFmYjdkOGMzZjBhYjQ0OGI1ZmQ4YTZlM2ZjOTJmYzYxOTU3ZDYzN2IwMjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImIxZTVjZmY3MzM2MmQ3OGE4MjAyZWEwYmE1OTU3NjE5OWU1YjcxZTU0ZmYyNjY2NWE0NTQ3MzA0NzMyNDQwNWMifQ" - } - ] - }, - { - "id": "claim_fe27d63a736d4a9e83a24d494f99b6e9", - "statement": "Public security copy describes Keychain and one-shot secret cleanup, Known Hosts, configurable Assistant permissions and opt-in Mac loopback MCP with a local bearer token/tool controls. It warns authenticated MCP calls need not each prompt; compare disclosures with runtime rather than treating copy as a security proof.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/components/SecurityPage.astro#L179-L236", - "version": "repo-lines-v1:sha256:0743b1a927f8bd9629993023a02bd3c204d932f02bdd56c888ebc2927a55a1c8:eyJzZWxlY3RlZExpbmVDb3VudCI6NTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjllNTkxNmQzNGZmOGIyNjExZjQ1NGE5OTc4NmNmZGNhZTg1YTE1NTdmYzU2N2Q1OWJlYmUzYTZhZTk5YjgwN2MiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJjZjRiZDhhYjVmNmViN2RlZWQwNWUxYjllMzlmZmM2M2JmYmNhOGJjMDQ3YTI4YWEzZWEzMWY5Mjc4M2Y2ODciLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijg1ZTlhMDkyMWE2YTQyZWYyNmVlYzJiNjg3Mzk3YzgwMTI1MzU0MjI4ZjU2OWNlOGRlODAxZTQxOThjYzNjMjQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhhZmNiYTcwZmY4NmQ5OTZmNzkxZjk3NTdmMjU3NWMwYThjYjQyM2UxM2Y0YzA2YzA5ZGRjY2NmMjVmMDVlYWYifQ" - }, - { - "resource": "repo://com.akinokaede.termind/src/components/SecurityPage.astro#L57-L113", - "version": "repo-lines-v1:sha256:e90036745d48ec59e79d3c5b52e5a1ae9a1cd42bb382cbe59ac4e37371ac458d:eyJzZWxlY3RlZExpbmVDb3VudCI6NTcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE2NDk4MjRmMTFjYzI4ODE2OWNkNjNhYjE4NmUzY2M2MzU5Y2JlZjAyMDYxMTM0ZTViNjk1Zjg1ODYzMzJkZWYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImUwNTYzMDRiMGVlYWJkODhhZDRjYmRkNjBiZGY0NjY1MWFkODU3YWQxZTAxMDRlNDJhYmZmNmIwNDNhZThlYTAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjQwNmZkNjVkZTBiMDI1ZTU5MWFhNTM2YmU1MWY2ODg5MzQ2OWUzZThmMGIxN2NlNjI2N2E5NGM1ZjllM2I0ZGQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg3NGQyY2ViZjFmYzZkMzYxMGY3MWRkNDlhOGY3YjAxMzE2Y2Y2MjE0MzFlYTYwMDU2NjA0NGRhMDY3YmI5YmIifQ" - } - ] - }, - { - "id": "claim_fd496eced2b3448bab7ef2f1d48b316b", - "statement": "The homepage TelegramOffer is a Thursday draw for a chance at a Pro redemption code, with channel/group/bot links and explicit no-guaranteed-win and Apple eligibility/validity conditions; it is not a StoreKit plan or guaranteed trial.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/components/TelegramOffer.astro#L1-L53", - "version": "repo-lines-v1:sha256:c6c043c9f2aa3b373b1c3aa8db0586560e693c55f5c52f06322fdae69f16e01a:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1MmQ3MTExMDNkNTBhNDM3ODMwYzZmYmNkMDRmYjRiYWI0OWEwZjgyZjZkMjZkMWM3OTFjNmU4NDg4ZGQwOTAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjJmNzdiOGFhYzE3MDFjMjA5ZjRhNzc0MjRkM2Y1NmY2YTI2OTQ3MWJkNGU2OGZiMzRjYzc5YjE1NDQzYzMyNGMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjNjYmEwMjU4MTI2NzU2M2YwYWI5MDQwY2E4NWE5ZTAyNzgyZTM0ZGMyZmM2YzE3MWNiZmNkM2VmZDFmYWM5YzQifQ" - }, - { - "resource": "repo://com.akinokaede.termind/src/pages/index.astro#L212-L220", - "version": "repo-lines-v1:sha256:e75569c870d319c423e44eaf3f65b5d6812873c2db4fcc7fd42515e80f513b2d:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOGZhNzRjMWM3YWZiNTExMzBjNTczN2Y4YWJkZjFhN2JhMGI5MTZiMWRiMjg0ZDBmOTdiYzAyY2E1ZGI0ZWY0NyIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZTA1NjMwNGIwZWVhYmQ4OGFkNGNiZGQ2MGJkZjQ2NjUxYWQ4NTdhZDFlMDEwNGU0MmFiZmY2YjA0M2FlOGVhMCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNmZjMTU5YzljNThlYTIzYzM2MjE2MDBjMmZjMTNjMzVmM2U4Zjc5MGFiY2U1NzI2YjJhODMyMjYyN2VkNGUyOCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMjZiODk4NWM5MTU5MDJmNTI0MDQzNWZlMWI5N2Q3NTZjNDFiZWRkMjdjNjU3ZWQxYzgxOThlYmI3ZTZhYWRiNiJ9" - } - ] - }, { "id": "claim_3f6fb76e32cf4b439dfbf4e3eef2461b", "statement": "RevenueCatProPurchaseService uses anonymous app user IDs rather than a device or iCloud account ID, configures StoreKit 2 with informational entitlement verification and disabled automatic device identifier collection, and supplies the stored language as preferred RevenueCat UI locale.", @@ -730,20 +638,6 @@ } ] }, - { - "id": "claim_a1fec8fea6384874a33e571818f80df9", - "statement": "Homepage and FAQ now frame Termind as an AI-driven remote workspace with BYOK, chosen permissions, embedded Tailscale and optional device-local Hermes Memory; third-party API costs and retrieved-memory data sharing remain separate from Pro pricing and local storage.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/components/FAQPage.astro#L51-L103", - "version": "repo-lines-v1:sha256:5d7c158b0aead7cd556e5e6db4c0fc7483c6f7fd91040f79dd16f6631fab6197:eyJzZWxlY3RlZExpbmVDb3VudCI6NTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImNmZGZjNzc5MzA3N2VlZjcxYWI2ZTEzZDRhNGJkYzZiYmYxZDI2NTZiZDI1NTY1ZTI3N2YzNzBjMmU4MzYwNWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjcwM2U5MTVhNmQ5NzFmNWEyNzA3ZGY5N2VjNTQ0ZmJlMjJiYzAzNTcxMWExODI3ZWY3MjE5NWM5NWZiYzNhNDIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjU0MjA1NjgyYzViMDg1ODk2NmVlMGM0MmU0NDU4NTBkMTgzZTA3N2EwMjI5N2E5MGZmMGFmNTUzODRmZTE1N2IiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImFjMjVjNzEzZGM5NTJkZTE3ZmI5ZDk3ZTlhNjE4MGE5MWI3OTM1ODE4ZDI1MDJjNGVhYTJkYTcwNjM5NmRjMWQifQ" - }, - { - "resource": "repo://com.akinokaede.termind/src/pages/index.astro#L12-L36", - "version": "repo-lines-v1:sha256:62b1ed98b322567601f26f9bb963976a7f6b4d0143906407d621ac8267febb54:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc0MTQ2NGYwNTc2MGVjMzcyZGM0NmE0ODZmZDVhYmVkOTgzMTUxNGQ0YWU4NmIxYjJiMzQ2MjRlNjVjYzc1YTUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4M2I3OWQ2MGQyNTFkMTZmMDcxZDVkMjJhNDZhNzc0YTRmYzM1NGRjMTMwYzdjMjFhZGZjYzQwMDU4NDgwOTgiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjJlNTQxMTZkZTNjNGMyYTllYjhjYzQyN2MxOTIyMWZiMzM4NTI0NzFjMjIwY2ZhMjc4Mzg1ZWMzMWU5YTc1YTgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ0NzUyZTNjMGY3NWYwZjlmNjVlOGJkMTYwNDQyOWI2ZjUyZmMxOTJjMTI5ZTJhMDg1NDE2N2FkNDhjM2Q5OTgifQ" - } - ] - }, { "id": "claim_11df68d8a0f3451d916866174b64eb64", "statement": "AppLanguage supports Japanese with a canonical ja preference; AppLocalization maps ja, ja-JP and ja_JP to the app-bundle Japanese catalog, with tests for resource resolution, reordered interpolation and other-only plurals.", @@ -760,7 +654,7 @@ } ], "verification": { - "by": "openwiki/0.7.1", - "at": "2026-10-08T13:28:49.393Z" + "by": "openwiki/0.7.0", + "at": "2026-10-09T00:05:26.272Z" } } diff --git a/openwiki/.claims/operations/build-test-and-release.json b/openwiki/.claims/operations/build-test-and-release.json index 7c1ab34c..82e07506 100644 --- a/openwiki/.claims/operations/build-test-and-release.json +++ b/openwiki/.claims/operations/build-test-and-release.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:6b5cc5c4f0ab2658bcd0f5a5afd8a821945aa1660956f2121b608efc7d245f75", + "pageVersion": "sha256:70bd137630ed40d98fd9a13e4fd39b1db016e8aa7e131c550d7d8521a25bf340", "claims": [ { "id": "claim_d34d7b16495a44a4a946d3dc9e0456f4", @@ -96,15 +96,15 @@ }, { "id": "claim_9001476115de4dc3a10921fa323b9f08", - "statement": "The public com.akinokaede.termind root project uses locked npm ci and npm run build, which runs astro check then astro build and emits dist/ independently of native builds.", + "statement": "AGENTS.md documents the independent public Astro submodule's locked npm ci, npm run dev and npm run build entrypoints, describing the build as type-checking and emitting com.akinokaede.termind/dist/; website/asset work requires initialization, while native builds do not require the submodule. Its unavailable manifest must be inspected after initialization before relying on runtime requirements or exact script implementation.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" + "resource": "repo://AGENTS.md#L14-L21", + "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" }, { - "resource": "repo://com.akinokaede.termind/package.json", - "version": "repo-file-v1:sha256:72831c4186784ecf365ee64baec06d0b7f41d3075a2d0630a6e77ba876b102ad" + "resource": "repo://AGENTS.md#L59-L60", + "version": "repo-lines-v1:sha256:d504b70e9953b1673814e4a03529f8f9eaa4802dc7b5f6a97452cca5f1da8b38:eyJzZWxlY3RlZExpbmVDb3VudCI6MiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYTg0OGEwZDI3OGNhZGI2NDA1NzY1ZDYxYTY1OTljOTUzODZmZGQ3OWRiMGUyOGM5ZDY2N2MwNDdjNWIwNTJhYyIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOWZhOTJmZDQyNWYwN2ViMmIyMWVmN2FjZWM2YmNkZWNkYTZmNzk0MWM1OTI5M2U4YzYyMmRiMjhjOGU4YWY2ZCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNTk2MWFhYjc5NWU4NjA0MDU0ZWJmMjdlNTVkZmM0NWU2NzljMzMyNTBmYzdjYzRhZDQwMGMwNzk2ZWY5YTEzNCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNTMwM2VlYzhlNjU1MjZiMzI1MWUyNDRmNjljMGIwOTMwY2ZmNTFiZDhiODRkMzZhMzk1NzJlZDg3YjIyOWZkOSJ9" } ] }, @@ -404,19 +404,15 @@ }, { "id": "claim_69843718608d4e2c81ad7d770de060cf", - "statement": "The public website imports a typed allowlist from assets/device_frames and optimizes it through Astro rather than copying captures into public/. Web changes require the separate production build and visual review of English, Japanese and both Chinese routes.", + "statement": "AGENTS.md requires web changes to pass npm run build and visual review of English and /zh/ routes. The parent guidance does not establish an image pipeline, output formats or complete locale-route inventory; those verification details require inspecting the initialized independent website's own guidance and sources.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" + "resource": "repo://AGENTS.md#L14-L21", + "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" }, { - "resource": "repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro", - "version": "repo-file-v1:sha256:b681fc11c50f4bd3eadc1f0353c4e82f2c3045624b95273efed055d1ae414bfa" - }, - { - "resource": "repo://com.akinokaede.termind/src/lib/marketingImages.ts", - "version": "repo-file-v1:sha256:a2ea1343388f3c01d27bddd01bd4466b30f659d21379cc801eb43e9efb673910" + "resource": "repo://AGENTS.md#L66-L68", + "version": "repo-lines-v1:sha256:6997a1a7c8b75f5e00768cec37c6a6baf7027c2733ed3a9a1a5cb3e483809e4d:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOTdmYzk4NmVmMDFlZTVmNThjNmYxZmEyNjViOGE2NDEzMTE2OGY4YWE1OTkzZDc4ODZkOTZjNmUxODk4OTQzMiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiM2VkMDNiODMzODVkNTYyYTZmN2VhN2FjNzljMDRjOTAyYjliNDc1YmU2ZGRmMGJmZWU4NmJmNGY1MWYxMTAyOSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZDFkYTg3Nzk4Y2M5NTc1N2I3NzQ0NThlYzQ5Yjg0MWRjYWMzODA1MWQ5MjljZGI5ODE5MGJiMTdiMjdkZmQ4OCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNjBlZjRjY2FhNGI0NTRlNjA4YTJkMmI1YzIyOTk4OThlMjQ1MGE5OTJlMWI3MmI4M2EzMGI3ZjFlMWJhMjE5MCJ9" } ] }, @@ -608,7 +604,7 @@ } ], "verification": { - "by": "openwiki/0.7.1", - "at": "2026-10-08T13:46:25.102Z" + "by": "openwiki/0.7.0", + "at": "2026-10-09T00:05:26.272Z" } } diff --git a/openwiki/.claims/operations/marketing-assets-and-app-icons.json b/openwiki/.claims/operations/marketing-assets-and-app-icons.json index 0e17ed2b..0cab2b07 100644 --- a/openwiki/.claims/operations/marketing-assets-and-app-icons.json +++ b/openwiki/.claims/operations/marketing-assets-and-app-icons.json @@ -1,22 +1,22 @@ { "schemaVersion": 1, - "pageVersion": "sha256:329b3ced13a1f4b9b09f78a419f73757fede1f40be50fa7c0d91377332d2bbc2", + "pageVersion": "sha256:248e7f369c99e774ab2d5d0b4f59cb5e2b5f1f1a2d70e415f762d7d5bd07a871", "claims": [ { "id": "claim_bf6e7f1d333040099a25edc9d0d96b84", - "statement": "Captures, frames and final artwork are separate stages in com.akinokaede.termind/assets. Astro imports a typed frame allowlist instead of copies in public/; ScreenshotPicture generates resized AVIF, WebP and JPEG renditions from image metadata.", + "statement": "Capture and frame production are parent-owned stages, while external composition and site consumption require separate inspection. Ruby regression tests use temporary repositories, mocked scan/system commands and synthetic images to verify orchestration and pixel/byte safety, not actual external artwork or website rendering.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/assets/README.md", - "version": "repo-file-v1:sha256:de2ae13c89af67e8029b26b9d2dd77853ab50d62f58d39447f04d222fdbbd745" + "resource": "repo://Scripts/Tests/test_screenshots.rb", + "version": "repo-file-v1:sha256:c7e05ca3248b1a0366d3b2436cb87f623cd4399ee2922f31443ada9eef67af1f" }, { - "resource": "repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro#L1-L37", - "version": "repo-lines-v1:sha256:b681fc11c50f4bd3eadc1f0353c4e82f2c3045624b95273efed055d1ae414bfa:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY1MmQ3MTExMDNkNTBhNDM3ODMwYzZmYmNkMDRmYjRiYWI0OWEwZjgyZjZkMjZkMWM3OTFjNmU4NDg4ZGQwOTAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJkOTljMmQ1OTE0ZGEwNmI5ZDU4NmUzN2ZkNjJjMTk5Njk4ODEwOTFiYmY5Yjc3Mjk3NmI1YTc0ZDY4ZDM4MzAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjowLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUifQ" + "resource": "repo://TFITests/Screenshots/MobileScreenshotTests.swift#L261-L287", + "version": "repo-lines-v1:sha256:14ed1e3b0dff4f4f8b7a882d4096a2e65ff4d575ded1a9c6f02772798efb9a3f:eyJzZWxlY3RlZExpbmVDb3VudCI6MjcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhYTg4ODg3OTdhY2ZkN2EzZmFjYjUyNjMzMTBkMWE2NTE5Zjc4MjQyYTZjZTRlNDVkMDVkNzY0OTZmZjA4MGEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjVlN2JjZDM2ZWY1M2I0NDUyM2U2NWU5OGQxOTQ0OTkzZTBmZjE3NDZmNTUzNmMxYTUxMTc0NmYzZTAxZTc1NmYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImQ3NThiNjExNDMzMGE4MjBhOGQzMTZkODk3YjFjYjk2ZGUyZmZjNmRlMWFlMmY3MDQ2YmZiZmVkOTUzZmI5OGUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImQxY2RjMjZlZWZlZTYwZDAyMzBhMGJlMmQ2YjdlMGY1NmIxMzYyY2RkODdkMWNkZjUxZjAwY2I2ZTg3YjI0NjcifQ" }, { - "resource": "repo://com.akinokaede.termind/src/lib/marketingImages.ts", - "version": "repo-file-v1:sha256:a2ea1343388f3c01d27bddd01bd4466b30f659d21379cc801eb43e9efb673910" + "resource": "repo://TFMTests/Screenshots/MacScreenshotTests.swift#L112-L137", + "version": "repo-lines-v1:sha256:bd12f9789e7670c2b2b1aa4448809bb9f8a132ecb0a5af513f2fc562384a61b0:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjY5NmRiMjAwYjNlMDI1Y2M4N2E5YjdhZDc0NzkyMzFhMTQ5MjA2NzU0YWIxZTRjZmQxMzMwNjU5NTllMjAyN2QiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImExMjdkYWVjZjNlZjA0NDEzZTViZTkwODQxYzQ5YTQ1NzA1MzliYTQwMTJiMWJlMjY0NzdiNzExZDFhZDkwYjUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImVhNzJiOTA2MTRmNjk1M2NiMjYxOTQ3Zjg2M2MxNjNhYWFjNTkzODJhYjg4NjkxMmQ2NTc2ZjIxODNkNTdlNjYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdlMjAyMDc0MmMzM2IxYjkxZWIyMjYxNmJmYTg4NWMxNjQ2NThlM2Y5YzAzZDNkODZhYzllMjgwMGRkYmNhMzcifQ" } ] }, @@ -56,32 +56,6 @@ } ] }, - { - "id": "claim_613057b4cfd146daad146fed13e1fe84", - "statement": "Current final App Store artwork has four locales and six boards per mac, iphone-6.3, ipad-13 and iphone-duo set, at 2880x1800, 1206x2622, 2752x2064 and 2853x2007 respectively; these canvases differ from raw capture and frame sizes.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/assets/README.md", - "version": "repo-file-v1:sha256:de2ae13c89af67e8029b26b9d2dd77853ab50d62f58d39447f04d222fdbbd745" - }, - { - "resource": "repo://com.akinokaede.termind/assets/screenshots/en/ipad-13/06_vault.jpg", - "version": "repo-file-v1:sha256:ebd6a1867a022cdd67c526375cf45f706a32e3698c1c286f54135f4a24f6010f" - }, - { - "resource": "repo://com.akinokaede.termind/assets/screenshots/en/iphone-6.3/06_vault.jpg", - "version": "repo-file-v1:sha256:043cd2282771467f1c7da9efe2c44e4f9985ae1429a83db33b6e3ab3ecbad833" - }, - { - "resource": "repo://com.akinokaede.termind/assets/screenshots/en/iphone-duo/06_vault.jpg", - "version": "repo-file-v1:sha256:c61fdfc252264ec902965f01b43a5b956afeb042fb1f815fb6cd859568db0186" - }, - { - "resource": "repo://com.akinokaede.termind/assets/screenshots/en/mac/01_three_screens.jpg", - "version": "repo-file-v1:sha256:63b602625855439b16738d629bb03611fa2163c0e2dcf43e098edf87c0630dbe" - } - ] - }, { "id": "claim_c1603ca199b145848e87fc187eeff350", "statement": "Both platform app icons are layered Icon Composer sources containing Terminal, FrontWindow, MiddleWindow, and BackWindow SVG groups with disabled glass/specular/translucency; the three window layers have a 0.08 neutral shadow while Terminal has none.", @@ -336,7 +310,7 @@ }, { "id": "claim_9293612e13cc4646935f7da13fff48f1", - "statement": "The website app_icon.png is a separate exported rendition; TFM/Resources/AppIcon.icon and TFI/Resources/AppIcon.icon remain app-owned Icon Composer sources independent of the public asset submodule.", + "statement": "TFM/Resources/AppIcon.icon and TFI/Resources/AppIcon.icon are app-owned layered icon sources independent of the public website/assets submodule; parent sources do not establish the contents or existence of public/app_icon.png.", "evidence": [ { "resource": "repo://AGENTS.md#L14-L21", @@ -349,10 +323,6 @@ { "resource": "repo://TFM/Resources/AppIcon.icon/icon.json", "version": "repo-file-v1:sha256:d4571a483f85110373beda908f514f0d97f6020d0241ff036afe2a24999c72e0" - }, - { - "resource": "repo://com.akinokaede.termind/public/app_icon.png", - "version": "repo-file-v1:sha256:9a497f3f2d4c88232aeba11994dec014787007bd0c9437b130ffbe7acbd18cb0" } ] }, @@ -376,19 +346,15 @@ }, { "id": "claim_d885222f978e4f3d9c8888998d794bd0", - "statement": "Capture tooling and native app icons remain application-owned, while the public website and assets are an independent HTTPS-cloned submodule; reviewed asset changes must be committed/pushed via SSH before updating the application gitlink. Native builds do not require that submodule.", + "statement": "The parent repository assigns website and marketing/brand assets to an independent HTTPS-cloned submodule and keeps screenshot tooling application-owned. Native builds do not require it; asset changes must be pushed via SSH before updating the parent gitlink.", "evidence": [ { - "resource": "repo://.gitmodules", - "version": "repo-file-v1:sha256:4ee3a7b7921786868dacd9587878cad13360d76d1dfe97c44cbf55b8ed8c06e9" + "resource": "repo://.gitmodules#L12-L14", + "version": "repo-lines-v1:sha256:c7d6ce76620da3eafc5c9b3ec573712bd83321c656fdee9b33e1623600ee21cc:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZDVlZTM0ZTU3NWVjNjRhODEzMjliZTk1ZWEwZDk3MTFhMTg0MDQ1MTRiNjkyMjhmNDMzODlhOGQ4ZjJjMWUxOCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOGM4NDY1YjI4NDNjZjc3ZTlmMTE5M2IzOTc0OGMyNjZkYmM5NjJhZGY0ZTlhYjVhMTAxYzcxYTdkYzlhNDlmMCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNGU4MjMyOGU4YjdlOThiZGQwMDBjZGNlMTEwNDA0YTEyYzI5MDE2YjY4NWIyZWYzOWJkYjk2OGM0YWE5YzA4NiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjAsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSJ9" }, { "resource": "repo://AGENTS.md#L14-L21", "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" - }, - { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" } ] }, @@ -420,15 +386,19 @@ }, { "id": "claim_25496ade6c9d4e658a1cd92f49ad2f44", - "statement": "The capture matrix uses exact iPhone 18 Pro portrait 1206x2622, iPad M5 landscape 2752x2064, Duo outer portrait 1398x2034 and inner landscape 2853x2007. Duo-only batches default to iOS 27.1; other batches default to 27.0. Duo capture checks active native display/posture and never substitutes a resized Pro Max.", + "statement": "The capture matrix requires iPhone 18 Pro portrait 1206x2622, iPad M5 landscape 2752x2064, Duo outer portrait 1398x2034 and inner landscape 2853x2007. Duo-only batches default to iOS 27.1 and other batches to 27.0. Exact device model, active Duo display and raw pixels are checked without substitute-device resizing.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/assets/README.md", - "version": "repo-file-v1:sha256:de2ae13c89af67e8029b26b9d2dd77853ab50d62f58d39447f04d222fdbbd745" + "resource": "repo://fastlane/lib/screenshots.rb#L236-L251", + "version": "repo-lines-v1:sha256:1394fc606a8c53de1d6430c16e0d7b43a23b77718d25e0fe4bf0961e54a56a12:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImFkZWVhZGU4MjBlZDcyZjA2OWE1MTdiZTg0MWUyNmI3Mzc5OWMyNWYwZjY3NjYzZmU1ZDk3OGIyZmI3YTcyMDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3OTgxMWM1ZmJlMjVjM2Q0ZTVmM2QxZmQzNWFiOWRhNmJjZjhhNjhjNWVkZjlkNmJhOTdmNjg2ODZjMzk2ODAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgxMDk0NjFlMjQxODgyOGI4NjU2YzY3NjhkODA3NmZiODcxNGNhYTEwZTljZWYzM2IyMzQ1OTBlM2MzY2I3MmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJmNjIyMzI4YjUwYTIzNDhiNDAzMWEzNDY1ZWY2YWRlMDJiZWQ0OThhYWI0ZGE0ZDIyMDEzNjYwYWYzNmE1NmUifQ" }, { - "resource": "repo://fastlane/lib/screenshots.rb", - "version": "repo-file-v1:sha256:e9af6d48cf4753657d0f287ed84c47b829a1641c513c94d212988fce28a8328f" + "resource": "repo://fastlane/lib/screenshots.rb#L253-L334", + "version": "repo-lines-v1:sha256:0ca3ad5211c236380b514f61abe9f359ff0d712d6ffd7a34cfdc1abc11cb8cb0:eyJzZWxlY3RlZExpbmVDb3VudCI6ODIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhNWFmZTllZTU3MGRlMDIyNjkxZGU1MmRiMGU5ZjQ5N2E2YTJhM2EzZDEzODJjYTVjY2ZmZjE2YzIyZDIwMjYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3OTgxMWM1ZmJlMjVjM2Q0ZTVmM2QxZmQzNWFiOWRhNmJjZjhhNjhjNWVkZjlkNmJhOTdmNjg2ODZjMzk2ODAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRhNDYxY2U0YzIwZmFhNGNlZjdmNGU5NjJkMmI3NzFlOTkxMzJkYjNiNjY2MzI1OWEwMjQwYjYwYTBhYTkzZWYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImYzNTBkMTViMzQwODUzYzMzZTAyOTZiNGE4MGMwY2Q1NGYyNzZmNmYyYjE3ZTg0NGZlZGE3YjllZTQ5ZWQyYjMifQ" + }, + { + "resource": "repo://fastlane/lib/screenshots.rb#L35-L64", + "version": "repo-lines-v1:sha256:c68e5852997278364fc586ddeb92ca98a0e5cd17747c726e4f914e28380f1ce1:eyJzZWxlY3RlZExpbmVDb3VudCI6MzAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImUzZTNjZWFkMjgzNWZjODliZjc2N2FhYjc4MzA0YmI1NDgxODliNThmMDM4MmI5YWVjNDk0ZjcwMWM0OTk3NTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc1OGQ1NTkxYjg1Mjc5MjkxZjQ5NzNmYTJjMjM2ZDhkOTNmMTMwMWUyOGE1N2M5MDQ2ZDc4ZjFlZTZhYzU1NzUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImIzNmE4ZWVhMzkzZmY5OTA5MDM1YTg4ZjUwMjI1OGRkYWZkZGVmYTNlMWQ4ZWQ0NWJhM2RhY2YxZjk5NmY2NDYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImFkODZhNGVhMjdhZGZjNDY5MmY4MjcyODliZTkwYTEwNmEzMzUxYTViYjk1ZGUxZmM4OGZkMDYzYmUwZmMwZTUifQ" } ] }, @@ -466,15 +436,11 @@ }, { "id": "claim_bd1ebe93205343078d549e7890e1344d", - "statement": "Default frame selection is iPhone Assistant/SSH/Vault, iPad Metrics/SFTP/Vault and Mac Workspace in four locales, totaling 28 jobs. Duo is opt-in even though the website now uses outer Assistant and inner SFTP imagery.", + "statement": "Default framing selects iPhone Assistant/SSH/Vault, iPad Metrics/SFTP/Vault and Mac Workspace in four locales, totaling 28 jobs. Duo is opt-in and each selected Duo display defaults to all five mobile scenes; this policy does not verify current website consumption.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/src/lib/marketingImages.ts", - "version": "repo-file-v1:sha256:a2ea1343388f3c01d27bddd01bd4466b30f659d21379cc801eb43e9efb673910" - }, - { - "resource": "repo://fastlane/lib/screenshot_frames.rb", - "version": "repo-file-v1:sha256:823bedbf007491d60f956b1bb0adb7d2d3b04cfc319f1c49ede69326dc533b61" + "resource": "repo://fastlane/lib/screenshot_frames.rb#L15-L42", + "version": "repo-lines-v1:sha256:e34f7b11dea1a01c9ca6118c63cb50403d6f90236ce4f7b50d1853fbcd065af9:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJkYmIwMTVjOTZkZGQyNjM2NWJjYjgyYjA2YTgzNmZmNWVhZjgzOGIyNzlhNWJmNmMzMmFjY2JmMWY3MDViZmUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ1N2RkZDE4NDQ3NjczZDBhN2YzNjlkNmY5NmI2NjZjNGY3M2M4OGQ2NGY5ZGJlM2NhMjI4MzVjY2Y4ZmY3NTAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk2YjE3MjRjNTRmZmI2MDI0OWU3NWZiMGY4MjVmZWJlOWMzNDhmZmY5NzI2ZjAyZjRkNjM0ZTU4NDZhYjJjNDciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRhNDYxY2U0YzIwZmFhNGNlZjdmNGU5NjJkMmI3NzFlOTkxMzJkYjNiNjY2MzI1OWEwMjQwYjYwYTBhYTkzZWYifQ" } ] }, @@ -514,30 +480,6 @@ } ] }, - { - "id": "claim_73f22fbff6c2428a9aed826c5a5e23c5", - "statement": "iPhone Overview uses two bottom-aligned devices: fully visible Assistant in the right foreground and a cropped/enlarged Mac behind, with no iPad. Its export is now 01_overview.jpg while other platforms retain 01_three_screens.jpg. Mac/iPad Overview retain three devices; Duo Overview combines Mac Workspace, inner SFTP and outer Vault, with inner SSH/SFTP/Assistant and outer Metrics/Vault feature boards.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/assets/README.md", - "version": "repo-file-v1:sha256:de2ae13c89af67e8029b26b9d2dd77853ab50d62f58d39447f04d222fdbbd745" - }, - { - "resource": "repo://com.akinokaede.termind/assets/screenshots/en/iphone-6.3/01_overview.jpg", - "version": "repo-file-v1:sha256:1b9d8166815723e333c1087432706ea1a3ac29f0d46de28d601530eb7cb77275" - } - ] - }, - { - "id": "claim_9c7a8f6dfa2045c2afeeeb8e857acf77", - "statement": "The website Hero is Mac Workspace plus Duo outer Assistant and an iPhone SSH alternative. Current product messaging leads with AI-driven remote work, BYOK and controlled permissions, includes built-in Tailscale and optional device-local memory, and preserves a separate Mac-only MCP section; SSH/SFTP/Metrics/Assistant imagery now use different selected form factors.", - "evidence": [ - { - "resource": "repo://com.akinokaede.termind/src/pages/index.astro", - "version": "repo-file-v1:sha256:04d5b1dbd782c7e710d77f9537463e23bfc040bc5edd6679e1f981973338fcb2" - } - ] - }, { "id": "claim_14f352453bf84747baba6c65fb7ef647", "statement": "SSH screenshots mount the production workspace shell with in-memory connection services and active scene phase, and require terminal focus plus native software keyboard/accessory. A scoped English ASCII keyboard override is restored afterward while app chrome is localized independently.", @@ -568,11 +510,11 @@ }, { "id": "claim_24cc94c2d8234449bd9a21290573be14", - "statement": "The asset submodule versions five prepared device templates with source notes and checksums; framing defaults to these paths while supporting explicit overrides.", + "statement": "Framing expects five default template paths under com.akinokaede.termind/assets/device_templates and supports explicit overrides. Selected template and capture dimensions are validated before rendering; these contracts do not establish external template presence, provenance or checksums.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/assets/device_templates/README.md", - "version": "repo-file-v1:sha256:0e1cf7eb2baceb899acbc4949f3397153543b8fc6b8e68860c2e402eb6bce94d" + "resource": "repo://fastlane/lib/screenshot_frames.rb#L50-L89", + "version": "repo-lines-v1:sha256:154d9941d782514efc11a3ba0bc5bda242235119d284ac0780b6017b2b00c737:eyJzZWxlY3RlZExpbmVDb3VudCI6NDAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRlNzQ1N2UwYzQwNjkyMWY1MGY2ZWRhMGE4ZWU2ZWRkZDFiZTk4Nzg1ODBlYWFjNjUyYTkwMjNjOWJmZTFmYTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRhOWFlMTczNTM3NDE4MzE4MThlMmZjZjcyOTU1OWIwNDk2YzA1MTY0NmJhYzlkMTA4ZTRhNzAwNDBiN2RmZGIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImY0YjAxNTg4MmIwOWI0OGMyNDhlNzliZDY2YmQ4OGJlYWRlYzk3Y2IxMjdhZjZmYzRiN2JkODIyOTg2NWZmMWQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjFlZmQ5NWQ5ZTc3ODdhMDliN2YxZGI5ZDYzY2U2MzAwYjg0MjZkMjA5MjZkM2I4NTkxMGZlNzRkMGUwMzEzM2UifQ" }, { "resource": "repo://fastlane/lib/screenshot_frames.rb#L8-L27", @@ -582,31 +524,29 @@ }, { "id": "claim_0e8e5304cc844eb3a67d2e92a045d192", - "statement": "The workspace-window screenshot scene produces the ordinary 2360x1480 workspace_window.png used by Mac board 02; fullscreen workspace.png remains the source for framed Overview artwork.", + "statement": "workspace-window selects the ordinary windowed Workspace fixture and publishes workspace_window.png, while workspace publishes fullscreen workspace.png accepted by Mac framing. Parent tooling does not establish which final external boards consume those images.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/assets/README.md#L46-L49", - "version": "repo-lines-v1:sha256:296226b39917e1287adda48e694c4f862b44edc22b0ffd63e9f2aeae415a0442:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYmE3ZDhhNWYxMWMzMjYyOWE4YTM0MTQ1YWEyZjJhMTUwMmM1ZTRmNGU4NjgxZGVhZGIxMWQyNzBhNGQxYmQ3MiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiODM4MTJjNDViMjM0YTA0YWZiY2E1NmI2N2Q1ZWQ0NGM5YzRhMWQyMjBhZTRlMjU1OTIzZWE4NGQ0MWQ4OTZmOCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNzk0NjM3OTQ5N2IxNzk0MzMyZjJmZjVkMDI3YzUyNTBlOWU3OWRmNWYxZTkwMjVmZWRkNDEyMDllNTA3YmNkYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiN2I2Nzc1NDRjMDY4MDI5NDdmZTIzODZkY2E0OGUyZTMzYjg3NzE5MjdiYWNhNDJkMjZmYTk2ZTFhNWQzZjhlNyJ9" + "resource": "repo://TFMTests/Screenshots/MacScreenshotTests.swift#L24-L58", + "version": "repo-lines-v1:sha256:16f34d0244ba69ea547ebe86a9ca527e68aa34902ff8e476fe7c6807e0c663af:eyJzZWxlY3RlZExpbmVDb3VudCI6MzUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjZkZTUwYzM0M2ZmOWMzMzM4MmUwMzAxZjhmODgyMTk4MGU5N2VlNzcxNzMwZGZhMGE0N2E0YmNjZDQ5ZDI3MjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU1MjJjNDJjZDE5YzZkMDNkODA4YzQ1MjcyMDU1MjgyNWI3ZWExYzViNDkxYjIxODUxMWNhYzc0MTVjZjlkOWIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjljNWQ1NmVjNDY5NDUwYjY0MTg4MmM3YTJjY2I0YzlmN2EyOWNkNWQwYTlhZGYyMTM4OGJlNmIyOWNiNDA4OGQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg3MTc1ZGM2Y2EyOTIwYzMzNWM4NDU5MTdlMTc2NTI2NjE5ZTliYTRiY2ZjNWZiMzBmYzcwYjU5N2E4ZTE1ZGQifQ" }, { - "resource": "repo://fastlane/lib/screenshots.rb#L25-L34", - "version": "repo-lines-v1:sha256:77148e9d361d41a76bea3873bda60b7a07fa3258e31095e31898c1ed014de9a5:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMxMWNkYzY3YzEwNWE2NjE5ZTQ4NTJmZWY2ZjRiYTI1YTE5ZDUzZGY2Mjk3Mjg5Y2ExZDM4NzRkMWZjNDg3NDciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMDIxNTdlYmFiMTQyMmFjNjAyZDg1Y2I5MWJhZDQ5NjcyYzhmNTkzMGZjZjVkMjg5NTIzMTZlZWNhYzZmZTgiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRlYzkzZDA1OWNkOTY3NjY4NTJkYWU5MzAwNjdjOWQ2YTVkMTUzMjY1NzM3OWNhNDM0OTM3MDE0MTIxZDk5M2IiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdjOWRmOTdmZDRiYWI2YzQxZGVjODM0NzgwZjYwZjJhNDE4ZjFmMTZmNTU3ZTI4YTE5YzBjYTJhMDY3NDYxZGMifQ" - } - ] - }, - { - "id": "claim_2dd27d477c89447d99f308d8828fb2e1", - "statement": "Additional store artwork includes a shared 3840x1646 header and localized 3840x2560 search results as opaque sRGB PNGs; Japanese artwork uses upright Hiragino Sans and two-column right-to-left Mac Command Generator headlines.", - "evidence": [ + "resource": "repo://fastlane/lib/screenshot_frames.rb#L35-L37", + "version": "repo-lines-v1:sha256:2d362f613e77d2f14fc0ce422126e29ef54d61888e45af80ea9babb3e7d470bc:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMDY4ZjczN2FkMDhjNWFmYTlkNzIwOTYzOTRmNzMyN2ZkN2ZkMTEzZGVmY2EwOTRlN2UyZTU1NDcyZDFjNjIwOSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNWNmM2E4MWVmMjQwMWFhZjY4NzUzMDk3ZDExOThiNDgxOWNjNDMzYzJkYWJhNzhmYmE2MjIzYjdhY2NmMzFiZCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNTQ0NWMyMTFjZTg0YWJiNTYxMzA3ODFkYmVlMzk5YTExZGUxZWQ1YWRjNWNhYWZiYTlkMzcyNDhjZTM1YjllNiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNWNlMTZhYTg4MDU4N2VhZjBjNjJiYjkyZGMxYzQwOGIxNDVjYjc5M2ZjNzNkYmU2ZGQ5YjNiYjVhMjEyYWIwZCJ9" + }, { - "resource": "repo://com.akinokaede.termind/assets/README.md#L3-L17", - "version": "repo-lines-v1:sha256:79c272f10109f8d2c7f4e84984073b72596a8725a46a8d6e7112c0ecc2bdc04e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVlMDlhZDE5YzlkNWNhNTY2NGY3OWJhYjczNjNkMmIyMzY3YTA1OGQ2OGY4ODQ3NTYxMTFjZmNmYTNhZjNhMzQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRlNDVjZjIxOGRiMjIwNjQ4N2I1Y2FiNDM2OTgzNjY1NTZhODZlMGZhNWQxYTRkNGE3NjE5ZmMyY2JhOTZlYmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjoyLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjI0MDZmZGZkZWM4MjE1ZTliNjgyMzIyNDk5NTZmYTlkZWViMmU2MWY0ODhkYWYxNTVmOWVmMGU1YjA1ZmM1OTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImE4MDE0NWI4Y2Q1ZTc2NjVlMDY0OTg2NTY0MmZlYWJiOWM1NjQ1NjQ1YzJmNWZmZWM5ZGFhZDczOTM0YTIwMDMifQ" + "resource": "repo://fastlane/lib/screenshot_frames.rb#L86-L89", + "version": "repo-lines-v1:sha256:680ee9a88534b0acb1bf34bd0a0bc5c3d532f1de738fe4a204821c9f9482b08f:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYTA0OWRjYTMwZWNhZjE5YTRjMjg3OGZlYjRmOTBiYmQ1NzA4ODViZGZiMzJmYzQ0ZjQ1NWFiNTdmMDhkMzZlNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNGE5YWUxNzM1Mzc0MTgzMTgxOGUyZmNmNzI5NTU5YjA0OTZjMDUxNjQ2YmFjOWQxMDhlNGE3MDA0MGI3ZGZkYiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZmI5ZmQ1OGUyNWIyMWE3ZmJiZmY1NmNhYTk2Y2U4MTIwZWJlZTllMWZlMzFiYjBhY2NhN2M4ZGI5NWMzMzk0NiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMWVmZDk1ZDllNzc4N2EwOWI3ZjFkYjlkNjNjZTYzMDBiODQyNmQyMDkyNmQzYjg1OTEwZmU3NGQwZTAzMTMzZSJ9" + }, + { + "resource": "repo://fastlane/lib/screenshots.rb#L186-L234", + "version": "repo-lines-v1:sha256:46facdd8f99686e0dd861218513cf9441c08d3330b8ab932397f50fedc521a56:eyJzZWxlY3RlZExpbmVDb3VudCI6NDksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1NmZmYzBjZjI2NmVmYzI2ZWI2OGZlNTMxYjg1MmIwZDBmMTBjZGJjZTAwODZlOGQ4YjFhYjU4N2NjN2QxMzAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc3OTgxMWM1ZmJlMjVjM2Q0ZTVmM2QxZmQzNWFiOWRhNmJjZjhhNjhjNWVkZjlkNmJhOTdmNjg2ODZjMzk2ODAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjllNzA1NzE5MDdhZjNiZGRiNDU4NWYzNThkZThlMTY2YTZlOTFmYmQ2YmEyNGZlNzdkMTA5ODVjM2QwMTUxYjAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZmNjM5MjdjMDU4OTgwZTRmOTA5OWZiMGQ3MzFiMDEzZWJkOWUwMzExYTg4MmZhYWU2M2JlMDQwMDJjZGJiNDAifQ" } ] } ], "verification": { - "by": "openwiki/0.7.1", - "at": "2026-10-08T13:28:49.393Z" + "by": "openwiki/0.7.0", + "at": "2026-10-09T00:05:26.272Z" } } diff --git a/openwiki/.claims/operations/storefront-commerce-release.json b/openwiki/.claims/operations/storefront-commerce-release.json index ebacf315..3c4c6b1b 100644 --- a/openwiki/.claims/operations/storefront-commerce-release.json +++ b/openwiki/.claims/operations/storefront-commerce-release.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:c6aedbc65556d8b8c4c14193d21b23e80c451792b17623eaa1917e1b35b447d6", + "pageVersion": "sha256:d5a99c50d2acfa0cfa618499e38eaae356213ee5fa1bbf6312cfa277e3083175", "claims": [ { "id": "claim_3d431c8c7b804187a1ef5a7d9178c430", @@ -118,19 +118,19 @@ }, { "id": "claim_bfdb3849716843bd941c4d567891acf5", - "statement": "Final storefront imagery lives in the independent asset submodule's four locale screenshots directories, with six opaque RGB/sRGB JPG boards per mac, iphone-6.3, ipad-13 and iphone-duo set (96 total), separate from capture/frame inputs. iPhone Overview is 01_overview.jpg; other platforms retain 01_three_screens.jpg.", + "statement": "Final storefront imagery requires separate release verification in the initialized independent website/assets checkout: inspect its current delivery contract and actual localized files to establish inventory, filenames, canvas sizes, opacity and embedded profiles, then review composition, platform promises, offer claims and intended App Store upload acceptance. Parent screenshot-tool dimensions describe native capture inputs, not verified final board dimensions or upload acceptance; no fixed current board inventory or Overview filenames are established by the available empty checkout.", "evidence": [ { - "resource": "repo://com.akinokaede.termind/assets/README.md", - "version": "repo-file-v1:sha256:de2ae13c89af67e8029b26b9d2dd77853ab50d62f58d39447f04d222fdbbd745" + "resource": "repo://AGENTS.md#L14-L21", + "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" }, { - "resource": "repo://com.akinokaede.termind/assets/screenshots/en/iphone-6.3/01_overview.jpg", - "version": "repo-file-v1:sha256:1b9d8166815723e333c1087432706ea1a3ac29f0d46de28d601530eb7cb77275" + "resource": "repo://fastlane/lib/screenshots.rb#L18-L43", + "version": "repo-lines-v1:sha256:a09bb6e64d69126097c4f6b45683e1d6952c470147ac712e7387684225acd382:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImEzNWEzOTE2MjQ0YTZhYmIwMmM4Y2ZiZTFhMjIwZTUxMjNjZDQ1MDQwZDZjYTZjNjU4YjU3M2MwNmZhODg1MWUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImMzYzYyZmE1OGExYmQ5MzViNzQwZWUwMWZlMzI5ZTc0Y2Q3Mjg3MTFhNDk3Yzk3M2I3MGZkOGQxZDQ2NThlNDQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjAxN2I3NGYwMmY3MDM3YjM1YWNlMDRkNzNmNTQzNzlhMjllNmQ1MzVmODMxMWE2MmMwOWEwMzkyNTdkMDhkM2QiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImY4YjI1YTVlNTI1YTI1NjhiODBmZDA4OTgyNmUzMThiNTQ3Yjg3ODk0NzVlY2MxZDhiNGFlMzFiYzk4NjJiZjYifQ" }, { - "resource": "repo://com.akinokaede.termind/assets/screenshots/en/mac/01_three_screens.jpg", - "version": "repo-file-v1:sha256:63b602625855439b16738d629bb03611fa2163c0e2dcf43e098edf87c0630dbe" + "resource": "repo://fastlane/lib/screenshots.rb#L66-L81", + "version": "repo-lines-v1:sha256:14e4300122b499c9067ad530d97544041f6c6aa93bcd23abb210dc88d24d82ff:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjJmZGQyNzdlN2EwNjQyNWRjNDJlZjJiNzcxOGUxNTAxNDJjM2VmMzdhMTgwOWIxMWVmZTUzNWQ4ZjEwOTQ0YjIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhNmRhZTVlNDdhNjVlNWQ0OGVhNWJhNDY0YWUyMDljZmJjZjdjMDFhM2RhYmNiZmY1NTdhYTNiMjNhNGE5YmEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjhjMmQ3NWYwYTJjNTFlZGU5OGMyNjViZGJjYTNjNmQyYzYwNDFjMjg3OTAwMzRlMDY0YWMyYzliYzAzMmMyNmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjcxYTA4OTI4MDI4YTViOTA0NDJiNTE2Zjc0NmRmZGQ2ZmE3MmZlMjlmYWI0MjM2Y2QxYTVmYTAwNTdjZGI3OGEifQ" } ] }, @@ -332,7 +332,7 @@ } ], "verification": { - "by": "openwiki/0.7.1", - "at": "2026-10-08T13:28:49.393Z" + "by": "openwiki/0.7.0", + "at": "2026-10-09T00:05:26.272Z" } } diff --git a/openwiki/.claims/quickstart.json b/openwiki/.claims/quickstart.json index d712d82b..69e41d50 100644 --- a/openwiki/.claims/quickstart.json +++ b/openwiki/.claims/quickstart.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "pageVersion": "sha256:ae14a26a1a06b7b6799fc95b20fb0af2d25fb0a99599398d84d474c0af2d9366", + "pageVersion": "sha256:e8204b43a111f591306e3848cd2cc998d1530faad8663a3ba3409116f5efb3fa", "claims": [ { "id": "claim_83870f4f1ad6403ea0d8bd8775729a76", @@ -214,11 +214,19 @@ }, { "id": "claim_b929e9957fc64a1fba4955c60b9c8b83", - "statement": "App copy changes require completed simplified and traditional Chinese translations and the localization script, while language behavior changes use AppLanguageTests and website changes require a production build and English/Chinese route checks.", + "statement": "App copy changes require completed simplified and traditional Chinese translations and localization validation; AppLanguageTests covers language behavior. Parent guidance requires a production website build and visual English/Chinese checks, but native catalog and commerce policy tests do not verify external website copy, deployed routes or RevenueCat dashboard content. The StoreKit fixture is for manual development; live products, trial eligibility and purchase/restore behavior require RevenueCat and App Store Sandbox validation separately.", "evidence": [ { - "resource": "repo://AGENTS.md#L68-L68", - "version": "repo-lines-v1:sha256:3ed03b83385d562a6f7ea7ac79c04c902b9b475be6ddf0bfee86bf4f51f11029:eyJzZWxlY3RlZExpbmVDb3VudCI6MSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiM2VkMDNiODMzODVkNTYyYTZmN2VhN2FjNzljMDRjOTAyYjliNDc1YmU2ZGRmMGJmZWU4NmJmNGY1MWYxMTAyOSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiM2VkMDNiODMzODVkNTYyYTZmN2VhN2FjNzljMDRjOTAyYjliNDc1YmU2ZGRmMGJmZWU4NmJmNGY1MWYxMTAyOSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiYTAyZjA5NDM5NjA4ZjcyZGY0MzQxYzNiZWJlODVjNDFiMGI1YWQyNmFmZjY1ZTYwZDhjZGI2MzAzNjAyNjAxMSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNjZhNzFhZDgxY2FlOGI3MGJiZDYwMzkxNzllYTExZmU0OGExODY0YzdmMDcwNzU2MDQwYWJlOTYxNmVhNmMyYSJ9" + "resource": "repo://AGENTS.md#L14-L21", + "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" + }, + { + "resource": "repo://AGENTS.md#L59-L68", + "version": "repo-lines-v1:sha256:4978ecd0e4f873f06ce5be18eb877c04851a1b935c222b728a1e635bcdb62cc9:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE4NDhhMGQyNzhjYWRiNjQwNTc2NWQ2MWE2NTk5Yzk1Mzg2ZmRkNzlkYjBlMjhjOWQ2NjdjMDQ3YzViMDUyYWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlZDAzYjgzMzg1ZDU2MmE2ZjdlYTdhYzc5YzA0YzkwMmI5YjQ3NWJlNmRkZjBiZmVlODZiZjRmNTFmMTEwMjkiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjU5NjFhYWI3OTVlODYwNDA1NGViZjI3ZTU1ZGZjNDVlNjc5YzMzMjUwZmM3Y2M0YWQ0MDBjMDc5NmVmOWExMzQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZWY0Y2NhYTRiNDU0ZTYwOGEyZDJiNWMyMjk5ODk4ZTI0NTBhOTkyZTFiNzJiODNhMzBiN2YxZTFiYTIxOTAifQ" + }, + { + "resource": "repo://AGENTS.md#L76-L76", + "version": "repo-lines-v1:sha256:a941480de8d4cf34c8960e60d06b78e7622c77597f3954bdb4714da0b8c55914:eyJzZWxlY3RlZExpbmVDb3VudCI6MSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYTk0MTQ4MGRlOGQ0Y2YzNGM4OTYwZTYwZDA2Yjc4ZTc2MjJjNzc1OTdmMzk1NGJkYjQ3MTRkYTBiOGM1NTkxNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYTk0MTQ4MGRlOGQ0Y2YzNGM4OTYwZTYwZDA2Yjc4ZTc2MjJjNzc1OTdmMzk1NGJkYjQ3MTRkYTBiOGM1NTkxNCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNjZhNzFhZDgxY2FlOGI3MGJiZDYwMzkxNzllYTExZmU0OGExODY0YzdmMDcwNzU2MDQwYWJlOTYxNmVhNmMyYSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiOTg2ZjBmYzI2Yzg1ZWJjYjA4ODA0ODE3YmIwZDNkYmQ3YTA5YTYxYTU3ZGE5YTA1OTdhYWM5ZTc1ZDBkNzQ5MiJ9" }, { "resource": "repo://AGENTS.md#L80-L101", @@ -740,23 +748,39 @@ }, { "id": "claim_bc89ff18e536439f877c18d6c2dd54ea", - "statement": "App-owned fastlane scan/frameit tooling produces native captures and licensed-template frames in the independent public website/asset submodule; final Figma artwork is a separate four-platform 96-board RGB/sRGB JPG delivery. Reviewed asset commits are pushed via SSH before parent gitlink updates; native builds need no asset checkout.", + "statement": "Parent-owned fastlane scan drives native screenshot fixtures and framing operates on staged copies, defaulting to paths in the independent public website/assets submodule. Planning avoids capture execution; tooling dimensions and selectors establish intermediate production contracts, not current website composition, template licensing or final storefront artwork inventories. Repository guidance makes submodule initialization optional for native builds and necessary for website/asset work, with inspection of its own source required before external changes; reviewed asset commits must be pushed via SSH before parent gitlink updates while retaining the public HTTPS clone URL.", "evidence": [ { - "resource": "repo://AGENTS.md", - "version": "repo-file-v1:sha256:94b20ace54bc868d4640865a6b168168b31f3d7fd86a987e722ef735fdcefc12" + "resource": "repo://.gitmodules#L12-L14", + "version": "repo-lines-v1:sha256:c7d6ce76620da3eafc5c9b3ec573712bd83321c656fdee9b33e1623600ee21cc:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZDVlZTM0ZTU3NWVjNjRhODEzMjliZTk1ZWEwZDk3MTFhMTg0MDQ1MTRiNjkyMjhmNDMzODlhOGQ4ZjJjMWUxOCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiOGM4NDY1YjI4NDNjZjc3ZTlmMTE5M2IzOTc0OGMyNjZkYmM5NjJhZGY0ZTlhYjVhMTAxYzcxYTdkYzlhNDlmMCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNGU4MjMyOGU4YjdlOThiZGQwMDBjZGNlMTEwNDA0YTEyYzI5MDE2YjY4NWIyZWYzOWJkYjk2OGM0YWE5YzA4NiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjAsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSJ9" }, { - "resource": "repo://com.akinokaede.termind/README.md", - "version": "repo-file-v1:sha256:e22a5e1e43315369dc15d451cbecd8b1dff25fe0755a3e0b20941e2567ab4b9c" + "resource": "repo://AGENTS.md#L14-L21", + "version": "repo-lines-v1:sha256:f7006ba5333ec8f892401084d297a5cca1441539d4981caa353aa0b7fcc540d7:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMjEwYTA3YWY5NGUwMTJmZmRmZWYyZjAwOTkyN2MwODg0OTJhNGYzY2UzZmQxOWUxYjlkNDFhNTkyMTU3YTg0ZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZmQwODIwM2ZlMmM4ZDNlNmNkZDgxODZiNWI0NDcwMjNkOGI3MTgzOWM5OWY0OGVkNTE2MjBiZjc2NzNiYTEwNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTk5ZGM1ZDdjMzBhMTNiZGUzZjdmNjg5MTdhMmRlMDMwOTc3M2IzMDJmM2JjMzU0NWI1MWY2NjM1MTUxNDY5MCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZGQzNTA1MTYzNGZjNzIzNjdkZWVhMWFlMjg3MWQyOTQxNjZkM2U0MzkxODA5N2I4ZTMxNWVmYTc5NTVkMzliNyJ9" }, { - "resource": "repo://com.akinokaede.termind/assets/README.md", - "version": "repo-file-v1:sha256:de2ae13c89af67e8029b26b9d2dd77853ab50d62f58d39447f04d222fdbbd745" + "resource": "repo://AGENTS.md#L59-L68", + "version": "repo-lines-v1:sha256:4978ecd0e4f873f06ce5be18eb877c04851a1b935c222b728a1e635bcdb62cc9:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE4NDhhMGQyNzhjYWRiNjQwNTc2NWQ2MWE2NTk5Yzk1Mzg2ZmRkNzlkYjBlMjhjOWQ2NjdjMDQ3YzViMDUyYWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlZDAzYjgzMzg1ZDU2MmE2ZjdlYTdhYzc5YzA0YzkwMmI5YjQ3NWJlNmRkZjBiZmVlODZiZjRmNTFmMTEwMjkiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjU5NjFhYWI3OTVlODYwNDA1NGViZjI3ZTU1ZGZjNDVlNjc5YzMzMjUwZmM3Y2M0YWQ0MDBjMDc5NmVmOWExMzQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjYwZWY0Y2NhYTRiNDU0ZTYwOGEyZDJiNWMyMjk5ODk4ZTI0NTBhOTkyZTFiNzJiODNhMzBiN2YxZTFiYTIxOTAifQ" }, { - "resource": "repo://fastlane/Fastfile", - "version": "repo-file-v1:sha256:66888831bd0be796eeae2c5af639cf7592e40c3a33e6a363a6fdcacb44ff915c" + "resource": "repo://fastlane/Fastfile#L8-L45", + "version": "repo-lines-v1:sha256:572f864584ee06343a4354bc45e7aa4d43a5b84b6b0e5422b921171af3e360d9:eyJzZWxlY3RlZExpbmVDb3VudCI6MzgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM1N2YyNWU1NjY1YmUzODg1NmI0ZTk4YTVmM2JjZmI1ZTA5NDEyYWY3NzFjNmVjZmE5Nzk1YjZkMTU1MDI3NTciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4MzMyZmU2NjdiYzUxYWM0YTUxYmEwZWZlNzM0NDQxYzkwZGVmNTVjNjBhMjZkN2RiMjc1ZWNiYmNmNDJmMTUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFiOTIyMmQ3MDIwYTY0OWM2ZWVmOTVlYjRkOTAzMjhjZmIwOGM3NDFlY2Y4ZGQ5NWVhOWFiODhiNTY2ZjEzZTEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjowLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUifQ" + }, + { + "resource": "repo://fastlane/lib/screenshot_frames.rb#L15-L41", + "version": "repo-lines-v1:sha256:ab5fb034806b3277938f2d3b7eb46f4b98b516cf99e60c770a6f5c078daac323:eyJzZWxlY3RlZExpbmVDb3VudCI6MjcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImJkYmIwMTVjOTZkZGQyNjM2NWJjYjgyYjA2YTgzNmZmNWVhZjgzOGIyNzlhNWJmNmMzMmFjY2JmMWY3MDViZmUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjFkODZjYjRmZDNjNzRhYWU3M2U3NDg2YmM3ZTE5ZmU3ZmNhYmIzZWVkOTJkYzE0OTM1MDE0OGFhN2UwNGQ0YmMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk2YjE3MjRjNTRmZmI2MDI0OWU3NWZiMGY4MjVmZWJlOWMzNDhmZmY5NzI2ZjAyZjRkNjM0ZTU4NDZhYjJjNDciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijg1YTU4Zjk2OTkzZDRlMzQ1MmI3OTYxNmRjMTEyYzIwODAxZjk4M2E0MjdhMmI5YzBhMjVkZTU3YzlkMTQ4NGMifQ" + }, + { + "resource": "repo://fastlane/lib/screenshot_frames.rb#L86-L158", + "version": "repo-lines-v1:sha256:1b6ac24f0cfe9ba25621a6ffec74bd34eacc0fa4a24599e6a2d00d351f631a8a:eyJzZWxlY3RlZExpbmVDb3VudCI6NzMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImEwNDlkY2EzMGVjYWYxOWE0YzI4NzhmZWI0ZjkwYmJkNTcwODg1YmRmYjMyZmM0NGY0NTVhYjU3ZjA4ZDM2ZTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQ1N2RkZDE4NDQ3NjczZDBhN2YzNjlkNmY5NmI2NjZjNGY3M2M4OGQ2NGY5ZGJlM2NhMjI4MzVjY2Y4ZmY3NTAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZiOWZkNThlMjViMjFhN2ZiYmZmNTZjYWE5NmNlODEyMGViZWU5ZTFmZTMxYmIwYWNjYTdjOGRiOTVjMzM5NDYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjRhNDYxY2U0YzIwZmFhNGNlZjdmNGU5NjJkMmI3NzFlOTkxMzJkYjNiNjY2MzI1OWEwMjQwYjYwYTBhYTkzZWYifQ" + }, + { + "resource": "repo://fastlane/lib/screenshots.rb#L18-L23", + "version": "repo-lines-v1:sha256:53416674d091c02bcd80987ba0f29bcecae957bb8d49f868f23fb5cee49b79d6:eyJzZWxlY3RlZExpbmVDb3VudCI6NiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYTM1YTM5MTYyNDRhNmFiYjAyYzhjZmJlMWEyMjBlNTEyM2NkNDUwNDBkNmNhNmM2NThiNTczYzA2ZmE4ODUxZSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNzc5ODExYzVmYmUyNWMzZDRlNWYzZDFmZDM1YWI5ZGE2YmNmOGE2OGM1ZWRmOWQ2YmE5N2Y2ODY4NmMzOTY4MCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMDE3Yjc0ZjAyZjcwMzdiMzVhY2UwNGQ3M2Y1NDM3OWEyOWU2ZDUzNWY4MzExYTYyYzA5YTAzOTI1N2QwOGQzZCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiOGRlMjRiMDIyNTg1ZDJjMDhmNThmYWZjNTNkODQzYTg2YjBjODJmNTRkOTU5YTQ1ZTQ5MDE0ZDc3YzFiNGYwMyJ9" + }, + { + "resource": "repo://fastlane/lib/screenshots.rb#L66-L81", + "version": "repo-lines-v1:sha256:14e4300122b499c9067ad530d97544041f6c6aa93bcd23abb210dc88d24d82ff:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjJmZGQyNzdlN2EwNjQyNWRjNDJlZjJiNzcxOGUxNTAxNDJjM2VmMzdhMTgwOWIxMWVmZTUzNWQ4ZjEwOTQ0YjIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhNmRhZTVlNDdhNjVlNWQ0OGVhNWJhNDY0YWUyMDljZmJjZjdjMDFhM2RhYmNiZmY1NTdhYTNiMjNhNGE5YmEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjhjMmQ3NWYwYTJjNTFlZGU5OGMyNjViZGJjYTNjNmQyYzYwNDFjMjg3OTAwMzRlMDY0YWMyYzliYzAzMmMyNmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjcxYTA4OTI4MDI4YTViOTA0NDJiNTE2Zjc0NmRmZGQ2ZmE3MmZlMjlmYWI0MjM2Y2QxYTVmYTAwNTdjZGI3OGEifQ" } ] }, @@ -780,7 +804,7 @@ } ], "verification": { - "by": "openwiki/0.7.1", - "at": "2026-10-08T13:46:25.102Z" + "by": "openwiki/0.7.0", + "at": "2026-10-09T00:05:26.272Z" } } diff --git a/openwiki/.last-update.json b/openwiki/.last-update.json index 0f3f9fe8..11f430af 100644 --- a/openwiki/.last-update.json +++ b/openwiki/.last-update.json @@ -1,8 +1,8 @@ { - "updatedAt": "2026-10-08T13:47:46.667Z", + "updatedAt": "2026-10-09T00:18:38.437Z", "command": "update", - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "model": "host-agent/pi", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "model": "gpt-6.1-sol", "status": "complete", "language": "en" } diff --git a/openwiki/.page-manifest.json b/openwiki/.page-manifest.json index d910105d..271d6956 100644 --- a/openwiki/.page-manifest.json +++ b/openwiki/.page-manifest.json @@ -2,85 +2,85 @@ "schemaVersion": 1, "pages": { "/openwiki/architecture/desktop-ui.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:633662bc406c2f1cada88105b6b8554fa2b3eeae597a9c8fe35596966e1399ef", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/architecture/engineering-invariants.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:f781a4372018996ce5220a6c2cd1060320eae0b95a9bfe975bcbcc8811ad1609", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/architecture/mobile-ui.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:3d4e0b256340d33732e91a6b0925f04762249f7f133b7d3fe999d561526ab846", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/architecture/module-map.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:895556453e1d1159e77f9b5e3877d6bc4b8a7ea715f35b72d332478e66cc1dc9", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/architecture/native-app-directories.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:4cf9745c57e23b170637ade78db1cfc5d66eaf6a77c614727911d4608c73b3b4", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/architecture/platform-runtime.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:c32f8234a8b6a9ced069d542dad15cecdb5d353f9e1c6034452f7ab82dbc5119", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/architecture/shared-module-directories.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:6223dc5ca0ceea965a4e429192024c8206e2779298a056d39bd49a64e9f663af", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/architecture/supporting-system-directories.md": { - "pageVersion": "sha256:d63df8fa83651d0f3c73973639b1ae0d359c73f31c6f342c42ad3f8a819c9e75", - "completedBy": "pi", - "completedRunId": "6fec6ed1-d0a6-4652-b746-a55b8d259a7d", - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952" + "pageVersion": "sha256:461e81326b943f4056452e95a67a0bf967f59c5afb090aca7d16043e9d071a21", + "completedBy": "openwiki/0.7.0", + "completedRunId": "34d03cbd-7880-41d8-a35e-18bc20033939", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14" }, "/openwiki/architecture/system-boundaries.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:9873df397941c0bfd1bd9ea5bb241a61d4e6b93f59df8afb75f807d871fe2341", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/concepts/agent-runtime-and-assistant.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:7da7643ceb02ed8cb75346346cd3224bf2dc34d7374f7045e79f760cf86957fb", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/concepts/commerce-localization-and-product-surfaces.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", - "pageVersion": "sha256:0d2ed5a484b6d2e221490c7a609879a7aa8163f51b9469982eb932d741d9a271", - "completedBy": "pi", - "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" + "pageVersion": "sha256:bfcc767924aef1756c700892275c7dd731393511422da859052a8d6bd27080e0", + "completedBy": "openwiki/0.7.0", + "completedRunId": "34d03cbd-7880-41d8-a35e-18bc20033939", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14" }, "/openwiki/concepts/ghostty-terminal-integration.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:384703109bed00f8ed08d1f764a99c6cac0e9ef038c534f5a7fae3999fff9ba4", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" @@ -100,8 +100,8 @@ "completedRunId": "2927dd9c-e0f5-4bfb-949d-22ecc52108f5" }, "/openwiki/concepts/shell-integration.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:697464471353b8b5ffdacc0d9227402f39bed5199fa0aeda011940d107d15ea2", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" @@ -114,18 +114,18 @@ "completedRunId": "2927dd9c-e0f5-4bfb-949d-22ecc52108f5" }, "/openwiki/concepts/ssh-security-key-authentication.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:6cad39d6c9decdee69767b72382b05012368dfebb835c64c0eff92b73aef7989", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/concepts/ui-design-principles.md": { + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:5d2d18d31f2c7a1c6dab2916e7b91d3ae815773f66fe4b24bc577a3e54a928dc", "completedBy": "pi", - "completedRunId": "6fec6ed1-d0a6-4652-b746-a55b8d259a7d", - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952" + "completedRunId": "6fec6ed1-d0a6-4652-b746-a55b8d259a7d" }, "/openwiki/integrations/mcp-server-and-bridge.md": { "gitHead": "6d9bd9a3f6bd9b41329bd35d2b7cd9390e19b945", @@ -142,57 +142,57 @@ "completedRunId": "48ef25f2-64e1-4190-834d-a609e0efb04d" }, "/openwiki/operations/build-test-and-release.md": { - "pageVersion": "sha256:6b5cc5c4f0ab2658bcd0f5a5afd8a821945aa1660956f2121b608efc7d245f75", - "completedBy": "pi", - "completedRunId": "6fec6ed1-d0a6-4652-b746-a55b8d259a7d", - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952" + "pageVersion": "sha256:70bd137630ed40d98fd9a13e4fd39b1db016e8aa7e131c550d7d8521a25bf340", + "completedBy": "openwiki/0.7.0", + "completedRunId": "34d03cbd-7880-41d8-a35e-18bc20033939", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14" }, "/openwiki/operations/cloudkit-release-readiness.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:0272fbb38e8f338c19366a14469f8b902f0c06d1591533951677ed32bf0d688a", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/operations/ghostty-fork-maintenance.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:78d03df042d5655f4d0a0c1d53613e4986cfc2031295dd535cfd73cc309d378a", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/operations/marketing-assets-and-app-icons.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", - "pageVersion": "sha256:329b3ced13a1f4b9b09f78a419f73757fede1f40be50fa7c0d91377332d2bbc2", - "completedBy": "pi", - "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" + "pageVersion": "sha256:248e7f369c99e774ab2d5d0b4f59cb5e2b5f1f1a2d70e415f762d7d5bd07a871", + "completedBy": "openwiki/0.7.0", + "completedRunId": "34d03cbd-7880-41d8-a35e-18bc20033939", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14" }, "/openwiki/operations/port-forwarding-benchmarks.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:36efad937d69cf0199f082c3caadaaee82226c63b8f794e7788f82f024968aba", "completedBy": "pi", "completedRunId": "3ebe4178-ea04-4abb-8b86-1a3f6e359392" }, "/openwiki/operations/storefront-commerce-release.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", - "pageVersion": "sha256:c6aedbc65556d8b8c4c14193d21b23e80c451792b17623eaa1917e1b35b447d6", - "completedBy": "pi", - "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" + "pageVersion": "sha256:d5a99c50d2acfa0cfa618499e38eaae356213ee5fa1bbf6312cfa277e3083175", + "completedBy": "openwiki/0.7.0", + "completedRunId": "34d03cbd-7880-41d8-a35e-18bc20033939", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14" }, "/openwiki/quickstart.md": { - "pageVersion": "sha256:ae14a26a1a06b7b6799fc95b20fb0af2d25fb0a99599398d84d474c0af2d9366", - "completedBy": "pi", - "completedRunId": "6fec6ed1-d0a6-4652-b746-a55b8d259a7d", - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952" + "pageVersion": "sha256:e8204b43a111f591306e3848cd2cc998d1530faad8663a3ba3409116f5efb3fa", + "completedBy": "openwiki/0.7.0", + "completedRunId": "34d03cbd-7880-41d8-a35e-18bc20033939", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14" }, "/openwiki/testing/behavioral-boundaries-and-fixtures.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:467dd9cde36fbc898f77544e4e63b07bb479568e1e2ac2a9b4b74c909738007b", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" @@ -205,8 +205,8 @@ "completedRunId": "2927dd9c-e0f5-4bfb-949d-22ecc52108f5" }, "/openwiki/workflows/file-drag-and-drop.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:3d12dee415abfdf049b384076d5ec11e7637b264b0bc033b1b6a83f65bea714b", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" @@ -219,25 +219,25 @@ "completedRunId": "2927dd9c-e0f5-4bfb-949d-22ecc52108f5" }, "/openwiki/workflows/settings-and-cloud-sync.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:72e9d588d53d2699eafa58cb89e24fd163bf96703009dbf0d10d1db4159b9e22", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/workflows/sftp-transfer-and-external-edit.md": { - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952", + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:843b9f39b7ab2ed54dff0234ddd3c2bb1d7609a50386cf52fdca6242de7f768e", "completedBy": "pi", "completedRunId": "bab0e06f-81a2-4327-8080-e849db32092c" }, "/openwiki/workflows/ssh-session-lifecycle.md": { + "gitHead": "20f67cdc0b0e88115415c20af2cda7e12f51dfa6", + "sourceFingerprint": "sha256:fdfe15e9e5a8fbec7c1714e4c633ff07f075729c5cc8288057b6d7740a4d4b14", "pageVersion": "sha256:ae1ca5ae23c1add6438e1bf6d4829d70e67b8a0823ccb72dfe8ecfb3263c8805", "completedBy": "pi", - "completedRunId": "6fec6ed1-d0a6-4652-b746-a55b8d259a7d", - "gitHead": "dad88e695f112591ce1f91f5020b106dec51b32a", - "sourceFingerprint": "sha256:2173e21479ca8893f42842961289724df74ab800149435b13825e7f7197e3952" + "completedRunId": "6fec6ed1-d0a6-4652-b746-a55b8d259a7d" } } } diff --git a/openwiki/architecture/supporting-system-directories.md b/openwiki/architecture/supporting-system-directories.md index f5055af7..cd542c4e 100644 --- a/openwiki/architecture/supporting-system-directories.md +++ b/openwiki/architecture/supporting-system-directories.md @@ -12,28 +12,6 @@ sources: resource: repo://AGENTS.md - id: openwiki-source-7f5c1cb6f348742514987bf8 resource: repo://Benchmarks/PortForwarding/main.swift - - id: openwiki-source-54a517e25bf7220eb9067177 - resource: repo://com.akinokaede.termind/assets/README.md - - id: openwiki-source-0246c48ce8a82949613e5d20 - resource: repo://com.akinokaede.termind/design/README.md - - id: openwiki-source-6c477adbd17d240038ac8d60 - resource: repo://com.akinokaede.termind/package.json - - id: openwiki-source-fcca55af6fa67b76822099ae - resource: repo://com.akinokaede.termind/README.md - - id: openwiki-source-a6a2820ffcf779217cd84d9e - resource: repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro - - id: openwiki-source-f2e3c2208232f6d2e4b142f5 - resource: repo://com.akinokaede.termind/src/layouts/BaseLayout.astro - - id: openwiki-source-54475365456bc7ee7b3ac1b2 - resource: repo://com.akinokaede.termind/src/lib/comparisons/index.ts - - id: openwiki-source-99625a4586d759ede6543036 - resource: repo://com.akinokaede.termind/src/lib/comparisons/termind.ts - - id: openwiki-source-37c59bb67bf496fd4a44f0ab - resource: repo://com.akinokaede.termind/src/lib/i18n.ts - - id: openwiki-source-48fb5cabce8010d9034f072c - resource: repo://com.akinokaede.termind/src/lib/marketingImages.ts - - id: openwiki-source-dcb2f8763c6c52696557ae46 - resource: repo://com.akinokaede.termind/src/lib/pricing.ts - id: openwiki-source-4c22145572a82f1dd48f37e0 resource: repo://fastlane/lib/screenshot_frames.rb - id: openwiki-source-cf46ee9dde9e2af41c84b62f @@ -90,10 +68,10 @@ sources: resource: repo://TFMTests/Screenshots/MacScreenshotTests.swift - id: openwiki-source-0f8d0f9d08d6674698dd054c resource: repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift -generated: { by: "pi", at: "2026-10-08T13:46:25.102Z" } +generated: { by: "openwiki/0.7.0", at: "2026-10-09T00:05:26.272Z" } verified: - - by: openwiki/0.7.1 - at: 2026-10-08T13:46:25.102Z + - by: openwiki/0.7.0 + at: 2026-10-09T00:05:26.272Z --- # Supporting Systems Ownership Guide @@ -186,52 +164,47 @@ Use [Behavioral Boundaries and Fixtures](../testing/behavioral-boundaries-and-fi ## Public website and asset submodule -Paths below are relative to `com.akinokaede.termind`, an independent public Git repository and Astro build. Native builds do not require it; initialize it only for website/asset work. Commit and push reviewed asset changes via SSH before updating the application's gitlink; retain the HTTPS clone URL in `.gitmodules`. It is not a Swift framework or embedded app web view. +[Repository guidance](../../AGENTS.md) identifies `com.akinokaede.termind/` as an independent public website and assets repository with an Astro project at its root; `assets/` and `design/` own marketing and brand assets. Utilities and screenshot tooling remain in the parent repository. Native app builds do not require this submodule. Initialize it only for website or asset work: -| Directory | Responsibility | -| --- | --- | -| `src/components` | Reused page/section content for FAQ, privacy, security, support and offers; redirects; responsive screenshot rendering. | -| `src/layouts` | Shared document shell, metadata, navigation, and site-level composition. | -| `src/lib` | Locale/path/copy helpers, Traditional Chinese conversion/term adjustments, and the explicit marketing-image import allowlist. | -| `src/pages` | English route entry points for the landing page and support/legal/information pages. | -| `src/pages/zh-hans` | Simplified Chinese routes, including the email-offer page. | -| `src/pages/zh-hant` | Traditional Chinese routes. | -| `src/pages/ja` | Japanese routes, including pricing, comparisons and support. | -| `src/pages/zh` | Legacy Chinese redirects to the current Simplified Chinese routes, not another independently authored locale. | -| `src/styles` | Global styles, tokens, typography, and responsive/interaction styling. | -| `public` | Directly served static assets such as app icon, brand mark, and favicon. | -| `public/brands` | Small third-party/product brand artwork used by the site. | -| Root configuration | Astro/TypeScript/package configuration and locked web dependencies. | +```sh +git submodule update --init com.akinokaede.termind +``` -Marketing screenshots are imported from the asset pipeline, not copied wholesale into `public`. `npm ci` installs locked dependencies; `npm run dev` runs local Astro, and `npm run build` performs `astro check && astro build`, transforming allowlisted frames into responsive outputs. See [Commerce, Localization, and Product Surfaces](../concepts/commerce-localization-and-product-surfaces.md). +Commit and push reviewed asset changes via SSH **before** updating the application's gitlink. Keep the public HTTPS clone URL declared in [`.gitmodules`](../../.gitmodules). + +**Evidence boundary:** the submodule directory is empty in this checkout. Its website implementation and asset inventory are unavailable for inspection, not demonstrated to have been deleted. This guide therefore does not assert its current Astro directory structure, locale routes or redirects, pricing/comparison implementation, image import allowlist or transforms, final store-board inventory, or design-master layout. Initialize the submodule and inspect its own source before changing those internals. See [Commerce, Localization, and Product Surfaces](../concepts/commerce-localization-and-product-surfaces.md) for the related product boundary. + +The parent repository documents `cd com.akinokaede.termind && npm ci && npm run dev` for installing locked dependencies and starting Astro, and `cd com.akinokaede.termind && npm run build` for type-checking and emitting the production site to `com.akinokaede.termind/dist/`. These are documented operating commands, not verification of the unavailable package scripts or image-generation behavior. ## Marketing and design assets -| Directory | Responsibility | -| --- | --- | -| `assets/screenshots//` | Opaque sRGB JPGs: six boards per `mac`, `iphone-6.3`, `ipad-13`, `iphone-duo` across four locales (96 current boards). iPhone's two-device Overview is named `01_overview.jpg`; other platforms retain `01_three_screens.jpg`. | -| `assets/captures//` | Full-resolution native sources in `iphone-6.3`, `ipad-15`, `mac-14`, and separate Duo inner/outer directories; source identity is locale/device/feature, not feature-first. | -| `assets/device_frames//` | Native-scale reproducible PNGs from frameit and local licensed Apple templates. Masks apply only to staged copies; website imports an allowlisted subset, including Duo. | -| `design/brand`, `design/paywall` | Brand master and remote paywall handoff artwork. Native `AppIcon.icon` documents remain with TFM/TFI. | +The paths below are **destinations and inputs configured by the parent repository's Ruby tooling**, relative to `com.akinokaede.termind`; they are not an inventory of files present in the empty checkout. -**Arrows below mean asset production or consumption, not code dependencies.** +| Path | Locally evidenced responsibility | +| --- | --- | +| `assets/captures//` | Default full-resolution native capture destination and frame input. Device directories map to `iphone-6.3`, `ipad-15`, `mac-14`, `iphone-duo-inner`, and `iphone-duo-outer`. | +| `assets/device_frames///.png` | Default derived PNG destination; the frame planner preserves locale/device/scene identity from the capture input. Locale directory names are lowercased. | +| `assets/device_templates` | Default local template input for frame generation; required template dimensions are checked before rendering. Template paths can be overridden. | +| `assets/`, `design/` | Marketing and brand ownership assigned by `AGENTS.md`; final store artwork and design-master contents must be verified in the initialized asset repository. | + +Default capture output requires the submodule's `.git` marker and `assets/` directory, failing with an initialization instruction before building when they are absent. Default frame input or output uses the same prerequisite. An explicit capture `output` bypasses that default destination requirement; framing can operate outside the submodule when both `input` and `output` are supplied, with valid external templates where needed. This is an asset-tooling prerequisite, not a native app-build dependency. + +**Arrows below mean locally evidenced asset production or consumption, not code dependencies.** ```mermaid flowchart TB Native["App-owned native fixtures"] --> Capture["fastlane scan and system capture"] - Capture --> Raw["Asset submodule / captures / locale / device"] - Raw --> Frames["frameit and local licensed templates"] - Frames --> Framed["Asset submodule / device_frames"] - Framed --> Images["Astro typed image allowlist"] - Images --> Astro["Optimized AVIF / WebP / JPEG"] - Raw -.->|Figma composition| Store["Asset submodule / screenshots"] - Framed -.->|Figma image layers| Store - Brand["Asset submodule / design"] -.->|visual source| Store + Capture --> Raw["Configured captures / locale / device"] + Raw --> Frames["Staged copies and frame composition"] + Templates["Validated local device templates"] --> Frames + Frames --> Framed["Configured device_frames / locale / device"] ``` -The diagram distinguishes source captures, derived web frames, and separate final App Store compositions. +The diagram shows parent-owned capture production and frame consumption, without asserting an uninspected website or App Store composition pipeline. -The App Store branch represents a separate artwork workflow, not a claim that the frame generator automatically emits final store compositions. Asset conventions and capture verification live in [Marketing Assets and App Icons](../operations/marketing-assets-and-app-icons.md). +`ScreenshotFrames` defaults to iPhone, iPad, and Mac and a parent-defined `WEBSITE_SCENES` subset; Duo displays are selectable separately. That selector is not proof of the website's current imports. Frame generation validates native source dimensions and template dimensions, masks staged copies, uses frameit for mobile frames and local composition for Mac, and checks that every requested render produced a valid image before publishing any selected frame. Sources remain read-only; this tool does not establish how final App Store artwork is composed. + +`Scripts/Tests/test_screenshots.rb` covers missing-submodule failures before capture/frame work, explicit external paths, default scene selection, native-size rejection, source-byte preservation, and withholding publication when a requested frame is missing. These are focused orchestration regressions, not tests of the unavailable website. Asset commands and capture verification are described in [Marketing Assets and App Icons](../operations/marketing-assets-and-app-icons.md). ## Project metadata and documentation tooling @@ -251,4 +224,4 @@ Local dependency/build caches such as `node_modules`, `.build`, `build`, and web Return to the [Module Map](module-map.md) or the [Engineering Quickstart](../quickstart.md). -The website’s comparison and pricing routes share `src/lib/comparisons/` evidence and features plus `src/lib/pricing.ts` public prices across English, Simplified and Traditional Chinese, and Japanese. Legacy `/zh/` routes redirect. These public prices are separate from RevenueCat’s live purchase offering. Screenshot suites live directly under `TFMTests/Screenshots/` and `TFITests/Screenshots/`; lanes select suites by Swift type. The website Hero is Mac Workspace plus Duo outer Assistant and an iPhone SSH alternative, while App Store Overview compositions remain platform-specific. +Screenshot suites live directly under `TFMTests/Screenshots/` and `TFITests/Screenshots/`; lanes select suites by Swift type. diff --git a/openwiki/concepts/commerce-localization-and-product-surfaces.md b/openwiki/concepts/commerce-localization-and-product-surfaces.md index 6a4f93f1..31b545d6 100644 --- a/openwiki/concepts/commerce-localization-and-product-surfaces.md +++ b/openwiki/concepts/commerce-localization-and-product-surfaces.md @@ -1,33 +1,13 @@ --- type: product-surface-concept -title: Commerce, localization and product surfaces +title: Commerce, Localization and Product Surfaces description: Explains RevenueCat-derived Pro access and remote paywalls, native language and copy ownership, and the separate app, widget, screenshot, and public-site product surfaces. tags: [commerce, revenuecat, localization, product-surfaces, marketing, widgets] sources: + - id: openwiki-source-ed77bc20b48d193bace3dde6 + resource: repo://.gitmodules - id: openwiki-source-8037e2358a2c4f9b2c722a11 resource: repo://AGENTS.md - - id: openwiki-source-6c477adbd17d240038ac8d60 - resource: repo://com.akinokaede.termind/package.json - - id: openwiki-source-fcca55af6fa67b76822099ae - resource: repo://com.akinokaede.termind/README.md - - id: openwiki-source-b634183c73c9477c2202d629 - resource: repo://com.akinokaede.termind/src/components/FAQPage.astro - - id: openwiki-source-5648b67f3d37254607060707 - resource: repo://com.akinokaede.termind/src/components/PrivacyPolicy.astro - - id: openwiki-source-a6a2820ffcf779217cd84d9e - resource: repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro - - id: openwiki-source-16bccb8478ca6b4daf81709b - resource: repo://com.akinokaede.termind/src/components/SecurityPage.astro - - id: openwiki-source-fe020c65073a73518a5b3793 - resource: repo://com.akinokaede.termind/src/components/TelegramOffer.astro - - id: openwiki-source-f2e3c2208232f6d2e4b142f5 - resource: repo://com.akinokaede.termind/src/layouts/BaseLayout.astro - - id: openwiki-source-37c59bb67bf496fd4a44f0ab - resource: repo://com.akinokaede.termind/src/lib/i18n.ts - - id: openwiki-source-48fb5cabce8010d9034f072c - resource: repo://com.akinokaede.termind/src/lib/marketingImages.ts - - id: openwiki-source-4b6325b8da6c6aee4867267a - resource: repo://com.akinokaede.termind/src/pages/index.astro - id: openwiki-source-a8a9aade8fbc89d5829a491e resource: repo://Frameworks/Resources/Localizable.xcstrings - id: openwiki-source-a51ca858a040a90d4ab9c1c4 @@ -124,10 +104,10 @@ sources: resource: repo://TFMTests/PresentationCopyTests.swift - id: openwiki-source-0f8d0f9d08d6674698dd054c resource: repo://WorkspaceActivitySupport/WorkspaceActivityAttributes.swift -generated: { by: "pi", at: "2026-10-08T13:28:49.393Z" } +generated: { by: "openwiki/0.7.0", at: "2026-10-09T00:05:26.272Z" } verified: - - by: openwiki/0.7.1 - at: 2026-10-08T13:28:49.393Z + - by: openwiki/0.7.0 + at: 2026-10-09T00:05:26.272Z --- ## Commerce ownership and configuration @@ -188,13 +168,15 @@ sequenceDiagram Controller-->>Native: updated access and processing ``` +The native sheet delegates purchase and restore operations to RevenueCatUI and refreshes controller access on completion. + The platform views observe purchase/restore start, completion, cancellation and failure to update `isProcessing`; purchase initiation is refused if access already exists. Completion refreshes access but **does not close** the paywall: after purchase the first SDK dismissal request is ignored so the account variant can be displayed; subsequent dismissal or the close control dismisses it. Disappearing cancels the processing indicator. `ProPaywallStateTests` covers mapping of subscription phases, ownership, missing date and failed verification; `RevenueCatCommerceTests` covers remote-completion behavior, streamed grants and revocations, racing/coalesced refreshes, deadline resolution, configuration rejection and recovery from fetch errors. The old `ProOfferPresentationTests` and `ProPaywallPresentationTests` are absent. A purchase, Restore Purchase or remote layout is not integration-tested by these unit tests. ## Review and app localization `AppReviewController` budgets StoreKit review *attempts*, not prompt presentations or ratings: after an active workspace-to-review-page transition it requires seven days since first use, three active local dates, five foreground workspace minutes, no request in the current version and a 120-day cooldown. It waits three seconds and records the attempt before calling the platform request API; navigation, focus/surface changes and blocked commerce or modal UI cancel a pending invitation. The explicit review link records an attempt as well. XCTest disables the live invitation policy. -App UI copy, including platform-specific strings and the native paywall **fallback** text, belongs to semantic `LocalizedStringResource` definitions in `Frameworks/TermindPresentation/Strings` and the shared manual `Frameworks/Resources/Localizable.xcstrings`; `InfoPlist.xcstrings` owns bundle metadata. Keep diagnostic codes, protocol values like remote paywall `state`, identifiers and user-authored content outside translated UI copy. RevenueCat's dashboard paywall text and StoreKit product metadata are **separate** copy owners. The app catalogs must have finished `zh-Hans`, `zh-Hant` and `ja` units for changed English keys. `Scripts/normalize-string-catalogs.py --write` canonicalizes catalog format and manual extraction without deleting stale keys or changing translations and refuses duplicate JSON keys before writing; `Scripts/check-cjk-localization.py` checks both app catalogs by default for normalization, valid JSON, Chinese/Japanese completion, positional format arguments, other-only plural shape and locale-specific spacing. The separate AgentKit runtime catalog needs its own localization build step; the Astro website does not consume native strings. `Scripts/check-appstrings.sh` detects selected app-local UI literals via SwiftSyntax and `ArchitectureBoundaryTests` guards the shared copy owner, but neither proves all UI text is localized. +App UI copy, including platform-specific strings and the native paywall **fallback** text, belongs to semantic `LocalizedStringResource` definitions in `Frameworks/TermindPresentation/Strings` and the shared manual `Frameworks/Resources/Localizable.xcstrings`; `InfoPlist.xcstrings` owns bundle metadata. Keep diagnostic codes, protocol values like remote paywall `state`, identifiers and user-authored content outside translated UI copy. RevenueCat's dashboard paywall text and StoreKit product metadata are **separate** copy owners. The app catalogs must have finished `zh-Hans`, `zh-Hant` and `ja` units for changed English keys. `Scripts/normalize-string-catalogs.py --write` canonicalizes catalog format and manual extraction without deleting stale keys or changing translations and refuses duplicate JSON keys before writing; `Scripts/check-cjk-localization.py` checks both app catalogs by default for normalization, valid JSON, Chinese/Japanese completion, positional format arguments, other-only plural shape and locale-specific spacing. The separate AgentKit runtime catalog needs its own localization build step; native catalog checks do not establish website copy correctness. `Scripts/check-appstrings.sh` detects selected app-local UI literals via SwiftSyntax and `ArchitectureBoundaryTests` guards the shared copy owner, but neither proves all UI text is localized. `AppLanguage` writes an explicit `en`, `zh-Hans`, `zh-Hant` or `ja` choice to `AppleLanguages`, clears that override for Follow System, migrates legacy Simplified Chinese tags and leaves unsupported preferences following the system. `AppLocalization` resolves imperative copy from the appropriate main-bundle localization, including regional Traditional Chinese. Resolve resources at display time, rather than caching translated strings across language changes; use the resource directly with SwiftUI APIs that accept it, especially `confirmationDialog`, and `swiftUIKey` only where `LocalizedStringKey` is required. Mobile `operationConfirmation` resolves resources against the view locale before passing verbatim strings to either an anchored SwiftUI confirmation or an injected centered UIKit renderer; an explicit Cancel action remains visible. `PresentationCopyTests` checks menu, count, accessibility and bridge resolution; current `AppLanguageTests` tests preference migration, regional catalog lookup, assistant/security-token terminology, forwarding placeholder order and selected plural resources. **It no longer tests explicit-language Pro offer copy.** Full catalog completion is the Python check, not these tests. @@ -204,14 +186,18 @@ Ordinary product labels illustrate the split: iOS Vault search opens Snippets an `TermindWidgets` contains a workspace Live Activity, not another workspace engine. The app serializes activity updates, restores at most one active activity, starts only after explicit workspace intent and ends it when workspaces are gone. Its payload excludes credentials and terminal output, bounds focused-first summaries to six, and routes only strict workspace-list and UUID workspace deep links. DEBUG macOS `ScreenshotDemoConfiguration` binds one validated scene to `en`, `zh-Hans`, `zh-Hant` or `ja` and isolated fixtures; mobile captures mount real views. Recapture affected scenes in all locales using actual platform UI rather than changing production logic for screenshots. See [Marketing Assets and App Icons](../operations/marketing-assets-and-app-icons.md). -The independent `com.akinokaede.termind` website/assets submodule contains the Astro project at its root (`npm run build` runs `astro check && astro build`). Its typed framed-image allowlist imports directly from `assets/device_frames//` and emits optimized formats rather than copying source screenshots into `public`. The current Hero combines Mac Workspace and Duo outer Assistant; SSH, SFTP, Metrics and Assistant use intentionally different selected form factors. English `/`, Simplified `/zh-hans/` Traditional `/zh-hant/` and Japanese `/ja/` use site-local `i18n.ts` (Taiwan Traditional conversion plus terminology overrides; Japanese uses explicit copy or its English-keyed dictionary, falling back to English), not `.xcstrings` or `AppleLanguages`. The homepage and FAQ lead with an AI-driven remote workspace, BYOK, controlled permissions, built-in Tailscale and optional device-local Hermes Memory. `FAQPage.astro` separately owns free/Pro, third-party API billing, Family Sharing and Mac-only MCP disclosures. The Telegram draw offers a **chance** at a redemption code, not a plan or guaranteed trial; Apple determines redemption eligibility. Reconcile that copy with native gates when behavior changes. +### Website evidence boundary -The site serves security and privacy components through locale wrappers and `BaseLayout`, which owns navigation, canonical/alternate links and browser-local site language selection independently of app settings. The public `PrivacyPolicy.astro` covers local data, optional private iCloud/Keychain synchronization, Apple purchase handling **and RevenueCat purchase validation, entitlement synchronization and paywall service**, anonymous ID association on restoring an Apple purchase, AI/search/remote connections, camera/speech, diagnostics and data/deletion controls. It states that only site-language preference is stored locally by the website, while the host may process standard server logs. `SecurityPage.astro` describes Keychain, known-host checking, AI permissions and the Mac-only loopback MCP server and warns about authenticated clients invoking exposed tools; marketing disclosure is not a substitute for runtime security tests. iOS App Settings links to the public privacy and support pages. Do not claim native paywall privacy/EULA links from source: any legal links in the remote paywall are dashboard-owned and must be checked there. For public-copy changes run `cd com.akinokaede.termind && npm ci && npm run build` and inspect all four language routes; catalog checks do not validate Astro content. For privacy or commerce changes, reconcile the website statement against RevenueCat configuration and SDK behavior. +[Repository guidelines](../../AGENTS.md) identify `com.akinokaede.termind/` as the independently maintained public website and assets submodule, with an Astro project at its root; [.gitmodules](../../.gitmodules) records its external repository. Native builds do not require that checkout. For website or asset work, initialize it with `git submodule update --init com.akinokaede.termind` and inspect the checked-out source before making claims about the site. + +**The submodule directory is empty in this checkout.** This repair therefore does not verify current homepage composition, FAQ wording, promotions or redemption offers, public prices, privacy/security disclosures, locale routes or fallback behavior, browser language storage, canonical links, or the screenshot/image optimization pipeline. Previous descriptions of those surfaces are not evidence of the current public site. Native entitlement configuration and tests establish app behavior, not website promises. + +Once source is available, follow the documented website workflow (`cd com.akinokaede.termind && npm ci && npm run build`) and inspect the actual routes, translations, images and disclosures. The workflow is documented in the parent repository; the submodule's build scripts and output have not been inspected here. Verify the deployed public site separately when assessing what users currently see. Do not infer website language behavior from `AppLanguage`, or legal disclosures from SDK configuration. Any privacy/EULA links and visible legal copy in the remote native paywall must also be checked in RevenueCat rather than inferred from the native wrappers. ## Focused change checklist -- Entitlements: update resolver, feature gates and app reconciliation together; run `RevenueCatCommerceTests`, `ProPaywallStateTests`, `ProAccessTests`, Metrics tests and platform-specific gate tests. Check live RevenueCat entitlement configuration, account migration, remote paywall and sandbox purchases separately from the local StoreKit metadata fixture. -- Language/copy: run `Scripts/normalize-string-catalogs.py --write` after app catalog edits, `Scripts/check-appstrings.sh`, `Scripts/check-cjk-localization.py`, `PresentationCopyTests` and `AppLanguageTests`; review remote RevenueCat dashboard copy and actual screens separately. See [Behavioral Boundaries and Fixtures](../testing/behavioral-boundaries-and-fixtures.md). -- Public copy: compare FAQ, privacy policy and storefront disclosures with actual entitlement and sync behavior; build Astro and visually check all languages. Site-only copy and remote paywall content are not validated by native string tests. - -Public comparison and pricing pages share `src/lib/comparisons/` and `src/lib/pricing.ts`; the current public USD labels are $2.59 annually and $7.99 lifetime. These marketing values do not establish a live storefront offer. Tailscale disclosures describe the embedded node and external control/network processing; native Pro availability follows the Tailscale feature gate. +- Native entitlement policy and gates: update resolver, feature gates and app reconciliation together; run `RevenueCatCommerceTests`, `ProPaywallStateTests`, `ProAccessTests`, Metrics tests and platform-specific gate tests. Check live entitlement configuration and account migration separately from the local StoreKit metadata fixture. [RevenueCat configuration](../../Frameworks/TermindInfrastructure/Commerce/RevenueCatConfiguration.swift) and [service configuration](../../Frameworks/TermindInfrastructure/Commerce/RevenueCatProPurchaseService.swift) explain the native SDK boundary, not public-site promises. +- RevenueCat dashboard-owned paywalls and legal copy: inspect the remote layouts, visibility rules, translations, offer terms and legal destinations independently. Compare them with the native [paywall variable contract](../../Frameworks/TermindPresentation/ProPaywallState.swift), [mobile wrapper](../../TFI/Features/Commerce/MobileProView.swift), [desktop wrapper](../../TFM/Features/Commerce/ProPaywallView.swift) and [state tests](../../FrameworkTests/ProPaywallStateTests.swift). These tests verify status mapping, not remote wording or live purchases. +- Apple storefront metadata: verify live product availability, localized descriptions, prices, introductory-offer eligibility, Family Sharing and purchase/restore behavior in App Store Connect and Sandbox. Neither website prices nor the local fixture establish the offer a particular user receives. See [Storefront Commerce Release Checks](../operations/storefront-commerce-release.md). +- App catalogs: run `Scripts/normalize-string-catalogs.py --write` after app catalog edits, `Scripts/check-appstrings.sh`, `Scripts/check-cjk-localization.py`, `PresentationCopyTests` and `AppLanguageTests`; review actual screens separately. See [Behavioral Boundaries and Fixtures](../testing/behavioral-boundaries-and-fixtures.md). +- Independently authored website claims: obtain the website source and inspect the deployed site before comparing its FAQ, offers, prices, privacy/security disclosures and localized routes with native entitlement and sync behavior. Build and visually check the routes actually present in that checkout. Keep unavailable content explicitly unverified; native string tests and RevenueCat state tests do not validate it. diff --git a/openwiki/concepts/index.md b/openwiki/concepts/index.md index da0a0fa2..1795a0e9 100644 --- a/openwiki/concepts/index.md +++ b/openwiki/concepts/index.md @@ -1,7 +1,7 @@ # Files - [Agent runtime and assistant ownership](agent-runtime-and-assistant.md) - How AgentKit owns the neutral runtime while Termind assembles assistant execution, host tools, persistence, and UI across macOS and iOS. -- [Commerce, localization and product surfaces](commerce-localization-and-product-surfaces.md) - Explains RevenueCat-derived Pro access and remote paywalls, native language and copy ownership, and the separate app, widget, screenshot, and public-site product surfaces. +- [Commerce, Localization and Product Surfaces](commerce-localization-and-product-surfaces.md) - Explains RevenueCat-derived Pro access and remote paywalls, native language and copy ownership, and the separate app, widget, screenshot, and public-site product surfaces. - [Ghostty Terminal Integration](ghostty-terminal-integration.md) - Explain the boundary between Ghostty rendering and input and Termind transport, retained native surfaces, Find lifecycle, menu customization, upload policy, and appearance on macOS and iOS. - [Persistent Data, Migrations, and Secrets](persistence-and-secrets.md) - How Termind owns SwiftData and GRDB durable data, evolves compatible schemas, projects records through repositories, and keeps credentials in Keychain-backed and runtime-only boundaries. - [Remote Services and Forwarding](remote-services-and-forwarding.md) - Ownership boundaries among terminal, metrics, Agent SSH/SFTP tools, and TCP forwarding; explains when connections can be reused and which interactions are allowed. diff --git a/openwiki/operations/build-test-and-release.md b/openwiki/operations/build-test-and-release.md index 61bec5f5..36b5ddfd 100644 --- a/openwiki/operations/build-test-and-release.md +++ b/openwiki/operations/build-test-and-release.md @@ -12,14 +12,6 @@ sources: resource: repo://.swift-format - id: openwiki-source-8037e2358a2c4f9b2c722a11 resource: repo://AGENTS.md - - id: openwiki-source-6c477adbd17d240038ac8d60 - resource: repo://com.akinokaede.termind/package.json - - id: openwiki-source-fcca55af6fa67b76822099ae - resource: repo://com.akinokaede.termind/README.md - - id: openwiki-source-a6a2820ffcf779217cd84d9e - resource: repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro - - id: openwiki-source-48fb5cabce8010d9034f072c - resource: repo://com.akinokaede.termind/src/lib/marketingImages.ts - id: openwiki-source-7af97a29763d6f133e4b4851 resource: repo://fastlane/Fastfile - id: openwiki-source-cf46ee9dde9e2af41c84b62f @@ -80,10 +72,10 @@ sources: resource: repo://TFMTests/Screenshots/MacScreenshotTests.swift - id: openwiki-source-a08489338be00125d646c77e resource: repo://TFMTests/VisibleWindowTestTrait.swift -generated: { by: "pi", at: "2026-10-08T13:46:25.102Z" } +generated: { by: "openwiki/0.7.0", at: "2026-10-09T00:05:26.272Z" } verified: - - by: openwiki/0.7.1 - at: 2026-10-08T13:46:25.102Z + - by: openwiki/0.7.0 + at: 2026-10-09T00:05:26.272Z --- # Build, Test, and Release @@ -233,14 +225,14 @@ AgentKit owns its separate runtime catalog at `../AgentKit/Localizations/Localiz ## Public website validation and asset publishing -Initialize `com.akinokaede.termind` only for website/asset work. Its independent public Astro project requires Node 22.12+ and emits `dist/` at the submodule root: +Initialize `com.akinokaede.termind` only for website/asset work; native app builds do not require it. The submodule is empty in this checkout, so its README, manifest and Astro image sources cannot be inspected here. Before website or asset verification, initialize the independent project and inspect its own manifest and guidance for runtime requirements, script definitions, image handling and current routes. Do not infer a Node minimum, exact npm-script implementation, generated image formats or route inventory from the parent repository. ```sh git submodule update --init com.akinokaede.termind (cd com.akinokaede.termind && npm ci && npm run build) ``` -Use locked `npm ci` and `npm run dev` for iteration. The build performs Astro checking before generation and transforms a typed frame allowlist from `assets/device_frames` into AVIF/WebP/JPEG; never copy captures into `public/`. Visually check `/`, `/zh-hans/`, `/zh-hant/`, `/ja/`, the `/zh/` compatibility redirect and narrow layouts. Generated `dist/`, `.astro/` and `node_modules/` stay uncommitted. Commit/push reviewed assets via SSH first, then update the parent gitlink; retain the public HTTPS clone URL in `.gitmodules`. Native app builds do not depend on this checkout. +The parent repository's `AGENTS.md` supports locked `npm ci`, `npm run dev` for local Astro iteration, and `npm run build` for type-checking and production output to `com.akinokaede.termind/dist/`. These are the locally documented entrypoints, not an audit of the unavailable submodule's scripts. Web changes must pass the separate production build and visual review of English and `/zh/` routes as directed by `AGENTS.md`; confirm current route behavior and any additional locale/image checks against the initialized site's guidance. Generated `dist/`, `.astro/` and `node_modules/` stay uncommitted. Commit/push reviewed assets via SSH first, then update the parent gitlink; retain the public HTTPS clone URL in `.gitmodules`. ## AgentKit: release, bump, and re-resolve @@ -282,7 +274,7 @@ Update the upstream requirement and `Package.resolved` together, then use resolv 2. Run the affected TFM or TFI build/test using `-onlyUsePackageVersionsFromResolvedFile`; include architecture tests for boundary changes. 3. Run strict Swift format lint for Swift changes. 4. Run `Scripts/check-appstrings.sh` alongside `python3 Scripts/check-cjk-localization.py` for every commit; complete Chinese and Japanese translations, normalize changed catalogs, and run `AppLanguageTests`/`PresentationCopyTests` when their behavior changes. -5. For website changes, run `cd com.akinokaede.termind && npm ci && npm run build` and inspect English, Japanese and both Chinese routes. +5. For website changes, initialize the submodule and inspect its own manifest and guidance, then run `cd com.akinokaede.termind && npm ci && npm run build`. Visually review English and `/zh/` as required by `AGENTS.md`, plus any current routes required by the site's own guidance. 6. Keep visible-window and mobile key-window gates off routinely. For affected native UI cases, opt in with the exact flags above, disable mobile parallel testing and narrow the suite; adaptive key-window cases and Metrics Journey are not default coverage. 7. Regenerate changed native captures through scan, then matching frameit outputs and Figma layers/final JPGs; follow the asset guide's licenses, dimensions, localized visual review and SSH-first publication. 8. For AgentKit work, complete release → minimum-version bump → re-resolve and commit both dependency files. For direct Ghostty updates, align the upstream requirement and lockfile and validate both native adapters. diff --git a/openwiki/operations/index.md b/openwiki/operations/index.md index 55a33ff0..87bc34d9 100644 --- a/openwiki/operations/index.md +++ b/openwiki/operations/index.md @@ -3,6 +3,6 @@ - [Build, Test, and Release](build-test-and-release.md) - Reproducible Xcode builds and pinned dependency updates, opt-in UI and commerce test gates, and localization checks for Termind releases. - [CloudKit Release Readiness](cloudkit-release-readiness.md) - Release gates for CloudKit schema deployment, historical SwiftData store upgrades, scoped sync recovery, physical deletion and signed-device compatibility. - [Ghostty Dependency Updates](ghostty-fork-maintenance.md) - Update the direct upstream Ghostty Swift Package pin while preserving app-owned menu, input, surface and upload boundaries. -- [Marketing Assets and App Icons](marketing-assets-and-app-icons.md) - Produce localized native screenshots with fastlane scan, compose licensed device frames with frameit, update Figma App Store artwork and the Astro website, and publish the independent public asset repository safely. +- [Marketing Assets and App Icons](marketing-assets-and-app-icons.md) - Capture localized native screenshots and generate staged device frames with parent-owned tooling. Separate locally verified safety guarantees from external artwork, website and publication checks. - [Port Forwarding Benchmark Design, Results, and Reproduction](port-forwarding-benchmarks.md) - Historical forwarding measurements, workload semantics, retained transport decisions, comparison limits, and reproducible loopback commands. - [Storefront commerce release checks](storefront-commerce-release.md) - Release checklist for the local StoreKit product fixture, RevenueCat entitlement and paywall configuration, cross-platform access refresh, and Sandbox validation. diff --git a/openwiki/operations/marketing-assets-and-app-icons.md b/openwiki/operations/marketing-assets-and-app-icons.md index 4f425204..f5547bdf 100644 --- a/openwiki/operations/marketing-assets-and-app-icons.md +++ b/openwiki/operations/marketing-assets-and-app-icons.md @@ -1,37 +1,13 @@ --- type: asset-production-operations title: Marketing Assets and App Icons -description: Produce localized native screenshots with fastlane scan, compose licensed device frames with frameit, update Figma App Store artwork and the Astro website, and publish the independent public asset repository safely. +description: Capture localized native screenshots and generate staged device frames with parent-owned tooling. Separate locally verified safety guarantees from external artwork, website and publication checks. tags: [marketing, screenshots, fastlane, frameit, figma, app-store, app-icons, localization, submodules] sources: - id: openwiki-source-ed77bc20b48d193bace3dde6 resource: repo://.gitmodules - id: openwiki-source-8037e2358a2c4f9b2c722a11 resource: repo://AGENTS.md - - id: openwiki-source-9d1cdc833f68c72853be544c - resource: repo://com.akinokaede.termind/assets/device_templates/README.md - - id: openwiki-source-54a517e25bf7220eb9067177 - resource: repo://com.akinokaede.termind/assets/README.md - - id: openwiki-source-1beb83680deb027575ce860d - resource: repo://com.akinokaede.termind/assets/screenshots/en/ipad-13/06_vault.jpg - - id: openwiki-source-1567525f52f2dc52e8afcb31 - resource: repo://com.akinokaede.termind/assets/screenshots/en/iphone-6.3/01_overview.jpg - - id: openwiki-source-06f4e072229f411c6142631a - resource: repo://com.akinokaede.termind/assets/screenshots/en/iphone-6.3/06_vault.jpg - - id: openwiki-source-e59b74b9283797e61056daf9 - resource: repo://com.akinokaede.termind/assets/screenshots/en/iphone-duo/06_vault.jpg - - id: openwiki-source-191ab616f24d4d986601e4cb - resource: repo://com.akinokaede.termind/assets/screenshots/en/mac/01_three_screens.jpg - - id: openwiki-source-f1efb5f71d3031470d795428 - resource: repo://com.akinokaede.termind/public/app_icon.png - - id: openwiki-source-fcca55af6fa67b76822099ae - resource: repo://com.akinokaede.termind/README.md - - id: openwiki-source-a6a2820ffcf779217cd84d9e - resource: repo://com.akinokaede.termind/src/components/ScreenshotPicture.astro - - id: openwiki-source-48fb5cabce8010d9034f072c - resource: repo://com.akinokaede.termind/src/lib/marketingImages.ts - - id: openwiki-source-4b6325b8da6c6aee4867267a - resource: repo://com.akinokaede.termind/src/pages/index.astro - id: openwiki-source-7af97a29763d6f133e4b4851 resource: repo://fastlane/Fastfile - id: openwiki-source-aec5c30e7c4ab1864f968273 @@ -80,15 +56,17 @@ sources: resource: repo://TFMTests/Screenshots/MacScreenshotTests.swift - id: openwiki-source-7185b2e5254dcfff2e6ac796 resource: repo://TFMTests/Screenshots/ScreenshotDemoTests.swift -generated: { by: "pi", at: "2026-10-08T13:28:49.393Z" } +generated: { by: "openwiki/0.7.0", at: "2026-10-09T00:05:26.272Z" } verified: - - by: openwiki/0.7.1 - at: 2026-10-08T13:28:49.393Z + - by: openwiki/0.7.0 + at: 2026-10-09T00:05:26.272Z --- # Marketing Assets and App Icons -This is the operational home for Termind's asset workflow. Capture tooling and native fixtures belong to the application repository; the public website, captures, frames, final App Store artwork and design masters belong to the independent `com.akinokaede.termind` submodule. Native app resources must not acquire a dependency on that submodule. +This is the operational home for Termind's asset workflow. Capture tooling and native fixtures belong to the application repository; `AGENTS.md` assigns the public website and marketing/brand assets to the independent `com.akinokaede.termind` submodule. Native builds do not require that checkout. + +**Verification boundary:** at baseline `20f67cdc0b0e88115415c20af2cda7e12f51dfa6`, the available submodule directory is empty. Its asset/template READMEs, image files and website source cannot be inspected here. This is an uninitialized checkout, not evidence that those assets were removed. Paths and dimensions below describe parent tooling contracts, not an inventory of existing external files. No focus-taking captures or visual artwork approval were performed for this documentation repair. The former MockUPhone pipeline, feature-first `Marketing/` layout, `LandingPage/` project and Pro Max captures are obsolete. The current pipeline uses **fastlane `run_tests` (scan)** with hosted Swift Testing fixtures, **frameit** plus local Apple templates, locale/device-first asset paths, iPhone 18 Pro and optional Duo displays, and native 14-inch Mac Workspace captures. This is not XCUITest `snapshot` automation. @@ -106,30 +84,31 @@ Ordinary pinned native builds do not need the website/assets checkout. Default c | --- | --- | --- | | Full-resolution app captures | `com.akinokaede.termind/assets/captures///` | Replaced only by a successful validated capture batch; read-only to framing. | | Derived device PNGs | `com.akinokaede.termind/assets/device_frames///` | Reproducible from captures and local licensed templates. | -| Final Figma boards | `com.akinokaede.termind/assets/screenshots///` | Opaque RGB JPEGs with an sRGB profile, not transparent frame intermediates. | -| Brand and Pro imagery | `com.akinokaede.termind/design/brand/` and `design/paywall/` | Public handoff assets; preserve brand and third-party rights. | +| External final artwork and design masters | Submodule-owned marketing/brand assets according to `AGENTS.md` | Inspect the initialized checkout separately for actual folders, filenames, compositions and image profiles. | | Platform Icon Composer sources | `TFM/Resources/AppIcon.icon`, `TFI/Resources/AppIcon.icon` | App-owned, compiled by Xcode independently of public assets. | | Tooling, tests, Ruby lockfile | `fastlane/`, `Scripts/`, `TFMTests/Screenshots/`, `TFITests/Screenshots/`, `Gemfile.lock` | Application-owned orchestration and fixtures. | -Asset filenames use lowercase underscore-separated words. Locale directories are `en`, `zh-hans`, `zh-hant`, `ja`; lane locale options are `en`, `zh-Hans`, `zh-Hant`, `ja`. Capture/frame directories are `iphone-6.3`, `ipad-15`, `mac-14`, `iphone-duo-outer`, `iphone-duo-inner`. Command selectors remain `iphone`, `ipad`, `mac` and the two explicit Duo selectors. **App Store canvas names are a separate namespace**: `iphone-6.3`, `ipad-13`, `mac`, `iphone-duo`. +Tool-generated filenames use lowercase underscore-separated words. Locale directories are `en`, `zh-hans`, `zh-hant`, `ja`; lane locale options are `en`, `zh-Hans`, `zh-Hant`, `ja`. Capture/frame directories are `iphone-6.3`, `ipad-15`, `mac-14`, `iphone-duo-outer`, `iphone-duo-inner`. Command selectors remain `iphone`, `ipad`, `mac` and the two explicit Duo selectors. Final store canvas naming must be verified separately. -After reviewing English, Japanese and both Chinese variants, commit and push the asset repository **first**, via SSH, then commit its updated gitlink in the application repository. Keep the public HTTPS clone URL in `.gitmodules`; use an SSH push URL rather than changing that clone URL. Cloudflare Pages deploys the asset repository's `main` branch from its root. Credentials, console links, internal release records and licensed source downloads must stay out of the public repository. +Commit and push reviewed asset changes **first**, via SSH, then commit the updated gitlink in the application repository. Keep the public HTTPS clone URL in `.gitmodules`; use an SSH push URL rather than changing that clone URL. Deployment configuration is not verified by the parent repository. Keep credentials, internal release records and licensed source downloads out of public changes. ```mermaid flowchart LR - Fixtures[App-owned native fixtures] --> Scan[fastlane scan and system capture] - Scan --> Captures[Public source captures] - Captures --> Frames[frameit and local Apple templates] - Frames --> Website[Astro image allowlist] - Captures --> Figma[Figma compositions] - Frames --> Figma - Figma --> Store[Opaque sRGB App Store JPGs] - Website --> Public[Push asset repository first] - Store --> Public - Public --> Gitlink[Update application gitlink] + Fixtures[App-owned native fixtures] --> Scan[Serialized pinned scan and system capture] + Scan --> Validate[Validate scan success and native pixels] + Validate --> Captures[Back up and promote captures] + Captures --> Stage[Read-only sources copied to framing stage] + Templates[Validate explicit or default templates] --> Stage + Stage --> Frames[Render all and validate before publication] + Captures -.-> External[Separately inspect external composition and site consumption] + Frames -.-> External + External --> Review[Review external outputs and public diff] + Review --> Push[Push asset repository via SSH first] + Push --> Gitlink[Update application gitlink] ``` +The solid production stages are parent-owned tooling; dotted edges mark external consumption that requires separate inspection. -Capture success does not regenerate frames, Figma layers, final boards or the website deployment automatically. +Capture success does not regenerate downstream compositions or verify website deployment. ## Tool setup and safe preview @@ -145,7 +124,7 @@ bundle exec fastlane ios screenshots plan:true bundle exec fastlane frames plan:true ``` -`Gemfile` pins fastlane; `fastlane/Framefile.json` pins the downloaded frame asset version. frameit downloads that version on first use; the five custom templates are versioned in the asset submodule, with source notes and checksums. ImageMagick is required for masks, Mac framing and optional camera-strip padding. +`Gemfile` pins fastlane; `fastlane/Framefile.json` pins the downloaded frame asset version. frameit downloads that version on first use. The parent runner expects five custom template paths; their presence, provenance notes and checksums require inspection of the initialized asset checkout. ImageMagick is required for masks, Mac framing and optional camera-strip padding. Mac capture opens and focuses the real Termind window and moves the pointer. Run it only when desktop focus is available. Planning and framing do not open app windows. Do not enable screenshot or visible-window gates for routine verification. @@ -169,8 +148,8 @@ Environment defaults are `TERMIND_MAC_SCREENSHOT_SCENES`, `TERMIND_MAC_SCREENSHO | Mac selector | Capture filename under `/mac-14/` | Content | | --- | --- | --- | | `hosts` | `vault.png` | Vault and two demo workspaces. | -| `workspace` | `workspace.png` | Full-screen Workspace used in Overview and website imagery. | -| `workspace-window` | `workspace_window.png` | Ordinary 2360×1480 Workspace window for Mac board 02. | +| `workspace` | `workspace.png` | Full-screen Workspace; source accepted by Mac framing. | +| `workspace-window` | `workspace_window.png` | Ordinary 2360×1480 Workspace window; downstream board usage is unverified. | | `agent` | `assistant.png` | Workspace with contextual Assistant. | | `command` | `command_generator.png` | Command Generator; ordinary-size native window. | | `metrics` | `metrics_overview.png` | Metrics overview only. | @@ -183,7 +162,7 @@ A failed scan, absent scene, duplicate request or incorrect native image size bl ## Mobile devices, runtime and display posture -The capture lane requires an iOS/iPadOS **27.x** runtime. iPhone 18 Pro and iPad Pro use **27.0**; Duo uses **27.1** in the current workflow. Duo-only selections default to 27.1 and other selections to 27.0. The installed 27.1 runtime supports Duo rather than substituting an iPhone/iPad, so capture those matrices separately. The runner matches the exact simulator name **and model identifier** and verifies raw pixels; renaming a Pro Max simulator or resizing an old capture cannot satisfy it. +The capture lane requires an iOS/iPadOS **27.x** runtime. Duo-only selections default to 27.1 and other selections to 27.0; explicit runtime overrides remain supported. Installed runtime/device availability must be checked locally, and Duo displays should be captured in separate posture-specific batches. The runner matches the exact simulator name **and model identifier** and verifies raw pixels; renaming a Pro Max simulator or resizing an old capture cannot satisfy it. | Selector | Device/orientation | Native pixels | Asset directory | | --- | --- | --- | --- | @@ -238,6 +217,7 @@ sequenceDiagram Lane->>Lane: Verify every expected scene and back up originals Lane->>Assets: Promote staged captures ``` +The mobile handshake validates identity and native dimensions before acknowledging scenes; promotion follows successful scan completion and complete-set validation. The runner rediscovers the app container while waiting because XCTest can reinstall the host between locales. Each scene has a token and the whole batch a capture ID; missing acknowledgment times out the test. A direct fixture invocation **without** system-capture mode writes rendered PNGs to the host's `Documents/screenshots//-.png`, not the public capture tree. Those review renderings are not the release compositor pipeline. @@ -274,13 +254,13 @@ bundle exec fastlane frames devices:iphone-duo-inner scenes:sftp bundle exec fastlane frames devices:mac locales:en ``` -The default is 28 jobs: iPhone Assistant/SSH/Vault, iPad Metrics/SFTP/Vault, and Mac Workspace, in four locales. **Duo remains opt-in even though the current website uses Duo imagery**; explicitly refresh its outer Assistant and inner SFTP (or all five scenes when building App Store compositions). Mac frames support Workspace only; other Mac sources remain native windows for final artwork. +The default is 28 jobs: iPhone Assistant/SSH/Vault, iPad Metrics/SFTP/Vault, and Mac Workspace, in four locales. **Duo remains opt-in**; explicit Duo selectors default to all five mobile scenes. `WEBSITE_SCENES` is the parent selection policy, not proof of current site consumption. Mac frames support Workspace only. `input:` and `output:` support review directories; supply **both** to work without the submodule. `plan:true` lists jobs without importing templates or changing images. Every selected source/template size is checked before rendering. The lane stages copies, masks their screen apertures, renders all selected jobs, verifies each PNG, then publishes `//.png`. A frameit action that only logs an error and omits an output still fails publication. Validation prevents a failed render batch from replacing existing frames; per-file rename does not make the final publication loop crash-atomic. Raw captures are never masked or resized. ### Local licensed templates -The asset submodule versions the five prepared templates under `assets/device_templates/`, with source notes and checksums. Restore that checkout before framing; explicit frame-path overrides remain available. Apple and fastlane artwork remains subject to its owners’ usage terms; public access grants no additional rights. The download/preparation references below explain provenance rather than a required first-run manual import. Do not reconstruct templates from already-composed screenshots. +The parent runner defaults to five template paths under `assets/device_templates/`, with explicit frame-path overrides. The table records enforced dimensions and composition offsets, **not verified existing files or provenance**. Initialize and inspect the checkout, confirm usage rights and source/checksum records independently, or provide reviewed templates via overrides. Public access alone grants no additional rights. Download references below are unverified preparation guidance, not proof of template provenance. Do not reconstruct templates from composed screenshots. | Frame | Local template | Portrait template and opening | Result/orientation | | --- | --- | --- | --- | @@ -308,54 +288,29 @@ Override with `mac_frame:/absolute/path/to/frame.png`. The native screen fills t ### Screen masks and regeneration -Official PNGs are transparent both outside the device and inside its display. The lane extracts the enclosed screen aperture, flood-fills the exterior away, validates that the bezel encloses the screen, crops to the exact source opening and rotates the mask with landscape templates. It applies the mask only to a staged copy so rectangular capture corners and notches cannot leak outside thin bezels. Opaque screen pixels and native scale are retained. An open bezel fails validation. After mask/template changes, regenerate frames **and** replace their Figma layers and final marketing exports. +The mask algorithm expects transparency both outside the device and inside its display, separated by an opaque bezel. The lane extracts the enclosed screen aperture, flood-fills the exterior away, validates that the bezel encloses the screen, crops to the exact source opening and rotates the mask with landscape templates. It applies the mask only to a staged copy so rectangular capture corners and notches cannot leak outside thin bezels. Opaque screen pixels and native scale are retained. An open bezel fails validation. After mask/template changes, regenerate frames **and** replace their Figma layers and final marketing exports. -## Website imagery and product messaging +## External composition, website and store delivery -The Astro project lives at the **submodule root**, not `LandingPage/`. `src/lib/marketingImages.ts` imports a small typed allowlist directly from `assets/device_frames` and returns Astro image metadata. `ScreenshotPicture.astro` generates resized AVIF, WebP and JPEG renditions with a fallback background and forwards scoped style attributes to preserve component styling. Do not copy raw screenshots or frame PNGs into `public/`; use metadata-driven dimensions and inspect layout styles when aspect ratios change. +`AGENTS.md` identifies the submodule root as an independent Astro project and documents `npm run build` as type-checking and emitting `dist/`. That parent guidance does not verify current website imports, responsive Hero composition, routes, copy, image renditions or deployment settings. -Current website compositions are not interchangeable with App Store Overview boards: +Before publishing, initialize and inspect the external repository separately: -- Hero includes **Mac Workspace, Duo outer Assistant and an iPhone SSH alternative**; responsive styles control the visible composition. -- SSH uses iPhone 18 Pro; SFTP uses Duo inner landscape; Metrics uses iPad; Assistant uses Duo outer; Vault combines iPad and iPhone. Mac Workspace also appears in the desktop section. -- Product framing is now explicitly **AI-driven remote workspace**: “Your servers. Within reach.” / “远程工作,随手即达。” BYOK and user-controlled permissions lead the message, with built-in Tailscale, optional device-local Hermes Memory, and a separate Mac-only MCP section. -- Keep Command Generator's insert-without-Return distinction, free Mac multi-pane/broadcast features, and Pro boundaries consistent with app sources. Benchmark copy is a specific historical loopback measurement, not a promise of general Internet or SFTP throughput; use [Forwarding Benchmarks](port-forwarding-benchmarks.md) for its scope. +- Read its current asset and template documentation and inspect actual images. Establish board inventory, filenames, canvas sizes, opacity and embedded profiles from those files rather than capture dimensions. +- Inspect site consumers and styles to determine which frames are used and whether changed aspect ratios affect responsive layouts. Do not infer consumption from the Ruby `WEBSITE_SCENES` constant. +- Inspect any design master and handoff instructions before replacing layers or exporting. No Figma node IDs, plugin/export requirements, board geometry, fonts or locale-specific typography are verified here. +- Review all selected locales at 100% and in contact sheets. Native chrome, keyboard, clipping and focused Mac appearance need visual review beyond dimension checks. +- Check [Apple's screenshot specifications](https://developer.apple.com/help/app-store-connect/reference/app-information/screenshot-specifications/) for intended uploads. Transparent device-frame PNGs are intermediates; frame success is not store acceptance. -Formal routes are `/`, `/zh-hans/`, `/zh-hant/`, `/ja/`; `/zh/` is the Simplified Chinese compatibility redirect. Root-only language detection respects a manual locale choice. The Apple CTA uses the silhouette, not an emoji. Keep exact localized messaging with the website implementation, rather than hard-coding the former slogan as a permanent copy requirement. Brand styling uses pale surfaces, blue accents and editorial serif headings; native app UI remains a separate design boundary. - -## Figma and App Store delivery - -Before authoring, connect the Figma plugin to the intended Termind file, inspect existing pages/components/variables/styles/fonts, and revalidate node IDs. Do not reuse old IDs or claim a live Figma inspection without performing it. Reuse the existing design system, author/review English first, then Japanese and both Chinese locales. Preserve native product imagery rather than fabricating missing UI. - -The checked-in delivery is **96 boards**: four locales × four platforms × six. Review by the actual current asset tree, not the obsolete 54-board/6.5-inch checklist. - -| Output folder | Final canvas | Boards 02–06 | -| --- | --- | --- | -| `mac` | 2880×1800 | Workspace, Metrics, Assistant, Vault, Command Generator. | -| `iphone-6.3` | 1206×2622 | SSH, SFTP, Metrics, Assistant, Vault. | -| `ipad-13` | 2752×2064 | SSH, SFTP, Metrics, Assistant, Vault. | -| `iphone-duo` | 2853×2007 | SSH, SFTP, Metrics, Assistant, Vault. | - -Use **`01_overview.jpg` for iPhone artwork**; Mac, iPad and Duo retain `01_three_screens.jpg`. Preserve the current platform-specific export names rather than reintroducing the old iPhone filename. Replace screenshot layers without changing their intended geometry, copy, shared shadows or stacking order. Downstream App Store artwork does not regenerate merely because a capture changed. - -- **Mac 02–06:** native windows in all four languages; no laptop frame or additional fake titlebar. Mac/iPad 01 retain the three-device composition. -- **iPhone 01:** two devices with aligned bottom edges. iPhone Assistant is fully visible in the right foreground; Mac Workspace is enlarged behind it with compact overlap. The Mac extends left beyond the clipping Product imagery frame, intentionally showing only part of the laptop. **No iPad** appears. -- **Duo:** the `App Store iPhone Duo` Figma page has six landscape boards per locale. SSH/SFTP/Assistant use the inner display; Metrics/Vault use the outer. Overview combines Mac Workspace, Duo inner SFTP and Duo outer Vault, with no iPad. Its platform label is “FLEXIBLE” / “灵活变换” / “靈活變換”. This board's inner Assistant is distinct from the website's outer Assistant. -- Whenever sources change, also replace mobile layers in any Overview compositions where they appear, not only their standalone feature board. - -Transparent frame PNGs are intermediate design assets, not App Store uploads. Check [Apple's screenshot specifications](https://developer.apple.com/help/app-store-connect/reference/app-information/screenshot-specifications/) for the selected current device/canvas. Export at 1× as opaque, high-quality **RGB JPEGs with an embedded sRGB ICC profile**. In Figwright, use `save_screenshots` with `format: "JPG"`, `scale: 1`; `get_screenshot` is only size-capped review. If adding a missing profile, avoid recompression and verify decoded RGB equality. Keep helper exports, manifests, previews, temporary PNGs and `.DS_Store` out of delivery. - -Review each board at 100%, plus locale/platform contact sheets. Verify changed image bytes, Chinese terminology/fonts, unchanged layer geometry and clipping, native chrome, software keyboard, Mac focused traffic lights and shadows. Correct dimensions alone are not visual approval or proof that App Store accepts a future upload. - -Additional store surfaces are the shared `header/header.png` (3840×1646) and localized `search_results//search_results.png` (3840×2560), exported as opaque RGB PNGs with embedded sRGB profiles. Japanese artwork uses upright Hiragino Sans; Mac Command Generator headlines use two vertical columns read right-to-left with punctuation preserved. +This page makes no current claim about a 96-board inventory, Overview filenames, header/search artwork, Hero device selection, public icon contents or template checksums. After capture/frame changes, downstream composition and site consumption require intentional review; tooling does not automatically publish them. ## Brand, layered app icons and Pro handoff -The master brand mark is `com.akinokaede.termind/design/brand/termind.svg`; website variants live in `public/brand_mark.svg` and `public/favicon.svg`. Preserve transparent backgrounds, white window fills, gray outlines and the blue terminal chevron without adding an app-icon mask. +External brand masters and website variants must be inspected in the initialized submodule before editing; their contents and styling are not verifiable here. Platform `AppIcon.icon` documents remain app-owned and selected as `AppIcon` by Xcode. Their SVG groups are Terminal, FrontWindow, MiddleWindow, BackWindow; preserve order, shared-square platform declaration, lighting, disabled glass/specular/translucency, no Terminal shadow and the subtle 0.08 neutral window shadows. Icon Composer/Xcode own platform padding, masks and compatibility renditions. Do not introduce another flattened appiconset or manually generated size matrix. Build both platform sources with pinned dependencies; TestFlight processing is a separate release check, and a temporary macOS bundle identifier can bypass local icon cache during manual review. -Export the website's **separate** icon rendition from the Mac source: +A separate website rendition can be exported from the Mac source to an initialized, reviewed external checkout. The following is a manual export example, not verification that `public/app_icon.png` exists or matches either native source: ```sh "/Applications/Xcode.app/Contents/Applications/Icon Composer.app/Contents/Executables/ictool" \ @@ -390,27 +345,14 @@ git diff --check The Ruby regression suite covers absent-submodule fail-before-write behavior, external review paths, selector validation, pinned scan configuration, native-device rejection, capture failures/backup hashes, camera-strip padding, container reinstalls, Duo display selection, native-scale composition, aperture masks and all-render-before-publish failure handling. Native fixtures and Figma/website rendering still need their own opt-in/manual validation; this guide does not claim a fresh capture or visual approval. -For website work: +The Ruby suite uses temporary repositories, mocked scan/system commands and synthetic PNGs/templates. Its failure-propagation, byte-preservation and mask-pixel checks establish orchestration behavior, not correctness of real Apple templates, final artwork or the live site. Neighboring native fixtures enforce focused-window and software-keyboard conditions only when explicitly enabled. The suite was inspected, not executed, for this repair. + +For website work after initialization: ```sh (cd com.akinokaede.termind && npm ci && npm run build) ``` -Check English, Japanese and both Chinese routes, `/zh/` redirects, desktop/narrow layouts, focus and reduced motion, as well as changed images. Node.js 22.12+ is the documented site prerequisite; the build performs Astro checking before emitting `dist/`. - -For App Store delivery: - -```sh -asset_root=com.akinokaede.termind/assets/screenshots -test "$(find "$asset_root" -type f -name '*.jpg' | wc -l | tr -d ' ')" = 96 -test -z "$(find "$asset_root" -type f ! -name '*.jpg' -print -quit)" -for platform in mac iphone-6.3 ipad-13 iphone-duo; do - find "$asset_root" -path "*/$platform/*.jpg" -print0 \ - | xargs -0 magick identify -format '%wx%h %[colorspace] %[channels] opaque=%[opaque]\n' \ - | sort | uniq -c -done -``` - -Expect 24 images at each platform's canvas size. Check actual embedded profiles, not merely the colorspace label; counts are a current delivery inventory, not an app correctness test. Recount after intentionally adding/removing a platform. Preserve per-run failure output and back up originals; do not alter unrelated app assertions or production behavior to satisfy marketing fixtures. +Confirm prerequisites, actual routes, redirects, responsive layouts and deployment settings from the external checkout before publication. For store delivery, derive an inventory from the inspected files and intended upload requirements rather than asserting a fixed board count. Check embedded profiles, not merely colorspace labels. Preserve per-run failure output and back up originals; do not alter unrelated assertions or production behavior to satisfy marketing fixtures. See [Supporting Systems](../architecture/supporting-system-directories.md) for repository boundaries, [Commerce and Product Surfaces](../concepts/commerce-localization-and-product-surfaces.md) for runtime/copy ownership, [Storefront Commerce Release Checks](storefront-commerce-release.md) for store validation, and [Build, Test, and Release](build-test-and-release.md) for ordinary application gates. diff --git a/openwiki/operations/storefront-commerce-release.md b/openwiki/operations/storefront-commerce-release.md index fbe3f1de..a5525848 100644 --- a/openwiki/operations/storefront-commerce-release.md +++ b/openwiki/operations/storefront-commerce-release.md @@ -6,12 +6,8 @@ tags: [app-store, storekit, revenuecat, commerce, subscriptions, localization, r sources: - id: openwiki-source-8037e2358a2c4f9b2c722a11 resource: repo://AGENTS.md - - id: openwiki-source-54a517e25bf7220eb9067177 - resource: repo://com.akinokaede.termind/assets/README.md - - id: openwiki-source-1567525f52f2dc52e8afcb31 - resource: repo://com.akinokaede.termind/assets/screenshots/en/iphone-6.3/01_overview.jpg - - id: openwiki-source-191ab616f24d4d986601e4cb - resource: repo://com.akinokaede.termind/assets/screenshots/en/mac/01_three_screens.jpg + - id: openwiki-source-cf46ee9dde9e2af41c84b62f + resource: repo://fastlane/lib/screenshots.rb - id: openwiki-source-b37c974aaea12bd08606d67d resource: repo://Frameworks/TermindDomain/Commerce/ProAccessTypes.swift - id: openwiki-source-3aa42bdd0f8eaf866f06599f @@ -60,10 +56,10 @@ sources: resource: repo://TFM/Info.plist - id: openwiki-source-f5ab2303a67ae18cbe2f59f2 resource: repo://TFM/TFM.entitlements -generated: { by: "pi", at: "2026-10-08T13:28:49.393Z" } +generated: { by: "openwiki/0.7.0", at: "2026-10-09T00:05:26.272Z" } verified: - - by: openwiki/0.7.1 - at: 2026-10-08T13:28:49.393Z + - by: openwiki/0.7.0 + at: 2026-10-09T00:05:26.272Z --- # Storefront commerce release checks @@ -144,5 +140,5 @@ Both wrappers refuse purchase initiation if access already exists, mark operatio 1. Reconcile product IDs, types, group, Family Sharing, introductory eligibility and grace settings in App Store Connect **and** entitlement-to-product mapping, offering/paywall rules and localized disclosure in RevenueCat. Test new versus used-offer accounts, trial-to-paid renewal, cancellation through expiry, billing retry with and without grace, refunds, Family Sharing and lifetime restoration across Mac, iPhone and iPad. Record Sandbox results separately from the fixture and production configuration review. 2. Run the default shared/macOS tests as described in [Build, validation, localization and dependency release operations](build-test-and-release.md). `FrameworkTests/RevenueCatCommerceTests.swift` tests key validation, configured-entitlement resolution, expiration/grace/refund/verification, completion, stream updates, refresh races and failure recovery using decoded CustomerInfo and fake services. `FrameworkTests/ProPaywallStateTests.swift` tests dashboard variable mapping; `TFMTests/ProAccessTests.swift` tests gate semantics. There is no current `ProOfferPresentationTests`, `ProPaywallPresentationTests`, `TFMTests/ProPaywallRenderingTests` or `TFITests/ProPaywallRenderingTests` to validate remote paywall rendering. Check both native remote paywalls visually with live Sandbox metadata and dynamic type; unit and fixture tests do not cover a real SDK purchase, restore or the dashboard layout. -3. Check final localized **storefront imagery** separately from the paywall. The independent public submodule's `assets/screenshots/{en,zh-hans,zh-hant,ja}` contains six JPG boards per `mac`, `iphone-6.3`, `ipad-13` and `iphone-duo` set (96 total), at 2880×1800, 1206×2622, 2752×2064 and 2853×2007 respectively. iPhone Overview is `01_overview.jpg`; other platforms retain `01_three_screens.jpg`. Review language, composition, opaque RGB/sRGB profile, platform promises and offer claims against current App Store requirements before upload. These final Figma boards are separate from native captures and frames used by the website, and dimensions alone do not prove upload acceptance. See [Marketing Assets and App Icons](marketing-assets-and-app-icons.md) for native scan/frameit, template rights, composition/export and SSH-first publication. +3. Check final localized **storefront imagery** separately from the paywall. Initialize the independent website/assets checkout with `git submodule update --init com.akinokaede.termind`, then read its current asset documentation and delivery contract and inspect the actual localized files. The checkout available for this repair is empty, so no current board count, filenames, final canvas dimensions or image profiles are verified here. Establish the release inventory from the inspected checkout; verify locale coverage, filenames, canvas sizes, opacity and embedded RGB/sRGB profiles against its current delivery contract and intended uploads. Review language, composition, platform promises and offer claims against the native app and current App Store requirements, then confirm acceptance for the intended App Store upload slots. Parent screenshot-tool dimensions describe native capture inputs—not proof of final board dimensions or upload acceptance—and captures/device frames are not final storefront artwork. See [Marketing Assets and App Icons](marketing-assets-and-app-icons.md) for checkout inspection, capture/framing, composition/export review and SSH-first publication; do not substitute a historical inventory for that release review. 4. Keep evidence separate: the StoreKit fixture verifies catalog *shape*; resolver tests verify local policy; signed-build checks verify credentials/capabilities; Sandbox and dashboard checks verify actual product delivery, eligibility, purchase, restore, legal copy, accessibility and Family Sharing. Coordinate changed app strings, website claims and imagery with remote paywall copy without silently changing product IDs or entitlement mapping. diff --git a/openwiki/quickstart.md b/openwiki/quickstart.md index fe6a1917..002d46e6 100644 --- a/openwiki/quickstart.md +++ b/openwiki/quickstart.md @@ -8,12 +8,12 @@ sources: resource: repo://.gitmodules - id: openwiki-source-8037e2358a2c4f9b2c722a11 resource: repo://AGENTS.md - - id: openwiki-source-54a517e25bf7220eb9067177 - resource: repo://com.akinokaede.termind/assets/README.md - - id: openwiki-source-fcca55af6fa67b76822099ae - resource: repo://com.akinokaede.termind/README.md - id: openwiki-source-7af97a29763d6f133e4b4851 resource: repo://fastlane/Fastfile + - id: openwiki-source-4c22145572a82f1dd48f37e0 + resource: repo://fastlane/lib/screenshot_frames.rb + - id: openwiki-source-cf46ee9dde9e2af41c84b62f + resource: repo://fastlane/lib/screenshots.rb - id: openwiki-source-1635d0be12e44ef9134ffabc resource: repo://Frameworks/TermindApplication/Connections/ConnectionJourney.swift - id: openwiki-source-9b6177e37e7dd97d0cb1adee @@ -116,10 +116,10 @@ sources: resource: repo://TFMTests/VisibleWindowTestTrait.swift - id: openwiki-source-402244fee941f965f41388e4 resource: repo://TFMTests/WebAuthnSSHTests.swift -generated: { by: "pi", at: "2026-10-08T13:46:25.102Z" } +generated: { by: "openwiki/0.7.0", at: "2026-10-09T00:05:26.272Z" } verified: - - by: openwiki/0.7.1 - at: 2026-10-08T13:46:25.102Z + - by: openwiki/0.7.0 + at: 2026-10-09T00:05:26.272Z --- # Termind Engineering Quickstart @@ -161,8 +161,9 @@ Termind is one Xcode project with native `TFM` (macOS) and `TFI` (iPhone/iPad) a | Assistant turns, approvals, host tools, skills, memory | [Assistant and Agent Runtime](concepts/agent-runtime-and-assistant.md); target preparation, cancellation, persistence, tools or memory tests. | | SwiftData, secrets, migrations, settings, CloudKit | [Persistent Data, Migrations, and Secrets](concepts/persistence-and-secrets.md), [Settings and Cloud Sync](workflows/settings-and-cloud-sync.md), and [CloudKit Release Readiness](operations/cloudkit-release-readiness.md). Select repository/migration tests or `CloudSyncLifecycleTests`, `CloudSyncSafetyTests` and coordinator tests for sync changes. | | MCP server, external upload/download, stdio bridge | [MCP Server, Transfers, and Stdio Bridge](integrations/mcp-server-and-bridge.md); run token, server-session, transfer or bridge tests. | -| Commerce, localized copy, widgets, screenshots, website | [Commerce, Localization, and Product Surfaces](concepts/commerce-localization-and-product-surfaces.md), [Storefront Commerce Release Checks](operations/storefront-commerce-release.md), [Marketing Assets and App Icons](operations/marketing-assets-and-app-icons.md), and [Build, Test, and Release](operations/build-test-and-release.md). Choose bilingual catalog, app/language, screenshot, StoreKit or website checks. | -| **Asset production, scan capture, frameit, Figma and App Store exports** | [Marketing Assets and App Icons](operations/marketing-assets-and-app-icons.md) is the canonical workflow: exact native iPhone Pro/Duo/iPad/Mac pixels and postures, licensed frame templates/masks, 96 four-platform JPG boards, current website compositions and SSH-first submodule publication. Use `plan:true` and Ruby checks without opening app windows. | +| Commerce, localized copy, widgets, website | [Commerce, Localization, and Product Surfaces](concepts/commerce-localization-and-product-surfaces.md) for native ownership and copy; [Build, Test, and Release](operations/build-test-and-release.md) for local validation. Inspect the website's own source before web changes; native catalog and commerce tests do not verify external copy or the deployed site. | +| **Asset capture, framing, app icons and artwork review** | [Marketing Assets and App Icons](operations/marketing-assets-and-app-icons.md) owns capture/framing and downstream review. Start with `plan:true` and focused Ruby checks without opening app windows. Tooling dimensions and frame selectors are not evidence of current website composition, template licensing or final store-board inventory; inspect the initialized asset checkout before composition/export changes. | +| **Live commerce delivery and storefront imagery** | [Storefront Commerce Release Checks](operations/storefront-commerce-release.md) for RevenueCat dashboard, App Store Connect and Sandbox checks, plus review of actual final localized artwork. Local policy tests, manual StoreKit fixtures and native captures do not prove live offers, purchase/restore behavior, remote paywall copy or upload acceptance. | | Deterministic fixture or test seam | [Behavioral Tests and Fixtures](testing/behavioral-boundaries-and-fixtures.md); run the narrow behavioral regression before the affected target suite. | ## 2. Preserve the changed boundary @@ -220,8 +221,8 @@ TEST_RUNNER_TERMIND_MOBILE_UI_TESTS=1 xcodebuild -project Termind.xcodeproj -sch ### Copy, web, and release checks - Define app copy in shared `TermindPresentation/Strings`; new/changed English text needs finished `zh-Hans`, `zh-Hant` and `ja` translations in `Frameworks/Resources/Localizable.xcstrings`. Catalogs are manually managed: after edits run `Scripts/normalize-string-catalogs.py --write`, `Scripts/check-appstrings.sh`, and `python3 Scripts/check-cjk-localization.py`. Run the CJK check even without intended copy changes; use `AppLanguageTests` for language behavior. -- Website/asset work: initialize `com.akinokaede.termind` only when needed; `(cd com.akinokaede.termind && npm ci && npm run build)`, then inspect `/`, `/zh-hans/`, `/zh-hant/`, `/ja/` and the `/zh/` redirect. Source assets live in the independent submodule; commit/push reviewed assets via SSH before updating the parent gitlink, keeping the public HTTPS clone URL. -- Screenshot tooling stays app-owned: fastlane scan captures native sources, frameit composes staged copies with licensed templates, and Figma final artwork/website frames are distinct derived deliverables. Do not invoke capture just to validate documentation. +- **Website/asset boundary:** [AGENTS.md](../AGENTS.md) identifies `com.akinokaede.termind/` as an independent Astro website and assets submodule; [.gitmodules](../.gitmodules) records its public HTTPS clone URL. Native app builds do not need it. Initialize it only for website or asset work with `git submodule update --init com.akinokaede.termind`, then inspect its own source, asset documentation and consumers before changing them. The directory is empty in this checkout, so current routes, redirects, website compositions, template licenses and final artwork inventories are unverified—not evidence of deletion. The parent-documented `(cd com.akinokaede.termind && npm ci && npm run build)` workflow is a starting point, not proof of the external build scripts or deployed site. Verify the routes and localized surfaces actually present in that source and the deployed site separately. Commit/push reviewed asset changes via SSH before updating the parent gitlink; keep the public HTTPS clone URL. +- **Capture versus delivery:** app-owned fastlane scan drives native fixtures; framing works on staged copies and defaults to asset-submodule paths. Use `plan:true` and the marketing guide's focused Ruby checks for quiet orchestration validation, not capture merely to validate documentation. Captures and device frames are intermediates, not verified final Figma/store artwork or website composition. Inspect the external checkout and delivery requirements for downstream edits; use the storefront guide for dashboard, App Store Connect and Sandbox verification. Local fixtures and policy tests do not establish live products, trial eligibility, purchase/restore behavior or remote paywall copy. - Before submitting, inspect the diff for secrets, generated artifacts, cross-layer imports and accidental `Package.resolved` churn. Use [Build, Test, and Release](operations/build-test-and-release.md) and the routed operations pages for CloudKit deployment, StoreKit/Sandbox validation, marketing assets and [forwarding benchmark measurement](operations/port-forwarding-benchmarks.md). Former StoreKit trial/catalog test files are removed; live purchases require Sandbox validation. ### Data reminders