The task manager you actually own.
This report summarizes scanner evidence for go-vikunja/vikunja, a Go project with 5,687 GitHub stars. SynthScan examined 433,648 lines of code across 2113 source files, recording 2242 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 5.8 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 1521 finding(s).
Are imports declared and package/API names verified? 710 finding(s).
Are wrappers, guards, and repeated structures necessary? 222 finding(s).
Which changes need focused human review? 2242 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 2242 distinct pattern matches across 13 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 | magefile.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | magefile.go | 481 | // runs the Playwright e2e tests against them, then tears everything down. | COMMENT |
| LOW | magefile.go | 1061 | // frontendI18nCallReDouble is the double-quoted counterpart of | COMMENT |
| LOW | magefile.go | 1301 | // Copyright 2018-present Vikunja and contributors. All rights reserved. | COMMENT |
| LOW | main.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | frontend/embed.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | frontend/embed.go | 21 | // all: is required to include files starting with _ or ., such as the | COMMENT |
| LOW | frontend/tests/e2e/sharing/linkShare.spec.ts | 121 | // Regression test for #2546: a logged-in user opening a public link share URL | COMMENT |
| LOW | frontend/scripts/fonts-subset.sh | 1 | #!/bin/sh | COMMENT |
| LOW | frontend/src/styles/common-imports.scss | 1 | // | COMMENT |
| LOW | frontend/src/styles/global.scss | 41 | @import "bulma-css-variables/sass/form/tools"; | COMMENT |
| LOW | frontend/src/styles/global.scss | 61 | // @import "bulma-css-variables/sass/grid/tiles"; // not used | COMMENT |
| LOW | frontend/src/styles/custom-properties/colors.scss | 1 | // Vikunja colors as CSS custom properties. | COMMENT |
| LOW | desktop/build.js | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | examples/plugins/example/main.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/magefile.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/cmd/veans/main.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/bootstrap/botuser_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/bootstrap/hooks.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/bootstrap/hooks.go | 41 | var ClaudeCodeHookEvents = []string{"SessionStart", "PreCompact"} | COMMENT |
| LOW | veans/internal/bootstrap/botuser.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/bootstrap/bootstrap.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/bootstrap/hooks_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/bootstrap/bootstrap_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/picker/flatten.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/picker/tree.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/picker/picker.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/picker/flatten_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/picker/tree_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/picker/model.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/config/config.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/config/config_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/auth/auth_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/auth/auth.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/auth/auth.go | 81 | // Non-TTY (CI, scripted test) — read a plain line. | COMMENT |
| LOW | veans/internal/auth/oauth_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/auth/oauth.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/output/errors_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/output/errors.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/status/status_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/status/status.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/create.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/list.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/git.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/git.go | 21 | "os" | COMMENT |
| LOW | veans/internal/commands/prime.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/labels.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/show.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/update.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/runtime.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/update_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/claim.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/prime_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/api.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/init.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/login.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/root.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/commands/list_test.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/client/users.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| LOW | veans/internal/client/tasks.go | 1 | // Vikunja is a to-do list application to facilitate your life. | COMMENT |
| 1150 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/tests/e2e/admin/invite-links.spec.ts | 18 | const [admin] = await UserFactory.create(1, {is_admin: true, email: 'admin@example.com', name: 'Invite Admin'}, false) | CODE |
| LOW | frontend/tests/e2e/admin/invite-links.spec.ts | 68 | await guestPage.getByLabel('Email address', {exact: true}).fill('admin@example.com') | CODE |
| LOW | frontend/tests/e2e/project/project-view-kanban.spec.ts | 352 | description: 'Lorem Ipsum', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 154 | description: 'Lorem Ipsum', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 276 | description: 'Lorem ipsum dolor sit amet.', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 276 | description: 'Lorem ipsum dolor sit amet.', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 337 | description: 'Lorem ipsum dolor sit amet.', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 337 | description: 'Lorem ipsum dolor sit amet.', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 390 | description: 'Lorem Ipsum dolor sit amet', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 390 | description: 'Lorem Ipsum dolor sit amet', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 401 | description: '<p>Lorem Ipsum dolor sit amet</p>', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 401 | description: '<p>Lorem Ipsum dolor sit amet</p>', | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1688 | <h1>Lorem Ipsum</h1> | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1689 | <p>Dolor sit amet</p> | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1702 | await expect(page.locator('.tiptap__editor h1').filter({hasText: 'Lorem Ipsum'})).toBeVisible() | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1703 | await expect(page.locator('.tiptap__editor p').filter({hasText: 'Dolor sit amet'})).toBeVisible() | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1776 | ${Array(30).fill('<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1776 | ${Array(30).fill('<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1827 | ${Array(20).fill('- Lorem ipsum dolor sit amet, consectetur adipiscing elit').join('\n')} | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1827 | ${Array(20).fill('- Lorem ipsum dolor sit amet, consectetur adipiscing elit').join('\n')} | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1897 | const longDescription = Array(30).fill('<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>').join('\n') | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 1897 | const longDescription = Array(30).fill('<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>').join('\n') | CODE |
| LOW | frontend/src/components/misc/ShortcutRecorder.vue | 22 | <span class="placeholder">{{ $t('user.settings.desktop.shortcutRecorderPlaceholder') }}</span> | CODE |
| LOW | frontend/src/components/input/FormInput.test.ts | 98 | expect(input.attributes('placeholder')).toBe('Enter email') | CODE |
| LOW | frontend/src/components/input/FormField.test.ts | 99 | expect(input.attributes('placeholder')).toBe('Enter email') | CODE |
| LOW | frontend/src/components/input/DateRangeInput.vue | 8 | :sheet-title="placeholder" | CODE |
| LOW | frontend/src/components/input/Multiselect.vue | 54 | :placeholder="placeholder" | CODE |
| LOW | frontend/src/components/quick-actions/QuickActions.vue | 31 | :placeholder="placeholder" | CODE |
| LOW | frontend/src/i18n/lang/de-swiss.json | 491 | "namePlaceholder": "z.B. Lorem Ipsum", | CODE |
| LOW | frontend/src/i18n/lang/de-swiss.json | 688 | "placeholder": "Gib eine Suche oder Filterabfrage ein…", | CODE |
| LOW | frontend/src/i18n/lang/de-swiss.json | 982 | "placeholder": "Gib Text ein, drücke '/' für mehr Optionen…", | CODE |
| LOW | frontend/src/i18n/lang/de-swiss.json | 1231 | "placeholder": "Füge deinen Kommentar hinzu, drücke '/' für weitere Optionen…", | CODE |
| LOW⚡ | frontend/src/i18n/lang/de-swiss.json | 1254 | "placeholder": "Gib eine Beschreibung ein, drücke '/' für mehr Optionen…" | CODE |
| LOW⚡ | frontend/src/i18n/lang/de-swiss.json | 1257 | "placeholder": "Schriib, um en User zuezwiise…", | CODE |
| LOW⚡ | frontend/src/i18n/lang/de-swiss.json | 1263 | "placeholder": "Beginne zu schreiben, um ein Label hinzuzufügen…", | CODE |
| LOW | frontend/src/i18n/lang/de-swiss.json | 1528 | "placeholder": "Schriib en Befehl oder suech…", | CODE |
| LOW | frontend/src/i18n/lang/el-GR.json | 491 | "namePlaceholder": "π.χ. Lorem Ipsum", | CODE |
| LOW | frontend/src/i18n/lang/el-GR.json | 688 | "placeholder": "Πληκτρολογήστε για αναζήτηση ή φιλτράρισμα ερωτήματος…", | CODE |
| LOW | frontend/src/i18n/lang/el-GR.json | 982 | "placeholder": "Πληκτρολογήστε κάποιο κείμενο ή πατήστε '/' για να δείτε περισσότερες επιλογές…", | CODE |
| LOW | frontend/src/i18n/lang/el-GR.json | 1231 | "placeholder": "Προσθέστε το σχόλιό σας, πατήστε '/' για περισσότερες επιλογές…", | CODE |
| LOW⚡ | frontend/src/i18n/lang/el-GR.json | 1254 | "placeholder": "Εισαγάγετε μια περιγραφή για το έργο, πατήστε '/' για περισσότερες επιλογές…" | CODE |
| LOW⚡ | frontend/src/i18n/lang/el-GR.json | 1257 | "placeholder": "Πληκτρολογήστε για να αναθέσετε σε χρήστη…", | CODE |
| LOW⚡ | frontend/src/i18n/lang/el-GR.json | 1263 | "placeholder": "Πληκτρολογήστε για να προσθέσετε ετικέτα…", | CODE |
| LOW | frontend/src/i18n/lang/el-GR.json | 1528 | "placeholder": "Πληκτρολογήστε εντολή ή κάντε αναζήτηση…", | CODE |
| LOW | frontend/src/i18n/lang/it-IT.json | 310 | "namePlaceholder": "es. Lorem Ipsum", | CODE |
| LOW | frontend/src/i18n/lang/it-IT.json | 477 | "placeholder": "Digitare una ricerca o un filtro query…", | CODE |
| LOW | frontend/src/i18n/lang/it-IT.json | 656 | "placeholder": "Digita del testo o premi '/' per vedere più opzioni…", | CODE |
| LOW | frontend/src/i18n/lang/it-IT.json | 871 | "placeholder": "Aggiungi il tuo commento, premi '/' per altre opzioni…", | CODE |
| LOW⚡ | frontend/src/i18n/lang/it-IT.json | 889 | "placeholder": "Inserisci una descrizione per questo progetto, premi '/' per altre opzioni…" | CODE |
| LOW⚡ | frontend/src/i18n/lang/it-IT.json | 892 | "placeholder": "Digita per assegnare un utente…", | CODE |
| LOW⚡ | frontend/src/i18n/lang/it-IT.json | 898 | "placeholder": "Digita per aggiungere un'etichetta…", | CODE |
| LOW | frontend/src/i18n/lang/it-IT.json | 1145 | "placeholder": "Digita un comando o cerca…", | CODE |
| LOW | frontend/src/i18n/lang/ko-KR.json | 278 | "namePlaceholder": "예: Lorem Ipsum", | CODE |
| LOW | frontend/src/i18n/lang/ko-KR.json | 422 | "placeholder": "검색 또는 필터 쿼리 입력...", | CODE |
| LOW | frontend/src/i18n/lang/ko-KR.json | 595 | "placeholder": "더 많은 옵션을 보려면 텍스트를 입력하거나 '/'를 누르세요...", | CODE |
| LOW | frontend/src/i18n/lang/ko-KR.json | 802 | "placeholder": "댓글을 추가하고 더 많은 옵션을 보려면 '/'를 누르세요...", | CODE |
| LOW⚡ | frontend/src/i18n/lang/ko-KR.json | 817 | "placeholder": "설명을 입력하고 더 많은 옵션을 보려면 '/'를 누르세요..." | CODE |
| LOW⚡ | frontend/src/i18n/lang/ko-KR.json | 820 | "placeholder": "사용자를 할당하려면 입력...", | CODE |
| LOW⚡ | frontend/src/i18n/lang/ko-KR.json | 826 | "placeholder": "레이블을 추가하려면 입력...", | CODE |
| LOW | frontend/src/i18n/lang/ko-KR.json | 1051 | "placeholder": "명령을 입력하거나 검색...", | CODE |
| 643 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/tests/support/filterTestHelpers.ts | 4 | export async function createTasksWithPriorities(buckets?: any[]) { | CODE |
| LOW | frontend/tests/e2e/project/project-history.spec.ts | 7 | async function visitProjectsToBuildHistory(page: Page, projects: any[]) { | CODE |
| LOW | frontend/tests/e2e/task/comment-sort-order.spec.ts | 14 | async function createCommentsWithTimestamps(count: number, taskId = 1) { | CODE |
| LOW | frontend/tests/e2e/task/bucket-select.spec.ts | 92 | async function createTaskWithMultipleKanbanViews() { | CODE |
| LOW | …d/tests/e2e/task/related-tasks-quick-add-magic.spec.ts | 19 | function relationTaskSearchResults(page) { | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 73 | async function uploadAttachmentAndVerify(page: Page, taskId: number, file = 'tests/fixtures/image.jpg') { | CODE |
| LOW | frontend/tests/e2e/task/task.spec.ts | 836 | async function openDueDatePopupWithShortcut(page: Page): Promise<Locator> { | CODE |
| LOW | frontend/src/composables/useCopyToClipboard.ts | 7 | function fallbackCopyTextToClipboard(text: string) { | CODE |
| LOW | frontend/src/composables/useWebSocket.ts | 41 | function setFirstConnectionSettled(settled: boolean) { | CODE |
| LOW | frontend/src/composables/useWebSocket.ts | 191 | function isAwaitingFirstConnection(): boolean { | CODE |
| LOW | frontend/src/stores/base.ts | 59 | function setCurrentProjectIfNotSet(project: Pick<ProjectResponse, 'id'>) { | CODE |
| LOW | frontend/src/stores/base.ts | 73 | function setKeyboardShortcutsActive(value: boolean) { | CODE |
| LOW | frontend/src/stores/base.test.ts | 97 | function seedProjectWithBackground(id: number) { | CODE |
| LOW | frontend/src/stores/auth.ts | 84 | function redirectToSpecifiedProvider() { | CODE |
| LOW | frontend/src/components/token/ApiTokenForm.vue | 221 | function toggleGroupPermissionsFromChild(group: string, checked: boolean) { | CODE |
| LOW | frontend/src/components/misc/OpenQuickActions.vue | 11 | function openQuickActionsViaHotkey(event: KeyboardEvent) { | CODE |
| LOW | …d/src/components/tasks/partials/commentReplyContext.ts | 14 | export function scrollAndHighlightComment(id: number): void { | CODE |
| LOW | frontend/src/components/tasks/partials/Attachments.vue | 387 | function syncDropzoneTeleportTarget() { | CODE |
| LOW | frontend/src/components/tasks/partials/RelatedTasks.vue | 252 | function sortTasksForRelationSearch(tasks: ITask[]) { | CODE |
| LOW | …ntend/src/components/tasks/partials/ReminderDetail.vue | 212 | function updateDataAndMaybeCloseNow(close: () => void) { | CODE |
| LOW | frontend/src/components/input/Reactions.vue | 131 | function hasCurrentUserReactedWithEmoji(value: string | number): boolean { | CODE |
| LOW | …tend/src/components/input/filter/FilterAutocomplete.ts | 61 | export function calculateReplacementRange( | CODE |
| LOW | frontend/src/components/input/filter/FilterInput.vue | 194 | function setEditorContentFromModelValue(newValue: string | undefined) { | CODE |
| LOW | …/components/input/editor/deleteSelectionBeforeEnter.ts | 11 | function splitAfterDeleteWouldLeaveDocumentLevelPosition(state: EditorState): boolean { | CODE |
| LOW | frontend/src/components/project/views/ProjectTable.vue | 434 | function setActiveColumnsSortParam() { | CODE |
| LOW | frontend/src/components/project/views/ProjectKanban.vue | 535 | function handleTaskContainerScroll(id: number, el: HTMLElement) { | CODE |
| LOW | frontend/src/components/project/views/ProjectKanban.vue | 707 | function handleRecurringTaskCompletion() { | CODE |
| LOW | frontend/src/views/user/settings/ApiTokens.test.ts | 91 | async function openDeleteModalForFirstToken(wrapper: VueWrapper) { | CODE |
| LOW | …ontend/src/views/user/settings/GeneralSettingsForm.vue | 451 | function enforceBackgroundBrightnessBounds() { | CODE |
| LOW | frontend/src/views/project/ProjectView.vue | 53 | function redirectToDefaultViewIfNecessary() { | CODE |
| LOW | frontend/src/client/requestContext.ts | 10 | export function captureClientRequestContext(): ClientRequestContext { | CODE |
| LOW | frontend/src/client/requestContext.ts | 18 | export function isClientRequestContextCurrent(context: ClientRequestContext): boolean { | CODE |
| LOW | frontend/src/client/requestContext.ts | 29 | export function assertClientRequestContext(context: ClientRequestContext): void { | CODE |
| LOW | frontend/src/client/requestContext.ts | 67 | export function assertClientRequestMatchesContext( | CODE |
| LOW | frontend/src/client/queries/account.ts | 232 | export function updateSettingsMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/account.ts | 249 | export function useUpdateSettingsMutation() { | CODE |
| LOW | frontend/src/client/queries/account.ts | 253 | export function updateFrontendSettingsMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/account.ts | 278 | export function useUpdateFrontendSettingsMutation() { | CODE |
| LOW | frontend/src/client/queries/comments.ts | 104 | export function createCommentMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/comments.ts | 149 | export function updateCommentMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/comments.ts | 174 | export function deleteCommentMutationOptions() { | CODE |
| LOW⚡ | frontend/src/client/queries/accountDeletion.ts | 7 | export function requestDeletionMutationOptions() { | CODE |
| LOW⚡ | frontend/src/client/queries/accountDeletion.ts | 14 | export function useRequestDeletionMutation() { | CODE |
| LOW⚡ | frontend/src/client/queries/accountDeletion.ts | 18 | export function confirmDeletionMutationOptions() { | CODE |
| LOW⚡ | frontend/src/client/queries/accountDeletion.ts | 28 | export function useConfirmDeletionMutation() { | CODE |
| LOW⚡ | frontend/src/client/queries/accountDeletion.ts | 32 | export function cancelDeletionMutationOptions() { | CODE |
| LOW⚡ | frontend/src/client/queries/accountDeletion.ts | 42 | export function useCancelDeletionMutation() { | CODE |
| LOW | frontend/src/client/queries/migration.ts | 67 | export function migrationAuthMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/migration.ts | 110 | export function startMigrationMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/migration.ts | 124 | export function migrationCompletedMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/migration.ts | 139 | export function previewCsvMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 219 | export function getSavedFilterIdFromProjectId(projectId: number): number { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 223 | export function getProjectIdFromSavedFilterId(savedFilterId: number): number { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 281 | export function createProjectMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 298 | export function updateProjectMutationOptions(successMessage?: string) { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 348 | export function patchProjectFavoriteMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 384 | export function setProjectSubscriptionMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 420 | export function deleteProjectMutationOptions() { | CODE |
| LOW | frontend/src/client/queries/projects.ts | 446 | export function duplicateProjectMutationOptions() { | CODE |
| LOW⚡ | frontend/src/client/queries/projects.ts | 481 | export function usePatchProjectFavoriteMutation() { | CODE |
| 151 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 161 | // Step 1: Create a filter with multi-value project using 'in' operator | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 192 | // Step 2: Save the filter and verify no error | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 199 | // Step 3: Open the filter settings menu from sidebar and click Edit | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 225 | // Step 4: Add a trailing space (the bug trigger from #2010) | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 232 | // Step 5: Save again and wait for the modal to close (indicates save complete) | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 238 | // Step 6: Assert no error occurred | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 241 | // Step 7: Reload and re-open edit to verify the filter text is still intact | COMMENT |
| LOW | frontend/src/helpers/ganttTaskTree.ts | 21 | // Step 1: Build parent -> children mapping | COMMENT |
| LOW⚡ | frontend/src/helpers/ganttTaskTree.ts | 43 | // Step 2: Find root tasks (no parent in the current view) | COMMENT |
| LOW⚡ | frontend/src/helpers/ganttTaskTree.ts | 51 | // Step 3: Depth-first flatten | COMMENT |
| LOW | veans/internal/bootstrap/botuser.go | 69 | // Step 3: try creating. | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 90 | // Step 1: Child arrives first | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 97 | // Step 2: Parent arrives later (no RELATED-TO) | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 102 | // Step 3: Verify parent has correct title (not DUMMY-UID) | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 109 | // Step 4: Verify child still has parent relation | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 33 | // Step 1: Discover principal | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 39 | // Step 2: Get calendar-home-set from principal | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 45 | // Step 3: List calendars | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 52 | // Step 4: Check CTag for a specific calendar | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 56 | // Step 5: Full sync — calendar-query to get all task ETags | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 71 | // Step 6: Multiget to fetch specific tasks | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 81 | // Step 7: Push a local change via PUT | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 95 | // Step 1: Thunderbird starts with OPTIONS to check DAV support | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 103 | // Step 2: PROPFIND on well-known for principal | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 110 | // Step 3: PROPFIND principal for calendar-home-set | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 114 | // Step 4: Thunderbird checks current-user-privilege-set to know if it can write | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 121 | // Step 5: List calendars | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 125 | // Step 6: Sync via calendar-query | COMMENT |
| LOW⚡ | pkg/caldavtests/discovery_test.go | 276 | // Step 1: Hit well-known endpoint | COMMENT |
| LOW⚡ | pkg/caldavtests/discovery_test.go | 284 | // Step 2: PROPFIND the entry point for principal info | COMMENT |
| LOW⚡ | pkg/caldavtests/discovery_test.go | 288 | // Step 3: PROPFIND the principal URL for calendar-home-set | COMMENT |
| LOW | pkg/caldavtests/discovery_test.go | 299 | // Step 4: PROPFIND Depth:1 on calendar home to list calendars | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 457 | // Step 1: Subtask arrives FIRST, referencing a parent that doesn't exist yet. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 473 | // Step 2: Parent arrives with NO RELATED-TO at all. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 488 | // Step 3: Verify relations at the DB level. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 528 | // Step 1: Parent created first (no RELATED-TO). | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 542 | // Step 2: Subtask arrives with RELATED-TO;RELTYPE=PARENT. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 557 | // Step 3: Parent is re-synced (updated) — still no RELATED-TO. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 572 | // Step 4: Verify relations still intact after parent re-sync. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 607 | // Step 1: First subtask arrives, parent doesn't exist yet. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 622 | // Step 2: Second subtask arrives, parent should exist as DUMMY now. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 637 | // Step 3: Parent arrives with NO RELATED-TO. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 651 | // Step 4: Verify all relations intact and no DUMMY tasks. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 161 | // Step 1: Create a filter with multi-value project using 'in' operator | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 192 | // Step 2: Save the filter and verify no error | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 199 | // Step 3: Open the filter settings menu from sidebar and click Edit | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 225 | // Step 4: Add a trailing space (the bug trigger from #2010) | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 232 | // Step 5: Save again and wait for the modal to close (indicates save complete) | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 238 | // Step 6: Assert no error occurred | COMMENT |
| LOW⚡ | frontend/tests/e2e/filters/filter-autocomplete.spec.ts | 241 | // Step 7: Reload and re-open edit to verify the filter text is still intact | COMMENT |
| LOW | frontend/src/helpers/ganttTaskTree.ts | 21 | // Step 1: Build parent -> children mapping | COMMENT |
| LOW⚡ | frontend/src/helpers/ganttTaskTree.ts | 43 | // Step 2: Find root tasks (no parent in the current view) | COMMENT |
| LOW⚡ | frontend/src/helpers/ganttTaskTree.ts | 51 | // Step 3: Depth-first flatten | COMMENT |
| LOW | veans/internal/bootstrap/botuser.go | 69 | // Step 3: try creating. | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 90 | // Step 1: Child arrives first | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 97 | // Step 2: Parent arrives later (no RELATED-TO) | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 102 | // Step 3: Verify parent has correct title (not DUMMY-UID) | COMMENT |
| LOW⚡ | pkg/caldavtests/relations_test.go | 109 | // Step 4: Verify child still has parent relation | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 33 | // Step 1: Discover principal | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 39 | // Step 2: Get calendar-home-set from principal | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 45 | // Step 3: List calendars | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 52 | // Step 4: Check CTag for a specific calendar | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 56 | // Step 5: Full sync — calendar-query to get all task ETags | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 71 | // Step 6: Multiget to fetch specific tasks | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 81 | // Step 7: Push a local change via PUT | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 95 | // Step 1: Thunderbird starts with OPTIONS to check DAV support | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 103 | // Step 2: PROPFIND on well-known for principal | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 110 | // Step 3: PROPFIND principal for calendar-home-set | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 114 | // Step 4: Thunderbird checks current-user-privilege-set to know if it can write | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 121 | // Step 5: List calendars | COMMENT |
| LOW⚡ | pkg/caldavtests/client_compat_test.go | 125 | // Step 6: Sync via calendar-query | COMMENT |
| LOW⚡ | pkg/caldavtests/discovery_test.go | 276 | // Step 1: Hit well-known endpoint | COMMENT |
| LOW⚡ | pkg/caldavtests/discovery_test.go | 284 | // Step 2: PROPFIND the entry point for principal info | COMMENT |
| LOW⚡ | pkg/caldavtests/discovery_test.go | 288 | // Step 3: PROPFIND the principal URL for calendar-home-set | COMMENT |
| LOW | pkg/caldavtests/discovery_test.go | 299 | // Step 4: PROPFIND Depth:1 on calendar home to list calendars | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 457 | // Step 1: Subtask arrives FIRST, referencing a parent that doesn't exist yet. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 473 | // Step 2: Parent arrives with NO RELATED-TO at all. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 488 | // Step 3: Verify relations at the DB level. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 528 | // Step 1: Parent created first (no RELATED-TO). | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 542 | // Step 2: Subtask arrives with RELATED-TO;RELTYPE=PARENT. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 557 | // Step 3: Parent is re-synced (updated) — still no RELATED-TO. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 572 | // Step 4: Verify relations still intact after parent re-sync. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 607 | // Step 1: First subtask arrives, parent doesn't exist yet. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 622 | // Step 2: Second subtask arrives, parent should exist as DUMMY now. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 637 | // Step 3: Parent arrives with NO RELATED-TO. | COMMENT |
| LOW | pkg/webtests/caldav_test.go | 651 | // Step 4: Verify all relations intact and no DUMMY tasks. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | frontend/src/composables/useSavedFilter.test.ts | 172 | draft.filter.value.filters.sort_by.push('title') | CODE |
| CRITICAL | frontend/src/composables/useSavedFilter.test.ts | 194 | state.value.filter.value.filters.sort_by.push('title') | CODE |
| CRITICAL | frontend/src/composables/useSavedFilter.test.ts | 195 | state.value.filter.value.filters.order_by.push('asc') | CODE |
| CRITICAL | …onents/input/editor/deleteSelectionBeforeEnter.test.ts | 47 | return editor.state.doc.content.content.map(node => node.type.name) | CODE |
| CRITICAL | frontend/src/views/tasks/TaskDetailView.vue | 40 | v-if="typeof router.options.history.state.back === 'string' && router.options.history.state.back.includes('/projec | CODE |
| CRITICAL | .github/workflows/preview.yml | 93 | const shortSha = shaTag ? shaTag.replace('sha-', '').substring(0, 7) : context.payload.pull_request.head.sha | CODE |
| CRITICAL | pkg/routes/api/v1/redoc/redoc.standalone.js | 41 | `;class As extends n.PureComponent{render(){return n.createElement("div",{style:{textAlign:"center"}},n.createElement(_s | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | desktop/main.js | 221 | // ─── Express server ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/main.js | 254 | // ─── Zoom ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/main.js | 308 | // ─── Main window ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/main.js | 372 | // ─── Quick Entry window ────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/main.js | 476 | // ─── System tray ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/main.js | 527 | // ─── IPC handlers ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/main.js | 554 | // ─── Shortcut management ──────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/main.js | 582 | // ─── App lifecycle ─────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/test.yml | 479 | # so the test harness can authenticate against /api/v1/test/. | COMMENT |
| MEDIUM | pkg/cmd/migrate.go | 35 | // list -> Essentially just show the table, maybe with an extra column if the migration did run or not | COMMENT |
| MEDIUM⚡ | pkg/routes/api/v1/redoc/redoc.standalone.js | 2 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):"function"==typeof de | CODE |
| MEDIUM⚡ | pkg/routes/api/v1/redoc/redoc.standalone.js | 2 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):"function"==typeof de | CODE |
| MEDIUM⚡ | pkg/routes/api/v1/redoc/redoc.standalone.js | 2 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):"function"==typeof de | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cliff.toml | 0 | {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%y-%m-%d") }} {% else % | STRING |
| HIGH | frontend/cliff.toml | 0 | {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%y-%m-%d") }} {% else % | STRING |
| HIGH | desktop/cliff.toml | 0 | {% if version %}\ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%y-%m-%d") }} {% else % | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/scripts/fonts-subset.sh | 95 | # Check if the output font file already exists | COMMENT |
| LOW⚡ | frontend/scripts/fonts-subset.sh | 123 | # Check if fonttools is available | COMMENT |
| LOW⚡ | frontend/scripts/fonts-subset.sh | 131 | # Check if pyftsubset is available (part of fonttools) | COMMENT |
| LOW⚡ | frontend/scripts/fonts-subset.sh | 139 | # Check if brotli is available | COMMENT |
| LOW | .github/workflows/nixpkgs-update.yml | 35 | # Check if there's already an open PR updating vikunja (from us or r-ryantm) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | frontend/scripts/fonts-subset.sh | 149 | echo "# Create a partial instance of the variable font" | CODE |
| MEDIUM | frontend/src/components/base/Expandable.vue | 81 | # The following functions are called by the js hooks of the transitions. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src/components/base/BasePagination.vue | 85 | // Layout/scaffold rules ported from bulma-css-variables/sass/components/pagination.sass. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pkg/models/subscription_test.go | 194 | // TODO: Add tests to test triggering of notifications for subscribed things | COMMENT |