title: Fix prefix extraction for multi-hyphen prefixes with hash IDs

description:
Fixed bug where issue IDs with multiple hyphens in the prefix and hash suffixes were incorrectly parsed. For example, 'web-app-a3f8e9' was being parsed as prefix 'web-' instead of 'web-app'.

The root cause was in ExtractIssuePrefix() which only checked for numeric suffixes. When it encountered a hash suffix (like 'a3f8e9'), it would fall back to using the first hyphen instead of the last hyphen.

The fix adds hash detection logic via isLikelyHash() which checks if a suffix looks like a hexadecimal hash (4-8 characters, all hex digits). This allows the function to correctly handle both numeric and hash suffixes.

Test cases added for:
- web-app-123 (numeric suffix)
- web-app-a3f8e9 (hash suffix)
- my-cool-app-a3f8e9 (three-part prefix with hash)
- super-long-project-name-1a2b (four-part prefix with hash)
- Various hash lengths (4-6 chars)
- Uppercase and mixed-case hashes

Files modified:
- internal/utils/issue_id.go: Added isLikelyHash() and updated ExtractIssuePrefix()
- internal/utils/id_parser_test.go: Added comprehensive test cases

This fix enables beads to work correctly with projects that have hyphens in their names.

status: closed

issue_type: bug


title: bd init --contributor should configure sync.remote=upstream for fork workflows

description:
When running `bd init --contributor` in a fork workflow (where `upstream` remote points to the original repo), the wizard should configure beads to sync from `upstream/main` rather than `origin/main`.

**Current behavior:**
- Contributor mode detects the fork setup (upstream remote exists)
- Sets up planning repo and auto-routing
- Does NOT configure sync remote
- `bd sync` on feature branches shows "No upstream configured, using --from-main mode" and syncs from `origin/main`

**Expected behavior:**
- Contributor mode should also set `sync.remote = upstream` (or similar config)
- `bd sync` should pull beads from `upstream/main` (source of truth)

**Why this matters:**
- The fork's `origin/main` may be behind `upstream/main`
- Contributors want the latest issues from the source repo
- Code PRs go: local -> origin -> upstream, but beads should come FROM upstream

**Suggested fix:**
Add to `runContributorWizard()` after detecting fork:
```go
if isFork {
    store.SetConfig(ctx, "sync.remote", "upstream")
}
```

status: open

issue_type: feature