Skip to content

chore(lint): add AGENTS.md and project lint rules - #581

Open
yhabib wants to merge 2 commits into
mainfrom
chore/agents-md-lint-rules
Open

yhabib wants to merge 2 commits into
mainfrom
chore/agents-md-lint-rules

Conversation

@yhabib

@yhabib yhabib commented Nov 6, 2026

Copy link
Copy Markdown
Collaborator

Motivation

The repository has no shared instructions, so its traps are known only to people who already hit them. A route loader without staleTime broke the mobile e2e run on #441, and a selector that picks between keys threw a revoked-proxy error on #550.

Changes

  • Added a root AGENTS.md with the setup, the validation commands, the PR title types, and the frontend and vitest traps.
  • Added the lint rule governance/route-loader-stale-time, which requires staleTime on a createFileRoute that has a loader.
  • Added the lint rule governance/i18n-single-key, which requires each $ selector to read one key.
  • Added eslint.config.test.js with RuleTester cases for both rules.

Add a root AGENTS.md with the setup, validation, and project traps.
Add local ESLint rules for route loaders without staleTime and for
i18n selectors that read more than one key.
@yhabib
yhabib requested a review from a team as a code owner November 6, 2026 10:47
Copilot AI balanced review requested due to automatic review settings November 6, 2026 10:47
@zeropath-ai

zeropath-ai Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

✅ No security or compliance issues detected. Reviewed everything up to 37e91fd.

Security Overview
Detected Code Changes
Change Type Relevant files
Enhancement ► eslint.config.js
    Add governance rules for i18n-single-key and route-loader-stale-time
► eslint.config.test.js
    Add tests for new governance rules

@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown

📊 Build Bundle Stats

The latest build generated the following assets:

dist/index.html                                           5.86 kB │ gzip:   1.66 kB
dist/assets/index-DHR8rj0Y.css                          150.06 kB │ gzip:  24.02 kB
dist/assets/icpLedger-BWEYfZgu.js                         0.23 kB │ gzip:   0.21 kB
dist/assets/Skeleton-u78omNcz.js                          0.44 kB │ gzip:   0.32 kB
dist/assets/webhid-D0yio6wG.js                            0.53 kB │ gzip:   0.32 kB
dist/assets/useTvlValue-BPZUE0iL.js                       0.60 kB │ gzip:   0.41 kB
dist/assets/nnsDapp-B9evmkqs.js                           0.68 kB │ gzip:   0.25 kB
dist/assets/SkeletonPageHeader-CtGFkLis.js                0.76 kB │ gzip:   0.47 kB
dist/assets/PageHeader-jXzaR6sL.js                        0.77 kB │ gzip:   0.45 kB
dist/assets/CertifiedBadge-BZ9g0_Zh.js                    0.81 kB │ gzip:   0.48 kB
dist/assets/Separator-HYbn1K6c.js                         0.83 kB │ gzip:   0.50 kB
dist/assets/SkeletonStatCard-BqJualkq.js                  0.91 kB │ gzip:   0.56 kB
dist/assets/useForecastPeriod-BLbZME_M.js                 1.01 kB │ gzip:   0.61 kB
dist/assets/utils-kBYgBLuy.js                             1.02 kB │ gzip:   0.59 kB
dist/assets/useIcpIndex-BlgLAAQU.js                       1.09 kB │ gzip:   0.64 kB
dist/assets/numbers-CsgVlaNP.js                           1.15 kB │ gzip:   0.57 kB
dist/assets/routeLoaders-B2tt0Q2g.js                      1.19 kB │ gzip:   0.56 kB
dist/assets/rolldown-runtime-DAXXjFlN.js                  1.26 kB │ gzip:   0.70 kB
dist/assets/advancedFeatures-BgQqLOFT.js                  1.50 kB │ gzip:   0.75 kB
dist/assets/events-DC7sy_g6.js                            1.66 kB │ gzip:   0.86 kB
dist/assets/SkeletonListRows-BZLJydv2.js                  1.69 kB │ gzip:   0.53 kB
dist/assets/useLedgerNeuronCall-BglLf9g8.js               1.89 kB │ gzip:   1.03 kB
dist/assets/errors-C_oENL0S.js                            1.95 kB │ gzip:   0.97 kB
dist/assets/AnimatedNumber-BiySlvBD.js                    1.98 kB │ gzip:   1.13 kB
dist/assets/useCommandPaletteSettings-B_DdHcDJ.js         2.13 kB │ gzip:   1.06 kB
dist/assets/addressBook-yLAvgf71.js                       2.14 kB │ gzip:   1.20 kB
dist/assets/useIcpIndexTransactionsPolling-CfX-qgJB.js    2.15 kB │ gzip:   1.15 kB
dist/assets/useGovernanceAppCanister-B-Q0xmV4.js          2.41 kB │ gzip:   1.07 kB
dist/assets/useShortcutSettings-CinX_Jxj.js               2.41 kB │ gzip:   1.19 kB
dist/assets/useAddHotkey-zi7sA843.js                      2.61 kB │ gzip:   1.34 kB
dist/assets/governance-Db49f0XU.js                        2.99 kB │ gzip:   1.15 kB
dist/assets/ToggleGroup-LXb9I-tO.js                       3.09 kB │ gzip:   1.41 kB
dist/assets/useClaimPendingDeviceStakes-6vlhCxBA.js       3.12 kB │ gzip:   1.43 kB
dist/assets/SkeletonText-3xqBER-7.js                      3.71 kB │ gzip:   1.29 kB
dist/assets/useAccounts-Bl1kpd1x.js                       4.96 kB │ gzip:   2.21 kB
dist/assets/tickers-WbZ9sqUM.js                           6.54 kB │ gzip:   2.73 kB
dist/assets/useNowInSeconds-BjWhQn0x.js                   7.12 kB │ gzip:   3.04 kB
dist/assets/DeviceActionDetail-Cm0mjW1q.js                8.45 kB │ gzip:   3.03 kB
dist/assets/TopicFollowingAccordion-DCtmkTuJ.js           8.55 kB │ gzip:   3.41 kB
dist/assets/routes-DIbjVlqx.js                            8.96 kB │ gzip:   3.08 kB
dist/assets/AlertDialog-CFQQ_-1-.js                       8.99 kB │ gzip:   3.16 kB
dist/assets/ledgerIdentity-CbGbEww2.js                   10.16 kB │ gzip:   3.70 kB
dist/assets/MutationDialog-B2tfQZuc.js                   11.55 kB │ gzip:   4.00 kB
dist/assets/spamFilter-C4hWv8TJ.js                       11.77 kB │ gzip:   5.02 kB
dist/assets/ResponsiveDialog-CgZV_g9w.js                 14.56 kB │ gzip:   4.08 kB
dist/assets/_id-2pr67RjW.js                              16.61 kB │ gzip:   5.33 kB
dist/assets/AmountInput-CcWmxInJ.js                      16.85 kB │ gzip:   6.73 kB
dist/assets/_auth-pAlJttdW.js                            22.49 kB │ gzip:   8.30 kB
dist/assets/HideBalancesToggle-DIjI8_Qv.js               22.99 kB │ gzip:   8.59 kB
dist/assets/vendor-buffer-EX-AqChq.js                    26.95 kB │ gzip:   8.18 kB
dist/assets/accounts-BkvZl2By.js                         32.02 kB │ gzip:  10.90 kB
dist/assets/SendICPButton-BTdAzN6Y.js                    37.04 kB │ gzip:  13.52 kB
dist/assets/settings-CtuAQvYM.js                         54.42 kB │ gzip:  15.56 kB
dist/assets/dashboard-C9pJLCkQ.js                        57.80 kB │ gzip:  19.11 kB
dist/assets/index-BzR_XBWt.js                            62.72 kB │ gzip:  17.82 kB
dist/assets/voting-DypwIPPX.js                           69.29 kB │ gzip:  21.68 kB
dist/assets/vendor-md-CGr8lPUw.js                        73.29 kB │ gzip:  19.98 kB
dist/assets/button-D4LVkgzQ.js                           84.90 kB │ gzip:  28.37 kB
dist/assets/neurons-BdiROO0X.js                          90.41 kB │ gzip:  27.09 kB
dist/assets/DisburseModal-CirVFGdt.js                   101.46 kB │ gzip:  29.62 kB
dist/assets/vendor-tanstack-CLWhAzzP.js                 120.02 kB │ gzip:  39.23 kB
dist/assets/vendor-jsqr-CjiBYtfG.js                     129.98 kB │ gzip:  47.50 kB
dist/assets/vendor-core-react-bRRjyX41.js               189.81 kB │ gzip:  59.76 kB
dist/assets/vendor-recharts-D2GxZz0f.js                 280.26 kB │ gzip:  76.81 kB
dist/assets/vendor-ledger-Bz6feAP8.js                   403.26 kB │ gzip:  98.84 kB
dist/assets/vendor-icp-e5O_ocwA.js                      468.31 kB │ gzip: 117.84 kB
dist/assets/vendor-libs-CXEHHDQp.js                     581.21 kB │ gzip: 186.96 kB

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The ESLint rule mishandles type-only wrappers, rejecting valid conditional selectors while accepting bare selectors that select no key, and needs corrected validation with regression coverage.

1 open issue
What changed in this PR

This PR documents repository setup and frontend conventions, and adds lint checks to help prevent the route-loader and i18n selector regressions described in #441 and #550.

Changes:

  • Adds shared contributor guidance in AGENTS.md.
  • Enables rules requiring route-loader staleTime and single-key i18n selectors.
  • Adds RuleTester coverage for both rules.
File Description
src/​governance-app-frontend/​eslint.config.test.js Adds valid and invalid cases for both lint rules.
src/​governance-app-frontend/​eslint.config.js Defines and enables the project-specific lint rules.
AGENTS.md Documents setup, validation, and frontend development conventions.

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings November 6, 2026 10:53

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approved

No active review issues were identified for the contributor guidance and frontend lint-rule changes.

No open issues 🎉

1 resolved since last review

Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants