feat(tutorial): dnclBasics 前半 3 deck (display / variables / conditionals) (#964) - #1154
feat(tutorial): dnclBasics 前半 3 deck (display / variables / conditionals) (#964)#1154smalruby3-editor-bot[bot] wants to merge 2 commits into
Conversation
…tionals) DNCL 軸 (Phase 4, #681) の前半として dnclBasics カテゴリを新設し、3 deck を追加する。 - tutorial-tags.js に CATEGORIES.dnclBasics と dncl フィルタタグを追加 - tag-messages.js / library.jsx / locales 3 ファイルにカテゴリ・タグのラベルを追加 - categories/dncl.jsx の stub を 3 deck で実装 (setup.rubyMode='dncl' で Ruby タブを日本語モードで開く) - deck の code は Ruby のままエディタが rubyToDncl で日本語表示に変換するため、 puts(...) は括弧付きで書く (括弧なしは 表示する(...) に変換されない) - step 画像 15 枚 + サムネイル 3 枚を追加し、生成スクリプトを tools/playwright-verify/generate-dncl-basics-1-3-steps.mjs として残す - deck 構造 / locale 網羅 / ブロック変換 / DNCL 往復のユニットテストを追加し、 #932 の stub ガードテストを追従させた Refs: #681 Closes #964 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🤖 autopilot status
Linked issue #964. Maintained by autopilot (single writer); do not edit. |
|
🚀 Preview deployed: https://smalruby.jp/smalruby3-editor/topic/autopilot-964/ |
… works DNCL モードの deck が挿入していた `when_flag_clicked do ... end` は DNCL 表記を 持たない。`rubyToDncl` は識別子を素通しし、逆方向の `dnclToRuby` はそれを変数と 解釈して `@when_flag_clicked do` に戻すため、ruby-tab がキー入力ごとに再変換する (`dispatchCode`) 時点で構文エラーになり、ブロックが 1 つも生成されなくなる。 各 deck の最終ステップは「値を変えてみよう」と編集を促すので、チュートリアルの 中心動作がそのまま壊れていた。モード切替バリデータが `when_flag_clicked` を 弾いているのと同じ制約 (dncl-validation.test.js)。 - 9 つの snippet からハットを外し、トップレベルのスクリプトにする - step3 の説明を緑の旗から ▶「すべて実行」に変更 (ja / ja-Hira / en) - 効かない deck 単位の allowedBlocks を削除 (DNCL のパレットフィルタが優先され、 DNCL を抜けたときだけ変数・演算子ブロックを隠す方向に食い違う) - Ruby → DNCL → Ruby が恒等であること、ハットを含まないこと、allowedBlocks を 持たないことを回帰テストで固定 - step 画像・サムネイルを生成スクリプトごと更新し、docs に制約を明記 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
[Must] deck の snippet が ハットブロックには DNCL 表記が無い。 実際に確認した挙動( つまりブロックが 1 つも生成されず、赤エラーが出る。各 deck の最終ステップは これは既知の制約でもある。 修正内容
|
|
[Question] deck 単位の 元の // DNCL programs only need "say" (表示する) and the green-flag hat; keeping the
// palette this small matches the DNCL block filter the editor applies in DNCL mode.とあるが、実際の DNCL フィルタ(
さらに deck 定義から削除し、テストで「持たないこと」を固定した。もし将来 DNCL モードを抜けた |
|
[Question] Issue #964 の DoD「Playwright で該当 deck の起動・進行を確認」の証跡が無い(未対応 / 人間の判断に委ねる)
このレビューでは代替として、実物の 対応コストの判断(別ポートで dev server を立てるか、CI に組み込むか)は人間にお願いしたい。 |
|
[FYI]
// DNCL Basics 1-3 (issue #964). The DNCL decks are Japanese-only content, so
// the en bundle reuses the same cards.「the en bundle reuses the same cards」は [FYI]
[FYI] locale 完全性の assertion がやや遠回り
expect(`${locale}:${table[id] || ''}`.length).toBeGreaterThan(locale.length + 1);「値が空文字でない」ことを言いたいだけなら |
|
🤖 敵対的レビュー完了。指摘 6 件(Must 1 / Question 2 / FYI 3)。Must は修正済み(073c7e90b7)。Question のうち allowedBlocks は同コミットで対応済み(方針の是非のみ要確認)、Playwright 通し確認は未対応で人間の判断に委ねる。FYI 3 件はコード変更なし。lint / prettier 緑、 |
Summary
DNCL 軸(Phase 4, #681)の前半として
dnclBasicsカテゴリを新設し、3 deck を追加しました。dncl-basics-1-display表示する(...)で文字・数字・計算結果を表示するdncl-basics-2-variables=/←)と、変数を使った計算・表示dncl-basics-3-conditionalsもし ... ならば/そうでなければ/そうでなくもし ... ならば各 deck は
setup.rubyMode: 'dncl'を持つので、開くと Ruby タブが日本語モードで開きます(利用者が先に「日本語(DNCL)」ボタンを探す必要がない)。Changes Made
tutorial-tags.js:CATEGORIES.dnclBasicsとdnclフィルタタグを追加tag-messages.js/library.jsx/locales/{ja,ja-Hira,en}.js: カテゴリ・タグのラベルcategories/dncl.jsx/dncl.locale.js: stub を 3 deck ぶんの定義と locale で実装tools/playwright-verify/generate-dncl-basics-1-3-steps.mjsを同梱(ruby-basics の生成スクリプトと同じカードデザイン)docs/dncl/README.md(チュートリアル節を追加)/docs/tutorial/README.md(主要ファイル)/docs/tutorial/progress.md(Phase 4 を進行中に)/tools/playwright-verify/README.md設計上のポイント
deck の
codeは Ruby のままで、エディタ側がrubyToDnclで日本語表記に変換して見せます。そのため deck の Ruby はputs("...")のように括弧付きの呼び出しで書いています(括弧なしのputs "..."は表示する(...)に変換されず、日本語モードなのに英語が残ってしまう)。この不変条件はユニットテストで固定しました。Test Coverage
新規
test/unit/lib/libraries/decks/dncl-basics-decks.test.js(TDD、RED → GREEN):setupが DNCL モード / タグ / urlId / 画像)codeがエラーなくブロックに変換される)表示するに変換されputsが残らない、DNCL → Ruby 往復がエラーなし)tutorial-categories-refactor.test.js(#932 の stub ガード)は dncl が stub でなくなったことに追従させました。npm exec jest test/unit/lib/libraries/decks/→ 73 passednpm run lint→ scratch-gui 0 error / 0 warning(scratch-vm の 3 warning は既存・本 PR 対象外)、prettier OKIssue の DoD にある「Playwright で該当 deck の起動・進行を確認」は未実施です。本 worktree で dev server を起動しようとしたところ、同一コンテナで別 worktree の webpack が動いており OOM(exit 137)で起動できませんでした。レビュー / DoD フェーズでメモリに余裕のあるタイミングで、
tipsLibraryに「DNCL のきほん」カテゴリが表示され、deck を開くと Ruby タブが DNCL モードになり、コード挿入 → 実行まで進めることを確認してください。Related Issues
Closes #964
Refs #681