Repository navigation
Conversation
…s the functions tests
…, ui and mobile, with mobile tests typechecked
…alogs, and the generated catalogs are fresh
…v dependencies dropped; root scripts for knip, jscpd and the i18n checks
… and the unused prettier config goes with its dependency
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
The last campaign PR turns the audit's report-only checks into gates that pass on this tree.
projectService, source and tests):no-floating-promisesandno-misused-promises(JSX attributes on);switch-exhaustiveness-check(adefaultcounts),consistent-type-imports, and everyno-unsafe-*rule;--max-warnings=0.react-hooks/exhaustive-depsis an error. ui, web and mobile run the TanStack Query lint plugin (recommended).next lintand.eslintrc.jsonto an ESLint 9 flat config run by the ESLint CLI. The host-console import bans are carried over rule for rule.knip.jsonc,pnpm knip): unused exports were un-exported or removed, and unused dev dependencies were dropped. Every remaining ignore has a reason..jscpd.json,pnpm jscpd): the tree measures 0.64% duplication; the threshold is 0.7.t(...)call site in ui, web and mobile must resolve in its namespace (pnpm i18n:check:call-sites, now part ofpnpm i18n:check);i18n:check:resources).packages (shared + ui)job. No job is renamed or added.Before you start
mainmerge (civfix.dev), plus the TestFlight build the merge triggers.Verify
Nothing should look or behave differently. The lint fixes wrap event handlers (
() => void run()) and add stable hook dependencies, so these checks cover the handlers they touched.[Web] [Mobile] Handlers that start async work
[Web] Host console
[Mobile] Launch
Regression
Map and sheets: [Mobile]
Findings addressed
exhaustive-deps, the TanStack plugin, the web flat config, knip, jscpd, the i18n check over the apps, catalog freshness, and typechecked mobile tests.APP-PERF-001(a turbo cache step in CI) is not added. Tests read files across packages, so turbo's per-package hash could replay a stale pass.Decisions for the reviewer
nearinto a feed cell while the request sends the exact point;exhaustive-depsallowlist treats the injectedapi,qcandgeoas stable, so query keys do not change.knip.jsonc):.web/.nativetwins, which bundlers pick by extension;expo-contactsandexpo-sms, which a separate PR removes. Drop that entry once they are gone.@typescript-eslint/eslint-pluginand@typescript-eslint/parser(covered bytypescript-eslint), andprettier(nothing invoked it) with its config files.voidwrapper changes nothing at runtime.User-visible copy changes
None.
Tests changed
test:commits:() => voidhandlers, the added stable deps and the un-exported names; each pin still checks the same value or shape;no-unsafe-*rules: typed mocks, typedJSON.parseandcatch,rejection(), which is stricter than.catch(e => e).useOnboardingTourPresenter,makeFakeOpenInternalHref). The behaviour tests in the same files still cover both.Verification
pnpm install --frozen-lockfilepasses, and the committed lockfile equals pnpm's own output.@civfix/sharedsurface is unchanged.test:commits;geovariable, because the plugin's type allowlist does not match that interface.main, so it starts when this PR retargets after Contract release: @civfix/shared 0.58.0 #54 merges.Not covered
🤖 Generated with Claude Code