The durable documentation set that makes an AI-built (vibe-coded) app reviewable before shipping. A small core every app needs — architecture, user/permission flows, permissions, variables/secrets, and a test-coverage map — plus conditional docs added only when they apply: emails, scheduled work, SEO, and embedded agents/automation. Defines what each doc must capture and how a reviewer or auditor uses it. Use when documenting a codebase for handoff, mapping user journeys and trust-boundary crossings, planning test coverage, or preparing for a security or performance audit.
79%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./pm-ai-shipping/skills/shipping-artifacts/SKILL.mdAI agents write code fast, but they leave no durable record of intent — what the system is supposed to do, who is allowed to do what, where the secrets live, which rules are actually verified. Without that record, no human (and no auditing agent) can tell whether the code is safe to ship. This skill defines the small set of documents that restore reviewability.
These docs are written for two readers: a human reviewer and the next AI coding agent. They are the intended-state half of every later audit — a security or performance review is only as good as the intent it can compare the code against.
Every location, file name and doc-format convention in this plugin is a default. The host repo's own setup comes first. Before writing anything (a system doc, the coverage map, an audit report), look for that setup:
AGENTS.md, CLAUDE.md, and whatever they import or point to. They often name the docs folder, the files in it, who maintains each one, and how dates are recorded.docs/, documentation/ or similar folder.ARCHITECTURE.md, docs/security.md, docs/env.md). Match on what it covers, not on its file name.docs/test-coverage.md. Match on what it covers: a TESTS.md or testing.md that describes how the repo tests is the testing method, not the coverage map.Then:
documentation/ at the repo root, the file names below, the coverage map at documentation/tests.md, reports at reports/<name>_{timestamp}.md, and no "updated date" line (the file's history is the source of truth).tests.md beside TESTS.md, Architecture.md beside architecture.md. On Windows and macOS they are the same file, so the write overwrites it; elsewhere they become two files that collide on the next checkout. Check case-insensitively before creating a file. If the existing one covers the same thing, use it. If it covers something else (a TESTS.md that is the testing method, not a coverage map), do not write into it: use the repo's real equivalent, and where there is none, pick a name that collides with nothing.Throughout this plugin, a name such as architecture.md or tests.md means that document, wherever and under whatever name the repo keeps it.
The set is not a fixed list — it is a small core plus conditional docs you add only when the capability exists.
architecture.md ("No scheduled work — no cron.md.") rather than inventing an empty document. Reviewability comes from an honest map, and "we don't do X" is part of the map./document-app. The one exception is tests.md, which is derived from the other docs by /derive-tests — it is the verification map, not a description of a subsystem.Be brutally honest about the current state without being paranoid. The job is an accurate map, not a clean bill of health. Each doc is short, table-and-bullet heavy, and skips generic theory.
Each entry: default file name · one-line purpose · what it must capture · how a reviewer uses it.
architecture.md — what the system is and how it hangs together.
flows.md — the journeys where permissions and side effects are actually exercised.
permissions.md matrix can't show — where and in what order authorization is enforced, and where it can be skipped.permissions.md — who is allowed to do what.
flows.md shows it in motion; this is the static reference.variables.md — configuration and secrets, mapped to risk.
tests.md — the verification map: which documented rules are actually checked, which are only proposed, and which are checked by nothing.
main./derive-tests (not /document-app), because it is derived from the other docs and the existing test suite rather than read off a subsystem.emails.md — every notification the system sends. Include only if the app sends transactional or automated email.
cron.md — all scheduled work and how to operate it safely. Include only if scheduled or background jobs exist.
seo.md — how a single-page app handles SEO and social previews. Include only if there are public/indexable or bot-facing routes.
automation.md — embedded agents and other automation paths. Include only if the app embeds AI agents, LLM workflows, tool-calling, webhooks, or external automation.
architecture.md under a "Related Documents" section (or in the index the repo already keeps for its docs), so the set stays discoverable.AGENTS.md or CLAUDE.md, whichever the repo's structure makes canonical) is a different artifact — instructions derived from these docs, not system documentation. It is produced at the handoff step by /ship-check, which follows that structure, not here.tests.md is produced by /derive-tests; the rest are produced by /document-app.phuryn/pm-skills
07b34f6
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.