This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit dc5b3e553db43cb09638d55d350979df32b45233
Author: Stephen Mallette <[email protected]>
AuthorDate: Mon Aug 10 07:39:23 2026 -0400

    Close decision beads when they are created
    
    A decision records something already settled, so it no longer waits until
    merge to close. Keeps bd ready free of reasoning and dates closed_at to
    the day the call was actually made.
    
    Assisted-by: Claude Code:claude-opus-5
---
 .beads/PRIME.md | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/.beads/PRIME.md b/.beads/PRIME.md
index d4cf0ae68f..e83ba72897 100644
--- a/.beads/PRIME.md
+++ b/.beads/PRIME.md
@@ -67,8 +67,15 @@ bd create --type=decision --parent=<root> --title="Chose X" 
--design="why, and w
 bd create --type=decision --parent=<root> --title="Y" 
--labels="rejected-alternative" \
           --design="what Y concretely was, why it lost, what settled it"
 bd dep add <decision> <alternative> -t related    # never put either of these 
on a task bead
+bd close <decision> <alternative>   # both: a decision is resolved the moment 
you write it
 ```
 
+**Close a decision as you create it.** It is a record of something already 
settled, not work
+waiting to happen, and a rejected alternative is a road already closed. 
Leaving it `open` puts
+it in `bd ready` — the queue then advertises reasoning as startable work — and 
stamps its
+`closed_at` with the merge date, which says the decision was made on a day it 
was not. It gets
+pinned with the rest of the subtree at merge (section 4).
+
 **A rejected alternative's `--design` names three things: what the option 
concretely was, why it
 lost, and what settled it.** The verdict is already in the label, so the 
reason is the whole
 value — give it as a mechanism ("it leaves the shared database with a 
vocabulary no single
@@ -117,15 +124,13 @@ in parallel.
 ```bash
 bd dep add <task> <blocker>          # <task> waits for <blocker> — NOT "task 
blocks blocker"
 bd dep add --file - <<< '{"from":"tp-a","to":"tp-b"}'   # wire a whole plan at 
once
-bd ready --parent <root> --exclude-type=decision    # what can start now, in 
YOUR subtree
+bd ready --parent <root>             # what can start now, in YOUR subtree
 bd blocked --parent <root>           # what is waiting, and on what
 bd dep cycles                        # a plan with a cycle cannot execute
 ```
 
 **Always scope `bd ready` and `bd blocked` to your root.** Unscoped they span 
the whole
-database and hand you other people's work. Exclude decisions too: they are 
records rather
-than work, but they sit `open` until merge and otherwise fill the queue — 
under one root
-here, every "ready" bead was a decision and two were rejected alternatives.
+database and hand you other people's work.
 
 - **Wire the order in the same pass as `bd create`.**
 - **Re-planning is normal; record it.** `bd dep remove` deletes an edge with 
no trace in the
@@ -172,12 +177,12 @@ Status is not paperwork. It is both the handoff and the 
gate.
 
 ## 4. At merge — close the root, then pin
 
-Tasks closed as they finished (section 3). What is left at merge is the 
**root** — the
-deliverable — plus any decision beads, which are not work and never closed on 
their own.
+Tasks closed as they finished (section 3), decisions as they were written 
(section 0). The
+**root** is the only thing still open at merge — it is the deliverable.
 
 ```bash
 bd children <root>               # the whole subtree; nothing should still be 
in_progress
-bd close <root> <decision-ids>   # whatever the work itself did not close
+bd close <root>
 bd update <id1> <id2> ... -s pinned
 bd dolt pull && bd dolt push
 ```
@@ -297,10 +302,10 @@ release  build
 
 ```bash
 bd children <root>               # the subtree, recursive
-bd ready --parent <root> --exclude-type=decision   # startable now; ALWAYS 
scope to your root
+bd ready --parent <root>         # startable now; ALWAYS scope to your root
 bd blocked --parent <root>       # what is waiting, and on what
 bd show <id>                     # one bead with dependencies
-bd query "status=open AND type=decision"
+bd query "status=open AND type=decision"   # should be empty; an open decision 
was left unclosed
 bd comment <id> "..."            # a fact with no fork in it (never on a task 
bead)
 bd create --type=... --parent=<root> --design=... --labels=...
 bd dep add <task> <blocker>      # default type is blocks: <task> waits for 
<blocker>

Reply via email to