[ticket-workflow] ; Enhanced Workflow v1.0.1 ; For Trac >0.11 ; ; ABOUT ; ; This falls somewhere between the enterprise workflow ; with QA and the open-source workflow without it (provided ; in the Trac source). It's adapted for how we work in ; a small but tightly coupled team on a closed-source ; project. We don't have dedicated QA staff, so the ; review stage is fairly simple. ; ; Tickets are assigned and accepted as before, but ; we can only close new tickets as "wontfix", "invalid", ; "duplicate" or "worksforme". I add a new action, ; "start" which takes ownership and moves the ticket ; to "inprogress". From any of these states the owner ; can request more info and put the ticket in a ; "needinfo" state. ; ; Once work is completed, the ticket can be assigned ; for "review". Reviews can be reassigned. Only after ; a ticket has been reviewed can it be closed with ; anything like "fixed" or "complete". Or a ticket ; can fail review and be reassigned for more work. ; ; TODO: ; - Possibly add more review states that ; mirror the work states, like "needsreview", ; "reviewassigned", "reviewaccepted", ; "reviewstarted", "reviewreassigned". ; ; Adds the following states ;; needinfo - more information is needed ;; inprogress - work has started ;; reviewing - work is ready for review/QA ;; failed - work failed review/QA ; And the following actions ;; unassign ;; request more information ;; start ;; send for review ;; reassign review ;; fail review ; ; LICENSE ; ; Copyright (c) 2008 James Socol. ; ; Permission is hereby granted, free of charge, to any person ; obtaining a copy of this software and associated documentation ; files (the "Software"), to deal in the Software without ; restriction, including without limitation the rights to use, ; copy, modify, merge, publish, distribute, sublicense, and/or sell ; copies of the Software, and to permit persons to whom the ; Software is furnished to do so, subject to the following ; conditions: ; ; The above copyright notice and this permission notice shall be ; included in all copies or substantial portions of the Software. ; ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ; OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ; OTHER DEALINGS IN THE SOFTWARE. ; Accept a ticket, allow stealing accept = new,assigned,accepted,reopened,failed -> accepted accept.operations = set_owner_to_self accept.permissions = TICKET_MODIFY ; default action, do nothing leave = * -> * leave.default = 1 leave.operations = leave_status ; assign a ticket to someone else reassign = new,assigned,accepted,inprogress,needinfo,reopened,failed -> assigned reassign.operations = set_owner reassign.permissions = TICKET_MODIFY ; need more information needinfo = new,assigned,accepted,inprogress,reopened,failed -> needinfo needinfo.name = request more information needinfo.permissions = TICKET_MODIFY ; reopen a ticket reopen = closed -> reopened reopen.operations = del_resolution reopen.permissions = TICKET_CREATE ; resolve new tickets, only allow certain resolutions resolve_new = new,assigned,accepted,reopened,failed -> closed resolve_new.name = resolve resolve_new.operations = set_resolution resolve_new.set_resolution = wontfix,duplicate,invalid,worksforme resolve_new.permissions = TICKET_MODIFY ; close tickets under review resolve = reviewing -> closed resolve.operations = set_resolution resolve.permissions = TICKET_MODIFY ; start work on a ticket, allows stealing start = new,reopened,accepted,assigned,failed,needinfo -> inprogress start.operations = set_owner_to_self start.permissions = TICKET_MODIFY ; submit a ticket for review review = inprogress -> reviewing review.name = send for review review.operations = set_owner review.permissions = TICKET_MODIFY ; reassign a ticket under review review_reassign = reviewing -> * review_reassign.name = reassign review review_reassign.operations = set_owner review_reassign.permissions = TICKET_MODIFY ; fail a ticket and send it back to the devs review_fail = reviewing -> failed review_fail.operations = set_owner review_fail.name = fail review review_fail.permissions = TICKET_MODIFY ; unassign a ticket that has not been sent to review unassign = assigned,accepted,inprogress -> new unassign.operation = del_owner unassign.permissions = TICKET_MODIFY