bd sync: 2026-01-02 00:57:14
This commit is contained in:
committed by
Steve Yegge
parent
16993bb1fc
commit
3e7eba9241
@@ -531,6 +531,7 @@
|
||||
{"id":"bd-l6yk","title":"bd mol burn should work on mols, not just wisps","description":"Currently `bd mol burn` only works on wisps (Ephemeral=true):\n\n```\n$ bd mol burn bd-mol-p7i\nError: molecule bd-mol-p7i is not a wisp (Ephemeral=false)\nHint: mol burn only works with wisp molecules\n Use 'bd delete' to remove non-wisp issues\n```\n\nThe name 'burn' implies destruction - it should work on any molecule, not just wisps. When called on a regular mol, it should convert to `bd delete --cascade`.\n\n**Proposed behavior:**\n- If wisp: current behavior (delete without tombstones)\n- If mol: `bd delete \u003cid\u003e --cascade` (delete with tombstones)\n\nThis makes the metaphor consistent: burn = destroy a molecule, regardless of phase.","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-29T17:05:08.115592-08:00","created_by":"beads/crew/emma","updated_at":"2025-12-29T17:10:19.034979-08:00","closed_at":"2025-12-29T17:10:19.034979-08:00","close_reason":"Implemented: mol burn now works on both wisps and mols"}
|
||||
{"id":"bd-l7y3","title":"bd mol bond --pour should set Wisp=false","description":"In mol_bond.go bondProtoMol(), opts.Wisp is hardcoded to true (line 392). This ignores the --pour flag. When user specifies --pour to make an issue persistent, the Wisp field should be false so the issue is not marked for bulk deletion.\n\nCurrent behavior:\n- --pour flag correctly selects regular storage (not wisp storage)\n- But opts.Wisp=true means spawned issues are still marked for cleanup when closed\n\nExpected behavior:\n- --pour should set Wisp=false so persistent issues are not auto-cleaned\n\nComparison with mol_spawn.go (line 204):\n wisp := !pour // Correctly respects --pour flag\n result, err := spawnMolecule(ctx, store, subgraph, vars, assignee, actor, wisp)\n\nFix: Pass pour flag to bondProtoMol and set opts.Wisp = !pour","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-23T15:15:00.562346-08:00","updated_at":"2025-12-23T15:25:22.53144-08:00","closed_at":"2025-12-23T15:25:22.53144-08:00"}
|
||||
{"id":"bd-ldb0","title":"Rename ephemeral → wisp throughout codebase","description":"## The Change\n\nRename 'ephemeral' to 'wisp' throughout the beads codebase.\n\n## Why\n\n**Ephemeral** is:\n- 4 syllables (too long)\n- Greek/academic (doesn't match bond/burn/squash)\n- Overused in tech (K8s, networking, storage)\n- Passive/descriptive\n\n**Wisp** is:\n- 1 syllable (matches bond/burn/squash)\n- Evocative - you can SEE a wisp\n- Steam engine metaphor - Gas Town is engines, steam wisps rise and dissipate\n- Will-o'-the-wisp - transient spirits that guide then vanish\n- Unique - nobody else uses it\n\n## The Steam Engine Metaphor\n\n```\nEngine does work → generates steam\nSteam wisps rise → execution trace\nSteam condenses → digest (distillate)\nSteam dissipates → cleaned up (burned)\n```\n\n## Full Vocabulary\n\n| Term | Meaning |\n|------|---------|\n| bond | Attach proto to work (creates wisps) |\n| wisp | Temporary execution step |\n| squash | Condense wisps into digest |\n| burn | Destroy wisps without record |\n| digest | Permanent condensed record |\n\n## Changes Required\n\n### Code\n- `Ephemeral bool` → `Wisp bool` in types/issue.go\n- `--ephemeral` flag → remove (wisp is default)\n- `--persistent` flag → keep as opt-out\n- `bd cleanup --ephemeral` → `bd cleanup --wisps`\n- Update all references in mol_*.go files\n\n### Docs\n- Update all documentation\n- Update CLAUDE.md examples\n- Update CLI help text\n\n### Database Migration\n- Add migration to rename field (or keep internal name, just change API)\n\n## Example Usage After\n\n```bash\nbd mol bond mol-polecat-work # Creates wisps (default)\nbd mol bond mol-xxx --persistent # Creates permanent issues\nbd mol squash bd-xxx # Condenses wisps → digest\nbd cleanup --wisps # Clean old wisps\nbd list --wisps # Show wisp issues\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-21T14:44:41.576068-08:00","updated_at":"2025-12-22T00:32:31.153738-08:00","closed_at":"2025-12-22T00:32:31.153738-08:00"}
|
||||
{"id":"bd-lejq","title":"Release: minor version bump","description":"Bump minor version for beads release. Update version in relevant files, update CHANGELOG if present, ensure tests pass, tag release.","status":"hooked","priority":1,"issue_type":"task","assignee":"beads/polecats/obsidian","created_at":"2026-01-02T00:56:08.161483-08:00","created_by":"beads/crew/dave","updated_at":"2026-01-02T00:56:35.931894-08:00"}
|
||||
{"id":"bd-lfak","title":"bd preflight: PR readiness checks for contributors","description":"## Vision\n\nEncode project-specific institutional knowledge into executable checks. CONTRIBUTING.md is documentation that's read once and forgotten; `bd preflight` is documentation that runs at exactly the right moment.\n\n## Problem Statement\n\nContributors face a \"last mile\" problem - they do the work but stumble on project-specific gotchas at PR time:\n- Nix vendorHash gets stale when go.sum changes\n- Beads artifacts leak into PRs (see bd-umbf for namespace solution)\n- Version mismatches between version.go and default.nix\n- Tests/lint not run locally before pushing\n- Other project-specific checks that only surface when CI fails\n\nThese are too obscure to remember, exist in docs nobody reads end-to-end, and waste CI round-trips.\n\n## Why beads?\n\nBeads already has a foothold in the contributor workflow. It knows:\n- Git state (staged files, branch, dirty status)\n- Project structure\n- The specific issue being worked on\n- Project-specific configuration\n\n## Proposed Interface\n\n### Tier 1: Checklist Mode (v1)\n\n $ bd preflight\n PR Readiness Checklist:\n\n [ ] Tests pass: go test -short ./...\n [ ] Lint passes: golangci-lint run ./...\n [ ] No beads pollution: check .beads/issues.jsonl diff\n [ ] Nix hash current: go.sum unchanged or vendorHash updated\n [ ] Version sync: version.go matches default.nix\n\n Run 'bd preflight --check' to validate automatically.\n\n### Tier 2: Check Mode (v2)\n\n $ bd preflight --check\n ✓ Tests pass\n ✓ Lint passes\n ⚠ Beads pollution: 3 issues in diff - are these project issues or personal?\n ✗ Nix hash stale: go.sum changed, vendorHash needs update\n Fix: sha256-KRR6dXzsSw8OmEHGBEVDBOoIgfoZ2p0541T9ayjGHlI=\n ✓ Version sync\n\n 1 error, 1 warning. Run 'bd preflight --fix' to auto-fix where possible.\n\n### Tier 3: Fix Mode (v3)\n\n $ bd preflight --fix\n ✓ Updated vendorHash in default.nix\n ⚠ Cannot auto-fix beads pollution - manual review needed\n\n## Checks to Implement\n\n| Check | Description | Auto-fixable |\n|-------|-------------|--------------|\n| tests | Run go test -short ./... | No |\n| lint | Run golangci-lint | Partial (gofmt) |\n| beads-pollution | Detect personal issues in diff | No (see bd-umbf) |\n| nix-hash | Detect stale vendorHash | Yes (if nix available) |\n| version-sync | version.go matches default.nix | Yes |\n| no-debug | No TODO/FIXME/console.log | Warn only |\n| clean-stage | No unintended files staged | Warn only |\n\n## Future: Configuration\n\nMake checks configurable per-project via .beads/preflight.yaml:\n\n preflight:\n checks:\n - name: tests\n run: go test -short ./...\n required: true\n - name: no-secrets\n pattern: \"**/*.env\"\n staged: deny\n - name: custom-check\n run: ./scripts/validate.sh\n\nThis lets any project using beads define their own preflight checks.\n\n## Implementation Phases\n\n### Phase 1: Static Checklist\n- Implement bd preflight with hardcoded checklist for beads\n- No execution, just prints what to check\n- Update CONTRIBUTING.md to reference it\n\n### Phase 2: Automated Checks\n- Implement bd preflight --check\n- Run tests, lint, detect stale hashes\n- Clear pass/fail/warn output\n\n### Phase 3: Auto-fix\n- Implement bd preflight --fix\n- Fix vendorHash, version sync\n- Integrate with bd-umbf solution for pollution\n\n### Phase 4: Configuration\n- .beads/preflight.yaml support\n- Make it useful for other projects using beads\n- Plugin/hook system for custom checks\n\n## Dependencies\n\n- bd-umbf: Namespace isolation for beads pollution (blocking for full solution)\n\n## Success Metrics\n\n- Fewer CI failures on first PR push\n- Reduced \"fix nix hash\" commits\n- Contributors report preflight caught issues before CI","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-13T18:01:39.587078-08:00","updated_at":"2025-12-31T00:09:22.400043-08:00","closed_at":"2025-12-31T00:09:22.400043-08:00","close_reason":"All subtasks complete: bd preflight --check now runs tests, lint, nix-hash, and version-sync checks","dependencies":[{"issue_id":"bd-lfak","depends_on_id":"bd-umbf","type":"blocks","created_at":"2025-12-13T18:01:46.059901-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-lfak.1","title":"Scaffold bd preflight command with checklist output","status":"closed","priority":2,"issue_type":"task","assignee":"beads/polecats/amber","created_at":"2025-12-30T18:06:29.297254-08:00","created_by":"mayor","updated_at":"2025-12-30T18:11:15.884294-08:00","closed_at":"2025-12-30T18:11:15.884294-08:00","close_reason":"Implemented static checklist output. Command now shows PR readiness checks. --check and --fix flags documented for future phases.","dependencies":[{"issue_id":"bd-lfak.1","depends_on_id":"bd-lfak","type":"parent-child","created_at":"2025-12-30T18:06:29.297783-08:00","created_by":"mayor"}]}
|
||||
{"id":"bd-lfak.2","title":"Implement --check flag with test runner","description":"## Summary\nImplement the `--check` flag to run `go test -short ./...` and report results.\n\n## Implementation Details\n\n### Location\nFile: `cmd/bd/preflight.go`\n\n### Changes Required\n\n1. **Add check execution logic** in `runPreflight()`:\n```go\nif check {\n runChecks(cmd) // New function\n return\n}\n```\n\n2. **Implement test runner**:\n```go\nfunc runTestCheck() CheckResult {\n cmd := exec.Command(\"go\", \"test\", \"-short\", \"./...\")\n output, err := cmd.CombinedOutput()\n return CheckResult{\n Name: \"tests\",\n Passed: err == nil,\n Output: string(output),\n Command: \"go test -short ./...\",\n }\n}\n```\n\n3. **Define CheckResult struct**:\n```go\ntype CheckResult struct {\n Name string\n Passed bool\n Output string\n Command string\n}\n```\n\n4. **Output format**:\n```\n$ bd preflight --check\n✓ Tests pass\n Command: go test -short ./...\n \n# On failure:\n✗ Tests fail\n Command: go test -short ./...\n Output: [truncated test output]\n```\n\n### Testing\n- Add tests in `cmd/bd/preflight_test.go`\n- Test with passing tests (this repo)\n- Test with intentionally failing test (mock or temp file)\n\n### Acceptance Criteria\n- [x] `--check` flag runs tests (not just prints message)\n- [x] Clear pass/fail output with ✓/✗ symbols\n- [x] Shows command being run\n- [x] Shows output on failure (truncated if long)\n- [x] Exits with non-zero code if tests fail\n- [x] Works with `--json` flag for programmatic use","status":"closed","priority":2,"issue_type":"task","assignee":"beads/polecats/basalt","created_at":"2025-12-30T18:06:30.419315-08:00","created_by":"mayor","updated_at":"2025-12-30T23:33:04.567543-08:00","closed_at":"2025-12-30T23:33:04.567543-08:00","close_reason":"Fixed test/implementation mismatch - tests now align with actual preflight.go","dependencies":[{"issue_id":"bd-lfak.2","depends_on_id":"bd-lfak","type":"parent-child","created_at":"2025-12-30T18:06:30.419875-08:00","created_by":"mayor"},{"issue_id":"bd-lfak.2","depends_on_id":"bd-lfak.1","type":"blocks","created_at":"2025-12-30T18:06:48.582603-08:00","created_by":"mayor"}]}
|
||||
|
||||
Reference in New Issue
Block a user