Employer views: pipeline kanban, inbox, interview calendar, talent pool - #11
Open
os-sam wants to merge 1 commit into
Open
Employer views: pipeline kanban, inbox, interview calendar, talent pool#11os-sam wants to merge 1 commit into
os-sam wants to merge 1 commit into
Conversation
…alent pool Card 07 (#2). Four defineView containers under src/views/ and the `views:` key in objectstack.config.ts: - ats_application: default grid, `pipeline` kanban grouped by `stage`, five `inbox_*` grids filtered by stage, a two-column `default` form. - ats_interview: default grid and a `calendar` on `scheduled_at`, titled by the stored `display_name` mirror and coloured by `status`. - ats_candidate: `talent_pool` grid with a filter bar on skills, city and experience_years, and a `gallery` (avatar cover, full_name title). - ats_job: `mine` and `published` (status == 'published') grids. Why the shapes are what they are: the container expander names the default list `<object>.default`, so the application list is named `all` to keep the `default` key for the form the card pins. `mine` and the talent pool carry no scoping filter — which rows a caller may read is the permission set's row-level rule, and a view filter is presentation, not security. The gallery config has no subtitle key, so `current_title` is the first visible field. Export menus offer csv and xlsx on every grid. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PbJ5Cy9KDAzeQHo8bsMadG
This was referenced Sep 7, 2026
os-sam
marked this pull request as ready for review
September 7, 2026 01:14
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 free
to 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.
Fixes #2
What changed
Card 07: four
defineViewcontainers undersrc/views/(application,interview,candidate,job), the barrelsrc/views/index.ts, and theviews:key inobjectstack.config.ts— only that key and its import, since #5 and #6 are editing the same file.ats_applicationlistgrid (display_name, job, candidate, stage, source, applied_at, rating) ·pipelinekanbangroupByField: 'stage', cards display_name / job / rating / applied_at ·inbox_new(stage = applied) ·inbox_screening·inbox_interview·inbox_offer·inbox_hired·formViews.defaulttwo-column (job, candidate, stage, source, rating, cover_letter)ats_interviewlistgrid (display_name, round, scheduled_at, mode, interviewers, status, rating) ·calendaronscheduled_at, titledisplay_name, colourstatusats_candidatetalent_poolgrid (full_name, city, current_title, experience_years, skills, seeking_status) withuserFiltersdropdowns on skills / city / experience_years ·gallerycoveravatar, titlefull_name,current_titleas first visible fieldats_jobminegrid (title, status, city, employment_type, headcount, published_at, expires_at) ·published= filterstatus equals 'published'Every grid offers
exportOptions: { formats: ['csv', 'xlsx'] }. Filters are structuredViewFilterRuleentries over declared fields — the list-viewfiltersurface is JSON rules, not CEL (objectstack-formula, "Surfaces that take an Expression"), which is why norecord.predicate appears here.Decisions worth a second look:
list.name: 'all'on application and interview. The container expander registers an unnamed default list asOBJECT.default— the same key the card pins forformViews.default— and would have renamed the form todefault_2with a collision warning. Naming the list keepsats_application.defaultfor the form. Verified withexpandViewContainerWithDiagnosticson the built artifact: 0 collisions, 14 items, names as listed byGET /api/v1/meta/view.inbox_newfilters onstage == 'applied'.stagehas nonewvalue (DESIGN.md §02);appliedis the entry stage.mineor the talent pool. Both employer permission sets already scopeats_jobbyemployer_org IN (current_user.accessible_org_ids); a view filter is presentation, not security.GalleryConfigSchemahas no subtitle key;current_titleis the firstvisibleFieldsentry, followed by city and seeking_status.display_nameas the linked first column ahead of the six the card lists.Gates (all exit 0)
pnpm validatepnpm lintpnpm typecheckReverse check, each typo made on top of the committed tree,
pnpm validaterun, then restored withgit checkout HEAD --and verified byte-identical: columnapplied_att→ exit 1, 6 issues with did-you-mean;kanban.groupByField: 'stag'→ exit 1;calendar.startDateField: 'scheduled_att'→ exit 1; inbox filter fieldstag→ exit 1, 5 issues (list-view-field-unknown). The gate binds columns, kanban, calendar and filter fields.Boot and screenshots
os dev --ui --fresh --database-driver memoryboots on this branch;GET /api/v1/meta/viewlists all 14 expanded views. Console route used:/_console/apps/setup/OBJECT/view/OBJECT.KEY(there is no ATS app until card 09).Pipeline groups by
stage— lanes Applied · Screening · Interview · Offer · Hired, cards carrying display_name / job / rating / applied_at:Calendar renders on
scheduled_at, events titled bydisplay_name:Also captured: inbox_screening · talent_pool with the filter bar · gallery · jobs mine. The PNGs live on the orphan branch
claude/issue-2-employer-views-evidence(not for merge; delete after landing — the artifact-page publish was refused by the harness).Caveat on the rows behind the screenshots. On
origin/mainthe stamp hooks throw under the body-only sandbox (ctx.qlis undefined), so inserting a job, application or interview through REST or the Console answers 500 on an unmodified boot — filed as #10, out of scope for this card. The demo rows were written against a local copy of the built artifact withhooks: [], supplyingdisplay_nameandemployerdirectly; the views are byte-identical to this branch, only the rows were seeded around the defect. Names and employers in the screenshots are invented.Not in this PR
.changeset/directory).🤖 Generated with Claude Code
https://claude.ai/code/session_01PbJ5Cy9KDAzeQHo8bsMadG
Generated by Claude Code