* Stage mksite docs in publish + CI so the npm package ships a docs corpus
The published log10x-mcp package (the official npm install) shipped with an
empty product_qa docs corpus, so docs-search returned no hits. The corpus
lives in the separate private log-10x/mksite repo and is copied into
build/product-kb/docs at build time. publish.yml only checked out log10x-mcp,
so the build script's `cp -R ../mksite/docs/.` silently no-opped
(2>/dev/null || echo) and npm publish shipped an empty corpus.
The hosted demo (mcp.log10x.com) was unaffected because its separate Docker
workflow (backend/.../deploy-public-demo-mcp.yml) already checks out mksite
and stages the docs. This ports that exact pattern to npm publish and CI:
- Mint a token from the read-only org CI GitHub App.
- Check out log-10x/mksite, stage .md docs into config/mksite/docs.
- Point the build at it via LOG10X_PRODUCT_KB_SRC.
- Fail loudly if build/product-kb/docs ends up empty, so an empty corpus can
never be published again.
Requires: the LOG10X_CI_READONLY_APP_ID / _PRIVATE_KEY org secrets must be
granted to this repo, and the app installation must include mksite.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Use a mksite-scoped deploy key instead of the org-wide read app
log10x-mcp is a public repo, so storing the org-wide LOG10X_CI_READONLY_APP
private key here would put an org-wide private-read credential in a public
trust boundary. Switch to a read-only SSH deploy key scoped to ONLY
log-10x/mksite (secret MKSITE_DOCS_DEPLOY_KEY) — a leak exposes mksite-read
and nothing else.
- publish.yml: checkout mksite via ssh-key. Runs on push to main only, so the
secret is always present.
- ci.yml: gate the docs-staging + verify steps on the key's presence
(HAS_DEPLOY_KEY). Same-repo branches build the real corpus and enforce it;
fork PRs (which get no secrets on a public repo) build + test without docs
and stay green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Bump version to 1.12.9 to ship the docs-corpus fix
The version-bump-check gate requires a bump vs main, and publish.yml only
ships a version that isn't already tagged. 1.12.9 is the first release that
will carry a populated product_qa docs corpus.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Fix eval harness: drop removed fetchAnalyzerCost, resolve rate in-tool
PR #101 removed fetchAnalyzerCost from src/lib/api.ts (cost tools must not
phone the account API; rate now resolves locally via resolveRate). The eval
harness still imported and called it, so `tsc` failed (TS2305) on every PR
that touched package.json — which is every PR. The eval-campaign check has
been red since 2026-06-08; it surfaced here only because this PR bumps the
version.
Mirror the current product dispatch (src/index.ts calls executeX(args, env)
straight through): drop the getAnalyzerCost pre-fetch + cost cache and pass
args directly, letting each tool resolve its own rate. Verified: MCP build +
eval harness `tsc` both clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Dor Levi <11015255+dor-levi@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>