Zammad is a web based open source helpdesk/customer support system.
This report summarizes scanner evidence for zammad/zammad, a Ruby project with 6,060 GitHub stars. SynthScan examined 1,125,687 lines of code across 10158 source files, recording 2870 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 3.3 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 2119 finding(s).
Are imports declared and package/API names verified? 751 finding(s).
Are wrappers, guards, and repeated structures necessary? 1418 finding(s).
Which changes need focused human review? 2870 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2870 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .gitlab/dependency_digest.rb | 496 | def report_transitive_section(changes, advisories, notes) | CODE |
| LOW | .gitlab/dependency_digest.rb | 696 | def compose_lock_diff_section(file, diff, known) | CODE |
| LOW | app/frontend/shared/initializer/globalComponents.ts | 29 | export default function initializeGlobalComponents(app: App): void { | CODE |
| LOW | app/frontend/shared/initializer/storeSubscriptions.ts | 11 | export default function initializeStoreSubscriptions(): void { | CODE |
| LOW | app/frontend/shared/initializer/globalProperties.ts | 9 | export default function initializeGlobalProperties(app: App): void { | CODE |
| LOW | app/frontend/shared/types/global.d.ts | 24 | declare function getCurrentQueryPollingConfig(): QueryPollingConfig | CODE |
| LOW | …erver/apollo/cache/utils/registerIncomingQueryMerge.ts | 15 | export default function registerIncomingQueryMerge( | CODE |
| LOW | …/cache/utils/registerNotNormalizedObjectFieldsMerge.ts | 8 | export default function registerNotNormalizedObjectFieldsMerge( | CODE |
| LOW | …d/shared/server/apollo/cache/utils/registerRedirect.ts | 8 | export default function registerIncomingQueryMerge( | CODE |
| LOW | …er/apollo/cache/utils/registerOffsetStylePagination.ts | 38 | export default function registerOffsetStylePagination( | CODE |
| LOW | …server/apollo/cache/utils/registerIncomingTypeMerge.ts | 11 | export default function registerIncomingQueryMerge( | CODE |
| LOW | …ver/apollo/cache/utils/registerRelayStylePagination.ts | 8 | export default function registerRelayStylePagination( | CODE |
| LOW | …d/components/Form/graphql/queries/formUpdater.mocks.ts | 11 | export function waitForFormUpdaterQueryCalls() { | CODE |
| LOW | …d/components/Form/graphql/queries/formUpdater.mocks.ts | 15 | export function mockFormUpdaterQueryError(message: string, extensions: {type: ErrorTypes.GraphQLErrorTypes }) { | CODE |
| LOW | …/FieldFile/graphql/mutations/uploadCache/remove.api.ts | 15 | export function useFormUploadCacheRemoveMutation(options: VueApolloComposable.UseMutationOptions<Types.FormUploadCacheRe | CODE |
| LOW⚡ | …s/FieldFile/graphql/mutations/uploadCache/add.mocks.ts | 7 | export function mockFormUploadCacheAddMutation(defaults: Mocks.MockDefaultsValue<Types.FormUploadCacheAddMutation, Types | CODE |
| LOW⚡ | …s/FieldFile/graphql/mutations/uploadCache/add.mocks.ts | 11 | export function waitForFormUploadCacheAddMutationCalls() { | CODE |
| LOW⚡ | …s/FieldFile/graphql/mutations/uploadCache/add.mocks.ts | 15 | export function mockFormUploadCacheAddMutationError(message: string, extensions: {type: ErrorTypes.GraphQLErrorTypes }) | CODE |
| LOW⚡ | …ieldFile/graphql/mutations/uploadCache/remove.mocks.ts | 7 | export function mockFormUploadCacheRemoveMutation(defaults: Mocks.MockDefaultsValue<Types.FormUploadCacheRemoveMutation, | CODE |
| LOW⚡ | …ieldFile/graphql/mutations/uploadCache/remove.mocks.ts | 11 | export function waitForFormUploadCacheRemoveMutationCalls() { | CODE |
| LOW⚡ | …ieldFile/graphql/mutations/uploadCache/remove.mocks.ts | 15 | export function mockFormUploadCacheRemoveMutationError(message: string, extensions: {type: ErrorTypes.GraphQLErrorTypes | CODE |
| LOW | …lds/FieldFile/graphql/mutations/uploadCache/add.api.ts | 20 | export function useFormUploadCacheAddMutation(options: VueApolloComposable.UseMutationOptions<Types.FormUploadCacheAddMu | CODE |
| LOW⚡ | …mpleteSearchObjectAttributeExternalDataSource.mocks.ts | 7 | export function mockAutocompleteSearchObjectAttributeExternalDataSourceQuery(defaults: Mocks.MockDefaultsValue<Types.Aut | CODE |
| LOW⚡ | …mpleteSearchObjectAttributeExternalDataSource.mocks.ts | 11 | export function waitForAutocompleteSearchObjectAttributeExternalDataSourceQueryCalls() { | CODE |
| LOW⚡ | …mpleteSearchObjectAttributeExternalDataSource.mocks.ts | 15 | export function mockAutocompleteSearchObjectAttributeExternalDataSourceQueryError(message: string, extensions: {type: Er | CODE |
| LOW | …completeSearchObjectAttributeExternalDataSource.api.ts | 19 | export function useAutocompleteSearchObjectAttributeExternalDataSourceQuery(variables: Types.AutocompleteSearchObjectAtt | CODE |
| LOW | …completeSearchObjectAttributeExternalDataSource.api.ts | 22 | export function useAutocompleteSearchObjectAttributeExternalDataSourceLazyQuery(variables?: Types.AutocompleteSearchObje | CODE |
| LOW⚡ | …/graphql/queries/autocompleteSearch/recipient.mocks.ts | 7 | export function mockAutocompleteSearchRecipientQuery(defaults: Mocks.MockDefaultsValue<Types.AutocompleteSearchRecipient | CODE |
| LOW⚡ | …/graphql/queries/autocompleteSearch/recipient.mocks.ts | 11 | export function waitForAutocompleteSearchRecipientQueryCalls() { | CODE |
| LOW⚡ | …/graphql/queries/autocompleteSearch/recipient.mocks.ts | 15 | export function mockAutocompleteSearchRecipientQueryError(message: string, extensions: {type: ErrorTypes.GraphQLErrorTyp | CODE |
| LOW | …nt/graphql/queries/autocompleteSearch/recipient.api.ts | 21 | export function useAutocompleteSearchRecipientQuery(variables: Types.AutocompleteSearchRecipientQueryVariables | VueComp | CODE |
| LOW | …nt/graphql/queries/autocompleteSearch/recipient.api.ts | 24 | export function useAutocompleteSearchRecipientLazyQuery(variables?: Types.AutocompleteSearchRecipientQueryVariables | Vu | CODE |
| LOW | …ustomer/graphql/queries/autocompleteSearch/user.api.ts | 30 | export function useAutocompleteSearchUserQuery(variables: Types.AutocompleteSearchUserQueryVariables | VueCompositionApi | CODE |
| LOW | …ustomer/graphql/queries/autocompleteSearch/user.api.ts | 33 | export function useAutocompleteSearchUserLazyQuery(variables?: Types.AutocompleteSearchUserQueryVariables | VueCompositi | CODE |
| LOW⚡ | …er/graphql/queries/autocompleteSearch/generic.mocks.ts | 7 | export function mockAutocompleteSearchGenericQuery(defaults: Mocks.MockDefaultsValue<Types.AutocompleteSearchGenericQuer | CODE |
| LOW⚡ | …er/graphql/queries/autocompleteSearch/generic.mocks.ts | 11 | export function waitForAutocompleteSearchGenericQueryCalls() { | CODE |
| LOW⚡ | …er/graphql/queries/autocompleteSearch/generic.mocks.ts | 15 | export function mockAutocompleteSearchGenericQueryError(message: string, extensions: {type: ErrorTypes.GraphQLErrorTypes | CODE |
| LOW⚡ | …tomer/graphql/queries/autocompleteSearch/user.mocks.ts | 7 | export function mockAutocompleteSearchUserQuery(defaults: Mocks.MockDefaultsValue<Types.AutocompleteSearchUserQuery, Typ | CODE |
| LOW⚡ | …tomer/graphql/queries/autocompleteSearch/user.mocks.ts | 11 | export function waitForAutocompleteSearchUserQueryCalls() { | CODE |
| LOW⚡ | …tomer/graphql/queries/autocompleteSearch/user.mocks.ts | 15 | export function mockAutocompleteSearchUserQueryError(message: string, extensions: {type: ErrorTypes.GraphQLErrorTypes }) | CODE |
| LOW | …omer/graphql/queries/autocompleteSearch/generic.api.ts | 81 | export function useAutocompleteSearchGenericQuery(variables: Types.AutocompleteSearchGenericQueryVariables | VueComposit | CODE |
| LOW | …omer/graphql/queries/autocompleteSearch/generic.api.ts | 84 | export function useAutocompleteSearchGenericLazyQuery(variables?: Types.AutocompleteSearchGenericQueryVariables | VueCom | CODE |
| LOW⚡ | …gent/graphql/queries/autocompleteSearch/agent.mocks.ts | 7 | export function mockAutocompleteSearchAgentQuery(defaults: Mocks.MockDefaultsValue<Types.AutocompleteSearchAgentQuery, T | CODE |
| LOW⚡ | …gent/graphql/queries/autocompleteSearch/agent.mocks.ts | 11 | export function waitForAutocompleteSearchAgentQueryCalls() { | CODE |
| LOW⚡ | …gent/graphql/queries/autocompleteSearch/agent.mocks.ts | 15 | export function mockAutocompleteSearchAgentQueryError(message: string, extensions: {type: ErrorTypes.GraphQLErrorTypes } | CODE |
| LOW | …dAgent/graphql/queries/autocompleteSearch/agent.api.ts | 30 | export function useAutocompleteSearchAgentQuery(variables: Types.AutocompleteSearchAgentQueryVariables | VueCompositionA | CODE |
| LOW | …dAgent/graphql/queries/autocompleteSearch/agent.api.ts | 33 | export function useAutocompleteSearchAgentLazyQuery(variables?: Types.AutocompleteSearchAgentQueryVariables | VueComposi | CODE |
| LOW⚡ | …aphql/queries/autocompleteSearch/organization.mocks.ts | 7 | export function mockAutocompleteSearchOrganizationQuery(defaults: Mocks.MockDefaultsValue<Types.AutocompleteSearchOrgani | CODE |
| LOW⚡ | …aphql/queries/autocompleteSearch/organization.mocks.ts | 11 | export function waitForAutocompleteSearchOrganizationQueryCalls() { | CODE |
| LOW⚡ | …aphql/queries/autocompleteSearch/organization.mocks.ts | 15 | export function mockAutocompleteSearchOrganizationQueryError(message: string, extensions: {type: ErrorTypes.GraphQLError | CODE |
| LOW | …graphql/queries/autocompleteSearch/organization.api.ts | 25 | export function useAutocompleteSearchOrganizationQuery(variables: Types.AutocompleteSearchOrganizationQueryVariables | V | CODE |
| LOW | …graphql/queries/autocompleteSearch/organization.api.ts | 28 | export function useAutocompleteSearchOrganizationLazyQuery(variables?: Types.AutocompleteSearchOrganizationQueryVariable | CODE |
| LOW⚡ | …ns/knowledgeBase/suggestion/content/transform.mocks.ts | 7 | export function mockKnowledgeBaseAnswerSuggestionContentTransformMutation(defaults: Mocks.MockDefaultsValue<Types.Knowle | CODE |
| LOW⚡ | …ns/knowledgeBase/suggestion/content/transform.mocks.ts | 11 | export function waitForKnowledgeBaseAnswerSuggestionContentTransformMutationCalls() { | CODE |
| LOW⚡ | …ns/knowledgeBase/suggestion/content/transform.mocks.ts | 15 | export function mockKnowledgeBaseAnswerSuggestionContentTransformMutationError(message: string, extensions: {type: Error | CODE |
| LOW | …ions/knowledgeBase/suggestion/content/transform.api.ts | 29 | export function useKnowledgeBaseAnswerSuggestionContentTransformMutation(options: VueApolloComposable.UseMutationOptions | CODE |
| LOW | …graphql/queries/knowledgeBase/answerSuggestions.api.ts | 21 | export function useKnowledgeBaseAnswerSuggestionsQuery(variables: Types.KnowledgeBaseAnswerSuggestionsQueryVariables | V | CODE |
| LOW | …graphql/queries/knowledgeBase/answerSuggestions.api.ts | 24 | export function useKnowledgeBaseAnswerSuggestionsLazyQuery(variables?: Types.KnowledgeBaseAnswerSuggestionsQueryVariable | CODE |
| LOW⚡ | …aphql/queries/knowledgeBase/answerSuggestions.mocks.ts | 7 | export function mockKnowledgeBaseAnswerSuggestionsQuery(defaults: Mocks.MockDefaultsValue<Types.KnowledgeBaseAnswerSugge | CODE |
| LOW⚡ | …aphql/queries/knowledgeBase/answerSuggestions.mocks.ts | 11 | export function waitForKnowledgeBaseAnswerSuggestionsQueryCalls() { | CODE |
| 1358 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .gitlab/ci/review-app.yml | 73 | "login": "admin@example.com", | CODE |
| LOW | .gitlab/ci/review-app.yml | 76 | "email": "admin@example.com", | CODE |
| LOW | .gitlab/ci/review-app.yml | 91 | "users": ["admin@example.com", "agent1@example.com"] | CODE |
| LOW | .gitlab/ci/review-app.yml | 95 | "users": ["admin@example.com", "agent1@example.com"], | CODE |
| LOW | .gitlab/ci/test/api_client.yml | 25 | ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_USERNAME: "admin@example.com" | CODE |
| LOW | …s/Form/fields/FieldTreeSelect/treeselect-visuals.cy.ts | 36 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar.' | CODE |
| LOW | …s/Form/fields/FieldTreeSelect/treeselect-visuals.cy.ts | 36 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar.' | CODE |
| LOW | …ed/components/Form/fields/FieldTags/tags-visuals.cy.ts | 11 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar. Quisque | CODE |
| LOW | …ed/components/Form/fields/FieldTags/tags-visuals.cy.ts | 11 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar. Quisque | CODE |
| LOW | …nents/Form/fields/FieldTextarea/textarea-visuals.cy.ts | 13 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar. Quisque | CODE |
| LOW | …nents/Form/fields/FieldTextarea/textarea-visuals.cy.ts | 13 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar. Quisque | CODE |
| LOW | …omponents/Form/fields/FieldSelect/select-visuals.cy.ts | 34 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar. Quis | CODE |
| LOW | …omponents/Form/fields/FieldSelect/select-visuals.cy.ts | 34 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar. Quis | CODE |
| LOW | …rm/fields/FieldAutoComplete/autocomplete-visuals.cy.ts | 34 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar.', | CODE |
| LOW | …rm/fields/FieldAutoComplete/autocomplete-visuals.cy.ts | 34 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum sem quis purus elementum pulvinar.', | CODE |
| LOW | …FieldEditor/editor-mention-user-exit-with-escape.cy.ts | 34 | fullname: 'John Doe', | CODE |
| LOW | …ents/Form/fields/FieldEditor/editor-mention-user.cy.ts | 46 | fullname: 'John Doe', | CODE |
| LOW | …elds/FieldEditor/editor-mention-user-with-spaces.cy.ts | 34 | fullname: 'John Doe', | CODE |
| LOW | …elds/FieldEditor/editor-mention-user-with-spaces.cy.ts | 48 | .and('contain.text', 'John Doe') | CODE |
| LOW | app/frontend/tests/support/mock-webauthn.ts | 40 | name: 'user@example.com', | CODE |
| LOW | …/graphql/builders/__tests__/subscription-calls.spec.ts | 47 | const fullname = 'John Doe' | CODE |
| LOW | …frontend/shared/form/features/translateWrapperProps.ts | 12 | const propsToTranslate = ['label', 'placeholder', 'help'] | CODE |
| LOW | …frontend/shared/form/features/translateWrapperProps.ts | 13 | const attrsToTranslate = ['placeholder'] | CODE |
| LOW | …/form/features/__tests__/translateWrapperProps.spec.ts | 25 | props: ['label', 'placeholder', 'help'], | CODE |
| LOW | app/frontend/shared/stores/__tests__/session.spec.ts | 19 | fullname: 'John Doe', | CODE |
| LOW | app/frontend/shared/stores/__tests__/session.spec.ts | 150 | fullname: 'Jane Doe', | CODE |
| LOW | …frontend/shared/components/Form/__tests__/Form.spec.ts | 740 | fullname: 'John Doe', | CODE |
| LOW | …frontend/shared/components/Form/__tests__/Form.spec.ts | 749 | expect(await wrapper.findByLabelText('Customer')).toHaveTextContent('John Doe') | CODE |
| LOW | …frontend/shared/components/Form/__tests__/Form.spec.ts | 837 | fullname: 'John Doe', | CODE |
| LOW | …frontend/shared/components/Form/__tests__/Form.spec.ts | 896 | value: 'John Doe', | CODE |
| LOW | …frontend/shared/components/Form/__tests__/Form.spec.ts | 918 | fullname: 'John Doe', | CODE |
| LOW | …m/fields/FieldPassword/__tests__/FieldPassword.spec.ts | 43 | expect(input).not.toHaveAttribute('placeholder') | CODE |
| LOW | …m/fields/FieldPassword/__tests__/FieldPassword.spec.ts | 62 | expect(input).toHaveAttribute('placeholder', 'Enter your password') | CODE |
| LOW | …ents/Form/fields/FieldList/__tests__/FieldList.spec.ts | 39 | <FormKit type="text" name="email-adress" id="text" value="admin@example.com" /> | CODE |
| LOW | …ents/Form/fields/FieldList/__tests__/FieldList.spec.ts | 52 | expect(node?.value).toStrictEqual(['admin@example.com', 'admin2@example.com']) | CODE |
| LOW | …m/fields/FieldTextarea/__tests__/FieldTextarea.spec.ts | 41 | expect(textarea).not.toHaveAttribute('placeholder') | CODE |
| LOW | …m/fields/FieldTextarea/__tests__/FieldTextarea.spec.ts | 61 | expect(textarea).toHaveAttribute('placeholder', 'Enter your body') | CODE |
| LOW | …m/fields/FieldTextarea/__tests__/FieldTextarea.spec.ts | 116 | expect(textarea).toHaveAttribute('placeholder', 'Enter your body') | CODE |
| LOW | …m/fields/FieldTextarea/__tests__/FieldTextarea.spec.ts | 124 | expect(textarea).toHaveAttribute('placeholder', 'Gib deinen Text ein') | CODE |
| LOW | …/Form/fields/FieldInputs/__tests__/FieldInputs.spec.ts | 34 | expect(input).not.toHaveAttribute('placeholder') | CODE |
| LOW | …/Form/fields/FieldInputs/__tests__/FieldInputs.spec.ts | 53 | expect(input).toHaveAttribute('placeholder', 'Enter your title') | CODE |
| LOW⚡ | …/Form/fields/FieldInputs/__tests__/FieldInputs.spec.ts | 100 | value: 'admin@example.com', | CODE |
| LOW⚡ | …/Form/fields/FieldInputs/__tests__/FieldInputs.spec.ts | 109 | const input = wrapper.getByDisplayValue('admin@example.com') | CODE |
| LOW⚡ | …/Form/fields/FieldInputs/__tests__/FieldInputs.spec.ts | 114 | expect(node?.value).toBe('admin@example.com') | CODE |
| LOW | …nts/ObjectAttributes/__tests__/ObjectAttribute.spec.ts | 168 | fullname: 'John Doe', | CODE |
| LOW | …nts/ObjectAttributes/__tests__/ObjectAttribute.spec.ts | 183 | expect(view.getByText('John Doe')).toBeInTheDocument() | CODE |
| LOW | …/CommonInputSearch/__tests__/CommonInputSearch.spec.ts | 21 | expect(search).toHaveAttribute('placeholder', 'Search…') | CODE |
| LOW⚡ | …ts/Form/fields/FieldAgent/__tests__/FieldAgent.spec.ts | 117 | fullname: 'John Doe', | CODE |
| LOW⚡ | …ts/Form/fields/FieldAgent/__tests__/FieldAgent.spec.ts | 127 | expect(wrapper.getByRole('listitem')).toHaveTextContent('John Doe') | CODE |
| LOW⚡ | …ts/Form/fields/FieldAgent/__tests__/FieldAgent.spec.ts | 134 | fullname: 'Jane Doe', | CODE |
| LOW⚡ | …ts/Form/fields/FieldAgent/__tests__/FieldAgent.spec.ts | 141 | expect(wrapper.getByRole('listitem')).toHaveTextContent('Jane Doe') | CODE |
| LOW | …ieldEditor/__tests__/FieldEditorSuggestionList.spec.ts | 155 | fullname: 'John Doe', | CODE |
| LOW | …ieldEditor/__tests__/FieldEditorSuggestionList.spec.ts | 189 | fullname: 'John Doe', | CODE |
| LOW | …ieldEditor/__tests__/FieldEditorSuggestionList.spec.ts | 220 | fullname: 'John Doe', | CODE |
| LOW | …sktop/components/CommonInlineEdit/CommonInlineEdit.vue | 380 | :placeholder="placeholder" | CODE |
| LOW | …sktop/components/CommonInlineEdit/CommonInlineEdit.vue | 396 | :placeholder="placeholder" | CODE |
| LOW | …ndDropBulk/components/__tests__/BulkScrollList.spec.ts | 24 | label: 'John Doe', | CODE |
| LOW | …DropBulk/__tests__/DragAndDropBulkBottomDrawer.spec.ts | 97 | { value: 42, label: 'John Doe', object: { id: convertToGraphQLId('User', '42') } }, | CODE |
| LOW | …DropBulk/__tests__/DragAndDropBulkBottomDrawer.spec.ts | 108 | expect(await wrapper.findByText('John Doe')).toBeVisible() | CODE |
| LOW | …DropBulk/__tests__/DragAndDropBulkBottomDrawer.spec.ts | 164 | { value: 42, label: 'John Doe', object: { id: convertToGraphQLId('User', '42') } }, | CODE |
| 675 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .markdownlint.yml | 1 | ######################################## | COMMENT |
| LOW | .gitlab/dependency_digest.rb | 1 | #!/usr/bin/env ruby | COMMENT |
| LOW | .gitlab/dependency_digest.rb | 21 | # The result is posted to an incoming webhook as an attachment whose color works | COMMENT |
| LOW | .gitlab/configure_environment.rb | 1 | #!/usr/bin/env ruby | COMMENT |
| LOW | .gitlab/check_native_gem_platforms.rb | 1 | #!/usr/bin/env ruby | COMMENT |
| LOW | .gitlab/ci/automate.yml | 61 | # | COMMENT |
| LOW | .gitlab/ci/__includes__/job_rules.yml | 1 | # Rules decide whether a job is added to a pipeline at all, and if so, whether it | COMMENT |
| LOW | .gitlab/ci/__includes__/job_rules.yml | 21 | # `extends:`. There is deliberately only one of them, see below. | COMMENT |
| LOW | .gitlab/ci/__includes__/job_rules.yml | 41 | # entry. A guard placed further down is dead code. | COMMENT |
| LOW | .gitlab/ci/__includes__/job_needs.yml | 1 | # Building blocks for `needs:`, combined per job: | COMMENT |
| LOW | app/frontend/tests/support/mock-globalState.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …d/tests/graphql/factories/types/KnowledgeBaseAnswer.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | app/frontend/tests/graphql/factories/types/Checklist.ts | 21 | // checked: false, | COMMENT |
| LOW | app/frontend/shared/composables/useDebouncedLoading.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …tend/shared/server/apollo/utils/authenticationState.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …/frontend/shared/server/apollo/link/trackOperations.ts | 21 | COMMENT | |
| LOW | app/frontend/shared/utils/formatter.ts | 141 | // and e. g. convert timestamps/dates to browser locale | COMMENT |
| LOW | app/frontend/shared/utils/__tests__/htmlCleanup.spec.ts | 201 | // this is done on the backend now | COMMENT |
| LOW | app/frontend/shared/utils/__tests__/htmlCleanup.spec.ts | 221 | // result = htmlCleanup(source) | COMMENT |
| LOW | app/frontend/shared/utils/__tests__/htmlCleanup.spec.ts | 241 | // '<div><div><div><div><div id="article-content-4"><div><div>This is a black font colour with white background</div | COMMENT |
| LOW | …m/plugins/initializeFieldInitialValuesCleanupPlugin.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …m/plugins/initializeFieldInitialValuesCleanupPlugin.ts | 21 | // - On child re-add: restoring the previously saved _init value, so that toggling | COMMENT |
| LOW | …m/plugins/initializeFieldInitialValuesCleanupPlugin.ts | 141 | // by core workflow after the form already settled). FormKit's addChild | COMMENT |
| LOW | …ared/components/Form/fields/FieldDate/healDateRange.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …ntend/shared/entities/object-attributes/types/store.ts | 41 | export type OperatorFilterProps = Record<OperatorName, Record<string, unknown>> | COMMENT |
| LOW | …red/entities/ticket/channel/plugins/__tests__/utils.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …red/entities/ticket/channel/plugins/__tests__/utils.ts | 21 | COMMENT | |
| LOW | …red/entities/ticket/channel/plugins/__tests__/utils.ts | 41 | // communication: false, | COMMENT |
| LOW | …red/entities/ticket/channel/plugins/__tests__/utils.ts | 61 | // ticket: TicketById, | COMMENT |
| LOW | …ontend/apps/desktop/composables/useSectionPageCache.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | app/frontend/apps/desktop/styles/custom/index.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …op/components/Form/fields/FieldFilterSelector/types.ts | 21 | } | COMMENT |
| LOW | …CategoryIcon/FieldKnowledgeBaseCategoryIconWrapper.vue | 41 | gqlQuery: AutocompleteSearchKnowledgeBaseCategoryIconDocument, | COMMENT |
| LOW | …nowledgeBase/KnowledgeBaseAnswerIcon/visibilityMeta.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …SetupImportSource/GuidedSetupImportSourceFreshdesk.vue | 41 | // }, | COMMENT |
| LOW | …p/pages/search/composables/useSearchAdvancedFilters.ts | 121 | Object.fromEntries( | COMMENT |
| LOW | …d/apps/desktop/pages/search/utils/searchFilterQuery.ts | 81 | .forEach((entry) => params.append(key, decodeURIComponent(entry))) | COMMENT |
| LOW | …/components/SearchControls/SearchEntityFiltersForm.vue | 81 | ) | COMMENT |
| LOW | …p/frontend/apps/desktop/pages/knowledge-base/routes.ts | 61 | { | COMMENT |
| LOW | …e/composables/useKnowledgeBaseCategorySubcategories.ts | 161 | const policy = computed(() => content.value?.category?.policy) | COMMENT |
| LOW | …e/composables/useKnowledgeBaseCategorySubcategories.ts | 181 | // Handed over by useKnowledgeBaseContentUpdates rather than taken from the store directly, so a | COMMENT |
| LOW | …s/knowledge-base/composables/useKnowledgeBaseSearch.ts | 21 | // The kind of content the result list shows. Only which of the two searches below is rendered: | COMMENT |
| LOW | …sables/useKnowledgeBaseAnswerNextVisibilitySchedule.ts | 21 | // | COMMENT |
| LOW | …s/knowledge-base/composables/useKnowledgeBaseAnswer.ts | 221 | // Not from the fragment: the read was keyed by it, so it is the id by definition - and the | COMMENT |
| LOW | …s/knowledge-base/composables/useKnowledgeBaseAnswer.ts | 241 | // Anything that has to be measured against the *stored* state needs this one instead of that: | COMMENT |
| LOW | …s/knowledge-base/composables/useKnowledgeBaseAnswer.ts | 261 | // Pushes every edit of the answer *itself* into the cache - title and body (their translation | COMMENT |
| LOW | …s/knowledge-base/composables/useKnowledgeBaseAnswer.ts | 281 | // The same field set the query asked for. Not to keep the cached body - Apollo merges a | COMMENT |
| LOW | …s/knowledge-base/composables/useKnowledgeBaseAnswer.ts | 301 | computed(() => | COMMENT |
| LOW | …s/knowledge-base/composables/useKnowledgeBaseAnswer.ts | 341 | // answer: a knowledge-base-wide change (empty list), or one touching the | COMMENT |
| LOW | …ages/knowledge-base/utils/knowledgeBaseCategoryGrid.ts | 1 | // Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/ | COMMENT |
| LOW | …ages/knowledge-base/utils/knowledgeBaseCategoryGrid.ts | 21 | } as const | COMMENT |
| LOW | …swerSidebar/KnowledgeBaseAnswerScheduledVisibility.vue | 61 | // Which state it is about is named in the prompt, since the pills sit close together and each | COMMENT |
| LOW | …eBaseAnswerCreate/KnowledgeBaseAnswerCreateContent.vue | 61 | // form updater. | COMMENT |
| LOW | …eBaseAnswerCreate/KnowledgeBaseAnswerCreateContent.vue | 121 | // nothing and no draft is kept. | COMMENT |
| LOW | …geBaseAnswerCreate/KnowledgeBaseAnswerCreateHeader.vue | 21 | import { useKnowledgeBaseHeaderLocales } from '../KnowledgeBaseTopBarHeader/useKnowledgeBaseHeaderLocales.ts' | COMMENT |
| LOW | …geBaseAnswerCreate/KnowledgeBaseAnswerCreateHeader.vue | 81 | // form field, and picking one the editor never browsed means a round trip: unlike the browse | COMMENT |
| LOW | …wledgeBaseAnswerEdit/KnowledgeBaseAnswerEditHeader.vue | 21 | COMMENT | |
| LOW | …wledgeBaseAnswerEdit/KnowledgeBaseAnswerEditHeader.vue | 81 | // | COMMENT |
| LOW | …ledgeBaseAnswerEdit/KnowledgeBaseAnswerEditContent.vue | 281 | // The rule the initial seeding follows, for the same reason (see `initialEntityObject`): in a | COMMENT |
| LOW | …seAnswerEdit/useKnowledgeBaseAnswerConcurrentChange.ts | 21 | COMMENT | |
| 407 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .gitlab/dependency_digest.rb | 62 | LLM_NUM_CTX = Integer(ENV.fetch('LLM_NUM_CTX', '65536')) # context window requested from Ollama | CODE |
| MEDIUM | .gitlab/ci/automate.yml | 77 | # LLM_NUM_CTX / LLM_TIMEOUT - context window (default 65536) / request timeout in s (default 900) | COMMENT |
| MEDIUM | app/models/ai/provider_connection.rb | 18 | # The two config values that describe the embedding model in numbers, with the message for a | COMMENT |
| MEDIUM | app/models/ai/provider_connection.rb | 279 | # What the empty option of the dialog's embedding model dropdown promised, written into the config | COMMENT |
| MEDIUM | app/models/ai/provider_connection.rb | 335 | # How long the vectors of the embedding model are and how many tokens it takes at once: numbers | COMMENT |
| MEDIUM | app/models/ai/provider_connection.rb | 390 | # The embedding model of a provider that serves a fixed one (Zammad AI) is not part of its config: | COMMENT |
| MEDIUM | app/models/setting/validation/vectordb.rb | 12 | # has configured an embedding model perfectly well that they have not. The two conditions | COMMENT |
| MEDIUM | …/types/ticket/ai/related_knowledge_base_answer_type.rb | 11 | # current embedding model, so a normalised relevance would be more meaningful. | COMMENT |
| MEDIUM | app/controllers/ai/provider_connections_controller.rb | 82 | # The dimensions and the input limit of one embedding model, for the fields the dialog fills | COMMENT |
| MEDIUM | app/services/service/ai/vectordb/embedding/cache.rb | 17 | # embedding model the vectors were produced with. | COMMENT |
| MEDIUM | app/services/service/ai/vectordb/embedding/cache.rb | 39 | # Map key for a chunk. Includes the embedding model so a model change misses (and re-embeds) | COMMENT |
| MEDIUM | …ervices/service/ai/vectordb/embedding/configuration.rb | 80 | # (AI::ProviderConnection#remove_unconfigurable_embedding_model), so an embedding model that | COMMENT |
| MEDIUM | app/services/service/ai/vectordb/content/chunks.rb | 7 | # @param model_max_tokens [Integer, nil] the embedding model's hard input limit (a ceiling on | COMMENT |
| MEDIUM | …es/service/ai/vectordb/content/chunks/strategy/base.rb | 7 | # options); the embedding model's input limit (model_max_tokens) is only a hard ceiling that caps | COMMENT |
| MEDIUM | …es/service/ai/vectordb/content/chunks/strategy/base.rb | 38 | # @param model_max_tokens [Integer, nil] the embedding model's hard input limit. Only caps the | COMMENT |
| MEDIUM | …rvice/ai/vectordb/content/chunks/strategy/recursive.rb | 5 | # token-sized windows with overlap, so no chunk exceeds the embedding model's input limit. Token | COMMENT |
| MEDIUM | app/services/service/ai/vectordb/document/upsert.rb | 47 | # embedding model's input limit only caps the chunk size; the strategy picks the actual size. | COMMENT |
| MEDIUM | app/services/service/ai/ticket/embed_content.rb | 6 | # within the embedding model's context window, and returns the embedding vector. | COMMENT |
| MEDIUM | app/services/service/ai/ticket/embed_content.rb | 6 | # within the embedding model's context window, and returns the embedding vector. | COMMENT |
| MEDIUM | …services/service/ai/provider_connection/list_models.rb | 21 | # How long the listing's verdict on the recommended embedding model outlives the listing that | COMMENT |
| MEDIUM | …services/service/ai/provider_connection/list_models.rb | 49 | # the metadata of the recommended embedding model ({ models:, default_model:, | COMMENT |
| MEDIUM | …services/service/ai/provider_connection/list_models.rb | 81 | # embedding model - the decision the dialog acted on when it offered no model for the empty option | COMMENT |
| MEDIUM | …t/ai/related_knowledge_base_answers/embedding_cache.rb | 14 | # Everything cached here was produced by whatever embedding model served at the time, and is only | COMMENT |
| MEDIUM | config/routes/ai_provider_connection.rb | 20 | # Same reasoning for the metadata of one embedding model, which the dialog asks for where the | COMMENT |
| MEDIUM | …/integration/ai/related_knowledge_base_answers_spec.rb | 79 | # would demand a sharper embedding model than the current one actually provides. | COMMENT |
| MEDIUM | spec/models/ai/provider_connection_spec.rb | 21 | # The embedding model used to be resolved from the adapter at request time, so the connection | COMMENT |
| MEDIUM | spec/models/ai/provider_connection_spec.rb | 244 | # The blank embedding model is stripped like any other; what is left is the recommendation | COMMENT |
| MEDIUM | spec/models/setting/validation/vectordb_spec.rb | 37 | # embedding model is configured when one is would send them looking in the wrong place. | COMMENT |
| MEDIUM | spec/requests/ai/provider_connections_spec.rb | 221 | # The embedding model travels along, because this connection serves embeddings and a config | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 131 | # So neither field arrives filled, and nothing describing an embedding model is asked | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 204 | # The embedding model keeps its empty option: leaving it unnamed is a valid answer that | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 549 | # A listing without an embedding model in it is an answer, not a gap: the provider serves | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 578 | # The listing said the provider serves no embedding model, so the seeding respects the | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 586 | # This listing carries an embedding model, just not that one - so the option names no model, | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 792 | # No embedding model field: the service serves a fixed one, so there is nothing to pick. | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 895 | # stored embedding model was sized on the way through. | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 903 | # The connection serving semantic search cannot save without an embedding model | COMMENT |
| MEDIUM | spec/system/admin/ai/provider_connections_spec.rb | 1099 | # Through both wizard steps to the model step, which is where the embedding model lives. | COMMENT |
| MEDIUM | spec/lib/ai/provider_spec.rb | 330 | # There is no default to apply for the embedding model: it is whatever the connection names. | COMMENT |
| MEDIUM | spec/lib/ai/provider/embeddings_spec.rb | 6 | # in a regular pipeline - the embedding request of a provider that has no embedding model of its own | COMMENT |
| MEDIUM | spec/lib/ai/provider/embeddings_spec.rb | 157 | # Unlike the hosted providers, a custom endpoint has no embedding model to fall back to: its | COMMENT |
| MEDIUM | spec/lib/ai/provider/models_spec.rb | 125 | # What OpenAI does not report about an embedding model comes from the provider's table of | COMMENT |
| MEDIUM | spec/lib/ai/provider/models_spec.rb | 245 | # The context window Mistral reports for a chat model | COMMENT |
| MEDIUM | spec/lib/ai/provider/models_spec.rb | 306 | # and its context window is not embedding metadata. | COMMENT |
| MEDIUM | spec/lib/ai/provider/models_spec.rb | 405 | # A custom endpoint embeds too, so an embedding model | COMMENT |
| MEDIUM | spec/db/migrate/create_ai_provider_connections_spec.rb | 37 | # Plus the embedding model the seeding names for the connection it flags for embeddings. | COMMENT |
| MEDIUM | spec/services/service/ai/vectordb/create_table_spec.rb | 134 | # Reachable for a connection whose embedding model was cleared behind the dialog's back, e.g. | COMMENT |
| MEDIUM | …ces/service/ai/provider_connection/list_models_spec.rb | 310 | # What the seeding of the embedding model reads (AI::ProviderConnection#seed_recommended_embedding_model): | COMMENT |
| MEDIUM | lib/ai/provider.rb | 42 | # Conservative input-token limit for an embedding model not listed in EMBEDDING_INPUT_LIMITS — | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 176 | # The embedding model to recommend for this provider: what the connection dialog pre-selects, | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 180 | # resolve an embedding model at request time - invisible in the admin UI and moving under the | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 189 | # The embedding model of a provider whose model is not part of the connection config at all: | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 198 | # The value the shared table of known embedding model defaults holds for a model | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 297 | # The embedding model to embed with: the configured one, or the fixed one of a provider whose | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 300 | # @return [String, NilClass] the embedding model | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 310 | # @return [String] the embedding model | COMMENT |
| MEDIUM⚡ | lib/ai/provider.rb | 317 | # The length of the vectors the configured embedding model produces: what the index mapping is | COMMENT |
| MEDIUM | lib/ai/provider.rb | 333 | # Maximum number of input tokens the configured embedding model accepts. Used to size chunks so | COMMENT |
| MEDIUM | lib/ai/provider/ollama.rb | 127 | # Both sizes survive for an embedding model only; model_descriptor applies that rule | COMMENT |
| MEDIUM | lib/ai/provider/zammad_ai.rb | 11 | # Which makes this the one embedding model that changes without a connection being saved - so | COMMENT |
| 9 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .gitlab/database.rb | 73 | # Create the database if it does not exist yet. An already existing database is reset by | COMMENT |
| MEDIUM | .gitlab/ci/__includes__/job_rules.yml | 5 | # This file provides two kinds of building blocks, which must not be confused: | COMMENT |
| MEDIUM | app/models/active_job_lock.rb | 24 | # This method is used to find the Delayed::Job record representing the ActiveJob associated with this lock. | COMMENT |
| MEDIUM | app/models/channel/driver/base_email_inbound.rb | 169 | # This method is used for custom IMAP only. | COMMENT |
| MEDIUM | …channel/driver/base_email_inbound/message_validator.rb | 16 | # This method is used by IMAP and MicrosoftGraphInbound only | COMMENT |
| MEDIUM⚡ | …channel/driver/base_email_inbound/message_validator.rb | 30 | # This method is used by IMAP and MicrosoftGraphInbound only | COMMENT |
| MEDIUM⚡ | …channel/driver/base_email_inbound/message_validator.rb | 38 | # This method is used by IMAP and MicrosoftGraphInbound only | COMMENT |
| MEDIUM⚡ | …channel/driver/base_email_inbound/message_validator.rb | 48 | # This method is used by IMAP and MicrosoftGraphInbound only | COMMENT |
| MEDIUM | …channel/driver/base_email_inbound/message_validator.rb | 67 | # This method is used by IMAP and MicrosoftGraphInbound only | COMMENT |
| MEDIUM | app/policies/ticket_policy.rb | 40 | # This method is used to check if a follow-up is possible (mostly based on the configuration). | COMMENT |
| MEDIUM | app/graphql/gql/types/base_cached_connection.rb | 7 | # This class represents a connection with special behaviour. It provides a signature value of the current collection | COMMENT |
| MEDIUM | app/graphql/gql/types/enum/base_enum.rb | 7 | # Create an enum type from a list of classes. | COMMENT |
| MEDIUM | app/graphql/gql/types/enum/base_enum.rb | 14 | # Create an enum type from a list of strings. | COMMENT |
| MEDIUM | app/graphql/gql/concerns/handles_authorization.rb | 25 | # This method is used by GraphQL to perform authorization on the various objects. | COMMENT |
| MEDIUM | app/jobs/application_job.rb | 34 | # This method is used to find the Delayed::Job record representing the ActiveJob with the given active_job_id. | COMMENT |
| MEDIUM | app/controllers/sessions_controller.rb | 116 | # Create a new user or add an auth to existing user, depending on | COMMENT |
| MEDIUM | …rvices/service/template/interpolation/engine/parser.rb | 4 | # This module is used to scan, collect all replacment variables within a | COMMENT |
| MEDIUM | app/services/service/link/list.rb | 13 | # Create a list of object related references filtered by target type | COMMENT |
| MEDIUM | app/services/service/history/group.rb | 3 | # Create a list of grouped history records by given interval and issuer for a | COMMENT |
| MEDIUM | app/services/service/history/list.rb | 3 | # Create a list of history events for a given object. | COMMENT |
| MEDIUM | config/cable.yml | 1 | # This file is not used by Zammad, configuration happens in: | COMMENT |
| MEDIUM | config/initializers/wrap_parameters.rb | 5 | # This file contains settings for ActionController::ParamsWrapper which | COMMENT |
| MEDIUM | config/initializers/permissions_policy.rb | 5 | # Define an application-wide HTTP permissions policy. For further | COMMENT |
| MEDIUM | config/initializers/content_security_policy.rb | 5 | # Define an application-wide content security policy | COMMENT |
| MEDIUM | spec/rails_helper.rb | 3 | # This file is copied to spec/ when you run 'rails generate rspec:install' | COMMENT |
| MEDIUM | spec/models/user_spec.rb | 467 | # Create the agent, before the default notifications are set, so | COMMENT |
| MEDIUM | spec/models/user_spec.rb | 499 | # Create the customer, before the default notifications are set, so | COMMENT |
| MEDIUM | spec/models/knowledge_base/answer/translation_spec.rb | 356 | # Creating the answer schedules a reindex of its own, so the examples below start from a clean | COMMENT |
| MEDIUM | spec/requests/ticket_spec.rb | 1712 | # Create an online notification for the ticket owner (not the agent doing the update) | COMMENT |
| MEDIUM | spec/requests/knowledge_base/deactivated_role_spec.rb | 123 | # Creating a top level category and ordering the root list both resolve their access against the | COMMENT |
| MEDIUM | …ec/requests/knowledge_base/search_with_details_spec.rb | 107 | # Create a alternative knowledge base locale. | COMMENT |
| MEDIUM | spec/system/system/object_manager_spec.rb | 161 | # Create the field via API. | COMMENT |
| MEDIUM | spec/system/scenarios/ticket_links_spec.rb | 32 | # Create the link via the sidebar modal. | COMMENT |
| MEDIUM | spec/system/ticket/zoom/email_reply_body_spec.rb | 19 | # Create a ticket article with a specific timestamp and customer origin. | COMMENT |
| MEDIUM | …/mobile_old/tickets/articles/list_subscription_spec.rb | 195 | # Create the new article with its final body and wait until it is rendered. | COMMENT |
| MEDIUM | …/mobile_old/tickets/articles/list_subscription_spec.rb | 221 | # Create the new articles one by one with their final body and wait until they are rendered. | COMMENT |
| MEDIUM | spec/system/apps/desktop/ticket/shared_drafts_spec.rb | 58 | # Create an internal note for agent2 | COMMENT |
| MEDIUM | spec/system/apps/desktop/ticket/shared_drafts_spec.rb | 123 | # Create an internal note for agent1 | COMMENT |
| MEDIUM | spec/support/request.rb | 132 | # The following methods are self explaining and are just shorter aliases. | COMMENT |
| MEDIUM | spec/support/graphql.rb | 87 | # Create a mock channel that can be passed to graphql_execute like this: | COMMENT |
| MEDIUM | spec/support/capybara/selectors.rb | 3 | # This file defines custom Capybara selectors for DRYed specs. | COMMENT |
| MEDIUM | spec/support/capybara/browser_test_helper.rb | 393 | # This method is a derivation of #until | COMMENT |
| MEDIUM | spec/support/capybara/browser_test_helper.rb | 413 | # This method is a derivation of #until | COMMENT |
| MEDIUM | spec/support/capybara/common_actions.rb | 253 | # This method is equivalent to Capybara::RSpecMatchers#have_current_path | COMMENT |
| MEDIUM⚡ | spec/support/capybara/common_actions.rb | 298 | # Create a select attribute: | COMMENT |
| MEDIUM⚡ | spec/support/capybara/common_actions.rb | 302 | # Create a required text attribute: | COMMENT |
| MEDIUM⚡ | spec/support/capybara/common_actions.rb | 306 | # Create a date attribute with custom parameters: | COMMENT |
| MEDIUM | spec/graphql/gql/mutations/login_spec.rb | 95 | # Create the user before the GraphQL query execution, so that we have only the activity stream | COMMENT |
| MEDIUM | spec/jobs/ticket_online_notification_seen_job_spec.rb | 29 | # Create an online notification for the mentioned user on the same ticket | COMMENT |
| MEDIUM | spec/services/service/ai/agent/run_spec.rb | 276 | # Create the custom category attribute | COMMENT |
| MEDIUM | spec/services/service/ai/agent/run_spec.rb | 432 | # Create the multiselect attribute | COMMENT |
| MEDIUM | lib/assets_set.rb | 8 | # This class implements a collection of Zammad Assets with no duplicates. | COMMENT |
| MEDIUM | lib/assets_set.rb | 46 | # This method is used to convert the AssetsSet into a regular Hash which then can be send to the client. | COMMENT |
| MEDIUM | …support/lib/active_support/tagged_logging/formatter.rb | 25 | # This method is invoked when a log event occurs. | COMMENT |
| MEDIUM | lib/zammad/service/configuration.rb | 6 | # This module provides a method to parse a Zammad third-party service | COMMENT |
| MEDIUM | lib/assets_set/proxy.rb | 3 | # This class defines a Proxy for accessing objects inside of a AssetsSet Model sub structure. | COMMENT |
| MEDIUM | lib/sequencer/unit/base.rb | 167 | # This method is the heart of the #uses and #provides method. | COMMENT |
| MEDIUM | lib/sequencer/unit/base.rb | 207 | # This method is the attribute store for the given declaration key. | COMMENT |
| MEDIUM | lib/sequencer/unit/base.rb | 237 | # This method is an instance wrapper around the class method .instance_variable_cached. | COMMENT |
| MEDIUM | lib/sequencer/unit/base.rb | 244 | # This method is an convenience wrapper to create an instance | COMMENT |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …frontend/shared/components/Form/__tests__/Form.spec.ts | 1391 | const calls = mockFormUpdaterApi.spies.behave.mock.calls.slice(initialCallCount) | CODE |
| CRITICAL | …an_selector/advanced_sorting/base_select_field_sort.rb | 36 | cache_prefix = self.class.name.demodulize.tableize.tr('_', '-') | CODE |
| CRITICAL | app/assets/javascripts/app/lib/core/jquery-3.6.0.js | 8092 | jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { | CODE |
| CRITICAL | …ssets/javascripts/app/lib/bootstrap/popover-enhance.js | 26 | $.fn.popover.Constructor.prototype.leave.call(self, self); | CODE |
| CRITICAL | app/assets/javascripts/app/lib/base/codemirror.js | 8936 | return this.cm.display.wrapper.ownerDocument.getSelection() | CODE |
| CRITICAL | app/assets/javascripts/app/lib/base/jquery.noty.js | 118 | self.options.layout.container.style.apply($(self.options.layout.container.selector), [self.options.within]); | CODE |
| CRITICAL | app/assets/javascripts/app/lib/base/jquery.noty.js | 123 | self.options.theme.callback.onShow.apply(this); | CODE |
| CRITICAL | app/assets/javascripts/app/lib/base/jquery.noty.js | 270 | self.options.theme.callback.onClose.apply(self); | CODE |
| CRITICAL | app/assets/javascripts/app/lib/base/jquery.noty.js | 283 | self.options.theme.callback.onClose.apply(self); | CODE |
| CRITICAL | app/assets/javascripts/app/lib/base/jquery.noty.js | 311 | this.options.theme.callback.onShow.apply(this); | CODE |
| CRITICAL⚡ | config/initializers/content_type_allowed_inline.rb | 4 | Rails.application.config.active_storage.content_types_allowed_inline.delete('application/pdf') | CODE |
| CRITICAL⚡ | config/initializers/content_type_allowed_inline.rb | 7 | Rails.application.config.active_storage.content_types_allowed_inline.push('image/jpg') | CODE |
| CRITICAL⚡ | config/initializers/content_type_allowed_inline.rb | 13 | Rails.application.config.active_storage.content_types_to_serve_as_binary.push( | CODE |
| CRITICAL | public/assets/form/jquery-3.6.0.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f | CODE |
| CRITICAL | public/assets/chat/jquery-3.6.0.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .gitlab/ci/review-app.yml | 46 | # Check if containers were previously created, so that this is an update deployment | COMMENT |
| LOW | app/models/mention.rb | 62 | # Check if user is subscribed to given object | COMMENT |
| LOW | app/models/mention.rb | 107 | # Check if given user is able to subscribe to a given object | COMMENT |
| LOW | app/models/setting.rb | 114 | # Check if last last lookup was recent enough | COMMENT |
| LOW | app/models/channel/filter/reply_to_based_sender.rb | 12 | # Check if the reply-to address can be parsed and otherwise skip the filter. | COMMENT |
| LOW | app/models/ticket/article.rb | 431 | # Check if article type is email | COMMENT |
| LOW | app/models/concerns/has_roles.rb | 67 | # Check if the new role for the user has "ticket.agent" permission. | COMMENT |
| LOW | app/policies/group_policy.rb | 34 | # Check if user is customer for any tickets in this group. | COMMENT |
| LOW | app/graphql/gql/mutations/base_mutation.rb | 22 | # Set this to false for mutations that don't need CSRF verification. | COMMENT |
| LOW | app/graphql/gql/fields/scoped_field.rb | 26 | # Check if the pundit result is a 'FieldScope' object. | COMMENT |
| LOW | app/services/service/ai/agent/run/perform/agent.rb | 84 | # Check if the key exists in ai_result_content | COMMENT |
| LOW | config/environments/production.rb | 73 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. | COMMENT |
| LOW | spec/requests/user_spec.rb | 1439 | # Check if ES is used | COMMENT |
| LOW | spec/system/ticket/idoit_spec.rb | 90 | # Check if the item is still gone after reload. | COMMENT |
| LOW | spec/system/ticket/view_spec.rb | 370 | # Check if still only one article exists on the ticket. | COMMENT |
| LOW | spec/system/manage/overviews_expert_conditions_spec.rb | 300 | # Check if the State attribute is disabled in the new dropdown. | COMMENT |
| LOW | spec/system/apps/mobile/login_spec.rb | 67 | # Check if we are already in mobile. | COMMENT |
| LOW | spec/db/migrate/password_settings_change_type_spec.rb | 170 | include(name: 'pkce', tag: 'boolean', display: 'PKCE'), # Check if migration was OK | CODE |
| LOW | spec/db/migrate/password_settings_change_type_spec.rb | 171 | include(display: 'Scopes') # Check if the rest of form values are not lost | CODE |
| LOW | contrib/edit-icon-license-list.php | 144 | # Add images to array | COMMENT |
| LOW | lib/background_services.rb | 67 | # Check if child processes are still alive, terminate the main process otherwise to | COMMENT |
| LOW | lib/password_policy.rb | 3 | # Check if password matches system settings | COMMENT |
| LOW | lib/external_credential/microsoft_base.rb | 114 | # Check if current user of the channel is matching the user from the token. | COMMENT |
| LOW | lib/external_credential/microsoft_base.rb | 151 | # Check if a bound address with the same email already exists. | COMMENT |
| LOW | lib/sessions/event/maintenance.rb | 21 | # Check if the event contains the maintenance message and sanitize it. | COMMENT |
| LOW | lib/html_sanitizer/scrubber/inline_images.rb | 59 | # Check if the current user is present | COMMENT |
| LOW | lib/text/quote_remover.rb | 117 | # Check if more > lines follow after empty lines | COMMENT |
| LOW | lib/text/quote_remover.rb | 130 | # Check if there's real user content after the given index | COMMENT |
| LOW | lib/text/quote_remover/signature.rb | 8 | # Check if a line matches this signature pattern | COMMENT |
| LOW | lib/text/quote_remover/attribution_pattern.rb | 13 | # Check if a line matches this pattern | COMMENT |
| LOW | …t/quote_remover/attribution_pattern/ms_header_block.rb | 51 | # Check if lines at given index form a Microsoft header block | COMMENT |
| LOW | lib/import/otrs/dynamic_field/mixin/has_options.rb | 17 | # Assign name to the last segment | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/models/channel/driver/base_email_inbound.rb | 170 | # It is not used in conjunction with Micrsofot365 or Gogle OAuth channels. | COMMENT |
| LOW | app/models/concerns/checks_human_changes.rb | 25 | # If no config exists, use all attributes or if config exists, just use | COMMENT |
| LOW | app/graphql/gql/fields/scoped_field.rb | 17 | # If a field is not authorized, just return 'nil' rather than throwing a GraphQL error. | COMMENT |
| MEDIUM | app/assets/javascripts/app/lib/core/jquery-3.6.0.js | 10830 | // understands anonymous AMD modules. A named AMD is safest and most robust | COMMENT |
| MEDIUM | app/assets/javascripts/app/lib/base/seedrandom.js | 144 | // For robust unpredictability, the function call below automatically | COMMENT |
| LOW | …service/system/set_email_notification_configuration.rb | 23 | # At some point it may be good to clean this up to simply use a single instance | COMMENT |
| MEDIUM | …rvice/ai/vectordb/content/chunks/strategy/recursive.rb | 7 | # stays robust for no-space scripts (CJK/Thai) where a whole paragraph is otherwise one "word". | COMMENT |
| MEDIUM | test/data/mail/mail047.yml | 25 | <br><br><table border="0" cellspacing="2" cellpadding="0"><tbody><tr><td valign="top">Ihre </td><td></td></tr></tbody> | CODE |
| MEDIUM | test/data/mail/mail047.yml | 25 | <br><br><table border="0" cellspacing="2" cellpadding="0"><tbody><tr><td valign="top">Ihre </td><td></td></tr></tbody> | CODE |
| LOW | spec/models/system_report_spec.rb | 276 | # If your setting does not contain confidential values, just add it to the non_confidential_settings variable li | COMMENT |
| MEDIUM | spec/system/scenarios/text_modules_spec.rb | 59 | # harness (verified empirically - same reason the text module examples use a | COMMENT |
| LOW | spec/lib/application_handle_info_spec.rb | 9 | # Q: So why don't we just use it here to DRY things up? | COMMENT |
| LOW⚡ | lib/notification_factory/renderer.rb | 92 | # if no object is given, just return | COMMENT |
| LOW⚡ | lib/notification_factory/renderer.rb | 97 | # if object is not in available objects, just return | COMMENT |
| LOW⚡ | lib/notification_factory/renderer.rb | 104 | # if content of method is a complex datatype, just return | COMMENT |
| LOW | lib/assets_set/proxy.rb | 22 | # to the lookup table will be performed which will will just return `true` to satisfy the | COMMENT |
| LOW | …uencer/unit/import/common/model/associations/assign.rb | 38 | # Why not just use instance.changes? | COMMENT |
| LOW | lib/service/image.rb | 37 | file = Service::Image.organization('user@edenhofer.de') # will just use domain | CODE |
| LOW | lib/service/image/zammad.rb | 49 | # strip, just use domain name | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/frontend/shared/sw/register.ts | 39 | // don't forget to unregister the service worker when you are done: `sw.unregister()` | COMMENT |
| LOW | app/frontend/apps/desktop/styles/transitions.css | 2 | * Don't forget to add the mapping to the TransitionName enum in useTransitionConfig.ts when adding a new transition. | COMMENT |
| LOW | app/models/channel/driver/imap.rb | 164 | # Select folder, but make sure to encode the string value as UTF-7 first (#5480). | COMMENT |
| LOW | app/jobs/session_timeout_job.rb | 17 | # make sure to definitely log him out if there | COMMENT |
| MEDIUM | spec/spec_helper.rb | 61 | # with RSpec, but feel free to customize to your heart's content. | COMMENT |
| MEDIUM | spec/models/channel/email_parser_spec.rb | 75 | # To write new .yml files for emails you can use the following rake task: | COMMENT |
| MEDIUM | spec/models/channel/email_parser_spec.rb | 79 | # To renew all existing files, you can use the following rake task: | COMMENT |
| LOW | spec/system/keyboard_shortcuts_spec.rb | 115 | within :active_content, '.newTicket' do # make sure to close new ticket | CODE |
| LOW | spec/support/capybara/form_helpers.rb | 25 | # # In case of ambiguous labels, make sure to pass `exact_text` option | COMMENT |
| LOW | .github/workflows/packager.io.yaml | 6 | # Test builds for public branches based on develop. Don't forget to clean up test branches in go.packager.io after | COMMENT |
| LOW | …core_ext/activesupport/lib/active_support/callbacks.rb | 9 | # to access one after the block has been processed make sure to initialize the variable | COMMENT |
| LOW | lib/import/otrs.rb | 50 | # make sure to create store type otherwise | COMMENT |
| LOW | lib/import/otrs/article.rb | 99 | # if no content type is set make sure to remove it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …er/apollo/cache/utils/registerOffsetStylePagination.ts | 20 | // TODO: Do we need to check if item already exists...? What is happening in the cursor pagination? | COMMENT |
| LOW | …omponents/Form/fields/FieldEditor/FieldEditorInput.vue | 100 | // TODO: extensions are in general not reactive in TipTap, we need to check if all things are working as expected. | COMMENT |
| LOW | …p/components/CommonTable/__tests__/TableHeader.spec.ts | 139 | // Step 1: Select all loaded | COMMENT |
| LOW | app/models/avatar/triggers_subscriptions.rb | 40 | # We need to check if the default avatar was deleted. | COMMENT |
| LOW | app/models/concerns/can_search.rb | 192 | # Thus we need to check if method exist instead of using try()! | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 24 | # Step 1: Fill in basic information and select agent type. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 30 | # Step 2: Select attribute. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 35 | # Step 3: Select attributes and provide descriptions. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 83 | # Step 1: Check the name and the selected agent type. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 90 | # Step 2: Check selected attribute. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 95 | # Step 3: Check selected attributes and descriptions. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 102 | # Step 4: Check meta data. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .gitlab/dependency_digest.rb | 26 | # Usage: | COMMENT |
| LOW | app/models/ticket/article.rb | 112 | # Example usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 15 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 46 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 110 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 159 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 208 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 257 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 299 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 342 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 382 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 407 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 433 | # Usage: | COMMENT |
| LOW | spec/support/capybara/form_helpers.rb | 459 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …p/components/CommonTable/__tests__/TableHeader.spec.ts | 139 | // Step 1: Select all loaded | COMMENT |
| LOW | spec/models/store_spec.rb | 5 | # NOTE: This class uses custom .add & .remove methods | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 24 | # Step 1: Fill in basic information and select agent type. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 30 | # Step 2: Select attribute. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 35 | # Step 3: Select attributes and provide descriptions. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 83 | # Step 1: Check the name and the selected agent type. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 90 | # Step 2: Check selected attribute. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 95 | # Step 3: Check selected attributes and descriptions. | COMMENT |
| LOW⚡ | …system/manage/ai/agent/type/ticket_categorizer_spec.rb | 102 | # Step 4: Check meta data. | COMMENT |
| LOW | spec/lib/notification_factory_spec.rb | 6 | # WARNING: This spec relies on the presence of | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …phql/factories/types/KnowledgeBaseAnswerTranslation.ts | 27 | // compares it against the locale it was routed to, and an auto-generated code would put | COMMENT |
| HIGH | …cket/TicketPopoverWithTrigger/TicketContentPopover.vue | 55 | // only, which carries the note that marks both of them as AI-generated. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …SetupImportSource/GuidedSetupImportSourceFreshdesk.vue | 67 | link: 'https://support.freshdesk.com/support/solutions/articles/215517-how-to-find-your-api-key', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/assets/javascripts/app/lib/core/jquery-3.6.0.js | 4405 | function getData( data ) { | CODE |
| LOW | app/assets/javascripts/app/lib/flot/jquery.flot.js | 494 | function processData() { | CODE |