Enable Self-Service Operations: Give specific users access to your existing tools, services, and scripts
This report summarizes scanner evidence for rundeck/rundeck, a Groovy project with 6,351 GitHub stars. SynthScan examined 397,557 lines of code across 2760 source files, recording 315 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 1.1 (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? 256 finding(s).
Are imports declared and package/API names verified? 33 finding(s).
Are wrappers, guards, and repeated structures necessary? 124 finding(s).
Which changes need focused human review? 315 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 315 distinct pattern matches across 12 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 | …ges/ui-trellis/src/app/utilities/DateTimeFormatters.ts | 87 | export function formatDurationFromNowHumanize(time: MomentInput) { | CODE |
| LOW | …ges/ui-trellis/src/app/utilities/DateTimeFormatters.ts | 123 | export function formatDurationFromNowMomentHumanize(time: MomentInput) { | CODE |
| LOW | …components/job/schedule/services/scheduleDefinition.ts | 198 | export function fromSimpleToCronExpression( | CODE |
| LOW | …/app/components/job/resources/services/nodeServices.ts | 8 | export async function getConfigMetaForExecutionMode( | CODE |
| LOW | …src/app/components/job/workflow/types/workflowFuncs.ts | 18 | export function mergePreservedLogFiltersIntoSaveData( | CODE |
| LOW | …/packages/ui-trellis/src/library/services/jobBrowse.ts | 126 | export async function bulkScheduleEnableDisable( | CODE |
| LOW | …/packages/ui-trellis/src/library/services/jobBrowse.ts | 141 | export async function bulkExecutionEnableDisable( | CODE |
| LOW | …/grails-app/assets/javascripts/workflowStepEditorKO.js | 188 | function WorkflowGlobalLogFilterEditor(data) { | CODE |
| LOW | …/grails-app/assets/javascripts/workflowStepEditorKO.js | 259 | function WorkflowStepLogFilterEditor(data) { | CODE |
| LOW | …kapp/grails-app/assets/javascripts/jquery.waypoints.js | 173 | function requestAnimationFrameShim(callback) { | CODE |
| LOW | …ils-app/assets/javascripts/details-element-polyfill.js | 148 | function setAccessibilityAttributes(root) { | CODE |
| LOW | …ils-app/assets/javascripts/details-element-polyfill.js | 190 | function findClosestElementWithTagName(element, tagName) { | CODE |
| LOW⚡ | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3134 | function getBindingsAndMakeAccessors(node, context) { | CODE |
| LOW⚡ | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3138 | function validateThatBindingIsAllowedForVirtualElements(bindingName) { | CODE |
| LOW⚡ | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3144 | function applyBindingsToDescendantsInternal (bindingContext, elementOrVirtualElement, bindingContextsMayDifferFromDo | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 132 | function isClickOnCheckableElement(element, eventType) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 161 | function toggleObjectClassPropertyString(obj, prop, classNames, shouldHaveClass) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 755 | function getDisposeCallbacksCollection(node, createIfNotFound) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 763 | function destroyCallbacksCollection(node) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 788 | function cleanImmediateCommentTypeChildren(nodeWithChildren) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 1226 | function valuesArePrimitiveAndEqual(a, b) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 1970 | function computedDisposeDependencyCallback(id, entryToDispose) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 1978 | function computedBeginDependencyDetectionCallback(subscribable, id) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 2377 | function visitPropertiesOrArrayEntries(rootObject, visitorCallback) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 2940 | function createBindingsStringEvaluatorViaCache(bindingsString, cache, options) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 2946 | function createBindingsStringEvaluator(bindingsString, options) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3114 | function makeAccessorsFromFunction(callback) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3170 | function applyBindingsToNodeAndDescendantsInternal (bindingContext, nodeVerified, bindingContextMayDifferFromDomPare | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3233 | function applyBindingsToNodeInternal(node, sourceBindings, bindingContext, bindingContextMayDifferFromDomParentEleme | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3511 | function getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3724 | function cloneNodesFromTemplateSourceElement(elemInstance) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 3831 | function getComponentParamsFromCustomElement(elem, bindingContext) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5008 | function validateDataBindValuesForRewriting(keyValueArray) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5026 | function constructMemoizedTagReplacement(dataBindAttributeValue, tagToRetain, nodeName, templateEngine) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5200 | function invokeForEachNodeInContinuousRange(firstNode, lastNode, action) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5208 | function activateBindingsOnContinuousNodeArray(continuousNodeArray, bindingContext) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5265 | function getFirstNodeFromPossibleArray(nodeOrNodeArray) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5404 | function disposeOldComputedAndStoreNewOne(element, newComputed) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5532 | function compareSmallArrayToBigArray(smlArray, bigArray, statusNotInSml, statusNotInBig, options) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5609 | function mapNodeAndRefreshWhenChanged(containerNode, mapping, valueToMap, callbackAfterAddingNodes, index) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 5821 | function ensureHasReferencedJQueryTemplates() { | CODE |
| LOW | …ails-app/assets/javascripts/filterStepPluginsKOTest.js | 35 | function createPluginDescritptions(){ | CODE |
| LOW | …kapp/grails-app/assets/javascripts/executionStateKO.js | 1315 | (function bindHideIncompleteEventBus() { | CODE |
| LOW⚡ | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3521 | function getBindingsAndMakeAccessors(node, context) { | CODE |
| LOW⚡ | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3525 | function validateThatBindingIsAllowedForVirtualElements(bindingName) { | CODE |
| LOW⚡ | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3531 | function applyBindingsToDescendantsInternal(bindingContext, elementOrVirtualElement) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 123 | function isClickOnCheckableElement(element, eventType) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 154 | function toggleObjectClassPropertyString(obj, prop, classNames, shouldHaveClass) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 787 | function getDisposeCallbacksCollection(node, createIfNotFound) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 795 | function destroyCallbacksCollection(node) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 1275 | function valuesArePrimitiveAndEqual(a, b) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 2100 | function computedDisposeDependencyCallback(id, entryToDispose) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 2108 | function computedBeginDependencyDetectionCallback(subscribable, id) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 2578 | function visitPropertiesOrArrayEntries(rootObject, visitorCallback) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3209 | function createBindingsStringEvaluatorViaCache(bindingsString, cache, options) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3215 | function createBindingsStringEvaluator(bindingsString, options) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3501 | function makeAccessorsFromFunction(callback) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3561 | function applyBindingsToNodeAndDescendantsInternal(bindingContext, nodeVerified) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3613 | function applyBindingsToNodeInternal(node, sourceBindings, bindingContext) { | CODE |
| LOW | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 3921 | function getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders) { | CODE |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | build.yaml | 1 | # Bundled external plugin versions have moved to gradle.properties. | COMMENT |
| LOW | …/authorization/providers/TestYamlPolicyCollection.java | 81 | // public void testGroupEqualsSingle() throws Exception { | COMMENT |
| LOW | …/authorization/providers/TestYamlPolicyCollection.java | 101 | // Subject subject = makeSubject("user1", "dev_test"); | COMMENT |
| LOW | …/authorization/providers/TestYamlPolicyCollection.java | 121 | // Collection<RuleSetConstructor> ruleSetConstructors = policies.matchedContexts(subject, environment); | COMMENT |
| LOW | …pp/grails-spa/packages/ui-trellis/jest.global-mocks.js | 21 | config.global.mocks = { | COMMENT |
| LOW | …pp/grails-spa/packages/ui-trellis/jest.global-mocks.js | 41 | // }; | COMMENT |
| LOW | …src/app/components/activity/tests/activityList.spec.ts | 421 | // undefined -- the meaningful assertion is that the watcher ran to | COMMENT |
| LOW | …src/app/components/community-news-notification/main.js | 41 | ]); | COMMENT |
| LOW | …src/app/components/community-news-notification/main.js | 61 | COMMENT | |
| LOW | …lis/src/app/pages/repository/components/PluginCard.vue | 141 | ) { | COMMENT |
| LOW | …llis/src/library/components/navbar/NavBarContainer.vue | 221 | // i { | COMMENT |
| LOW | …/library/components/execution-log/execution.stories.ts | 61 | COMMENT | |
| LOW | …/library/components/execution-log/execution.stories.ts | 81 | // completed: false, | COMMENT |
| LOW | …/src/library/components/job/workflow-designer/Graph.ts | 161 | // node.addPrevious(prevNode!) | COMMENT |
| LOW | …src/library/components/containers/tabs/tabs.stories.ts | 21 | // <Tabs class="card" v-bind="args" style="padding: 20px;"> | COMMENT |
| LOW | …src/library/components/containers/tabs/tabs.stories.ts | 41 | // } | COMMENT |
| LOW | …src/library/components/containers/tabs/tabs.stories.ts | 61 | // setupStory(this) | COMMENT |
| LOW | …brary/theme/scss/runstrap/_sidebar-and-main-panel.scss | 21 | // position: relative; | COMMENT |
| LOW | …brary/theme/scss/runstrap/_sidebar-and-main-panel.scss | 121 | COMMENT | |
| LOW | …brary/theme/scss/runstrap/_sidebar-and-main-panel.scss | 141 | // } | COMMENT |
| LOW | …rellis/src/library/theme/scss/runstrap/_variables.scss | 861 | //** Default progress bar color | COMMENT |
| LOW | …is/src/library/theme/scss/runstrap/_button-groups.scss | 221 | > .btn-group .dropdown-menu { | COMMENT |
| LOW | …-trellis/src/library/theme/scss/runstrap/_layouts.scss | 1 | // ************************************* | COMMENT |
| LOW | …library/theme/scss/runstrap/_responsive-utilities.scss | 1 | // | COMMENT |
| LOW | …ellis/src/library/theme/scss/runstrap/_responsive.scss | 141 | // .nav .nav{ | COMMENT |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_inputs.scss | 1 | // ************************************* | COMMENT |
| LOW | …rellis/src/library/theme/scss/runstrap/_utilities.scss | 1 | // ************************************* | COMMENT |
| LOW | …ui-trellis/src/library/theme/scss/runstrap/_forms.scss | 41 | // | COMMENT |
| LOW | …ui-trellis/src/library/theme/scss/runstrap/_forms.scss | 101 | // Adjust output element | COMMENT |
| LOW | …ui-trellis/src/library/theme/scss/runstrap/_forms.scss | 461 | // | COMMENT |
| LOW | …llis/src/library/theme/scss/runstrap/_breadcrumbs.scss | 1 | // ************************************* | COMMENT |
| LOW | …/ui-trellis/src/library/theme/scss/runstrap/_grid.scss | 1 | // ************************************* | COMMENT |
| LOW | …trellis/src/library/theme/scss/runstrap/_dropdown.scss | 161 | // Menu positioning | COMMENT |
| LOW | …trellis/src/library/theme/scss/runstrap/_dropdown.scss | 301 | COMMENT | |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_switch.scss | 1 | // /* ============================================================ | COMMENT |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_switch.scss | 21 | // -o-user-select: none; | COMMENT |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_switch.scss | 41 | // top: 0; | COMMENT |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_switch.scss | 61 | // .has-switch input[type=checkbox] { | COMMENT |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_switch.scss | 81 | // } | COMMENT |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_switch.scss | 101 | // .has-switch label { | COMMENT |
| LOW | …i-trellis/src/library/theme/scss/runstrap/_switch.scss | 121 | // } | COMMENT |
| LOW | …rellis/src/library/theme/scss/runstrap/_normalize.scss | 241 | // ========================================================================== | COMMENT |
| LOW | …ry/theme/scss/runstrap/mixins/_background-variant.scss | 1 | // Contextual backgrounds | COMMENT |
| LOW | …lis/src/library/theme/scss/runstrap/mixins/_forms.scss | 41 | background-color: $background-color; | COMMENT |
| LOW | …s/src/library/theme/scss/runstrap/mixins/_buttons.scss | 121 | } | COMMENT |
| LOW | …s/src/library/theme/scss/runstrap/mixins/_buttons.scss | 141 | // } | COMMENT |
| LOW | …brary/theme/scss/runstrap/mixins/_vendor-prefixes.scss | 1 | // Vendor Prefixes | COMMENT |
| LOW | …/src/library/theme/scss/runstrap/mixins/_clearfix.scss | 1 | // Clearfix | COMMENT |
| LOW | …rellis/src/library/theme/scss/custom/process-flow.scss | 141 | } | COMMENT |
| LOW | …rellis/src/library/theme/scss/custom/process-flow.scss | 161 | // } | COMMENT |
| LOW | …rellis/src/library/theme/scss/custom/process-flow.scss | 181 | // &.inactive { | COMMENT |
| LOW | …rellis/src/library/theme/scss/custom/process-flow.scss | 201 | // span { | COMMENT |
| LOW | …/ui-trellis/src/library/theme/scss/custom/buttons.scss | 1 | // .btn.arrow-button{ | COMMENT |
| LOW | …rellis/src/library/theme/scss/custom/rundeck-icon.scss | 21 | // &.app-logo | COMMENT |
| LOW | …ages/ui-trellis/src/library/theme/scss/pages/jobs.scss | 121 | /** option controls and view layout **/ | COMMENT |
| LOW | …pa/packages/ui-trellis/src/library/modules/requests.ts | 1 | // export const request = (url, params) => { | COMMENT |
| LOW | rundeckapp/grails-app/assets/less/_old-variables.less | 1 | // Flatly 3.0.3 | COMMENT |
| LOW | …deckapp/grails-app/assets/javascripts/bootstrap-all.js | 1 | // Do not edit this file. It will be overwritten by the bootstrap-framework plugin. | COMMENT |
| LOW | …pp/grails-app/assets/javascripts/jobEditPage_bundle.js | 21 | //= require knockout-onenter | COMMENT |
| LOW | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 321 | fixUpContinuousNodeArray: function(continuousNodeArray, parentNode) { | COMMENT |
| 37 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ests/ldapsync/should-show-ldap-profile-attribs-test.sh | 4 | # ----------------- | COMMENT |
| MEDIUM | …ests/ldapsync/should-show-ldap-profile-attribs-test.sh | 7 | # ------------ | COMMENT |
| MEDIUM | …ts/rundeck/should-copy-multiple-files-remotely-test.sh | 9 | # ----------------- | COMMENT |
| MEDIUM | …ts/rundeck/should-copy-multiple-files-remotely-test.sh | 12 | # ------------ | COMMENT |
| MEDIUM | …ers/rundeck/tests/rundeck/project-should-exist-test.sh | 9 | # ----------------- | COMMENT |
| MEDIUM | …ers/rundeck/tests/rundeck/project-should-exist-test.sh | 12 | # ------------ | COMMENT |
| MEDIUM | …eck/tests/rundeck/should-dispatch-remote-adhoc-test.sh | 9 | # ----------------- | COMMENT |
| MEDIUM | …eck/tests/rundeck/should-dispatch-remote-adhoc-test.sh | 12 | # ------------ | COMMENT |
| MEDIUM | …eck/should-dispatch-script-remotely-storagekey-test.sh | 9 | # ----------------- | COMMENT |
| MEDIUM | …eck/should-dispatch-script-remotely-storagekey-test.sh | 12 | # ------------ | COMMENT |
| MEDIUM | …/tests/rundeck/should-dispatch-script-remotely-test.sh | 9 | # ----------------- | COMMENT |
| MEDIUM | …/tests/rundeck/should-dispatch-script-remotely-test.sh | 12 | # ------------ | COMMENT |
| MEDIUM | …undeck/should-dispatch-remote-adhoc-storagekey-test.sh | 9 | # ----------------- | COMMENT |
| MEDIUM | …undeck/should-dispatch-remote-adhoc-storagekey-test.sh | 12 | # ------------ | COMMENT |
| MEDIUM | …/dockers/rundeck/tests/pamtests/should-use-pam-test.sh | 4 | # ----------------- | COMMENT |
| MEDIUM | …/dockers/rundeck/tests/pamtests/should-use-pam-test.sh | 7 | # ------------ | COMMENT |
| MEDIUM | …er/dockers/rundeck/tests/ssltests/basic-client-test.sh | 8 | # ----------------- | COMMENT |
| MEDIUM | …er/dockers/rundeck/tests/ssltests/basic-client-test.sh | 11 | # ------------ | COMMENT |
| MEDIUM | …/rundeck/tests/ldaptests/should-use-ldap-creds-test.sh | 4 | # ----------------- | COMMENT |
| MEDIUM | …/rundeck/tests/ldaptests/should-use-ldap-creds-test.sh | 7 | # ------------ | COMMENT |
| MEDIUM | test/docker/dockers/rundeck/scripts/start_rundeck.sh | 48 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | test/docker/dockers/rundeck/scripts/start_rundeck.sh | 50 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | test/docker/dockers/rundeck/scripts/start_rundeck.sh | 61 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | test/docker/dockers/rundeck/scripts/start_rundeck.sh | 63 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | …ansible/tests/ansible/should-load-ansible-jobs-test.sh | 8 | # ----------------- | COMMENT |
| MEDIUM | …ansible/tests/ansible/should-load-ansible-jobs-test.sh | 11 | # ------------ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .claude/docs/api-guidelines.md | 134 | ### Step 1: build.gradle Dependencies | COMMENT |
| LOW | .claude/docs/api-guidelines.md | 165 | ### Step 2: Controller Annotation | COMMENT |
| LOW | .claude/docs/api-guidelines.md | 187 | ### Step 3: Method Annotations | COMMENT |
| LOW | .claude/docs/api-guidelines.md | 219 | ### Step 4: Request Body (POST/PUT) | COMMENT |
| LOW | .claude/docs/api-guidelines.md | 252 | ### Step 5: Query and Path Parameters | COMMENT |
| LOW | .claude/docs/development-guidelines.md | 112 | #### Step 1: Define Config Type | COMMENT |
| LOW | .claude/docs/development-guidelines.md | 118 | #### Step 2: Implement SystemConfigurable | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 51 | ### Step 1: Identify Dependency Locations | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 66 | ### Step 2: Search for Vulnerable Dependency | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 79 | ### Step 3: Check Transitive Dependencies | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 92 | ### Step 4: Frontend Dependencies | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 271 | ### Step 1: Verify Dependency Updated | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 284 | ### Step 2: Run Test Suite | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 298 | ### Step 3: Functional Testing | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 308 | ### Step 4: Build and Smoke Test | COMMENT |
| LOW | .claude/skills/cve-remediation/SKILL.md | 324 | ### Step 5: Security Verification | COMMENT |
| LOW | .claude/skills/create-plugin/SKILL.md | 54 | #### Step 1: Create build.gradle | COMMENT |
| LOW | .claude/skills/create-plugin/SKILL.md | 115 | #### Step 2: Create Plugin Class | COMMENT |
| LOW | .claude/skills/create-code/SKILL.md | 179 | ### Step 1: Define Config Type | COMMENT |
| LOW | .claude/skills/create-code/SKILL.md | 185 | ### Step 2: Implement SystemConfigurable | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 68 | ### Step 1: Validate Environment | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 86 | ### Step 2: Fetch PR Metadata | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 120 | ### Step 3: Determine Commits to Cherry-Pick (Auto-Detect Merge Strategy) | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 161 | ### Step 4: Prompt for Target Branch | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 184 | ### Step 5: Create Backport Branch | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 213 | ### Step 6: Cherry-Pick Commit(s) | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 280 | ### Step 7: Push Backport Branch | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 292 | ### Step 8: Open Backport PR | COMMENT |
| LOW | .claude/skills/backport-pr/SKILL.md | 352 | ### Step 9: Final Summary | COMMENT |
| LOW⚡ | .circleci/config.yml | 894 | # Step 1: Unit tests run in parallel with Build (no gates for fast feedback) | COMMENT |
| LOW⚡ | .circleci/config.yml | 902 | # Step 2: Integration and functional tests require Build + unit tests | COMMENT |
| LOW | .circleci/config.yml | 951 | # Step 3: Selenium — only after all Step 1 (unit) and Step 2 (integration/functional) tests pass | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …ckages/ui-trellis/src/app/utilities/tests/i18n.spec.ts | 81 | const en_US_calls = i18n.global.mergeLocaleMessage.mock.calls.filter( | CODE |
| CRITICAL | rundeckapp/grails-app/assets/javascripts/application.js | 897 | opts.template = jQuery.fn.popover.Constructor.DEFAULTS.template.replace( | CODE |
| CRITICAL | …bs/rundeck/jetty/jaas/JettyCachingLdapLoginModule.java | 362 | return prefix+(isBase64(chkString) ? org.apache.commons.codec.binary.Hex.encodeHexString(org.apache.commons.code | CODE |
| CRITICAL | …ndeck/core/execution/ExecutionListenerBuildLogger.java | 83 | message.append(org.apache.tools.ant.util.StringUtils.getStackTrace(error)); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …pp/grails-spa/packages/ui-trellis/jest.global-mocks.js | 44 | // // can leverage the mockRundeckBrowser for other mocks | COMMENT |
| MEDIUM | …eckapp/grails-app/assets/javascripts/knockout.debug.js | 26 | // (0, eval)('this') is a robust way of getting a reference to the global object | COMMENT |
| MEDIUM | …eckapp/grails-app/assets/javascripts/knockout_3_5_1.js | 10 | // (0, eval)('this') is a robust way of getting a reference to the global object | COMMENT |
| MEDIUM | …deckapp/grails-app/assets/javascripts/util/markdeep.js | 833 | // explicitly compute the value anyway and the parser is robust to extra characte | COMMENT |
| MEDIUM | …deckapp/grails-app/assets/javascripts/ace/mode-html.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …deckapp/grails-app/assets/javascripts/ace/mode-html.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …ndeckapp/grails-app/assets/javascripts/ace/mode-php.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …ndeckapp/grails-app/assets/javascripts/ace/mode-php.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …app/grails-app/assets/javascripts/ace/mode-markdown.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …app/grails-app/assets/javascripts/ace/mode-markdown.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …ndeckapp/src/main/resources/public/js/ace/mode-html.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …ndeckapp/src/main/resources/public/js/ace/mode-html.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | rundeckapp/src/main/resources/public/js/ace/mode-php.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | rundeckapp/src/main/resources/public/js/ace/mode-php.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …kapp/src/main/resources/public/js/ace/mode-markdown.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| MEDIUM | …kapp/src/main/resources/public/js/ace/mode-markdown.js | 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_r | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/ui-trellis/src/app/components/home/HomeSearchBar.vue | 8 | :placeholder="placeholder" | CODE |
| LOW | …is/src/app/components/home/tests/HomeSearchBar.spec.ts | 25 | expect(inputElement.attributes("placeholder")).toBe("Custom Placeholder"); | CODE |
| LOW | …components/job/workflow/tests/JobRefFormFields.spec.ts | 112 | props: ["modelValue", "suggestions", "readOnly", "placeholder"], | CODE |
| LOW | …app/components/job/workflow/tests/EditStepCard.spec.ts | 150 | props: ["modelValue", "placeholder"], | CODE |
| LOW | …lis/src/app/pages/repository/deprecated/flex-html.html | 29 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pharetra | CODE |
| LOW | …lis/src/app/pages/repository/deprecated/flex-html.html | 29 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pharetra | CODE |
| LOW | …/components/primeVue/PtAutoComplete/PtAutoComplete.vue | 17 | :placeholder="placeholder" | CODE |
| LOW | …/src/library/components/primeVue/PtSelect/PtSelect.vue | 17 | :placeholder="placeholder" | CODE |
| LOW | …primeVue/PtEntityAutoComplete/PtEntityAutoComplete.vue | 18 | :placeholder="placeholder" | CODE |
| LOW | …is/src/library/components/primeVue/PtInput/PtInput.vue | 27 | :placeholder="placeholder" | CODE |
| LOW | …is/src/library/components/primeVue/PtInput/PtInput.vue | 50 | :placeholder="placeholder" | CODE |
| LOW | …is/src/library/components/primeVue/PtInput/PtInput.vue | 73 | :placeholder="placeholder" | CODE |
| LOW | …rary/components/primeVue/PtInput/tests/PtInput.spec.ts | 162 | .attributes("placeholder"), | CODE |
| LOW | …rary/components/primeVue/PtInput/tests/PtInput.spec.ts | 250 | expect(textarea.attributes("placeholder")).toBe("Add a note"); | CODE |
| LOW | …src/library/components/plugins/PluginAccordionList.vue | 8 | <div v-for="n in 4" :key="'common-' + n" class="placeholder"> | CODE |
| LOW | …src/library/components/plugins/PluginAccordionList.vue | 17 | <div v-for="n in 3" :key="'other-' + n" class="placeholder"> | CODE |
| LOW | …kages/ui-trellis/src/library/stories/theme.stories.tsx | 616 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam | CODE |
| LOW | …kages/ui-trellis/src/library/stories/theme.stories.tsx | 616 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam | CODE |
| LOW | …/ui-trellis/src/library/theme/scss/custom/flexbox.scss | 156 | // eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam vo | COMMENT |
| LOW | …/ui-trellis/src/library/theme/scss/custom/flexbox.scss | 156 | // eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam vo | COMMENT |
| LOW | …app/assets/javascripts/bootstrap-datetimepicker.min.js | 2348 | else if (options.defaultDate && input.attr('placeholder') === undefined) { | CODE |
| LOW | …kapp/grails-app/assets/javascripts/executionOptions.js | 80 | inpu2.setAttribute("placeholder", "Enter value"); | CODE |
| LOW⚡ | rundeckapp/grails-app/assets/javascripts/application.js | 981 | if (input.val() == input.attr('placeholder')) { | CODE |
| LOW⚡ | rundeckapp/grails-app/assets/javascripts/application.js | 983 | input.removeClass('placeholder'); | CODE |
| LOW⚡ | rundeckapp/grails-app/assets/javascripts/application.js | 987 | if (input.val() == '' || input.val() == input.attr('placeholder')) { | CODE |
| LOW⚡ | rundeckapp/grails-app/assets/javascripts/application.js | 988 | input.addClass('placeholder'); | CODE |
| LOW⚡ | rundeckapp/grails-app/assets/javascripts/application.js | 989 | input.val(input.attr('placeholder')); | CODE |
| LOW⚡ | rundeckapp/grails-app/assets/javascripts/application.js | 995 | if (input.val() == input.attr('placeholder')) { | CODE |
| LOW | …ndeck/jetty/jaas/JettyCachingLdapLoginModuleTest2.java | 397 | when(userAttributes.get(module._userEmailAttribute)).thenReturn(new BasicAttribute(module._userEmailAttribute,"u | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packaging/lib/rpm/scripts/preinst.sh | 19 | # Create the home parent directory in case it does not exist(it was relocated) | COMMENT |
| MEDIUM | …rellis/src/library/theme/scss/runstrap/_variables.scss | 248 | //## Define the breakpoints at which your layout will change, adapting to different screen sizes. | COMMENT |
| MEDIUM | …rellis/src/library/theme/scss/runstrap/_variables.scss | 547 | //## Define the maximum width of `.container` for different screen sizes. | COMMENT |
| MEDIUM | scripts/release/setversion.sh | 134 | # Create a release branch for patch releases | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …i-trellis/src/app/components/adhoc/ExecutionOutput.vue | 516 | // so we need to check if we've already processed completion | COMMENT |
| LOW⚡ | .circleci/config.yml | 894 | # Step 1: Unit tests run in parallel with Build (no gates for fast feedback) | COMMENT |
| LOW⚡ | .circleci/config.yml | 902 | # Step 2: Integration and functional tests require Build + unit tests | COMMENT |
| LOW | .circleci/config.yml | 951 | # Step 3: Selenium — only after all Step 1 (unit) and Step 2 (integration/functional) tests pass | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/circleci/helper-functions.sh | 173 | # Check if there are any high or critical vulnerabilities and return a non-zero exit code if found | COMMENT |
| LOW | scripts/release/setversion.sh | 181 | # Check if branch already exists locally or remotely | COMMENT |
| LOW | .circleci/config.yml | 469 | # Check if scan failed (error field present) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .circleci/config.yml | 1041 | # Build Rundeck Docker images with JRE 17; run downstream tests with JDK 25 on the host (Gradle / CI orchestration). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/release/release-rc.sh | 19 | # Usage: | COMMENT |