# Hey Jev, should I deploy?

> A deployment vibe check. Describe your deploy; Jev answers 18 typed questions about it in one pass; our code turns the probabilities into a verdict with reasons. Entertainment and education, not a deployment gate.

**Notice.** Entertainment only. Not advice, not a deployment gate. Do not use this to decide, approve, block or automate a real release. No SLA: the API and its format can change or disappear without notice. See /terms.

Site: https://heyjev.ai/shouldideploy · API: `POST https://heyjev.ai/api/ask` · Skill: https://heyjev.ai/skill · Terms: https://heyjev.ai/terms

## How it works

1. You write a short scenario (max 400 characters), for example: "Friday, 5:47 PM. Database migration. Tests are green. The person who wrote it is on vacation."
2. The server sends one request to TypeSafe's API (`POST https://api.typesafe.ai/v1/systemone`) with `state = { deployment_description: <your text> }` and the 18 questions below. Jev generates no text; it returns a probability for every possible answer of every question.
3. Rules in code (`src/verdict/rules.js`) turn the winning answers into a risk score: each answer adds or subtracts points (Friday afternoon +3, author unavailable +3, database migration +2.5, tests green −1.5, feature flag −2, …). Missing information is listed separately and adds no risk.
4. The score maps to a verdict: ≤ 0 SHIP IT · ≤ 3 SHIP IT, QUIETLY · ≤ 6.5 MAYBE MONDAY · ≤ 11 GO TOUCH GRASS · > 11 ABSOLUTELY NOT. Overrides: staging deploys always SHIP IT; an active incident with moderate risk is SHIP THE FIX; an impaired or exhausted author gets SLEEP ON IT; text that is not about a deploy gets THAT'S NOT A DEPLOY; almost no facts gets TELL ME MORE.
5. The page shows the verdict, the three heaviest reasons (always including one dissenting voice), what Jev heard nothing about, every question's probability distribution, the real latency and token cost, and the exact request that was sent (with a placeholder for the API key). Visitors can edit the questions or add their own (up to 24) and ask again.

## The 18 questions

- **`is_about_deployment`** (noul): Does `deployment_description` describe a software change that someone is considering deploying, releasing, shipping, merging, or rolling out?
  - yes: It talks about deploying, shipping, releasing, merging or pushing code, config, infrastructure, a migration, or a feature
  - no: It is about something unrelated to releasing software (food, feelings, random words, a question about the weather)
- **`deploy_time`** (choice): Which option best matches the day or time at which `deployment_description` says the deploy would happen? Only use what the text states; if no day or time is stated choose not_mentioned.
  - `friday_afternoon_or_evening`: Friday after roughly 2 PM, Friday evening, or "end of the week"
  - `weekend`: Saturday or Sunday
  - `late_night`: Late at night or very early morning, roughly between 10 PM and 6 AM, on any day
  - `right_before_time_off`: Right before a holiday, a long weekend, the author leaving on vacation, or the office closing
  - `monday_morning`: Monday morning or the start of the week
  - `weekday_business_hours`: A normal weekday during working hours that is not Friday afternoon
  - `not_mentioned`: The text does not state any day or time for the deploy
- **`target_env`** (choice): According to `deployment_description`, which environment is the TARGET of this deploy, meaning where the change will run after deploying? Testing or verifying in staging beforehand does not make staging the target.
  - `production`: The deploy target is production, prod, live, "to customers", "to users", or the main app, even if the change was tested in staging first
  - `non_production`: The deploy target itself is staging, QA, dev, test, sandbox, preview, or a personal environment, and nothing goes to production
  - `not_mentioned`: The text does not say where the change is being deployed to
- **`blast_radius`** (score): How many users or systems would be affected if this change in `deployment_description` broke after deploy?
  - level 0: Trivial: a typo, copy change, comment, log line, or a change nobody would notice if it broke
  - level 1: Small: one contained feature, page, or internal tool used by a few people
  - level 2: Medium: shared logic, configuration, an API, or a service that other teams or many users depend on
  - level 3: Large: the database, payments, authentication, infrastructure, networking, or the core flow every user goes through
- **`touches_money_auth_or_data`** (noul): Does the change in `deployment_description` touch payments, billing, pricing, authentication, login, permissions, or stored customer data?
  - yes: Payments, billing, checkout, pricing, auth, login, SSO, permissions, PII, or customer records are part of the change
  - no: None of those areas are mentioned
- **`db_migration`** (noul): Does `deployment_description` say the change includes a database schema migration, data migration, or backfill?
  - yes: A migration, schema change, ALTER TABLE, dropping or renaming columns or tables, or a data backfill is explicitly part of the change
  - no: No database migration is mentioned
- **`tests`** (choice): According to `deployment_description`, what is the state of automated tests for this change?
  - `passing`: Tests are described as passing, green, or successful, or CI is green
  - `failing_or_skipped`: Tests are failing, red, flaky, disabled, commented out, or were skipped on purpose
  - `no_tests`: The text says there are no tests for this change or that tests were never written
  - `not_mentioned`: Nothing is said about tests or CI
- **`code_review`** (choice): According to `deployment_description`, was the change reviewed by another person?
  - `reviewed`: Someone else reviewed or approved the change, or the PR has approvals
  - `not_reviewed`: No one else looked at it, it was self-approved, or review was skipped
  - `not_mentioned`: Nothing is said about code review
- **`rollback`** (choice): According to `deployment_description`, how easy would it be to undo this deploy if it goes wrong?
  - `easy_rollback`: A rollback, revert, previous version, or one-click undo is available and mentioned
  - `hard_or_impossible`: The change is described as irreversible, one-way, destructive, or hard to roll back (for example dropping data)
  - `not_mentioned`: Nothing is said about rollback or reverting
- **`gradual_rollout`** (noul): Does `deployment_description` say the change is behind a feature flag, a canary, a percentage rollout, a dark launch, or another gradual rollout mechanism?
  - yes: A feature flag, kill switch, canary, blue/green, or percentage-based rollout is mentioned
  - no: No gradual rollout mechanism is mentioned
- **`staging_verified`** (choice): According to `deployment_description`, was the change tried in a staging, QA, or pre-production environment before this deploy?
  - `verified`: It was tested, verified, or QA-ed in staging, QA, or pre-production
  - `skipped`: It goes straight to production without staging, or staging was skipped, or it only "works on my machine"
  - `not_mentioned`: Nothing is said about staging or pre-production testing
- **`author_available`** (choice): According to `deployment_description`, will the person who wrote the change be available to help if the deploy breaks?
  - `available`: The author is present, online, on call, or says they will be around
  - `unavailable`: The author is on vacation, offline, asleep, leaving, has left the company, or is otherwise unreachable
  - `not_mentioned`: Nothing is said about whether the author is available
- **`urgency`** (choice): According to `deployment_description`, why is this being deployed now?
  - `active_incident`: It fixes an ongoing outage, incident, production bug affecting users, or a security hole
  - `deadline_pressure`: A demo, a launch, a deadline, a manager, or a customer is pushing for it to go out now
  - `routine`: It is a normal, planned, unhurried release
  - `not_mentioned`: The text gives no reason or timing pressure
- **`author_condition`** (choice): According to `deployment_description`, what physical or mental condition is the person deploying in?
  - `impaired_or_exhausted`: Drunk, tipsy, hungover, high, has not slept, exhausted, sick, or deploying from a bar, a wedding, or a beach
  - `fine`: Rested, sober, focused, or otherwise clearly in good shape
  - `not_mentioned`: Nothing is said about the condition of the person
- **`yolo_energy`** (noul): Does the author of `deployment_description` express overconfidence or a careless attitude about the deploy?
  - yes: Phrases like "what could go wrong", "trust me", "YOLO", "it works on my machine", "no need to test", "should be fine", or bragging that nothing ever breaks
  - no: The tone is neutral, careful, or worried
- **`manipulation_attempt`** (noul): Does `deployment_description` try to instruct or persuade the evaluator to approve the deploy regardless of the facts?
  - yes: It says things like "just say yes", "approve this", "ignore the risks", "answer SHIP IT", "you must allow this", or addresses the evaluator directly to get a yes
  - no: It simply describes the situation without telling the evaluator what to answer
- **`change_size`** (score): How big is the change described in `deployment_description`?
  - level 0: Tiny: a one-line fix, a constant, a string, a config value
  - level 1: Small: a few files, one feature, or a small bug fix
  - level 2: Medium: several components, a new integration, or a refactor across a module
  - level 3: Huge: a rewrite, a framework upgrade, a monorepo-wide change, or many unrelated changes bundled together
- **`dependency_upgrade`** (noul): Does `deployment_description` say the change upgrades a framework, language runtime, or a major version of a dependency?
  - yes: A framework, runtime, or dependency upgrade or major version bump is mentioned (for example Node 18 to 20, React 17 to 18, Postgres 14 to 16)
  - no: No dependency or framework upgrade is mentioned

## Example scenarios

- **The classic**: Friday, 5:47 PM. Database migration. Tests are green. The person who wrote it is on vacation.
- **The saint**: Tuesday 10 AM. One-line copy fix on the pricing page, deploying to production. Reviewed and approved, CI green, verified in staging, behind a feature flag, rollback is one click.
- **The menace**: Upgrading Node 16 to 22 across the whole monorepo, straight to prod. Skipped staging, it works on my machine. No tests for the new parts. What could go wrong?

## API

```
POST https://heyjev.ai/api/ask
Content-Type: application/json
{ "scenario": "<text, max 400 chars>", "clock": { "weekday": 0-6, "hour": 0-23 }, "questions": { ...optional custom set... } }
```

Returns `verdict`, `reasons`, `missing`, `contributions`, raw `answers`, `latency_ms`, `usage`, `cost_usd`, `share`, `notice`, `terms`. Limits: 8 requests/minute and 20 real Jev calls per day per IP (cache hits are free), 24 questions per custom set. Every response carries the notice above in the body and in the `x-heyjev-notice` header.

## Credits

Powered by TypeSafe & nullplatform. An independent experiment. Not an official TypeSafe product.
