Releases: broomva/bstack
v0.23.0 — fix+feat: gitignore-aware, public-repo-aware, non-destructive bootstrap (issue #67)
fix+feat: gitignore-aware, public-repo-aware, non-destructive bootstrap (issue #67)
Found dogfooding v0.22.0 on existing real repos (stimulus, broomva.tech): bootstrap is built for fresh workspaces and did two unsafe things + lacked one needed capability on repos with their own hooks/CI/gitignore.
Fixed
install-l3-stability.shno longer clobbers a TRACKED.githooks/pre-commit. On a repo with a committed pre-commit (e.g. broomva.tech's multimedia-asset validator), bootstrap overwrote it with the bstack L3 rate-gate hook — moving the original to.pre-commit.local— even whencore.hooksPath≠.githooks, so the bstack hook never even fired. Now: if the hook is git-tracked, skip + warn (the committed hook is authoritative;--forcestill allows the move-aside). An untracked hook is still preserved as.pre-commit.localas before.
Added
bootstrap.shPhase 2.6 — gitignore reconciliation + public-repo advisory. Reconciles.gitignoreagainst the committable-vs-machine-local manifest:- machine-local telemetry (
.control/audit/*.jsonl) → auto-added to.gitignoreif missing. - committable substrate (
.control/arcs.yaml,rcs-parameters.toml,policy.yaml) → warns if gitignored (a coverage gap — the loop won't survive a fresh clone), never auto-un-ignores (publishing a maybe-private file is the human's call). - public-repo advisory (via
gh repo view --json visibility, graceful if absent): on a PUBLIC remote, surfaces that scaffolded governance is committable-and-public so the operator reviews for secrets before pushing.
- machine-local telemetry (
tests/gitignore-aware-bootstrap.test.sh— 5 assertions covering both fixes (tracked-hook preserved, untracked-hook sidecar still works, audit-glob added, committable-ignored warning). 5/5.
Notes
- Additive + non-blocking: Phase 2.6 skips gracefully on a non-git workspace; canary 14/14 unaffected.
- The manual handling on stimulus (#1811) + broomva.tech (broomva.tech#211) is the spec this automates.
VERSION0.22.0 → 0.23.0.
v0.21.10 — revert: --full-depth no longer needed after broomva/skills restructure
revert: --full-depth no longer needed after broomva/skills restructure
Companion to broomva/skills PR #11 (merge ab2d05b), which removed the root SKILL.md from broomva/skills to align with the anthropics/skills ecosystem-canonical monorepo shape (best practice per agentskills.io).
With the root SKILL.md gone, the npx skills CLI's default search descends into skills/<name>/ automatically — --full-depth is no longer required.
Reverted
references/skills-roster.md— dropped--full-depthfrom 26--skillinstall commandsscripts/skill-graduate.sh— dropped--full-depthfrom the 4 generated install commands (commit msg, monorepo PR body, redirect-stub README, stub PR body). Future graduations now emit the canonical command form.VERSION0.21.9 → 0.21.10
Net effect across the 0.21.x line
| Release | What it did |
|---|---|
| 0.21.9 | Added --full-depth as a workaround for the root-SKILL.md shadowing (post-dogfood) |
| 0.21.10 | Removed --full-depth after the broomva/skills restructure eliminated the root cause |
The roster's npx skills add broomva/skills --skill <name> commands are now both correct AND minimal — matching the form used by all other monorepos in the ecosystem.
20/20 tests (graduate + audit) still pass.
v0.21.6 — Phase 4f orcahand migration + dedup (final Tier-2 migration)
Phase 4f orcahand migration + dedup (final Tier-2 migration)
The last Tier-2 migration. orcahand consolidated to broomva/skills Tier-2 monorepo (broomva/skills PR #9 merge df4fb13), resolving the Phase-0 contested dedup case.
broomva/orcahand and broomva/orcahand-skill were true duplicates (both 180K, identical SKILL.md + assets/ + references/ + schemas/ + scripts/, both name: orcahand). Per user decision: migrate the canonical (.agents-symlinked) broomva/orcahand → skills/orcahand/; archive BOTH source repos with redirect-stubs.
Source repos deprecated (both, 6mo window until 2026-11-26)
Files changed
references/companion-skills.yaml— 1 NEW entry (orcahand); 63 → 64 totalVERSION—0.21.5→0.21.6CHANGELOG.md— this entry
Migration complete
47 skills now in broomva/skills monorepo. All Tier-2 candidates from the inventory doc are migrated, except broomva/mirage (no remote on GitHub — flagged as an anomaly, not actionable). The skills-monorepo migration arc (Phases 2–4f) is complete.
v0.21.5 — Phase 4e neuroscience migration (TRIBE v2 family)
Phase 4e neuroscience migration (TRIBE v2 family)
3 standalone-repo neuroscience skills migrated to broomva/skills Tier-2 monorepo (broomva/skills PR #8 merge ca7de88):
tribe-v2-agent-alignment— cortical alignment benchmarking for AI encoderstribe-v2-bci-applied— applied BCI + neuro-informed content optimizationtribe-v2-neuroscience— in-silico fMRI prediction
All NEW registry entries (none were previously registered).
Finding: _shared/ is demand-driven
The strategy doc anticipated a _shared/tribe-v2/ directory. On inspection, the 3 skills have DISJOINT reference sets (arcan-integration / cortical-region-atlas / brain-regions — no file overlap). No _shared/ extraction warranted. This validates the principle: _shared/<category>/ is created only when concrete shared content exists, never speculatively.
Source repos deprecated (6mo window until 2026-11-26)
- broomva/tribe-v2-agent-alignment PR #1 (merge
7bca620) - broomva/tribe-v2-bci-applied PR #1 (merge
1e3ea14) - broomva/tribe-v2-neuroscience PR #1 (merge
64165b7)
Files changed
references/companion-skills.yaml— 3 NEW entries (60 → 63 total)VERSION—0.21.4→0.21.5CHANGELOG.md— this entry
Cumulative monorepo state: 46 skills
v0.21.4 — Phase 4d specialty domain migration (largest batch)
Phase 4d specialty domain migration (largest batch)
17 standalone-repo skills migrated to broomva/skills Tier-2 monorepo (broomva/skills PR #7 merge 1be5fd9). 2 renamed during migration to drop -skill suffix per ecosystem norm.
By sub-category:
Hardware, robotics, physical (6): bitnet, capx-agentic-robotics, openrocket-sim, sdr-satellite, ocean-genomics, microgrid-agent
Compute & remote infrastructure (4): colab-remote, remote-gpu, claude-code-channels, claude-remote-sessions
Audio, voice, media (2, both renamed): omnivoice (from omnivoice-skill), livecoding
Advisory & consulting (3, one renamed): phronesis, procurer, alkosto-wait-optimizer (from alkosto-wait-optimizer-skill)
Health & body (2): health, founder-mode-oncology (Phase-0 contested case lean accepted)
Source repos deprecated (17 redirect-stubs merged 2026-05-26)
bitnet · livecoding · openrocket-sim · sdr-satellite · capx-agentic-robotics · ocean-genomics · phronesis · procurer · alkosto-wait-optimizer-skill · omnivoice-skill · microgrid-agent · claude-code-channels · claude-remote-sessions · colab-remote · remote-gpu · health · founder-mode-oncology — all archived after 6mo deprecation (2026-11-26).
Excluded from this batch
broomva/mirage— repository does not exist on GitHub (anomaly flagged in inventory § 8)broomva/orcahand— Phase-0 contested dedup decision betweenbroomva/orcahand(runtime) andbroomva/orcahand-skill(duplicate); deferred to Phase 4f
Files changed
references/companion-skills.yaml— 16 NEW entries + 1 entry rewritten (alkosto-wait-optimizer)references/skills-roster.md— install commands updatedVERSION—0.21.3→0.21.4CHANGELOG.md— this entry
Total registry size
44 → 60 entries (+16 net)
Cumulative monorepo state
43 skills under broomva/skills/skills/:
- 2 workflow & lifecycle
- 9 strategy & decision intelligence
- 9 content & media
- 3 research & intelligence
- 3 finance
- 6 hardware/robotics/physical
- 4 compute & remote
- 2 audio/voice/media
- 3 advisory/consulting
- 2 health & body
v0.21.3 — Phase 4c research + finance migration
Phase 4c research + finance migration
Six more skills migrated from standalone broomva/<name> repos into broomva/skills Tier-2 monorepo (broomva/skills PR #6 merge e2bdf14). Three renamed during migration to drop the -skill suffix per ecosystem norm:
| Old repo | New monorepo path | Notes |
|---|---|---|
broomva/deep-dive-research-skill |
skills/deep-dive-research-orchestrator/ |
Renamed to match canonical skill name in registry |
broomva/social-intelligence |
skills/social-intelligence/ |
NEW registry entry |
broomva/harness-engineering-skill |
skills/harness-engineering-playbook/ |
Renamed; preserves required: true |
broomva/investment-management |
skills/investment-management/ |
NEW registry entry |
broomva/wealth-management |
skills/wealth-management/ |
NEW registry entry |
broomva/haima-skill |
skills/haima/ |
Renamed; runtime crate stays at broomva/haima (separate concern) |
Source repos deprecated (6mo window until 2026-11-25)
- broomva/deep-dive-research-skill PR #1 (merge
c39a293) - broomva/social-intelligence PR #3 (merge
b0d2bc5) - broomva/harness-engineering (renamed from -skill at GitHub level) PR #1 (merge
55edcde) - broomva/investment-management PR #7 (merge
557a950) - broomva/wealth-management PR #1 (merge
5022c12) - broomva/haima-skill PR #2 (merge
c8f5014)
Files changed
references/companion-skills.yaml— 4 NEW entries (social-intelligence, investment-management, wealth-management, haima) + 2 entries rewritten (deep-dive-research-orchestrator, harness-engineering-playbook) — total 40 → 44references/skills-roster.md— install commands updatedVERSION—0.21.2→0.21.3CHANGELOG.md— this entry
Cumulative monorepo state
26 skills under broomva/skills/skills/:
- 2 workflow & lifecycle (handoff, make-spec)
- 9 strategy & decision intelligence
- 9 content & media
- 3 research (deep-dive-research-orchestrator, social-intelligence, harness-engineering-playbook)
- 3 finance (investment-management, wealth-management, haima)
v0.21.2 — Phase 4b content & media migration (final content batch)
Phase 4b content & media migration (final content batch)
Six more standalone-repo skills migrated into the broomva/skills Tier-2 monorepo (broomva/skills PR #5 merge e932c7b). After this release, all 9 content/media skills identified in the strategy doc inventory are in the monorepo:
content-creation— full-stack content pipeline; ships 45MB of demonstration campaigns (bstack-launch, open-source-stack). Registry entry updated to monorepo path.content-engine— NEW registry entry. AI content studio bundling 4 sub-skills (autopilot, cinema, dna, loop) underskills/content-engine/skills/.launch-video— NEW entry. Remotion-based Liquid Glass launch video.ltx-video— NEW entry. LTX-2.3 video generation (Lightricks 22B DiT model).creative-review— NEW entry. Meta creative review with style scoring.brainrot-for-good— NEW entry. Dopamine-aware video editing for valuable content.
Source repos deprecated (6mo window until 2026-11-25)
- broomva/content-creation PR #5 (merge
88c7ff7) - broomva/content-engine PR #2 (merge
9761756) - broomva/launch-video PR #1 (merge
dfe48e6) - broomva/ltx-video PR #1 (merge
f8962ab) - broomva/creative-review PR #1 (merge
bcaea5a) - broomva/brainrot-for-good PR #1 (merge
7f22dd6)
Files changed
references/companion-skills.yaml— 5 new entries + 1 entry rewritten; total 35 → 40 entriesreferences/skills-roster.md— install commands updated for 6 entriesVERSION—0.21.1→0.21.2(additive patch)CHANGELOG.md— this entry
Monorepo state after this release
20 skills installed in broomva/skills/skills/:
- 2 workflow & lifecycle (handoff, make-spec)
- 9 strategy & decision intelligence
- 9 content & media (this release completes the content batch)
v0.21.1 — Phase 4a content & media migration
Phase 4a content & media migration
Three more skills migrated from standalone broomva/<name> repos into the broomva/skills Tier-2 monorepo (broomva/skills PR #4 merge 2f5aec4):
blog-post— full-stack blog post production (substantial: 28KB SKILL.md + examples/ + references/ + scripts/publish.sh + templates/). NEW registry entry (was previously bundled / not registered separately).brand-icons— brand icon and visual identity asset generation. Registry entry updated fromrepo: broomva/brand-icons→repo: broomva/skills, skillPath: skills/brand-icons/SKILL.md.seo-llmeo— SEO and LLM Engine Optimization (audits, meta tags, structured data, llms.txt). Registry entry updated to monorepo path.
Each source repo carries a redirect-stub README during a 6-month deprecation window (until 2026-11-25):
- broomva/blog-post PR #1 (merge
a7d90b6) - broomva/brand-icons PR #1 (merge
2e20534) - broomva/seo-llmeo PR #1 (merge
2b635d6)
Files changed
references/companion-skills.yaml— 2 entries rewritten (brand-icons,seo-llmeo), 1 new entry added (blog-post)references/skills-roster.md— install commands updated to monorepo pathsVERSION—0.21.0→0.21.1(additive patch — new entries + corrected install paths)CHANGELOG.md— this entry
Pattern note: multi-source-repo migration
Phase 3 migrated 9 sub-skills from ONE bundled source (broomva/strategy-skills/.skills/). Phase 4a tests the multi-source pattern — 3 separate standalone source repos, each with full skill layout (SKILL.md + scripts/ + references/ + assets/). The migration command is now well-rehearsed and ready to crystallize into the bstack skill graduate CLI (Phase 6b).
broomva/blog-post's root canonical content was preserved; 24 IDE-specific dotfile-mirror dirs (.agent/, .claude/, .continue/, etc.) were excluded as deployment artifacts — downstream agents resolve to skills/blog-post/SKILL.md per the agentskills.io spec.
v0.20.0 — Cross-review CLI — restore the P20 mechanism (BRO-1227 Fix B)
Cross-review CLI — restore the P20 mechanism (BRO-1227 Fix B)
The P20 (broomva/cross-review) primitive — cross-model adversarial review on substantive PRs before merge — failed reliably during the 2026-05-21 Wave 3 dispatch session: both Cato sub-agent dispatches stalled within 6-7 tool uses with path-resolution errors. The Cato agent was invoked from the miami workspace but asked to read files at ~/broomva/broomva.tech/... — the working tree was on a different branch than the PR's head SHA, so Read-tool calls drifted into "let me locate the actual repo" loops and never produced output.
This release ships Fix B: a bstack cross-review CLI that reads PR contents via gh pr diff + gh api repos/.../contents/<path>?ref=<sha>. Working-tree state is eliminated as a variable — the CLI can be invoked from any cwd; only --repo <owner/name> + PR number matter.
New files (3)
- NEW
scripts/cross-review.py— argparse CLI. Fetches PR metadata (gh pr view), the diff (gh pr diff), and post-change file contents (gh api …/contents/<path>?ref=<head_sha>); skips lock files and >2000-line adds; bundles into a structured codex prompt; invokescodex exec --sandbox read-only --model gpt-5.4 --skip-git-repo-checkwith a 240s default timeout; parses JSON verdict (with fallbacktry_parse_jsonextractor that recovers a balanced{…}object from prose-wrapped output); writes structured JSON to.bstack-cross-review/<pr>.json+ markdown to<pr>.md. Verdict schema:verdict(pass/concerns/fail/skipped) ×anti_slop_score(0-10) ×criticality(high/medium/low) ×findings[]×blind_spots_surfaced[]×summary. Optional--post-commentposts the markdown verdict back to the PR. Exit codes: 0 pass · 10 concerns · 20 fail · 30 skipped · 2 invocation/gh failure. - NEW
bin/bstack-cross-review— thin shim mirroringbin/bstack-wave: dispatches toscripts/cross-review.py, forwards argv unchanged. - NEW
tests/cross-review.test.sh— 8-test hermetic offline smoke (dispatcher routing, argparse rejection cases, module import,try_parse_jsonrecovery from prose-wrapped JSON,exit_code_for_verdictmapping). No network calls — end-to-end validation is the per-PR--dry-runagainst real PRs documented in the PR body.
Changed files (3)
- CHANGED
bin/bstack— addscross-review)dispatch entry routing tobin/bstack-cross-review. Adds usage section "Review" with a one-liner pointing atcross-review <pr-num> --repo <owner/name>(≥ 0.20.0). Adds the canonical invocation to the Examples block. - CHANGED
SKILL.md— Quick start block listsbstack cross-reviewwith the BRO-1227 Fix B annotation and 0.20.0 introduction marker. - CHANGED
VERSION—0.19.0 → 0.20.0.
Why Fix B over Fix A or Fix C
- Fix A (add
--cwdparameter to Cato dispatch) leaves the working-tree-state coupling intact — every future P20 invocation has to remember to set it, and a stale checkout silently degrades review quality. The failure mode comes back the next time someone uses Cato across repos. - Fix B (always read from git, never the working tree) eliminates the failure mode by construction. The bug surface goes away.
- Fix C (full skill repo + agent definition + tmp-checkout pipeline) is the complete answer but requires writing the
~/.claude/skills/cross-review/skill, deciding whether the Cato agent stays as the codex-exec frontend or gets re-architected, and managing the tmp-checkout cleanup contract. Larger blast radius — deferred to a follow-up once Fix B has soaked.
Test plan executed
bash -n bin/bstack-cross-review # syntax OK
bash -n bin/bstack # syntax OK
python3 -m py_compile scripts/cross-review.py # OK
bin/bstack --help | grep cross-review # 2 lines
bin/bstack cross-review --help | head -20 # argparse usage
bin/bstack cross-review 195 --repo broomva/broomva.tech --dry-run # 9 files fetched, 1 lock skipped
bash tests/cross-review.test.sh # 8/8 pass
What's next (not in this release)
- Apply
bstack cross-reviewto the 3 PRs that merged WITHOUT P20 cross-review last session — broomva.tech#195, #196, life#1427 — and post retro-verdicts as PR comments. Out of scope for this PR (no code change needed; this PR ships the tool). - File a follow-up for the full
~/.claude/skills/cross-review/skill (Fix C scope) once Fix B has soaked through ≥3 P20 invocations.
Backreferences
- BRO-1227 — P20 cross-review mechanism gap (closes via Fix B)
- 2026-05-22 session handoff —
/Users/broomva/conductor/archived-contexts/broomva/wave-3-dispatch-and-linear-updates/handoffs/2026-05-22-SESSION-HANDOFF.md§"Queued + ready to dispatch" - CLAUDE.md §"Cross-Review (P20)" — the discipline rule this mechanism enforces
v0.19.0 — Closure Contract — generalize 5-tuple from 4 RCS layers to N declared arcs
Closure Contract — generalize 5-tuple from 4 RCS layers to N declared arcs
Builds on v0.18.0 (Phase 8 federation, BRO-47) — the federation registry is the substrate that lets per-workspace arc declarations roll up via bstack status --aggregate. Together, v0.18.0 + v0.19.0 close the substrate-completion arc through the user-defined-arcs layer.
v0.14.0 + v0.16.0 already shipped a 5-tuple (plant, sensor, controller, actuator, termination) for 4 hard-coded RCS layers via assets/templates/rcs-parameters.toml.template + scripts/compute-budget-status.sh. This release lifts the same pattern from those 4 layers to N user-declared domain arcs the workspace actually runs every day (PR greenflow, bookkeeping promotion quality, deploy reliability, etc.).
The closure contract: every arc declares (id, plant_surfaces, sensor, actuator, termination, tau_a, shield_ref). The agent's reasoning is the universal Π (controller) — that's not declared, it's the default binding when actuator.kind == "agent_reasoning". Script / mcp_tool / http actuators bind specific mechanisms while keeping the agent in the supervisory role.
Companion: point-in-time → trend monitoring for composite-ω. compute-budget-status.sh --trend appends one snapshot per call to .control/audit/composite-omega-history.jsonl, then reads the last 7 days and reports slope + verdict (stable_flat | drift_up | drift_down | volatile). Doctor §21 surfaces a hard gap only on drift_down — composite stability shrinking is the signal worth interrupting on.
New files (4)
- NEW
schemas/arcs.v1.json— JSON-schema draft-07 for.control/arcs.yaml. Mirrors the style ofschemas/policy.v1.jsonandschemas/workspaces.v1.json. Required arc fields:id(same character class as workspace registry name),plant_surfaces(free-form URIs),sensor(enum:exit_code | json_path | log_match | metric_threshold),actuator(enum:agent_reasoning | script | mcp_tool | http),termination(enum:predicate | wallclock | score_threshold | exit_zero),tau_a(number, seconds). Optional:shield_refpointing at apolicy.yamlgate. - NEW
assets/templates/arcs.yaml.template— declarative arcs template with 2 worked examples and heavy commentary mirroring the rcs-parameters.toml.template intro cadence. Example 1:code-pr-greenflow(json_path sensor, agent_reasoning actuator, predicate termination, tau_a=1800s). Example 2:bookkeeping-promotion-quality(exit_code sensor, agent_reasoning actuator, score_threshold termination, tau_a=86400s). - NEW
scripts/compute-arc-status.sh— per-arc verdict reader; mirrors the shape ofscripts/compute-budget-status.shexactly. Looks at.control/arcs.yaml→ falls back to bundled template. For each arc: runs the sensor (bash -cfor exit_code/json_path/metric_threshold; regex against log file for log_match), reads most recent termination event from.control/audit/arc-<id>.jsonl, evaluates termination predicate, emits verdictgreen | yellow | red | unknown. Outputs JSON (default) or--humantable. Exit codes: 0 all green, 1 ≥1 red, 2 config missing, 3 python3 unavailable. Ships its own inline minimal YAML parser (modeled onscripts/workspace.py_yaml_minimal_parse) — PyYAML preferred, falls back when absent, both code paths exercised by the test suite. - NEW
tests/arcs-validation.test.sh+ NEWtests/omega-drift-trend.test.sh— hermetic bash test suites in thetests/metrics-pipeline.test.shstyle. 6 + 6 tests; both GREEN under system Python (PyYAML, no tomllib path) AND homebrew Python (tomllib, no PyYAML path). Tests exercise schema rejection (schema_version: 99), template loading, override precedence, drift_down / drift_up / stable_flat verdicts on synthetic data, and idempotent history-line writes per--trendcall.
Changed files (2)
- CHANGED
scripts/compute-budget-status.sh— adds--trendflag. Without--trend: existing point-in-time behavior preserved. With--trend: appends{ts, omega, per_layer}snapshot to.control/audit/composite-omega-history.jsonl, then reads last 7 days, computes least-squares slope, baseline (median of first day in window), deviation, volatility (CV), and verdict. Verdict heuristic prefers drift detection over volatility when there's a clear directional signal (slope sign matches relative-deviation sign with magnitude > 1%); volatility is the residual category. Trend block surfaces in--humanas one extra line and as a top-leveltrendobject in--json. - CHANGED
scripts/doctor.sh— adds §20 and §21. §20 reads.control/arcs.yaml(informational when absent), reports arc count + completeness count, surfaces last-termination-event timestamp per arc; hard gap only ifschema_version != 1. §21 readscomposite-omega-history.jsonl, callscompute-budget-status.sh --trend --json, reports last/baseline/slope/verdict; hard gap only ifverdict == drift_down.
Test plan executed
bash -n scripts/compute-arc-status.sh # syntax OK
bash -n scripts/compute-budget-status.sh # syntax OK
bash -n scripts/doctor.sh # syntax OK
python3 -c "import json; json.loads(open('schemas/arcs.v1.json').read())" # schema parses
bash scripts/compute-arc-status.sh --human # reads template, prints table for both arcs
bash scripts/compute-budget-status.sh --trend --human # writes 1 history line, prints trend line
bash tests/arcs-validation.test.sh # 6/6 GREEN under both python envs
bash tests/omega-drift-trend.test.sh # 6/6 GREEN
bash scripts/doctor.sh against ~/broomva # §20 + §21 visible; 87/89 (2 pre-existing gaps unrelated)
Honest scope caveats
- The minimal inline YAML parser inside
compute-arc-status.shcovers exactly the shapeschemas/arcs.v1.jsondeclares. Workspaces that hand-write.control/arcs.yamlwith PyYAML-only features (anchors, multi-doc, flow-style) will need PyYAML installed; otherwise stick to the block-scalar shape shown in the template. arc-<id>.jsonlaudit-event writers are not shipped in this PR. Termination events are read bycompute-arc-status.shwhen present; for now, onlywallclockandexit_zeroterminations evaluate without a prior recorded event.predicateandscore_thresholdarcs surfaceyellow(running) until an event lands. Follow-up: addscripts/arc-event-hook.shso actuators can record verdicts as they close.- Verdict thresholds in
--trend(1% relative deviation, 10% coefficient of variation) are heuristic and calibrated for the broomva workspace's λ range. Tighten / loosen via follow-up policy.yaml block after rule-of-three failure modes accumulate. - The "ω is shrinking" signal in §21 fires only after ≥ 2 history points span the 7-day window. Workspaces that don't periodically invoke
--trend(no scheduled call from/loopor a cron) will see onlystable_flatregardless of underlying drift.
Spec doc + cross-references
- Anchored arcs: prior PR (v0.16.0) shipped the 4-layer hard-coded analogue (
assets/templates/rcs-parameters.toml.template); v0.14.0 shipped the L3 enforcement; this PR generalizes both surfaces to N user-declared arcs. - Why not a new primitive: the Closure Contract is the generalization of the existing (X, U, h, Π, T) substrate that L0–L3 already use. It's a declarative surface lift, not a new reflex. P21 "Closure Contract" promotion candidate logged — promotion to a numbered primitive deferred until rule-of-three concrete failures are recorded (per the L3 stability budget's stability budget for governance churn). The candidate ledger lives in
research/entities/pattern/bstack-engine.mdper CLAUDE.md §Bstack Engine.