toga-ai 1.0.830 → 1.0.832
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/knowledge/1.0/apps/dbchanges/INDEX.md +1 -1
- package/knowledge/1.0/apps/dbchanges/workflows/authoring-and-shipping-sql-files.md +114 -43
- package/knowledge/1.0/apps/library/INDEX.md +22 -23
- package/knowledge/1.0/apps/library/architecture.md +52 -25
- package/knowledge/1.0/apps/library/features/address-validation-gateway.md +53 -19
- package/knowledge/1.0/apps/library/features/app-class-placement-base-contracts.md +33 -19
- package/knowledge/1.0/apps/library/features/app-sso-initiation.md +75 -38
- package/knowledge/1.0/apps/library/features/cron-execution-monitoring.md +90 -24
- package/knowledge/1.0/apps/library/features/diagnostic-dialog-view-recommended-services.md +67 -33
- package/knowledge/1.0/apps/library/features/elite-freshservice-sync.md +71 -43
- package/knowledge/1.0/apps/library/features/email-queue-attachments.md +84 -34
- package/knowledge/1.0/apps/library/features/email-templates.md +84 -35
- package/knowledge/1.0/apps/library/features/email-test-mode-and-write-free-sends.md +98 -37
- package/knowledge/1.0/apps/library/features/error-capture-1-0.md +271 -57
- package/knowledge/1.0/apps/library/features/http-500-error-monitor.md +117 -33
- package/knowledge/1.0/apps/library/features/mvc-page-pattern-and-app-skeleton.md +42 -21
- package/knowledge/1.0/apps/library/features/netsuite-filecabinet-restlet.md +87 -29
- package/knowledge/1.0/apps/library/features/netsuite-item-assettype-sync.md +142 -58
- package/knowledge/1.0/apps/library/features/netsuite-item-class-sync.md +97 -32
- package/knowledge/1.0/apps/library/features/netsuite-item-isfulfillable-sync.md +147 -39
- package/knowledge/1.0/apps/library/features/netsuite-suiteql-api-reference.md +381 -116
- package/knowledge/1.0/apps/library/features/netsuite-suiteql-rest-shim.md +451 -71
- package/knowledge/1.0/apps/library/features/netsuite-sync-alert-monitor.md +104 -25
- package/knowledge/1.0/apps/library/features/startech-pcmaticb2b-sync.md +56 -24
- package/knowledge/1.0/apps/library/features/toga2-api-client-and-bridge.md +489 -97
- package/knowledge/1.0/apps/store/INDEX.md +2 -2
- package/knowledge/1.0/apps/store/architecture.md +33 -13
- package/knowledge/1.0/apps/store/features/saml-sso-certificate-and-keys.md +116 -31
- package/knowledge/1.0/apps/test/INDEX.md +16 -16
- package/knowledge/1.0/apps/test/architecture.md +38 -15
- package/knowledge/1.0/apps/test/features/2-0-deployment-client-sql.md +17 -11
- package/knowledge/1.0/apps/test/features/active-directory-auth-test.md +12 -8
- package/knowledge/1.0/apps/test/features/compass-retrofix2-sql-generator.md +63 -39
- package/knowledge/1.0/apps/test/features/create-elastic-beanstalk.md +49 -22
- package/knowledge/1.0/apps/test/features/dev-generators.md +17 -12
- package/knowledge/1.0/apps/test/features/forecast-netsuite-discrepancy-analysis.md +20 -11
- package/knowledge/1.0/apps/test/features/github-audit-script.md +31 -13
- package/knowledge/1.0/apps/test/features/goagilant-to-togatech-email-migration.md +63 -28
- package/knowledge/1.0/apps/test/features/static-no-db-regression-harness.md +99 -44
- package/knowledge/1.0/apps/test/features/tableview-builder.md +17 -10
- package/knowledge/1.0/apps/test/features/talos-kb-pipeline.md +84 -38
- package/knowledge/1.0/apps/test/features/toga2-client-onboarding-sql.md +43 -17
- package/knowledge/1.0/apps/test/features/toga2-onboarding-wizard.md +66 -29
- package/knowledge/1.0/apps/test/features/toga2-user-cross-client-access-sql.md +16 -11
- package/knowledge/1.0/apps/test/features/url-domain-markdown-document.md +16 -10
- package/knowledge/1.0/apps/toga/INDEX.md +2 -2
- package/knowledge/1.0/apps/toga/features/bundleconfirmation-cart-preservation.md +23 -11
- package/knowledge/1.0/apps/toga/features/odp-customer-search-loyalty-persistence.md +57 -19
- package/knowledge/1.0/apps/togadesk/INDEX.md +12 -12
- package/knowledge/1.0/apps/togadesk/architecture.md +121 -44
- package/knowledge/1.0/apps/togadesk/features/email-to-ticket-intake.md +123 -42
- package/knowledge/1.0/apps/togadesk/features/field-service-dispatch.md +127 -37
- package/knowledge/1.0/apps/togadesk/features/managed-service-order-create.md +128 -37
- package/knowledge/1.0/apps/togadesk/features/notifications.md +63 -18
- package/knowledge/1.0/apps/togadesk/features/per-client-host-restriction.md +107 -26
- package/knowledge/1.0/apps/togadesk/features/rest-api.md +42 -27
- package/knowledge/1.0/apps/togadesk/features/smb-contract-editing.md +39 -23
- package/knowledge/1.0/apps/togadesk/features/staff-login-authentication.md +58 -22
- package/knowledge/1.0/apps/togadesk/features/ticket-lifecycle.md +120 -38
- package/knowledge/1.0/apps/togadesk/workflows/production-revert-forward.md +35 -21
- package/knowledge/1.0/apps/togadesk/workflows/standalone-test-scripts.md +42 -15
- package/knowledge/1.0/apps/togaview/INDEX.md +7 -7
- package/knowledge/1.0/apps/togaview/architecture.md +127 -45
- package/knowledge/1.0/apps/togaview/features/login-flows.md +142 -42
- package/knowledge/1.0/apps/togaview/features/msp-dashboard.md +37 -16
- package/knowledge/1.0/apps/togaview/features/retail-commerce-lifecycle.md +43 -25
- package/knowledge/1.0/apps/togaview/features/ticket-detail-page.md +134 -38
- package/knowledge/1.0/apps/togaview/workflows/git-and-php-tooling-under-the-underscore-app-root.md +26 -15
- package/knowledge/1.0/apps/togaview/workflows/route53-cross-account-zone-migration.md +42 -16
- package/knowledge/1.0/apps/tools/INDEX.md +17 -17
- package/knowledge/1.0/apps/tools/architecture.md +180 -28
- package/knowledge/1.0/apps/tools/features/clickup-label-aliases-admin.md +78 -35
- package/knowledge/1.0/apps/tools/features/clickup-sprint-dashboard.md +209 -49
- package/knowledge/1.0/apps/tools/features/cloudfront-client-setup.md +125 -36
- package/knowledge/1.0/apps/tools/features/compass-user-persona-admin.md +37 -0
- package/knowledge/1.0/apps/tools/features/design-demo-admin.md +150 -45
- package/knowledge/1.0/apps/tools/features/developer-tools.md +28 -15
- package/knowledge/1.0/apps/tools/features/errors-curation-console.md +345 -85
- package/knowledge/1.0/apps/tools/features/github-audit.md +124 -35
- package/knowledge/1.0/apps/tools/features/legacy-email-notifier.md +80 -26
- package/knowledge/1.0/apps/tools/features/mvc-data-access-patterns.md +151 -62
- package/knowledge/1.0/apps/tools/features/oneuptime-monitor-status-panel.md +243 -52
- package/knowledge/1.0/apps/tools/features/persona-gated-navigation.md +45 -21
- package/knowledge/1.0/apps/tools/features/saml-sso-auth.md +156 -50
- package/knowledge/1.0/apps/tools/features/talos-kb-documents-admin.md +422 -82
- package/knowledge/1.0/apps/tools/features/talos-pricing-ui.md +77 -30
- package/knowledge/1.0/apps/tools/features/theme-light-dark.md +130 -44
- package/knowledge/1.0/apps/tools/workflows/deploy-to-elastic-beanstalk-al2023.md +233 -55
- package/knowledge/1.0/apps/walmarttechservices/INDEX.md +1 -1
- package/knowledge/1.0/apps/walmarttechservices/architecture.md +81 -32
- package/knowledge/1.0/apps/webhook/INDEX.md +1 -1
- package/knowledge/1.0/apps/webhook/features/netsuite-clickup-opportunity-sync.md +174 -51
- package/knowledge/1.0/apps/worker/INDEX.md +19 -19
- package/knowledge/1.0/apps/worker/architecture.md +166 -64
- package/knowledge/1.0/apps/worker/features/canon-received-po-netsuite-order-sync.md +12 -10
- package/knowledge/1.0/apps/worker/features/compass-ma-sales-order-exception-report.md +27 -10
- package/knowledge/1.0/apps/worker/features/compass-manager-approval-reminder-emails.md +11 -11
- package/knowledge/1.0/apps/worker/features/compass-partial-in-transit-delivered-emails.md +72 -9
- package/knowledge/1.0/apps/worker/features/elite-togadesk-attachment-sync.md +9 -16
- package/knowledge/1.0/apps/worker/features/forecast2-netsuite-reconciliation.md +212 -10
- package/knowledge/1.0/apps/worker/features/forecast2-supporting-records-import.md +24 -13
- package/knowledge/1.0/apps/worker/features/netsuite-sales-order-sales-rep-sourcing.md +9 -8
- package/knowledge/1.0/apps/worker/features/netsuite-togasupply-per-client-sync.md +489 -88
- package/knowledge/1.0/apps/worker/features/oneuptime-server-monitor-host-hygiene.md +15 -12
- package/knowledge/1.0/apps/worker/features/oneuptime-worker-uptime-monitoring.md +16 -14
- package/knowledge/1.0/apps/worker/features/send-shipments-for-the-day.md +7 -11
- package/knowledge/1.0/apps/worker/features/staples-cxml-order-import.md +11 -11
- package/knowledge/1.0/apps/worker/workflows/diagnosing-frozen-cron-checkins.md +70 -23
- package/knowledge/1.0/apps/worker/workflows/isfulfillable-multi-client-backfill.md +82 -26
- package/knowledge/1.0/apps/worker/workflows/netsuite-duplicate-items-dedup.md +111 -28
- package/knowledge/1.0/apps/worker/workflows/onboarding-client-to-netsuite-togasupply-sync.md +173 -41
- package/knowledge/1.0/apps/worker/workflows/tracing-a-worker-cron-run-in-production.md +184 -63
- package/knowledge/1.0/standards/backend-php.md +343 -181
- package/knowledge/1.0/standards/framework-rules.md +52 -25
- package/knowledge/1.0/standards/frontend.md +92 -30
- package/knowledge/2.0/apps/_underscore/INDEX.md +61 -62
- package/knowledge/2.0/apps/_underscore/architecture/surface-authoring-proposal.md +1 -3
- package/knowledge/2.0/apps/_underscore/architecture.md +14 -4
- package/knowledge/2.0/apps/_underscore/features/acl-permission-chain.md +285 -78
- package/knowledge/2.0/apps/_underscore/features/address-uniqueness-normalization.md +67 -34
- package/knowledge/2.0/apps/_underscore/features/address-validation.md +130 -55
- package/knowledge/2.0/apps/_underscore/features/apirequest-json-content-type.md +47 -9
- package/knowledge/2.0/apps/_underscore/features/assortment-name-translation.md +63 -19
- package/knowledge/2.0/apps/_underscore/features/async-query-execution.md +86 -37
- package/knowledge/2.0/apps/_underscore/features/autoincrement-record-numbering.md +72 -22
- package/knowledge/2.0/apps/_underscore/features/calculated-column-filter-options.md +11 -11
- package/knowledge/2.0/apps/_underscore/features/calculated-sql-fields.md +90 -20
- package/knowledge/2.0/apps/_underscore/features/carrier-shipping-labels.md +86 -22
- package/knowledge/2.0/apps/_underscore/features/cli-script-bootstrap.md +13 -5
- package/knowledge/2.0/apps/_underscore/features/cloud-s3-helpers.md +60 -21
- package/knowledge/2.0/apps/_underscore/features/cloud-secrets-manager.md +43 -19
- package/knowledge/2.0/apps/_underscore/features/component-model-namespace-registration.md +37 -14
- package/knowledge/2.0/apps/_underscore/features/config-group-access.md +30 -16
- package/knowledge/2.0/apps/_underscore/features/core-domains-app-host-registry.md +19 -16
- package/knowledge/2.0/apps/_underscore/features/database-alias-repointing.md +33 -13
- package/knowledge/2.0/apps/_underscore/features/effective-persona-resolution.md +9 -9
- package/knowledge/2.0/apps/_underscore/features/email-send-pipeline.md +69 -15
- package/knowledge/2.0/apps/_underscore/features/email-template-sending.md +102 -28
- package/knowledge/2.0/apps/_underscore/features/error-reporting-issue-event.md +317 -117
- package/knowledge/2.0/apps/_underscore/features/event-publish-sqs.md +8 -7
- package/knowledge/2.0/apps/_underscore/features/field-storage-row-hydration.md +14 -13
- package/knowledge/2.0/apps/_underscore/features/forecast-sale-import.md +198 -31
- package/knowledge/2.0/apps/_underscore/features/fulfillable-item-propagation.md +35 -14
- package/knowledge/2.0/apps/_underscore/features/item-classification-itemclasses.md +24 -18
- package/knowledge/2.0/apps/_underscore/features/item-fulfillment-stage-lifecycle-and-order-status.md +42 -14
- package/knowledge/2.0/apps/_underscore/features/model-interceptor-unit-testing.md +24 -13
- package/knowledge/2.0/apps/_underscore/features/model-magic-field-access.md +38 -12
- package/knowledge/2.0/apps/_underscore/features/model-save-parent-cascade-stored-field-deadlock.md +84 -36
- package/knowledge/2.0/apps/_underscore/features/model-save-vs-query-atomic-update.md +77 -28
- package/knowledge/2.0/apps/_underscore/features/netsuite-rest-client.md +307 -78
- package/knowledge/2.0/apps/_underscore/features/netsuite-salesorder-address-phone-sync.md +88 -38
- package/knowledge/2.0/apps/_underscore/features/note-record-authorship.md +51 -22
- package/knowledge/2.0/apps/_underscore/features/outbound-api-rate-budget.md +138 -40
- package/knowledge/2.0/apps/_underscore/features/page-meta-context-field-settings.md +186 -35
- package/knowledge/2.0/apps/_underscore/features/per-client-database-connections.md +238 -39
- package/knowledge/2.0/apps/_underscore/features/persona-name-translation.md +142 -44
- package/knowledge/2.0/apps/_underscore/features/record-change-audit-log.md +147 -42
- package/knowledge/2.0/apps/_underscore/features/recursive-item-fulfillments.md +163 -38
- package/knowledge/2.0/apps/_underscore/features/sales-order-denial-reason.md +299 -81
- package/knowledge/2.0/apps/_underscore/features/sales-order-po-number-sourcing.md +86 -25
- package/knowledge/2.0/apps/_underscore/features/sales-order-purchase-order-bridge-direction.md +91 -28
- package/knowledge/2.0/apps/_underscore/features/sales-order-status-filter-surface.md +82 -40
- package/knowledge/2.0/apps/_underscore/features/shipping-carriers-and-accounts.md +98 -37
- package/knowledge/2.0/apps/_underscore/features/string-html-entity-helpers.md +59 -23
- package/knowledge/2.0/apps/_underscore/features/surface-field-recordfield-binding.md +150 -54
- package/knowledge/2.0/apps/_underscore/features/surface-resolver.md +851 -209
- package/knowledge/2.0/apps/_underscore/features/tableview-hyperlink-columns.md +85 -50
- package/knowledge/2.0/apps/_underscore/features/tableview-joins.md +324 -118
- package/knowledge/2.0/apps/_underscore/features/togaiq-gateway-client.md +105 -45
- package/knowledge/2.0/apps/_underscore/features/tracking-number-bridges.md +249 -45
- package/knowledge/2.0/apps/_underscore/features/units-for-items-for-purchase-orders.md +156 -48
- package/knowledge/2.0/apps/_underscore/features/user-email-as-identity-and-password-reset.md +56 -26
- package/knowledge/2.0/apps/_underscore/features/usps-dpv-deliverability.md +53 -29
- package/knowledge/2.0/apps/_underscore/workflows/local-db-refresh-from-beta.md +99 -23
- package/knowledge/2.0/apps/_underscore/workflows/recreated-shared-branch-stale-local-remerge.md +91 -38
- package/knowledge/2.0/apps/_underscore/workflows/rotating-public-tls-certificates.md +151 -44
- package/knowledge/2.0/apps/_underscore/workflows/running-a-2.0-app-locally.md +102 -28
- package/knowledge/2.0/apps/ai-bdr/INDEX.md +13 -13
- package/knowledge/2.0/apps/ai-bdr/architecture.md +100 -31
- package/knowledge/2.0/apps/ai-bdr/features/bdr-web-funnel-plan.md +460 -128
- package/knowledge/2.0/apps/ai-bdr/features/call-orchestration.md +121 -55
- package/knowledge/2.0/apps/ai-bdr/features/campaign-chat-handoff.md +169 -68
- package/knowledge/2.0/apps/ai-bdr/features/landing-call-flow.md +188 -75
- package/knowledge/2.0/apps/ai-bdr/features/landing-chat-drawer.md +249 -78
- package/knowledge/2.0/apps/ai-bdr/features/live-call-status.md +104 -46
- package/knowledge/2.0/apps/ai-bdr/features/security-landing-page.md +266 -82
- package/knowledge/2.0/apps/ai-bdr/features/vapi-integration.md +108 -42
- package/knowledge/2.0/apps/ai-bdr/features/web-funnel-app.md +879 -213
- package/knowledge/2.0/apps/ai-bdr/features/web-funnel-content-model.md +194 -63
- package/knowledge/2.0/apps/ai-bdr/workflows/new-campaign-onboarding.md +88 -51
- package/knowledge/2.0/apps/ai-bdr/workflows/safe-call-loop-testing.md +187 -60
- package/knowledge/2.0/apps/api2/INDEX.md +26 -26
- package/knowledge/2.0/apps/api2/architecture.md +461 -91
- package/knowledge/2.0/apps/api2/features/api-key-authentication-and-scoping.md +77 -32
- package/knowledge/2.0/apps/api2/features/api-payload-interceptors.md +652 -166
- package/knowledge/2.0/apps/api2/features/cross-client-data-retrieval.md +282 -63
- package/knowledge/2.0/apps/api2/features/cxml-shipnotice-gateway.md +151 -57
- package/knowledge/2.0/apps/api2/features/encrypted-user-uuid-auth-handoff.md +45 -22
- package/knowledge/2.0/apps/api2/features/environment-variable-drives-underscore-branch.md +339 -57
- package/knowledge/2.0/apps/api2/features/health-check-endpoint.md +64 -27
- package/knowledge/2.0/apps/api2/features/language-translation-layer.md +283 -57
- package/knowledge/2.0/apps/api2/features/login-cross-client-user-resolution.md +59 -18
- package/knowledge/2.0/apps/api2/features/nested-fk-acl-embedding.md +84 -24
- package/knowledge/2.0/apps/api2/features/nested-relationship-writes.md +474 -86
- package/knowledge/2.0/apps/api2/features/record-scripts.md +344 -58
- package/knowledge/2.0/apps/api2/features/request-logging.md +436 -119
- package/knowledge/2.0/apps/api2/features/scripted-api-post-body-args.md +59 -30
- package/knowledge/2.0/apps/api2/features/sprint-dashboard-api.md +93 -30
- package/knowledge/2.0/apps/api2/features/surface-meta-option.md +91 -19
- package/knowledge/2.0/apps/api2/features/tableview-apiwhereclause-row-filtering.md +104 -32
- package/knowledge/2.0/apps/api2/features/tableview-field-metadata.md +274 -59
- package/knowledge/2.0/apps/api2/features/tickets-api.md +47 -21
- package/knowledge/2.0/apps/api2/features/v2-api-error-codes.md +353 -79
- package/knowledge/2.0/apps/api2/features/v2-deadlock-retry.md +188 -50
- package/knowledge/2.0/apps/api2/features/v2-rest-query-contract.md +542 -102
- package/knowledge/2.0/apps/api2/features/v2-reverse-hasmany-fields-whitelist.md +51 -15
- package/knowledge/2.0/apps/api2/workflows/codepipeline-codeconnections-deploy.md +294 -65
- package/knowledge/2.0/apps/api2/workflows/environment-configuration-and-provisioning.md +123 -40
- package/knowledge/2.0/apps/dbchanges2/INDEX.md +11 -11
- package/knowledge/2.0/apps/dbchanges2/architecture.md +402 -104
- package/knowledge/2.0/apps/dbchanges2/features/rerunnable-additive-inserts.md +280 -64
- package/knowledge/2.0/apps/dbchanges2/features/surface-layer-schema.md +1543 -401
- package/knowledge/2.0/apps/dbchanges2/workflows/client-onboarding.md +80 -31
- package/knowledge/2.0/apps/dbchanges2/workflows/client-schema-drift-audit.md +265 -92
- package/knowledge/2.0/apps/dbchanges2/workflows/deleting-contacts-from-a-client-database.md +50 -23
- package/knowledge/2.0/apps/dbchanges2/workflows/framework-branch-ahead-of-schema.md +177 -67
- package/knowledge/2.0/apps/dbchanges2/workflows/local-vs-prod-mysql-config-parity.md +76 -31
- package/knowledge/2.0/apps/dbchanges2/workflows/nonprod-metadata-drift-repair.md +316 -99
- package/knowledge/2.0/apps/dbchanges2/workflows/targeting-the-right-database.md +155 -45
- package/knowledge/2.0/apps/dbchanges2/workflows/verifying-a-migration-ran.md +33 -16
- package/knowledge/2.0/apps/saml/INDEX.md +6 -6
- package/knowledge/2.0/apps/saml/architecture.md +42 -22
- package/knowledge/2.0/apps/saml/features/downstream-integration-contract.md +33 -19
- package/knowledge/2.0/apps/saml/features/healthcheck-endpoint.md +97 -31
- package/knowledge/2.0/apps/saml/features/rate-user-provisioning.md +9 -10
- package/knowledge/2.0/apps/saml/workflows/onboarding-a-new-sso-client.md +63 -23
- package/knowledge/2.0/apps/saml/workflows/rotating-the-saml-sp-certificate.md +193 -72
- package/knowledge/2.0/apps/talos/INDEX.md +8 -8
- package/knowledge/2.0/apps/talos/architecture.md +129 -48
- package/knowledge/2.0/apps/talos/features/aegra-api.md +153 -66
- package/knowledge/2.0/apps/talos/features/chat-frontend.md +96 -39
- package/knowledge/2.0/apps/talos/features/deployment.md +53 -29
- package/knowledge/2.0/apps/talos/features/mcp-servers.md +75 -39
- package/knowledge/2.0/apps/talos/features/observability.md +62 -34
- package/knowledge/2.0/apps/talos/features/pricing-cogs-model.md +143 -66
- package/knowledge/2.0/apps/talos/features/talos-agent.md +95 -56
- package/knowledge/2.0/apps/talos-backend/INDEX.md +1 -1
- package/knowledge/2.0/apps/talos-backend/workflows/toga-supply-client-onboarding.md +149 -59
- package/knowledge/2.0/apps/toga-blox/INDEX.md +14 -14
- package/knowledge/2.0/apps/toga-blox/architecture.md +56 -25
- package/knowledge/2.0/apps/toga-blox/features/add-notes-template.md +40 -20
- package/knowledge/2.0/apps/toga-blox/features/advanced-select.md +49 -23
- package/knowledge/2.0/apps/toga-blox/features/api-client.md +143 -36
- package/knowledge/2.0/apps/toga-blox/features/base-input.md +35 -20
- package/knowledge/2.0/apps/toga-blox/features/blox-authoring-defects.md +178 -61
- package/knowledge/2.0/apps/toga-blox/features/primary-table-templates.md +179 -59
- package/knowledge/2.0/apps/toga-blox/features/table-record-modal.md +58 -32
- package/knowledge/2.0/apps/toga-blox/features/table.md +215 -50
- package/knowledge/2.0/apps/toga-blox/features/talos-assistant.md +303 -74
- package/knowledge/2.0/apps/toga-blox/features/toaster.md +56 -20
- package/knowledge/2.0/apps/toga-blox/workflows/dynamic-publish-pipeline.md +272 -49
- package/knowledge/2.0/apps/toga-blox/workflows/landing-a-large-feature-branch.md +60 -21
- package/knowledge/2.0/apps/toga-blox/workflows/local-link-into-a-consumer-app.md +254 -65
- package/knowledge/2.0/apps/toga2-commerce/INDEX.md +19 -18
- package/knowledge/2.0/apps/toga2-commerce/architecture.md +98 -32
- package/knowledge/2.0/apps/toga2-commerce/features/bundle-item-visibility-and-selectability.md +128 -51
- package/knowledge/2.0/apps/toga2-commerce/features/cart-bundle-submission-and-identity.md +61 -23
- package/knowledge/2.0/apps/toga2-commerce/features/cart-notification-emails.md +142 -55
- package/knowledge/2.0/apps/toga2-commerce/features/cart-order-total-computation.md +30 -17
- package/knowledge/2.0/apps/toga2-commerce/features/cart-page-config-architecture.md +221 -81
- package/knowledge/2.0/apps/toga2-commerce/features/catalog-cache-freshness.md +168 -53
- package/knowledge/2.0/apps/toga2-commerce/features/category-tile-sort-order.md +78 -27
- package/knowledge/2.0/apps/toga2-commerce/features/client-fields.md +393 -120
- package/knowledge/2.0/apps/toga2-commerce/features/expedited-shipping-gating.md +110 -29
- package/knowledge/2.0/apps/toga2-commerce/features/filter-search-results-page.md +80 -27
- package/knowledge/2.0/apps/toga2-commerce/features/inactive-item-purchase-gating.md +135 -46
- package/knowledge/2.0/apps/toga2-commerce/features/multi-tenant-theming.md +62 -36
- package/knowledge/2.0/apps/toga2-commerce/features/order-submit-sync-sequencing.md +102 -38
- package/knowledge/2.0/apps/toga2-commerce/features/shipping-cost-waiver-gating.md +64 -28
- package/knowledge/2.0/apps/toga2-commerce/features/storefront-persona-gating-and-home-counts.md +118 -0
- package/knowledge/2.0/apps/toga2-commerce/workflows/amplify-build-and-deploy.md +188 -52
- package/knowledge/2.0/apps/toga2-commerce/workflows/cypress-testing.md +144 -62
- package/knowledge/2.0/apps/toga2-commerce/workflows/http2-protocol-error-diagnosis.md +53 -36
- package/knowledge/2.0/apps/toga2-hub/INDEX.md +2 -2
- package/knowledge/2.0/apps/toga2-hub/architecture.md +85 -36
- package/knowledge/2.0/apps/toga2-hub/features/acl-permissions-rendering.md +85 -51
- package/knowledge/2.0/apps/toga2-supply/INDEX.md +8 -8
- package/knowledge/2.0/apps/toga2-supply/architecture.md +36 -20
- package/knowledge/2.0/apps/toga2-supply/features/currency-amount-lines-editor.md +156 -63
- package/knowledge/2.0/apps/toga2-supply/features/fulfill-and-ship.md +942 -203
- package/knowledge/2.0/apps/toga2-supply/features/order-detail-field-config-and-customer-name.md +99 -38
- package/knowledge/2.0/apps/toga2-supply/features/table-data-additional-filters.md +54 -22
- package/knowledge/2.0/apps/toga2-supply/workflows/amplify-build-and-deploy.md +89 -29
- package/knowledge/2.0/apps/toga2-supply/workflows/client-host-scoping.md +215 -79
- package/knowledge/2.0/apps/toga2-supply/workflows/onboarding-a-client-to-fulfill-and-ship.md +37 -29
- package/knowledge/2.0/apps/toga2-view/INDEX.md +9 -9
- package/knowledge/2.0/apps/toga2-view/architecture.md +98 -33
- package/knowledge/2.0/apps/toga2-view/features/get-support-cancel-subscription.md +132 -42
- package/knowledge/2.0/apps/toga2-view/features/mobile-nav-header.md +14 -15
- package/knowledge/2.0/apps/toga2-view/features/property-questions-eligibility.md +39 -15
- package/knowledge/2.0/apps/toga2-view/features/query-string-builder.md +39 -19
- package/knowledge/2.0/apps/toga2-view/features/reference-dropdown-sorting.md +32 -16
- package/knowledge/2.0/apps/toga2-view/features/service-card.md +24 -21
- package/knowledge/2.0/apps/toga2-view/features/terms-and-conditions-page.md +56 -18
- package/knowledge/2.0/apps/toga2-view/features/zip-validation-contact-phone.md +23 -11
- package/knowledge/2.0/apps/toga25-supply/INDEX.md +19 -19
- package/knowledge/2.0/apps/toga25-supply/architecture.md +103 -34
- package/knowledge/2.0/apps/toga25-supply/features/action-button-rule-engine.md +119 -30
- package/knowledge/2.0/apps/toga25-supply/features/client-api-fetch-fields.md +87 -25
- package/knowledge/2.0/apps/toga25-supply/features/client-configurable-fields.md +162 -37
- package/knowledge/2.0/apps/toga25-supply/features/column-visibility.md +177 -57
- package/knowledge/2.0/apps/toga25-supply/features/force-logout-on-deployment.md +47 -10
- package/knowledge/2.0/apps/toga25-supply/features/meta-driven-table-data.md +119 -39
- package/knowledge/2.0/apps/toga25-supply/features/persisted-query-cache.md +94 -34
- package/knowledge/2.0/apps/toga25-supply/features/record-modals-and-nested-tables.md +365 -85
- package/knowledge/2.0/apps/toga25-supply/features/server-table-url-state.md +83 -30
- package/knowledge/2.0/apps/toga25-supply/features/side-navigation-and-default-route.md +64 -20
- package/knowledge/2.0/apps/toga25-supply/features/sso-redirect-and-session-gating.md +71 -16
- package/knowledge/2.0/apps/toga25-supply/features/surface-frontend.md +1383 -323
- package/knowledge/2.0/apps/toga25-supply/features/talos-integration.md +272 -67
- package/knowledge/2.0/apps/toga25-supply/features/toolbar-button-chrome.md +59 -20
- package/knowledge/2.0/apps/toga25-supply/features/transfer-orders-page.md +1004 -328
- package/knowledge/2.0/apps/toga25-supply/workflows/amplify-deployment.md +222 -46
- package/knowledge/2.0/apps/toga25-supply/workflows/cypress-testing.md +349 -116
- package/knowledge/2.0/apps/toga25-supply/workflows/porting-a-page-from-toga2-supply.md +47 -16
- package/knowledge/2.0/apps/voice-to-voice/INDEX.md +4 -4
- package/knowledge/2.0/apps/voice-to-voice/architecture.md +78 -33
- package/knowledge/2.0/apps/voice-to-voice/features/livekit-pipeline.md +71 -44
- package/knowledge/2.0/apps/voice-to-voice/features/post-call-lambda.md +71 -40
- package/knowledge/2.0/apps/voice-to-voice/features/ticket-api-integration.md +101 -55
- package/knowledge/2.0/apps/worker2/INDEX.md +61 -61
- package/knowledge/2.0/apps/worker2/architecture.md +248 -55
- package/knowledge/2.0/apps/worker2/features/alb-target-group-auto-registration.md +153 -47
- package/knowledge/2.0/apps/worker2/features/all-client-email-queue-monitor.md +136 -46
- package/knowledge/2.0/apps/worker2/features/api-stability-monitor.md +116 -36
- package/knowledge/2.0/apps/worker2/features/automated-pr-merger-force-push-race.md +38 -23
- package/knowledge/2.0/apps/worker2/features/callback-scheduling.md +199 -100
- package/knowledge/2.0/apps/worker2/features/clickup-connectivity-watchdog.md +50 -17
- package/knowledge/2.0/apps/worker2/features/clickup-custom-field-conventions.md +26 -16
- package/knowledge/2.0/apps/worker2/features/clickup-design-sprint-automation.md +241 -52
- package/knowledge/2.0/apps/worker2/features/clickup-general-automation.md +32 -16
- package/knowledge/2.0/apps/worker2/features/clickup-github-autolink.md +21 -11
- package/knowledge/2.0/apps/worker2/features/clickup-project-routing.md +202 -58
- package/knowledge/2.0/apps/worker2/features/clickup-richtext-api.md +41 -22
- package/knowledge/2.0/apps/worker2/features/clickup-subtask-activity.md +79 -30
- package/knowledge/2.0/apps/worker2/features/clickup-task-fluffer-talos.md +106 -39
- package/knowledge/2.0/apps/worker2/features/clickup-work-type-automation.md +63 -20
- package/knowledge/2.0/apps/worker2/features/compass-vip-support-importer.md +119 -37
- package/knowledge/2.0/apps/worker2/features/creating-worker-actions.md +455 -99
- package/knowledge/2.0/apps/worker2/features/cross-account-aws-access.md +209 -78
- package/knowledge/2.0/apps/worker2/features/elastic-beanstalk-health-monitor.md +278 -95
- package/knowledge/2.0/apps/worker2/features/elite-freshservice-sync.md +96 -66
- package/knowledge/2.0/apps/worker2/features/error-escalation-cron.md +420 -118
- package/knowledge/2.0/apps/worker2/features/error-issue-auto-resolution.md +150 -53
- package/knowledge/2.0/apps/worker2/features/etilize-catalog-item-import.md +78 -42
- package/knowledge/2.0/apps/worker2/features/etilize-item-translation-import.md +75 -41
- package/knowledge/2.0/apps/worker2/features/monitoring-framework.md +172 -64
- package/knowledge/2.0/apps/worker2/features/netsuite-clickup-opportunity-bidirectional-design.md +87 -33
- package/knowledge/2.0/apps/worker2/features/netsuite-integrations-monitor.md +97 -37
- package/knowledge/2.0/apps/worker2/features/netsuite-item-client-routing.md +88 -39
- package/knowledge/2.0/apps/worker2/features/netsuite-opportunity-client-labels.md +323 -94
- package/knowledge/2.0/apps/worker2/features/netsuite-opportunity-sync.md +979 -208
- package/knowledge/2.0/apps/worker2/features/netsuite-salesorder-open-orders-sync.md +181 -62
- package/knowledge/2.0/apps/worker2/features/netsuite-salesorder-outbound-push.md +170 -123
- package/knowledge/2.0/apps/worker2/features/netsuite-supporting-record-backfill-worker.md +76 -51
- package/knowledge/2.0/apps/worker2/features/netsuite-supporting-record-webhook-importer.md +122 -73
- package/knowledge/2.0/apps/worker2/features/netsuite-transferorder-outbound-push.md +449 -131
- package/knowledge/2.0/apps/worker2/features/notification-email-template.md +97 -37
- package/knowledge/2.0/apps/worker2/features/notification-email.md +140 -49
- package/knowledge/2.0/apps/worker2/features/nychh-asset-tag-backfill.md +62 -35
- package/knowledge/2.0/apps/worker2/features/oneuptime-incident-clickup-sync.md +138 -52
- package/knowledge/2.0/apps/worker2/features/oneuptime-worker2-monitoring.md +540 -373
- package/knowledge/2.0/apps/worker2/features/platform-cache-cleanup.md +61 -50
- package/knowledge/2.0/apps/worker2/features/qa-qc-branch-automation.md +52 -42
- package/knowledge/2.0/apps/worker2/features/qa-qc-review-pipeline.md +66 -56
- package/knowledge/2.0/apps/worker2/features/s3-folder-retention-cleanup.md +74 -58
- package/knowledge/2.0/apps/worker2/features/service-request-sales-order-generation.md +175 -62
- package/knowledge/2.0/apps/worker2/features/sso-stability-monitor.md +69 -29
- package/knowledge/2.0/apps/worker2/features/startech-webhook-handler.md +33 -24
- package/knowledge/2.0/apps/worker2/features/talos-meeting-notes-integration.md +70 -35
- package/knowledge/2.0/apps/worker2/features/talos-pricing-automation.md +106 -50
- package/knowledge/2.0/apps/worker2/features/talos-transcript-ingestion.md +431 -319
- package/knowledge/2.0/apps/worker2/features/team-sprint-management.md +303 -244
- package/knowledge/2.0/apps/worker2/features/teams-transcript-export.md +173 -128
- package/knowledge/2.0/apps/worker2/features/tracking-status-refresh.md +124 -103
- package/knowledge/2.0/apps/worker2/features/vapi-webhook-handler.md +277 -198
- package/knowledge/2.0/apps/worker2/features/wje-freshservice-sync.md +21 -16
- package/knowledge/2.0/apps/worker2/features/worker-fleet-role-assignment-monitor.md +105 -97
- package/knowledge/2.0/apps/worker2/workflows/clickup-credential-rotation.md +52 -47
- package/knowledge/2.0/apps/worker2/workflows/php-runtime-upgrade-dependency-audit.md +120 -112
- package/knowledge/2.0/apps/worker2/workflows/running-worker2-locally.md +124 -88
- package/knowledge/2.0/apps/worker2/workflows/ticket-to-pseudocode-planning.md +49 -52
- package/knowledge/2.0/standards/backend-php.md +99 -23
- package/knowledge/2.0/standards/backend-testing.md +93 -29
- package/knowledge/2.0/standards/framework-rules.md +47 -10
- package/knowledge/2.0/standards/frontend-deploy.md +34 -13
- package/knowledge/2.0/standards/frontend.md +111 -40
- package/knowledge/2.0/standards/python.md +76 -33
- package/knowledge/2.0/standards/ssl-certificate-trust-model.md +71 -20
- package/knowledge/CONVENTIONS.md +29 -52
- package/knowledge/INDEX.md +3 -3
- package/knowledge/clients/adyen/INDEX.md +1 -1
- package/knowledge/clients/adyen/profile.md +90 -38
- package/knowledge/clients/aig/INDEX.md +3 -3
- package/knowledge/clients/aig/features/contract-reconciliation.md +123 -55
- package/knowledge/clients/aig/features/entitlement-intake.md +536 -165
- package/knowledge/clients/aig/profile.md +22 -10
- package/knowledge/clients/canon/INDEX.md +1 -1
- package/knowledge/clients/canon/profile.md +17 -9
- package/knowledge/clients/compass-canada/INDEX.md +7 -7
- package/knowledge/clients/compass-canada/features/french-item-feature-translations.md +55 -21
- package/knowledge/clients/compass-canada/features/french-order-email-localization.md +306 -83
- package/knowledge/clients/compass-canada/features/grand-and-toy-asn-import.md +302 -70
- package/knowledge/clients/compass-canada/features/item-fulfillment-tableviews.md +104 -42
- package/knowledge/clients/compass-canada/features/order-fulfillment-status-per-line.md +178 -52
- package/knowledge/clients/compass-canada/profile.md +198 -31
- package/knowledge/clients/compass-canada/workflows/grand-and-toy-asn-backfill.md +104 -30
- package/knowledge/clients/compass-usa/INDEX.md +35 -35
- package/knowledge/clients/compass-usa/features/approval-decision-flow.md +570 -110
- package/knowledge/clients/compass-usa/features/asn-to-item-fulfillment.md +332 -56
- package/knowledge/clients/compass-usa/features/contact-email-resolution.md +94 -38
- package/knowledge/clients/compass-usa/features/cost-centers.md +114 -32
- package/knowledge/clients/compass-usa/features/isfulfillable-data-quality-and-type-rule.md +197 -56
- package/knowledge/clients/compass-usa/features/item-catalogs-and-duplicate-items.md +243 -52
- package/knowledge/clients/compass-usa/features/item-fulfillment-tracking-tableview.md +91 -30
- package/knowledge/clients/compass-usa/features/mits-po-to-so-item-linking.md +273 -51
- package/knowledge/clients/compass-usa/features/mits-po-transmission-to-vendors.md +112 -29
- package/knowledge/clients/compass-usa/features/mits-po-zero-line-item-rejection.md +124 -45
- package/knowledge/clients/compass-usa/features/mits-sales-order-transmission-alerting.md +213 -67
- package/knowledge/clients/compass-usa/features/mr-ma-order-approval-and-status.md +188 -50
- package/knowledge/clients/compass-usa/features/odp-edi-850-item-resolution.md +230 -63
- package/knowledge/clients/compass-usa/features/odp-edi-855-acknowledgement-and-overquantity-guard.md +166 -48
- package/knowledge/clients/compass-usa/features/odp-edi-file-retention-and-retry.md +121 -39
- package/knowledge/clients/compass-usa/features/oneuptime-ma-refresh-order-monitor.md +97 -33
- package/knowledge/clients/compass-usa/features/order-fulfillment-status-per-line.md +196 -68
- package/knowledge/clients/compass-usa/features/people-file-user-lifecycle.md +267 -53
- package/knowledge/clients/compass-usa/features/persona-model-and-levy-gating.md +144 -35
- package/knowledge/clients/compass-usa/features/sales-order-line-renumbering.md +116 -29
- package/knowledge/clients/compass-usa/features/stranded-approval-reassignment.md +164 -50
- package/knowledge/clients/compass-usa/features/tracking-number-origin-and-asn-link.md +70 -32
- package/knowledge/clients/compass-usa/profile.md +2 -9
- package/knowledge/clients/compass-usa/workflows/catalog-fold-reversal.md +259 -56
- package/knowledge/clients/compass-usa/workflows/changing-a-kit-line-item.md +117 -40
- package/knowledge/clients/compass-usa/workflows/cross-kit-bundle-corruption.md +71 -35
- package/knowledge/clients/compass-usa/workflows/granting-api-access.md +111 -43
- package/knowledge/clients/compass-usa/workflows/granting-navigation-access.md +206 -54
- package/knowledge/clients/compass-usa/workflows/granting-persona-bundle-access.md +140 -37
- package/knowledge/clients/compass-usa/workflows/odp-duplicate-po-line-cleanup.md +76 -34
- package/knowledge/clients/compass-usa/workflows/odp-edi-import-recovery.md +114 -33
- package/knowledge/clients/compass-usa/workflows/odp-order-pipeline-to-netsuite.md +371 -71
- package/knowledge/clients/compass-usa/workflows/order-lifecycle-and-data-integrity.md +172 -56
- package/knowledge/clients/compass-usa/workflows/persona-population-env-comparison.md +54 -20
- package/knowledge/clients/compass-usa/workflows/persona-refactor-migration.md +145 -77
- package/knowledge/clients/elite/INDEX.md +7 -7
- package/knowledge/clients/elite/features/netsuite-togasupply-sync.md +334 -67
- package/knowledge/clients/elite/features/salesorder-netsuite-push.md +215 -64
- package/knowledge/clients/elite/features/salesorder-status-togadesk-reply.md +57 -27
- package/knowledge/clients/elite/features/supply2-scope.md +190 -59
- package/knowledge/clients/elite/features/supply2-tableview-config-drift.md +239 -76
- package/knowledge/clients/elite/features/togadesk-service-request-intake.md +176 -57
- package/knowledge/clients/elite/profile.md +108 -31
- package/knowledge/clients/endeavor-health/INDEX.md +1 -1
- package/knowledge/clients/endeavor-health/profile.md +11 -7
- package/knowledge/clients/fordham/INDEX.md +1 -1
- package/knowledge/clients/fordham/profile.md +19 -10
- package/knowledge/clients/growrk/INDEX.md +4 -4
- package/knowledge/clients/growrk/features/shipping-carrier-cleanup.md +46 -23
- package/knowledge/clients/growrk/features/transfer-order-flow.md +88 -39
- package/knowledge/clients/growrk/features/units-netsuite-custom-fields.md +149 -59
- package/knowledge/clients/growrk/profile.md +46 -14
- package/knowledge/clients/northwell/INDEX.md +2 -2
- package/knowledge/clients/northwell/features/sso-jit-provisioning.md +75 -25
- package/knowledge/clients/northwell/profile.md +31 -12
- package/knowledge/clients/nycdoe/INDEX.md +4 -4
- package/knowledge/clients/nycdoe/features/edi-850-receive-and-997-ack.md +68 -28
- package/knowledge/clients/nycdoe/features/hold-status-sync.md +321 -72
- package/knowledge/clients/nycdoe/features/servicenow-integration.md +643 -132
- package/knowledge/clients/nycdoe/profile.md +28 -11
- package/knowledge/clients/nychh/INDEX.md +9 -8
- package/knowledge/clients/nychh/features/location-shipping-addresses.md +110 -36
- package/knowledge/clients/nychh/features/netsuite-inventory-adjustment-fulfillment-link.md +235 -55
- package/knowledge/clients/nychh/features/netsuite-transfer-order-import.md +403 -126
- package/knowledge/clients/nychh/features/po-number-upstream-direction.md +63 -19
- package/knowledge/clients/nychh/features/talos-assistant-enablement.md +106 -42
- package/knowledge/clients/nychh/features/transfer-order-inventory-quantities.md +386 -118
- package/knowledge/clients/nychh/features/transfer-order-netsuite-push.md +208 -83
- package/knowledge/clients/nychh/features/transfer-order-notification-emails.md +238 -0
- package/knowledge/clients/nychh/profile.md +363 -55
- package/knowledge/clients/office-depot/INDEX.md +3 -3
- package/knowledge/clients/office-depot/features/odp-tech-support.md +56 -30
- package/knowledge/clients/office-depot/features/togarefresh2026-linkbuilder-routing.md +21 -17
- package/knowledge/clients/office-depot/profile.md +46 -16
- package/knowledge/clients/pcmaticb2b/INDEX.md +4 -4
- package/knowledge/clients/pcmaticb2b/features/startech-entitlement-provisioning.md +101 -35
- package/knowledge/clients/pcmaticb2b/features/startech-per-ticket-type-stages.md +123 -42
- package/knowledge/clients/pcmaticb2b/features/startech-ticket-sync.md +105 -58
- package/knowledge/clients/pcmaticb2b/profile.md +10 -5
- package/knowledge/clients/prudential/INDEX.md +15 -15
- package/knowledge/clients/prudential/features/dell-asn-units-interceptor.md +69 -21
- package/knowledge/clients/prudential/features/dell-lch-iop-transmissions.md +170 -53
- package/knowledge/clients/prudential/features/device-information-import-and-contact-linking.md +115 -27
- package/knowledge/clients/prudential/features/itemclasses-device-tier-data.md +74 -25
- package/knowledge/clients/prudential/features/oneuptime-order-pipeline-monitors.md +55 -19
- package/knowledge/clients/prudential/features/order-email-pdf-attachments.md +177 -53
- package/knowledge/clients/prudential/features/service-request-address-validation.md +105 -51
- package/knowledge/clients/prudential/features/service-request-auth-rejection-alert.md +113 -37
- package/knowledge/clients/prudential/features/service-request-rejection-alert-email.md +77 -30
- package/knowledge/clients/prudential/features/supply-orders-csv-export.md +90 -29
- package/knowledge/clients/prudential/features/transmit-ordershipped-email.md +211 -58
- package/knowledge/clients/prudential/profile.md +81 -29
- package/knowledge/clients/prudential/workflows/dell-asn-backfill-replay.md +38 -14
- package/knowledge/clients/prudential/workflows/http2-alb-workaround.md +34 -15
- package/knowledge/clients/prudential/workflows/store-saml-deploy-topology.md +115 -39
- package/knowledge/clients/quad/INDEX.md +5 -5
- package/knowledge/clients/quad/features/enter-po-details-vendor-selection-ev12.md +36 -20
- package/knowledge/clients/quad/features/multi-currency-item-pricing.md +139 -43
- package/knowledge/clients/quad/features/po-asn-email-import.md +139 -48
- package/knowledge/clients/quad/profile.md +126 -24
- package/knowledge/clients/quad/workflows/catalog-fold-reversal.md +84 -36
- package/knowledge/clients/rate/INDEX.md +12 -12
- package/knowledge/clients/rate/features/aig-contract-creation.md +554 -90
- package/knowledge/clients/rate/features/checkout-terms-delivery-preference.md +69 -28
- package/knowledge/clients/rate/features/home-warranty-terms-content.md +65 -23
- package/knowledge/clients/rate/features/monthly-reconciliation-report.md +37 -18
- package/knowledge/clients/rate/features/netsuite-cashsale-export.md +56 -19
- package/knowledge/clients/rate/features/paypal-subscription-purchase-webhook.md +204 -60
- package/knowledge/clients/rate/features/saml-sso.md +16 -12
- package/knowledge/clients/rate/features/service-card-entitlements.md +141 -44
- package/knowledge/clients/rate/features/service-purchase-emails.md +132 -40
- package/knowledge/clients/rate/features/subscription-cancellation.md +412 -82
- package/knowledge/clients/rate/features/whole-home-warranty-purchase-guard.md +610 -97
- package/knowledge/clients/rate/profile.md +5 -3
- package/knowledge/clients/rumcsi/INDEX.md +1 -1
- package/knowledge/clients/rumcsi/profile.md +102 -34
- package/knowledge/clients/spglobal/INDEX.md +1 -1
- package/knowledge/clients/spglobal/profile.md +11 -7
- package/knowledge/clients/staples/INDEX.md +2 -2
- package/knowledge/clients/staples/features/oneuptime-sftp-folder-monitors.md +71 -30
- package/knowledge/clients/staples/profile.md +23 -9
- package/knowledge/clients/tow-foundation/INDEX.md +2 -2
- package/knowledge/clients/tow-foundation/features/receipt-processing.md +306 -96
- package/knowledge/clients/tow-foundation/profile.md +45 -18
- package/knowledge/clients/true/INDEX.md +2 -2
- package/knowledge/clients/true/features/users-personas-data-model.md +15 -12
- package/knowledge/clients/true/profile.md +31 -9
- package/knowledge/clients/walmart/INDEX.md +3 -4
- package/knowledge/clients/walmart/features/domain-migration.md +13 -16
- package/knowledge/clients/walmart/features/registration-route.md +24 -23
- package/knowledge/clients/walmart/profile.md +12 -13
- package/knowledge/clients/wje/INDEX.md +1 -1
- package/knowledge/clients/wje/profile.md +19 -14
- package/knowledge/standalone/apps/claude/INDEX.md +5 -5
- package/knowledge/standalone/apps/claude/features/review-enforcement-hooks.md +44 -19
- package/knowledge/standalone/apps/claude/workflows/harness-distribution.md +40 -29
- package/knowledge/standalone/apps/claude/workflows/knowledge-publish-pipeline.md +43 -23
- package/knowledge/standalone/apps/claude/workflows/mcp-tool-usage.md +149 -68
- package/knowledge/standalone/apps/claude/workflows/ticket-branch-creation-safety.md +62 -32
- package/knowledge/standalone/apps/forward/INDEX.md +3 -3
- package/knowledge/standalone/apps/forward/architecture.md +71 -26
- package/knowledge/standalone/apps/forward/features/encrypted-link-handler.md +33 -19
- package/knowledge/standalone/apps/forward/features/static-demo-hosting.md +93 -33
- package/knowledge/standalone/apps/togatech/INDEX.md +5 -5
- package/knowledge/standalone/apps/togatech/architecture.md +71 -40
- package/knowledge/standalone/apps/togatech/features/careers-paylocity-job-openings.md +106 -31
- package/knowledge/standalone/apps/togatech/features/seo-aeo-geo-prerender.md +13 -11
- package/knowledge/standalone/apps/togatech/workflows/creating-pull-requests.md +13 -14
- package/knowledge/standalone/apps/togatech/workflows/local-dev-and-headless-verification.md +46 -15
- package/knowledge/standalone/apps/websocket/INDEX.md +2 -2
- package/knowledge/standalone/apps/websocket/architecture.md +22 -16
- package/knowledge/standalone/apps/websocket/features/sqs-fanout.md +50 -18
- package/knowledge/standalone/standards/brand-naming.md +12 -7
- package/knowledge/standalone/standards/communication-clarity.md +42 -12
- package/knowledge/standalone/standards/deploy-instruction-communication.md +27 -7
- package/knowledge/standalone/standards/session-priming.md +57 -15
- package/package.json +1 -1
- package/knowledge/1.0/apps/library/workflows/render-1-0-email-templates-offline.md +0 -50
- package/knowledge/1.0/standards/backend-php-cases.md +0 -75
- package/knowledge/1.0/standards/framework-rules-cases.md +0 -26
- package/knowledge/1.0/standards/frontend-cases.md +0 -37
- package/knowledge/2.0/apps/_underscore/features/model-storage-field-s3.md +0 -91
- package/knowledge/2.0/standards/backend-php-cases.md +0 -55
- package/knowledge/2.0/standards/framework-rules-cases.md +0 -25
- package/knowledge/2.0/standards/frontend-cases.md +0 -57
- package/knowledge/2.0/standards/frontend-deploy-cases.md +0 -18
- package/knowledge/2.0/standards/ssl-certificate-trust-model-cases.md +0 -30
- package/knowledge/clients/walmart/features/customer-email-lifecycle.md +0 -86
- package/knowledge/standalone/standards/brand-naming-cases.md +0 -21
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
|
|
3
3
|
| Doc | Summary |
|
|
4
4
|
|-----|---------|
|
|
5
|
-
| [Authoring & Shipping a 1.0 dbchanges SQL File](workflows/authoring-and-shipping-sql-files.md) |
|
|
5
|
+
| [Authoring & Shipping a 1.0 dbchanges SQL File](workflows/authoring-and-shipping-sql-files.md) | `dbchanges` is the **1.0** (legacy/V1) schema-and-data change repository — the 1.0 sibling of 2.0's `dbchanges2`. |
|
|
@@ -6,7 +6,7 @@ project: Database Changes
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: workflow
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-
|
|
9
|
+
updated: 2026-08-14
|
|
10
10
|
owners: [sking]
|
|
11
11
|
files:
|
|
12
12
|
- dbchanges/index.php
|
|
@@ -19,36 +19,42 @@ related:
|
|
|
19
19
|
- ../../../../clients/nycdoe/features/servicenow-integration.md
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
-
Authoring & shipping a 1.0 `dbchanges` `.sql` file: the crude runner's parse/fail-stop model, the only working all-or-nothing guard, folder=database, and which branches auto-apply; open before writing any 1.0 dbchanges SQL.
|
|
23
|
-
|
|
24
22
|
## Summary
|
|
25
23
|
|
|
26
|
-
`dbchanges` is the **1.0** (legacy/V1) schema-and-data change
|
|
24
|
+
`dbchanges` is the **1.0** (legacy/V1) schema-and-data change repository — the 1.0 sibling of
|
|
25
|
+
2.0's `dbchanges2`. Unlike `dbchanges2` it ships **its own runner**, `dbchanges/index.php`, which
|
|
26
|
+
is invoked by the worker tier. The runner's parsing model is crude and its error path is
|
|
27
|
+
**fail-stop for the whole queue**, so *how* you write the `.sql` file decides whether your change
|
|
28
|
+
(and everyone else's queued behind it) applies at all.
|
|
27
29
|
|
|
28
30
|
Two rules dominate everything below:
|
|
29
|
-
1. **A chunk that contains only comments aborts the entire queue.** Put all commentary *before* the final statement; never end a commented line with a semicolon.
|
|
30
|
-
2. **`_production` does NOT auto-apply.** Merged production data changes land on the next worker **deploy**, not within minutes.
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
1. **A chunk that contains only comments aborts the entire queue.** Put all commentary *before*
|
|
33
|
+
the final statement; never end a commented line with a semicolon.
|
|
34
|
+
2. **`_production` does NOT auto-apply.** Merged production data changes land on the next worker
|
|
35
|
+
**deploy**, not within minutes.
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
> `dbchanges/Core/*` targets the **legacy (V1) `Core` schema** — not the 2.0 prod `Core`. Confirm
|
|
38
|
+
> the target environment before writing anything.
|
|
35
39
|
|
|
36
|
-
|
|
37
|
-
2. Branch per the git-workflow rules (`fix/...`, `feature/...`) — never commit to `_production`.
|
|
38
|
-
3. Write **one file, commentary first, statements last**, no trailing comment chunk, no explicit `COMMIT`, and no `DELIMITER`/stored-routine constructs.
|
|
39
|
-
4. Wrap any risky data change in the derived-table preflight guard (below) so a drifted before-state is a no-op rather than a wrong write.
|
|
40
|
-
5. Open a PR into `_production` (or the target `_<env>` branch).
|
|
41
|
-
6. After merge: `_<env>` branches apply within ~2 min; **`_production` waits for the next worker deploy** — verify with a read-only query afterward rather than assuming. **Merging the PR applies nothing by itself** — `dbchanges` has no CI, no workflow, no runner of its own; every application is driven from the worker tier.
|
|
42
|
-
7. If the change spans more than one top-level (database) folder, verify **each database separately** — see the silent-skip trap below.
|
|
40
|
+
## How the runner parses a file (`dbchanges/index.php`)
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
- Each `.sql` file is read whole and split on the **literal `";\n"`** (semicolon + newline)
|
|
43
|
+
— `index.php` ~L140. There is no SQL lexer: no awareness of strings, comments, or delimiters.
|
|
44
|
+
- Every non-empty chunk is sent to MySQL through a single **`mysqli_query()`** (~L145). Multi-
|
|
45
|
+
statement execution is not used.
|
|
46
|
+
- On error (~L146–170) the runner writes to `Logs.Errors` and, on the prod path, **`exit()`s** —
|
|
47
|
+
which **blocks every dbchanges file queued behind it** until the offending file is fixed.
|
|
48
|
+
- Each file runs **inside a transaction**: `mysqli_autocommit($link, false)` is set before the
|
|
49
|
+
`_dbchanges` bookkeeping INSERT, and autocommit is only re-enabled (implicit COMMIT) after the
|
|
50
|
+
whole file succeeds. So on error the statement **and** its `_dbchanges` row roll back together,
|
|
51
|
+
and the file is retried on the next run.
|
|
45
52
|
|
|
46
|
-
|
|
47
|
-
- Every non-empty chunk is sent to MySQL through a single **`mysqli_query()`** (~L145). Multi-statement execution is not used.
|
|
48
|
-
- On error (~L146–170) the runner writes to `Logs.Errors` and, on the prod path, **`exit()`s** — which **blocks every dbchanges file queued behind it** until the offending file is fixed.
|
|
49
|
-
- Each file runs **inside a transaction**: `mysqli_autocommit($link, false)` is set before the `_dbchanges` bookkeeping INSERT, and autocommit is only re-enabled (implicit COMMIT) after the whole file succeeds. So on error the statement **and** its `_dbchanges` row roll back together, and the file is retried on the next run.
|
|
53
|
+
### Consequence: the "empty query" trap
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
A chunk consisting solely of `--` comment lines comes back as MySQL error **1065 "Query was
|
|
56
|
+
empty"** — a hard failure that stops the queue. This is easy to trigger accidentally by pasting
|
|
57
|
+
verification queries or explanatory notes *after* the last statement.
|
|
52
58
|
|
|
53
59
|
```sql
|
|
54
60
|
-- CORRECT: all commentary lives above the statement, one trailing statement.
|
|
@@ -65,14 +71,22 @@ UPDATE ...;
|
|
|
65
71
|
|
|
66
72
|
All 13 pre-existing files under `dbchanges/Core/` comply with this. Follow them.
|
|
67
73
|
|
|
68
|
-
|
|
74
|
+
## Expressing an all-or-nothing guard (the only pattern that works)
|
|
69
75
|
|
|
70
76
|
Procedural guards are **not expressible** in a dbchanges file:
|
|
71
|
-
- `IF` / `SIGNAL` / conditional `COMMIT`-`ROLLBACK` on `ROW_COUNT()` are legal only inside a stored routine.
|
|
72
|
-
- A routine body cannot be shipped anyway: its internal semicolons are shredded by the `";\n"` split, and `DELIMITER` is a **client** directive that `mysqli` does not understand.
|
|
73
|
-
- An explicit `COMMIT` is **actively harmful** — it lands the data change independently of the `_dbchanges` bookkeeping row, breaking retry-on-failure.
|
|
74
77
|
|
|
75
|
-
|
|
78
|
+
- `IF` / `SIGNAL` / conditional `COMMIT`-`ROLLBACK` on `ROW_COUNT()` are legal only inside a
|
|
79
|
+
stored routine.
|
|
80
|
+
- A routine body cannot be shipped anyway: its internal semicolons are shredded by the `";\n"`
|
|
81
|
+
split, and `DELIMITER` is a **client** directive that `mysqli` does not understand.
|
|
82
|
+
- An explicit `COMMIT` is **actively harmful** — it lands the data change independently of the
|
|
83
|
+
`_dbchanges` bookkeeping row, breaking retry-on-failure.
|
|
84
|
+
|
|
85
|
+
The working pattern is a **single-statement inline preflight guard**: a derived-table subquery
|
|
86
|
+
that counts the rows in the expected *before* state and requires an exact count, so the statement
|
|
87
|
+
is a no-op unless reality matches the assumption. The **derived-table wrapper is load-bearing** —
|
|
88
|
+
it is what avoids MySQL error **1093** ("can't specify target table for update in FROM clause").
|
|
89
|
+
Validated on **MySQL 8.0.42**.
|
|
76
90
|
|
|
77
91
|
```sql
|
|
78
92
|
UPDATE SomeTable t
|
|
@@ -84,15 +98,28 @@ WHERE t.id IN (<ids>)
|
|
|
84
98
|
) AS preflight) = <expected-row-count>;
|
|
85
99
|
```
|
|
86
100
|
|
|
87
|
-
|
|
101
|
+
## One top-level folder = one DATABASE (and the silent-skip trap)
|
|
88
102
|
|
|
89
|
-
The repo's top level is a list of **database names**, not modules: `Core`, `TOGaDeskSupport`,
|
|
103
|
+
The repo's top level is a list of **database names**, not modules: `Core`, `TOGaDeskSupport`,
|
|
104
|
+
`Common`, `Logs`, `Bridge_NetSuite`, … The runner walks every top-level directory and treats the
|
|
105
|
+
**folder name as the database to connect to** (`index.php` ~L55–60), then — for each folder — scans
|
|
106
|
+
`config.<env>.ini` and uses the **first `[database*]` group it finds** (`~L76–80`; in
|
|
107
|
+
`config.prod.ini` that is `[database_main]`) for hostname/username/password. So *all* folders are
|
|
108
|
+
attempted with **one** set of credentials against one host, with only the DB name varying.
|
|
90
109
|
|
|
91
|
-
Consequence: **a folder whose database is not reachable from that host is skipped silently.**
|
|
110
|
+
Consequence: **a folder whose database is not reachable from that host is skipped silently.**
|
|
111
|
+
The failure path is a bare `echo "Skipping <db> Database... unable to connect"` (`~L189`) — no
|
|
112
|
+
`Logs.Errors` row, no `exit()`, no `_dbchanges` bookkeeping. Nothing retries it, and nothing tells
|
|
113
|
+
you. A change that spans two databases on two different clusters (e.g. `Core` on **db_core** and
|
|
114
|
+
`TOGaDeskSupport` on **db_togadesk**) therefore needs **two separate runs**, one per cluster, and
|
|
115
|
+
an applier pointed at only one of them **half-applies the change and reports success**.
|
|
92
116
|
|
|
93
|
-
**Rule: a multi-database change is not done until you have verified each database independently.**
|
|
117
|
+
**Rule: a multi-database change is not done until you have verified each database independently.**
|
|
118
|
+
Verify **per-pair** (does *this* key have *this* value?), not by a `COUNT(*) ... IS NOT NULL` total —
|
|
119
|
+
a per-count check passes on the cluster that applied and tells you nothing about the one that
|
|
120
|
+
didn't.
|
|
94
121
|
|
|
95
|
-
|
|
122
|
+
## Which branches actually auto-apply
|
|
96
123
|
|
|
97
124
|
| Path | Trigger | Timing |
|
|
98
125
|
|---|---|---|
|
|
@@ -100,20 +127,64 @@ Consequence: **a folder whose database is not reachable from that host is skippe
|
|
|
100
127
|
| Elastic Beanstalk container command (`worker/.ebextensions/030_dbchanges.config`) | worker **deploy** | on next deploy |
|
|
101
128
|
|
|
102
129
|
The repo ships `config.alpha/beta/demo/hotfix/prod/stage/test/worker.ini`, therefore:
|
|
130
|
+
|
|
103
131
|
- **Auto-apply within ~2 min of a push:** `_alpha`, `_beta`, `_demo`, `_hotfix`, `_stage`.
|
|
104
|
-
- **`_production` does NOT auto-apply** — it would need `config.production.ini`, which does not
|
|
132
|
+
- **`_production` does NOT auto-apply** — it would need `config.production.ini`, which does not
|
|
133
|
+
exist (the shipped file is `config.prod.ini`). Production applies via the EB deploy container
|
|
134
|
+
command instead, i.e. **on the next worker deploy**. Plan comms and expectations accordingly.
|
|
105
135
|
|
|
106
|
-
##
|
|
136
|
+
## Steps
|
|
107
137
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
138
|
+
1. Confirm the target schema/environment (`Core/` = legacy V1 `Core`).
|
|
139
|
+
2. Branch per the git-workflow rules (`fix/...`, `feature/...`) — never commit to `_production`.
|
|
140
|
+
3. Write **one file, commentary first, statements last**, no trailing comment chunk, no explicit
|
|
141
|
+
`COMMIT`, and no `DELIMITER`/stored-routine constructs.
|
|
142
|
+
4. Wrap any risky data change in the derived-table preflight guard above so a drifted before-state
|
|
143
|
+
is a no-op rather than a wrong write.
|
|
144
|
+
5. Open a PR into `_production` (or the target `_<env>` branch).
|
|
145
|
+
6. After merge: `_<env>` branches apply within ~2 min; **`_production` waits for the next worker
|
|
146
|
+
deploy** — verify with a read-only query afterwards rather than assuming. **Merging the PR
|
|
147
|
+
applies nothing by itself** — `dbchanges` has no CI, no workflow, no runner of its own; every
|
|
148
|
+
application is driven from the worker tier.
|
|
149
|
+
7. If the change spans more than one top-level (database) folder, verify **each database
|
|
150
|
+
separately** — see the silent-skip trap above.
|
|
115
151
|
|
|
116
|
-
##
|
|
152
|
+
## Gotchas
|
|
117
153
|
|
|
118
|
-
-
|
|
119
|
-
-
|
|
154
|
+
- **A comment-only chunk stops the whole queue** (error 1065 + `exit()` on the prod path). Your
|
|
155
|
+
malformed file blocks unrelated teammates' migrations, so this is a team-wide failure, not a
|
|
156
|
+
local one.
|
|
157
|
+
- **No `DELIMITER`, no stored routines, no explicit `COMMIT`.** See above.
|
|
158
|
+
- **Error 1093** is why the preflight subquery must be wrapped in a derived table.
|
|
159
|
+
- **A merged PR is not an applied change.** Confirmed live 2026-08-13 (PR dbchanges#265): after the
|
|
160
|
+
merge into `_production`, both target tables were still 100% unchanged. Never tell a customer or a
|
|
161
|
+
ticket "applied" off a merge — always re-read the data.
|
|
162
|
+
- **A cross-database change half-applies without warning.** Same incident: the `TOGaDeskSupport`
|
|
163
|
+
file landed and the `Core` file did not, leaving `assets.tag` 87/87 correct while
|
|
164
|
+
`Core.AdvanceShippingNoticeUnits.assetTag` was 87/87 still empty — a state that *looks* fixed in
|
|
165
|
+
the UI. Cause is the one-credential-set / folder-is-a-database model above. Verify every database
|
|
166
|
+
in the change, per-pair.
|
|
167
|
+
- **Retry semantics are a feature**: because the data change and the `_dbchanges` row share a
|
|
168
|
+
transaction, a failing file re-runs next cycle. Do not "help" it with a manual COMMIT.
|
|
169
|
+
- **⚠ SECURITY — hardcoded GitHub token.** `worker/crons/infrastructure/execute_dbchanges.php`
|
|
170
|
+
contains a **plaintext GitHub personal access token** in the small config block near the top of
|
|
171
|
+
the file (~L14–18), and interpolates it into a `shell_exec()` git-clone command line — which
|
|
172
|
+
also exposes it in the worker host's process listing. Treat the token as **compromised**:
|
|
173
|
+
rotate it, move it to config/env (`config.<env>.ini`), and pass it without embedding it in an
|
|
174
|
+
argv string. No credential value is recorded here by design.
|
|
175
|
+
|
|
176
|
+
## Change history
|
|
177
|
+
- 2026-08-14 — Documented that each **top-level folder is a database name** and that the runner uses
|
|
178
|
+
the **first `[database*]` config group** for every folder, so a folder on another cluster is
|
|
179
|
+
**silently skipped** (bare echo, no `Logs.Errors`, no `exit()`, no retry). Confirmed live during
|
|
180
|
+
the DOE asset-tag backfill (PR dbchanges#265): merging the PR applied nothing, and then a
|
|
181
|
+
`TOGaDeskSupport`-only run left `Core` untouched — a half-fix that looked complete in the UI.
|
|
182
|
+
Added the rule that a multi-database change needs one run per cluster and **per-pair**
|
|
183
|
+
verification, not a non-null count. (sking)
|
|
184
|
+
- 2026-07-29 — Repo onboarded to the KB (1.0 `dbchanges`, framework core sibling of `dbchanges2`).
|
|
185
|
+
Documented the `index.php` `";\n"` split + `mysqli_query()` model and the comment-only-chunk /
|
|
186
|
+
error-1065 queue abort, the per-file transaction & retry semantics, the derived-table preflight
|
|
187
|
+
guard as the only workable all-or-nothing pattern (verified MySQL 8.0.42), and which `_%`
|
|
188
|
+
branches actually auto-apply (`_production` does **not** — it lands on the next worker deploy).
|
|
189
|
+
Flagged the plaintext GitHub token in `worker/crons/infrastructure/execute_dbchanges.php` for
|
|
190
|
+
rotation. (sking)
|
|
@@ -2,26 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
| Doc | Summary |
|
|
4
4
|
|-----|---------|
|
|
5
|
-
| [Library (1.0 Framework) Architecture](architecture.md) |
|
|
6
|
-
| [Address Validation Gateway (App_Api_OfficeDepot::validateAddress + USPS fallback)](features/address-validation-gateway.md) |
|
|
7
|
-
| [Where a new App_ class goes — the app/ folder IS a behavioral contract](features/app-class-placement-base-contracts.md) |
|
|
8
|
-
| [App_Sso — Reusable 1.0 SSO Initiation (SP-initiated SAML via saml.togahub.com)](features/app-sso-initiation.md) |
|
|
9
|
-
| [Cron Execution Monitoring (App_Framework check-in/out → CronJobExecutions)](features/cron-execution-monitoring.md) |
|
|
10
|
-
| [Diagnostic Dialog — View Recommended Services Routing](features/diagnostic-dialog-view-recommended-services.md) |
|
|
11
|
-
| [Elite Freshservice Sync (library)](features/elite-freshservice-sync.md) |
|
|
12
|
-
| [App_Email Queued Sending & Attachments (Common.EmailsQueued)](features/email-queue-attachments.md) |
|
|
13
|
-
| [Branded HTML Email Templates (App_Email_Template)](features/email-templates.md) |
|
|
14
|
-
| [App_Email Side Effects & Test Mode (how to send a real email that writes nothing)](features/email-test-mode-and-write-free-sends.md) |
|
|
15
|
-
| [Error Capture in 1.0 (App_Error_Capture → shared 2.0 Logs DB)](features/error-capture-1-0.md) | 1.0
|
|
16
|
-
| [HTTP 500 Error Monitor (App_SystemMonitor_500Error) — and why its \"Error Type\" is not a diagnosis](features/http-500-error-monitor.md) |
|
|
17
|
-
| [1.0 MVC Page Pattern & New-App Skeleton](features/mvc-page-pattern-and-app-skeleton.md) |
|
|
18
|
-
| [NetSuite File Cabinet Content Retrieval via RESTlet (fetchInvoiceFile)](features/netsuite-filecabinet-restlet.md) | How 1.0 pulls
|
|
19
|
-
| [assetType from NetSuite itemtype during Item Sync (opt-in per client)](features/netsuite-item-assettype-sync.md) |
|
|
20
|
-
| [NetSuite classification → ItemClasses sync (opt-in per client)](features/netsuite-item-class-sync.md) |
|
|
21
|
-
| [isFulfillable from NetSuite during Item Sync (Phase 1)](features/netsuite-item-isfulfillable-sync.md) | 1.0 Phase
|
|
22
|
-
| [NetSuite SuiteQL/REST API Reference](features/netsuite-suiteql-api-reference.md) |
|
|
23
|
-
| [NetSuite SuiteQL/REST Shim — Field Semantics](features/netsuite-suiteql-rest-shim.md) |
|
|
24
|
-
| [NetSuite Sync Alert Monitor (App_SystemMonitor_NetSuiteIntegration)](features/netsuite-sync-alert-monitor.md) |
|
|
25
|
-
| [Startech PC Matic B2B Sync (library)](features/startech-pcmaticb2b-sync.md) |
|
|
26
|
-
| [App_Api_Toga2 — TOGa2 API Client & 1.0↔2.0 Sync Bridge](features/toga2-api-client-and-bridge.md) | `App_Api_Toga2`
|
|
27
|
-
| [Rendering a 1.0 App_Email Template to HTML Offline (no DB, no send)](workflows/render-1-0-email-templates-offline.md) | Produce a standalone `.html` copy of any 1.0 `App_Email` template offline (no DB / mail / queue) via stubs; open when asked "show me exactly what we email the c |
|
|
5
|
+
| [Library (1.0 Framework) Architecture](architecture.md) | `library` is the shared library repository for **all 1.0 (legacy) applications** — the `App_` framework. |
|
|
6
|
+
| [Address Validation Gateway (App_Api_OfficeDepot::validateAddress + USPS fallback)](features/address-validation-gateway.md) | `App_Api_OfficeDepot::validateAddress()` is the shared 1.0 (`App_`) address-validation gateway. |
|
|
7
|
+
| [Where a new App_ class goes — the app/ folder IS a behavioral contract](features/app-class-placement-base-contracts.md) | In `library/app/`, choosing a folder is **not** a filing decision — the autoloader maps `App_<Folder>_<File>` to `app/<folder>/<file>.php`, and each folder's ba |
|
|
8
|
+
| [App_Sso — Reusable 1.0 SSO Initiation (SP-initiated SAML via saml.togahub.com)](features/app-sso-initiation.md) | `App_Sso` (`library/app/sso.php`) is the **1.0 port of the 2.0 SAML gateway's SP-initiated SSO initiation**, packaged as a reusable, framework-level capability |
|
|
9
|
+
| [Cron Execution Monitoring (App_Framework check-in/out → CronJobExecutions)](features/cron-execution-monitoring.md) | `App_Framework::cronInitialization()` / `App_Framework::cronFinished()` (in `library/app/framework.php`) give every 1.0 (`App_`) cron job a check-in/check-out l |
|
|
10
|
+
| [Diagnostic Dialog — View Recommended Services Routing](features/diagnostic-dialog-view-recommended-services.md) | Two "View Recommended Services" buttons exist in the TOGa Refresh 2026 SR view: 1. |
|
|
11
|
+
| [Elite Freshservice Sync (library)](features/elite-freshservice-sync.md) | `App_Api_Toga2` in `library/app/api/toga2.php` orchestrates bidirectional sync between TOGA 2 and TOGaDesk. |
|
|
12
|
+
| [App_Email Queued Sending & Attachments (Common.EmailsQueued)](features/email-queue-attachments.md) | `App_Email::send()` can either send **inline** (PHPMailer talks to SES right there) or **queue** the message: `base64(serialize($this))` is inserted into `Commo |
|
|
13
|
+
| [Branded HTML Email Templates (App_Email_Template)](features/email-templates.md) | `App_Email_Template` (`app/email/template.php`) is the base class for branded HTML emails in the 1.0 (`App_`) framework. |
|
|
14
|
+
| [App_Email Side Effects & Test Mode (how to send a real email that writes nothing)](features/email-test-mode-and-write-free-sends.md) | `App_Email::send()` is **not** side-effect free. |
|
|
15
|
+
| [Error Capture in 1.0 (App_Error_Capture → shared 2.0 Logs DB)](features/error-capture-1-0.md) | The 1.0 side of the platform error-reporting pipeline (TRUE-78188). |
|
|
16
|
+
| [HTTP 500 Error Monitor (App_SystemMonitor_500Error) — and why its \"Error Type\" is not a diagnosis](features/http-500-error-monitor.md) | `App_SystemMonitor_500Error` (`library/app/systemmonitor/500error.php`, title **"HTTP 500 Error Alert"**) is the 1.0 system monitor that watches **`Logs.Api` fo |
|
|
17
|
+
| [1.0 MVC Page Pattern & New-App Skeleton](features/mvc-page-pattern-and-app-skeleton.md) | This is the **reusable recipe for standing up a new 1.0 (`App_`) application** and for adding pages to one — the folder-based MVC routing, the page lifecycle, t |
|
|
18
|
+
| [NetSuite File Cabinet Content Retrieval via RESTlet (fetchInvoiceFile)](features/netsuite-filecabinet-restlet.md) | How 1.0 pulls **File Cabinet binary content** (invoice PDFs) out of NetSuite over REST. |
|
|
19
|
+
| [assetType from NetSuite itemtype during Item Sync (opt-in per client)](features/netsuite-item-assettype-sync.md) | `getCreateItem()` never sent `assetType`, so **every item the NetSuite importer created had `Items.assetTypeId = NULL`** — for every client, since the importer |
|
|
20
|
+
| [NetSuite classification → ItemClasses sync (opt-in per client)](features/netsuite-item-class-sync.md) | `App_Api_Toga2::getCreateItemClass()` mirrors NetSuite's **classification tree** into the client's `ItemClasses` table and stamps `Items.itemClassId`. |
|
|
21
|
+
| [isFulfillable from NetSuite during Item Sync (Phase 1)](features/netsuite-item-isfulfillable-sync.md) | This is the **1.0 (Phase 1)** half of the `isFulfillable` feature: reading the NetSuite `isfulfillable` flag during item sync and stamping it onto the **Agilant |
|
|
22
|
+
| [NetSuite SuiteQL/REST API Reference](features/netsuite-suiteql-api-reference.md) | General working reference for the Agilant NetSuite integration: how to authenticate, how SuiteQL behaves, and the confirmed schema of the tables/columns/codes w |
|
|
23
|
+
| [NetSuite SuiteQL/REST Shim — Field Semantics](features/netsuite-suiteql-rest-shim.md) | `App_Api_Netsuite_Rest` is the REST/SuiteQL replacement for the deprecated NetSuite SOAP toolkit. |
|
|
24
|
+
| [NetSuite Sync Alert Monitor (App_SystemMonitor_NetSuiteIntegration)](features/netsuite-sync-alert-monitor.md) | `App_SystemMonitor_NetSuiteIntegration` (`library/app/systemmonitor/netsuiteintegration.php`, title **"NetSuite Sync Alert"**) is a 1.0 system monitor that watc |
|
|
25
|
+
| [Startech PC Matic B2B Sync (library)](features/startech-pcmaticb2b-sync.md) | `library/app/api/toga2.php` handles bidirectional ticket sync for PC Matic B2B between TOGaDesk 1.0 and TOGA 2.0. |
|
|
26
|
+
| [App_Api_Toga2 — TOGa2 API Client & 1.0↔2.0 Sync Bridge](features/toga2-api-client-and-bridge.md) | `App_Api_Toga2` (`library/app/api/toga2.php`, ~8400 lines) is the **1.0-side client for the TOGa 2 (`_underscore`/api2) public API** *and* the home of the cross |
|
|
@@ -6,7 +6,7 @@ project: Library
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: architecture
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-
|
|
9
|
+
updated: 2026-06-08
|
|
10
10
|
owners: [jcardinal]
|
|
11
11
|
files:
|
|
12
12
|
- library/_.php
|
|
@@ -15,47 +15,57 @@ files:
|
|
|
15
15
|
related: []
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
-
The 1.0 `App_` framework core: bootstrap/autoloader, the `app/` (`App_`) + `browser/` (`Browser_`) class trees, and vendored packages; open for how any 1.0 app loads and where server-side classes live.
|
|
19
|
-
|
|
20
18
|
## Summary
|
|
21
19
|
|
|
22
|
-
`library` is the shared
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
`library` is the shared library repository for **all 1.0 (legacy) applications** — the
|
|
21
|
+
`App_` framework. It provides every server-side PHP asset those apps consume:
|
|
22
|
+
server-side classes, vendored third-party packages, and the bootstrap/autoloader.
|
|
23
|
+
Target PHP 7.2+, compatible through 8.1.
|
|
25
24
|
|
|
26
25
|
## Role in the stack
|
|
27
26
|
|
|
28
27
|
- **`library/`** — server-side PHP classes, third-party packages, bootstrap/autoloader.
|
|
29
|
-
- **Application repos** — each `require`s `library/_.php` to bootstrap the framework.
|
|
30
|
-
- **`resources/` repo** — purely front-end assets (JS/CSS).
|
|
28
|
+
- **Application repos** — each app `require`s `library/_.php` to bootstrap the framework.
|
|
29
|
+
- **`resources/` repo** — purely front-end assets (JS/CSS). **Do not put front-end here.**
|
|
31
30
|
|
|
32
31
|
## Bootstrap & autoloader (`_.php`)
|
|
33
32
|
|
|
34
|
-
`_.php` is the single framework include. Every app starts with
|
|
33
|
+
`_.php` is the single framework include. Every app starts with
|
|
34
|
+
`require_once '/path/to/library/_.php';`. It:
|
|
35
35
|
|
|
36
|
-
1. Sets PHP environment — `display_errors`, `error_reporting(E_ALL)`, timezone
|
|
37
|
-
|
|
36
|
+
1. Sets PHP environment — `display_errors`, `error_reporting(E_ALL)`, timezone
|
|
37
|
+
`America/Chicago`.
|
|
38
|
+
2. Defines constants — `__APPROOT__` (resolved by walking up from the script's directory
|
|
39
|
+
until a folder named `_` is found) and `__LIBROOT__` (the `library/` dir).
|
|
38
40
|
3. Registers the autoloader via `spl_autoload_register('autoloader')`.
|
|
39
41
|
|
|
40
|
-
Global helper: `debugVar($input, $stopExecution, $withHrLineBreaker)` — dumps a variable
|
|
42
|
+
Global helper: `debugVar($input, $stopExecution, $withHrLineBreaker)` — dumps a variable
|
|
43
|
+
as HTML `<PRE>`, optionally halting. **Remove all `debugVar()` calls before merging.**
|
|
41
44
|
|
|
42
45
|
### Class-to-file mapping
|
|
43
46
|
|
|
44
|
-
Convert the class name to a path by replacing every `_` with `/`, then **lowercase the
|
|
47
|
+
Convert the class name to a path by replacing every `_` with `/`, then **lowercase the
|
|
48
|
+
entire result** and append `.php`:
|
|
45
49
|
|
|
46
50
|
```
|
|
47
51
|
App_Email_Nycdoe_InstallationConfirmation
|
|
48
52
|
→ app/email/nycdoe/installationconfirmation.php (under __APPROOT__ or __LIBROOT__)
|
|
49
53
|
```
|
|
50
54
|
|
|
55
|
+
- All folder/file names **must be lowercase**.
|
|
51
56
|
- Class names are **not** case-sensitive (autoloader lowercases before lookup).
|
|
52
|
-
- Both `__APPROOT__` and `__LIBROOT__` are checked, so app-level classes can **shadow**
|
|
57
|
+
- Both `__APPROOT__` and `__LIBROOT__` are checked, so app-level classes can **shadow**
|
|
58
|
+
library classes. Namespace separators (`\`) normalize to `_`.
|
|
53
59
|
|
|
54
60
|
## Custom code — `app/` and `browser/`
|
|
55
61
|
|
|
56
62
|
### `app/` — back-end logic (prefix `App_`)
|
|
57
63
|
|
|
58
|
-
Pure server-side business logic, no HTML output. Core singletons at root (`App_Config`,
|
|
64
|
+
Pure server-side business logic, no HTML output. Core singletons at root (`App_Config`,
|
|
65
|
+
`App_Database`, `App_Auth`, `App_Api`, `App_Model`, `App_Email`, `App_Session`).
|
|
66
|
+
Subfolders: `api/` (vendor integrations), `model/`, `email/`, `notification/`, `pdf/`,
|
|
67
|
+
`asnprocessor/`, `catalog/`, `client/` (client overrides), `events/`, `edi/`, `trait/`,
|
|
68
|
+
`systemmonitor/`, `mvc/`.
|
|
59
69
|
|
|
60
70
|
```php
|
|
61
71
|
class App_Model_Client extends App_Model {
|
|
@@ -66,23 +76,40 @@ class App_Model_Client extends App_Model {
|
|
|
66
76
|
}
|
|
67
77
|
```
|
|
68
78
|
|
|
69
|
-
API pattern: `abstract class App_Api` with static methods; `class App_Api_Microsoft
|
|
79
|
+
API pattern: `abstract class App_Api` with static methods; `class App_Api_Microsoft
|
|
80
|
+
extends App_Api` with `initialize()`.
|
|
70
81
|
|
|
71
82
|
### `browser/` — server-rendered UI (prefix `Browser_`)
|
|
72
83
|
|
|
73
|
-
PHP classes that emit HTML. Core components (`Browser_Form`, `Browser_Datagrid`,
|
|
84
|
+
PHP classes that emit HTML. Core components (`Browser_Form`, `Browser_Datagrid`,
|
|
85
|
+
`Browser_Dialog`, `Browser_Widget`, `Browser_Sidebar`) plus subfolders: `datagrid/`
|
|
86
|
+
(140+ grid views), `form/`, `dialog/`, `search/`, `widget/`, `status/` (35+ states),
|
|
87
|
+
`sidebar/`, `buttonbar/`, `calendar/`, `chat/`.
|
|
74
88
|
|
|
75
89
|
## Third-party packages (vendored, no Composer)
|
|
76
90
|
|
|
77
|
-
|
|
91
|
+
The consuming apps use **no Composer** — this library is the "vendor" directory. Packages
|
|
92
|
+
are top-level folders: `phpmailer/`, `twilio/`, `php-imap2/`, `fpdf/`/`tcpdf/`,
|
|
93
|
+
`PhpOffice/`/`phpexcel/`, `Smalot/`, `phpseclib/`, SAML libs, barcode/chart libs,
|
|
94
|
+
`netsuitetoolkit/`, `payeezy/`, `Zend/`/`Psr/`/`pear/`, etc. The only Composer-managed
|
|
95
|
+
packages: `phpoffice/phpspreadsheet ^1.6`, `smalot/pdfparser ^0.14.0`.
|
|
78
96
|
|
|
79
|
-
##
|
|
97
|
+
## Key conventions
|
|
80
98
|
|
|
81
|
-
|
|
99
|
+
- **Lowercase everything** under `app/` and `browser/`.
|
|
100
|
+
- **No front-end assets here** — JS/CSS belong in `resources/`.
|
|
101
|
+
- **No Composer in consuming apps** — add packages directly to `library/`.
|
|
102
|
+
- **`debugVar()`** is the debug helper; remove all calls before merging.
|
|
103
|
+
- **Timezone** is always `America/Chicago` (set in `_.php`).
|
|
104
|
+
- **`__APPROOT__`** is resolved by locating an ancestor folder named `_`; each app must
|
|
105
|
+
have that `_` folder at its root.
|
|
82
106
|
|
|
83
|
-
##
|
|
107
|
+
## App_String cross-framework crypto (`encryptWithKey` / `decryptWithKey`)
|
|
84
108
|
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
109
|
+
`App_String::encryptWithKey($data, $key)` and `decryptWithKey($data, $key)` (public static) do
|
|
110
|
+
**AES-256-CBC**: random IV via `random_bytes`, returning `base64(iv . ciphertext)` with openssl
|
|
111
|
+
flag `0`. They are **deliberately byte-for-byte interoperable** with the 2.0
|
|
112
|
+
`_String::encryptWithKey` / `decryptWithKey`, so a SAML handoff token encrypted by the 2.0
|
|
113
|
+
gateway decrypts in any 1.0 app (round-trip verified). Net-new methods — no existing method
|
|
114
|
+
changed, no behavior change for existing apps. First consumer: the Tools app's `App_Auth`
|
|
115
|
+
(`1.0/apps/tools/features/saml-sso-auth.md`).
|
|
@@ -6,7 +6,7 @@ project: Library
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-
|
|
9
|
+
updated: 2026-08-13
|
|
10
10
|
owners: [jcardinal]
|
|
11
11
|
files:
|
|
12
12
|
- library/app/api/officedepot.php
|
|
@@ -15,29 +15,63 @@ related:
|
|
|
15
15
|
- ../../toga/features/odp-customer-search-loyalty-persistence.md
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
-
The shared 1.0 address-validation gateway (`App_Api_OfficeDepot::validateAddress` → USPS fallback); open when standardizing/verifying a typed address before save, or debugging a saved-raw-address bug.
|
|
19
|
-
|
|
20
18
|
## Summary
|
|
19
|
+
`App_Api_OfficeDepot::validateAddress()` is the shared 1.0 (`App_`) address-validation gateway.
|
|
20
|
+
It is the entry point every TOGa 1.0 flow calls (via classic AJAX
|
|
21
|
+
`ajaxAction('App_Api_OfficeDepot','validateAddress')`) to standardize/verify a typed address
|
|
22
|
+
before it is saved. It wraps ODP's address-validation service and falls back to
|
|
23
|
+
`App_Api_USPS::validateAddress()` (USPS REST API v3, OAuth `client_credentials`, in
|
|
24
|
+
`library/app/api/usps.php`). It returns a standardized address (corrected city/casing/zip) that
|
|
25
|
+
callers are expected to write back before saving.
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## How it works
|
|
25
|
-
|
|
26
|
-
Entry points:
|
|
27
|
+
## Key files / entry points
|
|
27
28
|
- `library/app/api/officedepot.php` — `App_Api_OfficeDepot::validateAddress()`, the gateway.
|
|
28
29
|
- `library/app/api/usps.php` — `App_Api_USPS::validateAddress()`, the fallback carrier.
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
## How it works
|
|
32
|
+
1. **Endpoint selection.** The gateway calls the ODP **sandbox** endpoint when
|
|
33
|
+
`App_Registry::inTestMode()` is true (`inTestMode` = `config['internal']['test_mode'] > 0`),
|
|
34
|
+
and the **live** ODP endpoint otherwise. Production is effectively hard-pinned to live
|
|
35
|
+
(comment "2024-01-22 JC - Always using production...").
|
|
36
|
+
2. **On a real ODP answer** (HTTP 200, whether it accepts or rejects the address) the gateway
|
|
37
|
+
returns ODP's standardized result.
|
|
38
|
+
3. **On any non-200 ODP response** (sandbox down/expired, etc.) it falls back to
|
|
39
|
+
`App_Api_USPS::validateAddress()` and returns the USPS result — a genuine standardization
|
|
40
|
+
**or** a genuine bad-address rejection both count as a real answer and are returned.
|
|
41
|
+
4. **Only when BOTH ODP and USPS are unavailable** does it return `array('success' => true)`
|
|
42
|
+
with no standardized fields (fail-open, so associates are never hard-blocked by an outage).
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
- **
|
|
39
|
-
|
|
44
|
+
## Gotchas / known issues
|
|
45
|
+
- **Beta-bypass class of bug (fixed 2026-08-13).** Previously the ODP-failure `else` branch
|
|
46
|
+
returned `array('success' => true)` with **no** standardized address fields and the USPS
|
|
47
|
+
fallback was commented out. Beta/test uses the ODP **sandbox**; when the sandbox was
|
|
48
|
+
down/expired, callers saw `success:true` and saved the **raw typed address** (wrong city,
|
|
49
|
+
wrong casing) with no validation. Production was unaffected because it hits the working live
|
|
50
|
+
ODP endpoint. The fix restores the USPS fallback so a validation only truly fails open when
|
|
51
|
+
**both** carriers are down.
|
|
52
|
+
- **"Both unavailable" must check BOTH USPS service-down strings.** USPS signals unavailability
|
|
53
|
+
two ways: `'Address validation service is temporarily unavailable'` **and**
|
|
54
|
+
`'USPS OAuth authentication failed'`. The fail-open condition must match either. Checking only
|
|
55
|
+
the first string wrongly blocks associates when ODP is down *and* USPS OAuth also fails
|
|
56
|
+
(a php-reviewer pass caught this).
|
|
57
|
+
- **Front-end write-back anti-pattern (widespread, mostly UNFIXED).** Many 1.0 front-end
|
|
58
|
+
callbacks use the gateway response only as a pass/fail **gate**, then rebuild the save payload
|
|
59
|
+
from the raw DOM inputs — discarding the standardized `address1`/`city`/`state`/`zipCode` the
|
|
60
|
+
gateway returned. So even a successful validation never persists the corrected address. Known
|
|
61
|
+
flows with this anti-pattern still present:
|
|
62
|
+
`toga/app/togarefresh2026/servicerequests/finalizequote.php`,
|
|
63
|
+
`toga/app/togarefresh2026/appointment/select.php`,
|
|
64
|
+
`toga/app/servicerequests/builder.php`, `toga/app/loaners/checkout.php`,
|
|
65
|
+
`toga/app/jobjackets/view.php`, and the `togarefresh2023` variants. The 2026-08-13 gateway fix
|
|
66
|
+
protects all of them from the beta bypass, but the write-back was only corrected in the
|
|
67
|
+
`togarefresh2026` customersearch flow (see related doc). When touching any of these, write the
|
|
68
|
+
standardized address back into the inputs before building the save payload.
|
|
40
69
|
|
|
41
|
-
## Related
|
|
70
|
+
## Related docs
|
|
71
|
+
- `../../toga/features/odp-customer-search-loyalty-persistence.md` — the customersearch save
|
|
72
|
+
flow, where the write-back fix was applied.
|
|
42
73
|
|
|
43
|
-
|
|
74
|
+
## Change history
|
|
75
|
+
- 2026-08-13 — Fix: restored the USPS fallback in `App_Api_OfficeDepot::validateAddress` so the
|
|
76
|
+
beta/sandbox path no longer fakes `success:true` and saves unvalidated addresses; fail-open now
|
|
77
|
+
requires BOTH ODP and USPS down, checking both USPS service-down strings. (jcardinal)
|