[ { "id": "F001", "description": "Plan: Document dependency on trigger payload mapping policy (2025-12-27 plan)", "implemented": true, "prdRefs": [ "Summary", "Goals" ] }, { "id": "F002", "description": "UX: Drafts do not require users to manually select a payload schema ref (system infers/stores one based on trigger or pinned selection)", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)", "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F003", "description": "DB: Add workflow payload schema mode metadata (inferred vs pinned)", "implemented": true, "prdRefs": [ "Data Model / API / Integrations" ] }, { "id": "F004", "description": "DB: Persist payload contract provenance on publish (pinned vs inferred) and store it on workflow_definitions", "implemented": true, "prdRefs": [ "Data Model / API / Integrations", "Publish-Time Behavior (Contract)" ] }, { "id": "F005", "description": "Runtime/API: Persist and return payload contract mode (inferred vs pinned) alongside definitions", "implemented": true, "prdRefs": [ "Data Model / API / Integrations", "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F006", "description": "Runtime: Ensure published WorkflowDefinition always has a concrete payloadSchemaRef", "implemented": true, "prdRefs": [ "Requirements/Publish-Time Behavior (Contract)" ] }, { "id": "F007", "description": "Publish: Persist payload schema JSON snapshot for published versions (payload_schema_json) for audit/debugging", "implemented": true, "prdRefs": [ "Publish-Time Behavior (Contract)", "Observability" ] }, { "id": "F008", "description": "Publish: Record payload schema provenance (pinned vs inferred) on publish", "implemented": true, "prdRefs": [ "Data Model / API / Integrations", "Observability" ] }, { "id": "F009", "description": "Designer: Allow viewing the published payload schema snapshot from the published version record", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F010", "description": "Designer: Replace required payload schema picker with 'Workflow data contract' section", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F011", "description": "Designer: Default contract mode is inferred (no selection required)", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract", "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F012", "description": "Designer: Add advanced toggle to pin payload schema ref", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F013", "description": "Designer: When pinned, show existing schema ref select + advanced input", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F014", "description": "Designer: When inferred, hide/disable payload schema selection controls", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F015", "description": "Designer: Show 'Effective schema (design time)' preview for inferred mode", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F016", "description": "Designer: Show 'Pinned contract schema' preview for pinned mode", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F017", "description": "Designer: Show 'Published contract schema' ref + preview for published version", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F018", "description": "Designer: Compute effective data context from trigger schema + step outputs (vars)", "implemented": true, "prdRefs": [ "UX / UI Notes/Field Picker / Mapping / Expressions", "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F019", "description": "Designer: Include event.payload typed from trigger source schema ref", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F020", "description": "Designer: Include vars. typed from action/node output schemas when known", "implemented": true, "prdRefs": [ "UX / UI Notes/Field Picker / Mapping / Expressions" ] }, { "id": "F021", "description": "Designer: Mark unknown outputs as 'Unknown type' in palette/field picker", "implemented": true, "prdRefs": [ "UX / UI Notes/Field Picker / Mapping / Expressions" ] }, { "id": "F022", "description": "Designer: Update expression editor contexts to prefer effective schema over pinned schema only", "implemented": true, "prdRefs": [ "UX / UI Notes/Field Picker / Mapping / Expressions" ] }, { "id": "F023", "description": "Designer: Update mapping panel targetFields to come from effective payload schema (inferred/pinned)", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F024", "description": "Designer: Clarify trigger schema vs payload contract in labels/modals", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger", "Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F025", "description": "Designer: Trigger section shows schema ref/status and 'View schema' link", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger" ] }, { "id": "F026", "description": "Designer: Enforce missing/unknown trigger schema errors per policy (disable publish/run)", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger", "Requirements/Publish-Time Behavior (Contract)" ] }, { "id": "F027", "description": "Designer: System events with missing schema cannot be selected", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger" ] }, { "id": "F028", "description": "Designer: Tenant events with missing schema show errors and disable publish/run", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger" ] }, { "id": "F029", "description": "Designer: When inferred contract mode, disable/adjust schema inference toggle UX from earlier plan", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F030", "description": "Designer: Persist contract mode changes in draft save payload", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)", "Data Model / API / Integrations" ] }, { "id": "F031", "description": "Designer/Runtime: Compute an effective payload schemaRef for drafts (pinned ref or inferred from trigger schemaRef)", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F032", "description": "Designer: Effective data context includes trigger schema + ordered prior step outputs for vars typing", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F033", "description": "Designer: Effective schema preview is rendered from JSON schema fetched by schemaRef (no virtual schemaRef required)", "implemented": true, "prdRefs": [ "Open Questions", "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F034", "description": "Designer: Effective data context merges known outputs into vars namespace using stable saveAs names", "implemented": true, "prdRefs": [ "UX / UI Notes/Field Picker / Mapping / Expressions" ] }, { "id": "F035", "description": "Publish: In inferred mode, infer payloadSchemaRef from selected trigger event schemaRef at publish time", "implemented": true, "prdRefs": [ "Requirements/Publish-Time Behavior (Contract)" ] }, { "id": "F036", "description": "Publish: Store payload_schema_json snapshot on workflow_definition_versions for both pinned and inferred modes", "implemented": true, "prdRefs": [ "Publish-Time Behavior (Contract)" ] }, { "id": "F037", "description": "Publish: Persist provenance fields on workflow_definitions (payload_schema_mode, pinned_payload_schema_ref, payload_schema_provenance)", "implemented": true, "prdRefs": [ "Data Model / API / Integrations" ] }, { "id": "F038", "description": "Designer: After publish, show a warning when inferred contract differs from published contract and offer to pin", "implemented": true, "prdRefs": [ "Schema evolution" ] }, { "id": "F039", "description": "Publish: Validate that payloadSchemaRef exists in registry at publish time; unknown is error", "implemented": true, "prdRefs": [ "Publish-Time Behavior (Contract)" ] }, { "id": "F040", "description": "Validator: Drafts remain saveable while contract is inferred; publish/run can be gated by missing/unknown schema", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F041", "description": "Validator: Deep nested validation of required mappings using effective payload schema", "implemented": true, "prdRefs": [ "Publish-Time Behavior (Contract)", "Type Compatibility" ] }, { "id": "F042", "description": "Validator: Missing secrets referenced by mappings/expressions are errors", "implemented": true, "prdRefs": [ "Publish-Time Behavior (Contract)" ] }, { "id": "F043", "description": "Validator: Type incompatibility is error when both sides known", "implemented": true, "prdRefs": [ "Type Compatibility" ] }, { "id": "F044", "description": "Validator: Type incompatibility is warning when either side unknown", "implemented": true, "prdRefs": [ "Type Compatibility" ] }, { "id": "F045", "description": "Validator: Persist inferred vs pinned status and effective schema diagnostics in validation details", "implemented": true, "prdRefs": [ "Observability", "Data Model / API / Integrations" ] }, { "id": "F046", "description": "Run dialog: Build test-event input from trigger schema (required known)", "implemented": true, "prdRefs": [ "Users and Primary Flows/Run workflow (test run)" ] }, { "id": "F047", "description": "Run dialog: Apply trigger mapping (if present) to produce workflow payload", "implemented": true, "prdRefs": [ "Users and Primary Flows/Run workflow (test run)" ] }, { "id": "F048", "description": "Run dialog: Allow preview for unpublished inferred workflows; disable starting a run until a version is published", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F049", "description": "Run dialog: Disable run when trigger schema is missing/unknown (policy)", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger" ] }, { "id": "F050", "description": "Execution: Ensure runs use published payloadSchemaRef contract; do not depend on inferred schema at runtime", "implemented": true, "prdRefs": [ "Goals", "Publish-Time Behavior (Contract)" ] }, { "id": "F051", "description": "Execution: Continue honoring trigger mapping semantics from prior plan", "implemented": true, "prdRefs": [ "Goals", "Depends on" ] }, { "id": "F052", "description": "Designer: Update schema preview modal to support rendering inferred schema (no ref)", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F053", "description": "Designer: Add indicator when schema shown is inferred vs pinned vs published", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F054", "description": "Designer: Cache inferred schema recomputation and invalidate when steps/trigger change", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F055", "description": "Event catalog: Ensure all system events have schema refs; missing schema is an error state", "implemented": true, "prdRefs": [ "Goals", "UX / UI Notes/Workflow Designer \u2014 Trigger" ] }, { "id": "F056", "description": "Event catalog: Surface schema status for events used as triggers in designer", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger" ] }, { "id": "F057", "description": "Telemetry: Emit event when user switches contract mode inferred<->pinned", "implemented": true, "prdRefs": [ "Observability" ] }, { "id": "F058", "description": "Telemetry: Emit event when publish generates payload contract schema", "implemented": true, "prdRefs": [ "Observability" ] }, { "id": "F059", "description": "Telemetry: Emit event when publish blocked by missing trigger schema/mapping/secrets", "implemented": true, "prdRefs": [ "Observability" ] }, { "id": "F060", "description": "Permissions: Enforce pinning payload schema requires workflow:manage", "implemented": true, "prdRefs": [ "Security / Permissions" ] }, { "id": "F061", "description": "Permissions: Enforce publish contract requires workflow:publish", "implemented": true, "prdRefs": [ "Security / Permissions" ] }, { "id": "F062", "description": "UI: Add skeleton loaders for inferred schema computation sections (avoid blank gaps)", "implemented": true, "prdRefs": [ "UX / UI Notes" ] }, { "id": "F063", "description": "UI: Add error banners for inferred schema compute failures (fallback to unknown)", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F064", "description": "API: Expose payload schema mode + provenance in workflow definition read endpoints", "implemented": true, "prdRefs": [ "Data Model / API / Integrations" ] }, { "id": "F065", "description": "API: Include generated payload schema ref in audit trail for published versions", "implemented": true, "prdRefs": [ "Observability" ] }, { "id": "F066", "description": "Migration: Backfill existing drafts to pinned mode (if they already have payloadSchemaRef)", "implemented": true, "prdRefs": [ "Rollout / Migration" ] }, { "id": "F067", "description": "Migration: Default new drafts to inferred mode", "implemented": true, "prdRefs": [ "Rollout / Migration" ] }, { "id": "F068", "description": "Designer: Disable publish/run while event catalog is loading for event-triggered workflows (no error flash)", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Trigger" ] }, { "id": "F069", "description": "Designer: Disable publish/run while required schemas are still loading (show skeleton)", "implemented": true, "prdRefs": [ "UX / UI Notes" ] }, { "id": "F070", "description": "Validation UI: Present inferred/pinned contract context in validation details panel", "implemented": true, "prdRefs": [ "Observability", "UX / UI Notes" ] }, { "id": "F071", "description": "Validation persistence: Store effective schema summary hashes for change detection", "implemented": true, "prdRefs": [ "Observability" ] }, { "id": "F072", "description": "Docs: Update workflow designer help text to explain trigger schema vs payload contract", "implemented": true, "prdRefs": [ "UX / UI Notes" ] }, { "id": "F073", "description": "Docs: Add admin/operator notes for payload contract snapshots (no dynamic registry generation)", "implemented": true, "prdRefs": [ "Data Model / API / Integrations" ] }, { "id": "F074", "description": "Edge case: If workflow has no trigger (manual), require pinned schema or block publish", "implemented": true, "prdRefs": [ "Open Questions", "Publish-Time Behavior (Contract)" ] }, { "id": "F075", "description": "Edge case: If workflow trigger is non-event (future), define inference behavior (no event.payload)", "implemented": true, "prdRefs": [ "Open Questions" ] }, { "id": "F078", "description": "Compat: Ensure existing workflows with explicit payloadSchemaRef continue to behave as pinned mode", "implemented": true, "prdRefs": [ "Rollout / Migration" ] }, { "id": "F079", "description": "Compat: Ensure run/execution continues to use payload.EmailWorkflowPayload.v1 where appropriate", "implemented": true, "prdRefs": [ "Goals" ] }, { "id": "F080", "description": "Performance: Avoid recomputing inferred schema on every keystroke; debounce/compute on structural changes", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F081", "description": "Performance: Cache schema registry JSON conversions/lookups (toJsonSchema/listRefs)", "implemented": true, "prdRefs": [ "Publish-Time Behavior (Contract)" ] }, { "id": "F082", "description": "Security: Ensure tenant is inferred and not user-editable in test event builder flows", "implemented": true, "prdRefs": [ "Security / Permissions" ] }, { "id": "F083", "description": "Designer: Provide a 'View effective contract' action to preview the publish-time payload schema ref as JSON", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F084", "description": "Designer: Show warnings when inferred contract differs from current pinned/published contract", "implemented": true, "prdRefs": [ "Schema evolution", "Type Compatibility" ] }, { "id": "F085", "description": "Publish: Ensure payload schema snapshot is deterministic (stable ordering, stable refs)", "implemented": true, "prdRefs": [ "Requirements/Publish-Time Behavior (Contract)" ] }, { "id": "F086", "description": "Publish: Include contract generation in validation persistence (validated_at semantics)", "implemented": true, "prdRefs": [ "Observability" ] }, { "id": "F087", "description": "Error handling: If schema lookup fails (unknown ref), publish fails with actionable error", "implemented": true, "prdRefs": [ "Publish-Time Behavior (Contract)" ] }, { "id": "F088", "description": "Error handling: If inference fails, allow draft save but block publish until fixed", "implemented": true, "prdRefs": [ "Requirements/Design-Time Behavior (Drafts)" ] }, { "id": "F089", "description": "UI: Ensure designer still supports 'View schema' modals with syntax highlighting for inferred JSON", "implemented": true, "prdRefs": [ "UX / UI Notes/Workflow Designer \u2014 Workflow Payload Contract" ] }, { "id": "F090", "description": "Plan maintenance: Keep features/tests synchronized during implementation and flip implemented booleans as shipped", "implemented": true, "prdRefs": [ "Ongoing Maintenance Rules" ] } ]