Guide for implementing code following the noop function-first, layered architecture. Use when writing handlers, services, database operations, or middleware. Automatically invoked when working on noop-based projects.
Enforces noop's function-first, layered architecture for handlers, services, and database operations. Automatically applied when working on noop projects to ensure proper separation of concerns and organizational scoping.
/plugin marketplace add HDeibler/noop/plugin install hdeibler-noop@HDeibler/noopThis skill inherits all available tools. When active, it can use any tool Claude has access to.
This skill provides guidance on implementing code that follows the noop architectural patterns.
Automatically use this skill when:
@docs/universal-framework/PHILOSOPHY.md
@docs/universal-framework/ARCHITECTURE_SPEC.md
@docs/universal-framework/CONVENTIONS.md
export const create = asyncHandler(async (req, res) => {
const { name } = req.body
if (!name) throw createError.requiredField('name')
const dbStore = getDbStore()
const item = await service.create(data, req.user.organizationId, dbStore)
return sendSuccess(res, item, 'Created', 201)
})
export async function create(
data: CreateInput,
organizationId: string,
dbStore: DbStore
): Promise<ItemInfo> {
if (!organizationId) throw new Error('organizationId required')
return dbStore.items.create(data, organizationId)
}
async create(data: CreateInput, organizationId: string): Promise<ItemInfo> {
if (!organizationId) throw new Error('organization_id required')
const result = await this.pgClient.executeQuery(
'INSERT INTO items (...) VALUES ($1, $2, $3) RETURNING *',
[id, data.name, organizationId]
)
return this.mapRowToItem(result.rows[0])
}
// 1. Silent fallbacks
catch { return defaultValue } // ❌ NEVER
// 2. Any types
function process(data: any) { } // ❌ NEVER
// 3. Missing org scoping
async getById(id: string) { } // ❌ NEVER
// 4. Field fallbacks
id = a.id || a.data.id // ❌ NEVER
// 5. Logic in handlers
const x = items.map(transform) // ❌ NEVER (in handler)
// Always .js extension
import { config } from './config.js'
// Type imports
import type { UserInfo } from '../types/user.types.js'
import { createError } from '../utils/errors.js'
import { sendSuccess, sendPaginatedResponse } from '../utils/standardResponse.js'
// Validation
if (!name) throw createError.requiredField('name')
if (!item) throw createError.notFound('Item', id)
// Success responses
return sendSuccess(res, item, 'Created', 201)
return sendPaginatedResponse(res, items, pagination)
Use when working with Payload CMS projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.