Skip to content

Upkeep Kit

id: upkeep · sections: Chores, and Suggested once some kit has proposed work · state: first prototype, verified on a test installation.

Work with a date and a name on it: "update the firmware on the switch by Friday", "check that the database restores this quarter", "remove the access of the person who left". Not a job in the platform's queue — those are done by machines — and not a tracker: Jira, YouTrack and the rest keep a list of tasks better. The kit is worth installing for one reason: the distance between noticing something wrong on a screen of the platform and writing it down is one press, and the chore remembers the screen.

What it does

A button on every screen

The kit puts "Write a chore" into the platform's header, on every screen of every kit — the network map, a backup's report, a cluster's node. The dialogue that opens is the kit's own, and the chore it writes keeps where it was written: the kit, the section, and what that screen was showing — a filter, the thing that was open. Whoever picks the chore up later presses "Open that screen" and lands where the problem was seen, rather than reading "find out why some addresses have no DNS name" a week later and not knowing which addresses.

The dialogue keeps what was typed until Add is pressed: closing it with a click outside, or walking off to another screen to look something up, does not lose the paragraph. Reset is the one thing that empties it. The priority and the "who" of the last chore stay chosen for the next one — reports come in runs.

What a chore is

  • A title, a note, a priority, a date, an owner, a state. The title is a heading — two hundred characters; the description goes in the note.
  • Four priorities, and they are words: low, normal, high, urgent. In a month nobody remembers whether 1 was the most important or the least.
  • Four states, and no more: waiting, doing, done, cancelled. Boards, workflows and custom fields are what a tracker is for.
  • The owner is a person or a team of the platform, or nobody — and "nobody" is a deliberate answer: a chore written down in ten seconds and sorted out later beats one nobody wrote because the form asked who. One owner at a time: giving a team's chore to a person takes it off the team. Two owners is no owner; each assumes the other.
  • A date is a day, in the time zone the installation keeps (the platform's Configuration): a chore due on Friday is due by the end of Friday there, and the list shows the day.
  • Overdue is worked out, not set. A status somebody sets by hand is a status that is wrong every morning.

The list

Open chores first, the soonest and the loudest on top — the order is the answer to "what do I do next". Four answers to "which of them": to do (the default), doing, closed (done and cancelled together) and all of them; the choice is remembered in the browser. Mine and nobody's narrows the list to what is on you, on one of your teams, or on nobody — the pile somebody has to pick from is not hidden. Each chore shows its number, which is how people speak of it ("#12 is done"), and the last line of its log.

The list fits the window rather than the longest chore: a title and a note are shown as three lines (the whole of them under the mouse), long words break, and the column of buttons is pinned to the right edge. On a narrow window the secondary buttons fold under ….

What waits for what

A chore can wait for other chores: "update the firmware" waits for "agree the maintenance window". While anything it waits for is open, finishing it is refused with the reason — not a greyed-out button. A circle is refused at the moment it would be made: three chores each waiting for the next is a list where nothing can ever be finished. Deleting either end takes the link with it.

How it went

A chore that takes a week is done in stages — "today A is set up, tomorrow B". Each stage is written into the chore as a step, with its author and its moment, and the log reads from the top like a story. Finishing, cancelling and reopening are lines of the same log, written by the kit under the name of whoever pressed, in the same transaction as the change itself. A step can be added to a closed chore too: what was found out after closing it is still part of its story.

One's own step can be corrected or deleted; somebody else's cannot — not by an editor, not by an administrator: an entry corrected by another person is no longer what its author said, and the log shows it under the author's name. A corrected step says so.

When it is late

Urgent and late becomes a fact for the platform, and from there it is the platform's business: the alert, its owner, the person on duty, the route and the wording. Everything else stays in the list, in red. A chore list that pages people for a low-priority note is a chore list that gets muted.

The alert closes by itself when the chore stops being urgent and late — finished, cancelled, deleted, given a later date or made less urgent — rather than waiting for somebody to remember.

Suggested

Other kits notice work — a certificate about to expire, a copy nobody has ever restored — and can propose it through the platform. A proposal is not a chore until a person says so: it waits on its own screen, Suggested, with Write it down and Not now. A list that filled itself would be a list nobody opens.

  • The proposing kit says the same thing on every pass, under the same key; it stays one row with a fresher text, not a new line every five minutes.
  • Not now outlives the kit repeating itself.
  • Write it down makes an ordinary chore whose origin is the proposing kit's screen, exactly as if it had been written there by hand.
  • The kit can take a proposal back when it stops being true — the certificate was renewed. One nobody answered simply goes; one that became a chore stays while that chore is open, and the next time the kit says the same thing after the chore is closed, it is a new proposal.

The section is in the menu only while there is something on it. It appears by itself with the first proposal any kit makes, and goes again when the last one is forgotten — a screen that is empty by construction teaches people not to open it. The kit cannot ask which kits could propose (nothing in the platform lists them), so it goes by what it holds: a proposal is a fact, a declaration would be a promise. The menu follows within a few minutes, the next time the platform reads the kit's manifest. Of the kits published so far none proposes work yet, so on an installation of this release the section does not appear; the mechanism is part of the platform's contract and is there for the kits that will.

Who can do what

  • viewer reads the list, the chores and the proposals.
  • editor writes, edits, assigns, finishes and cancels chores, writes steps, answers proposals. Writing down what is wrong is the cheapest useful act in an estate, and a level of rights in its way is a level of rights that loses the note.
  • Deleting a chore is its author's or an administrator's. A deleted chore is not "done" — it is gone, and its log with it, other people's steps included. Everybody else sees Cancel it where the author sees Delete: the story stays, and Reopen brings it back.
  • A step is corrected or deleted only by its author.

A chore belongs to the organisation it was written in, and nothing of it is visible from another.

What it measures

Metric Help
tasks_open Chores nobody has finished
tasks_overdue Chores past their date
tasks_unassigned Chores with nobody's name on them
suggestions_waiting Things other kits proposed and nobody has answered yet

What it refuses to do, and why

  • Delete somebody else's chore unless you administer the kit: "only whoever wrote a chore, or an administrator, can delete it — cancel it instead".
  • Write a chore that says nothing, or a title longer than a heading: "the title is a heading: 200 characters, and the description goes in the note".
  • Give a chore two owners: "a task is somebody's or a team's, not both".
  • Finish a chore that waits for an open one: "this waits for {count} unfinished task(s) — finish or detach them first".
  • Make a circle of waiting: "that would make a circle: the other task already waits for this one".
  • Let anybody but its author change a step: "only the person who wrote an entry can change it"; the kit's own lines — finished, cancelled, reopened — are changed by nobody.
  • Turn a proposal into work by itself, and take a proposal from anybody but the platform: a person posting one is answered as if the address did not exist.
  • Send letters or messages of its own. The platform decides who hears what, through its routes.

What this prototype does not do

  • Does not attach a chore to a resource from the screen. The API keeps a resource_id, and an alert about a late chore carries it; there is no field for it in the form yet, and a chore does not show on the resource's card.
  • Does not repeat chores — "every quarter" is still written by hand.
  • Does not close a chore by a fact the platform saw (a verified copy, a renewed certificate): closing is a person's press.
  • Does not send a daily summary. The numbers are counted — the metrics above — but the platform's routes address the team on duty, not "this person, once a day".
  • Is not a tracker: no sprints, boards, estimates, time tracking or conversation. A step says what was done; it does not discuss what to do.

Free level

Every feature is free; open chores are counted: 20 of them. Finished and cancelled chores are not counted — a level that punished an installation for using the kit would be a strange level. At the ceiling, writing a chore and accepting a proposal are refused with the reason, and the list says so before anybody tries. A key that licenses the kit lifts the ceiling.

From the manifest: chores is a free feature; open_tasks: 20.

Configuration

AG_UPKEEP_WATCH (60 — how often, in seconds, the kit looks at what has come due; never less than 15), AG_UPKEEP_FREE_TASKS (20), AG_UPKEEP_PORT (8111) — in kits/upkeep/app/config.py. The kit keeps its own schema in the platform's database and has no volume of its own.