一键导入
draft-weekly-ship
Draft the Piper Morgan Weekly Ship newsletter from collected workstream memos. Use when PM says "draft the Ship", "draft Ship
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Draft the Piper Morgan Weekly Ship newsletter from collected workstream memos. Use when PM says "draft the Ship", "draft Ship
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Execute one autonomous duty-cycle fire (START / WATCH / WORK / STOP) for a cycling agent. Invoked by the thin cron prompt on each fire. Use when a "DUTY CYCLE TICK" prompt fires, or to run a cycle fire manually. Holds the durable procedure so the cron prompt stays one-line.
Publish a finished blog post from this repo to the pipermorgan.ai website repo. Use when PM says "publish this post", "push to the blog", or when a draft is marked ready in the editorial calendar. Bridges piper-morgan → piper-morgan-website.
Update the editorial calendar CSV when PM reports a publication, new draft, status change, or URL. Use when PM says "published X on Medium", "add Y to the calendar", "update the URL for Z", or provides syndication URLs after a publish.
Delete a dead/fabricated module (or module family) without stranding importers, tests, CI jobs, or docs. Use for any fix-or-delete execution, Tier-3-style dead-code removal, or retiring a superseded subsystem. Encodes the Finish-the-Unfinished sprint's deletion lessons (Families 1-3, 2026-07-18/19).
Read GitHub Projects-v2 boards and issue state WITHOUT silent truncation or stale claims. Use whenever summarizing sprint/board state for PM, counting open items, or making any "N of M" claim about issues. Companion to assign-sprint-safely (which covers WRITES; this covers READS).
Safely assign a GitHub issue to a Sprint (or any Projects v2 single-select field) WITHOUT wiping other issues' assignments. Use when PM asks to set/change an issue's Sprint, Status, or other project-board single-select field. Encodes the per-item mutation and the hard "never full-replace the option list" rule that two agents have violated (1175 items wiped 2026-07-05).
| name | draft-weekly-ship |
| description | Draft the Piper Morgan Weekly Ship newsletter from collected workstream memos. Use when PM says "draft the Ship", "draft Ship |
| scope | exec |
| version | 1.6 |
| created | "2026-05-19T00:00:00.000Z" |
Draft the Weekly Ship newsletter using the canonical template, voice guide, process guide, and workstream memos — with all of them open before writing starts.
Origin: Ship #043 v0.1 was drafted from memory of past Ship feel rather than opening the template. Result: pure essay form where structured newsletter was required, missed 5-workstream structure, missed learning-pattern 5-component shape, missed metrics table, missed footer convention, missed phase tag. PM correction May 19 directed re-read of source + template + voice guide before re-draft. This skill mechanizes the discipline so the same failure doesn't recur.
Related memory: feedback_ship_drafting_canonical_artifacts_first.md — the vocabulary layer. This skill is the mechanism layer.
Invoke this skill when:
mailboxes/exec/inbox/ and a theme has been agreedDo NOT skip the canonical-artifacts loading step under time pressure. This is exactly when the v0.1 failure mode fires.
| # | What | Path |
|---|---|---|
| 1 | Process guide | docs/internal/development/weekly-ship-process-guide.md |
| 2 | Template v4.1 | knowledge/weekly-ship-template-v4.1.md |
| 3 | Voice & tone guide | docs/internal/planning/comms/xian-voice-tone-guide.md |
| 4 | Most recent published Ship | docs/public/comms/drafts/published/weekly-ship-{N-1}*.md (look up actual filename) |
| # | What | Path |
|---|---|---|
| 5 | All 6 workstream memos | mailboxes/exec/inbox/workstream-{NNN}-{role}-{date}.md (for roles: arch, cio, comms, cxo, host, ppm) |
| 6 | Omnibus logs for Fri–Thu window | docs/omnibus-logs/2026-MM-DD-omnibus-log.md for each day in the window |
| 7 | Editorial calendar CSV (REQUIRED for the External section) | docs/internal/planning/comms/editorial-calendar.csv |
| 8 | Published-post drafts (for any post you'll describe in External) | docs/public/comms/drafts/published/{slug}.md |
Open all 4 in order. Read the process guide first (it tells you what the deliverable IS), then template (structure), then voice guide (tone), then most recent published Ship (in-practice example).
Why this order matters: The process guide names the 5 workstreams as REQUIRED. The template shows the structure with emoji prefixes and learning-pattern 5-component shape. The voice guide names the discipline (no semicolons, no "load-bearing" in public prose, no "CoS" in public prose, parenthetical gloss on first use of role names, temporal-relationship over absolute-date stamps, affirmative direct over disclaim-then-affirmative, section headings as noun phrases not verb phrases). The recent published Ship shows what the in-practice format actually looks like (which may have evolved from the template).
Do not begin Step 3 with fewer than 6 of 6 memos present, regardless of deadline pressure. Check mailboxes/exec/inbox/ (and read/ for any already triaged) for workstream-{NNN}-{role}-*.md from all six roles: arch, cio, comms, cxo, host, ppm.
Why this is a hard gate, not a judgment call: Ship #051 (2026-07-14) was drafted in full with PPM's memo missing, reasoning that the pubDate was the next day and a nudge had already gone out. PM overrode this directly: "we cannot write the ship without all the workstream reviews." PM is the Ship's first audience, not just its final reviewer, and is specifically most interested in the portfolio-goals lens that PPM's §0 carries — a draft missing it is missing the part PM most wants to read, not a minor gap to route around under time pressure. See feedback_ship_needs_all_workstream_reviews_no_partial_draft.md. The Friday early-warning check in methodology-25 (workstream-review-cadence) exists to catch a missing memo early in the week, before it becomes a Tuesday-deadline crisis — this gate is the backstop for when that early warning didn't prevent the gap anyway.
This step is non-negotiable and not a spot-check. Per PM directive May 20: the Chief of Staff reads the actual logs, doesn't rely on staff reports alone. Workstream memos are perspectives — each role lens is real but partial. Engineering shipped arcs in particular tend to live in the omnibus + Lead Dev session logs, not in the methodology-focused workstream memos.
For each day in the Fri–Thu window, open docs/omnibus-logs/2026-MM-DD-omnibus-log.md and read at minimum:
Extract a working list, organized by the 5 Ship workstreams, of:
If an omnibus log is missing for a day in the window (gaps happen), flag it explicitly and supplement from dev/2026/MM/DD/ session logs for that day.
Now read the memos. With the omnibus substrate already loaded, the memos become commentary on what you've already seen rather than your primary source. This is the intended use.
During the read:
If the omnibus for a day is shallow OR a workstream memo references substantive work that doesn't appear in the omnibus, open the relevant session log directly (dev/2026/MM/DD/YYYY-MM-DD-HHMM-{role}-{code|opus}-log.md). The session log is the ground truth.
No superlatives without verification: "longest," "most," "biggest," "first," "on record" all require 30-second history check. Soften to "substantial," "comparable to," "below" if you can't verify.
This step is non-negotiable. The Ship #043 v0.2 fabrication caught May 20 was an entirely-invented External section because this step was skipped.
Open docs/internal/planning/comms/editorial-calendar.csv. Filter to publications whose pubDate OR liPubDate falls in the Fri–Thu window. For EACH publication you will list in the External section, pull from the CSV:
pubDate, plus liPubDate if LinkedIn-syndicated)blogURL for canonical, mediumURL and linkedinURL for syndication)theme column — insight / building / ship)status other than published is held / queued / etc.; do not list as shippedFor a one-line content summary, open the actual post draft at docs/public/comms/drafts/published/{slug}.md and read the first 20–30 lines. Derive the description from the post's actual content. Do not infer content from the title alone.
Cross-check against Comms's workstream memo for the count (e.g., "four published, one held"). If your CSV-derived count doesn't match Comms's count, STOP and investigate before drafting — don't paper over.
Sample CSV query (Python):
import csv
with open('docs/internal/planning/comms/editorial-calendar.csv') as f:
r = csv.DictReader(f)
for row in r:
pub = row.get('pubDate', '')
if pub.startswith('2026-MM-') and 'DD' <= pub.split('-')[2][:2] <= 'DD':
print(row['pubDate'], row['status'], row['title'], row['blogURL'])
Anti-pattern explicit: do NOT pattern-match to a prior Ship's External-section shape (Sat insight / Sun insight / Tue narrative / Thu narrative) and fill the bullets with plausible-sounding invented titles. The cadence varies week to week. Use the CSV.
Required sections in this order (per template v4.1):
# Weekly Ship #{NNN}: {Theme} — sentence case for theme*{Month DD–DD, YYYY}*# 🚀 Shipped this week with the 5 workstreams in this order:
## 🎯 Product & experience## ⚙️ Engineering & architecture## 🔬 Methodology & process innovation## 🌍 External relations & community## 📊 Governance & operations (includes metrics as a bullet list, never a table — PM 2026-07-08)# 🎯 Coming up next week — brief paragraph# 🚧 Blockers & asks — brief paragraph# 🔎 This week's learning pattern with name as ## {Noun-phrase pattern name} and all 5 components:
**Thanks,**
xian + Piper Morgan Development Team
This is Weekly Ship #{NNN}. Previous: [#{N-1} "{TITLE}"](URL).
*P.S. {Key takeaway or personal note}*
*P.P.S. Full session logs and technical details available in the [GitHub repository](https://github.com/mediajunkie/piper-morgan-product) and [documentation site](https://pmorgan.tech). Yes, you can copy it. That just makes our protocol stronger.*
---
**Week of {Month DD–DD, YYYY} | Phase: {Current phase}**
If a workstream has no activity, INCLUDE it with a brief "No significant changes this week" note rather than omitting it.
Verify before declaring done:
**Issues closed:** 25) — NEVER a table; Medium/LinkedIn don't render markdown tables (PM 2026-07-08, supersedes template v4.1's table format). Don't force uninteresting metrics to pad the list.pubDate; every URL pasted from the CSV (no invented slugs); every description is grounded in the post's actual content (not inferred from title); any held/queued posts named separatelypython3 -c "from datetime import date; print(date(YYYY,MM,DD).strftime('%A'))" if uncertaingit log -- docs/internal/development/methodology-core/methodology-NN-* if applicable)dev/active/weekly-ship-{NNN}-draft-{YYYY-MM-DD}.md on the claude/{worktree-slug} branch per worktree-default discipline for substantive outputdocs/public/comms/drafts/weekly-ship-{NNN}-draft-{YYYY-MM-DD}.md on main so PM can read where they expectupdate-calendar skill (or its quick-add script) to add a row with title (full ship title incl. subtitle), workDate/endWorkDate (the Fri–Thu window), pubDate (target Tuesday), status: drafted, draftPath, theme: ship. Don't defer this to "after PM notices" — it's the same commit that creates the draft file, not a follow-up.template-audit skill is their review-of-record; Exec's own Step-6 checklist pass does not substitute for it. Sequence is fixed: draft → PM → Comms → publish.| Don't Do This | Why | Do This Instead |
|---|---|---|
| Draft from memory of past Ships | Pure essay form will result; 5-workstream structure will be missed (v0.1 failure mode) | Open ALL 4 canonical artifacts BEFORE drafting |
| Start drafting after reading 3 of 6 memos | Theme bias toward early arrivals | Wait for all 6; read all 6 before writing |
| Trust memo claims as-is | Memos are perspectives, not sources | Cross-check substantive claims against omnibus logs |
| Use "First time" / "longest" / "most" without checking | Unverified superlative is a common error | 30-second history check, or soften the claim |
| Use Title Case on workstream headings | Template specifies sentence case | "Product & experience" not "Product & Experience" |
| Omit a workstream with no activity | Breaks week-over-week comparison | Include with "No significant changes this week" |
| Metrics as a table, or skipped | Medium/LinkedIn don't render markdown tables (template v4.1's table format is superseded, PM 2026-07-08) | Bullet list (**Issues closed:** 25), always included even if approximate |
| Use semicolons in published prose | PM voice discipline May 13 | Split into two sentences or use em-dash |
| Refer to Chief of Staff as "CoS" | PM directive May 15 | Use "Exec" or "the Chief" |
| Bullet-list a reflection-shaped piece | Voice guide May 11: reflection favors declarative paragraphs | Bullets for shopping lists, scoring rubrics, reference material only |
LLMs struggle to follow templates while creating but excel at auditing against templates afterward (per the audit-cascade skill). Same insight applies here. Open the template AND keep it open during drafting. Then run the audit checklist against the draft before declaring done.
The Ship #043 v0.1 failure was not knowing the template existed — it was choosing to draft from memory instead of opening it. The mechanism layer (this skill) makes the template-loading step procedural rather than remembered. That's the lesson Ship #043 itself names — vocabulary plus mechanism plus sequence; each covers what the prior layer misses.
feedback_ship_drafting_canonical_artifacts_first.md — the vocabulary layer for this skillfeedback_blog_template_and_voice_guide_canonical_for_proofreads.md — parent lesson (proofread version of the same shape)feedback_no_semicolons_in_published_prose.md — voice disciplinefeedback_load_bearing_is_crutch_word_in_public_prose.md — voice disciplinefeedback_exec_nickname_is_exec_or_the_chief_not_cos.md — naming disciplinefeedback_parenthetical_gloss_on_first_use.md — voice disciplinefeedback_temporal_relationship_over_date_stamps_in_public_prose.md — voice disciplinefeedback_affirmative_direct_over_disclaim_then_affirmative.md — voice disciplinefeedback_workstream_review_cadence.md — Fri–Thu window disciplinefeedback_workstream_review_scope.md — Exec synthesizes; 6 leadership roles authorfeedback_ship_needs_all_workstream_reviews_no_partial_draft.md — Step 2b's hard gatedocs/internal/development/methodology-core/methodology-25-WORKSTREAM-REVIEW-CADENCE.md — Friday kickoff trigger + PM notification + prior-cycle-gap check (the early-warning half of the same fix)Step 7: add the editorial-calendar entry in the same commit as the draft. Ship #052 was drafted 7/19 and sat in docs/public/comms/drafts/ with no calendar row until PM noticed it missing from the admin view on 7/21 while looking for the next ship. Docs added the entry retroactively and flagged the gap (memo-docs-to-exec-cc-pm-ship-calendar-update-step-2026-07-21.md) rather than let it recur silently. Fixed at the source: Step 7 now names the calendar update as a required same-commit action, not a follow-up someone has to remember or notice missing.
Step 2b: HARD GATE — all 6 workstream memos required before drafting starts, no exceptions for deadline pressure. Ship #051 was drafted in full (through the audit checklist, committed, pushed) with PPM's memo missing — Exec judged that a nudge had gone out and the pubDate was the next day, so proceeded on 5/6. PM overrode directly: "we cannot write the ship without all the workstream reviews... I am still the first audience for the weekly report and I am especially interested in the portfolio updates." Previously this was a should-wait norm (Anti-Patterns table: "Start drafting after reading 3 of 6 memos") without an enforced stop; v1.6 makes it a hard STOP-and-notify-PM gate at Step 2, before Step 3's omnibus read even begins. Paired with a Friday early-warning mechanism added the same day to methodology-25 (workstream-review-cadence) — that catches a missing memo early in the week; this gate is the backstop if the early warning didn't prevent the gap.
Metrics are a bullet list, never a table (PM, during Ship #050 review): Medium and LinkedIn don't render markdown tables, so template v4.1's Governance metrics-table format is superseded — use **Issues closed:** 25 bullets. Don't force uninteresting metrics (e.g. a publications count) just to fill the list. Process guide's former "metrics table is the exception" line retired in the same pass. Also from the same review: the External section's publication list can be followed by one of the window's cartoon illustrations (image linked to its post, exact alt text from the calendar CSV, caption below with its quotation marks preserved).
Two corrections from live failures the same day v1.3 shipped:
dev/2026/07/08/ship-050-fact-check-2026-07-08.md): the headline error traced to an inference in one agent's log that the omnibus printed as fact ("first external tester actively using it" — the tester had never successfully installed). The omnibus is the fact-check baseline, not ceiling: any claim resting solely on a log assertion with no artifact (commit/issue/URL/test output) and no PM witness gets softened, attributed, or cut before it enters a public draft. Step 4-prime's "session log is the ground truth" holds for what an agent did; it does not make an agent's inference about someone else's experience into ground truth.Step 7: added the standing Comms pre-publish review step (PM clarification, in-conversation: "You generally do draft the weekly ship but Comms reviews it before we publish"). Previously the routing step named only PM's voice-pass; Comms's review had been happening implicitly via the publish pipeline but wasn't a named, mandatory step in this skill. Also relevant context from the same window: Ship #050's window error (see docs/internal/operations/ship-050-window-date-error-2026-07-08.md) — the fix there is upstream in the kickoff procedure (compute window formulaically, assert day-of-week, verify delivery landed), not in this skill; noted here so a future reader doesn't add redundant machinery to this file. Step 6's existing day-of-week sanity check already covers the drafting side.
Reordered procedure: omnibus-logs-read is now Step 3 (BEFORE workstream memos), changed from "spot-check" to "REQUIRED, FULL READ." Workstream memos move to Step 4 with explicit guidance to read them "with omnibus context already in head." Added Step 4-prime: pull underlying session logs when omnibus looks thin or memos reference work the omnibus didn't surface.
Trigger for v1.2: PM caught Ship #043 v0.2's fab + coverage-gap structural issue same day v1.1 shipped. v1.1 added the CSV verification for publications but kept omnibus as "spot-check." That left the door open for me to lean on the methodology-focused workstream memos and miss the entire Engineering shipped arc of the week (#921, #857, #1071, #1021, M2f closure, M2g-A + M2g-B, #1070, #304, #1090) that lived in the omnibus logs and Lead Dev session logs. PM directive: "You are my chief and need to form your own views from reading the logs too!"
Added required Step 4b (Verify External section against editorial calendar CSV) and four new audit-checklist items (External-section sanity check, day-of-week sanity check, role-attribution sanity check, time-since-codification claims). v1.0 had the discipline named ("verify all claims against omnibus logs") but did NOT enforce CSV cross-reference for publications. PM caught the fabrication in Ship #043 v0.2 on May 20 morning during pre-publication review. The skill missed: every publication title, every date, and every URL in the External section was fabricated by pattern-matching to Ship #042's format. v1.1 closes the gap.
Initial skill. Lists canonical artifacts to load before drafting. Names voice-discipline checks. Procedure + audit checklist.
Skill version: 1.6 Created: 2026-05-19 (v1.0) Updated: 2026-05-20 (v1.1 — External-section verification step; v1.2 — omnibus is required full read, not spot-check); 2026-07-08 (v1.3 — Comms pre-publish review is a named mandatory step; v1.4 — PM gates the Comms handoff + evidence-tier discipline; v1.5 — metrics as bullet list, never a table); 2026-07-14 (v1.6 — Step 2b hard gate: all 6 memos required, no partial drafts under deadline pressure) Scope: Exec (drafts); PM (gates); Comms (reviews)