18 KiB
Ship Workflow — $autoresearch ship
Universal shipping workflow that applies autoresearch loop principles to the last mile — taking anything from "done" to "deployed/published/delivered." Works for code, content, marketing, sales, research, design, or any artifact that needs to reach its audience.
Core idea: Shipping has a universal pattern regardless of domain. Identify → Checklist → Prepare → Dry-run → Ship → Verify → Log.
Trigger
- User invokes
$autoresearch ship - User says "ship it", "deploy this", "publish this", "launch this", "release this"
- User says "get this out the door", "push to prod", "send this out", "go live"
Loop Support
Works with bounded mode for iterative pre-ship preparation:
# Ship with automatic preparation loop
$autoresearch ship
# Bounded preparation — iterate N times before shipping
$autoresearch ship
Iterations: 10
# Ship specific artifact
$autoresearch ship
Target: src/features/auth/**
Destination: production
PREREQUISITE: Interactive Setup (when invoked without flags)
CRITICAL — BLOCKING PREREQUISITE: If $autoresearch ship is invoked without --type or target, you MUST scan for staged changes, open PRs, and recent commits, then use direct prompting to gather user input BEFORE proceeding to ANY phase. DO NOT skip this step.
Single batched call — all 3 questions at once:
You MUST call direct prompting with all 3 questions in ONE call:
| # | Header | Question | Options (from context scan) |
|---|---|---|---|
| 1 | What |
"What are you shipping?" | "Code PR", "Release / version tag", "Deployment to production", "Blog post / documentation" |
| 2 | Mode |
"How should I ship it?" | "Full workflow (checklist → dry-run → ship → verify)", "Dry-run only (validate without shipping)", "Checklist only (just check readiness)", "Auto-approve (ship if checklist passes)" |
| 3 | Monitor |
"Post-ship monitoring?" | "No monitoring", "5 minutes", "10 minutes", "30 minutes" |
IMPORTANT: Always ask all questions in a single call — never one at a time.
If --type, --dry-run, --auto, or --checklist-only flags are provided, skip interactive setup and proceed directly.
Architecture
$autoresearch ship
├── Phase 1: Identify (what are we shipping?)
├── Phase 2: Inventory (what's the current state?)
├── Phase 3: Checklist (domain-specific pre-ship gates)
├── Phase 4: Prepare (autoresearch loop until checklist passes)
├── Phase 5: Dry-run (simulate the ship action)
├── Phase 6: Ship (execute the actual delivery)
├── Phase 7: Verify (post-ship health check)
└── Phase 8: Log (record the shipment)
Phase 1: Identify — What Are We Shipping?
Auto-detect the shipment type from context, or ask the user.
Detection algorithm:
FUNCTION detectShipmentType(context):
# Check explicit user input first
IF user specifies type → USE IT
# Auto-detect from context
IF git diff has staged changes OR user mentions "deploy/release/merge":
IF has Dockerfile/k8s/deploy configs → "deployment"
IF has open PR or branch changes → "code-pr"
ELSE → "code-release"
IF context mentions "blog/article/post" OR target files are *.md in content/:
→ "content"
IF context mentions "email/campaign/newsletter":
→ "marketing-email"
IF context mentions "landing page/ad/social":
→ "marketing-campaign"
IF context mentions "deck/proposal/pitch/quote":
→ "sales"
IF context mentions "paper/report/analysis/findings":
→ "research"
IF context mentions "assets/mockup/design/figma":
→ "design"
# Default: ask user
→ ASK "What are you shipping? (code/content/marketing/sales/research/design/other)"
Output: ✓ Phase 1: Identified shipment — [type]: [brief description]
Phase 2: Inventory — Current State Assessment
Scan the artifact and its environment to understand readiness.
For each shipment type, gather:
| Type | Inventory Checks |
|---|---|
| code-pr | Changed files, test status, lint status, PR description, review status |
| code-release | Version tag, changelog, migration status, dependency audit |
| deployment | Build status, env vars, infra health, rollback plan |
| content | Word count, links checked, images present, metadata/frontmatter |
| marketing-email | Subject line, preview text, links, unsubscribe, CAN-SPAM compliance |
| marketing-campaign | Assets ready, tracking pixels, UTM params, A/B variants |
| sales | Pricing current, branding consistent, contact info, CTA clear |
| research | Citations complete, methodology documented, data sources linked |
| design | Formats exported, responsive variants, accessibility checked |
Output: ✓ Phase 2: Inventory complete — [N] items assessed, [M] gaps found
Phase 3: Checklist — Domain-Specific Pre-Ship Gates
Generate a mechanical checklist based on shipment type. Every item must be verifiable (pass/fail).
Code Checklists
code-pr:
- All tests pass (
npm test/pytest/ language-specific) - Lint clean (no errors, warnings acceptable)
- Type check passes (if applicable)
- PR description explains the "why"
- No secrets in diff (
git diff --cached | grep -i "password\|secret\|api_key") - No TODO/FIXME in new code (or documented as intentional)
- Breaking changes documented (if any)
- Reviewer assigned or review complete
code-release:
- All code-pr checks pass
- Version bumped in package.json/pyproject.toml/Cargo.toml
- CHANGELOG updated with release notes
- Migration scripts tested (if DB changes)
- Dependency audit clean (
npm audit/pip audit) - Tag created matching version
deployment:
- All code-release checks pass
- Build succeeds in CI
- Environment variables set for target env
- Health check endpoint responds
- Rollback plan documented
- Monitoring/alerting configured
- Feature flags set correctly
Content Checklists
content (blog/docs):
- Title present and descriptive
- No broken links (internal or external)
- Images have alt text
- Meta description present (≤160 chars)
- No placeholder text ("Lorem ipsum", "TODO", "TBD")
- Grammar/spell check passes
- Publish date set
- Author attribution present
Marketing Checklists
marketing-email:
- Subject line present (≤60 chars recommended)
- Preview text set
- All links working and tracked (UTM parameters)
- Unsubscribe link present and functional
- Physical address included (CAN-SPAM)
- Responsive on mobile (test render)
- Plain text fallback exists
- Sender name and reply-to configured
marketing-campaign:
- All creative assets finalized
- Tracking pixels/UTM parameters configured
- Target audience defined and segmented
- Budget allocated and approved
- Landing page live and tested
- A/B test variants set (if applicable)
- Schedule confirmed
Sales Checklists
sales (deck/proposal):
- Company/prospect name correct throughout
- Pricing is current and approved
- Contact information accurate
- Branding consistent (logos, colors, fonts)
- No competitor names misspelled
- CTA is clear and actionable
- Attached case studies/testimonials current
- File format appropriate (PDF for external, editable for internal)
Research Checklists
research (paper/report):
- Abstract/executive summary present
- All citations properly formatted
- Data sources linked and accessible
- Methodology section complete
- Figures/charts labeled and referenced
- Conclusion addresses stated hypothesis
- Acknowledgments included
- No placeholder references ("[citation needed]")
Design Checklists
design (assets/mockups):
- All requested formats exported (PNG, SVG, PDF)
- Responsive variants provided (mobile, tablet, desktop)
- Color contrast meets WCAG AA (4.5:1 for text)
- No placeholder images or text
- Source files organized and named
- Brand guidelines followed
- Handoff notes/specs documented
Output: ✓ Phase 3: Checklist generated — [N] items, [P] passing, [F] failing
Phase 4: Prepare — Iterative Improvement Loop
Apply the autoresearch loop to fix failing checklist items.
metric = count_passing_checklist_items / total_checklist_items * 100
direction = higher_is_better
target = 100 (all items pass)
LOOP (until all pass OR max iterations):
1. Read checklist status
2. Pick highest-priority failing item
3. Fix it (one atomic change)
4. Re-run checklist verification
5. IF item now passes → keep, log "fixed: [item]"
6. IF item still fails → revert, try different approach
7. IF all items pass → EXIT LOOP with "ready to ship"
Priority order for fixes:
- Blockers — security issues, broken builds, missing critical content
- Required — tests, lint, links, compliance items
- Recommended — descriptions, documentation, polish
Auto-fix capabilities:
- Run test suites and fix failures
- Fix lint errors automatically
- Add missing meta descriptions
- Generate changelog entries from git log
- Check and fix broken links
- Add alt text to images (describe or prompt user)
- Format citations
- Export missing design formats
Items that require human input:
- Pricing approval
- Legal review sign-off
- Brand approval
- Strategic decisions (A/B test variants)
- → Flag these and ask user, don't block on them
Output: ✓ Phase 4: Preparation complete — [N/N] checklist items passing
Phase 5: Dry-Run — Simulate Before Shipping
Execute a simulation of the ship action without side effects.
| Type | Dry-Run Action |
|---|---|
| code-pr | gh pr create --draft or preview PR diff |
| code-release | Create tag locally (don't push), preview changelog |
| deployment | Build Docker image, run health checks locally |
| content | Preview render, check all links resolve |
| marketing-email | Send test email to sender's own address |
| marketing-campaign | Preview in ad platform, estimate reach |
| sales | Preview PDF render, check all pages |
| research | Export to final format, check pagination |
| design | Preview all exported formats, check dimensions |
Dry-run gate:
- Present dry-run results to user
--autoflag: auto-approve if no errors- Default: ask user "Ready to ship?" before proceeding
--dry-runflag: stop here, don't actually ship
Output: ✓ Phase 5: Dry-run complete — [result summary]
Phase 6: Ship — Execute the Delivery
The actual ship action. Domain-specific.
| Type | Ship Action |
|---|---|
| code-pr | gh pr create with full description, request reviewers |
| code-release | git tag, git push --tags, create GitHub release |
| deployment | git push to deploy branch, trigger CI/CD, or kubectl apply |
| content | Publish via CMS API, or commit to content branch |
| marketing-email | Send via ESP API (SendGrid, Mailchimp, etc.) |
| marketing-campaign | Activate campaign in ad platform |
| sales | Send email with attachment, or share link |
| research | Upload to repository, submit to journal/platform |
| design | Upload to asset library, share with stakeholders |
Safety rails:
- Confirm target (staging vs production, draft vs publish)
- Log the exact command/action taken
- Record timestamp
- Capture any response/confirmation IDs
Output: ✓ Phase 6: Shipped — [action taken] at [timestamp]
Phase 7: Verify — Post-Ship Health Check
Confirm the shipment actually landed and is healthy.
| Type | Verification |
|---|---|
| code-pr | PR created, CI running, link accessible |
| code-release | Tag visible, release page published, assets attached |
| deployment | Health endpoint returns 200, no error spike in logs |
| content | Page loads, links work, appears in sitemap |
| marketing-email | Delivery rate > 95%, no bounce spike |
| marketing-campaign | Ads serving, landing page loading, tracking firing |
| sales | Email delivered, link tracking active |
| research | Accessible via URL/DOI, properly indexed |
| design | Assets downloadable, correct dimensions |
Post-ship monitoring (with --monitor N flag):
FOR N minutes:
Check health metrics every 60 seconds
IF anomaly detected → ALERT user immediately
Log metrics to ship-log
Output: ✓ Phase 7: Verified — [health status summary]
Phase 8: Log — Record the Shipment
Create a ship log entry for traceability.
Log format (append to ship-log.tsv):
timestamp type target checklist_score dry_run shipped verified duration notes
2026-03-16T14:30:00Z code-pr #42 18/18 pass pass pass 4m32s auth feature PR
Summary output:
=== Ship Complete ===
Type: [shipment type]
Target: [where it went]
Checklist: [P/T] items passed
Duration: [total time]
Status: SHIPPED ✓
Flags
| Flag | Purpose |
|---|---|
--dry-run |
Run all phases except actual ship (stop at Phase 5) |
--auto |
Auto-approve dry-run gate if no errors found |
--force |
Skip non-critical checklist items (still enforce blockers) |
--rollback |
Undo the last ship action (if reversible) |
--monitor N |
Post-ship monitoring for N minutes |
--type <type> |
Override auto-detection with explicit shipment type |
--checklist-only |
Only generate and evaluate checklist (stop at Phase 3) |
--chain <targets> |
Chain to downstream tool(s) after completion. Comma-separated for multi-chain. Spaces after commas tolerated. |
Composite Metric
For bounded loop mode, the ship readiness metric:
ship_score = (checklist_passing / checklist_total) * 80
+ (dry_run_passed ? 15 : 0)
+ (no_blockers ? 5 : 0)
- 100 = fully ready to ship
- 80-99 = ready with minor items (can ship with
--force) - <80 = not ready, continue preparing
Rollback Protocol
If --rollback is specified or post-ship verification fails:
| Type | Rollback Action |
|---|---|
| code-pr | Close PR: gh pr close |
| code-release | Delete tag: git tag -d + git push --delete origin |
| deployment | Revert deploy: git revert or kubectl rollback |
| content | Unpublish/revert to draft |
| marketing-email | Cannot rollback (flag as "sent") |
| marketing-campaign | Pause campaign in ad platform |
| sales | Send correction/follow-up |
| research | Request retraction or update |
| design | Revert to previous version in asset library |
Non-reversible actions (email, some publications) are flagged before Phase 6 ship action.
Chain Conversion
When --chain is specified, ship passes results forward after Phase 8 completes. Output includes: ship results, deployment status, monitoring data.
--chain learn
Document what was shipped for codebase learning — update docs to reflect the new deployed state.
$autoresearch learn
Mode: update
Context: Post-ship state from {shipment_type} — {target} shipped at {timestamp}
Scope: {files changed in this ship}
--chain security
Post-ship security verification — audit the newly deployed code or content.
$autoresearch security
Scope: {files/artifacts shipped}
Focus: Post-ship verification — confirm no regressions introduced during {shipment_type} delivery
--chain debug
Post-ship monitoring revealed issues — investigate immediately.
$autoresearch debug
Scope: {files shipped}
Symptom: Post-ship anomaly detected — {health check failure or monitoring alert}
Context: Shipped {shipment_type} at {timestamp}, verify phase result: {verify_result}
--chain scenario
Post-ship edge case exploration — probe the deployed artifact under unusual conditions.
$autoresearch scenario
Scenario: {shipment description} just deployed — explore edge cases and failure modes
Domain: {inferred from shipment_type}
Depth: standard
--chain predict
Predict post-ship impact using swarm analysis on the newly shipped artifact.
$autoresearch predict
Scope: {files shipped}
Goal: Post-ship impact prediction — what issues might emerge after {shipment_type} delivery
Depth: standard
--chain fix
Post-ship issues need fixing — route findings directly to the fix workflow.
$autoresearch fix
Target: {post-ship issue description}
Scope: {files shipped}
Context: Regression introduced during {shipment_type} delivery at {timestamp}
--chain plan
Plan next iteration based on ship results and post-ship observations.
$autoresearch plan
Goal: Next iteration planning after {shipment_type} delivery — {checklist_score} readiness score achieved
Context: Ship log: {summary of this shipment}
--chain reason
Reason about post-ship observations — adversarial refinement of next steps.
$autoresearch reason
Task: Post-ship review — {shipment_type} delivered, observations: {verify_result}
Domain: {inferred from shipment_type}
--chain probe
Interrogate post-ship requirements for next cycle — surface hidden constraints before the next iteration.
$autoresearch probe
Topic: Requirements for next iteration after shipping {target}
Context: Ship results: {checklist_score}, verify: {verify_result}
Multi-Chain Execution
--chain scenario,debug,fix executes sequentially:
- Write
summary.mdafter Phase 8 completes - Launch first chain target with ship results as context
- Each stage's output feeds the next via handoff
- All targets receive: shipment type, checklist score, dry-run result, verify status
Empirical evidence rule: Downstream loop results ALWAYS override upstream findings. If a debug or fix loop disproves a post-ship assumption, log: Ship observation [X] REVISED by empirical [tool] loop — [evidence]. Do NOT revert to pre-loop assumptions.
Output Directory
Creates ship/{YYMMDD}-{HHMM}-{ship-slug}/ with:
checklist.md— full checklist with pass/fail statusship-log.tsv— iteration log (if preparation loop ran)summary.md— final ship report