Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
bbaf57f
chore: create installer epic with 7 stories, 22 tasks, full dependenc…
ldangelo Mar 24, 2026
1f1a749
Task: Update package.json — scope to @oftheangels/foreman, add bin/fi…
ldangelo Mar 24, 2026
e7c20d6
Merge branch 'foreman/bd-b3af' into dev
ldangelo Mar 24, 2026
6a26385
Task: Create .github/workflows/ci.yml for PR testing (bd-382d)
ldangelo Mar 24, 2026
0bd4393
Merge branch 'foreman/bd-382d' into dev
ldangelo Mar 24, 2026
a38566f
Task: Create bin/foreman shim script for npm global install (bd-9tqo)
ldangelo Mar 24, 2026
7dc2c3d
Merge branch 'foreman/bd-9tqo' into dev
ldangelo Mar 24, 2026
afcb2eb
Test: Verify CI workflow syntax with act or manual PR (bd-h6t5)
ldangelo Mar 24, 2026
f184e70
Merge branch 'foreman/bd-h6t5' into dev
ldangelo Mar 24, 2026
e05d2d4
Task: Add .npmignore to exclude dev files from published package (bd-…
ldangelo Mar 24, 2026
26e2f4a
Merge branch 'foreman/bd-gmql' into dev
ldangelo Mar 24, 2026
e7479c2
Story: GitHub Actions CI — test on PR (bd-rm95)
ldangelo Mar 24, 2026
8d988c7
Merge branch 'foreman/bd-rm95' into dev
ldangelo Mar 24, 2026
cf1ac96
Test: Verify npm pack produces installable package (bd-01mn)
ldangelo Mar 24, 2026
212b370
Merge branch 'foreman/bd-01mn' into dev
ldangelo Mar 24, 2026
cd1264b
Story: Configure npm package for @oftheangels/foreman publishing (bd-…
ldangelo Mar 24, 2026
d34f716
Merge branch 'foreman/bd-9l8m' into dev
ldangelo Mar 24, 2026
7b5801f
fix: agent-worker spawn path uses .js extension (not .ts)
ldangelo Mar 24, 2026
93f613e
chore: add bead for branch-aware foreman run (bd-0unb)
ldangelo Mar 24, 2026
13b7bde
foreman run should detect current branch and target all work there (b…
ldangelo Mar 24, 2026
e77b371
Merge branch 'foreman/bd-0unb' into dev
ldangelo Mar 24, 2026
30de3e0
fix: spawn agent-worker with cwd=projectRoot, not worktree
ldangelo Mar 24, 2026
2a2533d
Dispatcher creates duplicate runs for the same bead — race between di…
ldangelo Mar 24, 2026
3f4ff21
Merge branch 'foreman/bd-mpk8' into dev
ldangelo Mar 24, 2026
c4f2de1
fix: increase SQLite busy_timeout from 5s to 30s
ldangelo Mar 24, 2026
e1264b7
chore: create beads for br cache staleness, dispatch loop exit, bv me…
ldangelo Mar 24, 2026
777c823
fix: increase bv timeout from 3s to 10s — was timing out on 400+ issues
ldangelo Mar 24, 2026
64befa4
Downgrade 'bv unavailable' message — only show once or at debug level…
ldangelo Mar 24, 2026
bd88b7c
Merge branch 'foreman/bd-uube' into dev
ldangelo Mar 24, 2026
5a9719b
chore: add bead for serialized br write queue (bd-pcvj)
ldangelo Mar 24, 2026
4bf636b
foreman run dispatch loop doesn't exit when no work available (bd-9q1c)
ldangelo Mar 24, 2026
820b71b
Merge branch 'foreman/bd-9q1c' into dev
ldangelo Mar 24, 2026
f0dc3b5
chore: add beads for pre-push validation and log cleanup
ldangelo Mar 24, 2026
3a99472
Clean up old error logs from fixed bugs (EPIPE, .ts module, etc.) (bd…
ldangelo Mar 24, 2026
348f9de
Merge branch 'foreman/bd-v18r' into dev
ldangelo Mar 24, 2026
13f8c17
fix: agent-worker chdir to worktree after spawn — file writes go to c…
ldangelo Mar 24, 2026
9f43faf
fix: remove orphaned safe-build.test.ts from wrong-cwd agent write
ldangelo Mar 24, 2026
c5818d4
fix: remove accidentally committed temp files, add var/ to gitignore
ldangelo Mar 24, 2026
4972254
fix: remove stale /send-mail preflight from all default prompts
ldangelo Mar 24, 2026
cecb1b5
npm run build deletes dist/ mid-flight — crashes any running agent-wo…
ldangelo Mar 24, 2026
bb238a2
Merge branch 'foreman/bd-lewi' into dev
ldangelo Mar 24, 2026
c877d5c
npm run build deletes dist/ mid-flight — crashes any running agent-wo…
ldangelo Mar 24, 2026
9f31dc0
Merge branch 'foreman/bd-lewi' into dev
ldangelo Mar 24, 2026
8dc5dd8
Task: Add esbuild as dev dependency and create bundle script (bd-m130)
ldangelo Mar 24, 2026
65f59af
Merge branch 'foreman/bd-m130' into dev
ldangelo Mar 24, 2026
279eaa5
Finalize should rebase onto target + re-run tests before pushing — ca…
ldangelo Mar 24, 2026
f087b6d
Merge branch 'foreman/bd-ywnz' into dev
ldangelo Mar 24, 2026
b857508
Task: Handle better-sqlite3 native addon in bundle (bd-2gap)
ldangelo Mar 24, 2026
eb8a33a
Merge branch 'foreman/bd-2gap' into dev
ldangelo Mar 24, 2026
513664f
Add serialized write queue for beads operations — prevent SQLite cont…
ldangelo Mar 24, 2026
0f631a8
Merge branch 'foreman/bd-pcvj' into dev
ldangelo Mar 24, 2026
112e25c
chore: sync beads
ldangelo Mar 24, 2026
6d5019c
Finalize should handle 'nothing to commit' as success for verify/test…
ldangelo Mar 24, 2026
9b24703
Merge branch 'foreman/bd-w8sj' into dev
ldangelo Mar 24, 2026
b0b5b32
Task: Create binary compilation script using pkg or bun compile (bd-v…
ldangelo Mar 24, 2026
7a50490
Merge branch 'foreman/bd-vxww' into dev
ldangelo Mar 24, 2026
9d52de0
Finalize should handle 'nothing to commit' as success for verify/test…
ldangelo Mar 24, 2026
c5fe70a
Merge branch 'foreman/bd-w8sj' into dev
ldangelo Mar 24, 2026
5f63420
Task: Prebuilt native addon matrix — better-sqlite3 for all 5 targets…
ldangelo Mar 24, 2026
b5258f7
Merge branch 'foreman/bd-n801' into dev
ldangelo Mar 24, 2026
f836c7f
Test: Verify standalone binary runs on local platform (bd-si4p)
ldangelo Mar 24, 2026
5aa5cbe
Merge branch 'foreman/bd-si4p' into dev
ldangelo Mar 24, 2026
c7de308
fix: rebuild br blocked cache after draining bead write queue
ldangelo Mar 24, 2026
358454c
Story: Compile standalone binaries for 5 platforms via bun compile or…
ldangelo Mar 24, 2026
f3204c3
Merge branch 'foreman/bd-u7z3' into dev
ldangelo Mar 24, 2026
bf70366
fix: suppress repeated bv error messages — only log once per session
ldangelo Mar 24, 2026
4117281
Clean up old error logs from fixed bugs (EPIPE, .ts module, etc.) (bd…
ldangelo Mar 24, 2026
2824092
Merge branch 'foreman/bd-v18r' into dev
ldangelo Mar 24, 2026
fe6a11c
fix: foreman inbox --all shows most recent messages, not oldest
ldangelo Mar 24, 2026
4c68ff1
Task: Configure npm token and GitHub secrets for publishing (bd-wzr8)
ldangelo Mar 24, 2026
9392b12
Task: Add semantic versioning with conventional commits (bd-nfqh)
ldangelo Mar 24, 2026
7d775d5
Merge branch 'foreman/bd-wzr8' into dev
ldangelo Mar 24, 2026
c26fade
Merge branch 'foreman/bd-nfqh' into dev
ldangelo Mar 24, 2026
9dba3ba
Task: Create .github/workflows/release.yml for automated releases (bd…
ldangelo Mar 24, 2026
71c9719
Merge branch 'foreman/bd-i3c9' into dev
ldangelo Mar 24, 2026
aa835dd
chore: fix bead statuses via br update --status closed (workaround fo…
ldangelo Mar 24, 2026
f129523
fix: use br update --status closed instead of br close (beads_rust#204)
ldangelo Mar 24, 2026
0a8b7de
docs: session log for 2026-03-23/24 — Pi SDK migration and pipeline h…
ldangelo Mar 24, 2026
ad879d7
fix: force-dispatch --bead even when br ready cache is stale (beads_r…
ldangelo Mar 25, 2026
9ecd6c7
fix: make br claim (in_progress) non-fatal — don't block spawn on sta…
ldangelo Mar 25, 2026
fe0f9c9
fix: use br close --no-db to bypass broken SQLite blocked cache (bead…
ldangelo Mar 25, 2026
1ab4773
Task: Create install.sh curl installer script (bd-hbko)
ldangelo Mar 25, 2026
35092ec
Merge branch 'foreman/bd-hbko' into dev
ldangelo Mar 25, 2026
8ee5aa5
fix: remove parent-child deps falsely blocking dispatch — br treats t…
ldangelo Mar 25, 2026
9dfac68
Task: Create install.ps1 PowerShell installer for Windows (bd-8ovc)
ldangelo Mar 25, 2026
cfaae08
Merge branch 'foreman/bd-8ovc' into dev
ldangelo Mar 25, 2026
1b2c187
fix: clear blocked_issues_cache instead of deleting entire br DB
ldangelo Mar 25, 2026
bbb055f
Story: GitHub Actions CD — npm publish and binary release on main mer…
ldangelo Mar 25, 2026
e7cdc4a
Merge branch 'foreman/bd-gyyw' into dev
ldangelo Mar 25, 2026
83418aa
Task: Create homebrew-tap repo with foreman.rb formula (bd-9his)
ldangelo Mar 25, 2026
e1a97a5
Merge branch 'foreman/bd-9his' into dev
ldangelo Mar 25, 2026
ce85193
Watch UI: press 'e' to toggle error log view for agents (bd-9gwp)
ldangelo Mar 25, 2026
54400fa
Merge branch 'foreman/bd-9gwp' into dev
ldangelo Mar 25, 2026
2c79b2f
Build installer and CI/CD pipeline — npm publish, standalone binaries…
ldangelo Mar 25, 2026
e6c2e0b
Story: Create curl install script for macOS/Linux (bd-afwj)
ldangelo Mar 25, 2026
9b2a035
Merge branch 'foreman/bd-afwj' into dev
ldangelo Mar 25, 2026
3cc7cd3
Story: Create Homebrew tap for foreman (bd-84sh)
ldangelo Mar 25, 2026
2ba9a7e
Merge branch 'foreman/bd-84sh' into dev
ldangelo Mar 25, 2026
c90d455
Task: Auto-update Homebrew formula on new releases (bd-uiqz)
ldangelo Mar 25, 2026
bbadda7
Merge branch 'foreman/bd-uiqz' into dev
ldangelo Mar 25, 2026
526ce4e
Test: Verify brew install foreman works on macOS (bd-66cv)
ldangelo Mar 25, 2026
31f6e41
Merge branch 'foreman/bd-66cv' into dev
ldangelo Mar 25, 2026
107a4bd
Test: Verify install script on macOS and Linux (bd-d15q)
ldangelo Mar 25, 2026
254e89d
Merge branch 'foreman/bd-d15q' into dev
ldangelo Mar 25, 2026
5c9f686
fix: increase bead-writer timeout from 10s to 30s
ldangelo Mar 25, 2026
4b4c23b
fix: route ALL br writes through the write queue — zero direct br cal…
ldangelo Mar 25, 2026
58c697e
Merge branch 'foreman/bd-t9yb' of github.com:ldangelo/foreman into dev
ldangelo Mar 25, 2026
a89a274
chore: sync beads JSONL
ldangelo Mar 25, 2026
434f73f
Test: Verify release workflow with dry-run (bd-kx19)
ldangelo Mar 25, 2026
b3f4975
Merge branch 'foreman/bd-kx19' into dev
ldangelo Mar 25, 2026
86a06fd
fix: CI workflow — fetch full history for tests, remove missing lint …
ldangelo Mar 25, 2026
7680d65
fix: test uses git init --initial-branch main for CI compatibility
ldangelo Mar 25, 2026
7712250
fix: all test git init calls use --initial-branch main for CI compati…
ldangelo Mar 25, 2026
ad68a1f
fix: repair all test failures for CI green build
ldangelo Mar 25, 2026
42a7fe0
fix: CI needs git user config and init.defaultBranch for tests
ldangelo Mar 25, 2026
d906ce7
fix: increase npm pack test beforeAll timeout to 30s for CI
ldangelo Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
53 changes: 48 additions & 5 deletions .beads/issues.jsonl

Large diffs are not rendered by default.

53 changes: 53 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: CI

on:
pull_request:
branches:
- main
- dev

jobs:
test:
name: Test (Node ${{ matrix.node-version }})
runs-on: ubuntu-latest

strategy:
matrix:
node-version: ["20"]

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure git for tests
run: |
git config --global user.email "ci@foreman.dev"
git config --global user.name "Foreman CI"
git config --global init.defaultBranch main

- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Cache node_modules
id: cache-node-modules
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ runner.os }}-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ runner.os }}-${{ matrix.node-version }}-
npm-${{ runner.os }}-

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm ci

- name: Type check
run: npx tsc --noEmit

- name: Run tests
run: npm test
123 changes: 123 additions & 0 deletions .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: Publish to npm

# Trigger on version tag push (e.g. v1.2.3) or manual dispatch
on:
push:
tags:
- "v*.*.*"
workflow_dispatch:
inputs:
tag:
description: "Tag name to publish (e.g. v1.2.3)"
required: true
type: string
dry_run:
description: "Dry run — build and pack but do not publish to npm"
required: false
default: "false"
type: choice
options:
- "false"
- "true"

# Minimal permissions — read-only source; npm publish uses NPM_TOKEN (not GITHUB_TOKEN)
permissions:
contents: read

jobs:
publish-npm:
name: Publish @oftheangels/foreman to npm
runs-on: ubuntu-latest

steps:
# ── Checkout ─────────────────────────────────────────────────────────────
- name: Checkout repository
uses: actions/checkout@v4

# ── Node.js setup with npm authentication ────────────────────────────────
# setup-node@v4 writes an .npmrc that injects NPM_TOKEN automatically
# when registry-url is provided.
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: "20"
registry-url: "https://registry.npmjs.org"
scope: "@oftheangels"

# ── Dependency cache ──────────────────────────────────────────────────────
- name: Cache node_modules
id: cache-node-modules
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ runner.os }}-20-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
npm-${{ runner.os }}-20-

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm ci

# ── Determine release tag ─────────────────────────────────────────────────
- name: Determine release tag
id: tag
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "tag=${{ github.event.inputs.tag }}" >> "$GITHUB_OUTPUT"
else
echo "tag=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT"
fi

# ── Version consistency check ─────────────────────────────────────────────
# Guard against publishing when the git tag version does not match
# the version declared in package.json (e.g. forgot to bump).
- name: Verify git tag matches package.json version
run: |
TAG="${{ steps.tag.outputs.tag }}"
PKG_VERSION="v$(node -p "require('./package.json').version")"

echo "Git tag: $TAG"
echo "package.json: $PKG_VERSION"

if [ "$TAG" != "$PKG_VERSION" ]; then
echo "ERROR: Git tag ($TAG) does not match package.json version ($PKG_VERSION)."
echo " 1. Update version in package.json to match the tag, OR"
echo " 2. Push a new tag that matches the current package.json version."
exit 1
fi

echo "Version check passed: $TAG == $PKG_VERSION"

# ── TypeScript type check ─────────────────────────────────────────────────
- name: Type check (tsc --noEmit)
run: npx tsc --noEmit

# ── Run tests ─────────────────────────────────────────────────────────────
- name: Run test suite
run: npm test

# ── TypeScript build ───────────────────────────────────────────────────────
- name: Build (TypeScript → dist/)
run: npm run build

# ── Dry-run: pack only ────────────────────────────────────────────────────
- name: Pack (dry run — inspect tarball without publishing)
if: ${{ github.event.inputs.dry_run == 'true' }}
run: |
npm pack --dry-run
echo "DRY RUN — package would be published as above. No npm publish executed."

# ── Publish to npm ────────────────────────────────────────────────────────
- name: Publish to npm registry
if: ${{ github.event.inputs.dry_run != 'true' }}
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

# ── Summary ───────────────────────────────────────────────────────────────
- name: Publish summary
if: ${{ github.event.inputs.dry_run != 'true' }}
run: |
TAG="${{ steps.tag.outputs.tag }}"
PKG_NAME=$(node -p "require('./package.json').name")
echo "✅ Published ${PKG_NAME}@${TAG#v} to https://www.npmjs.com/package/${PKG_NAME}"
Loading
Loading