# Agenda v0.1.0 - Table of Contents

> Resource-constrained scheduling for Tempo — named resources with attributes, places that contain them, the requirements a session places on them, and the allocation ledger that keeps it all true.

## Pages

- [Agenda](readme.md)
- [Getting started](getting-started.md)
- [Sequencing, tracks and affinity](sequencing-and-affinity.md)
- [License](license.md)
- [Changelog](changelog.md)

- Case studies
  - [Case study: ElixirConf 2027](case-study-conference.md)
  - [Case study: consultants on customer sites](case-study-consultants.md)
  - [Case study: ElixirConf US 2025](case-study-elixirconf.md)
  - [Case study: meeting rooms and AV equipment](case-study-meeting-rooms.md)

## Modules

- Core
  - [Agenda](Agenda.md): Resource-constrained scheduling for `Tempo`.

- Resources and places
  - [Agenda.Place](Agenda.Place.md): A place — a named location that contains resources and other places.
  - [Agenda.Resource](Agenda.Resource.md): A resource — a named thing that can be allocated to a session.

- Requirements and matching
  - [Agenda.Predicate](Agenda.Predicate.md): The attribute predicate vocabulary — the words a requirement is
written in.
  - [Agenda.Requirement](Agenda.Requirement.md): A requirement — what a session demands of the resources allocated to
it.

- Sessions and programmes
  - [Agenda.Interest](Agenda.Interest.md): One resource would like a session with another.
  - [Agenda.Precedence](Agenda.Precedence.md): One session must finish before another starts.
  - [Agenda.Preference](Agenda.Preference.md): What makes one workable layout better than another.
  - [Agenda.Programme](Agenda.Programme.md): Everything being laid out at once — the tracks, the standalone
sessions, and the span they all fall inside.
  - [Agenda.Series](Agenda.Series.md): A session that repeats — a weekly stand-up, a fortnightly clinic, a
daily hand-over.
  - [Agenda.Session](Agenda.Session.md): A session — the thing being scheduled.
  - [Agenda.Track](Agenda.Track.md): A family of sessions constrained against *each other*.

- Planning and arranging
  - [Agenda.Arrangement](Agenda.Arrangement.md): One way a session could be held — a time, and a resource for every
role.
  - [Agenda.Arranger](Agenda.Arranger.md): Laying out a whole programme — a placement for every session, with
nothing clashing.
  - [Agenda.Conflict](Agenda.Conflict.md): Which constraints are *jointly* to blame.
  - [Agenda.Infeasible](Agenda.Infeasible.md): Why a session cannot be held.
  - [Agenda.Layout](Agenda.Layout.md): A programme laid out as far as it would go — what was placed, and
what was left out.
  - [Agenda.Planner](Agenda.Planner.md): Working out when and where a session could be held.

- Availability
  - [Agenda.Availability](Agenda.Availability.md): When a resource is open, and what of that is still free.
  - [Agenda.Refine](Agenda.Refine.md): Narrowing free time — the verbs that turn *"when is this open?"* into
*"when is this actually bookable?"*

- Claims and reconciliation
  - [Agenda.Allocation](Agenda.Allocation.md): One resource, bound to one session, over one interval.
  - [Agenda.Ledger](Agenda.Ledger.md): What is currently allocated, and to whom.
  - [Agenda.Limit](Agenda.Limit.md): How much of a resource may — or must — be claimed over a period.
  - [Agenda.Reconciliation](Agenda.Reconciliation.md): Whether a resource's claims account for the time it owed.

