JJijibora Docs
docs.jijibora.online
On this page (336 sections)

GenMfg Façade API — OpenAPI 1.1.0

<!-- GENERATED by scripts/render-platform-map-api-docs.mjs — do not hand-edit; edit apps/agent-bff/openapi/<spec>.json and re-run. --> Scope: The published reference for GenMfg Façade API. 163 paths — the measured spec-vs-implementation coverage lives in the complete API inventory. Status: rendered 2026-11-09 from the OpenAPI source for GenMfg Façade API — regenerate with node scripts/render-platform-map-api-docs.mjs. See also: the OpenAPI spec index.

Servers

URLNotes
http://127.0.0.1:3030agent-bff

Paths — 163 paths / 331 operations

MethodPathOperation IDSummary
GET/v1/genmfg/bindingsgenmfgListBindingsList integration bindings for org (connections-store)
X-GENMFG-PATH-CLASS/v1/genmfg/bindings—
POST/v1/genmfg/bindings/step-ownergenmfgBindingsStepOwnerResolve multi-party sticky bindings for step owner org (GEN-H03 Soft Soft≠LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/bindings/step-owner—
POST/v1/genmfg/logistics/lifecycle/plangenmfgLogisticsLifecyclePlanSoft Soft≠LIVE normalized logistics lifecycle plan (GEN-F02)
X-GENMFG-PATH-CLASS/v1/genmfg/logistics/lifecycle/plan—
POST/v1/genmfg/logistics/lifecycle/assertgenmfgLogisticsLifecycleAssertAssert Soft Soft≠LIVE adjacent lifecycle transition (GEN-F02)
X-GENMFG-PATH-CLASS/v1/genmfg/logistics/lifecycle/assert—
POST/v1/genmfg/prove/dual-pack-domgenmfgProveDualPackDomSoft Soft≠LIVE AG vs mining.gold Player/bench DOM assert (GEN-X03)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/dual-pack-dom—
POST/v1/genmfg/on-failure/assertgenmfgOnFailureAssertSoft Soft≠LIVE declarative on_failure subflow (GEN-D06 / FS-02)
X-GENMFG-PATH-CLASS/v1/genmfg/on-failure/assert—
POST/v1/genmfg/catalog/workflow-ban/assertgenmfgCatalogWorkflowBanAssertSoft Soft≠LIVE ban materra-*-workflow paths for catalog scenarios (GEN-D08)
X-GENMFG-PATH-CLASS/v1/genmfg/catalog/workflow-ban/assert—
POST/v1/genmfg/s2s/assertgenmfgS2sAssertSoft Soft≠LIVE SPIFFE/mTLS or dual JWT BFF→bridge→Camel (GEN-A08)
X-GENMFG-PATH-CLASS/v1/genmfg/s2s/assert—
POST/v1/genmfg/prove/seed/loadgenmfgProveSeedLoadSoft Soft≠LIVE prove seed load (GEN-P10)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/seed/load—
POST/v1/genmfg/prove/seed/unloadgenmfgProveSeedUnloadSoft Soft≠LIVE prove seed unload-always (GEN-P10)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/seed/unload—
GET/v1/genmfg/prove/seed/{seed_run_id}genmfgProveSeedGetSoft Soft≠LIVE prove seed status (GEN-P10)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/seed/{seed_run_id}—
POST/v1/genmfg/prove/nightly/assertgenmfgProveNightlyAssertSoft Soft≠LIVE nightly staging prove unload-always contract (GEN-P10)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/nightly/assert—
POST/v1/genmfg/materra/embed/assertgenmfgMaterraEmbedAssertSoft Soft≠LIVE Materra embed: ban Soft memory scenario fallback (GEN-M08)
X-GENMFG-PATH-CLASS/v1/genmfg/materra/embed/assert—
POST/v1/genmfg/entitlements/assertgenmfgEntitlementsAssertSoft Soft≠LIVE stale entitlement invent_refuse + reason codes (GEN-22)
X-GENMFG-PATH-CLASS/v1/genmfg/entitlements/assert—
POST/v1/genmfg/sourcing/readiness/assertgenmfgSourcingReadinessAssertSoft Soft≠LIVE solver+Kestra+entitlements readiness aggregate (GEN-S05)
X-GENMFG-PATH-CLASS/v1/genmfg/sourcing/readiness/assert—
POST/v1/genmfg/journeys/kestra/bindgenmfgJourneysKestraBindSoft Soft≠LIVE journey YAML → compileKestraScenarioFlowYaml bind (GEN-14a)
X-GENMFG-PATH-CLASS/v1/genmfg/journeys/kestra/bind—
POST/v1/genmfg/materra/agri-stamp/assertgenmfgMaterraAgriStampAssertSoft Soft≠LIVE Materra stamps industry_pack=agriculture + org_id (GEN-M01)
X-GENMFG-PATH-CLASS/v1/genmfg/materra/agri-stamp/assert—
POST/v1/genmfg/from-sourcing-award/work-ordergenmfgFromSourcingAwardWorkOrderSoft Soft≠LIVE award→WO copies correlation + fill/route plan refs (GEN-S04)
X-GENMFG-PATH-CLASS/v1/genmfg/from-sourcing-award/work-order—
POST/v1/genmfg/hooks/solver-sourcing/assertgenmfgHooksSolverSourcingAssertSoft Soft≠LIVE solver:/sourcing: hooks → decision-gateway/sourcing-kv (GEN-S03/ES03)
X-GENMFG-PATH-CLASS/v1/genmfg/hooks/solver-sourcing/assert—
POST/v1/genmfg/from-multi-fillgenmfgFromMultiFillSoft Soft≠LIVE multi_fill mango → GenMfg voyage (GEN-ES04)
X-GENMFG-PATH-CLASS/v1/genmfg/from-multi-fill—
POST/v1/genmfg/integration-entity/instance-id/assertgenmfgIntegrationEntityInstanceIdAssertSoft Soft≠LIVE integration_entity metadata.instance_id required (GEN-I04)
X-GENMFG-PATH-CLASS/v1/genmfg/integration-entity/instance-id/assert—
POST/v1/genmfg/fleet/pack-hooks/assertgenmfgFleetPackHooksAssertSoft Soft≠LIVE pack fleet:* hooks over existing Fleet/Usafiri (GEN-F01)
X-GENMFG-PATH-CLASS/v1/genmfg/fleet/pack-hooks/assert—
POST/v1/genmfg/authz/mutate/assertgenmfgAuthzMutateAssertSoft Soft≠LIVE mutate APF + server org + entitlement G2 (GEN-A01)
X-GENMFG-PATH-CLASS/v1/genmfg/authz/mutate/assert—
POST/v1/genmfg/authz/rls/assertgenmfgAuthzRlsAssertSoft Soft≠LIVE RLS on GenMfg list/get/SSE (GEN-A02)
X-GENMFG-PATH-CLASS/v1/genmfg/authz/rls/assert—
POST/v1/genmfg/hierarchy/no-access-above/assertgenmfgHierarchyNoAccessAboveAssertSoft Soft≠LIVE list/hydrate/play no-access-above (GEN-H04)
X-GENMFG-PATH-CLASS/v1/genmfg/hierarchy/no-access-above/assert—
POST/v1/genmfg/voyage-engine/assertgenmfgVoyageEngineAssertSoft Soft≠LIVE shared materra-playbook-voyage engine (GEN-M02)
X-GENMFG-PATH-CLASS/v1/genmfg/voyage-engine/assert—
POST/v1/genmfg/voyage-engine/kestra-advance/assertgenmfgVoyageEngineKestraAdvanceAssertSoft Soft≠LIVE Kestra-only LIVE advance; Mayet ban (GEN-M10)
X-GENMFG-PATH-CLASS/v1/genmfg/voyage-engine/kestra-advance/assert—
POST/v1/genmfg/hooks/kestra-registry/assertgenmfgHooksKestraRegistryAssertSoft Soft≠LIVE Kestra closed-hook task registry (GEN-D01)
X-GENMFG-PATH-CLASS/v1/genmfg/hooks/kestra-registry/assert—
POST/v1/genmfg/catalog/journey-map/assertgenmfgCatalogJourneyMapAssertSoft Soft≠LIVE map S-* catalog → seeded journeys/ (GEN-D05)
X-GENMFG-PATH-CLASS/v1/genmfg/catalog/journey-map/assert—
POST/v1/genmfg/secrets/camel/assertgenmfgSecretsCamelAssertSoft Soft≠LIVE OpenBao + secrets check_access for Camel creds (GEN-A06)
X-GENMFG-PATH-CLASS/v1/genmfg/secrets/camel/assert—
POST/v1/genmfg/packs/publishgenmfgPacksPublishProduct Soft Soft≠LIVE pack publish to LOOKUPS (GEN-UI-API-04); prefer declarative deploy-live
X-GENMFG-PATH-CLASS/v1/genmfg/packs/publish—
POST/v1/genmfg/studio/authorgenmfgStudioAuthorAuthoring Soft Soft≠LIVE Scenario Studio plan via declarative/Materra (GEN-UI-API-07)
X-GENMFG-PATH-CLASS/v1/genmfg/studio/author—
GET/v1/genmfg/ops/kv-seed/statusgenmfgOpsKvSeedStatusOps Soft Soft≠LIVE KV seed status (GEN-UI-API-10); prefer GET /v1/declarative/ops/kv-seed
X-GENMFG-PATH-CLASS/v1/genmfg/ops/kv-seed/status—
POST/v1/genmfg/console/product-allowlist/assertgenmfgConsoleProductAllowlistAssertProve Soft Soft≠LIVE GEN-UI-API-11 console LIVE invent_refuse until Product allowlist
X-GENMFG-PATH-CLASS/v1/genmfg/console/product-allowlist/assert—
POST/v1/genmfg/forms/bindgenmfgFormsBindProduct Soft Soft≠LIVE forms.io bind from pack/step (GEN-UI-API-02)
X-GENMFG-PATH-CLASS/v1/genmfg/forms/bind—
POST/v1/genmfg/notify/mapgenmfgNotifyMapProduct Soft Soft≠LIVE pack Novu map resolve (GEN-UI-API-03)
X-GENMFG-PATH-CLASS/v1/genmfg/notify/map—
POST/v1/genmfg/inbox/hitlgenmfgInboxHitlProduct Soft Soft≠LIVE inbox HITL / quality.fail cards (GEN-UI-API-06)
X-GENMFG-PATH-CLASS/v1/genmfg/inbox/hitl—
POST/v1/genmfg/ui-api/path-classes/assertgenmfgUiApiPathClassesAssertSoft Soft≠LIVE GEN-UI-API-01 path class + UI guide fence (Prove only)
X-GENMFG-PATH-CLASS/v1/genmfg/ui-api/path-classes/assert—
POST/v1/genmfg/ui-shell/assertgenmfgUiShellAssertSoft Soft≠LIVE Universal shell consumes ui-bundle (GEN-U04)
X-GENMFG-PATH-CLASS/v1/genmfg/ui-shell/assert—
POST/v1/genmfg/prove/seed/orchestrator/assertgenmfgProveSeedOrchestratorAssertSoft Soft≠LIVE prove seed thin orchestrator (GEN-P04)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/seed/orchestrator/assert—
POST/v1/genmfg/prove/voyage-itqo/assertgenmfgProveVoyageItqoAssertSoft Soft≠LIVE I→T→Q→O façade voyage contract (GEN-P05)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/voyage-itqo/assert—
POST/v1/genmfg/prove/elemental-lifecycle/assertgenmfgProveElementalLifecycleAssertSoft Soft≠LIVE elemental lifecycle event stream (GEN-ELEM-07)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/elemental-lifecycle/assert—
POST/v1/genmfg/elemental/compile/assertgenmfgElementalCompileAssertSoft Soft≠LIVE elemental lifecycle compile (GEN-ELEM-02)
X-GENMFG-PATH-CLASS/v1/genmfg/elemental/compile/assert—
POST/v1/genmfg/elemental/advance-gate/assertgenmfgElementalAdvanceGateAssertSoft Soft≠LIVE advance_gate control injection (GEN-ELEM-04)
X-GENMFG-PATH-CLASS/v1/genmfg/elemental/advance-gate/assert—
POST/v1/genmfg/elemental/pack-policy/assertgenmfgElementalPackPolicyAssertSoft Soft≠LIVE pack elemental_emit_policy (GEN-ELEM-05)
X-GENMFG-PATH-CLASS/v1/genmfg/elemental/pack-policy/assert—
POST/v1/genmfg/ui/elemental-phase/assertgenmfgUiElementalPhaseAssertSoft Soft≠LIVE UI elemental phase from SSE events (GEN-ELEM-10 Prove)
X-GENMFG-PATH-CLASS/v1/genmfg/ui/elemental-phase/assert—
POST/v1/genmfg/voyages/{id}/elemental-phasegenmfgVoyageElementalPhaseProject Player elemental phase from events (GEN-ELEM-10 Product Soft Soft≠LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/elemental-phase—
POST/v1/genmfg/elemental/kestra-bind/assertgenmfgElementalKestraBindAssertSoft Soft≠LIVE elemental lifecycle + Kestra bind annotate (GEN-ELEM-02)
X-GENMFG-PATH-CLASS/v1/genmfg/elemental/kestra-bind/assert—
POST/v1/genmfg/prove/federation/assertgenmfgProveFederationAssertSoft Soft≠LIVE federation dual-node prove (GEN-P08)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/federation/assert—
POST/v1/genmfg/prove/shared-kestra-terminal/assertgenmfgProveSharedKestraTerminalAssertSoft Soft≠LIVE AG-01+MN-03 shared Kestra terminal (GEN-D04)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/shared-kestra-terminal/assert—
POST/v1/genmfg/compliance/unlock/assertgenmfgComplianceUnlockAssertSoft Soft≠LIVE compliance credential unlock for agri LIVE (GEN-M03)
X-GENMFG-PATH-CLASS/v1/genmfg/compliance/unlock/assert—
POST/v1/genmfg/resources/prefer/assertgenmfgResourcesPreferAssertSoft Soft≠LIVE prefer resource APIs over exchange underlay (GEN-N14)
X-GENMFG-PATH-CLASS/v1/genmfg/resources/prefer/assert—
POST/v1/genmfg/resources/mirror/assertgenmfgResourcesMirrorAssertSoft Soft≠LIVE resource mirror Soft Soft≠LIVE Map / LIVE s356 invent_refuse (GEN-R12)
X-GENMFG-PATH-CLASS/v1/genmfg/resources/mirror/assert—
POST/v1/genmfg/logistics/lifecycle/full/assertgenmfgLogisticsLifecycleFullAssertSoft Soft≠LIVE full normalized logistics lifecycle I/O (GEN-F02)
X-GENMFG-PATH-CLASS/v1/genmfg/logistics/lifecycle/full/assert—
POST/v1/genmfg/prove/hitl/assertgenmfgProveHitlAssertSoft Soft≠LIVE HITL multi-persona forms+advance (GEN-P13)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/hitl/assert—
POST/v1/genmfg/packs/agri-default/assertgenmfgPacksAgriDefaultAssertSoft Soft≠LIVE agri pack default → journeys/agriculture/* (GEN-16)
X-GENMFG-PATH-CLASS/v1/genmfg/packs/agri-default/assert—
POST/v1/genmfg/quality/attest/assertgenmfgQualityAttestAssertSoft Soft≠LIVE quality→AaaS attestation compose (GEN-23)
X-GENMFG-PATH-CLASS/v1/genmfg/quality/attest/assert—
POST/v1/genmfg/credentials/unlock/assertgenmfgCredentialsUnlockAssertSoft Soft≠LIVE required_credentials unlock (GEN-24)
X-GENMFG-PATH-CLASS/v1/genmfg/credentials/unlock/assert—
POST/v1/genmfg/seal/honesty/assertgenmfgSealHonestyAssertSoft Soft≠LIVE SEAL honesty Soft≠LIVE fence (GEN-25)
X-GENMFG-PATH-CLASS/v1/genmfg/seal/honesty/assert—
POST/v1/genmfg/prove/events/observe/assertgenmfgProveEventsObserveAssertSoft Soft≠LIVE prove observe via SSE/list only (GEN-P09)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/events/observe/assert—
POST/v1/genmfg/criteria/fan-in/assertgenmfgCriteriaFanInAssertSoft Soft≠LIVE logistics→platform.criteria.v1.* fan-in (GEN-N08)
X-GENMFG-PATH-CLASS/v1/genmfg/criteria/fan-in/assert—
POST/v1/genmfg/events/sse-merge/assertgenmfgEventsSseMergeAssertSoft Soft≠LIVE SSE merge by correlation (GEN-S07)
X-GENMFG-PATH-CLASS/v1/genmfg/events/sse-merge/assert—
POST/v1/genmfg/dispatch/camel/assertgenmfgDispatchCamelAssertSoft Soft≠LIVE Camel fleet dispatch no new bridge (GEN-33)
X-GENMFG-PATH-CLASS/v1/genmfg/dispatch/camel/assert—
POST/v1/genmfg/erpnext/recipe/assertgenmfgErpnextRecipeAssertSoft Soft≠LIVE ERPNext Camel/s367 recipe (GEN-34)
X-GENMFG-PATH-CLASS/v1/genmfg/erpnext/recipe/assert—
POST/v1/genmfg/sourcing/multi-fill-fixture/assertgenmfgSourcingMultiFillFixtureAssertSoft Soft≠LIVE multi_fill fixture reuse (GEN-S10)
X-GENMFG-PATH-CLASS/v1/genmfg/sourcing/multi-fill-fixture/assert—
POST/v1/genmfg/secrets/instance/assertgenmfgSecretsInstanceAssertSoft Soft≠LIVE per-instance OpenBao path (GEN-I07)
X-GENMFG-PATH-CLASS/v1/genmfg/secrets/instance/assert—
POST/v1/genmfg/kestra/bindings/assertgenmfgKestraBindingsAssertSoft Soft≠LIVE Kestra voyage bindings (GEN-I08)
X-GENMFG-PATH-CLASS/v1/genmfg/kestra/bindings/assert—
POST/v1/genmfg/multi-org/step-owner/assertgenmfgMultiOrgStepOwnerAssertSoft Soft≠LIVE multi-org step owner bindings (GEN-I09)
X-GENMFG-PATH-CLASS/v1/genmfg/multi-org/step-owner/assert—
POST/v1/genmfg/logistics/geofence-advance/assertgenmfgLogisticsGeofenceAdvanceAssertSoft Soft≠LIVE geofence enter advances voyage (GEN-F03)
X-GENMFG-PATH-CLASS/v1/genmfg/logistics/geofence-advance/assert—
POST/v1/genmfg/logistics/equipment-relocate/assertgenmfgLogisticsEquipmentRelocateAssertSoft Soft≠LIVE equipment relocate→logistics (GEN-F05)
X-GENMFG-PATH-CLASS/v1/genmfg/logistics/equipment-relocate/assert—
POST/v1/genmfg/hierarchy/conglomerate/assertgenmfgHierarchyConglomerateAssertSoft Soft≠LIVE conglomerate/franchise Soft fixtures (GEN-H08)
X-GENMFG-PATH-CLASS/v1/genmfg/hierarchy/conglomerate/assert—
POST/v1/genmfg/hierarchy/chamber-cast/assertgenmfgHierarchyChamberCastAssertSoft Soft≠LIVE chamber cast metadata (GEN-H09)
X-GENMFG-PATH-CLASS/v1/genmfg/hierarchy/chamber-cast/assert—
POST/v1/genmfg/forms/bind/assertgenmfgFormsBindAssertSoft Soft≠LIVE forms.io pack bind (GEN-U06)
X-GENMFG-PATH-CLASS/v1/genmfg/forms/bind/assert—
POST/v1/genmfg/novu/map/assertgenmfgNovuMapAssertSoft Soft≠LIVE Novu pack map (GEN-U07)
X-GENMFG-PATH-CLASS/v1/genmfg/novu/map/assert—
POST/v1/genmfg/prove/openapi-fragments/assertgenmfgProveOpenapiFragmentsAssertSoft Soft≠LIVE prove OpenAPI fragments link (GEN-P11)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/openapi-fragments/assert—
POST/v1/genmfg/prove/mn03/compose/assertgenmfgProveMn03ComposeAssertSoft Soft≠LIVE MN-03 engine compose (GEN-X01c)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/mn03/compose/assert—
POST/v1/genmfg/inbox/hitl/assertgenmfgInboxHitlAssertSoft Soft≠LIVE inbox HITL/quality cards (GEN-42)
X-GENMFG-PATH-CLASS/v1/genmfg/inbox/hitl/assert—
POST/v1/genmfg/kuratibu/transform/assertgenmfgKuratibuTransformAssertSoft Soft≠LIVE Kuratibu Transform mirror (GEN-43)
X-GENMFG-PATH-CLASS/v1/genmfg/kuratibu/transform/assert—
POST/v1/genmfg/openmaint/asset/assertgenmfgOpenmaintAssetAssertSoft Soft≠LIVE OpenMaint asset steps (GEN-44)
X-GENMFG-PATH-CLASS/v1/genmfg/openmaint/asset/assert—
POST/v1/genmfg/materra/j3-default/assertgenmfgMaterraJ3DefaultAssertSoft Soft≠LIVE J3 export/season agri default (GEN-M04)
X-GENMFG-PATH-CLASS/v1/genmfg/materra/j3-default/assert—
POST/v1/genmfg/materra/inbox-agri/assertgenmfgMaterraInboxAgriAssertSoft Soft≠LIVE Materra inbox agri events (GEN-M05)
X-GENMFG-PATH-CLASS/v1/genmfg/materra/inbox-agri/assert—
POST/v1/genmfg/provenance/passport/assertgenmfgProvenancePassportAssertSoft Soft≠LIVE provenance→quality+seal (GEN-M07)
X-GENMFG-PATH-CLASS/v1/genmfg/provenance/passport/assert—
POST/v1/genmfg/index/assertgenmfgIndexAssertSoft Soft≠LIVE GenMfg docs/UI index (GEN-01)
X-GENMFG-PATH-CLASS/v1/genmfg/index/assert—
POST/v1/genmfg/arch/no-bridge-bridge/assertgenmfgArchNoBridgeBridgeAssertSoft Soft≠LIVE ban bridge→bridge HTTP (GEN-02)
X-GENMFG-PATH-CLASS/v1/genmfg/arch/no-bridge-bridge/assert—
POST/v1/genmfg/prove/ag05-event-pathgenmfgProveAg05EventPathSoft Soft≠LIVE AG-05 event-sourced path via API events only (GEN-ES09)
X-GENMFG-PATH-CLASS/v1/genmfg/prove/ag05-event-path—
POST/v1/genmfg/packs/admin/assertgenmfgPacksAdminAssertSoft Soft≠LIVE pack:admin APF + hydrate honesty (GEN-U10)
X-GENMFG-PATH-CLASS/v1/genmfg/packs/admin/assert—
POST/v1/genmfg/authz/matrix/assertgenmfgAuthzMatrixAssertSoft Soft≠LIVE agri 401/403/402/422 authz matrix (GEN-A09)
X-GENMFG-PATH-CLASS/v1/genmfg/authz/matrix/assert—
POST/v1/genmfg/sourcing/reentrygenmfgSourcingReentrySoft Soft≠LIVE Transform labor/parts sourcing re-entry (GEN-S09)
X-GENMFG-PATH-CLASS/v1/genmfg/sourcing/reentry—
POST/v1/genmfg/from-standing-order-breachgenmfgFromStandingOrderBreachSoft Soft≠LIVE standing-order breach → GenMfg Input (GEN-S08)
X-GENMFG-PATH-CLASS/v1/genmfg/from-standing-order-breach—
POST/v1/genmfg/criteria-wf/assertgenmfgCriteriaWfAssertSoft Soft≠LIVE criteria match.fired / sla.breached WF bind (GEN-ES07)
X-GENMFG-PATH-CLASS/v1/genmfg/criteria-wf/assert—
POST/v1/genmfg/scenario-paths/assertgenmfgScenarioPathsAssertSoft Soft≠LIVE scenario paths LG/FS/MX/FM/LB invent_refuse (GEN-X05/X06/X07)
X-GENMFG-PATH-CLASS/v1/genmfg/scenario-paths/assert—
POST/v1/genmfg/logistics/exceptiongenmfgLogisticsExceptionRaise Soft Soft≠LIVE logistics exception.raised → support invent_refuse (GEN-F04)
X-GENMFG-PATH-CLASS/v1/genmfg/logistics/exception—
POST/v1/genmfg/security/layers/assertgenmfgSecurityLayersAssertPer-engine L1–L12 invent_refuse LIVE if incomplete (GEN-A05 Soft Soft≠LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/security/layers/assert—
POST/v1/genmfg/envelopes/assertgenmfgEnvelopesAssertAssert Camel/NATS envelope org_id + instance_id (GEN-I05 Soft Soft≠LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/envelopes/assert—
POST/v1/genmfg/webhooks/assertgenmfgWebhooksAssertAssert webhook HMAC per instance_id Soft Soft≠LIVE (GEN-I06/A07)
X-GENMFG-PATH-CLASS/v1/genmfg/webhooks/assert—
POST/v1/genmfg/from-sourcing-awardgenmfgFromSourcingAwardSoft Soft≠LIVE sourcing award → GenMfg correlation (GEN-X04 / S-AG-05)
X-GENMFG-PATH-CLASS/v1/genmfg/from-sourcing-award—
POST/v1/genmfg/standing-orders/field-dispatchgenmfgStandingOrderFieldDispatchStanding-order field_dispatch → shipment.create Soft Soft≠LIVE (GEN-F06)
X-GENMFG-PATH-CLASS/v1/genmfg/standing-orders/field-dispatch—
GET/v1/genmfg/resolvegenmfgResolveBindingResolve instance for service (fail closed ambiguous/missing)
X-GENMFG-PATH-CLASS/v1/genmfg/resolve—
GET/v1/genmfg/events/streamgenmfgEventsStreamSSE stream (genmfg + logistics + criteria + sourcing subjects)
X-GENMFG-PATH-CLASS/v1/genmfg/events/stream—
GET/v1/exchange/domainsexchangeDomainsList substitutable exchange domains
X-GENMFG-PATH-CLASS/v1/exchange/domains—
POST/v1/exchange/normalizeexchangeNormalizeNormalize any domain event to platform.<domain>.v1.event.*
X-GENMFG-PATH-CLASS/v1/exchange/normalize—
POST/v1/exchange/denormalizeexchangeDenormalizeDenormalize platform command to adapter subject
X-GENMFG-PATH-CLASS/v1/exchange/denormalize—
GET/v1/genmfg/readinessgenmfgReadinessAggregate Soft Soft≠LIVE readiness
X-GENMFG-PATH-CLASS/v1/genmfg/readiness—
POST/v1/genmfg/live-gates/assertgenmfgLiveGatesAssertAssert pack Flink Job A / domain normalize LIVE gates (GEN-ES06/W06)
X-GENMFG-PATH-CLASS/v1/genmfg/live-gates/assert—
GET/v1/genmfg/catalog/hooksgenmfgCatalogHooksClosed workflow hook vocabulary
X-GENMFG-PATH-CLASS/v1/genmfg/catalog/hooks—
GET/v1/genmfg/catalog/eventsgenmfgCatalogEventsSubsystem event catalog
X-GENMFG-PATH-CLASS/v1/genmfg/catalog/events—
POST/v1/genmfg/hooks/validategenmfgHooksValidateValidate journey/hooks against closed vocabulary (GEN-D02/W10)
X-GENMFG-PATH-CLASS/v1/genmfg/hooks/validate—
POST/v1/genmfg/voyages/{id}/sealgenmfgSealVoyageSeal voyage Soft Soft≠LIVE; invent_refuse incomplete certify_eval_set (GEN-D07)
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/seal—
GET/v1/genmfg/packsgenmfgListPacksList pack.genmfg.* from SOVEREIGN_LOOKUPS
X-GENMFG-PATH-CLASS/v1/genmfg/packs—
GET/v1/genmfg/packs/{industry}genmfgGetPackGet industry pack (supports mining.gold)
X-GENMFG-PATH-CLASS/v1/genmfg/packs/{industry}—
GET/v1/genmfg/scenariosgenmfgListScenariosList GenMfg Soft Soft≠LIVE scenario catalog (GEN-X01)
X-GENMFG-PATH-CLASS/v1/genmfg/scenarios—
GET/v1/genmfg/scenarios/{id}genmfgGetScenarioGet scenario by catalog id (S-MN-03) or scenario_key
X-GENMFG-PATH-CLASS/v1/genmfg/scenarios/{id}—
GET/v1/genmfg/ui-bundlegenmfgUiBundleCompose data-driven UI shell from pack
X-GENMFG-PATH-CLASS/v1/genmfg/ui-bundle—
GET/v1/genmfg/voyagesgenmfgListVoyagesList voyages (empty Soft honesty without listVoyages inject)
POST/v1/genmfg/voyagesgenmfgStartVoyageStart voyage via playPlaybookVoyage
X-GENMFG-PATH-CLASS/v1/genmfg/voyages—
GET/v1/genmfg/voyages/{id}genmfgGetVoyageGet voyage state
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}—
POST/v1/genmfg/voyages/{id}/advancegenmfgAdvanceVoyageAdvance voyage (Kestra only — no Surreal Mayet LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/advance—
GET/v1/genmfg/adaptersgenmfgListAdaptersList adapter registry entries (GEN-N05 Soft Soft≠LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/adapters—
POST/v1/genmfg/adapters/assertgenmfgAssertAdaptersAssert capabilities / multi_adapter_exchange / substitute (GEN-N09/N13)
X-GENMFG-PATH-CLASS/v1/genmfg/adapters/assert—
POST/v1/genmfg/voyages/{id}/invokegenmfgInvokeaction:invoke via workflow-subject-invoke; requires idempotency_key (GEN-W02/W05)
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/invoke—
POST/v1/genmfg/voyages/{id}/qualitygenmfgQualityDelegate compliance gate evaluate
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/quality—
POST/v1/genmfg/voyages/{id}/optimizegenmfgOptimizePack solver → decision-gateway (fail closed)
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/optimize—
POST/v1/genmfg/voyages/{id}/dispatchgenmfgDispatchMap platform.logistics.v1.command.* (denormalize)
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/dispatch—
POST/v1/genmfg/from-quote/{quoteId}genmfgFromQuoteAlias sourcing sign-convert
X-GENMFG-PATH-CLASS/v1/genmfg/from-quote/{quoteId}—
POST/v1/logistics/normalizelogisticsNormalizeNormalize logistics event → platform.logistics.v1.event.*
X-GENMFG-PATH-CLASS/v1/logistics/normalize—
POST/v1/logistics/normalize/publishlogisticsNormalizePublishLIVE publish normalized logistics (LOGISTICS_NORMALIZE_LIVE=1)
X-GENMFG-PATH-CLASS/v1/logistics/normalize/publish—
POST/v1/logistics/denormalizelogisticsDenormalizeDenormalize platform command → fleet.v1.command.*
X-GENMFG-PATH-CLASS/v1/logistics/denormalize—
POST/v1/logistics/denormalize/publishlogisticsDenormalizePublishLIVE publish denormalized command
X-GENMFG-PATH-CLASS/v1/logistics/denormalize/publish—
GET/v1/genmfg/domainsgenmfgListDomainsList schema-first GenMfg domains
X-GENMFG-PATH-CLASS/v1/genmfg/domains—
GET/v1/genmfg/domains/{domain}genmfgGetDomainDomain catalog (resources, operations, schema_id)
X-GENMFG-PATH-CLASS/v1/genmfg/domains/{domain}—
GET/v1/genmfg/domains/{domain}/resources/{resourceType}genmfgListResourcesList domain resources (mirror)
POST/v1/genmfg/domains/{domain}/resources/{resourceType}genmfgWriteResourceCreate/ensure/upsert domain resource (denorm Soft Soft≠LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/domains/{domain}/resources/{resourceType}—
GET/v1/genmfg/domains/{domain}/resources/{resourceType}/{id}genmfgGetResourceGet domain resource by id
PATCH/v1/genmfg/domains/{domain}/resources/{resourceType}/{id}genmfgPatchResourcePatch domain resource
X-GENMFG-PATH-CLASS/v1/genmfg/domains/{domain}/resources/{resourceType}/{id}—
POST/v1/genmfg/domains/{domain}/resources/{resourceType}/{id}/actions/{action}genmfgResourceActionDomain resource lifecycle action
X-GENMFG-PATH-CLASS/v1/genmfg/domains/{domain}/resources/{resourceType}/{id}/actions/{action}—
POST/v1/genmfg/domains/{domain}/events/ingestgenmfgDomainIngestIngress normalize + resource projection
X-GENMFG-PATH-CLASS/v1/genmfg/domains/{domain}/events/ingest—
GET/v1/genmfg/domains/{domain}/eventsgenmfgDomainEventsList recent domain events (Soft Soft≠LIVE peek)
X-GENMFG-PATH-CLASS/v1/genmfg/domains/{domain}/events—
GET/v1/genmfg/workspaces/{orgId}genmfgGetWorkspaceGet org GenMfg workspace config
PUT/v1/genmfg/workspaces/{orgId}genmfgPutWorkspaceUpsert org GenMfg workspace (pack + domain binds)
X-GENMFG-PATH-CLASS/v1/genmfg/workspaces/{orgId}—
GET/v1/genmfg/workspaces/{orgId}/bindingsgenmfgListWorkspaceBindingsList workspace domain bindings
POST/v1/genmfg/workspaces/{orgId}/bindingsgenmfgUpsertWorkspaceBindingUpsert sticky domain→instance bind
X-GENMFG-PATH-CLASS/v1/genmfg/workspaces/{orgId}/bindings—
DELETE/v1/genmfg/workspaces/{orgId}/bindings/{domain}genmfgDeleteWorkspaceBindingSoft-deactivate workspace domain bind
X-GENMFG-PATH-CLASS/v1/genmfg/workspaces/{orgId}/bindings/{domain}—
POST/v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}genmfgVoyageWriteResourceVoyage-scoped resource write
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}—
POST/v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}/{resourceId}/actions/{action}genmfgVoyageResourceActionVoyage-scoped resource action
X-GENMFG-PATH-CLASS/v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}/{resourceId}/actions/{action}—
POST/v1/genmfg/ops/agri-cutover/assertgenmfgv1GenmfgOpsAgricutoverAssertSoft Soft≠LIVE GEN-50 agri cutover
X-GENMFG-PATH-CLASS/v1/genmfg/ops/agri-cutover/assert—
POST/v1/genmfg/ops/cutover-progress/assertgenmfgOpsCutoverProgressAssertSoft Soft≠LIVE cutover progress desk (TCP green ≠ LIVE)
X-GENMFG-PATH-CLASS/v1/genmfg/ops/cutover-progress/assert—
POST/v1/genmfg/ops/live-readiness/assertgenmfgv1GenmfgOpsLivereadinessAssertSoft Soft≠LIVE LIVE ops readiness inventory (never invents live_gate_met)
X-GENMFG-PATH-CLASS/v1/genmfg/ops/live-readiness/assert—
POST/v1/genmfg/ops/kv-seed/assertgenmfgv1GenmfgOpsKvseedAssertSoft Soft≠LIVE GenMfg KV seed inventory (never invents nats_kv_seeded)
X-GENMFG-PATH-CLASS/v1/genmfg/ops/kv-seed/assert—
POST/v1/genmfg/ops/engine-probes/assertgenmfgv1GenmfgOpsEngineprobesAssertSoft Soft≠LIVE engine TCP/probe honesty (never invents live_gate_met)
X-GENMFG-PATH-CLASS/v1/genmfg/ops/engine-probes/assert—
POST/v1/genmfg/ops/stack-preflight/assertgenmfgv1GenmfgOpsStackpreflightAssertSoft Soft≠LIVE Docker/stack preflight (never invents stack_live)
X-GENMFG-PATH-CLASS/v1/genmfg/ops/stack-preflight/assert—
POST/v1/genmfg/console/mfg-bind/assertgenmfgv1GenmfgConsoleMfgbindAssertSoft Soft≠LIVE GEN-51 console MFG bind
X-GENMFG-PATH-CLASS/v1/genmfg/console/mfg-bind/assert—
POST/v1/genmfg/prove/playwright-smoke/assertgenmfgv1GenmfgProvePlaywrightsmokeAssertSoft Soft≠LIVE GEN-54 playwright soft smoke
X-GENMFG-PATH-CLASS/v1/genmfg/prove/playwright-smoke/assert—
POST/v1/genmfg/prove/collections/assertgenmfgv1GenmfgProveCollectionsAssertSoft Soft≠LIVE GEN-P12 OpenAPI collections
X-GENMFG-PATH-CLASS/v1/genmfg/prove/collections/assert—
POST/v1/genmfg/sourcing/offtake-reentry/assertgenmfgv1GenmfgSourcingOfftakereentryAssertSoft Soft≠LIVE GEN-S12 offtake reentry
X-GENMFG-PATH-CLASS/v1/genmfg/sourcing/offtake-reentry/assert—
POST/v1/genmfg/logistics/wms-pallet/assertgenmfgv1GenmfgLogisticsWmspalletAssertSoft Soft≠LIVE GEN-F07 WMS pallet
X-GENMFG-PATH-CLASS/v1/genmfg/logistics/wms-pallet/assert—
POST/v1/genmfg/criteria/job-b-interrupt/assertgenmfgv1GenmfgCriteriaJobbinterruptAssertSoft Soft≠LIVE GEN-ES10 Job B SLA
X-GENMFG-PATH-CLASS/v1/genmfg/criteria/job-b-interrupt/assert—
POST/v1/genmfg/scenarios/hl01/assertgenmfgv1GenmfgScenariosHl01AssertSoft Soft≠LIVE GEN-X08 HL-01 medical
X-GENMFG-PATH-CLASS/v1/genmfg/scenarios/hl01/assert—
POST/v1/genmfg/prove/traceability/assertgenmfgv1GenmfgProveTraceabilityAssertSoft Soft≠LIVE GEN-X09 traceability
X-GENMFG-PATH-CLASS/v1/genmfg/prove/traceability/assert—
POST/v1/genmfg/whatif/overlay/assertgenmfgv1GenmfgWhatifOverlayAssertSoft Soft≠LIVE GEN-35 what-if
X-GENMFG-PATH-CLASS/v1/genmfg/whatif/overlay/assert—
POST/v1/genmfg/standing-orders/wo-spawn/assertgenmfgv1GenmfgStandingordersWospawnAssertSoft Soft≠LIVE GEN-53 SO WO spawn
X-GENMFG-PATH-CLASS/v1/genmfg/standing-orders/wo-spawn/assert—
POST/v1/genmfg/events/ws-multiplexer/assertgenmfgv1GenmfgEventsWsmultiplexerAssertSoft Soft≠LIVE GEN-45 WS mux
X-GENMFG-PATH-CLASS/v1/genmfg/events/ws-multiplexer/assert—
POST/v1/genmfg/bindings/erp-plane/assertgenmfgv1GenmfgBindingsErpplaneAssertSoft Soft≠LIVE GEN-I11 ERP Plane
X-GENMFG-PATH-CLASS/v1/genmfg/bindings/erp-plane/assert—
POST/v1/genmfg/hierarchy/drilldown/assertgenmfgv1GenmfgHierarchyDrilldownAssertSoft Soft≠LIVE GEN-H10 drilldown
X-GENMFG-PATH-CLASS/v1/genmfg/hierarchy/drilldown/assert—
POST/v1/genmfg/bi/superset-embed/assertgenmfgv1GenmfgBiSupersetembedAssertSoft Soft≠LIVE GEN-A11 Superset
X-GENMFG-PATH-CLASS/v1/genmfg/bi/superset-embed/assert—
POST/v1/genmfg/ui/minio-signed/assertgenmfgv1GenmfgUiMiniosignedAssertSoft Soft≠LIVE GEN-U11 MinIO
X-GENMFG-PATH-CLASS/v1/genmfg/ui/minio-signed/assert—
POST/v1/genmfg/ui/composable-facet/assertgenmfgv1GenmfgUiComposablefacetAssertSoft Soft≠LIVE GEN-U12 facet
X-GENMFG-PATH-CLASS/v1/genmfg/ui/composable-facet/assert—
POST/v1/genmfg/studio/author/assertgenmfgv1GenmfgStudioAuthorAssertSoft Soft≠LIVE GEN-W12 studio author
X-GENMFG-PATH-CLASS/v1/genmfg/studio/author/assert—
POST/v1/genmfg/packs/healthcare-fleet/assertgenmfgv1GenmfgPacksHealthcarefleetAssertSoft Soft≠LIVE GEN-52 healthcare/fleet packs
X-GENMFG-PATH-CLASS/v1/genmfg/packs/healthcare-fleet/assert—

Operations

GET /v1/genmfg/bindings

Summary: List integration bindings for org (connections-store)

Operation ID: genmfgListBindings

Parameters:

NameInRequiredTypeNotes
X-Org-Idheaderyesstring
servicequerynostring

Responses:

StatusMeaning
200Bindings list Soft Soft≠LIVE

X-GENMFG-PATH-CLASS /v1/genmfg/bindings

POST /v1/genmfg/bindings/step-owner

Summary: Resolve multi-party sticky bindings for step owner org (GEN-H03 Soft Soft≠LIVE)

Operation ID: genmfgBindingsStepOwner Responses:

StatusMeaning
200Step-owner binding slice
404step_owner_bindings_missing invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/bindings/step-owner

POST /v1/genmfg/logistics/lifecycle/plan

Summary: Soft Soft≠LIVE normalized logistics lifecycle plan (GEN-F02)

Operation ID: genmfgLogisticsLifecyclePlan Responses:

StatusMeaning
200Stage plan invent_refuse_live
400org_id_required

X-GENMFG-PATH-CLASS /v1/genmfg/logistics/lifecycle/plan

POST /v1/genmfg/logistics/lifecycle/assert

Summary: Assert Soft Soft≠LIVE adjacent lifecycle transition (GEN-F02)

Operation ID: genmfgLogisticsLifecycleAssert Responses:

StatusMeaning
200Transition ok Soft Soft≠LIVE
422lifecycle_transition_invalid invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/logistics/lifecycle/assert

POST /v1/genmfg/prove/dual-pack-dom

Summary: Soft Soft≠LIVE AG vs mining.gold Player/bench DOM assert (GEN-X03)

Operation ID: genmfgProveDualPackDom Responses:

StatusMeaning
200Soft Soft≠LIVE DOM labels/columns distinct
422dual_pack_dom_assert_failed invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/dual-pack-dom

POST /v1/genmfg/on-failure/assert

Summary: Soft Soft≠LIVE declarative on_failure subflow (GEN-D06 / FS-02)

Operation ID: genmfgOnFailureAssert Responses:

StatusMeaning
200Soft Soft≠LIVE on_failure subflow resolved
404on_failure_subflow_missing invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/on-failure/assert

POST /v1/genmfg/catalog/workflow-ban/assert

Summary: Soft Soft≠LIVE ban materra-*-workflow paths for catalog scenarios (GEN-D08)

Operation ID: genmfgCatalogWorkflowBanAssert Responses:

StatusMeaning
200Soft Soft≠LIVE catalog journey/Kestra only
422materra_workflow_path_forbidden invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/catalog/workflow-ban/assert

POST /v1/genmfg/s2s/assert

Summary: Soft Soft≠LIVE SPIFFE/mTLS or dual JWT BFF→bridge→Camel (GEN-A08)

Operation ID: genmfgS2sAssert Responses:

StatusMeaning
200S2S LIVE gate met or Soft Soft≠LIVE invent_refuse body
503genmfg_s2s_spiffe_incomplete invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/s2s/assert

POST /v1/genmfg/prove/seed/load

Summary: Soft Soft≠LIVE prove seed load (GEN-P10)

Operation ID: genmfgProveSeedLoad Responses:

StatusMeaning
200seed_run_id Soft Soft≠LIVE unload_always
404prove_fixture_unknown invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/seed/load

POST /v1/genmfg/prove/seed/unload

Summary: Soft Soft≠LIVE prove seed unload-always (GEN-P10)

Operation ID: genmfgProveSeedUnload Responses:

StatusMeaning
200Idempotent Soft Soft≠LIVE unload
400seed_run_id_required

X-GENMFG-PATH-CLASS /v1/genmfg/prove/seed/unload

GET /v1/genmfg/prove/seed/{seed_run_id}

Summary: Soft Soft≠LIVE prove seed status (GEN-P10)

Operation ID: genmfgProveSeedGet

Parameters:

NameInRequiredTypeNotes
seed_run_idpathyesstring

Responses:

StatusMeaning
200Soft Soft≠LIVE seed run status
404seed_run_not_found invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/seed/{seed_run_id}

POST /v1/genmfg/prove/nightly/assert

Summary: Soft Soft≠LIVE nightly staging prove unload-always contract (GEN-P10)

Operation ID: genmfgProveNightlyAssert Responses:

StatusMeaning
200Soft Soft≠LIVE contract (staging invent_refuse or LIVE)
422unload_always_required invent_refuse
503staging LIVE unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/nightly/assert

POST /v1/genmfg/materra/embed/assert

Summary: Soft Soft≠LIVE Materra embed: ban Soft memory scenario fallback (GEN-M08)

Operation ID: genmfgMaterraEmbedAssert Responses:

StatusMeaning
200KV-bound embed Soft Soft≠LIVE
422materra_embed_memory_fallback_deprecated invent_refuse
503materra_embed_kv_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/materra/embed/assert

POST /v1/genmfg/entitlements/assert

Summary: Soft Soft≠LIVE stale entitlement invent_refuse + reason codes (GEN-22)

Operation ID: genmfgEntitlementsAssert Responses:

StatusMeaning
200Fresh Soft Soft≠LIVE
402stale/deny/missing invent_refuse with reason_code

X-GENMFG-PATH-CLASS /v1/genmfg/entitlements/assert

POST /v1/genmfg/sourcing/readiness/assert

Summary: Soft Soft≠LIVE solver+Kestra+entitlements readiness aggregate (GEN-S05)

Operation ID: genmfgSourcingReadinessAssert Responses:

StatusMeaning
200Aggregate LIVE gate met
503sourcing_readiness_aggregate_incomplete invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/sourcing/readiness/assert

POST /v1/genmfg/journeys/kestra/bind

Summary: Soft Soft≠LIVE journey YAML → compileKestraScenarioFlowYaml bind (GEN-14a)

Operation ID: genmfgJourneysKestraBind Responses:

StatusMeaning
200Soft Soft≠LIVE compile bind (deploy_live false)
503kestra_compile_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/journeys/kestra/bind

POST /v1/genmfg/materra/agri-stamp/assert

Summary: Soft Soft≠LIVE Materra stamps industry_pack=agriculture + org_id (GEN-M01)

Operation ID: genmfgMaterraAgriStampAssert Responses:

StatusMeaning
200Stamped Soft Soft≠LIVE
422non-agri Materra pack invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/materra/agri-stamp/assert

POST /v1/genmfg/from-sourcing-award/work-order

Summary: Soft Soft≠LIVE award→WO copies correlation + fill/route plan refs (GEN-S04)

Operation ID: genmfgFromSourcingAwardWorkOrder Responses:

StatusMeaning
200WO Soft Soft≠LIVE draft
422plan refs / correlation invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/from-sourcing-award/work-order

POST /v1/genmfg/hooks/solver-sourcing/assert

Summary: Soft Soft≠LIVE solver:/sourcing: hooks → decision-gateway/sourcing-kv (GEN-S03/ES03)

Operation ID: genmfgHooksSolverSourcingAssert Responses:

StatusMeaning
200Hooks Soft Soft≠LIVE bound
422in-BFF OR-Tools / unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/hooks/solver-sourcing/assert

POST /v1/genmfg/from-multi-fill

Summary: Soft Soft≠LIVE multi_fill mango → GenMfg voyage (GEN-ES04)

Operation ID: genmfgFromMultiFill Responses:

StatusMeaning
200Soft Soft≠LIVE voyage map
503voyage start invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/from-multi-fill

POST /v1/genmfg/integration-entity/instance-id/assert

Summary: Soft Soft≠LIVE integration_entity metadata.instance_id required (GEN-I04)

Operation ID: genmfgIntegrationEntityInstanceIdAssert Responses:

StatusMeaning
200instance_id stamped Soft Soft≠LIVE
422instance_id required invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/integration-entity/instance-id/assert

POST /v1/genmfg/fleet/pack-hooks/assert

Summary: Soft Soft≠LIVE pack fleet:* hooks over existing Fleet/Usafiri (GEN-F01)

Operation ID: genmfgFleetPackHooksAssert Responses:

StatusMeaning
200Pack hooks Soft Soft≠LIVE mapped
422bridge rebuild / unknown hook invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/fleet/pack-hooks/assert

POST /v1/genmfg/authz/mutate/assert

Summary: Soft Soft≠LIVE mutate APF + server org + entitlement G2 (GEN-A01)

Operation ID: genmfgAuthzMutateAssert Responses:

StatusMeaning
200Soft Soft≠LIVE mutate gates met
402entitlement invent_refuse
403APF/org invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/authz/mutate/assert

POST /v1/genmfg/authz/rls/assert

Summary: Soft Soft≠LIVE RLS on GenMfg list/get/SSE (GEN-A02)

Operation ID: genmfgAuthzRlsAssert Responses:

StatusMeaning
200RLS Soft Soft≠LIVE pass
403rls_denied invent_refuse
503rls_guard_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/authz/rls/assert

POST /v1/genmfg/hierarchy/no-access-above/assert

Summary: Soft Soft≠LIVE list/hydrate/play no-access-above (GEN-H04)

Operation ID: genmfgHierarchyNoAccessAboveAssert Responses:

StatusMeaning
200leaf Soft Soft≠LIVE ok
403no_access_above invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/hierarchy/no-access-above/assert

POST /v1/genmfg/voyage-engine/assert

Summary: Soft Soft≠LIVE shared materra-playbook-voyage engine (GEN-M02)

Operation ID: genmfgVoyageEngineAssert Responses:

StatusMeaning
200Shared engine Soft Soft≠LIVE
422parallel engine invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/voyage-engine/assert

POST /v1/genmfg/voyage-engine/kestra-advance/assert

Summary: Soft Soft≠LIVE Kestra-only LIVE advance; Mayet ban (GEN-M10)

Operation ID: genmfgVoyageEngineKestraAdvanceAssert Responses:

StatusMeaning
200Kestra Soft Soft≠LIVE honesty
503mayet_live_advance_forbidden invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/voyage-engine/kestra-advance/assert

POST /v1/genmfg/hooks/kestra-registry/assert

Summary: Soft Soft≠LIVE Kestra closed-hook task registry (GEN-D01)

Operation ID: genmfgHooksKestraRegistryAssert Responses:

StatusMeaning
200Registry Soft Soft≠LIVE
422hook via missing invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/hooks/kestra-registry/assert

POST /v1/genmfg/catalog/journey-map/assert

Summary: Soft Soft≠LIVE map S-* catalog → seeded journeys/ (GEN-D05)

Operation ID: genmfgCatalogJourneyMapAssert Responses:

StatusMeaning
200S-* Soft Soft≠LIVE mapped
422catalog_journey_map_incomplete invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/catalog/journey-map/assert

POST /v1/genmfg/secrets/camel/assert

Summary: Soft Soft≠LIVE OpenBao + secrets check_access for Camel creds (GEN-A06)

Operation ID: genmfgSecretsCamelAssert Responses:

StatusMeaning
200check_access Soft Soft≠LIVE (no secret value)
403secrets_access_denied invent_refuse
503secrets_check_access_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/secrets/camel/assert

POST /v1/genmfg/packs/publish

Summary: Product Soft Soft≠LIVE pack publish to LOOKUPS (GEN-UI-API-04); prefer declarative deploy-live

Operation ID: genmfgPacksPublish Responses:

StatusMeaning
200publish plan or Soft Soft≠LIVE put
403pack_admin_apf_denied
503pack_publish_kv_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/packs/publish

POST /v1/genmfg/studio/author

Summary: Authoring Soft Soft≠LIVE Scenario Studio plan via declarative/Materra (GEN-UI-API-07)

Operation ID: genmfgStudioAuthor Responses:

StatusMeaning
200author plan Soft Soft≠LIVE
422browser_kv_forbidden / studio_api_not_declarative invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/studio/author

GET /v1/genmfg/ops/kv-seed/status

Summary: Ops Soft Soft≠LIVE KV seed status (GEN-UI-API-10); prefer GET /v1/declarative/ops/kv-seed

Operation ID: genmfgOpsKvSeedStatus Responses:

StatusMeaning
200status Soft Soft≠LIVE invent_refuse_live

X-GENMFG-PATH-CLASS /v1/genmfg/ops/kv-seed/status

POST /v1/genmfg/console/product-allowlist/assert

Summary: Prove Soft Soft≠LIVE GEN-UI-API-11 console LIVE invent_refuse until Product allowlist

Operation ID: genmfgConsoleProductAllowlistAssert Responses:

StatusMeaning
200allowlist Soft Soft≠LIVE ok; console_live false
422missing Product paths invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/console/product-allowlist/assert

POST /v1/genmfg/forms/bind

Summary: Product Soft Soft≠LIVE forms.io bind from pack/step (GEN-UI-API-02)

Operation ID: genmfgFormsBind Responses:

StatusMeaning
200bind Soft Soft≠LIVE
400form_id_required
422forms_engine_rebuild_forbidden invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/forms/bind

POST /v1/genmfg/notify/map

Summary: Product Soft Soft≠LIVE pack Novu map resolve (GEN-UI-API-03)

Operation ID: genmfgNotifyMap Responses:

StatusMeaning
200notify map Soft Soft≠LIVE
400novu_template_required
422novu_raw_subject_forbidden invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/notify/map

POST /v1/genmfg/inbox/hitl

Summary: Product Soft Soft≠LIVE inbox HITL / quality.fail cards (GEN-UI-API-06)

Operation ID: genmfgInboxHitl Responses:

StatusMeaning
200inbox HITL Soft Soft≠LIVE
422inbox_card_kind_unsupported invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/inbox/hitl

POST /v1/genmfg/ui-api/path-classes/assert

Summary: Soft Soft≠LIVE GEN-UI-API-01 path class + UI guide fence (Prove only)

Operation ID: genmfgUiApiPathClassesAssert Responses:

StatusMeaning
200OpenAPI stamps + §0.1 fence Soft Soft≠LIVE
422missing stamp / Product assert / doc fence invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/ui-api/path-classes/assert

POST /v1/genmfg/ui-shell/assert

Summary: Soft Soft≠LIVE Universal shell consumes ui-bundle (GEN-U04)

Operation ID: genmfgUiShellAssert Responses:

StatusMeaning
200library + voyage_player Soft Soft≠LIVE
422shell incomplete / agri fork invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/ui-shell/assert

POST /v1/genmfg/prove/seed/orchestrator/assert

Summary: Soft Soft≠LIVE prove seed thin orchestrator (GEN-P04)

Operation ID: genmfgProveSeedOrchestratorAssert Responses:

StatusMeaning
200thin orchestrator Soft Soft≠LIVE
422second_seeder_forbidden invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/seed/orchestrator/assert

POST /v1/genmfg/prove/voyage-itqo/assert

Summary: Soft Soft≠LIVE I→T→Q→O façade voyage contract (GEN-P05)

Operation ID: genmfgProveVoyageItqoAssert Responses:

StatusMeaning
200I→T→Q→O Soft Soft≠LIVE
422incomplete / soft_leak invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/voyage-itqo/assert

POST /v1/genmfg/prove/elemental-lifecycle/assert

Summary: Soft Soft≠LIVE elemental lifecycle event stream (GEN-ELEM-07)

Operation ID: genmfgProveElementalLifecycleAssert Responses:

StatusMeaning
200Elemental lifecycle Soft Soft≠LIVE
422incomplete stream / invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/elemental-lifecycle/assert

POST /v1/genmfg/elemental/compile/assert

Summary: Soft Soft≠LIVE elemental lifecycle compile (GEN-ELEM-02)

Operation ID: genmfgElementalCompileAssert Responses:

StatusMeaning
200Lifecycle compile Soft Soft≠LIVE
422unknown advance_gate / invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/elemental/compile/assert

POST /v1/genmfg/elemental/advance-gate/assert

Summary: Soft Soft≠LIVE advance_gate control injection (GEN-ELEM-04)

Operation ID: genmfgElementalAdvanceGateAssert Responses:

StatusMeaning
200Gate Soft Soft≠LIVE (DENY/pass/pending)
422invent_passed forbidden
503LIVE engines down invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/elemental/advance-gate/assert

POST /v1/genmfg/elemental/pack-policy/assert

Summary: Soft Soft≠LIVE pack elemental_emit_policy (GEN-ELEM-05)

Operation ID: genmfgElementalPackPolicyAssert Responses:

StatusMeaning
200Pack policy Soft Soft≠LIVE
422policy missing / invalid

X-GENMFG-PATH-CLASS /v1/genmfg/elemental/pack-policy/assert

POST /v1/genmfg/ui/elemental-phase/assert

Summary: Soft Soft≠LIVE UI elemental phase from SSE events (GEN-ELEM-10 Prove)

Operation ID: genmfgUiElementalPhaseAssert Responses:

StatusMeaning
200Phase chrome Soft Soft≠LIVE
422invent / NATS / hardcode invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/ui/elemental-phase/assert

POST /v1/genmfg/voyages/{id}/elemental-phase

Summary: Project Player elemental phase from events (GEN-ELEM-10 Product Soft Soft≠LIVE)

Operation ID: genmfgVoyageElementalPhase

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Responses:

StatusMeaning
200Phase chrome from events Soft Soft≠LIVE
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/elemental-phase

POST /v1/genmfg/elemental/kestra-bind/assert

Summary: Soft Soft≠LIVE elemental lifecycle + Kestra bind annotate (GEN-ELEM-02)

Operation ID: genmfgElementalKestraBindAssert Responses:

StatusMeaning
200Elemental Kestra Soft Soft≠LIVE annotate
422compile invent_refuse
503kestra compile unbound

X-GENMFG-PATH-CLASS /v1/genmfg/elemental/kestra-bind/assert

POST /v1/genmfg/prove/federation/assert

Summary: Soft Soft≠LIVE federation dual-node prove (GEN-P08)

Operation ID: genmfgProveFederationAssert Responses:

StatusMeaning
200Soft Soft≠LIVE contract (LIVE invent_refuse)
503federation_live_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/federation/assert

POST /v1/genmfg/prove/shared-kestra-terminal/assert

Summary: Soft Soft≠LIVE AG-01+MN-03 shared Kestra terminal (GEN-D04)

Operation ID: genmfgProveSharedKestraTerminalAssert Responses:

StatusMeaning
200Shared Kestra Soft Soft≠LIVE
422industry_bff_fsm_forbidden invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/shared-kestra-terminal/assert

POST /v1/genmfg/compliance/unlock/assert

Summary: Soft Soft≠LIVE compliance credential unlock for agri LIVE (GEN-M03)

Operation ID: genmfgComplianceUnlockAssert Responses:

StatusMeaning
200Unlocked Soft Soft≠LIVE
402credentials unlock unmet invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/compliance/unlock/assert

POST /v1/genmfg/resources/prefer/assert

Summary: Soft Soft≠LIVE prefer resource APIs over exchange underlay (GEN-N14)

Operation ID: genmfgResourcesPreferAssert Responses:

StatusMeaning
200resource API Soft Soft≠LIVE / deprecated underlay noted
422exchange product caller invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/resources/prefer/assert

POST /v1/genmfg/resources/mirror/assert

Summary: Soft Soft≠LIVE resource mirror Soft Soft≠LIVE Map / LIVE s356 invent_refuse (GEN-R12)

Operation ID: genmfgResourcesMirrorAssert Responses:

StatusMeaning
200Soft Soft≠LIVE mirror honesty; live_gate_met false
422invent LIVE mirror forbidden

X-GENMFG-PATH-CLASS /v1/genmfg/resources/mirror/assert

POST /v1/genmfg/logistics/lifecycle/full/assert

Summary: Soft Soft≠LIVE full normalized logistics lifecycle I/O (GEN-F02)

Operation ID: genmfgLogisticsLifecycleFullAssert Responses:

StatusMeaning
200Full Soft Soft≠LIVE lifecycle plan
422lifecycle invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/logistics/lifecycle/full/assert

POST /v1/genmfg/prove/hitl/assert

Summary: Soft Soft≠LIVE HITL multi-persona forms+advance (GEN-P13)

Operation ID: genmfgProveHitlAssert Responses:

StatusMeaning
200HITL Soft Soft≠LIVE compose ok
422personas/compose/DEV_SKIP_AUTH invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/hitl/assert

POST /v1/genmfg/packs/agri-default/assert

Summary: Soft Soft≠LIVE agri pack default → journeys/agriculture/* (GEN-16)

Operation ID: genmfgPacksAgriDefaultAssert Responses:

StatusMeaning
200Agri default Soft Soft≠LIVE
422non-agri journey invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/packs/agri-default/assert

POST /v1/genmfg/quality/attest/assert

Summary: Soft Soft≠LIVE quality→AaaS attestation compose (GEN-23)

Operation ID: genmfgQualityAttestAssert Responses:

StatusMeaning
200Attest compose Soft Soft≠LIVE
422quality/attest invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/quality/attest/assert

POST /v1/genmfg/credentials/unlock/assert

Summary: Soft Soft≠LIVE required_credentials unlock (GEN-24)

Operation ID: genmfgCredentialsUnlockAssert Responses:

StatusMeaning
200Unlock Soft Soft≠LIVE
422credentials invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/credentials/unlock/assert

POST /v1/genmfg/seal/honesty/assert

Summary: Soft Soft≠LIVE SEAL honesty Soft≠LIVE fence (GEN-25)

Operation ID: genmfgSealHonestyAssert Responses:

StatusMeaning
200Seal honesty Soft Soft≠LIVE
422soft_seal_as_live / incomplete invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/seal/honesty/assert

POST /v1/genmfg/prove/events/observe/assert

Summary: Soft Soft≠LIVE prove observe via SSE/list only (GEN-P09)

Operation ID: genmfgProveEventsObserveAssert Responses:

StatusMeaning
200Observe Soft Soft≠LIVE
422NATS-in-harness invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/events/observe/assert

POST /v1/genmfg/criteria/fan-in/assert

Summary: Soft Soft≠LIVE logistics→platform.criteria.v1.* fan-in (GEN-N08)

Operation ID: genmfgCriteriaFanInAssert Responses:

StatusMeaning
200Criteria fan-in Soft Soft≠LIVE
422raw adapter / unsupported invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/criteria/fan-in/assert

POST /v1/genmfg/events/sse-merge/assert

Summary: Soft Soft≠LIVE SSE merge by correlation (GEN-S07)

Operation ID: genmfgEventsSseMergeAssert Responses:

StatusMeaning
200SSE merge Soft Soft≠LIVE
422raw subjects invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/events/sse-merge/assert

POST /v1/genmfg/dispatch/camel/assert

Summary: Soft Soft≠LIVE Camel fleet dispatch no new bridge (GEN-33)

Operation ID: genmfgDispatchCamelAssert Responses:

StatusMeaning
200Camel dispatch Soft Soft≠LIVE
422new bridge invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/dispatch/camel/assert

POST /v1/genmfg/erpnext/recipe/assert

Summary: Soft Soft≠LIVE ERPNext Camel/s367 recipe (GEN-34)

Operation ID: genmfgErpnextRecipeAssert Responses:

StatusMeaning
200ERPNext Soft Soft≠LIVE
422direct ERP client invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/erpnext/recipe/assert

POST /v1/genmfg/sourcing/multi-fill-fixture/assert

Summary: Soft Soft≠LIVE multi_fill fixture reuse (GEN-S10)

Operation ID: genmfgSourcingMultiFillFixtureAssert Responses:

StatusMeaning
200multi_fill Soft Soft≠LIVE
422fork invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/sourcing/multi-fill-fixture/assert

POST /v1/genmfg/secrets/instance/assert

Summary: Soft Soft≠LIVE per-instance OpenBao path (GEN-I07)

Operation ID: genmfgSecretsInstanceAssert Responses:

StatusMeaning
200Instance secret Soft Soft≠LIVE
422secret invent invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/secrets/instance/assert

POST /v1/genmfg/kestra/bindings/assert

Summary: Soft Soft≠LIVE Kestra voyage bindings (GEN-I08)

Operation ID: genmfgKestraBindingsAssert Responses:

StatusMeaning
200Kestra bindings Soft Soft≠LIVE
422missing instance_id invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/kestra/bindings/assert

POST /v1/genmfg/multi-org/step-owner/assert

Summary: Soft Soft≠LIVE multi-org step owner bindings (GEN-I09)

Operation ID: genmfgMultiOrgStepOwnerAssert Responses:

StatusMeaning
200Step owner Soft Soft≠LIVE
422bindings missing invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/multi-org/step-owner/assert

POST /v1/genmfg/logistics/geofence-advance/assert

Summary: Soft Soft≠LIVE geofence enter advances voyage (GEN-F03)

Operation ID: genmfgLogisticsGeofenceAdvanceAssert Responses:

StatusMeaning
200Geofence advance Soft Soft≠LIVE
422raw fleet invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/logistics/geofence-advance/assert

POST /v1/genmfg/logistics/equipment-relocate/assert

Summary: Soft Soft≠LIVE equipment relocate→logistics (GEN-F05)

Operation ID: genmfgLogisticsEquipmentRelocateAssert Responses:

StatusMeaning
200Relocate Soft Soft≠LIVE
400asset/org invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/logistics/equipment-relocate/assert

POST /v1/genmfg/hierarchy/conglomerate/assert

Summary: Soft Soft≠LIVE conglomerate/franchise Soft fixtures (GEN-H08)

Operation ID: genmfgHierarchyConglomerateAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/hierarchy/conglomerate/assert

POST /v1/genmfg/hierarchy/chamber-cast/assert

Summary: Soft Soft≠LIVE chamber cast metadata (GEN-H09)

Operation ID: genmfgHierarchyChamberCastAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/hierarchy/chamber-cast/assert

POST /v1/genmfg/forms/bind/assert

Summary: Soft Soft≠LIVE forms.io pack bind (GEN-U06)

Operation ID: genmfgFormsBindAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/forms/bind/assert

POST /v1/genmfg/novu/map/assert

Summary: Soft Soft≠LIVE Novu pack map (GEN-U07)

Operation ID: genmfgNovuMapAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/novu/map/assert

POST /v1/genmfg/prove/openapi-fragments/assert

Summary: Soft Soft≠LIVE prove OpenAPI fragments link (GEN-P11)

Operation ID: genmfgProveOpenapiFragmentsAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/openapi-fragments/assert

POST /v1/genmfg/prove/mn03/compose/assert

Summary: Soft Soft≠LIVE MN-03 engine compose (GEN-X01c)

Operation ID: genmfgProveMn03ComposeAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/mn03/compose/assert

POST /v1/genmfg/inbox/hitl/assert

Summary: Soft Soft≠LIVE inbox HITL/quality cards (GEN-42)

Operation ID: genmfgInboxHitlAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/inbox/hitl/assert

POST /v1/genmfg/kuratibu/transform/assert

Summary: Soft Soft≠LIVE Kuratibu Transform mirror (GEN-43)

Operation ID: genmfgKuratibuTransformAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/kuratibu/transform/assert

POST /v1/genmfg/openmaint/asset/assert

Summary: Soft Soft≠LIVE OpenMaint asset steps (GEN-44)

Operation ID: genmfgOpenmaintAssetAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/openmaint/asset/assert

POST /v1/genmfg/materra/j3-default/assert

Summary: Soft Soft≠LIVE J3 export/season agri default (GEN-M04)

Operation ID: genmfgMaterraJ3DefaultAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/materra/j3-default/assert

POST /v1/genmfg/materra/inbox-agri/assert

Summary: Soft Soft≠LIVE Materra inbox agri events (GEN-M05)

Operation ID: genmfgMaterraInboxAgriAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/materra/inbox-agri/assert

POST /v1/genmfg/provenance/passport/assert

Summary: Soft Soft≠LIVE provenance→quality+seal (GEN-M07)

Operation ID: genmfgProvenancePassportAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/provenance/passport/assert

POST /v1/genmfg/index/assert

Summary: Soft Soft≠LIVE GenMfg docs/UI index (GEN-01)

Operation ID: genmfgIndexAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/index/assert

POST /v1/genmfg/arch/no-bridge-bridge/assert

Summary: Soft Soft≠LIVE ban bridge→bridge HTTP (GEN-02)

Operation ID: genmfgArchNoBridgeBridgeAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/arch/no-bridge-bridge/assert

POST /v1/genmfg/prove/ag05-event-path

Summary: Soft Soft≠LIVE AG-05 event-sourced path via API events only (GEN-ES09)

Operation ID: genmfgProveAg05EventPath Responses:

StatusMeaning
200Soft Soft≠LIVE path complete (invent_refuse_live)
422incomplete / jetstream forbidden invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/ag05-event-path

POST /v1/genmfg/packs/admin/assert

Summary: Soft Soft≠LIVE pack:admin APF + hydrate honesty (GEN-U10)

Operation ID: genmfgPacksAdminAssert Responses:

StatusMeaning
200Soft Soft≠LIVE admin/hydrate ok
403pack_admin_apf_denied
422hydrate_live_leak invent_refuse
503pack_publish_kv_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/packs/admin/assert

POST /v1/genmfg/authz/matrix/assert

Summary: Soft Soft≠LIVE agri 401/403/402/422 authz matrix (GEN-A09)

Operation ID: genmfgAuthzMatrixAssert Responses:

StatusMeaning
200Soft Soft≠LIVE matrix pass (invent_refuse_live)
422matrix fixture incomplete invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/authz/matrix/assert

POST /v1/genmfg/sourcing/reentry

Summary: Soft Soft≠LIVE Transform labor/parts sourcing re-entry (GEN-S09)

Operation ID: genmfgSourcingReentry Responses:

StatusMeaning
200Mapped Soft requirement.create (denorm may invent_refuse)
422unknown hook / LIVE invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/sourcing/reentry

POST /v1/genmfg/from-standing-order-breach

Summary: Soft Soft≠LIVE standing-order breach → GenMfg Input (GEN-S08)

Operation ID: genmfgFromStandingOrderBreach Responses:

StatusMeaning
200Mapped Soft voyage_start
201Voyage started Soft Soft≠LIVE when play=true
422input_from / LIVE invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/from-standing-order-breach

POST /v1/genmfg/criteria-wf/assert

Summary: Soft Soft≠LIVE criteria match.fired / sla.breached WF bind (GEN-ES07)

Operation ID: genmfgCriteriaWfAssert Responses:

StatusMeaning
200Binding resolved Soft Soft≠LIVE (optional fire)
404criteria_wf_binding_missing
503criteria_wf_invoke_unbound invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/criteria-wf/assert

POST /v1/genmfg/scenario-paths/assert

Summary: Soft Soft≠LIVE scenario paths LG/FS/MX/FM/LB invent_refuse (GEN-X05/X06/X07)

Operation ID: genmfgScenarioPathsAssert Responses:

StatusMeaning
200Soft Soft≠LIVE path plan (invent_refuse_live)
400org_id_required
404scenario_path_unknown

X-GENMFG-PATH-CLASS /v1/genmfg/scenario-paths/assert

POST /v1/genmfg/logistics/exception

Summary: Raise Soft Soft≠LIVE logistics exception.raised → support invent_refuse (GEN-F04)

Operation ID: genmfgLogisticsException Responses:

StatusMeaning
200Platform exception envelope Soft Soft≠LIVE
400org_id_required

X-GENMFG-PATH-CLASS /v1/genmfg/logistics/exception

POST /v1/genmfg/security/layers/assert

Summary: Per-engine L1–L12 invent_refuse LIVE if incomplete (GEN-A05 Soft Soft≠LIVE)

Operation ID: genmfgSecurityLayersAssert Responses:

StatusMeaning
200layers_live when GENMFG_SECURITY_LIVE + probes
503engine_security_layers_incomplete invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/security/layers/assert

POST /v1/genmfg/envelopes/assert

Summary: Assert Camel/NATS envelope org_id + instance_id (GEN-I05 Soft Soft≠LIVE)

Operation ID: genmfgEnvelopesAssert Responses:

StatusMeaning
200Identity ok Soft Soft≠LIVE
422envelope_identity_incomplete

X-GENMFG-PATH-CLASS /v1/genmfg/envelopes/assert

POST /v1/genmfg/webhooks/assert

Summary: Assert webhook HMAC per instance_id Soft Soft≠LIVE (GEN-I06/A07)

Operation ID: genmfgWebhooksAssert Responses:

StatusMeaning
200Verified Soft Soft≠LIVE (inject secret)
401webhook_hmac_invalid / signature required
422engine_required / engine_hmac_not_required
503webhook_hmac_unbound / webhook_secret_unresolved invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/webhooks/assert

POST /v1/genmfg/from-sourcing-award

Summary: Soft Soft≠LIVE sourcing award → GenMfg correlation (GEN-X04 / S-AG-05)

Operation ID: genmfgFromSourcingAward Responses:

StatusMeaning
200Mapped Soft voyage_start
201Voyage started Soft Soft≠LIVE when play=true
422correlation missing or LIVE OPTIMAL invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/from-sourcing-award

POST /v1/genmfg/standing-orders/field-dispatch

Summary: Standing-order field_dispatch → shipment.create Soft Soft≠LIVE (GEN-F06)

Operation ID: genmfgStandingOrderFieldDispatch Responses:

StatusMeaning
200Platform shipment.create Soft Soft≠LIVE
422instance_id / standing_order invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/standing-orders/field-dispatch

GET /v1/genmfg/resolve

Summary: Resolve instance for service (fail closed ambiguous/missing)

Operation ID: genmfgResolveBinding

Parameters:

NameInRequiredTypeNotes
X-Org-Idheaderyesstring
servicequeryyesstring
instance_idquerynostring
org_pathquerynostringComma-separated ancestry

Responses:

StatusMeaning
200Resolved binding
404binding_missing
422binding_ambiguous

X-GENMFG-PATH-CLASS /v1/genmfg/resolve

GET /v1/genmfg/events/stream

Summary: SSE stream (genmfg + logistics + criteria + sourcing subjects)

Operation ID: genmfgEventsStream Responses:

StatusMeaning
200text/event-stream
503nats_unavailable invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/events/stream

GET /v1/exchange/domains

Summary: List substitutable exchange domains

Operation ID: exchangeDomains Responses:

StatusMeaning
200Domain list

X-GENMFG-PATH-CLASS /v1/exchange/domains

POST /v1/exchange/normalize

Summary: Normalize any domain event to platform.<domain>.v1.event.*

Operation ID: exchangeNormalize Responses:

StatusMeaning
200Envelope
422Fail closed

X-GENMFG-PATH-CLASS /v1/exchange/normalize

POST /v1/exchange/denormalize

Summary: Denormalize platform command to adapter subject

Operation ID: exchangeDenormalize Responses:

StatusMeaning
200Adapter subject
422Fail closed

X-GENMFG-PATH-CLASS /v1/exchange/denormalize

GET /v1/genmfg/readiness

Summary: Aggregate Soft Soft≠LIVE readiness

Operation ID: genmfgReadiness Responses:

StatusMeaning
200Always invent_refuse_live; flink/criteria/solver/kestra/security/normalize probes; farmos_live=false

X-GENMFG-PATH-CLASS /v1/genmfg/readiness

POST /v1/genmfg/live-gates/assert

Summary: Assert pack Flink Job A / domain normalize LIVE gates (GEN-ES06/W06)

Operation ID: genmfgLiveGatesAssert Responses:

StatusMeaning
200Gates ok Soft Soft≠LIVE (live_gate_met still false aggregate)
422domain_catalog_missing
503flink_job_a_required / normalize_path_incomplete invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/live-gates/assert

GET /v1/genmfg/catalog/hooks

Summary: Closed workflow hook vocabulary

Operation ID: genmfgCatalogHooks Responses:

StatusMeaning
200lookup.genmfg.workflow_hooks.v1
503workflow_hooks_missing

X-GENMFG-PATH-CLASS /v1/genmfg/catalog/hooks

GET /v1/genmfg/catalog/events

Summary: Subsystem event catalog

Operation ID: genmfgCatalogEvents Responses:

StatusMeaning
200lookup.genmfg.subsystem_event_catalog.v1
503event_catalog_missing

X-GENMFG-PATH-CLASS /v1/genmfg/catalog/events

POST /v1/genmfg/hooks/validate

Summary: Validate journey/hooks against closed vocabulary (GEN-D02/W10)

Operation ID: genmfgHooksValidate Responses:

StatusMeaning
200Hooks ok
422unknown_hook / adapter_payload_forbidden

X-GENMFG-PATH-CLASS /v1/genmfg/hooks/validate

POST /v1/genmfg/voyages/{id}/seal

Summary: Seal voyage Soft Soft≠LIVE; invent_refuse incomplete certify_eval_set (GEN-D07)

Operation ID: genmfgSealVoyage

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Request body:

Content type: application/json

FieldTypeNotes
industry_packstring
completed_eval_setstring[]

Responses:

StatusMeaning
200Sealed Soft Soft≠LIVE
422certify_eval_set_incomplete

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/seal

GET /v1/genmfg/packs

Summary: List pack.genmfg.* from SOVEREIGN_LOOKUPS

Operation ID: genmfgListPacks Responses:

StatusMeaning
200Pack index

X-GENMFG-PATH-CLASS /v1/genmfg/packs

GET /v1/genmfg/packs/{industry}

Summary: Get industry pack (supports mining.gold)

Operation ID: genmfgGetPack

Parameters:

NameInRequiredTypeNotes
industrypathyesstring

Responses:

StatusMeaning
200Pack document
404pack_not_found invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/packs/{industry}

GET /v1/genmfg/scenarios

Summary: List GenMfg Soft Soft≠LIVE scenario catalog (GEN-X01)

Operation ID: genmfgListScenarios Responses:

StatusMeaning
200Scenario index

X-GENMFG-PATH-CLASS /v1/genmfg/scenarios

GET /v1/genmfg/scenarios/{id}

Summary: Get scenario by catalog id (S-MN-03) or scenario_key

Operation ID: genmfgGetScenario

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Responses:

StatusMeaning
200Scenario document
404scenario_not_found invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/scenarios/{id}

GET /v1/genmfg/ui-bundle

Summary: Compose data-driven UI shell from pack

Operation ID: genmfgUiBundle

Parameters:

NameInRequiredTypeNotes
industryquerynostring

Responses:

StatusMeaning
200views + shell + integrations
404pack_not_found

X-GENMFG-PATH-CLASS /v1/genmfg/ui-bundle

GET /v1/genmfg/voyages

Summary: List voyages (empty Soft honesty without listVoyages inject)

Operation ID: genmfgListVoyages Responses:

StatusMeaning
200Voyage list

POST /v1/genmfg/voyages

Summary: Start voyage via playPlaybookVoyage

Operation ID: genmfgStartVoyage Request body:

Content type: application/json

FieldTypeNotes
journey_idstring
industry_packstring
org_idstring
org_pathstring[]
integration_bindingsobject

Responses:

StatusMeaning
201Voyage started Soft Soft≠LIVE
400Missing journey_id / org_id
503Kestra/Camel invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/voyages

GET /v1/genmfg/voyages/{id}

Summary: Get voyage state

Operation ID: genmfgGetVoyage

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Responses:

StatusMeaning
200Voyage
404Not found

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}

POST /v1/genmfg/voyages/{id}/advance

Summary: Advance voyage (Kestra only — no Surreal Mayet LIVE)

Operation ID: genmfgAdvanceVoyage

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Responses:

StatusMeaning
200Advanced
503invent_refuse when Kestra down

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/advance

GET /v1/genmfg/adapters

Summary: List adapter registry entries (GEN-N05 Soft Soft≠LIVE)

Operation ID: genmfgListAdapters

Parameters:

NameInRequiredTypeNotes
servicequerynostring
include_softquerynostring enum: 0, 1

Responses:

StatusMeaning
200Adapters from lookup.genmfg.adapter_registry.v1
503registry_missing invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/adapters

POST /v1/genmfg/adapters/assert

Summary: Assert capabilities / multi_adapter_exchange / substitute (GEN-N09/N13)

Operation ID: genmfgAssertAdapters Responses:

StatusMeaning
200Asserted Soft Soft≠LIVE
404adapter_not_registered
422missing_capability
503multi_adapter_exchange invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/adapters/assert

POST /v1/genmfg/voyages/{id}/invoke

Summary: action:invoke via workflow-subject-invoke; requires idempotency_key (GEN-W02/W05)

Operation ID: genmfgInvoke

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Request body:

Content type: application/json

FieldTypeNotes
subjectstring
idempotency_keystring
payloadobject
require_capabilityany
adapterstring
servicestring

Responses:

StatusMeaning
200Invoked or Soft Soft≠LIVE deduped
422idempotency_key_required / missing_capability
503invoke_failed invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/invoke

POST /v1/genmfg/voyages/{id}/quality

Summary: Delegate compliance gate evaluate

Operation ID: genmfgQuality

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Request body:

Content type: application/json

FieldTypeNotes
compliance_gate_idstring
evidenceobject

Responses:

StatusMeaning
200Eval result
400gate id required
502compliance unavailable invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/quality

POST /v1/genmfg/voyages/{id}/optimize

Summary: Pack solver → decision-gateway (fail closed)

Operation ID: genmfgOptimize

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Request body:

Content type: application/json

FieldTypeNotes
capability_keystring
industry_packstring
overridesobject

Responses:

StatusMeaning
200decision-result-v1 wrapped Soft Soft≠LIVE
503Never invent OPTIMAL

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/optimize

POST /v1/genmfg/voyages/{id}/dispatch

Summary: Map platform.logistics.v1.command.* (denormalize)

Operation ID: genmfgDispatch

Parameters:

NameInRequiredTypeNotes
idpathyesstring

Responses:

StatusMeaning
200Mapped command
400org_id + instance_id required

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/dispatch

POST /v1/genmfg/from-quote/{quoteId}

Summary: Alias sourcing sign-convert

Operation ID: genmfgFromQuote

Parameters:

NameInRequiredTypeNotes
quoteIdpathyesstring

Responses:

StatusMeaning
200Work order
502Upstream fail

X-GENMFG-PATH-CLASS /v1/genmfg/from-quote/{quoteId}

POST /v1/logistics/normalize

Summary: Normalize logistics event → platform.logistics.v1.event.*

Operation ID: logisticsNormalize Responses:

StatusMeaning
200Envelope + subject
422Fail closed missing org_id/instance_id/correlation_id

X-GENMFG-PATH-CLASS /v1/logistics/normalize

POST /v1/logistics/normalize/publish

Summary: LIVE publish normalized logistics (LOGISTICS_NORMALIZE_LIVE=1)

Operation ID: logisticsNormalizePublish Responses:

StatusMeaning
200Published
503live_gate_unmet invent_refuse

X-GENMFG-PATH-CLASS /v1/logistics/normalize/publish

POST /v1/logistics/denormalize

Summary: Denormalize platform command → fleet.v1.command.*

Operation ID: logisticsDenormalize Responses:

StatusMeaning
200Adapter subject + payload
422Fail closed

X-GENMFG-PATH-CLASS /v1/logistics/denormalize

POST /v1/logistics/denormalize/publish

Summary: LIVE publish denormalized command

Operation ID: logisticsDenormalizePublish Responses:

StatusMeaning
200Published
503live_gate_unmet invent_refuse

X-GENMFG-PATH-CLASS /v1/logistics/denormalize/publish

GET /v1/genmfg/domains

Summary: List schema-first GenMfg domains

Operation ID: genmfgListDomains Responses:

StatusMeaning
200Domain list Soft Soft≠LIVE

X-GENMFG-PATH-CLASS /v1/genmfg/domains

GET /v1/genmfg/domains/{domain}

Summary: Domain catalog (resources, operations, schema_id)

Operation ID: genmfgGetDomain

Parameters:

NameInRequiredTypeNotes
domainpathyesstring

Responses:

StatusMeaning
200Catalog
404domain_unknown

X-GENMFG-PATH-CLASS /v1/genmfg/domains/{domain}

GET /v1/genmfg/domains/{domain}/resources/{resourceType}

Summary: List domain resources (mirror)

Operation ID: genmfgListResources

Parameters:

NameInRequiredTypeNotes
domainpathyesstring
resourceTypepathyesstring

Responses:

StatusMeaning
200Resource list Soft Soft≠LIVE

POST /v1/genmfg/domains/{domain}/resources/{resourceType}

Summary: Create/ensure/upsert domain resource (denorm Soft Soft≠LIVE)

Operation ID: genmfgWriteResource

Parameters:

NameInRequiredTypeNotes
domainpathyesstring
resourceTypepathyesstring

Responses:

StatusMeaning
200Mapped resource
422Schema / vendor keys / command
503LIVE publish invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/domains/{domain}/resources/{resourceType}

GET /v1/genmfg/domains/{domain}/resources/{resourceType}/{id}

Summary: Get domain resource by id

Operation ID: genmfgGetResource

Parameters:

NameInRequiredTypeNotes
domainpathyesstring
resourceTypepathyesstring
idpathyesstring

Responses:

StatusMeaning
200Resource
404Not found

PATCH /v1/genmfg/domains/{domain}/resources/{resourceType}/{id}

Summary: Patch domain resource

Operation ID: genmfgPatchResource

Parameters:

NameInRequiredTypeNotes
domainpathyesstring
resourceTypepathyesstring
idpathyesstring

Responses:

StatusMeaning
200Mapped
422Fail closed

X-GENMFG-PATH-CLASS /v1/genmfg/domains/{domain}/resources/{resourceType}/{id}

POST /v1/genmfg/domains/{domain}/resources/{resourceType}/{id}/actions/{action}

Summary: Domain resource lifecycle action

Operation ID: genmfgResourceAction

Parameters:

NameInRequiredTypeNotes
domainpathyesstring
resourceTypepathyesstring
idpathyesstring
actionpathyesstring

Responses:

StatusMeaning
200Mapped
422action_unknown
503LIVE invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/domains/{domain}/resources/{resourceType}/{id}/actions/{action}

POST /v1/genmfg/domains/{domain}/events/ingest

Summary: Ingress normalize + resource projection

Operation ID: genmfgDomainIngest

Parameters:

NameInRequiredTypeNotes
domainpathyesstring

Responses:

StatusMeaning
200Envelope + resource
503LIVE invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/domains/{domain}/events/ingest

GET /v1/genmfg/domains/{domain}/events

Summary: List recent domain events (Soft Soft≠LIVE peek)

Operation ID: genmfgDomainEvents

Parameters:

NameInRequiredTypeNotes
domainpathyesstring

Responses:

StatusMeaning
200Events Soft Soft≠LIVE

X-GENMFG-PATH-CLASS /v1/genmfg/domains/{domain}/events

GET /v1/genmfg/workspaces/{orgId}

Summary: Get org GenMfg workspace config

Operation ID: genmfgGetWorkspace

Parameters:

NameInRequiredTypeNotes
orgIdpathyesstring

Responses:

StatusMeaning
200Workspace
404Not found

PUT /v1/genmfg/workspaces/{orgId}

Summary: Upsert org GenMfg workspace (pack + domain binds)

Operation ID: genmfgPutWorkspace

Parameters:

NameInRequiredTypeNotes
orgIdpathyesstring

Responses:

StatusMeaning
200Saved Soft Soft≠LIVE
503KV put invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/workspaces/{orgId}

GET /v1/genmfg/workspaces/{orgId}/bindings

Summary: List workspace domain bindings

Operation ID: genmfgListWorkspaceBindings

Parameters:

NameInRequiredTypeNotes
orgIdpathyesstring

Responses:

StatusMeaning
200Bindings

POST /v1/genmfg/workspaces/{orgId}/bindings

Summary: Upsert sticky domain→instance bind

Operation ID: genmfgUpsertWorkspaceBinding

Parameters:

NameInRequiredTypeNotes
orgIdpathyesstring

Responses:

StatusMeaning
200Binding
422domain_unknown

X-GENMFG-PATH-CLASS /v1/genmfg/workspaces/{orgId}/bindings

DELETE /v1/genmfg/workspaces/{orgId}/bindings/{domain}

Summary: Soft-deactivate workspace domain bind

Operation ID: genmfgDeleteWorkspaceBinding

Parameters:

NameInRequiredTypeNotes
orgIdpathyesstring
domainpathyesstring

Responses:

StatusMeaning
200Deactivated
404Not found

X-GENMFG-PATH-CLASS /v1/genmfg/workspaces/{orgId}/bindings/{domain}

POST /v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}

Summary: Voyage-scoped resource write

Operation ID: genmfgVoyageWriteResource

Parameters:

NameInRequiredTypeNotes
idpathyesstring
domainpathyesstring
resourceTypepathyesstring

Responses:

StatusMeaning
200Mapped

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}

POST /v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}/{resourceId}/actions/{action}

Summary: Voyage-scoped resource action

Operation ID: genmfgVoyageResourceAction

Parameters:

NameInRequiredTypeNotes
idpathyesstring
domainpathyesstring
resourceTypepathyesstring
resourceIdpathyesstring
actionpathyesstring

Responses:

StatusMeaning
200Mapped

X-GENMFG-PATH-CLASS /v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}/{resourceId}/actions/{action}

POST /v1/genmfg/ops/agri-cutover/assert

Summary: Soft Soft≠LIVE GEN-50 agri cutover

Operation ID: genmfgv1GenmfgOpsAgricutoverAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/ops/agri-cutover/assert

POST /v1/genmfg/ops/cutover-progress/assert

Summary: Soft Soft≠LIVE cutover progress desk (TCP green ≠ LIVE)

Operation ID: genmfgOpsCutoverProgressAssert Responses:

StatusMeaning
200Progress Soft Soft≠LIVE; live_gate_met false
422invent LIVE forbidden

X-GENMFG-PATH-CLASS /v1/genmfg/ops/cutover-progress/assert

POST /v1/genmfg/ops/live-readiness/assert

Summary: Soft Soft≠LIVE LIVE ops readiness inventory (never invents live_gate_met)

Operation ID: genmfgv1GenmfgOpsLivereadinessAssert Responses:

StatusMeaning
200Soft Soft≠LIVE inventory — invent_refuse_live
422invent_refuse when LIVE invented

X-GENMFG-PATH-CLASS /v1/genmfg/ops/live-readiness/assert

POST /v1/genmfg/ops/kv-seed/assert

Summary: Soft Soft≠LIVE GenMfg KV seed inventory (never invents nats_kv_seeded)

Operation ID: genmfgv1GenmfgOpsKvseedAssert Responses:

StatusMeaning
200Soft Soft≠LIVE disk key inventory
422invent_refuse when seeded LIVE invented

X-GENMFG-PATH-CLASS /v1/genmfg/ops/kv-seed/assert

POST /v1/genmfg/ops/engine-probes/assert

Summary: Soft Soft≠LIVE engine TCP/probe honesty (never invents live_gate_met)

Operation ID: genmfgv1GenmfgOpsEngineprobesAssert Responses:

StatusMeaning
200Soft Soft≠LIVE probe desk — DOWN is honest
422invent_refuse when LIVE invented or opt-in while DOWN

X-GENMFG-PATH-CLASS /v1/genmfg/ops/engine-probes/assert

POST /v1/genmfg/ops/stack-preflight/assert

Summary: Soft Soft≠LIVE Docker/stack preflight (never invents stack_live)

Operation ID: genmfgv1GenmfgOpsStackpreflightAssert Responses:

StatusMeaning
200Soft Soft≠LIVE preflight — daemon DOWN is honest
422invent_refuse when stack LIVE invented

X-GENMFG-PATH-CLASS /v1/genmfg/ops/stack-preflight/assert

POST /v1/genmfg/console/mfg-bind/assert

Summary: Soft Soft≠LIVE GEN-51 console MFG bind

Operation ID: genmfgv1GenmfgConsoleMfgbindAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/console/mfg-bind/assert

POST /v1/genmfg/prove/playwright-smoke/assert

Summary: Soft Soft≠LIVE GEN-54 playwright soft smoke

Operation ID: genmfgv1GenmfgProvePlaywrightsmokeAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/playwright-smoke/assert

POST /v1/genmfg/prove/collections/assert

Summary: Soft Soft≠LIVE GEN-P12 OpenAPI collections

Operation ID: genmfgv1GenmfgProveCollectionsAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/collections/assert

POST /v1/genmfg/sourcing/offtake-reentry/assert

Summary: Soft Soft≠LIVE GEN-S12 offtake reentry

Operation ID: genmfgv1GenmfgSourcingOfftakereentryAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/sourcing/offtake-reentry/assert

POST /v1/genmfg/logistics/wms-pallet/assert

Summary: Soft Soft≠LIVE GEN-F07 WMS pallet

Operation ID: genmfgv1GenmfgLogisticsWmspalletAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/logistics/wms-pallet/assert

POST /v1/genmfg/criteria/job-b-interrupt/assert

Summary: Soft Soft≠LIVE GEN-ES10 Job B SLA

Operation ID: genmfgv1GenmfgCriteriaJobbinterruptAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/criteria/job-b-interrupt/assert

POST /v1/genmfg/scenarios/hl01/assert

Summary: Soft Soft≠LIVE GEN-X08 HL-01 medical

Operation ID: genmfgv1GenmfgScenariosHl01Assert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/scenarios/hl01/assert

POST /v1/genmfg/prove/traceability/assert

Summary: Soft Soft≠LIVE GEN-X09 traceability

Operation ID: genmfgv1GenmfgProveTraceabilityAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/prove/traceability/assert

POST /v1/genmfg/whatif/overlay/assert

Summary: Soft Soft≠LIVE GEN-35 what-if

Operation ID: genmfgv1GenmfgWhatifOverlayAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/whatif/overlay/assert

POST /v1/genmfg/standing-orders/wo-spawn/assert

Summary: Soft Soft≠LIVE GEN-53 SO WO spawn

Operation ID: genmfgv1GenmfgStandingordersWospawnAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/standing-orders/wo-spawn/assert

POST /v1/genmfg/events/ws-multiplexer/assert

Summary: Soft Soft≠LIVE GEN-45 WS mux

Operation ID: genmfgv1GenmfgEventsWsmultiplexerAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/events/ws-multiplexer/assert

POST /v1/genmfg/bindings/erp-plane/assert

Summary: Soft Soft≠LIVE GEN-I11 ERP Plane

Operation ID: genmfgv1GenmfgBindingsErpplaneAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/bindings/erp-plane/assert

POST /v1/genmfg/hierarchy/drilldown/assert

Summary: Soft Soft≠LIVE GEN-H10 drilldown

Operation ID: genmfgv1GenmfgHierarchyDrilldownAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/hierarchy/drilldown/assert

POST /v1/genmfg/bi/superset-embed/assert

Summary: Soft Soft≠LIVE GEN-A11 Superset

Operation ID: genmfgv1GenmfgBiSupersetembedAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/bi/superset-embed/assert

POST /v1/genmfg/ui/minio-signed/assert

Summary: Soft Soft≠LIVE GEN-U11 MinIO

Operation ID: genmfgv1GenmfgUiMiniosignedAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/ui/minio-signed/assert

POST /v1/genmfg/ui/composable-facet/assert

Summary: Soft Soft≠LIVE GEN-U12 facet

Operation ID: genmfgv1GenmfgUiComposablefacetAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/ui/composable-facet/assert

POST /v1/genmfg/studio/author/assert

Summary: Soft Soft≠LIVE GEN-W12 studio author

Operation ID: genmfgv1GenmfgStudioAuthorAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/studio/author/assert

POST /v1/genmfg/packs/healthcare-fleet/assert

Summary: Soft Soft≠LIVE GEN-52 healthcare/fleet packs

Operation ID: genmfgv1GenmfgPacksHealthcarefleetAssert Responses:

StatusMeaning
200ok
422invent_refuse

X-GENMFG-PATH-CLASS /v1/genmfg/packs/healthcare-fleet/assert

Full specification — verbatim source of truth

{
  "openapi": "3.0.3",
  "info": {
    "title": "GenMfg Façade API",
    "version": "1.1.0",
    "description": "GenMfg façade: schema-first domain resources (/domains/{domain}/resources/*), workspace binds, voyages, packs. Soft Soft≠LIVE — invent_refuse_live unless LIVE gates met.",
    "x-genmfg-ui-api": {
      "mandate": "UI=HTTP+SSE-only",
      "path_class_extension": "x-genmfg-path-class",
      "classes": [
        "Product",
        "Authoring",
        "Ops",
        "Prove",
        "Internal"
      ],
      "backlog": "GEN-UI-API-01"
    }
  },
  "servers": [
    {
      "url": "http://127.0.0.1:3030",
      "description": "agent-bff"
    }
  ],
  "paths": {
    "/v1/genmfg/bindings": {
      "get": {
        "summary": "List integration bindings for org (connections-store)",
        "operationId": "genmfgListBindings",
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "service",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Bindings list Soft Soft≠LIVE"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/bindings/step-owner": {
      "post": {
        "summary": "Resolve multi-party sticky bindings for step owner org (GEN-H03 Soft Soft≠LIVE)",
        "operationId": "genmfgBindingsStepOwner",
        "responses": {
          "200": {
            "description": "Step-owner binding slice"
          },
          "404": {
            "description": "step_owner_bindings_missing invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/logistics/lifecycle/plan": {
      "post": {
        "summary": "Soft Soft≠LIVE normalized logistics lifecycle plan (GEN-F02)",
        "operationId": "genmfgLogisticsLifecyclePlan",
        "responses": {
          "200": {
            "description": "Stage plan invent_refuse_live"
          },
          "400": {
            "description": "org_id_required"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/logistics/lifecycle/assert": {
      "post": {
        "summary": "Assert Soft Soft≠LIVE adjacent lifecycle transition (GEN-F02)",
        "operationId": "genmfgLogisticsLifecycleAssert",
        "responses": {
          "200": {
            "description": "Transition ok Soft Soft≠LIVE"
          },
          "422": {
            "description": "lifecycle_transition_invalid invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/dual-pack-dom": {
      "post": {
        "summary": "Soft Soft≠LIVE AG vs mining.gold Player/bench DOM assert (GEN-X03)",
        "operationId": "genmfgProveDualPackDom",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE DOM labels/columns distinct"
          },
          "422": {
            "description": "dual_pack_dom_assert_failed invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/on-failure/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE declarative on_failure subflow (GEN-D06 / FS-02)",
        "operationId": "genmfgOnFailureAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE on_failure subflow resolved"
          },
          "404": {
            "description": "on_failure_subflow_missing invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/catalog/workflow-ban/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE ban materra-*-workflow paths for catalog scenarios (GEN-D08)",
        "operationId": "genmfgCatalogWorkflowBanAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE catalog journey/Kestra only"
          },
          "422": {
            "description": "materra_workflow_path_forbidden invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/s2s/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE SPIFFE/mTLS or dual JWT BFF→bridge→Camel (GEN-A08)",
        "operationId": "genmfgS2sAssert",
        "responses": {
          "200": {
            "description": "S2S LIVE gate met or Soft Soft≠LIVE invent_refuse body"
          },
          "503": {
            "description": "genmfg_s2s_spiffe_incomplete invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/seed/load": {
      "post": {
        "summary": "Soft Soft≠LIVE prove seed load (GEN-P10)",
        "operationId": "genmfgProveSeedLoad",
        "responses": {
          "200": {
            "description": "seed_run_id Soft Soft≠LIVE unload_always"
          },
          "404": {
            "description": "prove_fixture_unknown invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/seed/unload": {
      "post": {
        "summary": "Soft Soft≠LIVE prove seed unload-always (GEN-P10)",
        "operationId": "genmfgProveSeedUnload",
        "responses": {
          "200": {
            "description": "Idempotent Soft Soft≠LIVE unload"
          },
          "400": {
            "description": "seed_run_id_required"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/seed/{seed_run_id}": {
      "get": {
        "summary": "Soft Soft≠LIVE prove seed status (GEN-P10)",
        "operationId": "genmfgProveSeedGet",
        "parameters": [
          {
            "name": "seed_run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE seed run status"
          },
          "404": {
            "description": "seed_run_not_found invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/nightly/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE nightly staging prove unload-always contract (GEN-P10)",
        "operationId": "genmfgProveNightlyAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE contract (staging invent_refuse or LIVE)"
          },
          "422": {
            "description": "unload_always_required invent_refuse"
          },
          "503": {
            "description": "staging LIVE unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/materra/embed/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Materra embed: ban Soft memory scenario fallback (GEN-M08)",
        "operationId": "genmfgMaterraEmbedAssert",
        "responses": {
          "200": {
            "description": "KV-bound embed Soft Soft≠LIVE"
          },
          "422": {
            "description": "materra_embed_memory_fallback_deprecated invent_refuse"
          },
          "503": {
            "description": "materra_embed_kv_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/entitlements/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE stale entitlement invent_refuse + reason codes (GEN-22)",
        "operationId": "genmfgEntitlementsAssert",
        "responses": {
          "200": {
            "description": "Fresh Soft Soft≠LIVE"
          },
          "402": {
            "description": "stale/deny/missing invent_refuse with reason_code"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/sourcing/readiness/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE solver+Kestra+entitlements readiness aggregate (GEN-S05)",
        "operationId": "genmfgSourcingReadinessAssert",
        "responses": {
          "200": {
            "description": "Aggregate LIVE gate met"
          },
          "503": {
            "description": "sourcing_readiness_aggregate_incomplete invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/journeys/kestra/bind": {
      "post": {
        "summary": "Soft Soft≠LIVE journey YAML → compileKestraScenarioFlowYaml bind (GEN-14a)",
        "operationId": "genmfgJourneysKestraBind",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE compile bind (deploy_live false)"
          },
          "503": {
            "description": "kestra_compile_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/materra/agri-stamp/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Materra stamps industry_pack=agriculture + org_id (GEN-M01)",
        "operationId": "genmfgMaterraAgriStampAssert",
        "responses": {
          "200": {
            "description": "Stamped Soft Soft≠LIVE"
          },
          "422": {
            "description": "non-agri Materra pack invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/from-sourcing-award/work-order": {
      "post": {
        "summary": "Soft Soft≠LIVE award→WO copies correlation + fill/route plan refs (GEN-S04)",
        "operationId": "genmfgFromSourcingAwardWorkOrder",
        "responses": {
          "200": {
            "description": "WO Soft Soft≠LIVE draft"
          },
          "422": {
            "description": "plan refs / correlation invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/hooks/solver-sourcing/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE solver:*/sourcing:* hooks → decision-gateway/sourcing-kv (GEN-S03/ES03)",
        "operationId": "genmfgHooksSolverSourcingAssert",
        "responses": {
          "200": {
            "description": "Hooks Soft Soft≠LIVE bound"
          },
          "422": {
            "description": "in-BFF OR-Tools / unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/from-multi-fill": {
      "post": {
        "summary": "Soft Soft≠LIVE multi_fill mango → GenMfg voyage (GEN-ES04)",
        "operationId": "genmfgFromMultiFill",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE voyage map"
          },
          "503": {
            "description": "voyage start invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/integration-entity/instance-id/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE integration_entity metadata.instance_id required (GEN-I04)",
        "operationId": "genmfgIntegrationEntityInstanceIdAssert",
        "responses": {
          "200": {
            "description": "instance_id stamped Soft Soft≠LIVE"
          },
          "422": {
            "description": "instance_id required invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/fleet/pack-hooks/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE pack fleet:* hooks over existing Fleet/Usafiri (GEN-F01)",
        "operationId": "genmfgFleetPackHooksAssert",
        "responses": {
          "200": {
            "description": "Pack hooks Soft Soft≠LIVE mapped"
          },
          "422": {
            "description": "bridge rebuild / unknown hook invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/authz/mutate/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE mutate APF + server org + entitlement G2 (GEN-A01)",
        "operationId": "genmfgAuthzMutateAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE mutate gates met"
          },
          "402": {
            "description": "entitlement invent_refuse"
          },
          "403": {
            "description": "APF/org invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/authz/rls/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE RLS on GenMfg list/get/SSE (GEN-A02)",
        "operationId": "genmfgAuthzRlsAssert",
        "responses": {
          "200": {
            "description": "RLS Soft Soft≠LIVE pass"
          },
          "403": {
            "description": "rls_denied invent_refuse"
          },
          "503": {
            "description": "rls_guard_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/hierarchy/no-access-above/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE list/hydrate/play no-access-above (GEN-H04)",
        "operationId": "genmfgHierarchyNoAccessAboveAssert",
        "responses": {
          "200": {
            "description": "leaf Soft Soft≠LIVE ok"
          },
          "403": {
            "description": "no_access_above invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/voyage-engine/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE shared materra-playbook-voyage engine (GEN-M02)",
        "operationId": "genmfgVoyageEngineAssert",
        "responses": {
          "200": {
            "description": "Shared engine Soft Soft≠LIVE"
          },
          "422": {
            "description": "parallel engine invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/voyage-engine/kestra-advance/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Kestra-only LIVE advance; Mayet ban (GEN-M10)",
        "operationId": "genmfgVoyageEngineKestraAdvanceAssert",
        "responses": {
          "200": {
            "description": "Kestra Soft Soft≠LIVE honesty"
          },
          "503": {
            "description": "mayet_live_advance_forbidden invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/hooks/kestra-registry/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Kestra closed-hook task registry (GEN-D01)",
        "operationId": "genmfgHooksKestraRegistryAssert",
        "responses": {
          "200": {
            "description": "Registry Soft Soft≠LIVE"
          },
          "422": {
            "description": "hook via missing invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/catalog/journey-map/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE map S-* catalog → seeded journeys/ (GEN-D05)",
        "operationId": "genmfgCatalogJourneyMapAssert",
        "responses": {
          "200": {
            "description": "S-* Soft Soft≠LIVE mapped"
          },
          "422": {
            "description": "catalog_journey_map_incomplete invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/secrets/camel/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE OpenBao + secrets check_access for Camel creds (GEN-A06)",
        "operationId": "genmfgSecretsCamelAssert",
        "responses": {
          "200": {
            "description": "check_access Soft Soft≠LIVE (no secret value)"
          },
          "403": {
            "description": "secrets_access_denied invent_refuse"
          },
          "503": {
            "description": "secrets_check_access_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/packs/publish": {
      "post": {
        "summary": "Product Soft Soft≠LIVE pack publish to LOOKUPS (GEN-UI-API-04); prefer declarative deploy-live",
        "operationId": "genmfgPacksPublish",
        "responses": {
          "200": {
            "description": "publish plan or Soft Soft≠LIVE put"
          },
          "403": {
            "description": "pack_admin_apf_denied"
          },
          "503": {
            "description": "pack_publish_kv_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/studio/author": {
      "post": {
        "summary": "Authoring Soft Soft≠LIVE Scenario Studio plan via declarative/Materra (GEN-UI-API-07)",
        "operationId": "genmfgStudioAuthor",
        "responses": {
          "200": {
            "description": "author plan Soft Soft≠LIVE"
          },
          "422": {
            "description": "browser_kv_forbidden / studio_api_not_declarative invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Authoring"
    },
    "/v1/genmfg/ops/kv-seed/status": {
      "get": {
        "summary": "Ops Soft Soft≠LIVE KV seed status (GEN-UI-API-10); prefer GET /v1/declarative/ops/kv-seed",
        "operationId": "genmfgOpsKvSeedStatus",
        "responses": {
          "200": {
            "description": "status Soft Soft≠LIVE invent_refuse_live"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/console/product-allowlist/assert": {
      "post": {
        "summary": "Prove Soft Soft≠LIVE GEN-UI-API-11 console LIVE invent_refuse until Product allowlist",
        "operationId": "genmfgConsoleProductAllowlistAssert",
        "responses": {
          "200": {
            "description": "allowlist Soft Soft≠LIVE ok; console_live false"
          },
          "422": {
            "description": "missing Product paths invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/forms/bind": {
      "post": {
        "summary": "Product Soft Soft≠LIVE forms.io bind from pack/step (GEN-UI-API-02)",
        "operationId": "genmfgFormsBind",
        "responses": {
          "200": {
            "description": "bind Soft Soft≠LIVE"
          },
          "400": {
            "description": "form_id_required"
          },
          "422": {
            "description": "forms_engine_rebuild_forbidden invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/notify/map": {
      "post": {
        "summary": "Product Soft Soft≠LIVE pack Novu map resolve (GEN-UI-API-03)",
        "operationId": "genmfgNotifyMap",
        "responses": {
          "200": {
            "description": "notify map Soft Soft≠LIVE"
          },
          "400": {
            "description": "novu_template_required"
          },
          "422": {
            "description": "novu_raw_subject_forbidden invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/inbox/hitl": {
      "post": {
        "summary": "Product Soft Soft≠LIVE inbox HITL / quality.fail cards (GEN-UI-API-06)",
        "operationId": "genmfgInboxHitl",
        "responses": {
          "200": {
            "description": "inbox HITL Soft Soft≠LIVE"
          },
          "422": {
            "description": "inbox_card_kind_unsupported invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/ui-api/path-classes/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-UI-API-01 path class + UI guide fence (Prove only)",
        "operationId": "genmfgUiApiPathClassesAssert",
        "responses": {
          "200": {
            "description": "OpenAPI stamps + §0.1 fence Soft Soft≠LIVE"
          },
          "422": {
            "description": "missing stamp / Product assert / doc fence invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/ui-shell/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Universal shell consumes ui-bundle (GEN-U04)",
        "operationId": "genmfgUiShellAssert",
        "responses": {
          "200": {
            "description": "library + voyage_player Soft Soft≠LIVE"
          },
          "422": {
            "description": "shell incomplete / agri fork invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/seed/orchestrator/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE prove seed thin orchestrator (GEN-P04)",
        "operationId": "genmfgProveSeedOrchestratorAssert",
        "responses": {
          "200": {
            "description": "thin orchestrator Soft Soft≠LIVE"
          },
          "422": {
            "description": "second_seeder_forbidden invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/voyage-itqo/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE I→T→Q→O façade voyage contract (GEN-P05)",
        "operationId": "genmfgProveVoyageItqoAssert",
        "responses": {
          "200": {
            "description": "I→T→Q→O Soft Soft≠LIVE"
          },
          "422": {
            "description": "incomplete / soft_leak invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/elemental-lifecycle/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE elemental lifecycle event stream (GEN-ELEM-07)",
        "operationId": "genmfgProveElementalLifecycleAssert",
        "responses": {
          "200": {
            "description": "Elemental lifecycle Soft Soft≠LIVE"
          },
          "422": {
            "description": "incomplete stream / invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/elemental/compile/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE elemental lifecycle compile (GEN-ELEM-02)",
        "operationId": "genmfgElementalCompileAssert",
        "responses": {
          "200": {
            "description": "Lifecycle compile Soft Soft≠LIVE"
          },
          "422": {
            "description": "unknown advance_gate / invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/elemental/advance-gate/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE advance_gate control injection (GEN-ELEM-04)",
        "operationId": "genmfgElementalAdvanceGateAssert",
        "responses": {
          "200": {
            "description": "Gate Soft Soft≠LIVE (DENY/pass/pending)"
          },
          "422": {
            "description": "invent_passed forbidden"
          },
          "503": {
            "description": "LIVE engines down invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/elemental/pack-policy/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE pack elemental_emit_policy (GEN-ELEM-05)",
        "operationId": "genmfgElementalPackPolicyAssert",
        "responses": {
          "200": {
            "description": "Pack policy Soft Soft≠LIVE"
          },
          "422": {
            "description": "policy missing / invalid"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/ui/elemental-phase/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE UI elemental phase from SSE events (GEN-ELEM-10 Prove)",
        "operationId": "genmfgUiElementalPhaseAssert",
        "responses": {
          "200": {
            "description": "Phase chrome Soft Soft≠LIVE"
          },
          "422": {
            "description": "invent / NATS / hardcode invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/voyages/{id}/elemental-phase": {
      "post": {
        "summary": "Project Player elemental phase from events (GEN-ELEM-10 Product Soft Soft≠LIVE)",
        "operationId": "genmfgVoyageElementalPhase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Phase chrome from events Soft Soft≠LIVE"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/elemental/kestra-bind/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE elemental lifecycle + Kestra bind annotate (GEN-ELEM-02)",
        "operationId": "genmfgElementalKestraBindAssert",
        "responses": {
          "200": {
            "description": "Elemental Kestra Soft Soft≠LIVE annotate"
          },
          "422": {
            "description": "compile invent_refuse"
          },
          "503": {
            "description": "kestra compile unbound"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/federation/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE federation dual-node prove (GEN-P08)",
        "operationId": "genmfgProveFederationAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE contract (LIVE invent_refuse)"
          },
          "503": {
            "description": "federation_live_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/shared-kestra-terminal/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE AG-01+MN-03 shared Kestra terminal (GEN-D04)",
        "operationId": "genmfgProveSharedKestraTerminalAssert",
        "responses": {
          "200": {
            "description": "Shared Kestra Soft Soft≠LIVE"
          },
          "422": {
            "description": "industry_bff_fsm_forbidden invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/compliance/unlock/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE compliance credential unlock for agri LIVE (GEN-M03)",
        "operationId": "genmfgComplianceUnlockAssert",
        "responses": {
          "200": {
            "description": "Unlocked Soft Soft≠LIVE"
          },
          "402": {
            "description": "credentials unlock unmet invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/resources/prefer/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE prefer resource APIs over exchange underlay (GEN-N14)",
        "operationId": "genmfgResourcesPreferAssert",
        "responses": {
          "200": {
            "description": "resource API Soft Soft≠LIVE / deprecated underlay noted"
          },
          "422": {
            "description": "exchange product caller invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/resources/mirror/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE resource mirror Soft Soft≠LIVE Map / LIVE s356 invent_refuse (GEN-R12)",
        "operationId": "genmfgResourcesMirrorAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE mirror honesty; live_gate_met false"
          },
          "422": {
            "description": "invent LIVE mirror forbidden"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/logistics/lifecycle/full/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE full normalized logistics lifecycle I/O (GEN-F02)",
        "operationId": "genmfgLogisticsLifecycleFullAssert",
        "responses": {
          "200": {
            "description": "Full Soft Soft≠LIVE lifecycle plan"
          },
          "422": {
            "description": "lifecycle invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/hitl/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE HITL multi-persona forms+advance (GEN-P13)",
        "operationId": "genmfgProveHitlAssert",
        "responses": {
          "200": {
            "description": "HITL Soft Soft≠LIVE compose ok"
          },
          "422": {
            "description": "personas/compose/DEV_SKIP_AUTH invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/packs/agri-default/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE agri pack default → journeys/agriculture/* (GEN-16)",
        "operationId": "genmfgPacksAgriDefaultAssert",
        "responses": {
          "200": {
            "description": "Agri default Soft Soft≠LIVE"
          },
          "422": {
            "description": "non-agri journey invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/quality/attest/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE quality→AaaS attestation compose (GEN-23)",
        "operationId": "genmfgQualityAttestAssert",
        "responses": {
          "200": {
            "description": "Attest compose Soft Soft≠LIVE"
          },
          "422": {
            "description": "quality/attest invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/credentials/unlock/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE required_credentials unlock (GEN-24)",
        "operationId": "genmfgCredentialsUnlockAssert",
        "responses": {
          "200": {
            "description": "Unlock Soft Soft≠LIVE"
          },
          "422": {
            "description": "credentials invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/seal/honesty/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE SEAL honesty Soft≠LIVE fence (GEN-25)",
        "operationId": "genmfgSealHonestyAssert",
        "responses": {
          "200": {
            "description": "Seal honesty Soft Soft≠LIVE"
          },
          "422": {
            "description": "soft_seal_as_live / incomplete invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/events/observe/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE prove observe via SSE/list only (GEN-P09)",
        "operationId": "genmfgProveEventsObserveAssert",
        "responses": {
          "200": {
            "description": "Observe Soft Soft≠LIVE"
          },
          "422": {
            "description": "NATS-in-harness invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/criteria/fan-in/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE logistics→platform.criteria.v1.* fan-in (GEN-N08)",
        "operationId": "genmfgCriteriaFanInAssert",
        "responses": {
          "200": {
            "description": "Criteria fan-in Soft Soft≠LIVE"
          },
          "422": {
            "description": "raw adapter / unsupported invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/events/sse-merge/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE SSE merge by correlation (GEN-S07)",
        "operationId": "genmfgEventsSseMergeAssert",
        "responses": {
          "200": {
            "description": "SSE merge Soft Soft≠LIVE"
          },
          "422": {
            "description": "raw subjects invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/dispatch/camel/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Camel fleet dispatch no new bridge (GEN-33)",
        "operationId": "genmfgDispatchCamelAssert",
        "responses": {
          "200": {
            "description": "Camel dispatch Soft Soft≠LIVE"
          },
          "422": {
            "description": "new bridge invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/erpnext/recipe/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE ERPNext Camel/s367 recipe (GEN-34)",
        "operationId": "genmfgErpnextRecipeAssert",
        "responses": {
          "200": {
            "description": "ERPNext Soft Soft≠LIVE"
          },
          "422": {
            "description": "direct ERP client invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/sourcing/multi-fill-fixture/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE multi_fill fixture reuse (GEN-S10)",
        "operationId": "genmfgSourcingMultiFillFixtureAssert",
        "responses": {
          "200": {
            "description": "multi_fill Soft Soft≠LIVE"
          },
          "422": {
            "description": "fork invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/secrets/instance/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE per-instance OpenBao path (GEN-I07)",
        "operationId": "genmfgSecretsInstanceAssert",
        "responses": {
          "200": {
            "description": "Instance secret Soft Soft≠LIVE"
          },
          "422": {
            "description": "secret invent invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/kestra/bindings/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Kestra voyage bindings (GEN-I08)",
        "operationId": "genmfgKestraBindingsAssert",
        "responses": {
          "200": {
            "description": "Kestra bindings Soft Soft≠LIVE"
          },
          "422": {
            "description": "missing instance_id invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/multi-org/step-owner/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE multi-org step owner bindings (GEN-I09)",
        "operationId": "genmfgMultiOrgStepOwnerAssert",
        "responses": {
          "200": {
            "description": "Step owner Soft Soft≠LIVE"
          },
          "422": {
            "description": "bindings missing invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/logistics/geofence-advance/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE geofence enter advances voyage (GEN-F03)",
        "operationId": "genmfgLogisticsGeofenceAdvanceAssert",
        "responses": {
          "200": {
            "description": "Geofence advance Soft Soft≠LIVE"
          },
          "422": {
            "description": "raw fleet invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/logistics/equipment-relocate/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE equipment relocate→logistics (GEN-F05)",
        "operationId": "genmfgLogisticsEquipmentRelocateAssert",
        "responses": {
          "200": {
            "description": "Relocate Soft Soft≠LIVE"
          },
          "400": {
            "description": "asset/org invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/hierarchy/conglomerate/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE conglomerate/franchise Soft fixtures (GEN-H08)",
        "operationId": "genmfgHierarchyConglomerateAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/hierarchy/chamber-cast/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE chamber cast metadata (GEN-H09)",
        "operationId": "genmfgHierarchyChamberCastAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/forms/bind/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE forms.io pack bind (GEN-U06)",
        "operationId": "genmfgFormsBindAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/novu/map/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Novu pack map (GEN-U07)",
        "operationId": "genmfgNovuMapAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/openapi-fragments/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE prove OpenAPI fragments link (GEN-P11)",
        "operationId": "genmfgProveOpenapiFragmentsAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/mn03/compose/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE MN-03 engine compose (GEN-X01c)",
        "operationId": "genmfgProveMn03ComposeAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/inbox/hitl/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE inbox HITL/quality cards (GEN-42)",
        "operationId": "genmfgInboxHitlAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/kuratibu/transform/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Kuratibu Transform mirror (GEN-43)",
        "operationId": "genmfgKuratibuTransformAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/openmaint/asset/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE OpenMaint asset steps (GEN-44)",
        "operationId": "genmfgOpenmaintAssetAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/materra/j3-default/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE J3 export/season agri default (GEN-M04)",
        "operationId": "genmfgMaterraJ3DefaultAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/materra/inbox-agri/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Materra inbox agri events (GEN-M05)",
        "operationId": "genmfgMaterraInboxAgriAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/provenance/passport/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE provenance→quality+seal (GEN-M07)",
        "operationId": "genmfgProvenancePassportAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/index/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GenMfg docs/UI index (GEN-01)",
        "operationId": "genmfgIndexAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/arch/no-bridge-bridge/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE ban bridge→bridge HTTP (GEN-02)",
        "operationId": "genmfgArchNoBridgeBridgeAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/ag05-event-path": {
      "post": {
        "summary": "Soft Soft≠LIVE AG-05 event-sourced path via API events only (GEN-ES09)",
        "operationId": "genmfgProveAg05EventPath",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE path complete (invent_refuse_live)"
          },
          "422": {
            "description": "incomplete / jetstream forbidden invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/packs/admin/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE pack:admin APF + hydrate honesty (GEN-U10)",
        "operationId": "genmfgPacksAdminAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE admin/hydrate ok"
          },
          "403": {
            "description": "pack_admin_apf_denied"
          },
          "422": {
            "description": "hydrate_live_leak invent_refuse"
          },
          "503": {
            "description": "pack_publish_kv_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/authz/matrix/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE agri 401/403/402/422 authz matrix (GEN-A09)",
        "operationId": "genmfgAuthzMatrixAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE matrix pass (invent_refuse_live)"
          },
          "422": {
            "description": "matrix fixture incomplete invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/sourcing/reentry": {
      "post": {
        "summary": "Soft Soft≠LIVE Transform labor/parts sourcing re-entry (GEN-S09)",
        "operationId": "genmfgSourcingReentry",
        "responses": {
          "200": {
            "description": "Mapped Soft requirement.create (denorm may invent_refuse)"
          },
          "422": {
            "description": "unknown hook / LIVE invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/from-standing-order-breach": {
      "post": {
        "summary": "Soft Soft≠LIVE standing-order breach → GenMfg Input (GEN-S08)",
        "operationId": "genmfgFromStandingOrderBreach",
        "responses": {
          "200": {
            "description": "Mapped Soft voyage_start"
          },
          "201": {
            "description": "Voyage started Soft Soft≠LIVE when play=true"
          },
          "422": {
            "description": "input_from / LIVE invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/criteria-wf/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE criteria match.fired / sla.breached WF bind (GEN-ES07)",
        "operationId": "genmfgCriteriaWfAssert",
        "responses": {
          "200": {
            "description": "Binding resolved Soft Soft≠LIVE (optional fire)"
          },
          "404": {
            "description": "criteria_wf_binding_missing"
          },
          "503": {
            "description": "criteria_wf_invoke_unbound invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/scenario-paths/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE scenario paths LG/FS/MX/FM/LB invent_refuse (GEN-X05/X06/X07)",
        "operationId": "genmfgScenarioPathsAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE path plan (invent_refuse_live)"
          },
          "400": {
            "description": "org_id_required"
          },
          "404": {
            "description": "scenario_path_unknown"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/logistics/exception": {
      "post": {
        "summary": "Raise Soft Soft≠LIVE logistics exception.raised → support invent_refuse (GEN-F04)",
        "operationId": "genmfgLogisticsException",
        "responses": {
          "200": {
            "description": "Platform exception envelope Soft Soft≠LIVE"
          },
          "400": {
            "description": "org_id_required"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/security/layers/assert": {
      "post": {
        "summary": "Per-engine L1–L12 invent_refuse LIVE if incomplete (GEN-A05 Soft Soft≠LIVE)",
        "operationId": "genmfgSecurityLayersAssert",
        "responses": {
          "200": {
            "description": "layers_live when GENMFG_SECURITY_LIVE + probes"
          },
          "503": {
            "description": "engine_security_layers_incomplete invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/envelopes/assert": {
      "post": {
        "summary": "Assert Camel/NATS envelope org_id + instance_id (GEN-I05 Soft Soft≠LIVE)",
        "operationId": "genmfgEnvelopesAssert",
        "responses": {
          "200": {
            "description": "Identity ok Soft Soft≠LIVE"
          },
          "422": {
            "description": "envelope_identity_incomplete"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/webhooks/assert": {
      "post": {
        "summary": "Assert webhook HMAC per instance_id Soft Soft≠LIVE (GEN-I06/A07)",
        "operationId": "genmfgWebhooksAssert",
        "responses": {
          "200": {
            "description": "Verified Soft Soft≠LIVE (inject secret)"
          },
          "401": {
            "description": "webhook_hmac_invalid / signature required"
          },
          "422": {
            "description": "engine_required / engine_hmac_not_required"
          },
          "503": {
            "description": "webhook_hmac_unbound / webhook_secret_unresolved invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/from-sourcing-award": {
      "post": {
        "summary": "Soft Soft≠LIVE sourcing award → GenMfg correlation (GEN-X04 / S-AG-05)",
        "operationId": "genmfgFromSourcingAward",
        "responses": {
          "200": {
            "description": "Mapped Soft voyage_start"
          },
          "201": {
            "description": "Voyage started Soft Soft≠LIVE when play=true"
          },
          "422": {
            "description": "correlation missing or LIVE OPTIMAL invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/standing-orders/field-dispatch": {
      "post": {
        "summary": "Standing-order field_dispatch → shipment.create Soft Soft≠LIVE (GEN-F06)",
        "operationId": "genmfgStandingOrderFieldDispatch",
        "responses": {
          "200": {
            "description": "Platform shipment.create Soft Soft≠LIVE"
          },
          "422": {
            "description": "instance_id / standing_order invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/resolve": {
      "get": {
        "summary": "Resolve instance for service (fail closed ambiguous/missing)",
        "operationId": "genmfgResolveBinding",
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "service",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "instance_id",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "org_path",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ancestry"
          }
        ],
        "responses": {
          "200": {
            "description": "Resolved binding"
          },
          "404": {
            "description": "binding_missing"
          },
          "422": {
            "description": "binding_ambiguous"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/events/stream": {
      "get": {
        "summary": "SSE stream (genmfg + logistics + criteria + sourcing subjects)",
        "operationId": "genmfgEventsStream",
        "responses": {
          "200": {
            "description": "text/event-stream"
          },
          "503": {
            "description": "nats_unavailable invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/exchange/domains": {
      "get": {
        "summary": "List substitutable exchange domains",
        "operationId": "exchangeDomains",
        "responses": {
          "200": {
            "description": "Domain list"
          }
        }
      },
      "x-genmfg-path-class": "Internal"
    },
    "/v1/exchange/normalize": {
      "post": {
        "summary": "Normalize any domain event to platform.<domain>.v1.event.*",
        "operationId": "exchangeNormalize",
        "responses": {
          "200": {
            "description": "Envelope"
          },
          "422": {
            "description": "Fail closed"
          }
        }
      },
      "x-genmfg-path-class": "Internal"
    },
    "/v1/exchange/denormalize": {
      "post": {
        "summary": "Denormalize platform command to adapter subject",
        "operationId": "exchangeDenormalize",
        "responses": {
          "200": {
            "description": "Adapter subject"
          },
          "422": {
            "description": "Fail closed"
          }
        }
      },
      "x-genmfg-path-class": "Internal"
    },
    "/v1/genmfg/readiness": {
      "get": {
        "summary": "Aggregate Soft Soft≠LIVE readiness",
        "operationId": "genmfgReadiness",
        "responses": {
          "200": {
            "description": "Always invent_refuse_live; flink/criteria/solver/kestra/security/normalize probes; farmos_live=false"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/live-gates/assert": {
      "post": {
        "summary": "Assert pack Flink Job A / domain normalize LIVE gates (GEN-ES06/W06)",
        "operationId": "genmfgLiveGatesAssert",
        "responses": {
          "200": {
            "description": "Gates ok Soft Soft≠LIVE (live_gate_met still false aggregate)"
          },
          "422": {
            "description": "domain_catalog_missing"
          },
          "503": {
            "description": "flink_job_a_required / normalize_path_incomplete invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/catalog/hooks": {
      "get": {
        "summary": "Closed workflow hook vocabulary",
        "operationId": "genmfgCatalogHooks",
        "responses": {
          "200": {
            "description": "lookup.genmfg.workflow_hooks.v1"
          },
          "503": {
            "description": "workflow_hooks_missing"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/catalog/events": {
      "get": {
        "summary": "Subsystem event catalog",
        "operationId": "genmfgCatalogEvents",
        "responses": {
          "200": {
            "description": "lookup.genmfg.subsystem_event_catalog.v1"
          },
          "503": {
            "description": "event_catalog_missing"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/hooks/validate": {
      "post": {
        "summary": "Validate journey/hooks against closed vocabulary (GEN-D02/W10)",
        "operationId": "genmfgHooksValidate",
        "responses": {
          "200": {
            "description": "Hooks ok"
          },
          "422": {
            "description": "unknown_hook / adapter_payload_forbidden"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}/seal": {
      "post": {
        "summary": "Seal voyage Soft Soft≠LIVE; invent_refuse incomplete certify_eval_set (GEN-D07)",
        "operationId": "genmfgSealVoyage",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "industry_pack"
                ],
                "properties": {
                  "industry_pack": {
                    "type": "string"
                  },
                  "completed_eval_set": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Sealed Soft Soft≠LIVE"
          },
          "422": {
            "description": "certify_eval_set_incomplete"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/packs": {
      "get": {
        "summary": "List pack.genmfg.* from SOVEREIGN_LOOKUPS",
        "operationId": "genmfgListPacks",
        "responses": {
          "200": {
            "description": "Pack index"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/packs/{industry}": {
      "get": {
        "summary": "Get industry pack (supports mining.gold)",
        "operationId": "genmfgGetPack",
        "parameters": [
          {
            "name": "industry",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Pack document"
          },
          "404": {
            "description": "pack_not_found invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/scenarios": {
      "get": {
        "summary": "List GenMfg Soft Soft≠LIVE scenario catalog (GEN-X01)",
        "operationId": "genmfgListScenarios",
        "responses": {
          "200": {
            "description": "Scenario index"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/scenarios/{id}": {
      "get": {
        "summary": "Get scenario by catalog id (S-MN-03) or scenario_key",
        "operationId": "genmfgGetScenario",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Scenario document"
          },
          "404": {
            "description": "scenario_not_found invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/ui-bundle": {
      "get": {
        "summary": "Compose data-driven UI shell from pack",
        "operationId": "genmfgUiBundle",
        "parameters": [
          {
            "name": "industry",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "agriculture"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "views + shell + integrations"
          },
          "404": {
            "description": "pack_not_found"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages": {
      "get": {
        "summary": "List voyages (empty Soft honesty without listVoyages inject)",
        "operationId": "genmfgListVoyages",
        "responses": {
          "200": {
            "description": "Voyage list"
          }
        }
      },
      "post": {
        "summary": "Start voyage via playPlaybookVoyage",
        "operationId": "genmfgStartVoyage",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "journey_id"
                ],
                "properties": {
                  "journey_id": {
                    "type": "string"
                  },
                  "industry_pack": {
                    "type": "string"
                  },
                  "org_id": {
                    "type": "string"
                  },
                  "org_path": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "integration_bindings": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Voyage started Soft Soft≠LIVE"
          },
          "400": {
            "description": "Missing journey_id / org_id"
          },
          "503": {
            "description": "Kestra/Camel invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}": {
      "get": {
        "summary": "Get voyage state",
        "operationId": "genmfgGetVoyage",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Voyage"
          },
          "404": {
            "description": "Not found"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}/advance": {
      "post": {
        "summary": "Advance voyage (Kestra only — no Surreal Mayet LIVE)",
        "operationId": "genmfgAdvanceVoyage",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Advanced"
          },
          "503": {
            "description": "invent_refuse when Kestra down"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/adapters": {
      "get": {
        "summary": "List adapter registry entries (GEN-N05 Soft Soft≠LIVE)",
        "operationId": "genmfgListAdapters",
        "parameters": [
          {
            "name": "service",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_soft",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Adapters from lookup.genmfg.adapter_registry.v1"
          },
          "503": {
            "description": "registry_missing invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/adapters/assert": {
      "post": {
        "summary": "Assert capabilities / multi_adapter_exchange / substitute (GEN-N09/N13)",
        "operationId": "genmfgAssertAdapters",
        "responses": {
          "200": {
            "description": "Asserted Soft Soft≠LIVE"
          },
          "404": {
            "description": "adapter_not_registered"
          },
          "422": {
            "description": "missing_capability"
          },
          "503": {
            "description": "multi_adapter_exchange invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/voyages/{id}/invoke": {
      "post": {
        "summary": "action:invoke via workflow-subject-invoke; requires idempotency_key (GEN-W02/W05)",
        "operationId": "genmfgInvoke",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject",
                  "idempotency_key"
                ],
                "properties": {
                  "subject": {
                    "type": "string"
                  },
                  "idempotency_key": {
                    "type": "string"
                  },
                  "payload": {
                    "type": "object"
                  },
                  "require_capability": {
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "adapter": {
                    "type": "string"
                  },
                  "service": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Invoked or Soft Soft≠LIVE deduped"
          },
          "422": {
            "description": "idempotency_key_required / missing_capability"
          },
          "503": {
            "description": "invoke_failed invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}/quality": {
      "post": {
        "summary": "Delegate compliance gate evaluate",
        "operationId": "genmfgQuality",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "compliance_gate_id"
                ],
                "properties": {
                  "compliance_gate_id": {
                    "type": "string"
                  },
                  "evidence": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Eval result"
          },
          "400": {
            "description": "gate id required"
          },
          "502": {
            "description": "compliance unavailable invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}/optimize": {
      "post": {
        "summary": "Pack solver → decision-gateway (fail closed)",
        "operationId": "genmfgOptimize",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "capability_key"
                ],
                "properties": {
                  "capability_key": {
                    "type": "string"
                  },
                  "industry_pack": {
                    "type": "string"
                  },
                  "overrides": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "decision-result-v1 wrapped Soft Soft≠LIVE"
          },
          "503": {
            "description": "Never invent OPTIMAL"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}/dispatch": {
      "post": {
        "summary": "Map platform.logistics.v1.command.* (denormalize)",
        "operationId": "genmfgDispatch",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mapped command"
          },
          "400": {
            "description": "org_id + instance_id required"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/from-quote/{quoteId}": {
      "post": {
        "summary": "Alias sourcing sign-convert",
        "operationId": "genmfgFromQuote",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Work order"
          },
          "502": {
            "description": "Upstream fail"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/logistics/normalize": {
      "post": {
        "summary": "Normalize logistics event → platform.logistics.v1.event.*",
        "operationId": "logisticsNormalize",
        "responses": {
          "200": {
            "description": "Envelope + subject"
          },
          "422": {
            "description": "Fail closed missing org_id/instance_id/correlation_id"
          }
        }
      },
      "x-genmfg-path-class": "Internal"
    },
    "/v1/logistics/normalize/publish": {
      "post": {
        "summary": "LIVE publish normalized logistics (LOGISTICS_NORMALIZE_LIVE=1)",
        "operationId": "logisticsNormalizePublish",
        "responses": {
          "200": {
            "description": "Published"
          },
          "503": {
            "description": "live_gate_unmet invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Internal"
    },
    "/v1/logistics/denormalize": {
      "post": {
        "summary": "Denormalize platform command → fleet.v1.command.*",
        "operationId": "logisticsDenormalize",
        "responses": {
          "200": {
            "description": "Adapter subject + payload"
          },
          "422": {
            "description": "Fail closed"
          }
        }
      },
      "x-genmfg-path-class": "Internal"
    },
    "/v1/logistics/denormalize/publish": {
      "post": {
        "summary": "LIVE publish denormalized command",
        "operationId": "logisticsDenormalizePublish",
        "responses": {
          "200": {
            "description": "Published"
          },
          "503": {
            "description": "live_gate_unmet invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Internal"
    },
    "/v1/genmfg/domains": {
      "get": {
        "summary": "List schema-first GenMfg domains",
        "operationId": "genmfgListDomains",
        "responses": {
          "200": {
            "description": "Domain list Soft Soft≠LIVE"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/domains/{domain}": {
      "get": {
        "summary": "Domain catalog (resources, operations, schema_id)",
        "operationId": "genmfgGetDomain",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Catalog"
          },
          "404": {
            "description": "domain_unknown"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/domains/{domain}/resources/{resourceType}": {
      "get": {
        "summary": "List domain resources (mirror)",
        "operationId": "genmfgListResources",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Resource list Soft Soft≠LIVE"
          }
        }
      },
      "post": {
        "summary": "Create/ensure/upsert domain resource (denorm Soft Soft≠LIVE)",
        "operationId": "genmfgWriteResource",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mapped resource"
          },
          "422": {
            "description": "Schema / vendor keys / command"
          },
          "503": {
            "description": "LIVE publish invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/domains/{domain}/resources/{resourceType}/{id}": {
      "get": {
        "summary": "Get domain resource by id",
        "operationId": "genmfgGetResource",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Resource"
          },
          "404": {
            "description": "Not found"
          }
        }
      },
      "patch": {
        "summary": "Patch domain resource",
        "operationId": "genmfgPatchResource",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mapped"
          },
          "422": {
            "description": "Fail closed"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/domains/{domain}/resources/{resourceType}/{id}/actions/{action}": {
      "post": {
        "summary": "Domain resource lifecycle action",
        "operationId": "genmfgResourceAction",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "action",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mapped"
          },
          "422": {
            "description": "action_unknown"
          },
          "503": {
            "description": "LIVE invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/domains/{domain}/events/ingest": {
      "post": {
        "summary": "Ingress normalize + resource projection",
        "operationId": "genmfgDomainIngest",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Envelope + resource"
          },
          "503": {
            "description": "LIVE invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/domains/{domain}/events": {
      "get": {
        "summary": "List recent domain events (Soft Soft≠LIVE peek)",
        "operationId": "genmfgDomainEvents",
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Events Soft Soft≠LIVE"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/workspaces/{orgId}": {
      "get": {
        "summary": "Get org GenMfg workspace config",
        "operationId": "genmfgGetWorkspace",
        "parameters": [
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace"
          },
          "404": {
            "description": "Not found"
          }
        }
      },
      "put": {
        "summary": "Upsert org GenMfg workspace (pack + domain binds)",
        "operationId": "genmfgPutWorkspace",
        "parameters": [
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Saved Soft Soft≠LIVE"
          },
          "503": {
            "description": "KV put invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/workspaces/{orgId}/bindings": {
      "get": {
        "summary": "List workspace domain bindings",
        "operationId": "genmfgListWorkspaceBindings",
        "parameters": [
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Bindings"
          }
        }
      },
      "post": {
        "summary": "Upsert sticky domain→instance bind",
        "operationId": "genmfgUpsertWorkspaceBinding",
        "parameters": [
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Binding"
          },
          "422": {
            "description": "domain_unknown"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/workspaces/{orgId}/bindings/{domain}": {
      "delete": {
        "summary": "Soft-deactivate workspace domain bind",
        "operationId": "genmfgDeleteWorkspaceBinding",
        "parameters": [
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Deactivated"
          },
          "404": {
            "description": "Not found"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}": {
      "post": {
        "summary": "Voyage-scoped resource write",
        "operationId": "genmfgVoyageWriteResource",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mapped"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/voyages/{id}/resources/{domain}/{resourceType}/{resourceId}/actions/{action}": {
      "post": {
        "summary": "Voyage-scoped resource action",
        "operationId": "genmfgVoyageResourceAction",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "action",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mapped"
          }
        }
      },
      "x-genmfg-path-class": "Product"
    },
    "/v1/genmfg/ops/agri-cutover/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-50 agri cutover",
        "operationId": "genmfgv1GenmfgOpsAgricutoverAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/ops/cutover-progress/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE cutover progress desk (TCP green ≠ LIVE)",
        "operationId": "genmfgOpsCutoverProgressAssert",
        "responses": {
          "200": {
            "description": "Progress Soft Soft≠LIVE; live_gate_met false"
          },
          "422": {
            "description": "invent LIVE forbidden"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/ops/live-readiness/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE LIVE ops readiness inventory (never invents live_gate_met)",
        "operationId": "genmfgv1GenmfgOpsLivereadinessAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE inventory — invent_refuse_live"
          },
          "422": {
            "description": "invent_refuse when LIVE invented"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/ops/kv-seed/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GenMfg KV seed inventory (never invents nats_kv_seeded)",
        "operationId": "genmfgv1GenmfgOpsKvseedAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE disk key inventory"
          },
          "422": {
            "description": "invent_refuse when seeded LIVE invented"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/ops/engine-probes/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE engine TCP/probe honesty (never invents live_gate_met)",
        "operationId": "genmfgv1GenmfgOpsEngineprobesAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE probe desk — DOWN is honest"
          },
          "422": {
            "description": "invent_refuse when LIVE invented or opt-in while DOWN"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/ops/stack-preflight/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE Docker/stack preflight (never invents stack_live)",
        "operationId": "genmfgv1GenmfgOpsStackpreflightAssert",
        "responses": {
          "200": {
            "description": "Soft Soft≠LIVE preflight — daemon DOWN is honest"
          },
          "422": {
            "description": "invent_refuse when stack LIVE invented"
          }
        }
      },
      "x-genmfg-path-class": "Ops"
    },
    "/v1/genmfg/console/mfg-bind/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-51 console MFG bind",
        "operationId": "genmfgv1GenmfgConsoleMfgbindAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/playwright-smoke/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-54 playwright soft smoke",
        "operationId": "genmfgv1GenmfgProvePlaywrightsmokeAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/collections/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-P12 OpenAPI collections",
        "operationId": "genmfgv1GenmfgProveCollectionsAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/sourcing/offtake-reentry/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-S12 offtake reentry",
        "operationId": "genmfgv1GenmfgSourcingOfftakereentryAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/logistics/wms-pallet/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-F07 WMS pallet",
        "operationId": "genmfgv1GenmfgLogisticsWmspalletAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/criteria/job-b-interrupt/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-ES10 Job B SLA",
        "operationId": "genmfgv1GenmfgCriteriaJobbinterruptAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/scenarios/hl01/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-X08 HL-01 medical",
        "operationId": "genmfgv1GenmfgScenariosHl01Assert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/prove/traceability/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-X09 traceability",
        "operationId": "genmfgv1GenmfgProveTraceabilityAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/whatif/overlay/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-35 what-if",
        "operationId": "genmfgv1GenmfgWhatifOverlayAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/standing-orders/wo-spawn/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-53 SO WO spawn",
        "operationId": "genmfgv1GenmfgStandingordersWospawnAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/events/ws-multiplexer/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-45 WS mux",
        "operationId": "genmfgv1GenmfgEventsWsmultiplexerAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/bindings/erp-plane/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-I11 ERP Plane",
        "operationId": "genmfgv1GenmfgBindingsErpplaneAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/hierarchy/drilldown/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-H10 drilldown",
        "operationId": "genmfgv1GenmfgHierarchyDrilldownAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/bi/superset-embed/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-A11 Superset",
        "operationId": "genmfgv1GenmfgBiSupersetembedAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/ui/minio-signed/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-U11 MinIO",
        "operationId": "genmfgv1GenmfgUiMiniosignedAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/ui/composable-facet/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-U12 facet",
        "operationId": "genmfgv1GenmfgUiComposablefacetAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/studio/author/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-W12 studio author",
        "operationId": "genmfgv1GenmfgStudioAuthorAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    },
    "/v1/genmfg/packs/healthcare-fleet/assert": {
      "post": {
        "summary": "Soft Soft≠LIVE GEN-52 healthcare/fleet packs",
        "operationId": "genmfgv1GenmfgPacksHealthcarefleetAssert",
        "responses": {
          "200": {
            "description": "ok"
          },
          "422": {
            "description": "invent_refuse"
          }
        }
      },
      "x-genmfg-path-class": "Prove"
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "parameters": {
      "XOrgId": {
        "name": "X-Org-Id",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string"
        }
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ]
}