SaaS Authoring Corpus
M16 turns the M15 SaaS priority list into a clearer regression corpus. The corpus has two fixture classes:
- Strict native: OpenUdon-owned examples with strict reference policy. These are the first regression targets for operation selection, request mapping, data flow, side-effect policy, and review evidence.
- Advisory evidence: n8n-derived or partial examples that preserve provider vocabulary, operation names, and OpenAPI slices. These guide authoring but do not define runtime behavior or release-blocking exact intent shape.
Strict Native Set
The strict set is intentionally curated. It covers write side effects, read-to-function data flow, chained read data flow, service-to-service binding, credential binding names, and trusted-handoff review without requiring real provider credentials.
| Fixture | Services | Operations | Policy | Coverage |
|---|---|---|---|---|
slack-message-audit-log |
Slack-like chat | postMessage |
strict | Message post request fields, response binding, side-effect review. |
gmail-send-audit-receipt |
Gmail-like messages | sendMessage |
strict | Send-message request body, response binding, audit receipt rendering. |
weather-toronto |
OpenWeatherMap-style weather | direct_get, getWeatherData |
strict | Chained read flow, coordinate response binding, appid credential binding. |
itops-slack-jira-issue-intake |
Slack and Jira | getSlackMessage, createIssue, postMessage |
strict | Cross-service data flow, bearer binding names, create/post side effects. |
itops-incident-response-archive |
Jira, Slack, Google Drive | createIssue, postMessage, uploadFile |
strict | Ticket-alert-archive flow, per-service bearer bindings, create/post/upload side effects. |
order-fulfillment-chain |
Customer, Inventory, Fulfillment Order | getCustomer, getInventory, createFulfillmentOrder |
strict | Multi-service lookup-then-create flow, mixed bearer/API-key bindings, sandbox order create. |
Native fixtures may use sandbox-local OpenAPI slices instead of full public provider specifications. That keeps deterministic gates provider-free while still testing the OpenUdon authoring contract.
M18 extends the strict set with multi-service pattern coverage. See Multi-Service SaaS Patterns for cross-service bindings, credential scopes, side-effect posture, and known gaps.
M20 records end-to-end authoring/package trial evidence in SaaS Authoring Trials. The trial matrix identifies which fixtures converge today and which need OpenAPI/request-field repair before strict promotion.
M21 promotes trial-backed strict coverage for weather-toronto and repairs
bearer security request-field placement so the strict multi-service fixtures can
build, review, and pass trusted-runner dry-run gates from their reference
intents.
Advisory Evidence
Advisory fixtures stay useful because they show which provider operations users
are likely to ask for. They must not introduce n8n runtime concepts into UWS or
OpenUdon.
Selected M22 fixtures add reference/n8n-bridge.json summaries under the
n8n Pattern Bridge contract so this evidence can be
validated without importing or executing n8n workflows.
| Fixture | Service | Operation | Binding Name | Current Role |
|---|---|---|---|---|
n8n-airtable-record-get |
Airtable | getAirtableRecord |
airtable_api_key |
Advisory provider vocabulary plus native pattern coverage in airtable-record-normalize. |
n8n-gmail-message-send |
Gmail | sendMessage |
gmail_oauth_token |
Advisory n8n provenance; strict native Gmail fixture owns release coverage. |
n8n-google-drive-file-upload |
Google Drive | uploadFile |
google_drive_oauth_token |
Advisory upload shape; strict native Drive coverage is not selected yet. |
n8n-hubspot-deal-list |
HubSpot | listDeals |
hubspot_private_app_token |
Advisory CRM list shape; strict native HubSpot coverage is not selected yet. |
n8n-jira-issue-get |
Jira | getIssue |
jira_api_token |
Advisory read shape; strict native Jira coverage currently uses createIssue. |
n8n-openweathermap-current-weather |
OpenWeatherMap | getOpenWeatherMapCurrentWeather |
openweathermap_appid |
Advisory provider-specific weather shape; generic native weather coverage is separate. |
n8n-pagerduty-user-get |
PagerDuty | getUser |
pagerduty_api_token |
Advisory provider vocabulary plus native pattern coverage in pagerduty-user-contact-card. |
n8n-slack-message-post |
Slack | postMessage |
slack_bot_token |
Advisory n8n provenance; strict native Slack fixture owns release coverage. |
n8n-trello-list-get-all |
Trello | listTrelloBoardLists |
trello_api_token |
Advisory provider vocabulary plus native pattern coverage in trello-list-summary. |
OpenAPI Readiness Matrix
| Service | Fixture Evidence | Request Fields | Response Fields | Security Evidence | Readiness |
|---|---|---|---|---|---|
| Slack | slack-message-audit-log, itops-slack-jira-issue-intake, n8n-slack-message-post |
channel, text; channel, ts for fetch |
ok, channel, ts, message.text |
slack_bot_token in IT Ops fixture; sandbox Slack post has no auth scheme |
strict native for post and IT Ops flow; advisory n8n provenance retained. |
| Gmail | gmail-send-audit-receipt, n8n-gmail-message-send |
to, subject, message |
id, threadId |
gmail_oauth_token convention; sandbox native slice has no auth scheme |
strict native for send-message authoring. |
| Jira | itops-slack-jira-issue-intake, n8n-jira-issue-get |
projectKey, summary, description, issueType, optional priority |
key, self |
jira_api_token through bearer binding |
strict native for create issue; advisory for get issue. |
| HubSpot | n8n-hubspot-deal-list |
no required request fields in copied list slice | response schema is sparse in copied slice | hubspot_private_app_token convention |
advisory; needs native project brief and stricter schema before graduation. |
| Google Drive | itops-incident-response-archive, n8n-google-drive-file-upload |
parentId, name, content in native archive; sparse provider upload slice in n8n fixture |
uploaded file id and name in native archive |
google_drive_oauth_token convention |
native multi-service archive exists; M16 strict set defers Drive-specific graduation. |
| Airtable | airtable-record-normalize, n8n-airtable-record-get |
baseId, tableId, recordId |
id, fields, createdTime |
airtable_api_key convention; native sandbox slice has no auth scheme |
native pattern ready; not in initial strict SaaS golden set. |
| PagerDuty | pagerduty-user-contact-card, n8n-pagerduty-user-get |
userId |
user.id, user.name, user.email |
pagerduty_api_token convention; native sandbox slice has no auth scheme |
native pattern ready; not in initial strict SaaS golden set. |
| Trello | trello-list-summary, n8n-trello-list-get-all |
boardId |
lists[].id, lists[].name, lists[].closed |
trello_api_token convention; native sandbox slice has no auth scheme |
native pattern ready; provider operation ID mismatch remains before graduation. |
| OpenWeatherMap | weather-toronto, n8n-openweathermap-current-weather, weather-enrichment-advice |
q, lat, lon, appid in strict native fixture; provider-specific query in n8n fixture |
coordinate lat/lon feeds weather lookup; weather response body is output |
weather_appid in strict native fixture; openweathermap_appid advisory convention remains for n8n-derived evidence |
strict native for chained read authoring; advisory provider-specific n8n evidence retained. |
Graduation Criteria
An advisory fixture can graduate to strict native coverage when it has:
- an OpenUdon-owned
project.mdthat does not depend on n8n runtime behavior; - a local OpenAPI slice with stable operation IDs, required request fields, response fields used by outputs/binds, and security schemes when credentials are part of the provider call;
- a
reference/intent.hclwith explicitwithandbindmappings for every required request field and every consumed response field; - symbolic credential binding names in project text and intent, never values;
- side-effect language for send/create/update/delete/upload/post operations;
reference/policy.jsonin strict mode withmax_blockingset to0;- optional
reference/authoring.jsonmetadata documenting the authoring contract, mappings, response paths, credential binding, and fixture role. - optional
reference/n8n-bridge.jsonmetadata documenting n8n-derived authoring evidence and unsupported semantics.
If any of those inputs are incomplete, keep the fixture advisory and use it as service-priority evidence only.