Card docs/backlog/08-platform-seeker-views.md · Milestone M2 · Blocked-by: M1 (PR #1)
Scope
src/views/employer.view.ts, report.view.ts, skill.view.ts, credential-type.view.ts, candidate-credential.view.ts; extend job.view.ts / application.view.ts from #2 (rebase on it if it landed; otherwise coordinate through the PM). Load objectstack-ui.
Spec
Platform: ats_employer grid + listViews.pending_verification (verification_status == 'pending'), form with verification section (docs, status, note); ats_job.listViews.pending_review; ats_report grid (subject, target_type, reason, status, reporter) + listViews.open (status in ['new','investigating']); dictionary grids for ats_skill, ats_credential_type.
Seeker: ats_job.listViews.search — grid over status == 'published' only, columns title, employer, city, work_mode, salary_min, salary_max, employment_type; ats_application.listViews.mine as timeline ordered by applied_at; ats_interview.listViews.mine calendar; ats_candidate profile formViews.profile (all fields, salary section last); ats_candidate_credential grid.
Public application form — on ats_application.formViews.apply_public: type: 'simple', sharing: { enabled: true, allowAnonymous: true, publicLink: '/apply' }, fields limited to job, cover_letter, resume_snapshot plus whatever candidate identity fields the platform's public-form contract allows; submitBehavior: { kind: 'thank-you', … }.
The guest grant already exists — ats_guest_apply in src/security/permission-sets.ts, INSERT-only on ats_application. Do not widen it.
⚠️ If the public-form contract cannot create the linked ats_candidate in the same submission, stop and return needs_decision with the two options (two-step apply, or a lightweight ats_inquiry object). Do not invent a third.
Acceptance
pnpm validate && pnpm lint && pnpm typecheck green; paste the three tails in the PR.
GET /api/v1/forms/apply returns the whitelisted schema; an anonymous POST creates a row and no read is possible.
Out of scope
Navigation/apps, dashboards, translations.
Field names and enum values are pinned in DESIGN.md §02; the isolation model is §03. Delivery process is in AGENTS.md.
Card
docs/backlog/08-platform-seeker-views.md· Milestone M2 · Blocked-by: M1 (PR #1)Scope
src/views/employer.view.ts,report.view.ts,skill.view.ts,credential-type.view.ts,candidate-credential.view.ts; extendjob.view.ts/application.view.tsfrom #2 (rebase on it if it landed; otherwise coordinate through the PM). Loadobjectstack-ui.Spec
Platform:
ats_employergrid +listViews.pending_verification(verification_status == 'pending'), form with verification section (docs, status, note);ats_job.listViews.pending_review;ats_reportgrid (subject, target_type, reason, status, reporter) +listViews.open(status in ['new','investigating']); dictionary grids forats_skill,ats_credential_type.Seeker:
ats_job.listViews.search— grid overstatus == 'published'only, columns title, employer, city, work_mode, salary_min, salary_max, employment_type;ats_application.listViews.mineas timeline ordered byapplied_at;ats_interview.listViews.minecalendar;ats_candidateprofileformViews.profile(all fields, salary section last);ats_candidate_credentialgrid.Public application form — on
ats_application.formViews.apply_public:type: 'simple',sharing: { enabled: true, allowAnonymous: true, publicLink: '/apply' }, fields limited to job, cover_letter, resume_snapshot plus whatever candidate identity fields the platform's public-form contract allows;submitBehavior: { kind: 'thank-you', … }.The guest grant already exists —
ats_guest_applyinsrc/security/permission-sets.ts, INSERT-only onats_application. Do not widen it.ats_candidatein the same submission, stop and returnneeds_decisionwith the two options (two-step apply, or a lightweightats_inquiryobject). Do not invent a third.Acceptance
pnpm validate && pnpm lint && pnpm typecheckgreen; paste the three tails in the PR.GET /api/v1/forms/applyreturns the whitelisted schema; an anonymous POST creates a row and no read is possible.Out of scope
Navigation/apps, dashboards, translations.
Field names and enum values are pinned in
DESIGN.md§02; the isolation model is §03. Delivery process is inAGENTS.md.