Skip to main content

Platform extensions β€” the phantom design names, triaged

What this is. The platform-extensions design (17 Β§3.2) promised GraphQL root fields by name. The audit of every row against the composed schema (handover 2026-09-20 Β§7.68) found 81 names in the queries and mutations cells that appeared nowhere in the code β€” six triaged by hand in Β§7.67, the rest recorded unclassified because the block mixed a naming class (fixed in the design) with a missing class (fixed in the code). Owner decision 12 (2026-10-13): "I want to triage each, but in the end implement all we need really!"

Method. Each name is measured against packages/core/src/lib/graphql/schema/schema.graphql: served under its own name β†’ delivered; the capability served under another root field of the same kind (checked by reading the delivered route and field, not by name similarity) β†’ naming; retired or rejected by the design itself β†’ retired; served by neither REST nor GraphQL β†’ build; not a concept of this platform β†’ drop.

This page is generated from the table in tools/scripts/design-name-triage-check.mjs (node tools/scripts/design-name-triage-check.mjs --write), and the gate β€” which CI runs in static-checks.yml β€” fails when the page and the table differ, when a delivered name stops being served, when an equivalent is not served as the same kind, when a name that is not delivered becomes served, when one of the 81 rows disappears, and when the build backlog grows.

Where it lives. The gate checks tools/scripts/design-name-triage.md in ever-co/ever-gauzy; the documentation site publishes the same page from ever-co/ever-gauzy-docs (website/docs/platform-extensions/design-name-triage.md), and node tools/scripts/design-name-triage-check.mjs --markdown prints it.

Totals: 81 names β€” 22 delivered, 49 served under another name, 2 retired, 7 to build, 1 dropped.

Design-doc amendments (pending: the design documents are not in this repository). Every naming row: replace the design name with the served one in 17 Β§3.2 (and in Appendix A’s derived counts). Every retired row: mark it (n-a β€” retired) beside its replacement. Every drop row: remove it, with the reason given.

To build (the backlog the gate counts, 7): bulkCreateExpenses, bulkCreateOrganizations, bulkCreateTags, bulkCreateTasks, bulkCreateTimeLogs, bulkCreateUsers, upcomingSubscriptionBilling.

Dropped, for the owner to confirm (1): markEntitySubscriptionRead β€” an entity subscription carries no read state (the read state is the notification’s, see markEmployeeNotificationRead).

#design namekindclassserved equivalentdecision / note
1acceptOrderQuoteMutationdeliveredacceptOrderQuotenothing: the design row is right β€” pe/a3-order (Β§7.75)
2declineOrderQuoteMutationdelivereddeclineOrderQuotenothing: the design row is right β€” pe/a3-order (Β§7.75)
3generateOrderInvoiceMutationdeliveredgenerateOrderInvoicenothing: the design row is right β€” pe/a3-order (Β§7.75)
4requestOrderApprovalMutationdeliveredrequestOrderApprovalnothing: the design row is right β€” pe/a3-order (Β§7.75)
5sendOrderQuoteMutationdeliveredsendOrderQuotenothing: the design row is right β€” pe/a3-order (Β§7.75)
6approveSellerMutationnamingactivateSelleramend the design row to the served name β€” the explicit approval after every verification passed is activate (Β§7.76, item 7 closed)
7acceptTermsMutationdeliveredacceptTermsnothing: the design row is right β€” terms-acceptance surface
8addTeamMemberMutationdeliveredaddTeamMembernothing: the design row is right β€” organization team membership
9bulkCreateTenantRolesMutationdeliveredbulkCreateTenantRolesnothing: the design row is right β€” mirrors POST /roles/bulk
10createReportCategoryMutationdeliveredcreateReportCategorynothing: the design row is right β€” report categories
11deleteReportCategoryMutationdelivereddeleteReportCategorynothing: the design row is right β€” report categories
12updateReportCategoryMutationdeliveredupdateReportCategorynothing: the design row is right β€” report categories
13emailResetsQuerydeliveredemailResetsnothing: the design row is right β€” email reset requests
14invoiceByTokenQuerydeliveredinvoiceByTokennothing: the design row is right β€” public invoice link
15invoiceStatisticsQuerydeliveredinvoiceStatisticsnothing: the design row is right β€” invoice statistics
16payrollItemsQuerydeliveredpayrollItemsnothing: the design row is right β€” Β§7.68 named it the one with "no served equivalent at all"; served now
17updatePayrollItemMutationdeliveredupdatePayrollItemnothing: the design row is right β€” payroll items
18reportMenuItemsQuerydeliveredreportMenuItemsnothing: the design row is right β€” Β§7.68: only updateReportMenu was served then
19revokeTenantApiKeyMutationdeliveredrevokeTenantApiKeynothing: the design row is right β€” tenant API keys
20updateTenantApiKeyMutationdeliveredupdateTenantApiKeynothing: the design row is right β€” tenant API keys
21softDeleteTaskMutationdeliveredsoftDeleteTasknothing: the design row is right β€” the soft-delete pair
22taskByNumberQuerydeliveredtaskByNumbernothing: the design row is right β€” task by its project number
23termsAcceptancesQuerydeliveredtermsAcceptancesnothing: the design row is right β€” terms-acceptance surface
24createDepartmentMutationnamingcreateOrganizationDepartmentamend the design row to the served name β€” REST /organization-department
25updateDepartmentMutationnamingupdateOrganizationDepartmentamend the design row to the served name β€” REST /organization-department
26deleteDepartmentMutationnamingdeleteOrganizationDepartmentamend the design row to the served name β€” REST /organization-department
27createProjectMutationnamingcreateOrganizationProjectamend the design row to the served name β€” REST /organization-projects
28updateProjectMutationnamingupdateOrganizationProjectamend the design row to the served name β€” REST /organization-projects
29deleteProjectMutationnamingdeleteOrganizationProjectamend the design row to the served name β€” REST /organization-projects
30softDeleteProjectMutationnamingsoftDeleteOrganizationProjectamend the design row to the served name β€” the soft-delete pair
31projectModulesQuerynamingorganizationProjectModulesamend the design row to the served name β€” REST /organization-project-modules
32createProjectModuleMutationnamingcreateOrganizationProjectModuleamend the design row to the served name β€” REST /organization-project-modules
33updateProjectModuleMutationnamingupdateOrganizationProjectModuleamend the design row to the served name β€” REST /organization-project-modules
34deleteProjectModuleMutationnamingdeleteOrganizationProjectModuleamend the design row to the served name β€” REST /organization-project-modules
35createSprintMutationnamingcreateOrganizationSprintamend the design row to the served name β€” REST /organization-sprint
36updateSprintMutationnamingupdateOrganizationSprintamend the design row to the served name β€” REST /organization-sprint
37deleteSprintMutationnamingdeleteOrganizationSprintamend the design row to the served name β€” REST /organization-sprint
38createTeamMutationnamingcreateOrganizationTeamamend the design row to the served name β€” REST /organization-team
39updateTeamMutationnamingupdateOrganizationTeamamend the design row to the served name β€” REST /organization-team
40updateTeamMemberMutationnamingupdateOrganizationTeamEmployeeamend the design row to the served name β€” a member is an organization-team employee row
41removeTeamMemberMutationnamingdeleteOrganizationTeamEmployeeamend the design row to the served name β€” a member is an organization-team employee row
42teamJoinRequestsQuerynamingorganizationTeamJoinRequestsamend the design row to the served name β€” REST /organization-team-join
43createTeamJoinRequestMutationnamingcreateOrganizationTeamJoinRequestamend the design row to the served name β€” REST /organization-team-join
44acceptTeamJoinRequestMutationnamingacceptOrganizationTeamJoinRequestamend the design row to the served name β€” REST /organization-team-join
45createRecurringExpenseMutationnamingcreateOrganizationRecurringExpense, createEmployeeRecurringExpenseamend the design row to the served name β€” two resources: the organization and the employee recurring expense
46updateRecurringExpenseMutationnamingupdateOrganizationRecurringExpense, updateEmployeeRecurringExpenseamend the design row to the served name β€” two resources: the organization and the employee recurring expense
47deleteRecurringExpenseMutationnamingdeleteOrganizationRecurringExpense, deleteEmployeeRecurringExpenseamend the design row to the served name β€” two resources: the organization and the employee recurring expense
48authorizedUserQuerynamingmeamend the design row to the served name β€” the authenticated caller
49confirmEmailResetMutationnamingverifyEmailResetamend the design row to the served name β€” REST POST /email-reset/verify-change-email
50createTenantApiKeyMutationnaminggenerateTenantApiKeyPairamend the design row to the served name β€” a key is generated as a pair, shown once
51createTimeLogMutationnamingaddManualTimeamend the design row to the served name β€” Β§7.68: a time log a person files is manual time
52updateTimeLogMutationnamingupdateManualTimeamend the design row to the served name β€” Β§7.68
53customSmtpQuerynamingcustomSmtpSettingamend the design row to the served name β€” REST /smtp
54updateCustomSmtpMutationnamingupdateSmtpSettingamend the design row to the served name β€” REST /smtp
55importHistoryQuerynamingimportHistoriesamend the design row to the served name β€” the import ledger is a list
56invoiceHighestQuerynaminghighestInvoiceNumberamend the design row to the served name β€” REST GET /invoices/highest
57convertInvoiceToEstimateMutationnamingupdateInvoiceEstimateamend the design row to the served name β€” REST PUT /invoices/:id/estimate flips isEstimate
58sendEmailHistoryMutationnamingresendEmailHistoryamend the design row to the served name β€” an email history row is re-sent
59timesheetStatisticsQuerynamingtimeTrackingCounts, timeTrackingMembers, timeTrackingProjects, timeTrackingTasks, timeTrackingManualTimes, timeTrackingTimeSlots, timeTrackingActivitiesamend the design row to the served name β€” REST /timesheet/statistics/* is a family, served one field per route
60createIntegrationMutationnamingcreateIntegrationTenantamend the design row to the served name β€” an integration is configured per tenant; the integration catalogue is seeded, read-only
61updateIntegrationMutationnamingupdateIntegrationTenantamend the design row to the served name β€” as createIntegration
62deleteIntegrationMutationnamingdeleteIntegrationTenantamend the design row to the served name β€” as createIntegration
63updateIntegrationEntitySettingMutationnamingupdateIntegrationEntitySettingsamend the design row to the served name β€” the route writes the set
64integrationEntitySettingTiedQuerynamingintegrationEntitySettingsamend the design row to the served name β€” tied rows are read as IntegrationEntitySetting.tiedEntities; REST has no read route of its own
65authorizePaymentMutationnamingauthorizePaymentSessionamend the design row to the served name β€” payment reconnaissance (Β§7.68)
66cancelPaymentMutationnamingvoidPaymentSessionamend the design row to the served name β€” Β§3.6: POST /payments/:id/cancel is voidPaymentSession
67billSubscriptionNowMutationnamingbillSubscriptionamend the design row to the served name β€” REST POST /subscriptions/:id/bill
68swapSubscriptionPlanMutationnamingchangeSubscriptionPlanamend the design row to the served name β€” REST POST /subscriptions/:id/plan
69createStockAdjustmentMutationnamingadjustStockamend the design row to the served name β€” REST POST /stock-adjustments drafts; applyStockAdjustment applies
70markEmployeeNotificationReadMutationnamingupdateEmployeeNotification, markAllEmployeeNotificationsAsReadamend the design row to the served name β€” one notification: updateEmployeeNotification with isRead/readAt; all of the caller’s: the mark-all route
71deleteSellerOfferingMutationnamingwithdrawSellerOffering, softDeleteSellerOfferingamend the design row to the served name β€” an offering is withdrawn, never erased (Β§7.65 item 5, 8eaaa273c81): DELETE /seller-offerings/:id withdraws
72createShippingLabelMutationretiredrequestFulfillmentLabelmark the design row n-a (retired) β€” design-retired; a carrier label is requested for a shipment
73setProductVariantPriceMutationretiredupdateProductVariantPrice, bulkUpsertProductPricesmark the design row n-a (retired) β€” design-retired
74bulkCreateExpensesMutationbuildβ€”build (REST + GraphQL), then delivered β€” no POST /expense/bulk either; build both surfaces on the bulk kernel (BulkOperation/BulkExecutor)
75bulkCreateOrganizationsMutationbuildβ€”build (REST + GraphQL), then delivered β€” no REST bulk route either
76bulkCreateTagsMutationbuildβ€”build (REST + GraphQL), then delivered β€” no REST bulk route either
77bulkCreateTasksMutationbuildβ€”build (REST + GraphQL), then delivered β€” no REST bulk route either
78bulkCreateTimeLogsMutationbuildβ€”build (REST + GraphQL), then delivered β€” no REST bulk route either; addManualTime one at a time
79bulkCreateUsersMutationbuildβ€”build (REST + GraphQL), then delivered β€” no REST bulk route either; createEmployeesBulk covers employees only
80upcomingSubscriptionBillingQuerybuildβ€”build (REST + GraphQL), then delivered β€” a preview of the next billing; no REST route either
81markEntitySubscriptionReadMutationdropβ€”drop from the design (listed for the owner) β€” an entity subscription carries no read state (the read state is the notification’s, see markEmployeeNotificationRead)