Skip to content

Add neutral FeatureFramework lifecycle observation SPI - #7

Merged
remdui merged 36 commits into
mainfrom
observation-spi-1.7.0
Aug 25, 2026
Merged

Add neutral FeatureFramework lifecycle observation SPI#7
remdui merged 36 commits into
mainfrom
observation-spi-1.7.0

Conversation

@remdui

@remdui remdui commented Aug 25, 2026

Copy link
Copy Markdown
Member

Summary

Implements the FeatureFramework 1.7.0 neutral lifecycle observation foundation without coupling FeatureFramework to OpenTelemetry or HauntedObservability.

What changed

  • added the dependency-free FeatureFrameworkObserver / observation / scope API
  • added a bounded operation context containing only operation kind and optional framework-owned FeatureId
  • observes public host lifecycle operations at the serialized host boundary
  • observes FEATURE_LOAD at the actual shared startup path, including startup/reload/reset-driven loads
  • preserves parent/child observation scope nesting without inventing duplicate high-level operations during internal graph reconciliation
  • added construction-time observer injection to Paper and Velocity hosts with a reusable no-op default
  • preserves the existing FeatureHostComposition constructor for source/binary compatibility
  • keeps observer callback failures fail-open for RuntimeException; Java Errors remain fatal and are not swallowed
  • provides a true default no-op fast path and skips terminal classification when a custom observer filters an operation by returning noop()
  • enforces the privacy/cardinality boundary and bans OpenTelemetry/HauntedObservability implementation coupling from API/core sources
  • aligns the build with HauntedPlatform 1.3.0, DataProvider 3.3.0, and DataRegistry 1.15.0
  • documents the FeatureFramework -> DataRegistry -> DataProvider observation layering and the 1.7 observability release order

Operation vocabulary

HOST_START, HOST_STOP, FEATURE_LOAD, FEATURE_ENABLE, FEATURE_DISABLE, FEATURE_RECREATE, FEATURE_SOFT_RELOAD, GRAPH_RELOAD, FILE_RESET.

previewFileReset(...) intentionally remains unobserved.

Validation

Exact reviewed head: df4ed64b8b89d427f2b24a38643490fbcd017f20

  • CI Lint #130: passed
    • ShellCheck: passed
    • shared HauntedPlatform Maven policy / verify: passed
  • CI Tests and Coverage #131: passed
    • full Maven verify: passed
    • external BOM consumption: passed
    • Paper and Velocity platform acceptance: passed
  • DataProvider v3.3.0 and DataRegistry v1.15.0 release tags were verified and the reactor resolves against their published artifacts
  • current ServerFeatures and ProxyFeatures host-builder call sites remain source-compatible; application observer wiring is intentionally deferred until HauntedObservability exists
  • no open review threads or submitted reviews remain

Release boundary

The reactor intentionally remains at 1.6.0 in this implementation PR. After this PR is reviewed and merged, create the guarded 1.7 release from clean main with:

./update_version.sh minor

That script updates the reactor to 1.7.0, runs the full platform-acceptance gate, creates the local release commit, and creates annotated tag v1.7.0. Push the release commit and tag only after that gate succeeds. FeatureFramework 1.7.0 must be published before HauntedObservability 1.0.0.

remdui added 30 commits August 25, 2026 13:13
@remdui
remdui marked this pull request as ready for review August 25, 2026 12:41
@remdui
remdui merged commit 0e77524 into main Aug 25, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant