U2 of the Claude Desktop .mcpb bundle plan.
- internal/engine/embed.go embeds the vendored Python tree at build time
via //go:embed all:vendored. The engine package owns the embed because
Go's directive cannot reach outside its own package directory; sync and
gitignore paths are updated to match (internal/engine/vendored/ in
place of mcp/vendored/).
- internal/engine/extract.go materializes the embed into
<cache>/last30days-pp-mcp/<version>/ with a .version sentinel that
short-circuits re-extraction. Atomic rename from a .tmp sibling means
a partial extraction can never be mistaken for complete. Concurrent
first-call extractions serialize behind a per-cache-dir sync.Once.
- EnsureUserCache honors a LAST30DAYS_CACHE_DIR env override for
locked-down filesystems; the override is named in extract errors.
- internal/engine/extract_test.go covers happy path, sentinel skip,
version bump, 10-goroutine race, empty-version rejection, unwritable
cache parent, and the env override (7 tests, all passing).
- A tracked vendored/.gitkeep anchors the embed path so the directive
matches even before scripts/sync-engine.sh runs.
Add a new top-level mcp/ Go module that will host the Claude Desktop MCPB
server. U1 of the Claude Desktop .mcpb bundle plan: scaffold only, no
behavior yet.
- mcp/go.mod targets Go 1.22+ with mark3labs/mcp-go as the planned
dependency (added in U3 when the server wiring lands).
- mcp/scripts/sync-engine.sh mirrors skills/last30days/scripts/ into
mcp/vendored/ before each build, keeping the Code skill and Desktop
bundle on the same engine source.
- Root .gitignore excludes mcp/vendored/ and mcp/build/ so the engine
mirror and cross-compiled binaries stay local.