Add execution pacing profiles to offers and marketplace API
This commit is contained in:
parent
d1c60fe44e
commit
6bd8a004c9
@ -46,6 +46,11 @@ func (a *app) marketplaceOffers() []marketplaceOffer {
|
|||||||
MultiTenant: false,
|
MultiTenant: false,
|
||||||
EntitlementClass: "solo_core",
|
EntitlementClass: "solo_core",
|
||||||
},
|
},
|
||||||
|
ExecutionProfile: marketplaceExecutionProfile{
|
||||||
|
ConnectorSurface: "hybrid",
|
||||||
|
PacingTier: "governed_human_pace",
|
||||||
|
HumanPaceFloorMS: 1200,
|
||||||
|
},
|
||||||
SortOrder: 10,
|
SortOrder: 10,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -68,6 +73,11 @@ func (a *app) marketplaceOffers() []marketplaceOffer {
|
|||||||
MultiTenant: false,
|
MultiTenant: false,
|
||||||
EntitlementClass: "workspace_core",
|
EntitlementClass: "workspace_core",
|
||||||
},
|
},
|
||||||
|
ExecutionProfile: marketplaceExecutionProfile{
|
||||||
|
ConnectorSurface: "hybrid",
|
||||||
|
PacingTier: "governed_human_pace",
|
||||||
|
HumanPaceFloorMS: 1200,
|
||||||
|
},
|
||||||
SortOrder: 20,
|
SortOrder: 20,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -91,6 +101,11 @@ func (a *app) marketplaceOffers() []marketplaceOffer {
|
|||||||
EntitlementClass: "workspace_ai",
|
EntitlementClass: "workspace_ai",
|
||||||
RequiresOffers: []string{offerIDWorkspaceCore},
|
RequiresOffers: []string{offerIDWorkspaceCore},
|
||||||
},
|
},
|
||||||
|
ExecutionProfile: marketplaceExecutionProfile{
|
||||||
|
ConnectorSurface: "hybrid",
|
||||||
|
PacingTier: "governed_human_pace",
|
||||||
|
HumanPaceFloorMS: 1200,
|
||||||
|
},
|
||||||
SortOrder: 30,
|
SortOrder: 30,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -114,6 +129,10 @@ func (a *app) marketplaceOffers() []marketplaceOffer {
|
|||||||
EntitlementClass: "workspace_lane24",
|
EntitlementClass: "workspace_lane24",
|
||||||
RequiresOffers: []string{offerIDWorkspaceCore},
|
RequiresOffers: []string{offerIDWorkspaceCore},
|
||||||
},
|
},
|
||||||
|
ExecutionProfile: marketplaceExecutionProfile{
|
||||||
|
ConnectorSurface: "edut_native",
|
||||||
|
PacingTier: "local_hardware_speed",
|
||||||
|
},
|
||||||
SortOrder: 40,
|
SortOrder: 40,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -137,6 +156,10 @@ func (a *app) marketplaceOffers() []marketplaceOffer {
|
|||||||
EntitlementClass: "workspace_sovereign",
|
EntitlementClass: "workspace_sovereign",
|
||||||
RequiresOffers: []string{offerIDWorkspaceCore},
|
RequiresOffers: []string{offerIDWorkspaceCore},
|
||||||
},
|
},
|
||||||
|
ExecutionProfile: marketplaceExecutionProfile{
|
||||||
|
ConnectorSurface: "edut_native",
|
||||||
|
PacingTier: "local_hardware_speed",
|
||||||
|
},
|
||||||
SortOrder: 50,
|
SortOrder: 50,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,14 +3,15 @@ package main
|
|||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
type marketplaceOffer struct {
|
type marketplaceOffer struct {
|
||||||
OfferID string `json:"offer_id"`
|
OfferID string `json:"offer_id"`
|
||||||
IssuerID string `json:"issuer_id"`
|
IssuerID string `json:"issuer_id"`
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
Summary string `json:"summary,omitempty"`
|
Summary string `json:"summary,omitempty"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
Pricing marketplaceOfferPrice `json:"pricing"`
|
Pricing marketplaceOfferPrice `json:"pricing"`
|
||||||
Policies marketplaceOfferPolicy `json:"policies"`
|
Policies marketplaceOfferPolicy `json:"policies"`
|
||||||
SortOrder int `json:"-"`
|
ExecutionProfile marketplaceExecutionProfile `json:"execution_profile,omitempty"`
|
||||||
|
SortOrder int `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type marketplaceOfferPrice struct {
|
type marketplaceOfferPrice struct {
|
||||||
@ -30,6 +31,12 @@ type marketplaceOfferPolicy struct {
|
|||||||
RequiresOffers []string `json:"requires_offers,omitempty"`
|
RequiresOffers []string `json:"requires_offers,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type marketplaceExecutionProfile struct {
|
||||||
|
ConnectorSurface string `json:"connector_surface"`
|
||||||
|
PacingTier string `json:"pacing_tier"`
|
||||||
|
HumanPaceFloorMS int `json:"human_pace_floor_ms,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type marketplaceOffersResponse struct {
|
type marketplaceOffersResponse struct {
|
||||||
Offers []marketplaceOffer `json:"offers"`
|
Offers []marketplaceOffer `json:"offers"`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,11 @@ Success (`200`):
|
|||||||
"decimals": 6,
|
"decimals": 6,
|
||||||
"chain_id": 8453
|
"chain_id": 8453
|
||||||
},
|
},
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200
|
||||||
|
},
|
||||||
"policies": {
|
"policies": {
|
||||||
"member_only": true,
|
"member_only": true,
|
||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
@ -101,6 +106,7 @@ Success (`200`):
|
|||||||
1. `amount`/`amount_atomic` represent the license component.
|
1. `amount`/`amount_atomic` represent the license component.
|
||||||
2. `total_amount`/`total_amount_atomic` represent the actual payable quote total.
|
2. `total_amount`/`total_amount_atomic` represent the actual payable quote total.
|
||||||
3. First checkout can include membership activation as a separate line item.
|
3. First checkout can include membership activation as a separate line item.
|
||||||
|
4. `execution_profile.pacing_tier` distinguishes external human-governed cadence from native local-speed execution.
|
||||||
|
|
||||||
Error (`403`):
|
Error (`403`):
|
||||||
|
|
||||||
|
|||||||
@ -137,6 +137,19 @@ components:
|
|||||||
type: integer
|
type: integer
|
||||||
chain_id:
|
chain_id:
|
||||||
type: integer
|
type: integer
|
||||||
|
execution_profile:
|
||||||
|
type: object
|
||||||
|
required: [connector_surface, pacing_tier]
|
||||||
|
properties:
|
||||||
|
connector_surface:
|
||||||
|
type: string
|
||||||
|
enum: [edut_native, external_connector, hybrid]
|
||||||
|
pacing_tier:
|
||||||
|
type: string
|
||||||
|
enum: [governed_human_pace, local_hardware_speed]
|
||||||
|
human_pace_floor_ms:
|
||||||
|
type: integer
|
||||||
|
minimum: 0
|
||||||
policies:
|
policies:
|
||||||
type: object
|
type: object
|
||||||
required: [member_only, workspace_bound, transferable, internal_use_only, multi_tenant]
|
required: [member_only, workspace_bound, transferable, internal_use_only, multi_tenant]
|
||||||
|
|||||||
@ -12,7 +12,12 @@
|
|||||||
"workspace_bound": false,
|
"workspace_bound": false,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.core",
|
"offer_id": "edut.workspace.core",
|
||||||
@ -24,7 +29,12 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.ai",
|
"offer_id": "edut.workspace.ai",
|
||||||
@ -36,7 +46,12 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.lane24",
|
"offer_id": "edut.workspace.lane24",
|
||||||
@ -48,7 +63,11 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "edut_native",
|
||||||
|
"pacing_tier": "local_hardware_speed"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.sovereign",
|
"offer_id": "edut.workspace.sovereign",
|
||||||
@ -60,7 +79,11 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "edut_native",
|
||||||
|
"pacing_tier": "local_hardware_speed"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"published_at": "2026-02-17T00:00:00Z"
|
"published_at": "2026-02-17T00:00:00Z"
|
||||||
|
|||||||
@ -21,10 +21,16 @@
|
|||||||
"requires_admin_approval": false
|
"requires_admin_approval": false
|
||||||
},
|
},
|
||||||
"entitlement": {
|
"entitlement": {
|
||||||
"type": "runtime_license",
|
"type": "module_license",
|
||||||
"scope": "org_root",
|
"scope": "workspace",
|
||||||
"runtime_policy_ref": "policy.workspace.core.v1"
|
"runtime_policy_ref": "policy.workspace.core.v1"
|
||||||
},
|
},
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200,
|
||||||
|
"notes": "External egress paths are paced at governed human cadence."
|
||||||
|
},
|
||||||
"created_at": "2026-02-17T00:00:00Z",
|
"created_at": "2026-02-17T00:00:00Z",
|
||||||
"updated_at": "2026-02-17T00:00:00Z",
|
"updated_at": "2026-02-17T00:00:00Z",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
|||||||
@ -35,7 +35,26 @@
|
|||||||
"workspace_bound": { "type": "boolean" },
|
"workspace_bound": { "type": "boolean" },
|
||||||
"transferable": { "type": "boolean" },
|
"transferable": { "type": "boolean" },
|
||||||
"internal_use_only": { "type": "boolean" },
|
"internal_use_only": { "type": "boolean" },
|
||||||
"multi_tenant": { "type": "boolean" }
|
"multi_tenant": { "type": "boolean" },
|
||||||
|
"execution_profile": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": ["connector_surface", "pacing_tier"],
|
||||||
|
"properties": {
|
||||||
|
"connector_surface": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["edut_native", "external_connector", "hybrid"]
|
||||||
|
},
|
||||||
|
"pacing_tier": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["governed_human_pace", "local_hardware_speed"]
|
||||||
|
},
|
||||||
|
"human_pace_floor_ms": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -143,6 +143,39 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"execution_profile": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": [
|
||||||
|
"connector_surface",
|
||||||
|
"pacing_tier"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"connector_surface": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"edut_native",
|
||||||
|
"external_connector",
|
||||||
|
"hybrid"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pacing_tier": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"governed_human_pace",
|
||||||
|
"local_hardware_speed"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"human_pace_floor_ms": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"notes": {
|
||||||
|
"type": "string",
|
||||||
|
"maxLength": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"created_at": {
|
"created_at": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "date-time"
|
"format": "date-time"
|
||||||
|
|||||||
@ -11,7 +11,12 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.core",
|
"offer_id": "edut.workspace.core",
|
||||||
@ -23,7 +28,12 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.ai",
|
"offer_id": "edut.workspace.ai",
|
||||||
@ -35,7 +45,12 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "hybrid",
|
||||||
|
"pacing_tier": "governed_human_pace",
|
||||||
|
"human_pace_floor_ms": 1200
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.lane24",
|
"offer_id": "edut.workspace.lane24",
|
||||||
@ -47,7 +62,11 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "edut_native",
|
||||||
|
"pacing_tier": "local_hardware_speed"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"offer_id": "edut.workspace.sovereign",
|
"offer_id": "edut.workspace.sovereign",
|
||||||
@ -59,7 +78,11 @@
|
|||||||
"workspace_bound": true,
|
"workspace_bound": true,
|
||||||
"transferable": false,
|
"transferable": false,
|
||||||
"internal_use_only": true,
|
"internal_use_only": true,
|
||||||
"multi_tenant": false
|
"multi_tenant": false,
|
||||||
|
"execution_profile": {
|
||||||
|
"connector_surface": "edut_native",
|
||||||
|
"pacing_tier": "local_hardware_speed"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user