Last modified 13 years ago Last modified on 03/31/09 15:06:18

Error: Macro BackLinksMenu(None) failed
compressed data is corrupt

Error: Macro TicketQuery(summary=SCS_ISSUE_TRACKER_SETUP_R2, format=table, col=summary|owner|status|type|component|priority|effort|importance, rows=description|analysis_owners|analysis_reviewers|analysis_score|design_owners|design_reviewers|design_score|implementation_owners|implementation_reviewers|implementation_score|test_owners|test_reviewers|test_score|) failed
current transaction is aborted, commands ignored until end of transaction block



As we are getting close to beta versions, issue tracker should be set up in a way that is convinient for the end users to report bugs.

Task requirements

  • Change default tickets type to bug
  • Make the default component of tickets "uncategorized"
  • Make the description field required.
  • Review trac permissions
  • unregistered (anonymous) users should be able to:
    • Create a ticket of type bug
    • An explanation of what should they fill in will be useful
  • unregistered users should NOT be able to
    • Create more than number of tickets for a time interval
    • Delete or edit existing tickets - this should also be noted (this one is easy - ticket deletion is not possible without a plugin).
  • Some of the registered users should be able to
    • Delete tickets - this should be discussed - accidently deleting of tickets won't be nice, but unwanted content should be deleteable. Probably deletion of bug tickets only is enough, but should be done by some users only.

Task result

Issue tracker ready for anonymous bug reporting.

Implementation idea

Install the plugins from the Related section.


Here is the example from the TypedTicketWorkflow sample

workflow = TypedTicketWorkflow

accept = new,assigned,accepted,reopened -> accepted
accept.operations = set_owner_to_self
accept.permissions = TICKET_MODIFY
accept.tickettype = bug, task

Here is our current workflow

t1a_super = * -> s3c_implementation_ok = super review
t1b_super = * -> s2c_design_ok = super review
t1c_super = * -> s1c_analysis_ok = super review
t1d_super = * -> new = super review
t2a_resolve = * -> closed = resolve
t2a_resolve.operations = set_resolution
t2b_reassign = * -> * = reassign
t2b_reassign.operations = set_owner
t2b_reassign.permissions = TICKET_MODIFY
t2b_reassign.set_owner = pac,kyli,boyan,meddle,pap,veliko87,jani,tanya,peko,todor,milo,sriggins,orliin,niki,gogov,danvisel,mira,alex,deyan,pav,alex,htomov,nmatelan,nvasilev,mitex,mbenkov,dido,stitch
t2c_reopen = closed -> new = reopen
t2c_reopen.operations = del_resolution
t2c_reopen.permissions = TICKET_CREATE
t5a_fail_testing = s4b_test_finished -> s3c_implementation_ok = review test FAIL
t5b_finish_test_ok = s4b_test_finished -> s4c_test_ok = review test OK
t5c_finish_test = s4a_test_started -> s4b_test_finished = finish test
t5d_start_test = s3c_implementation_ok -> s4a_test_started = start test
t6a_review_implementation_fail3 = s3b_implementation_finished -> new = review implementation FAIL 3
t6b_review_implementation_fail2 = s3b_implementation_finished -> s1c_analysis_ok = review implementation FAIL 2
t6c_review_implementation_fail = s3b_implementation_finished -> s2c_design_ok = review implementation FAIL
t6d_review_implementation_ok = s3b_implementation_finished -> s3c_implementation_ok = review implementation - OK
t6e_finish_implementation = s3a_implementation_started -> s3b_implementation_finished = finish implementation
t6f_start_implementation = s2c_design_ok -> s3a_implementation_started = start implementation
t6f_start_implementation.operations = set_owner_to_self
t6f_start_implementation.permissions = TICKET_MODIFY
t7a_review_design_fail2 = s2b_design_finished -> new = review design - FAIL 2
t7b_review_design_fail = s2b_design_finished -> s1c_analysis_ok = review design - FAIL
t7c_review_design_ok = s2b_design_finished -> s2c_design_ok = review design - OK
t7d_finish_design = s2a_design_started -> s2b_design_finished = finish design
t7e_start_design = s1c_analysis_ok -> s2a_design_started = start design
t7e_start_design.operations = set_owner_to_self
t7e_start_design.permissions = TICKET_MODIFY
t8a_review_analysis_fail = s1b_analysis_finished -> new = review analysis - FAIL
t8b_review_analysis_ok = s1b_analysis_finished -> s1c_analysis_ok = review analysis - OK
t8c_finish_analysis = s1a_analysis_started -> s1b_analysis_finished = finish analysis
t8d_start_analysis = new -> s1a_analysis_started = start analysis
t8d_start_analysis.operations = set_owner_to_self
t8d_start_analysis.permissions = TICKET_MODIFY
t9_leave = * -> * = leave

This allows adding workflow for bugs. For bug actions you should add ".tickettype" = bug and for the others - ".tickettype = unplanned_task, planned_task". Discuss with the team leader granting "TICKET_CREATE" permissions to anonymous users. Add "leave" permission to all of the registered users.

Default ticket type should be set to bug (default_type in trac.ini). Hide some of the dropdown menus - for example task type (this is optional and may not be so convinient).

Fields may be described by replacing


Install the spam filter and research it's options.

Intall the trac delete plugin to allow ticket deletion. Do not give deleting permissions to no one for now.

Use the TicketSubmitPolicyPlugin to make description fields required


How to demo

Create a ticket from an anonymous account. Explain what is done.


  • Install the plug-ins listed in the implementation idea.
  • Research them and the way they work
    • deletion of accounts is possible with the proper plug-in
      • the trac admin can delete tickets and to assign such role to other team members
    • TicketSubmitPolicyPlugin is useless for making description field required, it can only be used to show or hide different fields.
      • Information about Akismet is available here.
    • After research of the different settings of the Spam filter, now it can be successfully implemented.
  • To change default ticket's type to bug and to make the default component of tickets "uncategorized" change following part of trac.ini:

default_cc =
default_component = uncategorized
default_description =
default_keywords =
default_milestone =
default_owner =
default_priority = major
default_resolution = fixed
default_severity =
default_summary =
default_type = bug
default_version =
max_description_size = 262144
preserve_newlines = default
restrict_owner = false
workflow = ConfigurableTicketWorkflow,CodeReviewActionController,TicketWorkflowOpOwnerReporter

  • Spam Filter


  • Installed the plug-ins listed in the implementation idea.
  • Research them and the way they work
    • deletion of accounts is possible with the proper plug-in
      • the trac admin can delete tickets and to assign such role to other team members
    • TicketSubmitPolicyPlugin is useless for making description field required, it can only be used to show or hide different fields.
    • For now making the description required field is not possible, or at least we haven't found a proper plug-in to do that. Policies plug-in is applicable only for displaying and hiding certain fields, but it can not make them required.
    • The Spam Filter is now working and uses Akismet and other popular filters.
      • We've created WordPress account (ask pac for the username and password if needed).
      • We applied recommended settings.
  • Restrictions requirement could be partially fulfilled, because some aspects of them are blocked by the two previous requirements.
  • Now default ticket's type is "bug" and the default component of the tickets is "uncategorized".


(Place the testing results here.)


(Write comments for this or later revisions here.)