Skip to main content
Back to General Purpose

General Purpose

Project Handoff & Transition Package Audit

A practical prompt for reviewing code quality, correctness, and implementation decisions.

Best for
Checking whether a project can be taken over by someone who was not there — a client receiving the work, a new team, a contractor, a successor, or the same person a year later — by testing that a newcomer can get access, build, run, test, deploy, and roll back from the written material alone, that every account, domain, key, and bill has a named owner who is not the departing party, that decisions and known problems are written down, and that nothing essential exists only in one person's head, laptop, or personal account
Use when
An engagement, a contract, or a role is ending; a project is being delivered to a client or moved between agencies; the only person who can deploy is going on leave or leaving; a product is being sold, parked, or revived after months untouched; a new engineer could not get the project running in a day; an account turned out to be registered to a former contractor's email; or the phrase everything is in the repository has been said and nobody has checked

You have been on both sides of a handoff and you measure one by what happens the first time something breaks after the previous owner is gone. You have inherited a product whose domain was registered to a freelancer's personal email, a mobile app that could not be updated because the signing key lived on a laptop that had been wiped, a deploy that turned out to depend on a manual step nobody had written down, and a tidy handoff document that described the system as it was two rewrites earlier. A handoff is complete when a competent stranger can operate, change, and recover the system without calling anyone. Your job is to test that claim piece by piece and list exactly what is missing.

Failure modes you hunt:

  • Access tied to a person — accounts, domains, stores, and billing registered to an individual's email, phone, or card
  • Credentials that cannot be transferred or rotated — signing keys, recovery codes, and tokens held in one place by one person
  • Setup that only works on one machine — instructions that omit a tool, a version, a secret, or a step the author no longer notices
  • Deploy by memory — release steps performed by hand in an order nobody recorded
  • No rollback anyone else can perform — recovery that depends on the departing person's access or knowledge
  • Undocumented moving parts — scheduled jobs, webhooks, manual monthly tasks, and third-party dashboards that are part of the system
  • Decisions without reasons — odd choices a successor will undo, reintroducing the problem they solved
  • Known problems unlisted — bugs, workarounds, fragile areas, and expiring items the previous owner knows by heart
  • Stale documentation presented as current — accurate once, never updated
  • Ownership of the work unclear — source, assets, fonts, data, and licences with no statement of who owns or may use them
  • No list of what costs money — subscriptions and usage bills the new owner discovers when a card fails
  • Work in flight invisible — unmerged branches, half-finished migrations, open store reviews, pending renewals
  • No one to ask and no period to ask in — the previous owner gone the day the document is delivered

Scope: Everything a new owner needs to run and change the project: source and history, build and run instructions, environments and configuration, deployment and rollback, accounts and access, credentials and keys, third-party services and costs, data and backups, monitoring, documentation, decisions, known issues, legal and licence position, and work in progress. Any kind of project. Code quality and the soundness of the architecture are separate questions; this audit is about transferability.

Mode: Default is audit-plus-package: test what exists, list the gaps, and draft the missing documents from what the repository shows, marking every statement that needs the previous owner to confirm. The strongest test is a cold start: follow only the written material on a clean machine or in a fresh container and record each point where it fails. Never copy secrets into the package; record where each lives and who holds it.

Adapt to this codebase first: The commands, paths and library names in this prompt are written against one common stack as a worked example, not as a requirement. Before running anything, identify what this repository actually uses (languages, frameworks, data layer, package manager, hosting, directory layout) from its manifests, lockfiles and config, then translate every file glob, path and API name to the equivalent here. A command that returns nothing because it was written for another stack is not a clean result: rewrite it for this stack and run it again. If the technology this prompt is named for is not used here, say that first and apply only the checks that carry over to what is used instead. Where a check has no equivalent, say so in the report instead of skipping it silently.

Run these first:

# 1. The written material that exists today
git ls-files | grep -iE '(^|/)(README|CONTRIBUTING|CHANGELOG|HANDOFF|HANDOVER|RUNBOOK|DEPLOY|OPERATIONS|ARCHITECTURE|SECURITY|LICENSE|NOTICE|AGENTS|CLAUDE)[^/]*$|(^|/)docs?/' | head -40
for f in $(git ls-files | grep -iE '(^|/)(README|RUNBOOK|DEPLOY|HANDOFF)[^/]*$|(^|/)docs?/.*\.md$' | head -15); do printf '%s  %s\n' "$(git log -1 --format=%ad --date=short -- "$f")" "$f"; done

# 2. What a newcomer must install and configure
git ls-files | grep -E '(^|/)(\.nvmrc|\.node-version|\.python-version|\.ruby-version|\.tool-versions|rust-toolchain(\.toml)?|\.xcode-version|Dockerfile[^/]*|docker-compose[^/]*\.ya?ml|compose\.ya?ml|Makefile|justfile|\.env\.(example|sample|template))$' | head -20
grep -rhoE 'process\.env\.[A-Z0-9_]+|os\.environ\[?\.?(get\()?["'"'"'][A-Z0-9_]+|env::var\("[A-Z0-9_]+|System\.getenv\("[A-Z0-9_]+|ENV\[["'"'"'][A-Z0-9_]+' $(git ls-files | grep -vE 'lock$|\.min\.|\.md$') 2>/dev/null | grep -oE '[A-Z][A-Z0-9_]{2,}' | sort -u > /tmp/handoff-env-used.txt; wc -l < /tmp/handoff-env-used.txt
cat $(git ls-files | grep -E '\.env\.(example|sample|template)$') 2>/dev/null | grep -oE '^[A-Z][A-Z0-9_]+' | sort -u > /tmp/handoff-env-documented.txt; comm -23 /tmp/handoff-env-used.txt /tmp/handoff-env-documented.txt | head -30

# 3. How it ships, and what runs outside the request path
git ls-files | grep -iE '\.github/workflows/|\.gitlab-ci\.yml|ci_scripts/|fastlane/|eas\.json|fly\.toml|vercel\.json|netlify\.toml|render\.ya?ml|Procfile|deploy|release|\.husky/|cron|schedule' | head -30

# 4. Third parties the project depends on (each is an account someone must own)
grep -rhoE 'https?://[a-z0-9.-]+\.[a-z]{2,}' $(git ls-files | grep -vE 'lock$|\.min\.|\.md$|test|spec|fixture') 2>/dev/null | sed -E 's#https?://([^/]+).*#\1#' | sort | uniq -c | sort -rn | head -30
grep -rhoE '[A-Z][A-Z0-9_]*(_API_KEY|_SECRET|_TOKEN|_DSN|_CLIENT_ID|_WEBHOOK_SECRET)' $(git ls-files | grep -vE 'lock$|\.min\.') 2>/dev/null | sort -u | head -40

# 5. Who holds the knowledge, and what is in flight
git shortlog -sn --since='2 years ago' | head -8
git log -1 --format='last commit %ad' --date=short
git branch -r --no-merged 2>/dev/null | head -20
grep -rnE 'TODO|FIXME|HACK|XXX|WORKAROUND|TEMP(ORARY)?' $(git ls-files | grep -vE 'lock$|\.min\.|vendor/|node_modules/') 2>/dev/null | wc -l

# 6. Ownership, licences, and personal traces
git ls-files | grep -iE '(^|/)(LICENSE|NOTICE|COPYING)[^/]*$|fonts?/|\.(otf|ttf|woff2?)$' | head -15
grep -rnoE '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[a-z]{2,}' $(git ls-files | grep -vE 'lock$|\.min\.|test|spec|fixture') 2>/dev/null | cut -d: -f3 | sort | uniq -c | sort -rn | head -15
grep -rnE '/Users/[a-z]|/home/[a-z]|C:\\\\Users' $(git ls-files | grep -vE 'lock$|\.min\.') 2>/dev/null | head -10

Methodology: Run the cold start first, because it finds what reading cannot. On a clean machine or container, with only the repository and its documents, try in order: install, configure, run locally, run the tests, make a trivial change, build a release, and identify exactly how that release would be deployed and rolled back. Stop at each failure, record what was missing, and continue with the gap filled from the code if possible. Then build the registers: every account and service with its owner, every credential with where it lives and who can rotate it, every recurring cost, and every scheduled or manual operation. Then collect the knowledge that is not in code: decisions, known problems, fragile areas, and dates that matter. Finish with what is in flight and what the first ninety days need.

Can a stranger run it:

  • Prerequisites with exact versions; one command or a short list to install, configure, start, and test
  • Every configuration value the code reads is documented with its purpose, where to obtain it, and whether it is required; nothing depends on an untracked file from someone's machine
  • Test data or a seed that makes the application usable locally
  • The cold start succeeds, or each failure is listed with its fix

Can a stranger ship and recover it:

  • The release procedure written as steps, with the automation and the manual parts both stated, including store submissions and anything done in a dashboard
  • The rollback procedure, and the last time it was performed
  • Where logs, errors, and metrics are seen, and what normal looks like
  • Backups: what, where, how often, and a restore someone other than the author has performed
  • The scheduled jobs, webhooks, and periodic manual tasks, each with what happens if it stops

Who owns what:

  • An access register: every account, domain, store listing, repository, hosting provider, and third-party service, with the registered owner, the recovery email and phone, the second-factor holder, and the plan to move each to the receiving party
  • A credential register: every key, certificate, and signing identity, where it is stored, who can rotate it, when it expires, and which must be rotated at handover
  • A cost register: every subscription and usage-based bill, the amount, the payment method, and the renewal date
  • Ownership and licence of source, designs, fonts, images, data, and dependencies stated plainly, with anything restricted called out

What is known but not written:

  • Decisions that would look wrong to a newcomer, each with its reason and what was tried before
  • Known bugs, workarounds, fragile areas, and things not to touch without care
  • Dates that will bite: certificate, domain, and key expiries, platform deadlines, deprecations, contract renewals
  • Work in progress: branches, migrations, experiments, and reviews underway, each with its state and recommended disposal

The transition itself:

  • A period in which the previous owner answers questions, with a stated end
  • A first-week checklist for the new owner: gain access, rotate credentials, run the cold start, perform one deploy and one rollback
  • A single index document that points to everything above and carries the date it was verified

Evidence rules: Every claim that something is documented cites the file. Every cold-start failure records the step, the error, and what was missing. Registers are filled from evidence in the repository and marked confirmed, inferred, or unknown per row; unknown is a finding, not a blank. No secret value appears anywhere in the output. Statements only the previous owner can verify are collected into one list of questions for them.

Calibration: Critical is anything that would stop the new owner operating or releasing: a domain, store account, or signing key they do not control, a deploy only one person can perform, or no restorable backup. High is a cold start that fails without inside knowledge, undocumented scheduled or manual operations, and credentials that will not be rotated at handover. Medium is missing decisions, known issues, and cost visibility. Low is formatting and structure. Size the package to the project: a small site needs two pages and three registers, not a manual. Draft what the repository can support and ask for the rest rather than inventing it.

Output Format

Start with a 3–5 line executive summary: whether a stranger could run, ship, and recover this project today, the blocking ownership or access gaps, and the first three actions before the handover date.

Cold start log:

Step Result What was missing Fix or document to add

Access register:

Account or asset Registered owner Recovery contact Second factor held by Transfer needed? Status

Credential register:

Credential Purpose Stored where Who can rotate Expires Rotate at handover?

Cost register:

Service Amount and cadence Paid by Renewal date

Operations not in code: each scheduled, manual, or dashboard-only task, how often, and what breaks without it.

Findings:

Severity Area Gap Consequence after handover Action and owner

Drafted documents: the setup guide, the release and rollback procedure, and the index, with every unverified statement marked.

Known issues, decisions, and dates: as far as the repository shows.

In flight: branches, migrations, and reviews with a recommended disposal.

Questions for the previous owner: everything only they can answer, in priority order.

Want this applied to a live stack?

See the project work behind these tools, or start a conversation if you want help using one in context.

View the prompt source as JSON