Claude-skill-registry ctl-release

Update and rebuild spikectl or ctl packages in the monorepo

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ctl-release" ~/.claude/skills/majiayu000-claude-skill-registry-ctl-release && rm -rf "$T"
manifest: skills/data/ctl-release/SKILL.md
source content

Option: CTL Release

Initiation (I)

Invoke when:

  • Source code changed in
    packages/spikectl/
    or
    packages/ctl/
  • Need to rebuild CLI binaries for Nix distribution
  • Updating CLI tools after refactoring

Observation Space (Y)

ObservableHow to Check
Source modified
git status packages/{spikectl,ctl}/src/
Binary staleCompare
bin/
mtime vs
src/
mtime
TypeScript valid
bunx tsc --noEmit

Action Space (U)

ActionCommandFrom Directory
compile
bun build --compile --minify src/index.ts --outfile bin/<name>
packages/<pkg>/
build-nix
nix build '.?dir=packages/tmnl#<pkg>'
repo root
test-binary
./result/bin/<pkg> --version
repo root
update-lock
nix flake update <pkg>
packages/tmnl/

Policy (π)

STATE: source_changed ∧ ¬binary_updated
  → ACTION: compile

STATE: binary_updated ∧ need_nix_build
  → ACTION: build-nix

STATE: flake_deps_changed
  → ACTION: update-lock → build-nix

STATE: build_complete
  → ACTION: test-binary → TERMINATE

Termination (β)

ConditionExit
./result/bin/<pkg> --version
succeeds
SUCCESS
TypeScript errorsFAIL: fix errors
Nix build failsFAIL: check flake.nix

Q-Heuristics

SituationGuidance
Source-only changesSkip
nix flake update
-
path:
inputs evaluate live
New dependencies in flake.nixMust run
nix flake update <pkg>
Binary size changed significantlyVerify correct bundling

Constraints

  • □(compile_before_nix_build) — Always compile before Nix build
  • □(test_after_build) — Always verify binary works after build
  • ◇(version_incremented) — Eventually bump version for releases

Commands

Quick Rebuild

cd packages/spikectl
bun build --compile --minify src/index.ts --outfile bin/spikectl

Full Release

cd packages/spikectl
bun build --compile --minify src/index.ts --outfile bin/spikectl
git add bin/spikectl
git commit -m "build(spikectl): v0.x.x"

cd ../..
nix build '.?dir=packages/tmnl#spikectl'
./result/bin/spikectl --version

DevShell Access

nix develop '.?dir=packages/tmnl#tmnl-ctl'
# Now spikectl and ctl are in PATH

Why No Flake Update for Source Changes?

The tmnl flake uses

path:
inputs:

spikectl = { url = "path:../spikectl"; }

No hash lock → changes picked up on rebuild.