Domain model
Every domain type is a Java record in package com.russmiles.confplanner.domain. All are
immutable. Actions pass these typed records between each other; no untyped Map/Object crosses an
action boundary. The types also drive planning order — see
Actions, conditions, and goals.
The tables below list each record's components (the canonical constructor parameters), their types,
and the lab in which the field first appears.
AttendeeProfile
The structured profile extracted from the attendee's free-text request. Implements
com.embabel.common.ai.prompt.PromptContributor.
| Component |
Type |
Description |
interests |
List<String> |
Concrete topics/technologies, as lower-case tags. |
role |
String |
The attendee's job role (stated or inferred). |
experienceLevel |
String |
One of Beginner, Intermediate, Advanced. |
goals |
List<String> |
What the attendee wants from the conference, as short phrases. |
avoidTopics |
List<String> |
Topics/tags the attendee explicitly does not want (Lab 1). |
| Member |
Signature |
Description |
contribution() |
String |
PromptContributor method. Returns an avoid-topics sentence, or "" when avoidTopics is null/empty. |
shouldAvoid(Session) |
boolean |
True when the session carries a tag matching any avoidTopics entry (case-insensitive). |
Speaker
A conference speaker. Fictional data loaded from the catalog.
| Component |
Type |
Description |
name |
String |
Speaker name. |
bio |
String |
Short biography. |
topics |
List<String> |
Topics the speaker is known for; used by the networking plan (Lab 5). |
Session
A single conference session. The day + startTime pair forms the time slot used for clash
detection.
| Component |
Type |
Description |
id |
String |
Catalog id (e.g. PC-01). Used everywhere the model refers to a session. |
title |
String |
Session title. |
abstractText |
String |
The session abstract. |
speakers |
List<String> |
Names of the session's speakers. |
track |
String |
Track name. |
room |
String |
Room name. |
day |
String |
Day, ISO date (e.g. 2026-09-15). |
startTime |
String |
Start time (e.g. 09:00). |
endTime |
String |
End time (e.g. 10:15). |
level |
String |
Audience level (e.g. Intermediate). |
tags |
List<String> |
Coarse subject tags for matching and the avoid filter. |
| Member |
Signature |
Description |
slot() |
String |
The clash key: day + " " + startTime. A session occupies exactly one slot. |
SessionCatalog
The whole conference. Loaded once from JSON by CatalogService. See
Catalog schema.
| Component |
Type |
Description |
sessions |
List<Session> |
Every session in the catalog. |
speakers |
List<Speaker> |
Every speaker in the catalog. |
CandidateSessions
The shortlist: the sessions that plausibly match the attendee. A type distinct from
SessionCatalog, produced by shortlistSessions.
| Component |
Type |
Description |
sessions |
List<Session> |
The shortlisted sessions. |
SessionInsight
A researched verdict on one shortlisted session (Lab 2).
| Component |
Type |
Description |
session |
Session |
The session this insight is about. |
whyRelevant |
String |
One-sentence relevance statement. |
matchScore |
double |
0.0–1.0; higher means a better fit for the attendee's goals. |
ResearchedSessions
The shortlist annotated with research (Lab 2). Consumed by assembleSchedule, which is what makes
the planner route through researchSessions.
| Component |
Type |
Description |
insights |
List<SessionInsight> |
One insight per researched session. |
ScheduleItem
One chosen session placed in one slot.
| Component |
Type |
Description |
session |
Session |
The chosen session. |
slot |
String |
The slot label (day + start time) this session occupies. |
DraftSchedule
A proposed schedule that has not yet passed the guardrails (Lab 3). Produced by assembleSchedule;
gated by the noDoubleBooking invariant before confirmSchedule consumes it.
| Component |
Type |
Description |
items |
List<ScheduleItem> |
The proposed schedule items. |
rationale |
String |
The reasoning behind the picks. |
PersonalSchedule
The conflict-free personal schedule — the goal of ConfPlannerAgent. Implements
com.embabel.agent.domain.library.HasContent.
| Component |
Type |
Description |
items |
List<ScheduleItem> |
The confirmed, clash-free schedule items. |
rationale |
String |
The reasoning behind the schedule. |
| Member |
Signature |
Description |
getContent() |
String |
HasContent method. Renders the schedule as Markdown for the shell. |
NetworkingPlan
Who the attendee should try to meet — the goal of ConfNetworkingAgent (Lab 5). Implements
HasContent.
| Component |
Type |
Description |
peopleToMeet |
List<String> |
Suggested people to meet. |
rationale |
String |
The reasoning behind the suggestions. |
| Member |
Signature |
Description |
getContent() |
String |
HasContent method. Renders the plan as Markdown for the shell. |
PremiumBriefing
The output of the secured premium tool (Lab 3). Not consumed by the schedule goal, so it never
appears in the schedule plan.
| Component |
Type |
Description |
summary |
String |
A one-paragraph briefing across the researched sessions. |