sla-configuration-alignmentrun.md00_intake/stub.mdThe SLA section drafts "tiers to choose from", but the platform has exactly one SLA configuration per
tenant: one live sla_definition per service stage (Request, BRD, Bidding, Delivery, Billing, CSAT),
each with an owner role, Response/Resolution timers (target / warning / breach business days), an impact
level, and an escalation toggle. The tier-picker model is wrong and produces meaningless options.
Reshape the SLA blueprint to draft the single full SLA configuration: one item per the six SLA_STAGES,
each carrying the real timer fields (ownerRole, slaType, targetDays, warningDays, breachDays,
impact, escalationEnabled). Seed from the platform SLA defaults (tenant-defaults) and let the AI
adjust values from the source where sensible; the operator confirms/tunes each stage in the chat.
Contract, prompt, review-panel editable fields, and commit all reflect the 6-stage config (commit
already targets sla_definitions).
data matches the real sla_definition fields and validates against
SLA_STAGES and the timer/impact/role enums.sla_definitions (one live per stage) without violating
the unique per-stage index.sla-definition model or the /admin/settings/sla CRUD itself.ownerRole, slaType (Response|Resolution), targetDays,
warningDays, breachDays, impact, escalationEnabled}. Defaults in
packages/services/src/db/seed/tenant-defaults.ts (SLA_DEFAULTS). The commit path's toSlaInput
already reads these fields.packages/services/src/ai/onboarding/{contract.ts,prompt.ts,analyse-source.ts},
packages/services/src/db/services/onboarding-blueprint/commit.ts (the sla branch),
apps/web/components/onboarding/types.ts (sla SECTION_META); reference
packages/services/src/db/models/sla-definition.ts + db/seed/tenant-defaults.ts.01_define/output/spec.mdThe onboarding concierge drafts the SLA blueprint section as "support/service-level tiers or
commitments" — an open-ended tier-picker. But the platform has exactly one SLA configuration per
tenant: one live sla_definition per service stage across the six SLA_STAGES (Request, BRD,
Bidding, Delivery, Billing, CSAT), each with an owner role, a Response/Resolution timer set
(target / warning / breach business days), an impact level, and an escalation toggle. The tier model
produces meaningless options that don't map onto anything the tenant can actually run, so the
blueprint the operator confirms doesn't match the SLA config the platform commits. This is part of
the onboarding-blueprint-alignment epic (Build the Bridge / Q2-2026 O1 — establish product-market
fit with vendor partners by onboarding them onto a workspace that reflects the real platform), which
aligns each blueprint section to its real model so a freshly onboarded tenant lands with valid config.
Reshape the SLA blueprint section — end to end on the drafting side — to draft the single full 6-stage SLA configuration instead of arbitrary tiers:
SLA_STAGES from the platform SLA defaults (SLA_DEFAULTS in db/seed/tenant-defaults.ts),
one item per stage keyed by stage, each carrying the real fields (stage, ownerRole, slaType,
targetDays, warningDays, breachDays, impact, escalationEnabled).analyse_source may tune the seeded timer values
from the source where the business material warrants it, but works within the fixed six stages and
the real field shape — it never adds tiers, drops a stage, or invents fields.targetDays, warningDays, breachDays) stay inline-editable per
stage (as today) while stage/ownerRole/slaType/impact/escalationEnabled come from the
seed + AI and are shown but not operator-editable this round.sla_definitions (one upsert per stage via toSlaInput); confirm it
consumes the seeded shape unchanged and update only the stale "tiers" labelling around it.SLA_STAGES service-stage definitions (one item
per stage, keyed by stage) — never arbitrary/empty tiers.SLA_DEFAULTS, so every stage is
present with valid default field values before any AI adjustment.sla_definition field shape; it does not add tiers or drop stages.data carries the real sla_definition fields (stage, ownerRole,
slaType, targetDays, warningDays, breachDays, impact, escalationEnabled) and passes
the commit's toSlaInput validation and the sla-definition schema enums.sla_definitions — one live row per
stage — without violating the unique-per-stage partial index.analyse-source system prompt, and the extraction contract describe the
6-stage SLA configuration (real fields), with no remaining "tiers to choose from" framing.ownerRole/slaType/impact are shown for context.sla-definition model or the /admin/settings/sla CRUD.escalationEnabled flag records intent only).ownerRole, slaType, impact, or escalationEnabled operator-editable in the inline
review panel — enum/boolean editor support is deferred; only the day timers are editable this round.02_build/output/notes.mdfeat: sla-configuration-alignment — draft the real six-stage SLA config, not tierspackages/services/src/db/seed/tenant-defaults.ts: exported SLA_DEFAULTS (and the
SlaDefault type) so the onboarding blueprint seeds from the platform's single source of
truth instead of a duplicate table.packages/services/src/ai/onboarding/sla-seed.ts (new): buildSlaSeedItem(stage) and
seedSlaSection(tenantId) — deterministically materialise exactly the six SLA_STAGES as
stage-keyed blueprint items carrying the real sla_definition shape (stage, ownerRole,
slaType, targetDays, warningDays, breachDays, impact, escalationEnabled). Existing
stage items are preserved on re-seed; missing stages added; non-stage junk dropped.packages/services/src/ai/onboarding/analyse-source.ts: seed the SLA section from platform
defaults at the top of analyseSource (before any AI drafting, and regardless of whether the
source resolves); skip the sla key in the extraction write-loop so the model's freeform
output can't dilute the six-stage config; system prompt now tells the extractor to leave sla
empty (seeded separately).packages/services/src/ai/onboarding/prompt.ts: the concierge instructions describe sla as
the six-stage configuration and add explicit guidance — the section is pre-seeded, never
add/remove stages, only tune a stage's day timers via draft_section keyed by stage.packages/services/src/ai/onboarding/contract.ts: dropped "tiers" from the payload
description; documented that sla is seeded (not source-extracted) while keeping the key so the
section vocabulary stays in lockstep.packages/services/src/db/services/onboarding-blueprint/commit.ts: comment-only — "SLA tiers"
→ "SLA configuration" (the commit path already upserts one sla_definition per stage via
toSlaInput, unchanged).apps/web/components/onboarding/types.ts: section label and collection label "SLA tiers" →
"SLA configuration"; editable fields stay the three business-day timers (per the numeric-only
decision).apps/web/components/onboarding/blueprint-item.tsx: the item summary surfaces an SLA stage's
slaType / impact / ownerRole for context (read-only), since day timers are the editable
fields.packages/services/src/ai/onboarding/blueprint-tools.ts (review follow-up): draft_section now
merges an item's data field-wise over the existing item instead of replacing it wholesale.
Without this, the concierge tuning one SLA stage's day timers would wipe the seeded
stage/ownerRole/slaType/impact fields and fail the whole blueprint commit (toSlaInput).
Mirrors the inline editor's merge.SLA_STAGES (one item per stage, keyed by stage) —
seedSlaSection builds exactly six stage-keyed items and drops anything else.SLA_DEFAULTS before any AI adjustment —
seeded at the top of analyseSource from the exported platform defaults.draft_section timer tweaks keyed by stage; analyse-source ignores freeform sla; re-seed
preserves edits and drops non-stage items.data carries the real sla_definition fields and passes toSlaInput +
schema enums — seed data mirrors the model's required fields plus stage/escalationEnabled.sla_definitions (one live per stage), no unique-index violation —
unchanged per-stage upsert path; six distinct stages.analyse-source system prompt and the extraction contract describe the six-stage
config with no "tiers to choose from" framing — all updated; remaining "tier" mentions are
negative ("never add tiers").analyseSource, which the concierge prompt guarantees is called at the start
(URL or free-text description both route through it), and it seeds even when the source is
unreachable/empty — so the SLA section is always the full six-stage config.03_release/output/changelog.mdPublished at apps/help/app/changelog/2026-07-08-sla-configuration-alignment/page.mdx.
When you set up a new workspace, the setup assistant now drafts your service-level agreements as the six service stages you actually run — Request, BRD, Bidding, Delivery, Billing and CSAT — instead of placeholder tiers. Each stage is pre-filled with sensible response/resolution targets to confirm or adjust, and whatever you approve commits straight into your live SLA settings.
03_release/output/investor-update.mdWho it's for: Admins and vendors setting up a new workspace What shipped: The onboarding assistant drafts the platform's real six-stage SLA configuration, pre-filled from defaults, instead of placeholder tiers. Why it matters: Vendors land with a valid, ready-to-run SLA setup, cutting onboarding friction — advancing Build the Bridge: establish product-market fit with vendor partners.
Dig deeper: <merged-PR URL> · <changelog entry URL>
03_release/output/release.mdtechnical/packages/services describes the concierge as interviewing "the six blueprint sections"; that stays true (this refines the SLA section's internal shape, not the flow, app, package, route, or env).apps/docs/app/business page documents the onboarding SLA section's shape; platform-overview's "SLA timers configured per tenant" line is unchanged./code-review medium on the diff (origin/main...HEAD): no actionable findings. Correctness,
removed-behavior, cross-file, reuse, simplification, efficiency, altitude and CONVENTIONS angles all
clean.draft_section replacing item data wholesale,
which would wipe seeded SLA fields on a partial timer update and fail the commit — was fixed in
commit 00b1324 (field-wise merge, mirroring the inline editor). Verified in this review.seedSlaSection runs on every analyse_source call and preserves existing stage items by key, so
operator/AI timer edits survive a re-seed; non-stage entries are dropped, enforcing exactly six
stages.SLA_STAGES, keyed by stage — seedSlaSection builds exactly six stage-keyed items, drops non-stage entries.SLA_DEFAULTS before AI adjustment — seeded at the top of analyseSource.draft_section timer tweaks; analyse-source ignores freeform sla; draft_section now merges data field-wise so partial updates preserve seeded fields.data carries the real sla_definition fields; passes toSlaInput + schema enums.sla_definitions (one live per stage) — unchanged per-stage upsert path.