Repository navigation
Releases: j33f/TasksPipes
Release list
TasksPipes 0.10.0
Instance settings in the administration, merged in #30.
Features
-
Instance settings in the administration (#29): a new Settings tab, applied at once without a restart:
- SMTP, with a test e-mail;
- Outline on or off, its servers and API key sign-in;
- Outline OAuth;
- sign-up and invitations by e-mail, with the allowed e-mail domains;
- company sign-in (OIDC).
Also a History of changes tab.
Upgrading
- Database: two new tables,
instance_settingsandinstance_settings_history, created at start, nothing removed. - Environment variables:
- a variable that is set (and not empty) locks its setting in the interface. Leave out, or empty, the variables you want to manage in the app (see
docs/HOSTING.md); - in particular, check the defaults passed by your
composefile (ALLOW_API_KEY_LOGIN: …:-true,SMTP_PORT: …:-587…).
- a variable that is set (and not empty) locks its setting in the interface. Leave out, or empty, the variables you want to manage in the app (see
- New optional variables:
OUTLINE_ENABLED,EMAIL_DOMAINS.
Full changelog: v0.9.0...v0.10.0
TasksPipes 0.9.0
Features 2 to 16 of the roadmap since v0.8.0, merged in #16.
Changelog
Features
- Global search (#9):
- finds every task you can see, in all pipes and incoming buckets: title, description, sub-tasks, field values, linked document, comments, or number (
TP-123); - PostgreSQL full text, accents ignored, French and English stemming;
- from the sidebar or with Ctrl/⌘ + K, filtered by status, owner and task type;
- access rules are applied in the SQL query itself, and confidential tasks show no excerpt.
- finds every task you can see, in all pipes and incoming buckets: title, description, sub-tasks, field values, linked document, comments, or number (
- Outline colleagues take part once signed in (#10):
- workspace members who never signed in get no task, ownership, team membership or e-mail;
- they can be invited instead, by e-mail or with a link to copy when the instance sends no e-mail.
- Instance administration and GDPR (#11):
- administrators named by
ADMIN_EMAILSsee every account and can disable or enable one; - Outline sessions are checked hourly and closed when Outline revokes access;
- data export (a zip of
data.jsonplus the tasks' files); - account deletion for e-mail accounts, confirmed by a two-factor code or a link sent by e-mail. The history is kept under "Deleted account", and teams the person alone administered get their oldest other member as admin.
- administrators named by
- Export and import of tasks (#12):
- a pipe's tasks export as CSV or JSON, with the fields of their task types;
- CSV import with column matching and a preview, and Trello board import;
- every line is checked first, and nothing is imported while one is wrong.
- Public API and webhooks (#13):
- personal access tokens: read or read-write, expiring, stored hashed;
/api/v1, documented in OpenAPI with Swagger UI at/api/v1/docs;- outgoing webhooks per pipe: signed with HMAC-SHA256, retried with growing delays, and logged.
- Recurring tasks (#14):
- every n days, chosen weekdays, a day of the month, the first, n-th or last weekday, the last business day, or every year;
- at fixed dates, made on the date or some days ahead, or once the previous task is done;
- never made twice.
- @mentions (#15):
- in comments, descriptions and refusal reasons, suggesting only people who can open the task;
- the person is notified live in the app, and by e-mail only if they are not online.
- Dependencies between tasks (#17, #19):
- a task can wait for any other task its editor can open, across spaces; loops are refused;
- the task shows "Blocked", is left out of Next action, and moving it forward asks for confirmation;
- when the last blocker is finished, the owner and author are notified, in the app and by e-mail;
- a linked task one cannot open shows only its title and owner, or nothing at all if it is confidential or team-only.
- Task types of incoming tasks (#18):
- a task sent to someone's incoming only offers the types of the recipient's open pipes;
- a task's type can be changed when it is accepted or moved into a pipe.
- Labels and priority (#20):
- a priority for every task (urgent, high, medium, low), and labels per space;
- filters in pipes, My tasks and the search, and My tasks grouped by priority;
- the user stories' Priority field is migrated once into the new priority.
- Calendar view (#21): month and week views of due dates, with drag and drop to change a date, under the same rule as editing it.
- WIP limits and swimlanes (#22):
- a work-in-progress limit per column, set in the pipe type editor, warns once exceeded;
- the board can be split into swimlanes by owner or by task type.
- Estimates and logged time (#23):
- an estimate per task, and time logged by hand, up to 90 days back;
- the total is shown against the estimate;
- logged time counts in the weekly report and in exports.
- Installable app and push notifications (#25):
- a manifest and a service worker, which caches only the interface, never any data;
- Web Push on devices, sent while the person is not in the app, encrypted per RFC 8291 and signed with VAPID using
node:cryptoonly.
- Slack, Mattermost and Teams (#26): a pipe's webhooks can post short messages to a channel, in the webhook's language.
- Company sign-in with OpenID Connect (#27):
- any provider, authorization code flow with PKCE, and the ID token checked against the provider's keys;
- an e-mail account is linked only when the provider vouches for the address;
- optional allowed domains, and turned off with
OIDC_ENABLED=false.
- One file per language, and Spanish (#28):
- each language is one file,
locales/<code>.json, and adding one needs no code change; - Spanish is complete.
- each language is one file,
Fixes
- Webhooks (#15): a delivery written just before a sending pass could wait for the next one (database and app clocks).
- Tests:
- Documentation: the note under the rate-limit table of
HOSTING.mdrendered as a table row.
CI
- CI and CodeQL also run on
devand on pull requests targeting it (#8).
Upgrading
-
Database: the schema is updated at start, idempotently, with nothing removed.
- New tables:
task_search,api_tokens,pipe_webhooks,webhook_deliveries,task_recurrences;task_dependencies,space_labels,task_labels,task_time_entries,push_subscriptions,schema_steps.
- New columns on
users,tasks,notificationsandpipe_webhooks. - CHECK constraints: some are wider; the one on
users.localeis dropped, and the app now checks the language instead. - On the first start, existing tasks are indexed for the search, and the user stories' priority is copied once.
- New tables:
-
PostgreSQL extensions: with a database of your own, the account must be allowed to create
unaccent, as it already must forpgcrypto. -
Language files: the
locales/folder at the root of the repository must ship with the app. TheDockerfilecopies it;LOCALES_DIRcan point elsewhere. -
New optional environment variables, documented in
docs/HOSTING.mdand.env.example:ADMIN_EMAILS;WEBHOOK_ALLOW_PRIVATE;VAPID_PUBLIC_KEY,VAPID_PRIVATE_KEY,VAPID_SUBJECT;OIDC_ISSUER,OIDC_CLIENT_ID,OIDC_CLIENT_SECRET,OIDC_NAME,OIDC_SCOPES,OIDC_ALLOWED_DOMAINS,OIDC_ENABLED;LOCALES_DIR.
DEFAULT_LOCALEnow accepts any language that has a file. -
Behaviour changes:
- Outline members who never signed in can no longer be sent tasks, assigned, or added to teams, and get no e-mail;
- accounts that never signed in get no notification or report e-mail;
- a task sent to someone's incoming must have a type offered by their open pipes, or the plain Task type;
- the user stories' Priority field is replaced by the priority every task now has.
-
New dependencies (server, official Fastify plugins):
@fastify/swagger@9.9.2and@fastify/swagger-ui@6.1.2. Web Push and OIDC use no dependency. -
Code scanning: the server-side request forgery alert on user-chosen URLs is closed as won't fix (#23, #25).
-
GitGuardian: incident 38362696 concerns the public test values of RFC 8291, in a commit of #24 that was closed and replaced by #25. Mark it as a false positive.
Not yet tried in real conditions
- Push notifications on real devices: Chrome, Firefox, and Safari on iOS (installed app).
- Slack, Mattermost and Teams channels with real incoming webhooks.
- OIDC against a real provider (Keycloak, Okta or Entra ID).
- Spanish: to be reviewed by a native speaker.
Known limitations
- "Online" is known per app instance: with several instances, someone connected to another instance still gets the e-mail for a mention or an unblocked task.
- Spanish search uses the English configuration: there is no Spanish stemming yet.
- OIDC colleagues do not see each other automatically: they connect through invitations, like e-mail accounts.
- Pipe import does not read priority, labels or logged time.
Full changelog: v0.8.0...v0.9.0