Commit Graph

5450 Commits

Author SHA1 Message Date
Steve Yegge 7e23b6af7a bd sync: 2025-12-30 16:17:28 2025-12-30 16:17:28 -08:00
Steve Yegge c19d830282 bd sync: 2025-12-30 16:14:47 2025-12-30 16:14:47 -08:00
Steve Yegge 4763973ba9 bd sync: 2025-12-30 16:10:24 2025-12-30 16:10:24 -08:00
Steve Yegge ae5b12a118 bd sync: 2025-12-30 16:08:38 2025-12-30 16:08:38 -08:00
Steve Yegge 3ed2589511 Fix BD_ACTOR handling in direct mode paths
BUG: BD_ACTOR env var was only read in --no-db mode (lines 352-360)
and daemon RPC path. Normal direct mode and JSONL-only mode detection
paths fell back to $USER without checking BD_ACTOR.

Fix: Add explicit os.Getenv("BD_ACTOR") check in both:
- JSONL-only mode detection path (lines 393-402)
- Normal direct mode path (lines 440-450)

(gt-6r18e.2)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:07:39 -08:00
Steve Yegge aa2c66c4f7 Implement Jira issue timestamp comparison for sync (bd-0qx5)
Add actual timestamp comparison to detect conflicts during Jira sync:
- Add fetchJiraIssueTimestamp() to fetch a single issue's updated timestamp from Jira REST API
- Add extractJiraKey() to parse Jira issue key from external_ref URLs
- Add parseJiraTimestamp() to parse Jira's ISO 8601 timestamp format
- Update detectJiraConflicts() to fetch and compare Jira timestamps instead of marking all locally-updated issues as conflicts
- Update resolveConflictsByTimestamp() to show actual timestamp comparison results
- Update reimportConflicts() to display both local and Jira timestamps

Now only issues that have been modified on BOTH sides since the last sync are reported as conflicts, reducing false positives.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:07:31 -08:00
Steve Yegge 9ee4fb50e2 Refactor TestZFCSkipsExportAfterImport to use direct import logic (bd-h048)
The test was previously skipped because it called importFromJSONL which spawns
a subprocess. During tests, os.Executable() returns the test binary rather
than the bd binary, causing the subprocess to fail.

Changes:
- Remove t.Skip() and TODO comment
- Parse JSONL directly using encoding/json instead of subprocess
- Call importIssuesCore directly instead of importFromJSONL
- Update DB count expectation to reflect actual import behavior (additive)

The core ZFC fix behavior is preserved: when divergence is detected,
import runs and export is skipped to protect the JSONL source of truth.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:05:15 -08:00
Steve Yegge b45e68c5ce Add BD_AGENT_MODE for ultra-compact output
Adds agent-optimized output mode for `bd list` triggered by:
- BD_AGENT_MODE=1 environment variable (explicit)
- CLAUDE_CODE environment variable (auto-detect)

Agent mode provides:
- Ultra-compact format: just "ID: Title" per line
- Lower default limit (20 vs 50) for context efficiency
- No colors, no emojis, no pager
- Defaults to open/in_progress only (existing behavior)

(bd-x2ht)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:04:39 -08:00
Steve Yegge 323c6ceb46 bd sync: 2025-12-30 16:02:31 2025-12-30 16:02:31 -08:00
Steve Yegge 288334f8b4 bd sync: 2025-12-30 16:02:24 2025-12-30 16:02:24 -08:00
Steve Yegge 643a162f0e Centralize validation patterns with composable validators (bd-jbqx)
Add composable issue validators to internal/validation package:
- IssueValidator type with Chain() composition function
- Exists(), NotTemplate(), NotPinned(), NotClosed(), NotHooked() validators
- HasStatus(), HasType() for checking allowed values
- ForUpdate(), ForClose(), ForDelete(), ForReopen() convenience chains

Update cmd/bd/show_unit_helpers.go to use centralized validators instead
of duplicated inline validation logic. This enables consistent validation
across all commands with a single source of truth.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:00:22 -08:00
Steve Yegge a4aa6ade1a bd sync: 2025-12-30 16:00:16 2025-12-30 16:00:16 -08:00
Steve Yegge 0f21a80fe0 Add debug logging for tombstone resurrection events
When debug mode is enabled, the merge system now logs a message when
an expired tombstone loses to a live issue (resurrection occurs).
This helps understand why previously closed issues reappear.

Example output: "Issue bd-abc resurrected (tombstone expired)"

Changes:
- Add debug parameter to Merge3WayWithTTL and merge3Way functions
- Add debug logging in all 4 resurrection code paths
- Update tests to pass new debug parameter (bd-nl2)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 15:59:51 -08:00
Steve Yegge 84a7cea35e bd sync: 2025-12-30 15:59:32 2025-12-30 15:59:32 -08:00
Steve Yegge 6304b90727 bd sync: 2025-12-30 15:58:54 2025-12-30 15:58:54 -08:00
Steve Yegge dbcf27a59f bd sync: 2025-12-30 15:58:50 2025-12-30 15:58:50 -08:00
Steve Yegge 31ee2a61b5 Use types.Status constants in merge package for type safety
Added StatusClosed constant derived from types.StatusClosed alongside
the existing StatusTombstone constant. Replaced hardcoded "closed"
strings with the constant for compile-time type checking consistency.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 15:58:49 -08:00
Steve Yegge 48dca4ea33 feat: add bd state and bd set-state helper commands (bd-7l67)
Implements convenience commands for the labels-as-state pattern:

- `bd state <id> <dimension>` - Query current state value from labels
- `bd state list <id>` - List all state dimensions on an issue
- `bd set-state <id> <dimension>=<value> --reason "..."` - Atomically:
  1. Create event bead (source of truth)
  2. Remove old dimension label
  3. Add new dimension:value label (cache)

Common dimensions: patrol, mode, health, status
Convention: <dimension>:<value> (e.g., patrol:active, mode:degraded)

Updated docs/CLI_REFERENCE.md with new State section.
Updated docs/LABELS.md to reflect implemented helpers.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 15:57:08 -08:00
Steve Yegge a534764315 Document labels-as-state pattern for operational state (bd-31ae)
Adds comprehensive documentation for using labels as a state cache:
- Convention: <dimension>:<value> (e.g., patrol:muted)
- Pattern: Create event bead (history) + update labels (cache)
- Common dimensions table (patrol, mode, status, health, lock)
- State transition examples with audit trail
- Querying and best practices

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 15:56:52 -08:00
Steve Yegge be46c18850 bd sync: 2025-12-30 15:47:21 2025-12-30 15:56:52 -08:00
Steve Yegge a98ba7d2bc bd sync: 2025-12-30 15:44:48 2025-12-30 15:56:52 -08:00
Steve Yegge 8916780c74 bd sync: 2025-12-30 15:44:39 2025-12-30 15:56:52 -08:00
Steve Yegge 32c295c7d9 bd sync: 2025-12-30 10:38:01 2025-12-30 15:56:52 -08:00
Steve Yegge 087a9dd984 Show actor on status/pinned change events in activity feed
Added actor field to RPC client and set it before daemon requests.
This ensures status changes (like pinned events) show who performed
the action in bd activity output.

Changes:
- Added actor field to Client struct
- Added SetActor method to set actor for audit trail
- Modified ExecuteWithCwd to include actor in RPC requests
- Updated main.go to call SetActor after daemon connection

Fixes gt-1ydd9

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 15:56:52 -08:00
Steve Yegge ece899e6d1 bd sync: 2025-12-30 15:56:45 2025-12-30 15:56:45 -08:00
Steve Yegge 2cf449ff5c bd sync: 2025-12-30 15:56:37 2025-12-30 15:56:37 -08:00
Steve Yegge 6d292f6a0f feat: add type: event for operational state changes (bd-ecmd)
Adds support for event beads that capture operational state transitions
as immutable records. Events are a new issue type with fields:
- event_kind: namespaced category (patrol.muted, agent.started)
- actor: entity URI who caused the event
- target: entity URI or bead ID affected
- payload: event-specific JSON data

This enables:
- bd activity --follow showing events
- bd list --type=event --target=agent:deacon
- Full audit trail for operational state
- HOP-compatible transaction records

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Executed-By: beads/crew/dave
Rig: beads
Role: crew
2025-12-30 15:54:51 -08:00
Steve Yegge 5167dcd0af bd sync: 2025-12-30 15:54:09 2025-12-30 15:54:09 -08:00
Steve Yegge 68283fa3cb bd sync: 2025-12-30 15:53:25 2025-12-30 15:53:25 -08:00
Steve Yegge 407e75b363 feat: add refs field for cross-references with relationship types (bd-irah)
- Add new DependencyType constants: until, caused-by, validates
- Add --refs flag to bd show for reverse reference lookups
- Group refs by type with appropriate emojis
- Update tests for new dependency types

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 15:52:33 -08:00
Steve Yegge a0dda7da6b bd sync: 2025-12-30 15:52:08 2025-12-30 15:52:08 -08:00
Steve Yegge 1cf687afaf bd sync: 2025-12-30 15:49:59 2025-12-30 15:49:59 -08:00
Steve Yegge 2cd2d4deb3 bd sync: 2025-12-30 15:49:30 2025-12-30 15:49:30 -08:00
Steve Yegge 1d6139e51e bd sync: 2025-12-30 15:47:21 2025-12-30 15:47:21 -08:00
Steve Yegge 4f5084a456 docs: add labels-as-state pattern for operational state (bd-31ae)
Documents the convention for using labels as cached operational state
on role beads: <dimension>:<value> format (e.g., patrol:muted, mode:degraded).

Pattern: create event bead (source of truth) then update role bead labels
(fast lookup cache). Includes best practices, common dimensions, and
notes future helper commands (bd state, bd set-state).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 15:47:13 -08:00
Steve Yegge a51abd2a6d bd sync: 2025-12-30 15:44:48 2025-12-30 15:44:48 -08:00
Steve Yegge b5284f7f5d bd sync: 2025-12-30 15:44:39 2025-12-30 15:44:39 -08:00
Rich Liebling e9f6bfe0de Improve CLI_REFERENCE epic creation example (#808)
Co-authored-by: Rich Liebling <rich.liebling@coursehero.com>
2025-12-30 15:43:04 -08:00
Steve Yegge 5f3cb0fdf3 refactor: remove Gas Town references from codebase
Replace Gas Town-specific terminology with generic orchestrator concepts:
- "Gas Town" → "orchestrator" or "multi-clone"
- Hardcoded ~/gt/ paths → GT_ROOT environment variable
- signalGasTownActivity → signalOrchestratorActivity
- GUPP → hook-based work assignment

Updated 21 files across CHANGELOG, cmd/bd/, internal/, docs/, scripts.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Executed-By: beads/crew/dave
Rig: beads
Role: crew
2025-12-30 14:13:32 -08:00
Steve Yegge 7f95ba714c revert: restore original CLAUDE.md (remove Gas Town content leak)
Executed-By: beads/crew/dave
Rig: beads
Role: crew
2025-12-30 11:34:46 -08:00
Steve Yegge 29743528f6 bd sync: 2025-12-30 10:38:01 2025-12-30 10:38:01 -08:00
Steve Yegge eefeb1a5bc refactor: dedupe error classification, fix --force+--source=db conflict
Post-merge cleanup of PR #805:

1. Extract duplicate error classification logic into classifyDatabaseError()
   helper function (was duplicated in two places in database.go)

2. Fix semantic conflict between --force and --source=db flags:
   - --force implies "database is broken, rebuild from JSONL"
   - --source=db implies "use database as source of truth"
   - These are contradictory; now errors with clear message
   - --force with --source=auto or --source=jsonl works as expected

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Executed-By: beads/crew/dave
Rig: beads
Role: crew
2025-12-30 10:37:53 -08:00
Steve Yegge c86bffc045 Merge pull request #805 from kraitsura/feature/bd-doctor-enhancements
feat: Enhance bd doctor with force repair and source selection
2025-12-30 10:34:41 -08:00
Steve Yegge 0a741d800c bd sync: 2025-12-30 10:27:55 2025-12-30 10:27:55 -08:00
Steve Yegge 5783cec740 bd sync: 2025-12-30 10:20:45 2025-12-30 10:20:45 -08:00
Steve Yegge f6f9ef260d feat: auto-detect non-TTY and adjust output (bd-xrwy)
Add TTY detection to automatically disable ANSI colors when stdout is
piped or redirected. Respects standard conventions:
- NO_COLOR environment variable (no-color.org)
- CLICOLOR=0 disables color
- CLICOLOR_FORCE enables color even in non-TTY

Also adds ShouldUseEmoji() helper controlled by BD_NO_EMOJI.
Pager already disabled non-TTY in previous work (bd-jdz3).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 10:19:44 -08:00
Steve Yegge 0e0307ca49 bd sync: 2025-12-30 07:04:49 2025-12-30 07:04:50 -08:00
Steve Yegge 06c8855873 feat: add daemon RPC endpoints for config and mol stale (bd-ag35)
Add two new RPC endpoints to allow CLI commands to work in daemon mode:

1. GetConfig (OpGetConfig) - Retrieves config values from the daemon database.
   Used by bd create to validate issue prefix in daemon mode.

2. MolStale (OpMolStale) - Finds stale molecules (complete-but-unclosed
   epics). Used by bd mol stale command in daemon mode.

Changes:
- internal/rpc/protocol.go: Add operation constants and request/response types
- internal/rpc/client.go: Add client methods GetConfig() and MolStale()
- internal/rpc/server_issues_epics.go: Add handler implementations
- internal/rpc/server_routing_validation_diagnostics.go: Register handlers
- cmd/bd/create.go: Use GetConfig RPC instead of skipping validation
- cmd/bd/mol_stale.go: Use MolStale RPC instead of requiring --no-daemon
- internal/rpc/coverage_test.go: Add tests for new endpoints

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 06:59:51 -08:00
Steve Yegge 96f2996997 Show actor on status/pinned change events in activity feed
Added actor field to RPC client and set it before daemon requests.
This ensures status changes (like pinned events) show who performed
the action in bd activity output.

Changes:
- Added actor field to Client struct
- Added SetActor method to set actor for audit trail
- Modified ExecuteWithCwd to include actor in RPC requests
- Updated main.go to call SetActor after daemon connection

Fixes gt-1ydd9

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 06:57:51 -08:00
Steve Yegge 7f5378ba26 bd sync: 2025-12-30 00:55:05 2025-12-30 00:55:05 -08:00