From 86d1f286bff78c34cb121a2b17b7452312dff78a Mon Sep 17 00:00:00 2001
From: Adam Souzis <adam@souzis.com>
Date: Mon, 13 Feb 2023 13:38:18 -0800
Subject: [PATCH] Revert "Consolidate webpack aliases/imports, add error
 reporting store and component"

This reverts commit d2be065238fb7bd1f403c0d0ca01bebdf83b3c0a.
---
 .../components/cells/application-cell.vue     |   2 +-
 .../deployment-controls/control-buttons.vue   |   2 +-
 .../components/cells/environment-cell.vue     |   2 +-
 .../components/cells/environment-status.vue   |   2 +-
 .../components/cells/resource-cell.vue        |   4 +-
 .../cells/shared/deployment-status-icon.vue   |   2 +-
 .../components/create-environment-modal.vue   |   2 +-
 .../components/share-resource-toggle.vue      |   4 +-
 .../tables/deployment-index-table.vue         |  19 +-
 .../tables/environment-index-table.vue        |   2 +-
 packages/oc-pages/dashboard/dashboard.vue     |  29 ++-
 packages/oc-pages/dashboard/index.js          |  15 +-
 .../oc-pages/dashboard/pages/deployment.vue   |  22 ++-
 .../oc-pages/dashboard/pages/environment.vue  |  11 +-
 packages/oc-pages/dashboard/pages/home.vue    |   2 +-
 packages/oc-pages/dashboard/router/index.js   |   4 +-
 packages/oc-pages/dashboard/store/index.js    |   8 +-
 .../store/modules/deployment-info.js          |  33 ++--
 .../deployment-info/deployment-item.js        |   2 +-
 .../dashboard/store/modules/table_data.js     |  25 +--
 .../components/deployed-blueprints.vue        |   2 +-
 .../environment-creation-dialog.vue           |  12 +-
 .../project_overview/components/main.vue      |   9 +-
 .../components/open-cloud-deployments.vue     |   6 +-
 .../components/project_description.vue        |   2 +-
 .../components/shared/dependency.vue          |   4 +-
 .../components/shared/logos_cloud.vue         |   2 +-
 .../components/shared/oc_card.vue             |   8 +-
 .../components/shared/oc_inputs.vue           |   4 +-
 .../GithubMirroredRepoImageSource.vue         |  20 ++-
 .../shared/oc_inputs/LocalImageRepoSource.vue |   4 +-
 .../shared/oc_inputs/UnfurlCNamedDNSZone.vue  |   8 +-
 .../UnfurlCloudMirroredRepoImageSource.vue    |   4 +-
 .../components/shared/oc_inputs/mixins.js     |   4 +-
 .../components/shared/oc_list.vue             |  18 +-
 .../components/shared/oc_list_resource.vue    |   2 +-
 .../shared/oc_list_resource/icon.vue          |   2 +-
 .../components/shared/oc_template_header.vue  |   6 +-
 .../components/template/deploy_button.vue     |   2 +-
 .../components/your-deployments.vue           |   2 +-
 packages/oc-pages/project_overview/index.js   |   4 +-
 .../project_overview/pages/projects/index.vue |  19 +-
 .../pages/templates/index.vue                 | 168 +++++++++---------
 .../oc-pages/project_overview/router/index.js |   6 +-
 .../project_overview/router/routes.js         |   2 +-
 .../oc-pages/project_overview/store/index.js  |   6 +-
 .../modules/deployment_template_updates.js    |  55 ++----
 .../store/modules/deployments.js              |  10 +-
 .../store/modules/environments.js             |  89 +++-------
 .../project_overview/store/modules/misc.js    |  36 ++--
 .../project_overview/store/modules/project.js |   2 +-
 .../modules/project_application_blueprint.js  |  38 +---
 .../store/modules/template_resources.js       |   4 +-
 .../vue_shared/client_utils/environments.js   |  50 +-----
 .../vue_shared/client_utils/unfurl-server.js  |   1 +
 .../vue_shared/components/console-wrapper.vue |   2 +-
 .../vue_shared/components/notes-wrapper.vue   |   6 +-
 .../components/oc/deployment-resources.vue    |   4 +-
 .../components/oc/deployment-scheduler.vue    |   2 +-
 .../components/oc/environment-selection.vue   |   4 +-
 .../oc/experimental-settings-indicator.vue    |  41 +----
 .../vue_shared/components/oc/import-link.vue  |   2 +-
 .../vue_shared/components/oc/index.js         |  40 -----
 .../vue_shared/components/oc/local-deploy.vue |   6 +-
 .../components/oc/oc-properties-list.vue      |  21 +--
 .../vue_shared/components/oc/plugin.js        |  45 -----
 .../components/oc/table_list_row.vue          |   2 +-
 .../vue_shared/components/oc/ufgui-errors.vue |  79 --------
 packages/oc-pages/vue_shared/oc-components.js |  37 ++++
 packages/oc-pages/vue_shared/storage-keys.js  |  21 +--
 .../vue_shared/store_modules/errors.js        |  45 -----
 71 files changed, 385 insertions(+), 775 deletions(-)
 delete mode 100644 packages/oc-pages/vue_shared/components/oc/index.js
 delete mode 100644 packages/oc-pages/vue_shared/components/oc/plugin.js
 delete mode 100644 packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue
 create mode 100644 packages/oc-pages/vue_shared/oc-components.js
 delete mode 100644 packages/oc-pages/vue_shared/store_modules/errors.js

diff --git a/packages/oc-pages/dashboard/components/cells/application-cell.vue b/packages/oc-pages/dashboard/components/cells/application-cell.vue
index ffcda65c..63e36e30 100644
--- a/packages/oc-pages/dashboard/components/cells/application-cell.vue
+++ b/packages/oc-pages/dashboard/components/cells/application-cell.vue
@@ -1,6 +1,6 @@
 <script>
 import * as routes from '../../router/constants'
-import ProjectIcon from 'oc/vue_shared/components/oc/project-icon.vue'
+import ProjectIcon from 'oc_vue_shared/components/oc/project-icon.vue'
 export default {
     components: { ProjectIcon },
     props: {
diff --git a/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue b/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue
index 54627acd..14095974 100644
--- a/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue
+++ b/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue
@@ -1,6 +1,6 @@
 <script>
 import {GlIcon, GlButton, GlDropdown, GlDropdownItem} from '@gitlab/ui'
-import {generateGitLabIssueSync} from 'oc/vue_shared/client_utils/gitlab-issues'
+import {generateGitLabIssueSync} from 'oc_vue_shared/client_utils/gitlab-issues'
 import OpenLiveApp from './open-live-app.vue'
 export default {
     props: {
diff --git a/packages/oc-pages/dashboard/components/cells/environment-cell.vue b/packages/oc-pages/dashboard/components/cells/environment-cell.vue
index 62c13057..1ca68c70 100644
--- a/packages/oc-pages/dashboard/components/cells/environment-cell.vue
+++ b/packages/oc-pages/dashboard/components/cells/environment-cell.vue
@@ -1,7 +1,7 @@
 <script>
 import * as routes from '../../router/constants'
 import {mapGetters} from 'vuex'
-import {DetectIcon} from 'oc/vue_shared/components/oc'
+import {DetectIcon} from 'oc_vue_shared/oc-components'
 export default {
     components: { DetectIcon },
     props: {
diff --git a/packages/oc-pages/dashboard/components/cells/environment-status.vue b/packages/oc-pages/dashboard/components/cells/environment-status.vue
index ee375359..9df1606e 100644
--- a/packages/oc-pages/dashboard/components/cells/environment-status.vue
+++ b/packages/oc-pages/dashboard/components/cells/environment-status.vue
@@ -1,5 +1,5 @@
 <script>
-import StatusIcon from 'oc/vue_shared/components/oc/Status.vue'
+import StatusIcon from 'oc_vue_shared/components/oc/Status.vue'
 
 export default {
     name: 'EnvironmentStatus',
diff --git a/packages/oc-pages/dashboard/components/cells/resource-cell.vue b/packages/oc-pages/dashboard/components/cells/resource-cell.vue
index c83b778a..a7527b51 100644
--- a/packages/oc-pages/dashboard/components/cells/resource-cell.vue
+++ b/packages/oc-pages/dashboard/components/cells/resource-cell.vue
@@ -1,8 +1,8 @@
 <script>
 import {mapGetters} from 'vuex'
 import * as routes from '../../router/constants'
-import StatusIcon from 'oc/vue_shared/components/oc/Status.vue';
-import {generateCardId} from 'oc/vue_shared/util.mjs'
+import StatusIcon from 'oc_vue_shared/components/oc/Status.vue';
+import {generateCardId} from 'oc_vue_shared/util.mjs'
 import DashboardRouterLink from "../../components/dashboard-router-link.vue"
 
 export default {
diff --git a/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue b/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue
index 11aebf4d..b1d15c55 100644
--- a/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue
+++ b/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue
@@ -1,5 +1,5 @@
 <script>
-import StatusIcon from 'oc/vue_shared/components/oc/Status.vue'
+import StatusIcon from 'oc_vue_shared/components/oc/Status.vue'
 import {GlIcon, GlButton, GlTooltipDirective} from '@gitlab/ui'
 import _ from 'lodash'
 import {mapGetters} from 'vuex'
diff --git a/packages/oc-pages/dashboard/components/create-environment-modal.vue b/packages/oc-pages/dashboard/components/create-environment-modal.vue
index 37f97e8b..0ce1553f 100644
--- a/packages/oc-pages/dashboard/components/create-environment-modal.vue
+++ b/packages/oc-pages/dashboard/components/create-environment-modal.vue
@@ -2,7 +2,7 @@
 import {mapGetters} from 'vuex'
 import EnvironmentCreationDialog from '../../project_overview/components/environment-creation-dialog.vue'
 import {GlModal} from '@gitlab/ui'
-import {slugify, USER_HOME_PROJECT} from 'oc/vue_shared/util.mjs'
+import {slugify, USER_HOME_PROJECT} from 'oc_vue_shared/util.mjs'
 import {__} from '~/locale'
 export default {
     name: 'CreateEnvironmentModal',
diff --git a/packages/oc-pages/dashboard/components/share-resource-toggle.vue b/packages/oc-pages/dashboard/components/share-resource-toggle.vue
index f65a40cf..5fe04cc3 100644
--- a/packages/oc-pages/dashboard/components/share-resource-toggle.vue
+++ b/packages/oc-pages/dashboard/components/share-resource-toggle.vue
@@ -1,7 +1,7 @@
 <script>
 import {mapGetters, mapActions} from 'vuex'
-import {DetectIcon} from 'oc/vue_shared/components/oc'
-import {generateGitLabIssueSync} from 'oc/vue_shared/client_utils/gitlab-issues'
+import {DetectIcon} from 'oc_vue_shared/oc-components'
+import {generateGitLabIssueSync} from 'oc_vue_shared/client_utils/gitlab-issues'
 import {GlDropdown, GlDropdownItem, GlDropdownDivider} from '@gitlab/ui'
 export default {
     props: {
diff --git a/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue b/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue
index 7b5926d6..c14de34e 100644
--- a/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue
+++ b/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue
@@ -1,14 +1,14 @@
 <script>
-import TableComponent from 'oc/vue_shared/components/oc/table.vue'
-import {OcTab, EnvironmentSelection, LocalDeploy} from 'oc/vue_shared/components/oc'
+import TableComponent from 'oc_vue_shared/components/oc/table.vue'
+import {OcTab, EnvironmentSelection, LocalDeploy} from 'oc_vue_shared/oc-components'
 import EnvironmentCell from '../cells/environment-cell.vue'
 import ResourceCell from '../cells/resource-cell.vue'
 import DeploymentControls from '../cells/deployment-controls.vue'
 import DeploymentStatusIcon from '../cells/shared/deployment-status-icon.vue'
 import LastDeploy from './deployment-index-table/last-deploy.vue'
 import {GlTabs, GlModal, GlFormInput, GlFormGroup} from '@gitlab/ui'
-import {mapGetters, mapActions, mapMutations} from 'vuex'
-import {triggerIncrementalDeployment} from 'oc/vue_shared/client_utils/pipelines'
+import {mapGetters, mapActions} from 'vuex'
+import {triggerIncrementalDeployment} from 'oc_vue_shared/client_utils/pipelines'
 import _ from 'lodash'
 import * as routes from '../../router/constants'
 import DashboardRouterLink from "../../components/dashboard-router-link.vue"
@@ -19,7 +19,7 @@ function deploymentGroupBy(item) {
     let result 
     try{
         result = `${item.deployment.name}:${item.application.name}:${item.environment.name}`
-    } catch(e) { return }
+    } catch(e) {return }
     return result
 }
 
@@ -152,10 +152,8 @@ export default {
             'cloneDeployment',
             'addUrlPoll',
         ]),
-        ...mapMutations(['createError']),
         async deploy() {
             await this.deployInto(this.deploymentParameters)
-            if(this.hasCriticalErrors) return
             const {deployment, environment} = this.target
             window.location.href = this.$router.resolve({
                 name: routes.OC_DASHBOARD_DEPLOYMENTS, 
@@ -170,7 +168,6 @@ export default {
         },
         async undeploy() {
             await this.undeployFrom(this.deploymentParameters)
-            if(this.hasCriticalErrors) return
             const {deployment, environment} = this.target
             window.location.href = this.$router.resolve({
                 name: routes.OC_DASHBOARD_DEPLOYMENTS, 
@@ -240,7 +237,6 @@ export default {
                         newDeploymentTitle: this.newDeploymentTitle,
                         targetEnvironment,
                     })
-                    if(this.hasCriticalErrors) return
                     const redirectLocation = `/${this.getHomeProjectPath}/-/deployments/${this.cloneTargetEnvironment?.name}/${clonedDeploymentName}`
                     window.location.href = redirectLocation
                     return
@@ -345,8 +341,7 @@ export default {
             'getDeploymentTemplate',
             'deploymentItemDirect',
             'deleteDeploymentPreventedBy',
-            'undeployPreventedBy',
-            'hasCriticalErrors'
+            'undeployPreventedBy'
         ]),
         intentToDeletePreventedBy() {
             if(this.intent != 'delete') return []
@@ -461,7 +456,7 @@ export default {
                 for(const item of this.itemsSorted) {
                     const deploymentItem = this.deploymentItem({item})
                     if(!deploymentItem) {
-                        this.createError({message: `Deployment item not found for ${item?.deployment?.name}`, context: item, severity: 'major', issue: 'Unfurl GUI should not be considering these valid deployments'})
+                        console.error('deployment item not found for', item)
                         continue
                     }
                     if(!tab.filter || tab.filter(deploymentItem)) {
diff --git a/packages/oc-pages/dashboard/components/tables/environment-index-table.vue b/packages/oc-pages/dashboard/components/tables/environment-index-table.vue
index 610292fc..c758f4cb 100644
--- a/packages/oc-pages/dashboard/components/tables/environment-index-table.vue
+++ b/packages/oc-pages/dashboard/components/tables/environment-index-table.vue
@@ -1,5 +1,5 @@
 <script>
-import TableComponent from 'oc/vue_shared/components/oc/table.vue'
+import TableComponent from 'oc_vue_shared/components/oc/table.vue'
 import EnvironmentCell from '../cells/environment-cell.vue'
 import ApplicationCell from '../cells/application-cell.vue'
 import DeploymentCell from '../cells/deployment-cell.vue'
diff --git a/packages/oc-pages/dashboard/dashboard.vue b/packages/oc-pages/dashboard/dashboard.vue
index 98ae3cec..cc819483 100644
--- a/packages/oc-pages/dashboard/dashboard.vue
+++ b/packages/oc-pages/dashboard/dashboard.vue
@@ -1,16 +1,17 @@
 <script>
-import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash';
+import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash';
 import {mapActions, mapMutations, mapGetters, mapState} from 'vuex'
-import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs'
-import {deleteEnvironmentByName} from 'oc/vue_shared/client_utils/environments'
-import {notFoundError} from 'oc/vue_shared/client_utils/error'
+import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs'
+import {deleteEnvironmentByName} from 'oc_vue_shared/client_utils/environments'
+import {notFoundError} from 'oc_vue_shared/client_utils/error'
 import {GlLoadingIcon} from '@gitlab/ui'
 import * as routes from './router/constants'
+import ExperimentalSettingIndicator from 'oc_vue_shared/components/oc/experimental-settings-indicator.vue'
 const USER_TOURED_EXPLORE_PAGE = 'USER_TOURED_EXPLORE_PAGE'
 export default {
     name: 'Dashboard',
     data() {return {isLoaded: false, doNotRender: false}},
-    components: {GlLoadingIcon},
+    components: {GlLoadingIcon, ExperimentalSettingIndicator},
     methods: {
         ...mapActions([
             'loadDashboard',
@@ -47,17 +48,14 @@ export default {
         this.populateCurrentUser()
         this.populateDashboardProject()
 
-
-
         try {
-            await Promise.all([this.loadDashboard(), this.populateJobsList()])
+          await Promise.all([this.loadDashboard(), this.populateJobsList()])
         } catch(e) {
-            if(currentNamespace != this.getUsername) {
-                notFoundError()
-                console.error('displaying 404 for ', e)
-            } else {
-                throw(e)
-            }
+          if(currentNamespace != this.getUsername) {
+            notFoundError()
+          } else {
+            throw(e)
+          }
         }
         this.populateDeploymentItems(this.getDashboardItems)
         this.handleResize()
@@ -82,8 +80,7 @@ export default {
 </script>
 <template>
     <div>
-        <oc-experimental-settings-indicator />
-        <oc-unfurl-gui-errors />
+        <experimental-setting-indicator />
         <gl-loading-icon v-if="!isLoaded" label="Loading" size="lg" style="margin-top: 5em;" />
         <router-view v-else-if="!doNotRender"/>
     </div>
diff --git a/packages/oc-pages/dashboard/index.js b/packages/oc-pages/dashboard/index.js
index 77b429fe..4dc91d16 100644
--- a/packages/oc-pages/dashboard/index.js
+++ b/packages/oc-pages/dashboard/index.js
@@ -5,15 +5,13 @@ import apolloProvider from './graphql';
 import { GlToast, GlTooltipDirective } from '@gitlab/ui';
 import store from './store';
 import createRouter from './router';
-import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash';
-import {setupTheme} from 'oc/vue_shared/theme'
+import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash';
+import {setupTheme} from 'oc_vue_shared/theme'
 import ElementUI, {Popover as ElPopover} from 'element-ui' // formily not finding popover correctly
-import {OcComponents} from 'oc/vue_shared/components/oc/plugin'
 import '../project_overview/assets/global.css' // TODO move this somewhere better
 
 Vue.use(GlToast);
 Vue.use(ElementUI)
-Vue.use(OcComponents)
 Vue.directive('gl-tooltip', GlTooltipDirective)
 Vue.component('el-popover', ElPopover)
 
@@ -33,10 +31,6 @@ export default (elemId='js-table-component') => {
     const element = document.getElementById(elemId);
     window.gon = {...window.gon, ...element.dataset}
 
-    if(window.Cypress || sessionStorage['debug'] || sessionStorage['unfurl-gui:state']) {
-        window.$store = store
-    }
-
     const vm = new Vue({
         el: element,
         apolloProvider,
@@ -47,5 +41,10 @@ export default (elemId='js-table-component') => {
         },
     });
 
+
+    if(window.Cypress || sessionStorage['debug']) {
+        window.$store = vm.$store
+    }
+
     return vm
 };
diff --git a/packages/oc-pages/dashboard/pages/deployment.vue b/packages/oc-pages/dashboard/pages/deployment.vue
index 2134d0dd..044fbf47 100644
--- a/packages/oc-pages/dashboard/pages/deployment.vue
+++ b/packages/oc-pages/dashboard/pages/deployment.vue
@@ -1,20 +1,20 @@
 <script>
 import {mapGetters, mapActions} from 'vuex'
-import DeploymentResources from 'oc/vue_shared/components/oc/deployment-resources.vue'
+import DeploymentResources from 'oc_vue_shared/components/oc/deployment-resources.vue'
 import DashboardBreadcrumbs from '../components/dashboard-breadcrumbs.vue'
 import ShareResourceToggle from '../components/share-resource-toggle.vue'
-import {bus} from 'oc/vue_shared/bus'
+import {bus} from 'oc_vue_shared/bus'
 import * as routes from '../router/constants'
 import {cloneDeep} from 'lodash'
-import ConsoleWrapper from 'oc/vue_shared/components/console-wrapper.vue'
+import ConsoleWrapper from 'oc_vue_shared/components/console-wrapper.vue'
 import {GlTabs, GlLoadingIcon} from '@gitlab/ui'
-import {OcTab} from 'oc/vue_shared/components/oc'
-import {getJobsData} from 'oc/vue_shared/client_utils/pipelines'
-import {fetchProjectPipelines} from 'oc/vue_shared/client_utils/projects'
-import {FLASH_TYPES} from 'oc/vue_shared/client_utils/oc-flash'
-import {notFoundError} from 'oc/vue_shared/client_utils/error'
-import {sleep} from 'oc/vue_shared/client_utils/misc'
-import {DeploymentIndexTable} from 'oc/dashboard/components'
+import {OcTab} from 'oc_vue_shared/oc-components'
+import {getJobsData} from 'oc_vue_shared/client_utils/pipelines'
+import {fetchProjectPipelines} from 'oc_vue_shared/client_utils/projects'
+import {FLASH_TYPES} from 'oc_vue_shared/client_utils/oc-flash'
+import {notFoundError} from 'oc_vue_shared/client_utils/error'
+import {sleep} from 'oc_vue_shared/client_utils/misc'
+import {DeploymentIndexTable} from 'oc_dashboard/components'
 
 export default {
     components: {DeploymentResources, DashboardBreadcrumbs, ConsoleWrapper, GlTabs, OcTab, DeploymentIndexTable, ShareResourceToggle, GlLoadingIcon},
@@ -37,7 +37,6 @@ export default {
             'environmentsAreReady',
             'pollingStatus',
             'formattedDeploymentEta',
-            'hasCriticalErrors',
         ]),
         breadcrumbItems() {
             return  [
@@ -133,7 +132,6 @@ export default {
             if(this.deployment.__typename == 'DeploymentTemplate') {
                 const projectPath = this.deployment.projectPath
                 await this.fetchProject({projectPath})
-                if(this.hasCriticalErrors) return
                 this.useProjectState({root: cloneDeep({...this.state, DeploymentEnvironment}), shouldMerge: true, projectPath})
             } else {
                 console.assert(this.deployment.__typename == 'Deployment', 'Expected deployment to be either DeploymentTemplate or Deployment')
diff --git a/packages/oc-pages/dashboard/pages/environment.vue b/packages/oc-pages/dashboard/pages/environment.vue
index 39c494cd..3125772e 100644
--- a/packages/oc-pages/dashboard/pages/environment.vue
+++ b/packages/oc-pages/dashboard/pages/environment.vue
@@ -1,16 +1,16 @@
 <script>
 import * as routes from '../router/constants'
-import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash'
+import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash'
 import {mapActions, mapGetters, mapMutations} from 'vuex'
 import DashboardBreadcrumbs from '../components/dashboard-breadcrumbs.vue'
 import {GlFormInput, GlButton, GlIcon, GlTabs, GlModal} from '@gitlab/ui'
 import {Tooltip as ElTooltip} from 'element-ui'
-import {OcTab, DetectIcon, CiVariableSettings, DeploymentResources} from 'oc/vue_shared/components/oc'
+import {OcTab, DetectIcon, CiVariableSettings, OcPropertiesList, DeploymentResources} from 'oc_vue_shared/oc-components'
 import _ from 'lodash'
 import { __, n__ } from '~/locale'
-import {lookupCloudProviderAlias, cloudProviderFriendlyName, slugify} from 'oc/vue_shared/util.mjs'
-import {deleteEnvironment} from 'oc/vue_shared/client_utils/environments'
-import {notFoundError} from 'oc/vue_shared/client_utils/error'
+import {lookupCloudProviderAlias, cloudProviderFriendlyName, slugify} from 'oc_vue_shared/util.mjs'
+import {deleteEnvironment} from 'oc_vue_shared/client_utils/environments'
+import {notFoundError} from 'oc_vue_shared/client_utils/error'
 import { redirectTo } from '~/lib/utils/url_utility';
 
 
@@ -55,6 +55,7 @@ export default {
         OcTab,
         CiVariableSettings,
         DashboardBreadcrumbs,
+        OcPropertiesList,
         GlTabs, GlFormInput, GlButton, GlIcon, GlModal,
         DeploymentResources,
         DetectIcon,
diff --git a/packages/oc-pages/dashboard/pages/home.vue b/packages/oc-pages/dashboard/pages/home.vue
index 2c1f53d8..b0994642 100644
--- a/packages/oc-pages/dashboard/pages/home.vue
+++ b/packages/oc-pages/dashboard/pages/home.vue
@@ -1,5 +1,5 @@
 <script>
-import TableComponent from 'oc/vue_shared/components/oc/table.vue';
+import TableComponent from 'oc_vue_shared/components/oc/table.vue';
 
 import QuantityCard from '../components/quantity-card.vue'
 import ApplicationCell from '../components/cells/application-cell.vue'
diff --git a/packages/oc-pages/dashboard/router/index.js b/packages/oc-pages/dashboard/router/index.js
index 8f117166..1e0261f2 100644
--- a/packages/oc-pages/dashboard/router/index.js
+++ b/packages/oc-pages/dashboard/router/index.js
@@ -3,7 +3,7 @@ import VueRouter from 'vue-router';
 import {baseRouteNaive} from './base-route';
 import { joinPaths } from '~/lib/utils/url_utility';
 import routes from './routes';
-import { PageNotFound } from 'oc/vue_shared/components/oc'
+import { PageNotFound } from 'oc_vue_shared/oc-components'
 import * as ROUTES from './constants'
 
 Vue.use(VueRouter);
@@ -87,7 +87,7 @@ export default function createRouter() {
         } catch(e) {
             console.error("Couldn't set class on side navigation;", e.message)
         }
-        if(typeof router.app.$store?.getters?.getRouterHook == 'function') {
+        if(router.app.$store) {
             router.app.$store.getters.getRouterHook(to, from, next)
         }
         else next()
diff --git a/packages/oc-pages/dashboard/store/index.js b/packages/oc-pages/dashboard/store/index.js
index db90817b..3f5e2c3c 100644
--- a/packages/oc-pages/dashboard/store/index.js
+++ b/packages/oc-pages/dashboard/store/index.js
@@ -10,9 +10,8 @@ import deployment_template_updates from '../../project_overview/store/modules/de
 import template_resources from '../../project_overview/store/modules/template_resources'
 import table_data from './modules/table_data'
 import deployment_info from './modules/deployment-info'
-import health_check from 'oc/vue_shared/store_modules/health-check'
-import errors from 'oc/vue_shared/store_modules/errors'
-import {createCiVariablesStore} from 'oc/vue_shared/components/oc'
+import health_check from 'oc_vue_shared/store_modules/health-check'
+import {createCiVariablesStore} from 'oc_vue_shared/oc-components'
 
 Vue.use(Vuex);
 
@@ -28,8 +27,7 @@ const modules = {
     table_data,
     deployment_info,
     user_settings,
-    health_check,
-    errors
+    health_check
 }
 const variableDataEl = document.querySelector('#js-oc-ci-variables')
 
diff --git a/packages/oc-pages/dashboard/store/modules/deployment-info.js b/packages/oc-pages/dashboard/store/modules/deployment-info.js
index 91eb9d65..d8b202b5 100644
--- a/packages/oc-pages/dashboard/store/modules/deployment-info.js
+++ b/packages/oc-pages/dashboard/store/modules/deployment-info.js
@@ -70,31 +70,18 @@ const actions = {
                 itemKey = `${item.context.environment.name}:${item.context.deployment.name}`
             } catch(e) {continue}
             if(!dict[itemKey]) {
-                function recordDeploymentItem() {
-                    const context = {}
-                    context.environment = item.context.environment
-                    context.deployment = item.context.deployment
-                    context.application = item.context.application
-                    context.deployPath = rootGetters.lookupDeployPath(context.deployment.name, context.environment.name)
+                const context = {}
+                context.environment = item.context.environment
+                context.deployment = item.context.deployment
+                context.application = item.context.application
+                context.deployPath = rootGetters.lookupDeployPath(context.deployment.name, context.environment.name)
 
-                    if(!context.deployPath) throw new Error(`Couldn't look up deploy path for ${context.deployment.name} in ${context.environment.name}`)
+                if(!context.deployPath) throw new Error(`Couldn't look up deploy path for ${context.deployment.name} in ${context.environment.name}`)
 
-                    context.job = getters.jobByPipelineId(context.deployPath?.pipeline?.id)
-                    context.projectPath = rootGetters.getHomeProjectPath
-                    context.namespace = rootGetters.getCurrentNamespace
-                    dict[itemKey] = new DeploymentItem(context)
-                }
-
-                try {
-                    recordDeploymentItem()
-                } catch({message}) {
-                    commit(
-                        'createError', {
-                            message,
-                            severity: 'major',
-                            context: item
-                    }, {root: true})
-                }
+                context.job = getters.jobByPipelineId(context.deployPath?.pipeline?.id)
+                context.projectPath = rootGetters.getHomeProjectPath
+                context.namespace = rootGetters.getCurrentNamespace
+                dict[itemKey] = new DeploymentItem(context)
             }
         }
         commit('setDeploymentItems', dict)
diff --git a/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js b/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js
index 9d0279ee..728be372 100644
--- a/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js
+++ b/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js
@@ -1,6 +1,6 @@
 import axios from '~/lib/utils/axios_utils'
 import * as routes from '../../../router/constants'
-import {fetchCommit, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
+import {fetchCommit, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
 export default class DeploymentItem {
     constructor(context) {
         Object.assign(this, context)
diff --git a/packages/oc-pages/dashboard/store/modules/table_data.js b/packages/oc-pages/dashboard/store/modules/table_data.js
index c186fd4c..6771c7ed 100644
--- a/packages/oc-pages/dashboard/store/modules/table_data.js
+++ b/packages/oc-pages/dashboard/store/modules/table_data.js
@@ -1,6 +1,5 @@
-import {deepFreeze} from 'oc/vue_shared/client_utils/misc'
-import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
-import {useImportedStateOnBreakpointOrElse} from 'oc/vue_shared/storage-keys'
+import {deepFreeze} from 'oc_vue_shared/client_utils/misc'
+import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
 
 import _ from 'lodash'
 const state = () => ({
@@ -24,11 +23,7 @@ const actions = {
     async loadDashboard({commit, dispatch, rootGetters}, options={}) {
         const {fetchPolicy} = options
         commit('setDashboardLoaded', false)
-        
-        await useImportedStateOnBreakpointOrElse('loadDashboard', async() => {
-            await dispatch('ocFetchEnvironments', {fullPath: rootGetters.getHomeProjectPath, fetchPolicy});
-        })
-
+        await dispatch('ocFetchEnvironments', {fullPath: rootGetters.getHomeProjectPath, fetchPolicy});
         const items = [];
         let deployments = 0
         let applications = 0 
@@ -64,8 +59,8 @@ const actions = {
                 let projectPath
                 try {
                     projectPath = Object.values(frozenDeploymentDict.DeploymentTemplate)[0].projectPath
-                } catch(context) {
-                    commit('createError', {message: `@loadDashboard: Couldn't find project path`, severity: 'minor', context})
+                } catch(e) {
+                    console.error(e)
                 }
 
                 dispatch('useProjectState', {root: clonedDeploymentDict, projectPath})
@@ -118,7 +113,7 @@ const actions = {
                     try {
                         application.projectIcon = (await fetchProjectInfo(encodeURIComponent(application.projectPath)))?.avatar_url
                     } catch(e) {
-                        commit('createError', {message: `@loadDashboard: Couldn't fetch project icon for ${application.projectPath}`, severity: 'minor', context: e})
+                        console.error(`@loadDashboard: Couldn't fetch project icon for ${application.projectPath}`, e)
                     }
                 }
 
@@ -128,13 +123,7 @@ const actions = {
                 context.application = application
                 context.deployment = deployment
 
-                const deployPath = rootGetters.lookupDeployPath(context.deployment?.name, context.environment?.name)
-                if(!deployPath) {
-                    const message = `Couldn't look up deploy path for ${context.deployment?.name} in ${context.environment?.name}`
-                    commit('createError', {message, severity: 'major', context})
-                    continue
-                }
-
+                //for(const resource of rootGetters.getResources) {
                 for(const resource of deployment.resources) {
                     const i = ++iterationCounter
                     const resourceTemplate = rootGetters.resolveResourceTemplate(resource.template);
diff --git a/packages/oc-pages/project_overview/components/deployed-blueprints.vue b/packages/oc-pages/project_overview/components/deployed-blueprints.vue
index 7d33c396..98d06bb3 100644
--- a/packages/oc-pages/project_overview/components/deployed-blueprints.vue
+++ b/packages/oc-pages/project_overview/components/deployed-blueprints.vue
@@ -1,7 +1,7 @@
 <script>
 import {mapGetters} from 'vuex'
 import {GlCard, GlIcon} from '@gitlab/ui'
-import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs'
+import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs'
 const DISPLAY_MAP = {
     [lookupCloudProviderAlias('gcp')]: 'Google Cloud',
     [lookupCloudProviderAlias('aws')]: 'AWS',
diff --git a/packages/oc-pages/project_overview/components/environment-creation-dialog.vue b/packages/oc-pages/project_overview/components/environment-creation-dialog.vue
index 621448c7..68c2da6b 100644
--- a/packages/oc-pages/project_overview/components/environment-creation-dialog.vue
+++ b/packages/oc-pages/project_overview/components/environment-creation-dialog.vue
@@ -2,13 +2,13 @@
 import axios from '~/lib/utils/axios_utils';
 import { __ } from '~/locale';
 import _ from 'lodash'
-import { slugify, USER_HOME_PROJECT } from 'oc/vue_shared/util.mjs'
-import {postGitlabEnvironmentForm, initUnfurlEnvironment} from 'oc/vue_shared/client_utils/environments'
-import {projectPathToHomeRoute} from 'oc/vue_shared/client_utils/dashboard'
+import { slugify, USER_HOME_PROJECT } from 'oc_vue_shared/util.mjs'
+import {postGitlabEnvironmentForm, initUnfurlEnvironment} from 'oc_vue_shared/client_utils/environments'
+import {projectPathToHomeRoute} from 'oc_vue_shared/client_utils/dashboard'
 import {GlFormGroup, GlFormInput, GlDropdown, GlDropdownItem, GlDropdownDivider, GlFormCheckbox} from '@gitlab/ui'
-import {DetectIcon, ErrorSmall} from 'oc/vue_shared/components/oc'
-import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs'
-import {token} from 'oc/vue_shared/compat.js'
+import {DetectIcon, ErrorSmall} from 'oc_vue_shared/oc-components'
+import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs'
+import {token} from 'oc_vue_shared/compat.js'
 import {mapGetters, mapActions} from 'vuex'
 
 
diff --git a/packages/oc-pages/project_overview/components/main.vue b/packages/oc-pages/project_overview/components/main.vue
index a1e0ee75..44a66ddf 100644
--- a/packages/oc-pages/project_overview/components/main.vue
+++ b/packages/oc-pages/project_overview/components/main.vue
@@ -1,8 +1,9 @@
 <script>
-import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash';
+import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash';
 import { __ } from '~/locale';
 import gql from 'graphql-tag'
 import graphqlClient from '../graphql';
+import ExperimentalSettingIndicator from 'oc_vue_shared/components/oc/experimental-settings-indicator.vue'
 
 
 const ERROR_CONTEXT = {
@@ -12,6 +13,9 @@ const ERROR_CONTEXT = {
 export default {
     name: 'MainComponent',
     // TODO move this into page level components
+    components: {
+        ExperimentalSettingIndicator
+    },
     async beforeCreate() {
         let errorContext
 
@@ -93,8 +97,7 @@ export default {
 <template>
     <!-- <gl-loading-icon v-if="!fetchingComplete" label="Loading" size="lg" style="margin-top: 5em;" /> -->
     <div id="OcAppDeployments">
-        <oc-experimental-settings-indicator />
-        <oc-unfurl-gui-errors />
+        <experimental-setting-indicator />
         <router-view />
     </div>
 </template>
diff --git a/packages/oc-pages/project_overview/components/open-cloud-deployments.vue b/packages/oc-pages/project_overview/components/open-cloud-deployments.vue
index 25f00050..20be5b7f 100644
--- a/packages/oc-pages/project_overview/components/open-cloud-deployments.vue
+++ b/packages/oc-pages/project_overview/components/open-cloud-deployments.vue
@@ -1,8 +1,8 @@
 <script>
 import {mapGetters} from 'vuex'
-import TableComponent from 'oc/vue_shared/components/oc/table.vue'
-import {DetectIcon} from 'oc/vue_shared/components/oc'
-import {lookupCloudProviderAlias, cloudProviderFriendlyName} from 'oc/vue_shared/util.mjs'
+import TableComponent from 'oc_vue_shared/components/oc/table.vue'
+import {DetectIcon} from 'oc_vue_shared/oc-components'
+import {lookupCloudProviderAlias, cloudProviderFriendlyName} from 'oc_vue_shared/util.mjs'
 
 export default {
     name: 'OpenCloudDeployments',
diff --git a/packages/oc-pages/project_overview/components/project_description.vue b/packages/oc-pages/project_overview/components/project_description.vue
index 4ad895b7..a7f1a82b 100644
--- a/packages/oc-pages/project_overview/components/project_description.vue
+++ b/packages/oc-pages/project_overview/components/project_description.vue
@@ -3,7 +3,7 @@ import { GlTabs, GlTab, GlBadge  } from "@gitlab/ui";
 import { __ } from '~/locale';
 import commonMethods from './mixins/commonMethods';
 import {mapGetters, mapState} from 'vuex'
-import {OcTab, DetectIcon} from 'oc/vue_shared/components/oc'
+import {OcTab, DetectIcon} from 'oc_vue_shared/oc-components'
 
 export default {
     name: 'ProjectDescriptionBox',
diff --git a/packages/oc-pages/project_overview/components/shared/dependency.vue b/packages/oc-pages/project_overview/components/shared/dependency.vue
index 31f5ef3d..ce12d491 100644
--- a/packages/oc-pages/project_overview/components/shared/dependency.vue
+++ b/packages/oc-pages/project_overview/components/shared/dependency.vue
@@ -1,8 +1,8 @@
 <script>
 import {GlButton, GlTooltipDirective} from '@gitlab/ui'
-import {DetectIcon, StatusIcon} from 'oc/vue_shared/components/oc'
+import {DetectIcon, StatusIcon} from 'oc_vue_shared/oc-components'
 import {mapGetters, mapActions} from 'vuex'
-import {bus} from 'oc/vue_shared/bus'
+import {bus} from 'oc_vue_shared/bus'
 import { __ } from '~/locale';
 
 // TODO clean up dependency vs requirement in here!
diff --git a/packages/oc-pages/project_overview/components/shared/logos_cloud.vue b/packages/oc-pages/project_overview/components/shared/logos_cloud.vue
index c21d4230..9c5b8ef7 100644
--- a/packages/oc-pages/project_overview/components/shared/logos_cloud.vue
+++ b/packages/oc-pages/project_overview/components/shared/logos_cloud.vue
@@ -6,7 +6,7 @@ import SmallAWS from '../../assets/aws-small.svg?inline'
 import SmallGCP from '../../assets/gcp-small.svg?inline'
 import SmallAzure from '../../assets/azure-small.svg?inline'
 
-import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs'
+import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs'
 
 const MAPPINGS = {
     [lookupCloudProviderAlias('gcp')]: GCP,
diff --git a/packages/oc-pages/project_overview/components/shared/oc_card.vue b/packages/oc-pages/project_overview/components/shared/oc_card.vue
index 84b340a9..90db6ce2 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_card.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_card.vue
@@ -2,10 +2,10 @@
 import { GlButton, GlCard, GlIcon, GlBadge, GlTooltipDirective} from "@gitlab/ui";
 import commonMethods from '../mixins/commonMethods';
 import {mapGetters} from 'vuex'
-import { bus } from 'oc/vue_shared/bus';
-import StatusIcon from 'oc/vue_shared/components/oc/Status.vue'
-import {DetectIcon} from 'oc/vue_shared/components/oc'
-import {generateCardId} from 'oc/vue_shared/util.mjs'
+import { bus } from 'oc_vue_shared/bus';
+import StatusIcon from 'oc_vue_shared/components/oc/Status.vue'
+import {DetectIcon} from 'oc_vue_shared/oc-components'
+import {generateCardId} from 'oc_vue_shared/util.mjs'
 import {Tooltip as ElTooltip} from 'element-ui'
 
 import { __ } from '~/locale';
diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs.vue
index b70f8a03..79d96cb5 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_inputs.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_inputs.vue
@@ -1,13 +1,13 @@
 <script>
 import _ from 'lodash';
-import {bus} from 'oc/vue_shared/bus';
+import {bus} from 'oc_vue_shared/bus';
 import {__} from '~/locale';
 import {mapActions, mapMutations, mapGetters} from 'vuex'
 import {FormProvider, createSchemaField} from "@formily/vue";
 import {FormLayout, FormItem, ArrayItems, Input, InputNumber, Checkbox, Select, Password, Editable, Space} from "@formily/element";
 import {Card as ElCard} from 'element-ui'
 import {createForm, onFieldInputValueChange} from "@formily/core";
-import {tryResolveDirective} from 'oc/vue_shared/lib'
+import {tryResolveDirective} from 'oc_vue_shared/lib'
 import {getCustomTooltip} from './oc_inputs'
 
 
diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue
index e1c4b8b4..646a1e32 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue
@@ -4,13 +4,17 @@ import gql from 'graphql-tag'
 import graphqlClient from 'oc/graphql-shim'
 import axios from '~/lib/utils/axios_utils'
 import {Autocomplete as ElAutocomplete, Card as ElCard, Checkbox as ElCheckbox} from 'element-ui'
-import {fetchContainerRepositories, fetchRepositoryBranches, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
-import {triggerPipeline} from 'oc/vue_shared/client_utils/pipelines'
-import {GithubImportHandler, importStatus, oauthStatus} from 'oc/vue_shared/client_utils/github-import'
+import {fetchContainerRepositories, fetchRepositoryBranches, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
+import {triggerPipeline} from 'oc_vue_shared/client_utils/pipelines'
+import {GithubImportHandler, importStatus, oauthStatus} from 'oc_vue_shared/client_utils/github-import'
 import {mapMutations, mapActions, mapGetters, mapState} from 'vuex'
-import GithubAuth from 'oc/vue_shared/components/oc/github-auth.vue'
-import ImportButton from 'oc/vue_shared/components/oc/import-button.vue'
+import GithubAuth from 'oc_vue_shared/components/oc/github-auth.vue'
+import ImportButton from 'oc_vue_shared/components/oc/import-button.vue'
 
+import DeploymentScheduler from '../../../../vue_shared/components/oc/deployment-scheduler.vue'
+import {OcPropertiesList} from 'oc_vue_shared/oc-components'
+// webpack can't figure this out
+// import {OcPropertiesList, DeploymentScheduler} from 'oc_vue_shared/oc-components'
 
 
 import {connectedRepo} from './mixins'
@@ -26,7 +30,7 @@ function callbackFilter(query, items) {
 
 export default {
     name: 'GithubMirroredRepoImageSource',
-    components: {ElAutocomplete, GithubAuth, ImportButton, ElCheckbox},
+    components: {ElAutocomplete, GithubAuth, ImportButton, ElCheckbox, OcPropertiesList, DeploymentScheduler},
     mixins: [connectedRepo],
     props: {
         card: Object,
@@ -265,7 +269,7 @@ export default {
             <h4>Existing properties:</h4>
 
             <oc-properties-list :properties="displayableCardProperties"/>
-            <oc-deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/>
+            <deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/>
         </template>
         <div v-if="isExternalUser">
             <h3>Your profile must be set to developer mode to deploy with GitHub...</h3>
@@ -299,7 +303,7 @@ export default {
                     </div>
                 </div>
             </div>
-            <oc-deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/>
+            <deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/>
         </div>
     </github-auth>
     </el-card>
diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue
index 6426d0fd..5d0bd3ef 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue
@@ -2,8 +2,8 @@
 import gql from 'graphql-tag'
 import graphqlClient from 'oc/graphql-shim'
 import {Autocomplete as ElAutocomplete, Input as ElInput, Card as ElCard} from 'element-ui'
-import {fetchProjects, fetchRegistryRepositories, fetchContainerRepositories, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
-import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars'
+import {fetchProjects, fetchRegistryRepositories, fetchContainerRepositories, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
+import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars'
 import {mapGetters, mapActions, mapMutations} from 'vuex'
 import DeploymentScheduler from '../../../../vue_shared/components/oc/deployment-scheduler.vue'
 
diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue
index d7547ea4..deb0a435 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue
@@ -1,10 +1,10 @@
 <script>
 import {mapGetters, mapActions} from 'vuex'
-import {sleep} from 'oc/vue_shared/client_utils/misc'
+import {sleep} from 'oc_vue_shared/client_utils/misc'
 import {Card as ElCard, Input as ElInput, Button as ElButton, Tooltip as ElTooltip} from 'element-ui'
-import { XhrIFrame } from 'oc/vue_shared/client_utils/crossorigin-xhr'
-import CodeClipboard from 'oc/vue_shared/components/oc/code-clipboard.vue'
-import ErrorSmall from 'oc/vue_shared/components/oc/ErrorSmall.vue'
+import { XhrIFrame } from 'oc_vue_shared/client_utils/crossorigin-xhr'
+import CodeClipboard from 'oc_vue_shared/components/oc/code-clipboard.vue'
+import ErrorSmall from 'oc_vue_shared/components/oc/ErrorSmall.vue'
 import {hasUpdates} from './mixins'
 import _ from 'lodash'
 
diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue
index 2815b246..f1b9740d 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue
@@ -1,8 +1,8 @@
 <script>
 import axios from '~/lib/utils/axios_utils'
 import {mapActions, mapMutations, mapGetters} from 'vuex'
-import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars'
-import {fetchProjects, fetchRepositoryBranches, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
+import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars'
+import {fetchProjects, fetchRepositoryBranches, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
 import DeploymentScheduler from '../../../../vue_shared/components/oc/deployment-scheduler.vue'
 
 import {connectedRepo} from './mixins'
diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js b/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js
index da9cc287..59336846 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js
+++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js
@@ -1,5 +1,5 @@
-import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars'
-import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
+import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars'
+import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
 
 async function updateValue(propertyName) {
     if(!this.getStatus) {
diff --git a/packages/oc-pages/project_overview/components/shared/oc_list.vue b/packages/oc-pages/project_overview/components/shared/oc_list.vue
index 1a833897..8189e613 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_list.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_list.vue
@@ -1,9 +1,14 @@
 <script>
 import { GlTabs, GlIcon, GlButton } from '@gitlab/ui';
-import {DetectIcon} from 'oc/vue_shared/components/oc'
+import {DetectIcon, OcPropertiesList} from 'oc_vue_shared/oc-components'
+
+// webpack gets confused with these two
+import OcTab from 'oc_vue_shared/components/oc/oc-tab.vue'
+import IncrementalDeploymentSwitch from 'oc_vue_shared/components/oc/incremental-deployment-switch.vue'
+//
 
 import OcInputs from './oc_inputs.vue'
-import { bus } from 'oc/vue_shared/bus';
+import { bus } from 'oc_vue_shared/bus';
 import { __ } from '~/locale';
 import commonMethods from '../mixins/commonMethods';
 import { mapGetters, mapActions } from 'vuex'
@@ -14,8 +19,11 @@ export default {
     name: 'OcList',
     components: {
         GlTabs,
+        OcTab,
+        OcPropertiesList,
         OcInputs,
         Dependency,
+        IncrementalDeploymentSwitch
     },
 
     mixins: [commonMethods],
@@ -317,7 +325,7 @@ export default {
             </oc-tab>
             <oc-tab v-if="shouldRenderInputs && !customInputComponent" title="Inputs" :title-testid="`tab-inputs-${_card.name}`" :titleCount="properties.length">
                 <oc-properties-list v-if="_readonly" :container-style="propertiesStyle" :properties="properties">
-                    <template #Incremental_Deploy> <oc-incremental-deployment-switch :card="_card" /> </template>
+                    <template #Incremental_Deploy> <incremental-deployment-switch :card="_card" /> </template>
                 </oc-properties-list>
 
                 <oc-inputs v-else :card="_card" />
@@ -327,13 +335,13 @@ export default {
             </oc-tab>
             <oc-tab v-if="shouldRenderAttributes" title="Attributes" :titleCount="attributes.length">
                 <oc-properties-list :container-style="propertiesStyle" :properties="attributes">
-                    <template #Incremental_Deploy> <oc-incremental-deployment-switch :card="card" /> </template>
+                    <template #Incremental_Deploy> <incremental-deployment-switch :card="card" /> </template>
                 </oc-properties-list>
             </oc-tab>
             <oc-tab v-if="shouldRenderOutputs" title="Outputs" :titleCount="_card.outputs.length">
                 <oc-properties-list :container-style="propertiesStyle" :card="_card" property="outputs">
                     <!-- not sure this template would ever be reached -->
-                    <template #Incremental_Deploy> <oc-incremental-deployment-switch :card="card" /> </template>
+                    <template #Incremental_Deploy> <incremental-deployment-switch :card="card" /> </template>
                 </oc-properties-list>
             </oc-tab>
             <oc-tab v-if="shouldRenderExtras" title="Extras" :title-testid="`tab-extras-${_card.name}`" :titleCount="extras.length">
diff --git a/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue b/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue
index f2be93f3..653cd83a 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue
@@ -2,7 +2,7 @@
 import {  GlFormRadio, GlIcon } from '@gitlab/ui';
 import OcListResourceIcon from './oc_list_resource/icon.vue';
 import { __ } from '~/locale';
-import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs'
+import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs'
 import {mapGetters} from 'vuex';
 
 const CLOUD_PROVIDER_NAMES = {
diff --git a/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue b/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue
index bc3dd91d..737a94b5 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue
@@ -1,6 +1,6 @@
 <script>
 import commonMethods from '../../mixins/commonMethods.js'
-import {DetectIcon} from 'oc/vue_shared/components/oc'
+import {DetectIcon} from 'oc_vue_shared/oc-components'
 export default {
     name: 'OcListResourceIcon',
     mixins: [commonMethods],
diff --git a/packages/oc-pages/project_overview/components/shared/oc_template_header.vue b/packages/oc-pages/project_overview/components/shared/oc_template_header.vue
index f460fb3d..8725b769 100644
--- a/packages/oc-pages/project_overview/components/shared/oc_template_header.vue
+++ b/packages/oc-pages/project_overview/components/shared/oc_template_header.vue
@@ -1,9 +1,9 @@
 <script>
 import { __ } from '~/locale';
-import {DetectIcon} from 'oc/vue_shared/components/oc'
+import {DetectIcon} from 'oc_vue_shared/oc-components'
 import {mapGetters} from 'vuex'
-import {ProjectIcon} from 'oc/vue_shared/components/oc'
-import {projectPathToHomeRoute} from 'oc/vue_shared/client_utils/dashboard'
+import {ProjectIcon} from 'oc_vue_shared/oc-components'
+import {projectPathToHomeRoute} from 'oc_vue_shared/client_utils/dashboard'
 
 export default {
     name: 'OcTemplateHeader',
diff --git a/packages/oc-pages/project_overview/components/template/deploy_button.vue b/packages/oc-pages/project_overview/components/template/deploy_button.vue
index 495e4125..ecbc3719 100644
--- a/packages/oc-pages/project_overview/components/template/deploy_button.vue
+++ b/packages/oc-pages/project_overview/components/template/deploy_button.vue
@@ -3,7 +3,7 @@ import { mapGetters } from 'vuex'
 
 import { Tooltip as ElTooltip } from 'element-ui'
 import { GlButton, GlButtonGroup, GlDropdown, GlDropdownItem } from '@gitlab/ui';
-import ErrorSmall from 'oc/vue_shared/components/oc/ErrorSmall.vue'
+import ErrorSmall from 'oc_vue_shared/components/oc/ErrorSmall.vue'
 
 export default {
     name: 'DeployButton',
diff --git a/packages/oc-pages/project_overview/components/your-deployments.vue b/packages/oc-pages/project_overview/components/your-deployments.vue
index 55688941..6478cb0a 100644
--- a/packages/oc-pages/project_overview/components/your-deployments.vue
+++ b/packages/oc-pages/project_overview/components/your-deployments.vue
@@ -1,7 +1,7 @@
 <script>
 import { GlCard, GlIcon } from '@gitlab/ui'
 import {mapState, mapGetters} from 'vuex'
-import {DeploymentIndexTable} from 'oc/dashboard/components'
+import {DeploymentIndexTable} from 'oc_dashboard/components'
 /*
         const fields = [
             {
diff --git a/packages/oc-pages/project_overview/index.js b/packages/oc-pages/project_overview/index.js
index 8f9b7f60..b90d0275 100644
--- a/packages/oc-pages/project_overview/index.js
+++ b/packages/oc-pages/project_overview/index.js
@@ -6,12 +6,10 @@ import store from './store';
 import {GlTooltipDirective} from '@gitlab/ui';
 import __ from '~/locale';
 import ElementUI from 'element-ui'
-import {OcComponents} from 'oc/vue_shared/components/oc/plugin'
-import {setupTheme} from 'oc/vue_shared/theme'
+import {setupTheme} from 'oc_vue_shared/theme'
 
 import './assets/global.css';
 
-Vue.use(OcComponents)
 Vue.use(ElementUI)
 Vue.directive('gl-tooltip', GlTooltipDirective)
 
diff --git a/packages/oc-pages/project_overview/pages/projects/index.vue b/packages/oc-pages/project_overview/pages/projects/index.vue
index a61e61ec..a0ce7dca 100644
--- a/packages/oc-pages/project_overview/pages/projects/index.vue
+++ b/packages/oc-pages/project_overview/pages/projects/index.vue
@@ -1,7 +1,7 @@
 <script>
 import createFlash, { FLASH_TYPES } from '~/flash';
 import { GlIcon, GlCard, GlTabs, GlModal, GlModalDirective, GlDropdown, GlFormGroup, GlFormInput, GlDropdownItem, GlDropdownDivider, GlMarkdown } from '@gitlab/ui';
-import TableWithoutHeader from 'oc/vue_shared/components/oc/table_without_header.vue';
+import TableWithoutHeader from 'oc_vue_shared/components/oc/table_without_header.vue';
 import { mapGetters, mapActions, mapMutations } from 'vuex';
 import _ from 'lodash'
 import { s__, __ } from '~/locale';
@@ -10,12 +10,12 @@ import ProjectDescriptionBox from '../../components/project_description.vue';
 import EnvironmentCreationDialog from '../../components/environment-creation-dialog.vue'
 import YourDeployments from '../../components/your-deployments.vue'
 import OpenCloudDeployments from '../../components/open-cloud-deployments.vue'
-import NotesWrapper from 'oc/vue_shared/components/notes-wrapper.vue'
-import {OcTab, DetectIcon, EnvironmentSelection} from 'oc/vue_shared/components/oc'
-import { bus } from 'oc/vue_shared/bus';
-import { slugify, lookupCloudProviderAlias, USER_HOME_PROJECT } from 'oc/vue_shared/util.mjs'
-import {deleteEnvironmentByName} from 'oc/vue_shared/client_utils/environments'
-import {fetchProjectPermissions} from 'oc/vue_shared/client_utils/projects'
+import NotesWrapper from 'oc_vue_shared/components/notes-wrapper.vue'
+import {OcTab, DetectIcon, EnvironmentSelection} from 'oc_vue_shared/oc-components'
+import { bus } from 'oc_vue_shared/bus';
+import { slugify, lookupCloudProviderAlias, USER_HOME_PROJECT } from 'oc_vue_shared/util.mjs'
+import {deleteEnvironmentByName} from 'oc_vue_shared/client_utils/environments'
+import {fetchProjectPermissions} from 'oc_vue_shared/client_utils/projects'
 import { createDeploymentTemplate } from '../../store/modules/deployment_template_updates.js'
 import * as routes from '../../router/constants'
 
@@ -114,8 +114,7 @@ export default {
             'getLastUsedEnvironment',
             'environmentsAreReady',
             'commentsCount',
-            'commentsIssueUrl',
-            'hasCriticalErrors'
+            'commentsIssueUrl'
         ]),
         primaryProps() {
             return {
@@ -229,7 +228,6 @@ export default {
         //
 
         await this.loadPrimaryDeploymentBlueprint()
-        if(this.hasCriticalErrors) return
         this.fetchCloudmap() // async, not awaiting
 
         if (this.environmentsAreReady && this.yourDeployments.length && !this.triedPopulatingDeploymentItems) {
@@ -312,7 +310,6 @@ export default {
             const projectPath = this.$projectGlobal.projectPath
             if(!projectPath) throw new Error('projectGlobal.projectPath is not defined')
             await this.fetchProject({projectPath});
-            if(this.hasCriticalErrors) return
             const templateSlug = this.getApplicationBlueprint?.primaryDeploymentBlueprint
             if(!templateSlug) return
             return await this.populateTemplateResources({
diff --git a/packages/oc-pages/project_overview/pages/templates/index.vue b/packages/oc-pages/project_overview/pages/templates/index.vue
index 7e7cfb81..1149247e 100644
--- a/packages/oc-pages/project_overview/pages/templates/index.vue
+++ b/packages/oc-pages/project_overview/pages/templates/index.vue
@@ -2,7 +2,7 @@
 import { GlModal, GlModalDirective, GlSkeletonLoader, GlFormGroup, GlFormInput } from '@gitlab/ui';
 import { cloneDeep } from 'lodash';
 import { mapState, mapGetters, mapActions, mapMutations } from 'vuex';
-import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash';
+import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash';
 import axios from '~/lib/utils/axios_utils';
 import { redirectTo } from '~/lib/utils/url_utility';
 import _ from 'lodash'
@@ -13,11 +13,11 @@ import OcInputs from '../../components/shared/oc_inputs.vue'
 import OcListResource from '../../components/shared/oc_list_resource.vue';
 import OcTemplateHeader from '../../components/shared/oc_template_header.vue';
 import TemplateButtons from '../../components/template/template_buttons.vue';
-import { bus } from 'oc/vue_shared/bus';
-import { slugify } from 'oc/vue_shared/util.mjs'
+import { bus } from 'oc_vue_shared/bus';
+import { slugify } from 'oc_vue_shared/util.mjs'
 import { deleteDeploymentTemplate } from '../../store/modules/deployment_template_updates'
-import {getJobsData, redirectToJobConsole} from 'oc/vue_shared/client_utils/pipelines'
-import ConsoleWrapper from 'oc/vue_shared/components/console-wrapper.vue'
+import {getJobsData, redirectToJobConsole} from 'oc_vue_shared/client_utils/pipelines'
+import ConsoleWrapper from 'oc_vue_shared/components/console-wrapper.vue'
 import * as routes from '../../router/constants'
 
 
@@ -105,8 +105,7 @@ export default {
       'getPrimary',
       'environmentsAreReady',
       'editingDeployed',
-      'deployTooltip',
-      'hasCriticalErrors'
+      'deployTooltip'
     ]),
     
     deploymentDir() {
@@ -319,8 +318,7 @@ export default {
       'setEnvironmentScope',
       'pushPreparedMutation',
       'setCommitMessage',
-      'setUpdateType',
-      'createError'
+      'setUpdateType'
     ]),
     ...mapActions([
       'syncGlobalVars',
@@ -383,7 +381,6 @@ export default {
         }
         // TODO see if we can get rid of this, since it's probably already loaded
         await this.fetchProject({projectPath, fetchPolicy: 'network-only', n, projectGlobal: this.project.globalVars}); // NOTE this.project.globalVars
-        if(this.hasCriticalErrors) return
         const populateTemplateResult = await this.populateTemplateResources({
           projectPath, 
           templateSlug, 
@@ -413,8 +410,6 @@ export default {
           this.setUpdateType('deployment')
           await this.commitPreparedMutations();
 
-          if(this.hasCriticalErrors) return
-
           // will be handled by unfurl server
           // await this.createDeploymentPathPointer({deploymentDir: this.deploymentDir, projectPath: this.getHomeProjectPath, environmentName: this.$route.params.environment})
 
@@ -438,14 +433,11 @@ export default {
           //window.location.href = `/${this.project.globalVars.projectPath}#${slugify(this.$route.query.fn)}`
         } else {
           await this.commitPreparedMutations();
-          return !this.hasCriticalErrors;
+          return true;
         }
       } catch (e) {
-        this.createError({
-            message: `An unexpected error occurred while saving (${e.message})`,
-            context: e.message,
-            severity: 'major'
-        })
+        console.error(e);
+        this.createFlash({ message: e.message, type: FLASH_TYPES.ALERT });
         return false;
       }
     },
@@ -453,84 +445,98 @@ export default {
     triggerLocalDeploy: _.debounce(async function() {
       // TODO consolodate implementation with triggerDeployment
 
-      this.createFlash({
-        message: __('Preparing deployment...'),
-        type: FLASH_TYPES.SUCCESS,
-        duration: this.durationOfAlerts,
-      });
-
-      this.startedTriggeringDeployment = true;
-      const name = this.$route.query.fn;
-      this.setUpdateType('deployment')
-      this.setCommitMessage(`Trigger deployment of ${name}`)
-
-      await this.triggerSave();
-      if(this.hasCriticalErrors) return
-
-      const result = await this.deployInto({
-        environmentName: this.$route.params.environment,
-        projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`,
-        deployPath: this.deploymentDir,
-        deploymentName: this.$route.params.slug,
-        deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source,
-        deployOptions: {
-            schedule: 'defer'
-        }
-      })
-
-      if(this.hasCriticalErrors) return
+      try {
+        this.createFlash({
+          message: __('Preparing deployment...'),
+          type: FLASH_TYPES.SUCCESS,
+          duration: this.durationOfAlerts,
+        });
+
+        this.startedTriggeringDeployment = true;
+        const name = this.$route.query.fn;
+        this.setUpdateType('deployment')
+        this.setCommitMessage(`Trigger deployment of ${name}`)
+        await this.triggerSave();
+        const result = await this.deployInto({
+          environmentName: this.$route.params.environment,
+          projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`,
+          deployPath: this.deploymentDir,
+          deploymentName: this.$route.params.slug,
+          deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source,
+          deployOptions: {
+              schedule: 'defer'
+          }
+        })
+        if(result === false) return
 
-      if(result === false) return
+        const {pipelineData, error} = result
 
-      const {pipelineData} = result
+        if(error) {
+          throw new Error(error)
+        }
 
-      if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts });
+        if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts });
 
-      const router = this.$router
+        const router = this.$router
 
-      const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}})
-      window.history.replaceState({}, null, href)
+        const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}})
+        window.history.replaceState({}, null, href)
 
-      this.dataWritten = true
-      window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=local-deploy`
+        this.dataWritten = true
+        window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=local-deploy`
+      } catch (err) {
+        console.error(err)
+        const errors = err?.response?.data?.errors || [];
+        const [error] = errors;
+        this.dataWritten = true
+        return this.createFlash({ message: `Pipeline ${error || err}`, type: FLASH_TYPES.ALERT, duration: this.durationOfAlerts, projectPath: this.getHomeProjectPath, issue: 'Failed to trigger deployment pipeline'});
+      }
     }, 250),
 
     triggerDeployment: _.debounce(async function() {
-      this.createFlash({
-        message: __('Starting deployment...'),
-        type: FLASH_TYPES.SUCCESS,
-        duration: this.durationOfAlerts,
-      });
-
-      this.startedTriggeringDeployment = true;
-      const name = this.$route.query.fn;
-      this.setUpdateType('deployment')
-      this.setCommitMessage(`Trigger deployment of ${name}`)
-
-      await this.triggerSave();
-      if(this.hasCriticalErrors) return
-
-      const result = await this.deployInto({
-        environmentName: this.$route.params.environment,
-        projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`,
-        deployPath: this.deploymentDir,
-        deploymentName: this.$route.params.slug,
-        deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source
-      })
+      try {
+        this.createFlash({
+          message: __('Starting deployment...'),
+          type: FLASH_TYPES.SUCCESS,
+          duration: this.durationOfAlerts,
+        });
+
+        this.startedTriggeringDeployment = true;
+        const name = this.$route.query.fn;
+        this.setUpdateType('deployment')
+        this.setCommitMessage(`Trigger deployment of ${name}`)
+        await this.triggerSave();
+        const result = await this.deployInto({
+          environmentName: this.$route.params.environment,
+          projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`,
+          deployPath: this.deploymentDir,
+          deploymentName: this.$route.params.slug,
+          deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source
+        })
+        if(result === false) return
 
-      if(this.hasCriticalErrors) return
+        const {pipelineData, error} = result
 
-      const {pipelineData} = result
+        if(error) {
+          throw new Error(error)
+        }
 
-      if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts });
+        if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts });
 
-      const router = this.$router
+        const router = this.$router
 
-      const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}})
-      window.history.replaceState({}, null, href)
+        const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}})
+        window.history.replaceState({}, null, href)
 
-      this.dataWritten = true
-      window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=console`
+        this.dataWritten = true
+        window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=console`
+      } catch (err) {
+        console.error(err)
+        const errors = err?.response?.data?.errors || [];
+        const [error] = errors;
+        this.dataWritten = true
+        return this.createFlash({ message: `Pipeline ${error || err}`, type: FLASH_TYPES.ALERT, duration: this.durationOfAlerts, projectPath: this.getHomeProjectPath, issue: 'Failed to trigger deployment pipeline'});
+      }
     }, 250),
 
     cleanModalResource() {
diff --git a/packages/oc-pages/project_overview/router/index.js b/packages/oc-pages/project_overview/router/index.js
index 9f1a3dcd..8ebf8c76 100644
--- a/packages/oc-pages/project_overview/router/index.js
+++ b/packages/oc-pages/project_overview/router/index.js
@@ -3,9 +3,9 @@ import VueRouter from 'vue-router';
 import { joinPaths } from '~/lib/utils/url_utility';
 import routes from './routes';
 import * as routeNames from './constants.js'
-import { PageNotFound } from 'oc/vue_shared/components/oc'
+import { PageNotFound } from 'oc_vue_shared/oc-components'
 import { filterFromRoutes, createDenyList } from './sign-in-filter'
-import { hideLastFlash } from 'oc/vue_shared/client_utils/oc-flash'
+import { hideLastFlash } from 'oc_vue_shared/client_utils/oc-flash'
 
 Vue.use(VueRouter);
 
@@ -47,7 +47,7 @@ export default function createRouter(base) {
                 return false
             }
         }
-        if(typeof router.app.$store?.getters?.getRouterHook == 'function') {
+        if(router.app.$store) {
             router.app.$store.getters.getRouterHook(to, from, next)
         }
         else next()
diff --git a/packages/oc-pages/project_overview/router/routes.js b/packages/oc-pages/project_overview/router/routes.js
index fbb0ae97..4c421fb9 100644
--- a/packages/oc-pages/project_overview/router/routes.js
+++ b/packages/oc-pages/project_overview/router/routes.js
@@ -1,7 +1,7 @@
 import ProjectPageHome from '../pages/projects/index.vue';
 import TemplatesPage from '../pages/templates/index.vue';
 import { SIGN_IN, OC_PROJECT_VIEW_HOME, OC_PROJECT_VIEW_CREATE_TEMPLATE, OC_PROJECT_VIEW_EDIT_DEPLOYMENT, OC_PROJECT_VIEW_DRAFT_DEPLOYMENT } from './constants';
-import { PageNotFound, SignIn } from 'oc/vue_shared/components/oc'
+import { PageNotFound, SignIn } from 'oc_vue_shared/oc-components'
 
 export default [
   {
diff --git a/packages/oc-pages/project_overview/store/index.js b/packages/oc-pages/project_overview/store/index.js
index 0af855ea..7b47fe4e 100644
--- a/packages/oc-pages/project_overview/store/index.js
+++ b/packages/oc-pages/project_overview/store/index.js
@@ -10,8 +10,7 @@ import deployment_info from '../../dashboard/store/modules/deployment-info'
 import misc from './modules/misc'
 import deployments from './modules/deployments'
 import user_settings from './modules/user_settings'
-import health_check from 'oc/vue_shared/store_modules/health-check'
-import errors from 'oc/vue_shared/store_modules/errors'
+import health_check from 'oc_vue_shared/store_modules/health-check'
 
 Vue.use(Vuex);
 
@@ -28,8 +27,7 @@ const store = new Vuex.Store({
         project_application_blueprint,
         deployment_info,
         user_settings,
-        health_check,
-        errors
+        health_check
     },
     strict: development,
     plugins: development && process.env.VUEX_LOGGER === "true" ? [createLogger()] : [],
diff --git a/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js b/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js
index d94a0fc0..8f997ece 100644
--- a/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js
+++ b/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js
@@ -1,11 +1,11 @@
 import { __ } from "~/locale";
 import _ from 'lodash'
-import {slugify} from 'oc/vue_shared/util.mjs'
-import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs'
-import {patchEnv} from 'oc/vue_shared/client_utils/envvars'
-import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
-import {fetchUserAccessToken} from 'oc/vue_shared/client_utils/user'
-import {unfurl_cloud_vars_url} from 'oc/vue_shared/client_utils/unfurl-invocations'
+import {slugify} from 'oc_vue_shared/util.mjs'
+import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs'
+import {patchEnv} from 'oc_vue_shared/client_utils/envvars'
+import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
+import {fetchUserAccessToken} from 'oc_vue_shared/client_utils/user'
+import {unfurl_cloud_vars_url} from 'oc_vue_shared/client_utils/unfurl-invocations'
 import {declareAvailableProviders} from "../../../vue_shared/client_utils/environments";
 import {unfurlServerUpdate} from "../../../vue_shared/client_utils/unfurl-server";
 
@@ -744,28 +744,12 @@ const actions = {
         commit('setBaseState', _.cloneDeep(state))
     },
 
-    async sendUpdateSubrequests({state, getters, commit, rootState, rootGetters}, o){
+    async sendUpdateSubrequests({state, getters, rootState, rootGetters}, o){
         // send environment variables before trying to commit changes
-        try {
-            if(o?.dryRun) {
-                console.log(state.env, state.environmentScope, state.projectPath)
-            } else {
-                await patchEnv(state.env, state.environmentScope, state.projectPath, 0)
-            }
-        } catch(e) {
-            commit(
-                'createError',
-                {
-                    message: `Failed to update secrets -- aborting commit (${e.message})`,
-                    context: {
-                        environmentScope: state.environmentScope,
-                        projectPath: state.projectPath
-                    },
-                    severity: 'critical'
-                },
-                {root: true}
-            )
-            return
+        if(o?.dryRun) {
+            console.log(state.env, state.environmentScope, state.projectPath)
+        } else {
+            await patchEnv(state.env, state.environmentScope, state.projectPath, 0)
         }
 
         const patch = []
@@ -875,23 +859,6 @@ const actions = {
             patch,
             commitMessage: state.commitMessage,
             variables
-        }).catch(e => {
-            commit(
-                'createError',
-                {
-                    message: `Failed to commit update to ${path} (${e.message})`,
-                    context: {
-                        method,
-                        projectPath,
-                        branch,
-                        patch,
-                        commitMessage: state.commitMessage,
-                        variables
-                    },
-                    severity: 'critical'
-                },
-                {root: true}
-            )
         })
 
         await Promise.all([post, sync])
diff --git a/packages/oc-pages/project_overview/store/modules/deployments.js b/packages/oc-pages/project_overview/store/modules/deployments.js
index 5c9eae43..15d71d3b 100644
--- a/packages/oc-pages/project_overview/store/modules/deployments.js
+++ b/packages/oc-pages/project_overview/store/modules/deployments.js
@@ -1,8 +1,8 @@
-import {slugify} from 'oc/vue_shared/util.mjs'
-import {environmentVariableDependencies, prefixEnvironmentVariables} from 'oc/vue_shared/lib/deployment-template'
-import {shareEnvironmentVariables} from 'oc/vue_shared/client_utils/environments'
-import {fetchUserAccessToken} from 'oc/vue_shared/client_utils/user'
-import {fetchLastCommit} from 'oc/vue_shared/client_utils/projects'
+import {slugify} from 'oc_vue_shared/util.mjs'
+import {environmentVariableDependencies, prefixEnvironmentVariables} from 'oc_vue_shared/lib/deployment-template'
+import {shareEnvironmentVariables} from 'oc_vue_shared/client_utils/environments'
+import {fetchUserAccessToken} from 'oc_vue_shared/client_utils/user'
+import {fetchLastCommit} from 'oc_vue_shared/client_utils/projects'
 import Vue from 'vue'
 import _ from 'lodash'
 import axios from '~/lib/utils/axios_utils'
diff --git a/packages/oc-pages/project_overview/store/modules/environments.js b/packages/oc-pages/project_overview/store/modules/environments.js
index e7571b37..1e040d84 100644
--- a/packages/oc-pages/project_overview/store/modules/environments.js
+++ b/packages/oc-pages/project_overview/store/modules/environments.js
@@ -2,17 +2,17 @@ import axios from '~/lib/utils/axios_utils'
 import { __ } from "~/locale";
 import _ from 'lodash'
 import {cloneDeep} from 'lodash'
-import {lookupCloudProviderAlias } from 'oc/vue_shared/util.mjs'
-import {isDiscoverable} from 'oc/vue_shared/client_utils/resource_types'
-import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash';
-import {prepareVariables, triggerAtomicDeployment} from 'oc/vue_shared/client_utils/pipelines'
-import {toDepTokenEnvKey, patchEnv, fetchEnvironmentVariables} from 'oc/vue_shared/client_utils/envvars'
-import {fetchProjectInfo, generateProjectAccessToken} from 'oc/vue_shared/client_utils/projects'
-import {fetchEnvironments, shareEnvironmentVariables} from 'oc/vue_shared/client_utils/environments'
-import {tryResolveDirective} from 'oc/vue_shared/lib'
-import {environmentVariableDependencies} from 'oc/vue_shared/lib/deployment-template'
-import {deleteFiles} from 'oc/vue_shared/client_utils/commits'
-import {slugify} from 'oc/vue_shared/util.mjs'
+import {lookupCloudProviderAlias } from 'oc_vue_shared/util.mjs'
+import {isDiscoverable} from 'oc_vue_shared/client_utils/resource_types'
+import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash';
+import {prepareVariables, triggerAtomicDeployment} from 'oc_vue_shared/client_utils/pipelines'
+import {toDepTokenEnvKey, patchEnv, fetchEnvironmentVariables} from 'oc_vue_shared/client_utils/envvars'
+import {fetchProjectInfo, generateProjectAccessToken} from 'oc_vue_shared/client_utils/projects'
+import {fetchEnvironments, shareEnvironmentVariables} from 'oc_vue_shared/client_utils/environments'
+import {tryResolveDirective} from 'oc_vue_shared/lib'
+import {environmentVariableDependencies} from 'oc_vue_shared/lib/deployment-template'
+import {deleteFiles} from 'oc_vue_shared/client_utils/commits'
+import {slugify} from 'oc_vue_shared/util.mjs'
 import Vue from 'vue'
 
 
@@ -170,20 +170,9 @@ const actions = {
         }
 
         const projects = await Promise.all(
-            state.repositoryDependencies.map(
-                dep => fetchProjectInfo(encodeURIComponent(dep))
-                    .catch(e => {
-                        commit(
-                            'createError',
-                            {message: `Couldn't lookup dependency info (${e.message})`, context: dep, severity: 'critical'},
-                            {root: true}
-                        )
-                    })
-            )
+            state.repositoryDependencies.map(dep => fetchProjectInfo(encodeURIComponent(dep)))
         )
 
-        if(rootGetters.hasCriticalErrors) return
-
         const dashboardProjectId = (await fetchProjectInfo(encodeURIComponent(rootGetters.getHomeProjectPath))).id
 
         let writableBlueprintProjectUrl, blueprintToken
@@ -225,37 +214,24 @@ const actions = {
         })
 
 
-        let data
+        let data, error
 
-        try {
-            data = await triggerAtomicDeployment(
-                rootGetters.getHomeProjectPath,
-                {
-                    variables: deployVariables,
-                    dependencies,
-                    ...parameters.deployOptions
-                }
-            )
-        } catch(e) {
-            commit(
-                'createError',
-                {
-                    message: `Failed to trigger deployment (${e.message})`,
-                    context: {
-                        projectPath: rootGetters.getHomeProjectPath,
-                        variables: deployVariables,
-                        dependencies,
-                        ...parameters.deployOptions
-                    },
-                    severity: 'critical'
-                },
-                {root: true}
-            )
-            return
-        }
+        data = await triggerAtomicDeployment(
+            rootGetters.getHomeProjectPath,
+            {
+                variables: deployVariables,
+                dependencies,
+                ...parameters.deployOptions
+            }
+        )
 
+
+        if(error = data?.errors) {
+            return {pipelineData: data, error}
+        }
         const pipelines = [...(dp?.pipelines || [])]
 
+
         const pipeline = data?
             {
                 id: data.id,
@@ -270,6 +246,7 @@ const actions = {
             } :
             null
 
+
         if(pipeline) {pipelines.push(pipeline)}
 
         commit('setUpdateType', 'environment', {root: true})
@@ -348,10 +325,6 @@ const actions = {
                 projectId,
                 includeDeployments: true
             })
-            
-            result.errors.forEach(e => commit('createError', e, {root: true}))
-
-            if(rootGetters.hasCriticalErrors) return
 
             environments = result.environments
 
@@ -366,13 +339,9 @@ const actions = {
             commit('setDeployments', result.deployments)
         }
         catch(e){
+            console.error('Could not fetch project environments', e)
             if(window.gon.current_username) {
-                commit('createError', {
-                    message: `Could not fetch project environments (${e})`,
-                    context: e,
-                    severity: 'critical',
-                    issue: 'Missing environment',
-                })
+                dispatch('createFlash', { projectPath: fullPath, message: 'Could not fetch project environments.  Is your unfurl.yaml valid?', type: FLASH_TYPES.ALERT, issue: 'Missing environment' }, {root: true})
             }
             environments = []
 
diff --git a/packages/oc-pages/project_overview/store/modules/misc.js b/packages/oc-pages/project_overview/store/modules/misc.js
index 201b6b2d..e9334cd8 100644
--- a/packages/oc-pages/project_overview/store/modules/misc.js
+++ b/packages/oc-pages/project_overview/store/modules/misc.js
@@ -1,9 +1,9 @@
 import _ from 'lodash'
-import { USER_HOME_PROJECT} from 'oc/vue_shared/util.mjs'
-import { fetchUser } from 'oc/vue_shared/client_utils/user'
-import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
-import {createFlash, hideLastFlash, FLASH_TYPES} from 'oc/vue_shared/client_utils/oc-flash'
-import {unfurlServerUrlOverride} from 'oc/vue_shared/storage-keys'
+import { USER_HOME_PROJECT} from 'oc_vue_shared/util.mjs'
+import { fetchUser } from 'oc_vue_shared/client_utils/user'
+import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
+import {createFlash, hideLastFlash, FLASH_TYPES} from 'oc_vue_shared/client_utils/oc-flash'
+import {unfurlServerUrlOverride} from 'oc_vue_shared/storage-keys'
 
 const DEFAULT_ROUTER_HOOK = (to, from, next) => next()
 
@@ -19,8 +19,7 @@ const state = () => ({
     dashboard: null,
     dashboardProjectInfo: null,
     user: null,
-    windowWidth: window.innerWidth,
-    scrollTop: document.scrollingElement.scrollTop
+    windowWidth: window.innerWidth
 })
 
 const mutations = {
@@ -51,10 +50,6 @@ const mutations = {
 
     setWindowWidth(state, windowWidth) {
         state.windowWidth = windowWidth
-    },
-
-    setScrollTop(state, scrollTop) {
-        state.scrollTop = scrollTop
     }
 }
 
@@ -90,7 +85,6 @@ const getters = {
         return sessionStorage['registry-url']
     },
     windowWidth(state) {return state.windowWidth},
-    scrollTop(state) {return state.scrollTop},
     serviceDesk() {
         // TODO make this configurable
         return 'onecommons/support'
@@ -99,24 +93,16 @@ const getters = {
 
 const actions = {
     handleResize({commit, state}) {
-        function onResize(e) {
-            const _isMobileLayout = isMobileLayout()
-            if(_isMobileLayout != state.isMobileLayout) {
-                commit('setMobileLayout', _isMobileLayout)
-            }
-            commit('setWindowWidth', window.innerWidth)
-        }
-        function onScroll(e) {
-            commit('setScrollTop', document.scrollingElement.scrollTop)
-        }
         window.addEventListener('resize', _.throttle(
             function(e) {
-                onResize(e)
-                onScroll(e)
+                const _isMobileLayout = isMobileLayout()
+                if(_isMobileLayout != state.isMobileLayout) {
+                    commit('setMobileLayout', _isMobileLayout)
+                }
+                commit('setWindowWidth', window.innerWidth)
             }, 
             30
         ))
-        window.addEventListener('scroll', _.throttle( onScroll, 15 ))
     },
 
     async populateCurrentUser({commit}) {
diff --git a/packages/oc-pages/project_overview/store/modules/project.js b/packages/oc-pages/project_overview/store/modules/project.js
index e99518e5..57400559 100644
--- a/packages/oc-pages/project_overview/store/modules/project.js
+++ b/packages/oc-pages/project_overview/store/modules/project.js
@@ -1,7 +1,7 @@
 import _ from 'lodash';
 import { __ } from "~/locale";
 import axios from '~/lib/utils/axios_utils'
-import {lookupNumberOfComments} from 'oc/vue_shared/client_utils/comments'
+import {lookupNumberOfComments} from 'oc_vue_shared/client_utils/comments'
 
 const state = () => ({
     commentsIssueUrl: null,
diff --git a/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js b/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js
index b0107cde..46ea80c0 100644
--- a/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js
+++ b/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js
@@ -1,7 +1,7 @@
 import {uniq} from 'lodash'
-import {isConfigurable} from 'oc/vue_shared/client_utils/resource_types'
-import {unfurlServerExport} from 'oc/vue_shared/client_utils/unfurl-server'
-import {localNormalize} from 'oc/vue_shared/lib/normalize'
+import {isConfigurable} from 'oc_vue_shared/client_utils/resource_types'
+import {unfurlServerExport} from 'oc_vue_shared/client_utils/unfurl-server'
+import {localNormalize} from 'oc_vue_shared/lib/normalize'
 import _ from 'lodash'
 import Vue from 'vue'
 
@@ -39,34 +39,13 @@ const mutations = {
 const actions = {
     async fetchProject({commit, dispatch}, params) {
         const {projectPath, projectGlobal} = params
-        const format = 'blueprint'
         commit('loaded', false)
 
-        let root
-        try {
-            root = await unfurlServerExport({
-                format,
-                projectPath,
-                //TODO pass branch
-            })
-        } catch(e) {
-            // TODO handle this from the caller
-            commit(
-                'createError',
-                {
-                    message: `An error occurred while exporting ${projectPath}`,
-                    context: {
-                        error: e.message,
-                        projectPath,
-                        format
-                    },
-                    severity: 'critical',
-                }
-            )
-
-            return
-        }
-        
+        const root = await unfurlServerExport({
+            format: 'blueprint',
+            projectPath,
+            //TODO pass branch
+        })
 
         root.projectGlobal = projectGlobal
 
@@ -407,7 +386,6 @@ const getters = {
     lookupConfigurableTypes(state, _a, _b, rootGetters) {
         return function(environment) {
             //const resolver = rootGetters.resolveResourceTypeFromAvailable // didn't work for some reason
-            if(!state.ResourceType) return
             const resolver = rootGetters.environmentResolveResourceType.bind(null, environment)
             return Object.values(state.ResourceType).filter(rt => isConfigurable(rt, environment, resolver))
         }
diff --git a/packages/oc-pages/project_overview/store/modules/template_resources.js b/packages/oc-pages/project_overview/store/modules/template_resources.js
index 6327a372..a7e4c4d4 100644
--- a/packages/oc-pages/project_overview/store/modules/template_resources.js
+++ b/packages/oc-pages/project_overview/store/modules/template_resources.js
@@ -1,8 +1,8 @@
 import { cloneDeep, create } from 'lodash';
 import _ from 'lodash'
 import { __ } from "~/locale";
-import { lookupCloudProviderAlias, slugify } from 'oc/vue_shared/util.mjs';
-import {shouldConnectWithoutCopy} from 'oc/vue_shared/storage-keys.js';
+import { lookupCloudProviderAlias, slugify } from 'oc_vue_shared/util.mjs';
+import {shouldConnectWithoutCopy} from 'oc_vue_shared/storage-keys.js';
 import {appendDeploymentTemplateInBlueprint, appendResourceTemplateInDependent, createResourceTemplate, createEnvironmentInstance, deleteResourceTemplate, deleteResourceTemplateInDependent, deleteEnvironmentInstance, updatePropertyInInstance, updatePropertyInResourceTemplate} from './deployment_template_updates.js';
 import Vue from 'vue'
 
diff --git a/packages/oc-pages/vue_shared/client_utils/environments.js b/packages/oc-pages/vue_shared/client_utils/environments.js
index 7943c1e4..02d1a47f 100644
--- a/packages/oc-pages/vue_shared/client_utils/environments.js
+++ b/packages/oc-pages/vue_shared/client_utils/environments.js
@@ -149,36 +149,16 @@ export function connectionsToArray(environment) {
 }
 
 export async function fetchEnvironments({fullPath, includeDeployments, branch}) {
-    const projectPath = fullPath
-    const format = 'environments'
-    const errors = []
 
     // TODO get the branch passed into fetch environments
     // TODO use ?include_deployments=true
 
-    let data
-
-    try {
-        data = await unfurlServerExport({
-            format,
-            projectPath,
-            includeDeployments,
-            branch,
-        })
-    } catch(e) {
-        errors.push({
-            message: `@fatchEnvironments: An error occurred during an export request (${e.message})`,
-            context: {
-                error: e.message,
-                format,
-                projectPath,
-                includeDeployments,
-                branch
-            },
-            severity: 'critical'
-        })
-        return {errors}
-    }
+    const data = await unfurlServerExport({
+        format: 'environments',
+        projectPath: fullPath,
+        includeDeployments,
+        branch,
+    })
 
     const environments = Object.values(data.DeploymentEnvironment)
         .filter(env => env.name != 'defaults')
@@ -200,20 +180,12 @@ export async function fetchEnvironments({fullPath, includeDeployments, branch})
         localNormalize(resourceType, 'ResourceType', null)
     })
 
-    const result = {environments, deploymentPaths, fullPath, defaults, ResourceType: data.ResourceType, errors}
+    const result = {environments, deploymentPaths, fullPath, defaults, ResourceType: data.ResourceType}
 
     if(includeDeployments) {
-        const deployments = data.deployments.filter(dep => !dep.ApplicationBlueprint || !Object.keys(dep.ApplicationBlueprint).includes('generic-cloud-provider-implementations'))
+        const deployments = data.deployments.filter(dep => !Object.keys(dep.ApplicationBlueprint).includes('generic-cloud-provider-implementations'))
 
         deployments.forEach(deployment => {
-            if(deployment.error) {
-                errors.push({
-                    message: `@fetchEnvironments: An error occured while exporting a deployment ${deployment.deployment}`,
-                    context: deployment,
-                    severity: 'major'
-                })
-                return
-            }
             try {
                 const [deploymentName, deploymentObject] = Object.entries(deployment.Deployment)[0]
 
@@ -226,11 +198,7 @@ export async function fetchEnvironments({fullPath, includeDeployments, branch})
 
                 localNormalize(deploymentObject, 'Deployment', deployment)
             } catch(e) {
-                errors.push({
-                    message: '@fetchEnvironments: Unexpected shape for deployment',
-                    context: e,
-                    severity: 'major'
-                })
+                console.error('@fetchEnvironments: unexpected shape for deployment', deployment, e)
             }
         })
         result.deployments = deployments
diff --git a/packages/oc-pages/vue_shared/client_utils/unfurl-server.js b/packages/oc-pages/vue_shared/client_utils/unfurl-server.js
index 3b23399a..f18faee7 100644
--- a/packages/oc-pages/vue_shared/client_utils/unfurl-server.js
+++ b/packages/oc-pages/vue_shared/client_utils/unfurl-server.js
@@ -24,6 +24,7 @@ async function doXhr(_method, url, body, headers) {
         let response
         if(method == 'GET') { response = await axios.get(url, {headers}) }
         else if(method == 'POST') { response = await axios.post(url, body, {headers}) }
+
         return response?.data
     } else {
         return await ufsvIFrame.doXhr(...arguments)
diff --git a/packages/oc-pages/vue_shared/components/console-wrapper.vue b/packages/oc-pages/vue_shared/components/console-wrapper.vue
index 64567e22..c66a4725 100644
--- a/packages/oc-pages/vue_shared/components/console-wrapper.vue
+++ b/packages/oc-pages/vue_shared/components/console-wrapper.vue
@@ -1,6 +1,6 @@
 <script>
 import {mapMutations, mapActions, mapGetters} from 'vuex'
-import {compatibilityMountJobConsole} from 'oc/vue_shared/compat'
+import {compatibilityMountJobConsole} from 'oc_vue_shared/compat'
 const TEXT_HTML = 'text/html' // my editor can't figure out how to indent this string
 export default {
     props: {
diff --git a/packages/oc-pages/vue_shared/components/notes-wrapper.vue b/packages/oc-pages/vue_shared/components/notes-wrapper.vue
index db15e3fc..3cd336ce 100644
--- a/packages/oc-pages/vue_shared/components/notes-wrapper.vue
+++ b/packages/oc-pages/vue_shared/components/notes-wrapper.vue
@@ -1,8 +1,8 @@
 <script>
 import {mapMutations, mapActions, mapGetters} from 'vuex'
-import {compatibilityMountNotesApp} from 'oc/vue_shared/compat'
-import {sleep} from 'oc/vue_shared/client_utils/misc'
-import {countComments} from 'oc/vue_shared/client_utils/comments'
+import {compatibilityMountNotesApp} from 'oc_vue_shared/compat'
+import {sleep} from 'oc_vue_shared/client_utils/misc'
+import {countComments} from 'oc_vue_shared/client_utils/comments'
 
 const TEXT_HTML = 'text/html' // my editor can't figure out how to indent this string
 const POLL_PERIOD = 1000
diff --git a/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue b/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue
index 2e57627a..6ddd00c8 100644
--- a/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue
+++ b/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue
@@ -11,10 +11,10 @@ import OcList from '../../../project_overview/components/shared/oc_list.vue';
 import OcListResource from '../../../project_overview/components/shared/oc_list_resource.vue';
 import OcTemplateHeader from '../../../project_overview/components/shared/oc_template_header.vue';
 import TemplateButtons from '../../../project_overview/components/template/template_buttons.vue';
-import OcTab from 'oc/vue_shared/components/oc/oc-tab.vue'
+import OcTab from 'oc_vue_shared/components/oc/oc-tab.vue'
 import { cloudProviderFriendlyName, slugify } from '../../util.mjs'
 import { deleteDeploymentTemplate } from '../../../project_overview/store/modules/deployment_template_updates'
-import {bus} from 'oc/vue_shared/bus'
+import {bus} from 'oc_vue_shared/bus'
 
 console.assert(OcTab)
 
diff --git a/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue b/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue
index af3e7011..8147db49 100644
--- a/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue
+++ b/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue
@@ -1,7 +1,7 @@
 <script>
 import { mapGetters, mapActions } from 'vuex'
 import { Checkbox as ElCheckbox} from 'element-ui'
-import { DetectIcon } from 'oc/vue_shared/components/oc'
+import { DetectIcon } from 'oc_vue_shared/oc-components'
 
 const UNFURL_PROJECT_SUBSCRIPTIONS = 'UNFURL_PROJECT_SUBSCRIPTIONS'
 
diff --git a/packages/oc-pages/vue_shared/components/oc/environment-selection.vue b/packages/oc-pages/vue_shared/components/oc/environment-selection.vue
index 52d59a6b..4521dd35 100644
--- a/packages/oc-pages/vue_shared/components/oc/environment-selection.vue
+++ b/packages/oc-pages/vue_shared/components/oc/environment-selection.vue
@@ -1,8 +1,8 @@
 <script>
 import {GlDropdown, GlDropdownItem, GlDropdownDivider} from '@gitlab/ui'
-import {ErrorSmall, DetectIcon} from 'oc/vue_shared/components/oc'
+import {ErrorSmall, DetectIcon} from 'oc_vue_shared/oc-components'
 import {mapGetters} from 'vuex'
-import {fetchAvailableProviderDashboards} from 'oc/vue_shared/client_utils/environments'
+import {fetchAvailableProviderDashboards} from 'oc_vue_shared/client_utils/environments'
 
 const DEPLOY_INTO_ENV_MIN_ACCESS = 30
 
diff --git a/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue b/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue
index a502cc0e..17a747a1 100644
--- a/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue
+++ b/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue
@@ -1,7 +1,7 @@
 <script>
 import {CONFIGURABLE_HIDDEN_OPTIONS, lookupKey, setLocalStorageKey, clearSettings} from '../../storage-keys'
 import {GlButton, GlIcon, GlModal} from '@gitlab/ui'
-import {Card as ElCard, Input as ElInput, Button as ElButton} from 'element-ui'
+import {Card as ElCard, Input as ElInput} from 'element-ui'
 import ErrorSmall from './ErrorSmall.vue'
 import {mapGetters} from 'vuex'
 export default {
@@ -22,38 +22,6 @@ export default {
             this.yPos = y + 'px'
             this.xPos = x + 'px'
         },
-        downloadState() {
-            const link = document.createElement('A')
-            const location = window.location.pathname + window.location.search
-            const state = this.$store.state
-            const contents = JSON.stringify({location, state})
-            const file = new Blob([contents], {type: 'application/json'})
-            link.href = URL.createObjectURL(file)
-            link.download = encodeURIComponent(location.slice(1)) + '.json'
-            link.click()
-            URL.revokeObjectURL(link.href)
-        },
-        uploadState() {
-            const input = document.createElement('INPUT')
-            input.setAttribute('type', 'file')
-            input.setAttribute('accept', 'application/json')
-            input.click() 
-            input.addEventListener('change', () => {
-                try {
-                    input.files[0].text().then(text => {
-                            const {location, state} = JSON.parse(text)
-                            //location = '/' + decodeURIComponent(location)
-                            const dest = new URL(window.location.href)
-                            const [pathname, query] = location.split('?')
-                            dest.pathname = pathname || ''
-                            dest.search = query || ''
-                            sessionStorage['unfurl-gui:state'] = JSON.stringify(state)
-                            window.location.href = dest.toString()
-                    })
-                }
-                catch(e) { console.error(e) }
-            })
-        },
         lookupKey,
         setLocalStorageKey,
         clearSettings,
@@ -118,13 +86,6 @@ export default {
                     <template slot="prepend"><span style="font-size: 12px;" class="text-monospace">{{option.label}}</span></template>
                 </el-input>
                 <error-small :condition="changed" message="Changes will be reflected after page refresh" />
-
-                <div class="d-flex justify-content-end mt-4">
-                    <el-button @click="downloadState" type="text" icon="el-icon-download"> Download app state </el-button>
-                    <div class="border-right mr-2 ml-2" />
-                    <el-button @click="uploadState" type="text" icon="el-icon-upload2"> Upload app state </el-button>
-                </div>
-
             </el-card>
         </gl-modal>
         <div class="position-fixed" style=" z-index: 1000; pointer-events: none;" :style="{left: xPos, top: yPos}">
diff --git a/packages/oc-pages/vue_shared/components/oc/import-link.vue b/packages/oc-pages/vue_shared/components/oc/import-link.vue
index 57844c78..265407ca 100644
--- a/packages/oc-pages/vue_shared/components/oc/import-link.vue
+++ b/packages/oc-pages/vue_shared/components/oc/import-link.vue
@@ -1,6 +1,6 @@
 <script>
 import {mapGetters} from 'vuex'
-import {DetectIcon} from 'oc/vue_shared/components/oc'
+import {DetectIcon} from 'oc_vue_shared/oc-components'
 import {Tooltip as ElTooltip} from 'element-ui'
 
 export default {
diff --git a/packages/oc-pages/vue_shared/components/oc/index.js b/packages/oc-pages/vue_shared/components/oc/index.js
deleted file mode 100644
index 2ef11a14..00000000
--- a/packages/oc-pages/vue_shared/components/oc/index.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import Vue from 'vue';
-
-export {default as DetectIcon} from 'oc/vue_shared/components/oc/detect-icon.vue'
-export {default as StatusIcon} from 'oc/vue_shared/components/oc/Status.vue'
-export {default as ProjectIcon} from 'oc/vue_shared/components/oc/project-icon.vue'
-export {default as Status} from 'oc/vue_shared/components/oc/Status.vue'
-export {default as OcPropertiesList} from 'oc/vue_shared/components/oc/oc-properties-list.vue'
-export {default as DeploymentResources} from 'oc/vue_shared/components/oc/deployment-resources.vue'
-export {default as OcTab} from 'oc/vue_shared/components/oc/oc-tab.vue'
-export {default as GitHubRepos} from 'oc/vue_shared/components/oc/github-repos.vue'
-export {default as ErrorSmall} from 'oc/vue_shared/components/oc/ErrorSmall.vue'
-export {default as EmptyStateJob} from 'oc/vue_shared/components/oc/empty-state-job.vue'
-export {default as EnvironmentSelection} from 'oc/vue_shared/components/oc/environment-selection.vue'
-export {default as DeploymentScheduler} from 'oc/vue_shared/components/oc/deployment-scheduler.vue'
-export {default as IncrementalDeploymentSwitch} from 'oc/vue_shared/components/oc/incremental-deployment-switch.vue'
-export {default as LocalDeploy} from 'oc/vue_shared/components/oc/local-deploy.vue'
-export {default as CodeClipboard} from 'oc/vue_shared/components/oc/code-clipboard.vue'
-export {default as UnfurlGuiErrors} from 'oc/vue_shared/components/oc/ufgui-errors.vue'
-export {default as ExperimentalSettingsIndicator} from 'oc/vue_shared/components/oc/experimental-settings-indicator.vue'
-
-export let CiVariableSettings, createCiVariablesStore
-import {notFoundError, removeNotFoundError} from 'oc/vue_shared/client_utils/error.js'
-export const PageNotFound = Vue.component("page-not-found", {
-  template: "",
-  created() {
-    notFoundError()
-  },
-  unmounted() {
-    removeNotFoundError()
-  }
-})
-export const SignIn = Vue.component("sign-in", { template: "", })
-// #!if false
-import _CiVariableSettings from 'oc/vue_shared/oc_ci_variable_list/components/ci_variable_settings.vue'
-// #!if false
-import {asModule} from 'oc/vue_shared/oc_ci_variable_list/store'
-// #!if false
-CiVariableSettings = _CiVariableSettings; createCiVariablesStore = asModule
-
-
diff --git a/packages/oc-pages/vue_shared/components/oc/local-deploy.vue b/packages/oc-pages/vue_shared/components/oc/local-deploy.vue
index 5711ad6c..81f0060c 100644
--- a/packages/oc-pages/vue_shared/components/oc/local-deploy.vue
+++ b/packages/oc-pages/vue_shared/components/oc/local-deploy.vue
@@ -2,9 +2,9 @@
 import CodeClipboard from './code-clipboard.vue'
 import {GlLoadingIcon} from '@gitlab/ui'
 import {mapGetters, mapActions} from 'vuex'
-import {cloneProject, cloneBlueprint} from 'oc/vue_shared/client_utils/unfurl-invocations'
-import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars'
-import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects'
+import {cloneProject, cloneBlueprint} from 'oc_vue_shared/client_utils/unfurl-invocations'
+import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars'
+import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects'
 
 const protocol = window.location.protocol
 let server  = window.location.hostname
diff --git a/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue b/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue
index 115cdecb..d6e92ddc 100644
--- a/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue
+++ b/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue
@@ -1,7 +1,7 @@
 <script>
 import {mapGetters} from 'vuex'
 import {GlIcon} from '@gitlab/ui'
-import {DetectIcon, Status} from 'oc/vue_shared/components/oc'
+import {DetectIcon, Status} from 'oc_vue_shared/oc-components'
 import {JSONView} from 'vue-json-component'
 import Redacted from './redacted.vue'
 
@@ -9,15 +9,13 @@ export default {
     name: 'OcPropertiesList',
     components: {GlIcon, Status, 'json-view': JSONView, Redacted, DetectIcon},
     data() {
-        return {expanded: !this.startCollapsed}
+        return {expanded: true}
     },
     props: {
         card: {
             type: Object,
             required: false
         },
-        startCollapsed: Boolean,
-        fullWidth: Boolean,
         properties: {
             type: Array,
             required: false,
@@ -28,8 +26,7 @@ export default {
         },
         header: String,
         property: String,
-        containerStyle: [Object, String],
-        headerStyle: [Object, String]
+        containerStyle: Object
     },
     computed: {
         ...mapGetters([
@@ -84,6 +81,7 @@ export default {
             return property.sensitive
         },
         tableSizingHack() {
+            // TODO use CSS grid instead
             this.$nextTick(() => {
                 try {
                     const headerWidth = this.$refs.header?.clientWidth
@@ -91,7 +89,7 @@ export default {
                     if(!(headerWidth && nameColumnWdith)) return
                     this.$refs.transitionTarget.style.width = headerWidth + 'px'
                     this.$refs.transitionTarget.querySelectorAll('td.value-column').forEach(cell => {
-                        cell.style.width = (headerWidth - nameColumnWdith) + 'px'
+                        cell.style.width = (headerWidth - nameColumnWdith - 30) + 'px'
                     })
                     this.$refs.transitionTarget.style.tableLayout = 'fixed'
                 } catch(e) {console.error(e)}
@@ -113,7 +111,7 @@ export default {
 <template>
     <div style="max-width: 100%; overflow-x: auto;">
         <div :style="containerStyle" class="properties-list-container">
-            <div @click="toggleExpanded" v-if="header" class="header" :style="headerStyle" ref="header">
+            <div @click="toggleExpanded" v-if="header" class="header" ref="header">
                 <slot name="header-text">
                     <div>{{header}}</div>
                 </slot>
@@ -122,7 +120,7 @@ export default {
                     <gl-icon v-if="_properties.length" :name="expanded? 'chevron-down': 'chevron-left'" :size="18"></gl-icon>
                 </div>
             </div>
-            <table ref="transitionTarget" class="properties-list-inner" :style="{display: startCollapsed && !expanded? 'none': 'table'}" style="width: 100%;">
+            <table ref="transitionTarget" class="properties-list-inner" style="display: table; width: 100%;">
                 <tr style="display: table-row" class="properties-list-item" v-for="property in _properties" :key="property.name">
                     <td class="name-column">{{formatName(property)}}</td>
                     <td :style="property.valueStyle" class="value-column">
@@ -191,9 +189,6 @@ export default {
     margin: -1px;
     min-width: min(100%, 22em);
 }
-.name-column {
-    text-transform: capitalize;
-}
 .name-column, .value-column {
     padding: 0.75em;
     border-width: 1px;
@@ -221,8 +216,6 @@ export default {
     font-size: 1.25em;
     display: flex;
     justify-content: space-between;
-    user-select: none;
-    cursor: pointer;
 }
 
 .gl-dark .header {
diff --git a/packages/oc-pages/vue_shared/components/oc/plugin.js b/packages/oc-pages/vue_shared/components/oc/plugin.js
deleted file mode 100644
index a29dad5c..00000000
--- a/packages/oc-pages/vue_shared/components/oc/plugin.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import {
-    OcPropertiesList,
-    StatusIcon,
-    ProjectIcon,
-    Status,
-    DeploymentResources,
-    OcTab,
-    GitHubRepos,
-    ErrorSmall,
-    EmptyStateJob,
-    EnvironmentSelection,
-    DeploymentScheduler,
-    IncrementalDeploymentSwitch,
-    LocalDeploy,
-    CodeClipboard,
-    CiVariableSettings,
-    SignIn,
-    PageNotFound,
-    UnfurlGuiErrors,
-    ExperimentalSettingsIndicator
-} from './index'
-
-export const OcComponents = {
-    install(app, options) {
-        app.component('oc-properties-list', OcPropertiesList)
-        app.component('oc-status-icon', StatusIcon)
-        app.component('oc-project-icon', ProjectIcon)
-        app.component('oc-status', Status)
-        app.component('oc-deployment-resources', DeploymentResources)
-        app.component('oc-tab', OcTab)
-        app.component('oc-github-repos', GitHubRepos)
-        app.component('oc-error-small', ErrorSmall)
-        app.component('oc-empty-state-job', EmptyStateJob)
-        app.component('oc-environment-selection', EnvironmentSelection)
-        app.component('oc-deployment-scheduler', DeploymentScheduler)
-        app.component('oc-incremental-deployment-switch', IncrementalDeploymentSwitch)
-        app.component('oc-local-deploy', LocalDeploy)
-        app.component('oc-code-clipboard', CodeClipboard)
-        app.component('oc-ci-variable-settings', CiVariableSettings)
-        app.component('oc-sign-in', SignIn)
-        app.component('oc-404', PageNotFound)
-        app.component('oc-unfurl-gui-errors', UnfurlGuiErrors)
-        app.component('oc-experimental-settings-indicator', ExperimentalSettingsIndicator)
-    }
-}
diff --git a/packages/oc-pages/vue_shared/components/oc/table_list_row.vue b/packages/oc-pages/vue_shared/components/oc/table_list_row.vue
index 3301f429..149ca4a9 100644
--- a/packages/oc-pages/vue_shared/components/oc/table_list_row.vue
+++ b/packages/oc-pages/vue_shared/components/oc/table_list_row.vue
@@ -1,6 +1,6 @@
 <script>
 import { GlIcon , GlButton, GlModalDirective } from "@gitlab/ui";
-import { bus } from 'oc/vue_shared/bus';
+import { bus } from 'oc_vue_shared/bus';
 import { mapGetters } from 'vuex';
 
 import { __ } from '~/locale';
diff --git a/packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue b/packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue
deleted file mode 100644
index 70638f1f..00000000
--- a/packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<script>
-import Vue from 'vue'
-import {mapGetters, mapMutations} from 'vuex'
-import {defaultSeverityLevel} from '../../storage-keys'
-import {GlAlert, GlTabs, GlPagination} from '@gitlab/ui'
-
-const ERROR_LEVELS = ['minor', 'major', 'critical']
-
-const PER_PAGE = 5
-export default {
-    name: 'UnfurlGuiErrors',
-    components: {
-        GlAlert, GlTabs, GlPagination
-    },
-    data() {
-        const headerElement = document.querySelector('[data-qa-selector="navbar"]')
-        const {y, height} = headerElement.getBoundingClientRect()
-        return {
-            currentTab: ERROR_LEVELS.indexOf(defaultSeverityLevel()),
-            defaultSeverityLevel: defaultSeverityLevel(),
-            page: 1,
-            PER_PAGE,
-            headerElementPos: y + height
-        }
-    },
-    computed: {
-        ...mapGetters(['errors', 'errorsBySeverity', 'scrollTop']),
-        presentableErrors() {
-            return this.errorsBySeverity(ERROR_LEVELS[this.currentTab]) || []
-        },
-        minorCount() { return this.errorsBySeverity('minor').length },
-        majorCount() { return this.errorsBySeverity('major').length },
-        criticalCount() { return this.errorsBySeverity('critical').length },
-        defaultErrorCount() { return this.errorsBySeverity(this.defaultSeverityLevel).length },
-        errorsOnPage() {
-            return this.presentableErrors.slice((this.page - 1) * this.PER_PAGE, this.page * this.PER_PAGE)
-        }
-
-    },
-    watch: {
-        currentTab() {
-            this.page = 1
-        },
-        scrollTop: {
-            immediate: true,
-            handler(val) {
-                try {
-                    this.$refs.container.style.top = Math.min(val, this.headerElementPos) + 'px'
-                } catch(e) {}
-            }
-        },
-    },
-    methods: {
-        ...mapMutations(['clearErrors']),
-    },
-}
-</script>
-<template>
-    <div ref="container" style="position: sticky; top: 0px; z-index: 999;">
-        <gl-alert @dismiss="clearErrors" variant="danger" v-if="defaultErrorCount > 0">
-            <gl-tabs v-if="defaultErrorCount > 1 && defaultErrorCount != errors.length" v-model="currentTab" style="margin-bottom: -24px" >
-                <oc-tab title="All" v-if="minorCount > majorCount" :title-count="minorCount" />
-                <oc-tab v-if="majorCount > criticalCount" title="Major" :title-count="majorCount" />
-                <oc-tab v-if="criticalCount" title="Critical" :title-count="criticalCount" />
-            </gl-tabs>
-            <oc-properties-list
-                v-for="error in errorsOnPage"
-                :key="error.time"
-                :header="`${error.message}`"
-                :properties="Object.entries(error).map(([name, value]) => ({name, value}))"
-                container-style="width: 100%"
-                start-collapsed
-            />
-            <gl-pagination v-if="presentableErrors.length > PER_PAGE" v-model="page" :per-page=PER_PAGE :total-items="presentableErrors.length" />
-        </gl-alert >
-        <div v-else />
-    </div>
-    
-</template>
diff --git a/packages/oc-pages/vue_shared/oc-components.js b/packages/oc-pages/vue_shared/oc-components.js
new file mode 100644
index 00000000..2c297880
--- /dev/null
+++ b/packages/oc-pages/vue_shared/oc-components.js
@@ -0,0 +1,37 @@
+import Vue from 'vue';
+
+export { default as DetectIcon } from './components/oc/detect-icon.vue'
+export { default as StatusIcon } from './components/oc/Status.vue'
+export { default as ProjectIcon } from './components/oc/project-icon.vue'
+export { default as Status } from './components/oc/Status.vue'
+export {default as OcPropertiesList} from './components/oc/oc-properties-list.vue'
+export {default as DeploymentResources} from './components/oc/deployment-resources.vue'
+export {default as OcTab} from './components/oc/oc-tab.vue'
+export {default as GitHubRepos} from './components/oc/github-repos.vue'
+export {default as ErrorSmall} from './components/oc/ErrorSmall.vue'
+export {default as EmptyStateJob} from './components/oc/empty-state-job.vue'
+export {default as EnvironmentSelection} from './components/oc/environment-selection.vue'
+export {default as DeploymentScheduler} from './components/oc/deployment-scheduler.vue'
+export {default as IncrementalDeploymentSwitch} from './components/oc/incremental-deployment-switch.vue'
+export {default as LocalDeploy} from './components/oc/local-deploy.vue'
+export {default as CodeClipboard} from './components/oc/code-clipboard.vue'
+
+export let CiVariableSettings, createCiVariablesStore
+import {notFoundError, removeNotFoundError} from 'oc_vue_shared/client_utils/error'
+export const PageNotFound = Vue.component("page-not-found", {
+  template: "",
+  created() {
+    notFoundError()
+  },
+  unmounted() {
+    removeNotFoundError()
+  }
+})
+export const SignIn = Vue.component("sign-in", { template: "", })
+// #!if false
+import _CiVariableSettings from './oc_ci_variable_list/components/ci_variable_settings.vue'
+// #!if false
+import {asModule} from './oc_ci_variable_list/store'
+// #!if false
+CiVariableSettings = _CiVariableSettings; createCiVariablesStore = asModule
+
diff --git a/packages/oc-pages/vue_shared/storage-keys.js b/packages/oc-pages/vue_shared/storage-keys.js
index 17e3da48..57245901 100644
--- a/packages/oc-pages/vue_shared/storage-keys.js
+++ b/packages/oc-pages/vue_shared/storage-keys.js
@@ -6,10 +6,7 @@ export const HIDDEN_OPTION_KEYS = {
     encodedPasswordExportUrls: 'encoded-password-export-urls',
     unfurlServerUrl: 'unfurl-server-url',
     connectWithoutCopy: 'connect-without-copy',
-    sendLatestCommit: 'always-send-latest-commit',
-    uploadStateBreakpoint: 'upload-state-breakpoint',
-    preserveImportedVuexState: 'preserveImportedVuexState',
-    defaultSeverityLevel: 'defaultSeverityLevel'
+    sendLatestCommit: 'always-send-latest-commit'
 }
 
 export const CONFIGURABLE_HIDDEN_OPTIONS = [
@@ -17,9 +14,6 @@ export const CONFIGURABLE_HIDDEN_OPTIONS = [
     { key: 'encodedPasswordExportUrls', label: 'Encode Passwords in URL', placeholder: 'false' },
     { key: 'connectWithoutCopy', label: 'Connect External Without Copy', placeholder: 'false' },
     { key: 'sendLatestCommit', label: 'Latest Commit for UFSV URL', placeholder: 'false' },
-    { key: 'uploadStateBreakpoint', label: 'Replace Vuex State at X', placeholder: 'loadDashboard' },
-    { key: 'preserveImportedVuexState', label: "Load Vuex from file onreload", placeholder: 'false' },
-    { key: 'defaultSeverityLevel', label: "Show Errors of at least X Severity", placeholder: 'minor, [major], critical' },
 ]
 
 function isTruthyStorageValue(value) {
@@ -79,22 +73,9 @@ export function alwaysSendLatestCommit() {
     return lookupKey( HIDDEN_OPTION_KEYS.sendLatestCommit )
 }
 
-export function defaultSeverityLevel() {
-    return lookupKey( HIDDEN_OPTION_KEYS.defaultSeverityLevel ) || 'major'
-}
-
-export function useImportedStateOnBreakpointOrElse(breakpointName, cb) {
-    const newState = sessionStorage['unfurl-gui:state']
-    if(newState && [lookupKey('uploadStateBreakpoint'), 'loadDashboard'].includes(breakpointName)) {
-        window.$store.replaceState({...window.$store.state, ...JSON.parse(newState)})
-        if(!lookupKey('preserveImportedVuexState')) delete sessionStorage['unfurl-gui:state']
-    } else {return cb()}
-
-}
 export const XHR_JAIL_URL = '/oc/assets/-/crossorigin-xhr.html'
 export const DEFAULT_UNFURL_SERVER_URL = '/services/unfurl-server'
 
-
 window.lsHiddenOptions = function() {
     for(const opt of Object.values(HIDDEN_OPTION_KEYS)) console.log(opt)
 }
diff --git a/packages/oc-pages/vue_shared/store_modules/errors.js b/packages/oc-pages/vue_shared/store_modules/errors.js
deleted file mode 100644
index eb6bca30..00000000
--- a/packages/oc-pages/vue_shared/store_modules/errors.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import Vue from 'vue'
-import _ from 'lodash'
-const ERROR_LEVELS = ['minor', 'major', 'critical']
-function stateFn() {
-    return {
-        errors: [],
-        errorsClearedTo: 0,
-    }
-}
-
-const state = stateFn()
-
-const mutations = {
-    createError(state, {severity, message, context, ...optional}) {
-        const now = new Date(Date.now())
-        
-        state.errors.push({
-            severity: severity || 'major',
-            message,
-            context: context?.constructor?.name == 'Error'? context.message: _.cloneDeep(context),
-            ...optional,
-            time: now.toISOString()
-        })
-    },
-    clearErrors(state) {
-        Vue.set(state, 'errorsClearedTo', state.errors.length)
-    }
-}
-
-const actions = {
-}
-
-const getters = {
-    errors(state) {return state.errors.slice(state.errorsClearedTo)},
-    errorsBySeverity(_, getters) {
-        return function(severity) {
-            return getters.errors.filter(e => ERROR_LEVELS.indexOf(e.severity) >= ERROR_LEVELS.indexOf(severity))
-        }
-    },
-    hasCriticalErrors(_, getters) {
-        return getters.errorsBySeverity('critical').length > 0
-    }
-}
-
-export default {state, mutations, actions, getters}
-- 
GitLab