diff --git a/ci-requirements.md b/ci-requirements.md index 714bf28..e9e9568 100644 --- a/ci-requirements.md +++ b/ci-requirements.md @@ -319,6 +319,23 @@ exceed 100 characters and survive only because rustfmt cannot break a string literal — copying that shape caused one of four consecutive fmt-only CI failures, which is what this whole section exists to prevent. +## Checking the frontend lane before pushing + +Same technique, same authorisation, same reason — and it covers a gap the Rust gate +cannot: `vue-tsc --noEmit` type-checks only the SCRIPT block, so a malformed TEMPLATE +passes the typecheck lane and fails `vite build` in a different workflow. `npm run +build` runs both, which is exactly what the desktop lanes run. + +``` +docker run --rm --user "$(id -u):$(id -g)" -e HOME=/tmp -v "$PWD:/w" -w /w/frontend \ + git.fabledsword.com/bvandeusen/ci-python:3.14 sh -c "npm ci --silent && npm run build" +``` + +The typecheck lane uses the `ci-python` image too — it is the node the frontend jobs +already run on, not a separate one. Delete `frontend/node_modules` and `frontend/dist` +afterwards; both are gitignored, but neither belongs in a working tree that never +builds locally otherwise. + ## The desktop lockfile `Cargo.lock` is **committed** at the workspace root, per Cargo's own guidance for diff --git a/frontend/src/stores/notes.ts b/frontend/src/stores/notes.ts index 67adb34..aceb47e 100644 --- a/frontend/src/stores/notes.ts +++ b/frontend/src/stores/notes.ts @@ -159,7 +159,7 @@ export const useNotesStore = defineStore("notes", () => { const setColor = (id: string, color: NoteColor) => mutate(id, { color }); const setReminder = (id: string, remindAt: string | null) => mutate(id, { remind_at: remindAt }); const setRecurrence = (id: string, recurrence: string | null) => mutate(id, { recurrence }); - const saveEdit = (id: string, changes: { title: string; body: string; color: NoteColor }) => mutate(id, changes); + const saveEdit = (id: string, changes: { body: string; color: NoteColor }) => mutate(id, changes); async function completeReminder(id: string): Promise { reconcile(await repo.notes.completeReminder(id));