Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
8765571
Add "View background tasks" to Help menu; descriptive quit dialog but…
koppor Sep 22, 2026
b41d188
Shorten CHANGELOG entry
koppor Sep 22, 2026
f82bd2e
Link selected auto-found file on "+" in the File field (#16938)
koppor Sep 22, 2026
fec7080
Label new issues "status: needs-triage" and block /assign-me on them …
koppor Sep 22, 2026
3fad03a
Make case-sensitive search work in linked files (#17002)
koppor Sep 22, 2026
bec412c
New Crowdin updates (#17242)
Siedlerchr Sep 22, 2026
0a1359b
Chore(deps): Bump org.itsallcode.openfasttrace:openfasttrace-exporter…
dependabot[bot] Sep 22, 2026
17d04e5
Chore(deps): Bump org.itsallcode.openfasttrace:openfasttrace-api (#17…
dependabot[bot] Sep 22, 2026
18e5f46
Chore(deps): Bump org.itsallcode.openfasttrace:openfasttrace (#17243)
dependabot[bot] Sep 22, 2026
617ad67
Chore(deps): Bump org.itsallcode.openfasttrace:openfasttrace-exporter…
dependabot[bot] Sep 22, 2026
1f4c623
Chore(deps): Bump org.itsallcode.openfasttrace:openfasttrace-api (#17…
dependabot[bot] Sep 22, 2026
80e66fd
Chore(deps): Bump org.itsallcode.openfasttrace:openfasttrace (#17247)
dependabot[bot] Sep 22, 2026
69daa71
Chore(deps): Bump org.itsallcode.openfasttrace:openfasttrace-core (#1…
dependabot[bot] Sep 22, 2026
02e5e02
Chore(deps): Bump org.hibernate.validator:hibernate-validator (#17252)
dependabot[bot] Sep 22, 2026
3de7bc9
Chore(deps): Bump org.itsallcode:openfasttrace-gradle from 3.2.0 to 3…
dependabot[bot] Sep 22, 2026
0e6ae6e
Update Grobid url from http to https (#17254)
Siedlerchr Sep 22, 2026
6bdb5e7
Clarify requirements documentation (#17161)
InAnYan Sep 23, 2026
813d76e
Merge remote-tracking branch 'origin/main' into help-background-tasks
koppor Sep 23, 2026
9d6d381
Address Qodo: unbind task view, add requirement and quit test
koppor Sep 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: "Bug report"
description: Create a report to help us improve
type: Bug
labels: ["status: needs-triage"]
body:
- type: markdown
attributes:
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/suggestion-for-improvement.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: Suggestion for improvement
about: Suggest an enhancement
title: ''
labels: ''
labels: 'status: needs-triage'
type: 'feature'
assignees: ''

Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/on-issue-comment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,16 @@ jobs:
contents: read
issues: write
steps:
- name: Decline self-assignment of untriaged issues
id: untriaged
if: "${{ contains(github.event.comment.body, '/assign-me') && contains(github.event.issue.labels.*.name, 'status: needs-triage') }}"
run: |
Comment on lines +15 to +18

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Task changes cannot be reviewed alone 📘 Rule violation ⚙ Maintainability

The task-viewer PR also changes issue-triage automation, requirement-tracing dependencies, Grobid
networking, file linking, and full-text search behavior. These independent code paths force review,
release, and rollback of the Help-menu feature to carry unrelated behavior changes with it.
Agent Prompt
## Issue description
The background-task viewer is bundled with several unrelated features and maintenance changes, preventing focused review and rollback.

## Fix Focus Areas
- .github/workflows/on-issue-comment.yml[15-24]
- jablib/src/main/java/org/jabref/logic/importer/util/GrobidService.java[69-74]
- jablib/src/main/java/org/jabref/logic/search/query/SearchToLuceneVisitor.java[95-119]

## Recommended Fix
Rebase or cherry-pick the background-task viewer changes onto a clean branch. Move issue triage, Grobid, linked-file, search, dependency, and localization work into independently reviewed pull requests.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Generated with Claude Code

Not done: all flagged files come from the merged origin/main, not this PR.

gh issue comment "${{ github.event.issue.html_url }}" --body "Hi @${{ github.event.comment.user.login }}, this issue needs triage by a maintainer first. Please wait until the \`status: needs-triage\` label is removed."
env:
GH_TOKEN: ${{ github.token }}
- name: Assign the user or unassign stale assignments
id: assign
if: ${{ steps.untriaged.outcome == 'skipped' }}
uses: takanome-dev/assign-issue-action@fad4b83750f7df31e03c2a42e8f1880b0b4b3573 # edge
with:
github_token: '${{ secrets.GH_TOKEN_ASSIGN_ISSUE_ACTION || github.token }}'
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,16 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv
### Added

- We added `jabkit git merge-driver`, a Git merge driver that merges `.bib` files semantically. [#16838](https://github.com/JabRef/jabref/pull/16838)
- We added "Help > View background tasks" and clearer "Quit anyway"/"Keep JabRef open" buttons when quitting during background tasks. [#12706](https://github.com/JabRef/jabref/issues/12706)

### Changed

### Fixed

- We re-enabled the [Grobid](https://github.com/grobidOrg/grobid) citation fetcher again. It is now reachable via https. [#16668](https://github.com/JabRef/jabref/issues/16668)
- We fixed an issue where the AI chat lost its scroll position when switching back to an entry. [#17172](https://github.com/JabRef/jabref/pull/17172)
- We fixed an issue where pressing "+" in the "File" field with an automatically found file selected opened the "Add file link" dialog instead of linking the selected file. [#16938](https://github.com/JabRef/jabref/pull/16938)
Comment thread
qodo-free-for-open-source-projects[bot] marked this conversation as resolved.
- We fixed an issue where case-sensitive search (`=!`, `==!`, `=~!`) in linked files ignored the casing and matched text in any casing. [#13048](https://github.com/JabRef/jabref/issues/13048)

### Removed

Expand Down
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ One can also add [callouts](https://just-the-docs.github.io/just-the-docs-tests/

Comment on the issue you want to work at with `/assign-me`.
GitHub will then automatically assign you.
Issues labeled `status: needs-triage` cannot be self-assigned until a maintainer has triaged them.

Before you do so, read the complete issue and its discussion.
Some issues state a prerequisite - typically another pull request that has to be merged first.
Expand Down
10 changes: 5 additions & 5 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ dependencies {
implementation("org.gradlex:java-module-testing:1.8.1")
implementation("org.gradlex:jvm-dependency-conflict-resolution:2.5")
implementation("org.gradle.toolchains:foojay-resolver:1.0.0")
implementation("org.itsallcode:openfasttrace-gradle:3.2.0")
implementation("org.itsallcode.openfasttrace:openfasttrace-api:4.9.0")
implementation("org.itsallcode.openfasttrace:openfasttrace-core:4.9.0")
implementation("org.itsallcode.openfasttrace:openfasttrace-exporter-specobject:4.9.0")
implementation("org.itsallcode.openfasttrace:openfasttrace:4.9.0")
implementation("org.itsallcode:openfasttrace-gradle:3.4.0")
implementation("org.itsallcode.openfasttrace:openfasttrace-api:4.10.0")
implementation("org.itsallcode.openfasttrace:openfasttrace-core:4.10.0")
implementation("org.itsallcode.openfasttrace:openfasttrace-exporter-specobject:4.10.0")
Comment on lines +31 to +34

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Build versions remain decentralized 📘 Rule violation ⚙ Maintainability

build-logic/build.gradle.kts hard-codes five upgraded OpenFastTrace versions instead of declaring
them in versions/build.gradle.kts. A later dependency update must discover and synchronize version
metadata outside the approved catalog for the plugin and its runtime components.
Agent Prompt
## Issue description
The OpenFastTrace dependency versions are upgraded directly in the build-logic dependency declarations rather than through the designated version file.

## Fix Focus Areas
- build-logic/build.gradle.kts[31-35]
- versions/build.gradle.kts[135-138]

## Recommended Fix
Declare the OpenFastTrace versions in `versions/build.gradle.kts` and make the build-logic dependency declarations consume those centralized versions, retaining any required module mappings in `gradle/modules.properties`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Generated with Claude Code

Not done: build-logic versions arrived with the merged origin/main.

implementation("org.itsallcode.openfasttrace:openfasttrace:4.10.0")
}
Original file line number Diff line number Diff line change
@@ -1,107 +1,3 @@
import java.io.File
import java.util.Locale

import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.register
import org.itsallcode.openfasttrace.api.core.ItemStatus
import org.itsallcode.openfasttrace.gradle.config.TagPathConfiguration
import org.itsallcode.openfasttrace.gradle.config.TracingConfig
import org.itsallcode.openfasttrace.gradle.task.CollectTask
import org.itsallcode.openfasttrace.gradle.task.TraceTask
import org.itsallcode.openfasttrace.gradle.task.config.SerializableTagPathConfig

val taskGroupName = "trace"
val requirementConfigName = "oftRequirementConfig"

allprojects {
val tracingConfig = extensions.create("requirementTracing", TracingConfig::class.java, project)
(tracingConfig as ExtensionAware).extensions.create("tags", TagPathConfiguration::class.java, project)
}

gradle.projectsEvaluated {
val collectTask = tasks.register<CollectTask>("collectRequirements") {
group = taskGroupName
description = "Collect requirements and generate specobject file"
inputDirectories.set(getAllInputDirectories(rootProject.allprojects))
outputFile.set(rootProject.layout.buildDirectory.file("reports/requirements.xml"))
pathConfig.set(getPathConfig(rootProject.allprojects))
}

tasks.register<TraceTask>("traceRequirements") {
group = taskGroupName
description = "Trace requirements and generate tracing report"
dependsOn(collectTask)

val tracingConfig = rootProject.getTracingConfig()
failBuild.set(tracingConfig.failBuild)
requirementsFile.set(collectTask.flatMap { task -> task.outputFile })

if (tracingConfig.reportFile.isPresent) {
outputFile.set(tracingConfig.reportFile)
} else {
val extension = if (tracingConfig.reportFormat.get() == "html") "html" else "txt"
outputFile.set(rootProject.layout.buildDirectory.file("reports/tracing.$extension"))
}

reportVerbosity.set(tracingConfig.reportVerbosity)
reportFormat.set(tracingConfig.reportFormat)
importedRequirements.set(getImportedRequirements(rootProject.allprojects))
filteredArtifactTypes.set(tracingConfig.filteredArtifactTypes)
filteredTags.set(tracingConfig.filteredTags)
filterAcceptsItemsWithoutTag.set(tracingConfig.filterAcceptsItemsWithoutTag)
filterWantedStatuses.set(getWantedStatuses(tracingConfig))
detailsSectionDisplay.set(tracingConfig.detailsSectionDisplay)
}
}

fun Project.getTracingConfig(): TracingConfig = extensions.getByType()

fun getAllInputDirectories(allProjects: Set<Project>): Set<File> = allProjects
.flatMap { project -> project.getTracingConfig().inputDirectories.files }
.toSet()

fun getImportedRequirements(allProjects: Set<Project>): Set<File> = allProjects
.flatMap(::getImportedRequirements)
.toSet()

fun getImportedRequirements(project: Project): Set<File> {
val importedRequirements = project.getTracingConfig().importedRequirements.orNull.orEmpty()
if (importedRequirements.isEmpty()) {
return emptySet()
}

val configuration = project.configurations.findByName(requirementConfigName)
?: project.configurations.create(requirementConfigName)

importedRequirements.forEach { dependency ->
project.dependencies.add(requirementConfigName, dependency)
}

return configuration.files
}

fun getPathConfig(allProjects: Set<Project>): List<SerializableTagPathConfig> = allProjects
.mapNotNull(::getTagPathConfig)

fun getTagPathConfig(project: Project): SerializableTagPathConfig? {
val tagPathConfig = project.getTracingConfig().tagPathConfig
if (tagPathConfig.pathConfig.isEmpty()) {
return null
}
return SerializableTagPathConfig(tagPathConfig)
}

fun getWantedStatuses(tracingConfig: TracingConfig): Set<ItemStatus> =
tracingConfig.filterWantedStatuses.getOrElse(emptySet()).map(::convertStatus).toSet()

fun convertStatus(value: String): ItemStatus = try {
ItemStatus.valueOf(value.uppercase(Locale.ROOT))
} catch (exception: IllegalArgumentException) {
val validStatuses = ItemStatus.values().joinToString(", ") { status -> status.name }
throw IllegalArgumentException(
"Invalid status '$value'. Valid statuses are: $validStatuses",
exception,
)
plugins {
id("org.itsallcode.openfasttrace")
}
Loading
Loading