From 54de9c3ea8a25a85126dddcc0e6494c0d0df6141 Mon Sep 17 00:00:00 2001 From: Carlos Escobar Date: Wed, 6 May 2026 11:11:36 -0500 Subject: [PATCH] feat(bstack): doctor + ROSTER updates for P12 (Persistent Loop Discipline) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Companion to broomva/workspace#44 (P12 governance) and the new broomva/persist skill repo. scripts/doctor.sh: - EXPECTED_COUNT: 11 → 12 - Count header regex: "Eleven/11" → "Twelve/12" - Primitive row check loop: 1..11 → 1..12 - P_NAMES[]: append "P12: Persistent Loop Discipline" - REFLEXIVE_PRIMS[]: P6 P7 P10 P11 → P6 P7 P10 P11 P12 (P12 is reasoning-enforced; doctor must verify its Reflexive Trigger Rule subsection is present in AGENTS.md) - SCRIPT_PATHS[]: append "skills/persist/scripts/persist.py" scripts/bootstrap.sh: - SKILL_REPOS: [persist]="broomva/persist" - ORDERED_SKILLS: insert persist after p9 (Foundation layer) - Banner count: 30 → 31 - Total reporting: 30 → 31 SKILL.md: - "Eleven irreducible primitives" → "Twelve" - "Twenty-eight curated skills" → "Twenty-nine" - P1–P11 → P1–P12 throughout - New P12 row in primitives quick-reference - Reflexive primitives list now includes P12 Smoke-tested locally: Against pre-merge local main: gaps for P10, P11, P12 (count, rows, sections, reflexive rules) Against post-merge worktree (broomva/workspace#44): 43/46 passes; 3 gaps are skill-script paths absent from the worktree (expected, same pattern as earlier doctor extensions) After workspace#44 merges and `npx skills update` propagates, doctor reports full primitive contract compliance on a real installed workspace. This completes the four-PR series: - broomva/bookkeeping#1 (P6 replay extension) — MERGED - broomva/persist initial commit (P12 substrate) — pushed to main - broomva/workspace#44 (P12 governance) — open - this PR (bstack doctor + ROSTER for P12) Co-Authored-By: Claude Opus 4.7 (1M context) --- SKILL.md | 13 +++++++------ scripts/bootstrap.sh | 7 ++++--- scripts/doctor.sh | 18 ++++++++++-------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/SKILL.md b/SKILL.md index d3140e9..fbf1e24 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,7 +1,7 @@ --- name: bstack description: | - The Broomva Stack — eleven irreducible primitives (P1–P11) that turn any + The Broomva Stack — twelve irreducible primitives (P1–P12) that turn any agent-driven workspace into a self-operating system, plus 28 curated skills that ship with the stack. The primitives are not optional features; they are the substrate. P1 captures every session as episodic memory. P2 gates @@ -25,7 +25,7 @@ description: | # bstack — The Broomva Stack -**Eleven irreducible primitives. Twenty-eight curated skills. One self-operating workspace.** +**Twelve irreducible primitives. Twenty-nine curated skills. One self-operating workspace.** bstack is a *portable harness metalayer* — it composes existing skills into a binding primitive contract that the agent enforces by reasoning, the doctor enforces by checking, and the bootstrap enforces by scaffolding. @@ -48,7 +48,7 @@ Then, in your agent session: ## What bstack enforces -The eleven primitives. Each closes one specific failure mode that drifts into entropy in unsupervised sessions: +The twelve primitives. Each closes one specific failure mode that drifts into entropy in unsupervised sessions: | # | Primitive | Closes | |---|---|---| @@ -63,6 +63,7 @@ The eleven primitives. Each closes one specific failure mode that drifts into en | **P9** | Branch + Worktree Janitor | squash-merge accumulation | | **P10** | Worktree Hygiene Discipline | dirty-tree drift across the PR lifecycle | | **P11** | Empirical Feedback Loop | shipping code that compiles but doesn't work | +| **P12** | Persistent Loop Discipline (`broomva/persist` skill) | long-horizon work decaying as the context window rots | Full reference: see [references/primitives.md](references/primitives.md). @@ -137,9 +138,9 @@ Report results. If any checks fail, fix them before proceeding. `scripts/doctor.sh`. Seven check sections: 1. Governance files exist (CLAUDE.md, AGENTS.md, .control/policy.yaml) -2. CLAUDE.md primitives table has all P1–P11 rows + correct count header +2. CLAUDE.md primitives table has all P1–P12 rows + correct count header 3. AGENTS.md has each primitive section (`### P1:` through `### P11:`) -4. Reflexive Trigger Rules present for P6, P7, P10, P11 (the reasoning-enforced primitives) +4. Reflexive Trigger Rules present for P6, P7, P10, P11, P12 (the reasoning-enforced primitives) 5. `.control/policy.yaml` has required blocks (`ci_watch:`, `ci_heal:`, `auto_merge:`) 6. `.claude/settings.json` wires the expected hook scripts (P1, P2, P8) 7. Each primitive's mechanism is reachable on disk @@ -213,7 +214,7 @@ This is the f₃ dynamics function at L3 of the RCS hierarchy. See [references/p ## See also -- [references/primitives.md](references/primitives.md) — full P1–P11 reference with reflexive triggers +- [references/primitives.md](references/primitives.md) — full P1–P12 reference with reflexive triggers - [references/skills-roster.md](references/skills-roster.md) — all 28 skills with install commands - [references/stack-architecture.md](references/stack-architecture.md) — layer dependency diagram - [references/quickstart.md](references/quickstart.md) — 5-minute install walkthrough diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index e45e782..d6b3211 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -22,6 +22,7 @@ declare -A SKILL_REPOS=( [control-metalayer-loop]="broomva/control-metalayer" [harness-engineering-playbook]="broomva/harness-engineering-skill" [p9]="broomva/p9" + [persist]="broomva/persist" [agent-consciousness]="broomva/control-metalayer" [knowledge-graph-memory]="broomva/control-metalayer" [prompt-library]="broomva/prompt-library" @@ -51,7 +52,7 @@ declare -A SKILL_REPOS=( ) ORDERED_SKILLS=( - agentic-control-kernel control-metalayer-loop harness-engineering-playbook p9 + agentic-control-kernel control-metalayer-loop harness-engineering-playbook p9 persist agent-consciousness knowledge-graph-memory prompt-library symphony symphony-forge autoany deep-dive-research-orchestrator skills skills-showcase @@ -66,7 +67,7 @@ skipped=0 failed=0 echo "=== bstack bootstrap ===" -echo "Installing 30 Broomva Stack skills..." +echo "Installing 31 Broomva Stack skills..." echo "" for skill in "${ORDERED_SKILLS[@]}"; do @@ -94,7 +95,7 @@ done echo "" echo "=== bstack skills install complete ===" echo " Installed: $installed | Skipped: $skipped | Failed: $failed" -echo " Total: $((installed + skipped))/30" +echo " Total: $((installed + skipped))/31" [ "$failed" -gt 0 ] && echo " Run 'bstack validate' to diagnose issues." # ─── Phase 2: scaffold missing governance files ──────────────────────────── diff --git a/scripts/doctor.sh b/scripts/doctor.sh index 1497906..8d7f8bc 100755 --- a/scripts/doctor.sh +++ b/scripts/doctor.sh @@ -82,16 +82,16 @@ done section "2. CLAUDE.md primitives table" CLAUDE="$WORKSPACE/CLAUDE.md" if [ -f "$CLAUDE" ]; then - EXPECTED_COUNT=11 - if grep -qE "^(Eleven|11) irreducible building blocks" "$CLAUDE"; then - ok "primitive count header reads Eleven/11" + EXPECTED_COUNT=12 + if grep -qE "^(Twelve|12) irreducible building blocks" "$CLAUDE"; then + ok "primitive count header reads Twelve/12" else - ACTUAL=$(grep -oE "^(One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Eleven|[0-9]+) irreducible" "$CLAUDE" | head -1) - gap "primitive count header off (expected 'Eleven irreducible'; saw '$ACTUAL')" \ + ACTUAL=$(grep -oE "^(One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Eleven|Twelve|[0-9]+) irreducible" "$CLAUDE" | head -1) + gap "primitive count header off (expected 'Twelve irreducible'; saw '$ACTUAL')" \ "edit CLAUDE.md → 'Bstack Core Automation Primitives' header" fi - for n in 1 2 3 4 5 6 7 8 9 10 11; do + for n in 1 2 3 4 5 6 7 8 9 10 11 12; do if grep -qE "^\| P$n \|" "$CLAUDE"; then ok "P$n row present" else @@ -116,6 +116,7 @@ declare -a P_NAMES=( "P9: Branch + Worktree Janitor" "P10: Worktree Hygiene" "P11: Empirical Feedback Loop" + "P12: Persistent Loop Discipline" ) if [ -f "$AGENTS" ]; then for entry in "${P_NAMES[@]}"; do @@ -133,7 +134,7 @@ fi section "4. AGENTS.md reflexive trigger rules" # Primitives whose discipline is enforced via agent reasoning rather than hooks. # These MUST contain a Reflexive Trigger Rule subsection. -declare -a REFLEXIVE_PRIMS=(P6 P7 P10 P11) +declare -a REFLEXIVE_PRIMS=(P6 P7 P10 P11 P12) if [ -f "$AGENTS" ]; then for prim in "${REFLEXIVE_PRIMS[@]}"; do # Look for "P{n} is a reflex" OR "Reflexive Trigger Rule" in proximity to the prim section @@ -201,8 +202,9 @@ SCRIPT_PATHS=( "skills/p9/scripts/p9.py" "scripts/skill-freshness-hook.sh" "scripts/branch-janitor.sh" + "skills/persist/scripts/persist.py" ) -SCRIPT_LABELS=(P1 P2 P6 P7 P8 P9) +SCRIPT_LABELS=(P1 P2 P6 P7 P8 P9 P12) for i in "${!SCRIPT_PATHS[@]}"; do path="${SCRIPT_PATHS[$i]}" label="${SCRIPT_LABELS[$i]}"