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.mdsource content
Option: CTL Release
Initiation (I)
Invoke when:
- Source code changed in
orpackages/spikectl/packages/ctl/ - Need to rebuild CLI binaries for Nix distribution
- Updating CLI tools after refactoring
Observation Space (Y)
| Observable | How to Check |
|---|---|
| Source modified | |
| Binary stale | Compare mtime vs mtime |
| TypeScript valid | |
Action Space (U)
| Action | Command | From Directory |
|---|---|---|
| | |
| | repo root |
| | repo root |
| | |
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 (β)
| Condition | Exit |
|---|---|
succeeds | SUCCESS |
| TypeScript errors | FAIL: fix errors |
| Nix build fails | FAIL: check flake.nix |
Q-Heuristics
| Situation | Guidance |
|---|---|
| Source-only changes | Skip - inputs evaluate live |
| New dependencies in flake.nix | Must run |
| Binary size changed significantly | Verify 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.