{"record":{"id":"b98f115e26dedf21","repo":"angular/angular-cli","slug":"invalid-builder-name","errorCode":null,"errorMessage":"Invalid builder name: ","messagePattern":"Invalid builder name: ","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/angular_devkit/architect/src/architect.ts","lineNumber":378,"sourceCode":"      privateArchitectJobRegistry,\n      ...(additionalJobRegistry ? [additionalJobRegistry] : []),\n    ] as Registry[]);\n\n    this._scheduler = new SimpleScheduler(jobRegistry, registry);\n  }\n\n  has(name: JobName): Observable<boolean> {\n    return this._scheduler.has(name);\n  }\n\n  scheduleBuilder(\n    name: string,\n    options: json.JsonObject,\n    scheduleOptions: ScheduleOptions = {},\n  ): Promise<BuilderRun> {\n    // The below will match 'project:target:configuration'\n    if (!/^[^:]+:[^:]+(:[^:]+)?$/.test(name)) {\n      throw new Error('Invalid builder name: ' + JSON.stringify(name));\n    }\n\n    return scheduleByName(name, options, {\n      scheduler: this._scheduler,\n      logger: scheduleOptions.logger || new logging.NullLogger(),\n      currentDirectory: this._host.getCurrentDirectory(),\n      workspaceRoot: this._host.getWorkspaceRoot(),\n    });\n  }\n  scheduleTarget(\n    target: Target,\n    overrides: json.JsonObject = {},\n    scheduleOptions: ScheduleOptions = {},\n  ): Promise<BuilderRun> {\n    return scheduleByTarget(target, overrides, {\n      scheduler: this._scheduler,\n      logger: scheduleOptions.logger || new logging.NullLogger(),\n      currentDirectory: this._host.getCurrentDirectory(),","sourceCodeStart":360,"sourceCodeEnd":396,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular_devkit/architect/src/architect.ts#L360-L396","documentation":"scheduleBuilder expects a builder name in 'project:target[:configuration]' format (a target-style name). The regex ^[^:]+:[^:]+(:[^:]+)?$ enforces 2–3 colon-separated non-empty segments; anything else throws 'Invalid builder name: ...'.","triggerScenarios":"Calling architect.scheduleBuilder(name, options) with a bare name like 'browser' or '@angular-devkit/build-angular:browser' (unqualified package:builder form is not valid here), or a string with empty segments like 'a::c'.","commonSituations":"See trigger scenarios.","solutions":["Pass a target-qualified name like 'my-app:build:production' to scheduleBuilder","If you only have a package builder name, use architect.scheduleTarget(targetFromTargetString(...)) or scheduleByName with the full name","Strip whitespace and validate the 'a:b(:c)' shape before calling","Check where the name string originates (config/env) for truncation or missing colons"],"exampleFix":"// before\narchitect.scheduleBuilder('@angular-devkit/build-angular:browser', options)\n// after\narchitect.scheduleBuilder('my-app:build', options)","handlingStrategy":"validation","validationCode":"if (!/^[^:]+:[^:]+(:[^:]+)?$/.test(name)) {\n  throw new Error(`scheduleBuilder needs a target-style name (project:target[:config]), got: ${name}`);\n}","typeGuard":"function isScheduleableBuilderName(v) {\n  return typeof v === 'string' && /^[^:]+:[^:]+(:[^:]+)?$/.test(v);\n}","tryCatchPattern":"try {\n  const run = await architect.scheduleBuilder(name, options);\n} catch (e) {\n  if (e.message.startsWith('Invalid builder name:')) {\n    console.error(`Use a project:target[:configuration] name, not a package:builder name: ${e.message}`);\n  }\n  throw e;\n}","preventionTips":["Remember scheduleBuilder takes a TARGET name, scheduleTarget takes a Target object","Validate the a:b(:c) shape before calling","Avoid constructing names from env vars without sanitizing","Use targetFromTargetString to normalize input first"],"tags":["angular","architect","builder-name","argument-parsing"],"backgroundTag":"invalid-builder-name","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}