diff --git a/.beads/beads.jsonl b/.beads/beads.jsonl index f24b4902..da7191ad 100644 --- a/.beads/beads.jsonl +++ b/.beads/beads.jsonl @@ -244,7 +244,7 @@ {"id":"bd-eb3c","content_hash":"6c7a46d58e565a27e3a7a5375bb1ad8345094bdef422dce52239ee4b7e559143","title":"UX nightmare: multiple ways daemon can fail with misleading messages","description":"","status":"closed","priority":0,"issue_type":"epic","created_at":"2025-10-31T21:08:09.090553-07:00","updated_at":"2025-11-01T20:27:42.79962-07:00","closed_at":"2025-11-01T20:27:42.79962-07:00","source_repo":"."} {"id":"bd-eqjc","content_hash":"ce62bef71029a692680c7428ae7b11d31bb8cc11c85c30d18e2d43e7d3f1072f","title":"bd init creates nested .beads directories","description":"bd init sometimes creates .beads/.beads/ nested directories, which should never happen. This occurs fairly often and can cause confusion about which .beads directory is active. Need to add validation to detect if already inside a .beads directory and either error or use the parent .beads location.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-11-06T22:21:22.948727-08:00","updated_at":"2025-11-06T22:22:41.04958-08:00","closed_at":"2025-11-06T22:22:41.04958-08:00","source_repo":"."} {"id":"bd-es19","content_hash":"74aa57ab28e70fb995a1e154379a17a211bc10ffae8e5901213661b154941981","title":"BG's issue to reopen","description":"","status":"open","priority":1,"issue_type":"bug","created_at":"2025-11-07T19:07:14.231525-08:00","updated_at":"2025-11-07T19:07:14.276863-08:00","source_repo":"."} -{"id":"bd-expt","content_hash":"12ebbb5a4daebe076c6bcbc613e2da3f2c9e70826d892f2475e7236c97dc3377","title":"RPC fast-fail: stat socket before dial, cap timeouts to 200ms","description":"Eliminate 5s delay when daemon socket is missing by:\n1. Add os.Stat(socketPath) check before dialing in TryConnect\n2. Return (nil, nil) immediately if socket doesn't exist\n3. Set default dial timeout to 200ms in TryConnect\n4. Keep TryConnectWithTimeout for explicit health/status checks (1-2s)\n\nThis prevents clients from waiting through full timeout when no daemon is running.","status":"in_progress","priority":0,"issue_type":"task","created_at":"2025-11-07T16:42:12.688526-08:00","updated_at":"2025-11-07T16:47:49.108295-08:00","source_repo":".","dependencies":[{"issue_id":"bd-expt","depends_on_id":"bd-ndyz","type":"discovered-from","created_at":"2025-11-07T16:42:12.689284-08:00","created_by":"daemon"}]} +{"id":"bd-expt","content_hash":"12ebbb5a4daebe076c6bcbc613e2da3f2c9e70826d892f2475e7236c97dc3377","title":"RPC fast-fail: stat socket before dial, cap timeouts to 200ms","description":"Eliminate 5s delay when daemon socket is missing by:\n1. Add os.Stat(socketPath) check before dialing in TryConnect\n2. Return (nil, nil) immediately if socket doesn't exist\n3. Set default dial timeout to 200ms in TryConnect\n4. Keep TryConnectWithTimeout for explicit health/status checks (1-2s)\n\nThis prevents clients from waiting through full timeout when no daemon is running.","status":"closed","priority":0,"issue_type":"task","created_at":"2025-11-07T16:42:12.688526-08:00","updated_at":"2025-11-07T21:04:21.671436-08:00","closed_at":"2025-11-07T21:04:21.671436-08:00","source_repo":".","dependencies":[{"issue_id":"bd-expt","depends_on_id":"bd-ndyz","type":"discovered-from","created_at":"2025-11-07T16:42:12.689284-08:00","created_by":"daemon"}]} {"id":"bd-f282","content_hash":"90043e5e39cbb062ce0ff6a323ce2d0a16465783742d06ac9da1df66d837e025","title":"Test npm package installation locally","description":"Verify npm package works before publishing:\n\n## Local testing\n- Run npm pack in npm/ directory\n- Install tarball globally: npm install -g beads-bd-0.21.5.tgz\n- Test basic commands:\n - bd --version\n - bd init --quiet --prefix test\n - bd create \"Test issue\" -p 1 --json\n - bd list --json\n - bd sync\n\n## Test environments\n- macOS (darwin-arm64 and darwin-amd64)\n- Linux (ubuntu docker container for linux-amd64)\n- Windows (optional, if available)\n\n## Validation\n- Binary downloads during postinstall\n- All bd commands work identically to native\n- No permission issues\n- Proper error messages on failure","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-02T23:40:05.71835-08:00","updated_at":"2025-11-03T10:31:45.382577-08:00","closed_at":"2025-11-03T10:31:45.382577-08:00","source_repo":".","dependencies":[{"issue_id":"bd-f282","depends_on_id":"bd-febc","type":"parent-child","created_at":"2025-11-02T23:40:32.968748-08:00","created_by":"daemon"}]} {"id":"bd-f9a1","content_hash":"97f9387b20f741a9f71ee43b0671b5d970bd594098db299dc871d0b3074c5384","title":"Add index usage verification test for external_ref lookups","description":"Currently we test that idx_issues_external_ref index exists, but we don't verify that it's actually being used by the query planner.\n\nProposed solution:\n- Add test using EXPLAIN QUERY PLAN\n- Verify that 'SEARCH TABLE issues USING INDEX idx_issues_external_ref' appears in plan\n- Ensures O(1) lookup performance is maintained\n\nRelated: bd-1022\nFiles: internal/storage/sqlite/external_ref_test.go:260","status":"closed","priority":3,"issue_type":"task","created_at":"2025-11-02T15:32:09.85419-08:00","updated_at":"2025-11-02T16:04:47.221064-08:00","closed_at":"2025-11-02T16:04:47.221064-08:00","source_repo":"."} {"id":"bd-fb05","content_hash":"1d99061e4ac1564982acc5e141674adf3bb7db789d546c12deb9108435af6450","title":"Refactor sqlite.go into focused modules","description":"Split sqlite.go (2,298 lines) into focused modules: migrations.go, ids.go, issues.go, events.go, dirty.go, db.go. This will improve maintainability and reduce cognitive load.","design":"Files to create:\n- migrations.go: Migration registry + runner\n- ids.go: ID generation/validation \n- issues.go: CRUD helpers\n- events.go: Event helpers\n- dirty.go: dirty_issues helpers\n- db.go: New/open, DSN construction\n- tx.go: Transaction helper","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-11-01T11:41:14.805895-07:00","updated_at":"2025-11-01T22:30:09.833675-07:00","closed_at":"2025-11-01T22:30:09.833675-07:00","source_repo":"."} diff --git a/internal/rpc/client.go b/internal/rpc/client.go index ed0e0bea..81e4b384 100644 --- a/internal/rpc/client.go +++ b/internal/rpc/client.go @@ -29,7 +29,7 @@ type Client struct { // TryConnect attempts to connect to the daemon socket // Returns nil if no daemon is running or unhealthy func TryConnect(socketPath string) (*Client, error) { - return TryConnectWithTimeout(socketPath, 2*time.Second) + return TryConnectWithTimeout(socketPath, 200*time.Millisecond) } // TryConnectWithTimeout attempts to connect to the daemon socket using the provided dial timeout. @@ -54,7 +54,7 @@ func TryConnectWithTimeout(socketPath string, dialTimeout time.Duration) (*Clien } if dialTimeout <= 0 { - dialTimeout = 2 * time.Second + dialTimeout = 200 * time.Millisecond } conn, err := dialRPC(socketPath, dialTimeout)