Commit graph

8 commits

Author SHA1 Message Date
le king fu
cb53a43422 fix(security): scope http-cache-semantics floor to major 4
Review follow-up on #131: a blanket override would force any future 5.x
consumer down to 4.x. The version-scoped key keeps the floor within the
current major, like postcss-selector-parser. No lockfile change.

Refs #128

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 19:34:25 -04:00
le king fu
62efdba22e fix(security): add http-cache-semantics and postcss-selector-parser floors
- http-cache-semantics ^4.3.0 (GHSA-ch52-4w7c-c8xp, high): 4.3.0 is out of
  the <=4.2.0 range although the advisory lists no patched version. Single
  copy via @expo/ngrok > got > cacheable-request (^4.0.0), dev tunnel only.
- postcss-selector-parser@^6.0.0 -> ^6.1.3 (GHSA-w9m9-85wc-3x92, low),
  version-scoped to the tailwindcss@3 major. Resolves to 6.1.4.

Lockfile: two stanzas, package count unchanged (2084). npm audit 33 -> 31.
Android JS bundle (expo export --no-bytecode, cache cleared) is byte-identical
before and after. Smoke test guards both floors.

Resolves #128
Resolves #129

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 19:27:33 -04:00
le king fu
84d04184ae fix(security): raise brace-expansion and undici override floors
brace-expansion: nine new DoS advisories outdate the floors set in #103.
Raise the three version-scoped overrides to the patched head of each
major (1.1.21, 2.1.7, 5.0.12). undici: raise the @expo/cli scoped
override to ^6.28.1 (resolves to 6.29.0).

Add smoke checks locking the floors and the minimatch brace/glob
behaviour for every installed minimatch major, so a return to a blanket
override fails the suite.

npm audit: 12 -> 10 entries. The rest is tracked in #123 and #126.

Fixes #124
Fixes #125

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 14:11:34 -04:00
le king fu
2117cc5016 test: clarify deep link round trip scope (expo-router fork not covered)
Refs #117

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:59:17 -04:00
le king fu
f7b2b51da9 fix(security): bump @react-navigation/core to 7.22.1 via override
@react-navigation/core <= 7.22.0 depends on query-string, which pulls
decode-uri-component <= 0.4.2 (GHSA-vcc3-ghjq-m6fr, DoS on malformed
percent-encoded input). 7.22.1 parses queries itself and drops the
dependency. A scoped override bumps it without touching anything else:
the lock diff is limited to @react-navigation/core and /routers.

Add smoke-test guards for the failure mode of the superseded PR #118
(blanket npm audit fix): babel-preset-expo and @expo/metro-config must
resolve from the root node_modules, only one Expo SDK major may be
installed, every metro copy must stay on 0.83.x. Replayed against the
PR #118 lock, all four checks fail. Also add a deep link round trip
through getStateFromPath/getPathFromState with query params.

Fixes #117

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 20:40:36 -04:00
le king fu
9e0adaf5c9 feat(feedback): integrate Feedback Hub widget in Settings (#68)
Add an in-app feedback form that POSTs to the centralized Feedback Hub
(feedback.lacompagniemaximus.com/api/feedback) with app_id "simpl-liste".

- src/services/feedback.ts: dependency-free client (pure helpers + fetch),
  strict context whitelist, 2000-char cap, stable error codes
- src/hooks/useFeedback.ts: idle/sending/success/error state machine
- src/components/FeedbackModal.tsx: RN bottom-sheet with char counter,
  opt-in navigation context and opt-in identity (Loi 25: both unchecked)
- Settings > About: new "Send feedback" button above the kept mailto entry
- i18n fr/en feedback block
- tests/feedback.test.mjs: node:test execution coverage of the client;
  smoke.test.cjs static guards (app_id, endpoint, cap, import-free)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 19:43:12 -04:00
le king fu
fccd7faf95 perf(widget): cut expand/collapse tap latency (native patches + light headless path)
- Upgrade react-native-android-widget 0.20.1 -> 0.21.0 (expedited
  WorkManager upstream, clickable-area ripple corner fix)
- patch-package on the lib:
  1. WIDGET_CLICK bypasses WorkManager and runs the headless JS task
     directly on the ReactHost (goAsync + WorkManager fallback), removing
     two Room writes + worker dispatch from every tap and WorkManager
     init from the cold path
  2. WEBP_LOSSLESS (effort 0) encoding instead of PNG q100 on API 30+,
     several times faster for widget-sized bitmaps
  3. Copy identical light/dark collection item files instead of
     compressing every row bitmap twice when the config is single-mode
- Extract dependency-light src/services/widgetState.ts so the headless
  click handler no longer pulls DB/drizzle/date-fns at cold start
- Smoke tests: lock the light import graph + patch/postinstall wiring
- Bump v1.6.5 (versionCode 17) for the preview build

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 16:41:47 -04:00
le king fu
cfedde0fa6 test(smoke): add non-regression smoke for uuid + package overrides
Plain-node script invoked via `npm test`. Catches the buffer-bounds
regression area from GHSA-w5hq-g745-h8pq (uuid v3/v5 with buffer arg)
and validates package.json structure. No jest/Expo runtime needed —
runs in seconds, suitable for the defenseur-auto chain to gate auto-PRs.
2026-05-02 11:49:13 -04:00