| name | finalize-month |
| description | Package all approved content into the final delivery folder — files renamed per convention, per-platform copy files, manifest included — ready for client handoff. Triggers on "/finalize-month", "finalize the month", "package everything", "prepare the delivery", "close out the month", "handoff folder", or when every post has cleared its approval queue and the month ships to the client. |
| argument-hint | [--brand <name>] [--force] |
| effort | high |
| user-invocable | true |
| disable-model-invocation | true |
/socialforge:finalize-month — Month Finalizer
Package all approved posts into the organized delivery folder structure.
Pre-Finalization Check
Step 0 — run the delivery audit, before any packaging:
python "${CLAUDE_PLUGIN_ROOT}/scripts/delivery_audit.py" --brand {brand} --month {YYYY-MM}
It re-derives the month's claims from the ledger and the disk: every status in the vocabulary, revision history landing on the recorded status, no ghost posts the calendar never knew, no gate bypassed on the way to delivery (force_finalized is surfaced loudly, not left as a buried flag), every FINAL post's referenced file existing and non-empty, the failure log loadable, and cost totals honest about incompleteness. Exit 1 means the delivery is claiming something the disk does not support — resolve the findings before packaging, never around them. The verdict lands in delivery-audit.json beside the tracker.
Then:
- All posts must be FINAL status (or --force to skip unapproved)
WARNING:
--force bypasses ALL approval gates. Use only in emergencies. All force-finalized posts are logged with force_finalized: true in status-tracker.json for audit trail — and the delivery audit reports every one of them as a violation the client-facing record must acknowledge.
- All compliance checks passed
- All required approvals obtained per approval-chain.json
- Calendar document assembled
If any posts are not FINAL: "3 posts still pending approval. Finalize anyway with --force, or resolve pending items first."
Final Folder Structure
FINAL/
├── 00-Calendar-Document/
│ └── {brand}-{month}-calendar.json # delivery manifest; DOCX conversion is a manual step
├── 01-Ready-to-Publish/
│ └── Week-{N}/
│ └── {date}-Post{id}-{title}/
│ └── {platform}/
│ ├── image-{WxH}.png
│ ├── copy.txt
│ └── preview.png
├── 02-Carousels/
├── 03-Video-Production-Kit/
├── 04-Stories-Shorts/
├── 05-Review-Gallery/
├── 06-Publishing-Schedule/
└── 07-Production-Checklist/
Process
- Verify all approval gates
- Organize files into folder structure
- Generate publishing schedule (dates + times + platforms)
- Generate production checklist (remaining manual tasks)
- Upload to Google Drive (if connected)
- Send completion notification via Slack/email
- Remind the user: once the month has run, ingest its analytics export with
/socialforge:ingest-performance — that is what lets next month's
/socialforge:ideate-month compound measured wins instead of memory