Orbit. Field Guide Ideonex

Orbit — complete functional guide

Product: Orbit by Ideonex Scope of this document: every screen, every field, every option value, and what each one means in practice.

This is written to be read in two ways. Read Part 1 straight through to learn how the product is meant to be used. Use Parts 2 onward as a reference when you need to know what a particular dropdown value actually does.

Everything here describes how the product actually behaves. Where it does not do something people commonly assume it does, that is called out rather than left for you to discover.


Part 1 — The flow

1. The mental model

Five nouns, nested. Learn these and the rest of the product follows.

Organisation  ─ one workspace, one bill, one set of users
   │
   ├── Department  ─ optional. A role granted here covers every project beneath it
   │      └── Team ─ a group of people you can assign work or roles to as a unit
   │
   └── Project     ─ a place you work in. Owns its issue types, workflow,
          │           board, components, versions, SLA policies, security levels
          │
          ├── Issue ─ the unit of work. Typed, keyed (ENG-142), owned, staged
          │      ├── Sub-tasks, links, comments, attachments, work logs
          │      ├── Participants  ─ everyone with a named job on it
          │      └── Baton         ─ who is holding it *right now*
          │
          ├── Board / Backlog / Sprints / Roadmap
          ├── Releases / Environments / Deployments
          └── Test suites / cases / cycles

Two ideas separate this product from a plain ticket list, and both are worth understanding before you start.

The baton. Every status declares which role owns work sitting in it. When an issue moves to "QA Failed", the engine knows that status is owned by the developer role, looks up who is filling the developer role on that issue, and hands it to them. Nobody reassigns anything by hand. The current holder is called the baton holder, and the product tracks how long they have held it, who passed it to them, how many times the issue has changed hands, and how many times it has gone backwards.

Stage versus status. A status is precise ("Regression Failed"). A stage is the macro phase a manager asks about ("it's in QA"). Every status belongs to exactly one of 16 stages, from a shared catalogue, which is what lets a portfolio report ask "how much work is stuck in QA across 40 projects" and get a truthful answer even though each project renamed its statuses.


2. Getting the workspace running

2.1 Register the organisation

/signup. You choose a workspace name and slug, create the owner account, and pick how many paid users you are registering.

  • Price is INR 100 per paid seat per month. Viewer-role users are free.
  • The organisation owner consumes one seat.
  • The first 10 organisations ever registered can claim one calendar month free with no Razorpay charge. Eligibility is counted in a global counter; deleting an organisation does not give the place back. The offer is available only at initial registration, never later.
  • The free month includes the full feature set.

2.2 Order of setup

Do these in order. Each one makes the next useful.

  1. Create a project (/projects → new). Pick its type; that decides which issue types it accepts. See §16.
  2. Invite people (/admin/people). Each invitation carries a role.
  3. Install a workflow (/admin/workflows). Nothing is seeded beyond a starter workflow — you choose a template or keep it minimal.
  4. Set project role defaults (project settings). This is the step teams skip and then wonder why routing does nothing. Without it, every new issue starts with an empty roster and the first handoff lands on nobody.
  5. Optionally: SLA policies, security levels, components, versions, custom fields, automation rules, SSO.

2.3 Signing in

  • Password login at /login.
  • Single sign-on if an administrator has configured and enabled a provider: Google, Microsoft, GitHub, Okta, generic OpenID Connect, or SAML.
  • If the workspace has enforced SSO turned on, password login is rejected for everyone except the workspace owner, who keeps a break-glass path in case the identity provider breaks.

On first login the server quietly creates anything missing — a starter project, a board, a general chat channel — and gives any issue without a project a home and an issue key.


3. A day in the product

This is the path the product is designed around. Follow it once and the rest of the reference will make sense.

Morning: what is actually on you

Two screens, and the difference matters.

ScreenWhat it showsUse it when
/my-workEverything assigned to you that is not finished, in no particular orderYou want your whole plate
/my-queueWork currently in your hands, oldest first, plus approvals awaiting your signatureYou want the list with someone waiting on the other end

/my-queue is the one to start with. It is ordered by how long the baton has sat with you, so the thing at the top is the thing somebody has been waiting on longest.

Raising work

/issues/new, or /create-ticket (the old URL, which redirects). Or, from chat, /ticket PROJ "Title" high @someone.

You pick a project, an issue type, and a priority; you write a title and a description. Everything else is optional at creation and can be filled in later. See §4 for every field.

The issue gets a key on creation — ENG-142 — from the project's own counter. That key never changes and is what people quote in conversation.

Moving work

Open the issue. The header answers three questions a status field cannot:

  1. Where is it? The stage pipeline — a stepper showing how far through it is.
  2. Who has it? The baton card — the holder, the role they are acting in, how long they have held it, and whether they are overdue.
  3. What can be done next? The transition bar.

The transition bar shows every move available to you. The forward move is the only filled button, so the common case is a glance rather than a read. Moves you cannot make are shown disabled with the reason, not hidden — "Close needs the two open subtasks finished" tells you what to do, where a missing button just looks broken.

Press a transition. If it has a screen, you are asked for the fields it needs (a rejection always asks for a reason). If it has validators, they run server-side and refuse with an explanation. If it has an approval gate, the issue parks where it is and an approval request goes out; the move completes when quorum is met.

Then the baton moves, automatically, to whoever fills the role that owns the new status.

The round trip that shows why this exists

A bug in the Defect Lifecycle workflow:

QA raises it                      → baton: triage officer
Triage confirms and routes        → baton: dev lead
Dev lead assigns                  → baton: developer
Developer fixes, marks ready      → baton: QA lead   (handoff #1, forward)
QA lead assigns a tester          → baton: QA engineer
Tester fails it                   → baton: the developer who wrote it
                                     (handoff #2, backward, bounceCount = 1)
Developer fixes again             → baton: the tester who failed it
                                     (not "the queue" — the baton remembers)
Tester passes it                  → baton: reporter, to verify
Reporter confirms                 → Closed

Nobody reassigned anything. handoffCount is 4, bounceCount is 1. An issue whose bounce count reaches 3 is flagged as ping-ponging, because work that has failed QA three times is usually a misunderstood requirement rather than a careless developer.

Closing and reopening a bug: the QA engineer who verified a fix can Close it from QA Passed, Regression Passed or Shipped. Anyone who works bugs can Reopen a closed or done bug (a reason is required). Won't fix and Cancel need issue:close (Project Manager and above).

Ending the day

  • Log time on what you worked on (issue screen → Log work).
  • Anything you are blocked on: park it with a transition whose intent is park, and say why. It returns to where it came from when you resume it.
  • /reports if you run a team.

Part 2 — Work items

4. Creating an issue, field by field

Screen: /issues/new.

FieldRequiredOptionsWhat it means
ProjectyesEvery project you can seeDecides the issue key prefix, the available issue types, the workflow, the board and the custom fields
Issue typeyesThe project's own list — see §5Decides which workflow governs the issue, through the project's workflow scheme
TitleyesFree text, max 250 charactersWhat people will see in every list. Write it as the thing to be done
DescriptionyesFree text, Markdown by defaultThe detail. Format is markdown unless set to plain
Prioritydefaults to mediumThe create form offers all six: lowest, low, medium, high, urgent, highestHow soon it should be picked up. Drives SLA targets
Due datenoDate picker, restricted to today through today + 7 days on this formA hard date for the whole issue. Note the one-week cap on the create form; longer dates are set on the issue screen
Story pointsnoNumber, steps of 0.5Relative size. Feeds velocity and burndown
Estimate (minutes)noWhole minutesOriginal estimate. Feeds remaining-estimate and timesheet reporting
LabelsnoComma-separated free textCross-cutting tags. Searchable, filterable
Assigneeno, and only shown if you hold issue:assignAny active userThe first baton holder. Leave empty and the workflow's role defaults fill it

Created through the API, an issue can also carry a parent (making it a sub-task), a sprint, an epic, components, versions, a security level, a milestone and custom fields.

If the project has no issues yet you will be sent to create a project first. Issues cannot exist outside a project.


5. Issue types, and when to use each

Sixteen types exist. A project only offers the subset that suits it.

Development types

TypeUse it whenNotes
epicA large body of work spanning several sprintsCarries the roadmap. Putting a milestone on an epic places it on the timeline
storyA unit of user-visible value, sized and estimatedThe normal currency of a scrum team
taskWork that needs doing but is not user-facingThe default type
subtaskA slice of a parent issueAlways has a parent. Many workflows refuse to close a parent while sub-tasks are open
bugSomething is behaving wrongly and must be fixedGets the Defect Lifecycle workflow by default. Carries severity
improvementSomething works, and could work betterThis is the "enhancement" type. Use it for polish, performance and usability work on shipped behaviour
featureNew capability that does not need epic-level breakdownBetween a story and an epic in practice
spikeTime-boxed investigation with a question to answer, not a thing to deliverUse this for "we need to find out whether X is possible". Close it with the answer written down
Note on the terms you may be used to. If your previous tool used scenario / bug / enhancement, the mapping is: scenario → a test case under Testing, or a spike if it is an investigation rather than a test; bug → bug; enhancement → improvement. Test scenarios are first-class objects here rather than an issue type, which is what lets them be executed repeatedly in cycles and produce defects.

Service management types

TypeUse it whenNotes
incidentSomething is broken in production nowIncident Response workflow. Can open a war-room chat channel automatically
problemThe underlying cause behind one or more incidentsOutlives the incident. Incidents link back to it
service_requestSomeone wants something delivered from a catalogueService Request Fulfilment workflow. The requester closes it, not the agent
change / change_requestA planned modification to a live systemITIL Change workflow, with a CAB gate
access_requestAccess to a system, tool or datasetA service request with its own label for reporting
hardware_requestA laptop, a monitor, a phoneAs above
software_requestA licence or an installationAs above

Which types a project offers

Set from the project type at creation, and editable afterwards:

Project typeIssue types offeredDefault type
softwareepic, story, task, subtask, bug, improvement, feature, spiketask
service_deskincident, service_request, problem, change, change_request, access_request, hardware_request, software_requestservice_request
businesstask, subtask, improvement, service_requesttask
opstask, subtask, incident, change, problemtask

Development and service issues live in one collection deliberately: links, comments, attachments, watchers, activity, search and audit then work uniformly across both, so a bug found in QA can link to the production incident that caused it with no special machinery.


6. Priority, severity, impact, urgency, risk

Five different questions. They are separate fields because conflating them is how a backlog ends up with forty "critical" items.

Priority — how soon we will act

Stored values: lowest, low, medium, high, urgent, highest. The create form, the issue screen and the API all offer the full set.

Priority is what SLA targets are keyed on, and the default sort on every work list.

Severity — how badly it is broken

sev1, sev2, sev3, sev4, or blank. Mostly used on bugs and incidents.

ValueConventional meaning
sev1Total loss of service or data; no workaround
sev2Major function unusable; painful workaround
sev3Minor function affected; acceptable workaround
sev4Cosmetic or trivial

Severity is a statement of fact about the defect. Priority is a decision about scheduling. A sev1 in a system nobody uses this quarter can legitimately be low priority.

Service fields: impact and urgency

On service issues, these two justify the priority rather than replacing it.

  • Impact — how wide the blast radius is: low, medium, high, organisation.
  • Urgency — how soon it has to be fixed: low, medium, high, critical.

Change fields: change type and risk

On change and change_request issues:

  • Change type — standard (pre-approved, routine, low risk), normal (goes to the Change Advisory Board), emergency (bypasses the board, still needs one signature, and the audit records that it was an emergency).
  • Risk — low, medium, high. The ITIL workflow asks for a rollback plan before a change with risk can proceed.

7. Resolutions

Set when an issue enters a status flagged as a resolution. Entering such a status also stamps resolvedAt.

ValueUse it when
(blank)Not resolved. Every open issue
doneCompleted as described
fixedA defect that has been corrected
wont_doA deliberate decision not to do it. Not a failure; a choice
duplicateAnother issue already covers it. Link the two
cannot_reproduceTried, could not make it happen. Say what you tried
declinedThe request was refused, e.g. an access request denied

Terminal statuses (done, closed, cancelled, rejected, duplicate, wont-do) cannot be left except through an explicit reopen transition.


Nine link types, in mirrored pairs plus one symmetric.

LinkMeaningReverse shown on the other issue
blocksThis must finish before the other can proceedis_blocked_by
is_blocked_byCannot proceed until the other is doneblocks
relates_toLoosely connected, worth reading togetherrelates_to
duplicatesSame thing as the other, raised twiceis_duplicated_by
is_duplicated_byThe other is a duplicate of this oneduplicates
causesThis produced the other, e.g. a change that caused an incidentis_caused_by
is_caused_byProduced by the othercauses
clonesCreated as a copy of the otheris_cloned_by
is_cloned_byThe other was cloned from thisclones

is_blocked_by is not decoration: the no_blocking_links validator refuses a transition while any blocking link is still open.


9. The issue screen

/issues/:id. Everything you can do to one piece of work.

The header

ElementWhat it gives you
Stage pipelineA stepper of the stages this workflow touches, with the current one marked. How far through it is
Baton cardWho holds it, the role they hold it in, how long they have held it, whether they are past their respond-by time
Transition barEvery move. Forward move filled, others outlined, blocked ones disabled with the reason
Roster panelWho fills which role on this issue, and which roles the workflow expects but nobody fills. Vacancies show up here before a gate refuses to open
Handoff trailEvery team-to-team pass, with direction and how long the previous holder had it
Approval cardShown while a gate is open: who must sign, who has, and your own approve/reject buttons if you are one of them

Fields you can edit inline

Project, type, priority, severity, assignee, reporter, labels, components, fix release, affects release, environment, milestone, sprint, story points, due date, start date, estimates, security level, and any custom fields the project defines.

Service issues additionally show: requester, requester department, category, subcategory, impact, urgency, change type, risk.

Actions

ActionWhat it does
Hand this overPass the baton to a named person, with an optional note. Use it for "on leave until Thursday, over to you"
Return to the queueDrop the baton so anyone in the role can claim it
Set / remove roleFill or clear a participant role on this issue
CommentMarkdown. @email mentions a person and notifies them. Comments can be edited, deleted, reacted to with emoji, and carry attachments
Internal noteA comment flagged internal. Hidden from reporters on service-desk projects. Needs ticket:internal_note
Log workMinutes spent, with a note. Accumulates into timeSpentMinutes and the timesheet report. One entry can be at most 24 hours (1440 minutes); log longer work as one entry per day
Watch / unwatchGet notified about everything on this issue
VoteRegister interest. Useful for prioritisation
LinkAdd one of the nine link types to another issue
AttachFiles. See §32
Delete issueNeeds issue:delete

Tabs

  • Comments — the conversation, newest last. Internal notes marked.
  • History — every field change, as from/to pairs, with who and when.
  • Handoffs — the team-to-team passes, separate from the noise of ordinary field edits.

Security level

If the project defines security levels, an issue can be restricted to one. An issue with no level is visible to anyone who can see the project — that is the normal case and the deliberate default.

Someone who cannot read a restricted issue gets a 404, not a 403. Confirming that a restricted issue exists is itself a leak.

The people named on the issue keep access by default (includeParticipants, includeReporter), so applying a level cannot lock an assignee out of their own work.


Part 3 — The workflow engine

10. Stages, statuses and categories

Three layers, each answering a different question.

Status category — what boards and burndowns read

Three values, and only three:

CategoryMeaning
todoNot started
in_progressBeing worked on
doneFinished

Renaming a status never breaks velocity or burndown maths, because those read the category.

Stage — the macro phase

Sixteen, ordered. The order is the pipeline.

#StageMeaning
0IntakeRaised, not yet accepted
1TriageClassified, reproduced and routed
2RefinementSpecified, designed and estimated
3ReadyAccepted and queued for delivery
4DevelopmentBeing built
5Code ReviewPeer and architecture review
6BuildMerge, pipeline and artefacts
7QATest team verification
8UATBusiness acceptance
9SecuritySecurity and compliance review
10StagingPre-production verification
11ReleasePackaging, change approval, go/no-go
12DeploymentGoing live
13Post-ReleaseProduction verification and warranty
14ClosureFinal states
99SuspendedParked. Returns to wherever it came from

Suspended sits outside the line on purpose. Work can be parked from anywhere and returns to where it came from, so giving it a position on the pipeline would make every burndown lie.

Status — the precise state

138 statuses in the shared catalogue, each tagged with its stage and the baton role that owns it. Full list in §11.

Status flags

Each status can carry four flags:

FlagEffect
isResolutionEntering it sets a resolution and stamps resolvedAt
isTerminalNothing leaves except an explicit reopen transition
pausesSlaSLA clocks stop ticking while the issue sits here
targetMinutesHow long work may sit here before it is flagged stale. Per-stage expectation, distinct from the whole-issue SLA

Why a shared catalogue

The moment two projects both invent "In QA" with different spellings, cross-project reporting stops working and every board needs a bespoke mapping. A shared id space means the portfolio question gets a truthful answer.

Your organisation still owns its copy: statuses are expanded from the catalogue and copied onto your workflow at install time, so you can rename "QA Failed" to whatever your team calls it without a later release overwriting the change.


11. The full status catalogue

Every status in the shared vocabulary, grouped by stage. Owner is the baton role that holds work sitting in that status: this column is the whole routing mechanism, so read it as "who has it while it is here".

Total: 138 statuses across 16 stages.

Intake — Raised, not yet accepted.

StatusIdOwnerCategoryFlagsNotes
DraftdraftReportertodoBeing written. Not visible to triage yet.
SubmittedsubmittedTriage OfficertodoHanded to triage.
Awaiting Informationintake-awaiting-infoReportertodopauses SLABack with the reporter for detail.
Duplicate Suspectedduplicate-suspectedTriage Officertodo
Automated Triageauto-triageSystemtodoRules are classifying it.
Intake Acceptedintake-acceptedTriage Officertodo
Intake Rejectedintake-rejectedReportertodoSent back. Not yet closed.

Triage — Classified, reproduced and routed.

StatusIdOwnerCategoryFlagsNotes
In TriagetriageTriage Officerin_progress
Severity Assessmentseverity-assessmentTriage Officerin_progress
Impact Analysisimpact-analysisBusiness Analystin_progress
Reproduction Pendingreproduction-pendingQA Engineerin_progress
Reproduction Confirmedreproduction-confirmedQA Engineerin_progress
Not Reproduciblenot-reproducibleReporterin_progressBack with the reporter for steps.
Needs Clarificationneeds-clarificationReporterin_progresspauses SLA
Routing to TeamroutingDevelopment Leadin_progress
Triage Approvedtriage-approvedDevelopment Leadin_progress

Refinement — Specified, designed and estimated.

StatusIdOwnerCategoryFlagsNotes
In RefinementrefinementBusiness Analystin_progress
Requirements Draftingrequirements-draftingBusiness Analystin_progress
Requirements Reviewrequirements-reviewProduct Ownerin_progress
Design Pendingdesign-pendingArchitectin_progress
Design In Progressdesign-in-progressArchitectin_progress
Design Reviewdesign-reviewArchitectin_progress
Estimation Pendingestimation-pendingDevelopment Leadin_progress
EstimatedestimatedDevelopment Leadin_progress
Refinement Blockedrefinement-blockedBusiness Analystin_progress
Refinement Completerefinement-completeProduct Ownerin_progress

Ready — Accepted and queued for delivery.

StatusIdOwnerCategoryFlagsNotes
BacklogbacklogProduct Ownertodo
PrioritisedprioritisedProduct Ownertodo
Sprint Candidatesprint-candidateDevelopment Leadtodo
Sprint Committedsprint-committedDevelopment Leadtodo
Ready for Developmentready-for-developmentDevelopertodo
Ready but Blockedready-blockedDevelopment Leadtodo

Development — Being built.

StatusIdOwnerCategoryFlagsNotes
Development Assigneddevelopment-assignedDevelopertodo
In Developmentin-developmentDeveloperin_progress
Development Pauseddevelopment-pausedDeveloperin_progress
Awaiting Dependencyawaiting-dependencyDevelopment Leadin_progresspauses SLA
Awaiting Third Partyawaiting-third-partyVendor / Third Partyin_progresspauses SLA
Local Testinglocal-testingDeveloperin_progress
Unit Tests Pendingunit-tests-pendingDeveloperin_progress
Unit Tests Failedunit-tests-failedDeveloperin_progress
Unit Tests Passedunit-tests-passedDeveloperin_progress
Development Completedevelopment-completeCode Reviewerin_progress
Development Reworkdevelopment-reworkDeveloperin_progressCame back from a downstream gate.

Code Review — Peer and architecture review.

StatusIdOwnerCategoryFlagsNotes
Pull Request Raisedpr-raisedCode Reviewerin_progress
Code Review Pendingcode-review-pendingCode Reviewerin_progress
Code Review In Progresscode-review-in-progressCode Reviewerin_progress
Changes Requestedchanges-requestedDeveloperin_progress
Peer Review Pendingpeer-review-pendingCode Reviewerin_progress
Architecture Reviewarchitecture-reviewArchitectin_progress
Review Escalatedreview-escalatedDevelopment Leadin_progress
Merge Conflictmerge-conflictDeveloperin_progress
Code Review Approvedcode-review-approvedBuild Engineerin_progress

Build — Merge, pipeline and artefacts.

StatusIdOwnerCategoryFlagsNotes
Merge Pendingmerge-pendingBuild Engineerin_progress
MergedmergedBuild Engineerin_progress
Build Queuedbuild-queuedSystemin_progress
Build Runningbuild-runningSystemin_progress
Build Failedbuild-failedDeveloperin_progress
Static Analysis Failedstatic-analysis-failedDeveloperin_progress
Build Passedbuild-passedQA Leadin_progress
Artefact Publishedartifact-publishedQA Leadin_progress

QA — Test team verification.

StatusIdOwnerCategoryFlagsNotes
Ready for QAready-for-qaQA Leadin_progressThe dev-to-test handoff.
QA Assignedqa-assignedQA Engineerin_progress
QA In Progressqa-in-progressQA Engineerin_progress
QA Blockedqa-blockedDevelopment Leadin_progress
QA Failedqa-failedDeveloperin_progressThe test-to-dev handoff. Baton goes back.
Retest Pendingqa-retest-pendingQA Engineerin_progress
Test Case Reviewtest-case-reviewQA Leadin_progress
Defect Triagedefect-triageQA Leadin_progress
Regression Pendingregression-pendingAutomation Engineerin_progress
Regression In Progressregression-in-progressAutomation Engineerin_progress
Regression Failedregression-failedDeveloperin_progress
Regression Passedregression-passedQA Leadin_progress
QA Passedqa-passedQA Leadin_progress
QA Sign-offqa-signoffQA Leadin_progress

UAT — Business acceptance.

StatusIdOwnerCategoryFlagsNotes
Ready for UATready-for-uatUAT Coordinatorin_progress
UAT Scheduleduat-scheduledUAT Coordinatorin_progress
UAT In Progressuat-in-progressBusiness Ownerin_progress
UAT Blockeduat-blockedUAT Coordinatorin_progress
UAT Faileduat-failedDeveloperin_progress
UAT Passeduat-passedUAT Coordinatorin_progress
Business Verificationbusiness-verificationBusiness Ownerin_progress
UAT Sign-off Pendinguat-signoff-pendingBusiness Ownerin_progress
UAT Signed Offuat-signed-offRelease Managerin_progress

Security — Security and compliance review.

StatusIdOwnerCategoryFlagsNotes
Security Review Pendingsecurity-review-pendingSecurity Analystin_progress
Security Scan Runningsecurity-scan-runningSystemin_progress
Security Findings Opensecurity-findings-openDeveloperin_progress
Penetration Test Pendingpen-test-pendingSecurity Analystin_progress
Compliance Reviewcompliance-reviewSecurity Analystin_progress
Security Review Passedsecurity-review-passedSecurity Analystin_progress
Security Sign-offsecurity-signoffSecurity Analystin_progress

Staging — Pre-production verification.

StatusIdOwnerCategoryFlagsNotes
Ready for Stagingready-for-stagingDevOps Engineerin_progress
Staging Deploy Pendingstaging-deploy-pendingDevOps Engineerin_progress
Deployed to Stagingdeployed-to-stagingQA Engineerin_progress
Staging Verificationstaging-verificationQA Engineerin_progress
Staging Failedstaging-failedDeveloperin_progress
Staging Verifiedstaging-verifiedRelease Managerin_progress

Release — Packaging, change approval, go/no-go.

StatusIdOwnerCategoryFlagsNotes
Release Candidaterelease-candidateRelease Managerin_progress
Release Notes Pendingrelease-notes-pendingRelease Managerin_progress
CAB Submissioncab-submissionChange Managerin_progress
CAB Reviewcab-reviewChange Managerin_progress
CAB Approvedcab-approvedRelease Managerin_progress
CAB Rejectedcab-rejectedDevelopment Leadin_progress
Go / No-Gogo-no-goRelease Managerin_progress
Release Approvedrelease-approvedDevOps Engineerin_progress
Release On Holdrelease-on-holdRelease Managerin_progresspauses SLA

Deployment — Going live.

StatusIdOwnerCategoryFlagsNotes
Deployment Scheduleddeploy-scheduledDevOps Engineerin_progress
Deployment Window Opendeploy-window-openDevOps Engineerin_progress
DeployingdeployingSystemin_progress
Deployment Faileddeploy-failedDevOps Engineerin_progress
Rollback Initiatedrollback-initiatedDevOps Engineerin_progress
Rolled Backrolled-backDevelopment Leadin_progress
Hotfix Requiredhotfix-requiredDeveloperin_progress
Deployed to Productiondeployed-to-productionQA Engineerin_progress

Post-Release — Production verification and warranty.

StatusIdOwnerCategoryFlagsNotes
Production Verificationproduction-verificationQA Engineerin_progress
Smoke Test Pendingsmoke-test-pendingQA Engineerin_progress
Smoke Test Failedsmoke-test-failedDevOps Engineerin_progress
Production Verifiedproduction-verifiedRelease Managerin_progress
MonitoringmonitoringDevOps Engineerin_progress
Post-Release Issuepost-release-issueDeveloperin_progress
Warranty Periodwarranty-periodSupport Agentin_progress
Handover to Supporthandover-to-supportSupport Agentin_progress

Closure — Final states.

StatusIdOwnerCategoryFlagsNotes
Pending Closurepending-closureReporterin_progress
Reporter Verificationreporter-verificationReporterin_progressBack to whoever raised it, to confirm.
Closure Approvedclosure-approvedUnassignedin_progress
DonedoneUnassigneddoneresolution, terminal
ClosedclosedUnassigneddoneresolution, terminal
CancelledcancelledUnassigneddoneresolution, terminal
RejectedrejectedUnassigneddoneresolution, terminal
DuplicateduplicateUnassigneddoneresolution, terminal
Won't Dowont-doUnassigneddoneresolution, terminal

Suspended — Parked. Returns to wherever it came from.

StatusIdOwnerCategoryFlagsNotes
On Holdon-holdDevelopment Leadin_progresspauses SLA
BlockedblockedDevelopment Leadin_progress
DeferreddeferredProduct Ownertodopauses SLA
Awaiting Approvalawaiting-approvalApproverin_progress
Awaiting Customerawaiting-customerReporterin_progresspauses SLA
Awaiting Vendorawaiting-vendorVendor / Third Partyin_progresspauses SLA
ParkedparkedProduct Ownertodopauses SLA
EscalatedescalatedDevelopment Leadin_progress

12. Baton roles and ownership routing

A baton role is a job a person does on one issue for one stage. It is not an organisation role. The same human is a reviewer on one issue and a developer on the next, and neither changes their permissions. Keeping the two separate is what lets ownership rotate without touching anyone's access.

The 23 roles

Handoff marks the roles that represent a different team picking the work up. Only those moments are stamped as handoffs, because the gap between a developer saying "done" and QA actually starting is where delivery time goes, and averaging it with intra-team churn hides it completely.

RoleIdGroupHandoffWhat they own
ReporterreporterrequesteryesWhoever raised it. Gets it back to verify
Triage Officertriage_officerrequesteryesClassifies and routes incoming work
Product Ownerproduct_ownerproductyesDecides whether and when it is built
Business Analystbusiness_analystproductyesWrites and owns the requirement
ArchitectarchitectengineeringyesOwns technical design and its review
Development Leaddev_leadengineeringyesRoutes work inside the engineering team
DeveloperdeveloperengineeringyesBuilds it
Code ReviewerreviewerengineeringyesReviews the change before it merges
Build Engineerbuild_engineerengineeringnoOwns merge and pipeline health
QA Leadqa_leadqualityyesOwns the test plan and the QA gate
QA Engineerqa_engineerqualityyesExecutes the tests
Automation Engineerautomation_engineerqualityyesOwns the regression suite
UAT Coordinatoruat_coordinatorbusinessyesRuns the acceptance cycle
Business Ownerbusiness_ownerbusinessyesAccepts it on behalf of the business
Security Analystsecurity_analystgovernanceyesOwns security and compliance review
Change Managerchange_managergovernanceyesRuns the change advisory gate
Release Managerrelease_managerdeliveryyesOwns what ships and when
DevOps Engineerdevops_engineerdeliveryyesOwns environments and deployment
Support Agentsupport_agentserviceyesOwns it once it is live
ApproverapprovergovernanceyesNamed approver on a gate
Vendor / Third PartyvendorexternalyesOutside the organisation. Clock usually pauses
SystemsystemsystemnoAutomated. Held by nobody
UnassignednobodysystemnoTerminal or unowned

system and nobody are held by no human. A build runs on its own and there is nobody honest to put on the hook for it; assigning those to a person would make "work assigned to me" meaningless.

How the baton moves

Each transition declares a baton mode. status_owner is the default and the one to reach for: the target status already declares who owns it, so the arrow needs no configuration and stays correct when someone reorders the workflow.

ModeBehaviourUse it for
status_ownerRoute to whoever fills the target status's owner roleAlmost everything
keepOwnership does not changePurely administrative moves
actorWhoever fired it now owns it"I'll take this"
previousHand back to whoever held it lastSome rejection arrows
rolePin to a named role regardless of the target statusThe rejection arrow that must go to the developer, not to whoever happened to be last
reporterBack to whoever raised itFinal verification before closure
unassignedDrop it into a queue for someone to claimShared pools

Two extra settings on any transition's baton:

  • fallbackRole — where to look if the chosen role has nobody in it on this issue. Without one the engine leaves the issue unassigned rather than guessing, which is safe but lets a queue silently fill with ownerless work. Naming a lead here is the usual answer.
  • respondWithinMinutes — the new holder is expected to act within this many minutes. Past it, the baton shows as overdue and the chaser sends one reminder, not one every half hour.

Who actually fills a role

Three layers, most specific wins:

  1. Per-issue participants — someone explicitly set on this issue.
  2. Project role defaults — who fills each role on new work in this project.
  3. Nothing — the role is vacant, shown in the roster panel, and a gate that needs it will refuse with that reason.

Project role defaults accept three strategies:

StrategyBehaviour
fixedAlways the same person
round_robinIntended to rotate through a pool, with the cursor stored so rotation survives a restart
least_loadedIntended to pick whoever in the pool currently holds the least work
Today only fixed takes effect. The API accepts and stores pool, strategy and the rotation cursor, but the roster seeder reads the single user field, so a default with only a pool and no named user fills nothing. Set a named user on every role default you rely on.

Participants versus assignee

The single assignee answers "who is holding it right now". It cannot answer "who tested it", "who reviewed the code" or "which lead routed it" — and in a real delivery flow those are the questions asked three months later when something regresses.

Participants are that record. They are additive and never overwritten, so the roster of everyone who touched an issue survives every reassignment. Several people may hold the same role (two reviewers); at most one is primary, and that is the one the baton routes to. Removing someone clears them rather than deleting the record, so history survives.

Handoff directions

Every recorded handoff carries a direction, and the direction is the quality signal.

DirectionMeaning
forwardProgressing down the pipeline
backwardSent back for rework. Increments bounceCount
lateralSame stage, different team
parkSuspended
resumeReturned from suspension

Two counters on every issue:

  • handoffCount — times it has changed hands between teams. A bug at 9 has been round the houses and is worth a human looking at.
  • bounceCount — times it has been sent backwards. At 3 the issue is flagged as ping-ponging, which is a smell rather than a rule: work that has failed QA three times is usually a misunderstood requirement, and it is worth a conversation before the fourth attempt.

13. Transitions: intents, validators, screens, gates

A transition is one arrow in the state machine. Every status change goes through the engine — the issue screen, a board drag, an automation rule and an approval completing all take the same path, so a gate cannot be bypassed by using a different screen.

Intent — how the move reads in the UI

IntentMeaningHow it renders
forwardThe happy pathThe one filled button
rejectSend work back upstreamOutlined, usually asks for a reason
parkSuspend itOutlined
resumeReturn it from suspensionOutlined
escalatePush it upOutlined
cancelAbandon itOutlined
reopenBring a terminal issue backOutlined
neutralNone of the aboveOutlined

Who may fire a transition

Three independent gates, all of which must pass:

  1. requiredPermissions — permissions the caller holds in this project.
  2. allowedRoles — the original organisation-role gate. Kept so workflows saved before permissions existed keep working. New workflows should leave it empty and use permissions.
  3. allowedBatonRoles — only people holding these roles on this issue. This is the gate permissions cannot express: a QA engineer may hold issue:transition across the project, but only the tester actually testing this bug should be able to fail it.

Validators — the 21 guards

Evaluated server-side before a move is allowed. They are data, not code, so you compose your own gates without a deploy.

ValidatorParametersRefuses unless
assignee_required—The issue has an assignee
participant_requiredroleSomeone fills that baton role on this issue
field_requiredfieldThat issue field is non-empty
custom_field_requiredkeyThat project custom field is filled
comment_required—The mover supplies a comment
attachment_required—Evidence is attached: a screenshot, log or recording
estimate_required—An original estimate is set
story_points_required—Story points are set
due_date_required—A due date is set
all_subtasks_done—Every sub-task is in a done category
no_blocking_links—No open is_blocked_by link remains
no_open_child_defects—No child defect is still open
linked_issue_requiredlinkTypeA link of that type exists
parent_in_stagestageThe parent has reached that stage
min_minutes_in_statusminutesThe issue has sat here at least that long. A soak timer — "held fifteen minutes, because a smoke test is not a verification"
approval_grantedgateThat approval gate has passed
test_execution_passed—The linked test execution passed
security_review_passed—Security review has passed
release_assigned—A fix release is set
sprint_assigned—The issue is in a sprint

A validator can carry its own message, so a gate explains itself instead of producing a generic failure.

Transition screens

Fields the user is asked for as part of the move, rather than on the issue's edit form. This is what lets "Reject" demand a reason while "Approve" demands nothing, without either polluting the normal form.

Field types available on a screen: text, textarea, select, multiselect, number, date, user, checkbox. Each can be required and can carry help text.

Post-functions — what happens after a successful move

Post-functionEffect
assignToSelfThe mover becomes the assignee
clearAssigneeUnassign
notifyWatchersNotify everyone watching. On by default
addCommentAppend a fixed comment
recordParticipantStamp the actor into a named participant role, so "who reviewed this" is answerable months later without reading the activity log
setResolutionSet a resolution
clearResolutionClear it, e.g. on reopen
addLabel / removeLabelTag management
openWarRoomCreate a chat channel for this issue. Incidents and escalations
bumpPriorityPush it to the top of the receiving queue

14. Approvals

An approval is different from a permission. A permission asks "may you press this button". An approval asks "has a named person signed this off", and the signature has to outlive the request.

Firing a gated transition opens an Approval record and parks the issue where it already is. The move completes when quorum is met. There is deliberately no generic "awaiting approval" limbo status in the ITIL template: the issue stays in "CAB Review", so that status keeps meaning what it says.

Configuring a gate

SettingMeaning
nameWhat is being approved, e.g. "Change Advisory Board"
roleApprovers are the issue's participants holding this baton role
approversAnd/or these named people
approverPermissionAnd/or anyone holding this permission
minApprovalsHow many must approve. 0 means all of them — the honest default for a CAB, and it stays correct when the roster changes
allowSelfApprovalWhether the requester may sign their own request. Off by default
rejectionIsFinalAny single rejection fails the gate rather than waiting for quorum. On by default
expiresInHoursAuto-expire an unanswered gate
onRejectStatusWhere the issue goes if rejected

Decisions

Each decision is approved, rejected or abstained, with an optional comment. Abstentions do not count toward quorum.

Captured with each decision, for a regulated audit trail: the role the person was acting in at the time, their IP and their user agent. The acting role is snapshotted so a later role change cannot rewrite history.

The approver list itself is snapshotted when the gate opens. Removing someone from a role mid-flight does not silently change who the approvers were.

Approval statuses

pending, approved, rejected, cancelled, expired.

Where you see them

/my-queue carries an approvals section — everything waiting on your signature. The issue screen shows the approval card with progress.

The payload from the transition screen is held on the approval and replayed when the gate passes, so the resolution and comment the requester typed are not lost while waiting.


15. The six workflow templates

Installed on request from Administration → Workflow studio, never seeded. An organisation that wants five statuses keeps five: dropping a forty-state workflow onto a team that did not ask for one is how process tooling gets a reputation for being in the way.

Statuses are copied onto your workflow at install, so you own your copy and can rename anything without a later release overwriting it.

TemplateKeyCategoryApplies toWhat it is
Enterprise SDLCenterprise_sdlcsoftwarestory, task, feature, improvementThe full pipeline: triage, refinement, development, code review, build, QA, UAT, security, staging, release and production verification, with the work handing itself between teams at every gate
Defect Lifecycledefect_lifecyclesoftwarebugRaised, reproduced, triaged, fixed, retested and verified by the person who found it. Counts every bounce between dev and test
Change Management (ITIL)change_managementitsmchange, change_requestRaise, assess risk, submit to CAB, approve, schedule, implement, verify and review. Every gate leaves a signature. Requires a rollback plan
Incident Responseincident_responseitsmincident, problemDetect, declare, mitigate, resolve and review. Opens a war room on declaration and holds the incident open until the review is written
Service Request Fulfilmentservice_requestitsmservice_request, access_request, hardware_request, software_requestRequest, approve, fulfil and confirm. The requester closes it, not the agent
Lean Deliverylean_deliverysoftwareanySeven states, one QA gate, and the work still hands itself to the right person. For teams who do not want ceremony

Workflow schemes

workflow on a project is the default and the fallback. A workflow scheme routes per issue type on top of it, because a bug and an epic do not travel the same road: forcing one workflow onto both means either the epic collects eleven statuses it never enters, or the bug skips the QA gate.

Expected roles

A workflow declares which baton roles it wants filled. These surface on the issue as empty slots to staff, which is how a team discovers it has no QA lead on a bug before the QA gate refuses to open rather than after.

Board columns from a template

Installing a template also proposes board columns grouped by stage, not one per status. One column per status would give a forty-column board nobody can read.

A note on the designer

The workflow studio is read-and-install plus API editing. Workflows can be installed from a template and edited through PUT /api/projects/workflows/:id with the full document, but there is no visual drag-and-drop transition editor yet.


Part 4 — Planning and delivery

16. Projects and their settings

A project is a place you work in, not a filter you set. Cross-project screens exist too (/work/issues, /delivery/releases), and they are the same components rendered outside a project.

Creating a project

FieldOptionsWhat it decides
NameFree textDisplay
KeyUppercase prefix, e.g. ENGIssue keys: ENG-1, ENG-2. There is a suggest-key endpoint. Unique per organisation, and effectively permanent
Typesoftware, service_desk, business, opsWhich issue types the project accepts, and the default type
Methodologykanban, scrumScrum adds sprints and a backlog. Kanban is continuous flow
Visibilityopen, privatePrivate projects are only visible to members
LeadA userWho runs delivery
Product ownerA userWho decides what gets built, as distinct from who runs delivery
DepartmentA departmentA role assigned at department level covers every project beneath it, so a manager sees across their area without being added to each project
TeamsTeamsStaffing as a unit, distinct from individual members
MembersUsers, each lead / member / viewerProject-level membership
WorkflowAn installed workflowThe default and the fallback
Start / target dateDatesPlanning

Project status and priority

These describe the project itself, not the work inside it. A project can be on hold with every issue open, or completed with a few stragglers; conflating the two hides both.

  • Status: draft, active, on_hold, completed, archived
  • Priority: low, medium, high, critical

Project settings you will actually use

SettingWhat it isWhy it matters
Issue typesThe subset of the 16 this project acceptsA software project has no business raising a hardware request
Default issue typePre-selected on the create form
Default assigneeFallback owner for new issues
Workflow schemePer-issue-type workflow routingA bug and an epic do not travel the same road
Role defaultsWho fills each baton role on new workThe setting that makes routing work. Without it every issue starts with an empty roster. Name a user, not just a pool: see §12
ComponentsNamed parts of the product, each with a lead and an optional default assigneeNew issues in a component are auto-assigned to its default assignee
VersionsLegacy version names kept for old issuesNew work should use Releases, which survive a rename
LabelsThe project's suggested label list
Custom fieldsPer-project fields on every issueSee below
SLA policiesResponse and resolution clocksSee §21
Security levelsPer-issue visibility restrictionsSee below

Custom fields

Nine types: text, textarea, number, date, select, multiselect, checkbox, user, url.

Each field can be marked required, given an option list (for select types), ordered, and restricted to specific issue types so a bug form does not sprout a field that only makes sense on a change request.

Security levels

Project permissions answer "who can see this project". A security level narrows it to one issue — an HR case or an unpatched vulnerability lives in an ordinary project and must not be readable by everyone in it.

Each level has a name, description, colour, and three additive membership lists: users, teams and role keys. Two switches keep people from being locked out of their own work:

  • includeParticipants (on by default) — anyone named on the issue keeps access
  • includeReporter (on by default) — whoever raised it keeps access

An issue with no level is visible to anyone who can see the project. That default matters: security that is opt-out gets applied to everything and then worked around.

Removing a level that issues still use is refused, because deleting it would make those issues visible to the whole project.


17. Boards, backlog, sprints, roadmap

Board

/work/board, or /projects/:id/board.

A board column maps one or more workflow statuses into one visual lane. Templates propose columns grouped by stage, because one column per status would give a forty-column board nobody can read.

Board settingMeaning
Typekanban or scrum
ColumnsName, the statuses it contains, order, colour
WIP limitPer column. The UI flags the column red when exceeded. 0 means no limit
SwimlanesNamed horizontal bands, each with its own filter on top of the board filter
FilterBoard-level filter, e.g. only bugs, or only the current release
Hide done afterCards in a done column older than N days disappear. Default 14
Card fieldsWhat shows on a card. Default: key, assignee, priority, story points, labels, due date

Dragging a card between columns fires a real transition through the engine, so validators, gates and baton routing all apply. A drag that would fail a validator is refused with the reason, not silently reverted.

Backlog

/work/backlog. Ordered list of everything not in an active sprint. Ranking is a sparse float, so a drag-and-drop reorder is a single write rather than a renumber of the whole list.

Needs backlog:prioritise to reorder.

Sprints

/work/sprints, or the project's Sprints tab. Scrum projects only, in practice.

Sprint states: future, active, closed.

ActionWhat happens
Start sprintTakes a snapshot of the committed issues and points. That snapshot is what makes scope creep measurable afterwards
Complete sprintAsks first: shows the issues and points still open and where they should go — back to the backlog or into a planned sprint. Nothing changes until you confirm, because a closed sprint cannot be restarted
BurndownOne sample per day: remaining points, remaining issues, completed points

Every sprint an issue has ever been in is kept in sprintHistory, for scope-change reporting.

Roadmap

/work/roadmap, or the project's Roadmap tab. Milestones and releases by quarter, with the epics that deliver them.

An epic is placed on the timeline by giving it a milestone: it is then drawn under that milestone, in the milestone's quarter. Use Move to milestone… on an epic (its ⋯ button, which works from the keyboard too) to schedule it, move it to another milestone or take it off the timeline; setting the Milestone field on the epic does the same. Epics with no milestone are listed under Epics without a milestone.

The timeline shows the current quarter and the next three. Milestones dated before it are in an Overdue lane (open ones are flagged Overdue), those after it in a Later lane, and only milestones without a date are under No target date. Every row shows its date.

A milestone's ⋯ menu offers Edit… (name, target date, status, release, description) and every status change, so a commitment that slips is rescheduled rather than removed and added again (removing it unlinks its epics). Milestone statuses: planned, in_progress, at_risk, completed, cancelled.


18. Finding work: views, quick filters, the query language

Named views

RouteViewWhat it is
/my-workMy workEverything assigned to you that is not finished
/my-queueMy queueWork in your hands, oldest first, plus approvals awaiting you
/work/issuesIssuesDevelopment work across projects you can see
/work/bugsBugsDefects, most urgent first
/service/ticketsService deskRequests and incidents raised by the business
/service/incidentsIncidentsThings that are broken now

Quick filters

Offered in the toolbar menu:

FilterQuery
All openstatuscategory != done
Mineassignee = currentUser() AND statuscategory != done
Reported by mereporter = currentUser()
Overduedue < now() AND statuscategory != done
Unassignedassignee IS EMPTY AND statuscategory != done
Updated this weekupdated > -7d ORDER BY updated DESC

The query language

A JQL-like language. It compiles to a database filter, and anything it cannot parse produces a message aimed at the person who typed it, not a stack trace.

Operators

field = value            field != value
field IN (a, b, c)       field NOT IN (a, b)
field ~ "text"           contains
field IS EMPTY           field IS NOT EMPTY
field > value            >=  <  <=        (dates and numbers)
AND / OR                 parentheses supported
ORDER BY field ASC|DESC

Functions: currentUser(), now(), startOfWeek(), startOfMonth(), and relative dates like -7d and +3d.

Fields you can query

project, key, type (or issuetype), status, statuscategory, resolution, priority, severity, assignee, reporter, creator, watcher, labels (or label), component, fixversion, sprint, epic, parent, storypoints, created, updated, due (or duedate), resolved, summary (or title), description, text.

Sortable fields: key, created, updated, due, priority, status, storypoints, rank, title, assignee.

Examples

project = ENG AND status != Done AND assignee = currentUser() ORDER BY priority DESC
labels IN (regression, customer) AND created > -14d
text ~ "login timeout" AND priority IN (high, urgent)

Saved filters

Save a query with a name. Visibility is private, org or shared, and a filter can be starred to pin it. Anything that runs in the list can be saved, including project keys and active sprint names (project = PAY). Your filter names are unique: a second filter with the same name (ignoring case and surrounding spaces) is refused.

Bulk edit

issue:bulk lets you apply a change to every issue matching a selection in one go. Bulk changes still run through the engine.


19. Testing

Testing is first-class here rather than an issue type, which is what lets the same scenario be run in every regression cycle and keep a history.

Three objects:

Suite   ─ a folder.  One level of nesting only: "Checkout" → "Payments"
  └ Case      ─ a definition of what to check
       └ Execution ─ one run of that case inside one cycle, with a verdict

Test suites

FieldMeaning
Name, description
ParentOne level of nesting. Deeper trees become unnavigable and nobody files anything correctly
Regression defaultSuites a regression cycle pulls in automatically

Test cases

A case is a definition. Running it produces an execution.

FieldOptionsMeaning
KeyPAY-TC-14Human-readable, per project
Title, description
PreconditionsFree textWhat must be true before you start
StepsList of action → expected pairsThe script
Expected resultFree textThe overall outcome
Typefunctional, regression, smoke, integration, performance, security, usabilityWhat kind of checking this is
Prioritylow, medium, high, criticalWhich cases run first when time is short
Automation statusmanual, automated, candidatecandidate means "worth automating, not done yet" — the backlog for the automation engineer
Covers issuesLinks to issuesWhat this case exists to protect. A failing case can then point straight at the story it covers
Owner, labels

Test case types, in practice

TypeUse it for
functionalDoes this feature do what the requirement says
regressionDid we break something that used to work
smokeIs the build even worth testing
integrationDo two systems talk to each other correctly
performanceIs it fast enough under load
securityAuthorisation, injection, data exposure
usabilityCan a real person actually complete the task

Test cycles

A cycle is the unit QA works in: "regression for 2.5.0". It pins a set of cases at a point in time, so editing a case later never rewrites history.

FieldOptionsMeaning
Kindregression, smoke, release, sprint, adhocWhy this round is happening
Statusplanned, in_progress, complete, signed_off, abandonedWhere the round is
Release / sprint / environmentReferencesWhat is being tested, and where
Start / end date, owner
Sign-offWho declared it good enough to promote, when, and a noteThe gate

Executions and verdicts

One execution per case per cycle: re-testing updates the verdict in place, which is what "retest until green" means.

VerdictMeaning
not_runNot attempted yet
in_progressSomeone is running it now
passedBehaved as expected
failedDid not. Raise a defect
blockedCould not run it — environment down, dependency missing. Not a pass and not a failure
skippedDeliberately not run this round

Per-step results carry not_run, passed, failed or blocked, and the steps are copied from the case at execution time so a later edit to the case does not silently change what was tested.

Each execution can carry a comment, attachments (screenshots and logs backing the verdict), a duration, and a defect — the bug raised from this failure. Raising a defect from a failed execution links the two, which is what makes regression sign-off a real gate rather than a status somebody sets.

Signing off. QA signs off a cycle (test:signoff) once every test has run, nothing failed, was blocked or skipped, and no defect is open. A cycle that does not meet that can still be signed off with a waiver and a written reason, by a project administrator (the project's manager or lead, project:admin), an organization admin or the owner. The waiver and its reason are kept on the cycle and in the audit log.


20. Releases, environments, deployments

Releases

A version of a project that ships. Referenced by id, so renaming a version does not orphan the issues pointing at it.

FieldOptionsMeaning
VersionFree textNot every team uses semver
Name, description, release notes
Statusplanning, development, qa, regression, uat, approved, deployed, completed, cancelledWhere the release is
Owner, start date, target date
Current environmentReferenceWhere this version currently sits, updated by successful deployments

Release gates. A release carries approvals against three gates: qa, regression and uat; a decision for any other gate is refused. Each approval is approved or rejected with a note, and the latest decision per gate wins — a rejected gate blocks approval until it is approved again. Gates are decided by a release approver (release:approve), a project administrator, an organization admin or the owner. A release cannot reach approved until every required gate is approved — which is what stops that status meaning nothing more than somebody clicking a button.

On an issue: fix release is the version it is scheduled to ship in; affects release is the version where it was found.

Environments

FieldOptionsMeaning
Name, key, description, URLkey is lowercase and unique per project
Kinddevelopment, qa, staging, uat, production, otherWhat the environment is for
TierNumber: dev 0, qa 1, staging 2, uat 3, prod 4Position in the promotion path
Is productionBooleanProduction is treated differently throughout
Requires approvalBooleanA deploy here is refused unless the release is in approved status, which means every release gate has been signed
Healthhealthy, degraded, unhealthy, unknownCurrent state
Current version / release / last deployedDenormalisedSo listing environments does not need a lookup per row

The promotion path is enforced. A release cannot be deployed to a tier until it has already reached the tier below. Try it and the deploy is refused with "that release has not reached the environment below this one; deploy it there first". That is what makes the tier numbers mean something rather than being decoration.

Going backwards is always allowed: a rollback, or re-deploying to development, is never blocked by the promotion path. The rule also only applies to a deployment that names a release; an ad-hoc versioned deploy with no release attached is not checked.

The default environments created for a project are Development (0), QA (1), Staging (2), UAT (3) and Production (4, marked production and requiring an approved release).

Deployments

FieldOptionsMeaning
Environment, release, versionWhat went where
Branch, commit, build numberFree textTraceability back to the code
Statuspending, in_progress, succeeded, failed, rolled_back
Kinddeploy, rollback, hotfix
Deployed by / approved by / notes
Rollback ofReferenceSet when this deployment reverses an earlier one

Duration is stamped automatically when a deployment finishes.

Permissions worth knowing: deployment:create to deploy at all, deployment:production to deploy to a production environment, and deployment:rollback to reverse one.


Part 5 — Service management

21. Service desk and SLAs

A service_desk project accepts the eight service issue types and hides the development ones. Service issues carry an extra block of fields, grouped so it is obvious which belong to a ticket and which to a development issue: a story has no urgency, an incident has no story points.

Service fields

FieldOptionsMeaning
RequesterA userWho asked. Distinct from reporter: an agent can raise a ticket on behalf of someone else, and the SLA belongs to the requester
Requester departmentA departmentFor reporting on where demand comes from
Category / subcategoryFree textYour own taxonomy
Impactlow, medium, high, organisationHow wide
Urgencylow, medium, high, criticalHow soon
Change typestandard, normal, emergencyOn changes only
Risklow, medium, highOn changes only
Approved by / atStamped when a gate passes
Origin incidentReference to another issueThe incident that produced this bug, or the problem record behind it

Internal notes

A comment can be flagged internal. Internal notes are hidden from reporters on service-desk projects. Posting one needs ticket:internal_note. Someone who cannot read internal notes sees no trace of them — not in the comments, not in the history, and no notification or email.

What the requester sees and does

A requester who works through the service desk (the Client role) sees their ticket, its public replies and the people working it. Hand-offs, history, the work log and engineering issues linked to the ticket stay internal.

When their ticket is resolved, the requester closes it, not the agent:

ActionWhat happens
Confirm resolutionThe ticket moves to Closed
ReopenStill broken: the ticket goes back into work (In Progress on the Service Desk workflow), with an optional comment, and the SLA restarts

Both are recorded in the ticket's history and the audit log. On the Service Request Fulfilment workflow the requester confirms from reporter verification the same way.

SLA policies

Defined per project. Each policy is one clock.

SettingOptionsMeaning
NameFree text
Metricfirst_response, resolutionWhat the clock measures
TargetsMinutes per priority: urgent, high, medium, lowDefaults are 240 / 480 / 1440 / 4320 minutes
Pause in statusesA list of status idsThe clock stops while the issue sits in any of them
Business hours onlyBoolean, on by defaultOnly count time inside the organisation's working calendar
EnabledBoolean, off by default

How a clock behaves

  • Starts when the issue is created, or at first response for the first_response metric.
  • Pauses while the issue sits in a status flagged pausesSla, or in a status named in the policy's pause list. Waiting on a customer or a vendor is not time the delivery team is burning.
  • Breaches when elapsed unpaused time passes the target for the issue's priority. A breach is stamped with the time it happened.
  • In business-hours mode, only working days and working hours count, so a ticket raised at 5pm Friday does not breach over the weekend.

The working calendar is set in workspace settings: working days (default Monday to Friday) and working hours (default 09:00 to 18:00).

Two notification types fire off clocks: sla-warning and sla-breach. There is also an sla_breached automation trigger.


Part 6 — People and administration

22. Roles and permissions

Permissions are the only thing authorisation checks against. Roles are data that map onto the permission list, so adding a role is a configuration change rather than a deploy.

Two naming conventions carry most of the meaning

  • :any — acts on other people's records, not just your own. issue:edit lets you edit yours; issue:edit:any lets you edit anyone's.
  • :admin — configures the thing rather than using it.

Anything scoped to a project is resolved per project. Holding project:admin does not mean holding it everywhere.

The 13 role templates

Seeded into every organisation as templates, not law. An owner can edit them or add their own.

RoleKeyUsual scopeWhat it is for
Organization Ownerorg_ownerorgFull control, including billing and security. Every permission
Organization Adminorg_adminorgRuns the workspace day to day, without billing, SSO, API keys or role management; includes internal notes, QA/regression gate sign-off, release/environment/deployment/roadmap management and permanent project deletion. DevOps Engineers are invited by the owner
Product Managerproduct_managerprojectOwns what gets built and when it ships. Roadmap, releases, release approval
Project Managerproject_managerprojectRuns delivery: sprints, board, project configuration
Engineering Managerengineering_managerdepartmentCross-project visibility, workload and approvals
Team Leadteam_leadteamAssigns and unblocks work within the team
DeveloperdeveloperprojectBuilds and ships work items
QA Engineerqa_engineerprojectOwns test coverage, execution and regression sign-off; signs the QA and regression release gates
DevOps Engineerdevops_engineerprojectOwns environments, deployments and releases, plus webhooks and API keys
Support Engineersupport_engineerorgHandles service tickets and escalates into engineering
EmployeeemployeeorgEveryday member: raises work and tickets, joins the conversation
ViewerviewerorgInternal read-only: follows the work without changing it. Does not consume a paid seat
ClientclientprojectExternal: sees only their own tickets, never internal notes

Role assignments and scope

A role is granted to a principal (a user or a team) at a scope:

ScopeEffect
orgEverywhere
departmentEvery project under that department. This is how a manager sees across their area without being added to each project
teamEverything the team is assigned to. Joining QA confers QA's access; leaving removes it
projectOne project

A user's effective permissions are: their base role's permissions, plus any granted overrides, minus any revoked overrides. Role assignments (project, team, department or org scope) can only add permissions inside their scope; they never take any away. To keep someone out of sensitive work, use a private project (only members, the lead and assigned people see it) or an issue security level. A revoked override removes a permission everywhere.

Legacy roles

Five original role names still work and map onto templates:

LegacyMaps to
viewerViewer (internal read-only, not the external Client role)
employeeEmployee
agentSupport Engineer
adminOrganization Admin
superadminOrganization Owner

Billing effect

Only viewer is a free role. Everyone else consumes a paid seat.


23. Organisation structure

/admin/departments, /admin/teams, /admin/roles.

Departments

A division of the organisation: Engineering, Product, Support.

FieldMeaning
Name, key, descriptionkey is lowercase and unique
HeadWho runs it
ParentNests one level: "Engineering → Platform". Deliberately not an unbounded tree

A project belongs to a department, and a role granted at department level covers every project beneath it.

Teams

A working group: Frontend, Backend, QA, DevOps. Teams are the unit work is assigned to and the unit permissions are granted to.

FieldOptionsMeaning
Name, key, descriptionkey lowercase, unique
DepartmentA departmentWhere it sits
Functionengineering, frontend, backend, qa, devops, design, product, support, otherWhat the team does, so a project can be staffed by capability
LeadA user
MembersEach lead or member, with an allocation percent (0–100)Allocation is a rough share of that person's time, used for sprint capacity
ChannelA chat channel can be attached to the team

A person can belong to several teams — the developer who also sits in an on-call rota — which is why team membership is not a field on the user.


24. People, invitations, single sign-on

People

/admin/people. List, search, view and edit users. Actions: invite, deactivate, reactivate, delete, change role, set per-user permission overrides.

A user carries: name, email, employee id, department, job title, avatar, timezone, phone, presence, notification preferences.

Presence is online, away, busy or offline, plus an optional custom status with an emoji and a do-not-disturb-until time.

Invitations

Generated in People. Each invitation carries a role: viewer, employee, agent or admin.

Invitation statuses: pending, accepted, revoked, expired.

Acceptance and failure are reported per recipient, and a failed send keeps a copyable invitation link so you can pass it on by hand. The link points at the app URL configured on the server, so a misconfigured APP_URL ships links that look fine and go nowhere.

The recipient lands on /invite/:token.

Single sign-on

/admin/sso. Needs sso:manage.

Supported providers: local (password), Google, Microsoft, GitHub, Okta, generic OpenID Connect, and SAML 2.0 (optional).

Setting one up

  1. Create an application at the identity provider.
  2. Add the connection here and save it, to get its callback / redirect URI.
  3. Register that exact URI with the provider.
  4. Enter the credentials.
  5. Run the connection test.
  6. Enable it.

Enforced SSO requires a successful connection test first. Changing credentials, endpoints, scopes or provider configuration clears the previous test and disables the connection until it passes another one.

Per-connection settings

SettingMeaning
LabelWhat the sign-in button says
DomainsEmails on these domains route to this connection automatically
Client id / secretSecrets are encrypted at rest and never returned to the browser
Issuer / discovery URLOIDC discovery, or explicit endpoints
Token auth methodHTTP Basic or request body
ScopesWhat to request
JIT provisioningCreate an account on first successful sign-in
Default role for JITviewer, employee, agent or admin
SAMLEntry point, entity id, IdP certificate, SP key and certificate, signature algorithm, and an attribute map for email, name, first name, last name and groups

Caveats stated by the product

  • The configuration test checks provider metadata and signing keys. It does not prove the client credentials work. Complete a real sign-in before requiring SSO for the team.
  • SAML needs @node-saml/node-saml installed and HTTPS for cross-site callback cookies. It reports unavailable until installed.
  • The workspace owner always keeps password recovery access.

Workspace authentication policy

Set in workspace settings:

SettingMeaning
Enforce SSOPassword login is rejected for everyone except the owner
Allow JIT provisioningAuto-create accounts from SSO
Default role for JITWhich role those accounts get
Session lifetime (days)Default 7
Require MFA for adminsFlag exists on the organisation record

25. Automation

/admin/automation. Needs automation:manage. Rules can be organisation-wide or scoped to one project.

A rule is: when this happens → if these are true → do these things.

Triggers

TriggerFires when
issue_createdA new issue is raised
issue_updatedAn issue changes. You can restrict it to named fields
issue_transitionedA status change goes through the engine
issue_assignedThe assignee changes
comment_addedSomebody comments
sla_breachedAn SLA clock breaches
due_date_approachingA due date is near
scheduledOn a cron expression you supply
webhook_receivedAn inbound webhook arrives

Conditions

conditionMatch is all (every condition must hold) or any (one is enough).

Each condition is a field, an operator and a value.

OperatorMeaning
eq / neEquals / does not equal
in / ninIs / is not one of a list
contains / not_containsSubstring or array membership
gt / gte / lt / lteGreater / less than, for numbers and dates
is_empty / is_not_emptyField has no value / has one
changedThe field changed in this event

Actions

ActionWhat it does
assignSet the assignee
transitionMove the issue. Goes through the engine, so validators and gates still apply
set_fieldSet any issue field
add_label / remove_labelTag management
add_commentPost a comment
add_watcherAdd someone to the watch list
notifySend a notification
post_to_channelPost a chat message
call_webhookCall an outbound HTTPS endpoint
create_subtaskCreate a child issue
link_issueAdd a link
add_to_sprintPut it in a sprint

Guard rails

GuardDefaultPurpose
maxRunsPerHour200Stops a runaway rule
lastAutomationAt on the issueRules avoid re-triggering themselves in a loop
lastErrorThe last failure, shown in the UI
enabledonTurn a rule off without deleting it

There is a test endpoint per rule, so you can try one before enabling it.


26. Integrations: webhooks and API keys

/admin/integrations. Needs webhook:manage or apikey:manage.

Webhooks

Outbound HTTPS calls when something happens.

SettingOptionsMeaning
Name, URLHTTPS public destinations only
EventsA list of event namesWhat to send
ProjectOptionalScope it to one project
Formatguideuni (raw event envelope), slack, teamsSlack and Teams modes post a chat-shaped payload to an incoming webhook instead of the raw envelope
HeadersKey/valueExtra headers on each delivery
SecretEvery delivery carries an HMAC-SHA256 signature header. Verify it at the other end
Enabled

Deliveries use pinned DNS resolution and bounded retries. The product tracks consecutive failures, the last delivery time, the last status code and the last error, and will disable a webhook with a stated reason. There is a test button per webhook.

API keys

Machine credentials for the REST API.

FieldMeaning
NameWhat it is for
PrefixVisible identifier. The full key is shown once, at creation
ScopesWhich permissions the key carries
Expires atOptional expiry
Last used atSo you can spot a dead key
RevokeImmediate

Only a hash of the key is stored, so a lost key cannot be recovered, only replaced.


27. Audit log and workspace settings

Audit log

/admin/audit. Needs audit:view. Exportable.

Every entry records: the actor, the actor's email, the action, the category, the target, a structured diff of what changed, the IP, the user agent and the outcome.

DimensionValues
Actor typeuser, api_key, system, automation, sso
Categoryauth, issue, project, user, billing, security, chat, admin
Outcomesuccess, failure

Retention is 365 days.

Workspace settings

/admin/settings. Needs org:manage.

SettingDefaultMeaning
Issue key counter padding0Zero-pad issue numbers, e.g. ENG-0042
Working daysMon–FriWhich days count for SLA business hours
Working hours09:00–18:00Which hours count
Default projectnoneWhere unassigned work lands
Chat enabledonTurn chat off for the workspace
Email notificationsonMaster switch
Auth policyEnforce SSO, JIT provisioning, default JIT role, session lifetime, MFA for admins

There is also an admin diagnostics endpoint, including a test-email send that an authorised owner can fire at their own address.

Transfer ownership (owner only, at the bottom of the page): choose an active member who is not an external client, confirm with your password, and they become the workspace owner. You stay in the workspace as an Organization Admin; only the new owner can transfer it back. A wrong password is refused without signing you out.


28. Billing and seats

/admin/billing. Needs billing:view; changes need billing:manage.

The plan

PlanPriceNotes
Launch offer (free)₹0One calendar month free, first 10 organisations only, claimed at registration
Business (business)₹100 per user per monthThe normal plan. 1 to 2000 seats

Retired plan ids (business_annual, enterprise) stay readable for existing data. Legacy ids monthly, yearly and pro alias onto current plans. All new calculations are INR only; historical invoices and legacy USD fields are retained rather than rewritten.

Included at every level

Unlimited projects, 250 GB storage, 200 automation rules, custom workflows, SSO, SAML, 365-day audit retention, 50 webhooks, 20 API keys, chat and SLAs.

Seats

  • A seat is billed for active users in a non-free role. Viewers are free.
  • The owner consumes one seat.
  • User creation is blocked once seats used reaches seats purchased.
  • GET /api/billing/seats/preview quotes a seat change before you commit it.

Subscription statuses

trialing, active, past_due, cancelled, expired.

An expired trial loses access to core product endpoints while billing remains available, so you can always pay to get back in.

Payments

Razorpay, INR. Verification checks the signature, the captured status, the order, the amount and the currency. Seat-change and renewal receipts are bound to the authenticated organisation and cannot be reused for a different purpose or quantity.

Payment purposes: signup, seat_change, renewal, plan_change. Invoice statuses: draft, open, paid, void, refunded.

Renewal is an explicit payment you make from Billing & seats. Recurring mandates and automatic debits are not implemented.

You can also cancel (optionally at period end) and resume.


Part 7 — Communication and reporting

29. Chat, calls and meetings

Channels

/chat, /chat/:channelId. Needs chat:use.

Channel typeMeaning
publicAnyone in the workspace can find and join
privateInvite only
dmOne to one
group_dmA small group, no channel name

A general channel is created with the workspace, one per project, and one per team. An incident workflow can open a war room channel automatically.

Per-member settings: channel role (owner, admin, member), muted, and notify on — all, mentions or none.

Messages

Messages support threads, emoji reactions, pinning, editing, deletion, and read state per channel.

Attachment and block types on a message: issue_ref (an issue preview), link_preview, code, image, file, system, poll.

Author types: user, bot, system, automation — so a message posted by an automation rule is visibly not a person.

Slash commands

CommandUsageWhat it does
/help/helpList every available command
/ticket/ticket PROJ "Title" [priority] [@assignee]Create an issue from chat, credited to the channel it came from
/assign/assign PROJ-123 @userAssign an issue
/status/status PROJ-123 in-progressMove an issue to a new status
/me/meShow issues assigned to you
/find/find "search text"Search issues by text
/topic/topic New topic textSet the channel topic
/invite/invite @userAdd someone to this channel
/shrug/shrug [text]Append a shrug

Calls

/calls, /call/:roomId. Needs call:start. Screen sharing needs call:screenshare; recording needs call:record.

Meetings

/meetings. Needs meeting:schedule to create one.

FieldOptionsMeaning
Title, agendaAgenda up to 2000 characters
Mediaaudio, video
Starts atDate and time
Duration5 to 480 minutes, default 30
Statusscheduled, cancelled

Each meeting exposes an .ics invite at /api/meetings/:id/invite.ics, so it can be added to a normal calendar.


30. Notifications

The bell in the header, plus optional email and web push.

Types

ticket-assigned, status-changed, comment, review, closed, reassigned, baton-passed, baton-overdue, approval-requested, approval-decided, mention, chat-message, thread-reply, watching, sla-breach, sla-warning, due-soon, sprint, automation, billing, security, invite.

baton-passed is deliberately separate from ticket-assigned. The handoff is the thing being announced, not the assignment: "QA passed this back to you, it failed on Safari" reads differently from "you have been assigned an issue", and people triage them differently in a busy inbox.

Priority

low, normal, high.

Per-user preferences

PreferenceDefaultEffect
EmailonSend email as well as in-app. Switch it off under My profile → Notifications
In-apponThe bell
Mentions onlyoffSuppress everything except direct mentions
Daily digestoffOne summary instead of a stream

Email

When Email is on (and the workspace's Email notifications switch is on), you are also emailed when you are @mentioned, an issue is assigned or handed to you, something of yours is due soon or has been waiting on you too long, and when a meeting you are invited to is scheduled, changed or cancelled. The requester of a service ticket is emailed about public replies and status changes on it. Nobody is emailed about their own action, and an internal note is never emailed.

Actions

Mark one read, mark all read, clear all, see the unread count.

Web push

Browser push notifications: fetch the public key, subscribe, send a test, unsubscribe. Works per device.


31. Reports

/reports. Needs report:view. report:team and report:org widen the scope from your own work to a team's and then the whole organisation.

Tabs: Overview, Throughput, Velocity, Workload, SLA. A cycle time and a timesheet report are also available from the API.

ReportQuestion it answers
Dashboard / overviewWhat is the state of things right now
ThroughputHow many items are we finishing per period
Cycle timeHow long does work take from start to finish
VelocityHow many points per sprint, and how consistent
WorkloadWho is carrying what
TimesheetWhere logged time went
SLAWhich clocks are at risk and which breached

The baton data backs two things a status field cannot show: stage ageing (how long work has sat in each phase) and the bounce report (which issues keep going backwards). heldMs is denormalised onto each handoff so the bounce report is one query rather than a windowed scan.


32. Attachments

Attach files to issues, comments and test executions.

  • Stored on the server's local disk by default, or S3.
  • There is a usage endpoint so you can see how much space the workspace is consuming against the 250 GB allowance.
  • Download and delete are permission-checked against the issue the attachment belongs to, so an attachment on a restricted issue is restricted too.

Deployment note for administrators: attachments are written to local disk. Render rebuilds the application directory on every deploy, so without UPLOAD_DIR pointed at a mounted persistent disk, every uploaded file is lost at the next release.


Part 8 — Reference

33. Every permission

Every permission in the system, and which of the 13 role templates grants it out of the box. Roles are editable, so treat the right-hand column as the shipped default rather than a rule.

Short names: Owner, Admin, PM (Product Manager), PjM (Project Manager), EM (Engineering Manager), Lead (Team Lead), Dev, QA, DevOps, Support, Employee, Viewer, Client.

Total: 74 permissions.

Work items

PermissionGranted by default to
issue:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee, Viewer
issue:createOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
issue:editOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
issue:edit:anyOwner, Admin, PM, PjM, EM, Lead
issue:deleteOwner, Admin, PjM
issue:assignOwner, Admin, PM, PjM, EM, Lead
issue:transitionOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
issue:closeOwner, Admin, PM, PjM, EM, Lead
issue:bulkOwner, Admin, PM, PjM, EM, Lead
issue:linkOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
worklog:logOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
worklog:edit:anyOwner, Admin, PM, PjM, EM, Lead

Projects and configuration

PermissionGranted by default to
project:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee, Viewer
project:createOwner, Admin
project:adminOwner, Admin, PjM
project:archiveOwner, Admin
project:deleteOwner, Admin
project:member:manageOwner, Admin, PjM
workflow:adminOwner, Admin
board:adminOwner, Admin, PM, PjM, EM

Agile planning

PermissionGranted by default to
sprint:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, Employee, Viewer
sprint:manageOwner, Admin, PM, PjM, EM
backlog:prioritiseOwner, Admin, PM, PjM, EM, Lead
epic:manageOwner, Admin, PM, PjM, EM
roadmap:viewOwner, Admin, PM, PjM, EM, Dev, Viewer
roadmap:manageOwner, PM, PjM

Releases

PermissionGranted by default to
release:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Viewer
release:manageOwner, PM, PjM, DevOps
release:approveOwner, PM, EM

Environments and deployments

PermissionGranted by default to
environment:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps
environment:manageOwner, DevOps
deployment:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps
deployment:createOwner, Dev, DevOps
deployment:productionOwner, DevOps
deployment:rollbackOwner, DevOps

Testing

PermissionGranted by default to
test:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, Viewer
test:manageOwner, Admin, PjM, EM, Lead, QA
test:executeOwner, Admin, PjM, EM, Lead, QA
test:signoffOwner, QA

Service management

PermissionGranted by default to
ticket:viewOwner, Admin, Support, Employee, Client
ticket:view:anyOwner, Admin, Support
ticket:createOwner, Admin, Support, Employee, Client
ticket:assignOwner, Admin, Support
ticket:resolveOwner, Support
ticket:internal_noteOwner, Support
sla:manageOwner, Admin

People and org structure

PermissionGranted by default to
user:viewOwner, Admin, EM, Support, Viewer
user:inviteOwner, Admin
user:manageOwner, Admin
role:manageOwner
department:viewOwner, Admin, EM, Support
department:manageOwner, Admin
team:viewOwner, Admin, EM, Lead, Support, Viewer
team:manageOwner, Admin
team:member:manageOwner, Admin, EM

Organisation and platform

PermissionGranted by default to
org:vieweveryone
org:manageOwner
billing:viewOwner
billing:manageOwner
sso:manageOwner
automation:manageOwner, Admin
webhook:manageOwner, Admin, DevOps
apikey:manageOwner, DevOps
audit:viewOwner, Admin

Reporting

PermissionGranted by default to
report:viewOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
report:teamOwner, Admin, PM, PjM, EM, Lead
report:orgOwner, Admin, EM

Communication

PermissionGranted by default to
chat:useeveryone
channel:createOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
channel:adminOwner, Admin
message:delete:anyOwner
call:startOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
call:screenshareOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee
call:recordOwner
meeting:scheduleOwner, Admin, PM, PjM, EM, Lead, Dev, QA, DevOps, Support, Employee

34. What the product does not do

Stated plainly, because finding these out in week nine of a rollout is worse than reading them now. All of these are taken from the product's own notes.

Not implemented

ThingStatus
SCIM provisioningNot implemented, and deliberately not advertised in the pricing catalogue
Enforced MFAThe flag exists on the organisation record; enforcement is not implemented
Recurring billing mandates / automatic debitsNot enabled. Renewal is an explicit Razorpay payment you make from Billing & seats
Visual workflow designerThe studio is read-and-install. Workflows can be installed from a template and edited through the API, but there is no drag-and-drop transition editor
Payment webhooks and reconciliationFulfilment happens after the browser submits the verified receipt. Add webhooks before relying on unattended payment recovery at production scale
Marketplace integrationsNot present
Enterprise compliance certificationsNot held

Operational limits

LimitDetail
Single backend instanceRealtime presence, scheduled jobs and the SSO handoff cache use process-local state. Horizontal scaling needs a shared Socket.IO adapter, durable scheduling and shared handoff storage
Uploads on local diskUse a persistent volume. Object storage and malware scanning are separate deployment work
Free-tier SMTPRender Free blocks SMTP ports 25, 465 and 587. Use the Resend HTTPS provider instead
Resend free-tier quotasQuota errors are reported as failed sends. No paid service is enabled automatically

Things that are easy to misread

  • A status is not a stage. Reports and the pipeline stepper read the stage; boards and burndowns read the status category. Renaming a status changes neither.
  • assignee and the baton holder are the same person by definition. They are stored twice so the baton can carry its own timestamps, and the engine keeps them in step. A plain assignee change — a board drag, a bulk edit, an automation rule — repoints the baton.
  • Participants are additive. Removing someone clears them rather than deleting the record, so the roster of who touched an issue survives.
  • A restricted issue returns 404, not 403. That is intentional.
  • The create form caps the due date at one week out. Longer dates are set on the issue screen.
  • "Unlimited admins" is not a claim the product makes. Administrator counts are governed by roles and seats like everything else.
  • This is a substantial ticketing and collaboration feature set, not complete Jira or Slack parity. The product says so itself.

Appendix A — Route map

Public

RouteScreen
/Landing
/loginSign in
/pricingPlans
/signupRegister an organisation
/auth/callbackSSO landing
/invite/:tokenAccept an invitation

Signed in

RouteScreenPermission
/dashboardOverview—
/my-workEverything assigned to youissue:view
/my-queueIn your hands, oldest first, plus approvalsissue:view
/projectsProject listproject:view
/work/issuesAll development workissue:view
/work/bugsDefectsissue:view
/work/boardBoardproject:view
/work/backlogBacklogproject:view
/work/sprintsSprintssprint:view
/work/roadmapRoadmaproadmap:view
/delivery/releasesReleasesrelease:view
/delivery/environmentsEnvironmentsenvironment:view
/delivery/deploymentsDeploymentsdeployment:view
/delivery/testingTest suites, cases, cyclestest:view
/service/ticketsService deskticket:view
/service/incidentsIncidentsticket:view
/issues/newCreate an issueissue:create
/issues/:idThe issue screenissue:view
/chat, /chat/:channelIdChatchat:use
/meetings, /callsMeetings and callschat:use, call:start
/call/:roomIdA callchat:use
/reportsReportsreport:view
/profileYour profile—

Inside a project

/projects/:projectId plus: (nothing) for the overview, board, backlog, sprints, roadmap, issues, releases, testing, environments, deployments, team, settings.

Administration

RouteScreenPermission
/admin/peoplePeople and invitationsuser:view
/admin/teamsTeamsteam:view
/admin/departmentsDepartmentsdepartment:view
/admin/rolesRoles and assignmentsrole:manage
/admin/workflowsWorkflow studioworkflow:admin
/admin/automationAutomation rulesautomation:manage
/admin/integrationsWebhooks and API keyswebhook:manage or apikey:manage
/admin/ssoSingle sign-onsso:manage
/admin/auditAudit logaudit:view
/admin/billingBilling and seatsbilling:view
/admin/settingsWorkspace settingsorg:manage

Old URLs that still work

/tickets → /service/tickets · /employees and /team → /admin/people · /board → /work/board · /backlog → /work/backlog · /issues → /work/issues · /create-ticket → /issues/new · /billing → /admin/billing · /tickets/:id → /issues/:id


Appendix B — API surface

Base path /api. Authentication is a bearer token from /api/auth/login or an API key.

MountCovers
/api/organizationsRegistration, slug check, organisation count, current org
/api/authLogin, providers, SSO start/callback/exchange, current user, password change, sign out everywhere
/api/usersDirectory, invitations, profile, activation, deletion
/api/departments, /api/teams, /api/rolesOrganisation structure and role assignments
/api/projectsProjects, workflows, workflow catalogue, role defaults, security levels, key suggestion
/api/issuesIssues, transitions, ranking, participants, baton, approvals, comments, watch, vote, links, work logs, bulk edit, the baton inbox and the approvals inbox
/api/boards, /api/sprintsBoard data, sprint start/complete/burndown
/api/releases, /api/environments, /api/deployments, /api/milestonesDelivery
/api/testingSuites, cases, cycles, executions, defects, sign-off
/api/overview, /api/search, /api/reportsDashboard, query language, the seven reports
/api/chat, /api/calls, /api/meetingsChannels, DMs, messages, reactions, pins, read state, commands, ICE servers, meeting invites
/api/attachmentsDownload, delete, usage
/api/notificationsList, unread count, mark read, clear, web push
/api/billing, /api/paymentsPlans, quotes, orders, verification, invoices, seats, cancel, resume
/api/ssoConnections, connection test
/api/adminIntegrations, saved filters, automation test, webhook test, API keys, audit, diagnostics
/api/ticketsLegacy ticket endpoints, kept working

Appendix C — Glossary

TermMeaning here
BatonWho is holding a piece of work right now, and in what role
BounceA backward handoff. Work sent upstream for rework
Ping-pongingThree or more bounces on one issue. A smell, not a rule
StageOne of 16 macro phases, from Intake to Closure
StatusA precise state within a stage. 138 in the shared catalogue
Status categorytodo, in_progress or done. What boards and burndowns read
ParticipantSomeone with a named job on an issue. Additive, never overwritten
HandoffA pass between teams, not between individuals
GateAn approval that must collect signatures before a transition completes
ValidatorA server-side guard that refuses a transition, with a reason
ScreenFields asked for as part of a transition
Post-functionA side effect that runs after a successful transition
Security levelA per-issue visibility restriction inside an ordinary project
SeatA billable active user in a non-free role

Generated from the source of ticketing-tool-server and ticketing-tool-application. The status catalogue and permission tables are machine-generated from config/stageCatalogue.js and config/permissions.js, so regenerate them rather than hand-editing when those files change.