Slips: five kinds, five refusals
A slip is a dated sheet clipped to a card. It says what changed, it comes down by itself when its window closes, and nothing it touched was ever edited. This is the one idea the whole theme is built around: today's change is data with a date window, not a paragraph somebody forgets to delete.
A slip is written at Slips › Post a slip. It has a short form and no body text.

| Control | What it is |
|---|---|
| Kind | One of the five below. |
| Clipped to | The card it renders on — a service, a dish, an hours row, or a bookable service. |
| Dish it replaces | For an Instead slip only. |
| Row it strikes | For Hours and Booking slips. Empty means "the card it is clipped to", which is almost always what you want. |
| Showing from / Until | datetime-local, read in your site's timezone, never the server's. |
| Posted by | The name printed on the sheet. Leave it empty and the sheet is signed with the author's display name. |
| Lines | One line per row, text | price, the price in the site's currency: Soup of the day | 9. Over the REST API a line carries price_cents instead. |
| Featured image | Optional: a photograph of the thing the slip is about. Today's changes tapes it up beside the slip. |
The time is not a field: the slip's post date is what prints as "Posted 07:52", followed by the name in Posted by.
The five kinds
The editor uses the human labels below. The key in parentheses is the stored value an API client or export sees; visitors see only the human label.
| Kind | The job it does | What it does to the card | The fields that write it |
|---|---|---|---|
Today (special) |
Post today's soup, or anything on for one day only. | Adds a line to the card for its window, and fills the row whose line was left empty. | Target: the service. Lines: the text, and a price when the line carries one. |
Instead (replaces) |
Strike a dish, or re-price it for one day. | Crosses the row out, stamps its number in the price column, and hides that dish's photograph. | Target: the service. Replaces: the dish. A price on the line is today's price; the dish's own does not move. |
Hours (hours) |
Close the terrace for the season, or shut one day. | Strikes one row of the hours record, wherever that row is printed. | Target: Hours, then the row — mon to sun, terrace, or a key you added yourself. |
Booking (policy) |
Temporarily replace the written policy for a bookable service. | Strikes its normal policy row and shows the dated replacement. Baseline bookability does not change. | Target: Booking, then the service. It must be a service you normally take bookings for. |
Note (notice) |
Say something that changes no row. | A line on the card, and nothing struck. "The second batch is in", "the last of the season". | Target: the card it belongs on. Lines only: no price, no dish, no row key. |
Where a slip shows
| Clipped to | Where a visitor sees it while it is live |
|---|---|
| A service or a dish | In the lane of that service's card, on /menu/ and on the home's served card when that service is the one being served. On all three homes: taped over the hero photograph when it is the newest, and among the (up to three) newest on the red Today's changes band, with its photograph. |
| An hours row | On the week's card on /visit/, striking its row. |
| A bookable service (a Booking slip) | On the policy card on /book/, striking that service's row. |
When no slip clipped to a service or a dish is live, the hero carries no slip at all and Today's changes says so in one quiet sentence. Neither ever shows an empty card.
How a slip behaves
| Behaviour | Rule |
|---|---|
| It strikes the row it supersedes | The row keeps its name and its place — the reader has to see what was taken away — takes a 2px strike, carries a stamped slip · n mark in the price column with the word beside it (never colour alone), and loses its thumbnail. |
| It expires | Past Until, it is not rendered, and the card underneath is the truth again. Nothing is deleted: the record and its revisions stay. |
| It does not render early | Before Showing from, it appears nowhere — not on the front end, not in a capture. |
| It takes room, it never lies on the rows | The card composes head, slip lane, rows and foot as siblings in one grid. Nothing is absolutely positioned, so no editor gesture and no viewport can misplace a sheet. |
| A cached page still knows | The card prints the day's schedule and every live slip's window into the page, and a small script re-derives which service is being served and which sheets are still up. See how a cached page knows. |
| Order | Slips on one card sort by the time they were posted, so the day reads in the order it happened. |
| A target deleted later | The slip stops rendering, the front end says nothing at all, and an admin-only notice names it. Never a fatal. |
To take a slip down early, move Until into the past, or use the Take a slip down ability. Do not trash it unless you want it gone from the history too.
The five refused shapes
A slip that would render nowhere is refused when you save it, not discovered missing three days later. The same five checks run in the editor, over the REST API and through the agent abilities.
Over REST the insert never happens. On the classic editing screen the slip is kept as a draft and the message is shown as an admin notice — never a fatal, never a silent loss.
These are the messages, word for word. […] is filled in with your own data.
1. It is clipped to something that does not exist
This slip is clipped to the [type] "[id]", which does not exist. A slip renders only on the card of its target, so nobody would ever see this one. Pick one of: […].
2. An "Instead" slip strikes a dish that is not served at that service
This slip strikes [dish] off the [service] card, but [dish] is not served at [service] (it is on: […]). The card would take the strike with no row under it.
Two near misses answer separately:
This "Instead" slip replaces dish [id], which is not on the menu. An "Instead" slip crosses a row out, so it has to name the row it crosses.
This "Instead" slip strikes [dish], but it is clipped to a [type]. The row it crosses out is on a service card, so the slip belongs on that service.
3. An "Hours" slip names a row your hours record does not have
This "Hours" slip strikes the row "[key]", which is not in your hours record. Nothing on the visit page would change. The rows you have are: […].
4. A "Booking" slip names a service you take no bookings for
This "Booking" slip is about "[service]", which takes no bookings, so there is no row on the booking page for it to strike. The services you take bookings for are: […].
5. Its window ends before it starts, or a date is missing
This slip runs from [from] until [to], which ends before it starts. It would never appear on the card. Swap the two dates, or push "Until" past "Showing from".
This slip has no dates. "Showing from" and "Until" are what make it come down by itself; without both, it would never render.
And: it has no lines
This slip has no lines, so the sheet would be clipped to the card blank. Write at least one line — what changed, and its price if it has one.
When a check cannot run
Checks 1 to 4 each need another part of the plugin to be switched on. With that part off, the check is skipped and the skip is named in the notice — "Checks that could not run". A save is never failed because a module is disabled, and a slip is never called fully checked when it was not.
The demo's seven slips
The Mireille demo ships five live, one expired and one still to come, so you can see all three states at once.
Every window is stored as an offset from your import day, so they land correctly
whatever month you import in. The slips clipped to a service are the ones the homes
tape up. Their windows close within a few days of the import, after which the homes show the quiet
state until you post a slip of your own.
| # | Kind | Clipped to | What it proves |
|---|---|---|---|
| 1 | Today | the Lunch service | The soup row, whose line is deliberately empty, gets today's line. |
| 2 | Instead | Lunch, replacing one dish | A struck row: the name stays, the strike and stamp appear, the photograph goes. |
| 3 | Note | the Goûter service | A line that changes no row. |
| 4 | Hours | the terrace row |
The terrace row is struck on the visit page's week. |
| 5 | Booking | the brunch booking row |
Weekend brunch's normal policy is visibly superseded by a dated walk-in-only message; the baseline count remains labelled “Normally”. |
| 6 | Today, expired | Lunch | Renders nowhere. The card underneath is the truth again. |
| 7 | Hours, future | the tue row |
Renders nowhere, on the front end or in a capture. |