Repository navigation
Repeating Task Evidence
An auditor asks: "Show me this check was done every month this year." For a repeating task, FreeITSM now answers on one page - every occurrence that should have happened, what happened to each, who did it, what the checklist recorded, and the gaps - and prints it or exports it.
Requested in #181; the design, with the decisions and the clarifications agreed on the issue, is Recurring task evidence - design. Developers: Repeating task evidence - Developer Guide.
History starts on the day this was added to your FreeITSM. Some things were never recorded before it - who completed an older task, a due date as it was before somebody moved it. The report says not recorded for those rather than guessing.
The task window has a History tab: everything that happened to the task, newest first.
- who created it - a person, or the repeat (on schedule, after the previous one was completed, or late, as a catch-up)
- every status change; who completed it, and the due date at that moment; reopening
- due-date, start-date, assignee and team changes - a change made after the task was completed says so
- a skip and its reason; whether a next occurrence was due, and when
- checklists attached and removed, and every tick, untick, value and result on their steps - unticking no longer erases who ticked it
Nothing in it can be edited or deleted, and it stays on record after the task is deleted. It is kept for every task, not only repeating ones.
Open it from a repeating task (Repeats β Execution history) or from Tasks β Evidence, which lists every repeating task - including ones that have been stopped, and ones whose tasks have all been deleted.
Choose a period of scheduled dates (a year by default). The page shows the repeat's rule, a summary line, then one row per occurrence that should have happened:
| Outcome | Means |
|---|---|
| On time | Completed on or before its original due date - and any date it had been moved to |
| On time after rescheduling | Completed after its original due date, but on or before the date it had been moved to at the time. Due the 1st, moved to the 8th, done on the 7th - this, never plain On time |
| Late | Completed after the due date in force at the time |
| Overdue / Open | Not completed yet - after, or before, its due date |
| Skipped | Closed on purpose, with the reason (section 3) |
| Missing | It should exist, and does not (below) |
| Not created yet | Due to be created today, and the repeating-tasks job has not run yet |
| Removed | Created, then deleted - its checklist results, exceptions and history are still shown |
| Not recorded | The history needed predates this feature |
And flags beside the outcome, none of which can make work look on time:
| Flag | Means |
|---|---|
| Rescheduled | Its due date was moved before it was completed |
| Due date changed after completion | Somebody edited the due date afterwards. The outcome is still judged by the date in force when it was completed |
| Created late | The scheduler made it after work on it should have started - it was catching up |
| Changed after completion | A checklist step changed once the task was done |
"On time" is a calendar day in the install's time zone. A task completed at 00:30 on the 2nd in London was not completed on the 1st.
- On a fixed schedule, the report works out every date the rule produced - using the rule as it was at the time, and leaving out any period the repeat was stopped - and a date with no occurrence is Missing. Viewing or exporting the report never creates the task.
- After completion, the next occurrence only exists once the previous one is done, so the report never invents a row before then. But once a completion or a skip made the next one due, and it never appeared, that is Missing, with the date it should have been due.
- For a repeat that existed before this was added, missing dates are worked out only from that day - the rule's earlier history was not recorded, and the report says so.
For a missing or late occurrence the report adds what the repeating-tasks job's run history shows for that time (see Background jobs):
- No recorded run of the repeating-tasks job between 2 and 9 March
- The repeating-tasks job failed on 3 March, with its message
- The job ran on 3 March but did not create it
- Created on 9 March by a catch-up run
- Run history not available for this period - before run history was kept, or older than it is kept
It says only what was recorded. "No recorded run" is not the same as "the job did not run", and the report never claims the second.
When a repeat makes each occurrence due later than the day it is for (the next working day, say), timeliness is judged against that due date - the one the occurrence was created with. A Saturday check due Monday and done Monday is on time, not on time after rescheduling. Each row also shows the period the occurrence checked. See The Work view.
Each occurrence's details list the forms it needed and their answers, the Knowledge procedures it followed (with the version whose text was kept - shown once under Procedures used), and its follow-ups with whether they are open. A form answer ticked as an Exception in the form designer is listed among the occurrence's exceptions.
When an occurrence should not happen - the server it checks was being replaced, say - open it and use Repeats β Skip, with the reason. It closes as skipped, not done, into the status chosen in Tasks β Settings β Evidence (Cancelled on a standard install). The report shows it as Skipped with the reason. A repeat set to repeat after completion makes its next occurrence, just as completing would.
A completed task should not imply the check it describes passed. A checklist step can ask for a result instead of a tick: in Checklists, open the procedure and switch on Ask for a result for the step.
On a task the step then shows Pass, Fail and Not applicable. Fail asks what went wrong before it is saved - the exception note. The task can still be completed with a failed step: the report lists it under Exceptions, so it cannot be hidden by the task being done. Steps that do not ask for a result keep their tick, and tickets always use the tick.
Procedures keep their versions. Saving a checklist procedure keeps the version before it, and every checklist on a task records the version it was given - so the report shows the procedure as it stood for that occurrence, and a later edit never rewrites an earlier one.
- Print opens the report ready for Print β Save as PDF, with the period, the time zone, who produced it and when on the page.
- Four CSV files that join on the task id: occurrences (one row per occurrence - outcome, flags, dates in UTC and local time), checklist results (one row per step), attachments and comments (one row per attachment - name, size and SHA-256 - comment, form submission, and linked ticket or change, by number), and form answers (one row per answer, for tasks that need forms - see Forms on tasks).
Every print and export is recorded at the bottom of the report: who, when, which file and which period.
| Setting | Choices | Default |
|---|---|---|
| Changing a completed task's checklist | Allowed, and recorded Β· Refused until the task is reopened | Allowed, and recorded |
| Deleting an occurrence of a repeat | Allowed, and kept as Removed Β· Not allowed - skip it instead | Allowed, and kept as Removed |
| Status a skipped occurrence moves to | Any of your closed statuses | The last closed status in your order |
| Who can run the evidence report | Anyone who can see the repeating task Β· Only roles with Run the evidence report | Anyone |
Each defaults to the forgiving choice, so upgrading changes nothing, and whichever you choose, nothing already recorded is lost - the stricter choices just stop the change happening at all. The tab itself needs the Configure repeating task evidence permission.
Somebody who should read the record and export the evidence, and change nothing:
- System β Analysts (or Teams) β Module access: give them Tasks at the Read only level.
- If the report is restricted, a role holding Run the evidence report (System β Roles).
They can open every task their companies allow, read its history and the evidence report, print and export it - and every change is refused, on screen and through an API key acting as them. That includes attaching or removing documents.
On a multi-company install the report lists only occurrences in companies the viewer can see, and says how many it left out. A linked ticket or change is named by number only.
- Repeating tasks Β· Tasks Β· Checklists & SOPs
- Background jobs - the run history the report reads
- Recurring task evidence - design (#181) Β· Repeating task evidence - Developer Guide
- Module access Β· Roles and permissions
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
-
Architecture
- β³ π§Ή Root folder tidy (URL routing)
- β³ π Database Integrity (FKs & constraints)
- β³ π οΈ Database Verification β Developer Guide
- β³ π§© Service Layer (UI + API share code)
- β³ πͺ€ Code traps (the TRAP: comments)
- β³ π Commenting for the Engineering wiki
- β³ π οΈ Engineering wiki scanner - Developer Guide
- β³ π Service-Layer progress
- π€ Contributing (read before a pull request)
- π§ͺ Developer tests
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- π Date & Time Formats
- π± Currencies
- π§ The sidebar (optional module rail)
- π§© Preference templates
- π Display order (modules, Watchtower cards) β Developer Guide
- Theming & Dark Mode
- ποΈ Recent β getting back to what you were doing
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
-
MobileβFriendly
- β³ π« Mobile: Tickets
- β³ π» Mobile: Assets
- β³ π Mobile: Calendar
- β³ π Mobile: Knowledge
- β³ π¦ Mobile: Service Status
- β³ πΌ Mobile: Watchtower
- β³ π§© Mobile: Problem Management
- β³ π Mobile: Change Management
- β³ πΏ Mobile: Software
- β³ β Mobile: Tasks
- β³ π Mobile: Forms
- β³ π Mobile: Contracts
- β³ π Mobile: Domains
- β³ π Mobile: People
- β³ π Mobile: Projects
- β³ ποΈ Mobile: Files
- β³ π Mobile: LMS
- β³ πΊοΈ Mobile: CMDB
- β³ πΊοΈ Mobile: Network Mapper
- β³ π§ Mobile: Process Mapper
- β³ βοΈ Mobile: Workflow
- β³ π₯οΈ Mobile: System
- β³ π Mobile: Reporting
- β³ π Mobile: System Wiki
- β³ π Mobile: Self-Service Portal
- β³ π§° Mobile: Techniques & Tricks
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- β³ π‘οΈ CSRF protection (S4) β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- π CardDAV contact sync
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π Proposal: custom fields, inventory import and change evidence (#194)
- β³ π οΈ Custom fields, evidence + inventory - review (#195-#197)
- β³ π οΈ Long forms in a task's Work view - review (#198)
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π REST API: Domains
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ π·οΈ REST API: Cost centres
- β³ π§βπΌ REST API: Analysts
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ π Rota copy and paste β Developer Deep Dive
- β³ β Checklists & SOPs
- β³ βοΈ Mandatory fields
- β³ π§Ύ Custom ticket fields
- β³ π·οΈ Ticket categories
- β³ π₯ Assigning tickets to a team, and escalation
- β³ π’ One board across every company
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ π Attachment size limits and large emails
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
-
β³
βοΈ Telegram channel - β³ β CSAT company scope and filters β Developer Guide
- β³ π₯ Microsoft Teams channel
- β³ π¨οΈ Mattermost channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ β Record previews
- β³ π Ticket notes: internal or shared
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ π¨ Telling the analyst a ticket is theirs
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π’ Ticket numbering
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ π Confidential tickets
- β³ π₯ Portal managers
- β³ π Who has seen a ticket
- β³ π Reading long tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ ποΈ The folder pane
- β³ π½ Just my tickets, or no closed ones
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- β³ π Scheduled work in your own calendar
- Problem Management
- Tasks
- π Projects
-
Assets
- β³ π’ Moving an asset between companies
- β³ π Shared asset locations
- β³ π§βπΌ Assigning assets to analysts
- β³ π Warranty and lease alerts
- β³ π Leases
- β³ π Saved table views
- β³ π¨οΈ Recording anything, and importing it
- β³ π·οΈ QR asset labels
- β³ π Who holds what, and handover documents
- β³ π₯οΈ The inventory agent (PowerShell)
- β³ ποΈ Proxmox VE servers
- β³ βοΈ VMware Cloud Director servers
- β³ π Linking equipment to tickets
- β³ βοΈ Follow-up tasks on a ticket
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
-
Forms
- β³ π¨ The form designer β Developer Guide
- β³ π Layout & the grid β Developer Guide
- β³ ποΈ Collections β grouping submissions
- β³ π Submissions as PDFs
- β³ β‘ What happens next β a form's own actions
- β³ π οΈ Sections & conditional logic β Developer Guide
- β³ π οΈ Lookup fields β Developer Guide
- β³ π‘οΈ Catalogue request approvals
- People
- Domains
- ποΈ Files
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ π’ One board across every company
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)
- What this is
-
π Bugs resolved
- β³ π Task descriptions were not cleaned
- β³ π Task documents ignored company scope
- β³ π Repeating tasks ignored company scope
- β³ π¬ #183 Mailbox checks overlapped
- β³ π #188 Transfer lock shown off when unknown
- β³ β #184 Subtask names and Overdue
- β³ π§© #186 Teams: the buttons did nothing
- β³ π Text in a change could run script
- β³ π AI settings changed without the AI permission
- β³ πͺ #178 Deleting an analyst failed
- β³ π« A team with no departments showed 0 tickets
- β³ π Projects: adding a phase did nothing on Save
- β³ π Leavers could still sign in
- β³ πΌοΈ Logo and courses broke on Apache with PHP-FPM
- β³ π’ Chat tickets ignored your ticket numbering
- β³ π Dates shown as a dash, or in server time
- β³ π Assets β Users showed people from other companies
- β³ π Restricted analysts could read other modules' data
- β³ πΌοΈ Replies with a picture in the thread failed to send
- β³ π Reply attachments never reached the customer
- β³ π οΈ Outbound email attachments β Developer Guide
- β³ π A global SSO provider was missing from the portal
- β³ π Behind a proxy, the SSO redirect said http
- β³ βοΈ The portal tagline moved when you saved it
- β³ π¨ The portal settings screen forgot what you saved
- β³ π‘οΈ The approvals inbox said "Error" and nothing else
- β³ π A table's answers were missing from the PDF
- β³ β A single-select column let you tick every option
- β³ π The portal ignored a form's field widths
- β³ π The tasks board stopped taking clicks
- β³ ποΈ #121 The index list is out of date after upgrading
- β³ π #133 The calendar subscription was empty
- β³ π #131 Tasks always reopened on the board
- β³ π₯ #129 Every page returned HTTP 500 after upgrading
- β³ π³ #127 A PHP warning above the System page
- β³ π #126 Notes stamped with the server's clock
- β³ π Storing every date in UTC
- β³ πͺ The portal was down for everyone signed in
- β³ βοΈ #120 Workflow notes could never be written
- β³ βοΈ #123 Three errors when running Database Verification
- β³ π #122 The description box was a stub in the corner
- β³ π£ Demo data deleted real accounts
- β³ π #117 Sign-in redirected to the wrong address
- β³ π¨ #108 The priority dot was invisible
- β³ β±οΈ #116 Time logged from the right-click menu
- β³ π #114 API keys refused by our own guard
- β³ ποΈ #110 Assigning a task told nobody
- β³ πͺ #107 Signed out while still working
- β³ π #103 "Share with Requester" reached nobody
- β³ π #102 Search found nothing for hyphens
- β³ πͺ #101 Source code editor opened behind
- β³ βοΈ #88 Subtasks could not be ticked off
- β³ π» #84 Asset deep link selected nothing
- β³ π« #79 A new ticket arrived with no status
- β³ π§ #79 A ticket from email did not say so
- β³ π #78 Bell opened to nothing
- β³ π¬ #77 Mail only collected from Inbox
- β³ π #74 The default password could not be changed
- β³ π¦ #70 Renaming an impact level
- β³ π€ #67 App-only mailboxes could not send
- β³ π #45 Verify only ever worked for Microsoft
- β³ π #45 IMAP reported as not authenticated
- β³ βοΈ An email template stopped escaping itself
- β³ π The portal dashboard showed the wrong time
- β³ π’ The folder said 99 and the list showed 96