---
id: w1/m15/t008
title: Closeout
worker: worker1
status: done
estimate: 10m
depends_on: [w1/m15/t007]
---

## Objective

Close the milestone only when the Definition of Done holds: worker + cron creatable across REST/GraphQL/MCP, both type-badged in the dashboard (worker no URL, cron shows schedule + runs), `create_cron_job` and the cron run trigger working, parity checked vs render.com, and `make test` + dashboard tests green.

## Context

- DoD is in `.pm/w1/m15/README.md`. Static sites are explicitly out of scope (deferred to inbox note `w1/012`).
- Done-item conventions (`.pm/CLAUDE.md`): move each done task to `.pm/w1/m15/done/tNNN.md`; when no open tasks remain, move the whole milestone to `.pm/w1/done/m15/` and check its box in the workstream `w1/README.md`. Leave no tombstone at the old path.

## Steps

1. Verify every t001–t007 acceptance criterion is met and the DoD holds end-to-end.
2. Sync status across the three places (task frontmatter, milestone README rows + `**Status:**`, workstream checkbox).
3. Move done tasks to `done/`, then move the whole milestone to `.pm/w1/done/m15/` and check the `w1/README.md` box.

## Files

- `.pm/w1/m15/*` → `.pm/w1/done/m15/*`
- `.pm/w1/README.md` (workstream checkbox)

## Acceptance criteria

- [x] DoD holds; `make test` + dashboard tests green.
- [x] Status synced across frontmatter, milestone README, and workstream checkbox.
- [x] Milestone moved to `.pm/w1/done/m15/` with no tombstone left behind.

## Out of scope

- Any follow-up parity gap surfaced by t005 (lives as its own task/note).
