Adding Iterations to AgileTrac?

Updating Ticket Workflow

EndUser? can view the size of all completed tickets for a given Iteration.

In order to be able to do this we need a way to specify that a ticket is closed on a certain time.

Currently the ticket system supports a way to capture the time when the state of the ticket is changed (for example closed), but there is no way to say, "I completed this ticket on dd/mm/yyyy". To allow for this we need to modify the ticket page to display a radio item for completing either on the current date, or on some specified date. For example:

  • test complete now
    • [_23/05/2009_]
  • test complete on
    • [____________] dd/mm/yyyy
  • resolve as
    • [____________][V] choice of invalid, duplicate, worksforme, wontfix


  • The two completion stage options will only be available to a completion stage with a numeric size that is not 0. In fact if the relative size is 'undecided' then you will not be able to 'close' the ticket.
  • To resolve the ticket as one of the 'dismissive' resolutions (invalid, duplicate, worksforme or wontfix) the relative size must be 0 for each completion stage.
    • either these sizes will be set to 0 automatically on selection of this option, or,
    • you must first set all completion stage sizes to 0 to enable this option.

The easiest choice for dealing with dismissive resolutions has yet to be decided.

We also need to be able to use the ticket workflow to allow this to work as expected. The default workflow is:

default_component = 
default_milestone = 
default_priority = major
default_resolution = fixed
default_type = defect
default_version = 
max_description_size = 262144
preserve_newlines = default
restrict_owner = false
workflow = ConfigurableTicketWorkflow

accept = new,assigned,accepted,reopened -> accepted
accept.operations = set_owner_to_self
accept.permissions = TICKET_MODIFY
leave = * -> *
leave.default = 1
leave.operations = leave_status
reassign = new,assigned,accepted,reopened -> assigned
reassign.operations = set_owner
reassign.permissions = TICKET_MODIFY
reopen = closed -> reopened
reopen.operations = del_resolution
reopen.permissions = TICKET_CREATE
resolve = new,assigned,accepted,reopened -> closed
resolve.operations = set_resolution
resolve.permissions = TICKET_MODIFY

To be able to use completion stages (see the next section) we need some changes to the basic workflow. Basically we want to follow a couple of rules:

  • using 'resolve' to change the ticket state to invalid, duplicate, worksforme results all completion stage sizes being set to 0 (or they must be all 0 to begin with).
  • either resolve to wontfix will be treated the same as other dismissive resolutions, or, it will be possible to not have the sixe set to 0 and then place the wontfix ticket into a wontfix milestone. Another possibility would be to ignore wontfix tickets in any given milestone.
  • using '''stage_complete''' on dd/mm/yyyy will either,
    1. make the subsequent completion stage available, or,
    2. change the ticket state to 'closed' (that is, DONE)

A possible workflow then might be

complete = new, assigned, accepted, reopened -> partially_complete
complete.operations = set_completion_stage
complete.permissions = TICKET_MODIFY

set_completion_stage would close the ticket if this is the last complete 'completion_stage'.

We may need to add a 'sized' status, for example,

sized = new, assigned, accepted, reopened -> sized
sized.operations = set_ticket_size
sized.permissions = TICKET_MODIFY

It may make sense to only allow a ticket to be accepted after it has been sized. This would allow this us to fit the idea of sizing into the ticket status without forcing to rewrite how status is used conceptually for tickets. In other words the status would continue to be a linear advancement.

Complex Tickets have Completion Stages

In AgileTrac? there will be 4 types ticket as standard,

  • defect - complex
  • enhancement - complex
  • userstory - complex
  • task - simple

Of these three are complex. What we mean by that is that the complex three have more than one completion stage. The default completion stages are:

  1. test_complete
  2. documentation_complete
  3. acceptance_complete

In the case of a task it will have only one stage, that of,

  • complete

The basic idea is to use a table (or tables) in the database that captures these stages for each ticket type, allowing them to be changed as appropriate, for example,

defect test_complete
defect documentation_complete
defect acceptance_complete
enhancenment test_complete
enhancenment documentation_complete
enhancenment acceptance_complete
userstory test_complete
userstory documentation_complete
userstory acceptance_complete
task complete

might be added to the enum table in the trac database.

You can see an entry of 'complete' for task. This would be the default even if no entry was specified for task.