amruthpillai/reactive-resume · error · ORPCError
NOT_FOUND
NOT_FOUND
Error message
NOT_FOUND
What it means
readSnapshot() in createDatabaseStylesheetService selects the resume row by (id, userId); if no row matches it throws NOT_FOUND. This is the existence and ownership check that gates every stylesheet read operation before any compile/preflight work begins.
Source
Thrown at packages/api/src/features/resume/stylesheet-service.ts:382
const snapshotSelection = {
id: schema.resume.id,
userId: schema.resume.userId,
data: schema.resume.data,
isLocked: schema.resume.isLocked,
stylesheetRevision: schema.resume.stylesheetRevision,
renderDataVersion: schema.resume.renderDataVersion,
updatedAt: schema.resume.updatedAt,
};
export function createDatabaseStylesheetService(options: DatabaseStylesheetServiceOptions = {}) {
const database = options.database ?? db;
const runner = options.runner;
const readSnapshot = async (input: { id: string; userId: string }) => {
const [snapshot] = await database
.select(snapshotSelection)
.from(schema.resume)
.where(and(eq(schema.resume.id, input.id), eq(schema.resume.userId, input.userId)));
if (!snapshot) throw new ORPCError("NOT_FOUND");
return snapshot;
};
return createStylesheetService({
readSnapshot,
convertLegacy: convertLegacyStylesheet,
compile: compileStylesheet,
...(runner
? {
preflight: ({ data, stylesheet }: { data: ResumeData; stylesheet: StylesheetSource }) =>
runner.run({
data,
template: data.metadata.template,
stylesheet,
}),
}
: {}),
parity: checkLegacyStylesheetParity,View on GitHub (pinned to 3a5b12e2a4)
Solutions
- Verify the resume id exists and is owned by the user (resumeService.getById) before invoking stylesheet ops.
- Handle 404 in the UI by refreshing the resume list or redirecting away.
- Clear cached stylesheet state when the resume is deleted.
Defensive patterns
Strategy: validation
Validate before calling
async function assertResumeExists(id, userId) {
const r = await resumeService.getById({ id, userId }).catch(() => null);
if (!r) throw new Error(`Resume ${id} not found for user`);
} Try / catch
try {
await stylesheetService.read({ id, userId });
} catch (e) {
if (e.code === 'NOT_FOUND') { /* redirect / refresh resume list */ }
else throw e;
} Prevention
- Verify resume existence and ownership before invoking stylesheet operations.
- Clear cached resume ids after deletion.
- Handle 404 gracefully in the UI by refreshing the resume list.
When it happens
Trigger: Calling any stylesheet service method (read state, edit source, activate, deactivate) for a resume id that does not exist or does not belong to the authenticated user.
Common situations: A stale resume id in the client after deletion, navigating from a cached link, or a user attempting to reach another user's resume.
Related errors
- NOT_FOUND
- STYLESHEET_PARITY_FAILED
- STYLESHEET_REVISION_CONFLICT
- An unknown error occurred while validating the merged resume
- INTERNAL_SERVER_ERROR
AI-assisted analysis of amruthpillai/reactive-resume@3a5b12e2a4 (2026-08-12).
Data as JSON: /api/errors/284681da43ed9930.
Report an issue: GitHub.