@onlooker-community/ecosystem 0.34.0 → 0.43.0

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 (112) hide show
  1. package/.claude/skills/writing-tests/SKILL.md +27 -0
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.github/workflows/release.yml +14 -14
  4. package/.release-please-manifest.json +7 -7
  5. package/AGENTS.md +116 -0
  6. package/CHANGELOG.md +175 -0
  7. package/CLAUDE.md +5 -0
  8. package/docs/lesson-promotion-pipeline.md +6 -6
  9. package/docs/superpowers/plans/2026-08-10-lesson-confirmation.md +1273 -0
  10. package/docs/superpowers/plans/2026-08-11-lesson-judging.md +1232 -0
  11. package/docs/superpowers/plans/2026-08-11-lesson-unconfirm.md +458 -0
  12. package/docs/superpowers/plans/2026-08-12-author-key.md +567 -0
  13. package/docs/superpowers/plans/2026-08-13-approved-pool.md +747 -0
  14. package/docs/superpowers/plans/2026-08-13-librarian-cluster.md +392 -0
  15. package/docs/superpowers/plans/2026-08-14-criterion-scores-consumers.md +1374 -0
  16. package/docs/superpowers/plans/2026-08-14-criterion-scores-schema.md +277 -0
  17. package/docs/superpowers/plans/2026-08-16-cartographer-undocumented-entity.md +741 -0
  18. package/docs/superpowers/specs/2026-08-10-lesson-confirmation-design.md +213 -0
  19. package/docs/superpowers/specs/2026-08-11-lesson-judging-design.md +267 -0
  20. package/docs/superpowers/specs/2026-08-11-lesson-unconfirm-design.md +152 -0
  21. package/docs/superpowers/specs/2026-08-12-author-key-design.md +317 -0
  22. package/docs/superpowers/specs/2026-08-13-approved-pool-design.md +232 -0
  23. package/docs/superpowers/specs/2026-08-14-criterion-scores-design.md +254 -0
  24. package/docs/superpowers/specs/2026-08-16-cartographer-undocumented-entity-design.md +249 -0
  25. package/package.json +2 -2
  26. package/plugins/assayer/.claude-plugin/plugin.json +1 -1
  27. package/plugins/assayer/CHANGELOG.md +7 -0
  28. package/plugins/assayer/scripts/lib/assayer-config.sh +6 -0
  29. package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
  30. package/plugins/cartographer/CHANGELOG.md +54 -0
  31. package/plugins/cartographer/README.md +56 -1
  32. package/plugins/cartographer/config.json +7 -1
  33. package/plugins/cartographer/scripts/hooks/cartographer-post-write.sh +4 -4
  34. package/plugins/cartographer/scripts/hooks/cartographer-session-start.sh +7 -4
  35. package/plugins/cartographer/scripts/lib/cartographer-collect.sh +8 -1
  36. package/plugins/cartographer/scripts/lib/cartographer-config.sh +26 -0
  37. package/plugins/cartographer/scripts/lib/cartographer-events.sh +90 -0
  38. package/plugins/cartographer/scripts/lib/cartographer-filter.sh +105 -0
  39. package/plugins/cartographer/scripts/lib/cartographer-omission.sh +130 -0
  40. package/plugins/cartographer/scripts/lib/cartographer-resolve.sh +132 -0
  41. package/plugins/cartographer/scripts/run-audit.sh +136 -53
  42. package/plugins/cartographer/skills/cartographer/SKILL.md +33 -9
  43. package/plugins/curator/.claude-plugin/plugin.json +1 -1
  44. package/plugins/curator/CHANGELOG.md +7 -0
  45. package/plugins/curator/scripts/lib/curator-emit.sh +2 -1
  46. package/plugins/historian/.claude-plugin/plugin.json +1 -1
  47. package/plugins/historian/CHANGELOG.md +7 -0
  48. package/plugins/historian/scripts/lib/historian-emit.sh +2 -1
  49. package/plugins/librarian/.claude-plugin/plugin.json +1 -1
  50. package/plugins/librarian/CHANGELOG.md +71 -0
  51. package/plugins/librarian/config.json +30 -1
  52. package/plugins/librarian/docs/adr/002-agent-definitions-are-shared-assets.md +82 -0
  53. package/plugins/librarian/scripts/hooks/librarian-session-end.sh +28 -0
  54. package/plugins/librarian/scripts/hooks/librarian-session-start.sh +42 -12
  55. package/plugins/librarian/scripts/lib/librarian-author-key.sh +279 -0
  56. package/plugins/librarian/scripts/lib/librarian-cli.sh +346 -2
  57. package/plugins/librarian/scripts/lib/librarian-emit.sh +2 -1
  58. package/plugins/librarian/scripts/lib/librarian-lesson-judge.sh +349 -0
  59. package/plugins/librarian/scripts/lib/librarian-lesson-promote.sh +225 -0
  60. package/plugins/librarian/scripts/lib/librarian-lesson-review.sh +312 -0
  61. package/plugins/librarian/scripts/lib/librarian-lesson-rubric.sh +56 -0
  62. package/plugins/librarian/scripts/lib/librarian-lesson-storage.sh +82 -13
  63. package/plugins/librarian/scripts/lib/librarian-lesson-transform.sh +6 -1
  64. package/plugins/librarian/scripts/lib/librarian-lesson-validate.sh +131 -62
  65. package/plugins/librarian/skills/librarian/SKILL.md +98 -1
  66. package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
  67. package/plugins/tribunal/CHANGELOG.md +63 -0
  68. package/plugins/tribunal/agents/tribunal-judge-adversarial.md +34 -0
  69. package/plugins/tribunal/agents/tribunal-judge-security.md +33 -0
  70. package/plugins/tribunal/agents/tribunal-judge-standard.md +12 -0
  71. package/plugins/tribunal/config.json +1 -0
  72. package/plugins/tribunal/scripts/lib/tribunal-aggregate.sh +154 -9
  73. package/plugins/tribunal/scripts/lib/tribunal-gate.sh +195 -16
  74. package/plugins/tribunal/skills/tribunal/SKILL.md +5 -3
  75. package/scripts/lib/prompt-rules.sh +6 -1
  76. package/test/bats/archivist-inject.bats +1 -1
  77. package/test/bats/assayer-extract.bats +2 -2
  78. package/test/bats/bursar-session-start.bats +3 -3
  79. package/test/bats/cartographer-config.bats +43 -0
  80. package/test/bats/cartographer-events.bats +267 -0
  81. package/test/bats/cartographer-filter.bats +169 -0
  82. package/test/bats/cartographer-lock.bats +3 -3
  83. package/test/bats/cartographer-omission.bats +202 -0
  84. package/test/bats/cartographer-resolve.bats +287 -0
  85. package/test/bats/cartographer-run-audit.bats +325 -0
  86. package/test/bats/compass-sanitizer.bats +11 -11
  87. package/test/bats/compass-transcript.bats +2 -2
  88. package/test/bats/config.bats +15 -15
  89. package/test/bats/curator-session-start.bats +10 -3
  90. package/test/bats/emit-payload-default.bats +52 -0
  91. package/test/bats/governor-ledger.bats +1 -1
  92. package/test/bats/historian-prompt-submit.bats +1 -1
  93. package/test/bats/inspector-post-write-hook.bats +4 -4
  94. package/test/bats/librarian-author-key.bats +477 -0
  95. package/test/bats/librarian-cli.bats +16 -16
  96. package/test/bats/librarian-lesson-judge.bats +884 -0
  97. package/test/bats/librarian-lesson-promote.bats +552 -0
  98. package/test/bats/librarian-lesson-review.bats +900 -0
  99. package/test/bats/librarian-lesson-transform.bats +17 -3
  100. package/test/bats/librarian-session-end.bats +161 -0
  101. package/test/bats/librarian-session-start.bats +36 -2
  102. package/test/bats/lineage-config.bats +1 -1
  103. package/test/bats/lineage-redact.bats +5 -5
  104. package/test/bats/session-tracker.bats +4 -4
  105. package/test/bats/tribunal-aggregate.bats +354 -1
  106. package/test/bats/tribunal-gate.bats +631 -0
  107. package/test/bats/tribunal-judge-agents.bats +119 -0
  108. package/test/bats/tribunal-jury.bats +1 -1
  109. package/test/bats/turn-tracker.bats +1 -1
  110. package/test/bats/warden-sanitizer.bats +3 -3
  111. package/test/bats/worktree-tracker.bats +2 -2
  112. package/test/node/lesson-validate-agreement.test.mjs +35 -6
@@ -27,7 +27,7 @@ setup_file() {
27
27
 
28
28
  local hook_cmd
29
29
  hook_cmd=$(jq -r '.hooks.PreToolUse[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
30
- [[ "$hook_cmd" == *tool-sequence-tracker.sh ]]
30
+ [[ "$hook_cmd" == *tool-sequence-tracker.sh ]] || return 1
31
31
 
32
32
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
33
33
  script_path="${script_path//\"/}"
@@ -41,7 +41,7 @@ setup_file() {
41
41
 
42
42
  local hook_cmd
43
43
  hook_cmd=$(jq -r '.hooks.PreToolUse[1].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
44
- [[ "$hook_cmd" == *agent-spawn-tracker.sh ]]
44
+ [[ "$hook_cmd" == *agent-spawn-tracker.sh ]] || return 1
45
45
 
46
46
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
47
47
  script_path="${script_path//\"/}"
@@ -55,7 +55,7 @@ setup_file() {
55
55
 
56
56
  local hook_cmd
57
57
  hook_cmd=$(jq -r '.hooks.PreToolUse[2].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
58
- [[ "$hook_cmd" == *skill-usage-tracker.sh ]]
58
+ [[ "$hook_cmd" == *skill-usage-tracker.sh ]] || return 1
59
59
 
60
60
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
61
61
  script_path="${script_path//\"/}"
@@ -78,7 +78,7 @@ setup_file() {
78
78
 
79
79
  local hook_cmd
80
80
  hook_cmd=$(jq -r '.hooks.PostToolUse[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
81
- [[ "$hook_cmd" == *tool-history-tracker.sh ]]
81
+ [[ "$hook_cmd" == *tool-history-tracker.sh ]] || return 1
82
82
 
83
83
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
84
84
  script_path="${script_path//\"/}"
@@ -103,9 +103,9 @@ setup_file() {
103
103
  turn_cmd=$(jq -r '.hooks.UserPromptSubmit[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
104
104
  duration_cmd=$(jq -r '.hooks.UserPromptSubmit[0].hooks[1].command' "${REPO_ROOT}/hooks/hooks.json")
105
105
  rule_cmd=$(jq -r '.hooks.UserPromptSubmit[0].hooks[2].command' "${REPO_ROOT}/hooks/hooks.json")
106
- [[ "$turn_cmd" == *turn-tracker.sh ]]
107
- [[ "$duration_cmd" == *session-duration-tracker.sh ]]
108
- [[ "$rule_cmd" == *prompt-rule-injector.sh ]]
106
+ [[ "$turn_cmd" == *turn-tracker.sh ]] || return 1
107
+ [[ "$duration_cmd" == *session-duration-tracker.sh ]] || return 1
108
+ [[ "$rule_cmd" == *prompt-rule-injector.sh ]] || return 1
109
109
 
110
110
  for hook_cmd in "$turn_cmd" "$duration_cmd" "$rule_cmd"; do
111
111
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
@@ -121,7 +121,7 @@ setup_file() {
121
121
 
122
122
  local hook_cmd
123
123
  hook_cmd=$(jq -r '.hooks.SessionStart[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
124
- [[ "$hook_cmd" == *session-start-tracker.sh ]]
124
+ [[ "$hook_cmd" == *session-start-tracker.sh ]] || return 1
125
125
 
126
126
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
127
127
  script_path="${script_path//\"/}"
@@ -135,7 +135,7 @@ setup_file() {
135
135
 
136
136
  local hook_cmd
137
137
  hook_cmd=$(jq -r '.hooks.PreCompact[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
138
- [[ "$hook_cmd" == *pre-compact-tracker.sh ]]
138
+ [[ "$hook_cmd" == *pre-compact-tracker.sh ]] || return 1
139
139
 
140
140
  run jq -e '.hooks.PreCompact[0].matcher == "manual" and .hooks.PreCompact[1].matcher == "auto"' \
141
141
  "${REPO_ROOT}/hooks/hooks.json"
@@ -153,7 +153,7 @@ setup_file() {
153
153
 
154
154
  local hook_cmd
155
155
  hook_cmd=$(jq -r '.hooks.PostCompact[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
156
- [[ "$hook_cmd" == *context-compact-tracker.sh ]]
156
+ [[ "$hook_cmd" == *context-compact-tracker.sh ]] || return 1
157
157
 
158
158
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
159
159
  script_path="${script_path//\"/}"
@@ -167,7 +167,7 @@ setup_file() {
167
167
 
168
168
  local hook_cmd
169
169
  hook_cmd=$(jq -r '.hooks.SessionEnd[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
170
- [[ "$hook_cmd" == *session-end-tracker.sh ]]
170
+ [[ "$hook_cmd" == *session-end-tracker.sh ]] || return 1
171
171
 
172
172
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
173
173
  script_path="${script_path//\"/}"
@@ -178,7 +178,7 @@ setup_file() {
178
178
  @test "hooks.json TaskCreated references task-tracker" {
179
179
  local hook_cmd
180
180
  hook_cmd=$(jq -r '.hooks.TaskCreated[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
181
- [[ "$hook_cmd" == *task-tracker.sh ]]
181
+ [[ "$hook_cmd" == *task-tracker.sh ]] || return 1
182
182
 
183
183
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
184
184
  script_path="${script_path//\"/}"
@@ -189,7 +189,7 @@ setup_file() {
189
189
  @test "hooks.json TaskCompleted references task-tracker" {
190
190
  local hook_cmd
191
191
  hook_cmd=$(jq -r '.hooks.TaskCompleted[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
192
- [[ "$hook_cmd" == *task-tracker.sh ]]
192
+ [[ "$hook_cmd" == *task-tracker.sh ]] || return 1
193
193
 
194
194
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
195
195
  script_path="${script_path//\"/}"
@@ -200,7 +200,7 @@ setup_file() {
200
200
  @test "hooks.json WorktreeCreate references worktree-tracker" {
201
201
  local hook_cmd
202
202
  hook_cmd=$(jq -r '.hooks.WorktreeCreate[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
203
- [[ "$hook_cmd" == *worktree-tracker.sh ]]
203
+ [[ "$hook_cmd" == *worktree-tracker.sh ]] || return 1
204
204
 
205
205
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
206
206
  script_path="${script_path//\"/}"
@@ -211,7 +211,7 @@ setup_file() {
211
211
  @test "hooks.json WorktreeRemove references worktree-tracker" {
212
212
  local hook_cmd
213
213
  hook_cmd=$(jq -r '.hooks.WorktreeRemove[0].hooks[0].command' "${REPO_ROOT}/hooks/hooks.json")
214
- [[ "$hook_cmd" == *worktree-tracker.sh ]]
214
+ [[ "$hook_cmd" == *worktree-tracker.sh ]] || return 1
215
215
 
216
216
  local script_path="${hook_cmd//\$CLAUDE_PLUGIN_ROOT/$REPO_ROOT}"
217
217
  script_path="${script_path//\"/}"
@@ -35,10 +35,17 @@ setup() {
35
35
  # project settings file.
36
36
  MEM_DIR="${TEST_HOME}/.claude/projects/test-project/memory"
37
37
  mkdir -p "$MEM_DIR" "${PROJECT_REPO}/.claude"
38
+ # Pin a generous wall-clock budget. The hook checks
39
+ # cheap_checks.wall_clock_budget_ms before EACH phase and skips the rest
40
+ # once it trips, so at the shipped default of 500ms a loaded machine can
41
+ # blow the budget before the later phases run — the orphan check among
42
+ # them — and those tests fail intermittently while passing in isolation.
43
+ # These tests assert what the checks detect, not how fast the host is.
38
44
  jq -n --arg path "$MEM_DIR" \
39
45
  '{
40
46
  curator: {
41
47
  memory_store_path: $path,
48
+ cheap_checks: { wall_clock_budget_ms: 600000 },
42
49
  date_check: { date_grace_period_days: 7 }
43
50
  }
44
51
  }' > "${PROJECT_REPO}/.claude/settings.json"
@@ -93,8 +100,8 @@ _write_index() {
93
100
  # Surfacer rendered the pointer.
94
101
  local ctx
95
102
  ctx=$(echo "$output" | jq -r '.hookSpecificOutput.additionalContext')
96
- [[ "$ctx" == *"Curator: 1 open finding"* ]]
97
- [[ "$ctx" == *"date-decayed"* ]]
103
+ [[ "$ctx" == *"Curator: 1 open finding"* ]] || return 1
104
+ [[ "$ctx" == *"date-decayed"* ]] || return 1
98
105
  [[ "$ctx" == *"/curator review"* ]]
99
106
  }
100
107
 
@@ -256,7 +263,7 @@ BODY
256
263
  [ "$status" -eq 0 ]
257
264
  local ctx
258
265
  ctx=$(echo "$output" | jq -r '.hookSpecificOutput.additionalContext')
259
- [[ "$ctx" == *"2 date-decayed"* ]]
266
+ [[ "$ctx" == *"2 date-decayed"* ]] || return 1
260
267
  # The buggy output would have looked like "1 date-decayed, 1 date-decayed".
261
268
  [[ "$ctx" != *"1 date-decayed, 1 date-decayed"* ]]
262
269
  }
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env bats
2
+ #
3
+ # Guards the payload-default expansion in every emit helper.
4
+ #
5
+ # Two tempting forms are both wrong, and each fails in a way the other does not:
6
+ #
7
+ # "${3:-{\}}" keeps the backslash on bash 3.2 (the bash macOS ships, and the
8
+ # one `#!/usr/bin/env bash` resolves to there), yielding {\} —
9
+ # invalid JSON, so the emit silently drops the event. Works on
10
+ # bash 5.x, which is why CI never caught it.
11
+ # "${3:-{}}" appends a stray `}` to any payload that IS supplied, on EVERY
12
+ # bash version, corrupting the far more common path.
13
+ #
14
+ # The brace-free form below is correct on both. This test runs the real
15
+ # expansion under the real interpreter rather than asserting on source text.
16
+
17
+ setup() {
18
+ source "${BATS_TEST_DIRNAME}/../helpers/setup.bash"
19
+ setup_test_env
20
+ }
21
+
22
+ _emit_libs() {
23
+ printf '%s\n' \
24
+ "scripts/lib/prompt-rules.sh" \
25
+ "plugins/curator/scripts/lib/curator-emit.sh" \
26
+ "plugins/historian/scripts/lib/historian-emit.sh" \
27
+ "plugins/librarian/scripts/lib/librarian-emit.sh" \
28
+ "plugins/librarian/scripts/lib/librarian-cli.sh" \
29
+ "plugins/tribunal/scripts/lib/tribunal-gate.sh"
30
+ }
31
+
32
+ @test "no emit helper inlines braces in a parameter-expansion default" {
33
+ # Code only — a comment explaining the hazard must not trip its own guard.
34
+ local hits
35
+ hits=$(cd "$REPO_ROOT" && grep -rn ':-{' --include="*.sh" scripts/ plugins/ \
36
+ | grep -vE '^[^:]+:[0-9]+:[[:space:]]*#' || true)
37
+ [ -z "$hits" ]
38
+ }
39
+
40
+ @test "the brace-free default yields {} when no payload is passed" {
41
+ local probe="${BATS_TEST_TMPDIR}/probe.sh"
42
+ printf '%s\n' 'f() { local p="${3:-}"; [ -z "$p" ] && p='"'"'{}'"'"'; printf "%s" "$p"; }' 'f a b' >"$probe"
43
+ run bash "$probe"
44
+ [ "$status" -eq 0 ] && [ "$output" = '{}' ]
45
+ }
46
+
47
+ @test "the brace-free default passes a supplied payload through unchanged" {
48
+ local probe="${BATS_TEST_TMPDIR}/probe.sh"
49
+ printf '%s\n' 'f() { local p="${3:-}"; [ -z "$p" ] && p='"'"'{}'"'"'; printf "%s" "$p"; }' 'f a b '"'"'{"a":{"b":1}}'"'"'' >"$probe"
50
+ run bash "$probe"
51
+ [ "$status" -eq 0 ] && [ "$output" = '{"a":{"b":1}}' ]
52
+ }
@@ -91,7 +91,7 @@ _make_completion() {
91
91
  @test "governor_ledger_path returns a .jsonl path under ONLOOKER_DIR" {
92
92
  local p
93
93
  p=$(governor_ledger_path "test-session")
94
- [[ "$p" == *".jsonl" ]]
94
+ [[ "$p" == *".jsonl" ]] || return 1
95
95
  [[ "$p" == *"test-session"* ]]
96
96
  }
97
97
 
@@ -157,7 +157,7 @@ _index_session() {
157
157
 
158
158
  local ctx
159
159
  ctx=$(echo "$output" | jq -r '.hookSpecificOutput.additionalContext')
160
- [[ "$ctx" == *"Historian: a past chunk looks similar"* ]]
160
+ [[ "$ctx" == *"Historian: a past chunk looks similar"* ]] || return 1
161
161
  [[ "$ctx" == *"redash"* ]]
162
162
 
163
163
  grep '"event_type":"historian.retrieval.surfaced"' "$ONLOOKER_EVENTS_LOG" \
@@ -100,7 +100,7 @@ _run_hook() {
100
100
  echo '{"inspector":{"show_clean_runs":true,"checks":{".ts":[{"name":"clean","kind":"lint","argv":["true"]}]}}}' | _settings
101
101
  run _run_hook "$(_input)"
102
102
  [ "$status" -eq 0 ]
103
- [[ "$output" == *"inspector: src/sample.ts"* ]]
103
+ [[ "$output" == *"inspector: src/sample.ts"* ]] || return 1
104
104
  [[ "$output" == *"✓ clean"* ]]
105
105
  }
106
106
 
@@ -112,9 +112,9 @@ _run_hook() {
112
112
  EOF
113
113
  run _run_hook "$(_input)"
114
114
  [ "$status" -eq 0 ]
115
- [[ "$output" == *"inspector: src/sample.ts"* ]]
116
- [[ "$output" == *"✗ broken"* ]]
117
- [[ "$output" == *"src/sample.ts:1:1 - Bad"* ]]
115
+ [[ "$output" == *"inspector: src/sample.ts"* ]] || return 1
116
+ [[ "$output" == *"✗ broken"* ]] || return 1
117
+ [[ "$output" == *"src/sample.ts:1:1 - Bad"* ]] || return 1
118
118
  [ "$(_event_count inspector.check.failed)" = "1" ]
119
119
  [ "$(jq -r 'select(.event_type=="inspector.check.failed").payload.exit_code' "$ONLOOKER_EVENTS_LOG")" = "2" ]
120
120
  }