Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
# dotfiles-7n69
title: Restore typecheck/format scripts dropped in devcontainer refactor
status: in-progress
type: bug
priority: normal
created_at: 2026-05-08T16:36:14Z
updated_at: 2026-05-08T16:44:35Z
---

CI has been failing since 60c24bc (Nov 25, 2025) — refactor that extracted the devcontainer to pickled-devcontainer over-deleted from package.json: it stripped the entire scripts block (typecheck, format, format:check, lint, test) and dropped typescript from devDependencies, when it only meant to remove the devcontainer:\* scripts.

The .github/workflows/ci.yml workflow still calls npm run typecheck and npm run format:check, and CLAUDE.md still documents these scripts as the test suite. tsconfig.json + home/.finicky.ts also still exist.

## Checklist

- [x] Diagnose root cause (package.json scripts deleted by 60c24bc)
- [x] Restore scripts block to package.json
- [x] Re-add typescript to devDependencies
- [x] Run npm install to regenerate lockfile
- [x] Run npm run lint locally to verify (typecheck passes; format:check fixed 35 drifted files)
- [ ] Push branch, open PR, watch CI go green
2 changes: 1 addition & 1 deletion agents/.skill-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -168,4 +168,4 @@
"warp",
"claude-code"
]
}
}
40 changes: 20 additions & 20 deletions bin/md2rich
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
set -euo pipefail

usage() {
cat <<EOF
cat << EOF
Usage: md2rich [file.md]

Convert markdown to rich text and copy to clipboard.
Expand All @@ -21,40 +21,40 @@ Examples:
cat notes.md | md2rich
echo "**bold** and *italic*" | md2rich
EOF
exit "${1:-0}"
exit "${1:-0}"
}

# Check dependencies
if ! command -v pandoc &>/dev/null; then
echo "error: pandoc is required but not installed" >&2
echo " brew install pandoc" >&2
exit 1
if ! command -v pandoc &> /dev/null; then
echo "error: pandoc is required but not installed" >&2
echo " brew install pandoc" >&2
exit 1
fi

# Handle --help
[[ "${1:-}" == "-h" || "${1:-}" == "--help" ]] && usage 0

# Get input from file or stdin
if [[ $# -gt 0 ]]; then
# File argument
if [[ ! -f "$1" ]]; then
echo "error: file not found: $1" >&2
exit 1
fi
input=$(cat "$1")
# File argument
if [[ ! -f "$1" ]]; then
echo "error: file not found: $1" >&2
exit 1
fi
input=$(cat "$1")
else
# Stdin
if [[ -t 0 ]]; then
echo "error: no input provided (pass a file or pipe markdown)" >&2
usage 1
fi
input=$(cat)
# Stdin
if [[ -t 0 ]]; then
echo "error: no input provided (pass a file or pipe markdown)" >&2
usage 1
fi
input=$(cat)
fi

# Check for empty input
if [[ -z "$input" ]]; then
echo "error: input is empty" >&2
exit 1
echo "error: input is empty" >&2
exit 1
fi

# Convert and copy
Expand Down
20 changes: 10 additions & 10 deletions bin/tmux-command-palette
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
#

# Colors (catppuccin mocha)
blue='\033[38;2;137;180;250m' # #89b4fa
green='\033[38;2;166;227;161m' # #a6e3a1
dim='\033[38;2;108;112;134m' # #6c7086 (overlay0)
blue='\033[38;2;137;180;250m' # #89b4fa
green='\033[38;2;166;227;161m' # #a6e3a1
dim='\033[38;2;108;112;134m' # #6c7086 (overlay0)
reset='\033[0m'

# Format: colored key on left, description on right, with consistent alignment
Expand All @@ -26,11 +26,11 @@ formatted=$(tmux list-keys -N | awk -v blue="$blue" -v green="$green" -v dim="$d
}')

target=$(echo -e "$formatted" | fzf-tmux -p 80%,60% \
--ansi \
--no-sort \
--border-label ' command palette ' \
--prompt ' ' \
--bind 'tab:down,btab:up')
--ansi \
--no-sort \
--border-label ' command palette ' \
--prompt ' ' \
--bind 'tab:down,btab:up')

[[ -z "$target" ]] && exit

Expand All @@ -44,7 +44,7 @@ full=$(tmux list-keys -T prefix | grep -F " ${key} " | head -1)

# If not found in prefix table, try other tables
if [[ -z "$full" ]]; then
full=$(tmux list-keys | grep -F " ${key} " | head -1)
full=$(tmux list-keys | grep -F " ${key} " | head -1)
fi

[[ -z "$full" ]] && exit
Expand All @@ -54,7 +54,7 @@ cmd=$(echo "$full" | awk '{ $1=$2=$3=$4=""; print $0 }' | sed 's/^ *//')

# Handle copy-mode bindings
if [[ "$cmd" == *"copy-mode"* ]] && [[ "$full" != *"prefix"* ]]; then
tmux copy-mode
tmux copy-mode
fi

tmux $cmd
32 changes: 15 additions & 17 deletions claude/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,16 +74,16 @@ Stack files hold per-topic permissions and sandbox arrays (no scalars):
"permissions": {
"allow": [],
"ask": [],
"deny": []
"deny": [],
},
"sandbox": {
"network": {
"allowedHosts": []
"allowedHosts": [],
},
"filesystem": {
"allowWrite": []
}
}
"allowWrite": [],
},
},
}
```

Expand All @@ -110,19 +110,17 @@ Create `claude/stacks/foo.jsonc`:
{
// Foo tool
"permissions": {
"allow": [
"Bash(foo:*)"
]
"allow": ["Bash(foo:*)"],
},
// Optional: sandbox config
"sandbox": {
"network": {
"allowedHosts": ["foo.example.com"]
"allowedHosts": ["foo.example.com"],
},
"filesystem": {
"allowWrite": ["~/.foo"]
}
}
"allowWrite": ["~/.foo"],
},
},
}
```

Expand Down Expand Up @@ -176,11 +174,11 @@ claude-permissions cleanup --force

### Permission Lists

| List | Behavior |
| ------- | ------------------------------------------------------------------ |
| `allow` | Always permitted without prompting |
| List | Behavior |
| ------- | ------------------------------------------------------------------- |
| `allow` | Always permitted without prompting |
| `ask` | Always prompts for confirmation (useful for destructive operations) |
| `deny` | Always blocked |
| `deny` | Always blocked |

### Permission Format

Expand Down Expand Up @@ -238,5 +236,5 @@ jq '.sandbox.network.allowedHosts' ~/.claude/settings.json
jq '.sandbox.filesystem.allowWrite' ~/.claude/settings.json

# Verify claudeconfig.sh output
./claudeconfig.sh # Watch for "Loaded base role", "Merged X stack" messages
./claudeconfig.sh # Watch for "Loaded base role", "Merged X stack" messages
```
9 changes: 3 additions & 6 deletions claude/stacks/beans.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@
"Bash(beans query:*)",
"Bash(beans show:*)",
"Bash(beans update:*)",
"Bash(beans:*)"
"Bash(beans:*)",
],
"ask": [
"Bash(beans archive:*)",
"Bash(beans delete:*)"
]
}
"ask": ["Bash(beans archive:*)", "Bash(beans delete:*)"],
},
}
12 changes: 5 additions & 7 deletions claude/stacks/colima.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,14 @@
"Bash(colima stop:*)",
"Bash(colima template:*)",
"Bash(colima version:*)",
"Bash(colima:*)"
]
"Bash(colima:*)",
],
},

// source: agent-safehouse
"sandbox": {
"filesystem": {
"allowWrite": [
"~/.colima"
]
}
}
"allowWrite": ["~/.colima"],
},
},
}
7 changes: 2 additions & 5 deletions claude/stacks/datadog.jsonc
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
{
"sandbox": {
"network": {
"allowedHosts": [
"app.datadoghq.com",
"api.datadoghq.com"
]
"allowedHosts": ["app.datadoghq.com", "api.datadoghq.com"],
},
}
},
}
14 changes: 4 additions & 10 deletions claude/stacks/docs.jsonc
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
{
// Reference documentation sites
"permissions": {
"allow": [
"WebFetch(domain:karafka.io)",
"WebFetch(domain:lima-vm.io)"
]
"allow": ["WebFetch(domain:karafka.io)", "WebFetch(domain:lima-vm.io)"],
},
// source: agent-safehouse
"sandbox": {
"network": {
"allowedHosts": [
"karafka.io",
"lima-vm.io"
]
}
}
"allowedHosts": ["karafka.io", "lima-vm.io"],
},
},
}
12 changes: 4 additions & 8 deletions claude/stacks/dotslash.jsonc
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
{
// DotSlash tool launcher (Meta)
"permissions": {
"allow": [
"Bash(dotslash:*)"
]
"allow": ["Bash(dotslash:*)"],
},

"sandbox": {
"filesystem": {
"allowWrite": [
"~/Library/Caches/dotslash"
]
}
}
"allowWrite": ["~/Library/Caches/dotslash"],
},
},
}
16 changes: 7 additions & 9 deletions claude/stacks/git.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
"Bash(git tag:*)",

// hk git hooks tool (from old web.json)
"WebFetch(domain:hk.jdx.dev)"
"WebFetch(domain:hk.jdx.dev)",
],

// Operations that warrant confirmation
Expand All @@ -70,7 +70,7 @@
"Bash(git clean -fdx:*)",
"Bash(git push --force:*)",
"Bash(git push -f:*)",
"Bash(git reset --hard:*)"
"Bash(git reset --hard:*)",
],

// Destructive operations that should never be auto-allowed
Expand All @@ -82,16 +82,14 @@
"Bash(git push --force upstream main:*)",
"Bash(git push --force upstream master:*)",
"Bash(git push -f upstream main:*)",
"Bash(git push -f upstream master:*)"
]
"Bash(git push -f upstream master:*)",
],
},

// source: agent-safehouse
"sandbox": {
"network": {
"allowedHosts": [
"hk.jdx.dev"
]
}
}
"allowedHosts": ["hk.jdx.dev"],
},
},
}
12 changes: 6 additions & 6 deletions claude/stacks/go.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
"Bash(goreleaser build:*)",
"Bash(goreleaser check:*)",
"Bash(goreleaser release:*)",
"Bash(goreleaser:*)"
]
"Bash(goreleaser:*)",
],
},

// source: agent-safehouse
Expand All @@ -40,8 +40,8 @@
"~/.config/go",
"~/.cache/golangci-lint",
"~/Library/Caches/golangci-lint",
"~/.local/share/go"
]
}
}
"~/.local/share/go",
],
},
},
}
8 changes: 3 additions & 5 deletions claude/stacks/mcp.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
"mcp__MCPProxy__call_tool_write",
"mcp__MCPProxy__read_cache",
"mcp__MCPProxy__retrieve_tools",
"mcp__MCPProxy__upstream_servers"
"mcp__MCPProxy__upstream_servers",
],
"ask": [
"mcp__MCPProxy__call_tool_destructive"
]
}
"ask": ["mcp__MCPProxy__call_tool_destructive"],
},
}
Loading
Loading