Commit Graph

3657 Commits

Author SHA1 Message Date
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
Steve Yegge
39750ba6a2 bd sync: 2025-12-21 16:15:25 2025-12-21 16:15:41 -08:00
Steve Yegge
95b735c070 fix: add third change to satisfy versionChanges test 2025-12-21 16:14:41 -08:00
Steve Yegge
c184d10554 chore: bump version to 0.33.2
Fixes:
- P0 priority preserved - omitempty removed from Priority field (GH#671)
- nil pointer check in markdown parsing (GH#674)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 16:12:37 -08:00
Steve Yegge
0c10eab873 chore: remove dead deprecated wrapper functions
Remove cleanupSnapshots() and validateSnapshotConsistency() from
deletion_tracking.go - both were marked deprecated and never called.

The other two deprecated functions (getSnapshotStats, initializeSnapshotsIfNeeded)
are still used by tests and production code respectively.

Filed bd-xsl9 to track removal of legacy autoflush dual-path code.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 15:50:10 -08:00
Steve Yegge
7d43a13600 bd sync: 2025-12-21 15:50:00 2025-12-21 15:50:00 -08:00
Steve Yegge
4791b10ae9 bd sync: 2025-12-21 15:41:30 2025-12-21 15:41:38 -08:00
Steve Yegge
324580f4aa bd sync: 2025-12-21 15:28:30 2025-12-21 15:41:38 -08:00
Steve Yegge
8b87c556c7 fix: priority:0 omitempty and markdown nil pointer (GH#671, GH#674)
- Remove omitempty from Priority field so P0 issues preserve priority:0
- Add nil check for store in createIssuesFromMarkdown

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 15:41:22 -08:00
Steve Yegge
4e8924c52f chore: bump version to 0.33.1
Breaking changes:
- Ephemeral → Wisp rename (JSON field, CLI flag)

Fixes:
- Lint error in mail.go (nosec for mail delegate)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 15:31:38 -08:00
Steve Yegge
1e22cd0bc5 fix(lint): add nosec for mail delegate exec.Command
gosec G204 warning - the cmdName comes from user configuration
(mail_delegate setting), not untrusted input.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 15:29:58 -08:00
Steve Yegge
358d076fde refactor: rename Ephemeral → Wisp (Steam Engine metaphor)
Wisp = ephemeral vapor produced by the Steam Engine (Gas Town).
This aligns with the metaphor:
- Claude = Fire
- Claude Code = Steam
- Gas Town = Steam Engine
- Wisps = ephemeral vapor it produces

Changes:
- types.Issue.Ephemeral → types.Issue.Wisp
- types.IssueFilter.Ephemeral → types.IssueFilter.Wisp
- JSON field: "ephemeral" → "wisp"
- CLI flag: --ephemeral → --wisp (bd cleanup)
- All tests updated

Note: SQLite column remains "ephemeral" (no migration needed).
This is a breaking change for JSON consumers using 0.33.0.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 15:22:45 -08:00
Steve Yegge
61361995cb bd sync: 2025-12-21 14:44:42 2025-12-21 14:44:42 -08:00
Steve Yegge
d78cbe409b chore: bump version to 0.33.0
Ephemeral molecules release:
- bd mol spawn creates ephemeral issues by default
- Ephemeral issues never export to JSONL
- bd mol squash with --summary for agent summaries

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 14:44:16 -08:00
Steve Yegge
2b87a55adf bd sync: 2025-12-21 14:42:37 2025-12-21 14:43:34 -08:00
Steve Yegge
5f54c12fa9 bd sync: 2025-12-21 14:35:24 2025-12-21 14:43:34 -08:00
Steve Yegge
29b382f561 bd sync: 2025-12-21 13:57:59 2025-12-21 14:43:34 -08:00
Steve Yegge
06cc1b2514 bd sync: 2025-12-21 13:54:32 2025-12-21 14:43:34 -08:00
Steve Yegge
3261d8d5a2 bd sync: 2025-12-21 13:46:14 2025-12-21 14:43:34 -08:00
Steve Yegge
939ca7906e bd sync: 2025-12-21 13:44:01 2025-12-21 14:43:34 -08:00