version: '3'

# tasks/triage-actions.yml -- per-issue triage commands (#845 Story 3).
#
# Wired into the parent Taskfile.yml `includes:` block under namespace key
# `triage-actions` (#845 Story 6). Inner task names below dropped the
# `triage:` prefix in #913 -- the prior names produced a doubled prefix
# (`triage-actions:triage:accept`) under go-task's include-namespace
# concatenation. Combined with `internal: true` the fragment-namespace
# forms (`triage-actions:accept` / `triage-actions:reject` / ...) are
# hidden from `task -l`; the documented `task triage:accept` / `triage:reject`
# / `triage:defer` / `triage:needs-ac` / `triage:mark-duplicate` /
# `triage:status` / `triage:reset` / `triage:history` surface lives as
# root-level alias tasks in Taskfile.yml that delegate here.
#
# Per `conventions/task-caching.md`: NO `sources:` / `generates:` because every
# target accepts user-facing flags via `{{.CLI_ARGS}}` (--issue, --repo,
# --reason, --of, --comment, --actor) -- the cached `cmds:` skip would
# silently swallow recovery flags. Same rationale that gated `task release`
# (#74), `task pr:check-protected-issues` (#702), and `task verify:encoding`
# (#798).
#
# Handler: packages/cli/src/triage-actions.ts via engine:invoke (packages/cli/dist).
# Help registry: packages/core/src/triage/help/registry-data.ts (edit in place).
# Audit/cache contracts live in packages/core (candidates log + unified cache).

vars:
  DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'

tasks:
  accept:
    desc: "Accept an issue for triage. Records an audit entry. (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions accept {{.CLI_ARGS}}'

  reject:
    desc: "Reject an issue. Closes upstream via gh + applies triage-rejected label; rolls audit back on gh failure. (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions reject {{.CLI_ARGS}}'

  defer:
    desc: "Defer an issue. Records an audit entry. (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions defer {{.CLI_ARGS}}'

  needs-ac:
    desc: "Mark an issue as needing acceptance criteria + post AC-request comment upstream. (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions needs-ac {{.CLI_ARGS}}'

  mark-duplicate:
    desc: "Link an issue as a duplicate of another (validated against Story 1 cache). (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions mark-duplicate {{.CLI_ARGS}}'

  status:
    desc: "Print the latest triage decision for an issue. Read-only. (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions status {{.CLI_ARGS}}'

  reset:
    desc: "Reset an issue's triage state. Appends a reset audit entry referencing prior; does NOT delete history. (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions reset {{.CLI_ARGS}}'

  history:
    desc: "Print the full triage timeline for an issue, ordered by timestamp. Read-only. (#845 Story 3)"
    internal: true
    deps: [":engine:_ts-build"]
    dir: '{{.USER_WORKING_DIR}}'
    cmds:
      - task: :engine:invoke
        vars:
          ENGINE_CMD: 'triage-actions history {{.CLI_ARGS}}'
