@bookedsolid/rea 0.26.1 → 0.28.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.
- package/README.md +16 -3
- package/agents/adversarial-test-specialist.md +113 -0
- package/agents/ast-parser-specialist.md +92 -0
- package/agents/codex-adversarial.md +50 -97
- package/agents/figma-dx-specialist.md +112 -0
- package/agents/mcp-protocol-specialist.md +94 -0
- package/agents/observability-specialist.md +103 -0
- package/agents/rea-orchestrator.md +25 -5
- package/agents/shell-scripting-specialist.md +101 -0
- package/commands/codex-review.md +62 -59
- package/data/claims/helix-022.json +51 -0
- package/data/claims/helix-023.json +44 -0
- package/data/claims/helix-024.json +72 -0
- package/data/claims/helix-028.json +23 -0
- package/data/claims/helix-031.json +27 -0
- package/dist/cli/hook.d.ts +78 -4
- package/dist/cli/hook.js +291 -4
- package/dist/cli/index.js +6 -0
- package/dist/cli/preflight.d.ts +12 -0
- package/dist/cli/preflight.js +65 -4
- package/dist/cli/status.d.ts +6 -0
- package/dist/cli/status.js +7 -0
- package/dist/cli/verify-claim.d.ts +149 -0
- package/dist/cli/verify-claim.js +386 -0
- package/dist/gateway/downstream-pool.d.ts +17 -0
- package/dist/gateway/downstream-pool.js +1 -0
- package/dist/gateway/downstream.d.ts +25 -0
- package/dist/gateway/downstream.js +40 -0
- package/dist/gateway/live-state.d.ts +12 -0
- package/dist/gateway/live-state.js +1 -0
- package/dist/hooks/bash-scanner/walker.js +196 -0
- package/dist/hooks/push-gate/codex-runner.d.ts +9 -0
- package/dist/hooks/push-gate/codex-runner.js +14 -1
- package/dist/hooks/push-gate/findings.d.ts +27 -0
- package/dist/hooks/push-gate/findings.js +87 -0
- package/dist/hooks/push-gate/index.js +58 -4
- package/dist/hooks/push-gate/policy.d.ts +15 -0
- package/dist/hooks/push-gate/policy.js +82 -0
- package/dist/policy/loader.d.ts +20 -0
- package/dist/policy/loader.js +12 -0
- package/dist/policy/types.d.ts +31 -0
- package/hooks/_lib/cmd-segments.sh +10 -0
- package/hooks/blocked-paths-bash-gate.sh +12 -0
- package/hooks/protected-paths-bash-gate.sh +21 -0
- package/package.json +2 -1
package/dist/policy/types.d.ts
CHANGED
|
@@ -169,6 +169,37 @@ export interface ReviewPolicy {
|
|
|
169
169
|
* a `rea.push_gate.verdict_flip` audit event and overwrite the cache.
|
|
170
170
|
*/
|
|
171
171
|
cache_ttl_ms?: number;
|
|
172
|
+
/**
|
|
173
|
+
* 0.28.0 helix-029 — path-scoped finding filter. Gitignore-style
|
|
174
|
+
* globs against repo-relative paths. Findings whose `file` matches
|
|
175
|
+
* any glob in this list are filtered OUT before the verdict is
|
|
176
|
+
* computed, but are still emitted on stderr (so the operator can
|
|
177
|
+
* file them upstream). Useful for downstream consumers of rea who
|
|
178
|
+
* cannot patch rea-managed paths but should not be blocked from
|
|
179
|
+
* pushing while waiting on an upstream fix.
|
|
180
|
+
*
|
|
181
|
+
* Setting this list also enables `auto_exclude_managed` by default —
|
|
182
|
+
* paths from `.rea/install-manifest.json` are excluded in addition
|
|
183
|
+
* to whatever globs are listed here. Pass `auto_exclude_managed:
|
|
184
|
+
* false` to opt out and rely on `exclude_paths` alone.
|
|
185
|
+
*
|
|
186
|
+
* Empty (or unset) → no filtering, pre-0.28.0 behavior.
|
|
187
|
+
*
|
|
188
|
+
* The audit shape is unchanged; the gate emits a
|
|
189
|
+
* `filtered_findings_count` counter into the audit metadata so
|
|
190
|
+
* operators can grep `rea.push_gate.reviewed` to see how many
|
|
191
|
+
* findings were suppressed without re-parsing prose.
|
|
192
|
+
*/
|
|
193
|
+
exclude_paths?: string[];
|
|
194
|
+
/**
|
|
195
|
+
* 0.28.0 helix-029 — derived default. When `exclude_paths` is set,
|
|
196
|
+
* defaults to `true` — paths from `.rea/install-manifest.json` are
|
|
197
|
+
* excluded in addition to the explicit globs. Set explicitly to
|
|
198
|
+
* `false` to rely only on `exclude_paths`. When `exclude_paths` is
|
|
199
|
+
* unset, this field is a no-op (no filter is active in the first
|
|
200
|
+
* place).
|
|
201
|
+
*/
|
|
202
|
+
auto_exclude_managed?: boolean;
|
|
172
203
|
/**
|
|
173
204
|
* Local-first review enforcement (0.26.0+ — CTO directive 2026-05-05).
|
|
174
205
|
*
|
|
@@ -162,6 +162,11 @@ _rea_unwrap_at_depth() {
|
|
|
162
162
|
local _unwrap_sep
|
|
163
163
|
_unwrap_sep=$'\x1c\x1d'
|
|
164
164
|
local masked
|
|
165
|
+
# shellcheck disable=SC1078
|
|
166
|
+
# SC1078 fires inside the awk program because shellcheck's bash parser
|
|
167
|
+
# cannot model awk's nested-quote semantics (`'\''` here is the
|
|
168
|
+
# bash-to-awk single-apostrophe escape pattern, not an unclosed shell
|
|
169
|
+
# string). Verified false-positive — the awk program parses cleanly.
|
|
165
170
|
masked=$(printf '%s%s' "$cmd" "$_unwrap_sep" | awk '
|
|
166
171
|
BEGIN { RS = "\034\035" }
|
|
167
172
|
{
|
|
@@ -527,6 +532,11 @@ _rea_split_segments() {
|
|
|
527
532
|
# records; the existing pipeline then quote-masks and splits each
|
|
528
533
|
# record independently. Inner payload anchors trigger words for the
|
|
529
534
|
# `any_segment_*` checks downstream.
|
|
535
|
+
# shellcheck disable=SC1078
|
|
536
|
+
# SC1078 fires inside the awk program because shellcheck's bash parser
|
|
537
|
+
# cannot model awk's nested-quote semantics (`'\''` here is the
|
|
538
|
+
# bash-to-awk single-apostrophe escape pattern, not an unclosed shell
|
|
539
|
+
# string). Verified false-positive — the awk program parses cleanly.
|
|
530
540
|
_rea_unwrap_nested_shells "$cmd" \
|
|
531
541
|
| awk '
|
|
532
542
|
BEGIN {
|
|
@@ -105,6 +105,18 @@ if [ "$sandbox_status" -ne 0 ] || [ "$sandbox_check" != "ok" ]; then
|
|
|
105
105
|
exit 2
|
|
106
106
|
fi
|
|
107
107
|
|
|
108
|
+
# 0.28.0 helix-027 (bash total-lockout postmortem) — version-probe per
|
|
109
|
+
# shim. See protected-paths-bash-gate.sh for the full rationale; this
|
|
110
|
+
# shim mirrors the behavior to detect a stale CLI before payload reach.
|
|
111
|
+
probe_out=$("${REA_ARGV[@]}" hook scan-bash --help 2>&1)
|
|
112
|
+
probe_status=$?
|
|
113
|
+
if [ "$probe_status" -ne 0 ] || ! printf '%s' "$probe_out" | grep -q -e 'scan-bash' -e '--mode'; then
|
|
114
|
+
printf 'rea: this shim requires the `rea hook scan-bash` subcommand (introduced in 0.23.0).\n' >&2
|
|
115
|
+
printf 'The resolved CLI at %s does not implement it.\n' "$RESOLVED_CLI_PATH" >&2
|
|
116
|
+
printf 'Run `pnpm install` (or `npm install`) to sync the CLI to the version this shim expects.\n' >&2
|
|
117
|
+
exit 2
|
|
118
|
+
fi
|
|
119
|
+
|
|
108
120
|
payload=$(cat)
|
|
109
121
|
if [ -z "$payload" ]; then
|
|
110
122
|
exit 0
|
|
@@ -183,6 +183,27 @@ if [ "$sandbox_status" -ne 0 ] || [ "$sandbox_check" != "ok" ]; then
|
|
|
183
183
|
exit 2
|
|
184
184
|
fi
|
|
185
185
|
|
|
186
|
+
# 0.28.0 helix-027 (bash total-lockout postmortem) — version-probe per
|
|
187
|
+
# shim. The 0.23.0+ scan-bash subcommand is required; if the resolved
|
|
188
|
+
# CLI is older than 0.23.0 it will refuse with "unknown command" and the
|
|
189
|
+
# shim's exit-code dispatch lands on the catch-all "exit 2" branch
|
|
190
|
+
# WITHOUT explaining why. That was the symptom that locked Jake's
|
|
191
|
+
# helix workspace out of every Bash tool until he ran `pnpm install`.
|
|
192
|
+
#
|
|
193
|
+
# The probe runs `rea hook scan-bash --help` once per shim invocation
|
|
194
|
+
# (~30 LOC) and refuses with an actionable message if the subcommand
|
|
195
|
+
# does not exist. Probe failure is fail-closed (exit 2) — same posture
|
|
196
|
+
# the rest of the shim takes — but the message tells the operator
|
|
197
|
+
# exactly what to do (`pnpm install`).
|
|
198
|
+
probe_out=$("${REA_ARGV[@]}" hook scan-bash --help 2>&1)
|
|
199
|
+
probe_status=$?
|
|
200
|
+
if [ "$probe_status" -ne 0 ] || ! printf '%s' "$probe_out" | grep -q -e 'scan-bash' -e '--mode'; then
|
|
201
|
+
printf 'rea: this shim requires the `rea hook scan-bash` subcommand (introduced in 0.23.0).\n' >&2
|
|
202
|
+
printf 'The resolved CLI at %s does not implement it.\n' "$RESOLVED_CLI_PATH" >&2
|
|
203
|
+
printf 'Run `pnpm install` (or `npm install`) to sync the CLI to the version this shim expects.\n' >&2
|
|
204
|
+
exit 2
|
|
205
|
+
fi
|
|
206
|
+
|
|
186
207
|
# Capture stdin once and forward it to the CLI.
|
|
187
208
|
payload=$(cat)
|
|
188
209
|
if [ -z "$payload" ]; then
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bookedsolid/rea",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "Agentic governance layer for Claude Code — policy enforcement, hook-based safety gates, audit logging, and Codex-integrated adversarial review for AI-assisted projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Booked Solid Technology <oss@bookedsolid.tech> (https://bookedsolid.tech)",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"profiles/",
|
|
47
47
|
"templates/",
|
|
48
48
|
"scripts/",
|
|
49
|
+
"data/",
|
|
49
50
|
".husky/",
|
|
50
51
|
"LICENSE",
|
|
51
52
|
"README.md",
|