Plugin eval report

taiga-ui-setup, taiga-ui

Plugin effect: ↑ +27.2 pts vs baseline — improved 6 · flat 3 · regressed 0 of 9 cases.

taiga-ui-setup taiga-ui Claude Code v2.1.287 2026-10-02 07:25 UTC 3m 53s $4.27 46 runs 4 in flight model sonnet judge default threshold 100%
Suite score · with plugin100%mean of per-case scores
Ablation Δ↑ +27.2score points vs baseline, 9 of 9 cases
Baseline score72.8%without the plugin
Cases99 of 9 ≥ 100% threshold
Perfect runs100%runs where every grader passed
How to read this report

01-add-taiga

evals/01-add-taiga ↑ +100.0 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 5 turns · $0.09 · 07:25:05 UTC
✓ pass runs-ng-add

Bash called 1x (expected 1..∞)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

Run 2 100% 5 turns · $0.09 · 07:25:05 UTC
✓ pass runs-ng-add

Bash called 1x (expected 1..∞)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

Run 3 100% 5 turns · $0.09 · 07:25:05 UTC
✓ pass runs-ng-add

Bash called 1x (expected 1..∞)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

Baseline (no plugin) 0% 0% of runs perfect
Run 1 0% 5 turns · $0.14 · 07:25:05 UTC
✗ fail runs-ng-add

Bash called 0x (expected 1..∞)

Run 2 0% 4 turns · $0.06 · 07:25:16 UTC
✗ fail runs-ng-add

Bash called 0x (expected 1..∞)

Run 3 0% 5 turns · $0.12 · 07:25:19 UTC
✗ fail runs-ng-add

Bash called 0x (expected 1..∞)

Prompt

Add Taiga UI to this Angular project.

Graders — what "good" means for this case
runs-ng-addtool_used
tool"Bash"
input_match"ng add taiga-ui(?![^\"]*--help)"
min1
skill-firedtool_used
tool"Skill"
input_match"taiga-ui-setup"

02-neg-material

evals/02-neg-material · 0.0 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 4 turns · $0.06 · 07:25:19 UTC
✓ pass answer-no-ng-add-taiga

pattern absent as expected

✓ pass no-ng-add-taiga

Bash called 0x (expected 0..0)

✓ pass no-skill-fired

Skill called 0x (expected 0..0)

Run 2 100% 3 turns · $0.06 · 07:25:22 UTC
✓ pass answer-no-ng-add-taiga

pattern absent as expected

✓ pass no-ng-add-taiga

Bash called 0x (expected 0..0)

✓ pass no-skill-fired

Skill called 0x (expected 0..0)

Run 3 100% 3 turns · $0.05 · 07:25:28 UTC
✓ pass answer-no-ng-add-taiga

pattern absent as expected

✓ pass no-ng-add-taiga

Bash called 0x (expected 0..0)

✓ pass no-skill-fired

Skill called 0x (expected 0..0)

Baseline (no plugin) 100% 100% of runs perfect
Run 1 100% 4 turns · $0.06 · 07:25:31 UTC
✓ pass answer-no-ng-add-taiga

pattern absent as expected

✓ pass no-ng-add-taiga

Bash called 0x (expected 0..0)

✓ pass no-skill-fired

Skill called 0x (expected 0..0)

Run 2 100% 4 turns · $0.06 · 07:25:31 UTC
✓ pass answer-no-ng-add-taiga

pattern absent as expected

✓ pass no-ng-add-taiga

Bash called 0x (expected 0..0)

✓ pass no-skill-fired

Skill called 0x (expected 0..0)

Run 3 100% 3 turns · $0.06 · 07:25:41 UTC
✓ pass answer-no-ng-add-taiga

pattern absent as expected

✓ pass no-ng-add-taiga

Bash called 0x (expected 0..0)

✓ pass no-skill-fired

Skill called 0x (expected 0..0)

Prompt

Add Angular Material to this project.

Graders — what "good" means for this case
answer-no-ng-add-taigaregex
target"last_message"
pattern"ng add taiga-ui"
flags"i"
match"not_contains"
no-ng-add-taigatool_used
tool"Bash"
input_match"taiga-ui"
min0
max0
arm"both"
no-skill-firedtool_used
tool"Skill"
input_match"taiga-ui"
min0
max0
arm"both"

10-notification

evals/10-notification ↑ +50.0 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 8 turns · $0.09 · 07:25:41 UTC
✓ pass component-created

**/save-button/**/*.ts exists as expected

✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✓ pass no-alert-service

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-toast-or-notification

Write called 1x (expected 1..∞)

Run 2 100% 11 turns · $0.09 · 07:25:42 UTC
✓ pass component-created

**/save-button/**/*.ts exists as expected

✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✓ pass no-alert-service

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-toast-or-notification

Write called 1x (expected 1..∞)

Run 3 100% 11 turns · $0.09 · 07:25:47 UTC
✓ pass component-created

**/save-button/**/*.ts exists as expected

✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✓ pass no-alert-service

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-toast-or-notification

Write called 1x (expected 1..∞)

Baseline (no plugin) 50% 0% of runs perfect
Run 1 50% 6 turns · $0.07 · 07:25:51 UTC
✓ pass component-created

**/save-button/**/*.ts exists as expected

✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✗ fail no-alert-service

Write called 1x (expected 0..0)

✗ fail uses-toast-or-notification

Write called 0x (expected 1..∞)

Run 2 50% 7 turns · $0.07 · 07:25:57 UTC
✓ pass component-created

**/save-button/**/*.ts exists as expected

✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✗ fail no-alert-service

Write called 1x (expected 0..0)

✗ fail uses-toast-or-notification

Write called 0x (expected 1..∞)

Run 3 50% 6 turns · $0.08 · 07:25:58 UTC
✓ pass component-created

**/save-button/**/*.ts exists as expected

✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✗ fail no-alert-service

Write called 1x (expected 0..0)

✗ fail uses-toast-or-notification

Write called 0x (expected 1..∞)

Prompt

Create a new standalone component SaveButton in src/app/save-button/ with a button that, when clicked, shows the user a transient success message that says "Saved". Use Taiga UI for both the button and the message.

Graders — what "good" means for this case
component-createdfile_exists
path"**/save-button/**/*.ts"
existstrue
no-alert-service-edittool_used
tool"Edit"
input_match"TuiAlertService"
min0
max0
arm"both"
no-alert-servicetool_used
tool"Write"
input_match"TuiAlertService"
min0
max0
arm"both"
skill-firedtool_used
tool"Skill"
input_match"taiga-ui(?!-)"
arm"with-only"
uses-toast-or-notificationtool_used
tool"Write"
input_match"TuiNotificationService|TuiToastService|tuiToast|tuiNotification"
min1

11-form-validation

evals/11-form-validation ↑ +33.3 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 11 turns · $0.12 · 07:26:03 UTC
✓ pass component-created

**/sign-up/**/*.ts exists as expected

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✓ pass no-field-error-pipe

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-textfield-wrapper

Write called 2x (expected 1..∞)

✓ pass uses-tui-input

Write called 1x (expected 1..∞)

✓ pass uses-validation-errors

Write called 2x (expected 1..∞)

Run 2 100% 13 turns · $0.11 · 07:26:08 UTC
✓ pass component-created

**/sign-up/**/*.ts exists as expected

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✓ pass no-field-error-pipe

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-textfield-wrapper

Write called 2x (expected 1..∞)

✓ pass uses-tui-input

Write called 1x (expected 1..∞)

✓ pass uses-validation-errors

Write called 2x (expected 1..∞)

Run 3 100% 12 turns · $0.12 · 07:26:12 UTC
✓ pass component-created

**/sign-up/**/*.ts exists as expected

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✓ pass no-field-error-pipe

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-textfield-wrapper

Write called 2x (expected 1..∞)

✓ pass uses-tui-input

Write called 1x (expected 1..∞)

✓ pass uses-validation-errors

Write called 2x (expected 1..∞)

Baseline (no plugin) 66.7% 0% of runs perfect
Run 1 66.7% 9 turns · $0.09 · 07:26:13 UTC
✓ pass component-created

**/sign-up/**/*.ts exists as expected

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✗ fail no-field-error-pipe

Write called 1x (expected 0..0)

✓ pass uses-textfield-wrapper

Write called 2x (expected 1..∞)

✗ fail uses-tui-input

Write called 0x (expected 1..∞)

✓ pass uses-validation-errors

Write called 2x (expected 1..∞)

Run 2 66.7% 6 turns · $0.08 · 07:26:19 UTC
✓ pass component-created

**/sign-up/**/*.ts exists as expected

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✗ fail no-field-error-pipe

Write called 1x (expected 0..0)

✓ pass uses-textfield-wrapper

Write called 2x (expected 1..∞)

✗ fail uses-tui-input

Write called 0x (expected 1..∞)

✓ pass uses-validation-errors

Write called 2x (expected 1..∞)

Run 3 66.7% 8 turns · $0.08 · 07:26:27 UTC
✓ pass component-created

**/sign-up/**/*.ts exists as expected

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✗ fail no-field-error-pipe

Write called 1x (expected 0..0)

✓ pass uses-textfield-wrapper

Write called 2x (expected 1..∞)

✗ fail uses-tui-input

Write called 0x (expected 1..∞)

✓ pass uses-validation-errors

Write called 2x (expected 1..∞)

Prompt

Create a new standalone component SignUp in src/app/sign-up/ with a reactive form that has a single email field. The field is required and must be a valid email address, and an inline validation message appears under it when the input is invalid. Use Taiga UI form components.

Graders — what "good" means for this case
component-createdfile_exists
path"**/sign-up/**/*.ts"
existstrue
no-field-error-pipe-edittool_used
tool"Edit"
input_match"tuiFieldError"
min0
max0
arm"both"
no-field-error-pipetool_used
tool"Write"
input_match"tuiFieldError"
min0
max0
arm"both"
skill-firedtool_used
tool"Skill"
input_match"taiga-ui(?!-)"
arm"with-only"
uses-textfield-wrappertool_used
tool"Write"
input_match"[Tt]ui-?[Tt]extfield"
min1
uses-tui-inputtool_used
tool"Write"
input_match"tuiInput"
min1
uses-validation-errorstool_used
tool"Write"
input_match"tuiValidationErrorsProvider|tui-error"
min1

12-slider

evals/12-slider ↑ +25.0 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 9 turns · $0.09 · 07:26:32 UTC
✓ pass component-created

**/volume-control/**/*.ts exists as expected

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass slider-not-from-kit-edit

Edit called 0x (expected 0..0)

✓ pass slider-not-from-kit

Write called 0x (expected 0..0)

✓ pass uses-slider

Write called 2x (expected 1..∞)

Run 2 100% 9 turns · $0.09 · 07:26:38 UTC
✓ pass component-created

**/volume-control/**/*.ts exists as expected

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass slider-not-from-kit-edit

Edit called 0x (expected 0..0)

✓ pass slider-not-from-kit

Write called 0x (expected 0..0)

✓ pass uses-slider

Write called 2x (expected 1..∞)

Run 3 100% 10 turns · $0.11 · 07:26:38 UTC
✓ pass component-created

**/volume-control/**/*.ts exists as expected

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass slider-not-from-kit-edit

Edit called 0x (expected 0..0)

✓ pass slider-not-from-kit

Write called 0x (expected 0..0)

✓ pass uses-slider

Write called 2x (expected 1..∞)

Baseline (no plugin) 75% 0% of runs perfect
Run 1 75% 7 turns · $0.08 · 07:26:47 UTC
✓ pass component-created

**/volume-control/**/*.ts exists as expected

✓ pass slider-not-from-kit-edit

Edit called 0x (expected 0..0)

✗ fail slider-not-from-kit

Write called 1x (expected 0..0)

✓ pass uses-slider

Write called 2x (expected 1..∞)

Run 2 75% 7 turns · $0.08 · 07:26:49 UTC
✓ pass component-created

**/volume-control/**/*.ts exists as expected

✓ pass slider-not-from-kit-edit

Edit called 0x (expected 0..0)

✗ fail slider-not-from-kit

Write called 1x (expected 0..0)

✓ pass uses-slider

Write called 2x (expected 1..∞)

Run 3 75% 8 turns · $0.07 · 07:26:51 UTC
✓ pass component-created

**/volume-control/**/*.ts exists as expected

✓ pass slider-not-from-kit-edit

Edit called 0x (expected 0..0)

✗ fail slider-not-from-kit

Write called 1x (expected 0..0)

✓ pass uses-slider

Write called 2x (expected 1..∞)

Prompt

Create a new standalone component VolumeControl in src/app/volume-control/ with a slider the user can drag from 0 to 100, bound to a signal that holds the current value. Use the Taiga UI slider component.

Graders — what "good" means for this case
component-createdfile_exists
path"**/volume-control/**/*.ts"
existstrue
skill-firedtool_used
tool"Skill"
input_match"taiga-ui(?!-)"
arm"with-only"
slider-not-from-kit-edittool_used
tool"Edit"
input_match"import\\s*\\{[^}]*TuiSlider[^}]*\\}\\s*from\\s*[\\x27\\\"]@taiga-ui/kit"
min0
max0
arm"both"
slider-not-from-kittool_used
tool"Write"
input_match"import\\s*\\{[^}]*TuiSlider[^}]*\\}\\s*from\\s*[\\x27\\\"]@taiga-ui/kit"
min0
max0
arm"both"
uses-slidertool_used
tool"Write"
input_match"[Tt]ui-?(?:[Ii]nput-?)?[Ss]lider"
min1

13-custom-dialog

evals/13-custom-dialog · 0.0 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 13 turns · $0.11 · 07:26:56 UTC
✓ pass component-created

**/edit-name/**/*.ts exists as expected

✓ pass no-invented-data-token-edit

Edit called 0x (expected 0..0)

✓ pass no-invented-data-token

Write called 0x (expected 0..0)

✓ pass reads-polymorpheus-context

Write called 1x (expected 1..∞)

✓ pass returns-via-complete-with

Write called 1x (expected 1..∞)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-dialog-service

Write called 1x (expected 1..∞)

Baseline (no plugin) 100% 100% of runs perfect
Run 1 100% 6 turns · $0.10 · 07:27:04 UTC
✓ pass component-created

**/edit-name/**/*.ts exists as expected

✓ pass no-invented-data-token-edit

Edit called 0x (expected 0..0)

✓ pass no-invented-data-token

Write called 0x (expected 0..0)

✓ pass reads-polymorpheus-context

Write called 1x (expected 1..∞)

✓ pass returns-via-complete-with

Write called 1x (expected 1..∞)

✓ pass uses-dialog-service

Write called 1x (expected 1..∞)

Prompt

Create a new standalone component EditName in src/app/edit-name/ with an "Edit name" button. Clicking it opens a Taiga UI dialog that renders a separate custom dialog component; that dialog receives the current name as its input data, lets the user type a new name, and returns the new name to the caller when confirmed. Use Taiga UI's dialog service.

Graders — what "good" means for this case
component-createdfile_exists
path"**/edit-name/**/*.ts"
existstrue
no-invented-data-token-edittool_used
tool"Edit"
input_match"TUI_DIALOG_DATA|MAT_DIALOG_DATA"
min0
max0
arm"both"
no-invented-data-tokentool_used
tool"Write"
input_match"TUI_DIALOG_DATA|MAT_DIALOG_DATA"
min0
max0
arm"both"
reads-polymorpheus-contexttool_used
tool"Write"
input_match"injectContext|POLYMORPHEUS_CONTEXT"
min1
returns-via-complete-withtool_used
tool"Write"
input_match"completeWith"
min1
skill-firedtool_used
tool"Skill"
input_match"taiga-ui(?!-)"
arm"with-only"
uses-dialog-servicetool_used
tool"Write"
input_match"TuiDialogService"
min1

14-checkbox

evals/14-checkbox ↑ +14.3 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 9 turns · $0.09 · 07:27:05 UTC
✓ pass binds-through-form

Write called 1x (expected 1..∞)

✓ pass checkbox-not-from-kit-edit

Edit called 0x (expected 0..0)

✓ pass checkbox-not-from-kit

Write called 0x (expected 0..0)

✓ pass component-created

**/terms-consent/**/*.ts exists as expected

✓ pass no-native-checked-edit

Edit called 0x (expected 0..0)

✓ pass no-native-checked

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-checkbox

Write called 1x (expected 1..∞)

Run 2 100% 8 turns · $0.09 · 07:27:06 UTC
✓ pass binds-through-form

Write called 1x (expected 1..∞)

✓ pass checkbox-not-from-kit-edit

Edit called 0x (expected 0..0)

✓ pass checkbox-not-from-kit

Write called 0x (expected 0..0)

✓ pass component-created

**/terms-consent/**/*.ts exists as expected

✓ pass no-native-checked-edit

Edit called 0x (expected 0..0)

✓ pass no-native-checked

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-checkbox

Write called 1x (expected 1..∞)

Run 3 100% 11 turns · $0.10 · 07:27:18 UTC
✓ pass binds-through-form

Write called 1x (expected 1..∞)

✓ pass checkbox-not-from-kit-edit

Edit called 0x (expected 0..0)

✓ pass checkbox-not-from-kit

Write called 0x (expected 0..0)

✓ pass component-created

**/terms-consent/**/*.ts exists as expected

✓ pass no-native-checked-edit

Edit called 0x (expected 0..0)

✓ pass no-native-checked

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-checkbox

Write called 1x (expected 1..∞)

Baseline (no plugin) 85.7% 0% of runs perfect
Run 1 85.7% 6 turns · $0.07 · 07:27:19 UTC
✓ pass binds-through-form

Write called 1x (expected 1..∞)

✓ pass checkbox-not-from-kit-edit

Edit called 0x (expected 0..0)

✗ fail checkbox-not-from-kit

Write called 1x (expected 0..0)

✓ pass component-created

**/terms-consent/**/*.ts exists as expected

✓ pass no-native-checked-edit

Edit called 0x (expected 0..0)

✓ pass no-native-checked

Write called 0x (expected 0..0)

✓ pass uses-checkbox

Write called 1x (expected 1..∞)

Run 2 85.7% 8 turns · $0.07 · 07:27:21 UTC
✓ pass binds-through-form

Write called 1x (expected 1..∞)

✓ pass checkbox-not-from-kit-edit

Edit called 0x (expected 0..0)

✗ fail checkbox-not-from-kit

Write called 1x (expected 0..0)

✓ pass component-created

**/terms-consent/**/*.ts exists as expected

✓ pass no-native-checked-edit

Edit called 0x (expected 0..0)

✓ pass no-native-checked

Write called 0x (expected 0..0)

✓ pass uses-checkbox

Write called 1x (expected 1..∞)

Run 3 85.7% 6 turns · $0.07 · 07:27:27 UTC
✓ pass binds-through-form

Write called 1x (expected 1..∞)

✓ pass checkbox-not-from-kit-edit

Edit called 0x (expected 0..0)

✗ fail checkbox-not-from-kit

Write called 1x (expected 0..0)

✓ pass component-created

**/terms-consent/**/*.ts exists as expected

✓ pass no-native-checked-edit

Edit called 0x (expected 0..0)

✓ pass no-native-checked

Write called 0x (expected 0..0)

✓ pass uses-checkbox

Write called 1x (expected 1..∞)

Prompt

Create a new standalone component TermsConsent in src/app/terms-consent/ with a checkbox labelled "I accept the terms" that the user can check and uncheck. The checked state must be bound to a signal that reflects whether the box is currently ticked, and toggling the box must update that signal. Use the Taiga UI checkbox component.

Graders — what "good" means for this case
binds-through-formtool_used
tool"Write"
input_match"ngModel|formControl"
min1
checkbox-not-from-kit-edittool_used
tool"Edit"
input_match"import\\s*\\{[^}]*TuiCheckbox[^}]*\\}\\s*from\\s*[\\x27\\\"]@taiga-ui/kit"
min0
max0
arm"both"
checkbox-not-from-kittool_used
tool"Write"
input_match"import\\s*\\{[^}]*TuiCheckbox[^}]*\\}\\s*from\\s*[\\x27\\\"]@taiga-ui/kit"
min0
max0
arm"both"
component-createdfile_exists
path"**/terms-consent/**/*.ts"
existstrue
no-native-checked-edittool_used
tool"Edit"
input_match"\\[checked\\]"
min0
max0
arm"both"
no-native-checkedtool_used
tool"Write"
input_match"\\[checked\\]"
min0
max0
arm"both"
skill-firedtool_used
tool"Skill"
input_match"taiga-ui(?!-)"
arm"with-only"
uses-checkboxtool_used
tool"Write"
input_match"tuiCheckbox"
min1

15-styling-danger

evals/15-styling-danger · 0.0 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 10 turns · $0.11 · 07:27:32 UTC
✓ pass component-created

**/danger-zone/**/*.ts exists as expected

✓ pass no-bare-destructive-edit

Edit called 0x (expected 0..0)

✓ pass no-bare-destructive

Write called 0x (expected 0..0)

✓ pass no-hardcoded-color-edit

Edit called 0x (expected 0..0)

✓ pass no-hardcoded-color

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-destructive-appearance

Write called 1x (expected 1..∞)

Run 2 100% 11 turns · $0.12 · 07:27:32 UTC
✓ pass component-created

**/danger-zone/**/*.ts exists as expected

✓ pass no-bare-destructive-edit

Edit called 0x (expected 0..0)

✓ pass no-bare-destructive

Write called 0x (expected 0..0)

✓ pass no-hardcoded-color-edit

Edit called 0x (expected 0..0)

✓ pass no-hardcoded-color

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-destructive-appearance

Write called 1x (expected 1..∞)

Run 3 100% 12 turns · $0.13 · 07:27:33 UTC
✓ pass component-created

**/danger-zone/**/*.ts exists as expected

✓ pass no-bare-destructive-edit

Edit called 0x (expected 0..0)

✓ pass no-bare-destructive

Write called 0x (expected 0..0)

✓ pass no-hardcoded-color-edit

Edit called 0x (expected 0..0)

✓ pass no-hardcoded-color

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-destructive-appearance

Write called 1x (expected 1..∞)

Baseline (no plugin) 100% 100% of runs perfect
Run 1 100% 8 turns · $0.10 · 07:27:41 UTC
✓ pass component-created

**/danger-zone/**/*.ts exists as expected

✓ pass no-bare-destructive-edit

Edit called 0x (expected 0..0)

✓ pass no-bare-destructive

Write called 0x (expected 0..0)

✓ pass no-hardcoded-color-edit

Edit called 0x (expected 0..0)

✓ pass no-hardcoded-color

Write called 0x (expected 0..0)

✓ pass uses-destructive-appearance

Write called 1x (expected 1..∞)

Run 2 100% 7 turns · $0.09 · 07:27:49 UTC
✓ pass component-created

**/danger-zone/**/*.ts exists as expected

✓ pass no-bare-destructive-edit

Edit called 0x (expected 0..0)

✓ pass no-bare-destructive

Write called 0x (expected 0..0)

✓ pass no-hardcoded-color-edit

Edit called 0x (expected 0..0)

✓ pass no-hardcoded-color

Write called 0x (expected 0..0)

✓ pass uses-destructive-appearance

Write called 1x (expected 1..∞)

Run 3 100% 7 turns · $0.09 · 07:27:55 UTC
✓ pass component-created

**/danger-zone/**/*.ts exists as expected

✓ pass no-bare-destructive-edit

Edit called 0x (expected 0..0)

✓ pass no-bare-destructive

Write called 0x (expected 0..0)

✓ pass no-hardcoded-color-edit

Edit called 0x (expected 0..0)

✓ pass no-hardcoded-color

Write called 0x (expected 0..0)

✓ pass uses-destructive-appearance

Write called 1x (expected 1..∞)

Prompt

Create a new standalone component DangerZone in src/app/danger-zone/ for an account-settings page. It shows a "Danger zone" section, set clearly apart from the rest of the page as risky, with a short warning line, a primary "Delete account" button that reads as a destructive action, and a low-emphasis "Cancel" button beside it. Use Taiga UI.

Graders — what "good" means for this case
component-createdfile_exists
path"**/danger-zone/**/*.ts"
existstrue
no-bare-destructive-edittool_used
tool"Edit"
input_match"appearance\\]?=[\\\\\\\"\\x27\\s]{0,4}destructive\\b"
min0
max0
arm"both"
no-bare-destructivetool_used
tool"Write"
input_match"appearance\\]?=[\\\\\\\"\\x27\\s]{0,4}destructive\\b"
min0
max0
arm"both"
no-hardcoded-color-edittool_used
tool"Edit"
input_match"(?:color|background|background-color|border|border-color|fill|stroke|box-shadow|outline)\\s*:\\s*(?![^;\\n]*var\\()[^;\\n]*(?:#[0-9a-fA-F]{3,8}\\b|\\brgba?\\(|\\b(?:crimson|red)\\b)"
min0
max0
arm"both"
no-hardcoded-colortool_used
tool"Write"
input_match"(?:color|background|background-color|border|border-color|fill|stroke|box-shadow|outline)\\s*:\\s*(?![^;\\n]*var\\()[^;\\n]*(?:#[0-9a-fA-F]{3,8}\\b|\\brgba?\\(|\\b(?:crimson|red)\\b)"
min0
max0
arm"both"
skill-firedtool_used
tool"Skill"
input_match"taiga-ui(?!-)"
arm"with-only"
uses-destructive-appearancetool_used
tool"Write"
input_match"appearance\\]?=[\\\\\\\"\\x27\\s]{0,4}(?:\\w+-destructive|negative)\\b"
min1

16-mini-crm

evals/16-mini-crm ↑ +22.2 pts with plugin 100%
Results
With plugin 100% 100% of runs perfect
Run 1 100% 14 turns · $0.21 · 07:27:59 UTC
✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✓ pass no-alert-service

Write called 0x (expected 0..0)

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✓ pass no-field-error-pipe

Write called 0x (expected 0..0)

✓ pass no-invented-data-token-edit

Edit called 0x (expected 0..0)

✓ pass no-invented-data-token

Write called 0x (expected 0..0)

✓ pass no-invented-dropdown-directive-edit

Edit called 0x (expected 0..0)

✓ pass no-invented-dropdown-directive

Write called 0x (expected 0..0)

✓ pass no-show-loader-edit

Edit called 0x (expected 0..0)

✓ pass no-show-loader

Write called 0x (expected 0..0)

✓ pass skill-fired plugin-fired indicator

Skill called 1x (expected 1..∞)

✓ pass uses-confirm

Write called 1x (expected 1..∞)

✓ pass uses-dialog-service

Write called 1x (expected 1..∞)

✓ pass uses-loading-button

Write called 1x (expected 1..∞)

✓ pass uses-notification

Write called 1x (expected 1..∞)

✓ pass uses-select

Write called 2x (expected 1..∞)

✓ pass uses-textfield

Write called 2x (expected 1..∞)

✓ pass uses-validation-error

Write called 2x (expected 1..∞)

✓ pass writes-component

Write called 2x (expected 1..∞)

Baseline (no plugin) 77.8% 0% of runs perfect
Run 1 77.8% 9 turns · $0.17 · 07:28:09 UTC
✓ pass no-alert-service-edit

Edit called 0x (expected 0..0)

✗ fail no-alert-service

Write called 1x (expected 0..0)

✓ pass no-field-error-pipe-edit

Edit called 0x (expected 0..0)

✗ fail no-field-error-pipe

Write called 1x (expected 0..0)

✓ pass no-invented-data-token-edit

Edit called 0x (expected 0..0)

✓ pass no-invented-data-token

Write called 0x (expected 0..0)

✓ pass no-invented-dropdown-directive-edit

Edit called 0x (expected 0..0)

✗ fail no-invented-dropdown-directive

Write called 1x (expected 0..0)

✓ pass no-show-loader-edit

Edit called 0x (expected 0..0)

✓ pass no-show-loader

Write called 0x (expected 0..0)

✓ pass uses-confirm

Write called 1x (expected 1..∞)

✓ pass uses-dialog-service

Write called 1x (expected 1..∞)

✓ pass uses-loading-button

Write called 1x (expected 1..∞)

✗ fail uses-notification

Write called 0x (expected 1..∞)

✓ pass uses-select

Write called 2x (expected 1..∞)

✓ pass uses-textfield

Write called 2x (expected 1..∞)

✓ pass uses-validation-error

Write called 2x (expected 1..∞)

✓ pass writes-component

Write called 2x (expected 1..∞)

Prompt

Build a small single-screen Contacts manager (a mini-CRM) and wire it into the app's root route so it renders at /. Make it feel like a real, usable screen — use the UI library's own components for everything (modal dialogs, form fields, validation messages, dropdown/select, buttons, notifications) and prefer the library's primitives over hand-rolled HTML controls or custom CSS.

Features:

  1. <strong>Contact list.</strong> Show a list of contacts, seeded with 2–3 examples. Each contact has a full name, an email, and a role (one of: Owner, Editor, Viewer). Show a friendly empty state when there are no contacts.

  2. <strong>Add contact (modal dialog with a form that returns a value).</strong> An "Add contact" button opens a <strong>modal dialog</strong> containing a reactive form:

    • a name field,
    • an email field that is required and must be a valid email, showing an inline validation error message when invalid,
    • a role picker (a dropdown/select of the three roles). The dialog has "Save" and "Cancel". "Save" is blocked while the form is invalid; pressing it runs a simulated async save (~1 second) during which the Save button shows a loading state, then the dialog closes and returns the new contact to the caller, which appends it to the list. "Cancel" closes the dialog without changes.
  3. <strong>Delete with confirmation + notification.</strong> Each contact row has a "Delete" action that first asks the user to <strong>confirm</strong> in a dialog; only on confirmation is the contact removed, after which a brief <strong>success notification</strong> is shown.

Keep everything in standalone components under src/app/. The result must compile and run.

Graders — what "good" means for this case
no-alert-service-edittool_used
tool"Edit"
input_match"TuiAlertService"
min0
max0
arm"both"
no-alert-servicetool_used
tool"Write"
input_match"TuiAlertService"
min0
max0
arm"both"
no-field-error-pipe-edittool_used
tool"Edit"
input_match"tuiFieldError"
min0
max0
arm"both"
no-field-error-pipetool_used
tool"Write"
input_match"tuiFieldError"
min0
max0
arm"both"
no-invented-data-token-edittool_used
tool"Edit"
input_match"TUI_DIALOG_DATA|MAT_DIALOG_DATA"
min0
max0
arm"both"
no-invented-data-tokentool_used
tool"Write"
input_match"TUI_DIALOG_DATA|MAT_DIALOG_DATA"
min0
max0
arm"both"
no-invented-dropdown-directive-edittool_used
tool"Edit"
input_match"tuiTextfieldDropdown"
min0
max0
arm"both"
no-invented-dropdown-directivetool_used
tool"Write"
input_match"tuiTextfieldDropdown"
min0
max0
arm"both"
no-show-loader-edittool_used
tool"Edit"
input_match"\\[showLoader\\]"
min0
max0
arm"both"
no-show-loadertool_used
tool"Write"
input_match"\\[showLoader\\]"
min0
max0
arm"both"
skill-firedtool_used
tool"Skill"
input_match"taiga-ui(?!-)"
arm"with-only"
uses-confirmtool_used
tool"Write"
input_match"TUI_CONFIRM|TuiConfirmService"
min1
uses-dialog-servicetool_used
tool"Write"
input_match"TuiDialogService"
min1
uses-loading-buttontool_used
tool"Write"
input_match"TuiButtonLoading"
min1
uses-notificationtool_used
tool"Write"
input_match"TuiNotificationService|TuiToastService|tuiToast"
min1
uses-selecttool_used
tool"Write"
input_match"tuiSelect|TuiSelectDirective|TuiDataListWrapper"
min1
uses-textfieldtool_used
tool"Write"
input_match"[Tt]ui-?[Tt]extfield"
min1
uses-validation-errortool_used
tool"Write"
input_match"tui-error|TuiError"
min1
writes-componenttool_used
tool"Write"
input_match"@Component"
min1