a1afbce84c
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.
13 lines
558 B
Plaintext
13 lines
558 B
Plaintext
# Mirror of skills/last30days/scripts/, populated by scripts/sync-engine.sh.
|
|
# Source of truth lives in the Python skill; never commit the mirror.
|
|
# Lives inside internal/engine/ because //go:embed cannot reach outside
|
|
# its own package directory.
|
|
internal/engine/vendored/*
|
|
!internal/engine/vendored/.gitkeep
|
|
|
|
# Local build output: cross-compiled binaries and packaged .mcpb files.
|
|
build/
|
|
# Anchor to the mcp/ root so the cmd/last30days-pp-mcp/ package directory
|
|
# is not also excluded (subdirs with the same name would otherwise match).
|
|
/last30days-pp-mcp
|