Check-ins
A check-in is a short message in the standup room or in a direct message with the bot. Everything else in InRoots is derived from it.
The format
A sign-in has a section for what you did since the last working day, a section for what you plan today, and a line for blockers. Header spellings are flexible: Yesterday, Last-sign, Sign-in, Check-in and their variants are all accepted; Today and Tod; Issues, Blockers, Problems, Challenges or Help.
- NPs, none, nothing or similar on the Issues line means no blocker. Anything else opens a blocker with its own clock.
- Bullet and emoji prefixes from rich chat clients are tolerated; indented continuation lines belong to the item above them.
- Admins choose whether the Issues line and a location tag are mandatory (signin.require_issues_line, signin.require_location_tag).
Yesterday: - refined the card components - organised the data-centre section Today: - continue the storage section Issues: NPs
Sign-off and quick sign-in
Sign-off is a single message. The keyword is configurable and fuzzy: sign off, signoff, signing off, signed off, sign out, clock out and checkout all work, and a one-character typo such as sign-of or sing off is accepted. A two-character slip is not guessed at; the bot asks whether you meant sign-off. Ordinary words that merely look similar (sign it, signal, resign) are never treated as attendance.
- A sign-off after midnight closes the day it belongs to, as long as no new sign-in has happened and the shift stays under 18 hours (attendance.max_retro_session_hours).
- Signing in again after a sign-off reopens the day; a day left open that way costs half the missed-sign-off deduction, not the full one.
- If the bot cannot decrypt a message from a tracked person it retries, then tells the sender the message did not register and should be re-sent. A sign-off with no sign-in that day gets a heads-up in the room acknowledgement.
sign off sign in @office sign in @home
What is extracted
When the structured parser cannot make sense of a message that still looks like a standup attempt, the AI fallback parser extracts the same fields from free text. It is a non-essential call, so it is subject to the daily AI budget and degrades to the plain parser when the budget is spent.
- Sign-in and sign-off times in your own timezone, and the hours between them.
- Each line under Today becomes a task; each line under Yesterday closes one.
- The Issues line becomes a blocker with an owner and an opened-at time.
- A location tag (@office, @home) when present; otherwise the network is classified on-host if location is enabled and consented.
- A progress-quality score for the day: specific, well-broken tasks score high; vague items (continue, ongoing, stuff) earn almost nothing; coordination items (meeting with X) earn a small capped credit; the same tasks repeating day after day are penalised.
Task lifecycle
You never type close. A task only stays open while you keep listing it. Tasks open two or more days get one nudge a day at 09:30 covering all of them, never on a day off, never more than one proactive message per person per day, and not again for three days.
| Active | listed under Today, in progress |
|---|---|
| Blocked | explicitly marked blocked |
| Stalled | the same text two or more consecutive days without completion |
| Repeated | the same text three or more days in the window |
| Completed | listed once under Yesterday and dropped from Today; counts toward Progress |
| Auto-closed | simply stopped being mentioned; closed on the next standup that omits it and never counted as a completion |
Strikes
Format strikes are a hygiene nudge and are capped so they can never dominate a score. Attendance strikes (a genuine no-show or missed sign-off on a working day) carry the real weight. Strikes use a three-step ladder.
- A late sign-in asks for a reason. A valid circumstance (medical, family emergency, transit, outage) waives the late mark; the reason is judged by the strongest model configured, and a classifier outage can never produce a strike.
- Replying np keeps the late mark and adds no strike. Answering a presence check instead of the reason is never mistaken for an excuse.
- Admins can forgive one strike or all of them from the employee card; the scorer also waives strikes on days later excused by leave or a holiday.
| 1 of 3 | a one-time pass, explained in a direct message |
|---|---|
| 2 of 3 | last warning |
| 3 of 3 | an admin is notified |
Machine-written standups
A fast heuristic estimates whether a standup was generated by an AI assistant from its vocabulary and phrasing; only when the heuristic is high does the product ask the configured model for a second opinion. The combined score is stored on the check-in and used to decide whether to ask the person for specifics. Nothing is rejected automatically.