[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ACFB92SPADF0FY4490B847":3,"skill-same:01M6ACFB92SPADF0FY4490B847":140},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":6,"updatedAt":53,"install":54,"resources":67},"01M6ACFB92SPADF0FY4490B847","update-site-for-release",null,"Update\u002Fpublish the Apache Tika website (tika-site SVN repo) for a release — step 17 of the Release Process. Handles the 4.x track (Changes page + aggregate javadoc + Antora docs branch) vs the 3.x maintenance track (full per-version apt docs + javadoc). Use for \"update the site\", \"publish the site for X.Y.Z\", \"the website part of the release\".","apache\u002Ftika","apache","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F47359?v=4","01M6AC83E6K4FDKK7HZ8WNMQKE","The Apache Software Foundation","01M6ACEMPJD6J74AGZBFFEGEYV",4145,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Fupdate-site-for-release\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,9,39],"update","release","for","update site for release","site","page","track","changes","svn","full","maintenance","version","use","repo","branch","docs","publish","apt","website","tika","release process","2026-11-10 10:12:30",false,"---\nname: update-site-for-release\ndescription: >\n  Update\u002Fpublish the Apache Tika website (tika-site SVN repo) for a release —\n  step 17 of the Release Process. Handles the 4.x track (Changes page +\n  aggregate javadoc + Antora docs branch) vs the 3.x maintenance track (full\n  per-version apt docs + javadoc). Use for \"update the site\", \"publish the\n  site for X.Y.Z\", \"the website part of the release\".\n---\n\n\u003C!--\nLicensed to the Apache Software Foundation (ASF) under one or more\ncontributor license agreements.  See the NOTICE file distributed with\nthis work for additional information regarding copyright ownership.\nThe ASF licenses this file to You under the Apache License, Version 2.0\n(the \"License\"); you may not use this file except in compliance with\nthe License.  You may obtain a copy of the License at\n\n    http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\nLocal override: `$TIKA_SKILLS_LOCAL\u002Fupdate-site-for-release\u002FLOCAL.md` (default `~\u002F.tika-skills`),\nread after this file, wins on conflict.\n\n# Update the Tika website for a release\n\nStep 17 (\"Update Tika site\") of the Release Process\n(\u003Chttps:\u002F\u002Fcwiki.apache.org\u002Fconfluence\u002Fspaces\u002FTIKA\u002Fpages\u002F109454070\u002FRelease+Process>).\nAssumes the release (tag, artifacts, VOTE, dist promotion) is done; covers the\n**website** only.\n\n**First: `cd $SITE && svn update`.** The checkout is usually behind (docs\nrepublishes, logo\u002Fsecurity edits land between releases); a stale base only\nsurfaces at the very end, after the 67 MB commit has uploaded, as\n`E155011 ... is out of date`, and the whole transaction rolls back.\n\nSet these first:\n- **`$SITE`** — `tika-site` **SVN** checkout (not git): `src\u002Fsite\u002F` (sources) +\n  `publish\u002F` (generated, SVN-tracked, served; `mvn install` regenerates it and\n  auto-runs `svn add --force publish` via antrun).\n- **`$SCRATCH`** — release working dir: unzipped src release, `CHANGES-\u003CNEW>.txt`,\n  built javadoc.\n\nScripts: `.skills\u002Fdevs\u002Fupdate-site-for-release\u002Fscripts\u002F` in the tika git repo\n(not `$SITE\u002Fscripts` — there is none). Local paths + toolchain (Maven binary, JDKs) live in a\nprivate companion skill under `~\u002F.claude\u002Fskills\u002F`.\n\n> **[HUMAN] gates — never do these yourself:** final `svn commit` (outward-facing,\n> irreversible), JIRA \"release\", s.apache.org shortlink, announce emails. Prepare\n> everything, show `svn status`, hand off.\n\n---\n\n## 0. Inputs + release track\n\nTwo supported tracks since 4.0.0 (2026-08-21): **4.x** is the current line,\n**3.x** is the maintenance line. Which track a release is on decides the\nprocess; both tracks are \"stable\" — there is no preview slot unless a future\n5.x preview reintroduces one.\n\n| Input | Example | Notes |\n|---|---|---|\n| `NEW_VERSION` | `4.0.1` | the release |\n| `RELEASE_TRACK` | `4.x` | `4.x` or `3.x` (maintenance) |\n| `PREV_TAG` \u002F `NEW_TAG` | `4.0.0-rc1` \u002F `4.0.1` | git tags, for the GitHub contributor query |\n| `JIRA fixVersion` | `4.0.1` | **may differ** from the label (pre-releases often use the base version) |\n| `CHANGES` file | `$SCRATCH\u002FCHANGES-4.0.1.txt` | notable-changes source |\n| src release zip | `tika-\u003CNEW>-src.zip` | javadoc source (both tracks) |\n| release date | `2026-08-21` | doap.rdf + news blurb |\n\nConfirm current values in `pom.xml` (repo root — `tika.stable.version` = 4.x\nline, `tika.maintenance.version` = 3.x line).\n\n**Before starting, check the final git tag exists** (`git ls-remote --tags\nhttps:\u002F\u002Fgithub.com\u002Fapache\u002Ftika | grep \u003CNEW>`). The vote passes on an `-rcN` tag\nand nothing creates the plain `\u003CNEW>` tag; 4.1.0 shipped with only `4.1.0-rc3`.\nAsk the RM to tag the rc commit (`git tag \u003CNEW> \u003CNEW>-rcN^{}` + push) — the\ncontributor query, the docs branch and the next release's `PREV_TAG` all want it.\nUntil then use the rc tag for `--tag`. **Refresh rc tags from apache first**\n(`git fetch --force apache 'refs\u002Ftags\u002F\u003CNEW>-rc*:refs\u002Ftags\u002F\u003CNEW>-rc*'`): a\nclone that fetched a fork can hold a stale `-rcN` pointing at a different\ncommit (4.2.0-rc2 did), and branching\u002Ftagging from it is silently wrong.\n\n**Check the CHANGES file name in `dist\u002Frelease\u002Ftika\u002F\u003CNEW>\u002F`.** The download\npage and news links assume `CHANGES-\u003CNEW>.txt`; 4.2.0 was promoted as plain\n`CHANGES.txt` (download link 404s). Ask the RM to `svn cp` it to\n`CHANGES-\u003CNEW>.txt` in dist rather than special-casing the site.\n\n| Step | 4.x track | 3.x maintenance track |\n|---|---|---|\n| `pom.xml` `\u003Cparent>\u003Cversion>` | leave at newest 3.x | → `\u003CNEW>` (must stay a 3.x parent — Java 11 build) |\n| `pom.xml` `tika.stable.version` | → `\u003CNEW>` | leave |\n| `pom.xml` `tika.maintenance.version` | leave | → `\u003CNEW>` |\n| `src\u002Fsite\u002Fapt\u002F\u003CNEW>\u002F` | **only `index.apt`** (Changes) | full 8-file set (scaffold from prev 3.x) |\n| `site.xml` entry | sub-menu linking `docs\u002F\u003CX.Y>.x\u002F` pages + Changes + api | full legacy sub-menu, expanded |\n| formats.apt | n\u002Fa — `docs\u002F...\u002Fformats.adoc`; its generated partial is test-enforced | regenerate from `tika-app` jar |\n| javadoc | `clean install -Pfast` + `javadoc:aggregate` → `publish\u002F\u003CNEW>\u002Fapi` (step 7) | same |\n| Antora docs | new minor → new `docs\u002F\u003CX.Y>.x` branch; patch → republish same branch (step 7) | n\u002Fa |\n| Download page | automatic | automatic |\n\ndoap.rdf, index.apt.vm news, verify, publish are common to both.\n\nURL scheme (decided 2026-08-19): Antora docs are per-minor (`\u002Fdocs\u002F4.0.x\u002F`);\nthe apt Changes page and javadoc are per-release (`\u002F4.0.0\u002F`, `\u002F4.0.0\u002Fapi\u002F`) —\njavadocs are exact-version artifacts.\n\n---\n\n## 1. `pom.xml` versions (repo root)  [AGENT]\n\n- **4.x:** bump `\u003Ctika.stable.version>` to `\u003CNEW>`.\n- **3.x:** bump `\u003Ctika.maintenance.version>` **and** `\u003Cparent>\u003Cversion>` to `\u003CNEW>`.\n- `\u003Cparent>` supplies build config only (no site content references it since\n  4.0.0). It must stay on the newest **3.x** parent: the 4.x parent enforces\n  Java 17, but maven-site-plugin 3.4 needs the Java 11 build (step 8).\n\nDownload page auto-reads these — no manual edit. (`download.apt.vm` also derives\n`$docsLine` = `4.1.x` from `tika.stable.version` for its Antora links; check the\nartifact list against `dist\u002Frelease\u002Ftika\u002F\u003CNEW>\u002F` if the distribution set changed.)\n\n---\n\n## 2. `src\u002Fsite\u002Fsite.xml` menu  [AGENT]\n\nCurrent 4.x + current 3.x expanded; older = `collapse=\"true\"`.\n\n- **4.x, new minor:** new expanded block at the top; links go into the Antora\n  tree plus the per-release Changes\u002Fapi (repoint `docs\u002F\u003Cold>.x` → `docs\u002F\u003Cnew>.x`\n  when a new minor supersedes; a patch release only updates the Changes\u002Fapi\n  version numbers in the hrefs):\n  ```xml\n  \u003Citem name=\"Apache Tika 4.0.0\" href=\"docs\u002F4.0.x\u002Findex.html\">\n    \u003Citem name=\"Documentation Home\" href=\"docs\u002F4.0.x\u002Findex.html\"\u002F>\n    \u003Citem name=\"Supported Formats\" href=\"docs\u002F4.0.x\u002Fformats.html\"\u002F>\n    \u003Citem name=\"Using Tika\" href=\"docs\u002F4.0.x\u002Fusing-tika\u002Findex.html\"\u002F>\n    \u003Citem name=\"Getting Started (Java API)\" href=\"docs\u002F4.0.x\u002Fusing-tika\u002Fjava-api\u002Fgetting-started.html\"\u002F>\n    \u003Citem name=\"Pipes\" href=\"docs\u002F4.0.x\u002Fpipes\u002Findex.html\"\u002F>\n    \u003Citem name=\"Configuration\" href=\"docs\u002F4.0.x\u002Fconfiguration\u002Findex.html\"\u002F>\n    \u003Citem name=\"Migrating to Tika 4.x\" href=\"docs\u002F4.0.x\u002Fmigration-to-4x\u002Findex.html\"\u002F>\n    \u003Citem name=\"Changes\" href=\"4.0.0\u002Findex.html\"\u002F>\n    \u003Citem name=\"API Documentation\" href=\"4.0.0\u002Fapi\u002F\"\u002F>\n  \u003C\u002Fitem>\n  ```\n- **3.x:** new expanded block above the previous 3.x; add `collapse=\"true\"`\n  to the old block:\n  ```xml\n  \u003Citem name=\"Apache Tika 3.3.2\" href=\"3.3.2\u002Findex.html\">\n    \u003Citem name=\"Getting Started\"                href=\"3.3.2\u002Fgettingstarted.html\"\u002F>\n    \u003Citem name=\"Supported Formats\"              href=\"3.3.2\u002Fformats.html\"\u002F>\n    \u003Citem name=\"Parser API\"                     href=\"3.3.2\u002Fparser.html\"\u002F>\n    \u003Citem name=\"Parser 5min Quick Start Guide\"  href=\"3.3.2\u002Fparser_guide.html\"\u002F>\n    \u003Citem name=\"Content and Language Detection\" href=\"3.3.2\u002Fdetection.html\"\u002F>\n    \u003Citem name=\"Configuring Tika\"               href=\"3.3.2\u002Fconfiguring.html\"\u002F>\n    \u003Citem name=\"Usage Examples\"                 href=\"3.3.2\u002Fexamples.html\"\u002F>\n    \u003Citem name=\"API Documentation\"              href=\"3.3.2\u002Fapi\u002F\"\u002F>\n  \u003C\u002Fitem>\n  ```\n\n---\n\n## 3. Per-version apt docs `src\u002Fsite\u002Fapt\u002F\u003CNEW>\u002F`  [AGENT]\n\n**4.x** — create only `index.apt` (the Changes page; title `Apache Tika \u003CNEW>`;\nfill step 4). No other apt files — everything else lives in the Antora docs.\n\n**3.x** — scaffold (these docs are version-string-identical across 3.x):\n```bash\n.\u002Fscripts\u002Fscaffold-stable-version.sh $SITE 3.3.1 3.3.2\n```\nCopies+bumps `configuring\u002Fdetection\u002Fexamples\u002Fparser\u002Fparser_guide\u002Fgettingstarted.apt`. Then:\n- **formats.apt** — two parts: a hand-written top (license, intro, `%{toc}`, ~25\n  prose format-family sections) down to the header line\n  `Full list of Supported Formats in \"standard\" artifacts`, then a generated flat\n  list below it. `--list-parser-details-apt` regenerates only the flat part. Copy\n  prev `formats.apt`, bump versions, replace everything **below** that header:\n  ```bash\n  java -jar \u003Cpath>\u002Ftika-app-\u003CNEW>.jar --list-parser-details-apt\n  ```\n  **Do NOT truncate at the `%{toc}` line** — keep the prose sections. (Scaffold\n  skips `formats.apt` for this reason.)\n- **index.apt** — step 4.\n\n\n\n---\n\n## 4. Per-version `index.apt`: notable changes + contributors  [AGENT + HUMAN]\n\nShape (see `src\u002Fsite\u002Fapt\u002F3.3.1\u002Findex.apt`): license+title; \"most notable changes…\"\nbullets; \"The following people have contributed…\" bullets; \"See\n{{https:\u002F\u002Fs.apache.org\u002FXXXX}} …\".\n\n**Notable changes** — review output, keep only notable items:\n```bash\n.\u002Fscripts\u002Fextract-tika-issues.py CHANGES-3.3.2.txt out-3.3.2.apt 3.3.2\n```\nMirrors CHANGES verbatim; TIKA-####\u002FGithub-#### auto-linked; ALL-CAPS headers\n(incl. `SERVER, PIPES AND OPERATIONS`, `INFERENCE (EXPERIMENTAL)`) → apt sections;\napt markup chars in prose (`\u003C= 0`, `type->parser`, `{x}`, `[]`, `~35%`) are\nbackslash-escaped — an unescaped `\u003C` fails the site build with\n`Error parsing '...\u002Findex.apt': line [N] missing '>'`; output is wrapped at 78\ncols without splitting hyphenated words or links.\n\n**Contributors** — candidate list, RM curates:\n```bash\n.\u002Fscripts\u002Fextract-tika-contribs.py 3.3.2 --prev-tag 3.3.1 --tag 3.3.2 > contribs.txt\n# beta (fixVersion differs from label):\n# .\u002Fscripts\u002Fextract-tika-contribs.py 4.0.0 --prev-tag 3.3.1 --tag 4.0.0-beta-1\n```\nMerges JIRA (reporters\u002Fassignees\u002Fcomment authors) + GitHub commit\u002FPR authors\n(uses `gh` auth; resolves logins→names; case-insensitive sort; filters bots\u002FAI).\nOver-reports drive-by commenters, misses GitHub-issue-only commenters. **[HUMAN]**\nprune \u002F normalise \u002F add.\n\n**Shortlink [HUMAN]** — `s.apache.org\u002FXXXX` → the JIRA \"issues fixed in \u003CNEW>\"\nquery; needs s.apache.org login. Ask the RM.\n\n---\n\n## 5. `src\u002Fsite\u002Fresources\u002Fdoap.rdf`  [AGENT]\n\nNew `\u003Crelease>` at the top. Ordering is by **date, not version** (a stable point\nrelease can sit above an older-dated preview — 3.3.2\u002FJul-16 above 4.0.0-beta-1\u002FJul-3):\n```xml\n      \u003Crelease>\n        \u003CVersion>\n          \u003Cname>Apache Tika 3.3.2\u003C\u002Fname>\n          \u003Ccreated>2026-07-21\u003C\u002Fcreated>\n          \u003Crevision>3.3.2\u003C\u002Frevision>\n        \u003C\u002FVersion>\n      \u003C\u002Frelease>\n```\n\n---\n\n## 6. Home page `src\u002Fsite\u002Fapt\u002Findex.apt.vm`  [AGENT + HUMAN]\n\n1. New **Latest News** block at the top; its CHANGES link uses\n   `dist.apache.org\u002Frepos\u002Fdist\u002Frelease\u002F...` (live mirror):\n   ```\n   [21 July 2026: Apache Tika Release]\n    Apache Tika 3.3.2 has been released! \u003Cone or two sentence summary>.\n    Please see the {{{https:\u002F\u002Fdist.apache.org\u002Frepos\u002Fdist\u002Frelease\u002Ftika\u002F3.3.2\u002FCHANGES-3.3.2.txt}CHANGES.txt}}\n    file for the full list of changes in the release and have a look at the download page for more information\n    on how to obtain Apache Tika 3.3.2.\n   ```\n2. **Repoint the superseded release's CHANGES link** (its artifacts get `svn rm`'d\n   from the live mirror at release): `dist.apache.org\u002Frepos\u002Fdist\u002Frelease\u002Ftika\u002F\u003CPREV>\u002F…`\n   → `archive.apache.org\u002Fdist\u002Ftika\u002F\u003CPREV>\u002F…`. **[HUMAN]** confirm which version was\n   removed.\n\n---\n\n## 7. Docs \u002F Javadoc\n\n**Javadoc — both tracks [AGENT].** NOT the wiki's `javadoc:aggregate-no-fork` (runs\nagainst `tika-parent`, its relative `\u003Csourcepath>` fails → `No source files for\npackage org.apache.tika`; wrong goal, not a JDK issue). From the unzipped src\nrelease (its `.\u002Fmvnw` is broken — use system `mvn`):\n```bash\nunzip tika-3.3.2-src.zip && cd tika-3.3.2\nmvn clean install -Pfast        # ~4 min; module artifacts + full dep classpath\nmvn javadoc:aggregate           # FORKING goal (NOT -no-fork)\nmkdir -p $SITE\u002Fpublish\u002F3.3.2\nmv target\u002Freports\u002Fapidocs $SITE\u002Fpublish\u002F3.3.2\u002Fapi\n```\nBoth steps matter: without `install` javadoc dies on `package org.slf4j does not\nexist`; the forking `aggregate` (@aggregator) runs once on the root, `-no-fork`\nbreaks per-`pom`-module. 3.x: any modern JDK (11 and 25 verified); 4.x: Java 17+\n(21 verified on 4.1.0, ~3,900 html \u002F 67 MB). A `-Pfast` install that prints a\nFelix\u002FOSGi stack trace still succeeds — check the `\u003CNEW>` artifacts landed in the\nlocal repo, not the tail of the log. (`tika-server`\nmiredot docs discontinued — skip.)\n\n**4.x — Antora docs [AGENT].** Built from the tika git repo (main checkout),\nnot the src zip — the playbook pulls every `docs\u002F{0..9}*` branch as a content\nsource. New minor: create `docs\u002F\u003CX.Y>.x` from the tag (or main), set\n`version: '\u003CX.Y>.x'` + `tika-version` and `tika-javadoc-url` attributes in that\nbranch's `docs\u002Fantora.yml`, and make sure main's antora.yml has `prerelease: true`\n**and its `version`\u002F`tika-version` match main's new `\u003Crevision>`** (the release\nplugin bumps the poms, not antora.yml — after 4.1.0 main was `4.1.1-SNAPSHOT` in\n`tika-parent\u002Fpom.xml` but still `4.1.0-SNAPSHOT` in antora.yml) [HUMAN commits].\nAlso bump main's `tika-javadoc-url` and `docs\u002Fantora-playbook.yml`'s soft\ndefaults (`tika-version`, `tika-stable-version` = newest 3.x, `tika-javadoc-url`):\nthe playbook is read only from HEAD, so nothing else keeps it current (it was\nstill at 4.1.0-SNAPSHOT \u002F 3.3.2 \u002F 4.0.0 at 4.2.0).\nCut the branch from the release tag, not main: main's docs may already describe\npost-release changes. Patch: commit doc changes + `tika-version` bump to the\nexisting branch (bump `tika-javadoc-url` too). Then:\n```bash\ncd tika-main\nrm -rf docs\u002Ftarget\u002Fsite            # Antora never prunes: a stale \u003Cold>-SNAPSHOT dir from an earlier build gets published\n.\u002Fmvnw package -Papache-release -pl :tika-docs -DskipTests\n.\u002Fdocs\u002Fpublish-docs.sh $SITE\u002Fpublish\n```\n**Antora reads only LOCAL branches of the clone** (a remote-only\n`origin\u002Fdocs\u002F4.0.x` is ignored — verified on 4.1.0): before building, `git\nbranch docs\u002F4.0.x origin\u002Fdocs\u002F4.0.x` for every released line, and have `main`\nchecked out so HEAD supplies the SNAPSHOT. Run a trial build with the new\n`docs\u002F\u003CX.Y>.x` checked out (its worktree = HEAD, so uncommitted antora.yml edits\nare exercised) to validate before the human commits; do NOT publish that trial\noutput — it lacks the other versions, so the version dropdown, sitemap and\n`\u002Fdocs` redirect would be wrong.\n`publish-docs.sh` copies target\u002Fsite into `publish\u002Fdocs\u002F`, flattens URLs, rewrites\nthe search index (has its own guards). First 4.x publish after the SNAPSHOT era:\n`svn rm publish\u002Fdocs\u002F\u003Cold>-SNAPSHOT` (nothing prunes it) and verify\n`publish\u002Fdocs\u002Findex.html` redirects to the released line, not a SNAPSHOT.\nFull procedure: docs\u002Fmodules\u002FROOT\u002Fpages\u002Fmaintainers\u002Fsite.adoc.\n\n---\n\n## 8. Build + verify  [AGENT]\n\n`tika-site` has no `.\u002Fmvnw` → system `mvn`. **Build with Java 11** — it pins\nmaven-site-plugin 3.4 (2014), unreliable on newer JDKs; a Doxia error here means\nwrong JDK, not a content problem (separate from step 7's JDK-agnostic javadoc).\n```bash\ncd \"$SITE\"\nmvn clean install\n```\n> **ALWAYS `clean install`, never bare `install`** — an incremental build leaves\n> `publish\u002Fcss\u002F` stale → pages render with no CSS\u002Fsidebar. Fix is a `clean`\n> rebuild, not a CSS edit.\n\nBuild auto-copies target\u002Fsite → `publish\u002F`, strips timestamps, `svn add --force\npublish`. Check: new version in the menu; news + download versions right; **pages\nstyled (CSS + sidebar)**; per-version pages + javadoc\u002FAntora resolve. Preview:\n`mvn site:run` → \u003Chttp:\u002F\u002Flocalhost:8080>.\n\n---\n\n## 9. Stage + hand off the commit  [HUMAN]\n\n```bash\ncd \"$SITE\"\nsvn status\nsvn add src\u002Fsite\u002Fapt\u002F\u003CNEW>            # + any other new files\n# hand to the RM — do NOT run yourself:\n# svn commit -m \"Update website for \u003CNEW> release.\"\n```\n\n**Big-commit caveat (javadoc):** `publish\u002F\u003CNEW>\u002Fapi` is ~3,000 files \u002F ~55 MB; a\nsingle commit often **times out \u002F `E000104 Connection reset by peer`** — this is\nsize, NOT auth (bad password = `Authentication failed`\u002F403, and cached creds won't\nre-prompt). Fixes:\n- `http-timeout = 1800` in `~\u002F.subversion\u002Fservers` `[global]`.\n- Else commit the api in chunks, then the rest:\n  ```bash\n  svn commit --depth=empty publish\u002F\u003CNEW> publish\u002F\u003CNEW>\u002Fapi \\\n      publish\u002F\u003CNEW>\u002Fapi\u002Forg publish\u002F\u003CNEW>\u002Fapi\u002Forg\u002Fapache \\\n      publish\u002F\u003CNEW>\u002Fapi\u002Forg\u002Fapache\u002Ftika -m \"\u003CNEW> site: api dir skeleton\"\n  for d in publish\u002F\u003CNEW>\u002Fapi\u002Forg\u002Fapache\u002Ftika\u002F*\u002F; do\n    svn commit \"$d\" -m \"\u003CNEW> javadoc: $(basename \"$d\")\" || break   # parser\u002F ~1,300 files\n  done\n  svn commit publish\u002F\u003CNEW>\u002Fapi -m \"\u003CNEW> javadoc: remaining api files\"\n  svn commit -m \"Update website for \u003CNEW> release.\"\n  ```\n- Atomic per invocation → a failed commit rolls back; retry. Locked (`E155004`) →\n  `svn cleanup`.\n\n---\n\n## 10. Confirm published + re-kick  [HUMAN]\n\nsvnwcsub maps `\u002Fwww\u002Ftika.apache.org ← %(ASF)s\u002Ftika\u002Fsite\u002Fpublish`: **only a commit\ntouching `publish\u002F` triggers a republish**, and it publishes the whole tree at\nHEAD. Verify (cache-buster hits the origin, not Varnish):\n```bash\ncurl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" \"https:\u002F\u002Ftika.apache.org\u002F\u003CNEW>\u002Findex.html?cb=$(date +%s)\"\n```\nWant `200`. Still `404`\u002Fold minutes later → the web-node `svn up` choked on the\nbig commit. **Re-kick** with a trivial whitespace commit to a file **under\n`publish\u002F`** (e.g. a blank line in `publish\u002Findex.html`):\n```bash\nsvn commit publish\u002Findex.html -m \"Nudge svnwcsub to republish.\"\n```\nRe-fires svnwcsub → `svn up` to HEAD (harmless; next build regenerates it). A\ncommit outside `publish\u002F` won't trigger. Still stuck ~30 min → ping `#asfinfra`.\n\n---\n\n## 11. Post-site  [HUMAN] (context)\n\n- JIRA: \"release\" `\u003CNEW>`; move stragglers to the next version.\n- Announce to `user@`, `dev@`, `announce@apache.org`.\n- Log at \u003Chttps:\u002F\u002Freporter.apache.org\u002Faddrelease.html?tika>.\n- CVEs fixed → update `security.apt` \u002F per-version security notes, republish.\n\n---\n\n## Checklist\n\n- [ ] `svn update` done before any edits\n- [ ] 4.x vs 3.x track decided\n- [ ] `pom.xml` versions (stable for 4.x; maintenance+parent for 3.x)\n- [ ] `site.xml`: new entry added, previous same-track entry collapsed\n- [ ] per-version apt docs (`index.apt` only for 4.x \u002F full set for 3.x)\n- [ ] `formats.apt` regenerated (3.x only; 4.x formats page is in Antora, partial test-enforced)\n- [ ] `index.apt`: notable changes + curated contributors + shortlink\n- [ ] `doap.rdf` entry\n- [ ] `index.apt.vm`: news block + superseded CHANGES link → archive\n- [ ] final `\u003CNEW>` git tag exists (not just `-rcN`)\n- [ ] javadoc → `publish\u002F\u003CNEW>\u002Fapi` (both tracks); Antora branch published (4.x); main antora.yml bumped to the next SNAPSHOT\n- [ ] `mvn clean install` (never bare `install`); pages styled (CSS + sidebar)\n- [ ] `svn status`\u002F`svn add` done, commit handed to RM (chunk `api\u002F` if it resets)\n- [ ] live site 200: `https:\u002F\u002Ftika.apache.org\u002F\u003CNEW>\u002Findex.html?cb=…` — else re-kick\n\n---\n\n## Troubleshooting\n\n| Symptom | Cause | Fix |\n|---|---|---|\n| `aggregate-no-fork` → `No source files for package org.apache.tika` | runs against `tika-parent`; relative `\u003Csourcepath>` can't resolve | use forking `javadoc:aggregate` after `clean install -Pfast` (step 7) |\n| javadoc → `package org.slf4j does not exist` etc. | aggregate without a prior build → empty classpath | `mvn clean install -Pfast` first |\n| site build: `Error parsing '...\u002Findex.apt': line [N] missing '>'` | unescaped `\u003C`\u002F`>` (e.g. `\u003C= 0`, `->`) in apt prose | backslash-escape (`\\\u003C`); bundled script does this |\n| pages unstyled (no CSS\u002Fsidebar) | incremental `install` left `publish\u002Fcss\u002F` stale | `mvn clean install` (never bare `install`) |\n| site-plugin \u002F Doxia error on `mvn install` | maven-site-plugin 3.4 on too-new a JDK | build with **Java 11** |\n| notable-changes bullet split on a version number | old numeric heuristic (removed) | use the bundled script; re-run |\n| contributors have bots\u002FAI, or surname order | old behavior (fixed): filter + `str.casefold` sort | use bundled `extract-tika-contribs.py`; RM curates |\n| commit `E175012 timed out` \u002F `E000104 Connection reset` | ~55 MB api tree too big for one transaction | `http-timeout=1800`; chunk the `api\u002F` (step 9). Size, not auth. |\n| commit `Authentication failed` \u002F 403 | genuinely bad\u002Fexpired credential | `svn commit --username \u003Cyou>` to re-cache |\n| `svn: E155004 working copy locked` | prior commit died mid-transaction | `svn cleanup`, retry |\n| commit `E155011 Directory ... is out of date` | working copy behind HEAD | `svn revert -R publish && svn update`, re-run publish-docs.sh + `mvn clean install`, retry (fixed base only) |\n| committed, site still old even with `?cb=` (origin 404s\u002Fold) | web-node `svn up` choked on the big commit | re-kick: whitespace commit under `publish\u002F` (step 10); stuck ~30 min → `#asfinfra` |\n| home-page CHANGES link 404s for the previous release | it was `svn rm`'d from the live dist mirror | repoint to `archive.apache.org\u002Fdist\u002Ftika\u002F\u003Cprev>\u002FCHANGES-\u003Cprev>.txt` (step 6) |\n","\u003C!--\nLicensed to the Apache Software Foundation (ASF) under one or more\ncontributor license agreements.  See the NOTICE file distributed with\nthis work for additional information regarding copyright ownership.\nThe ASF licenses this file to You under the Apache License, Version 2.0\n(the \"License\"); you may not use this file except in compliance with\nthe License.  You may obtain a copy of the License at\n\n    http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\nLocal override: `$TIKA_SKILLS_LOCAL\u002Fupdate-site-for-release\u002FLOCAL.md` (default `~\u002F.tika-skills`),\nread after this file, wins on conflict.\n\n# Update the Tika website for a release\n\nStep 17 (\"Update Tika site\") of the Release Process\n(\u003Chttps:\u002F\u002Fcwiki.apache.org\u002Fconfluence\u002Fspaces\u002FTIKA\u002Fpages\u002F109454070\u002FRelease+Process>).\nAssumes the release (tag, artifacts, VOTE, dist promotion) is done; covers the\n**website** only.\n\n**First: `cd $SITE && svn update`.** The checkout is usually behind (docs\nrepublishes, logo\u002Fsecurity edits land between releases); a stale base only\nsurfaces at the very end, after the 67 MB commit has uploaded, as\n`E155011 ... is out of date`, and the whole transaction rolls back.\n\nSet these first:\n- **`$SITE`** — `tika-site` **SVN** checkout (not git): `src\u002Fsite\u002F` (sources) +\n  `publish\u002F` (generated, SVN-tracked, served; `mvn install` regenerates it and\n  auto-runs `svn add --force publish` via antrun).\n- **`$SCRATCH`** — release working dir: unzipped src release, `CHANGES-\u003CNEW>.txt`,\n  built javadoc.\n\nScripts: `.skills\u002Fdevs\u002Fupdate-site-for-release\u002Fscripts\u002F` in the tika git repo\n(not `$SITE\u002Fscripts` — there is none). Local paths + toolchain (Maven binary, JDKs) live in a\nprivate companion skill under `~\u002F.claude\u002Fskills\u002F`.\n\n> **[HUMAN] gates — never do these yourself:** final `svn commit` (outward-facing,\n> irreversible), JIRA \"release\", s.apache.org shortlink, announce emails. Prepare\n> everything, show `svn status`, hand off.\n\n---\n\n## 0. Inputs + release track\n\nTwo supported tracks since 4.0.0 (2026-08-21): **4.x** is the current line,\n**3.x** is the maintenance line. Which track a release is on decides the\nprocess; both tracks are \"stable\" — there is no preview slot unless a future\n5.x preview reintroduces one.\n\n| Input | Example | Notes |\n|---|---|---|\n| `NEW_VERSION` | `4.0.1` | the release |\n| `RELEASE_TRACK` | `4.x` | `4.x` or `3.x` (maintenance) |\n| `PREV_TAG` \u002F `NEW_TAG` | `4.0.0-rc1` \u002F `4.0.1` | git tags, for the GitHub contributor query |\n| `JIRA fixVersion` | `4.0.1` | **may differ** from the label (pre-releases often use the base version) |\n| `CHANGES` file | `$SCRATCH\u002FCHANGES-4.0.1.txt` | notable-changes source |\n| src release zip | `tika-\u003CNEW>-src.zip` | javadoc source (both tracks) |\n| release date | `2026-08-21` | doap.rdf + news blurb |\n\nConfirm current values in `pom.xml` (repo root — `tika.stable.version` = 4.x\nline, `tika.maintenance.version` = 3.x line).\n\n**Before starting, check the final git tag exists** (`git ls-remote --tags\nhttps:\u002F\u002Fgithub.com\u002Fapache\u002Ftika | grep \u003CNEW>`). The vote passes on an `-rcN` tag\nand nothing creates the plain `\u003CNEW>` tag; 4.1.0 shipped with only `4.1.0-rc3`.\nAsk the RM to tag the rc commit (`git tag \u003CNEW> \u003CNEW>-rcN^{}` + push) — the\ncontributor query, the docs branch and the next release's `PREV_TAG` all want it.\nUntil then use the rc tag for `--tag`. **Refresh rc tags from apache first**\n(`git fetch --force apache 'refs\u002Ftags\u002F\u003CNEW>-rc*:refs\u002Ftags\u002F\u003CNEW>-rc*'`): a\nclone that fetched a fork can hold a stale `-rcN` pointing at a different\ncommit (4.2.0-rc2 did), and branching\u002Ftagging from it is silently wrong.\n\n**Check the CHANGES file name in `dist\u002Frelease\u002Ftika\u002F\u003CNEW>\u002F`.** The download\npage and news links assume `CHANGES-\u003CNEW>.txt`; 4.2.0 was promoted as plain\n`CHANGES.txt` (download link 404s). Ask the RM to `svn cp` it to\n`CHANGES-\u003CNEW>.txt` in dist rather than special-casing the site.\n\n| Step | 4.x track | 3.x maintenance track |\n|---|---|---|\n| `pom.xml` `\u003Cparent>\u003Cversion>` | leave at newest 3.x | → `\u003CNEW>` (must stay a 3.x parent — Java 11 build) |\n| `pom.xml` `tika.stable.version` | → `\u003CNEW>` | leave |\n| `pom.xml` `tika.maintenance.version` | leave | → `\u003CNEW>` |\n| `src\u002Fsite\u002Fapt\u002F\u003CNEW>\u002F` | **only `index.apt`** (Changes) | full 8-file set (scaffold from prev 3.x) |\n| `site.xml` entry | sub-menu linking `docs\u002F\u003CX.Y>.x\u002F` pages + Changes + api | full legacy sub-menu, expanded |\n| formats.apt | n\u002Fa — `docs\u002F...\u002Fformats.adoc`; its generated partial is test-enforced | regenerate from `tika-app` jar |\n| javadoc | `clean install -Pfast` + `javadoc:aggregate` → `publish\u002F\u003CNEW>\u002Fapi` (step 7) | same |\n| Antora docs | new minor → new `docs\u002F\u003CX.Y>.x` branch; patch → republish same branch (step 7) | n\u002Fa |\n| Download page | automatic | automatic |\n\ndoap.rdf, index.apt.vm news, verify, publish are common to both.\n\nURL scheme (decided 2026-08-19): Antora docs are per-minor (`\u002Fdocs\u002F4.0.x\u002F`);\nthe apt Changes page and javadoc are per-release (`\u002F4.0.0\u002F`, `\u002F4.0.0\u002Fapi\u002F`) —\njavadocs are exact-version artifacts.\n\n---\n\n## 1. `pom.xml` versions (repo root)  [AGENT]\n\n- **4.x:** bump `\u003Ctika.stable.version>` to `\u003CNEW>`.\n- **3.x:** bump `\u003Ctika.maintenance.version>` **and** `\u003Cparent>\u003Cversion>` to `\u003CNEW>`.\n- `\u003Cparent>` supplies build config only (no site content references it since\n  4.0.0). It must stay on the newest **3.x** parent: the 4.x parent enforces\n  Java 17, but maven-site-plugin 3.4 needs the Java 11 build (step 8).\n\nDownload page auto-reads these — no manual edit. (`download.apt.vm` also derives\n`$docsLine` = `4.1.x` from `tika.stable.version` for its Antora links; check the\nartifact list against `dist\u002Frelease\u002Ftika\u002F\u003CNEW>\u002F` if the distribution set changed.)\n\n---\n\n## 2. `src\u002Fsite\u002Fsite.xml` menu  [AGENT]\n\nCurrent 4.x + current 3.x expanded; older = `collapse=\"true\"`.\n\n- **4.x, new minor:** new expanded block at the top; links go into the Antora\n  tree plus the per-release Changes\u002Fapi (repoint `docs\u002F\u003Cold>.x` → `docs\u002F\u003Cnew>.x`\n  when a new minor supersedes; a patch release only updates the Changes\u002Fapi\n  version numbers in the hrefs):\n  ```xml\n  \u003Citem name=\"Apache Tika 4.0.0\" href=\"docs\u002F4.0.x\u002Findex.html\">\n    \u003Citem name=\"Documentation Home\" href=\"docs\u002F4.0.x\u002Findex.html\"\u002F>\n    \u003Citem name=\"Supported Formats\" href=\"docs\u002F4.0.x\u002Fformats.html\"\u002F>\n    \u003Citem name=\"Using Tika\" href=\"docs\u002F4.0.x\u002Fusing-tika\u002Findex.html\"\u002F>\n    \u003Citem name=\"Getting Started (Java API)\" href=\"docs\u002F4.0.x\u002Fusing-tika\u002Fjava-api\u002Fgetting-started.html\"\u002F>\n    \u003Citem name=\"Pipes\" href=\"docs\u002F4.0.x\u002Fpipes\u002Findex.html\"\u002F>\n    \u003Citem name=\"Configuration\" href=\"docs\u002F4.0.x\u002Fconfiguration\u002Findex.html\"\u002F>\n    \u003Citem name=\"Migrating to Tika 4.x\" href=\"docs\u002F4.0.x\u002Fmigration-to-4x\u002Findex.html\"\u002F>\n    \u003Citem name=\"Changes\" href=\"4.0.0\u002Findex.html\"\u002F>\n    \u003Citem name=\"API Documentation\" href=\"4.0.0\u002Fapi\u002F\"\u002F>\n  \u003C\u002Fitem>\n  ```\n- **3.x:** new expanded block above the previous 3.x; add `collapse=\"true\"`\n  to the old block:\n  ```xml\n  \u003Citem name=\"Apache Tika 3.3.2\" href=\"3.3.2\u002Findex.html\">\n    \u003Citem name=\"Getting Started\"                href=\"3.3.2\u002Fgettingstarted.html\"\u002F>\n    \u003Citem name=\"Supported Formats\"              href=\"3.3.2\u002Fformats.html\"\u002F>\n    \u003Citem name=\"Parser API\"                     href=\"3.3.2\u002Fparser.html\"\u002F>\n    \u003Citem name=\"Parser 5min Quick Start Guide\"  href=\"3.3.2\u002Fparser_guide.html\"\u002F>\n    \u003Citem name=\"Content and Language Detection\" href=\"3.3.2\u002Fdetection.html\"\u002F>\n    \u003Citem name=\"Configuring Tika\"               href=\"3.3.2\u002Fconfiguring.html\"\u002F>\n    \u003Citem name=\"Usage Examples\"                 href=\"3.3.2\u002Fexamples.html\"\u002F>\n    \u003Citem name=\"API Documentation\"              href=\"3.3.2\u002Fapi\u002F\"\u002F>\n  \u003C\u002Fitem>\n  ```\n\n---\n\n## 3. Per-version apt docs `src\u002Fsite\u002Fapt\u002F\u003CNEW>\u002F`  [AGENT]\n\n**4.x** — create only `index.apt` (the Changes page; title `Apache Tika \u003CNEW>`;\nfill step 4). No other apt files — everything else lives in the Antora docs.\n\n**3.x** — scaffold (these docs are version-string-identical across 3.x):\n```bash\n.\u002Fscripts\u002Fscaffold-stable-version.sh $SITE 3.3.1 3.3.2\n```\nCopies+bumps `configuring\u002Fdetection\u002Fexamples\u002Fparser\u002Fparser_guide\u002Fgettingstarted.apt`. Then:\n- **formats.apt** — two parts: a hand-written top (license, intro, `%{toc}`, ~25\n  prose format-family sections) down to the header line\n  `Full list of Supported Formats in \"standard\" artifacts`, then a generated flat\n  list below it. `--list-parser-details-apt` regenerates only the flat part. Copy\n  prev `formats.apt`, bump versions, replace everything **below** that header:\n  ```bash\n  java -jar \u003Cpath>\u002Ftika-app-\u003CNEW>.jar --list-parser-details-apt\n  ```\n  **Do NOT truncate at the `%{toc}` line** — keep the prose sections. (Scaffold\n  skips `formats.apt` for this reason.)\n- **index.apt** — step 4.\n\n\n\n---\n\n## 4. Per-version `index.apt`: notable changes + contributors  [AGENT + HUMAN]\n\nShape (see `src\u002Fsite\u002Fapt\u002F3.3.1\u002Findex.apt`): license+title; \"most notable changes…\"\nbullets; \"The following people have contributed…\" bullets; \"See\n{{https:\u002F\u002Fs.apache.org\u002FXXXX}} …\".\n\n**Notable changes** — review output, keep only notable items:\n```bash\n.\u002Fscripts\u002Fextract-tika-issues.py CHANGES-3.3.2.txt out-3.3.2.apt 3.3.2\n```\nMirrors CHANGES verbatim; TIKA-####\u002FGithub-#### auto-linked; ALL-CAPS headers\n(incl. `SERVER, PIPES AND OPERATIONS`, `INFERENCE (EXPERIMENTAL)`) → apt sections;\napt markup chars in prose (`\u003C= 0`, `type->parser`, `{x}`, `[]`, `~35%`) are\nbackslash-escaped — an unescaped `\u003C` fails the site build with\n`Error parsing '...\u002Findex.apt': line [N] missing '>'`; output is wrapped at 78\ncols without splitting hyphenated words or links.\n\n**Contributors** — candidate list, RM curates:\n```bash\n.\u002Fscripts\u002Fextract-tika-contribs.py 3.3.2 --prev-tag 3.3.1 --tag 3.3.2 > contribs.txt\n# beta (fixVersion differs from label):\n# .\u002Fscripts\u002Fextract-tika-contribs.py 4.0.0 --prev-tag 3.3.1 --tag 4.0.0-beta-1\n```\nMerges JIRA (reporters\u002Fassignees\u002Fcomment authors) + GitHub commit\u002FPR authors\n(uses `gh` auth; resolves logins→names; case-insensitive sort; filters bots\u002FAI).\nOver-reports drive-by commenters, misses GitHub-issue-only commenters. **[HUMAN]**\nprune \u002F normalise \u002F add.\n\n**Shortlink [HUMAN]** — `s.apache.org\u002FXXXX` → the JIRA \"issues fixed in \u003CNEW>\"\nquery; needs s.apache.org login. Ask the RM.\n\n---\n\n## 5. `src\u002Fsite\u002Fresources\u002Fdoap.rdf`  [AGENT]\n\nNew `\u003Crelease>` at the top. Ordering is by **date, not version** (a stable point\nrelease can sit above an older-dated preview — 3.3.2\u002FJul-16 above 4.0.0-beta-1\u002FJul-3):\n```xml\n      \u003Crelease>\n        \u003CVersion>\n          \u003Cname>Apache Tika 3.3.2\u003C\u002Fname>\n          \u003Ccreated>2026-07-21\u003C\u002Fcreated>\n          \u003Crevision>3.3.2\u003C\u002Frevision>\n        \u003C\u002FVersion>\n      \u003C\u002Frelease>\n```\n\n---\n\n## 6. Home page `src\u002Fsite\u002Fapt\u002Findex.apt.vm`  [AGENT + HUMAN]\n\n1. New **Latest News** block at the top; its CHANGES link uses\n   `dist.apache.org\u002Frepos\u002Fdist\u002Frelease\u002F...` (live mirror):\n   ```\n   [21 July 2026: Apache Tika Release]\n    Apache Tika 3.3.2 has been released! \u003Cone or two sentence summary>.\n    Please see the {{{https:\u002F\u002Fdist.apache.org\u002Frepos\u002Fdist\u002Frelease\u002Ftika\u002F3.3.2\u002FCHANGES-3.3.2.txt}CHANGES.txt}}\n    file for the full list of changes in the release and have a look at the download page for more information\n    on how to obtain Apache Tika 3.3.2.\n   ```\n2. **Repoint the superseded release's CHANGES link** (its artifacts get `svn rm`'d\n   from the live mirror at release): `dist.apache.org\u002Frepos\u002Fdist\u002Frelease\u002Ftika\u002F\u003CPREV>\u002F…`\n   → `archive.apache.org\u002Fdist\u002Ftika\u002F\u003CPREV>\u002F…`. **[HUMAN]** confirm which version was\n   removed.\n\n---\n\n## 7. Docs \u002F Javadoc\n\n**Javadoc — both tracks [AGENT].** NOT the wiki's `javadoc:aggregate-no-fork` (runs\nagainst `tika-parent`, its relative `\u003Csourcepath>` fails → `No source files for\npackage org.apache.tika`; wrong goal, not a JDK issue). From the unzipped src\nrelease (its `.\u002Fmvnw` is broken — use system `mvn`):\n```bash\nunzip tika-3.3.2-src.zip && cd tika-3.3.2\nmvn clean install -Pfast        # ~4 min; module artifacts + full dep classpath\nmvn javadoc:aggregate           # FORKING goal (NOT -no-fork)\nmkdir -p $SITE\u002Fpublish\u002F3.3.2\nmv target\u002Freports\u002Fapidocs $SITE\u002Fpublish\u002F3.3.2\u002Fapi\n```\nBoth steps matter: without `install` javadoc dies on `package org.slf4j does not\nexist`; the forking `aggregate` (@aggregator) runs once on the root, `-no-fork`\nbreaks per-`pom`-module. 3.x: any modern JDK (11 and 25 verified); 4.x: Java 17+\n(21 verified on 4.1.0, ~3,900 html \u002F 67 MB). A `-Pfast` install that prints a\nFelix\u002FOSGi stack trace still succeeds — check the `\u003CNEW>` artifacts landed in the\nlocal repo, not the tail of the log. (`tika-server`\nmiredot docs discontinued — skip.)\n\n**4.x — Antora docs [AGENT].** Built from the tika git repo (main checkout),\nnot the src zip — the playbook pulls every `docs\u002F{0..9}*` branch as a content\nsource. New minor: create `docs\u002F\u003CX.Y>.x` from the tag (or main), set\n`version: '\u003CX.Y>.x'` + `tika-version` and `tika-javadoc-url` attributes in that\nbranch's `docs\u002Fantora.yml`, and make sure main's antora.yml has `prerelease: true`\n**and its `version`\u002F`tika-version` match main's new `\u003Crevision>`** (the release\nplugin bumps the poms, not antora.yml — after 4.1.0 main was `4.1.1-SNAPSHOT` in\n`tika-parent\u002Fpom.xml` but still `4.1.0-SNAPSHOT` in antora.yml) [HUMAN commits].\nAlso bump main's `tika-javadoc-url` and `docs\u002Fantora-playbook.yml`'s soft\ndefaults (`tika-version`, `tika-stable-version` = newest 3.x, `tika-javadoc-url`):\nthe playbook is read only from HEAD, so nothing else keeps it current (it was\nstill at 4.1.0-SNAPSHOT \u002F 3.3.2 \u002F 4.0.0 at 4.2.0).\nCut the branch from the release tag, not main: main's docs may already describe\npost-release changes. Patch: commit doc changes + `tika-version` bump to the\nexisting branch (bump `tika-javadoc-url` too). Then:\n```bash\ncd tika-main\nrm -rf docs\u002Ftarget\u002Fsite            # Antora never prunes: a stale \u003Cold>-SNAPSHOT dir from an earlier build gets published\n.\u002Fmvnw package -Papache-release -pl :tika-docs -DskipTests\n.\u002Fdocs\u002Fpublish-docs.sh $SITE\u002Fpublish\n```\n**Antora reads only LOCAL branches of the clone** (a remote-only\n`origin\u002Fdocs\u002F4.0.x` is ignored — verified on 4.1.0): before building, `git\nbranch docs\u002F4.0.x origin\u002Fdocs\u002F4.0.x` for every released line, and have `main`\nchecked out so HEAD supplies the SNAPSHOT. Run a trial build with the new\n`docs\u002F\u003CX.Y>.x` checked out (its worktree = HEAD, so uncommitted antora.yml edits\nare exercised) to validate before the human commits; do NOT publish that trial\noutput — it lacks the other versions, so the version dropdown, sitemap and\n`\u002Fdocs` redirect would be wrong.\n`publish-docs.sh` copies target\u002Fsite into `publish\u002Fdocs\u002F`, flattens URLs, rewrites\nthe search index (has its own guards). First 4.x publish after the SNAPSHOT era:\n`svn rm publish\u002Fdocs\u002F\u003Cold>-SNAPSHOT` (nothing prunes it) and verify\n`publish\u002Fdocs\u002Findex.html` redirects to the released line, not a SNAPSHOT.\nFull procedure: docs\u002Fmodules\u002FROOT\u002Fpages\u002Fmaintainers\u002Fsite.adoc.\n\n---\n\n## 8. Build + verify  [AGENT]\n\n`tika-site` has no `.\u002Fmvnw` → system `mvn`. **Build with Java 11** — it pins\nmaven-site-plugin 3.4 (2014), unreliable on newer JDKs; a Doxia error here means\nwrong JDK, not a content problem (separate from step 7's JDK-agnostic javadoc).\n```bash\ncd \"$SITE\"\nmvn clean install\n```\n> **ALWAYS `clean install`, never bare `install`** — an incremental build leaves\n> `publish\u002Fcss\u002F` stale → pages render with no CSS\u002Fsidebar. Fix is a `clean`\n> rebuild, not a CSS edit.\n\nBuild auto-copies target\u002Fsite → `publish\u002F`, strips timestamps, `svn add --force\npublish`. Check: new version in the menu; news + download versions right; **pages\nstyled (CSS + sidebar)**; per-version pages + javadoc\u002FAntora resolve. Preview:\n`mvn site:run` → \u003Chttp:\u002F\u002Flocalhost:8080>.\n\n---\n\n## 9. Stage + hand off the commit  [HUMAN]\n\n```bash\ncd \"$SITE\"\nsvn status\nsvn add src\u002Fsite\u002Fapt\u002F\u003CNEW>            # + any other new files\n# hand to the RM — do NOT run yourself:\n# svn commit -m \"Update website for \u003CNEW> release.\"\n```\n\n**Big-commit caveat (javadoc):** `publish\u002F\u003CNEW>\u002Fapi` is ~3,000 files \u002F ~55 MB; a\nsingle commit often **times out \u002F `E000104 Connection reset by peer`** — this is\nsize, NOT auth (bad password = `Authentication failed`\u002F403, and cached creds won't\nre-prompt). Fixes:\n- `http-timeout = 1800` in `~\u002F.subversion\u002Fservers` `[global]`.\n- Else commit the api in chunks, then the rest:\n  ```bash\n  svn commit --depth=empty publish\u002F\u003CNEW> publish\u002F\u003CNEW>\u002Fapi \\\n      publish\u002F\u003CNEW>\u002Fapi\u002Forg publish\u002F\u003CNEW>\u002Fapi\u002Forg\u002Fapache \\\n      publish\u002F\u003CNEW>\u002Fapi\u002Forg\u002Fapache\u002Ftika -m \"\u003CNEW> site: api dir skeleton\"\n  for d in publish\u002F\u003CNEW>\u002Fapi\u002Forg\u002Fapache\u002Ftika\u002F*\u002F; do\n    svn commit \"$d\" -m \"\u003CNEW> javadoc: $(basename \"$d\")\" || break   # parser\u002F ~1,300 files\n  done\n  svn commit publish\u002F\u003CNEW>\u002Fapi -m \"\u003CNEW> javadoc: remaining api files\"\n  svn commit -m \"Update website for \u003CNEW> release.\"\n  ```\n- Atomic per invocation → a failed commit rolls back; retry. Locked (`E155004`) →\n  `svn cleanup`.\n\n---\n\n## 10. Confirm published + re-kick  [HUMAN]\n\nsvnwcsub maps `\u002Fwww\u002Ftika.apache.org ← %(ASF)s\u002Ftika\u002Fsite\u002Fpublish`: **only a commit\ntouching `publish\u002F` triggers a republish**, and it publishes the whole tree at\nHEAD. Verify (cache-buster hits the origin, not Varnish):\n```bash\ncurl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\\n\" \"https:\u002F\u002Ftika.apache.org\u002F\u003CNEW>\u002Findex.html?cb=$(date +%s)\"\n```\nWant `200`. Still `404`\u002Fold minutes later → the web-node `svn up` choked on the\nbig commit. **Re-kick** with a trivial whitespace commit to a file **under\n`publish\u002F`** (e.g. a blank line in `publish\u002Findex.html`):\n```bash\nsvn commit publish\u002Findex.html -m \"Nudge svnwcsub to republish.\"\n```\nRe-fires svnwcsub → `svn up` to HEAD (harmless; next build regenerates it). A\ncommit outside `publish\u002F` won't trigger. Still stuck ~30 min → ping `#asfinfra`.\n\n---\n\n## 11. Post-site  [HUMAN] (context)\n\n- JIRA: \"release\" `\u003CNEW>`; move stragglers to the next version.\n- Announce to `user@`, `dev@`, `announce@apache.org`.\n- Log at \u003Chttps:\u002F\u002Freporter.apache.org\u002Faddrelease.html?tika>.\n- CVEs fixed → update `security.apt` \u002F per-version security notes, republish.\n\n---\n\n## Checklist\n\n- [ ] `svn update` done before any edits\n- [ ] 4.x vs 3.x track decided\n- [ ] `pom.xml` versions (stable for 4.x; maintenance+parent for 3.x)\n- [ ] `site.xml`: new entry added, previous same-track entry collapsed\n- [ ] per-version apt docs (`index.apt` only for 4.x \u002F full set for 3.x)\n- [ ] `formats.apt` regenerated (3.x only; 4.x formats page is in Antora, partial test-enforced)\n- [ ] `index.apt`: notable changes + curated contributors + shortlink\n- [ ] `doap.rdf` entry\n- [ ] `index.apt.vm`: news block + superseded CHANGES link → archive\n- [ ] final `\u003CNEW>` git tag exists (not just `-rcN`)\n- [ ] javadoc → `publish\u002F\u003CNEW>\u002Fapi` (both tracks); Antora branch published (4.x); main antora.yml bumped to the next SNAPSHOT\n- [ ] `mvn clean install` (never bare `install`); pages styled (CSS + sidebar)\n- [ ] `svn status`\u002F`svn add` done, commit handed to RM (chunk `api\u002F` if it resets)\n- [ ] live site 200: `https:\u002F\u002Ftika.apache.org\u002F\u003CNEW>\u002Findex.html?cb=…` — else re-kick\n\n---\n\n## Troubleshooting\n\n| Symptom | Cause | Fix |\n|---|---|---|\n| `aggregate-no-fork` → `No source files for package org.apache.tika` | runs against `tika-parent`; relative `\u003Csourcepath>` can't resolve | use forking `javadoc:aggregate` after `clean install -Pfast` (step 7) |\n| javadoc → `package org.slf4j does not exist` etc. | aggregate without a prior build → empty classpath | `mvn clean install -Pfast` first |\n| site build: `Error parsing '...\u002Findex.apt': line [N] missing '>'` | unescaped `\u003C`\u002F`>` (e.g. `\u003C= 0`, `->`) in apt prose | backslash-escape (`\\\u003C`); bundled script does this |\n| pages unstyled (no CSS\u002Fsidebar) | incremental `install` left `publish\u002Fcss\u002F` stale | `mvn clean install` (never bare `install`) |\n| site-plugin \u002F Doxia error on `mvn install` | maven-site-plugin 3.4 on too-new a JDK | build with **Java 11** |\n| notable-changes bullet split on a version number | old numeric heuristic (removed) | use the bundled script; re-run |\n| contributors have bots\u002FAI, or surname order | old behavior (fixed): filter + `str.casefold` sort | use bundled `extract-tika-contribs.py`; RM curates |\n| commit `E175012 timed out` \u002F `E000104 Connection reset` | ~55 MB api tree too big for one transaction | `http-timeout=1800`; chunk the `api\u002F` (step 9). Size, not auth. |\n| commit `Authentication failed` \u002F 403 | genuinely bad\u002Fexpired credential | `svn commit --username \u003Cyou>` to re-cache |\n| `svn: E155004 working copy locked` | prior commit died mid-transaction | `svn cleanup`, retry |\n| commit `E155011 Directory ... is out of date` | working copy behind HEAD | `svn revert -R publish && svn update`, re-run publish-docs.sh + `mvn clean install`, retry (fixed base only) |\n| committed, site still old even with `?cb=` (origin 404s\u002Fold) | web-node `svn up` choked on the big commit | re-kick: whitespace commit under `publish\u002F` (step 10); stuck ~30 min → `#asfinfra` |\n| home-page CHANGES link 404s for the previous release | it was `svn rm`'d from the live dist mirror | repoint to `archive.apache.org\u002Fdist\u002Ftika\u002F\u003Cprev>\u002FCHANGES-\u003Cprev>.txt` (step 6) |\n",{"name":5,"description":7},"main","9f8b48425fea3630020924f6ae96e98eabb9ce12",".skills\u002Fdevs\u002Fupdate-site-for-release",1039,"https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika","https:\u002F\u002Ftika.apache.org\u002F","https:\u002F\u002Fgithub.com\u002Fapache","https:\u002F\u002Fwww.apache.org\u002F","2026-11-13 08:35:47",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add apache\u002Ftika --skill update-site-for-release",{"tool":60,"command":61},"bunx","bunx skills add apache\u002Ftika --skill update-site-for-release",{"tool":63,"command":64},"pnpm","pnpm dlx skills add apache\u002Ftika --skill update-site-for-release","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Fupdate-site-for-release\u002FSKILL.md",true,[68,74,80,84,88,92,98,104,108,112,116,120,124,128,132,136],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"LICENSE.txt","LICENSE","许可证",11345,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002FLICENSE.txt",{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"scripts\u002Fextract-tika-contribs.py","SCRIPT","脚本",10679,"https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Fupdate-site-for-release\u002Fscripts\u002Fextract-tika-contribs.py",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"scripts\u002Fextract-tika-issues.py",7578,"https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Fupdate-site-for-release\u002Fscripts\u002Fextract-tika-issues.py",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"scripts\u002FREADME.md",2839,"https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Fupdate-site-for-release\u002Fscripts\u002FREADME.md",{"path":89,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":90,"sourceHtmlUrl":91},"scripts\u002Fscaffold-stable-version.sh",2982,"https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Fupdate-site-for-release\u002Fscripts\u002Fscaffold-stable-version.sh",{"path":93,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":96,"sourceHtmlUrl":97},"theme-showcase.pdf","ASSET","资产文件",124310,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Ftheme-showcase.pdf",{"path":99,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":102,"sourceHtmlUrl":103},"themes\u002Farctic-frost.md","REFERENCE","参考文档",544,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Farctic-frost.md",{"path":105,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":106,"sourceHtmlUrl":107},"themes\u002Fbotanical-garden.md",519,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Fbotanical-garden.md",{"path":109,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":110,"sourceHtmlUrl":111},"themes\u002Fdesert-rose.md",496,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Fdesert-rose.md",{"path":113,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":114,"sourceHtmlUrl":115},"themes\u002Fforest-canopy.md",506,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Fforest-canopy.md",{"path":117,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":118,"sourceHtmlUrl":119},"themes\u002Fgolden-hour.md",528,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Fgolden-hour.md",{"path":121,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":122,"sourceHtmlUrl":123},"themes\u002Fmidnight-galaxy.md",513,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Fmidnight-galaxy.md",{"path":125,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":126,"sourceHtmlUrl":127},"themes\u002Fmodern-minimalist.md",549,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Fmodern-minimalist.md",{"path":129,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":130,"sourceHtmlUrl":131},"themes\u002Focean-depths.md",555,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Focean-depths.md",{"path":133,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":134,"sourceHtmlUrl":135},"themes\u002Fsunset-boulevard.md",558,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Fsunset-boulevard.md",{"path":137,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":138,"sourceHtmlUrl":139},"themes\u002Ftech-innovation.md",547,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcreative-design\u002Ftheme-factory\u002Fthemes\u002Ftech-innovation.md",[141,182,208,235,260,275],{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":158,"publishedAt":40},"01M6ACFKZR081Z7QX5XB1ZA2R2","file-to-markdown","Turn almost any file into Markdown plus metadata — PDF, Office, HTML, email, archives, images, audio\u002Fvideo, 1000+ formats — powered by Apache Tika, either via the tika-app CLI (zero setup, one file) or a running tika-server (curl, warm process, many calls). Leads with rmeta (structured, embedded-item-aware output) as the default operation rather than flat concatenated text, since you can't tell whether a file has embedded content from its extension. Covers metadata-only triage, type and language detection, OCR, and output-size discipline for agent context. Use whenever a task involves reading the content of a file whose format you don't want to hand-parse.","https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fusers\u002Ffile-to-markdown\u002FSKILL.md",[147,152,155],{"categoryNo":148,"categoryName":149,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":153,"categoryName":154,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":156,"categoryName":157,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000023","Skill与智能体开发",[159,160,161,162,163,9,164,165,166,167,38,168,169,170,171,172,173,174,175,176,177,178,179,180,181],"file to markdown","markdown","file","PDF","cli","triage","setup","content","metadata","images","Video","app","ocr","Audio","parse","default","only","either","you","hand","text","server","discipline",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":192,"publishedAt":40},"01M6ACFHJR3612ZE6RNX1P5WG9","file-to-markdown-docker","Run Apache Tika as a Docker container when you need guaranteed OCR (scanned PDFs, images) or geospatial raster support with zero local install — `apache\u002Ftika:\u003Cversion>-full` bundles Tesseract, GDAL, ImageMagick, and fonts. Also covers the minimal image, port\u002Fvolume\u002Fmemory conventions, the path-identity mount gotcha, and how to confirm OCR actually ran rather than silently returning no text. Powered by Apache Tika. Use when a local `tika-app`\u002F`tika-server` doesn't have Tesseract installed, or you want a disposable, self-contained parsing environment. Companion to the `file-to-markdown` skill, which covers the parsing calls themselves once a server is up.","https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fusers\u002Ffile-to-markdown-docker\u002FSKILL.md",[188,189],{"categoryNo":148,"categoryName":149,"taxonomyType":150,"taxonomyTypeDesc":151},{"categoryNo":190,"categoryName":191,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000011","运维与部署",[193,194,159,160,161,9,195,196,197,198,199,38,168,170,171,200,201,202,203,204,205,177,206,179,207],"file to markdown docker","docker","support","memory","image","run","identity","which","volume","up","local","how to","when","fonts","self",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":215,"publishedAt":40},"01M6ACFE1684DE184VE0D7PQVY","file-forensics","Examine what a file claims about itself and what it actually contains — powered by Apache Tika. True content-based type detection (extensions lie), provenance claims (authors, dates, creating application), revision and tamper signals (PDF incremental updates, tracked changes, hidden slides, zip integrity), hidden and embedded content (attachments, macros), risk indicators (PDF JavaScript actions, encryption), and content digests. Evidence gathering, not verdicts: Tika reports what the file asserts and what parsing observed; it does not attribute authorship or validate signatures. Use for triaging suspicious files, provenance questions, e-discovery-style review, or \"is this file what it claims to be.\"","https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fusers\u002Ffile-forensics\u002FSKILL.md",[214],{"categoryNo":148,"categoryName":149,"taxonomyType":150,"taxonomyTypeDesc":151},[216,161,217,218,219,162,9,220,166,221,38,222,223,224,225,226,227,228,229,230,231,232,233,234],"file forensics","forensics","javascript","suspicious","validate","review","actions","signatures","files","updates","encryption","reports","claims","signals","revision","integrity","zip","evidence","risk",{"skillNo":236,"name":237,"nameZh":6,"description":238,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":239,"categories":240,"keywords":247,"publishedAt":40},"01M6ACF9G52NYHXQ0BVSJ3VH6E","tika-eval-h2-query","Query the tika-eval H2 database directly for counts and joins the canned reports do not compute — connection gotchas, key tables, example queries. Use when the xlsx\u002Fsummary.md reports are not enough.","https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Ftika-eval-h2-query\u002FSKILL.md",[241,244],{"categoryNo":242,"categoryName":243,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":245,"categoryName":246,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000010","后端与接口",[248,38,249,250,251,252,253,21,254,31,205,255,227,256,257,258,259],"tika eval h2 query","eval","query","database","xlsx","do","example","compute","queries","summary","connection","tables",{"skillNo":261,"name":262,"nameZh":6,"description":263,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":264,"categories":265,"keywords":266,"publishedAt":40},"01M6ACF7V56CCWHNVR614VBNX5","tika-eval-encoding-regression","Condensed tika-eval pattern for charset-detector regression hunts (\"A picks encoding X, B picks Y\") using one build and two configs — encoding-pair flip queries, OOV\u002Flanguageness\u002FFFFD signals, per-file detector attribution.","https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Ftika-eval-encoding-regression\u002FSKILL.md",[],[267,38,268,249,269,21,270,161,256,229,271,272,273,274],"tika eval encoding regression","regression","encoding","attribution","build","detector","pattern","pair",{"skillNo":276,"name":277,"nameZh":6,"description":278,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":279,"categories":280,"keywords":281,"publishedAt":40},"01M6ACF53J5MJCDNAEMCBV0RPP","tika-eval-compare","Compare extracts from two Tika builds over a corpus to detect regressions in content, encoding, exceptions, and embedded-document handling. Use for \"compare before\u002Fafter extracts\", \"eval this change against the corpus\".","https:\u002F\u002Fgithub.com\u002Fapache\u002Ftika\u002Fblob\u002Fmain\u002F.skills\u002Fdevs\u002Ftika-eval-compare\u002FSKILL.md",[],[282,38,249,283,284,166,21,31,285,286,269,287],"tika eval compare","compare","change","document","detect","embedded"]