Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
22 changes: 22 additions & 0 deletions .agents/skills/oft-spec-driven-development/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,12 +187,34 @@ Out of scope:
- [ ] Decide if and which part of the version needs to be incremented. Use semantic versioning rules (breaking change updates major, feature updates minor, documentation, fixes and refactoring update fix number)
- [ ] Raise the version to <semantic-version> (this is a <type-of-release> release)
- [ ] Write the changelog entry for <semantic-version>
- [ ] Determine the bundled OpenFastTrace library version from the Gradle dependency metadata
- [ ] Write the bundled OpenFastTrace version into the fixed changelog location for <semantic-version>
- [ ] Update release date to today
- [ ] Ensure that issue list contains the GitHub issue number and title
```

Keep verification items concrete. Do not leave them as generic "run tests" placeholders when the quality requirements demand more specific checks.

## Changelog Rules

Every release changelog must state the OpenFastTrace library version bundled
with the plugin. Determine it from the resolved Gradle dependency for
`org.itsallcode.openfasttrace:openfasttrace`, not from memory.

Always write it in the same place: immediately after the release summary text
and before the first issue-category section such as `## Features`,
`## Documentation`, or `## Build Maintenance`. Use the heading
`## Bundled OpenFastTrace` and the content `OpenFastTrace <version>`.

When plugin descriptor metadata is in scope, prefer copying this changelog
section into plugin `changeNotes`, because JetBrains displays change notes in
Marketplace and in the Plugins settings dialog. Keep source release notes in
Markdown; if plugin `changeNotes` require HTML, render the active release note
to generated HTML with Pandoc during the build instead of storing the source
changelog as HTML. Use the plugin `description` only if the maintainers want the bundled
OpenFastTrace version visible as longer-lived installed-plugin overview text
independent of the current release notes.

## Issue Intake Rules

When the user provides a tracker link:
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ jobs:
distribution: temurin
java-version: 21

- name: Install Pandoc
run: |
sudo apt-get update
sudo apt-get install --yes pandoc

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v6
with:
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ jobs:
distribution: temurin
java-version: 21

- name: Install Pandoc
run: |
sudo apt-get update
sudo apt-get install --yes pandoc

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v6
with:
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
## What is OpenFastTrace IntelliJ Plugin?
The OpenFastTrace IntelliJ Plugin adds editor and navigation support for OpenFastTrace (OFT) artifacts directly in JetBrains IDEs based on the IntelliJ Platform.

![IDE Window With the Plugin](doc/images/intellij-window-with-plugin.png)

It helps users work with OFT specification items and trace links in the same environment where they already edit code and documentation.

![OFT Logo](doc/images/openfasttrace_logo.svg)
Expand Down Expand Up @@ -96,6 +98,8 @@ You need a JetBrains IDE based on the IntelliJ Platform (for example, IntelliJ I

### Development Dependencies
To build and test from source, use the project’s configured Gradle wrapper and a compatible JDK.
To package the plugin with generated Marketplace change notes, install Pandoc
on `PATH` or set `PANDOC` to the executable path.

## Icon Assets

Expand Down Expand Up @@ -126,6 +130,10 @@ committed Gradle lock file:
./gradlew --write-locks dependencies
```

Marketplace-facing descriptor metadata is maintained in
[doc/marketplace](doc/marketplace), with Pandoc generating change-note HTML
from the active Markdown entry under [doc/changes](doc/changes/changelog.md).

Example OFT files for manual testing are available under `examples/` in this project.
For a guided live demonstration, use the script in [doc/demo/plugin-demo.md](doc/demo/plugin-demo.md) with the isolated example project in [doc/demo/example](doc/demo/example).

Expand Down
38 changes: 37 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
import org.gradle.api.tasks.bundling.Zip
import org.gradle.api.tasks.Exec
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
Expand All @@ -24,6 +26,33 @@ plugins {
}

val pluginVersion = providers.gradleProperty("version")
val marketplaceDescription = providers.fileContents(
layout.projectDirectory.file("doc/marketplace/description.html")
).asText
val activeReleaseNotes = layout.projectDirectory.file("doc/changes/changes_${pluginVersion.get()}.md")
val marketplaceChangeNotesFile = layout.buildDirectory.file("generated/marketplace/change-notes-${pluginVersion.get()}.html")
val pandocExecutable = providers.environmentVariable("PANDOC").orElse("pandoc")
// [bld->dsn~marketplace-change-notes-use-pandoc~1]
val renderMarketplaceChangeNotes = tasks.register<Exec>("renderMarketplaceChangeNotes") {
description = "Renders the active Markdown release notes to plugin descriptor HTML with Pandoc."
group = "build"
inputs.file(activeReleaseNotes).withPathSensitivity(PathSensitivity.RELATIVE)
outputs.file(marketplaceChangeNotesFile)
executable = pandocExecutable.get()
args(
"--from=markdown-auto_identifiers",
"--to=html",
"--wrap=none",
"--output=${marketplaceChangeNotesFile.get().asFile.absolutePath}",
activeReleaseNotes.asFile.absolutePath
)
doFirst {
outputs.files.singleFile.parentFile.mkdirs()
}
}
val marketplaceChangeNotes = providers.fileContents(
marketplaceChangeNotesFile
).asText

group = "org.itsallcode.openfasttrace"
version = pluginVersion.get()
Expand Down Expand Up @@ -96,13 +125,16 @@ dependencies {
intellijPlatform {
buildSearchableOptions = false

// [bld->dsn~marketplace-plugin-metadata~1]
pluginConfiguration {
id = "org.itsallcode.openfasttrace-intellij-plugin"
name = "OpenFastTrace"
version = pluginVersion
description = marketplaceDescription
changeNotes = marketplaceChangeNotes

vendor {
name = "Itsallcode.org"
name = "itsallcode.org"
email = "opensource@itsallcode.org"
url = "https://itsallcode.org/"
}
Expand Down Expand Up @@ -143,6 +175,10 @@ tasks {
archiveBaseName.set("OpenFastTrace")
}

named("patchPluginXml") {
dependsOn(renderMarketplaceChangeNotes)
}

withType<DependencyUpdatesTask>().configureEach {
revision = "release"
gradleReleaseChannel = "current"
Expand Down
1 change: 1 addition & 0 deletions doc/changes/changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Changelog

* [0.8.1](changes_0.8.1.md)
* [0.8.0](changes_0.8.0.md)
* [0.7.0](changes_0.7.0.md)
* [0.6.0](changes_0.6.0.md)
Expand Down
15 changes: 15 additions & 0 deletions doc/changes/changes_0.8.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# OpenFastTrace IntelliJ Plugin 0.8.1, released 2026-06-10

Version 0.8.1 improves the metadata shown by JetBrains plugin surfaces. Before installing or updating the plugin, users can now see a clearer overview of what OpenFastTrace support does in the IDE and read the current release notes from the maintained project changelog.

The plugin description now focuses on the everyday OpenFastTrace workflows in JetBrains IDEs: authoring requirements in project files, tracing requirement chains down to implementation and tests, and debugging broken chains from the IDE.

The packaged plugin descriptor also carries the project website, `itsallcode.org` vendor metadata, compatibility baseline, and change notes rendered from the active release notes.

## Bundled OpenFastTrace

OpenFastTrace 4.5.0

## Documentation

* #51: Complete Marketplace-facing plugin metadata
Loading