Agents Builders

Task Mascot Evolution Gates

Archived
task-mascot-evolution-gates

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

QA URL

Production URL

task-lifecycle board-ui

Acceptance Criteria

  • Task mascot evolves once reaching submitted
  • Task mascot evolves again reaching assembled
  • Branching lines pick one random evolution
  • Session mascot never changes during evolution
  • Older crew events keep pre-evolution snapshot
  • Rework resubmit never double evolves mascot

Expected Test Plan

  • [unit] evolution at submitted and assembled transitions
  • [unit] idempotency across block and resubmit loops
  • [integration] task event snapshot bakes evolved form
  • [e2e] timeline shows evolution progression on cards

Checks Run

  • [unit] bin/rails test test/models/task_mascot_evolution_test.rb
  • [integration] bin/rails test test/models/task_event_evolution_test.rb test/integration/board_card_stage_avatars_test.rb
  • [component] bin/rails test test/system/task_timeline_mascot_history_test.rb test/helpers/stage_agents_helper_test.rb test/views/consolidated_timeline_test.rb
  • [e2e] npx playwright test mascot_evolution.spec.js
  • [manual] demo task walked to assembled on :3007 — charmander/charmeleon/charizard chips verified
  • [full-suite@caedacb15a274046abc4c49b95ac0ad7b92dc76b] bin/rails test green
  • [rubocop@caedacb15a274046abc4c49b95ac0ad7b92dc76b] bin/rubocop clean

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.

Sizing Avi · PO LARGE Dev LARGE Actual XL ≠ forecast
  1. Created Designed
    N Nidorina
    Nidorina
    Model
    Duration
    Tokens
    Cost
    Completed Jul 04, 20:42 · 4 days ago
    api
  2. Designed Building
    N Nidorina
    Nidorina
    Model
    claude-fable-5
    Duration
    about 1 hour
    Tokens
    40,298,212
    Cost
    ~$55.84
    Started Jul 04, 20:42
    Completed Jul 04, 21:58 · 4 days ago
    cli
  3. Building Submitted
    N Nidorina
    Nidorina
    Model
    claude-fable-5
    Duration
    41 minutes
    Tokens
    32,626,118
    Cost
    ~$40.43
    Started Jul 04, 21:58
    Completed Jul 04, 22:39 · 4 days ago
    cli
  4. Submitted Blocked
    A Avi
    Avi
    Model
    claude-opus-4-8
    Duration
    43 minutes
    Tokens
    2,008,816
    Cost
    ~$3.52
    Started Jul 04, 22:39
    Completed Jul 04, 23:22 · 4 days ago
    cli
  5. Blocked Reviewed Review Activity
    Model
    claude-opus-4-8
    Duration
    about 1 hour
    Tokens
    5,387,571
    Cost
    ~$4.22
    Started Jul 04, 23:22
    Completed Jul 05, 00:09 · 4 days ago
    cli
  6. Reviewed Assembled
    S Steffon
    Steffon
    Model
    claude-opus-4-8
    Duration
    24 minutes
    Tokens
    Cost
    Started Jul 05, 00:09
    Completed Jul 05, 00:32 · 3 days ago
  7. Assembled Shipped
    A Avi
    Avi
    Model
    claude-opus-4-8
    Duration
    35 minutes
    Tokens
    Cost
    Started Jul 05, 00:32
    Completed Jul 05, 01:08 · 3 days ago
  8. Shipped Archived
    Model
    Duration
    about 1 hour
    Tokens
    Cost
    Started Jul 05, 01:08
    Completed Jul 05, 02:21 · 3 days ago

Conversation

QA review feedback, agent handoffs, and follow-up notes for this task.

Comment shannon 4 days ago

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.

Comment carl 4 days ago

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.

Comment avi 4 days ago

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.

Comment carl 4 days ago

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.

Comment shannon 4 days ago

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.

Comment avi 4 days ago

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.

Comment shannon 4 days ago

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.

QA Feedback avi 4 days ago

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.

Handoff avi 4 days ago

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