You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
let x = data.x は、Svelte 4 の時も追従していなかった(追従させるには $: が要った)。runes に移した 01fffb99 は、export let data を $props() に置き換えただけ。つまり v5 で壊れたのではなく、v4 の頃からある潜在的なバグに警告が出るようになった。
Activity
KATO-Hiro commentedon Nov 3, 2026
build・check・lint の警告の解消
概要
pnpm check・pnpm lintの警告31件(state_referenced_locally29、a11y_no_noninteractive_tabindex1、oxlint 1)を0件にし、警告が出たら CI で失敗するようにした(2026-11-01 着手、staging3eb7eadd)。oxlint の1件は test: drop the redundant crypto spread in the fallback ID test #4277、残りはブランチ#4285。state_referenced_locallyは、Svelte 5.45.3 から props にも出る(svelte#17289)。実害は、同じ route の中で移動するとコンポーネントが再利用され、let x = data.xが古い値のまま残ること。今はそうしたリンクが無く、潜在的なバグにとどまる。決めたこと
data.*・props は$derivedにする。untrack(() => ...)で包む(Superforms の初期値、VotableGradeのdisplayGrade)。実行時の挙動は変わらず、「初期値だけを使うのは意図したことだ」とコードに残す。$effectで読み直す option(createDroppableのtype・accept)は getter で渡す。untrackにする。warningFilter・svelte-ignore: 本物のバグも隠れてしまう。{#key}:$derivedで足りる。$derivedにする:superFormは初期化した後、自分で state を持つ。displayGradeを$derivedにする: 投票した直後の表示が、親の値で元に戻る。tabindex="0"を消すだけにした。flowbite-svelte 1.33.1 のPopper.svelte:201が、Tooltip のトリガーに実行時にtabIndex = 0を付けるので、キーボードでの操作は変わらない。<button>にする(当初の plan)。押しても何も起きないのに、スクリーンリーダーに「ボタン」と読まれる。checkに--fail-on-warningsを付けた。lintの oxlint に--deny-warningsを、ESLint に--max-warnings 0を付け、lefthook の同じ job にも付けた。.svelteを lint しないので、付けないと.svelteのno-explicit-anyだけが止まらないため。pnpm checkの件数・既存の E2E・変更前後の比較で確かめた。votes.spec.ts: フラスコのアイコンに focus すると Tooltip が開く。そのために、seed のVOTE_STATS_DEMO_DATAに、PENDING のzone2021_fを足した(中央値は本番のデータの D3)。workbook_create.spec.ts(新規): admin の作成画面で、userId・isOfficial・「問題集の種類」の初期値を見る。送信しないので DB は汚れない。svelte-runes.md)、Tooltip のフォーカス(accessibility.md)、rgの|(coding-style.md)。事実(コードや git に残らない)
let x = data.xは、Svelte 4 の時も追従していなかった(追従させるには$:が要った)。runes に移した01fffb99は、export let dataを$props()に置き換えただけ。つまり v5 で壊れたのではなく、v4 の頃からある潜在的なバグに警告が出るようになった。@dnd-kit/svelte0.5.1 のcreateDroppableは、id・accept・typeを内部の$effectで読み直す。KanbanBoardはgroupに固定の文字列を渡すので、getter にしても今の動きは変わらない。workbooks/createは admin 専用(admin 以外には 403)。そのため、isOfficialは常にtrueになる。検証
pnpm checkは 30 → 16 → 11 → 10 → 0 件になった。workbooks_listの1件で、データが無いときに飛ばす条件付きの skip。/workbooks/createの本文と input に、差分は無かった。__superform_json)に、差分は無かった。送信は abort した。/votes/__data.jsonを書き換えてアイコンを出し、手で確かめた。実行時にtabindex="0"が付き、Tab でフォーカスすると Tooltip が開いて、フォーカスが離れると閉じた。その後、E2E にした。tabindexが付かずに失敗し、$form.isOfficialの代入を消すとisOfficialがfalseになって失敗した。check・lintは exit 0 だった。let x = data.x、anyを書いた.ts・.svelteを一時的に足すと exit 1 になった。lefthook と同じ形の呼び出しでも、同じ結果だった。pnpm devの出力レビュー
Codex(
codex exec -s read-only、0.166.0)に頼んだ。sandbox が起動しないので、必要なファイルは prompt に埋め込んだ。Critical・Severe の指摘は無かった。ユーザーが直すのに選んだのは、Minor の1件だけ。.svelteを lefthook が渡すと、「ignored」の警告で失敗する。再現したので、lefthook の eslint に--no-warn-ignoredを足した。該当する git 管理の.svelteは0件。pnpm checkは staged のファイルだけに絞れず、11秒かかる。残る作業
compose.yamlのNODE_ENV=developmentで、Vite が dev モードで build し、flowbite-svelte の使っていないコンポーネント(約 158 kB)が残る。本番では出ない。直すならNODE_ENVを消す(devcontainer の作り直しが要る)。treeshake.moduleSideEffects・deep import・chunkSizeWarningLimitは、効果が小さいか、本番の設定を変えることになる。.coderabbit.yaml:src/**/*utils/**の「pure functions」の指示がテストにも当たり、vi.stubGlobalが指摘された。直すなら、テストは除くと1行足す。account_transfer:svelte/legacyのrunが残っている。Merge pull request #4286 from AtCoder-NoviSteps/#4285