@kubohiroya/turbowarp-extension-data-editor 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +9 -4
- package/README.md +7 -4
- package/dist/build-info.json +3 -3
- package/dist/descendants.js +1 -0
- package/dist/preview.d.ts +3 -0
- package/dist/preview.js +100 -0
- package/dist/registry.d.ts +3 -0
- package/dist/registry.js +38 -9
- package/dist/rjsf.d.ts +2 -1
- package/dist/rjsf.js +10 -0
- package/dist/session.d.ts +1 -0
- package/dist/session.js +6 -0
- package/dist/turbowarp/bridge.js +42 -1
- package/dist/turbowarp/fixed-fields.d.ts +1 -1
- package/dist/turbowarp/fixed-fields.js +7 -2
- package/dist/turbowarp/icon.d.ts +3 -1
- package/dist/turbowarp/icon.js +5 -1
- package/dist/turbowarp.d.ts +2 -0
- package/dist/types.d.ts +8 -0
- package/dist/view.js +1 -0
- package/dist/webpack4/index.js +1 -1
- package/dist/webpack4/metafile.json +40 -27
- package/dist/webpack4/rjsf.js +13 -1
- package/dist/webpack4/rjsf.js.map +2 -2
- package/dist/webpack4/{shared-QIOZ73LT.js → shared-FW4MRLXW.js} +148 -8
- package/dist/webpack4/shared-FW4MRLXW.js.map +7 -0
- package/dist/webpack4/turbowarp.js +55 -5
- package/dist/webpack4/turbowarp.js.map +2 -2
- package/docs/README.md +3 -3
- package/docs/block-editor-descendants.md +1 -1
- package/docs/block-editor-e2e.md +6 -122
- package/docs/block-editor.md +1 -1
- package/docs/block-preview.md +45 -0
- package/docs/ci-success-gate.md +9 -29
- package/docs/fixed-input-contracts.md +3 -1
- package/docs/github-pages.md +21 -57
- package/docs/package-distribution.md +3 -3
- package/docs/shared-extension-security.ja.md +6 -6
- package/package.json +7 -6
- package/dist/webpack4/shared-QIOZ73LT.js.map +0 -7
package/docs/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# ドキュメント一覧
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本リポジトリはライブラリAPIとホスト接続の文書を管理します。統合Editorのビルド・E2E・配信手順は下流の[TurboWarp-Plus-Editor](https://github.com/kubohiroya/turbowarp-plus-editor)で管理します。
|
|
4
4
|
|
|
5
5
|
## 利用・GUI接続・公開
|
|
6
6
|
|
|
7
7
|
- [GUIの起動・専用編集・制約](block-editor.md)
|
|
8
8
|
- [子孫ブロックの一括編集](block-editor-descendants.md)
|
|
9
|
-
- [GitHub Pages
|
|
9
|
+
- [GitHub Pages廃止とTurboWarp-Plus-Editorへの移管](github-pages.md)
|
|
10
10
|
- [専用エディターと.sb3の継続E2E・CI](block-editor-e2e.md)
|
|
11
11
|
|
|
12
|
-
GUI
|
|
12
|
+
GUI接続ガイドの `src/` とホスト接続用コマンドはscratch-guiのパスです。共通API用コマンドは本リポジトリ、統合E2Eと配信コマンドはTurboWarp-Plus-Editorで実行します。通常のライブラリ検証に隣接GUI checkoutは不要です。
|
|
13
13
|
|
|
14
14
|
## 共通APIとアダプター
|
|
15
15
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
対象は [scratch-gui Issue #2](https://github.com/kubohiroya/scratch-gui/issues/2)。
|
|
6
6
|
共通基盤の[階層セッションAPI](descendants.md)へ接続します。
|
|
7
|
-
|
|
7
|
+
GUIは共通基盤の依存版を固定し、統合配信の固定ソースとE2EはTurboWarp-Plus-Editorで管理します。配布物の出典には共通基盤の実SHAを使います。
|
|
8
8
|
この文書の `src/` とGUI用コマンドはscratch-guiを基準とします。
|
|
9
9
|
|
|
10
10
|
## 起動と切戻し
|
package/docs/block-editor-e2e.md
CHANGED
|
@@ -1,129 +1,13 @@
|
|
|
1
|
-
# 専用エディターと
|
|
1
|
+
# 専用エディターとSB3の統合E2E
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
GUIを起動する統合E2Eと配信前後の確認は、下流の [TurboWarp-Plus-Editor](https://github.com/kubohiroya/turbowarp-plus-editor) へ移管します。現在の実行コマンド・固定ソース・対応ブラウザー・証跡の保存先は同リポジトリの手順を参照してください。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
本ライブラリでは `pnpm typecheck` と `pnpm test` でAPI・標準フォーム・互換配布物を検証します。GUI checkoutや公開Editorの稼働を必要としません。
|
|
6
|
+
単体のレイアウト用ブラウザfixtureはライブラリ検証として維持します。
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
本リポジトリの旧Pagesは廃止します。提供元の責務と移行DoDは [Pages廃止と移管](github-pages.md) を参照してください。
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
```sh
|
|
12
|
-
pnpm install --frozen-lockfile
|
|
13
|
-
pnpm build
|
|
14
|
-
pnpm exec playwright install --with-deps chromium
|
|
15
|
-
cd ../scratch-gui
|
|
16
|
-
npm ci --ignore-scripts --no-audit --no-fund
|
|
17
|
-
node scripts/prepublish.mjs
|
|
18
|
-
cd ../turbowarp-extension-data-editor
|
|
19
|
-
E2E_GUI_ROOT=/absolute/path/scratch-gui node scripts/site/build.mjs
|
|
20
|
-
E2E_GUI_ROOT=/absolute/path/scratch-gui E2E_PATH_PREFIX=/turbowarp-extension-data-editor/ pnpm test:e2e:block-editor
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
`E2E_GUI_ROOT` はローカルbuildを配信するGUI checkoutの絶対パス。未指定・無効なパスは起動失敗にする。外部URLの検証には不要。レポートは呼出し元のcwdによらず共通リポジトリ配下へ保存する(公開版選択/配信待機CLIは共通ルートで実行)。
|
|
24
|
-
|
|
25
|
-
対象ソース・固定依存と一致するビルドがあれば、E2Eだけを再実行できる。テスト専用HTTPサーバーは `127.0.0.1:8732/turbowarp-extension-data-editor/`(E2E_PATH_PREFIXで指定) で起動し、終了時に停止する。別ポートは `E2E_PORT=8733` で指定する。他のサーバーは流用しない。
|
|
26
|
-
|
|
27
|
-
```sh
|
|
28
|
-
E2E_GUI_ROOT=/absolute/path/scratch-gui pnpm test:e2e:block-editor --project=chromium-file-input
|
|
29
|
-
E2E_GUI_ROOT=/absolute/path/scratch-gui pnpm test:e2e:block-editor --project=chromium-project-url
|
|
30
|
-
pnpm test:e2e:infrastructure
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## 検証経路
|
|
34
|
-
|
|
35
|
-
| 構成 | 再読込経路 | 合格が示す範囲 |
|
|
36
|
-
| --- | --- | --- |
|
|
37
|
-
| `chromium-file-input` | 標準メニュー → file input/filechooser | Android user agentでアプリが選ぶ既存fallback。実Android端末やOS pickerの検証ではない。 |
|
|
38
|
-
| `chromium-project-url` | 標準 `project_url` | ダウンロードした同じsb3バイト列をdata URLで新しいコンテキストへ渡す。 |
|
|
39
|
-
| `chrome-macos-native` | 標準メニュー → File System Access API → macOS「開く」 | テスト専用のローカルGoogle ChromeとOSダイアログを操作する。実ファイルを選択し、復元されたフォームまで検証する。 |
|
|
40
|
-
|
|
41
|
-
通常実行は既存2シナリオ×2構成の4件と、`chromium-project-url`のみの明色/暗色2件、計6件。opt-in起動、duration=0/61・label空欄の保存抑止、下書きの分離、日本語・引用符・`&`を含む値の保存、再起動、キャンセルを確認する。標準ファイルメニューからダウンロードしたsb3のZIP/CRC、`project.json`、text shadowの値、編集セッション情報の非混入を検査する。その同じファイルを新しいコンテキストへ読み込み、通常の拡張確認を経て値・アイコン・フォームを復元し、再検証とキャンセルを確認する。別シナリオで起動フラグの既定OFFを検証する。
|
|
42
|
-
|
|
43
|
-
すべての構成で普段のChromeプロファイルを使用せず、Playwrightが作るテスト用コンテキストを使う。`showOpenFilePicker`の差し替えや無効化は行わない。
|
|
44
|
-
|
|
45
|
-
## 明色・暗色のinvalid表示
|
|
46
|
-
|
|
47
|
-
`invalid-theme.spec.cjs`は通常の`project_url`でテスト専用sb3を開き、2つの拡張について通常のセキュリティ確認を操作します。fixtureは`theme-project.cjs`に置き、配布サンプルやVMへ直接投入しません。検証用sb3は圧縮してdata URLの長さを抑え、ステージ画像も同梱します。
|
|
48
|
-
|
|
49
|
-
実際のSettingsメニューでGUIテーマを切り替え、各ケースを独立したブラウザコンテキストで実行します。メディア設定だけのテーマ切替や、テストによるエラークラス・ARIA・CSSの付与は行いません。
|
|
50
|
-
|
|
51
|
-
- 初期invalidの空文字禁止・数値範囲・列挙値・textarea/入れ子のパターン違反を確認。赤枠、テーマ別の薄い赤背景、項目別説明、`aria-invalid`と説明IDの関連づけを実DOM/computed styleで判定します。
|
|
52
|
-
- validへ修正した後は、通常の入力枠・背景への復帰、説明とinvalid状態の解除、保存ボタンの有効化を確認します。
|
|
53
|
-
- 異なる拡張の親・孫、有効な兄弟について名前・アイコン・枠線・薄い背景を確認し、修正前後を比較します。有効な入力欄が祖先のエラーに巻き込まれないことも確認します。
|
|
54
|
-
- 入力での再invalid化、フォーカス、祖先の折りたたみとエラー案内からの再展開、下書きの保持を確認します。
|
|
55
|
-
- 配列の要素数・オブジェクトのプロパティ数によるグループ全体のエラーを確認し、有効な子の入力を赤くしないことを確認します。
|
|
56
|
-
- キャンセル後に元値が保持されることと、階層フラグなしの単一フォームでも同じ項目装飾・解除が動くことを確認します。
|
|
57
|
-
|
|
58
|
-
明色の赤枠は`rgb(198, 40, 40)`、暗色は`rgb(255, 138, 138)`を期待します。色仕様を変更するときは、期待値と変更理由を対で更新します。画面全体のピクセル一致は合否判定にしません。
|
|
59
|
-
|
|
60
|
-
```sh
|
|
61
|
-
E2E_GUI_ROOT=/absolute/path/scratch-gui pnpm test:e2e:block-editor invalid-theme.spec.cjs --project=chromium-project-url
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
公開版では、上記に代えて次節の公開URL・期待GUI/core SHAを指定します。既存のファイル読込2経路でのsb3往復を再度組み合わせず、表示テストはdesktop Chromiumへ限定します。`chrome-macos-native`は従来の2ケースのみです。Firefox・Safari・実Android端末はこのテストの対象外です。
|
|
65
|
-
|
|
66
|
-
成功時にも`light-invalid.png`、`light-valid.png`、`dark-invalid.png`、`dark-valid.png`を添付します。各テーマの`*-styles.json`には期待/実配信のSHA、ブラウザ・OS、対象URL、項目の修正前後の枠線・背景・説明・ARIA、ブロック外観を記録し、失敗途中でも到達段階まで保存します。`execution.json`の配信前後照合、browser errors、失敗画面・traceと合わせて確認してください。
|
|
67
|
-
|
|
68
|
-
`summary.json`には予定/記録件数とテーマ別の成功・失敗・skip件数を出力し、GitHub summaryにもテーマとテスト名を示します。通常実行が6件で明色・暗色を各1件含むことを確認し、意図しないskip・未検出を完了扱いにしません。
|
|
69
|
-
|
|
70
|
-
公開経路は共通側のpages/site-public workflowが所有し、GUI側に公開workflowを置きません。共通mainのworkflowとrunnerを同じ完全SHAで実行します。共通側の公開workflowとrunnerのSHAを一致させます。実際のPages配信後ジョブでこの2ケースの成功と4枚・JSONのartifactを確認し、Actions URLと両SHAを共通Issue #12へ記録して公開導入を完了とします。 npm版の製品ソースSHAとE2E runnerのSHAは区別します。このテストだけを追加するために製品versionや公開`coreRevision`を書き換えず、期待coreは配信された製品の実ソースに対応させます。
|
|
71
|
-
|
|
72
|
-
表示テストだけ切り戻す場合は新spec/fixtureと呼出し参照変更を対でrevertし、直前の確認済みrunnerへ戻します。既存の配信版照合・sb3往復・既定OFFテストを維持し、恒久skipや無条件retryで失敗を隠しません。製品のフラグ・スキーマ・保存形式は変更しません。
|
|
73
|
-
|
|
74
|
-
## macOSネイティブ経路
|
|
75
|
-
|
|
76
|
-
GUIログイン中のmacOS、ローカルGoogle Chrome、Xcode Command Line Tools(Swift)を必要とする。実行元のターミナルまたはCodexに、macOS設定でアクセシビリティ権限とSystem Eventsへのオートメーション権限を許可しておく。権限・フォーカスがない場合は環境エラーとして失敗し、別経路へ迂回しない。
|
|
77
|
-
|
|
78
|
-
```sh
|
|
79
|
-
E2E_GUI_ROOT=/absolute/path/scratch-gui pnpm test:e2e:native
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
このコマンドはheaded Chromeで2シナリオを実行する。CDPでテスト用ブラウザのPIDを取得し、SwiftのAccessibility APIがそのPIDのOS「開く」ダイアログを操作する。各キーボード操作の前に最前面のPIDを照合する。同名Chromeの検索、ユーザーのプロファイル、クリップボード、デスクトップ全体のスクリーンショットは使用しない。ネイティブ操作中は他のアプリへ切り替えない。
|
|
83
|
-
|
|
84
|
-
`native-picker-operation.log` はダイアログの状態遷移のみを記録する。ファイル選択だけでは成功とせず、拡張確認・フォーム復元まで完了したときだけ `execution.json` の `nativeOSPicker` を `passed` にする。
|
|
85
|
-
|
|
86
|
-
Linux CIには対話可能なmacOSデスクトップがないため、ネイティブ経路は実行対象外(`not-run`)。運用先はGUIログイン済みのローカルmacOS端末とし、**週1回(月曜の公開版チェック後)およびファイル読込・保存関連の変更をマージする前**にこのコマンドを手動起動する。公開版を使う場合は次節のURL・期待SHAも指定する。未実行の週は未実行として扱い、他の経路の成功で代替しない。実行日・OS/Chrome版・結果と証跡の保管先をレビュー時に確認する。self-hosted runnerの登録やOSの無人操作スケジュールは作成しない。
|
|
87
|
-
|
|
88
|
-
## 公開版の確認
|
|
89
|
-
|
|
90
|
-
外部URLの実行にはGUI/coreの完全SHAを必須とする。`build-info.json`から期待値をそのまま自己採用せず、配信元コミットとPages workflowの固定coreを使う。
|
|
91
|
-
|
|
92
|
-
```sh
|
|
93
|
-
E2E_BASE_URL=https://kubohiroya.github.io/turbowarp-extension-data-editor/ \
|
|
94
|
-
E2E_EXPECT_GUI_REVISION=<GUIの40桁SHA> \
|
|
95
|
-
E2E_EXPECT_CORE_REVISION=<coreの40桁SHA> \
|
|
96
|
-
pnpm test:e2e:block-editor
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
開始前と終了後にキャッシュを避けて `build-info.json` を確認する。期待値との不一致や途中の配信切替は失敗にし、異なる版の結果を混在させない。再試行は0回。UIの表示・値・ダウンロード完了を待ち、固定sleepを成功条件にしない。
|
|
100
|
-
|
|
101
|
-
## GitHub Actions
|
|
102
|
-
|
|
103
|
-
GUIの通常CI/Pagesは共通checkoutの `.github/actions/gui-checks` を呼び出す。インストール・ビルド・対象テスト・スコープ選択・ブラウザ・証跡保存はこのactionが所有する。公開版確認の実装は共通 `.github/workflows/turbowarp-public.yml`、GUI側はトリガーと固定SHAを持つ薄い呼出しだけにする。
|
|
104
|
-
|
|
105
|
-
公開と運用は共通Issue #26で追跡します。GUIフォークの通常CIは上流構成を維持し、公開・E2E起動を置きません。
|
|
106
|
-
|
|
107
|
-
- 共通pages.ymlはmainのpush/手動実行だけを許可。固定GUIソースを取得して共通のサイト処理で一度ビルドし、公開前E2E6件を実行します。
|
|
108
|
-
- 公開には同一site SHAの通常CI全体・最新attempt成功と、固定GUI SHAの通常CI成功を要求します。公開直前にmain鮮度とGUI CIを再確認します。
|
|
109
|
-
- 公開後はGUI/core/siteの3 SHAをソースのpinから照合し、反映を最大90秒待って同じE2E6件を実行します。配信build-infoを期待値の根拠にしません。
|
|
110
|
-
- site-public.ymlは手動実行と月曜11:17 JSTの週次検証を所有します。成功した共通Pages deploymentのsite SHAからGUI/core pinsを解決し、アプリを再ビルドしません。
|
|
111
|
-
- API障害・不一致・失敗は成功へ変換せず、既存公開を保持します。旧GUIサイトの検証記録は以下の履歴として残します。
|
|
112
|
-
- 必要なGitHub権限は `contents: read` / 公開チェックの `deployments: read` と、既存deploy jobのPages公開権限のみ。Issueへの自動投稿は行わない。
|
|
113
|
-
- summaryに結果・最後の検証段階・GUI/core SHA・経路・OS picker実行有無を出力する。HTML/JSONレポート、実sb3、失敗画面・trace、console/page/networkログ、配信待機ログを成功・失敗ともartifactへ保存し、7日間保持する。
|
|
114
|
-
|
|
115
|
-
ワークフローをリポジトリへ公開する前の段階では、ローカル検証や構文検査の成功をGitHub Actions上の実行成功として扱わない。公開後に対象PRのCI、Pages配信後ジョブ、手動チェックの実行URLをIssue #12へ記録する。
|
|
116
|
-
|
|
117
|
-
## 証跡と失敗の調査
|
|
118
|
-
|
|
119
|
-
- `playwright-report/block-editor/`: HTMLレポート。`pnpm exec playwright show-report playwright-report/block-editor`。
|
|
120
|
-
- `test-results/block-editor/results.json` / `summary.json`: テスト結果と経路別の最終段階。`execution.json` 添付にGUI/core SHA・ブラウザ/OS・OS picker実行有無を記録する。
|
|
121
|
-
- `test-results/block-editor-deployment/`: 期待する配信版の選択と、配信待機中の状態。Playwrightによる出力ディレクトリ初期化から分離する。
|
|
122
|
-
- roundtripテスト: 実際の `roundtrip.sb3`、サイズ/SHA-256/保存値、復元画面。失敗時のtraceは `pnpm exec playwright show-trace <trace.zip>`。
|
|
123
|
-
- `browser-errors.json`: console error・未捕捉例外・失敗リクエスト・HTTPエラー。未捕捉例外はテストを失敗させる。既存依存VMのconsole error(`Unexpected input recieved in replaceUnsafeChars`)は記録し、ログが空であることは合格条件にしない。
|
|
124
|
-
- Issue #12の配信後6ケースの画像・実測JSONは[リポジトリ内の保存先](editor/issue-12-public-validation/README.md)にも保存済み。artifactの保存期限後の参照は、次節のmain統合コミットに固定した保存先を使う。
|
|
125
|
-
|
|
126
|
-
失敗段階、版不一致、ブラウザ起動・OS権限などの環境要因を区別して調べる。UI assertionの失敗だけで製品不具合と断定しない。再実行は原因を確認した後に手動で行い、元の失敗記録も保持する。通常の実行生成物はGit管理対象外とし、Issue #12のように検証記録として選定した証跡は出所・ハッシュとともに文書配下へ保存する。テスト用データのみを使う。
|
|
10
|
+
以下は移行前の実行結果です。当時のSHA・コマンド・URL・所有者は検証時点の記録であり、現在の起動/配信手順として使用しません。証跡ファイルと元バイト列は保持しています。
|
|
127
11
|
|
|
128
12
|
## 公開配信後の検証結果(Issue #12、2026-10-18)
|
|
129
13
|
|
package/docs/block-editor.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
基盤はPR #3で`develop`へ、YAML互換はPR #5、初版受け入れ修正はPR #6で`feat/site/github-pages`へ統合しました。
|
|
7
7
|
開発の統合先である`develop`にも、公開ブランチのYAML互換・受け入れ修正とPages配信機構を取り込んでいます。
|
|
8
8
|
初版の検証記録は当時の`fix/editor/issue-1-acceptance`とサイト用ブランチを対象にした履歴です。
|
|
9
|
-
|
|
9
|
+
GUIは共通APIの依存版を固定し、統合配信の固定ソースとE2EはTurboWarp-Plus-Editorで管理します。CI・公開版E2Eの手順は[共通E2Eガイド](block-editor-e2e.md)を参照してください。
|
|
10
10
|
ローカル受け入れ結果と公開状態は[検証記録](block-editor-acceptance.md)を参照してください。
|
|
11
11
|
Issue #2の階層編集は別の既定OFFフラグで追加しています。[階層編集の仕様と検証](block-editor-descendants.md)を参照してください。
|
|
12
12
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# ブロックのプレビュー
|
|
2
|
+
|
|
3
|
+
`Scratch.gui.blockEditors.registerPreview` は、既存フォームと同じ編集セッションにプレビューを併設するための任意APIです。APIがないホストやプレビューが登録されていないブロックの動作は変わりません。ホストは既存の起動時設定でエディター自体の有効・無効を管理します。
|
|
4
|
+
|
|
5
|
+
```js
|
|
6
|
+
const api = Scratch.gui?.blockEditors;
|
|
7
|
+
const unregister = api?.registerPreview?.({
|
|
8
|
+
extensionId: 'story',
|
|
9
|
+
opcodes: ['story_scene'],
|
|
10
|
+
mount(container, context, snapshot) {
|
|
11
|
+
// The visual and the existing form share a draft; no direct VM writes are allowed.
|
|
12
|
+
const stop = context.subscribe(() => {
|
|
13
|
+
if (context.getState().status === 'editing') {
|
|
14
|
+
updateVisual(context.getDraft());
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return () => {
|
|
18
|
+
stop();
|
|
19
|
+
releaseVisual(container);
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
hover(anchor, snapshot) {
|
|
23
|
+
const controller = new AbortController();
|
|
24
|
+
showStillPreview(anchor, snapshot, controller.signal);
|
|
25
|
+
return () => {
|
|
26
|
+
controller.abort();
|
|
27
|
+
hideStillPreview();
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`mount` と `hover` は同期的に解放関数を返します。内部で非同期処理を開始する場合、その処理のキャンセルと作成済みリソースの解放は登録側が所有します。古い処理の結果で、新しい下書きの画面や破棄済み画面を更新しないでください。
|
|
34
|
+
|
|
35
|
+
`mount` の `context` は既存フォームと共有されます。配置ドラッグなどの操作は `context.setDraft()` へ反映します。既存フォームの検証・保存パッチ・保存ボタン・Cancelが引き続き唯一の永続化経路となり、保存時の競合判定とUndo/Redoのトランザクションを維持します。プレビュー登録だけのブロックは読み取り専用であり、保存パッチを作成しません。数値やメニューの編集が必要な場合は、別途 `registerFixedInputEditor` で入力の契約を登録します。
|
|
36
|
+
|
|
37
|
+
`context.getSnapshot()` と第3引数 `snapshot` は、開始時点で取得した不変のブロック情報です。固定入力のスナップショットには元の `fixedContext` も含まれます。編集用データへ識別情報を混ぜたり、識別情報を作品データへ保存したりする必要はありません。
|
|
38
|
+
|
|
39
|
+
既存フォームの登録前にプレビューを登録することもできます。フォームが後から登録された場合、以降のセッションではフォームとプレビューを組み合わせます。プレビュー登録は同一opcodeについて1つです。解除は冪等で、元のフォームを解除しません。
|
|
40
|
+
|
|
41
|
+
TurboWarp連携はアイコンのpointer enter/leaveとfocus/blurに応じて `hover` を開始・解放します。クリックによる編集開始、対象変更、ワークスペース変更、登録変更、連携の破棄でも表示中のホバーを解放します。プレビューがあるアイコンは、子孫編集が有効でもそのブロックだけのセッションを開きます。sceneのクリックからすべての子actionのプレビュー環境を同時作成することはありません。プレビューのない既存ブロックの子孫編集は従来どおりです。
|
|
42
|
+
|
|
43
|
+
ロールバックはプレビュー登録の解除、既存のEditor有効化設定のOFF、またはこのAPIを使わない既知の配布物への復帰です。作品データの移行は不要です。
|
|
44
|
+
|
|
45
|
+
プレビュー付きの本文は、画面幅900px以上ではプレビューとフォームを横に並べます。長いフォームをスクロールしても、プレビューは列の上端に追従します。幅が狭い画面では縦並びへ戻ります。フォームがない読み取り専用プレビューは1列を使い、プレビューのないフォームの本文構造は変更しません。
|
package/docs/ci-success-gate.md
CHANGED
|
@@ -1,33 +1,13 @@
|
|
|
1
1
|
# 通常CI成功ゲート
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- ゲートはcaller自身のrepoの標準tokenを利用し、repo/head repo、workflow ID、event、branch、完全SHAを照合します。
|
|
12
|
-
- 一致する最新run番号と詳細APIの最新attemptを確認。queued/実行中は15秒間隔、全体30分上限で待機します。
|
|
13
|
-
- 失敗・cancel・timeout・skip・不完全なAPI・権限不足は拒否し、古い成功を代用しません。
|
|
14
|
-
- ゲート自身にCI起動・再実行・承認・cancel・Pages権限はありません。
|
|
15
|
-
- `normal-ci-gate-<run id>-<attempt>` のdecision.jsonとsummaryに採用SHA/run/attempt/観測時刻/理由を保存します。
|
|
16
|
-
|
|
17
|
-
公開jobはbuildとgateのsuccessに依存し、直前に共通main鮮度と固定GUI SHAのCI成功を再確認します。
|
|
18
|
-
GUI CIの読取りは `scripts/site/source.mjs` が同じ判定本体を利用します。
|
|
19
|
-
公開APIだけを使い、未完了や確認不能なら短い上限で拒否します。
|
|
20
|
-
PagesやE2E自身を通常CIの代用にせず、公開後E2E失敗と公開前の抑止を区別します。
|
|
21
|
-
同一SHA確認とdeployは原子的ではないため、観測時刻と最終鮮度確認を残します。
|
|
22
|
-
|
|
23
|
-
## 検証・ロールバック
|
|
24
|
-
|
|
25
|
-
境界テストは `node --test test/ci/*.test.mjs`、サイト入口は `node --test test/site/*.test.cjs`。
|
|
26
|
-
既存の `ci-gate-probe.yml` は読み取り専用ゲートと公開代替sentinelを検証します。
|
|
27
|
-
意図した負の対照ではgate=failure、sentinel=skipped、assert=successが期待値です。
|
|
28
|
-
実公開を故意に壊さず、隔離fixtureだけを使います。
|
|
29
|
-
rollbackは公開workflow停止、または前の検証済みサイト設定へrevertしてCI経由で再公開します。
|
|
30
|
-
確認不能を理由にgateを解除しません。[Pages運用](github-pages.md)を参照してください。
|
|
3
|
+
本リポジトリはライブラリCIと、同リポジトリのActionsに限定したゲートの検証コードを管理します。
|
|
4
|
+
TurboWarp-Plus-Editorの統合ビルド・Pages・配信前後のE2Eは下流の [kubohiroya/turbowarp-plus-editor](https://github.com/kubohiroya/turbowarp-plus-editor) が所有します。本リポジトリはGUIを取得・ビルド・配信しません。
|
|
5
|
+
|
|
6
|
+
ゲートはrepo/head repo、workflow ID、event、branch、完全SHAと最新attemptを照合し、失敗・実行中・API確認不能を成功へ変換しません。
|
|
7
|
+
ゲート自身は読み取り専用です。判定を `normal-ci-gate-<run id>-<attempt>` のdecision.jsonとsummaryへ保存します。
|
|
8
|
+
境界のローカル検証は `node --test test/ci/*.test.mjs` です。
|
|
9
|
+
|
|
10
|
+
下流GUIのbranchやPagesの観測は廃止しました。CI再実行の検証は、このリポジトリのfixture・observerの証跡と権限だけで完結します。
|
|
31
11
|
|
|
32
12
|
## 最新attemptの自動実検証
|
|
33
13
|
|
|
@@ -38,7 +18,7 @@ gh workflow run ci-gate-rerun-test.yml \
|
|
|
38
18
|
--repo kubohiroya/turbowarp-extension-data-editor --ref main
|
|
39
19
|
```
|
|
40
20
|
|
|
41
|
-
統括・fixture・observerは手動dispatchのみです。実GitHubテストをpush/PRから自動起動しません。通常CIは既存の `node --test test/ci/*.test.mjs` により、統括ロジック・fixture・誤run/attempt・権限境界・timeout等のローカルテストを実行します。変更時の通常CI
|
|
21
|
+
統括・fixture・observerは手動dispatchのみです。実GitHubテストをpush/PRから自動起動しません。通常CIは既存の `node --test test/ci/*.test.mjs` により、統括ロジック・fixture・誤run/attempt・権限境界・timeout等のローカルテストを実行します。変更時の通常CIと、必要時の手動検証で運用します。
|
|
42
22
|
|
|
43
23
|
### 確認する順序
|
|
44
24
|
|
|
@@ -72,7 +72,9 @@ GUI・commonの試験では16フラグ分類、日英・focus/keyboard、23展
|
|
|
72
72
|
|
|
73
73
|
## E2Eの対象と明示profile
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
以下のGUI統合E2Eは下流のTurboWarp-Plus-Editorへ移管しました。コマンドは同リポジトリで実行します。
|
|
76
|
+
|
|
77
|
+
`pnpm test:e2e:block-editor`は既存SOURCE経路・reload・light/darkの6件を実行する。Pagesと公開後検証もこの既定profileを使う。TurboWarp-Plus-Editorの固定ソース設定では選定した最新GUI/coreの元Git SHAを固定し、使用するnpm版・配布物hash・working-treeの区分も別に照合する。Pages公開は別の明示承認を要する。
|
|
76
78
|
|
|
77
79
|
S3-3のfixed対応GUIとcommon artifactを明示した検証先には、`pnpm test:e2e:fixed-inputs`で固定入力21件を実行する。既存6件も合わせる場合は`E2E_FIXED_INPUTS=1 pnpm test:e2e:block-editor`で27件を選択する。ローカル検証先は`E2E_GUI_ROOT`、外部検証先は`E2E_BASE_URL`と完全SHAの`E2E_EXPECT_GUI_REVISION` / `E2E_EXPECT_CORE_REVISION`で指定する。fixed profileは対応を期待する対象にだけ明示し、対象が未対応なら検査失敗とする。機能不足を実行時skipに置き換えない。
|
|
78
80
|
|
package/docs/github-pages.md
CHANGED
|
@@ -1,68 +1,32 @@
|
|
|
1
|
-
# GitHub Pages
|
|
1
|
+
# GitHub Pages提供の廃止とTurboWarp-Plus-Editorへの移管
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
本ライブラリのGitHub Pages提供は廃止します。旧URLでEditorやリダイレクトを提供しません。
|
|
4
|
+
ライブラリのnpm公開、API、単体テストは維持します。
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
統合Editorの正式名称は **TurboWarp-Plus-Editor** です。ビルド・統合E2E・GitHub Pages配信は、下流の [kubohiroya/turbowarp-plus-editor](https://github.com/kubohiroya/turbowarp-plus-editor) が所有します。
|
|
7
7
|
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- GUI
|
|
11
|
-
- `site/source.json` にGUIのrepository/完全SHAと、GUI lockfileで取得するnpm配布物のcore完全SHAを固定します。
|
|
12
|
-
- `build-info.json` の `revision` はGUI SHA、`coreRevision` は実配布物のcore SHA、`siteRevision` はサイト生成・公開を所有する共通SHAです。3つを混同しません。
|
|
13
|
-
- 移行は公開配置だけを変更し、既存npm製品版の差替えや未公開Schema機能の導入は行いません。新しい製品版へ切替えるときはGUI lockfileとcore pinを合わせます。
|
|
8
|
+
- 案内画面: https://kubohiroya.github.io/turbowarp-plus-editor/
|
|
9
|
+
- Editor: https://kubohiroya.github.io/turbowarp-plus-editor/editor.html
|
|
10
|
+
- 固定GUI/coreのソース設定・公開手順・再利用できる編集ボタン: [TurboWarp-Plus-EditorのREADME](https://github.com/kubohiroya/turbowarp-plus-editor#edit-button)
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
Pagesは静的配信のため、サーバーのAccept-Language交渉は使いません。対象の編集機能は標準で有効で、公開リンクには有効化用URLスイッチを付けません。
|
|
17
|
-
GUIのGPL LICENSEを取得したGUIソースから同梱し、GUIとcoreの公開ソースへの完全SHAリンクを残します。
|
|
12
|
+
## 責務
|
|
18
13
|
|
|
19
|
-
|
|
14
|
+
本リポジトリのCIはライブラリと互換配布物を検証します。下流GUIの取得・ビルド・配信・統合E2Eを実行しません。
|
|
15
|
+
GUIのコードはscratch-guiフォークが所有し、そのGUIにライブラリを組み込んだ静的Editorの配布をTurboWarp-Plus-Editorが担当します。
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
`site/`、`scripts/site/`、GUI統合E2E、GUI用composite action、Pages/配信後検証workflowを本リポジトリから除去します。
|
|
18
|
+
同リポジトリ内のCI再実行・ゲート検証は維持し、下流GUIやPagesの稼働を前提にしません。
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
pnpm install --frozen-lockfile
|
|
25
|
-
cd /absolute/path/scratch-gui
|
|
26
|
-
npm ci --no-audit --no-fund
|
|
27
|
-
node scripts/prepublish.mjs
|
|
28
|
-
cd /absolute/path/turbowarp-extension-data-editor
|
|
29
|
-
E2E_GUI_ROOT=/absolute/path/scratch-gui node scripts/site/build.mjs
|
|
30
|
-
```
|
|
20
|
+
## 移行の確認
|
|
31
21
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
22
|
+
1. TurboWarp-Plus-Editorのビルド・統合E2E・Pages配信と、作品URLを指定した読み込みを確認します。
|
|
23
|
+
2. README・Docs・Samplesの入口を新しい編集ボタンへ更新します。`project_url`と`lang`は新URLへ渡します。
|
|
24
|
+
3. 本リポジトリのPagesをUnpublishし、GitHub Pages設定そのものを無効化します。workflow削除だけでは既存の公開ファイルは消えません。
|
|
25
|
+
4. 旧URLがEditorを配信していないことと、新URLが固定ソースどおりの版を配信することを確認します。
|
|
35
26
|
|
|
36
|
-
##
|
|
27
|
+
## DoD・切戻し
|
|
37
28
|
|
|
38
|
-
|
|
39
|
-
GitHub PagesのsourceはActions、github-pages環境はmain branchだけを許可します。
|
|
29
|
+
DoDは、上流に下流GUIを取得するビルド/配信処理がないこと、npmライブラリ検証が成功すること、新サイトと参照先の移行、旧Pagesの停止です。
|
|
40
30
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
build前とdeploy直前に共通mainの鮮度、固定GUI SHAのdevelop push CI全体の最新attempt成功を確認します。
|
|
46
|
-
GUI CIは公開APIで読み取り、他repoへのtokenやwriteは不要です。実行中・失敗・確認不能なら公開を止めます。
|
|
47
|
-
GUI CIの確認は短い上限で失敗するため、未完了だった場合は成功後に新しい公開runを起動します。
|
|
48
|
-
さらに共通側の同一site SHAの通常CI全体成功を既存ゲートで待ち、最新attemptの失敗・実行中で古い成功を採用しません。
|
|
49
|
-
buildとCIゲートの両方が成功したときだけdeployへ進み、鮮度を再確認します。
|
|
50
|
-
公開jobだけがPages:write/id-token:writeを持ちます。最新attemptテストや公開E2Eへ渡しません。
|
|
51
|
-
|
|
52
|
-
公開前と公開後に既存E2E6件を実行します。GUI/core/siteの期待SHAはソースのpinから決め、配信された値を自己採用しません。
|
|
53
|
-
専用エディター起動・validation・保存・cancel・実sb3の書出し/再読込・明暗テーマを検証します。
|
|
54
|
-
必要時の手動公開版E2Eは共通 `site-public.yml` が起動します。定期起動は設定しません。
|
|
55
|
-
OSネイティブファイル選択は対話可能なmacOSで行う既存手順を維持し、Linux CI成功で代替しません。
|
|
56
|
-
|
|
57
|
-
## 移行とロールバック
|
|
58
|
-
|
|
59
|
-
新サイトの公開と公開版E2Eが成功してから、GUI側のサイト資材・公開workflowを撤去します。
|
|
60
|
-
`https://kubohiroya.github.io/scratch-gui/` はGUI側の別配信です。そちらの更新だけでは正規Editorのpinは変わりません。
|
|
61
|
-
Docs・Samplesからは共通リポジトリの正規Editorを参照し、GUI更新時は成功CI・公開coreの整合を確認して `site/source.json` の完全SHAを更新します。
|
|
62
|
-
旧URLから新URLへの自動redirectを実現したとは扱いません。旧URLの廃止・redirect公開は別の明示判断で行います。
|
|
63
|
-
|
|
64
|
-
新サイト不具合は共通mainのGUI/core pinを前の検証済み値へ戻し、通常CIとゲート経由で再公開します。
|
|
65
|
-
失敗時にゲートを解除しません。公開を止める場合は共通pages workflowを無効化します。
|
|
66
|
-
GUIのコード、低水準APIの能力交渉、sb3保存形式には公開配置による変更を加えません。標準ONの編集機能に有効化用URLスイッチは不要です。
|
|
67
|
-
|
|
68
|
-
GUIのgit固定security-dialog依存はprepareでdist/webpack4.cssを生成するため、GUI CIと同じ通常npm ciを使います。coreのbuild-info revision、GUI pin、成功CIの照合を維持し、配布物が未生成の状態で公開しません。
|
|
31
|
+
問題があればTurboWarp-Plus-Editor側の固定ソース設定を直前の検証済み版へ戻して再配信します。
|
|
32
|
+
本ライブラリの配信workflowや旧Pagesを復活させず、npmの既存版やSB3の保存形式を変更しません。
|
|
@@ -16,16 +16,16 @@ importと依存のキーだけを新npm名へ移し、GUIの`file:`依存を公
|
|
|
16
16
|
`pnpm build`はGit HEADの完全SHA、package名、version、repositoryを `dist/build-info.json` に記録する。
|
|
17
17
|
Node.jsでは `require('@kubohiroya/turbowarp-extension-data-editor/build-info')` で取得できる。
|
|
18
18
|
GUIのPagesビルドとE2E準備はこのSHAを使い、node_modules内にGit checkoutを要求しない。
|
|
19
|
-
CI
|
|
19
|
+
統合CIは下流のTurboWarp-Plus-Editorが所有し、公開配布物のSHAと固定ソース設定を照合する。
|
|
20
20
|
|
|
21
21
|
公開前は変更をcommitして作業ツリーが空であることを確認する。`npm pack`のprepackはビルドを実行するため、必ず公開対象のcommit上でpackする。
|
|
22
22
|
|
|
23
23
|
`0.2.2`はPR #41の編集見出し・項目操作・key-value表示の修正を配布します。
|
|
24
24
|
旧`0.2.1`のworking-tree release overlayを示す固定`gitHead` / `x-turbowarp-source`は引き継がず、cleanな公開コミットから生成する`dist/build-info.json`をソース照合に使用します。
|
|
25
|
-
GUIのmanifestとlockをnpm完全version
|
|
25
|
+
GUIのmanifestとlockをnpm完全versionへ揃えた後、TurboWarp-Plus-EditorのGUI pinと実配布物のcore revisionを更新します。
|
|
26
26
|
受け入れ基準は全共通テスト・実ScratchBlocks/VMの境界・8公開入口・tarball照合、GUIの対象テストとproduction build、公開前後のE2E成功です。
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## 初回公開の検証(移管前の履歴)
|
|
29
29
|
|
|
30
30
|
- `pnpm typecheck`、`pnpm test`、`pnpm test:e2e:infrastructure`。
|
|
31
31
|
- `npm pack`で内容を確認し、tarballをGit checkout外のconsumerへinstallする。
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
#
|
|
1
|
+
# TurboWarp-Plus-Editorの機能拡張セキュリティ
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[TurboWarp-Plus-Editor](https://kubohiroya.github.io/turbowarp-plus-editor/) と直接開く `editor.html` は、GUI標準の一括確認を使います。起動URLのスイッチと、URLを書き換える起動スクリプトは撤去しました。`project_url`・言語・hashを追加の有効化指定なしで利用できます。
|
|
4
4
|
|
|
5
5
|
共通ライブラリはプロジェクト中の拡張をまとめて確認し、すべての選択が確定するまで拡張コードを実行しません。公開rc.34のようなバンドルでは、先頭のName・ID・Description・By・License・Unsandboxedを保持して一覧に表示します。キャンセル確認の「いいえ」は選択を保持し、「はい」は読み込みを中止してEditorの初期画面へ戻ります。保存済みの選択も次回のOKを省略しません。
|
|
6
6
|
|
|
7
7
|
選択肢は、禁止アイコンの「拒否」→盾の「サンドボックスあり」→警告の「サンドボックスなし」の順です。
|
|
8
8
|
`Unsandboxed: required` を宣言する拡張では、「サンドボックスあり」を無効化し、動作しない理由を表示します。
|
|
9
|
-
|
|
9
|
+
「サンドボックスなし」には「必要」と表示します。必須の宣言は製作者の自己申告で、安全性の認定ではありません。
|
|
10
10
|
|
|
11
11
|
情報取得前や保存済み設定からの選択が後から非対応と分かった場合は、その選択を解除して選び直しを案内します。
|
|
12
|
-
|
|
12
|
+
全件がサンドボックスなしを必要とする場合、メタデータの確認後にそのモードを選択し、一括操作欄を非表示にします。一括操作を表示する場合も対応する拡張だけに適用します。
|
|
13
13
|
実行する選択の確定はメタデータ取得が完了または失敗してから行い、拒否・キャンセルの確認は引き続き利用できます。
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
回帰確認は下流のTurboWarp-Plus-Editorが所有するURL生成テストと統合E2Eで行います。日英の公開入口から`project_url`を使って実際のSB3読み込みを起動し、許可前の未実行、一覧メタデータ、低い画面のOK、明示承認、再読込、キャンセルを確認します。公開後は無改変のrc.34でも確認し、build-infoと配布SB3のSHA-256・実画面をIssueへ記録します。
|
|
16
16
|
|
|
17
|
-
切り戻しはGUIの変更と
|
|
17
|
+
切り戻しはGUIの変更とTurboWarp-Plus-Editorの固定ソース設定を既知の組み合わせへ戻して再配信します。承認を自動化せず、保存済みSB3を変更しません。
|
|
18
18
|
|
|
19
19
|
追跡: https://github.com/kubohiroya/turbowarp-extension-data-editor/issues/58
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
+
"author": {
|
|
3
|
+
"name": "Hiroya Kubo",
|
|
4
|
+
"email": "hiroya@cuc.ac.jp",
|
|
5
|
+
"url": "https://github.com/kubohiroya"
|
|
6
|
+
},
|
|
2
7
|
"name": "@kubohiroya/turbowarp-extension-data-editor",
|
|
3
|
-
"version": "0.
|
|
8
|
+
"version": "0.6.0",
|
|
4
9
|
"description": "Custom editor sessions and UI for structured data handled by TurboWarp extensions",
|
|
5
10
|
"type": "module",
|
|
6
11
|
"sideEffects": [
|
|
@@ -55,14 +60,10 @@
|
|
|
55
60
|
},
|
|
56
61
|
"packageManager": "pnpm@11.28.8",
|
|
57
62
|
"scripts": {
|
|
58
|
-
"check": "node --test test/ci/*.test.mjs &&
|
|
63
|
+
"check": "node --test test/ci/*.test.mjs && pnpm typecheck && pnpm test",
|
|
59
64
|
"typecheck": "tsc --noEmit",
|
|
60
65
|
"build": "tsc --project tsconfig.json && node scripts/copy-react-css.mjs && node scripts/build-webpack4.mjs && node scripts/write-build-info.mjs",
|
|
61
66
|
"test": "pnpm build && node --test test/*.test.mjs",
|
|
62
|
-
"test:e2e:block-editor": "playwright test --config test/e2e/turbowarp/playwright.config.cjs",
|
|
63
|
-
"test:e2e:fixed-inputs": "E2E_FIXED_INPUTS=1 playwright test --config test/e2e/turbowarp/playwright.config.cjs --project=chromium-project-url fixed-inputs.spec.cjs",
|
|
64
|
-
"test:e2e:infrastructure": "node --test test/e2e/turbowarp/infrastructure.test.cjs",
|
|
65
|
-
"test:e2e:native": "E2E_NATIVE=1 pnpm test:e2e:block-editor",
|
|
66
67
|
"prepack": "npm run build",
|
|
67
68
|
"prepare": "npm run build"
|
|
68
69
|
},
|