Living definitions — adhered to in every lesson. If code and this glossary disagree, code wins and we update here.
Keep this open while reading code. Each term links to where it lives.
visibility: private | public, clonedFromId, researchBrief.{ level: number, label: string, description: string }. Count = scaleLength.{ id, name, questions: Question[] }. Reports aggregate per domain.{ id, text, type: 'scale' | 'text' }. Scale questions get 1..scaleLength buttons.status: draft | active | closed, inviteToken: nanoid(32) unique, teamName, dueDate.answers: Record<questionId, number|string> in jsonb, plus respondentName/Role./respond/[token]. No auth required to submit. Checked for active status in submitResponse."use server" in app/actions/*.ts, zod validation, getUserId() guard. Not API routes.db/migrations). db/run.js loads .env.development.local for dbmate.trustedOrigins: * in dev, getUserId() throws if unauthenticated.llm_keys via lib/crypto.ts AES-GCM PBKDF2.advanced, maxResults 5).$pageview + identify on auth.app/globals.css.Glossary is the map legend. The territory is in the lessons — each one practices a term in context.