Skip to content

fix(framework): allow optional properties in ArrayProperty zod schema (#629) - #667

Merged
Mihir-Rabari merged 1 commit into
Mihir-Rabari:devfrom
atharvashukla098-tech:fix/issue-629-array-property-zod-schema
Oct 19, 2026
Merged

Mihir-Rabari merged 1 commit into
Mihir-Rabari:devfrom
atharvashukla098-tech:fix/issue-629-array-property-zod-schema

Conversation

@atharvashukla098-tech

@atharvashukla098-tech atharvashukla098-tech commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

User description

Resolves #629

Summary of Changes

  • ArrayProperty Zod Schema: Made \properties: z.optional(ArraySubProps)\ in \packages/integrations/framework/src/lib/property/input/array-property.ts\ to align with the \Property.Array(...)\ factory output and the TypeScript \ArrayProperty\ type definition (\properties?: ArraySubProps).
  • Union Completeness: Added \JsonProperty\ and \ColorProperty\ into \ArraySubProps\ union to match the TypeScript \ArraySubProps\ type.
  • ToolBase & Catalog Validation: Actions with array properties (e.g. \ o, \cc, \�cc\ in email pieces, lists, tags) now validate cleanly against \ToolBase.safeParse\ both in-memory and serialized in JSON catalogs, resolving empty-props degradation in piece catalogs and MCP tool reflection.
  • Unit Test Suite: Added \packages/integrations/framework/src/lib/property/input/array-property.test.ts\ with tests for:
    • \Property.Array\ factory output with omitted \properties.
    • \Property.Array\ factory output with explicit \properties.
    • Full \ToolBase.safeParse\ round-trip validation on serialized JSON actions.

CodeAnt-AI Description

Allow array inputs without nested fields

What Changed

  • Array inputs now validate when no nested item properties are provided, including in serialized catalogs and tool definitions.
  • Nested array fields can now include JSON and color properties.

Impact

✅ Fewer catalog validation failures for array inputs
✅ Array inputs work without nested item fields
✅ JSON and color fields supported in arrays

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

…Mihir-Rabari#629)

Make properties optional in ArrayProperty to match Property.Array factory
output and TypeScript type definition. This allows actions with array
properties to validate cleanly against ToolBase in piece catalogs and MCP.
Also add JsonProperty and ColorProperty to ArraySubProps union.
@codeant-ai

codeant-ai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

🤖 CodeAnt AI — Review Status

Status Commit Started (UTC) Finished (UTC)
✅ Reviewed your PR b4120ac Oct 19, 2026 · 10:25 10:28

@codeant-ai

codeant-ai Bot commented Oct 19, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@codeant-ai codeant-ai Bot added the size:M This PR changes 30-99 lines, ignoring generated files label Oct 19, 2026
@codeant-ai

codeant-ai Bot commented Oct 19, 2026

Copy link
Copy Markdown

CodeAnt PR Risk: Low Risk

  • The PR appears safe to merge; the change is limited to array-property validation.
  • Array properties can now omit nested properties and accept JSON and color subproperties, with tests covering both cases.

Assessed commit: b4120ac7d1d4

@Mihir-Rabari Mihir-Rabari left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review TL;DR — ✅ APPROVE

Reviewed head: b4120ac

First review of this PR — no prior feedback to carry over.

✅ Strengths

  • Surgical fix that finally aligns three views of ArrayProperty: the Property.Array factory output (which legitimately omits properties), the TS type (properties?: ArraySubProps<R>, array-property.ts:52-54), and the zod runtime schema (z.optional(ArraySubProps), array-property.ts:30). This is exactly the #629 root cause — serialized actions with ARRAY props failed ToolBase.safeParse, degrading catalog/MCP reflection to props: [].
  • Union completion (JsonProperty + ColorProperty, array-property.ts:29-30) matches the TS ArraySubProps<R> union member-for-member — verified both sides line up at this head.
  • Validation stays strict when properties IS provided: the record+union still validates nested prop shapes, so this relaxes only the "key must exist" requirement, not the shape checks.

Tests (mandate check)

  • Real-behavior tests, not tautologies: factory-output safeParse both with and without properties (array-property.test.ts:6-48), plus a serialized-JSON round-trip through ToolBase.safeParse (array-property.test.ts:50-84) — precisely the catalog/MCP degradation path from #629. Wired via vitest in the framework package; green in Checks (unit/integrations).

⚠️ Should fix (non-blocking)

  • Consider a negative test: a nested prop that is NOT in the union (e.g. { type: 'BOGUS' }) should make ArraySubProps reject — proves the union still bites after z.optional.

💡 Nits

  • parsed.data.properties?.tag chains are fine; expect(Object.keys(parsed.data.properties ?? {})) would give tighter shape assertions someday.

Prior feedback status: N/A — first review; no prior Mihir/codeant threads.

Acceptance criteria (#629)

  • Factory output passes its own schema → ✅ tests 1 & 3.
  • Catalog serialization no longer degrades ARRAY props → ✅ ToolBase round-trip test.
  • Union parity with the TS type → ✅ verified at head.

Great catch and a genuinely minimal fix. Merging — thanks! 🎉

— Hermes Agent, reviewing on behalf of @Mihir-Rabari

@Mihir-Rabari
Mihir-Rabari merged commit b511842 into Mihir-Rabari:dev Oct 19, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M This PR changes 30-99 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants