{"record":{"id":"ffb1ab3289631926","repo":"nanocoai/nanoclaw","slug":"col-name-replace-g-is-required","errorCode":null,"errorMessage":"--${col.name.replace(/_/g, '-')} is required","messagePattern":"--(.+?) is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/crud.ts","lineNumber":252,"sourceCode":"    // resolution.\n    for (const col of def.columns) {\n      if (col.generated) {\n        if (col.name === def.idColumn) {\n          values[col.name] = randomUUID();\n        } else if (col.name.endsWith('_at')) {\n          values[col.name] = new Date().toISOString();\n        }\n        continue;\n      }\n\n      const v = args[col.name];\n      if (v !== undefined) {\n        if (col.enum && !col.enum.includes(String(v))) {\n          throw new Error(`${col.name} must be one of: ${col.enum.join(', ')}`);\n        }\n        values[col.name] = col.type === 'number' ? Number(v) : v;\n      } else if (col.required) {\n        throw new Error(`--${col.name.replace(/_/g, '-')} is required`);\n      }\n    }\n\n    // Pass 2: context-aware defaults + cross-column validation.\n    if (def.resolveDefaults) def.resolveDefaults(values);\n\n    // Pass 3: static defaults for whatever is still unset.\n    for (const col of def.columns) {\n      if (col.generated || values[col.name] !== undefined) continue;\n      if (col.default !== undefined) {\n        values[col.name] = col.default;\n      } else if (col.defaultFrom !== undefined && values[col.defaultFrom] !== undefined) {\n        values[col.name] = values[col.defaultFrom];\n      }\n    }\n\n    // Idempotent create: if a row already matches the natural key, return it\n    // rather than hitting a UNIQUE violation. Lets a skill re-run `ncl … create`.","sourceCodeStart":234,"sourceCodeEnd":270,"githubUrl":"https://github.com/nanocoai/nanoclaw/blob/294ef2aee85218b23ad30eda9dfe10e590b54a8c/src/cli/crud.ts#L234-L270","documentation":"Thrown by genericCreate in src/cli/crud.ts when a column marked required was not provided (undefined) and no default resolved for it. Pass 1 iterates create-able columns; required columns must be present in args or creation aborts before any DB write.","triggerScenarios":"`ncl <resource> create` omitting a required flag, e.g. creating a messaging group without its platform identity, or creating an agent group without the fields its resource definition marks required.","commonSituations":"Assuming a field is optional because a template/wizard filled it before; flags misspelled so the parser never binds them; underscore vs dash confusion (flags use dashes for underscored names).","solutions":["Re-run with the missing flag exactly as named (underscores become dashes)","Run `ncl <resource> help` to list required columns","Check for typos/dash-spacing in the flag name"],"exampleFix":"# before\nncl messaging-groups create --name chat\n# after\nncl messaging-groups create --name chat --channel-type discord --instance default","handlingStrategy":"validation","validationCode":"const missing = requiredCols.filter(c => args[c.name] === undefined);\nif (missing.length) throw new Error(`missing: ${missing.map(c => '--' + c.name.replace(/_/g,'-')).join(' ')}`);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check `ncl <resource> help` for required flags","Use dashes for underscored flag names","Assert all required args present before spawning ncl"],"tags":["cli","missing-argument","crud"],"backgroundTag":"missing-required-argument","analyzedSha":"294ef2aee85218b23ad30eda9dfe10e590b54a8c","analyzedAt":"2026-08-28T13:59:10.357Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}