Skip to content

Commit 748a330

Browse files
Merge pull request #2 from deepakdgupta1/local-desktop-installation-support
feat: Add Upstream Sync Workflow
2 parents 2f4aaae + 0a95b50 commit 748a330

270 files changed

Lines changed: 29432 additions & 4196 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.beads/README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,32 +14,32 @@ Beads is issue tracking that lives in your repo, making it perfect for AI coding
1414

1515
```bash
1616
# Create new issues
17-
bd create "Add user authentication"
17+
br create "Add user authentication"
1818

1919
# View all issues
20-
bd list
20+
br list
2121

2222
# View issue details
23-
bd show <issue-id>
23+
br show <issue-id>
2424

2525
# Update issue status
26-
bd update <issue-id> --status in_progress
27-
bd update <issue-id> --status done
26+
br update <issue-id> --status in_progress
27+
br update <issue-id> --status done
2828

2929
# Sync with git remote
30-
bd sync
30+
br sync
3131
```
3232

3333
## Daemon (Optional)
3434

35-
Beads has an optional background daemon (`bd daemon`) that auto-syncs issues with git.
35+
Beads has an optional background daemon (`br daemon`) that auto-syncs issues with git.
3636

3737
In this repo, the sync branch is configured as `main`. Running the daemon while you are on a different branch can cause `.beads/issues.jsonl` to be rewritten from `main`, leaving your working tree dirty and blocking `git pull --rebase`.
3838

3939
Recommended workflow:
40-
- Prefer manual sync: `bd sync` (default).
41-
- If you use the daemon, run it only while you are on `main`, or run it in local-only mode: `bd daemon --start --local`.
42-
- If `.beads/issues.jsonl` is changing unexpectedly, check/stop the daemon: `bd daemon --status` / `bd daemon --stop`.
40+
- Prefer manual sync: `br sync` (default).
41+
- If you use the daemon, run it only while you are on `main`, or run it in local-only mode: `br daemon --start --local`.
42+
- If `.beads/issues.jsonl` is changing unexpectedly, check/stop the daemon: `br daemon --status` / `br daemon --stop`.
4343

4444
### Working with Issues
4545

@@ -75,16 +75,16 @@ Try Beads in your own projects:
7575
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
7676

7777
# Initialize in your repo
78-
bd init
78+
br init
7979

8080
# Create your first issue
81-
bd create "Try out Beads"
81+
br create "Try out Beads"
8282
```
8383

8484
## Learn More
8585

8686
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
87-
- **Quick Start Guide**: Run `bd quickstart`
87+
- **Quick Start Guide**: Run `br quickstart`
8888
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
8989

9090
---

.beads/config.yaml

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,3 @@
1-
# Beads Configuration File
2-
# This file configures default behavior for all bd commands in this repository
3-
# All settings can also be set via environment variables (BD_* prefix)
4-
# or overridden with command-line flags
5-
6-
# Issue prefix for this repository (used by bd init)
7-
# If not set, bd init will auto-detect from directory name
8-
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
9-
# issue-prefix: ""
10-
11-
# Use no-db mode: load from JSONL, no SQLite, write back after each command
12-
# When true, bd will use .beads/issues.jsonl as the source of truth
13-
# instead of SQLite database
14-
# no-db: false
15-
16-
# Disable daemon for RPC communication (forces direct database access)
17-
# no-daemon: false
18-
19-
# Disable auto-flush of database to JSONL after mutations
20-
# no-auto-flush: false
21-
22-
# Disable auto-import from JSONL when it's newer than database
23-
# no-auto-import: false
24-
25-
# Enable JSON output by default
26-
# json: false
27-
28-
# Default actor for audit trails (overridden by BD_ACTOR or --actor)
29-
# actor: ""
30-
31-
# Path to database (overridden by BEADS_DB or --db)
32-
# db: ""
33-
34-
# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
351
auto-start-daemon: false
36-
37-
# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
38-
# flush-debounce: "5s"
39-
40-
# Git branch for beads commits (bd sync will commit to this branch)
41-
# IMPORTANT: Set this for team projects so all clones use the same sync branch.
42-
# This setting persists across clones (unlike database config which is gitignored).
43-
# Can also use BEADS_SYNC_BRANCH env var for local override.
44-
# If not set, bd sync will require you to run 'bd config set sync.branch=<branch>'.
45-
sync-branch: "beads-sync"
46-
47-
# Multi-repo configuration (experimental - bd-307)
48-
# Allows hydrating from multiple repositories and routing writes to the correct JSONL
49-
# repos:
50-
# primary: "." # Primary repo (where this database lives)
51-
# additional: # Additional repos to hydrate from (read-only)
52-
# - ~/beads-planning # Personal planning repo
53-
# - ~/work-planning # Work planning repo
54-
55-
# Integration settings (access with 'bd config get/set')
56-
# These are stored in the database, not in this file:
57-
# - jira.url
58-
# - jira.project
59-
# - linear.url
60-
# - linear.api-key
61-
# - github.org
62-
# - github.repo
2+
sync-branch: beads-sync
3+
issue_prefix: agentic_coding_flywheel_setup

.beads/issues.jsonl

Lines changed: 1018 additions & 982 deletions
Large diffs are not rendered by default.

.github/workflows/installer-canary-strict.yml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,21 @@ jobs:
3131
env:
3232
ACFS_CHECKSUMS_REF: main
3333
run: |
34-
set -o pipefail
3534
chmod +x ./tests/vm/test_install_ubuntu.sh
3635
36+
UBUNTU="${{ inputs.ubuntu || 'all' }}"
37+
MODE="${{ inputs.mode || 'vibe' }}"
38+
39+
rc=0
3740
if [[ "${{ github.event_name }}" == "schedule" ]]; then
38-
./tests/vm/test_install_ubuntu.sh --all --mode "vibe" --strict 2>&1 | tee canary.log
39-
elif [[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ inputs.ubuntu }}" == "all" ]]; then
40-
./tests/vm/test_install_ubuntu.sh --all --mode "${{ inputs.mode }}" --strict 2>&1 | tee canary.log
41+
(set -o pipefail; ./tests/vm/test_install_ubuntu.sh --all --mode "vibe" --strict 2>&1 | tee canary.log) || rc=$?
42+
elif [[ "${{ github.event_name }}" == "workflow_dispatch" && "$UBUNTU" == "all" ]]; then
43+
(set -o pipefail; ./tests/vm/test_install_ubuntu.sh --all --mode "$MODE" --strict 2>&1 | tee canary.log) || rc=$?
4144
else
42-
./tests/vm/test_install_ubuntu.sh --ubuntu "${{ inputs.ubuntu }}" --mode "${{ inputs.mode }}" --strict 2>&1 | tee canary.log
45+
(set -o pipefail; ./tests/vm/test_install_ubuntu.sh --ubuntu "$UBUNTU" --mode "$MODE" --strict 2>&1 | tee canary.log) || rc=$?
4346
fi
4447
45-
echo "exit_code=${PIPESTATUS[0]}" >> "$GITHUB_OUTPUT"
48+
echo "exit_code=$rc" >> "$GITHUB_OUTPUT"
4649
4750
- name: Detect checksum mismatch
4851
id: detect

.github/workflows/installer-canary.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ jobs:
2828
run: |
2929
chmod +x ./tests/vm/test_install_ubuntu.sh
3030
31-
if [[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ inputs.ubuntu }}" == "all" ]]; then
32-
./tests/vm/test_install_ubuntu.sh --all --mode "${{ inputs.mode }}"
31+
UBUNTU="${{ inputs.ubuntu || '24.04' }}"
32+
MODE="${{ inputs.mode || 'vibe' }}"
33+
34+
if [[ "${{ github.event_name }}" == "workflow_dispatch" && "$UBUNTU" == "all" ]]; then
35+
./tests/vm/test_install_ubuntu.sh --all --mode "$MODE"
3336
else
34-
./tests/vm/test_install_ubuntu.sh --ubuntu "${{ inputs.ubuntu }}" --mode "${{ inputs.mode }}"
37+
./tests/vm/test_install_ubuntu.sh --ubuntu "$UBUNTU" --mode "$MODE"
3538
fi

.github/workflows/installer-notification-receiver.yml

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -491,21 +491,29 @@ jobs:
491491
TOOL_NAME="${{ needs.validate-dispatch.outputs.tool_name }}"
492492
SOURCE_REPO="${{ needs.validate-dispatch.outputs.source_repo }}"
493493
494-
gh pr create \
495-
--base main \
496-
--head "auto/remove-${TOOL_NAME}" \
497-
--title "chore(checksums): Remove $TOOL_NAME" \
498-
--body "## Tool Removal: $TOOL_NAME
494+
cat > /tmp/removal-pr-body.md << 'PREOF'
495+
## Tool Removal: $TOOL_NAME
496+
497+
This PR removes **$TOOL_NAME** from checksums.yaml.
498+
499+
### Reason
500+
The upstream repository ($SOURCE_REPO) has indicated the installer should be removed.
499501
500-
This PR removes **$TOOL_NAME** from checksums.yaml.
502+
### Checklist
503+
- [ ] Confirmed tool is no longer needed
504+
- [ ] Verified this is intentional, not an error
501505
502-
### Reason
503-
The upstream repository ($SOURCE_REPO) has indicated the installer should be removed.
506+
---
507+
*Generated by ACFS Installer Notification Receiver*
508+
PREOF
504509
505-
### Checklist
506-
- [ ] Confirmed tool is no longer needed
507-
- [ ] Verified this is intentional, not an error
510+
# Substitute variables in the template
511+
sed -i "s/\$TOOL_NAME/$TOOL_NAME/g" /tmp/removal-pr-body.md
512+
sed -i "s|\$SOURCE_REPO|$SOURCE_REPO|g" /tmp/removal-pr-body.md
508513
509-
---
510-
*Generated by ACFS Installer Notification Receiver*" \
514+
gh pr create \
515+
--base main \
516+
--head "auto/remove-${TOOL_NAME}" \
517+
--title "chore(checksums): Remove $TOOL_NAME" \
518+
--body-file /tmp/removal-pr-body.md \
511519
--label "automated,checksum-removal,needs-review"

.github/workflows/installer.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ jobs:
8989
- name: Run library globals integration test
9090
run: bash tests/unit/test_lib_globals.sh
9191

92+
- name: Run macOS bootstrap mock test
93+
run: bash tests/vm/test_macos_bootstrap.sh
94+
9295
manifest-drift:
9396
name: Manifest Drift Check
9497
runs-on: ubuntu-latest
@@ -309,6 +312,18 @@ jobs:
309312
su - ubuntu -c "zsh -ic 'dcg doctor'"
310313
su - ubuntu -c "zsh -ic 'ru --version'"
311314
su - ubuntu -c "zsh -ic 'onboard --help'"
315+
# beads_rust (required) - issue tracking
316+
su - ubuntu -c "zsh -ic 'br --version'"
317+
# New stack tools (bd-1ega)
318+
su - ubuntu -c "zsh -ic 'ms --version'"
319+
su - ubuntu -c "zsh -ic 'apr --help || true'"
320+
su - ubuntu -c "zsh -ic 'jfp --version || true'"
321+
su - ubuntu -c "zsh -ic 'pt --help || true'"
322+
su - ubuntu -c "zsh -ic 'brenner --version || brenner --help || true'"
323+
su - ubuntu -c "zsh -ic 'rch --version || rch --help || true'"
324+
su - ubuntu -c "zsh -ic 'wa --version || wa --help || true'"
325+
su - ubuntu -c "zsh -ic 'sysmoni --version || sysmoni --help || true'"
326+
# Agents
312327
su - ubuntu -c "zsh -ic 'claude --version'"
313328
su - ubuntu -c "zsh -ic 'codex --version'"
314329
su - ubuntu -c "zsh -ic 'gemini --version'"
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
name: Internal Checksums Drift Check
2+
3+
on:
4+
push:
5+
branches: [main, master]
6+
pull_request:
7+
branches: [main, master]
8+
9+
jobs:
10+
check-drift:
11+
name: Verify internal script checksums
12+
runs-on: ubuntu-latest
13+
permissions:
14+
contents: read
15+
steps:
16+
- name: Checkout repository
17+
uses: actions/checkout@v4
18+
19+
- name: Run manifest drift check
20+
id: drift
21+
run: |
22+
chmod +x ./scripts/check-manifest-drift.sh
23+
set +e
24+
./scripts/check-manifest-drift.sh --json > drift-result.json 2>drift.log
25+
echo "exit_code=$?" >> "$GITHUB_OUTPUT"
26+
set -e
27+
28+
- name: Summary
29+
if: always()
30+
run: |
31+
echo "## Internal Checksums Drift Check" >> "$GITHUB_STEP_SUMMARY"
32+
echo "" >> "$GITHUB_STEP_SUMMARY"
33+
34+
if [[ -f drift-result.json ]] && jq empty drift-result.json 2>/dev/null; then
35+
drift=$(jq -r '.drift_detected' drift-result.json)
36+
checked=$(jq -r '.internal_scripts.checked' drift-result.json)
37+
drifted=$(jq -r '.internal_scripts.drifted' drift-result.json)
38+
39+
echo "| Metric | Value |" >> "$GITHUB_STEP_SUMMARY"
40+
echo "|--------|-------|" >> "$GITHUB_STEP_SUMMARY"
41+
echo "| Scripts checked | ${checked} |" >> "$GITHUB_STEP_SUMMARY"
42+
echo "| Scripts drifted | ${drifted} |" >> "$GITHUB_STEP_SUMMARY"
43+
echo "| Manifest match | $(jq -r 'if .manifest.actual_sha256 == .manifest.recorded_sha256 then "✅" else "❌" end' drift-result.json) |" >> "$GITHUB_STEP_SUMMARY"
44+
echo "" >> "$GITHUB_STEP_SUMMARY"
45+
46+
if [[ "$drift" == "true" ]]; then
47+
echo "❌ **Drift detected.** Run \`cd packages/manifest && bun run generate\` and commit the result." >> "$GITHUB_STEP_SUMMARY"
48+
echo "" >> "$GITHUB_STEP_SUMMARY"
49+
echo "### Drifted files" >> "$GITHUB_STEP_SUMMARY"
50+
jq -r '.internal_scripts.drift_files[]? // .reasons[]?' drift-result.json | while IFS= read -r line; do
51+
echo "- \`${line}\`" >> "$GITHUB_STEP_SUMMARY"
52+
done
53+
else
54+
echo "✅ **No drift — all internal checksums match.**" >> "$GITHUB_STEP_SUMMARY"
55+
fi
56+
else
57+
echo "⚠️ Drift check did not produce valid JSON. See logs." >> "$GITHUB_STEP_SUMMARY"
58+
if [[ -f drift.log ]]; then
59+
echo '```' >> "$GITHUB_STEP_SUMMARY"
60+
cat drift.log >> "$GITHUB_STEP_SUMMARY"
61+
echo '```' >> "$GITHUB_STEP_SUMMARY"
62+
fi
63+
fi
64+
65+
- name: Fail on drift
66+
if: steps.drift.outputs.exit_code != '0'
67+
run: |
68+
echo "::error::Internal script checksums have drifted. Run: cd packages/manifest && bun run generate"
69+
if [[ -f drift.log ]]; then
70+
cat drift.log
71+
fi
72+
exit 1

0 commit comments

Comments
 (0)