AI Assisted Version Intent
An opt-in analyze addon that reads a pull request diff and applies a semantic version intent by posting a /version comment authored by the app.
This feature is in limited preview — it is available to selected customers only, and behaviour and commands may change based on feedback. Reach out to the flxbl team if you would like early access.
AI Version Assist is part of Automated Package Versioning. It requires an sfp server with version management enabled, and an AI provider configured for the project.
Automated package versioning computes each artifact's version from the last published version and the intent of the change. Intent normally comes from a human — a conventional commit prefix, a version: footer, or a /version pull request comment. When none is given, the change falls through to a patch.
AI Version Assist adds a machine author for that intent. It runs as an addon inside sfp project:analyze, reads what the pull request diff actually does, and posts a single /version comment on the PR authored by the app. The build reads that comment through the same collector as a human /version comment — as a distinct, lower-priority tier. A human /version comment always overrides it.
How it works
The assist rides the existing pull request analysis flow — it does not introduce a separate trigger. On a PR event (opened, synchronize, reopened, ready-for-review), project:analyze runs its linters, and the version-assist addon runs last:
Maps the PR's changed files to packages, using the same mapping the version pipeline uses.
Keeps only the server-managed packages — those carrying
0.0.0.NEXTinsfdx-project.json.Scores each impacted package from its own diff (
major,minor,patchornone).Posts — or edits — one sticky
/versioncomment on the PR carrying the resulting directive and a rationale table.
PR opened / synchronize ─▶ project:analyze ─▶ version-assist addon
│
sticky /version comment ────┘
▼
build reads it as the AI tier ─▶ source: ai
(a human /version always wins)The assist is a participant in the existing primitive, not a new mechanism. Its output is a /version comment; the build's version pipeline is unchanged.
When it runs — three gates
All three conditions must hold, or the addon is silently skipped:
Version management is enabled for the project (
versionManagement.enabled). This is the same project-level gate that automated package versioning uses.The addon is enabled for the target branch (
analyzeConfig.versionAssistEnabled). This defaults to off and is set per project, optionally per branch.The PR impacts at least one server-managed package (a
0.0.0.NEXTpackage). A PR that only touches manually versioned packages is skipped.
The sticky comment
The assist maintains exactly one comment per pull request. Re-running the analysis after new commits edits that comment in place rather than posting a second one. The comment carries a /version directive line, a rationale table, and a hidden marker (<!-- sfp-version-assist -->) that identifies it as the assist's output.
The /version line starts the comment so the build's collector reads the directive. Editing in place preserves the comment's original creation time on GitHub, so the assist never gains recency over a human comment.
How the intent is decided
The assist scores each impacted package from its diff — the removed and added lines, not the commit message or PR title. A removed public member is a breaking change even when the same PR also adds files. Each package gets exactly one intent:
major
A breaking change: a removed or renamed public/global Apex member, a removed or type-changed field, a removed permission/page/flow/API, or a new required parameter on a public method.
minor
A backward-compatible capability addition: new objects, fields, Apex classes or methods, flows, or LWCs that extend the package surface without breaking anything existing.
patch
A behaviour-preserving change: bug fixes, internal refactors, metadata tweaks. This is the default when the evidence is ambiguous.
none
Provably non-shippable content only: documentation, tests, or scratch-org config, with no deployable metadata change.
When a change alters an interface that other packages depend on, the assist may add dependents:patch to nudge the direct dependents — and only ever patch. Stronger dependents intents are mentioned in the rationale for a human to apply.
Precedence — humans always win
The build resolves each package's version intent in this order:
1
Human /version PR comment
pr-comment
2
version: commit footer
explicit
3
AI Version Assist directive
ai
4
Conventional commit prefixes
conventional-commit
5
Patch default
default
The assist sits below every human-authored intent and above the derived defaults. A /version comment posted by a person for a package always overrides the assist's directive for that package, regardless of order. Comments carrying the assist marker form a separate, lower tier that a human comment cannot be outranked by.
When an AI-decided version is published, the baseline record stores lastVersionIntentSource: 'ai', so release audits show which bumps were machine-decided. The Computed Versions table printed during the build shows ai in its Source column.
For the full intent model that the assist feeds into, see Expressing version intent.
On cascade pull requests
A cascade opens an ordinary pull request, so the assist runs on it like any other PR. It reads the whole cascaded diff and suggests a bump for the packages it touches — it does not distinguish a cascade from original work. That suggestion cannot produce a spurious version:
If the cascaded content is already published on the source line, the receiving build skips the package — no version is computed for it — so the directive is never applied.
If the package does build, because the receiving branch has its own change to it, the version floor recognises the cascaded intent as already spent and does not re-apply it. The package takes its own intent for its own change.
In both cases the assist's directive on the cascade PR is inert. See Versioning across branches for the floor and skip behaviour.
Configuration
The addon is configured on the project, under analyzeConfig. It is off by default and can be turned on per target branch using the same first-match-wins branch rules as the other analyze settings:
versionAssistEnabled is a project (server) setting resolved from analyzeConfig, not a field in the local config/analyze.yaml. The server keeps the per-branch resolution in one place.
The AI provider resolves exactly as it does for the architecture linter: the project's aiProvider setting, then the project's AI integration credentials, then the default AI integration. Setting aiProvider: 'none' opts the project out. See Configuring LLM Providers for provider setup.
Running it manually
The same analysis is available as a standalone command, useful for testing on a branch before enabling the addon:
This prints the suggested directive and the per-package rationale without changing anything. Add --apply to post or edit the sticky comment on the PR:
--repository
Repository identifier (required).
--pr-number
Pull request number. Required to --apply the sticky comment.
--base-ref
Base commit or branch for the diff (for example origin/main).
--head-ref
Head commit or branch for the diff. Defaults to HEAD.
--changed-files
Comma-separated list of changed files, overriding the git diff.
--provider
AI provider override (for example anthropic). Defaults to the project's integration.
--apply
Post or edit the sticky /version comment on the PR. Off by default.
--json
Emit the result as JSON instead of a table.
Failure posture
The addon is advisory only. A missing provider, exhausted quota, timeout, or model error causes the analyzer to report the version-assist check as skipped and post no directive. It never fails the analysis check and never blocks a build.
Where the results appear
The assist delivers its result through three channels:
The sticky
/versioncomment on the pull request — the directive the build reads.An informational check run (
sfp Project Analysis - version-assist), alongside the other analyze checks.The analysis record surfaced in the codev Change Analysis area, where the assessment appears as its own tab.
Provider support
GitHub is supported first. Azure DevOps support is planned for a later phase — comment timestamps, which the sticky-comment behaviour relies on, are not always available there.
Last updated
Was this helpful?