Created
Jun 26, 17:46
Started
Jun 26, 20:05
Completed
Jun 26, 21:21
DevOps handoff
Type
Chore
Shape
backend
Worktree Slug
add-session-preflight
Repositories
mcritchie-studio
Release Train
—
Branch
feat/add-session-preflight
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Add bin/session-preflight <task> as the beginning-of-session counterpart to bin/dor-check. It should summarize latest task feedback, branch drift against origin/release, PR merge/check status, same-file overlap with open/recent PRs, installed docs/skills drift, stale terminology findings, and required test tiers from config/feature_shapes.yml. Prefer deterministic local checks and graceful degradation when gh or network is unavailable.
Stage Timeline
Who handled each stage, the time it took (measured), and the model / tokens / cost reported (best-effort) — plus who's on it right now. — means the agent didn't report that metric.
Conversation
QA review feedback, agent handoffs, and follow-up notes for this task.
HEAVY review (Jasper) — acceptance #1 'reports latest task blocker feedback' is non-functional against the live board. bin/session-preflight shells to 'bin/task show <slug> --json', which serializes @task.as_json — Task has no custom as_json and latest_activity is NOT a column (it is derived; deployments_broadcaster uses activities.recent.first). So the real task JSON has no latest_activity key and latest_feedback(task) always returns nil → 'Latest feedback: none' for every real task. The suite masks it: every test feeds a fabricated --file fixture with latest_activity hand-injected, so no test exercises the real --json contract. FIX: make the feedback source real — either (a) extend the task API serializer so /api/v1/tasks/:slug data includes latest_activity (mirror what bin/devops-cycle computes — most-recent activity / qa_feedback/block note), or (b) have session-preflight fetch the task's activities directly rather than reading task['latest_activity']. Then add a test exercising the REAL bin/task show --json → latest_feedback path and fix the --file fixture to match the live API contract so a green test can't mask empty feedback. Other checks (branch drift, PR/overlap, docs/stale, tiers) are sound — only the feedback data contract needs to become real.
See PR #244 review comment (durable). HEAVY block: bin/session-preflight latest-feedback path is inert against the live board — bin/task show --json serializes @task.as_json which has no latest_activity key (it's derived, not a column); only the --file test fixture made it green. Make the feedback source real + add a test against the real --json contract.
Senior review → APPROVED (2/2). Reviewers: Steffon (devops/tooling) + Carl (rails/tests), both high confidence. Tests green: command suite (7 tests/92 assertions) + controller show/latest (4/16) + 30 focused all pass. Acceptance: all 6 met — latest-feedback now sourced from real latest_activity serializer with /api/v1/activities fallback (prior HEAVY block resolved); branch-drift, PR/checks, overlap, docs-drift, stale-terms, test-tiers all covered by deterministic command tests. Non-blocking follow-ups (do NOT gate ship): (1) overlap_report issues one gh-pr-view per candidate across up to 30 PRs serially — cap merged depth or drop merged sweep; (2) latest_activity_json orders by created_at only — add id tiebreaker for guaranteed determinism; (3) dead task.dig('devops','task_url') falls through harmlessly.
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
—
Dev
MEDIUM
Actual
LARGE
We emailed a one-tap sign-in link to . It expires shortly and can only be used once.
No email? Check spam, or close this and try again.