[ { "id": "F001", "description": "A01 tickets.create: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A01 — Tickets: Create Ticket (`tickets.create`)", "Requirements/Functional Requirements/Action Registry + Versioning"] }, { "id": "F002", "description": "A01 tickets.create: Define v1 input schema (client/contact identity, subject/body, priority/status, tags, custom fields)", "implemented": true, "prdRefs": ["Action Catalog/A01 — Tickets: Create Ticket (`tickets.create`)", "Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F003", "description": "A01 tickets.create: Support optional initial public/internal comment at creation time", "implemented": true, "prdRefs": ["Action Catalog/A01 — Tickets: Create Ticket (`tickets.create`)"] }, { "id": "F004", "description": "A01 tickets.create: Support attachment references on create (workflow storage ref and/or URL ingest)", "implemented": true, "prdRefs": ["Action Catalog/A01 — Tickets: Create Ticket (`tickets.create`)", "Action Catalog/A07 — Tickets: Add Attachment (`tickets.add_attachment`)"] }, { "id": "F005", "description": "A01 tickets.create: Implement idempotency via external key (avoid duplicate tickets on retries)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context", "Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F006", "description": "A01 tickets.create: Produce typed outputs (ticket_id, ticket_number, url, created_at, status, priority)", "implemented": true, "prdRefs": ["Action Catalog/A01 — Tickets: Create Ticket (`tickets.create`)", "Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F007", "description": "A01 tickets.create: Enforce permissions (tickets:create) and tenant isolation", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F008", "description": "A01 tickets.create: Emit audit event linking workflow run → created ticket", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit", "Observability"] }, { "id": "F009", "description": "A01 tickets.create: Standardize error mapping (validation/not-found/conflict/transient)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F010", "description": "A01 tickets.create: Designer UX config panel + examples + output fields in autocomplete context", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F011", "description": "A02 tickets.add_comment: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A02 — Tickets: Add Comment (`tickets.add_comment`)"] }, { "id": "F012", "description": "A02 tickets.add_comment: Define v1 input schema (ticket identity, body, visibility, mentions, attachments, idempotency key)", "implemented": true, "prdRefs": ["Action Catalog/A02 — Tickets: Add Comment (`tickets.add_comment`)"] }, { "id": "F013", "description": "A02 tickets.add_comment: Support internal vs public comments and preserve attribution metadata", "implemented": true, "prdRefs": ["Security / Permissions", "Observability"] }, { "id": "F014", "description": "A02 tickets.add_comment: Support attachment linking (existing ticket attachments or new uploads)", "implemented": true, "prdRefs": ["Action Catalog/A07 — Tickets: Add Attachment (`tickets.add_attachment`)"] }, { "id": "F015", "description": "A02 tickets.add_comment: Implement idempotency via external key (avoid duplicate comments on retry)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F016", "description": "A02 tickets.add_comment: Produce outputs (comment_id, created_at, visibility)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F017", "description": "A02 tickets.add_comment: Enforce permissions (tickets:comment) and visibility rules", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F018", "description": "A02 tickets.add_comment: Emit audit event linking workflow run → created comment", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F019", "description": "A02 tickets.add_comment: Standardize error mapping (ticket not found, body too large, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F020", "description": "A02 tickets.add_comment: Designer UX config panel + output fields in autocomplete context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F021", "description": "A03 tickets.update_fields: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A03 — Tickets: Update Fields (`tickets.update_fields`)"] }, { "id": "F022", "description": "A03 tickets.update_fields: Define v1 input schema (ticket identity, patch object, optional concurrency token)", "implemented": true, "prdRefs": ["Action Catalog/A03 — Tickets: Update Fields (`tickets.update_fields`)"] }, { "id": "F023", "description": "A03 tickets.update_fields: Support patching core fields (status, priority, tags, due date, custom fields)", "implemented": true, "prdRefs": ["Action Catalog/A03 — Tickets: Update Fields (`tickets.update_fields`)"] }, { "id": "F024", "description": "A03 tickets.update_fields: Validate patch rules (immutable fields, allowed transitions, field constraints)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F025", "description": "A03 tickets.update_fields: Support optimistic concurrency (conflict on stale updated_at/version)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F026", "description": "A03 tickets.update_fields: Produce outputs (updated status/priority/tags/updated_at)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F027", "description": "A03 tickets.update_fields: Enforce permissions (tickets:update) with field-level restrictions where applicable", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F028", "description": "A03 tickets.update_fields: Emit audit event with before/after summary (redacted as needed)", "implemented": true, "prdRefs": ["Observability", "Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F029", "description": "A03 tickets.update_fields: Standardize error mapping (not found, conflict, validation, permission)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F030", "description": "A03 tickets.update_fields: Designer UX patch builder (schema-driven) + preview of resulting changes", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F031", "description": "A04 tickets.assign: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A04 — Tickets: Assign (`tickets.assign`)"] }, { "id": "F032", "description": "A04 tickets.assign: Define v1 input schema (ticket identity, assignee type, assignee id, optional reason)", "implemented": true, "prdRefs": ["Action Catalog/A04 — Tickets: Assign (`tickets.assign`)"] }, { "id": "F033", "description": "A04 tickets.assign: Support assignment modes (user/team/queue) and validation of assignee existence", "implemented": true, "prdRefs": ["Action Catalog/A04 — Tickets: Assign (`tickets.assign`)"] }, { "id": "F034", "description": "A04 tickets.assign: Support optional assignment comment/internal note on assign", "implemented": true, "prdRefs": ["Action Catalog/A02 — Tickets: Add Comment (`tickets.add_comment`)"] }, { "id": "F035", "description": "A04 tickets.assign: Allow conditional assignment behavior (no-op if already assigned to target)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F036", "description": "A04 tickets.assign: Produce outputs (assigned_to, assigned_type, updated_at)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F037", "description": "A04 tickets.assign: Enforce permissions (tickets:assign) and role restrictions", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F038", "description": "A04 tickets.assign: Emit audit event for assignment change", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F039", "description": "A04 tickets.assign: Standardize error mapping (ticket/assignee not found, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F040", "description": "A04 tickets.assign: Designer UX assignment selector (user/team/queue pickers) + output context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F041", "description": "A05 tickets.close: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A05 — Tickets: Close (`tickets.close`)"] }, { "id": "F042", "description": "A05 tickets.close: Define v1 input schema (ticket identity, resolution, optional public note, notify requester flag)", "implemented": true, "prdRefs": ["Action Catalog/A05 — Tickets: Close (`tickets.close`)"] }, { "id": "F043", "description": "A05 tickets.close: Enforce allowed close transitions and require resolution fields per policy", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F044", "description": "A05 tickets.close: Optionally add a public closure comment and/or internal note", "implemented": true, "prdRefs": ["Action Catalog/A02 — Tickets: Add Comment (`tickets.add_comment`)"] }, { "id": "F045", "description": "A05 tickets.close: Optionally notify requester via email using email.send action integration", "implemented": true, "prdRefs": ["Action Catalog/A13 — Email: Send (`email.send`)"] }, { "id": "F046", "description": "A05 tickets.close: Produce outputs (closed_at, resolution, final status)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F047", "description": "A05 tickets.close: Enforce permissions (tickets:close)", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F048", "description": "A05 tickets.close: Emit audit event for ticket closure including resolution summary", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F049", "description": "A05 tickets.close: Standardize error mapping (not found, invalid state transition, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F050", "description": "A05 tickets.close: Designer UX closure form (resolution code selector + notify requester)", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F051", "description": "A06 tickets.link_entities: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A06 — Tickets: Link Entities (`tickets.link_entities`)"] }, { "id": "F052", "description": "A06 tickets.link_entities: Define v1 input schema (ticket identity, entity type, entity id, link type)", "implemented": true, "prdRefs": ["Action Catalog/A06 — Tickets: Link Entities (`tickets.link_entities`)"] }, { "id": "F053", "description": "A06 tickets.link_entities: Support linking to project/task/asset/contract with entity existence validation", "implemented": true, "prdRefs": ["Action Catalog/A06 — Tickets: Link Entities (`tickets.link_entities`)"] }, { "id": "F054", "description": "A06 tickets.link_entities: Enforce link uniqueness policies (no duplicate links for same pair/link type)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F055", "description": "A06 tickets.link_entities: Support optional link metadata (relationship label, notes)", "implemented": true, "prdRefs": ["Action Catalog/A06 — Tickets: Link Entities (`tickets.link_entities`)"] }, { "id": "F056", "description": "A06 tickets.link_entities: Produce outputs (link_id, linked_entity_summary)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F057", "description": "A06 tickets.link_entities: Enforce permissions (tickets:link)", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F058", "description": "A06 tickets.link_entities: Emit audit event for link creation", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F059", "description": "A06 tickets.link_entities: Standardize error mapping (ticket/entity not found, duplicate/conflict, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F060", "description": "A06 tickets.link_entities: Designer UX entity picker (type + id) with validation and output context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F061", "description": "A07 tickets.add_attachment: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A07 — Tickets: Add Attachment (`tickets.add_attachment`)"] }, { "id": "F062", "description": "A07 tickets.add_attachment: Define v1 input schema (ticket identity, source ref/url, filename, visibility, optional comment)", "implemented": true, "prdRefs": ["Action Catalog/A07 — Tickets: Add Attachment (`tickets.add_attachment`)"] }, { "id": "F063", "description": "A07 tickets.add_attachment: Support ingest from workflow storage references (binary already uploaded by workflow)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F064", "description": "A07 tickets.add_attachment: Support ingest from URL with content-type/size validation and safe fetching", "implemented": true, "prdRefs": ["Security / Permissions", "Requirements/Non-functional Requirements"] }, { "id": "F065", "description": "A07 tickets.add_attachment: Enforce max size/type allowlist and redaction of sensitive filenames in logs", "implemented": true, "prdRefs": ["Security / Permissions", "Observability"] }, { "id": "F066", "description": "A07 tickets.add_attachment: Produce outputs (attachment_id, filename, mime_type, storage_ref)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F067", "description": "A07 tickets.add_attachment: Enforce permissions (tickets:attachments)", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F068", "description": "A07 tickets.add_attachment: Emit audit event linking workflow run → created attachment", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F069", "description": "A07 tickets.add_attachment: Standardize error mapping (download failure, validation, not found, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F070", "description": "A07 tickets.add_attachment: Designer UX attachment source selector and output context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F071", "description": "A08 tickets.find: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A08 — Tickets: Find / Read (`tickets.find`)"] }, { "id": "F072", "description": "A08 tickets.find: Define v1 input schema (lookup by id/number/external ref; include options)", "implemented": true, "prdRefs": ["Action Catalog/A08 — Tickets: Find / Read (`tickets.find`)"] }, { "id": "F073", "description": "A08 tickets.find: Support include options (comments, attachments, custom fields) with pagination/limits", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F074", "description": "A08 tickets.find: Produce stable output schema for ticket summary + optional includes", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F075", "description": "A08 tickets.find: Enforce permissions (tickets:read) and field redaction rules", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F076", "description": "A08 tickets.find: Support not-found behavior (configurable: fail vs return null-like output)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F077", "description": "A08 tickets.find: Optimize query path and indexes for common lookups (id, external ref)", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F078", "description": "A08 tickets.find: Emit run telemetry for fetch duration and include size metrics", "implemented": true, "prdRefs": ["Observability"] }, { "id": "F079", "description": "A08 tickets.find: Standardize error mapping (permission denied, invalid identifier)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F080", "description": "A08 tickets.find: Designer UX lookup builder (id/number/external) + output context preview", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F081", "description": "A09 clients.find: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A09 — Clients: Find (`clients.find`)"] }, { "id": "F082", "description": "A09 clients.find: Define v1 input schema (client id, external ref, exact name; optional include primary contact)", "implemented": true, "prdRefs": ["Action Catalog/A09 — Clients: Find (`clients.find`)"] }, { "id": "F083", "description": "A09 clients.find: Produce output schema (client id/name/status/tags and primary contact summary)", "implemented": true, "prdRefs": ["Action Catalog/A09 — Clients: Find (`clients.find`)"] }, { "id": "F084", "description": "A09 clients.find: Support not-found behavior (fail vs return null-like output)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F085", "description": "A09 clients.find: Enforce permissions (clients:read) and field redaction rules", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F086", "description": "A09 clients.find: Normalize identifiers (trim/case handling) and validate external ref format", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F087", "description": "A09 clients.find: Optimize lookup paths (id/external ref/name) with indexes where needed", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F088", "description": "A09 clients.find: Emit run telemetry (duration, matched by which key)", "implemented": true, "prdRefs": ["Observability"] }, { "id": "F089", "description": "A09 clients.find: Standardize error mapping (permission, invalid identifier)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F090", "description": "A09 clients.find: Designer UX lookup builder + output context for downstream actions", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F091", "description": "A10 clients.search: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A10 — Clients: Search (`clients.search`)"] }, { "id": "F092", "description": "A10 clients.search: Define v1 input schema (query string, filters, pagination)", "implemented": true, "prdRefs": ["Action Catalog/A10 — Clients: Search (`clients.search`)"] }, { "id": "F093", "description": "A10 clients.search: Support filters (status, tags) and sorting (name, updated_at)", "implemented": true, "prdRefs": ["Action Catalog/A10 — Clients: Search (`clients.search`)"] }, { "id": "F094", "description": "A10 clients.search: Produce output schema (results array + paging metadata)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F095", "description": "A10 clients.search: Enforce permissions (clients:read) and result size limits", "implemented": true, "prdRefs": ["Security / Permissions", "Requirements/Non-functional Requirements"] }, { "id": "F096", "description": "A10 clients.search: Ensure safe query construction (no wildcard abuse; minimum query length config)", "implemented": true, "prdRefs": ["Security / Permissions", "Requirements/Non-functional Requirements"] }, { "id": "F097", "description": "A10 clients.search: Provide deterministic ordering for stable workflows (ties broken by id)", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F098", "description": "A10 clients.search: Emit run telemetry (query, filters, result_count) with redaction", "implemented": true, "prdRefs": ["Observability"] }, { "id": "F099", "description": "A10 clients.search: Standardize error mapping (invalid filters, permission)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F100", "description": "A10 clients.search: Designer UX search builder + output context (first result convenience fields)", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F101", "description": "A11 contacts.find: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A11 — Contacts: Find (`contacts.find`)"] }, { "id": "F102", "description": "A11 contacts.find: Define v1 input schema (contact id/email/phone; optional client scope)", "implemented": true, "prdRefs": ["Action Catalog/A11 — Contacts: Find (`contacts.find`)"] }, { "id": "F103", "description": "A11 contacts.find: Support email normalization + phone normalization for lookup", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F104", "description": "A11 contacts.find: Produce output schema (contact fields + client linkage)", "implemented": true, "prdRefs": ["Action Catalog/A11 — Contacts: Find (`contacts.find`)"] }, { "id": "F105", "description": "A11 contacts.find: Enforce permissions (contacts:read) and PII redaction rules", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F106", "description": "A11 contacts.find: Support not-found behavior (fail vs return null-like output)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F107", "description": "A11 contacts.find: Prefer deterministic match strategy when multiple contacts share identifiers (configurable)", "implemented": true, "prdRefs": ["Open Questions"] }, { "id": "F108", "description": "A11 contacts.find: Emit run telemetry (matched by which key; result count)", "implemented": true, "prdRefs": ["Observability"] }, { "id": "F109", "description": "A11 contacts.find: Standardize error mapping (invalid email/phone, permission)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F110", "description": "A11 contacts.find: Designer UX lookup builder + output context for downstream actions", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F111", "description": "A12 contacts.search: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A12 — Contacts: Search (`contacts.search`)"] }, { "id": "F112", "description": "A12 contacts.search: Define v1 input schema (query, client scope, pagination)", "implemented": true, "prdRefs": ["Action Catalog/A12 — Contacts: Search (`contacts.search`)"] }, { "id": "F113", "description": "A12 contacts.search: Support filters (client, tags) and sorting (name, updated_at)", "implemented": true, "prdRefs": ["Action Catalog/A12 — Contacts: Search (`contacts.search`)"] }, { "id": "F114", "description": "A12 contacts.search: Produce output schema (results + paging metadata)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F115", "description": "A12 contacts.search: Enforce permissions (contacts:read) and PII redaction for outputs/logs", "implemented": true, "prdRefs": ["Security / Permissions", "Observability"] }, { "id": "F116", "description": "A12 contacts.search: Ensure safe query construction + result limits to prevent heavy scans", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F117", "description": "A12 contacts.search: Provide deterministic ordering for stable workflow behavior", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F118", "description": "A12 contacts.search: Emit run telemetry (query, client scope, result_count) with redaction", "implemented": true, "prdRefs": ["Observability"] }, { "id": "F119", "description": "A12 contacts.search: Standardize error mapping (invalid filters, permission)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F120", "description": "A12 contacts.search: Designer UX search builder + output context convenience fields", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F121", "description": "A13 email.send: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A13 — Email: Send (`email.send`)"] }, { "id": "F122", "description": "A13 email.send: Define v1 input schema (to/cc/bcc, subject, body, from identity, attachments, provider override, idempotency key)", "implemented": true, "prdRefs": ["Action Catalog/A13 — Email: Send (`email.send`)"] }, { "id": "F123", "description": "A13 email.send: Support templating via expressions (subject/body can reference workflow data context)", "implemented": true, "prdRefs": ["UX / UI Notes", "Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F124", "description": "A13 email.send: Support attachments (workflow storage refs) with size/type validation", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F125", "description": "A13 email.send: Implement idempotency via message key (avoid duplicate sends on retries)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F126", "description": "A13 email.send: Produce outputs (message_id, provider, status, queued_at/sent_at)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F127", "description": "A13 email.send: Enforce permissions (email:send) and from-identity constraints", "implemented": true, "prdRefs": ["Security / Permissions", "Open Questions"] }, { "id": "F128", "description": "A13 email.send: Emit audit event for outbound email (metadata only; redact bodies by default)", "implemented": true, "prdRefs": ["Observability", "Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F129", "description": "A13 email.send: Standardize error mapping (invalid recipient, provider failure, rate limited) + retry hints", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F130", "description": "A13 email.send: Designer UX email composer (with template preview + output context)", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F131", "description": "A14 notifications.send_in_app: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A14 — Notifications: In-App Notify User(s) (`notifications.send_in_app`)"] }, { "id": "F132", "description": "A14 notifications.send_in_app: Define v1 input schema (recipients, title, body, severity, deep link, dedupe key)", "implemented": true, "prdRefs": ["Action Catalog/A14 — Notifications: In-App Notify User(s) (`notifications.send_in_app`)"] }, { "id": "F133", "description": "A14 notifications.send_in_app: Support recipient targeting by user id and by role/group", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Action Registry + Versioning"] }, { "id": "F134", "description": "A14 notifications.send_in_app: Implement dedupe behavior (avoid spamming repeated notifications)", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F135", "description": "A14 notifications.send_in_app: Support deep links to Alga UI pages (ticket, workflow run, etc.)", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F136", "description": "A14 notifications.send_in_app: Produce outputs (notification_ids, delivered_count)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F137", "description": "A14 notifications.send_in_app: Enforce permissions (notifications:send) and recipient scoping rules", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F138", "description": "A14 notifications.send_in_app: Emit audit event summarizing notification (recipients redacted)", "implemented": true, "prdRefs": ["Observability", "Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F139", "description": "A14 notifications.send_in_app: Standardize error mapping (invalid recipients, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F140", "description": "A14 notifications.send_in_app: Designer UX recipient picker + message composer + output context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F141", "description": "A15 scheduling.assign_user: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A15 — Scheduling: Create Assignment / Schedule Entry (`scheduling.assign_user`)"] }, { "id": "F142", "description": "A15 scheduling.assign_user: Define v1 input schema (user, time window, location, link target, conflict mode)", "implemented": true, "prdRefs": ["Action Catalog/A15 — Scheduling: Create Assignment / Schedule Entry (`scheduling.assign_user`)"] }, { "id": "F143", "description": "A15 scheduling.assign_user: Support conflict detection and selectable conflict handling modes (fail/shift/override)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries", "Open Questions"] }, { "id": "F144", "description": "A15 scheduling.assign_user: Support linking schedule entry to ticket/project and writing back cross-references", "implemented": true, "prdRefs": ["Action Catalog/A15 — Scheduling: Create Assignment / Schedule Entry (`scheduling.assign_user`)"] }, { "id": "F145", "description": "A15 scheduling.assign_user: Support timezone handling for window inputs and outputs", "implemented": true, "prdRefs": ["Requirements/Non-functional Requirements"] }, { "id": "F146", "description": "A15 scheduling.assign_user: Produce outputs (schedule_event_id, assigned_user_id, start/end)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F147", "description": "A15 scheduling.assign_user: Enforce permissions (scheduling:write) and technician eligibility checks", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F148", "description": "A15 scheduling.assign_user: Emit audit event for schedule creation/assignment", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F149", "description": "A15 scheduling.assign_user: Standardize error mapping (user not found, conflict, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F150", "description": "A15 scheduling.assign_user: Designer UX schedule builder (date/time pickers) + output context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F151", "description": "A16 projects.create_task: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A16 — Projects: Create Task (`projects.create_task`)"] }, { "id": "F152", "description": "A16 projects.create_task: Define v1 input schema (project id, title/description, due date, assignee, link-to-ticket)", "implemented": true, "prdRefs": ["Action Catalog/A16 — Projects: Create Task (`projects.create_task`)"] }, { "id": "F153", "description": "A16 projects.create_task: Support optional linkage back to ticket (bidirectional references)", "implemented": true, "prdRefs": ["Action Catalog/A06 — Tickets: Link Entities (`tickets.link_entities`)"] }, { "id": "F154", "description": "A16 projects.create_task: Support initial status and priority for created tasks", "implemented": true, "prdRefs": ["Action Catalog/A16 — Projects: Create Task (`projects.create_task`)"] }, { "id": "F155", "description": "A16 projects.create_task: Support assignment to user/team and validate assignee existence", "implemented": true, "prdRefs": ["Action Catalog/A04 — Tickets: Assign (`tickets.assign`)"] }, { "id": "F156", "description": "A16 projects.create_task: Produce outputs (task_id, url, status, created_at)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F157", "description": "A16 projects.create_task: Enforce permissions (projects:tasks:create)", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F158", "description": "A16 projects.create_task: Emit audit event linking workflow run → created task", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F159", "description": "A16 projects.create_task: Standardize error mapping (project not found, forbidden, validation)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F160", "description": "A16 projects.create_task: Designer UX task create form + output context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F161", "description": "A17 time.create_entry: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A17 — Time: Create Time Entry (`time.create_entry`)"] }, { "id": "F162", "description": "A17 time.create_entry: Define v1 input schema (user, date, duration, billable flags, link target, notes)", "implemented": true, "prdRefs": ["Action Catalog/A17 — Time: Create Time Entry (`time.create_entry`)"] }, { "id": "F163", "description": "A17 time.create_entry: Support linking to ticket/project/task and validate linkage targets", "implemented": true, "prdRefs": ["Action Catalog/A17 — Time: Create Time Entry (`time.create_entry`)"] }, { "id": "F164", "description": "A17 time.create_entry: Support billable/non-billable and work type/service code selection", "implemented": true, "prdRefs": ["Open Questions"] }, { "id": "F165", "description": "A17 time.create_entry: Validate duration limits and rounding policies (e.g., 6-minute increments)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F166", "description": "A17 time.create_entry: Produce outputs (time_entry_id, total_minutes, billable_minutes)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F167", "description": "A17 time.create_entry: Enforce permissions (time:write) and user scoping (cannot log for others unless allowed)", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F168", "description": "A17 time.create_entry: Emit audit event linking workflow run → created time entry", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F169", "description": "A17 time.create_entry: Standardize error mapping (invalid duration, target not found, forbidden)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F170", "description": "A17 time.create_entry: Designer UX time entry form (date/duration) + output context", "implemented": true, "prdRefs": ["UX / UI Notes"] }, { "id": "F171", "description": "A18 crm.create_activity_note: Register action metadata (id/version/category/description) in action registry", "implemented": true, "prdRefs": ["Action Catalog/A18 — CRM: Create Activity Note (`crm.create_activity_note`)"] }, { "id": "F172", "description": "A18 crm.create_activity_note: Define v1 input schema (target type/id, note body, visibility, category/tags)", "implemented": true, "prdRefs": ["Action Catalog/A18 — CRM: Create Activity Note (`crm.create_activity_note`)"] }, { "id": "F173", "description": "A18 crm.create_activity_note: Support targets (client/contact/ticket/project) and validate target existence", "implemented": true, "prdRefs": ["Action Catalog/A18 — CRM: Create Activity Note (`crm.create_activity_note`)"] }, { "id": "F174", "description": "A18 crm.create_activity_note: Support visibility modes (internal vs client-visible) with policy validation", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F175", "description": "A18 crm.create_activity_note: Support categorization/tags for later reporting and search", "implemented": true, "prdRefs": ["Action Catalog/A18 — CRM: Create Activity Note (`crm.create_activity_note`)"] }, { "id": "F176", "description": "A18 crm.create_activity_note: Produce outputs (note_id, created_at, target_summary)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Execution + Data Context"] }, { "id": "F177", "description": "A18 crm.create_activity_note: Enforce permissions (crm:notes:create) and data redaction rules", "implemented": true, "prdRefs": ["Security / Permissions"] }, { "id": "F178", "description": "A18 crm.create_activity_note: Emit audit event linking workflow run → created note", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Permissions + Audit"] }, { "id": "F179", "description": "A18 crm.create_activity_note: Standardize error mapping (target not found, forbidden, validation)", "implemented": true, "prdRefs": ["Requirements/Functional Requirements/Errors + Retries"] }, { "id": "F180", "description": "A18 crm.create_activity_note: Designer UX note composer + target picker + output context", "implemented": true, "prdRefs": ["UX / UI Notes"] } ]