AI Unified Process - stack-agnostic core methodology (requirements, entity model, use cases)
93
95%
Does it follow best practices?
Impact
93%
1.43xAverage score across 10 eval scenarios
Passed
No known issues
This is a lookup, not a script. Use it after you've identified the project's stack from build files. Sections are independent — read only the ones that match the project in front of you.
pom.xml, build.gradle(.kts). Look for spring-boot-starter-*
dependencies to confirm modules in use (-web, -security, -data-jpa,
-jooq, -thymeleaf, etc.).@RestController, @Controller classes.@Route(...) or extending Component /
VerticalLayout and reachable from a router layout.@Scheduled.@KafkaListener, @RabbitListener, @JmsListener,
@EventListener.SecurityFilterChain configuration — requestMatchers(...).hasRole("X"),
.authenticated(), .permitAll().@RolesAllowed, @PreAuthorize, @Secured.UserDetailsService and any role/authority enum.@Entity classes (relationships from @OneToMany, @ManyToOne,
@OneToOne, @ManyToMany).src/main/resources/db/migration/V*.sql)
rather than annotated classes; the generated classes mirror the DDL.@NotNull, @Size, @Email,
@Min, @Max, @Pattern).@SpringBootTest, @WebMvcTest, Vaadin Browserless / Karibu
view tests, Playwright tests under src/test/. Tests named after a use
case (e.g. UC001NameOfUcTest) are gold — they encode the success
scenario and alternative flows already.requirements.txt, pyproject.toml, manage.py.urls.py (URL conf), view functions and class-based
views (View, ListView, CreateView, etc.), DRF ViewSets and
APIViews, Celery tasks (@shared_task).auth app's groups and permissions (Group, Permission).LoginRequiredMixin, PermissionRequiredMixin, @login_required,
@permission_required.IsAuthenticated, custom BasePermission
subclasses).models.py files. Relationships from ForeignKey,
OneToOneField, ManyToManyField. Validation from validators=[...],
null=, blank=, unique=, choices=. Migrations under
<app>/migrations/.tests.py or tests/ directory; TestCase subclasses.@app.route(...) (Flask), @app.get/post/...
(FastAPI), Blueprint registrations, APIRouter includes.@login_required, FastAPI dependencies that
resolve a user (Depends(get_current_user)), custom decorators.Base subclasses, Pydantic models if used as
the persistence layer. Migrations in Alembic (migrations/versions/).Build files: package.json. Look for express, koa, fastify,
nestjs, next.
Entry points:
app.get/post/..., router.use(...).@Controller(...), @Get, @Post, etc.; @MessagePattern
for microservices.pages/api/* (pages router), app/**/route.ts (app router),
server actions in app/**/page.tsx.Actors: middleware that sets req.user, NestJS @UseGuards(...)
with RolesGuard, NextAuth session callbacks, custom JWT middleware.
Entities:
schema.prisma is the source of truth for entities and
relationships.@Entity classes with @Column, @OneToMany, etc.Model.init({...}) calls.pgTable(...) calls in schema.ts.Prisma → AIUP type mapping (never copy Prisma/SQL types into the entity model — translate every column):
| Prisma type | AIUP Data Type | Length/Precision | Validation Rules |
|---|---|---|---|
Int @id @default(autoincrement()) | Long | 19 | Primary Key, Sequence |
Int | Integer | 10 | Not Null |
String | String | 255 (or actual) | Not Null |
String @unique | String | 255 | Not Null, Unique |
String? (optional) | String | 255 | Optional |
Decimal @db.Decimal(10, 2) | Decimal | 10,2 | Not Null, Min: 0 |
Boolean | Boolean | — | Not Null |
DateTime @default(now()) | DateTime | — | Not Null |
relation field userId Int | Long | 19 | Not Null, Foreign Key (USER.id) |
@db.Decimal, Decimal(10,2), Int, String?, bigint, VARCHAR and TEXT
must not appear anywhere in entity_model.md — they are implementation
details, not the AIUP vocabulary. A // "customer" or "admin" comment on a
String column maps to Not Null, Values: customer, admin.
Validation: class-validator decorators, Zod schemas, Joi schemas, Yup schemas — these are the richest source of business rules in the Node ecosystem.
config/routes.rb, controllers under
app/controllers/, ActionMailer mailers, ActiveJob jobs.before_action :authenticate_user! (Devise), Pundit
policies, CanCanCan abilities, custom role columns on users.app/models/*.rb. Relationships from has_many,
belongs_to, has_one, has_and_belongs_to_many. Validation from
validates :field, .... Schema in db/schema.rb (canonical) and
db/migrate/.http.HandleFunc,
router libraries (chi, gin, echo, fiber). gRPC services implementing
generated interfaces.sqlc-generated structs (schema in query.sql /
schema.sql), GORM structs with tags, Ent schemas under
ent/schema/.[ApiController] classes, Razor Pages, Blazor
components with @page directive, minimal-API app.MapGet(...),
IHostedService background services.[Authorize(Roles = "...")], ASP.NET Identity roles,
authorization policies in Program.cs.DbContext with DbSet<T> properties; entity
classes with [Key], [Required], [ForeignKey] attributes; or
fluent config in OnModelCreating. Migrations under Migrations/.When the ORM doesn't capture everything, fall back to the schema:
REFERENCES clauses give cardinality.
ON DELETE CASCADE often signals composition (the child can't exist
without the parent — typically ||--o{); ON DELETE SET NULL signals
a weaker association.(id, code, label) shape often
represent enumerated values; in the entity model these can become a
Values: A, B, C validation on the parent rather than their own
entity, unless they have lifecycle of their own.Don't multiply actors past what the code actually distinguishes:
hasRole(...), you have multiple actors. Name
them after the role.