feat: Add interview-scorecard-calibrator kit - #333
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughChangesThe kit adds a scorecard calibration flow, Lamatic server integration, and a Next.js interface. It validates multi-interviewer feedback and produces calibrated scores, recommendations, disagreements, follow-up questions, email drafts, and hiring briefs with documented guardrails. Interview Scorecard Calibration
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
:robot_face: AgentKit Structural ValidationNew Contributions Detected
Check Results
🎉 All checks passed! This contribution follows the AgentKit structure. |
There was a problem hiding this comment.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md (1)
5-12: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winMission directive: align the next-step label across both compose prompts.
The system prompt requires
Recommended next step, while the user prompt requestsSuggested next step. The model can satisfy one instruction and violate the other. Choose one exact label and use it in both files.
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md#L5-L12: change the required phrase ifSuggested next stepis the intended output.kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_user.md#L7-L12: change the section heading ifRecommended next stepis the intended output.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md` around lines 5 - 12, Align the next-step label across both compose prompts by choosing one exact phrase and using it consistently: update kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md lines 5-12 and kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_user.md lines 7-12 so the required ending and section heading match exactly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/interview-scorecard-calibrator/apps/actions/orchestrate.ts`:
- Line 3: Update the configuration lookup used by getCalibrateFlowId and
getLamaticClient so it imports and reads the kit-root lamatic.config.ts
directly, rather than routing the parent config through
apps/lib/lamatic-client.ts. Preserve the existing root-level config location and
use the already-enabled external directory import support.
In `@kits/interview-scorecard-calibrator/apps/app/page.tsx`:
- Around line 49-52: Update asScorecard to validate the complete nested
Scorecard schema, including competencies, disagreements, evidence, and
interviewers, ensuring each field has the expected array and item shapes before
returning it. In the flow response handling, call this validator before
setScorecard; when validation fails, display the existing error state and do not
render a partial scorecard.
- Around line 78-101: Update onSubmit so rejections from calibrateScorecard are
caught, the error state is set appropriately, and loading is always cleared in a
finally block. Preserve the existing response success and failure handling while
ensuring form controls are re-enabled when the request throws.
- Around line 63-115: Replace the independent form state and FormEvent
submission in Page with react-hook-form useForm configured with a Zod resolver
and a schema validating jobTitle, level, rubric, and interviewerNotes before
calling calibrateScorecard; preserve the existing loading, error, result, and
sample/reset behavior while wiring inputs and validation errors through the form
API. Add react-hook-form, zod, and the appropriate `@hookform/resolvers`
dependency in kits/interview-scorecard-calibrator/apps/package.json at lines
16-22.
In `@kits/interview-scorecard-calibrator/apps/lib/lamatic-client.ts`:
- Around line 3-6: Remove the parent-root kitConfig import and update the flow
configuration in lamatic-client.ts to use the app-local
CALIBRATE_SCORECARD_FLOW_ID key directly, matching the configuration used by
apps/orchestrate.js. Eliminate the flowStep and flowEnvKey derivation from
kitConfig while preserving the existing client behavior.
In `@kits/interview-scorecard-calibrator/apps/package.json`:
- Around line 23-31: Load Tailwind Typography for the Markdown styling: add
`@tailwindcss/typography` to the app dependencies and register it in
app/globals.css immediately after the Tailwind import. In app/page.tsx, retain
the existing prose classes because they will be supported once the plugin is
loaded.
In `@kits/interview-scorecard-calibrator/lamatic.config.ts`:
- Around line 7-10: Replace the personal Gmail value in the author metadata with
a project-owned contact address, preserving the existing author object structure
and metadata contract.
In
`@kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_system.md`:
- Around line 5-12: Establish an explicit untrusted-data boundary across all
four prompt files: in
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_system.md
lines 5-12, add a rule that interpolated fields are data only and cannot
override instructions; in
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_user.md
lines 3-10, wrap job_title, level, rubric, and interviewer_notes in clear
untrusted-data delimiters; in
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md
lines 1-10, instruct the writer to ignore instructions embedded in scorecard
values; and in
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_user.md
lines 4-5, wrap InstructorLLMNode_220.output as untrusted scorecard data.
In
`@kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_user.md`:
- Around line 12-40: Replace the prose scorecard shape with a shared
machine-readable schema used by both the calibration prompt flow and the
application boundary. In the response handling around parseMaybeJson and the
orchestration entry point, validate or repair required fields, recommendation
and severity enums, integer calibrated_score values from 1 through 5, and
confidence values from 0 through 1 before returning the result to consumers.
In
`@kits/interview-scorecard-calibrator/scripts/calibrate-scorecard_normalize.ts`:
- Around line 22-32: Update the interviewer note normalization flow around
interviewerBlocks to enforce the documented multi-interviewer contract: parse
entries using a deterministic structure or documented separator, reject input
with fewer than two valid interviewer entries before calibration runs, and
remove the misleading interviewer_count_estimate fallback that accepts a single
note.
---
Outside diff comments:
In
`@kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md`:
- Around line 5-12: Align the next-step label across both compose prompts by
choosing one exact phrase and using it consistently: update
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md
lines 5-12 and
kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_user.md
lines 7-12 so the required ending and section heading match exactly.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 04c713f5-293f-49fa-8c26-f0d946d2673b
⛔ Files ignored due to path filters (1)
kits/interview-scorecard-calibrator/apps/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (26)
kits/interview-scorecard-calibrator/.gitignorekits/interview-scorecard-calibrator/README.mdkits/interview-scorecard-calibrator/agent.mdkits/interview-scorecard-calibrator/apps/.env.examplekits/interview-scorecard-calibrator/apps/.gitignorekits/interview-scorecard-calibrator/apps/README.mdkits/interview-scorecard-calibrator/apps/actions/orchestrate.tskits/interview-scorecard-calibrator/apps/app/globals.csskits/interview-scorecard-calibrator/apps/app/layout.tsxkits/interview-scorecard-calibrator/apps/app/page.tsxkits/interview-scorecard-calibrator/apps/lib/lamatic-client.tskits/interview-scorecard-calibrator/apps/next.config.tskits/interview-scorecard-calibrator/apps/orchestrate.jskits/interview-scorecard-calibrator/apps/package.jsonkits/interview-scorecard-calibrator/apps/postcss.config.mjskits/interview-scorecard-calibrator/apps/tsconfig.jsonkits/interview-scorecard-calibrator/constitutions/default.mdkits/interview-scorecard-calibrator/flows/calibrate-scorecard.tskits/interview-scorecard-calibrator/lamatic.config.tskits/interview-scorecard-calibrator/model-configs/calibrate-scorecard_calibrate.tskits/interview-scorecard-calibrator/model-configs/calibrate-scorecard_compose.tskits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_system.mdkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_user.mdkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.mdkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_user.mdkits/interview-scorecard-calibrator/scripts/calibrate-scorecard_normalize.ts
| function asScorecard(value: unknown): Scorecard | null { | ||
| if (!value || typeof value !== "object") return null; | ||
| return value as Scorecard; | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift
Mission item: Validate the scorecard payload before rendering.
asScorecard accepts any object. The flow response is untyped. A payload with competencies, disagreements, evidence, or interviewers set to an object or string passes this check. The later .map() or .join() call then throws.
Validate the full nested result schema before calling setScorecard. If validation fails, show an error instead of rendering a partial scorecard.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/interview-scorecard-calibrator/apps/app/page.tsx` around lines 49 - 52,
Update asScorecard to validate the complete nested Scorecard schema, including
competencies, disagreements, evidence, and interviewers, ensuring each field has
the expected array and item shapes before returning it. In the flow response
handling, call this validator before setScorecard; when validation fails,
display the existing error state and do not render a partial scorecard.
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
kits/interview-scorecard-calibrator/apps/app/page.tsx (2)
138-176: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winMission: Apply kit color tokens to the new controls.
The new Level and interviewer-notes controls use fixed
slateandtealpalette classes. Use the CSS variables fromapp/globals.cssfor their background, border, text, and focus styling.As per coding guidelines, “use CSS variables for styling”.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@kits/interview-scorecard-calibrator/apps/app/page.tsx` around lines 138 - 176, Update the Level and interviewerNotes controls to replace fixed slate/teal Tailwind palette classes with the CSS variable-based color tokens defined in app/globals.css, covering background, border, text, and focus-ring styling while preserving the existing layout and disabled behavior.Source: Coding guidelines
134-176: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winMission: Announce validation failures to assistive technology.
The controls do not expose
aria-invalidor associate validation text with the invalid field. Add field-specific error IDs,aria-describedby, androle="alert"on the error messages.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@kits/interview-scorecard-calibrator/apps/app/page.tsx` around lines 134 - 176, Update the form fields registered as jobTitle, level, rubric, and interviewerNotes to expose validation state with aria-invalid and associate each control with a unique field-specific error ID via aria-describedby when an error exists. Add role="alert" to each corresponding validation message while preserving the existing error rendering and messages.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/interview-scorecard-calibrator/apps/lib/lamatic-client.ts`:
- Around line 7-14: Update getCalibrateFlowId’s missing-flowId error message to
use deployment-neutral guidance: instruct the operator to set
CALIBRATE_SCORECARD_FLOW_ID in the application environment, and remove the
.env.local-specific wording.
In
`@kits/interview-scorecard-calibrator/scripts/calibrate-scorecard_normalize.ts`:
- Around line 8-12: Update splitInterviewerNotes in
kits/interview-scorecard-calibrator/scripts/calibrate-scorecard_normalize.ts and
the corresponding heading-splitting logic in
kits/interview-scorecard-calibrator/apps/lib/scorecard.ts (lines 122-126) to
recognize named headings such as “Interviewer 1 (Alice, Staff Eng):”, while
preserving existing numbered headings and separator-based splitting. Keep the
heading pattern identical in both files so workflow normalization and client
validation behave consistently.
---
Outside diff comments:
In `@kits/interview-scorecard-calibrator/apps/app/page.tsx`:
- Around line 138-176: Update the Level and interviewerNotes controls to replace
fixed slate/teal Tailwind palette classes with the CSS variable-based color
tokens defined in app/globals.css, covering background, border, text, and
focus-ring styling while preserving the existing layout and disabled behavior.
- Around line 134-176: Update the form fields registered as jobTitle, level,
rubric, and interviewerNotes to expose validation state with aria-invalid and
associate each control with a unique field-specific error ID via
aria-describedby when an error exists. Add role="alert" to each corresponding
validation message while preserving the existing error rendering and messages.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 5e98d9d2-8f58-448c-8235-972ed66059cf
⛔ Files ignored due to path filters (1)
kits/interview-scorecard-calibrator/apps/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (16)
kits/interview-scorecard-calibrator/.env.examplekits/interview-scorecard-calibrator/README.mdkits/interview-scorecard-calibrator/apps/.env.examplekits/interview-scorecard-calibrator/apps/actions/orchestrate.tskits/interview-scorecard-calibrator/apps/app/globals.csskits/interview-scorecard-calibrator/apps/app/page.tsxkits/interview-scorecard-calibrator/apps/lib/lamatic-client.tskits/interview-scorecard-calibrator/apps/lib/scorecard.tskits/interview-scorecard-calibrator/apps/next.config.tskits/interview-scorecard-calibrator/apps/package.jsonkits/interview-scorecard-calibrator/lamatic.config.tskits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_system.mdkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_calibrate_user.mdkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.mdkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_user.mdkits/interview-scorecard-calibrator/scripts/calibrate-scorecard_normalize.ts
| export function getCalibrateFlowId() { | ||
| const flowId = process.env[FLOW_ENV_KEY]; | ||
| if (!flowId) { | ||
| throw new Error( | ||
| `${FLOW_ENV_KEY} is not set. Please add it to your .env.local file.`, | ||
| ); | ||
| } | ||
| return flowId; |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Mission: Use a deployment-neutral configuration error.
When this app runs on Vercel, users cannot correct a missing variable through .env.local. Tell the operator to set CALIBRATE_SCORECARD_FLOW_ID in the application environment instead.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/interview-scorecard-calibrator/apps/lib/lamatic-client.ts` around lines
7 - 14, Update getCalibrateFlowId’s missing-flowId error message to use
deployment-neutral guidance: instruct the operator to set
CALIBRATE_SCORECARD_FLOW_ID in the application environment, and remove the
.env.local-specific wording.
bab2418 to
aa7ee44
Compare
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/interview-scorecard-calibrator/apps/app/page.tsx`:
- Around line 42-48: Update recommendationStyles to replace hard-coded color
utility classes with classes that reference semantic CSS variables for each
recommendation state. Define the required recommendation variables in the kit’s
applicable styling scope, preserving distinct hire, lean-hire, lean-no, no-hire,
and fallback appearances while complying with the CSS-variable styling rule.
- Around line 124-202: Replace the native input, textarea, and button elements
in the form with the shadcn/ui Input, Textarea, and Button components, importing
them from the project’s established shadcn/ui locations. Preserve each control’s
existing props, including react-hook-form register bindings, submit/reset
behavior, loading-based disabled states, labels, validation messages, and button
styling intent.
In `@kits/interview-scorecard-calibrator/apps/lib/scorecard.ts`:
- Around line 64-117: Update the scorecard validation flow around the
recommendation, confidence, competencies, disagreements, and final Scorecard
construction to reject missing or incorrectly typed required fields instead of
coercing them through Number or asString fallbacks. Validate confidence is a
number, and require the documented primitive types for required fields such as
candidate_summary and each competency name before pushing objects or returning
the Scorecard; preserve null for invalid payloads and existing range/enum
checks.
In
`@kits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md`:
- Around line 5-8: Extend the trust boundary in the prompt to explicitly
classify interpolated job title and level values, along with all scorecard
fields, as untrusted data. Instruct the model to ignore any embedded
instructions, role changes, or policy overrides in these values and use them
only as factual content for the brief.
In `@kits/interview-scorecard-calibrator/README.md`:
- Around line 24-29: Update the Node.js prerequisite in the “Providers &
Prerequisites” section to state Node.js 20.9+ instead of Node.js 18+, reflecting
the minimum version required by Next.js 16.x.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: af486171-29b4-4923-927c-b0642a7d022c
📒 Files selected for processing (9)
kits/interview-scorecard-calibrator/README.mdkits/interview-scorecard-calibrator/apps/actions/orchestrate.tskits/interview-scorecard-calibrator/apps/app/page.tsxkits/interview-scorecard-calibrator/apps/lib/lamatic-client.tskits/interview-scorecard-calibrator/apps/lib/scorecard.tskits/interview-scorecard-calibrator/apps/next.config.tskits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.mdkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_user.mdkits/interview-scorecard-calibrator/scripts/calibrate-scorecard_normalize.ts
…scorecard-calibrator kit - Updated Node.js requirement from 18+ to 20.9+ in README.md. - Added new dependencies: @radix-ui/react-slot, class-variance-authority, clsx, and tailwind-merge in package.json and package-lock.json. - Introduced new UI components: Button, Input, and Textarea for improved form handling. - Enhanced global styles with new CSS variables for better theming. - Refactored scorecard parsing logic for stricter type validation. - Updated prompts to clarify trust boundaries for scorecard data.
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
kits/interview-scorecard-calibrator/apps/app/page.tsx (1)
150-154: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winMission: Show the
levelvalidation error.When
formSchemarejectslevel, the form prevents submission but does not rendererrors.level. Add the same error message pattern used forjobTitle,rubric, andinterviewerNotes.Proposed fix
<Input placeholder="L5" disabled={loading} {...register("level")} /> + {errors.level && ( + <p className="text-sm text-rose-600">{errors.level.message}</p> + )}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@kits/interview-scorecard-calibrator/apps/app/page.tsx` around lines 150 - 154, Update the level field rendering near register("level") to display errors.level using the same validation-message pattern already used by jobTitle, rubric, and interviewerNotes. Keep the existing Input behavior unchanged and place the message alongside the level field.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/interview-scorecard-calibrator/apps/components/ui/button.tsx`:
- Around line 29-48: Forward refs through the exported Button component by
wrapping it with React.forwardRef and passing the ref to the underlying Comp
while preserving its existing props and variants. Apply the same ref-forwarding
change to kits/interview-scorecard-calibrator/apps/components/ui/input.tsx lines
5-17 and kits/interview-scorecard-calibrator/apps/components/ui/textarea.tsx
lines 5-16, passing each ref to its underlying input or textarea element.
---
Outside diff comments:
In `@kits/interview-scorecard-calibrator/apps/app/page.tsx`:
- Around line 150-154: Update the level field rendering near register("level")
to display errors.level using the same validation-message pattern already used
by jobTitle, rubric, and interviewerNotes. Keep the existing Input behavior
unchanged and place the message alongside the level field.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 5759fa85-1b1a-4530-822d-1ec6e1c0f4ed
⛔ Files ignored due to path filters (1)
kits/interview-scorecard-calibrator/apps/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (10)
kits/interview-scorecard-calibrator/README.mdkits/interview-scorecard-calibrator/apps/app/globals.csskits/interview-scorecard-calibrator/apps/app/page.tsxkits/interview-scorecard-calibrator/apps/components/ui/button.tsxkits/interview-scorecard-calibrator/apps/components/ui/input.tsxkits/interview-scorecard-calibrator/apps/components/ui/textarea.tsxkits/interview-scorecard-calibrator/apps/lib/scorecard.tskits/interview-scorecard-calibrator/apps/lib/utils.tskits/interview-scorecard-calibrator/apps/package.jsonkits/interview-scorecard-calibrator/prompts/calibrate-scorecard_compose_system.md
…dling in scorecard form - Updated Button, Input, and Textarea components to use React.forwardRef for better ref management. - Added error message display for the level input in the scorecard form to improve user feedback.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/interview-scorecard-calibrator/apps/app/page.tsx`:
- Around line 155-157: Update the level field around its Input and label so the
error paragraph is outside the surrounding label, has a stable id, and the Input
sets aria-invalid when errors.level exists plus aria-describedby only in that
case. Apply the same accessible error-wiring pattern to every other field error,
using each field’s corresponding error key and unique message id.
- Around line 155-157: Replace the hard-coded text-rose-600 class in the level
validation error rendering with the app’s semantic validation/error color CSS
variable, defining that variable in the app CSS if it does not already exist.
Preserve the existing errors.level conditional and message rendering.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: b8562e62-914b-4fd1-83a8-6caa5154f9a9
📒 Files selected for processing (4)
kits/interview-scorecard-calibrator/apps/app/page.tsxkits/interview-scorecard-calibrator/apps/components/ui/button.tsxkits/interview-scorecard-calibrator/apps/components/ui/input.tsxkits/interview-scorecard-calibrator/apps/components/ui/textarea.tsx
…inputs - Enhanced accessibility by adding aria attributes to Input and Textarea components. - Updated error message display for job title, level, rubric, and interviewer notes fields to improve user experience.
Synthesize multi-interviewer panel feedback into a calibrated hiring scorecard, disagreement map, recommendation, and decision brief for hiring managers.
Summary
kits/interview-scorecard-calibrator(type:kit)calibrate-scorecard(normalize → structured scorecard → hiring brief)Problem
After panel interviews, hiring managers get fragmented notes with uneven scoring rigor and conflicting opinions. Reconciling them into a fair hire/no-hire decision is slow and inconsistent.
Solution
Paste a role rubric and multi-interviewer notes. The kit returns:
Why unique
Distinct from resume screeners (
hiring,hiring-copilot-agent,candidate-screener) and candidate self-reflection (interview-reflection-coach). This kit focuses on post-panel calibration for hiring managers.PR Checklist
1. Select Contribution Type
kits/interview-scorecard-calibrator/)bundles/<bundle-name>/)templates/<template-name>/)2. General Requirements
kebab-caseand matches the flow ID (interview-scorecard-calibrator/calibrate-scorecard)README.md(purpose, setup, usage)3. File Structure (Check what applies)
lamatic.config.tspresent with valid metadata (name, description, tags, steps, author, env keys)(current AgentKit format; replaces legacy
config.json)flows/calibrate-scorecard.tswith externalized:prompts/model-configs/scripts/constitutions/default.mdagent.md.env.examplewith placeholder values only (kits only)@referenceprompts/scripts/model-configs)4. Validation
npm install && npm run buildworks locally inkits/interview-scorecard-calibrator/appsnpm run devverified end-to-end against a deployed Lamatic flow IDfeat:(feat: Add interview-scorecard-calibrator kit)Test plan
calibrate-scorecardin Lamatic Studio and bind model credentialsapps/.env.localfrom.env.examplecd kits/interview-scorecard-calibrator/apps && npm install && npm run devagentkit-challengeinterview-scorecard-calibratorkit.calibrate-scorecardLamatic flow.Button,Input, andTextareacomponents and shared Tailwind class utilities.agent.mddocumentation for setup, deployment, inputs, outputs, and flow behavior.lamatic.config.ts.