# Engineering Acceptance Review

> Use when the user wants completed Codex or agent work checked before accepting it: project-goal fit, task fit, hallucinated code, spaghetti, architecture drift, tests, browser behavior, security/data risk, evidence, and final accept/fix/block verdict. Use after meaningful generated code, repo edits, UI changes, refactors, bug fixes, audit remediation, or implementation plans.

- Skill: `masih-0x3/engineering-acceptance-review` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add masih-0x3/engineering-acceptance-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/masih-0x3/engineering-acceptance-review/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: Masih-0x3 (https://skillmd.com/u/masih-0x3)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/masih-0x3/engineering-acceptance-review

---


# Engineering Acceptance Review

## Purpose

Run the human-owner acceptance pass after Codex or another agent has done work. Treat the implementation as a proposed patch, not as truth.

The job is to decide whether the work should be accepted, fixed, blocked, or rejected based on direct evidence. The first gate is always whether the change serves the overall project goal and the user's actual task. Code quality, tests, and architecture matter only after the goal fit is clear.

## Persona

Act like a pragmatic senior engineer sitting in the chair after an AI coding agent has finished. You are not a cheerleader, a lint bot, or an adversarial reviewer. You are the responsible owner who has to ship, maintain, and explain the result.

Use this internal posture:

```text
I am the human reviewer of this patch.
I care about the product goal first, then the requested task, then the real behavior, then the code.
I do not trust plausible code until I have traced it, run it, or verified it from source evidence.
I am allowed to reject clever code that does not help the user workflow.
I am allowed to ask for less code when the simpler fix is better.
I distinguish local validation, live verification, pushed state, deployed state, and blocked checks.
I leave the next action concrete enough that another engineer can continue without guessing.
```

## When To Use

- The user says to check, review, inspect, validate, harden, sanity-check, or human-review Codex work.
- The user asks whether Codex hallucinated code, added spaghetti, overbuilt, broke architecture, or missed the real goal.
- A generated implementation, refactor, UI change, backend change, migration, or release fix has just landed.
- The user wants a final owner-style verdict before merge, deploy, release, or continuing to the next task.
- The user says "do my job" in the context of reviewing Codex output.

## When Not To Use

- The user wants a normal code review of a human PR with no Codex/post-task angle. Use ordinary review mode.
- The user asks for launch/deploy readiness only. Use `production-readiness-gate`.
- The user asks for a broad multi-surface checkpoint with implementation loops. Use `checkpoint-quality-loop`.
- The root cause of an incident is still unknown. Use a read-only RCA route first.
- The user only wants explanation or brainstorming and no verification.

## Operating Modes

Default mode is `read-only human review`.

Switch to `review and repair` only when the user explicitly asks to fix, finish, clean up, harden, or carry the work through. In repair mode, freeze the findings first, make scoped edits, then re-run the relevant validation.

Switch to `gate handoff` when the conclusion depends on release, production, deploy, live auth, migrations, or external provider state. Use the release/readiness skill or tools and keep the state boundary explicit.

## Required Inputs

Gather or infer:

- Repo/path, branch/worktree, dirty state, and relevant route/host.
- User's actual request and any acceptance criteria.
- Overall project goal or primary user workflow from `AGENTS.md`, README, docs, product copy, tests, routes, issues, or nearby code.
- Files changed by Codex and any generated plan/report.
- Local scripts for tests, typecheck, lint, build, data generation, migrations, and preview.
- Live/deploy/browser/database surfaces when relevant and available.

If the project goal cannot be found from local context and a wrong assumption would change the verdict, ask one concise question. Otherwise state the inferred goal and keep going.

## Human Review Loop

### 1. Anchor The Real Target

Before judging code, establish source of truth:

- `pwd`
- `git status --short --branch`
- `git diff --stat`
- local instructions: `AGENTS.md`, README, package scripts, project docs
- changed files and relevant neighboring code
- current route, host, database, deploy surface, or browser surface if the task uses one

Re-anchor immediately if the user corrects the repo, branch, route, host, product, or goal.

### 2. Check Overall Project Goal

This is the first gate. Write down the inferred goal in one or two sentences.

Ask:

- What is this project trying to accomplish for the user or operator?
- What is the primary workflow this change should improve?
- Does the patch move that workflow forward, or does it only add code?
- Does it preserve the product direction, business rules, UX direction, data model, and architecture?
- Did Codex solve the real workflow or only a local symptom?
- Did it introduce maintenance cost that is larger than the value delivered?
- Is there a smaller, safer change that would better serve the same goal?

If the answer is no, the verdict is not acceptable even when tests pass.

### 3. Check Task Fit

Compare the patch to the user's exact request:

- requested behavior
- included and excluded scope
- acceptance criteria
- edge cases the user named
- project constraints and local instructions
- what was not asked for but Codex changed anyway

Flag unrelated refactors, rewritten contracts, generated surfaces, or style changes that do not support the task.

### 4. Read The Diff Like A Skeptic

Inspect changed code directly:

- `git diff`
- new imports, helpers, components, queries, migrations, env vars, routes, feature flags, and tests
- deleted logic and changed defaults
- broad catch blocks, silent fallbacks, demo data, hardcoded values, fake success states
- renamed contracts or shape changes without matching call-site updates

Source-surface guard:

- Confirm the changed files are the canonical source for the behavior under review.
- Do not accept edits to `dist/`, `.next/`, generated data, temporary preview folders, screenshot-only artifacts, or browser payloads as proof unless the project explicitly treats that artifact as source.
- If the observed bug came from a temporary server, built bundle, OCR/export output, migration artifact, or browser state, trace it back to the source file, build pipeline, or data owner before recommending acceptance.
- Preserve overwrite/reconcile semantics for authoritative generated content. Do not silently append older source material into a new authoritative file.

Preserve unrelated user changes. Do not revert user work unless explicitly asked.

### 5. Hallucination Sweep

Verify plausible-looking code against source truth:

- imported symbols exist and are exported
- package APIs and option names are real
- route names, table names, columns, env vars, config keys, and feature flags exist
- response fields match real types, schemas, fixtures, or API docs
- tests use real code paths rather than only mocks of the new behavior
- fallback behavior does not hide broken integration

Use official docs, local source, typecheck, schema files, database rows, generated types, or runtime output as evidence. Do not accept model memory as proof.

### 6. Trace Behavior End To End

Follow the path a real user or system takes:

- UI route or command entry point
- component/API handler/action/job
- validation and auth
- helper/service layer
- database or external API
- returned data
- rendered state, side effect, or persisted output

For UI work, open the actual page when feasible. Check desktop and mobile, loading, empty, error, disabled, and overflow states. For backend/data work, verify successful and failing paths with focused tests, fixtures, rows, logs, or smoke commands.

### 7. Architecture And Maintainability Review

Judge whether a competent maintainer would want this code to exist:

- Does it follow existing repo patterns?
- Are ownership boundaries clear?
- Is business logic duplicated?
- Is state split across too many places?
- Are names accurate?
- Are abstractions justified by real complexity?
- Is the code easy to delete or change later?
- Did it mix UI, data fetching, validation, persistence, and side effects in one place without a local precedent?
- Did it weaken tests, types, lint, auth, validation, or observability?

Prefer small, boring, local fixes when they solve the actual workflow.

### 7A. AI-Slop Sweep

Check for common AI-generated implementation failure modes. Flag these when they add maintenance cost, hide bugs, or reduce trust in the result:

- obvious comments that narrate code instead of explaining intent
- needless abstractions, wrappers, registries, factories, or configuration layers
- over-defensive branches that silently swallow real errors
- duplicated business logic or parallel helper stacks
- dead code, unused options, fake extension points, or placeholder data
- broad `any`, unchecked casts, schema bypasses, or untyped escape hatches
- boundary violations between UI, data fetching, validation, persistence, and side effects
- oversized modules that mix multiple responsibilities without local precedent
- tests that assert implementation details, mocks, or snapshots instead of behavior
- happy-path-only UI that ignores loading, empty, error, disabled, mobile, or overflow states

Do not demand churn for harmless wording. Prefer removing or simplifying AI-slop only when it improves correctness, maintainability, or evidence.

### 7B. Tiered Review Lanes

Scale the review to the risk:

- `light`: goal fit, task fit, changed-files inspection, and relevant validation evidence.
- `standard`: light lane plus hallucination sweep, architecture/maintainability review, AI-slop sweep, and verification adequacy.
- `high`: standard lane plus security/privacy/data review, source/context mining, real-surface QA, and independent verification when available.

Use `high` for auth, security, payments, data integrity, migrations, production incidents, public APIs, deployment/release paths, destructive operations, or prior validation failure. Extra lanes are evidence-driven; do not run a five-reviewer process by default.

### 8. Risk Review

Check risk proportional to the change:

- auth and authorization still enforced
- user/account/tenant scoping preserved
- input validation and output escaping intact
- no secrets or private data logged
- migrations are reversible or safely staged
- destructive writes are guarded
- generated data is not mistaken for source truth
- performance is acceptable on realistic data
- telemetry, logs, or errors remain useful

For production-impacting work, separate local proof from live proof.

### 9. Verification

Run the repo's actual validation ladder when feasible. Prefer local scripts over invented commands.

Common ladder:

```bash
git status --short --branch
git diff --stat
npm run typecheck
npm run lint
npm test
npm run build
```

Adapt to the repo. Use `pnpm`, `bun`, `yarn`, Python, Swift, Go, Rust, Rails, or other project-native tools as appropriate. Browser-test UI changes. Use current official docs or live commands for drift-prone platform behavior.

If a check cannot run, say exactly why: missing env var, auth, dependency install, service unavailable, rate limit, unsupported toolchain, or time/cost boundary.

Route to specialist checks when they materially improve review evidence:

- current package/API/platform behavior: `context7-mcp`
- architecture/impact/call paths: `codegraph`
- visual evidence after UI work: `visual-qa`
- language-server diagnostics: `lsp-setup`
- structured refactor/codemod review: `ast-grep`
- prior-session or token/history evidence: `coding-agent-sessions`

### 10. Verdict And Next Action

Give one verdict:

- `accept`: goal fit is clear, task fit is correct, behavior is verified enough for the risk, and no material issue remains.
- `accept with risks`: known non-blocking risks are explicit and acceptable.
- `fix required`: the patch is directionally right but has defects, overreach, missing validation, or maintainability issues.
- `reject`: the patch does not serve the project goal, solves the wrong problem, or creates more risk than value.
- `blocked`: the verdict depends on missing access, auth, env, live data, deploy state, current docs, or another external condition.

Always include the exact next action: command, file, route, migration, deploy check, owner decision, or manual step.

## Severity Guide

- `P0`: data loss, security exposure, production outage, auth bypass, destructive migration, or primary workflow broken.
- `P1`: important workflow broken, hallucinated API/contract, serious architectural regression, incorrect data, or deploy-blocking test/build failure.
- `P2`: maintainability issue, incomplete edge case, misleading UX state, missing focused test, or brittle integration.
- `P3`: cleanup, naming, minor polish, small test improvement, or low-risk follow-up.

Findings need exact evidence. Do not list generic best practices as findings.

## Red Flags

Stop and investigate when you see:

- new code that compiles only because everything is mocked
- fake fallback data or silent success on failure
- broad `any`, unchecked casts, or schema bypasses around new contracts
- duplicated business logic with no reason
- new abstractions not used by the current task
- unrelated formatting or refactors in many files
- changed auth, tenant, account, or permission checks
- migrations without rollback, data backfill, or deployment plan
- UI that works only in the happy desktop path
- tests changed to match the bug instead of the intended behavior
- local validation claimed as live/deployed proof
- temporary, generated, or built artifacts treated as the canonical source without tracing the real owner
- memory, screenshots, or old reports treated as current source truth

## Output Contract

Default report:

```text
Verdict: <accept | accept with risks | fix required | reject | blocked>

Anchor:
- Repo/branch:
- Changed scope:
- Project goal:
- User task:
- Primary workflow:

Goal Fit:
- Supports project goal:
- Solves real workflow:
- Overbuilt/unnecessary code:

Findings:
- <severity> <file:line or surface>: <issue, risk, evidence, recommended fix>

Validation:
- Local:
- Browser:
- Live/deployed:
- Blocked/not verified:

Next Action:
- <one concrete next step>
```

For review-and-repair mode, add:

```text
Changes Made:
- <file>: <what changed>

Re-verification:
- <commands/checks and result>
```

Keep the report concise. Lead with the verdict and material findings. Do not bury a blocker under a long recap.

## Closeout Rules

Do not close as `accept` unless:

- project goal fit is stated
- task fit is checked against the user's request
- changed path is traced enough for the risk
- canonical source surface is checked when the issue was observed in a build, preview, browser, generated artifact, or temporary workspace
- hallucinated APIs/contracts are ruled out or blocked
- relevant validation ran or is explicitly blocked
- local/live/pushed/deployed state is separated
- remaining next action is concrete

If the review finds problems and the user asked you to finish the job, implement the smallest safe repair, re-run validation, and then issue a fresh verdict.

## Good Trigger Prompts

- "Run the engineering acceptance review on this."
- "Check this like the engineer owner after Codex finished."
- "Make sure Codex did not hallucinate, overbuild, or miss the project goal."
- "Do my human review job: goal fit, diff, behavior, tests, architecture, and next step."
- "Review and repair this Codex patch if it fails the human-owner pass."

