refinement-heavy · commit-to-tracker

Pre-tracker backlog shaping

The permissive staging layer upstream of Jira. Partial candidates accumulate. Agents and humans split, dedupe, estimate, rank. Only fully-formed entries commit downstream — the logbook is authoritative during shaping, the tracker takes over at execution.

Shape
Single flat table
Storage
Spreadsheet
Owner
Tech lead
Lifetime
Until candidates are committed
Identity
candidate_id (UUID)
Corrections
Patch in place

Schema

ColumnMeaning
candidate_idStable UUID — survives renaming, reordering, and commit.
epicParent epic. null for orphans that still need grouping.
task_nameShort title. Rewritten freely during shaping.
descriptionOne paragraph. Expanded as the team learns more.
componentWhich subsystem: auth, billing, ui-web, etc.
dependencyList of candidate_ids this blocks on.
risklow, medium, high, or unknown.
estimateStory points. null until estimation pass.
priorityp0p3. Business priority, not urgency.
split_merge_actionnull, split:<ids>, merge-into:<id>.
commit_decisionpending, approved, dropped.
ticket_idPatched back after commit. null before commit.

Sample data

candidate_id,epic,task_name,component,risk,estimate,priority,commit_decision,ticket_id c-7f3a,EPIC-42,Add OAuth callback error page,auth,low,3,p1,approved,JIRA-8841 c-9b2e,EPIC-42,Rate-limit login attempts per IP,auth,medium,5,p1,approved,JIRA-8842 c-4e11,EPIC-51,Retry queue for stripe webhooks,billing,high,,p0,pending, c-6c88,EPIC-51,Dedupe webhook handler,billing,medium,3,p2,pending, c-2a44,,Audit log export to S3,ops,low,,p2,pending,

Common queries

# Rows that are approved but can't commit — missing required fields
filter commit_decision=approved AND estimate=null

# Orphans still needing an epic
filter epic=null AND commit_decision=pending

# What's blocking auth?
filter component=auth AND commit_decision=pending
group_by dependency

Actions

Commit to Jira. The signature action. The logbook's commit_decision=approved + all required Jira fields populated → create ticket via API → patch ticket_id back onto the row. Entries missing required fields surface in a gaps query before commit, not as Jira validation failures after. Dry-run prints what would be created.

Generate report. Weekly candidate-health brief grouped by component for the tech lead.

Anti-pattern: second place to update

After commit, Jira is authoritative for the row — don't sync ticket status changes back into the logbook. Patch ticket_id once; let the tracker own it from there. Keeping both editable creates the "second place to update" failure mode.