Uh oh!
There was an error while loading. Please reload this page.
People lands on all users, and My week's row link is the task - #119
Merged
Conversation
Two nav/column defects measured in the browser on the demo, both of which
made a screen show the wrong thing while looking correct.
`nav_people` named `sys_user` with no `viewName`, so the Console opened that
object's DEFAULT view — `me`, "My Profile", filtered `id == {current_user_id}`
with `pageSize: 1`. A manager who followed the Duty-health dashboard to People
in order to look at other people saw exactly one row: themselves. It now names
`all_users`, the platform's own unfiltered lens, rather than redeclaring a view
for an object this app does not own.
`my_week.columns` led with `status`, and the first column is not merely the
leftmost one: the desktop grid makes it the record link and the 390px card
renderer makes it the card title. So the only clickable thing on a row was the
`Open` pill, with the task name inert beside it, and every card was headed with
a raw `open` / `in_progress`. `subject` now leads and `status` follows.
`attachments` is dropped from this lens alone — it was a dash on every row of
the busiest screen; the field, the other grids and the record page's upload are
untouched.
Guards, both walked rather than listed so a later lens is covered on the day it
lands:
- `test/views.test.ts` pins the new order and adds the rule that outlives it:
every `duly_task` grid leads with `subject`. The defect was one lens
disagreeing with the other four, which a per-view pin would not have said.
- `test/metadata-bindings.test.ts` — this is the app's first nav reference
across the platform-object boundary, and that file pins boundaries to an
exact zero. Widening the pin was the wrong answer: a platform object's FIELDS
cannot be judged from `@objectstack/spec`, but its VIEWS can, because
`@objectstack/platform-objects` ships them on disk. The walk now resolves
`sys_user.all_users` for real, so a typo'd platform view name is a finding
instead of an unjudgeable boundary — the same silent-fallback defect this
commit fixes. Three self-tests cover the branch's three outcomes.
Closes#118
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SqkTcrxUFci7nqXdbBSe2pos-warren
marked this pull request as ready for review
September 2, 2026 10:33
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes#118
Two metadata fixes, both re-measured in a browser on this branch rather than reasoned about. All four gates green at
8d1711d.1.
nav_people→viewName: 'all_users'The entry named
sys_userwith noviewName, so the Console opened that object's default view —me, "My Profile", filteredid == {current_user_id}withpageSize: 1. A manager who followed the Duty-health dashboard to People in order to look at other people got exactly one row: themselves.all_usersis the platform's own unfiltered lens (@objectstack/platform-objects,sys_user.listViews.all_users) — named, not redeclared, because the views of a runtime-provided object are not ours to author and a local copy would drift.Measured on the running demo, signed in as the dev admin:
/sys_user(the default view nav used to open)/sys_user/view/all_users(what the nav entry points at now)The nav entry's
hrefis now/_console/apps/ai.objectstack.duly/sys_user/view/all_users, breadcrumbUser / All Users, first rowAna Ferreira · ana.ferreira@ardenline.example.One correction to the card:
all_usersrenders Name / Email / Phone Number / Email Verified / Identity Source / Two-Factor Enabled / Created At — not "Name / Email / Business unit". The column set is the platform's, so it is not something this PR chooses; the row count, which is the defect, is exactly the 13 the card predicted.2.
my_weekleads withsubject;attachmentsdroppedThe first column is not merely the leftmost one — two renderers read it as the row's identity, so
statusleading made the state of a thing stand in for the thing. Both halves confirmed fixed:# · Task · Status · Source · Due · Latest progress · Actions, and the row'sa[href*="/record/"]is in the Task cell with the subject as its text — e.g.Emissions return — Northgate→/duly_task/record/rWCkoZEut6a7ngu2.Openis plain text beside it, no longer the only clickable thing on the row.Emissions return — Northgate,Waste transfer log review — Northgate,Keep up with regulator bulletins— notopen/in_progress.attachmentsis dropped from this lens only: it was a dash on every row of the busiest screen in the product. The field is untouched, the sharedcolumnsarray still carries it on the other four grids, and the upload #108 built is still on the record page's "Progress and attachments" group.late,stalledandby_unitalready led withsubjectand are unchanged.Guards
Both walked rather than listed by name, so a lens added later is covered on the day it lands.
test/views.test.ts— themy_weekorder pin is updated, and a new test asserts the rule that outlives the exact column list: everyduly_taskgrid leads withsubject. The defect was one lens disagreeing with the other four, which a per-view pin would not have said. It reaches the container default (list) too, whichbyNamecannot address.test/member-page.test.ts— pinsnav_people.viewName, so dropping it is a red test rather than a silently-refiltered screen.test/metadata-bindings.test.ts— this is the app's first nav reference across the platform-object boundary, and that file pinsboundariesto an exact zero, by design, to "fail the day one is authored". It did. Widening the pin would have been the wrong answer: a platform object's fields genuinely cannot be judged from@objectstack/spec, but its views can, because@objectstack/platform-objectsis a devDependency that ships them on disk. So the walk now resolvessys_user.all_usersfor real andboundariesstays zero — which means a typo'd platform view name is now a finding instead of an unjudgeable gap. That is the same silent-fallback defect this PR fixes, so the guard covers the surface where it was just measured. Three self-tests cover the branch's three outcomes (resolves / fires on a typo / still records a boundary when no map is supplied).Reverse-verification
Each new guard was mutated on the committed tree and observed failing, then restored (tree confirmed clean afterwards):
viewNamefromnav_peoplemember-pagered —expected undefined to be 'all_users'statusback first inmy_weekviewsred on both the order pin and the new leading-column guardviewName: 'all_userz'metadata-bindingsred — "the platform object sys_user declares no list view namedall_userz… Declared: all_users, banned, me, two_factor, unverified"That third message lists the five real
SysUser.listViewsnames, which is the evidence the walk reads the platform package rather than a hand-copied list.Gates
Run on the final tree at
8d1711d:validateprints the one expectedhierarchy-securitycapability warning, which AGENTS.md §7 says is this repo's normal state and must not be silenced.Not in this card
Bulk confirm / approve / return on the duty views, board card tweaks, and dashboard number formatting are all untouched, as the issue directs.
🤖 Generated with Claude Code
https://claude.ai/code/session_01SqkTcrxUFci7nqXdbBSe2p
Generated by Claude Code