feat(opencode): add warn-only shell silence guard - #491
Merged
Conversation
Re-run specgit init --force with the installed 1.10.1 CLI so fresh feature worktrees stop conflicting with the checked-in harness. - policy.yaml, AGENTS.md/CLAUDE.md managed blocks, hooks.json: 1.10.1 output is byte-identical; the curated required_checks (Typecheck, Unit Tests (linux)) are preserved by design (#310) — the canonical ids are not observable check-run names on the main-line matrix (b6473cc) and stay out of the policy. - specgit-accept.yml: keep the repository-specialized workflow (main- only trigger, no workflow_dispatch, head-ref checkout with persist-credentials: false, global npm install -g specgit@^0.5.0, yaml-free wait step with the proven 40min deadline). The 1.10.1 template variant imports 'yaml' with no dependency installed and waits only 13min — shorter than the ~28min Unit Tests sibling. - specgit-merge-guard.sh: take the 1.10.1 improvement — the guard now also blocks glab mr merge, not only gh pr merge. - .husky/_/pre-push: untracked local pre-push guard (untracked model). Closes #488
chore(specgit): refresh delivery harness
The inspector's workflow list depended entirely on the route's sessionID chain — any missing link produced a zero-request silent empty state. On mount the inspector now discovers via the project-level GET /dag: rows group by owning session for the session-scoped summary endpoint, and the routed sessionID demotes to a live-data preference instead of a hard gate, so running workflows stay listed without session context.
feat(tui): project-level discovery fallback for /dag inspector
- New OPENCODE_EXPERIMENTAL_BASH_SILENCE_WARN_MS runtime flag (default 5 min) - Shell tool emits one inactivity warning per silent stretch via a scoped watcher fiber; output resets the silence window; the note is appended to the part preview and the final <shell_metadata> block without touching the race/kill path, so abort and timeout semantics are unchanged - New expectedSilent shell parameter opts out per invocation - Behavior tests: warning, exemption, output reset, abort/timeout non-regression; runtime-flags parse table
LeXwDeX
marked this pull request as ready for review
September 1, 2026 20:12
This was referenced Sep 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #433
Why
Long-running shell commands can remain silent without an observable warning.
What changed
expectedSilentexemption, one warning per silence segment, and output-driven rearming.packages/core/src/tool/bash.tsis untouched.devbase. Those changes are not new feat: engine-level guardrail for silent long-running shell commands #433 scope.Evidence
bun test test/tool/shell.test.ts test/effect/runtime-flags.test.ts: 70 passing.bun typecheckinpackages/opencode: passing.Checklist
specgit finishexits 0.