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 3c1e597e1ee6f31263f7d3709eb8e8a24bbf2158
Author: Stephen Mallette <[email protected]>
AuthorDate: Fri Aug 7 05:52:34 2026 -0400

    Make a decision a bead whenever a road was not taken
    
    "Anything else worth remembering" was a catch-all, so operator declines 
went to
    comments instead of decision beads. The test is now whether something 
specific
    was considered and not done. The Stop hook also no longer lets its 
in-progress
    list mask the unclaimed-work warning, since parallel sessions share one 
actor.
    
    Assisted-by: Claude Code:claude-opus-5
---
 .beads/PRIME.md         | 22 ++++++++++++++++------
 bin/beads-agent-hook.sh | 26 +++++++++++++++++---------
 2 files changed, 33 insertions(+), 15 deletions(-)

diff --git a/.beads/PRIME.md b/.beads/PRIME.md
index 75b8e8abc5..b02b458c5c 100644
--- a/.beads/PRIME.md
+++ b/.beads/PRIME.md
@@ -68,12 +68,22 @@ claim the bead you are actually working on.
 4. **You presented options** — a decision point exists by construction.
 5. **A discovery contradicted an assumption.**
 
-**Then pick the right instrument:**
+**Then pick the instrument. The only test is whether a road was not taken:**
 
-| Situation | Do |
+| What happened | Do |
 |---|---|
-| An alternative was **actually rejected** | Create a decision bead **and** 
its rejected-alternative sibling, now |
-| Anything else worth remembering | `bd comment <root> "..."` |
+| A specific course was considered and **not taken** — a design, a scope item, 
a validation step, a target branch, a task you wrote and threw away | Decision 
bead **plus** its `rejected-alternative` sibling, now |
+| Something is simply true, with no fork in it — evidence, a measurement, a 
discovery, a constraint | `bd comment <root> "..."` |
+
+**The rejected thing does not have to be a design.** "The operator declined X" 
is a road not
+taken. So is "we were going to target master, we targeted 3.7-dev instead." If 
you can name
+what was *not* done, it is a decision — write both beads.
+
+**Self-check before writing any comment: name what was *not* done.** If you 
can name it — a
+course declined, a branch not targeted, an approach dropped — it is a decision 
bead, not a
+comment. Wording like "the operator declined" or "X rather than Y" is the 
tell, but check
+what it refers to: a choice about *the work* is a decision, while "the test 
frames HashMap
+instead of OptionsStrategy" is just describing code and stays a comment.
 
 ```bash
 bd create --type=decision --parent=<root> --title="Chose X" --design="why, and 
what X rules out"
@@ -88,8 +98,8 @@ documents that. Don't inflate.
 An approach you tried and abandoned **is** a rejected alternative — one you 
have evidence
 for. Record it; a dead end someone already walked is worth more than a 
hypothetical.
 
-Put rationale on the root or on a decision bead. Scattered across a dozen task 
beads,
-nobody finds it.
+Never put a decision on a task bead. The decision belongs in its own bead so 
the rejected
+sibling has something to hang off; a task records what to build, not what was 
ruled out.
 
 **Record what actually happened.** If you cannot point to the moment, do not 
write the bead.
 When you sense a decision you were not party to, create a bead labelled 
`human` posing the
diff --git a/bin/beads-agent-hook.sh b/bin/beads-agent-hook.sh
index 81095caa25..0e35ff51fc 100755
--- a/bin/beads-agent-hook.sh
+++ b/bin/beads-agent-hook.sh
@@ -119,19 +119,27 @@ its rejected-alternative sibling. An approach you tried 
and abandoned counts. An
 worth remembering goes in a comment on the root bead."
 
         # Editing files while nothing is claimed means the in_progress window 
-- the only
-        # thing a later session can read to resume -- is never being written. 
Observable,
-        # so it is worth stating flatly rather than asking.
-        if [[ -z "$active" ]] && [[ -n "$(git status --porcelain 2>/dev/null | 
head -1)" ]]; then
-            text="$text
-
-You have uncommitted changes and NO bead is in_progress. Claim the bead you 
are working on
-now — 'bd update <id> --claim'. Without it, the next session cannot tell what 
was underway
-or where it stopped."
-        elif [[ -n "$active" ]]; then
+        # thing a later session can read to resume -- is never being written. 
These are two
+        # independent facts, so never let one suppress the other: parallel 
sessions share
+        # one actor, so a populated in_progress list is no evidence *your* 
work is claimed.
+        dirty=$(git status --porcelain 2>/dev/null | head -1)
+        if [[ -n "$active" ]]; then
             text="$text
 
 Still in progress:
 $active"
+            if [[ -n "$dirty" ]]; then
+                text="$text
+
+You have uncommitted changes. If what you are working on is not in that list, 
claim it —
+'bd update <id> --claim'. Beads claimed by another session or contributor are 
not yours."
+            fi
+        elif [[ -n "$dirty" ]]; then
+            text="$text
+
+You have uncommitted changes and NO bead is in_progress anywhere. Claim the 
bead you are
+working on now — 'bd update <id> --claim'. Without it, the next session cannot 
tell what
+was underway or where it stopped."
         fi
         ;;
 

Reply via email to