@onlooker-community/ecosystem 0.33.1 → 0.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.agents/skills/beads/SKILL.md +80 -0
  2. package/.agents/skills/beads/agents/openai.yaml +4 -0
  3. package/.claude/settings.json +13 -0
  4. package/.claude/skills/writing-tests/SKILL.md +27 -0
  5. package/.claude-plugin/plugin.json +1 -1
  6. package/.codex/config.toml +2 -0
  7. package/.codex/hooks.json +51 -0
  8. package/.markdownlint.json +3 -0
  9. package/.release-please-manifest.json +6 -6
  10. package/AGENTS.md +246 -0
  11. package/CHANGELOG.md +14 -0
  12. package/CLAUDE.md +56 -1
  13. package/docs/lesson-promotion-pipeline.md +210 -0
  14. package/docs/superpowers/plans/2026-08-09-lesson-transform.md +1537 -0
  15. package/docs/superpowers/specs/2026-08-09-lesson-transform-design.md +261 -0
  16. package/package.json +3 -2
  17. package/plugins/assayer/.claude-plugin/plugin.json +1 -1
  18. package/plugins/assayer/CHANGELOG.md +7 -0
  19. package/plugins/assayer/scripts/lib/assayer-config.sh +6 -0
  20. package/plugins/curator/.claude-plugin/plugin.json +1 -1
  21. package/plugins/curator/CHANGELOG.md +7 -0
  22. package/plugins/curator/scripts/lib/curator-emit.sh +2 -1
  23. package/plugins/historian/.claude-plugin/plugin.json +1 -1
  24. package/plugins/historian/CHANGELOG.md +7 -0
  25. package/plugins/historian/scripts/lib/historian-emit.sh +2 -1
  26. package/plugins/librarian/.claude-plugin/plugin.json +1 -1
  27. package/plugins/librarian/CHANGELOG.md +14 -0
  28. package/plugins/librarian/config.json +4 -0
  29. package/plugins/librarian/schema/PROVENANCE.json +7 -0
  30. package/plugins/librarian/schema/lesson-applies-to.subschema.json +74 -0
  31. package/plugins/librarian/schema/lesson-evidence.subschema.json +36 -0
  32. package/plugins/librarian/scripts/hooks/librarian-session-end.sh +26 -0
  33. package/plugins/librarian/scripts/lib/librarian-cli.sh +2 -1
  34. package/plugins/librarian/scripts/lib/librarian-emit.sh +2 -1
  35. package/plugins/librarian/scripts/lib/librarian-lesson-storage.sh +135 -0
  36. package/plugins/librarian/scripts/lib/librarian-lesson-transform.sh +311 -0
  37. package/plugins/librarian/scripts/lib/librarian-lesson-validate.sh +140 -0
  38. package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
  39. package/plugins/tribunal/CHANGELOG.md +7 -0
  40. package/plugins/tribunal/scripts/lib/tribunal-aggregate.sh +3 -1
  41. package/plugins/tribunal/scripts/lib/tribunal-gate.sh +2 -1
  42. package/scripts/lib/prompt-rules.sh +6 -1
  43. package/scripts/lint/check-lesson-schema-drift.mjs +36 -0
  44. package/test/bats/archivist-inject.bats +1 -1
  45. package/test/bats/assayer-extract.bats +2 -2
  46. package/test/bats/bursar-session-start.bats +3 -3
  47. package/test/bats/cartographer-lock.bats +3 -3
  48. package/test/bats/compass-sanitizer.bats +11 -11
  49. package/test/bats/compass-transcript.bats +2 -2
  50. package/test/bats/config.bats +15 -15
  51. package/test/bats/curator-session-start.bats +10 -3
  52. package/test/bats/emit-payload-default.bats +52 -0
  53. package/test/bats/governor-ledger.bats +1 -1
  54. package/test/bats/historian-prompt-submit.bats +1 -1
  55. package/test/bats/inspector-post-write-hook.bats +4 -4
  56. package/test/bats/librarian-cli.bats +16 -16
  57. package/test/bats/librarian-lesson-transform.bats +609 -0
  58. package/test/bats/librarian-session-start.bats +2 -2
  59. package/test/bats/lineage-config.bats +1 -1
  60. package/test/bats/lineage-redact.bats +5 -5
  61. package/test/bats/session-tracker.bats +4 -4
  62. package/test/bats/tribunal-jury.bats +1 -1
  63. package/test/bats/turn-tracker.bats +1 -1
  64. package/test/bats/warden-sanitizer.bats +3 -3
  65. package/test/bats/worktree-tracker.bats +2 -2
  66. package/test/node/lesson-schema-drift.test.mjs +28 -0
  67. package/test/node/lesson-validate-agreement.test.mjs +154 -0
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: beads
3
+ description: Use when working in a repository that uses bd or Beads for durable project task tracking, issue dependencies, blocker management, multi-session handoff, or shared work memory. Trigger when the user asks to find ready work, claim or close tasks, create follow-up work, inspect blockers, recover project context, or choose between local planning and persistent project tracking.
4
+ ---
5
+
6
+ # Beads
7
+
8
+ Use Beads as the shared project task system. Local plans, scratch files, and personal memories are useful, but they are not the durable source of truth for project work.
9
+
10
+ ## First Step
11
+
12
+ Run:
13
+
14
+ ```bash
15
+ bd prime
16
+ ```
17
+
18
+ If that prints nothing, check whether the repository has an active Beads workspace:
19
+
20
+ ```bash
21
+ bd where
22
+ ```
23
+
24
+ ## Preferred Route
25
+
26
+ Use the `bd` CLI when shell access is available. It is the most compact and direct Beads interface.
27
+
28
+ ## Core CLI Workflow
29
+
30
+ 1. Find work:
31
+
32
+ ```bash
33
+ bd ready
34
+ bd list --status=open
35
+ bd list --status=in_progress
36
+ ```
37
+
38
+ 2. Inspect before editing:
39
+
40
+ ```bash
41
+ bd show <id>
42
+ ```
43
+
44
+ 3. Claim work atomically:
45
+
46
+ ```bash
47
+ bd update <id> --claim
48
+ ```
49
+
50
+ 4. Create durable follow-up work when implementation reveals new tasks:
51
+
52
+ ```bash
53
+ bd create "Short title" --description="Why this exists and what needs to be done" --type=task --priority=2
54
+ ```
55
+
56
+ 5. Close completed work:
57
+
58
+ ```bash
59
+ bd close <id> --reason="Completed"
60
+ ```
61
+
62
+ ## What Belongs In Beads
63
+
64
+ Use Beads for:
65
+
66
+ - shared project tasks
67
+ - blockers and dependencies
68
+ - discovered follow-up work
69
+ - work that must survive thread reset, compaction, or handoff
70
+ - status that another person or agent should be able to resume
71
+
72
+ Use agent-local planning tools only for the current turn's execution checklist. Do not treat them as shared project state.
73
+
74
+ ## Rules
75
+
76
+ - Do not create markdown TODO files as the source of truth when Beads is available.
77
+ - Do not use `bd edit`; it opens an interactive editor. Use `bd update` flags instead.
78
+ - Prefer `--json` when parsing `bd` output programmatically.
79
+ - If hooks are installed, `bd prime` may already be injected. Run it manually when context is missing.
80
+ - Do not auto-close or mutate tasks unless the work is actually complete.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Beads"
3
+ short_description: "Project task tracking with bd"
4
+ default_prompt: "Use $beads to inspect ready work and manage durable project tasks."
@@ -1,5 +1,18 @@
1
1
  {
2
2
  "enabledPlugins": {
3
3
  "ecosystem@onlooker-community": true
4
+ },
5
+ "hooks": {
6
+ "SessionStart": [
7
+ {
8
+ "hooks": [
9
+ {
10
+ "command": "bd prime --hook-json",
11
+ "type": "command"
12
+ }
13
+ ],
14
+ "matcher": ""
15
+ }
16
+ ]
4
17
  }
5
18
  }
@@ -160,6 +160,33 @@ _seed_artifact() {
160
160
  }
161
161
  ```
162
162
 
163
+ ## Gate every assertion: non-final `[[ ]]` needs `|| return 1`
164
+
165
+ `bats` resolves `#!/usr/bin/env bash`, which on macOS is the system bash 3.2.
166
+ Under 3.2 a failing **non-final** `[[ ]]` does **not** fail the test body —
167
+ execution continues and the test reports `ok`. Single-bracket `[ ]`, failing
168
+ commands, and failing command substitutions all gate correctly even there; the
169
+ defect is specific to `[[ ]]`. Under bash 5.x (what CI runs) it gates properly,
170
+ so a broken assertion passes locally and only CI would catch it.
171
+
172
+ Only the **last** assertion in a test body is safe, because a body's exit
173
+ status is its last command. Any `[[ ]]` before that needs explicit gating:
174
+
175
+ ```bash
176
+ @test "example" {
177
+ [[ "$output" == *"expected"* ]] || return 1 # non-final — must gate
178
+ [ "$status" -eq 0 ] # final — gates on its own
179
+ }
180
+ ```
181
+
182
+ Do **not** "fix" this by swapping to `[ ]`. Most of these assertions rely on
183
+ `[[ ]]`-only behavior — `==` glob patterns, `=~` regex, internal `&&`/`||` —
184
+ and a blanket swap silently changes what they test.
185
+
186
+ When you add an assertion, break it on purpose once and confirm the test fails.
187
+ A test that passes whether or not the code is correct is worse than no test,
188
+ because it reports coverage that does not exist.
189
+
163
190
  ## Anti-patterns
164
191
 
165
192
  Don't hand-roll these — each has bitten the suite before:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecosystem",
3
- "version": "0.33.1",
3
+ "version": "0.34.1",
4
4
  "description": "Observability substrate for Claude Code. Provides the shared $ONLOOKER_DIR storage root (default $HOME/.onlooker), canonical schema-validated event emission, session and tool tracking hooks, and prompt rules. Required by all other Onlooker plugins.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -0,0 +1,2 @@
1
+ [features]
2
+ hooks = true
@@ -0,0 +1,51 @@
1
+ {
2
+ "hooks": {
3
+ "PostCompact": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "command": "bd codex-hook PostCompact",
8
+ "statusMessage": "Scheduling Beads context refresh",
9
+ "type": "command"
10
+ }
11
+ ],
12
+ "matcher": "manual|auto"
13
+ }
14
+ ],
15
+ "PreCompact": [
16
+ {
17
+ "hooks": [
18
+ {
19
+ "command": "bd codex-hook PreCompact",
20
+ "statusMessage": "Checking Beads context",
21
+ "type": "command"
22
+ }
23
+ ],
24
+ "matcher": "manual|auto"
25
+ }
26
+ ],
27
+ "SessionStart": [
28
+ {
29
+ "hooks": [
30
+ {
31
+ "command": "bd codex-hook SessionStart",
32
+ "statusMessage": "Loading Beads context",
33
+ "type": "command"
34
+ }
35
+ ],
36
+ "matcher": "startup|resume|clear"
37
+ }
38
+ ],
39
+ "UserPromptSubmit": [
40
+ {
41
+ "hooks": [
42
+ {
43
+ "command": "bd codex-hook UserPromptSubmit",
44
+ "statusMessage": "Refreshing Beads context",
45
+ "type": "command"
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ }
@@ -13,5 +13,8 @@
13
13
  "MD060": false,
14
14
  "MD024": {
15
15
  "siblings_only": true
16
+ },
17
+ "MD010": {
18
+ "code_blocks": false
16
19
  }
17
20
  }
@@ -1,7 +1,7 @@
1
1
  {
2
- ".": "0.33.1",
2
+ ".": "0.34.1",
3
3
  "plugins/archivist": "0.3.1",
4
- "plugins/tribunal": "1.1.2",
4
+ "plugins/tribunal": "1.1.3",
5
5
  "plugins/echo": "0.3.1",
6
6
  "plugins/cartographer": "0.3.1",
7
7
  "plugins/governor": "0.3.2",
@@ -9,10 +9,10 @@
9
9
  "plugins/scribe": "0.4.2",
10
10
  "plugins/counsel": "0.5.1",
11
11
  "plugins/warden": "0.3.1",
12
- "plugins/librarian": "0.6.1",
13
- "plugins/curator": "0.2.2",
14
- "plugins/historian": "0.3.2",
15
- "plugins/assayer": "1.1.2",
12
+ "plugins/librarian": "0.7.1",
13
+ "plugins/curator": "0.2.3",
14
+ "plugins/historian": "0.3.3",
15
+ "plugins/assayer": "1.1.3",
16
16
  "plugins/bursar": "0.3.0",
17
17
  "plugins/lineage": "0.2.2",
18
18
  "plugins/inspector": "0.3.2"
package/AGENTS.md ADDED
@@ -0,0 +1,246 @@
1
+ # Agent Instructions
2
+
3
+ This project uses **bd** (beads) for issue tracking. Run `bd prime` for full workflow context.
4
+
5
+ > **Architecture in one line:** Issues live in a local Dolt database
6
+ > (`.beads/dolt/`); cross-machine sync uses `bd dolt push/pull` (a
7
+ > git-compatible protocol), stored under `refs/dolt/data` on your git
8
+ > remote — separate from `refs/heads/*` where your code lives.
9
+ > `.beads/issues.jsonl` is a passive export, not the wire protocol.
10
+ >
11
+ > See [SYNC_CONCEPTS.md](https://github.com/gastownhall/beads/blob/main/docs/SYNC_CONCEPTS.md)
12
+ > for the one-screen overview and anti-patterns (don't treat JSONL as the
13
+ > source of truth; don't `bd import` during normal operation; don't
14
+ > reach for third-party Dolt hosting before trying the default).
15
+
16
+ ## Quick Reference
17
+
18
+ ```bash
19
+ bd ready # Find available work
20
+ bd show <id> # View issue details
21
+ bd update <id> --claim # Claim work atomically
22
+ bd close <id> # Complete work
23
+ bd dolt push # Push beads data to remote
24
+ ```
25
+
26
+ ## Non-Interactive Shell Commands
27
+
28
+ **ALWAYS use non-interactive flags** with file operations to avoid hanging on confirmation prompts.
29
+
30
+ Shell commands like `cp`, `mv`, and `rm` may be aliased to include `-i` (interactive) mode on some systems, causing the agent to hang indefinitely waiting for y/n input.
31
+
32
+ **Use these forms instead:**
33
+ ```bash
34
+ # Force overwrite without prompting
35
+ cp -f source dest # NOT: cp source dest
36
+ mv -f source dest # NOT: mv source dest
37
+ rm -f file # NOT: rm file
38
+
39
+ # For recursive operations
40
+ rm -rf directory # NOT: rm -r directory
41
+ cp -rf source dest # NOT: cp -r source dest
42
+ ```
43
+
44
+ **Other commands that may prompt:**
45
+ - `scp` - use `-o BatchMode=yes` for non-interactive
46
+ - `ssh` - use `-o BatchMode=yes` to fail instead of prompting
47
+ - `apt-get` - use `-y` flag
48
+ - `brew` - use `HOMEBREW_NO_AUTO_UPDATE=1` env var
49
+
50
+ <!-- The sections below are mirrored from CLAUDE.md. The two files are
51
+ independent — not symlinked, not sharing an inode — so an edit to the
52
+ repository's conventions must land in both or agents get different
53
+ instructions depending on which file their harness reads. Claude Code
54
+ reads CLAUDE.md; Codex and several other tools read this one. -->
55
+
56
+ ## Repository layout
57
+
58
+ ```
59
+ ecosystem/ ← substrate plugin (always-on observability)
60
+ hooks/ ← session, tool, and prompt hooks
61
+ scripts/lib/ ← shared bash helpers and the canonical event emitter
62
+ skills/ ← user-invocable slash commands
63
+ config.json ← ecosystem defaults
64
+
65
+ plugins/
66
+ archivist/ ← session memory across context truncation
67
+ bursar/ ← multi-session, per-project budget rollup (governor's cross-session view)
68
+ cartographer/ ← instruction-file auditor (CLAUDE.md, AGENTS.md, rules/)
69
+ compass/ ← pre-write alignment gate (design phase)
70
+ echo/ ← prompt-change regression detection
71
+ governor/ ← resource governance and budget enforcement
72
+ inspector/ ← per-edit lint and typecheck gate
73
+ lineage/ ← per-change provenance ("why does this line exist?")
74
+ tribunal/ ← multi-agent quality gate (Actor → Jury → Meta-Judge → Gate)
75
+
76
+ docs/
77
+ architecture.md ← how plugins compose and share the event bus
78
+ adr/ ← ecosystem-level architectural decisions
79
+
80
+ scripts/lib/onlooker-event.mjs ← canonical event builder; all plugins route through this
81
+ ~/.onlooker/ ← shared runtime storage (logs, plugin artifacts)
82
+ ```
83
+
84
+ ## Plugin map
85
+
86
+ | Plugin | Hook surface | When it fires |
87
+ |--------|-------------|---------------|
88
+ | ecosystem | SessionStart/End, PreToolUse, PostToolUse, PostToolUseFailure, UserPromptSubmit, UserPromptExpansion, PreCompact, PostCompact, TaskCreated, TaskCompleted, WorktreeCreate, WorktreeRemove | Always — substrate |
89
+ | archivist | PreCompact, SessionStart | Extracts decisions/dead-ends on compaction; reinjects at next SessionStart |
90
+ | cartographer | SessionStart, PostToolUse (Write, Edit, MultiEdit) | Audits instruction files on session start and after instruction-file writes |
91
+ | compass | PreToolUse (Write, Edit, MultiEdit, Bash) | Before any write — alignment check |
92
+ | echo | Stop | Regression-tests prompt changes after each agent stop |
93
+ | governor | SessionStart, PreToolUse (Task), PostToolUse (Task), Stop | Budget gates on subagent spawns; tracks spend per session |
94
+ | tribunal | Stop + skill invocation | Post-task quality gate; also invokable via `/tribunal` |
95
+ | warden | PostToolUse (WebFetch, Read), PreToolUse (Write, Edit, MultiEdit, Bash), SessionStart + skill invocation | Scans ingested content for injection; closes a content gate that blocks write-class tools until cleared via `/warden` |
96
+ | assayer | Stop | Verifies the agent's final-message claims against actual command results in the transcript; advisory |
97
+ | bursar | SessionStart, SessionEnd | Rolls each session's spend into a per-project ledger on SessionEnd; surfaces "this project burned $X this week" at SessionStart. Governor is per-session; bursar is the cross-session rollup |
98
+ | lineage | PostToolUse (Edit, Write, MultiEdit) + skill invocation | Records per-change provenance (session_id/turn + redacted, size-capped snippets) into a per-project ledger; `/lineage <file>:<line>` answers "why does this line exist?" by joining records to historian transcripts to recover prompt context |
99
+ | inspector | PostToolUse (Write, Edit, MultiEdit) | Per-edit verification: runs the project's configured lint + typecheck commands on just the touched file and emits `inspector.check.*` / `inspector.run.completed`. Surfaces issues to the agent for the next turn. Cheaper than the planned proctor (which runs the full project verify at Stop); complements assayer (which catches claims the agent makes without running anything) |
100
+
101
+ Plugins communicate by emitting events to the JSONL log — they do not call each other directly. All plugins depend on the ecosystem substrate; no plugin depends on another plugin directly.
102
+
103
+ ## Compass plugin (design phase)
104
+
105
+ Compass is the pre-write alignment gate. It has no implementation yet. Design lives in `plugins/compass/docs/design.md`.
106
+
107
+ **What it does:** Fires on `PreToolUse` for write-class tools. Samples N=5 parallel Haiku evaluators to score intent clarity. Blocks when `confidence < 0.65 OR stddev > 0.20` and surfaces a clarification prompt.
108
+
109
+ **Critical architectural decision (ADR-001):** The evaluator must see the **prior assistant turn** alongside the current context — not the current context alone. Evaluating a reply in isolation produces a systematic false-positive class: a user answering an agent's enumerated question ("the internal one") looks ambiguous without the question that prompted it.
110
+
111
+ The pipeline is:
112
+
113
+ ```
114
+ Trigger Gate → Transcript Reader → Symbolic Skip Layer → Sanitizer → N=5 Evaluators → Gate
115
+ ```
116
+
117
+ - **Transcript reader** resolves `prior_assistant_turn` from `transcript_path` in the hook JSON payload (same field tribunal-stop-gate.sh reads). Reads one turn back from that file (already committed before `PreToolUse` fires — no timing-skew risk). If `transcript_path` is absent or unreadable, proceeds with an empty prior turn.
118
+ - **Symbolic skip layer** short-circuits to `confident` when the prior turn is an enumerated question and the current context is an option reference, without an LLM call. Controlled by `skip_patterns.reply_to_question.enabled` (default `true`).
119
+ - **Evaluator prompt** uses a structured pair: `<prior_assistant_turn>` and `<context_excerpt>` as separate XML-delimited slots. The convergence question is: *"Given the prior assistant turn as context, would two independent readers converge on the same interpretation of this write?"*
120
+
121
+ See `plugins/compass/docs/adr/001-evaluate-prompts-in-context.md` for the full decision record.
122
+
123
+ ## Adding a new plugin
124
+
125
+ 1. Create `plugins/<name>/` with `.claude-plugin/plugin.json`, `config.json`, `hooks/hooks.json`.
126
+ 2. Use `scripts/lib/onlooker-event.mjs` for all event emission — never write directly to the JSONL log.
127
+ 3. Store runtime artifacts under `${ONLOOKER_DIR:-$HOME/.onlooker}/<name>/<project-key>/`. Always use `$ONLOOKER_DIR` — never hardcode `~/.onlooker` — so the test suite's isolated temp home is respected.
128
+ 4. Derive the project key via `tribunal_project_key` (or equivalent) — first 12 hex chars of SHA256(`remote:<origin-url>`), falling back to SHA256(`root:<repo-root>`) for repos without a remote. See `plugins/tribunal/scripts/lib/tribunal-project-key.sh`.
129
+ 5. Register event types in `@onlooker-community/schema` before emitting them. The runtime emitter is dependency-free and **fails open**: it validates against the schema package only when that package is resolvable (dev, CI, tests) and emits unconditionally otherwise, because installed marketplace plugins ship no `node_modules`. Schema drift is caught in CI against the published schemas at `schema.onlooker.dev`. See [ADR-005](docs/adr/005-runtime-emitter-fails-open.md).
130
+ 6. Fail-soft when `~/.onlooker/` is absent — plugins must not block a session they were not invited to.
131
+
132
+ ## Development
133
+
134
+ ```bash
135
+ mise install # installs all tools declared in mise.toml
136
+ npm ci
137
+ npm test # bats + schema validation
138
+ npm run test:ci # shellcheck + bats + schema + lint
139
+ ```
140
+
141
+ Tests use an isolated temp home; nothing writes to your real `~/.onlooker/`.
142
+
143
+ ## Git workflow
144
+
145
+ **Always open a PR — never push directly to `main`.** Even though bypass rights allow direct pushes, this repo uses release-please for automated changelogs and versioning, so every change must travel through a PR to be picked up correctly. CI also runs on PRs before merge, catching failures before they land.
146
+
147
+ Workflow:
148
+ 1. Create a feature branch: `git switch -c <type>/<short-description>`
149
+ 2. Commit using `/commit`
150
+ 3. Push the branch and open a PR using `/git-workflow:pr`
151
+ 4. Wait for CI to pass before merging
152
+
153
+ ## Conventions
154
+
155
+ - All hooks are bash scripts. No Python, no Node entry points in hook scripts (they may shell out to `node` for event emission or heavy lifting).
156
+ - Hook scripts source shared helpers from `scripts/lib/` (or the plugin's own `scripts/lib/`).
157
+ - Event types follow `<plugin>.<noun>.<verb>` — e.g. `compass.check.skipped`, `tribunal.gate.blocked`.
158
+ - ULIDs everywhere for IDs (not UUIDs). Each plugin ships its own `*_ulid` helper (e.g. `archivist-ulid.sh`, `tribunal-ulid.sh`); there is no shared ecosystem helper. Copy `plugins/tribunal/scripts/lib/tribunal-ulid.sh` as a starting point and rename the function prefix.
159
+ - Config defaults live in `config.json`. User overrides go in `~/.claude/settings.json` (global) or `.claude/settings.json` (per-project) under the plugin's namespace key (e.g. `"compass"`, `"tribunal"`). See ADR-004.
160
+
161
+ <!-- BEGIN BEADS INTEGRATION v:1 profile:minimal hash:970c3bf2 -->
162
+ ## Beads Issue Tracker
163
+
164
+ This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands.
165
+
166
+ ### Quick Reference
167
+
168
+ ```bash
169
+ bd ready # Find available work
170
+ bd show <id> # View issue details
171
+ bd update <id> --claim # Claim work
172
+ bd close <id> # Complete work
173
+ ```
174
+
175
+ ### Rules
176
+
177
+ - Use `bd` for ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists
178
+ - Run `bd prime` for detailed command reference and session close protocol
179
+ - Use `bd remember` for persistent knowledge — do NOT use MEMORY.md files
180
+
181
+ **Architecture in one line:** issues live in a local Dolt DB; sync uses `refs/dolt/data` on your git remote; `.beads/issues.jsonl` is a passive export. See <https://github.com/gastownhall/beads/blob/main/docs/SYNC_CONCEPTS.md> for details and anti-patterns.
182
+
183
+ ## Agent Context Profiles
184
+
185
+ The managed Beads block is task-tracking guidance, not permission to override repository, user, or orchestrator instructions.
186
+
187
+ - **Conservative (default)**: Use `bd` for task tracking. Do not run git commits, git pushes, or Dolt remote sync unless explicitly asked. At handoff, report changed files, validation, and suggested next commands.
188
+ - **Minimal**: Keep tool instruction files as pointers to `bd prime`; use the same conservative git policy unless active instructions say otherwise.
189
+ - **Team-maintainer**: Only when the repository explicitly opts in, agents may close beads, run quality gates, commit, and push as part of session close. A current "do not commit" or "do not push" instruction still wins.
190
+
191
+ ## Session Completion
192
+
193
+ This protocol applies when ending a Beads implementation workflow. It is subordinate to explicit user, repository, and orchestrator instructions.
194
+
195
+ 1. **File issues for remaining work** - Create beads for anything that needs follow-up
196
+ 2. **Run quality gates** (if code changed) - Tests, linters, builds
197
+ 3. **Update issue status** - Close finished work, update in-progress items
198
+ 4. **Handle git/sync by active profile**:
199
+ ```bash
200
+ # Conservative/minimal/default: report status and proposed commands; wait for approval.
201
+ git status
202
+
203
+ # Team-maintainer opt-in only, unless current instructions forbid it:
204
+ git pull --rebase
205
+ bd dolt push
206
+ git push
207
+ git status
208
+ ```
209
+ 5. **Hand off** - Summarize changes, validation, issue status, and any blocked sync/commit/push step
210
+
211
+ **Critical rules:**
212
+ - Explicit user or orchestrator instructions override this Beads block.
213
+ - Do not commit or push without clear authority from the active profile or the current user request.
214
+ - If a required sync or push is blocked, stop and report the exact command and error.
215
+ <!-- END BEADS INTEGRATION -->
216
+
217
+ <!-- The Codex block below repeats the "Beads Issue Tracker" heading from the
218
+ integration block above. Both are generated and re-synced by different `bd`
219
+ subcommands, so neither heading can be renamed by hand without breaking
220
+ idempotent regeneration. These comments sit outside the BEGIN/END markers
221
+ so `bd` does not clobber them when it rewrites the block. -->
222
+ <!-- markdownlint-disable MD024 -->
223
+ <!-- BEGIN BEADS CODEX SETUP: generated by bd setup codex -->
224
+ ## Beads Issue Tracker
225
+
226
+ Use Beads (`bd`) for durable task tracking in repositories that include it. Use the `beads` skill at `.agents/skills/beads/SKILL.md` (project install) or `~/.agents/skills/beads/SKILL.md` (global install) for Beads workflow guidance, then use the `bd` CLI for issue operations.
227
+
228
+ ### Quick Reference
229
+
230
+ ```bash
231
+ bd ready # Find available work
232
+ bd show <id> # View issue details
233
+ bd update <id> --claim # Claim work
234
+ bd close <id> # Complete work
235
+ bd prime # Refresh Beads context
236
+ ```
237
+
238
+ ### Rules
239
+
240
+ - Use `bd` for all task tracking; do not create markdown TODO lists.
241
+ - Run `bd prime` when Beads context is missing or stale. Codex 0.129.0+ can load Beads context automatically through native hooks; use `/hooks` to inspect or toggle them.
242
+ - Keep persistent project memory in Beads via `bd remember`; do not create ad hoc memory files.
243
+
244
+ **Architecture in one line:** issues live in a local Dolt DB; sync uses `refs/dolt/data` on your git remote; `.beads/issues.jsonl` is a passive export. See <https://github.com/gastownhall/beads/blob/main/docs/SYNC_CONCEPTS.md> for details and anti-patterns.
245
+ <!-- END BEADS CODEX SETUP -->
246
+ <!-- markdownlint-enable MD024 -->
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.34.1](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.34.0...ecosystem-v0.34.1) (2026-08-10)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * make the local bats suite tell the truth :mag: ([#135](https://github.com/onlooker-community/ecosystem/issues/135)) ([f0763e0](https://github.com/onlooker-community/ecosystem/commit/f0763e09f3caf2d39c89f28befd12567af0af845))
9
+
10
+ ## [0.34.0](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.33.1...ecosystem-v0.34.0) (2026-08-09)
11
+
12
+
13
+ ### Features
14
+
15
+ * **librarian:** transform artifacts into shareable lesson candidates :microscope: ([#132](https://github.com/onlooker-community/ecosystem/issues/132)) ([48adbc7](https://github.com/onlooker-community/ecosystem/commit/48adbc7ec572b96b47f1be5f92810088c98702c6))
16
+
3
17
  ## [0.33.1](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.33.0...ecosystem-v0.33.1) (2026-08-02)
4
18
 
5
19
 
package/CLAUDE.md CHANGED
@@ -94,7 +94,7 @@ Tests use an isolated temp home; nothing writes to your real `~/.onlooker/`.
94
94
  Workflow:
95
95
  1. Create a feature branch: `git switch -c <type>/<short-description>`
96
96
  2. Commit using `/commit`
97
- 3. Push the branch and open a PR using `/git:gh-pr-create`
97
+ 3. Push the branch and open a PR using `/git-workflow:pr`
98
98
  4. Wait for CI to pass before merging
99
99
 
100
100
  ## Conventions
@@ -104,3 +104,58 @@ Workflow:
104
104
  - Event types follow `<plugin>.<noun>.<verb>` — e.g. `compass.check.skipped`, `tribunal.gate.blocked`.
105
105
  - ULIDs everywhere for IDs (not UUIDs). Each plugin ships its own `*_ulid` helper (e.g. `archivist-ulid.sh`, `tribunal-ulid.sh`); there is no shared ecosystem helper. Copy `plugins/tribunal/scripts/lib/tribunal-ulid.sh` as a starting point and rename the function prefix.
106
106
  - Config defaults live in `config.json`. User overrides go in `~/.claude/settings.json` (global) or `.claude/settings.json` (per-project) under the plugin's namespace key (e.g. `"compass"`, `"tribunal"`). See ADR-004.
107
+
108
+ <!-- BEGIN BEADS INTEGRATION v:1 profile:minimal hash:6cd5cc61 -->
109
+ ## Beads Issue Tracker
110
+
111
+ This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands.
112
+
113
+ ### Quick Reference
114
+
115
+ ```bash
116
+ bd ready # Find available work
117
+ bd show <id> # View issue details
118
+ bd update <id> --claim # Claim work
119
+ bd close <id> # Complete work
120
+ ```
121
+
122
+ ### Rules
123
+
124
+ - Use `bd` for ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists
125
+ - Run `bd prime` for detailed command reference and session close protocol
126
+ - Use `bd remember` for persistent knowledge — do NOT use MEMORY.md files
127
+
128
+ **Architecture in one line:** issues live in a local Dolt DB; sync uses `refs/dolt/data` on your git remote; `.beads/issues.jsonl` is a passive export. See <https://github.com/gastownhall/beads/blob/main/docs/SYNC_CONCEPTS.md> for details and anti-patterns.
129
+
130
+ ## Agent Context Profiles
131
+
132
+ The managed Beads block is task-tracking guidance, not permission to override repository, user, or orchestrator instructions.
133
+
134
+ - **Conservative (default)**: Use `bd` for task tracking. Do not run git commits, git pushes, or Dolt remote sync unless explicitly asked. At handoff, report changed files, validation, and suggested next commands.
135
+ - **Minimal**: Keep tool instruction files as pointers to `bd prime`; use the same conservative git policy unless active instructions say otherwise.
136
+ - **Team-maintainer**: Only when the repository explicitly opts in, agents may close beads, run quality gates, commit, and push as part of session close. A current "do not commit" or "do not push" instruction still wins.
137
+
138
+ ## Session Completion
139
+
140
+ This protocol applies when ending a Beads implementation workflow. It is subordinate to explicit user, repository, and orchestrator instructions.
141
+
142
+ 1. **File issues for remaining work** - Create beads for anything that needs follow-up
143
+ 2. **Run quality gates** (if code changed) - Tests, linters, builds
144
+ 3. **Update issue status** - Close finished work, update in-progress items
145
+ 4. **Handle git/sync by active profile**:
146
+ ```bash
147
+ # Conservative/minimal/default: report status and proposed commands; wait for approval.
148
+ git status
149
+
150
+ # Team-maintainer opt-in only, unless current instructions forbid it:
151
+ git pull --rebase
152
+ git push
153
+ git status
154
+ ```
155
+ 5. **Hand off** - Summarize changes, validation, issue status, and any blocked sync/commit/push step
156
+
157
+ **Critical rules:**
158
+ - Explicit user or orchestrator instructions override this Beads block.
159
+ - Do not commit or push without clear authority from the active profile or the current user request.
160
+ - If a required sync or push is blocked, stop and report the exact command and error.
161
+ <!-- END BEADS INTEGRATION -->