{
  "endpoint": "https://otherworldlabs.com/cleaning-checklist-minutes-a-week/api.json",
  "page": "https://otherworldlabs.com/cleaning-checklist-minutes-a-week/",
  "what_it_answers": "For each task a reader types with how long it takes once and how often it comes round in days, how many minutes a week and how many minutes of a thirty-day month that task takes; how many minutes a week sit under each room heading and under each person heading the reader names; what the whole routine takes in a week, restated as whole hours and spare minutes; and the gap between that week and the time a week the reader says they have. It is one conversion applied to every row: a periodicity turned into a weekly figure.",
  "shape": "A static document, not a service. There is no request to make and nothing is posted anywhere: this file is the engine written out so that an agent re-doing the arithmetic gets the same answer the page gets. The page's own flat answer is the function apiOutputs in its core script, and every output named below is a field of it.",
  "units": "Whole minutes typed, whole days typed, and minutes a week and minutes of a thirty-day month computed. This engine computes no money, no percentage, no area, no weight and no elapsed time: there is no amount, no price, no wage, no percentage figure, no clock time and no date anywhere in it.",
  "the_page_supplies_no_figure": "Every input is the reader's own: the number of rows, each task's own words, how long it takes, how often it comes round, the room heading, the person heading, and the time a week available. The page supplies no task and no task list, no room and no room list, no suggested interval and no typical duration, and it never says how often anything should come round, how long anything should take or who should do it. It recommends no product, chemical, cleaner, tool or method and asserts nothing about health, hygiene, mould, damp, asbestos, lead, pests, bacteria or air quality. It says nothing about what a landlord, tenant, agent, employer, inspector, standard, certification or licence requires, it signs nothing off and certifies nothing, and there is no money figure of any kind on the page or in the workbook sold beside it.",
  "state": {
    "shape": "{ taskCount, minutesAvailable, tasks: [ { label, minutes, intervalDays, room, person }, ... ] } or, in the second spelling, { taskList: [ { label, minutes, intervalDays, room, person }, ... ], minutesAvailable }",
    "task_count": "An integer read inside 1 to 20. It is how many rows are live; a figure outside the range in either direction is read as not typed and the engine then reads one row. Lowering it leaves the rows below it out of every figure without clearing what is typed in them.",
    "a_row": "label is free text, trimmed of repeated spaces and cut at forty characters, and blank is allowed; a row with a blank label is named by its own position. minutes is read inside 0 to 600 and intervalDays inside 0 to 365, both as whole figures. room and person are free text on the same terms as label, and blank is a real answer in both: the row still counts and sits in a named ungrouped bucket.",
    "the_second_spelling": "A caller may hand the rows in as taskList instead of taskCount plus tasks. Every entry of the list is a live row and taskCount is not read at all. Nothing is added by the second spelling and no state is reachable through it that the controls cannot reach: it exists because the workbook sold beside this page is one row a task, so the workbook's own task sheet IS this list, and S13 reads the two against each other over the same fills. The page's own test suite asserts the two spellings answer identically at every swept state.",
    "minutes_available": "An integer read inside 0 to 10080, which is the minutes in a week. Blank is a real state and not a nought: with nothing typed the routine's week prints and the gap does not, differenceDirection reads none, and differenceMinutes is reported as 0 because the field is a number and the direction is what says there is no gap to read."
  },
  "inputs": [
    {
      "name": "taskCount",
      "label": "How many task rows you are typing",
      "type": "integer",
      "control": "select",
      "offered": { "min": 1, "max": 20, "step": 1 },
      "blank_means": "one row",
      "note": "The page offers twenty rows and ships with three live and all three empty."
    },
    {
      "name": "minutesAvailable",
      "label": "The time a week you say you have, in whole minutes",
      "type": "integer",
      "control": "number",
      "offered": { "min": 0, "max": 10080, "step": 1 },
      "blank_means": "no time a week typed: the week prints and the gap does not",
      "note": "10080 is the minutes in a week. The page says nothing about what this figure ought to be."
    },
    {
      "name": "tasks[].label",
      "label": "What the task is",
      "type": "text",
      "control": "text",
      "offered": { "max_characters": 40 },
      "blank_means": "the row is named by its own position",
      "note": "The page supplies no task."
    },
    {
      "name": "tasks[].minutes",
      "label": "How long it takes, in whole minutes",
      "type": "integer",
      "control": "number",
      "offered": { "min": 0, "max": 600, "step": 1 },
      "blank_means": "with an interval typed the row is unfinished; with no interval typed either the row is empty",
      "note": "For one occasion of the task, not for a week of it. The page offers no typical duration."
    },
    {
      "name": "tasks[].intervalDays",
      "label": "How often it comes round, in whole days",
      "type": "integer",
      "control": "number",
      "offered": { "min": 0, "max": 365, "step": 1 },
      "blank_means": "with minutes typed the row is unfinished; with no minutes typed either the row is empty",
      "note": "A typed 0 is a real answer and means no recurrence was typed: the row then has no weekly figure at all, is in neither subtotal set and is in no total. The page offers no frequency."
    },
    {
      "name": "tasks[].room",
      "label": "The room you are putting it under",
      "type": "text",
      "control": "text",
      "offered": { "max_characters": 40 },
      "blank_means": "the row sits in the named ungrouped bucket of the room set and still counts in the week",
      "note": "The page supplies no room list."
    },
    {
      "name": "tasks[].person",
      "label": "The person you are putting it under",
      "type": "text",
      "control": "text",
      "offered": { "max_characters": 40 },
      "blank_means": "the row sits in the named ungrouped bucket of the person set and still counts in the week",
      "note": "An initial is enough; no name is asked for anywhere on the page."
    }
  ],
  "rounding": {
    "what_is_rounded": "Every weekly and monthly figure, once, to four decimal places, at the place it is first computed. A row's minutes a week is round(minutes * 7 / intervalDays, 4) and its minutes of a thirty-day month is round(minutes * 30 / intervalDays, 4); every subtotal, every total and the gap are sums or differences of those already-rounded figures, rounded again to four places. Nothing is rounded twice at a different precision and nothing is rounded to the cent, because there is no cent on this page: no figure in this engine is money.",
    "the_rounding_rule_at_the_half": "Round half away from zero on the double, which is what the page's own rN(v, n) does: it scales by ten to the n, adds one part in a thousand million to absorb a binary representation that sits a hair below a half, rounds the magnitude, and puts the sign back. At a POSITIVE half a tenth and a half goes to two tenths. At a NEGATIVE half it goes away from zero as well, so minus a tenth and a half goes to minus two tenths and not to minus one tenth: that is the negative half this engine has, and the only figure on the page that can be negative is the gap when the routine takes fewer minutes a week than the time typed, which is printed as a size with its direction in words and as a signed subtraction in the working.",
    "what_the_display_rounds": "The tables and the glance show a weekly or monthly figure to ONE decimal place, rounded by the same rule off the four-place figure. Where a positive figure would show as nothing at one decimal place the row prints the characters `under 0.1` instead of a nought, so a task done once a year is never printed as taking no time. The working block in section G prints the four-place figure, which is why every addition it prints is exact in its own printed characters.",
    "integer_reading": "A typed figure is read with parseFloat and then Math.round, once, before it is tested against its range: a duration typed 2.4 is read as 2 and 2.6 as 3. Math.round is half toward positive infinity on the double, so a typed 2.5 is read as 3; every range on this page starts at 0, so a negative figure is out of range and read as not typed in any case."
  },
  "formulas": {
    "minutes_a_week": "round(minutes * 7 / intervalDays, 4), computed only where both minutes and intervalDays are read and intervalDays is at least 1. The 7 is the days in a week.",
    "minutes_a_thirty_day_month": "round(minutes * 30 / intervalDays, 4), on the same condition. The 30 is a thirty-day month stated as such: this engine carries no calendar, no date and no month name, so it cannot know how long a named month is and does not pretend to.",
    "the_row_states": "A row is read into exactly one of five states, in this order: with neither minutes nor intervalDays read it is nothing-typed; with exactly one of the two read it is incomplete-no-interval or incomplete-no-minutes; with both read and intervalDays equal to 0 it is no-recurrence and has no weekly figure at all; otherwise it is complete.",
    "the_subtotals": "Two independent groupings of the SAME complete rows. The room set keys on the row's room text, the person set on its person text, each in the order the reader's own rows first name them, and a row whose text is blank in that column lands in a bucket named `No room named` or `No one named`. Each bucket's figure is the sum of its rows' four-place weekly figures, rounded to four places.",
    "the_routine_week": "The sum of every complete row's four-place weekly figure, rounded to four places. Because each subtotal set partitions exactly the same rows, the sum of the room buckets and the sum of the person buckets both come back to it, and the page prints both sums beside it as the comparison.",
    "the_clock_reading": "wholeMinutes = round(routineWeeklyMinutes, 0); clockHours = floor(wholeMinutes / 60); clockMinutes = wholeMinutes - clockHours * 60. The pair multiplied out and added is wholeMinutes again, which the page records as a claim and its own test suite asserts at every swept state.",
    "the_gap": "round(routineWeeklyMinutes - minutesAvailable, 4), computed only where the entry is finished and a time a week is read. Its direction is read off the figure at ONE decimal place: over when that is above nought, under when it is below nought, and equal when it is nought, so a gap smaller in size than a tenth of a minute is reported as equal to a tenth of a minute rather than as a direction nobody can see.",
    "the_waiting_rule": "waiting = rowsIncomplete > 0 || rowsNothingTyped > 0 || rowsComplete === 0. AMENDED 2026-10-26 at S12, with the middle term added: an entry is finished when every live row carries BOTH of its figures and at least one of those rows carries an interval of a day or more. A live row with neither figure on it holds the entry back, because a live row is a row the page is showing and a row the page is showing is a task the caller has asked for: a total that leaves it out is a part of the routine returned under a name that says the whole of it. Lowering taskCount (or shortening taskList) takes a row out of the live set and out of this rule with it, which is how a caller with one task gets a figure for one task. A row typed as coming round every nought days carries both figures and does not hold the entry back on its own account, but a routine of nothing but nought-day rows has no weekly figure to return, which is the third term."
  },
  "completeness": {
    "an_entry_is_complete": "when every live row carries both of its two figures, and at least one of those rows carries an interval of a day or more. AMENDED 2026-10-26 at S12: a live row with nothing on it carries neither figure and DOES hold the entry back, which is the change - it used to hold back nothing at all, and the page returned four confident headline figures off one typed row while two more rows sat blank on the screen. A row typed as coming round every nought days carries both figures and does not hold the entry back on its own account.",
    "what_that_withholds": "The routine's week, its clock reading, both subtotal sums, the gap, and the four additions in the working block. While the entry is unfinished all five headline rows print the word `withheld` and no figure, the two subtotal blocks print one withheld row each, the four additions in section G are dashed, the reconciliation block prints one sentence saying the comparison is held back and prints neither reconciliation sentence (amended 2026-10-26 at S12: the block used to print nothing at all, under a heading whose own sentence said two sentences were there), and the sentence saying what the page is waiting for prints in the panel above where the figures would stand.",
    "what_it_does_not_withhold": "The rows of the task table, including the minutes a week and the minutes a month of the rows that are finished, because a row is finished on its own and its figures are not the figures the headline is holding back. The four plain counts of rows are not withheld either: they are counts of rows and not weekly figures, and one of them is how a reader sees how much is still unfinished."
  },
  "states": [
    {
      "state": "a row typed as coming round every nought days",
      "reached_when": "minutes and intervalDays are both read and intervalDays is 0",
      "printed": "the row prints no weekly figure and no monthly figure, says it was typed as coming round every nought days and so has no weekly figure at all, is in neither subtotal set and in no total, and is counted in the printed count of rows carrying no recurrence"
    },
    {
      "state": "a row with its minutes typed and no interval",
      "reached_when": "minutes is read and intervalDays is not",
      "printed": "the row prints its minutes, dashes both computed figures and says it is waiting for how often it comes round; the entry is unfinished, so every headline figure is withheld and the panel says how many rows are in this state"
    },
    {
      "state": "a row with its interval typed and no minutes",
      "reached_when": "intervalDays is read and minutes is not",
      "printed": "the row prints its interval, dashes both computed figures and says it is waiting for how long it takes; the entry is unfinished on the same terms"
    },
    {
      "state": "a row whose interval runs past a week",
      "reached_when": "intervalDays is read above 7",
      "printed": "a real weekly figure and a small one. It is carried at four decimal places and shown at one; where one decimal place would show it as nothing the row prints `under 0.1` instead, and the count of rows in that position is named in the states section"
    },
    {
      "state": "a row with no room and no person",
      "reached_when": "a complete row whose room text and person text are both blank after trimming",
      "printed": "the row counts in the routine's week and sits in the bucket named `No room named` in the room set and in the bucket named `No one named` in the person set, so both sets still come back to the one week. It is counted in the printed count of rows with nothing to group them by"
    },
    {
      "state": "no time a week typed",
      "reached_when": "minutesAvailable is not read, in either direction of its range",
      "printed": "the routine's week prints and the gap does not: the gap row says no time a week is typed, the subtraction in the working block is dashed, differenceDirection reads none and differenceMinutes is reported as 0"
    },
    {
      "state": "every row blank",
      "reached_when": "no live row carries either of its two figures",
      "printed": "the entry is unfinished because every live row is blank and no row is complete. Every headline figure is withheld, and the panel names both reasons: that the live rows have nothing typed on them yet, and that no row yet carries both its minutes and an interval of a day or more. The wording was corrected 2026-10-26 at S12: the panel used to say that no task yet had both its minutes and how often it comes round typed, which was false in the neighbouring state where every typed row is a nought-day row, because such a row carries both of them"
    },
    {
      "state": "a live row with neither figure typed beside a finished row, which is the half-filled page",
      "reached_when": "rowsComplete is above 0 and rowsNothingTyped is above 0, which is what the first minute on the page looks like: the first row filled and the rest of the rows the row count shows still blank",
      "printed": "the entry is unfinished. Every headline figure is withheld, both subtotal blocks print one withheld row, the four additions are dashed, the reconciliation block says the comparison is held back, and the panel names the blank rows and says how to take them off the page. The finished row still prints its own two figures and its own two rates in the task table. ADDED 2026-10-26 at S12: before that the entry was finished in this state and the headline printed four figures off the one typed row, which is a part of the routine returned under a name that says the whole of it"
    },
    {
      "state": "a figure typed outside the range a control offers",
      "reached_when": "a typed figure reads above the control's maximum or below its minimum, in either direction",
      "printed": "it is read as a figure not typed, and is never pulled to the nearest figure the control offers. A duration nobody typed is not a duration this page will answer for"
    }
  ],
  "outputs": [
    { "name": "rowsLive", "type": "integer", "of": "how many task rows are live: the count typed, or the length of the list in the second spelling" },
    { "name": "rowsTyped", "type": "integer", "of": "how many live rows carry anything at all in any of their five cells" },
    { "name": "rowsComplete", "type": "integer", "of": "how many live rows carry both their figures with an interval of at least one day, and so are counted in the week" },
    { "name": "rowsIncomplete", "type": "integer", "of": "how many live rows carry exactly one of their two figures. Above nought this is what makes the entry unfinished" },
    { "name": "rowsNoRecurrence", "type": "integer", "of": "how many live rows were typed as coming round every nought days, and so have no weekly figure at all" },
    { "name": "rowsNothingTyped", "type": "integer", "of": "how many live rows carry neither of their two figures. Any such row holds the entry back, so this figure above 0 sets waiting true on its own" },
    { "name": "rowsUngrouped", "type": "integer", "of": "how many of the rows counted in the week carry no room and no person, and so sit in the named ungrouped bucket of both subtotal sets" },
    { "name": "rowsSmallRate", "type": "integer", "of": "how many of the rows counted in the week have a weekly figure above nought that would show as nothing at one decimal place, and so print `under 0.1` rather than a nought" },
    { "name": "routineWeeklyMinutes", "type": "number", "of": "the whole routine in minutes a week: the sum of every complete row's four-place weekly figure, rounded to four places. 0 while the entry is unfinished in the sense that no row is complete, and a real figure while a row is unfinished beside complete ones, which the page withholds from display rather than from this field" },
    { "name": "routineMonthlyMinutes", "type": "number", "of": "the same sum in minutes of a thirty-day month" },
    { "name": "roomSumMinutesAWeek", "type": "number", "of": "the room subtotals added, which is the first of the two routes back to the routine's week" },
    { "name": "personSumMinutesAWeek", "type": "number", "of": "the person subtotals added, which is the second" },
    { "name": "roomUngroupedMinutes", "type": "number", "of": "the minutes a week in the room set's named ungrouped bucket, which is the bucket keyed `No room named`. Corrected 2026-10-26 at S12: this is 0 where no bucket carries that key, which is NOT the same as 0 where no complete row has a blank room - a bucket's key is the row's own trimmed room text, so a caller who types `No room named` as a room heading lands that row in this bucket and this figure is not 0 with no blank-room row anywhere. rowsUngrouped is unaffected, because it tests the text for blankness rather than reading a key" },
    { "name": "personUngroupedMinutes", "type": "number", "of": "the minutes a week in the person set's named ungrouped bucket, which is the bucket keyed `No one named`, read the same way and with the same correction: 0 where no bucket carries that key, and a caller who types `No one named` as a person heading lands that row here" },
    { "name": "roomsNamed", "type": "integer", "of": "how many buckets the room set has, the named ungrouped one included where it exists" },
    { "name": "peopleNamed", "type": "integer", "of": "how many buckets the person set has, on the same terms" },
    { "name": "clockHours", "type": "integer", "of": "the whole hours in the routine's week, read off the week rounded to the whole minute" },
    { "name": "clockMinutes", "type": "integer", "of": "the spare minutes beside those hours, nought to fifty-nine" },
    { "name": "minutesAvailable", "type": "integer", "of": "the time a week as typed, and 0 where nothing was typed. timeAvailableTyped is what tells the two apart" },
    { "name": "timeAvailableTyped", "type": "boolean", "of": "whether a time a week was read at all" },
    { "name": "waiting", "type": "boolean", "of": "whether the entry is unfinished, which is what withholds every headline figure. True while any live row carries exactly one of its two figures, while any live row carries neither of them, or while no live row carries an interval of a day or more" },
    { "name": "differenceMinutes", "type": "number", "of": "the routine's week less the time a week typed, at four places, signed: above nought where the routine takes more of the week than the time typed. 0 where there is no gap to report, which differenceDirection distinguishes from a gap of nought" },
    { "name": "differenceDirection", "type": "string", "of": "one of over, under, equal, none or waiting. none means no time a week was typed; waiting means the entry is unfinished; equal means the gap is nought at one decimal place" }
  ],
  "worked_example": {
    "why": "one routine worked end to end in the reader's own spelling, with a task every three days, a task every week, a task once a year that must not print as nothing, a task typed as coming round every nought days, a task with no room and nobody against it, and a time a week the routine sits inside. Every figure below is this engine's own answer for the state above it.",
    "state": {
      "taskCount": "5",
      "minutesAvailable": "300",
      "tasks": [
        { "label": "wipe the hob", "minutes": "20", "intervalDays": "3", "room": "kitchen", "person": "A" },
        { "label": "hoover the stairs", "minutes": "12", "intervalDays": "7", "room": "stairs", "person": "B" },
        { "label": "descale the kettle", "minutes": "1", "intervalDays": "365", "room": "kitchen", "person": "" },
        { "label": "put the bins out", "minutes": "5", "intervalDays": "0", "room": "outside", "person": "B" },
        { "label": "tidy round", "minutes": "10", "intervalDays": "1", "room": "", "person": "" }
      ]
    },
    "outputs": {
      "rowsLive": 5,
      "rowsTyped": 5,
      "rowsComplete": 4,
      "rowsIncomplete": 0,
      "rowsNoRecurrence": 1,
      "rowsNothingTyped": 0,
      "rowsUngrouped": 1,
      "rowsSmallRate": 1,
      "routineWeeklyMinutes": 128.6859,
      "routineMonthlyMinutes": 551.5108,
      "roomSumMinutesAWeek": 128.6859,
      "personSumMinutesAWeek": 128.6859,
      "roomUngroupedMinutes": 70,
      "personUngroupedMinutes": 70.0192,
      "roomsNamed": 3,
      "peopleNamed": 3,
      "clockHours": 2,
      "clockMinutes": 9,
      "minutesAvailable": 300,
      "timeAvailableTyped": true,
      "waiting": false,
      "differenceMinutes": -171.3141,
      "differenceDirection": "under"
    }
  },
  "second_worked_example": {
    "why": "the unfinished entry: a row with its minutes and no interval, a row with its interval and no minutes, one finished row beside them, a row with nothing on it, and no time a week typed. The routine's week is a real figure in this field list and is withheld from every headline row on the page, which is the distinction the completeness section states.",
    "state": {
      "taskCount": "4",
      "minutesAvailable": "",
      "tasks": [
        { "label": "clean the oven", "minutes": "60", "intervalDays": "", "room": "kitchen", "person": "A" },
        { "label": "change the sheets", "minutes": "", "intervalDays": "14", "room": "bedroom", "person": "B" },
        { "label": "mop the hall", "minutes": "15", "intervalDays": "4", "room": "hall", "person": "A" },
        { "label": "", "minutes": "", "intervalDays": "", "room": "", "person": "" }
      ]
    },
    "outputs": {
      "rowsLive": 4,
      "rowsTyped": 3,
      "rowsComplete": 1,
      "rowsIncomplete": 2,
      "rowsNoRecurrence": 0,
      "rowsNothingTyped": 1,
      "rowsUngrouped": 0,
      "rowsSmallRate": 0,
      "routineWeeklyMinutes": 26.25,
      "routineMonthlyMinutes": 112.5,
      "roomSumMinutesAWeek": 26.25,
      "personSumMinutesAWeek": 26.25,
      "roomUngroupedMinutes": 0,
      "personUngroupedMinutes": 0,
      "roomsNamed": 1,
      "peopleNamed": 1,
      "clockHours": 0,
      "clockMinutes": 26,
      "minutesAvailable": 0,
      "timeAvailableTyped": false,
      "waiting": true,
      "differenceMinutes": 0,
      "differenceDirection": "none"
    }
  },
  "third_worked_example": {
    "why": "the second spelling, so an agent can see that the list is the same function. The list below is the one the first worked example's state builds, with the room and person cells written as the labels a workbook's own label sheet carries and two of them left blank, and with no time a week handed in - which is the state the workbook sold beside this page is read against at S13.",
    "state": {
      "taskList": [
        { "label": "wipe the hob", "minutes": 20, "intervalDays": 3, "room": "1 Kitchen", "person": "3 A" },
        { "label": "hoover the stairs", "minutes": 12, "intervalDays": 7, "room": "2 Stairs", "person": "4 B" },
        { "label": "descale the kettle", "minutes": 1, "intervalDays": 365, "room": "1 Kitchen", "person": null },
        { "label": "put the bins out", "minutes": 5, "intervalDays": 0, "room": null, "person": "4 B" },
        { "label": "tidy round", "minutes": 10, "intervalDays": 1, "room": null, "person": null }
      ]
    },
    "outputs": {
      "rowsLive": 5,
      "rowsTyped": 5,
      "rowsComplete": 4,
      "rowsIncomplete": 0,
      "rowsNoRecurrence": 1,
      "rowsNothingTyped": 0,
      "rowsUngrouped": 1,
      "rowsSmallRate": 1,
      "routineWeeklyMinutes": 128.6859,
      "routineMonthlyMinutes": 551.5108,
      "roomSumMinutesAWeek": 128.6859,
      "personSumMinutesAWeek": 128.6859,
      "roomUngroupedMinutes": 70,
      "personUngroupedMinutes": 70.0192,
      "roomsNamed": 3,
      "peopleNamed": 3,
      "clockHours": 2,
      "clockMinutes": 9,
      "minutesAvailable": 0,
      "timeAvailableTyped": false,
      "waiting": false,
      "differenceMinutes": 0,
      "differenceDirection": "none"
    }
  },
  "limits": [
    "No task, no task list, no room, no room list, no interval and no duration is supplied. Every one of them is typed by the reader, and the page says so where they are typed.",
    "No product, chemical, cleaner, detergent, tool, equipment or method is recommended, and nothing here says that anything cleans, disinfects, sanitises, kills, removes or protects against anything.",
    "No health, hygiene, allergen, mould, damp, asbestos, lead, pest, bacteria, virus or air-quality claim of any kind is made.",
    "Nothing here says what a landlord, tenant, letting agent, employer, inspector, standard, certification or licence requires. There is no bond, deposit, end-of-tenancy, handover, turnover or move-out claim, and nothing is signed off, accepted, approved or certified.",
    "Nothing is counted as done. Every row is a recurrence and not an event: there is no visit, no occasion, no tick and no record of anything having happened.",
    "There is no money figure of any kind on the page or in the workbook sold beside it: no price, no cost, no wage, no charge and no amount, and no claim about what a clean is worth or what anybody should charge.",
    "No staffing, hiring, rota, delegation or scheduling recommendation is made, and nothing here says who should do what.",
    "No routine is called adequate, thorough, sufficient, safe or enough. There is no verdict, no grade, no colour and no flag, and no room and no person is ever ordered by size.",
    "No percentage is printed and no share of the routine is printed, because a share would be an ordering of the rooms and the people the reader named.",
    "No calendar, no date, no month name and no clock time is carried. A thirty-day month is a thirty-day month and is stated as such wherever the figure is printed.",
    "No elapsed time is measured. There is no start, no finish, no punch and no threshold: a typed duration is multiplied by a typed recurrence.",
    "Nothing is stored and nothing is sent. The figures are gone when the tab closes, and the only text the page holds is the headings the reader types for their own rows."
  ]
}
