You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The screen that removes the "can you send me a status update" mail. A manager opens a person and sees everything, having entered nothing.
Blocked-by: #8 (the scopes that decide what they may see).
Files you own
src/pages/member.page.ts (new), pushed into dulyPages in src/pages/index.ts
a nav entry in the Team group of src/apps/duly.app.ts
test/member-page.test.ts (new)
Content, in reading order
Header — name, position, unit, manager.
Right now — open tasks, of which late, of which not moving. Three numbers, the third emphasised.
This period — their governed duties and the state of each. Grouped by frequency so a monthly rhythm reads differently from an annual one.
Standing duties — listed, with no tick affordance anywhere near them. They never complete; a control that implies otherwise is a bug.
Recent activity — last 20 task events by last_update_at.
Assigned to them — tasks with source: 'assigned', showing who assigned each.
Not on this page
Their work log.duly_log_entry is readScope: 'own' for every position; the only widening is a record's own visibility: 'manager' flag via a sharing rule. Do not query the object here at all — not filtered, not counted, not "0 entries". A manager seeing a log count learns the log exists and that it is being watched, which is enough to stop people keeping one.
Any editable control. Read-only page. A manager's only write in this product is assigning, and the assign action lives on its own object.
Any comparison to other people. No percentile, no "vs team average", no rank. Their own trend over time is fine and useful; a position in a distribution is a performance score.
Rules
Everything must read correctly for a manager whose scope resolves through the ADR-0057 depths. In this open-edition checkout those fall back to owner-only, so the page will look empty for anyone but yourself — expected, not a bug (see Security model — positions, permission sets, sharing rules #8). Assert authored scopes and filters in tests rather than resolved rows.
Standing duties come from duly_duty where form = 'standing'; they have no tasks by construction, so do not join through tasks to find them.
Acceptance
the page renders from duly_task / duly_duty only; grep the file — no reference to duly_log_entry anywhere
The screen that removes the "can you send me a status update" mail. A manager opens a person and sees everything, having entered nothing.
Blocked-by: #8 (the scopes that decide what they may see).
Files you own
src/pages/member.page.ts(new), pushed intodulyPagesinsrc/pages/index.tssrc/apps/duly.app.tstest/member-page.test.ts(new)Content, in reading order
last_update_at.source: 'assigned', showing who assigned each.Not on this page
duly_log_entryisreadScope: 'own'for every position; the only widening is a record's ownvisibility: 'manager'flag via a sharing rule. Do not query the object here at all — not filtered, not counted, not "0 entries". A manager seeing a log count learns the log exists and that it is being watched, which is enough to stop people keeping one.Rules
duly_dutywhereform = 'standing'; they have no tasks by construction, so do not join through tasks to find them.Acceptance
duly_task/duly_dutyonly; grep the file — no reference toduly_log_entryanywhereGates
pnpm validate && pnpm typecheck && pnpm test && pnpm build.