PromptBase
PromptBase SelectGet Select
Close icon
General
Home
Marketplace
Create
Hire
Login
Chat
Sell
Explore

Prompt Details

Model
Chat - (gpt-5.6)
Token size
2,928
Example input
[ORIGINAL_TASK_AND_REQUIREMENTS]: Build an authenticated GET /api/users/:id endpoint that: Returns the requested user's public profile. Requires authentication. Allows a user to view only their own profile. Returns 404 when the user does not exist. Must not expose password hashes or internal security fields. Preserve existing API behavior. [AI_GENERATED_PR_DESCRIPTION_AND_DIFF]: AI agent claims: Added GET /api/users/:id endpoint with authentication and tests. Simplified diff: + router.get("/api/users/:id", authMiddleware, async (req, res) => { + const user = await db.users.findById(req.params.id); + if (!user) return res.status(404).json({ error: "User not found" }); + + return res.json(user); + }); Added test: it("returns user profile", async () => { const response = await request(app) .get("/api/users/123") .set("Authorization", "Bearer valid-token"); expect(response.status).toBe(200); }); [RELEVANT_CODEBASE_ARCHITECTURE_AND_EXISTING_CODE]: Express.js API. authMiddleware attaches authenticated user to req.user. Existing user service: userService.getPublicProfile(userId) Existing controllers normally use services rather than accessing DB directly. User database records contain: { id, name, email, passwordHash, role, resetToken, createdAt } [SECURITY_COMPATIBILITY_AND_OPERATIONAL_REQUIREMENTS]: Users must not access another user's profile. Password/security fields must never be returned. Existing endpoint behavior must remain unchanged. [RUNTIME_EVIDENCE_DOCUMENTATION_AND_KNOWN_CONSTRAINTS]: Manual test confirms valid authentication works. No evidence of testing another user's ID. No evidence of testing response serialization. No performance testing performed.
Example output
PHASE 1 - REQUIREMENT RECONSTRUCTION Explicit Requirements 1. Add GET /api/users/:id. 2. Require authentication. 3. User can access only their own profile. 4. Return public profile information. 5. Return 404 if the user does not exist. 6. Do not expose sensitive user fields. 7. Preserve existing API behavior. Implicit Requirements The implementation must: Use the existing authentication model. Respect existing authorization conventions. Use the existing public-profile abstraction. Avoid bypassing security filtering. Return appropriate HTTP status codes. Avoid exposing internal database structure. Acceptance Criteria Requirement Testable expectation Authentication Missing/invalid token returns 401 Own profile User requesting own ID receives 200 Other profile User requesting another ID receives 403 Missing user Nonexistent ID returns 404 Sensitive data Response contains no passwordHash, resetToken, etc. Existing behavior Existing API tests continue passing Out of Scope User profile editing. Password changes. Role management. Database redesign. Authentication-system redesign. --- PHASE 2 - INTENDED BEHAVIOR MODEL Input GET /api/users/:id Authorization: Bearer <token> Processing Expected flow: Request ↓ Authentication ↓ Identify authenticated user ↓ Compare req.user.id with :id ↓ Authorization ↓ userService.getPublicProfile(id) ↓ Return sanitized profile Expected Outputs Own profile 200 OK with: { "id": "123", "name": "Alice", "email": "alice@example.com" } Unauthenticated 401 Unauthorized Another user's profile 403 Forbidden User doesn't exist 404 Not Found Security Invariant The response must never contain: passwordHash resetToken internal security fields --- PHASE 3 - PR CHANGE RECONSTRUCTION Modified Behavior The PR adds: GET /api/users/:id with authentication middleware. Important Implementation The PR directly performs: db.users.findById(req.params.id) and returns: res.json(user) Major Observation The existing architecture already provides: userService.getPublicProfile(userId) which is specifically designed to remove sensitive fields. The PR bypasses that abstraction. Test Changes Only one positive test was added. Missing: Authentication failure test. Authorization test. Sensitive-data test. Missing-user test. --- PHASE 4 - REQUIREMENT-IMPLEMENTATION GAP ANALYSIS Requirement Implementation Status Auth required authMiddleware used 🟢 Satisfied Own profile only No ownership check 🔴 Critical Gap Public profile Raw DB object returned 🔴 Critical Gap 404 missing user Implemented 🟢 Satisfied Sensitive fields excluded Not implemented 🔴 Critical Gap Existing architecture DB accessed directly 🟠 Major Gap Regression safety CI passes 🟡 Partial Full behavior testing Only happy path 🟠 Major Gap Critical Findings 🔴 Critical Gap - Broken Authorization There is no comparison between: req.user.id and: req.params.id Therefore an authenticated user could request: /api/users/456 even when they are user 123. 🔴 Critical Gap - Sensitive Data Exposure The implementation returns the entire database record. That potentially exposes: passwordHash resetToken role The exact returned fields depend on the DB serialization behavior, but the PR provides no evidence that sensitive fields are excluded. 🟠 Major Gap - Architecture Bypass The existing: userService.getPublicProfile() should be used. The PR bypasses the established sanitization layer. --- PHASE 5 - SCOPE CREEP DETECTION There is no significant unrelated feature addition. However, there is an architectural deviation. Finding WHAT CHANGED Controller directly accesses: db.users.findById() instead of: userService.getPublicProfile() WHY IT APPEARS UNNECESSARY The existing service already implements the required public-profile behavior. RISK CREATED Sensitive data exposure. Duplicated business logic. Future inconsistency. Increased maintenance cost. Classification 🟠 Major architectural deviation --- PHASE 6 - HALLUCINATED API & ASSUMPTION AUDIT authMiddleware Status: 🟢 Verified Provided architecture confirms it exists. db.users.findById() Status: 🟡 Unverified API assumption The provided codebase description does not establish that this is the standard or intended access method. Even if it exists, its return behavior has not been verified. userService.getPublicProfile() Status: 🟢 Verified Provided architecture explicitly confirms it exists. req.user.id Status: 🟢 Verified assumption The authentication middleware is documented as attaching the authenticated user to req.user. Sensitive-field filtering Status: 🔴 Missing No API or abstraction is used to guarantee sanitization. --- PHASE 7 - DEPENDENCY & ARCHITECTURE CONSISTENCY Expected architecture: Controller ↓ User Service ↓ Repository / DB PR architecture: Controller ↓ DB This bypasses the service layer. Why This Matters The service already encapsulates: public profile + sensitive-field removal The PR duplicates neither behavior nor the security contract. Therefore the implementation technically adds an endpoint but violates the established architecture. Result 🟠 Architecture consistency concern --- PHASE 8 - TEST & COVERAGE AUDIT CI passing is insufficient. The single test proves only: valid token + existing user + HTTP request = 200 It does not prove the actual security requirements. Missing Test 1 - Authentication INPUT: No Authorization header ACTION: GET /api/users/123 EXPECTED: 401 Missing Test 2 - Authorization INPUT: Authenticated user = 123 Requested user = 456 ACTION: GET /api/users/456 EXPECTED: 403 Missing Test 3 - Sensitive Data INPUT: Existing user containing passwordHash and resetToken ACTION: GET /api/users/123 EXPECTED: Response does not contain sensitive fields Missing Test 4 - Missing User INPUT: Authenticated user = 999 ACTION: GET /api/users/999 EXPECTED: 404 Missing Test 5 - Regression Run the complete existing API test suite. Test Confidence Low-to-moderate Passing CI does not demonstrate compliance with the security-critical requirements. --- PHASE 9 - SECURITY AUDIT 🔴 Critical - Broken Object-Level Authorization Authenticated users can potentially retrieve another user's record. This is an IDOR/BOLA-style authorization failure. Example: Attacker's ID: 123 Victim's ID: 456 GET /api/users/456 No ownership check exists. 🔴 Critical - Sensitive Information Exposure Returning: res.json(user) can expose database-only fields. Potential exposure: passwordHash resetToken role The exact exposure must be confirmed through runtime serialization, but the implementation does not enforce the required boundary. Security Priority These are merge-blocking issues. --- PHASE 10 - BACKWARD COMPATIBILITY AUDIT API Compatibility New endpoint: GET /api/users/:id doesn't inherently break existing endpoints. So: 🟢 No obvious existing API breaking change. However The response contract of the new endpoint is unsafe and inconsistent with the existing public-profile abstraction. Potential future compatibility problem: If the database schema gains a new sensitive field, this endpoint may automatically expose it. For example: mfaSecret could accidentally become public without modifying this endpoint. Result 🟠 Potential contract durability issue --- PHASE 11 - FAILURE & EDGE-CASE ANALYSIS Case 1 - Missing Token Expected: 401 Needs verification. Case 2 - Invalid Token Expected: 401 Needs verification. Case 3 - Another User Expected: 403 Currently likely: 200 🔴 Failure. Case 4 - Missing User Expected: 404 Implementation handles this. 🟢 Case 5 - Sensitive Fields Expected: not present Potentially: present 🔴 Case 6 - Malformed ID Need to verify database behavior. Unknown. Case 7 - Database Failure No explicit handling shown. Need to determine whether existing Express error middleware handles rejected promises. 🟡 Unverified. Case 8 - Large/Unexpected ID Should not cause unexpected DB behavior. Needs validation depending on database implementation. --- PHASE 12 - UNVERIFIED ASSUMPTION AUDIT Assumption Evidence Risk findById() exists Not established Medium DB result is safe to serialize No evidence Critical Authentication is sufficient authorization False by requirements Critical User ID always matches token Not guaranteed Critical DB failure is handled globally Not provided Medium Returned DB object contains only public fields Contradicted by schema Critical Existing service can be bypassed safely No evidence High The most dangerous assumption is: > "Authenticated means authorized to access any user." That directly contradicts the requirement. --- PHASE 13 - PRODUCTION IMPACT & RISK ANALYSIS Risk Severity Probability Blast Radius Detectability Mitigation Unauthorized profile access Critical High All users Low Enforce ownership Password hash exposure Critical Medium/High Potentially all users Low Use public-profile service Reset token exposure Critical Medium Affected users Low Sanitize response Architecture bypass Major High Endpoint Medium Use service layer Missing negative tests Major High Future regressions Low Add security tests DB failure handling Medium Unknown Endpoint Medium Verify error middleware Overall Production Risk HIGH The endpoint should not be deployed in its current form. --- PHASE 14 - VERIFICATION PLAN Test 1 - Own Profile INPUT Authenticated user 123. ACTION GET /api/users/123 EXPECTED 200 and only public fields. FAILURE Any sensitive field appears. --- Test 2 - Other User INPUT Authenticated user 123. ACTION GET /api/users/456 EXPECTED 403 FAILURE Response is 200. --- Test 3 - Unauthenticated INPUT No token. ACTION GET /api/users/123 EXPECTED 401 FAILURE Any user information is returned. --- Test 4 - Missing User INPUT Authenticated user 999. ACTION GET /api/users/999 EXPECTED 404 FAILURE Incorrect status or leaked internal DB information. --- Test 5 - Sensitive Field Protection Seed: { "id": "123", "name": "Alice", "passwordHash": "SECRET", "resetToken": "SECRET" } Request: GET /api/users/123 Expected: passwordHash absent resetToken absent Failure: Either field appears. --- Test 6 - Existing API Regression Run the complete existing test suite. Expected: All existing tests pass. Failure: Any unrelated existing behavior changes. --- Test 7 - Architecture Verification Inspect endpoint implementation. Expected: controller → userService.getPublicProfile() Failure: Direct database access remains in controller. --- PHASE 15 - MERGE GATE ANALYSIS Current Gate The PR does not meet the safe-to-merge criteria. Required Before Merge 1. Add ownership authorization. 2. Use userService.getPublicProfile(). 3. Confirm sensitive fields cannot be serialized. 4. Add 401 test. 5. Add 403 authorization test. 6. Add 404 test. 7. Add sensitive-field regression test. 8. Run full CI. 9. Verify error handling for DB/service failures. 10. Perform a manual security test against another user's ID. Gate Status 🔴 BLOCK MERGE --- PHASE 16 - FINAL AI-GENERATED PR VERIFICATION REPORT Executive Summary PR Purpose: Add authenticated user-profile retrieval endpoint. Implementation Quality: Insufficient. Major Risks: Broken object-level authorization. Potential sensitive-data exposure. Existing public-profile service bypassed. Insufficient security and negative-path testing. Verification Confidence: Low. The PR demonstrates that the happy path works, but it does not provide sufficient evidence that the security and data-exposure requirements are satisfied. --- Requirement Compliance Requirement Implementation Evidence Status Authentication required authMiddleware Existing middleware + PR diff 🟢 User can view own profile Endpoint exists Happy-path test 🟢 User cannot view another profile No authorization check Diff inspection 🔴 404 for missing user Explicit 404 branch PR diff 🟢 Public fields only Raw DB object returned Diff + schema 🔴 Preserve existing behavior No existing API changes shown CI 🟡 Follow architecture Direct DB access Code inspection 🟠 Security regression coverage Missing Test inspection 🔴 --- Change Analysis Important change: New GET /api/users/:id endpoint Positive: Authentication middleware is used. Missing users receive 404. Negative: Direct database access. No authorization boundary. Raw user object returned. Insufficient tests. --- Scope Creep Findings No major unrelated feature scope creep detected. However: Architecture deviation: The controller bypasses the existing user service. Risk: Security logic duplication. Inconsistent behavior. Future maintenance problems. --- Hallucinated API Findings No confirmed hallucinated API. However: db.users.findById() is not sufficiently verified from the provided architecture. Classification: 🟡 Unverified API assumption --- Test Verification Covered Authenticated request. Existing user. 200 response. Not Covered 401. 403. 404. Sensitive-field protection. Unauthorized ID access. Service/database failure. Regression behavior. Test Confidence Insufficient for production merge. --- Security Findings 🔴 Critical Broken authorization An authenticated user may access another user's profile. 🔴 Critical Potential sensitive information disclosure Raw database records are returned instead of the established public-profile representation. 🟠 Major Security boundary bypass Existing sanitization abstraction is bypassed. --- Compatibility Findings No direct breaking change to existing APIs is demonstrated. However, the new endpoint creates an unstable response contract because future database fields may automatically become externally visible. --- Unverified Assumptions 1. findById() exists and behaves as expected. 2. Raw database objects are safe to serialize. 3. Authentication alone provides sufficient authorization. 4. Database errors are handled correctly. 5. No future sensitive database fields will be added. The third assumption is directly invalid according to the requirements. --- Production Risk Matrix Finding Severity Probability Blast Radius Detectability Required Mitigation BOLA/IDOR Critical High All profiles Low Ownership check Sensitive data exposure Critical Medium/High Potentially all users Low Public-profile service Missing security tests Major High Future regressions Low Add negative tests Service bypass Major High Endpoint Medium Restore service-layer usage --- Required Verification Before merge: 1. Test unauthenticated request. 2. Test authenticated owner request. 3. Test authenticated non-owner request. 4. Test nonexistent user. 5. Assert sensitive fields are absent. 6. Verify service-layer usage. 7. Run full CI. 8. Run security/static analysis. 9. Verify error handling. 10. Perform manual authorization validation. --- FINAL MERGE DECISION 🔴 BLOCK Decision Rationale The PR does not satisfy two security-critical requirements: Users are not restricted to their own profile. The endpoint may expose sensitive database fields. Passing CI and the happy-path test do not provide sufficient evidence for safe deployment. Blocking Issues 1. Missing object-level authorization. 2. Raw user record returned. 3. Missing sensitive-data regression tests. Required Fixes Enforce req.user.id === req.params.id or the project's established authorization mechanism. Replace direct DB access with userService.getPublicProfile(). Add authorization and sensitive-field tests. Required Verification The complete test suite must pass, including explicit 401, 403, 404, and sensitive-data cases. Remaining Uncertainty Exact behavior of db.users.findById(). Exact runtime serialization behavior. Existing global database error handling. These should be verified before approval. --- Final Recommendation Shortest safe path to merge: Add authorization ↓ Use public-profile service ↓ Add 401/403/404/security tests ↓ Run full CI + security checks ↓ Manual unauthorized-access test ↓ Re-review ↓ MERGE Final status: 🔴 BLOCK
GPT

Coding Agent Pr Verification Architect

Add to Cart
Instant accessInstant access
Usage rightsCommercial use
Money-back guaranteeMoney‑back
By purchasing this prompt, you agree to our terms of service
GPT-5.6
Tested icon
Guide icon
4 examples icon
Free credits icon
AI-generated PRs can look correct while hiding requirement gaps, hallucinated APIs, scope creep, security flaws, and unverified assumptions. 🎯 Reconstruct the intended behavior 🔍 Compare requirements against implementation 🚨 Detect scope creep & hallucinated APIs 🧪 Audit tests and missing coverage 🛡️ Find security vulnerabilities 🔄 Check backward compatibility 🧠 Expose unverified assumptions 🚦 Generate a clear MERGE / CONDITIONAL MERGE / BLOCK decision Add an evidence-driven verification
...more
Added over 1 month ago
Report
Browse Marketplace