Commit Graph

3676 Commits

Author SHA1 Message Date
Steve Yegge
512cbc0ef2 bd sync: 2025-12-22 12:32:30 2025-12-22 12:32:30 -08:00
Steve Yegge
d578eb80d6 bd sync: 2025-12-22 12:17:24 2025-12-22 12:17:24 -08:00
Steve Yegge
85ad0a2bdc chore: add .beads-wisp/ to gitignore 2025-12-22 12:11:36 -08:00
Steve Yegge
bbe12032d4 bd sync: 2025-12-22 12:10:56 2025-12-22 12:11:36 -08:00
Steve Yegge
199def9fed release: v0.34.0
## Added
- Wisp commands - bd wisp create/list/gc for ephemeral molecule management
- Chemistry UX - bd pour, bd mol bond --wisp/--pour for phase control
- Cross-project deps - external:<repo>:<id> syntax, bd ship command
- Orphan detection in bd doctor

## Changed
- Multi-repo config uses YAML - bd repo add/remove writes to .beads/config.yaml

## Fixed
- Wisp storage auto-copies issue_prefix from main database
- Prefix validation in multi-repo mode
- Remove orphaned repo_test.go
- Update version tests for 0.34.0 thresholds

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 03:18:55 -08:00
Steve Yegge
32181fd5a2 docs: add chemistry commands documentation (bd-hhv3)
Document new molecular chemistry UX commands:
- bd pour (proto → persistent mol)
- bd wisp create (proto → ephemeral wisp)
- bd hook (inspect pinned work)
- bd pin --for/--start (work assignment)
- bd mol bond --pour/--wisp (phase control)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 02:56:06 -08:00
Steve Yegge
9102cdb825 bd sync: 2025-12-22 02:55:55 2025-12-22 02:55:55 -08:00
Steve Yegge
11f3acdb8d bd sync: 2025-12-22 02:22:48 2025-12-22 02:23:07 -08:00
Steve Yegge
cadf798b23 feat: implement molecular chemistry UX commands
Add chemistry-inspired commands for the molecular work metaphor:

New commands:
- bd pour <proto>: Instantiate proto as persistent mol (liquid phase)
- bd wisp create <proto>: Instantiate proto as ephemeral wisp (vapor)
- bd hook: Inspect what's pinned to an agent's hook

Enhanced commands:
- bd mol spawn: Add --pour flag, deprecate --persistent
- bd mol bond: Add --pour flag (force liquid on wisp target)
- bd pin: Add --for <agent> and --start flags

Phase transitions:
  Proto (solid) --pour--> Mol (liquid) --squash--> Digest
  Proto (solid) --wisp--> Wisp (vapor) --burn--> (nothing)

Design docs: gastown/mayor/rig/docs/molecular-chemistry.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 02:21:40 -08:00
Steve Yegge
8f8e9516df fix: bd repo commands write to YAML and cleanup on remove (#683)
- bd repo add/remove now writes to .beads/config.yaml instead of database
- bd repo remove deletes hydrated issues from the removed repo
- Added internal/config/repos.go for YAML config manipulation
- Added DeleteIssuesBySourceRepo for cleanup on remove

Fixes config disconnect where bd repo add wrote to DB but hydration read from YAML.

Breaking change: bd repo add no longer accepts optional alias argument.

Co-authored-by: Dylan Conlin <dylan.conlin@gmail.com>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 01:26:45 -08:00
Ryan
a11b20960a fix(doctor): UX improvements for diagnostics and daemon (#687)
* fix(doctor): UX improvements for diagnostics and daemon

- Add Repo Fingerprint check to detect when database belongs to a
  different repository (copied .beads dir or git remote URL change)
- Add interactive fix for repo fingerprint with options: update repo ID,
  reinitialize database, or skip
- Add visible warning when daemon takes >5s to start, recommending
  'bd doctor' for diagnosis
- Detect install method (Homebrew vs script) and show only relevant
  upgrade command
- Improve WARNINGS section:
  - Add icons (⚠ or ✖) next to each item
  - Color numbers by severity (yellow for warnings, red for errors)
  - Render entire error lines in red
  - Sort by severity (errors first)
  - Fix alignment with checkmarks above
- Use heavier fail icon (✖) for better visibility
- Add integration and validation tests for doctor fixes

* fix(lint): address errcheck and gosec warnings

- mol_bond.go: explicitly ignore ephStore.Close() error
- beads.go: add nosec for .gitignore file permissions (0644 is standard)
2025-12-22 01:25:23 -08:00
Gero Hillebrandt
9d30e80fdf fix: skip prefix validation in multi-repo mode (GH#686) (#688)
Issues from additional repos have their own prefixes, which is expected.
Skip validation when multi-repo config is present.
2025-12-22 01:25:19 -08:00
dylan-conlin
2c5acc9060 fix: handle empty config values in getRepoConfig() (#684)
Previously, bd repo commands (list, add, remove, sync) failed with
'unexpected end of JSON input' when repos.additional config key
had an empty value. GetConfig() returns ('', nil) for missing keys,
and json.Unmarshal fails on empty strings.

Added empty value check before JSON parsing to return empty map
in this case. Added tests for repo config helper functions.
2025-12-22 01:25:07 -08:00
matt wilkie
025045bdb2 Add DeepWiki badge to README (#689)
DeepWiki provides up-to-date documentation people can talk to, for every public repo in the world (after being added to it's index). Adding this badge to a repository Readme tells DeepWiki to refresh it's docs automatically.

The DeepWiki link for Beads is
https://deepwiki.com/steveyegge/beads
2025-12-22 01:24:52 -08:00
Steve Yegge
f27b1f3102 feat: add wisp commands (bd-kwjh)
Implements wisp management commands for ephemeral molecules:
- bd wisp list: List wisps with stale detection
- bd wisp gc: Garbage collect orphaned wisps
- bd mol burn: Delete wisp without creating digest

Wisps are ephemeral molecules stored in .beads-wisp/ for patrol cycles
and operational loops that shouldn't accumulate in permanent storage.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 01:13:50 -08:00
Steve Yegge
b8715708b2 bd sync: 2025-12-22 01:13:15 2025-12-22 01:13:15 -08:00
Steve Yegge
69911070f0 feat: add cross-store wisp→digest squash (bd-kwjh.4)
- Add wisp detection in mol squash: checks wisp storage if not in main
- squashWispToPermanent: creates digest in permanent, deletes from wisp
- Fix directory naming: .beads-wisps → .beads-wisp (singular, matches doc)
- Add comprehensive tests for wisp squash scenarios

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 00:54:35 -08:00
Steve Yegge
1d3c9e6a83 bd sync: 2025-12-22 00:54:24 2025-12-22 00:54:24 -08:00
Steve Yegge
065dd23a12 bd sync: 2025-12-22 00:32:37 2025-12-22 00:32:45 -08:00
Steve Yegge
a49b924794 refactor: rename ephemeral → wisp throughout (bd-ldb0)
Standardize terminology for ephemeral molecule storage:
- .beads-ephemeral/ → .beads-wisps/
- --ephemeral flag → --wisp flag
- All Ephemeral* functions → Wisp*

Wisps are the "steam" in Gas Town's engine metaphor - ephemeral
molecules that evaporate after squash.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 00:32:18 -08:00
Steve Yegge
22eee81f42 feat: add --ephemeral flag to bd mol bond (bd-kwjh.3)
When --ephemeral is set:
- Spawned molecules go to .beads-ephemeral/ instead of .beads/
- Ephemeral directory is automatically gitignored
- No auto-flush (ephemeral does not sync)
- Proto+proto bonding ignores flag (templates stay in permanent storage)

Updated help text to document wisp workflow (bond then squash/burn).

Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 00:19:18 -08:00
Steve Yegge
2d719b189d feat: add ephemeral storage backend for wisps (bd-kwjh.2)
Add .beads-ephemeral/ storage support for ephemeral molecule tracking:

- FindEphemeralDir: locate ephemeral directory (sibling to .beads/)
- FindEphemeralDatabasePath: get DB path, create directory if needed
- NewEphemeralStorage: open ephemeral SQLite database
- EnsureEphemeralGitignore: add .beads-ephemeral/ to .gitignore
- IsEphemeralDatabase: check if a path is ephemeral storage

Part of the wisp storage epic for Gas Town patrol cycles.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 00:19:18 -08:00
Steve Yegge
7f0a5982dc bd sync: 2025-12-22 00:18:00 2025-12-22 00:18:00 -08:00
Steve Yegge
a111b2d6cd bd sync: 2025-12-22 00:13:58 2025-12-22 00:13:58 -08:00
Steve Yegge
cd2cee9473 bd sync: 2025-12-22 00:08:34 2025-12-22 00:08:34 -08:00
Steve Yegge
e952219c3d bd sync: 2025-12-22 00:05:28 2025-12-22 00:05:28 -08:00
Steve Yegge
468751d5e3 bd sync: 2025-12-22 00:02:25 2025-12-22 00:02:25 -08:00
Steve Yegge
5fb254fb08 bd sync: 2025-12-21 23:45:42 2025-12-21 23:45:42 -08:00
Steve Yegge
b3da7b4489 bd sync: 2025-12-21 23:42:29 2025-12-21 23:42:29 -08:00
Steve Yegge
b7c4ba016f bd sync: 2025-12-21 23:41:49 2025-12-21 23:42:15 -08:00
Steve Yegge
4f2bd88a4a bd sync: 2025-12-21 23:13:50 2025-12-21 23:42:15 -08:00
Steve Yegge
1cfb23487b feat: bd ready filters by external dep satisfaction (bd-zmmy)
GetReadyWork now lazily resolves external dependencies at query time:
- External refs (external:project:capability) checked against target DB
- Issues with unsatisfied external deps are filtered from ready list
- Satisfaction = closed issue with provides:<capability> label in target

Key changes:
- Remove FK constraint on depends_on_id to allow external refs
- Add migration 025 to drop FK and recreate views
- Filter external deps in GetReadyWork, not in blocked_issues_cache
- Add application-level validation for orphaned local deps
- Comprehensive tests for external dep resolution

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:41:44 -08:00
Steve Yegge
a9bfce7f6e wip: external dep resolution helper (bd-zmmy) 2025-12-21 23:13:50 -08:00
Steve Yegge
9afefe73a7 feat: add bd ship command for cross-project capabilities (bd-eijl)
- bd ship <capability> finds issue with export:<capability> label
- Validates issue is closed (or --force to override)
- Adds provides:<capability> label to mark capability as shipped
- Protects provides:* namespace in bd label add
- Supports --dry-run for preview

External projects depend on capabilities via:
  bd dep add <issue> external:<project>:<capability>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:11:48 -08:00
Steve Yegge
e7f09660c0 feat: add cross-project dependency support - config and external: prefix (bd-66w1, bd-om4a)
Config (bd-66w1):
- Add external_projects config for mapping project names to paths
- Add GetExternalProjects() and ResolveExternalProjectPath() functions
- Add config documentation and tests

External deps (bd-om4a):
- bd dep add accepts external:project:capability syntax
- External refs stored as-is in dependencies table
- GetBlockedIssues includes external deps in blocked_by list
- blocked_issues_cache includes external dependencies
- Add validation and parsing helpers for external refs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:08:00 -08:00
Steve Yegge
fe6fec437a fix: remove slice bounds panic in mol run output (bd-987a)
The code assumed rootID was at least 8 chars, but issue IDs
like 'gt-i4lo' are only 7 chars (prefix-hash format).

Simply use the full ID instead of truncating - IDs are already
short enough for display.
2025-12-21 22:58:05 -08:00
Steve Yegge
91b4857eb6 bd sync: 2025-12-21 22:57:55 2025-12-21 22:57:55 -08:00
Steve Yegge
abb4a84af7 bd sync: 2025-12-21 22:41:15 2025-12-21 22:42:36 -08:00
Steve Yegge
240a4e2dbc feat: add bd doctor check for orphaned issues (bd-5hrq)
- Add CheckOrphanedIssues to detect issues referenced in commits but still open
- Pattern matches (prefix-xxx) in git log against open issues in database
- Reports warning with issue IDs and commit hashes
- Add 8 comprehensive tests for the new check

Also:
- Add tests for mol spawn --attach functionality (bd-f7p1)
- Document commit message convention in AGENT_INSTRUCTIONS.md
- Fix CheckpointWAL to use wrapDBError for consistency

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 22:05:14 -08:00
Steve Yegge
61d70cd1c3 bd sync: 2025-12-21 22:04:42 2025-12-21 22:04:42 -08:00
Steve Yegge
d554a1125b bd sync: 2025-12-21 21:18:55 2025-12-21 21:19:05 -08:00
Steve Yegge
c73bf8bdb2 bd sync: 2025-12-21 21:14:14 2025-12-21 21:19:05 -08:00
Steve Yegge
6a949d91b8 fix: rename customID to customTitle in mol bond for consistency (bd-e7ou)
The --as flag description correctly says "Custom title" but the variable
was named customID and dry-run output said "Custom ID". Fixed for consistency:

- Renamed variable customID -> customTitle
- Changed dry-run output from "Custom ID" to "Custom title"

Closes bd-e7ou
2025-12-21 21:18:43 -08:00
Steve Yegge
98d665c6fd docs: add Wisps and Molecules architecture section
Document that wisps are intentionally local-only and use hard delete
instead of tombstones. This is by design - wisps never sync to other
clones, so tombstones are unnecessary overhead.

Closes bd-4bsb
2025-12-21 21:08:57 -08:00
Steve Yegge
d39e868199 fix: handle empty config values in getRepoConfig() (GH#680)
GetConfig() returns ("", nil) for missing/empty config keys.
getRepoConfig() then tried json.Unmarshal([]byte(""), ...) which
fails with "unexpected end of JSON input".

Add empty value check before JSON parsing - return empty map when
config value is empty string.

Closes GH#680

Co-Authored-By: dylan-conlin <dylan-conlin@users.noreply.github.com>
2025-12-21 21:08:57 -08:00
Steve Yegge
310e86d1d9 bd sync: 2025-12-21 21:00:10 2025-12-21 21:00:10 -08:00
Steve Yegge
6b339e7239 bd sync: 2025-12-21 18:02:24 2025-12-21 18:02:24 -08:00
Steve Yegge
d06401d778 bd sync: 2025-12-21 17:28:08 2025-12-21 17:28:08 -08:00
Steve Yegge
f56540efc8 bd sync: 2025-12-21 17:20:07 2025-12-21 17:20:07 -08:00
Steve Yegge
1e096a30b0 feat: add 'fart' as easter egg alias for bd mol bond
Molecules can produce gas (wisps) when bonded. 💨

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 16:43:21 -08:00