Commit Graph

123 Commits

Author SHA1 Message Date
42cc08a407 store profile status updated 2026-10-09 16:29:30 +05:30
f91044e61a ui 2026-10-08 16:57:16 +05:30
8960fb8ebb delivery slot ui 2026-10-08 15:09:36 +05:30
262b83ffbc delivery slot updated in orders and deliveries fix 2026-10-08 11:06:55 +05:30
d24df891fb delivery slot updated on orders and deliveries 2026-10-06 19:40:42 +05:30
56e8a95c6a delivery slot creation 2026-10-06 17:37:02 +05:30
990dd0dc23 toggle update 2026-10-06 12:20:13 +05:30
a764df225f toggle update 2026-10-06 10:34:48 +05:30
b7f9a6aaeb my stock update page ui 2026-10-05 19:20:08 +05:30
bcb5d1de28 health score toggle ui 2026-10-05 17:05:51 +05:30
7f2110d51e health score toggle in same drawer 2026-10-05 13:05:27 +05:30
1eea29cf23 health score toggle 2026-10-05 12:03:35 +05:30
0a828fbe4f health score: move the non-food early return past the hook
`if (!isEdible(category)) return null` sat on the line above `useQuery`, which
made the hook conditional. React counts hooks per component instance, so one
drawer reused for two products -- a soap and then a biscuit, which is ordinary
browsing in the global catalogue -- went 0 hooks then 1 and threw "rendered more
hooks than during the previous render".

That does not degrade the panel, it unmounts the tree: the health score then
disappears for EVERY product until the page is reloaded, which reads exactly
like the feature having been switched off.

The guard now sits after the hook, and `enabled` carries the intent the early
return was protecting -- a non-food product still asks the service nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-30 12:23:50 +05:30
12617b5d81 nutrition panel removed 2026-09-30 11:53:35 +05:30
b73f050669 nutrition 2026-09-29 17:30:18 +05:30
e3fc144d05 auto mail generation 2026-09-29 16:48:10 +05:30
f1299fd053 error msg fix 2026-09-28 20:02:18 +05:30
7be012730b fix 2026-09-28 19:50:41 +05:30
9a991fe5ab cod fix 2026-09-28 19:35:16 +05:30
eeef8851e4 domain change 2026-09-28 18:08:55 +05:30
c9616edad9 seperation of nearle admin 2026-09-28 15:43:07 +05:30
153f87b577 nearle admin agent fix 2026-09-28 11:25:32 +05:30
21818320a0 shift fix 2026-09-25 16:19:51 +05:30
9314771aa8 deploy fix 2026-09-25 15:26:23 +05:30
d169d24934 ui fix 2026-09-25 15:21:02 +05:30
72f3bb0961 buddy scroll 2026-09-25 12:31:57 +05:30
46b73c50f4 login fix 2026-09-25 10:37:30 +05:30
174e7dd890 login 2026-09-25 10:14:15 +05:30
3d404665ab rider partner 2026-09-24 19:06:12 +05:30
2f0836df30 status 2026-09-24 16:30:02 +05:30
aca6344cc9 shift 2026-09-24 15:52:27 +05:30
a13f7caddc env changes 2026-09-24 13:18:02 +05:30
23da1872f2 agent changes 2026-09-24 12:37:22 +05:30
beeee893f6 changes 2026-09-24 11:42:02 +05:30
f3fe53d2ac agent 2026-09-23 17:25:09 +05:30
8537b09f33 Wire the Buddy composer to the assistant
The panel has been complete except for the one part that answers. Its
composer was deliberately disabled — it used to accept text, light up the
send button, and swallow the submit, because no assistant endpoint
existed. This connects it to the one that does.

It is enabled only when a model is configured AND the page has an agent,
checked at runtime via /assistant/status rather than assumed at build
time. The placeholder says which of the two is missing:

  "Not connected yet"              no model on this deployment
  "No assistant for this page yet" no agent for this route
  "Ask about this page"            live

Two different facts, two different sentences. A person on Inventory can
move to Sales and get an answer today; a person whose deployment has no
model can do nothing from the browser. Flattening both into "not
connected" would be true and useless.

The old rule is kept: never accept a message nothing will read.

An answer shows its working — the tools it ran, their row counts, and a
link to the page holding the same rows. Buddy states things with the
confidence of a sentence, and the only honest way to present that is
beside the evidence, so a person can disagree with it. Refused calls are
shown too: an answer that quietly dropped one would look like Buddy chose
not to look.

A partial answer says so in amber, not as a grey hint. An answer cut off
mid-sentence reads as a complete one otherwise, which is the failure the
flag exists to prevent.

The thread clears on navigation. An answer about Sales sitting above the
Inventory page reads as being about what is on screen; losing the history
is the smaller cost.

Phase 2 ships one agent, covering Console and Sales. The rest arrive as
backend config, not as changes here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 13:14:18 +05:30
34c68034de phase 0 and 1 2026-09-23 11:36:10 +05:30
cca3c50a89 rider status 2026-09-22 11:13:15 +05:30
19ed3585ff ui/ux on catalogue 2026-09-19 11:25:41 +05:30
93735e232a ui/ux on catalogue 2026-09-18 19:19:34 +05:30
041dc37861 ui/ux improvement 2026-09-18 16:57:24 +05:30
115a06a02c ui improvement 2026-09-17 17:57:21 +05:30
2cd048e6f0 partner 2026-09-17 11:03:57 +05:30
f25b3fcf65 e2e changes 2026-09-16 17:12:30 +05:30
5cb9872037 type check 2026-09-16 11:43:26 +05:30
98398894a5 design 2026-09-15 20:51:01 +05:30
b2104d21b0 fix the four typecheck errors that broke the build
`npm run build` runs `tsc --noEmit` first, so all four stopped the deploy
before vite ever ran. They came in with the redesign commit.

KpiCard: the note pill was removed from the tile but `note` was still
destructured, and `noUnusedLocals` rejects that. The prop stays declared —
87 call sites across 21 files pass it — and is now documented as accepted
and ignored, the same way `fill` already was. Those 87 strings are written
and never shown; the comment says so rather than leaving it a puzzle.

InventoryPage: dropped an unused SectionHeader import, and `colour` is not
a BadgeProps field. The intent was a brand-coloured "In transit", so that
is now `variant="purple"` — a real variant in BadgeVariantMap, and the
brand is purple.

StoreAccountPage: `current` is a BRANCH, and `gettenantlocations` sends no
tenantname on it (checked on the wire against tenant 1147). So the second
half of `shopQuery.data?.tenantname || current?.tenantname` could never
fire. Removed rather than added to the type — a field the backend does not
send is exactly the bug the previous commit fixed on the summary endpoints.

Verified: tsc clean, 625 tests pass, vite build clean, and the lock file
installs under `npm@10.9.8 ci` — the builder's npm, which the image pins.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JYEsb8PNZ19G9R8gUjTU7n
2026-09-11 16:50:39 +05:30
0a11f7543c redesign 2026-09-11 16:32:50 +05:30
81b7d32672 deploy fix 2026-09-10 18:05:45 +05:30
8b2c4daef8 updats on the dispatch page 2026-09-10 17:57:00 +05:30