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 ;;
