Branch: refs/heads/master Home: https://github.com/xwiki/xwiki-dev-llm Commit: 8603a9d0d1e4ba86805c96b9cede76b84508922a https://github.com/xwiki/xwiki-dev-llm/commit/8603a9d0d1e4ba86805c96b9cede76... Author: Vincent Massol <[email protected]> Date: 2026-07-29 (Wed, 29 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M README.md M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/code-style.md M xwiki/okf/index.md A xwiki/okf/sonarqube/constant-and-resource-rules.md A xwiki/okf/sonarqube/dead-code-rules.md A xwiki/okf/sonarqube/index.md A xwiki/okf/sonarqube/modernization-rules.md A xwiki/okf/sonarqube/simplification-rules.md A xwiki/okf/sonarqube/syntax-rules.md A xwiki/okf/sonarqube/test-code-rules.md A xwiki/okf/sonarqube/verification.md M xwiki/skills/xwiki-build/SKILL.md M xwiki/skills/xwiki-fix-sonarqube-issue/SKILL.md Log Message: ----------- [Misc] Move the SonarQube rule-fix knowledge into a per-rule-family OKF topic Distils the durable half of the sonarqube routine-memory repo into the OKF so that fixing a Sonar issue is driven by knowing which sites to DROP, not just what the transform is. * Add okf/sonarqube/ — index (rule map, denylist, universal drop conditions) plus six family files loaded lazily, one per rule group, and verification.md. Pool sizes are excluded as volatile; the index gives a facet query instead. * Record the @SuppressWarnings("java:SXXXX") + rationale-comment convention in okf/conventions/code-style.md — retire a won't-fix in the code, not in SonarCloud, so the next developer reads the reason next to the code. * Add reactor-result semantics to the xwiki-build skill: a mid-reactor failure skips every later module, and how to tell a pre-existing failure from yours. * Rewrite the xwiki-fix-sonarqube-issue skill around the OKF: drop its inline allow/denylist, add the load protocol and the safe-batch-application procedure (assert-guarded script, match-count location, subagent verification). Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: cf0671c9777d039fa59f8b6029b1bc60d69f7d05 https://github.com/xwiki/xwiki-dev-llm/commit/cf0671c9777d039fa59f8b6029b1bc... Author: Vincent Massol <[email protected]> Date: 2026-07-29 (Wed, 29 Jul 2026) Changed paths: M xwiki/okf/sonarqube/index.md Log Message: ----------- [Misc] Add S2143, S2160 and S1141 to the SonarQube denylist Missed from the previous commit. Like S3776 these are real design changes rather than mechanical cleanups, so a Sonar sweep is the wrong vehicle. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 20bbe28ef8fd9634d3d7080801acaef30239886c https://github.com/xwiki/xwiki-dev-llm/commit/20bbe28ef8fd9634d3d7080801acae... Author: Vincent Massol <[email protected]> Date: 2026-07-29 (Wed, 29 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json Log Message: ----------- [Misc] Release v1.0.0 Commit: b43f7529709b6d380fa5f490a51f7232ebb04155 https://github.com/xwiki/xwiki-dev-llm/commit/b43f7529709b6d380fa5f490a51f72... Author: Vincent Massol <[email protected]> Date: 2026-07-30 (Thu, 30 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/modernization-rules.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/okf/sonarqube/syntax-rules.md Log Message: ----------- Document the S6397, S6485 and S6208 SonarQube rules in the OKF * simplification-rules: S6397 (redundant single-character regex character class), including the escaping to preserve and the \uXXXX source-text gotcha. * modernization-rules: S6485 (collection factory methods instead of the sizing constructor) and the S6201 shapes a scripted sweep misses (else-if chains, bare casts, array-index operands, array-type patterns, acronym naming, name reuse across sibling blocks). * syntax-rules: S6208 (merge fall-through case labels), including when the group must be dropped. * index: rule-map rows for the three new rules, plus S6213 and S4144 added to the denylist. * Bump the plugin version to 1.0.1 across all host manifests. Co-Authored-By: Vincent Massol <[email protected]> Commit: 0758d0b81ec104b45d6777fdb914655092b5ee9b https://github.com/xwiki/xwiki-dev-llm/commit/0758d0b81ec104b45d6777fdb91465... Author: Vincent Massol <[email protected]> Date: 2026-07-30 (Thu, 30 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/modernization-rules.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/okf/sonarqube/syntax-rules.md Log Message: ----------- Document the S6397, S6485 and S6208 SonarQube rules in the OKF Commit: 2f7214973471a73bdb7f521aa861be700f1edbbb https://github.com/xwiki/xwiki-dev-llm/commit/2f7214973471a73bdb7f521aa861be... Author: Vincent Massol <[email protected]> Date: 2026-07-30 (Thu, 30 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation-migration.md M xwiki/okf/conventions/documentation.md A xwiki/okf/conventions/page-deletion.md M xwiki/okf/index.md M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Require handling a page's backlinks before deleting it on xwiki.org Deleting a page on xwiki.org breaks every link pointing at it, and the breakage shows up on other pages that nothing in the delete flow names. Capture the rule as a new OKF topic (conventions/page-deletion.md), generic to any page deletion rather than tied to documentation authoring or conversion: - what the deletion wizard does repoint ("New target" + "Update links", plus the XWiki.RedirectClass redirect) and what it never does (a REST DELETE, links written as absolute URLs, macro parameters without MacroRefactoring, references held in xproperties); - why the Information tab's Backlinks list must be completed with a farm-wide search: an absolute URL is an external link, so it is not a backlink at all; - the triage table, and the recovery path (restore from the trash to get the list back) when a page was already deleted. The doc-migration file keeps only its migration-specific triage and defers the mechanics to the new topic; documentation.md and the xwiki-doc-writing, xwiki-doc-convert and xwiki-rest-api skills point at it. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 169cf67c10f3d071880913f3a5a6cd7f69c482ea https://github.com/xwiki/xwiki-dev-llm/commit/169cf67c10f3d071880913f3a5a6cd... Author: Vincent Massol <[email protected]> Date: 2026-07-30 (Thu, 30 Jul 2026) Changed paths: M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation-migration.md M xwiki/okf/conventions/documentation.md A xwiki/okf/conventions/page-deletion.md M xwiki/okf/index.md M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Require handling a page's backlinks before deleting it on xwiki.org Commit: 9c4ea74d58482a42a86d4f163f7ff59ac9ec1315 https://github.com/xwiki/xwiki-dev-llm/commit/9c4ea74d58482a42a86d4f163f7ff5... Author: Thomas Mortagne <[email protected]> Date: 2026-07-30 (Thu, 30 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/versioning.md M xwiki/skills/xwiki-backport-testneeded/SKILL.md M xwiki/skills/xwiki-backport/SKILL.md Log Message: ----------- [Misc] Put @since on reusable code, including test tools (#29) The versioning convention claimed that methods of page objects and test helpers never carry @since. That is wrong: @since tells a caller when the thing it calls appeared, so it belongs on any reusable class or member, whatever the module and whatever the visibility — internal code and the tools tests are written with (page objects, test frameworks such as @UITest and its TestConfiguration, TestUtils) included. Only the tests themselves, which nothing calls, carry none. * fix the rule in okf/conventions/versioning.md * align the two backport skills that restated it as an operative instruction * bump the plugin version so installed plugins pull the fix Co-authored-by: Claude Opus 5 (1M context) <[email protected]> Commit: 5e31dc7a632698ed519cc59513cd0c09e96b3f77 https://github.com/xwiki/xwiki-dev-llm/commit/5e31dc7a632698ed519cc59513cd0c... Author: Vincent Massol <[email protected]> Date: 2026-07-31 (Fri, 31 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/modernization-rules.md Log Message: ----------- [Misc] Record the doPrivileged ambiguity as an S1604 drop condition An anonymous class names the functional interface it implements; an implicitly-typed lambda cannot. When the target method is overloaded on two functional interfaces with the same descriptor the converted call no longer compiles, which makes every AccessController.doPrivileged() site a permanent drop for java:S1604. Co-authored-by: Vincent Massol <[email protected]> Commit: 718e6cad5a0e1aa1617d3e7751c7195593c83cb7 https://github.com/xwiki/xwiki-dev-llm/commit/718e6cad5a0e1aa1617d3e7751c719... Author: Vincent Massol <[email protected]> Date: 2026-07-31 (Fri, 31 Jul 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/modernization-rules.md Log Message: ----------- [Misc] Record the doPrivileged ambiguity as an S1604 drop condition Commit: 2e65b28c7ebcd6b980c013790bb4463c61e97e62 https://github.com/xwiki/xwiki-dev-llm/commit/2e65b28c7ebcd6b980c013790bb446... Author: Vincent Massol <[email protected]> Date: 2026-08-01 (Sat, 01 Aug 2026) Changed paths: M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/modernization-rules.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/okf/sonarqube/syntax-rules.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- [Misc] Document five more SonarQube rules and three instanceof scripting traps * Add S6068 (useless Mockito eq()) to the test-code family, including why the whole statement must be unwrapped and when eq() is genuinely required. * Add S2209 to the syntax family and explain why it is safe where the denylisted S3252 is not. * Add S1264, S3012 and S3024 to the simplification family. * Record the three traps that bite a scripted S6201 batch: the parenthesized cast only owns its outer paren before a '.', brace counting must start at the '{' of a "} else if" line, and \b does not match after an array type's ']'. * Record the two extra S6126 drop conditions (\r\n, and a fixture with no content line at the baseline indent) and that a whole module's pool can be one drop. * Deny S6035 on public constants (Revapi constantValueChanged) and S3824 where the guarded block does more than the put. Co-Authored-By: Vincent Massol <[email protected]> Commit: e58a2cc17dfb4408ea3a55a0adca0eb1bb1fc4b0 https://github.com/xwiki/xwiki-dev-llm/commit/e58a2cc17dfb4408ea3a55a0adca0e... Author: Vincent Massol <[email protected]> Date: 2026-08-01 (Sat, 01 Aug 2026) Changed paths: M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/modernization-rules.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/okf/sonarqube/syntax-rules.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- [Misc] Document five more SonarQube rules and three instanceof scripting traps Commit: bcfb1502ee42154478bea220a05872bd12668d0a https://github.com/xwiki/xwiki-dev-llm/commit/bcfb1502ee42154478bea220a05872... Author: Vincent Massol <[email protected]> Date: 2026-08-01 (Sat, 01 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record that prose for xwiki.org and the forum is never hard-wrapped Add the convention to okf/conventions/documentation.md: content written for xwiki.org pages and for forum.xwiki.org (Discourse) posts must not be hard-wrapped — one paragraph, and each list item, is a single unbroken line. Both surfaces reflow prose themselves, so manual breaks inside a paragraph gain nothing, are painful to re-wrap in the web editor and can leak into the rendered output. The 120-character limit is a Java-source rule enforced by Checkstyle; applying it to prose bound for a web editor is a category error. Fenced and {{code}} blocks keep their own line structure. Sync the okf/index.md and instructions/xwiki-org.md maps, and bump the plugin version to 1.0.4 so installed plugins pull the update. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: a1a6fa2ddb12f64887e2363983bb1ffcfb0abb0e https://github.com/xwiki/xwiki-dev-llm/commit/a1a6fa2ddb12f64887e2363983bb1f... Author: Vincent Massol <[email protected]> Date: 2026-08-01 (Sat, 01 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record that prose for xwiki.org and the forum is never hard-wrapped Commit: a97185e825cd0e2d80952f4fd03bf6dd92ae0ba1 https://github.com/xwiki/xwiki-dev-llm/commit/a97185e825cd0e2d80952f4fd03bf6... Author: Vincent Massol <[email protected]> Date: 2026-08-03 (Mon, 03 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/index.md M xwiki/okf/servers/index.md A xwiki/okf/servers/jenkins.md Log Message: ----------- [Misc] Record how to query ci.xwiki.org through the Jenkins REST API The server map only said "WebFetch a job/build URL", which is misleading: ci.xwiki.org sits behind Cloudflare and answers 403 to anything sending a browser User-Agent, while plain curl gets 200. It also has a full anonymous REST API that removes any need to scrape the UI. Add okf/servers/jenkins.md with the endpoints that answer the questions that actually come up (failing tests with messages, changesets, the exact commit built, archived screenshots, consoleText), and the traps in reading a result: FAILURE means it broke outside the tests while UNSTABLE means tests failed, a test case's age/failedSince only counts builds that produced test results so it is not a reliable first-failure, changeSets can be empty, and a UI test that breaks with no source change is usually the parent pom moving ${platform.version}. Correct the ci.xwiki.org row and the build-status verify recipe in okf/servers/index.md accordingly, and register the topic in okf/index.md and the injected mirror in instructions/xwiki-org.md. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 9cf9e8c673fb94caac9535c2203cf2b2b1c32c34 https://github.com/xwiki/xwiki-dev-llm/commit/9cf9e8c673fb94caac9535c2203cf2... Author: Vincent Massol <[email protected]> Date: 2026-08-03 (Mon, 03 Aug 2026) Changed paths: M xwiki/instructions/xwiki-org.md A xwiki/okf/conventions/logging.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record that a log argument is an object, not text A logging pass over commons and platform removed explicit toString() calls on log arguments as "redundant, since SLF4J calls toString() itself". That reasoning is wrong for XWiki, because SLF4J is not the only consumer of a log event: AbstractJobStatus captures every warn/error on a job thread, the LogEvent keeps the raw Object[], SafeMessageConverter XStream-serializes each argument as a full object graph whenever XStreamUtils.isSerializable() accepts it (which defaults to true), SafeArrayConverter turns any read failure into null, and consumers read arguments by type -- the log displayers render references as links and Importer casts getArgumentArray()[0] to EntityReference. So both directions are wrong in different cases, which is what the new conventions/logging.md records: the decision table for when to keep an argument typed (references, extension ids, enums, components, collections) and when to force an eager String (arbitrary sources, live resources such as a Hibernate Session, mutable builders, requests, an object whose toString() is deliberately narrower than its fields, a Class from an extension jar), plus the two wrong justifications for removing a toString() and how java:S2629 actually behaves -- String-typed arguments only, no-arg getters and catch blocks exempt -- so that a suppression is only added where one is really needed. The always-on instructions only gain the topic name in the OKF map: this matters when working on a logging call, which is when the OKF gets consulted, so it does not belong in what every session pays for. Co-authored-by: Claude Opus 5 (1M context) <[email protected]> Commit: b2f268a97f81457046213a7e94616e49255622ae https://github.com/xwiki/xwiki-dev-llm/commit/b2f268a97f81457046213a7e94616e... Author: Vincent Massol <[email protected]> Date: 2026-08-03 (Mon, 03 Aug 2026) Changed paths: M xwiki/instructions/xwiki-org.md A xwiki/okf/conventions/logging.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record that a log argument is an object, not text Commit: 1e2103e97ed80715e4cccfb4b667eedc82be55ac https://github.com/xwiki/xwiki-dev-llm/commit/1e2103e97ed80715e4cccfb4b667ee... Author: Vincent Massol <[email protected]> Date: 2026-08-03 (Mon, 03 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/index.md M xwiki/okf/servers/index.md A xwiki/okf/servers/jenkins.md Log Message: ----------- [Misc] Record how to query ci.xwiki.org through the Jenkins REST API Commit: 5615c8b7fb9c01d4e69ee66251432b00f722ddfb https://github.com/xwiki/xwiki-dev-llm/commit/5615c8b7fb9c01d4e69ee66251432b... Author: Vincent Massol <[email protected]> Date: 2026-08-03 (Mon, 03 Aug 2026) Changed paths: M .gitignore Log Message: ----------- [Misc] Add some more git ignores Commit: dba678f7d1003df58d073d2110ac69536bd10928 https://github.com/xwiki/xwiki-dev-llm/commit/dba678f7d1003df58d073d2110ac69... Author: Vincent Massol <[email protected]> Date: 2026-08-03 (Mon, 03 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/logging.md Log Message: ----------- [Misc] Correct which log calls a job captures conventions/logging.md said AbstractJobStatus captures "every warn/error executed on a job thread". That is true but narrower than the mechanism, and the gap matters. AbstractJobStatus (line 203) builds a plain LoggerListener over the job's LoggerTail, and LoggerListener.onEvent forwards any LogEvent it receives without looking at its level. So the capture is level-agnostic: warn and error are always captured only because those levels are always enabled with the default configuration, and a debug call is captured just as fully whenever debug is on. Read as an exhaustive list, the old wording invites the conclusion that a debug argument never reaches the job log and therefore needs none of the care the rest of the file describes -- exactly backwards, since a debug call under an isDebugEnabled() guard is the one case where the eager String is also the performance-correct choice. Co-authored-by: Claude Opus 5 (1M context) <[email protected]> Commit: 92fe0cdf997d8277b09dfe179f03d2187b8cae45 https://github.com/xwiki/xwiki-dev-llm/commit/92fe0cdf997d8277b09dfe179f03d2... Author: Vincent Massol <[email protected]> Date: 2026-08-03 (Mon, 03 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/logging.md Log Message: ----------- [Misc] Correct which log calls a job captures Commit: fbfcbd7b499e6654befac592695a6a1af26ea5d5 https://github.com/xwiki/xwiki-dev-llm/commit/fbfcbd7b499e6654befac592695a6a... Author: Vincent Massol <[email protected]> Date: 2026-08-04 (Tue, 04 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation.md M xwiki/okf/index.md M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md Log Message: ----------- [Misc] Add doc rules on result steps, visuals, verbosity and setup questions * End a How-to/Tutorial with a step showing the result * Show, don't only tell: screenshots for users/admins, code examples for developers, architecture/concept diagrams for explanations - without forcing a visual where it clarifies nothing * Keep verbosity low and make hub pages link the pages they introduce * Ask the developer up front about Change Request vs direct save, the xwiki.org credentials, a running local instance for screenshots and its credentials Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 3a20202bf45452d607f2e54d6bc8e38320132b05 https://github.com/xwiki/xwiki-dev-llm/commit/3a20202bf45452d607f2e54d6bc8e3... Author: Vincent Massol <[email protected]> Date: 2026-08-04 (Tue, 04 Aug 2026) Changed paths: M CLAUDE.md M README.md M kimi.plugin.json M opencode.jsonc Log Message: ----------- [Misc] Remove the sonarqube key error + commit missed files in the previous commit Commit: 624fd0acc4933f6bf93460d0adf6c06b0cf054d2 https://github.com/xwiki/xwiki-dev-llm/commit/624fd0acc4933f6bf93460d0adf6c0... Author: Vincent Massol <[email protected]> Date: 2026-08-04 (Tue, 04 Aug 2026) Changed paths: M xwiki/.claude-plugin/plugin.json M xwiki/.mcp.json Log Message: ----------- [Misc] Added missed files from the previous commit Commit: c6d698989552d7349dd0abfeae1031612940ebb3 https://github.com/xwiki/xwiki-dev-llm/commit/c6d698989552d7349dd0abfeae1031... Author: Vincent Massol <[email protected]> Date: 2026-08-04 (Tue, 04 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-writing/SKILL.md Log Message: ----------- [Misc] Correct the xwiki.org Technical Id format in the doc conventions The OKF and the xwiki-doc-writing checklist stated the Technical Id as a bare `<groupId>:<artifactId>`, citing the generic Apply Diataxis page. On xwiki.org the value is prefixed by how the feature is distributed — `xwiki:<extension id>` or `npm:<package id>` — and the prefix is what makes the Extension badge at the bottom of the page resolve. The unprefixed form produces no badge. This misstatement caused a documentation review to report all 21 conformant JIRA extension pages as malformed, so the correction also records that an unprefixed id is the defect rather than the norm. Authority: Page Structure on xwiki.org, which the sources list now includes. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: aaa6309d8748de60e628e17621749388be39293f https://github.com/xwiki/xwiki-dev-llm/commit/aaa6309d8748de60e628e176217493... Author: Vincent Massol <[email protected]> Date: 2026-08-04 (Tue, 04 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-writing/SKILL.md Log Message: ----------- [Misc] Correct the xwiki.org Technical Id format in the doc conventions Commit: 0a5d3489528681887ca2f2ee90662cc91016f42e https://github.com/xwiki/xwiki-dev-llm/commit/0a5d3489528681887ca2f2ee90662c... Author: Vincent Massol <[email protected]> Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M README.md M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/servers/index.md M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Look up xwiki.org credentials in ~/.xwiki-credentials, ask setup questions via AskUserQuestion The doc skills' setup questions are now asked with the AskUserQuestion tool (clickable options) instead of prose, and the xwiki.org write credentials are looked up in ~/.xwiki-credentials before being asked for. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: df0967cfcdaa3d108a11f461172fd9c8b1bfcbc4 https://github.com/xwiki/xwiki-dev-llm/commit/df0967cfcdaa3d108a11f461172fd9... Author: Vincent Massol <[email protected]> Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M README.md M xwiki/okf/servers/index.md M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Look up xwiki.org credentials in ~/.xwiki-credentials, ask the doc setup questions via AskUserQuestion Commit: 1eb84a3706202c0f3385d08311a7f2de949b7d92 https://github.com/xwiki/xwiki-dev-llm/commit/1eb84a3706202c0f3385d08311a7f2... Author: Vincent Massol <[email protected]> Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/skills/xwiki-build/SKILL.md Log Message: ----------- [Misc] Warn that `mvn checkstyle:check` does not run the CI ruleset A CLI goal invocation takes the plugin-level <configuration>, which in the XWiki parent POM points at checkstyle-blocker.xml; checkstyle.xml lives in the `default` execution and checkstyle-test.xml in the `test` one. So a bare `mvn checkstyle:check` reports BUILD SUCCESS on code that fails CI. Document the `checkstyle:check@default checkstyle:check@test` form, plus the rule that a multi-module change must be validated on every module it touched. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 1520dc1ccd9ffa4df2a196895c39d7946342c767 https://github.com/xwiki/xwiki-dev-llm/commit/1520dc1ccd9ffa4df2a196895c39d7... Author: Vincent Massol <[email protected]> Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/constant-and-resource-rules.md M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/okf/sonarqube/syntax-rules.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- [Misc] Document eight more SonarQube rules in the OKF * S4719 charset name -> StandardCharsets, including the unreachable-catch compile break and when it is safe to retype the constant instead * S1130 remove unthrowable throws — the src/test vs src/main split decides it entirely * S1659, S6353, S1905, S4201, S1596, S2133 — transforms and drop conditions * S1905 carries the general warning that an "unnecessary" cast on an argument of an overloaded method can silently re-dispatch Co-Authored-By: Vincent Massol <[email protected]> Commit: a44aa46e5feb34c1d314ad98ea185c087186b766 https://github.com/xwiki/xwiki-dev-llm/commit/a44aa46e5feb34c1d314ad98ea185c... Author: Vincent Massol <[email protected]> Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/constant-and-resource-rules.md M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/okf/sonarqube/syntax-rules.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- [Misc] Document eight more SonarQube rules in the OKF Commit: 3d2f658627c247b9ee0bb00fb063555291fd4b9a https://github.com/xwiki/xwiki-dev-llm/commit/3d2f658627c247b9ee0bb00fb06355... Author: Vincent Massol <[email protected]> Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/commit-messages.md M xwiki/okf/index.md M xwiki/skills/xwiki-pull-request/SKILL.md Log Message: ----------- [Misc] Correct the commit-message convention: the summary line is the JIRA issue title * The OKF, the always-injected org instructions and the xwiki-pull-request skill all documented the format as `XWIKI-12345: <summary>`, which reads as an invitation to compose a new sentence. The documented rule is `<JIRA ID>: <JIRA issue description>` — the issue title reproduced verbatim — with what the individual commit does listed as `*` bullets in the body. * Record why the body matters: it is the only thing distinguishing several commits that share one issue, since their summary lines are identical by construction. * Record the corollary that the title is reused on every commit and so must read well as a commit summary, and must not be reworded casually afterwards. * Scope `[Misc]` using the dev-wiki test ("does it affect any user or extension developer?") so a behaviour-changing batch refactoring is not filed under it. * Note that security fixes override the copy-the-title rule, since the title would disclose the nature of the issue before it is released. * Add the JIRA best-practices page, which actually carries the rule, to the entry's sources. * Bump the plugin version to 1.0.13 so installed plugins pull the update. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 8b6e648b233a697c53d937394451913633185588 https://github.com/xwiki/xwiki-dev-llm/commit/8b6e648b233a697c53d93739445191... Author: Vincent Massol <[email protected]> Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/commit-messages.md M xwiki/okf/index.md M xwiki/skills/xwiki-pull-request/SKILL.md Log Message: ----------- [Misc] Correct the commit-message convention: the summary line is the JIRA issue title Commit: 40b181a5dde8c9877d049daed598ceb56e660700 https://github.com/xwiki/xwiki-dev-llm/commit/40b181a5dde8c9877d049daed598ce... Author: Vincent Massol <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- Document SonarQube rules S125, S5778 and S8714, and narrow S1130's test-source rule Co-Authored-By: Vincent Massol <[email protected]> Commit: b1e94b49439a8d047c8d52f8c211260be4fb1cef https://github.com/xwiki/xwiki-dev-llm/commit/b1e94b49439a8d047c8d52f8c21126... Author: Vincent Massol <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- [Misc] Document SonarQube rules S125, S5778 and S8714, and narrow S1130 test-source rule Commit: 1e542363b2ca6a201e558cea912c21776dbdb719 https://github.com/xwiki/xwiki-dev-llm/commit/1e542363b2ca6a201e558cea912c21... Author: Vincent Massol <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- [Misc] Document S5783 as the checked-exception twin of S5778, and three drop conditions * S5783 shares S5778's section and its fix; call out that it is the trap an S8714 conversion sets for itself when the try body builds an argument inline. * S5786: an @Override cannot have its visibility reduced, and a cross-package read of a constant off a test class blocks making that class package-private. * S1185: removing a public super-only override passes revapi, so "it is public API" is not by itself a drop reason. * S1144: a private member named as a string in a reflection test is used, not dead. Co-Authored-By: Vincent Massol <[email protected]> Commit: 1d3e67b1df1d68cf39a32cfa31586289787774e5 https://github.com/xwiki/xwiki-dev-llm/commit/1d3e67b1df1d68cf39a32cfa315862... Author: Vincent Massol <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/test-code-rules.md Log Message: ----------- [Misc] Document S5783 as the checked-exception twin of S5778, and three drop conditions Commit: 60b90ee4a6ac281d7c11d21fb64dbf72c2f4ac23 https://github.com/xwiki/xwiki-dev-llm/commit/60b90ee4a6ac281d7c11d21fb64dbf... Author: Vincent Massol <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/backward-compatibility.md M xwiki/okf/index.md M xwiki/skills/xwiki-legacy/SKILL.md Log Message: ----------- [Misc] Record that Revapi coverage is not uniform per module, and fix the xwiki-legacy verification step * Step 8 of xwiki-legacy claimed the main+legacy build "confirms your ignore". It cannot for a pair like xwiki-platform-oldcore / xwiki-platform-legacy-oldcore: the main module sets xwiki.revapi.skip, and the legacy weaver's own check is green by construction since its jar re-adds whatever the main jar dropped. Following the step therefore produced a green build with no ignore at all, and the break surfaced later on a downstream consumer. Point step 8 at a consumer module instead, run with and without the ignore * Step 5 now says to enumerate the ignore items from the diff rather than from the build, names the platform ignore location next to the commons one, and shows the constructor signature form * Record the underlying fact — Revapi compares transitive dependencies but only reports the classes the primary artifact's API reaches, so a skipped module's break lands on an arbitrary consumer — in the backward-compatibility OKF topic, which the skill now points to Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 99d9fa1393e256a26c8e6ccf3f1ad7c0e2fecee1 https://github.com/xwiki/xwiki-dev-llm/commit/99d9fa1393e256a26c8e6ccf3f1ad7... Author: Vincent Massol <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/backward-compatibility.md M xwiki/okf/index.md M xwiki/skills/xwiki-legacy/SKILL.md Log Message: ----------- [Misc] Record that Revapi coverage is not uniform per module, and fix the xwiki-legacy verification step Commit: fd0af24e73d2573b151c30d94f05821fbd46c921 https://github.com/xwiki/xwiki-dev-llm/commit/fd0af24e73d2573b151c30d94f0582... Author: elenicojocariu <[email protected]> Date: 2026-08-08 (Sat, 08 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation-mechanics.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record the LandingPageClass xobject and the DocumentationClass sweep trap * Landing pages on xwiki.org carry DocApp.Code.LandingPageClass instead of DocumentationClass, and no DocumentationExtensionClass. Both kinds named by the DocGuide's Create Landing Pages use it: the target landing pages (documentation.xs.user / .admin / .dev) and the Diataxis type landing pages nested under each. The class was absent from the documentation-mechanics xobject table, which listed only the three DocumentationClass-family ones. * On a type landing page, type and target are the filter its table applies rather than a classification of the page itself — it lists every page of that type for that audience across documentation.xs, so it normally has no child pages of its own. * Record the audit trap this sets: a sweep selecting pages by DocumentationClass silently skips every landing page, and landing pages carry the tree's most visible Highlights. Auditing the Highlights of documentation.xs.user that way reports "nothing to fix" while missing the one page that needed it — the Explanations landing page, which lists 51 pages and had no Highlights at all. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: ca26e115d0c5c28ac63ac1522e659fe23a2d152d https://github.com/xwiki/xwiki-dev-llm/commit/ca26e115d0c5c28ac63ac1522e659f... Author: Vincent Massol <[email protected]> Date: 2026-08-08 (Sat, 08 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/simplification-rules.md Log Message: ----------- Document S2629 and S3358, and widen the S1130 safe set to private helpers * S1130: a private helper in a test class cannot be overridden by a test-jar consumer, so it is as safe as an annotated test method. Also add the XWiki test-framework hooks (@BeforeComponent) to the safe annotation set. * S2629: the only mechanical shape is a redundant toString() on an argument of an already-parameterized SLF4J call; everything else needs an isXxxEnabled() guard, which is a judgement call. * S3358: extract the inner ternary; exact-negation branches collapse to one local plus a unary minus. Ship it separately, it is a readability judgement. * Denylist javabugs:S2259, S899/S4042, S1948 and S2386, with the reason each looks mechanical but is not. Co-Authored-By: Vincent Massol <[email protected]> Commit: e3243c3ed428f0347b99be8e79b56b6c38197f87 https://github.com/xwiki/xwiki-dev-llm/commit/e3243c3ed428f0347b99be8e79b56b... Author: Vincent Massol <[email protected]> Date: 2026-08-11 (Tue, 11 Aug 2026) Changed paths: M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/skills/xwiki-fix-sonarqube-issue/SKILL.md Log Message: ----------- Deny S2629 and route it to conventions/logging.md instead The S2629 section added in the previous commit was wrong: it advised deleting a redundant toString() from a parameterized log call, which contradicts conventions/logging.md ("Never silently remove an explicit toString()"). In XWiki a log argument is stored as an object and XStream-serialized into the job log, so the eager String is usually a deliberate snapshot. * Move S2629 out of the simplification family and into the index denylist, with a pointer to conventions/logging.md. * Tell the skill that a convention-owned rule's knowledge lives in okf/conventions/, not okf/sonarqube/, so the pointer gets followed. Co-Authored-By: Vincent Massol <[email protected]> Commit: 904b9d67c2c99333fbab6ae0a871585971a10ef7 https://github.com/xwiki/xwiki-dev-llm/commit/904b9d67c2c99333fbab6ae0a87158... Author: Vincent Massol <[email protected]> Date: 2026-08-11 (Tue, 11 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/dead-code-rules.md M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/simplification-rules.md M xwiki/skills/xwiki-fix-sonarqube-issue/SKILL.md Log Message: ----------- [Misc] Document S2629 and S3358, and widen the S1130 safe set to private helpers Commit: 6cba781ba94d1b99b4b0f1861da8fa37ad3d66f4 https://github.com/xwiki/xwiki-dev-llm/commit/6cba781ba94d1b99b4b0f1861da8fa... Author: Vincent Massol <[email protected]> Date: 2026-08-11 (Tue, 11 Aug 2026) Changed paths: M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation-mechanics.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record the LandingPageClass xobject and the DocumentationClass sweep trapa Commit: 42e47a95a94c21d4afbc47a67ac6b39643a8a496 https://github.com/xwiki/xwiki-dev-llm/commit/42e47a95a94c21d4afbc47a67ac6b3... Author: elenicojocariu <[email protected]> Date: 2026-08-11 (Tue, 11 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/index.md M xwiki/okf/servers/index.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Never print ~/.xwiki-credentials — harden the credentials rule * okf/servers/index.md (the single place the rule is stated in full): turn "don't read its contents" into an explicit prohibition — Read/cat/head/less, an ls-then-dump of the directory, and "keys only" probes are all named, because the format being documented there is precisely why opening the file teaches nothing. State what to do instead (test -f for existence, an authenticated /rest GET for validity, sourcing it inside each command so the value never reaches the transcript), and what to do after a leak (disclose and rotate) — the transcript outlives the file. * At the two points of use (xwiki-rest-api, xwiki-doc-writing), only the imperative clause ("never print it", source it inside each command) plus the pointer — no restated recipe. * Nothing added to the always-injected org-wide conventions: the file only matters when writing to xwiki.org (documentation work), not in every session. Commit: eec5cd4a2b3cab7d454e53e4b4885c2b98d28c74 https://github.com/xwiki/xwiki-dev-llm/commit/eec5cd4a2b3cab7d454e53e4b4885c... Author: Vincent Massol <[email protected]> Date: 2026-08-11 (Tue, 11 Aug 2026) Changed paths: M xwiki/okf/index.md M xwiki/okf/servers/index.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Never print ~/.xwiki-credentials — harden the credentials rule Commit: 16b1bf9db8711fbb4726db8dde28d34b0dc6813e https://github.com/xwiki/xwiki-dev-llm/commit/16b1bf9db8711fbb4726db8dde28d3... Author: Vincent Massol <[email protected]> Date: 2026-08-12 (Wed, 12 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M README.md M kimi.plugin.json M opencode.jsonc M scripts/validate.mjs M xwiki/.claude-plugin/plugin.json M xwiki/okf/index.md A xwiki/skills/xwiki-review/SKILL.md Log Message: ----------- [Misc] Add the xwiki-review skill for multi-angle change review * Add `xwiki/skills/xwiki-review/SKILL.md`, a review procedure that fans out one specialist reviewer per angle — conventions, architecture, backward compatibility, defensive conventions, performance, tests, accessibility, i18n/UX, documentation, data & migration, and conformance to the JIRA issue — over a PR, a commit range or the working tree, routing each angle in or out from the changed-file profile. * Keep the rules in the OKF rather than in the skill: each brief names the OKF files and skills to load and what to look at, never what the rule says, so a rule has exactly one home. A paraphrase would drift, and would fail silently — the skeptic in step 5 scores a finding 0 when the cited file does not say what was claimed, so a stale copy makes an angle report nothing rather than report wrongly. Checks with no OKF home are marked skill-owned, as a to-do list for the EXTEND flow. * Gate the output: deduplicate across angles, challenge each finding with an independent skeptic that must open the cited rule and confirm it, drop everything below 80 confidence, cap the report, and open every posted review with a disclaimer that it was generated by Claude Code, may be wrong, and blocks nothing. * Keep the defensive-conventions angle to the mechanisms `okf/conventions/security.md` requires and ban security vocabulary in findings, reasoning and logs alike — public CI logs are public, so the angle reports a missing mechanism and never an attack, per `okf/processes/security-policy.md`. Hunting novel vulnerabilities is explicitly out of scope. * Add invariant 5 to `scripts/validate.mjs`: every `okf/<dir>/<topic>.md` path a skill cites must exist, so a renamed or deleted topic fails CI instead of leaving a reviewer pointing at nothing. * Register the skill in `README.md` and `xwiki/okf/index.md`, and bump the plugin version to 1.0.18 across the Claude, Kimi and opencode manifests. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: d16f556c634e2492581b62fd6b620c62ff489682 https://github.com/xwiki/xwiki-dev-llm/commit/d16f556c634e2492581b62fd6b620c... Author: Vincent Massol <[email protected]> Date: 2026-08-12 (Wed, 12 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M README.md M kimi.plugin.json M opencode.jsonc M scripts/validate.mjs M xwiki/.claude-plugin/plugin.json M xwiki/okf/index.md A xwiki/skills/xwiki-review/SKILL.md Log Message: ----------- [Misc] Add the xwiki-review skill for multi-angle change review Commit: 72daccb50eea3b94f3ffdda86a74a2f70a047f01 https://github.com/xwiki/xwiki-dev-llm/commit/72daccb50eea3b94f3ffdda86a74a2... Author: Vincent Massol <[email protected]> Date: 2026-08-12 (Wed, 12 Aug 2026) Changed paths: M xwiki/skills/xwiki-review/SKILL.md Log Message: ----------- [Misc] Make xwiki-review cite rules at their terminal source * Reviewers must cite the file or page where the rule's words actually are, following pointer skills to the page they link and citing both hops * Reviewers must quote any clause that limits a rule's scope, so a truncated quote cannot make a rule look broader than it is * Skeptics follow one pointer hop before scoring a citation 0, and score the substance when a finding quoted the right page but labelled it with the pointer's path * Skeptics read the whole sentence around a quote, and score 0 when a scope clause the finding omitted is what decides it * The Tests brief names xwiki-test-guidelines as a pointer file and says to fetch the testing strategy page before judging a test-level choice Without this, an angle whose rules live behind a pointer file goes dark: the reviewer has nothing to enforce, and any finding it does produce is scored 0 for a citation that was never checked at its real source. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 09adbed3e5c8d3d96da882b2ef05736db58cb26e https://github.com/xwiki/xwiki-dev-llm/commit/09adbed3e5c8d3d96da882b2ef0573... Author: Vincent Massol <[email protected]> Date: 2026-08-12 (Wed, 12 Aug 2026) Changed paths: M xwiki/skills/xwiki-review/SKILL.md Log Message: ----------- [Misc] Make xwiki-review cite rules at their terminal source Commit: 3d5f77a5e4a90eddcc21c5427dfa38e50c364e72 https://github.com/xwiki/xwiki-dev-llm/commit/3d5f77a5e4a90eddcc21c5427dfa38... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M README.md M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/skills/xwiki-review/SKILL.md Log Message: ----------- [Misc] Make xwiki-review explicit-invocation only * Rewrite the skill description so a plain "review this PR" / "review my changes" request no longer matches it — the eleven-reviewer fan-out costs far more tokens and time than a normal single-pass review, so it must be asked for by name (/xwiki-review, "the full multi-angle review") or invoked by a CI routine. * Add an opt-in paragraph at the top of the skill body so it self-corrects if loaded off a borderline match. * Note the rule in the README skill list. * Bump the plugin version to 1.0.19. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: cc7236856553ae334934dd6062e1fa3e377518f3 https://github.com/xwiki/xwiki-dev-llm/commit/cc7236856553ae334934dd6062e1fa... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/architecture/component-system.md M xwiki/okf/conventions/backward-compatibility.md M xwiki/okf/conventions/code-style.md A xwiki/okf/conventions/dependencies.md M xwiki/okf/conventions/documentation.md A xwiki/okf/conventions/frontend.md A xwiki/okf/conventions/naming.md A xwiki/okf/conventions/translations.md M xwiki/okf/index.md A xwiki/okf/processes/module-lifecycle.md M xwiki/okf/processes/security-policy.md M xwiki/okf/servers/jira.md Log Message: ----------- [Misc] Capture the DevelopmentPractices knowledge in the OKF * Add okf/conventions/naming.md — Maven groupId/artifactId + qualifier meanings, npm packages, xwiki.properties properties, UIXP/UIX ids, skin bird names, icons. * Add okf/conventions/frontend.md — AMD/RequireJS modules, WebJars/JSX, the Velocity-in-minified-JS trap, compatibility.js deprecation, WCAG 2.2 AA. * Add okf/conventions/translations.md — key lifecycle: en_US only, registering a bundle, deprecating/renaming a key, never moving one. * Add okf/conventions/dependencies.md — the checklist a new third-party dependency must pass. * Add okf/processes/module-lifecycle.md — git subtree extract/merge-in, the xwiki-contrib conversion rules, retiring to the Attic, top-level extensions. * code-style: license-header syntax per file type, file-encoding rules, platform macros in Java. * backward-compatibility: the Revapi <criticality> values, two-step deprecation, legacy module locations, the checked-exception exception to default methods, @Unstable build enforcement. * component-system: never grow oldcore, JMX MBeans via JMXBeanRegistration. * servers/jira: fill the documentation and release-note fields when closing an issue. * processes/security-policy: merging a security PR by hand from the advisory's private fork. * documentation: what the rendered DOM does with an ||anchor="…" link parameter. * Update the OKF map and its injected mirror; bump the plugin version to 1.0.20. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: bd12510a274c7d6ed5f311c840cb5a9dab1918c2 https://github.com/xwiki/xwiki-dev-llm/commit/bd12510a274c7d6ed5f311c840cb5a... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md Log Message: ----------- [Misc] Correct the OKF section-anchor entry * Anchors do reach the rendered href; drop the claim that the fragment is only serialized alongside a queryString, and the workaround of putting the section title in the label instead of linking to it * State the two forms: xwiki/2.1 uses the ||anchor="H..." link parameter, xwiki/2.0 appends #H... to the reference itself * Keep the real trap, now scoped to 2.1 only: a #H... suffix on a 2.1 reference is parsed as part of the page name and yields a red link * Note that a page's syntax must be read (REST syntax field) rather than guessed, since the correct form depends on it * Record that cross-wiki references keep their fragment too * Add the XWikiSyntax 2.0 and 2.1 Links sources Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 9d29fe55ae84de569e555d34a9496eaeff128f60 https://github.com/xwiki/xwiki-dev-llm/commit/9d29fe55ae84de569e555d34a9496e... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation.md M xwiki/okf/index.md M xwiki/skills/xwiki-knowledge/SKILL.md Log Message: ----------- [Misc] Correct the image-caption rule and add four documentation conventions * Fix an actively wrong rule: the guide's WCAG page forbids using `caption` to carry the version a screenshot was taken in, which the OKF recommended. * Add the per-type content rules the guide's Apply Diataxis page states and the OKF lacked: a How-to opens on a link to an Explanation, most of its steps carry a screenshot (and the result step's is mandatory), a topic page is an Explanation linking to its Extensions-wiki page, and several routes to one goal means one How-to per route under a choosing Explanation. * Require the page placement to be settled with the developer up front, as concrete alternative page trees — it is the decision the rules under-determine and the most expensive one to undo. * Add the cross-wiki link trap: the xwiki.org subwikis are one farm, so an absolute URL to extensions.xwiki.org renders as an external link and is never indexed as a backlink. * Add the red-box mechanics: an `outline` is clipped by an ancestor with `overflow: hidden`, so the box must be a body-level overlay, and the saved PNG must be checked for a closed rectangle. * Titles must not repeat the audience, only the page type was covered. * Fix the stale DocGuide/ApplyDiataxis URLs (the page moved under Diataxis/). * Add a "Minimal" gate to the xwiki-knowledge EXTEND checklist: the OKF is read into context, so every added line costs tokens in every session. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: b5e5d4814e35128a8ad12f3932d8fce0416b1578 https://github.com/xwiki/xwiki-dev-llm/commit/b5e5d4814e35128a8ad12f3932d8fc... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation.md M xwiki/okf/index.md M xwiki/skills/xwiki-knowledge/SKILL.md Log Message: ----------- [Misc] Correct the image-caption rule and add four documentation conventions Commit: 05754327a7e8884c0f8c60007d4cac913eadfa14 https://github.com/xwiki/xwiki-dev-llm/commit/05754327a7e8884c0f8c60007d4cac... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md A xwiki/skills/xwiki-doc-writing/tools/README.md A xwiki/skills/xwiki-doc-writing/tools/checkredbox.py A xwiki/skills/xwiki-doc-writing/tools/docpages.py A xwiki/skills/xwiki-doc-writing/tools/docshot.sh A xwiki/skills/xwiki-doc-writing/tools/xwikidoc.py M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Add documentation authoring tools to the xwiki-doc-writing skill * Add tools/xwikidoc.py, a REST client for the farm that keeps a cookie jar because the form token is session-bound, and whose write helpers read every field back. * Add tools/docpages.py with lint | save | pin | verify over a page set held as a Python data module: the mechanical rules of documentation.md offline, an idempotent publish, child-order pinning verified through the tree service, and an audit covering both doc-checker surfaces. * Add tools/docshot.sh and tools/checkredbox.py: capture at a `size` width with the red box drawn as a body-level overlay, and prove the saved PNG holds a closed rectangle. * Add tools/README.md documenting the page-set contract and, per step, the silent failure it protects against. * Point xwiki-doc-convert and xwiki-rest-api at the tools, and drop the stale advice in xwiki-doc-writing that the capture version belongs in an image caption. * Record that placement is confirmed with the developer as written-out page trees before the first page is created. Verified against the 11-page AntiSpam documentation tree: lint and verify report 0 problems, save is a no-op on an unchanged tree, pin reproduces the displayed order, and checkredbox passes all 19 screenshots. A synthetic bad page set fires every lint rule. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: e33d87f9f2e80a9e8a86ea76015921591c3a7cdf https://github.com/xwiki/xwiki-dev-llm/commit/e33d87f9f2e80a9e8a86ea76015921... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md A xwiki/skills/xwiki-doc-writing/tools/README.md A xwiki/skills/xwiki-doc-writing/tools/checkredbox.py A xwiki/skills/xwiki-doc-writing/tools/docpages.py A xwiki/skills/xwiki-doc-writing/tools/docshot.sh A xwiki/skills/xwiki-doc-writing/tools/xwikidoc.py M xwiki/skills/xwiki-rest-api/SKILL.md Log Message: ----------- [Misc] Add documentation authoring tools to the xwiki-doc-writing skill Commit: a89d7b51d8ba5c35c23eae1840059b78ce0dc25d https://github.com/xwiki/xwiki-dev-llm/commit/a89d7b51d8ba5c35c23eae1840059b... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation.md M xwiki/okf/index.md Log Message: ----------- [Misc] Capture when an absolute xwiki.org URL is the correct form * Qualify the "never link a farm page by URL" rule with the nine cases where an absolute xwiki.org URL is right: outside-facing pages, extension-shipped pages, third-party form values, verbatim records, the URL as subject matter, verbatim/code blocks, non-page resources, non-view actions or query strings, and targets that do not exist yet * Record that a `url:` prefix on the target is not one of them — it is what the WYSIWYG editor emits when a URL is pasted, on internal and external links alike * Keep the always-injected map addition to a short parenthetical Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: d7043b34e16ad2d59c2f5f6b89744b208547a0a0 https://github.com/xwiki/xwiki-dev-llm/commit/d7043b34e16ad2d59c2f5f6b89744b... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/instructions/xwiki-org.md M xwiki/okf/conventions/documentation.md M xwiki/okf/index.md Log Message: ----------- [Misc] Capture when an absolute xwiki.org URL is the correct form Commit: ff1f7f8d15ce390eed2c7d7a4d11785398b5482b https://github.com/xwiki/xwiki-dev-llm/commit/ff1f7f8d15ce390eed2c7d7a4d1178... Author: elenicojocariu <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md Log Message: ----------- [Misc] Add a documentation style rule against overusing em dashes * okf/conventions/documentation.md: new "Documentation style" bullet. The em dash is not a substitute for a comma, period, colon or parentheses; keep it for a sharp interruption or a genuine aside. Exception: em dashes inside a direct quote stay verbatim. Frontmatter summary extended to mention the rule, since that text decides whether the file gets read. * skills/xwiki-doc-writing: added the rule to the step 7 style list, plus a Punctuation item in the review checklist. * skills/xwiki-doc-convert: added it to step 6, scoped to the sentences carried over from the legacy page, plus a matching "Verify the conversion" bullet. * Bumped the plugin version to 1.0.17 (patch, content edit) in all four host manifests. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 12eb3a1965c2a243d8907fe43b24b683a5e18408 https://github.com/xwiki/xwiki-dev-llm/commit/12eb3a1965c2a243d8907fe43b24b6... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-convert/SKILL.md M xwiki/skills/xwiki-doc-writing/SKILL.md Log Message: ----------- [Misc] Add a documentation style rule against overusing em dashes Commit: f4c48c7f6da38ea865709b045f97f55e5b98f65e https://github.com/xwiki/xwiki-dev-llm/commit/f4c48c7f6da38ea865709b045f97f5... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/index.md M xwiki/okf/testing/strategy.md M xwiki/skills/xwiki-test-guidelines/SKILL.md Log Message: ----------- [Misc] Capture the page-object boundary rule for functional tests * okf/testing/strategy.md: new "No getDriver() in a test" durable rule. A functional test drives the UI only through page objects; needing getDriver() (or a raw findElement / By lookup / getCssValue on top of it) in the test class means an API is missing from a page object. Which page object gets it follows from what a page object is: it represents a real XWiki page and the actions that can be performed on that page. So widen or add the method on the page object of the page under test (widening an already-private helper to public counts) rather than creating a page object for a page the test itself creates as a fixture. Test-specific data, such as the wiki content given to that fixture page, stays in the test. Frontmatter summary extended, since that text decides whether the file gets read. * skills/xwiki-test-guidelines: added a one-line functional-test bullet pointing at the rule, since that skill is what gets loaded when writing a test. * okf/index.md: mentioned the rule in the testing/strategy line. * Bumped the plugin version to 1.0.26 (patch, content edit) in all five synced fields. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 6527a0d3d83104423547d59cecf5f839c8b0e983 https://github.com/xwiki/xwiki-dev-llm/commit/6527a0d3d83104423547d59cecf5f8... Author: Vincent Massol <[email protected]> Date: 2026-08-13 (Thu, 13 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/index.md M xwiki/okf/testing/strategy.md M xwiki/skills/xwiki-test-guidelines/SKILL.md Log Message: ----------- [Misc] Capture the page-object boundary rule for functional tests Commit: 5c91e0839ee6a2cb47bdb9facf42667b6850de3a https://github.com/xwiki/xwiki-dev-llm/commit/5c91e0839ee6a2cb47bdb9facf4266... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/syntax-rules.md Log Message: ----------- [Misc] Correct the S3252 denylist entry: it is not an API change * java:S3252 asks only that a static member be qualified with the class that declares it. Nothing is declared, renamed or re-typed, so the previous denylist reason (backward-compat-bearing public API) was wrong. * Document it in syntax-rules next to its sibling S2209, with the two batch mechanics it needs and the one real drop condition (the derived type being an XWiki utility subclass such as org.xwiki.text.StringUtils). Co-Authored-By: Vincent Massol <[email protected]> Commit: 3b99c44b4dd15b93488e3a03263fcdce1a9e6b56 https://github.com/xwiki/xwiki-dev-llm/commit/3b99c44b4dd15b93488e3a03263fcd... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-doc-writing/tools/README.md M xwiki/skills/xwiki-doc-writing/tools/docshot.sh Log Message: ----------- [Misc] Capture how a documentation screenshot is framed * okf/conventions/documentation.md: new durable rule next to the screenshot standards. A step's screenshot carries the element to act on plus the nearest landmark that fixes its position (the panel holding it, the screen title above it, the list it follows) and nothing else, the test being whether a reader without the UI in front of them still knows where the action happens. Only a procedure's entry step keeps the surrounding chrome. The `size` follows from the region framed rather than the region being stretched to fill a size, and the existing capture-width bullet now says the width comes from *cropping* a region, not from shrinking a wider capture — which is also why a whole-window shot at `extra` is the blurriest of the options. The red box marks what the step asks for: on a "review the listed accounts" step it belongs around the list, not around the button under it. * skills/xwiki-doc-writing: framing added to the attachment step and as its own review-checklist item, since a page whose every step repeats the same window passes every other check. * skills/xwiki-doc-writing/tools/docshot.sh: takes `x,y,w,h` as the capture target, so a region can be shot at the exact `size` width without resampling; a narrower region is refused rather than upscaled into blur. Two traps documented in tools/README.md, because both fail silently: the CLI has no `--clip` (hence a transparent clip element) and macOS `sips -c` crops from the centre with `--cropOffset` as a no-op, which saves a plausible PNG of the wrong part of the page. A box selector may be prefixed `union:` for one box around several elements, and the box padding is now symmetric — it used to sit flush against the element's right and bottom edges. * Bumped the plugin version to 1.0.27 (patch, content edit) in all five synced fields. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 79d93f793524887ac27a5e7bf6e8046e3fcc7dd3 https://github.com/xwiki/xwiki-dev-llm/commit/79d93f793524887ac27a5e7bf6e804... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M xwiki/skills/xwiki-doc-writing/tools/docshot.sh Log Message: ----------- [Misc] Centre a documentation screenshot's red box on the element it marks * skills/xwiki-doc-writing/tools/docshot.sh: the box geometry was written for `content-box`, but Bootstrap applies `border-box` to every element in XWiki, so the declared width was the outer width and every box came out half a border off-centre: measured on a live page, a 4px gap on the left and top and the border painted 2px *over* the content on the right and bottom, which sliced the text it was meant to mark. `boxSizing` is now set rather than assumed and the width derives from the gap, giving an equal margin on all four sides. * The margin is `GAP` (default 6) and can be overridden per shot, because a target whose own box already carries the clearance needs none: a row of a densely stacked list is a line box whose leading holds the glyphs well inside it, and its neighbours touch it exactly, so adding to it puts the border through the rows above and below. `GAP=0` there. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 017e8b76e310ec2f52c2fed552178644fba987ce https://github.com/xwiki/xwiki-dev-llm/commit/017e8b76e310ec2f52c2fed5521786... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-doc-writing/tools/README.md M xwiki/skills/xwiki-doc-writing/tools/docshot.sh Log Message: ----------- [Misc] Capture how a documentation screenshot is framed Commit: a2d22fd6dfd99b5661c62447ed4cbc41a688cbe7 https://github.com/xwiki/xwiki-dev-llm/commit/a2d22fd6dfd99b5661c62447ed4cbc... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-doc-writing/tools/README.md M xwiki/skills/xwiki-doc-writing/tools/docpages.py Log Message: ----------- [Misc] Give duplicated documentation content a visible home, not a hidden one * okf/conventions/documentation.md: the surviving copy of content repeated across pages wants a page of the tree in its own right, not a hidden `{{display}}` fragment — a visible page is reachable from the navigation panel and from search, answers a reader goal on its own, and cannot be re-duplicated by a later author who fails to notice the content is shared. Which restructure achieves that depends on the content: a navigation step every sibling How-to opens with becomes its own How-to that each links to, a page whose section is repeated elsewhere splits into two smaller pages. `{{display}}` is now scoped to the case where no such restructure exists. Repeated steps are called out as the ones to hunt first, since a step drags its screenshot with it and the copies then drift apart. The guide states the avoid-duplication rule and gives `{{display}}` as its mechanism but not this preference, which the bullet says is worth adding upstream. The de-duplication bullet gains the two comparisons that need no judgement: the siblings' step 1, and the tree's attachment names. * skills/xwiki-doc-writing: those two comparisons open the de-duplication pass, and both are a review-checklist item — a tree can duplicate one step four times and still pass every existing check. * skills/xwiki-doc-writing/tools/docpages.py: two cross-page lint checks, since neither defect is visible while linting one page at a time. A repeated opening step counts only when it carries a screenshot: the one-line link that replaces it is meant to read identically on every page, so matching on the text alone flags the fix as the defect. * Bumped the plugin version to 1.0.28 (patch, content edit) in all five synced fields. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 38a02f8a110430bc0ba12d05980f616f525c4644 https://github.com/xwiki/xwiki-dev-llm/commit/38a02f8a110430bc0ba12d05980f61... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M xwiki/okf/sonarqube/index.md M xwiki/okf/sonarqube/syntax-rules.md Log Message: ----------- [Misc] Correct the S3252 denylist entry: it is not an API change Commit: 6bd027a35ba55942d9fe74d7f2585c836cda36b4 https://github.com/xwiki/xwiki-dev-llm/commit/6bd027a35ba55942d9fe74d7f2585c... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md M xwiki/skills/xwiki-doc-writing/SKILL.md M xwiki/skills/xwiki-doc-writing/tools/README.md M xwiki/skills/xwiki-doc-writing/tools/docpages.py Log Message: ----------- [Misc] Give duplicated documentation content a visible home, not a hidden one Commit: 70f2afdc9dd44eb2279a486e4b111d9c1cf0bdc3 https://github.com/xwiki/xwiki-dev-llm/commit/70f2afdc9dd44eb2279a486e4b111d... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/skills/xwiki-build/SKILL.md Log Message: ----------- [Misc] Document the host port clash when running Docker-based ITs * Add a "Docker ITs" subsection to the xwiki-build skill: JETTY_STANDALONE runs XWiki on the host and binds 8080/8079, so an XWiki already listening there makes the test drive that instance and fail in beforeAll with a 401 while provisioning extensions. Only stop the instance when the session started it; otherwise run the whole stack in Docker (tomcat + pgsql). * Bump the plugin version to 1.0.29. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: a0a78a51286f2caba6669b3d0841cc35ebfa7206 https://github.com/xwiki/xwiki-dev-llm/commit/a0a78a51286f2caba6669b3d0841cc... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/skills/xwiki-build/SKILL.md Log Message: ----------- [Misc] Document the host port clash when running Docker-based ITs Commit: 2fabf6bda43d8362231c6c7c868906a4a7ef8c76 https://github.com/xwiki/xwiki-dev-llm/commit/2fabf6bda43d8362231c6c7c868906... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md Log Message: ----------- [Misc] Drop the unsupported figure/figureCaption documentation rule * The "Tables and figures are wrapped in the figure + figureCaption macros" bullet was attributed to the Documentation Guide's "Working with Attachments" page, which does not mention figures at all; neither do DocumentationStyle, PageStructure or ApplyDiataxis. * The documentation tree does not follow it either: of 300 pages sampled under documentation.*, 41 hold a table and 35 an image, and none uses the figure macros. * It was reported as a review finding against a conforming page tree, so it costs a reviewer's time and produces wrong findings. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: dfe76663221af25ea4b0ecd26b1d78090926409d https://github.com/xwiki/xwiki-dev-llm/commit/dfe76663221af25ea4b0ecd26b1d78... Author: Vincent Massol <[email protected]> Date: 2026-08-14 (Fri, 14 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/documentation.md Log Message: ----------- [Misc] Drop the unsupported figure/figureCaption documentation rule Commit: f1455de73227708dc9b36049c666e1bc173cdcbd https://github.com/xwiki/xwiki-dev-llm/commit/f1455de73227708dc9b36049c666e1... Author: Vincent Massol <[email protected]> Date: 2026-08-16 (Sun, 16 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/security.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record which right each scripting language requires * Only Velocity runs on Script Right; every other scripting language also requires Programming Right of the script author, the exception being Groovy with the Secure Groovy Customizer enabled (off by default). * Note the trap that a script service is callable with Script Right alone, so exposing an operation there puts it behind a lower bar than a Groovy macro. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Commit: 8fb7df39d6522b6985c21796cdf31f2ec364ef7f https://github.com/xwiki/xwiki-dev-llm/commit/8fb7df39d6522b6985c21796cdf31f... Author: Vincent Massol <[email protected]> Date: 2026-08-16 (Sun, 16 Aug 2026) Changed paths: M .claude-plugin/marketplace.json M kimi.plugin.json M opencode.jsonc M xwiki/.claude-plugin/plugin.json M xwiki/okf/conventions/security.md M xwiki/okf/index.md Log Message: ----------- [Misc] Record which right each scripting language requires Compare: https://github.com/xwiki/xwiki-dev-llm/compare/ba453dde6bc1...8fb7df39d652 To unsubscribe from these emails, change your notification settings at https://github.com/xwiki/xwiki-dev-llm/settings/notifications