Skip to content

build(deps): bump the build-plugins group with 19 updates - #6

Closed
dependabot[bot] wants to merge 19 commits into
devfrom
dependabot/maven/build-plugins-500abb2228
Closed

dependabot[bot] wants to merge 19 commits into
devfrom
dependabot/maven/build-plugins-500abb2228

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Nov 11, 2026 •

Copy link
Copy Markdown

Bumps the build-plugins group with 19 updates:

Package From To
org.apache.maven.plugins:maven-clean-plugin 3.4.0 3.5.0
org.apache.maven.plugins:maven-resources-plugin 3.3.1 3.5.0
org.apache.maven.plugins:maven-jar-plugin 3.4.2 3.5.1
org.apache.maven.plugins:maven-install-plugin 3.1.3 3.2.0
org.apache.maven.plugins:maven-deploy-plugin 3.1.3 3.2.0
org.apache.maven.plugins:maven-site-plugin 3.21.0 3.22.0
org.apache.maven.plugins:maven-wrapper-plugin 3.3.2 3.3.4
org.apache.maven.plugins:maven-surefire-plugin 3.5.2 3.6.1
org.apache.maven.plugins:maven-compiler-plugin 3.13.0 3.16.0
com.diffplug.spotless:spotless-maven-plugin 2.44.2 3.11.0
com.github.spotbugs:spotbugs-maven-plugin 4.8.6.6 4.10.5.0
org.codehaus.mojo:license-maven-plugin 2.4.0 2.8.0
org.jacoco:jacoco-maven-plugin 0.8.12 0.8.16
org.apache.maven.plugins:maven-enforcer-plugin 3.5.0 3.7.0
com.github.siom79.japicmp:japicmp-maven-plugin 0.23.1 0.27.0
org.apache.maven:maven-plugin-api 3.9.9 3.10.0
org.apache.maven.plugin-tools:maven-plugin-annotations 3.15.1 3.16.0
org.apache.maven.plugins:maven-plugin-plugin 3.15.1 3.16.0
org.apache.maven.plugins:maven-invoker-plugin 3.9.0 3.10.1

Updates org.apache.maven.plugins:maven-clean-plugin from 3.4.0 to 3.5.0

Release notes

Sourced from org.apache.maven.plugins:maven-clean-plugin's releases.

3.5.0

🚀 New features and improvements

👻 Maintenance

📦 Dependency updates

3.4.1

🚀 New features and improvements

📦 Dependency updates

👻 Maintenance

Commits
  • d18c596 [maven-release-plugin] prepare release maven-clean-plugin-3.5.0
  • 5117885 Bump project to 3.5.0-SNAPSHOT version
  • 7350dbe Configuration parameter for deleting read-only files
  • bdf8c5d Bump org.apache.maven.resolver:maven-resolver-api from 1.9.22 to 1.9.23 (#251)
  • d720e18 Update README in 3.x branch
  • 6c0745c Bump org.codehaus.plexus:plexus-testing from 1.4.0 to 1.5.0
  • 5dedab5 fix
  • c22ab2d Bump org.apache.maven.plugins:maven-plugins from 43 to 44
  • 68f2009 [maven-release-plugin] prepare for next development iteration
  • 8211bc5 [maven-release-plugin] prepare release maven-clean-plugin-3.4.1
  • Additional commits viewable in compare view

Updates org.apache.maven.plugins:maven-resources-plugin from 3.3.1 to 3.5.0

Release notes

Sourced from org.apache.maven.plugins:maven-resources-plugin's releases.

3.5.0

🚀 New features and improvements

👻 Maintenance

📦 Dependency updates

3.4.0

🚀 New features and improvements

📝 Documentation updates

👻 Maintenance

📦 Dependency updates

... (truncated)

Commits
  • ce485a0 [maven-release-plugin] prepare release maven-resources-plugin-3.5.0
  • bfadfff Use maven-filtering 3.5.0 (staged)
  • 3f74ba2 Drop commons-io; unused
  • caefcde Bug: use change detecton strategies (#462)
  • 38534e3 Cleanup deps (#463)
  • 0814ec7 Bump org.apache.maven.plugin-testing:maven-plugin-testing-harness (#461)
  • e2f9135 Bump org.apache.maven.plugins:maven-plugins from 45 to 47 (#459)
  • a050be3 Bump org.apache.maven.plugin-testing:maven-plugin-testing-harness (#457)
  • 1825b2a Bump mavenVersion from 3.9.11 to 3.9.12 (#452)
  • ad31b55 Add IT for #444 issue
  • Additional commits viewable in compare view

Updates org.apache.maven.plugins:maven-jar-plugin from 3.4.2 to 3.5.1

Release notes

Sourced from org.apache.maven.plugins:maven-jar-plugin's releases.

3.5.1

📝 Documentation updates

  • Add AGENTS.md + SECURITY.md security-model pointer for scanner discoverability (#550) @​potiuk

👻 Maintenance

  • Add AGENTS.md + SECURITY.md security-model pointer for scanner discoverability (#550) @​potiuk
  • Use plugin version properties (3.x) (#535) @​Bukama

📦 Dependency updates

3.5.0

🚀 New features and improvements

🐛 Bug Fixes

👻 Maintenance

... (truncated)

Commits
  • b0cd63d [maven-release-plugin] prepare release maven-jar-plugin-3.5.1
  • 5318a4f Add AGENTS.md + SECURITY.md security-model pointer for scanner discoverability
  • 8e0b9bb Bump org.apache.maven.plugins:maven-plugins from 48 to 49 (#547)
  • d5a438b Fix javadoc
  • 774fac9 Bump org.codehaus.plexus:plexus-archiver from 4.11.0 to 4.12.0
  • b71f403 Bump mavenVersion from 3.9.15 to 3.9.16 (#536)
  • 9f2a001 Use plugin version properties (3.x) (#535)
  • 68a978f Bump org.apache.maven.plugins:maven-plugins from 47 to 48 (#534)
  • e105821 Bump commons-io:commons-io from 2.21.0 to 2.22.0 (#529)
  • 953dc1a Bump mavenVersion from 3.9.14 to 3.9.15 (#528)
  • Additional commits viewable in compare view

Updates org.apache.maven.plugins:maven-install-plugin from 3.1.3 to 3.2.0

Release notes

Sourced from org.apache.maven.plugins:maven-install-plugin's releases.

3.2.0

🚀 New features and improvements

🐛 Bug Fixes

  • chore: harden embedded-POM trust boundary in install:install-file (3.x backport) (#447) @​gnodet

📝 Documentation updates

  • Restore the common wording on the download page (#438) @​slachiewicz
  • Add AGENTS.md + SECURITY.md security-model pointer for scanner discoverability (#416) @​potiuk

👻 Maintenance

📦 Dependency updates

... (truncated)

Commits
  • bcf484d [maven-release-plugin] prepare release maven-install-plugin-3.2.0
  • 5703691 chore: harden embedded-POM trust boundary in install:install-file (3.x backpo...
  • 9148a8f Cache projectsUsingPlugin to fix O(N²) reactor scan
  • 7465779 Fix workflow_dispatch indentation in release-drafter configuration
  • 7d4334d Use JSR-330 for component injection
  • bbcb1e7 Restore the common wording on the download page
  • 11f7073 Restore the document metadata dropped when the pages were ported
  • 9b34ac2 Port the site documentation from APT to Markdown
  • 510f48f Rename the site documents ahead of converting them
  • 26e0afc Bump apache/maven-gh-actions-shared/.github/workflows/pr-automation.yml
  • Additional commits viewable in compare view

Updates org.apache.maven.plugins:maven-deploy-plugin from 3.1.3 to 3.2.0

Release notes

Sourced from org.apache.maven.plugins:maven-deploy-plugin's releases.

3.2.0

🚀 New features and improvements

🐛 Bug Fixes

  • Backport security audit fixes to 3.x (f004-f008, f010, f012) (#701) @​gnodet

📝 Documentation updates

👻 Maintenance

🔧 Build

📦 Dependency updates

... (truncated)

Commits
  • 7aab9fb [maven-release-plugin] prepare release maven-deploy-plugin-3.2.0
  • 1f3eef5 Backport security audit fixes to 3.x (f004-f008, f010, f012)
  • 307f328 Simplify remote repository creation
  • 7b1bbc4 Cache projectsWithDeployExecution to fix O(N²) reactor scan
  • a9177c6 Clarify deploy without editing this projects POM
  • 7c40513 Restore the plain form of the ASF licence header
  • 5969234 Update Release Drafter configuration to use custom tag template and remove un...
  • df7b3fa Bump apache/maven-gh-actions-shared/.github/workflows/release-drafter.yml
  • b4e8aed work around Maven 4 CLI lack of interpolation
  • d634bb4 enable build with Maven 4
  • Additional commits viewable in compare view

Updates org.apache.maven.plugins:maven-site-plugin from 3.21.0 to 3.22.0

Release notes

Sourced from org.apache.maven.plugins:maven-site-plugin's releases.

3.22.0

🚀 New features and improvements

📝 Documentation updates

👻 Maintenance

📦 Dependency updates

What's Changed

... (truncated)

Commits
  • f9f7cc6 [maven-release-plugin] prepare release maven-site-plugin-3.22.0
  • f7b57ea Bump org.codehaus.plexus:plexus-interactivity-api from 1.3 to 1.5.1
  • 282aa04 Several site improvements (#1272)
  • 55ebd9f Upgrade to Doxia 2.1.0
  • 93ecbb6 Improve goal description
  • 106d259 Improve error messages
  • a7511e9 Fix additional PR comments
  • c3c1c0f Rename from "hot-reload" to "auto-refresh"
  • 5fb1504 Add blocking "hot-reload" goal
  • 2d9a489 Bump org.apache.maven.plugins:maven-plugins from 47 to 48 (#1271)
  • Additional commits viewable in compare view

Updates org.apache.maven.plugins:maven-wrapper-plugin from 3.3.2 to 3.3.4

Release notes

Sourced from org.apache.maven.plugins:maven-wrapper-plugin's releases.

3.3.4

🐛 Bug Fixes

👻 Maintenance

  • Ensure Path Traversal is fully addressed in MavenWrapperDownloader (#363) @​hazendaz

3.3.3

💥 Breaking changes

🚀 New features and improvements

  • Fix Maven wrapper support for snapshot distributions (#335) @​gnodet

🐛 Bug Fixes

📝 Documentation updates

👻 Maintenance

qianmoQ and others added 19 commits November 10, 2026 20:44
Set up the root POM and the build-wide quality gates every later module inherits:

- root POM for org.devlive.pipeforge on JDK 21 with dependencyManagement
- Maven Wrapper (Maven 3.9.9, script-only) and .java-version
- Maven Enforcer: JDK 21, dependency convergence, no SNAPSHOT deps on release
- Spotless with palantir-java-format and the MIT license header
- Error Prone and SpotBugs, JaCoCo line coverage gate (80% by default)
- license-maven-plugin with a permissive license whitelist
- tools/license-header/check.sh for headers in non-Java files
- quick profile that skips the gates for local loops
- .editorconfig, .gitignore, LICENSE (MIT), README skeletons in English and Chinese

Verified with JDK 21.0.10 and Maven 3.9.9.

Tests: tools/build-checks/selftest.sh builds a clean fixture and confirms that bad
formatting, a missing license header, an Error Prone error, a SpotBugs bug, diverging
dependency versions and a GPL dependency each fail the build; it also covers the
license header script (detect, fix, preamble, year, foreign header).

Docs-Not-Needed: the documentation site does not exist yet
Signed-off-by: qianmoQ <shicheng@devlive.org>
Run only what a change can affect, with a single required status check:

- .ci/changed-components.sh with .ci/components.conf decides which jobs run
  (java, build-checks); Markdown-only changes run no build job, CI wiring runs all
- .ci/maven-modules.sh maps changed files to reactor modules so the java job runs
  "mvnw verify -pl <modules> -am -amd"; root build inputs select the full reactor
- lint job: license headers, shellcheck and the CI script tests on every change
- dco job checks Signed-off-by on every pull request commit (.ci/check-dco.sh)
- security workflow: CodeQL for Java and Actions, dependency review on pull requests
  (high severity vulnerabilities and GPL-family licenses are rejected)
- Dependabot for Maven and GitHub Actions
- ci-ok aggregates every job and is meant to be the only required check

Tests: .ci/tests/run.sh, 25 cases covering module impact analysis (nested modules,
aggregator POMs, root build inputs, fixtures outside the reactor, deleted files,
prefix collisions), the component rules and the DCO check. actionlint 1.7.7 and
shellcheck pass on the workflows and scripts.

Docs-Not-Needed: CI configuration only, no user-visible behavior
Signed-off-by: qianmoQ <shicheng@devlive.org>
Add the files an open source contributor expects, plus automation around them:

- CONTRIBUTING in English and Chinese, CODE_OF_CONDUCT (Contributor Covenant 2.1),
  SECURITY (private vulnerability reporting), GOVERNANCE, MAINTAINERS
- issue forms for bugs, feature proposals, plugin requests and documentation;
  questions are redirected to Discussions
- pull request template with the mandatory checklist, CODEOWNERS
- label definitions, path-based area labels, label sync, first-contribution welcome
  and stale reminders
- initial docs-map.yaml for the documentation coverage check
- README links to the new files

Tests: .ci/check-community-files.sh validates the files (required files, guide
structure, issue form fields and labels, label colors, labeler labels, CODEOWNERS
owners against MAINTAINERS, PR checklist, docs-map entries) and runs in the lint
job; .ci/tests/run.sh adds 13 cases for it (39 in total, all passing). actionlint
passes on the new workflows.

Docs-Not-Needed: these files are documentation themselves
Signed-off-by: qianmoQ <shicheng@devlive.org>
Provide every service the examples and integration tests need with one command:

- dev/docker-compose.yaml: MySQL 8.4 (ROW binlog, GTID), PostgreSQL 16
  (wal_level=logical, replication role), Toxiproxy with MySQL and PostgreSQL proxies,
  Prometheus and Grafana with a provisioned data source; sample data on first start
- MinIO with its buckets behind the optional s3 profile; the image is configurable
  through PIPEFORGE_MINIO_IMAGE because MinIO no longer publishes community images
  on Docker Hub
- dev/up.sh (waits for health), dev/down.sh, dev/check.sh for functional checks
- host ports default to the 33000-45000 range and can be changed in dev/.env
- dev-env CI job starts the environment with MinIO, runs dev/check.sh and tears it down

Verified with Docker 29.8 and Compose 5.5: mysql 8.4, postgres 16, toxiproxy 2.12.0,
prometheus v2.55.1, grafana 11.4.0.

Tests: dev/check.sh passes locally (binlog, ROW format, GTID, sample data, logical WAL,
replication role, proxies, MySQL through the proxy, Prometheus ready, Grafana data
source). The s3 profile was not started locally; the dev-env CI job covers it.

Docs: development/local-environment in en-US and zh-CN, registered in docs-map.yaml.
Signed-off-by: qianmoQ <shicheng@devlive.org>
Add @pipeforge/design-tokens, the single source of colors, radii, shadows, sizes and
motion for the web UI and the documentation site:

- tokens.css: light theme on :root, dark theme on .dark, reduced motion sets every
  duration to 0ms
- theme.css: Tailwind CSS v4 @theme inline mapping to semantic utilities (bg-surface,
  text-fg-muted, rounded-control, shadow-popover, h-control-md, duration-fast, ...),
  the dark custom variant, and the fade-in, fade-up, scale-in, flow and pulse-soft
  animations
- index.js: the first-frame theme script and the text contrast pairs
- root pnpm workspace (Node 22, pnpm 10), web CI job and Dependabot for npm

Verified with Node 22.22, pnpm 10.33 and Tailwind CSS 4.3.5.

Tests: node:test, 13 cases. Both themes define the same tokens with non-empty values,
the documented groups are complete, sizes and durations match the specification,
every text pair reaches 4.5:1 contrast in both themes, theme.css maps every token,
the utilities compile with Tailwind to the token variables, and the theme script
applies stored and system preferences.

Docs-Not-Needed: the tokens are shown on the documentation site in the next commit
Signed-off-by: qianmoQ <shicheng@devlive.org>
Add the documentation site under docs/: Next.js App Router with static export for GitHub
Pages, styled only with the shared design tokens.

- routes /<lang>/ (home), /<lang>/<version>/<page>/ and a root page that picks the
  language from the browser; first-frame theme script, hreflang, sitemap and robots
- MDX pipeline with GFM, heading anchors and Shiki highlighting through the
  css-variables theme mapped onto the syntax tokens
- components: Callout, CodeBlock (title, line highlights, line numbers, copy button
  with check-mark bounce), Tabs (sliding underline, keyboard navigation), Steps
- layout: collapsible navigation with a sliding indicator, scroll-spy table of
  contents, theme toggle with a circular view transition, language switch, search
  (FlexSearch over a build-time index with Han tokenization, Ctrl/Cmd K, arrow keys)
- home page: Source -> Transform -> Sink DAG with particles flowing along offset-path
  and lineage highlighting on hover; feature cards that fade up when scrolled into view
- build checks: structure (frontmatter, feature and plugin templates, empty sections,
  TODO), en-US and zh-CN consistency, links and anchors, UI rule scan
- docs.yml: changes gate, checks, lint, tests, build, Lighthouse, Pages deploy from
  main, preview artifact on pull requests, docs-ok aggregate check
- pages: getting-started/overview, development/contributing, development/docs-guide;
  the local environment page now declares the feature template

Verified with Node 22.22, pnpm 10.33, Next.js 15.5.29, React 19.2.9, Tailwind CSS
4.3.5, Shiki 3.23 and Lighthouse CI 0.15.1.

Tests: Vitest with Testing Library, 59 cases. Tabs, copy button, callout, steps,
sidebar, search dialog, theme toggle and the home DAG interactions; unit tests for
the content model, every build check, the UI scan, the search index and the MDX
plugins. pnpm check, ESLint, Prettier and tsc pass. Lighthouse on the home pages and a
doc page, also under the /pipeforge base path: performance 100, accessibility 98-100,
best practices 96, SEO 100, LCP below 0.6 s.

Docs: development/docs-guide and getting-started/overview in en-US and zh-CN; the site
code and design tokens are registered in docs-map.yaml.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Enforce "documentation in the same commit" from docs-map.yaml:

- docs/scripts/check-docs-coverage.sh <base> <head> checks every feat, perf and
  breaking commit (type!: or BREAKING CHANGE:) of the range; when it changes a mapped
  code path, every mapped page must change in en-US and zh-CN as well
- "Docs-Not-Needed: <reason>" exempts a commit; an empty reason is rejected
- every pipeforge-* module and Maven leaf module must be registered in docs-map.yaml,
  and every page listed there must exist in both languages
- coverage job in docs.yml on pull requests, part of docs-ok

Tests: Vitest, 15 new cases (74 in total) against temporary git repositories: glob
matching, commit classification, required pages, complete and incomplete feature and
perf commits, missing language, exemptions, breaking changes of any type, module
registration, missing pages and the shell entry point with its exit codes. The check
passes on this repository's history.

Docs: development/docs-guide gains the documentation coverage section in en-US and
zh-CN.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Add pipeforge-common with the error model every user-visible error goes through:

- ErrorCode (PF-<CATEGORY>-[<PLUGIN>-]<NNNN>), ErrorCategory with default kinds,
  ErrorKind (TRANSIENT / DATA / FATAL), ErrorScope (job, run, node, subtask, table,
  split)
- PipeForgeException with a builder; parameters must match the code's declared
  parameters, the exception message is the English text, and toErrorInfo() renders
  the structured object {code, params, scope, kind, message, hint, causeChain} in
  any supported language
- ErrorRegistry: core codes in errors/<category>.yaml, plugin codes in
  META-INF/pipeforge/errors.yaml; loading validates format, category per file,
  unique codes and names, kinds, en-US and zh-CN message and hint, and identical
  parameters across languages
- first codes: PF-CONF-0001..0005, PF-PLAN-0001..0008, PF-PLUG-0001..0003,
  PF-SYS-0001
- documentation site: generate step exports the registry to generated/errors.json,
  ErrorList renders it with search and category filters, link check knows the
  generated anchors

Verified with JDK 21.0.10 and Maven 3.9.9.

Tests: 29 JUnit cases (registry validation positive and negative, every ErrorCode
constant registered with matching name and parameters and vice versa, plugin
registries from the class path, localized rendering, parameter checks, kind
override, cause chains, wrapping); line coverage above 80%, SpotBugs, Error Prone
and the license whitelist pass. Docs site: 4 new Vitest cases (78 in total).

Docs: concepts/errors (feature template) and reference/errors (generated from the
registry) in en-US and zh-CN; pipeforge-common registered in docs-map.yaml.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Add pipeforge-api, the engine-independent API every plugin implements. It depends only
on pipeforge-common (error codes) and JSpecify.

- data model: Row, GenericRow, RowKind, TableId; logical types with DataType,
  DataTypes (factories and a parser that accepts SQL aliases and prints a canonical
  form) and TypeRoot; Column, CatalogTable and the sealed SchemaChangeEvent family
- source: Source, SplitEnumerator, SourceReader (pull mode), ReaderOutput with
  per-split output, PollStatus, Boundedness and the contexts
- transform: Transform, Collector, TransformContext; sink: Sink, SinkWriter,
  SinkCommitter, GlobalCommitter; Catalog
- options: Option and Options builder, OptionRule (required, optional, exclusive,
  conditional, native namespaces, unknown keys with suggestions), ReadonlyConfig
  with type conversion, and OptionViolation mapped to PF-CONF-0001 / PF-CONF-0002
- factories with ServiceLoader discovery, VersionedSerializer, optional capability
  interfaces and the Predicate tree for filter push-down
- @stable / @evolving / @internal on every public type; japicmp compares against
  the last released API (skipped until the first release)

Verified with JDK 21.0.10 and Maven 3.9.9.

Tests: 84 JUnit cases, 92% line coverage. OptionRule validation (required, range,
exclusive, conditional, deprecated keys, unknown keys, sensitive masking), option
conversion, logical type parsing, aliases, round trips, equality and error positions,
GenericRow, TableId, CatalogTable consistency, and a scan asserting that every public
type declares its stability. SpotBugs and Error Prone pass.

Docs: development/api-overview and concepts/data-model in en-US and zh-CN;
pipeforge-api registered in docs-map.yaml.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Add pipeforge-maven-plugin (goal prefix "pipeforge") with the first three goals:

- package: builds <artifactId>-<version>.zip with plugin.yaml, lib/ (plugin jar and
  shipped dependencies), docs/, native-options/ and icon.svg; entries are sorted with
  a fixed timestamp; the zip is attached to the build
- validate: plugin.yaml is well formed and matches the project version and the
  pipeforge-api major version; pipeforge-api and pipeforge-common are provided, no
  other PipeForge module is a dependency, no jar carries PipeForge classes, no class
  exists twice; every component loads, implements its factory interface, has a public
  no-argument constructor and reports the declared identifier
- docs: exports descriptor, options (type, default, requirement, range, values,
  group, since; sensitive defaults omitted), exclusive groups, conditions, native
  namespaces and capabilities (from the factory's return type) to
  docs/generated/plugins/<id>.json

The plugin.yaml model (PluginDescriptor, PluginType) lives in pipeforge-common so that
the plugin loader can share it.

Verified with JDK 21.0.10 and Maven 3.9.9.

Tests: 12 JUnit cases in the plugin (inspector, docs model, dependency isolation with
duplicate and shaded classes, reproducible archives), 5 descriptor cases in
pipeforge-common, and 4 maven-invoker integration projects: a valid plugin that is
packaged, validated and exported, and an invalid descriptor, an unisolated
dependency and a wrong identifier that each fail the build with the expected message.

Docs: development/plugin-packaging in en-US and zh-CN; docs-map.yaml maps the
maven plugin and the descriptor model to it.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Add pipeforge-plugin, which finds installed plugins, isolates them and guards every call
into plugin code:

- PluginRepository scans plugin directories for extracted plugins and zip packages;
  zips are extracted into a cache keyed by their content hash, zip-slip entries are
  rejected, broken entries are reported with the reason
- PluginClassLoader is child-first with a parent-first list (JDK, connector API,
  error codes, SLF4J, JSpecify) so engine and plugins share the API types
- PluginManager keeps several versions of a plugin, resolves components by type,
  identifier and an optional id@version (highest semantic version otherwise,
  PF-PLUG-0008 when several plugins provide the identifier), marks plugins built for
  another API major version as unavailable, and shares one class loader per plugin
  version through ref-counted PluginLeases that close it when the last one ends
- ForbiddenCalls reads class file constant pools and refuses plugins that call
  System.exit, Runtime.halt, system properties, default time zone or locale,
  security providers, the standard streams or JVM-wide handlers (PF-PLUG-0005);
  trusted packages can be allowed
- PluginInvoker sets the context class loader, wraps failures with plugin and
  operation (PF-PLUG-0007) and interrupts control calls on timeout (PF-PLUG-0006)
- ApiVersion in pipeforge-api reports the API version from the build
- new error codes PF-PLUG-0004..0008

Verified with JDK 21.0.10 and Maven 3.9.9.

Tests: 16 JUnit cases, 87% line coverage, with plugins compiled at test time: two
plugins bundling two versions of the same library return their own versions; the
class loader of a released plugin is garbage collected; versions are resolved and
pinned; ambiguous identifiers and other API versions are reported; a plugin calling
System.exit is refused unless trusted; invoker timeouts interrupt the call; zipped
plugins are extracted once.

Docs: concepts/plugins in en-US and zh-CN; development/api-overview mentions
ApiVersion; docs-map.yaml registers pipeforge-plugin and narrows the API and error
mappings to the pages that describe them.

Signed-off-by: qianmoQ <shicheng@devlive.org>
The error reference added ErrorList and the data frontmatter field without describing
them in the docs guide; the documentation coverage check over the whole history
pointed this out. Both are now listed in en-US and zh-CN.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Add pipeforge-expressions, the expression language shared by filters, routers, field
mappings and SQL jobs: SQL scalar expressions, typed before the job runs and compiled
to bytecode.

- parsing with Calcite's SQL parser (backtick quoting, case-insensitive names, lenient
  conformance for != and %); TIMESTAMP_LTZ '...' literals are rewritten before
  parsing and positions are mapped back
- analysis into a typed tree: columns, ROW fields, array and map elements,
  pseudo-columns ($table, $db, $schema, $rowkind), literals of every type, arithmetic,
  comparisons, IS [NOT] DISTINCT FROM, AND/OR/NOT, IS predicates, BETWEEN, IN, LIKE
  with ESCAPE, RLIKE (RE2/J), CASE, IF, COALESCE, IFNULL, NULLIF, CAST and TRY_CAST,
  ARRAY and MAP constructors, registered functions with overloads and varargs
- type rules: lossless implicit conversions only, integer division as DECIMAL, SQL
  decimal precision rules capped at 38 digits; every problem is PF-PLAN-0007 with
  line and column, including "did you mean" suggestions for columns
- three-valued logic, overflow and division-by-zero checks, casts that use the job
  time zone for TIMESTAMP_LTZ
- Janino code generation: one class per operator, one method per node, lazy
  short-circuit operators, deterministic subexpressions shared within and across
  expressions and computed at most once per row; classes with the same structure
  are reused
- an interpreter with the same semantics (all operators live in one runtime class)
- on-error dirty / null / fail with PF-DATA-0006 (kind DATA or FATAL)
- function registry API with determinism and NULL handling; the built-in library
  follows in the next commit
- "Go License" (RE2/J's BSD 3-Clause text) is mapped to BSD-3-Clause in the license
  whitelist

Verified with JDK 21.0.10, Calcite 1.40.0, Janino 3.1.12 and RE2/J 1.8.

Tests: 128 JUnit cases, 92% line coverage. A property test compiles random
well-typed expressions in batches of 12 and compares 12000 compiled and interpreted
evaluations per seed (values and error reasons; six seeds checked); type inference
for 58 expressions; 29 error messages with positions; three-valued logic truth
tables; arithmetic, decimal, cast, time zone, LIKE/RLIKE, nested access and laziness
semantics; subexpression sharing counted through instrumented functions; on-error.

Docs: concepts/expressions and reference/expression-syntax in en-US and zh-CN;
pipeforge-expressions registered in docs-map.yaml.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Add the first batch of built-in scalar functions and the registry and
catalog behind them.

- Comparison and conditional: COALESCE, IFNULL, NULLIF, IF, GREATEST,
  LEAST, TYPEOF, IS_NUMERIC, IS_DATE.
- Numeric: ABS, SIGN, CEIL, FLOOR, ROUND, TRUNCATE, DIV, MOD, POWER,
  SQRT, EXP, LN, LOG, LOG10, RAND, BIN, HEX, CONV. Overflow and invalid
  arguments are errors, never wrapped values.
- String: LENGTH, LOWER, UPPER, INITCAP, TRIM/LTRIM/RTRIM, LPAD/RPAD,
  SUBSTRING, LEFT, RIGHT, POSITION, INSTR, REPLACE, TRANSLATE, REVERSE,
  REPEAT, CONCAT, CONCAT_WS, SPLIT_PART, SPLIT, REGEXP_* (RE2), ASCII,
  CHR, FORMAT. Positions count code points.
- Date and time in the job time zone: CURRENT_DATE, NOW,
  RUN_START_TIME, DATE_FORMAT, TO_DATE, TO_TIMESTAMP(_LTZ),
  FROM_UNIXTIME, UNIX_TIMESTAMP, field extraction (EXTRACT, YEAR ...
  SECOND), DATE_ADD, DATE_SUB, DATEDIFF, TIMESTAMPDIFF, DATE_TRUNC,
  LAST_DAY, CONVERT_TZ. Parsing is strict, so 2026-11-31 is an error.
- Conversion: CAST and TRY_CAST.
- Functions are static methods annotated with @scalar; the registry
  derives signatures and overload order from them. Functions that take
  an EvaluationContext receive the job time zone, run start and clock,
  in generated code and in the interpreter alike.
- Keyword call forms (TRIM ... FROM, POSITION ... IN, EXTRACT,
  TIMESTAMPDIFF, DAY) map onto the registered functions.
- functions/builtin.yaml documents all 88 functions in both languages;
  the docs site renders reference/functions from it.

Verified with JDK 21, Maven 3.9, Calcite 1.40.0, Janino 3.1.12,
RE2/J 1.8, Node 22, Next.js 15.5.29.

Tests: 254 JUnit tests in pipeforge-expressions, 93% line coverage.
Every catalog signature is type-checked and every catalog example is
evaluated compiled and interpreted and compared with the documented
result; a property test checks NULL propagation for every overload;
about 100 boundary and invalid-argument cases. Vitest covers the
function table (81 tests). mvnw verify, license headers, docs checks
and docs build pass.

Docs: reference/functions (generated from the catalog),
concepts/expressions, reference/expression-syntax (function call forms)
and development/docs-guide (FunctionList), in en-US and zh-CN.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Add pipeforge-core, which turns a job definition into a checked
logical plan before any data is read.

- Job DSL: one model for YAML and JSON, read with SnakeYAML's composer
  only (no object construction; custom tags, merge keys and duplicate
  keys are rejected). Structural problems report line, column and path
  (new PF-CONF-0006 JOB_INVALID). Nested mappings and dotted keys are
  equivalent; a transform or sink without inputs reads the last source
  or transform written before it.
- env options mode, parallelism, delivery, timezone and variables, plus
  per-kind node defaults (env.source.*, ...); cluster-only prefixes are
  rejected. Node options merge node > env > cluster > plugin default
  and are validated with each plugin's OptionRule.
- Variables: ${var:...} with overrides and defaults, ${date:fmt,offset,
  boundary} on the planned time in the job time zone (default UTC),
  ${env:...}, ${run:...}, ${job:name} and the $${ escape; other ${...}
  texts are left for plugins. Cycles and malformed variables are
  errors.
- Planning: input checks (new PF-PLAN-0009 INPUT_INVALID), cycle
  detection with the path, every node must reach a sink (new
  PF-PLAN-0010 NODE_DISCONNECTED), schema derivation in topological
  order with column-wise merging of several inputs, mode derivation
  (new PF-PLAN-0011 BOUNDEDNESS_MISMATCH) and the exactly-once check.
- Components come from installed plugins (PluginComponents, one lease
  per plugin version) or from factory instances (StaticComponents).
- explain in plan mode as aligned text or JSON: settings, variables,
  nodes, options with their origin (secrets masked), schemas with the
  changes per transform, merged sink inputs and warnings.

Verified with JDK 21, Maven 3.9.9, SnakeYAML 2.3, Jackson 2.18.2,
Node 22, Next.js 15.5.29.

Tests: 112 JUnit tests in pipeforge-core, 96% instruction coverage:
DSL positive and negative cases with locations, variable resolution
(offsets, boundaries, leap years, time zones), planner errors and
option precedence, schema merge rules, golden files for the text and
JSON explain output, planning against an installed plugin package, and
every job example in the new docs pages parsed in both languages.
mvnw verify, license headers, docs checks and docs build pass.

Docs: reference/job-dsl, reference/variables and
concepts/plan-and-explain in en-US and zh-CN; node examples in
concepts/plugins and concepts/expressions now use id.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Ignore .Codex next to .claude so that local agent notes and design
drafts never reach the repository.

Signed-off-by: qianmoQ <shicheng@devlive.org>
The API server is built on Spring Boot 4.1. Align the versions managed
by the root POM with its BOM so that every module, the server included,
resolves the same libraries:

- JUnit 5.11.4 -> 6.0.3, AssertJ 3.27.3 -> 3.27.7,
  Mockito 5.14.2 -> 5.23.0, JSpecify 1.0.0 -> 1.0.1
- SLF4J 2.0.16 -> 2.0.20, Logback 1.5.16 -> 1.5.38
- Jackson 2.18.2 -> 2.21.7, SnakeYAML 2.3 -> 2.6
- new properties spring-boot.version 4.1.2 and springdoc.version 3.2.0

Verified with JDK 21 and Maven 3.9.9: mvnw verify passes for all
modules (513 tests) with formatting, Error Prone, SpotBugs, license
and coverage gates.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Errors in a job definition now carry the line, column and path of the
offending value as structured scope fields, so that editors such as the
Web UI can mark the exact place instead of parsing the message.

- ErrorScope gains line, column and path, ErrorScope.definition(...)
  and withDefinition(...); toMap() lists them after the runtime parts
  and omits unknown lines.
- pipeforge-core attaches the location to every PF-CONF-0006
  JOB_INVALID error.

Verified with JDK 21 and Maven 3.9.9.

Tests: scope rendering with and without a known line, and the scope of
a parser error (line, column and path); mvnw verify passes for common,
api, plugin, expressions and core.

Docs: concepts/errors explains the scope fields and reference/job-dsl
mentions the location of PF-CONF-0006, in en-US and zh-CN.

Signed-off-by: qianmoQ <shicheng@devlive.org>
Bumps the build-plugins group with 19 updates:

| Package | From | To |
| --- | --- | --- |
| [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) | `3.4.0` | `3.5.0` |
| [org.apache.maven.plugins:maven-resources-plugin](https://github.com/apache/maven-resources-plugin) | `3.3.1` | `3.5.0` |
| [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) | `3.4.2` | `3.5.1` |
| [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin) | `3.1.3` | `3.2.0` |
| [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) | `3.1.3` | `3.2.0` |
| [org.apache.maven.plugins:maven-site-plugin](https://github.com/apache/maven-site-plugin) | `3.21.0` | `3.22.0` |
| [org.apache.maven.plugins:maven-wrapper-plugin](https://github.com/apache/maven-wrapper) | `3.3.2` | `3.3.4` |
| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) | `3.5.2` | `3.6.1` |
| [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) | `3.13.0` | `3.16.0` |
| [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) | `2.44.2` | `3.11.0` |
| [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) | `4.8.6.6` | `4.10.5.0` |
| [org.codehaus.mojo:license-maven-plugin](https://github.com/mojohaus/license-maven-plugin) | `2.4.0` | `2.8.0` |
| [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) | `0.8.12` | `0.8.16` |
| [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) | `3.5.0` | `3.7.0` |
| [com.github.siom79.japicmp:japicmp-maven-plugin](https://github.com/siom79/japicmp) | `0.23.1` | `0.27.0` |
| [org.apache.maven:maven-plugin-api](https://github.com/apache/maven) | `3.9.9` | `3.10.0` |
| [org.apache.maven.plugin-tools:maven-plugin-annotations](https://github.com/apache/maven-plugin-tools) | `3.15.1` | `3.16.0` |
| [org.apache.maven.plugins:maven-plugin-plugin](https://github.com/apache/maven-plugin-tools) | `3.15.1` | `3.16.0` |
| [org.apache.maven.plugins:maven-invoker-plugin](https://github.com/apache/maven-invoker-plugin) | `3.9.0` | `3.10.1` |


Updates `org.apache.maven.plugins:maven-clean-plugin` from 3.4.0 to 3.5.0
- [Release notes](https://github.com/apache/maven-clean-plugin/releases)
- [Commits](apache/maven-clean-plugin@maven-clean-plugin-3.4.0...maven-clean-plugin-3.5.0)

Updates `org.apache.maven.plugins:maven-resources-plugin` from 3.3.1 to 3.5.0
- [Release notes](https://github.com/apache/maven-resources-plugin/releases)
- [Commits](apache/maven-resources-plugin@maven-resources-plugin-3.3.1...maven-resources-plugin-3.5.0)

Updates `org.apache.maven.plugins:maven-jar-plugin` from 3.4.2 to 3.5.1
- [Release notes](https://github.com/apache/maven-jar-plugin/releases)
- [Commits](apache/maven-jar-plugin@maven-jar-plugin-3.4.2...maven-jar-plugin-3.5.1)

Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.2.0
- [Release notes](https://github.com/apache/maven-install-plugin/releases)
- [Commits](apache/maven-install-plugin@maven-install-plugin-3.1.3...maven-install-plugin-3.2.0)

Updates `org.apache.maven.plugins:maven-deploy-plugin` from 3.1.3 to 3.2.0
- [Release notes](https://github.com/apache/maven-deploy-plugin/releases)
- [Commits](apache/maven-deploy-plugin@maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.2.0)

Updates `org.apache.maven.plugins:maven-site-plugin` from 3.21.0 to 3.22.0
- [Release notes](https://github.com/apache/maven-site-plugin/releases)
- [Commits](apache/maven-site-plugin@maven-site-plugin-3.21.0...maven-site-plugin-3.22.0)

Updates `org.apache.maven.plugins:maven-wrapper-plugin` from 3.3.2 to 3.3.4
- [Release notes](https://github.com/apache/maven-wrapper/releases)
- [Commits](apache/maven-wrapper@maven-wrapper-3.3.2...maven-wrapper-3.3.4)

Updates `org.apache.maven.plugins:maven-surefire-plugin` from 3.5.2 to 3.6.1
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](apache/maven-surefire@surefire-3.5.2...surefire-3.6.1)

Updates `org.apache.maven.plugins:maven-compiler-plugin` from 3.13.0 to 3.16.0
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](apache/maven-compiler-plugin@maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.16.0)

Updates `com.diffplug.spotless:spotless-maven-plugin` from 2.44.2 to 3.11.0
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](diffplug/spotless@maven/2.44.2...maven/3.11.0)

Updates `com.github.spotbugs:spotbugs-maven-plugin` from 4.8.6.6 to 4.10.5.0
- [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases)
- [Commits](spotbugs/spotbugs-maven-plugin@spotbugs-maven-plugin-4.8.6.6...spotbugs-maven-plugin-4.10.5.0)

Updates `org.codehaus.mojo:license-maven-plugin` from 2.4.0 to 2.8.0
- [Release notes](https://github.com/mojohaus/license-maven-plugin/releases)
- [Commits](mojohaus/license-maven-plugin@2.4.0...2.8.0)

Updates `org.jacoco:jacoco-maven-plugin` from 0.8.12 to 0.8.16
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](jacoco/jacoco@v0.8.12...v0.8.16)

Updates `org.apache.maven.plugins:maven-enforcer-plugin` from 3.5.0 to 3.7.0
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](apache/maven-enforcer@enforcer-3.5.0...enforcer-3.7.0)

Updates `com.github.siom79.japicmp:japicmp-maven-plugin` from 0.23.1 to 0.27.0
- [Release notes](https://github.com/siom79/japicmp/releases)
- [Changelog](https://github.com/siom79/japicmp/blob/master/release.py)
- [Commits](siom79/japicmp@japicmp-base-0.23.1...japicmp-base-0.27.0)

Updates `org.apache.maven:maven-plugin-api` from 3.9.9 to 3.10.0
- [Release notes](https://github.com/apache/maven/releases)
- [Commits](apache/maven@maven-3.9.9...maven-3.10.0)

Updates `org.apache.maven.plugin-tools:maven-plugin-annotations` from 3.15.1 to 3.16.0
- [Release notes](https://github.com/apache/maven-plugin-tools/releases)
- [Commits](apache/maven-plugin-tools@maven-plugin-tools-3.15.1...maven-plugin-tools-3.16.0)

Updates `org.apache.maven.plugins:maven-plugin-plugin` from 3.15.1 to 3.16.0
- [Release notes](https://github.com/apache/maven-plugin-tools/releases)
- [Commits](apache/maven-plugin-tools@maven-plugin-tools-3.15.1...maven-plugin-tools-3.16.0)

Updates `org.apache.maven.plugins:maven-plugin-plugin` from 3.15.1 to 3.16.0
- [Release notes](https://github.com/apache/maven-plugin-tools/releases)
- [Commits](apache/maven-plugin-tools@maven-plugin-tools-3.15.1...maven-plugin-tools-3.16.0)

Updates `org.apache.maven.plugins:maven-invoker-plugin` from 3.9.0 to 3.10.1
- [Release notes](https://github.com/apache/maven-invoker-plugin/releases)
- [Commits](apache/maven-invoker-plugin@maven-invoker-plugin-3.9.0...maven-invoker-plugin-3.10.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-clean-plugin
  dependency-version: 3.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-resources-plugin
  dependency-version: 3.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-jar-plugin
  dependency-version: 3.5.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-install-plugin
  dependency-version: 3.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-deploy-plugin
  dependency-version: 3.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-site-plugin
  dependency-version: 3.22.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-wrapper-plugin
  dependency-version: 3.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-version: 3.6.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-version: 3.16.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-version: 3.11.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: build-plugins
- dependency-name: com.github.spotbugs:spotbugs-maven-plugin
  dependency-version: 4.10.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.codehaus.mojo:license-maven-plugin
  dependency-version: 2.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-version: 0.8.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: com.github.siom79.japicmp:japicmp-maven-plugin
  dependency-version: 0.27.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven:maven-plugin-api
  dependency-version: 3.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugin-tools:maven-plugin-annotations
  dependency-version: 3.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-plugin-plugin
  dependency-version: 3.16.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-plugin-plugin
  dependency-version: 3.16.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
- dependency-name: org.apache.maven.plugins:maven-invoker-plugin
  dependency-version: 3.10.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-plugins
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot requested a review from qianmoQ as a code owner November 11, 2026 08:49
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file java Pull requests that update java code labels Nov 11, 2026
@qianmoQ qianmoQ closed this Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/build dependencies Pull requests that update a dependency file java Pull requests that update java code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant