Skip to content

feat(api-detector-core): add ScanProgressReporter for visible long-scan progress - #56

Merged
Arc-E-Tect merged 1 commit into
mainfrom
feature/scan-progress-console-reporting
Aug 12, 2026
Merged

feat(api-detector-core): add ScanProgressReporter for visible long-scan progress#56
Arc-E-Tect merged 1 commit into
mainfrom
feature/scan-progress-console-reporting

Conversation

@Arc-E-Tect

Copy link
Copy Markdown
Owner

Summary

  • Adds ScanProgressReporter in a new console package (deliberately separate from progress, which is scenario/contract history across builds - an unrelated concern to live console feedback for a single run).
  • Emits periodic LIFECYCLE-level status lines - one plain line per update, never overwriting in place - throttled to at most every 50 items or every 2 seconds, whichever comes first.
  • Deliberately built only on the public org.gradle.api.logging.Logger API, not Gradle's internal rich-console progress indicator, since these plugins are published to the Gradle Plugin Portal for consumers on Gradle versions this codebase doesn't control.
  • Adds an additive collect(File, Consumer<File>) overload to OpenApiEndpointCollector so a caller can drive an indeterminate progress reporter during $ref resolution (the underlying parser resolves internally with no callback of its own) - backed by a lightweight, best-effort textual $ref scan run ahead of the real parse. The existing collect(File) is unchanged.
  • Wiring into the three consuming Gradle plugins (Shadow/Mirage/Doppelganger API Detector) is a separate, follow-up change in SoftwareEngineeringDoneRight-Gradle, gated on this being published first.

Note

This branch was originally created as feature/scan-progress-reporting, which turned out to collide with an existing, unrelated open PR (#55) using that same branch name. That collision was caught and reverted before anything was merged; this is a fresh branch off main with only this PR's own commit.

…an progress

Adds ScanProgressReporter in a new console package (deliberately separate
from the unrelated progress package, which is scenario/contract *history*
across builds, not live console feedback for a single run). Emits periodic
LIFECYCLE-level status lines - one plain line per update, never overwriting
in place - throttled to at most every 50 items or every 2 seconds, whichever
comes first, so a consumer watching a long @RestController scan or OpenAPI
$ref resolution knows the task is still alive.

Deliberately built only on the public org.gradle.api.logging.Logger API,
not Gradle's internal rich-console progress indicator: these plugins are
published to the Gradle Plugin Portal for consumers on Gradle versions this
codebase doesn't control, and the internal API offers no compatibility
guarantee across versions.

Adds an additive collect(File, Consumer<File>) overload to
OpenApiEndpointCollector so a caller can drive an indeterminate progress
reporter during $ref resolution, which the underlying parser performs
internally with no callback of its own - backed by a lightweight, best-effort
textual $ref scan run ahead of the real parse, purely for progress purposes.
The existing collect(File) is unchanged, delegating to the new overload with
a no-op callback.
@Arc-E-Tect
Arc-E-Tect merged commit 9357bc9 into main Aug 12, 2026
4 checks passed
@Arc-E-Tect
Arc-E-Tect deleted the feature/scan-progress-console-reporting branch August 12, 2026 21:23
Arc-E-Tect added a commit that referenced this pull request Aug 12, 2026
# [0.2.0](api-detector-core-v0.1.0...api-detector-core-v0.2.0) (2026-08-12)

### ✨ New and updated features

* **api-detector-core:** add ScanProgressReporter for visible long-scan progress ([#56](#56)) ([9357bc9](9357bc9)), closes [#56](#56)

### 📝 Documentation

* **api-detector-core:** update README version to 0.1.0 [skip ci] ([14c5f16](14c5f16))
@Arc-E-Tect

Copy link
Copy Markdown
Owner Author

🎉 This PR is included in version 0.2.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

@Arc-E-Tect

Copy link
Copy Markdown
Owner Author

🎉 This PR is included in version 1.0.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Arc-E-Tect added a commit that referenced this pull request Aug 17, 2026
# [1.0.0](hexagonal-spring-rules-v0.5.0...hexagonal-spring-rules-v1.0.0) (2026-08-17)

### ✨ New and updated features

* **api-detector-core:** add ContractProgressTableWriter for shared Progress Over Time reporting ([#59](#59)) ([dd4d36a](dd4d36a)), closes [#59](#59)
* add geo-tracker-lens-pack library with independent release pipeline ([#60](#60)) ([1730931](1730931)), closes [#60](#60)
* **api-detector-core:** add PathTemplates.stripBasePath and OpenApiEndpointCollector.firstServerBasePath ([#66](#66)) ([865e711](865e711)), closes [#66](#66)
* **api-detector-core:** add published shared library for the SEDR API detector plugins ([#52](#52)) ([059ee4d](059ee4d)), closes [#52](#52)
* **api-detector-core:** add ScanProgressReporter for visible long-scan progress ([#56](#56)) ([9357bc9](9357bc9)), closes [#56](#56)
* **api-detector-core:** add shared contract-lifecycle progress history framework ([#53](#53)) ([0bb104e](0bb104e)), closes [#53](#53)
* **api-detector-core:** separate real implementation evidence from stub evidence in contract history ([#64](#64)) ([0775933](0775933)), closes [#64](#64)
* **api-detector-core:** write and tolerate a schema-version marker ([#65](#65)) ([e27d53f](e27d53f)), closes [#65](#65)

### 🐛 Bug Fixes

* **ci:** detect first semantic release version in calculate workflow ([#61](#61)) ([3a80fe1](3a80fe1)), closes [#61](#61)
* **workflow:** fix tag checking for project-specific tag formats ([#54](#54)) ([ce8f57e](ce8f57e)), closes [#54](#54)
* **hexagonal-spring-rules:** give module its own semantic-release tag namespace ([#67](#67)) ([613a69a](613a69a)), closes [#67](#67)
* **examples:** remove mavenLocal now that dependencies are released ([#42](#42)) ([9b20913](9b20913)), closes [#42](#42)
* **ci:** stabilize security scan reporting and SEDR scan scope ([#49](#49)) ([f5c7df2](f5c7df2)), closes [#49](#49)
* **CI:** stop the NVD cache refresh from timing out on every cold sync ([#46](#46)) ([cbaebf3](cbaebf3)), closes [#46](#46)
* tag checking for project-specific tag formats in workflow ([#55](#55)) ([9e9255e](9e9255e)), closes [#55](#55)
* **geo-tracker-lens-pack:** use https scm connection for Maven Central metadata ([#63](#63)) ([5bb98c0](5bb98c0)), closes [#63](#63)

### 📝 Documentation

* **api-detector-core:** update README version to 0.1.0 [skip ci] ([14c5f16](14c5f16))
* **api-detector-core:** update README version to 0.2.0 [skip ci] ([2f68414](2f68414))
* **api-detector-core:** update README version to 0.3.0 [skip ci] ([9c63eac](9c63eac))
* **hexagonal-spring-rules:** update README version to 0.5.0 [skip ci] ([5c8b553](5c8b553))
* **sedr-library:** update README version to 0.5.1 [skip ci] ([bb4becf](bb4becf))
* **sedr-library:** update README version to 0.5.2 [skip ci] ([8320bb8](8320bb8))
* **api-detector-core:** update README version to 1.0.0 [skip ci] ([ebb1c5f](ebb1c5f))
* **geo-tracker-lens-pack:** update README version to 1.0.0 [skip ci] ([ab46583](ab46583))
* **geo-tracker-lens-pack:** update README version to 1.0.1 [skip ci] ([1ac70e4](1ac70e4))
* **api-detector-core:** update README version to 1.1.0 [skip ci] ([1680e7b](1680e7b))
* **api-detector-core:** update README version to 1.2.0 [skip ci] ([6656c7f](6656c7f))

### 🔧 Misc

* Change NVD cache refresh schedule to weekly ([#45](#45)) ([83c3552](83c3552)), closes [#45](#45)
* dependency updates for Library projects ([#43](#43)) ([fa70e5e](fa70e5e)), closes [#43](#43)
* dependency updates for Library projects ([#47](#47)) ([398933c](398933c)), closes [#47](#47)
* dependency updates for Library projects ([#48](#48)) ([105111d](105111d)), closes [#48](#48)
* dependency updates for Library projects ([#50](#50)) ([2d5d3ce](2d5d3ce)), closes [#50](#50)
* dependency updates for Library projects ([#58](#58)) ([83dff89](83dff89)), closes [#58](#58)
* Make workflow triggers more specific and add progress reporter ([#57](#57)) ([10c64dc](10c64dc)), closes [#57](#57)
* **ci:** remove redundant Monday NVD cache refresh schedule ([#51](#51)) ([ffd937f](ffd937f)), closes [#51](#51)
* **geo-tracker-lens-pack:** trigger release pipeline after CI fix ([b2440cc](b2440cc))
* **Sedr Library:** update npm packages ([#44](#44)) ([821da37](821da37)), closes [#44](#44)

### BREAKING CHANGE

* **api-detector-core:** contractHistoryFile written by a previous version of this
library (9 fields, no stubbedAt) is no longer readable by
ContractHistoryStore.load() - it now throws
LegacyContractHistoryFormatException instead of loading it under the old,
now-ambiguous implementedAt semantics. Consumers must migrate existing
history files (mirage-api-detector's new migrateContractHistory task) or
start a fresh history file before upgrading.
@Arc-E-Tect

Copy link
Copy Markdown
Owner Author

🎉 This PR is included in version 1.0.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Arc-E-Tect added a commit that referenced this pull request Aug 21, 2026
# [1.0.0](sedr-library-v0.5.2...sedr-library-v1.0.0) (2026-08-21)

### ✨ New and updated features

* **api-detector-core:** add ContractProgressTableWriter for shared Progress Over Time reporting ([#59](#59)) ([dd4d36a](dd4d36a)), closes [#59](#59)
* add geo-tracker-lens-pack library with independent release pipeline ([#60](#60)) ([1730931](1730931)), closes [#60](#60)
* **api-detector-core:** add PathTemplates.stripBasePath and OpenApiEndpointCollector.firstServerBasePath ([#66](#66)) ([865e711](865e711)), closes [#66](#66)
* **api-detector-core:** add published shared library for the SEDR API detector plugins ([#52](#52)) ([059ee4d](059ee4d)), closes [#52](#52)
* **api-detector-core:** add ScanProgressReporter for visible long-scan progress ([#56](#56)) ([9357bc9](9357bc9)), closes [#56](#56)
* **api-detector-core:** add shared contract-lifecycle progress history framework ([#53](#53)) ([0bb104e](0bb104e)), closes [#53](#53)
* **api-detector-core:** separate real implementation evidence from stub evidence in contract history ([#64](#64)) ([0775933](0775933)), closes [#64](#64)
* **api-detector-core:** write and tolerate a schema-version marker ([#65](#65)) ([e27d53f](e27d53f)), closes [#65](#65)

### 🐛 Bug Fixes

* **hexagonal-spring-rules:** align dependency-check config with sibling projects ([#71](#71)) ([769f76a](769f76a)), closes [#71](#71)
* **ci:** detect first semantic release version in calculate workflow ([#61](#61)) ([3a80fe1](3a80fe1)), closes [#61](#61)
* **workflow:** fix tag checking for project-specific tag formats ([#54](#54)) ([ce8f57e](ce8f57e)), closes [#54](#54)
* **hexagonal-spring-rules:** give module its own semantic-release tag namespace ([#67](#67)) ([613a69a](613a69a)), closes [#67](#67)
* **sedr-library:** give module its own semantic-release tag namespace ([#68](#68)) ([ff2eb0d](ff2eb0d)), closes [#68](#68) [#67](#67)
* tag checking for project-specific tag formats in workflow ([#55](#55)) ([9e9255e](9e9255e)), closes [#55](#55)
* **api-detector-core:** update swagger-parser dependency and document OpenAPI v3 support ([#70](#70)) ([352b03e](352b03e)), closes [#70](#70)
* **geo-tracker-lens-pack:** use https scm connection for Maven Central metadata ([#63](#63)) ([5bb98c0](5bb98c0)), closes [#63](#63)

### 📝 Documentation

* **api-detector-core:** update README version to 0.1.0 [skip ci] ([14c5f16](14c5f16))
* **api-detector-core:** update README version to 0.2.0 [skip ci] ([2f68414](2f68414))
* **api-detector-core:** update README version to 0.3.0 [skip ci] ([9c63eac](9c63eac))
* **sedr-library:** update README version to 0.5.2 [skip ci] ([8320bb8](8320bb8))
* **api-detector-core:** update README version to 1.0.0 [skip ci] ([ebb1c5f](ebb1c5f))
* **geo-tracker-lens-pack:** update README version to 1.0.0 [skip ci] ([ab46583](ab46583))
* **hexagonal-spring-rules:** update README version to 1.0.0 [skip ci] ([140934e](140934e))
* **geo-tracker-lens-pack:** update README version to 1.0.1 [skip ci] ([1ac70e4](1ac70e4))
* **hexagonal-spring-rules:** update README version to 1.0.1 [skip ci] ([0c115a7](0c115a7))
* **api-detector-core:** update README version to 1.1.0 [skip ci] ([1680e7b](1680e7b))
* **api-detector-core:** update README version to 1.2.0 [skip ci] ([6656c7f](6656c7f))
* **api-detector-core:** update README version to 1.2.1 [skip ci] ([b4230b2](b4230b2))

### 🔧 Misc

* dependency updates for Library projects ([#58](#58)) ([83dff89](83dff89)), closes [#58](#58)
* dependency updates for Library projects ([#69](#69)) ([d46b898](d46b898)), closes [#69](#69)
* dependency updates for Library projects ([#72](#72)) ([2f7c387](2f7c387)), closes [#72](#72)
* Make workflow triggers more specific and add progress reporter ([#57](#57)) ([10c64dc](10c64dc)), closes [#57](#57)
* **ci:** remove redundant Monday NVD cache refresh schedule ([#51](#51)) ([ffd937f](ffd937f)), closes [#51](#51)
* **geo-tracker-lens-pack:** trigger release pipeline after CI fix ([b2440cc](b2440cc))

### BREAKING CHANGE

* **api-detector-core:** contractHistoryFile written by a previous version of this
library (9 fields, no stubbedAt) is no longer readable by
ContractHistoryStore.load() - it now throws
LegacyContractHistoryFormatException instead of loading it under the old,
now-ambiguous implementedAt semantics. Consumers must migrate existing
history files (mirage-api-detector's new migrateContractHistory task) or
start a fresh history file before upgrading.
@Arc-E-Tect

Copy link
Copy Markdown
Owner Author

🎉 This PR is included in version 1.0.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant