Commit Graph

29 Commits

Author SHA1 Message Date
Chris Sells d2f87d50de docs(pipeline): pin the CLI docs to the released bd; repair main's broken CLI reference (#4876)
* docs(pipeline): pin the generated CLI docs to the released bd; repair main's CLI reference

The #4874 squash-merge raced the docs-autofix bot: the bot had pushed a
regeneration from main's source onto the PR branch, so the squash landed a
contradictory mix — the release-aligned hand-written docs plus a CLI
reference re-documenting unreleased commands and flags, with docs.json
referencing four pages (heartbeat, migrate-personal, reclaim, unclaim)
whose files do not exist. That broken nav fails the docsync guard on main
and on every branch cut from it. This restores the intended end state of
#4874 and lands the pin that prevents the race from recurring.

- Regenerate the CLI reference from a bd built from the v1.1.0 tag (CI's
  canonical pure-Go build), removing the unreleased commands/flags and
  fixing the dangling nav entries.
- docs/cli-docs.pin names the release tag; scripts/resolve-docs-bd.sh
  builds and caches a canonical pure-Go bd from that tag, fetching the tag
  first in shallow CI checkouts.
- generate-cli-docs.sh, check-doc-flags.sh, and check-cli-docs-drift.sh
  resolve bd through the pin and ignore a supplied binary while pinned
  (BD_DOCS_IGNORE_PIN=1 bypasses), so the drift gates and the autofix bot
  now enforce docs-match-release instead of docs-match-main.
- tools/docsmint detects the pre-overhaul Docusaurus staging layout that
  bd <= v1.1.0 emits and converts it to the generic form before its normal
  Mintlify transform (tested); removable once the pin reaches a release
  whose emitter writes build/cli-docs.
- check-doc-flags.sh: run without timeout(1) on macOS instead of failing
  Check 4.
- Decision record: engdocs/decisions/2026-07-17-docs-release-pin.md; the
  beads-docs skill §8 updated to match.

* lint: annotate gosec G705 false positive in the docsmint legacy bridge

Same class as the existing nav-splice annotation: a developer tool writing
repo Markdown, not a web-output sink.
2026-07-17 18:03:28 -07:00
Chris Sells 8c974d8dc4 docs: align user docs and CLI reference with the v1.1.0 release (#4874)
* docs: align user docs and CLI reference with the v1.1.0 release

The Mintlify site publishes from main, so the docs had drifted ahead of the
latest release — documenting features that no released binary ships.

- Remove architecture/storage-backends: v1.1.0 supports only Dolt (the
  SQLite/Postgres/MySQL backends are post-tag work on main). Redirect the
  old routes to /architecture/dolt and drop the alternate-backend claims
  from README, core-concepts, architecture index, and FAQ.
- Stamp the docs homepage with the release: "These docs are for the 1.1.0
  release" plus a link to the v1.1.0 release notes.
- Regenerate the CLI reference (docs/cli-reference/, docs/CLI_REFERENCE.md,
  docs.json nav) from the released v1.1.0 binary via tools/docsmint: removes
  pages for post-1.1.0 commands (heartbeat, migrate-personal, reclaim,
  unclaim) and post-1.1.0 flags.
- Fix hand-written pages that referenced post-1.1.0 CLI surface, verified
  against the v1.1.0 binary: bd dep relate/unrelate (not top-level
  relate/unrelate), bd admin reset (not bd reset), bd hooks list (not
  status), bd history / bd vc status (not vc log/diff), release the claim
  via bd assign + bd update (no bd unclaim), drop bd migrate-personal and
  bd daemon mentions, and reduce the Cursor integration page to the rules
  file that v1.1.0's bd setup cursor actually installs.
- Stop documenting the BD_ALLOW_REMOTE_MIGRATE escape hatch (and the
  nonexistent-in-1.1.0 bd migrate --force): the remote-migrate gate prints
  its own operator guidance by design; docs now defer to it.

* docs: auto-regenerate CLI reference

Applied from the cli-docs-freshness-patch artifact of https://github.com/gastownhall/beads/actions/runs/29613329749
(generated with CI's canonical pinned build). See
scripts/check-cli-docs-drift.sh for how drift is attributed.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-17 14:17:28 -07:00
Steve Yegge 59f8d6ae97 feat(leases): move leases to ephemeral dolt_ignored leases table (bd-lrgn1)
Claims/heartbeats no longer mint dolt commits: lease state (holder,
granted_at, lease_expires_at, heartbeat_at) moves off the issues table
into a leases table registered in dolt_ignore. Migration 0055 +
ignored/0012 move live leases over; all full-issue query sites hydrate
via LEFT JOIN; import never clobbers a live local lease.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 01:02:29 -07:00
coffeegoddd☕️✨ 8c779d3aa5 docs: regenerate CLI reference for proxied-server external TLS flags
Adds the new bd init flags (--proxied-server-external-tls-ca-cert-path,
--proxied-server-external-tls-server-name, --proxied-server-external-tls-skip-verify)
to the generated CLI reference. Also picks up gate help drift already on
this branch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 16:44:26 -07:00
Julian Knutsen 0cf3b3ca09 Revert "Simplify the supported backends: roll back the direct PostgreSQL and MySQL adapters" (#4857) 2026-07-16 16:35:51 -07:00
Julian Knutsen 69f33cedd3 Merge pull request #4847 from gastownhall/chore/simplify-storage-backends
Simplify the supported backends: roll back the direct PostgreSQL and MySQL adapters
2026-07-16 15:44:17 -07:00
github-actions[bot] d9e4bf24fd docs: auto-regenerate CLI reference
Applied from the cli-docs-freshness-patch artifact of https://github.com/gastownhall/beads/actions/runs/29527276674
(generated with CI's canonical pinned build). See
scripts/check-cli-docs-drift.sh for how drift is attributed.
2026-07-16 19:21:18 +00:00
Steve Yegge e10e19b44e fix(claim): pool-claim parity for the proxied-server path + recognized claim.* config namespace (bd-bguz6)
Review follow-ups on the pool-claim feature:

- The proxied-server (uow) claim path has its own CAS
  (issueSQLRepositoryImpl.Claim) and did not get the pool predicate, so
  in dolt.mode=proxied-server a pool-assigned issue was still refused as
  "already claimed by <pool>". It now resolves claim.pools through the
  same issueops.ClaimPoolAliasesInTx and extends its predicate
  identically, and ClaimRowResult carries CurrentAssigneeIsPool so the
  use-case layer reports a status conflict instead of a held-by-pool
  refusal on CAS loss. Covered by three new subtests in the domain/db
  suite (pool take + lease, unconfigured alias protected, status
  conflict flagged).

- claim.* is now a recognized config namespace: bd config set
  claim.pools previously warned "not a recognized config key" on the
  feature's own setup command. The embedded pool test now fails on that
  warning (the exit code alone missed it), and the recognizer unit test
  pins claim.pools.

- bd config --help documents the key (Claim Pools section + example),
  including the reclaim caveat: an expired pool take returns to the
  unassigned pool, not to the pool alias it was dispatched to. CLI
  reference regenerated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 10:09:09 -07:00
Steve Yegge 9bab22995f feat(claim): pool-aware claiming via the claim.pools config key (bd-bguz6)
Dispatcher fleets pre-assign issues to a pool pseudo-assignee (e.g.
'fable-crew') and members take items from the pool. --claim refused
those ("already assigned"), forcing a two-step '--assignee <me>
-s in_progress' per issue — reported by the wyvern rig as their
biggest friction, hit on all 10 beads of a review session.

Aliases listed in the claim.pools config (comma-separated) are now
claimable by any actor through the same atomic CAS: the assignee
predicate gains 'OR assignee IN (<pools>)', resolved in-transaction
via GetConfigInTx, so there is no storage-interface change and no new
flag. A pool take stamps the normal lease. Issues assigned to a real
actor — or to an alias not in the config — keep their anti-steal
protection, and the 0-row disambiguation reports a status conflict
for pool-assigned rows instead of a misleading held-by refusal.

Off by default: with no claim.pools configured the predicate and
behavior are byte-identical to before.

New TestEmbeddedClaimPools covers the full dispatcher flow (pool
assign -> claim -> close), a second alias, lease stamping, and both
protection boundaries (real actor, unconfigured alias).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 10:09:09 -07:00
github-actions[bot] 3bab9e7b39 docs: auto-regenerate CLI reference
Applied from the cli-docs-freshness-patch artifact of https://github.com/gastownhall/beads/actions/runs/29517882064
(generated with CI's canonical pinned build). See
scripts/check-cli-docs-drift.sh for how drift is attributed.
2026-07-16 17:06:43 +00:00
Steve Yegge bd73c75292 fix(claim): stop the refusal copy from teaching claim eviction (bd-at6rc)
The --claim refusal for an issue assigned to another actor said "Use
bd unclaim <id> to release it before re-claiming". In a multi-agent
fleet that copy taught exactly the wrong move: an agent's silenced
'unclaim; claim' batch loop evicted another agent's live, heartbeated
claim mid-review (wyvern incident wy-yuclk, ask wy-zs5s2).

The ownership check itself (foreign unclaim requires --force) already
landed in #4675; this completes the ask by fixing the guidance around
it:

- The open-but-assigned --claim refusal now says to coordinate with
  the holder and notes that releasing another actor's claim requires
  bd unclaim --force.
- Unclaim's ErrNotOwner rejection frames --force as an abandoned-claim
  escape hatch (crashed agent, expired lease), not a routine override.
- bd unclaim's help documents the ownership rule and points at lease
  expiry for genuinely abandoned work.

Tests pin the new coordinate-with-holder copy and assert the old
release-before-reclaiming suggestion stays gone. CLI reference
regenerated; picks up the same pre-existing auto-backup help drift
hunk as #4839 (identical content, merges cleanly either order).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 23:03:34 -07:00
Test User 98573a4983 docs(storage): explain focused Dolt and SQLite support (bd-sadcd)
Document the rollback of direct PostgreSQL and MySQL adapters because supporting additional general-purpose server databases adds operational and maintenance complexity. Our goal is to keep Beads as simple as possible and consume as few resources as possible.

Clarify that embedded Dolt, Dolt server, and SQLite remain supported, including Dolt server use of the MySQL wire protocol.

Existing PostgreSQL and MySQL databases are not opened or modified. Migration requires an export from a supporting build, reinitialization guided by bd help init-safety, and import; JSONL remains issue-level interchange rather than a complete backup.

Refresh generated CLI reference material alongside the storage guidance.

Agent-Signature: codex-gpt-5-unknown-reasoning on behalf of Test User
2026-07-16 03:42:17 +00:00
Kevin Glynn f5dd5072b8 feat(graph): add --open flag for LLM-friendly compact output (GH#3544) (#3778)
* feat(graph): add --open flag for LLM-friendly compact layer output (GH#3544)

Add --open flag to `bd graph` that filters out closed/deferred issues and
renders only actionable items in compact layer format.

Key behaviors:
- Filters to open/in_progress/blocked statuses only
- Computes transitive closure of blocking edges through removed nodes
  (if A blocks B(closed) blocks C, adds synthetic edge A→C)
- Auto-selects compact layer rendering for LLM-friendly output
- Works with both single-issue and --all modes
- Deduplicates edges when direct and transitive paths overlap
- Falls back to highest-priority open issue when root is filtered out

* docs: regenerate CLI reference for --open flag and federation updates
2026-07-14 10:17:30 -07:00
matt wilkie 6a127f8eea Merge pull request #4336 from kevglynn/feat/3961-prime-no-memories
feat(prime): add --no-memories to omit the persistent memories section (#3961)
2026-07-13 22:14:07 -07:00
matt wilkie 880f34b120 Merge remote-tracking branch 'upstream/main' into pr-4336-fix
Resolves modify/delete conflicts on website/* (Mintlify migration deleted
the tree in main; accept deletion). cmd/bd/prime.go auto-merged cleanly,
re-siting --no-memories on top of #4335's custom-PRIME.md/formatMemoriesForPrime
handling and #4230's doltSync gating without further edits.

Agent-Signature: claude-fable-5-high on behalf of matt wilkie
2026-07-13 21:42:55 -07:00
matt wilkie 4557c2f8d7 Merge pull request #4229 from kevglynn/fix/4222-no-color-flag
feat(cli): add --no-color flag for explicit color suppression
2026-07-13 21:40:24 -07:00
matt wilkie 4b9bd91fab Merge pull request #4335 from kevglynn/fix/3941-prime-memories-custom-primemd
fix(prime): inject memories under custom PRIME.md; fix --memories-only (#3941)
2026-07-13 21:36:19 -07:00
matt wilkie 0cf3836e75 Merge pull request #4347 from mlushpenko/feature/list-external-ref-filter
feat(list): add --external-ref exact-match filter
2026-07-13 21:35:38 -07:00
matt wilkie 00107e6ed5 docs: regenerate CLI reference for global --no-color flag
Agent-Signature: claude-fable-5-high on behalf of maphew
2026-07-13 20:54:50 -07:00
matt wilkie 94208767aa Merge upstream/main into fix/3941-prime-memories-custom-primemd
Resolves the Mintlify website-tree deletion conflict (52aea3f7e) against
this PR's now-obsolete website/*/cli-reference/prime.md doc edits: accept
main's deletion. cmd/bd/prime.go merged cleanly (no conflict markers) —
the PR's --memories-only-before-custom-PRIME.md dispatch and its
memory-append-under-custom-PRIME.md logic both survived alongside main's
agent.profile Long-help bullet (#4585). Regenerated CLI docs
(scripts/generate-cli-docs.sh) produced no additional diff beyond the
merge itself.

Agent-Signature: claude-fable-5-high on behalf of matt wilkie
2026-07-13 20:44:33 -07:00
matt wilkie 75f30b0b49 docs: regenerate CLI reference for bd list --external-ref
Agent-Signature: claude-fable-5-high on behalf of maphew
2026-07-13 20:40:22 -07:00
matt wilkie d2f9a150cb Merge remote-tracking branch 'upstream/main' into pr-4337-fix
Agent-Signature: claude-fable-5-high on behalf of matt wilkie
2026-07-13 20:40:05 -07:00
github-actions[bot] bf6f3fec56 docs: auto-regenerate CLI reference
Applied from the cli-docs-freshness-patch artifact of https://github.com/gastownhall/beads/actions/runs/29282225246
(generated with CI's canonical pinned build). See
scripts/check-cli-docs-drift.sh for how drift is attributed.
2026-07-13 20:30:59 +00:00
matt wilkie f6bd99333d Merge upstream/main into docs/mintlify-overhaul
Conflict: .githooks/pre-push — keep main's stdin capture + chained beads
hook integration (96ec4db4e), apply this branch's Docusaurus purge to the
release-tag block (version-only wording, no snapshot-docs references).

Agent-Signature: claude-fable-5-high on behalf of maphew
2026-07-12 19:11:43 -07:00
Chris Sells 6455ada0cb docs: regenerate CLI reference after rebase onto #4713 label changes 2026-07-12 10:38:32 -07:00
Chris Sells 5f6bd2c87a docs: fix integration-page fact errors; restore three lost source edits
A second adversarial fact-check pass (372 claims across the 21 integration
and remaining getting-started pages: 291 verified, 22 contradicted) drove
these corrections, each reproduced against the binary or repo source:

- junie.md: the recipe-written MCP config invokes `bd mcp`, which does not
  exist in current builds — the page now warns about that and points at
  the working standalone beads-mcp server config. (The recipe itself,
  cmd/bd/setup/junie.go, still writes the dead config — recorded as a
  product follow-up, out of docs scope.)
- claude-code-plugin.md: the plugin (v1.1.0 manifest) ships skills,
  commands, and hooks — no MCP server. Removed the bundled-server claims,
  uv prerequisite, phantom `init` tool, stale 0.9.2 version pin, and the
  unverified env-var list; MCP guidance now points at the standalone
  server. installation.md's plugin-MCP troubleshooting entry updated to
  the same reality.
- upgrading.md: `bd migrate --cleanup` doesn't exist; the doctor
  migration-skew note was inverted (the check DOES run in embedded mode —
  cmd/bd/doctor/migration_skew.go); `dolt sql-server --stop` is not a
  flag.
- sync-setup.md: `bd vc log` doesn't exist (vc has commit/merge/status);
  use `bd history`.
- azure-devops.md: sync flag table listed phantom --label/--status/--type
  (real: --states/--types/--issues); error strings now quote the actual
  binary messages (MDX-safe).
- github-copilot.md: beads-mcp has no --version flag; verify with
  pip show beads-mcp. aider.md's config sample now matches the generated
  file byte-for-byte.

Also restores three source edits that a mid-script failure silently
dropped from the earlier printed-paths commit (whose message claimed
them): bd mol pour's help no longer says molecules are "synced with git",
the claude recipe's stale ProjectPath metadata
(.claude/settings.local.json -> .claude/settings.json), and the shared
recipe template's quickstart URL. CLI docs regenerated accordingly.

Gates: docsync, docsmint, recipes tests, generate-cli-docs.sh --check,
mint broken-links (no broken links), vet — all pass.
2026-07-12 10:37:18 -07:00
Chris Sells de0200ff77 docs(emitter): Cobra-accurate usage lines, published global flags, MDX ESM guard
Three generated-content defects from the adversarial review, all
structurally invisible to the drift gate (generated-vs-generated):

- Usage lines now mirror Cobra's help template: a runnable command shows
  its UseLine, a command with subcommands shows '<path> [command]', both
  when both apply. Previously bare UseLine() stamped 'bd mol [flags]' on
  30 parent pages — a line the binary never prints.
- The generated CLI index publishes the Global Flags block; the binary
  prints it on every --help but no page carried it.
- docsmint neutralizes prose lines that Mintlify's prebuild would dedent
  into MDX ESM blocks (a line beginning 'export'/'import' outside a
  fence gets wrapped in a code span). This is why /cli-reference/mail
  returned HTTP 200 while rendering only a parse-error placeholder —
  reproduced, fixed, and covered by a planted-hazard test; fenced
  content stays verbatim.

Also rewords check-cli-docs-drift.sh's early-PASS message, which
asserted 'the supplied binary differs' as the cause when uncommitted
local edits produce the same result.

All 113 pages + docs/CLI_REFERENCE.md regenerated through the pipeline;
TDD'd in cmd/bd/help_all_test.go and tools/docsmint/docsmint_test.go.
Verified live: /cli-reference/mail renders real content, zero parse
errors; generate-cli-docs.sh --check, docsync, freshness, and
mint broken-links all pass on this tree.
2026-07-12 10:37:17 -07:00
Chris Sells cc9601f85c fix(cli): printed doc paths point at the new docs locations
Per decision 7, bd's user-facing strings now reference the Mintlify-era
paths: prime policy-profiles help, storage-backend comparison help
(store_factory_nocgo, init --backend), init-safety help (recovery
playbooks now docs/recovery/init-safety.md; the ADR reference now
engdocs/adr/), the pk-fork-refused recovery URL (dolt.go), doctor's plugin
suggestions (claude.go) and managed-handoff pointer, aider setup guidance
and the shared recipe template (quickstart URL), and the agent instruction
templates (sync-concepts URL, quickstart URL). bd mol pour's help no
longer claims molecules are 'synced with git' — they sync via Dolt like
any other bead.

Also corrects the stale claude recipe ProjectPath metadata
(.claude/settings.local.json -> .claude/settings.json; the dedicated
installer has written settings.json since the migration sweep).

This repo's AGENTS.md managed section is refreshed to the new template
body (hash bacef91e, has-remote variant preserved), and agents.md.tmpl's
embedded marker matches. Template tests updated to pin the new fragment;
CLI docs regenerated.

Recorded, not fixed (behavior-level, see the decision record):
routing.mode's maintainer/contributor no-op values and the
sync.require_confirmation_on_mass_delete key with no consumer.

Note: TestCheckBeadsRole_NotConfigured/_NotGitRepo in cmd/bd/doctor fail
on any machine with beads.role in the global git config (no HOME
isolation) — pre-existing, unrelated to this change.
2026-07-12 10:37:17 -07:00
Chris Sells 4ea6fa3ac0 docs(emitter): emit Mintlify CLI reference and generated docs.json nav
bd help --docs-root now additionally writes docs/cli-reference/ in Mintlify
form (frontmatter title as H1, extensionless root-relative links, JSX
auto-generated markers since Mintlify parses .md through MDX) and rewrites
the CLI Reference pages array inside docs/docs.json via a textual splice
that leaves the rest of the file byte-identical — the ~113 nav entries are
never hand-maintained. The Docusaurus outputs (docs/CLI_REFERENCE.md,
website/docs/cli-reference/, versioned snapshots) are unchanged.

generate-cli-docs.sh --check seeds docs/docs.json and docs/cli-reference/
into its scratch root and diffs both; check-cli-docs-drift.sh adds them to
GEN_PATHSPECS and the regeneration fingerprint; docs-autofix-push.sh
allowlists the new generated paths; check-doc-flags.sh scans the new
docs/ subdirectories and requires command coverage in docs/cli-reference/.

Includes the initial docs/docs.json scaffold (nav mirrors the Docusaurus
sidebar IA) and the generated docs/cli-reference/ pages.

TDD: new emitter behavior covered in cmd/bd/help_all_test.go
(Mintlify page format, nav splice correctness + idempotence, bare-root
generation without docs.json).
2026-07-12 10:37:07 -07:00