Capacity
None measurable yet — each tile names the input it is missing.
Grounded rate
—
why it is blank
Populates as soon as one client question has been answered or handed over — GET /api/metrics counts assistant replies carrying a citation against those handed to a human. Blank also means the console is locked, or the route could not be read.
Time to human answer
—
why it is blank
Populates the first time a CA answers a waiting escalation: the queue then reports created→answered seconds for that row. A seed row committed in the same transaction that created it is not a human turnaround, and is excluded.
Reuse so far
—
why it is blank
Populates once a written-back human answer is retrieved by a later question — GET /api/metrics counts replies citing a human_verified source against the human answers in the knowledge base.
CA-minutes / 100 questions
—
why it is blank
Needs measured CA handling time: the composer-opened→committed clock is not instrumented anywhere in this build. Queue wait time is elapsed time, not CA effort, and substituting it would flatter this number.
Question queue · what still needs CA Sharma
Everything the assistant refused to guess at, in the order worth answering.
Real rows from GET /api/escalations · repeat counts are a floor, not an estimate · older rows show a browser-local client name
Questions, waits, retrieval scores, floors and statuses are real rows from GET /api/escalations. Nothing here is invented; two things are narrower than they look.
- Repeats are counted by exact question text (
lib/ca/queue.ts), not by meaning — so every reuse figure above is a floor on the real number, never an estimate of it. - Which client asked is now stored on the row itself (
escalations.client_id), so it reads the same in every browser. Rows created before that column existed have none, and for those only the browser that asked can still recover the name (lib/ca/attribution.ts) — those are marked “this browser” on the row. Where neither has it, the row says “client not recorded” — the truth, not a missing name, and never a guessed one.
Deadline board · Sharma & Associates
What is due, for whom, next — across all 3 clients.
All 3 clients share the one statutory profile this build seeds (regular-monthly-under-5cr), so an obligation is one row with one citation rather than the same row per client. Real seeded dates, really cited — not yet a different rule set per client, which is a data-seeding job, not a UI one.
Client roster
3 clientsPractice record · 1 practising CA
| Client | Open the client's file, or their assistant |
|---|---|
| Krishna TradersRamesh Krishna27•••••••••••3Z1MaharashtraRegular · up to ₹5 cr · 1 state · monthly14questions / mo (demo) | OpenAssistant |
| Meena FabricsMeena Devi27•••••••••••8K2MaharashtraRegular · up to ₹5 cr · 1 state · QRMP9questions / mo (demo) | OpenAssistant |
| Rao Auto PartsSudha Rao29•••••••••••5P7KarnatakaRegular · up to ₹5 cr · 1 state · monthly21questions / mo (demo) | OpenAssistant |
The questions / mo column is invented demo data · everything else is the firm's own record
Names, owners, masked GSTINs, states and compliance shapes are the firm's own record (lib/ca/roster.ts). The questions-per-month column is invented demo data. All three clients currently resolve to the one seeded statutory profile (regular-monthly-under-5cr), so their obligations and due dates are real and cited, but not yet a different rule set per client.
Why this list is the asset. Every client here shares one knowledge base. An answer CA Sharma writes once for any of them is stored as a human-verified source in their name and served, cited, to whoever asks it next — so the roster grows without the question volume growing with it. Open a client to see which of their questions have already become answers for the whole roster.