@starci/eslint-canon-be 3.4.39 → 3.4.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +2 -2
  3. package/boundary-schema.mjs +32 -4
  4. package/idempotency.mjs +3 -0
  5. package/index.mjs +2 -0
  6. package/infra-owner.mjs +4 -3
  7. package/lib/client-idempotency.mjs +403 -0
  8. package/lib/persistence.mjs +1 -1
  9. package/lib/schema-values.mjs +90 -0
  10. package/lib/unit-spec.mjs +6 -0
  11. package/operations.mjs +197 -32
  12. package/package.json +1 -1
  13. package/runtime/knowledge/hfs/canon-pins.yaml +65 -9
  14. package/runtime/knowledge/hfs/fe-stack.yaml +23 -5
  15. package/runtime/knowledge/hfs/rules.yaml +168 -47
  16. package/runtime/knowledge/hfs/slots.yaml +110 -52
  17. package/runtime/knowledge/sonar-gate.yaml +1 -1
  18. package/runtime/modules/kernel/removed-vocabulary.yaml +62 -0
  19. package/runtime/modules/models/registry.yaml +3 -1
  20. package/runtime/modules/models/runtimes.yaml +2 -0
  21. package/runtime/scripts/api/git/ls-tree.mjs +5 -0
  22. package/runtime/scripts/api/git/show.mjs +6 -0
  23. package/runtime/scripts/hfs/architecture/dead-exports.mjs +10 -10
  24. package/runtime/scripts/hfs/architecture/function-spec-providers.mjs +1 -1
  25. package/runtime/scripts/hfs/architecture/operation-contract-roots.mjs +53 -0
  26. package/runtime/scripts/hfs/architecture/reachability.mjs +1 -1
  27. package/runtime/scripts/hfs/architecture/sql-owner.mjs +17 -6
  28. package/runtime/scripts/hfs/architecture/sql-token-forms.mjs +105 -0
  29. package/runtime/scripts/hfs/architecture/sql-tokens.mjs +38 -52
  30. package/runtime/scripts/hfs/architecture/supabase-keys.mjs +261 -0
  31. package/runtime/scripts/hfs/architecture/transport-owner.mjs +49 -3
  32. package/runtime/scripts/hfs/declaration-shape.mjs +4 -4
  33. package/runtime/scripts/hfs/declaration-slots.mjs +12 -3
  34. package/runtime/scripts/hfs/manifest-shape.mjs +10 -6
  35. package/runtime/scripts/hfs/rule-params-shape.mjs +16 -6
  36. package/runtime/scripts/hfs/rules/database-constants.mjs +26 -0
  37. package/runtime/scripts/hfs/rules/database-migrations.mjs +489 -0
  38. package/runtime/scripts/hfs/slot-side-problems.mjs +2 -2
  39. package/runtime/scripts/hfs/slots.mjs +1 -0
  40. package/runtime/scripts/hfs/view.mjs +2 -1
  41. package/runtime/scripts/lib/in-order.mjs +71 -0
  42. package/runtime/scripts/lib/language.mjs +94 -1
  43. package/runtime/scripts/lib/package-at.mjs +62 -0
  44. package/runtime/scripts/lib/same-text.mjs +5 -0
  45. package/runtime/scripts/lib/ts-analysis.mjs +10 -0
  46. package/suppression.mjs +1 -1
  47. package/unit-spec.mjs +66 -6
  48. package/uploads.mjs +112 -0
@@ -19,7 +19,14 @@ concerns:
19
19
  home: [fe.modules.api, fe.transport.client, fe.transport.outcome]
20
20
  pattern: FE-API-GRAPHQL
21
21
  forbids: [urql, graphql-request, '@urql/core', graphql-hooks, apollo-boost]
22
- why: one file per operation under modules/api/graphql/{queries,mutations}, run by the auth or no-auth Apollo client with the link chain.
22
+ why: one file per operation under modules/api/graphql/{queries,mutations,subscriptions}, run by the auth or no-auth Apollo client with the link chain.
23
+ - id: graphql-subscriptions
24
+ tier: opt
25
+ packages: [graphql-ws]
26
+ home: [fe.transport.client, fe.package.api.client]
27
+ pattern: FE-REALTIME
28
+ forbids: []
29
+ why: the subscription transport of a GraphQL subscription door (be.feature.realtime.graphql); only the Apollo clients folder imports it (GraphQLWsLink of @apollo/client/link/subscriptions), a subscription operation runs on that client and a useSubscribe hook of hooks/swr reads it.
23
30
  - id: codegen
24
31
  tier: core
25
32
  packages: ['@graphql-codegen/cli', '@graphql-codegen/client-preset']
@@ -74,8 +81,8 @@ concerns:
74
81
  packages: [socket.io-client, eventemitter2]
75
82
  home: [fe.hooks.socketio]
76
83
  pattern: FE-REALTIME
77
- forbids: [graphql-ws, subscriptions-transport-ws, '@supabase/realtime-js', pusher-js, ably]
78
- why: one socket.io-client singleton per namespace and one side-effect component that dispatches to redux and SWR; lite runs the gateway in the be api process. A one-way channel served as server-sent events needs no package, only a fetch reader in modules/api/sse and a use<Channel>Stream hook (FE-REALTIME).
84
+ forbids: [subscriptions-transport-ws, '@supabase/realtime-js', pusher-js, ably]
85
+ why: one socket.io-client singleton per namespace and one side-effect component that dispatches to redux and SWR; both editions run the gateway in the be api process. A one-way channel served as server-sent events needs no package, only a stream reader in modules/api/sse/clients, a stream operation in modules/api/sse and a useSubscribe<Channel>Swr hook (FE-REALTIME).
79
86
  - id: auth
80
87
  tier: core
81
88
  packages: []
@@ -89,7 +96,7 @@ concerns:
89
96
  home: [fe.modules.i18n]
90
97
  pattern: FE-I18N
91
98
  forbids: [i18next, react-i18next, next-i18next, react-intl, '@lingui/react']
92
- why: useTranslations for copy and the next-intl formatter for numbers, dates and currency.
99
+ why: useTranslations for copy and the next-intl formatter for numbers, fixed dates and currency; FE-DATE owns live time display.
93
100
  - id: ui
94
101
  tier: core
95
102
  packages: ['@heroui/react', '@heroui/styles', tailwindcss, '@starci/grammar']
@@ -107,6 +114,17 @@ concerns:
107
114
  one application icon set, the heroicons family (owner ruling 2026-10-13), on the 24/outline and 16/solid cuts. @heroicons/react
108
115
  is the base set and is used first; @starci/heroicons holds only the glyphs heroicons lacks (brand or domain glyphs drawn in
109
116
  heroicons style), never duplicates a heroicons glyph, and a missing glyph is added to it.
117
+ - id: avatar-illustration
118
+ tier: opt
119
+ packages: ['@starci/grammar']
120
+ home: [fe.components]
121
+ pattern: FE-UI
122
+ forbids: ['@dicebear/*', boring-avatars, 'react-nice-avatar', multiavatar]
123
+ why: >-
124
+ Grammar owns circle avatars: pass the uploaded avatar as src, otherwise pass the user or identity id as seed on
125
+ Avatar, AvatarButton or AvatarGroup members. Grammar renders deterministic DiceBear images with its fixed DNA style;
126
+ @dicebear/core and @dicebear/styles are Grammar runtime dependencies pinned in canon-pins.yaml. Apps declare and
127
+ import @starci/grammar, never @dicebear/*, and draw no avatar visuals. With neither src nor seed, initials remain.
110
128
  - id: theme
111
129
  tier: core
112
130
  packages: [next-themes]
@@ -127,7 +145,7 @@ concerns:
127
145
  home: [fe.modules]
128
146
  pattern: FE-DATE
129
147
  forbids: [moment, moment-timezone, date-fns, luxon]
130
- why: dayjs (modules/dayjs) for date math and parsing; display through the next-intl formatter.
148
+ why: FE-DATE owns application date math, fixed date formatting and Grammar's live time display.
131
149
  - id: numbers
132
150
  tier: opt
133
151
  packages: [decimal.js]