fix(listen): restrict feature prompt to bare-invocation guided flow#68
Merged
lukeocodes merged 1 commit intomainfrom May 8, 2026
Merged
fix(listen): restrict feature prompt to bare-invocation guided flow#68lukeocodes merged 1 commit intomainfrom
lukeocodes merged 1 commit intomainfrom
Conversation
The optional-features prompt (Speaker diarization / Generate summary /
Detect topics / Sentiment analysis) was firing whenever the user passed
a source as a positional arg without also passing a feature flag. So:
dg listen URL # prompted
dg listen URL | cat # also prompted (only +1 of 3
# soft signals — score below
# threshold so _agentic stayed
# False)
dg listen URL --diarize # finally skipped
Per the new mental model: the moment the user provides any arg, value,
or flag, they have signalled scripting intent. The interactive flow
exists only for bare 'dg listen' invocations.
This commit lifts the _interactive_features() call into the bare-
invocation branch where _interactive_select_source() lives, and removes
the standalone gate that was triggering on its own. A new local
guided_flow boolean (initialised False, flipped True only in the bare-
invocation else-branch) anchors the check at the call site.
After this:
dg listen URL # no prompts
dg listen URL --diarize # no prompts (already worked)
dg listen URL | cat # no prompts
dg listen --mic # no prompts
dg listen # full guided flow (source +
# features, as before)
Five new pytest cases in TestGuidedFlow lock the invariants: URL arg
skips both prompts, file arg skips both, URL+--diarize skips both,
bare invocation runs both, and cancelled source-select returns the
cancelled BaseResult without ever asking about features.
Merged
lukeocodes
added a commit
that referenced
this pull request
May 8, 2026
🤖 I have created a release *beep* *boop* --- <details><summary>0.2.22</summary> ## [0.2.22](v0.2.21...v0.2.22) (2026-05-08) ### Bug Fixes * **listen:** restrict feature prompt to bare-invocation guided flow ([6ea275b](6ea275b)) * **listen:** restrict feature prompt to bare-invocation guided flow ([#68](#68)) ([ee92d1f](ee92d1f)) * **non-interactive:** promote CI to hard signal, add --non-interactive flag ([8da4e21](8da4e21)) * **non-interactive:** promote CI=1 to hard signal, add --non-interactive flag ([#67](#67)) ([a25099d](a25099d)) </details> <details><summary>deepctl-core: 0.2.11</summary> ## [0.2.11](deepctl-core-v0.2.10...deepctl-core-v0.2.11) (2026-05-08) ### Bug Fixes * **non-interactive:** promote CI to hard signal, add --non-interactive flag ([8da4e21](8da4e21)) * **non-interactive:** promote CI=1 to hard signal, add --non-interactive flag ([#67](#67)) ([a25099d](a25099d)) </details> <details><summary>deepctl-cmd-listen: 0.0.12</summary> ## [0.0.12](deepctl-cmd-listen-v0.0.11...deepctl-cmd-listen-v0.0.12) (2026-05-08) ### Bug Fixes * **listen:** restrict feature prompt to bare-invocation guided flow ([6ea275b](6ea275b)) * **listen:** restrict feature prompt to bare-invocation guided flow ([#68](#68)) ([ee92d1f](ee92d1f)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
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.
The bug
```
$ dg listen https://dpgr.am/spacewalk.wav | cat
Optional features (press Enter to skip all):
Speaker diarization [Speaker 0] / [Speaker 1] … [y/n] (n):
```
The moment the user provides any source/flag/value, they're scripting — they should never see the optional-features prompt. Today it fires whenever they didn't also pass one of `--diarize`/`--summarize`/`--topics`/`--sentiment`.
The fix
The interactive feature prompt belongs to the bare-`dg listen` guided flow only. Lift the `_interactive_features()` call into the same branch as `_interactive_select_source()`, kill the standalone gate, and anchor the check on a local `guided_flow` boolean that flips `True` only when the user invokes `dg listen` with nothing.
Behaviour matrix
Tests
5 new cases in `TestGuidedFlow`:
All 16 listen tests pass: `uv run pytest packages/deepctl-cmd-listen/tests/unit/test_listen_command.py` → 16 passed in 0.79s.
Stack
This is PR-C of a three-PR sequence agreed in the analyse-mode review: