Point One Zero Platform architecturev11 · generated viewSign in to edit
Client Delivery › C1 spec: Experience config

C1 spec: Experience config

The configuration requirement for the Experience layer: every client-specific input, where it is captured, where it is stored, and exactly where it lands in the system. This is the first of the per-band configuration specifications. The discipline it enforces: a client input exists only if it has a binding key, a generated artifact it materializes into, a moment it takes effect, and a check that verifies it. Anything that fails that test is either a Solution-layer overlay or out of scope. Omnichannel is not on this list, because it is not an input: continuity across channels is a default capability of the platform, stated as requirement REQ-E-00 below.

Ground rules

  1. Values enter once, in the binding. Every Experience input lives under the experience: block of binding.yaml (the C1 band). Nothing is configured directly in a shell, a gateway file, or a template by hand.
  2. Everything downstream is generated. A plane change regenerates the per-tenant artifacts listed below through CI; hand-editing any generated artifact is a defect the pipeline rejects.
  3. Template resolution is layered. The renderer resolves templates client pack first, default pack second: a client without a custom template still renders, and adding one never touches code.
  4. Shells carry no configuration logic. A shell reads one generated runtime config and renders what the gateway serves. If a value would change shell code, it is in the wrong place.

REQ-E-00: omnichannel by default

Cross-channel continuity is a platform capability, not a client option. One conversation follows the person across every activated channel: the session is keyed to the person by the session and memory machinery (L7), every channel adapter and shell attaches to that session through the north gateway, and the shared UI core reconciles client-side state with it. A conversation started in chat continues on mobile, resumes on the phone, and closes in the web app with full context. Clients configure which channels are on (REQ-E-01); they do not configure whether the conversation follows the user, and no per-channel silo can be created through configuration. The only client-adjustable aspects are session handoff timeout and device-trust constraints, which are C7 security values, not C1 values.

The configuration map

Every row: the input, the discovery section that captures it, the binding key that stores it, the exact artifact it materializes into, when it takes effect, and the check that verifies it. Discovery letters refer to the interview guide and data requests on the Discovery guide page.

IDClient inputDisc.Binding keyMaterializes asTakes effectVerified by
E-01Channel activation per audience: which of chat, web, desktop, mobile, voice, phone / call center, embedded, hosts are on, for whomGexperience.channels[]Per-tenant north gateway config (gateway/north/tenants/<t>.yaml, channels block) + shell runtime configOn config deployGateway conformance test: an inactive channel cannot open a session
E-02MCP host allow-list: which third-party hosts may connectGexperience.hosts.allowlist[]Same gateway config, hosts blockOn config deployGateway refuses any unlisted host; tested per deploy
E-03Brand and theme: logos, colors, typographyCexperience.brand_packOne theme token file: packages/ui-core/themes/<t>.tokens.json, generated from the brand pack and served to every shell as a UI resourceNext sessionToken schema check; no color or font literal anywhere in shell code
E-04House templates per document typeCexperience.template_pack@versionClient template pack templates/<t>/ in the engagement repo; renderer resolves client pack then default packNext outputTemplate completeness check: every activated use case's document types resolve
E-05Output formats per document type (PowerPoint, Word, Excel, PDF)Cexperience.output_formats{}Renderer config renderer/config/<t>.yamlNext outputRenderer refuses a document type with no format mapping
E-06Tone and writing styleCexperience.tone_profileA reviewable tone guide file referenced from skills' references/; the generated client constitution points agents at itNext runEval suite: style adherence scored against golden exemplars
E-07Locale conventions: currency, date, number, language(s)Cexperience.locale{}Renderer config + ui-core formatting config; locale validated at input, never inferred at render timeNext outputLocale validation check; a missing locale blocks Gate G2
E-08Notification rules: what may be sent proactively, to whom, over which channel, quiet hours, digest schedule and timezoneGexperience.notifications[]Harness notification-rules config per tenant; escalation timers cross-reference the C7 valuesImmediatelyRule linter: no notification path exists outside a rule
E-09Embedded surfaces: which work tools the assistant appears insideGexperience.embedded_surfaces[]Widget SDK config + gateway allow-list entries per surfaceOn config deployEach embedded surface authenticates as its own allow-listed entry
E-10Telephony and voice: numbers, IVR entry points, voice selection, operator console on or offGexperience.telephony{}Channel adapter config per tenant; speech in and out at the edge, the same gateway session behind itOn config deployAdapter conformance: a call attaches to the same session machinery as every other channel
E-11Surface distribution: web custom domain and SSO redirect URIs, desktop update channel, mobile distribution pathG, Eexperience.surfaces{}Generated shell runtime configs apps/<shell>/config/<t>.json (endpoint, IdP reference, enabled channels)On shell releaseShell config schema check; IdP values come from C7, never duplicated here
E-12Review surface preferences: reading order per document type, reviewer assignment defaultsFexperience.review_ui{}Review surface config per tenant; redundant status encoding and assistive-technology access are platform defaults, not optionsNext reviewAccessibility checks run on the review surface build
E-13Feedback capture scope: which user corrections may be captured as eval signalIexperience.feedback_scopeEval-store routing config; classification inheritance applies to everything capturedImmediatelyCapture outside the scope is blocked at the routing layer, within the data-rights clause

Where each artifact lives

The SSRA placement for everything the map above generates. Generated means exactly that: regenerated on every plane change, rejected by CI if hand-edited.

ArtifactRepository locationGenerated fromCI check
Per-tenant gateway configpe-platform-infra/gateway/north/tenants/experience.channels, hosts, embedded_surfaces + C7 auth valuesSchema + conformance test per deploy
Theme token filepe-platform-apps/packages/ui-core/themes/experience.brand_packToken schema; literal-free shell audit
Client template packclient-<name>/templates/Collected in discovery C; versioned with the bindingTemplate completeness against activated use cases
Renderer configclient-<name>/renderer/config/experience.output_formats + localeFormat mapping and locale validation
Shell runtime configspe-platform-apps/apps/*/config/experience.surfaces + C7 idp_configConfig schema; no secrets, vault references only
Notification rulesclient-<name>/notifications/experience.notifications + C7 escalationRule linter
Tone guideclient-<name>/references/tone-guide.mdDiscovery C exemplars, reviewed with the clientReferenced by generated constitution; style evals
Telephony adapter configclient-<name>/channels/telephony.yamlexperience.telephonyAdapter conformance test

Acceptance: C1 configuration is complete when

  1. Every activated use case renders through the client template pack or the default pack, in the declared format, in the declared locale.
  2. Every activated channel opens, carries, and resumes the same conversation: the omnichannel walkthrough passes across at least two channels.
  3. The gateway conformance test proves inactive channels and unlisted hosts cannot connect.
  4. No shell, template, or config contains a hand-edited value: regeneration from the binding reproduces every artifact byte for byte.
  5. All thirteen binding keys above are valued or explicitly waived on the Decision Register; a blank key blocks Gate G2.

The ground rules and artifact-placement conventions on this page apply to the whole series, C2 through C7; those pages do not repeat them.