Created
Jul 04, 20:42
Started
Jul 04, 21:58
Completed
Jul 05, 01:08
DevOps handoff
Type
Feature
Shape
ui+db
Worktree Slug
task-mascot-evolution-gates
Repositories
mcritchie-studio
Release Slug
—
Branch
feat/task-mascot-evolution-gates
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Epic: Pokemon evolution dynamic, task 3 of 3 — STACKED on base-level-spawn-pool (needs base/evolution/baby columns). Evolve devops.mascot one step on transition to submitted, second step on transition to assembled (random pick among evolution slugs; skip when list empty, e.g. snorlax). Evolve BEFORE Task#stage_mascot_event_metadata bakes the TaskEvent snapshot so the latest crew event shows the evolved form while older events keep theirs (snapshot mechanism already frozen per event). session_mascots row untouched — session keeps its base Pokemon even across multiple tasks. Guard Task#sync_session_mascot so build-stage saves do not clobber an evolved task mascot back to the session base; track evolution stage (e.g. devops.mascot_stage) for idempotency across blocked/rework loops. Shiny flag carries through evolution; re-derive mascot_color/mascot_emoji from the evolved form. Persona/--mascot-override identities skip evolution. Shiny_odds are 0 under test; stub the random branch pick similarly for deterministic tests.
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.
Scout report: conductor-review - No code/UI blockers found; #385 is green, but it is stacked on #383 and should not be swept alone. Reporter: shannon Outcome: conductor-review Findings: - No blocker: evolution callbacks update the task mascot at submitted and assembled, leave the session mascot stable, and bake TaskEvent snapshots for historical timeline/card rendering. - Merge-safety caveat: PR #385 includes #383's base-level-spawn-pool commit; #383 carries post_deploy_cmd=bin/rails pokemon:seed while #385 records post_deploy_cmd=none, so Avi/Steffon should advance #383 first or keep the stack together. - Open overlap: #384 also carries the #383 files; #385 is mergeable against release with no conflict, but stack order needs conductor coordination. Questions: - none Checks: - Read AGENTS.md, README, RUNBOOK, Avi pr-review SOP, pr-review primitive, devops task-board, app-registry, and data-model docs. - Inspected task metadata, PR body, commits, changed files, open PR overlap, mergeability, and GitHub CI for #385; CI is green and mergeStateStatus is CLEAN. - Ran bin/dor-check task-mascot-evolution-gates: passed. - Ran bin/rails test test/models/task_mascot_evolution_test.rb test/models/task_event_evolution_test.rb test/helpers/stage_agents_helper_test.rb: 66 runs, 220 assertions, green. - Curl smoke http://localhost:3007/tasks/evolution-demo-walkthrough-task: 200 OK and Charmander/Charmeleon/Charizard timeline titles present.
Scout report: conductor-review - Code and tests satisfy mascot evolution acceptance, but PR #385 is stacked on submitted migration PR #383 and should be sequenced by Avi/Steffon before review approval. Reporter: carl Outcome: conductor-review Findings: - Merge-safety: feat/task-mascot-evolution-gates includes da12ec64 from base-level-spawn-pool (#383); merging #385 first would merge the base/evolution/baby migration and seed changes under the wrong task. - No code blockers found in the task evolution callback/order or timeline snapshot rendering; local :3007 task page renders Charmander, Charmeleon, and Charizard history. Questions: - none Checks: - Read AGENTS.md, Avi pr-review SOP, shared pr-review module, README, RUNBOOK, task-board/frontend/testing docs; inspected task metadata, PR body, changed files, CI, DoR, merge-tree, and local URL.
pr-review deferred task-mascot-evolution-gates: conductor-review. carl: conductor-review - Code and tests satisfy mascot evolution acceptance, but PR #385 is stacked on submitted migration PR #383 and should be sequenced by Avi/Steffon before review approval.; shannon: conductor-review - No code/UI blockers found; #385 is green, but it is stacked on #383 and should not be swept alone.
Scout report: conductor-review - Code/test review is green, but PR 385 is stacked on open PR 383 and must be sequenced after its pokemon:seed deploy command. Reporter: carl Outcome: conductor-review Findings: - BLOCKER: PR 385 includes commit da12ec64 from PR 383/base-level-spawn-pool; merging it before PR 383 would ship another submitted task without its task gate and would omit PR 383's post_deploy_cmd (bin/rails pokemon:seed). - NON-BLOCKER: PR 385's own final commit covers submitted/assembled evolution gates, branch randomization, session stability, historical TaskEvent snapshots, and resubmit idempotency. Questions: - none Checks: - Verified PR metadata: base release, head d5039813, mergeable, GitHub CI lint/test/scan_js/scan_ruby all pass. - Ran Rails targeted suite locally: 90 runs, 362 assertions, 0 failures. - Ran E2E locally: E2E_PORT=3097 npx playwright test mascot_evolution.spec.js; 1 passed. - bin/dor-check task-mascot-evolution-gates passed for ui+db with unit/component/integration/e2e, full-suite and rubocop evidence.
Scout report: conductor-review - No code/UI blockers found; CI, DoR, clean targeted tests, and local demo are green, but PR 385 is stacked on PR 383 and needs conductor sequencing before review advancement. Reporter: shannon Outcome: conductor-review Findings: - No code blocker: incremental diff over feat/base-level-spawn-pool updates Task callbacks and StageAgentsHelper so submitted/assembled gates evolve the task mascot, preserve session mascot, and bake TaskEvent snapshots. - Merge-safety: origin/feat/base-level-spawn-pool is an ancestor of PR 385, while base-level-spawn-pool is still submitted and carries post_deploy_cmd bin/rails pokemon:seed; do not sweep PR 385 alone ahead of PR 383. - Open overlap: PR 384 also stacks on PR 383; the child PRs look compatible, but Avi/Steffon should keep the stack order explicit. Questions: - none Checks: - [docs] Read AGENTS.md, README, RUNBOOK, Avi pr-review SOP, pr-review primitive, devops task-board, frontend/testing/data-model docs. - [ci] gh pr checks 385: scan_ruby, scan_js, lint, test all pass; PR is open, non-draft, base release, mergeable. - [dor] bin/dor-check task-mascot-evolution-gates passed for ui+db; metadata includes unit/component/integration/e2e plus full-suite/rubocop certificates. - [unit/component] After RAILS_ENV=test db:test:purge db:test:prepare, bin/rails test test/models/task_mascot_evolution_test.rb test/models/task_event_evolution_test.rb test/helpers/stage_agents_helper_test.rb passed: 66 runs, 220 assertions. - [manual] curl http://localhost:3007/tasks/evolution-demo-walkthrough-task returned 200 and included stage-timeline plus Charmander, Charmeleon, Charizard crew names.
pr-review deferred task-mascot-evolution-gates: conductor-review. carl: conductor-review - Code/test review is green, but PR 385 is stacked on open PR 383 and must be sequenced after its pokemon:seed deploy command.; shannon: conductor-review - No code/UI blockers found; CI, DoR, clean targeted tests, and local demo are green, but PR 385 is stacked on PR 383 and needs conductor sequencing before review advancement.
Scout report: conductor-review - No code/UI blockers found in PR 385's evolution commit; recommend conductor sequencing because the PR is stacked on open Pokemon base work. Reporter: shannon Outcome: conductor-review Findings: - Conductor-review: PR 385 includes PR 383's base-level-spawn-pool commit and shares prerequisite Pokemon files with sibling PR 384; merge-tree checks are clean, but advancement should be sequenced by Avi/Steffon. - Acceptance fit looks good: submitted and assembled hooks evolve only the task mascot, TaskEvent snapshots preserve historical forms, session mascot remains stable, and rework resubmit idempotency is covered. Questions: - none Checks: - Read AGENTS.md, Avi pr-review SOP, README/RUNBOOK, ECOSYSTEM, task-board/data-model/frontend docs; inspected task metadata, PR body, diff, CI, open PR queue, and merge safety. - GitHub CI for PR 385 is green; bin/dor-check task-mascot-evolution-gates passed; local URL returned HTTP 200; focused Rails tests passed: 66 runs, 220 assertions.
Stacked on base PR #383 (base-level-spawn-pool), now reviewed. Reviewers (carl+shannon) found evolution-gates code/tests green and acceptance met — the only hold is sequencing: #385 depends on #383's bin/rails pokemon:seed post-deploy backfill and shares roster files with #384. After #383 merges to release, rebase feat/task-mascot-evolution-gates onto release, confirm CI green and the seed ordering, and resubmit.
Avi approved (conductor decision, operator-confirmed): batch the evolution epic. #385 rides Steffon's next qa-release sweep with base #383 and sibling #384, ordered #383->#384->#385. Shared base commit da12ec64 is an identical SHA (git dedups on merge); #385's files (task.rb, stage_agents_helper.rb, mascot tests) are disjoint from #384's. Ready for the sweep.
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
LARGE
Dev
LARGE
Actual
XL
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.