feat: add verified Devin scout adapter - #123
Merged
Merged
Conversation
…rification coverage
…istic adapter evidence
…ocused regression passes
…cle metadata references
Install the guarded Stop hook through Devin's project-local config and resolve its worktree from DEVIN_PROJECT_DIR. Trust Herdr's verified Devin lifecycle state in both directions and keep teardown ownership-safe.
…entity validation
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.
Intent
probe only
What Changed
Risk Assessment
Testing
Validated generation-bound Stop-hook publication, working/done crew-state reporting, permanent Devin primary/secondmate refusal with supported scout model-effort composition, exact Herdr Devin identity gating, and native busy/idle classification. The initial harness probe encountered an existing user-level Devin hook, so it was rerun with an isolated HOME and passed; no source changes were needed.
Evidence: Devin targeted behavioral evidence
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
bin/fm-devin-turnend-hook.sh:153- The generated Stop hook recomputes the registry root from the hook process'sXDG_CONFIG_HOME(bin/fm-devin-turnend-hook.sh:151-153), while spawn creates the task registry using Firstmate's currentXDG_CONFIG_HOME(bin/fm-spawn.sh:3908). Herdr panes are launched by a long-lived daemon that does not inherit Firstmate's current environment, so with a customXDG_CONFIG_HOMEthe hook falls back to$HOME/.config, cannot find the token, and silently drops every Devin turn-end marker. Embed the resolved registry directory in the generated hook (or otherwise pass it through the project-local registration) so runtime lookup uses the same path as installation.bin/fm-busy-lib.sh:358- The new Devin idle path trusts onlyfm_backend_busy_state's status and never verifies the Herdr-reported agent identity (bin/backends/herdr.sh:3366-3369only returnsagent_status). If a task's recorded Devin pane is stale or reused by another agent that reportsidle/done,fm_busy_classifyacceptsidle herdr-nativeatbin/fm-busy-lib.sh:358-364, allowing supervision to treat the wrong pane as a completed Devin task without an error. Require the Herdr identity to bedevinbefore accepting either native idle or busy for this harness, at the shared backend boundary.🔧 Fix: Fixed Devin hook registry embedding and Herdr identity validation
1 warning still open:
bin/fm-spawn.sh:1683- Devin is advertised and accepted as a verified crew profile in the changed spawn/configuration paths, butbin/fm-bootstrap.sh:1114still defines the verified-harness allowlist withoutdevin. Aconfig/crew-dispatch.jsonselecting Devin is therefore reported asunverified harness: devinduring bootstrap, so the newly supported dispatch route is rejected. Add Devin to that shared validator (and its effort validation as appropriate).✅ **Test** - passed
✅ No issues found.
bash tests/fm-devin-adapter.test.shHOME=$(mktemp -d) XDG_CONFIG_HOME=$HOME/.config bash evidence/devin-target.test.shTargetedtest_devin_composer_requires_native_identityfromtests/fm-backend-herdr.test.shbash tests/fm-busy-state.test.sh✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.