@soleur/opencode 3.354.8 → 3.354.10
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/package.json
CHANGED
package/skills/review/SKILL.md
CHANGED
|
@@ -1403,6 +1403,7 @@ See `knowledge-base/project/learnings/2026-04-15-multi-agent-review-catches-bugs
|
|
|
1403
1403
|
- **"Report-only" does not stop a seat from running a git write on the shared worktree — check `git branch --show-current` after the panel returns.** On #9449 the pattern seat ran `git checkout --detach` to read a pinned SHA and left the worktree on a detached HEAD; the tell was an empty `git branch --show-current` while `git status` stayed clean. Brief seats to use `git show <sha>:<path>` or their own detached worktree, and re-attach (`git switch <branch>`) before applying fixes.
|
|
1404
1404
|
|
|
1405
1405
|
- **A long-running seat can return an EMPTY final result, and resuming it does not recover the text — mandate file delivery in the SPAWN prompt.** Have it write its report incrementally to a scratchpad file and end with `WROTE <path>`. **Why:** PR #8755 — two seats returned nothing across five resumes; only a respawn with that mandate delivered.
|
|
1406
|
+
- **Seats cannot write under `.git/worktrees/<name>/` (hook-denied): make the final message the deliverable.** **Why:** #10891.
|
|
1406
1407
|
- **A fix agent that dies mid-run (rate limit, timeout) is a PARTIAL writer — reconcile git before re-dispatching, and keep a multi-session brief out of the scratchpad.** Run `git log origin/<branch>..HEAD`, `git status --short`, and compare `gh pr view --json headRefOid`; map commit bodies to brief items and re-dispatch only the remainder. Persist the fix brief under `$(git rev-parse --git-dir)` (the scratchpad is wiped between sessions). **Why:** PR #9163 — a 429'd agent had committed 3 of 4 rounds unpushed while the handoff said "no edits"; the brief and seat reports were lost with the scratchpad.
|
|
1407
1408
|
- **The session scratchpad is shared with every seat — give the lead's harness files a lead-unique name.** A test-design seat wrote its own `mut.py` into the same scratchpad and overwrote the lead's helper, so the lead's next battery printed NOT-LANDED on every row and mutated nothing (#8719/PR #8794). Brief seats to use seat-unique names too.
|
|
1408
1409
|
- **Verify a runbook by RUNNING its fences against stubs (stub `gh`/`doppler`/`git`/`terraform` on PATH), and name the one section a seat may run.** On #9453 a seat ran an unrelated `terraform init` fence and another detached HEAD; running found lost shell state, a wrong PR from a loose search, and a failed listing read as empty.
|
|
@@ -5,7 +5,7 @@ which re-derives this set from `git ls-files` — a new member with no row here
|
|
|
5
5
|
CI failure):
|
|
6
6
|
|
|
7
7
|
- `.claude/hooks/**/*.sh`, excluding `*.test.sh` and files under `/test/` — **56 files**.
|
|
8
|
-
- `scripts/lint-*`, excluding `*.test.sh`, `*.baseline.txt`, `*.highwater*` — **
|
|
8
|
+
- `scripts/lint-*`, excluding `*.test.sh`, `*.baseline.txt`, `*.highwater*` — **47 files**.
|
|
9
9
|
|
|
10
10
|
## Verdicts
|
|
11
11
|
|
|
@@ -16,7 +16,7 @@ CI failure):
|
|
|
16
16
|
| `soleur-coupled` | The guard's *purpose* is Soleur's: it enforces a Soleur rule id, a Soleur corpus path, a vendor in Soleur's stack, or Soleur telemetry/workflow machinery. Not shipped. |
|
|
17
17
|
|
|
18
18
|
**Counts:** hooks — 0 generic / 10 generic-after-extraction / 47 soleur-coupled.
|
|
19
|
-
lints — 9 generic / 8 generic-after-extraction /
|
|
19
|
+
lints — 9 generic / 8 generic-after-extraction / 30 soleur-coupled.
|
|
20
20
|
|
|
21
21
|
The canonical emit pair `plugins/soleur/scripts/precommit-guard.sh` +
|
|
22
22
|
`plugins/soleur/scripts/lib/wrapper-boundary.sh` is NOT in the census set (it
|
|
@@ -88,7 +88,7 @@ template rather than shipping the monolith.
|
|
|
88
88
|
| `supabase-loopback-warn.sh` | soleur-coupled | Supabase vendor stack check (ADR-153). |
|
|
89
89
|
| `worktree-write-guard.sh` | generic-after-extraction | Blocks writes to the main checkout while worktrees exist — repo-generic idea (v2); couplings = `incidents.sh`/`hook-input.sh` sourcing. |
|
|
90
90
|
|
|
91
|
-
## Census — `scripts/lint-*` (
|
|
91
|
+
## Census — `scripts/lint-*` (47)
|
|
92
92
|
|
|
93
93
|
| File | Verdict | Rationale |
|
|
94
94
|
|---|---|---|
|
|
@@ -111,6 +111,7 @@ template rather than shipping the monolith.
|
|
|
111
111
|
| `lint-followthrough-varq-ban.sh` | soleur-coupled | Soleur probe-set/varq conventions. |
|
|
112
112
|
| `lint-gh-argv-arg.py` | generic | Repo-wide `gh` argv vs jq-flag-token lint over workflows + `*.sh`; no Soleur coupling. |
|
|
113
113
|
| `lint-guard-contract.py` | soleur-coupled | Soleur plan/SKILL.md guard-contract shape (deepen-plan §4.11). |
|
|
114
|
+
| `lint-hcloud-token-readonly-no-fallback.sh` | soleur-coupled | Tree scan for the read/write Hetzner token read (ADR-241 D4); the Soleur secret store and its one allowlisted `op=backup` read. |
|
|
114
115
|
| `lint-infra-no-human-steps.py` | soleur-coupled | `hr-no-ssh-fallback-in-runbooks` on `knowledge-base` docs. |
|
|
115
116
|
| `lint-integration-env-gates.sh` | soleur-coupled | `apps/web-platform/{test,lib}` env-gate wiring + `scheduled-integration-suites.yml`. |
|
|
116
117
|
| `lint-legal-mirror-drift-baseline.sh` | soleur-coupled | Legal mirror corpus (`plugins/soleur/docs/pages/legal`). |
|