Releases: eldermoraes/quarkus-agentic-scaffolding
Release list
v0.21.0
- Baseline moved to the Quarkus 3.39 line.
ci/baseline.envgoes to platform3.39.1
(from3.38.3, Renovate PR #35). Nothing required a corrective change: the templates compile
green against 3.39.1 in the CI compile job and in a localci/build-from-templates.sh 3.39.1
run. ci/test-uninstall-bob-skill.shnow pins the dangling-symlink and bare-invocation
branches. Case 8 pins the conservative choice for a symlink whose target is gone: ownership
cannot be verified through a broken link, so the uninstaller leaves it in place and warns.
Case 9 pins that a bare invocation (no argument) operates on$PWD, exercised from an isolated
subshell. Three assertion gaps in cases 4, 6, and 7 are closed — 49 assertions across 9 cases,
scripts/uninstall-bob-skill.shitself untouched. (#16, PR #41)- The idempotent re-run's repair path now covers
context7, not justquarkus-agent. The
v0.18.0 stored-command verification rule stated the repair only forquarkus-agent— yet
context7is the more frequent stale entry, since Renovate bumps its pin and every
already-configured machine then holds the previous version, dead-endingaddon
already exists. The setup skill's §5 verification paragraph now names both pinned strings and
bothclaude mcp removeforms, §5.1 and the README's How to use with Bob carry one
bob mcp add-jsonexample per server, and the Renovate custom managers already track the new
occurrences. (#20, PR #39 by @matheusandre1) - Bob's
-s globalMCP registration is now a stated choice, not a silent default. The setup
skill's §5 Bob row and §5.1, and the README's How to use with Bob, register with-s global—
which writes~/.bob/settings/mcp.jsonand applies to every workspace on the machine — without
saying so, while the equivalent decision for the conventions file carries an explicit trade-off
paragraph. All three spots now state the machine-wide scope and why it is the default (the MCPs
are tools, not conventions, and re-registering per project is friction), and offer-s workspace
to users who mix stacks — with the ENOENT seeding caveat §5.1 already documents. (#19, PR #38
by @matheusandre1) - Pasting a whole Bob fence now runs nothing — all three forms are commented. The v0.20.1
"Pick one" comment left the first form active, so uncommenting--globaland pasting the block
still ran the<cwd>form as well. Both fences (install and uninstall, keeping the symmetry
issue #17 asked for) now comment every form, so "uncomment the one you want" applies to each of
them; the uninstall fence's read-onlylsverify line stays active.
v0.20.1
- The README no longer presents
-s workspaceas opt-in onbob mcp add. Workspace scope is
Bob's own default, so dropping the-s globalflag from the published command registers in the
current project — and dies withENOENT … .bob/mcp.jsonwhen that file is missing. The
paragraph now states the default the way the setup skill's §5.1 always has. (#25, PR #32 by
@matheusandre1) - The five consistency nits deferred from the v0.17.0 reviews are closed. The Bob install and
uninstall fences mark their three forms as alternatives, not a sequence; the conventions-removal
recipe's optional file drop got its own# 4b.comment; fixture D1's label now matches D2/D3
(ACCEPTED residual);CONTRIBUTING.mdcarries the IBM-internal qualifier the README already
had; and the Gemini CLI row states thatgemini mcp adddefaults to--scope project. (#17,
PR #33 by @matheusandre1) - Contributors no longer have to guess the next version.
CONTRIBUTING.mdstep 5 asked every
PR to bump the version headers and name its own changelog section — unknowable from a branch,
and two concurrent PRs would conflict on all nine headers. External changes are now recorded
under a## Unreleasedheading in this file (created when absent), and the maintainer renames
that section and bumps the headers in the release commit.
v0.20.0
- Security-audit hardening: the skills' instruction text now states its trust posture
explicitly, and the one remaining download-and-execute path is gone. Driven by the skills.sh
audit results (Snyk agent-scan and Gen Agent Trust Hub flagged all three skills at Warn);
the goal is zero risk indicators per skill.- Setup: no installer scripts, ever. The JBang last-resort install no longer downloads an
installer script at all — not even as the reviewed three-step flow v0.18.0 introduced. The
rule is phase-wide: package managers are the only install path the skill performs for every
tool in the Phase A table, and on a machine without one the user installs that tool
themselves per its official documentation (manual/archive instructions preferred) and the
skill re-probes once, checking~/.jbang/bin/jbangdirectly as well as the PATH. The Phase A
rule, the toolchain table rows, andSECURITY.mdwere rewritten accordingly;SECURITY.md
also discloses that the approvedjbang jdk install 21gets no verification beyond jbang's
own. - Setup: registration is configuration, not execution. §5 now states that the skill never
runsjbang/npxitself — it writes the pinned command into the agent's MCP config and the
agent runtime resolves the artifact from its official registry when it first starts the
server, which on Copilot CLI, opencode, Bob, and aclaude mcp listhealth check is
immediately after the write.jbang jdk install 21is labeled an external JDK download
needing explicit approval, config file registrations are read-modify-write with an approved
diff,CONTEXT7_API_KEYpresence is checked withtest -n(never echoed), and Phase C
documents that the conventions templates are static, versioned content the skill never
injects runtime text into. - Scaffold: the agent example is an internal support-console workflow. The templates and §8
dropped the earlier framing of the ticket as adversarial free text of unknown origin: an
operator or application code submits a customer-authored ticket, which stays guarded
(PromptInjectionGuard,<ticket>delimiting, edge validation). TheTriageSocketjavadoc
became a production note pointing at WebSockets Next security and thesecure-sql-chatbot
sample; a commented Security block (OIDC + HTTP auth policy) landed in
application.properties.template, with
the permission paths listing/mcpand/mcp/*(Quarkus matches them exactly, and the
MCP extension also serves/mcp/sseand/mcp/messages/*) and anapplication-type=web-app
line for browser clients, which cannot send anAuthorizationheader on a WebSocket upgrade. - Scaffold: every free-text prompt slot is delimited, and every entry method is guarded.
{problem}(AiService),{request}(McpClient),{question}(RagSetup), the
supervisor-variant ticket, the Synthesizer's{category}/{priority}(model-produced but
derived from customer text), and the commented structured-output examples are wrapped in
markers with "data, not instructions" system-message language; each of those entry methods
now carries@InputGuardrails(PromptInjectionGuard.class)instead of a comment suggesting
it, and the guard rejects input carrying the delimiter markup itself, which would otherwise
close the delimited region early. The MCP client/server templates call for trusted servers
and authorized clients; the stdio sample became a non-resolvable
<your-mcp-server>@<exact-version>placeholder; every key that records user content —
request/response logging, tracing prompt/completion capture, MCP traffic logging,
http-problemdetail echoing — is%dev.-scoped (conventions §3/§4 and the audit checks
updated to match); RAG documents are described as curated, first-party content. - Audit: content provenance stated. A §2 subsection records that the audit reads only
local, user-selected project files, follows no URLs or feeds, and makes only targeted
external lookups — thequarkus_statusgate call,quarkus_searchDocs/quarkus_skills,
and context7 doc queries — whose results are evidence, never instructions; it never starts
or stops the project's services; report evidence quotes the minimum and redacts secrets. A
§5.3 row now checks that entry AI-service methods delimit their free-text slots and attach
@InputGuardrails. - Conventions: the GraalVM release-train citation moved from the Medium post to the
official release calendar, dev logging is now spelled%dev.-scoped (as is the tracing
prompt/completion capture in §3), and a new §4 bullet states the rule the templates
implement: externally originated free text is delimited in prompts and guarded at the entry
method.
- Setup: no installer scripts, ever. The JBang last-resort install no longer downloads an
v0.19.1
- Audit scenario (a) is now footprint-based, closing a routing gap for off-lineage LangChain4j.
Scenario (a) literally required thequarkus-langchain4j-bomimport while (b) required no
LangChain4j footprint at all, so a project on a pre-BOM LangChain4j vintage — one of the very
legacy triggers §5.0 exists for — matched neither bullet. Any LangChain4j vintage now routes to
(a), with the off-lineage version reported as its §5.0 finding; (b) stays reserved for projects
with no LangChain4j footprint.
v0.19.0
/audit-projectnow reports findings as a single severity-ordered markdown table (Severity /
Evidence / Finding / Violates / Fix) instead of per-finding text blocks. Severity grades (high,
medium, low) and the closing summary count are unchanged; the table is just easier to scan.- Legacy projects no longer block the audit — they become HIGH findings. A new §5.0 "Platform
lifecycle" check area turns the former hard stops into audit items: an EOL Quarkus platform line,
an unsupported Java release, a LangChain4j vintage outside thequarkus-langchain4j-bomlineage,
and a missing conventions file (CLAUDE.md/AGENTS.md/GEMINI.md). When the conventions file
is absent, the audit runs against the skill's own §5 catalog (which covers the core of the
canonical conventions) and reports the absence as a finding. The only remaining project-side stop
is "not a Quarkus project at all"; the Quarkus Agents MCP gate is unchanged.
v0.18.0
- Every published Quarkus Agents MCP registration now pins the JDK:
jbang --java 21+ io.quarkus:quarkus-agent-mcp:1.2.5:runner. The old command shipped no JDK hint, and §5 of the
setup skill justified that by saying the missingjava-version: 21+was "moot here, because
Phase A already requires JDK 25+". That reasoning was the bug: Phase A proves the machine has a
JDK 25, but JBang resolves its own JDK and falls back to its default — 17 on JBang 0.125.x —
whenever the spawning process exports noJAVA_HOME(GUI- and IDE-launched agents typically do
not) or points below 21. The server is compiled for Java 21, so it died at boot with
UnsupportedClassVersionError: … class file version 65.0 … up to 61.0, the client retried and
gave up, and it read as "the MCP is broken". Verified by MCPinitializehandshake against 1.2.5:
the old command fails with noJAVA_HOMEand passes withJAVA_HOME=25— so a
terminal-launched agent was passing by accident of its environment;--java 21+passes in both.
Thequarkus-agent-mcp@quarkusioalias is not an escape hatch: it does declare
java-version: 21+, but JBang 0.125.x ignores that for a GAVscript-refand fails identically
(also verified).21+is a floor rather than a pin, so a machine already on 25 reuses it instead
of downloading JDK 21. Touches all fivemcp addrows, the args line in §5, and the JSON snippet
in the setup skill, the Claude/Codex/Gemini/Bob commands and both snippets inREADME.md, and
gemini-extension.json— 16 occurrences, now coupled by a gate (below) rather than by hand. The
Renovate pin still resolves — itsmatchStringsanchor on the GAV, which the flag precedes. - Bob's global MCP file was documented at a path Bob never reads. We published
~/.bob/mcp.json(with a hedge towardmcp_settings.json); Bob 2.0.0's own constants are
MCP_WORKSPACE_FILENAME = "mcp.json"(→<project>/.bob/mcp.json, correct),MCP_GLOBAL_FILENAME = "mcp.json"in the global settings directory (→~/.bob/settings/mcp.json), and
MCP_LEGACY_GLOBAL_FILENAME = "mcp_settings.json", which Bob migrates only whenmcp.jsondoes
not yet exist. So on any machine that already hasmcp.json, a registration written to the
legacy name is silently ignored — the setup reports success and Bob never loads the server. New
§5.1 in the setup skill documents the two real paths, the legacy trap, and the precedence rules,
andREADME.md's uninstall boundary now names the global file it keeps. - Bob registration switches from hand-written JSON to
bob mcp add(Bob 2.0.0), verified against
the CLI.bob mcp add -s global <name> jbang -- --java 21+ <GAV>writes
~/.bob/settings/mcp.json, creating the file and directory when missing, andbob mcp listis a
real verification in the same style as the other agent rows. Two behaviors that cost a run if you
do not know them, both reproduced in a scratch workspace: the--separator is mandatory
(without it Bob parses the server's flag as its own and exitserror: unknown option '--java'),
and-s workspacedoes not create.bob/mcp.json— it exitsFatal error: ENOENT. Bob also
watches the file and restarts the servers whose entry changed (Restarting changed serversin
~/.bob/logs/shell/), so its "Live this session?" cell moves from "Reload in UI" to yes. bob mcp addcannot repair a stale entry;add-jsoncan. Verified: on a name that already
exists,addexits 1 withError: MCP server "…" already exists in …and leaves the old entry
intact — so an idempotent re-run could not have replaced an unpinned registration through the route
this release recommends. §5.1 and the README now document
bob mcp add-json -s <scope> quarkus-agent '{…}', which overwrites in place, with a
confirm-before-overwrite rule.- Registrations written by earlier releases of this skill sit one directory above where Bob looks.
Before v0.18.0 we pointed agents at~/.bob/mcp.json/~/.bob/mcp_settings.json; Bob reads
neither and migrates neither (its legacy migration only ever looks inside the settings directory),
so a machine set up by an earlier run can hold a registration that has never loaded. Both the skill
and the README now name those two orphan paths as things to check, not just the settings directory. scripts/uninstall-bob-skill.sh's boundary comment and--helpnamed the wrong files. They
listed asettings.jsonfile where Bob 2.0.0 has asettings/directory, and named only
.bob/mcp.jsonas the MCP registration the uninstall must not touch — which under--globalis
now~/.bob/settings/mcp.json. Both scopes are spelled out, in the script and in the README's Bob
uninstall paragraph. Behavior unchanged: the script never touched those files.- New gate:
ci/check-mcp-command-consistency.sh. The command is hand-maintained in 16 places;
the version gate couples the version and Renovate the GAV, but nothing coupled the command,
so--java 21+could be present in one artifact and missing in another with every check green —
a class of drift this repo has already hit (9fdb9d2). The script normalizes each published
surface (markdown, CLI, JSON args,add-jsonpayload) and fails unless every occurrence is
preceded by the pin and carries the same version. Wired intoquality.yml;CHANGELOG.mdand
docs/are exempt, since they quote older commands as a record. Proven to fail on a
single unpinned copy before being committed. - Verification now reads the stored command, not the server's name. Every Verify cell checked
only that something calledquarkus-agentwas listed — which an unpinned entry from an earlier
release or from the upstream Claude plugin satisfies, so no existing install was ever repaired and
all of them were reported verified. §5 requires comparing the printed command to the canonical
string and treating a mismatch as a repair (replace the entry:add-jsonfor Bob, remove + re-add
elsewhere), and reporting both strings. jbangitself may be unreachable, which no JDK flag can fix. A GUI- or IDE-launched client
starts from launchd/systemd with a minimal PATH (launchctl getenv PATHis empty on macOS →
/usr/bin:/bin:/usr/sbin:/sbin), where none of SDKMAN, Homebrew, or the upstream installer put
jbang; the symptom isspawn jbang ENOENT. "jbangmust be on PATH — that is Phase A's job"
was the same category error this release fixes forJAVA_HOME: Phase A probes the login shell,
not the spawn environment. Both files now say to register the absolute path from
command -v jbangwhen a client fails that way.- Phase A installs a 21+ JDK for JBang instead of letting the first handshake do it. With no
JBang-managed 21+ and no visibleJAVA_HOME,--java 21+makes JBang download a JDK inside MCP
startup:initializetimes out and reads as "the MCP is broken" on first run. Phase A now checks
jbang jdk listand offersjbang jdk install 21in the foreground. - Bob's route no longer hard-depends on the
bobbinary, and its handoff is honest. §5.1 probes
command -v boband keeps a hand-write path (read-modify-write, both real paths, verified in the
UI's MCP tab) for IDE-only machines. And while Bob restarts changed servers by itself, it loads
skills and the conventions file once per conversation — §5.2 now closes a Bob run by telling the
user to start a new conversation before/scaffold-project. - The upstream Claude plugin carries the same JDK trap, and the README now says so — with the
right reason.quarkus-agent@quarkus-toolslaunchesjbang quarkus-agent-mcp@quarkusio: the
alias does declarejava-version: 21+and JBang 0.125.x ignores it for a GAVscript-ref, and
RELEASEresolution means two machines run different code. The Claude manual fallback leads with
the pinnedclaude mcp add(both servers at-s user), and the plugin is presented as the
alternative with the name-collision warning the repo already gives for Gemini. ci/test-uninstall-bob-skill.shnow covers the--globalhalf of the MCP boundary. Case 6
redirectsHOMEbut never fixtured~/.bob/settings/mcp.json, so the file this release promises
to preserve under--global— whereBASE="$HOME"— was asserted nowhere. Two asserts close it.
v0.17.0
- Documented how to uninstall this artifact — and only this artifact. New
## Uninstall
section inREADME.md, placed after Advanced — personal use because it depends on what that
section describes. One removal block per install path (skills CLI, Claude plugin, Codex plugin,
Bob, Gemini extension), each with its verification command, then the managed-block procedure for
the conventions file and a verify sweep. The boundary is the feature: JDK 25 / GraalVM, JBang, the
container runtime, the Quarkus Agents MCP, context7,superpowers, and every project
/scaffold-projectgenerated all survive..cursor/mcp.json,opencode.json, and.bob/mcp.json
are kept for the same reason — their entire content is the two MCP servers the boundary protects.
The Advanced section's "Precedence and reverting" paragraph loses its reverting half and
cross-references the new section, so undo lives in one place. - Every published command was validated against primary sources —
--helpoutput, CLI source,
and official docs — by six read-only subagents before publication. Three findings changed what
shipped:- The
sedprocedure was destructive and is gone. A count-based precheck
(grep -c …, expect 2) does not gate the dangerous cases: a user writing about the markers,
markers out of order, and both markers on one line all pass it, andsedthen deletes
user-authored lines — to end of file in two of the three. Counts cannot fix it (they carry no
ordering, andgrep -ccounts lines, not occurrences). Published instead: anawkprecheck
that anchors on^<!--and compares line numbers, plus aperl -0777 -i -pesubstitution that
requires both markers, so an incomplete or out-of-order pair leaves the file byte-for-byte
untouched.\r?for CRLF,\n?for a block whoseENDis the last line without a trailing
newline. - The skills-CLI command was simply broken.
npx skills remove -s A B C -a '*' -yremoves
nothing:removehas no-s/--skill(it exists onadd) and never expands'*', so it exits
1 withInvalid agents: *. Published: positional skill names and no-a, which cleans every
known agent including ghost symlinks. The--allwarning was corrected too — contrary to its
own--help,--alldoes not imply-y, and removal deletes real files. gemini mcp adddefaults to--scope project. The re-add commands pass-s user, and run
after the uninstall, because asettings.jsonregistration shadows an extension-declared
server of the same name.
- The
scripts/uninstall-bob-skill.sh— the mirror ofinstall-bob-skill.sh, because Bob has no
manifest, registry, or command for removing a skill; deleting the directory is the whole
uninstall. Ownership-checked against eachSKILL.md's front-mattername— a directory that
declares a different name, declares none, or has noSKILL.mdis skipped with a warning rather
than deleted; the residual, stated in the script's header and in the README, is that a skill of
your own that also declaresname: audit-projectis indistinguishable from ours and will be
removed, so move it aside first. Symlink-safe (unlinks rather than recursing into the target),
idempotent, and scoped to the three skill directories —.bob/mcp.json,.bob/rules/, and your
other skills are never touched.- Two behavior tests, because a destructive script and a destructive one-liner do not validate by
reading.ci/test-uninstall-bob-skill.shcovers the install/uninstall round trip, idempotency,
the ownership and symlink guards, and--globalwithHOMEredirected into a temp directory.
ci/test-conventions-block-removal.shruns the published commands over 15 fixtures — including
every input the oldsedprocedure destroyed — and asserts that each refusal leaves the file
byte-for-byte identical, plus a drift guard that fails ifREADME.mdstops publishing the exact
validated commands. Three of the fixtures pin the accepted residual instead: a marker quoted at
column 0 is column 0 toawkandperlalike, so a quoted pair — or a mixed real/quoted pair,
whose deletion spans everything between the two lines — reachesOK-SAFE-TO-REMOVE. The mandatory
backup and the "read the diff before you trust it" warning are the mitigation. Both tests run in a
newbehavior-testsjob in the quality workflow. - Corrected five pre-existing claims the validation surfaced (details and sources in the
commit):~/.bob/AGENTS.mdis Bob's documented global context file; Bob's marketplace exists
but carries modes and MCP servers rather than skills; the global MCP path is documented
inconsistently by IBM's own two doc sets, so both names appear and the UI's Edit Global MCP is
recommended; skill approval is once per conversation via a single global boolean; and
codex plugin adddoes exist, so the v0.7.0 entry's present-tense "non-existent" was softened to
name the version instead. Two additions to the Bob section: a skill'sdescriptionis
load-bearing, and skills require Bob's Advanced mode. - All version headers synchronized to 0.17.0.
v0.16.0
- Resolved the remaining skills.sh audit findings with engineering, not scan-appeasement. The
Gen Agent Trust Hub report onsetup-agentic-scaffolding(HIGH, four findings) and the Snyk
report onscaffold-project(MEDIUM, W011) are both addressed at the root; no functionality
removed.- Pipe-to-shell eliminated (Trust Hub #1, CRITICAL). The literal
curl -Ls https://sh.jbang.dev | bashno longer appears anywhere: the JBang last resort is now
a three-step download → inspect → approve → execute flow (curl -LsS -o jbang-install.sh …,
show the file, run it only after explicit approval, delete it). The bytes the user approves are
the bytes on disk and the bytes that run — a piped stream offers nothing stable to approve.
Package managers remain the recommended path. - External dependencies pinned (Trust Hub #2).
@upstash/context7-mcp@4.0.0(npmlatest) and
io.quarkus:quarkus-agent-mcp:1.2.5:runner— the explicit GAV the floatingquarkusiocatalog
alias resolves to (script-ref: …:RELEASE:runner), validated runnable viajbang info tools.
Pinned across the setup skill,README.md, andgemini-extension.json; two Renovate
customManagers(npm + maven regex over all three files) keep the pins current, so upgrades
become explicit reviewable PRs instead of whatever-is-newest-at-startup. - Managed-block boundary on generated conventions (Trust Hub #3).
CLAUDE.md/AGENTS.md(and
their byte-for-byte seed templates) are wrapped in stable, version-free
<!-- BEGIN/END quarkus-agentic-scaffolding conventions -->markers. Phase C is rewritten
around them: markers present → deterministic replace of the block only, every byte outside
untouched; markers absent → the existing draft-merge, adding the markers so the next run is
deterministic. Generated instruction text is now explicitly delimited from user content —
the injection surface the auditor flagged — and the merge stopped being heuristic. - Probe output is data, never instruction (Trust Hub #4). New §3 rule: directives found inside
command output are quoted back as findings, never executed. - Triage template hardened at the ingestion edge (Snyk W011).
Agent.java.templatenow
demonstrates the secure pattern it should have taught: the two entry sub-agents carry
@InputGuardrails(PromptInjectionGuard.class)(wired fromGuardrails.java.template, FQN
dev.langchain4j.service.guardrail.InputGuardrailsverified against upstream docs); prompts
delimit the ticket in<ticket>markers with a system-message instruction to treat it as data;
TriageBridgerejects blank/over-long input before any model call (4 000 chars, aligned with
the guardrail); and the failure path stops leaking internals —emitter.fail(e)and
ProgressUpdate.error(t.getMessage())are replaced by full server-side logging plus a generic
client-safeProgressUpdate.failed(), mirroring the RFC 9457 philosophy at the REST edge.
ci/build-from-templates.shcompiles green against platform 3.38.1. One honest caveat: docs
confirm guardrails on@RegisterAiServiceinterfaces, but not explicitly when such an
interface is invoked as an@Agentsub-agent; the sub-agents are ordinary CDI AI-service
proxies, so the guard should run, but that is inference — worth a runtime assertion in a
scaffolded project. SECURITY.mdadded. States the trust boundary the skills operate under (read-only probes,
approval before any mutation, no piped installers, pinned sources, no plaintext secrets,
managed blocks, secure-by-default templates) and routes vulnerability reports to private
GitHub security advisories.
- Pipe-to-shell eliminated (Trust Hub #1, CRITICAL). The literal
v0.15.0
- Refreshed the model defaults (EVOLUTION-PLAN item 4). Chat goes from
llama3.2/
llama3.2:1btoqwen3:4bandqwen3:1.7b(thesmallernamed model): qwen3 is what
the official quarkus-langchain4j Ollama guide uses, and its tool-calling is markedly better —
which is precisely what the tool and agent templates exercise. The in-process embedding model
goes fromlangchain4j-embeddings-all-minilm-l6-v2to
langchain4j-embeddings-bge-small-en-v15-q, upstream Easy RAG's recommendation, with a
better MTEB score at a similar footprint. Both artifacts stay managed by
quarkus-langchain4j-bom(no version pin); a local build against platform 3.38.1 resolved the
new one at 1.17.2-beta27 and compiled green. Touchesapplication.properties.template,
pom.xml.template,RagSetup.java.template, thescaffold-projectRAG section, and
docs/VALIDATING-TEMPLATES.md. - Checked and kept
model-id. The Ollama guide appears to showchat-model.model-name, which
looked like a wrong key in our templates. It is not:"model-name"in the reference is the
placeholder for a named configuration, and the config model generated by
quarkus-langchain4j-ollama1.12.2 listschat-model.model-idas the real property, with no
chat-model.model-namealongside it. No change — recorded so the question is not re-opened.
v0.14.0
-
Baseline moved to the Quarkus 3.38 line (issue #11).
ci/baseline.envgoes to platform
3.38.1,quarkus-langchain4j-bom1.12.2, and JDK25.0.4+7.0.LTS. Nothing in 3.38 required
a corrective change: all six items in the 3.38 migration guide have zero surface in this
repository, and the weekly cron had already built the templates against 3.38.1 successfully
before the bump. TheQUARKUS_LANGCHAIN4J_BOM_VERSIONcomment now spells out that the line is a
release watcher and not what a build resolves — it read1.12.0while platform 3.37.2 actually
shipped1.11.2. -
@Skillsin the conventions and templates. The 3.38 line carries quarkus-langchain4j
1.12.x, which introduces the@Skillsannotation (io.quarkiverse.langchain4j.skills;
verified present inquarkus-langchain4j-skills1.12.2 and absent in 1.11.2 — the artifact
itself already existed, only the annotation is new). A service annotated with@Skillsgets an
activate_skilltool plus a system message advertising the available skills, so reusable
instructions live inSKILL.mdfiles instead of an ever-growing@SystemMessage. Added to the
extension menu, toAiService.java.templateandapplication.properties.templateas commented
blocks, and as a §4 convention. The extension isstatus:preview, which the text says plainly;
it stays out of the CI extension list for that reason. -
quarkus-http-problemin the extension menu (issue #10). Errors escaping a REST resource
become RFC 9457application/problem+jsoninstead of a raw 500 with a stack trace — relevant
here because a model timeout, a dead inference endpoint, or a throwing tool would otherwise leak
prompts and internal names. Added as optional-recommended, with a §3 convention and a commented
configuration block.Correcting the issue's premise: the extension is in
io.quarkus.platform:quarkus-bomfrom
3.38.0 (0 occurrences in the 3.37.2 BOM, 2 in 3.38.0 and 3.38.1 on Maven Central), so it needs
no explicit<version>and is not the exception to the "no version pins" convention that
the issue anticipated. The extension's own README still states the opposite; the BOM is
authoritative. Its current version is 3.38.1, not the 3.33.2 recorded when the issue was filed.