@onlooker-community/ecosystem 0.15.1 → 0.15.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecosystem",
3
- "version": "0.15.1",
3
+ "version": "0.15.2",
4
4
  "description": "Observability substrate for Claude Code. Provides the shared ~/.onlooker/ storage root, 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",
@@ -1,7 +1,7 @@
1
1
  {
2
- ".": "0.15.1",
2
+ ".": "0.15.2",
3
3
  "plugins/archivist": "0.1.0",
4
- "plugins/tribunal": "1.0.0",
4
+ "plugins/tribunal": "1.0.1",
5
5
  "plugins/echo": "0.2.0",
6
6
  "plugins/cartographer": "0.2.0"
7
7
  }
package/CHANGELOG.md CHANGED
@@ -1,11 +1,11 @@
1
- # [0.8.0](https://github.com/onlooker-community/ecosystem/compare/v0.7.2...v0.8.0) (2026-05-22)
1
+ # Changelog
2
2
 
3
+ ## [0.15.2](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.15.1...ecosystem-v0.15.2) (2026-05-25)
3
4
 
4
- ### Features
5
5
 
6
- * **hooks:** add TaskCreated and TaskCompleted task lifecycle trackers ([#21](https://github.com/onlooker-community/ecosystem/issues/21)) ([986ffa8](https://github.com/onlooker-community/ecosystem/commit/986ffa84bdd857a464ca0d556671628190ed27bc))
6
+ ### Bug Fixes
7
7
 
8
- # Changelog
8
+ * **tribunal:** persist all artifacts on every iteration including retries :relieved: ([#41](https://github.com/onlooker-community/ecosystem/issues/41)) ([1636105](https://github.com/onlooker-community/ecosystem/commit/163610535a4ce0fa73c8fb82dc5c6296d2d1065a))
9
9
 
10
10
  ## [0.15.1](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.15.0...ecosystem-v0.15.1) (2026-05-25)
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onlooker-community/ecosystem",
3
- "version": "0.15.1",
3
+ "version": "0.15.2",
4
4
  "description": "Agents, skills, hooks, commands, rules, and MCP configurations that power [Onlooker](https://onlooker.dev)",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tribunal",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Multi-agent execution with LLM-as-a-Judge quality gates. An Actor performs work; a jury of typed Judges scores it against a project-overridable rubric; a Meta-Judge reviews the jury for bias; the gate decides accept, retry, or exhaust. Grounded in LLM-as-a-Judge (Zheng et al. 2023) and LLM-as-a-Meta-Judge (Wu et al. 2024). Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.0.1](https://github.com/onlooker-community/ecosystem/compare/tribunal-v1.0.0...tribunal-v1.0.1) (2026-05-25)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **tribunal:** persist all artifacts on every iteration including retries :relieved: ([#41](https://github.com/onlooker-community/ecosystem/issues/41)) ([1636105](https://github.com/onlooker-community/ecosystem/commit/163610535a4ce0fa73c8fb82dc5c6296d2d1065a))
9
+
3
10
  ## 1.0.0 (2026-05-24)
4
11
 
5
12
 
@@ -50,14 +50,22 @@ Emit `tribunal.session.start` with the resolved config (`judge_types`, `gate_pol
50
50
 
51
51
  For `iteration_number` from `0` while `iteration_number < max_iterations`:
52
52
 
53
- 1. **Iteration start.** Generate `iteration_id=$(tribunal_ulid)`. `trigger` is `"initial"` for n=0, `"gate_blocked"` for retries. Emit `tribunal.iteration.start`.
53
+ 1. **Iteration start.** Generate `iteration_id=$(tribunal_ulid)`. `trigger` is `"initial"` for n=0, `"gate_blocked"` for retries. Initialize the iteration directory (creates `verdicts/` subdirectory):
54
+ ```bash
55
+ tribunal_init_iteration "$project_key" "$task_id" "$iteration_id"
56
+ ```
57
+ Emit `tribunal.iteration.start`.
54
58
 
55
59
  2. **Actor.** Emit `tribunal.actor.start`. Use the Task tool to spawn `tribunal-actor` with:
56
60
  - The task description.
57
61
  - The rubric criteria (just `name` + `weight` + `min_pass`).
58
62
  - On retries: a digest of the prior iteration's consensus, dissent (if any), and Meta-Judge override.
59
63
 
60
- Capture the Actor's final output. Persist it: `tribunal_write_actor_output "$project_key" "$task_id" "$iteration_id" "$actor_output"`. Emit `tribunal.actor.complete` with `success: true` and the inferred `artifact_kind` (`file` / `patch` / `message` / `command`).
64
+ Capture the Actor's final output. **`$actor_output` must be the verbatim, complete text returned by the Task tool never a summary, paraphrase, or placeholder string.** Persist it:
65
+ ```bash
66
+ tribunal_write_actor_output "$project_key" "$task_id" "$iteration_id" "$actor_output"
67
+ ```
68
+ Emit `tribunal.actor.complete` with `success: true` and the inferred `artifact_kind` (`file` / `patch` / `message` / `command`).
61
69
 
62
70
  3. **Empanel the jury.** Resolve the panel from configured types:
63
71
  ```bash
@@ -67,17 +75,31 @@ For `iteration_number` from `0` while `iteration_number < max_iterations`:
67
75
  [[ -n "$rubric_types" && "$rubric_types" != "null" ]] && types="$rubric_types"
68
76
  jury=$(tribunal_jury_empanel "$types")
69
77
  ```
70
- Persist the jury (`tribunal_write_iteration_artifact ... jury ...`) and emit `tribunal.jury.empaneled` with the schema-shaped `judges[]` (`tribunal_jury_to_schema_judges "$jury"`).
78
+ Persist the jury and emit `tribunal.jury.empaneled`:
79
+ ```bash
80
+ tribunal_write_iteration_artifact "$project_key" "$task_id" "$iteration_id" "jury" "$jury"
81
+ schema_judges=$(tribunal_jury_to_schema_judges "$jury") # pass $schema_judges as judges[] in the event
82
+ ```
71
83
 
72
84
  4. **Run each Judge.** For each entry in the jury panel:
73
85
  - Emit `tribunal.judge.start` with `judge_id`, `judge_type`, `judge_model_id`.
74
86
  - Spawn the judge subagent (`.subagent` field) with the Actor output + rubric.
75
87
  - Parse the JSON object the judge returns. Augment it with `task_id`, `iteration_id`, `judge_id`, `judge_model_id` from the panel entry, and `judge_type` from the panel entry (canonical, overriding what the agent self-reported).
76
88
  - Emit `tribunal.verdict` with that payload.
77
- - Persist with `tribunal_write_judge_verdict`.
89
+ - **Persist the verdict. This call is required for every judge on every iteration — including retries:**
90
+ ```bash
91
+ tribunal_write_judge_verdict "$project_key" "$task_id" "$iteration_id" "$judge_id" "$verdict_json"
92
+ ```
78
93
 
79
94
  Collect the verdicts into a JSON array `verdicts`.
80
95
 
96
+ **Before moving to step 5, verify all artifacts written so far are on disk:**
97
+ - `iteration-<id>/actor.md` — verbatim actor output (written in step 2)
98
+ - `iteration-<id>/jury.json` — jury panel (written in step 3)
99
+ - `iteration-<id>/verdicts/<judge_id>.json` — one file per judge (written in step 4)
100
+
101
+ (`iteration-<id>/gate.json` is written in step 7 — verify it there.)
102
+
81
103
  5. **Aggregate + dissent.**
82
104
  ```bash
83
105
  method=$(printf '%s' "$rubric" | jq -r '.aggregation_method // "weighted_mean"')