Talk to one agent. Ship with a crew.
This report summarizes scanner evidence for kunchenguid/firstmate, a Shell project with 7,811 GitHub stars. SynthScan examined 385,532 lines of code across 647 source files, recording 2754 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 13.4 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 2663 finding(s).
Are imports declared and package/API names verified? 1 finding(s).
Are wrappers, guards, and repeated structures necessary? 173 finding(s).
Which changes need focused human review? 2754 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2754 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/fm-gate-refuse-lib.sh | 144 | # session, a permitted lab home, or when firstmate's own test harness sets | COMMENT |
| MEDIUM | bin/fm-worker-account-lib.sh | 67 | # fm_worker_account_file <harness> | COMMENT |
| MEDIUM | bin/fm-worker-account-lib.sh | 77 | # fm_worker_account_read <harness> <file> | COMMENT |
| MEDIUM | bin/fm-worker-account-lib.sh | 106 | # fm_worker_account_resolve <harness> <config-dir> | COMMENT |
| MEDIUM | bin/fm-worker-account-lib.sh | 169 | # fm_worker_account_check <harness> <declared> <root> <executable> [<provider>] | COMMENT |
| MEDIUM | bin/fm-worker-account-lib.sh | 220 | # fm_worker_account_select <harness> <config-dir> <model> <executable> [<raw-command>] | COMMENT |
| MEDIUM | bin/fm-afk-start.sh | 2 | # Enter away mode and run the sub-supervisor daemon in a harness-tracked | COMMENT |
| MEDIUM | bin/fm-afk-start.sh | 21 | # background process differs by harness/backend and is owned elsewhere: | COMMENT |
| MEDIUM | bin/fm-supervision-engine-lib.sh | 20 | # bash fm-supervision-engine-lib.sh enabled <config-dir> <primary-harness> | COMMENT |
| MEDIUM | bin/fm-supervision-engine-lib.sh | 27 | # the primary-harness pin, and the report-turn id). The runner returns the | COMMENT |
| MEDIUM⚡ | bin/fm-supervision-engine-lib.sh | 45 | # the real argument construction. FM_TEST_HARNESS pins the primary harness | COMMENT |
| MEDIUM⚡ | bin/fm-supervision-engine-lib.sh | 47 | # known harness token; otherwise detection remains real (tests/lib.sh arms | COMMENT |
| MEDIUM⚡ | bin/fm-supervision-engine-lib.sh | 52 | # fm_supervision_host_primary: print the primary harness the home gate judges | COMMENT |
| MEDIUM⚡ | bin/fm-supervision-engine-lib.sh | 53 | # (bin/fm-harness.sh, whose supervision-branch pin names the primary inside an | COMMENT |
| MEDIUM | bin/fm-supervision-engine-lib.sh | 67 | # fm_supervision_host_enabled <config-dir> [<primary-harness>]: 0 iff this home | COMMENT |
| MEDIUM | bin/fm-supervision-engine-lib.sh | 93 | # fm_supervision_host_config <config-dir> <primary-harness> | COMMENT |
| MEDIUM | bin/fm-supervision-engine-lib.sh | 144 | # fm_supervision_host_attended_ready <config-dir> <primary-harness> | COMMENT |
| MEDIUM | bin/fm-tmux-lib.sh | 30 | # stays harness-scoped so one harness's output cannot make another read busy. | COMMENT |
| MEDIUM | bin/fm-tmux-lib.sh | 70 | # (bin/fm-composer-lib.sh, fm_composer_classify_screen), so a new harness | COMMENT |
| MEDIUM | bin/fm-tmux-lib.sh | 163 | # herdr, zellij, cmux, and orca use for every harness including this one. | COMMENT |
| MEDIUM | bin/fm-tmux-lib.sh | 166 | # harness is untouched. | COMMENT |
| MEDIUM | bin/fm-tmux-lib.sh | 205 | fm_pane_busy_state() { # <target> [harness] -> busy|idle|unknown | CODE |
| MEDIUM⚡ | bin/fm-tmux-lib.sh | 218 | fm_pane_is_busy() { # <target> [harness] | CODE |
| MEDIUM⚡ | bin/fm-tmux-lib.sh | 227 | # Busy-queued Enter (opencode 1.18.4): the harness accepts Enter while mid-turn | COMMENT |
| MEDIUM⚡ | bin/fm-tmux-lib.sh | 236 | # harness whose mid-turn screen the classifier cannot positively identify (pi | COMMENT |
| MEDIUM⚡ | bin/fm-tmux-lib.sh | 239 | # typed, an idle-to-busy transition across our Enter is proof the harness | COMMENT |
| MEDIUM | bin/fm-claude-stop-autoarm.sh | 14 | # bin/fm-session-lock-lib.sh decides it: the recorded pid is a harness | COMMENT |
| MEDIUM | bin/fm-claude-stop-autoarm.sh | 18 | # When an existing numeric owner fails the shared harness-liveness predicate, | COMMENT |
| MEDIUM | bin/fm-claude-stop-autoarm.sh | 83 | # the harness delivers the collected stderr only on exit 2, so an owned | COMMENT |
| MEDIUM | bin/fm-claude-stop-autoarm.sh | 201 | # A prior session may have died after leaving its numeric harness pid in .lock. | COMMENT |
| MEDIUM | bin/fm-claude-stop-autoarm.sh | 264 | # (cleanup, exit 0) - the harness discards the collected stderr on exit 0, so | COMMENT |
| MEDIUM | bin/fm-claude-stop-autoarm.sh | 334 | # is the harness-owned lifecycle. The arm forks the watcher as its own tracked | COMMENT |
| MEDIUM | bin/fm-host-mirror.sh | 21 | # with the wrapper a harness puts around a turn it started itself: Claude | COMMENT |
| MEDIUM⚡ | bin/fm-host-mirror.sh | 66 | # VERIFIED WRITERS. `verified <harness>` exits 0 for a primary whose writers | COMMENT |
| MEDIUM⚡ | bin/fm-host-mirror.sh | 67 | # were proven against the real harness to record a session's dialog from its | COMMENT |
| MEDIUM⚡ | bin/fm-host-mirror.sh | 74 | # fm-host-mirror.sh hook <harness> a prompt-submit or turn-end hook payload on stdin | COMMENT |
| MEDIUM⚡ | bin/fm-host-mirror.sh | 78 | # fm-host-mirror.sh verified <harness> | COMMENT |
| MEDIUM | bin/fm-cd-pretool-check.sh | 11 | # harness payload, invokes that policy, and renders the established harness | COMMENT |
| MEDIUM⚡ | bin/fm-wake-lib.sh | 229 | # persistent every other harness (codex foreground checkpoint, opencode/grok | COMMENT |
| MEDIUM⚡ | bin/fm-wake-lib.sh | 233 | # the harness). Otherwise bin/fm-harness.sh is the single detection owner, so this | COMMENT |
| MEDIUM⚡ | bin/fm-wake-lib.sh | 234 | # stays consistent with the harness-specific repair line the guards already emit. | COMMENT |
| MEDIUM | bin/fm-wake-lib.sh | 217 | # Print the supervision model of this home's PRIMARY harness: | COMMENT |
| MEDIUM | bin/fm-wake-lib.sh | 317 | # so a session on one harness cannot vouch for a home held by the other. | COMMENT |
| MEDIUM | bin/fm-wake-lib.sh | 1751 | # harness delivers the collected stderr banner only on exit 2 and discards | COMMENT |
| MEDIUM | bin/fm-transition-lib.sh | 75 | # status today: herdr reports it precisely when a harness is | COMMENT |
| MEDIUM | bin/fm-remote-secondmate-relaunch.sh | 2 | # Relaunch a REMOTE secondmate onto a new harness, model, or effort, then | COMMENT |
| MEDIUM | bin/fm-remote-secondmate-relaunch.sh | 5 | # Usage: fm-remote-secondmate-relaunch.sh <id> <harness> <model|default|-> <effort|default|-> | COMMENT |
| MEDIUM | bin/fm-remote-secondmate-relaunch.sh | 16 | # the confirmed harness, model, and effort back out of the endpoint's own | COMMENT |
| MEDIUM | bin/fm-remote-secondmate-relaunch.sh | 82 | # refreshed harness/model/effort. A pr= line's own identity block (pr_head= | COMMENT |
| MEDIUM | bin/fm-remote-secondmate-relaunch.sh | 85 | # writing harness/model/effort after it would break PR movement monitoring on | COMMENT |
| MEDIUM | bin/fm-exclude-tools-lib.sh | 44 | # fm_exclude_tools_check <harness> <raw-launch 0|1> <config-dir>: succeed when | COMMENT |
| MEDIUM | bin/fm-supervision-host.sh | 20 | # every close it handled itself. Each owner passes its harness as | COMMENT |
| MEDIUM | bin/fm-supervision-host.sh | 120 | # checkpoint, whose bound is the park itself rather than a harness timeout, | COMMENT |
| MEDIUM | bin/fm-supervision-host.sh | 132 | # the primary's harness pin, and this turn's report id, so every guarded | COMMENT |
| MEDIUM | bin/fm-test-run.sh | 35 | # gave (empty when it ran), so a lane can say which harness or | COMMENT |
| MEDIUM | bin/fm-test-run.sh | 116 | # live-capability (a live-harness guard governed by fm_live_gate, which records | COMMENT |
| MEDIUM | bin/fm-test-run.sh | 664 | # secondmate lifecycle, bootstrap, the live-harness-optin family, GUI-backend, | COMMENT |
| MEDIUM | bin/fm-test-run.sh | 1471 | # The shared harness-process classifier feeds both the tmux and Herdr | COMMENT |
| MEDIUM | bin/fm-test-run.sh | 1582 | # The run tier's two harness-supplied facts (source vocabulary and | COMMENT |
| MEDIUM | bin/fm-test-run.sh | 1583 | # context-reset stdout injection) only show up against a real harness. | COMMENT |
| 992 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .no-mistakes.yaml | 1 | # Per-repo no-mistakes overrides. | COMMENT |
| LOW | bin/fm-brief-heading-lib.sh | 1 | # shellcheck shell=bash | COMMENT |
| LOW | bin/fm-secondmate-registry-lib.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-gate-refuse-lib.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-gate-refuse-lib.sh | 21 | # 1. NO_MISTAKES_GATE set - the durable env marker no-mistakes stamps into every | COMMENT |
| LOW | bin/fm-gate-refuse-lib.sh | 41 | # part of the "lab" back onto the real fleet. The threat model stays a CONFUSED | COMMENT |
| LOW | bin/fm-gate-refuse-lib.sh | 61 | # safety helpers) export it for temp-sandbox fleet tests. The disposable lab | COMMENT |
| LOW | bin/fm-remote-file.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-worker-account-lib.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-worker-account-lib.sh | 21 | # is set, even $HOME/.claude; for Pi it is $HOME/.pi/agent. Any other value is | COMMENT |
| LOW | bin/fm-worker-account-lib.sh | 41 | # Claude: `claude auth status`, which exits 0 only when signed in. | COMMENT |
| LOW | bin/fm-inactive-reconcile.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-inactive-reconcile.sh | 21 | # fm-crew-state.sh, which applies the same gate: a no-mistakes | COMMENT |
| LOW | bin/fm-inactive-reconcile.sh | 41 | # The scan enforces that budget itself through a whole-second deadline, and the | COMMENT |
| LOW | bin/fm-inactive-reconcile.sh | 61 | # A terminal-outcomes/<fingerprint>.pending record remains until its upstream | COMMENT |
| LOW | bin/fm-lint.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-lint.sh | 21 | # before merge instead of only failing to run as CI. | COMMENT |
| LOW | bin/fm-lint.sh | 41 | # invocations in the core bin/ and bin/backends/ scripts so every configured | COMMENT |
| LOW | bin/fm-lint.sh | 61 | # (FM_LINT_ROOT_GRACE, default 5), and a per-process address-space limit | COMMENT |
| LOW | bin/fm-lint.sh | 81 | # Other findings and failed retries still fail lint. The retry's diagnostics | COMMENT |
| LOW | bin/fm-lint.sh | 101 | # graph identity, wall/CPU/RSS, shard load, and competing ShellCheck processes. | COMMENT |
| LOW | bin/fm-lint.sh | 961 | # address space, not resident memory; ShellCheck's GHC runtime reserves about | COMMENT |
| LOW | bin/fm-secondmate-reconcile.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-secondmate-reconcile.sh | 21 | # and live work and carries the mismatch for renderers. The books are still | COMMENT |
| LOW | bin/fm-secondmate-reconcile.sh | 41 | # stale, cannot mis-order against a concurrent snapshot, and cannot | COMMENT |
| LOW | bin/fm-secondmate-reconcile.sh | 61 | # | COMMENT |
| LOW | bin/fm-captain-hold.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-captain-hold.sh | 21 | # | COMMENT |
| LOW | bin/fm-captain-hold.sh | 41 | # optional --origin records provenance in the new task's body and supplies the | COMMENT |
| LOW | bin/fm-captain-hold.sh | 61 | # act. It requires a non-empty captain decision file of at most 8192 bytes and | COMMENT |
| LOW | bin/fm-captain-hold.sh | 81 | # `<task-id>\t<answer>\t<label>[\t<mode>]` lines on stdin and resolves each named | COMMENT |
| LOW | bin/fm-captain-hold.sh | 101 | # The exact answer value `reconcile` means "go re-check reality", never "the | COMMENT |
| LOW | bin/fm-captain-hold.sh | 121 | # | COMMENT |
| LOW | bin/fm-captain-hold.sh | 141 | # verified durable (captain-held, or carrying a recorded resolution), | COMMENT |
| LOW | bin/fm-captain-hold.sh | 161 | # authoritative evidence first: a row whose notes carry the marker line | COMMENT |
| LOW | bin/fm-captain-hold.sh | 181 | # lifecycle without necessarily touching the task's status log, so a consumer | COMMENT |
| LOW | bin/fm-captain-hold.sh | 201 | # | COMMENT |
| LOW | bin/fm-captain-hold.sh | 221 | COMMENT | |
| LOW | bin/fm-captain-hold.sh | 541 | COMMENT | |
| LOW | bin/fm-captain-hold.sh | 1841 | done <<EOF | COMMENT |
| LOW | bin/fm-captain-hold.sh | 1861 | # resolution was not the captain's word. | COMMENT |
| LOW | bin/fm-herdr-lab.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-herdr-lab.sh | 21 | # The run command rejects caller-supplied --session flags, any leading option | COMMENT |
| LOW | bin/fm-ensure-agents-md.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-timing-lib.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-timing-lib.sh | 21 | # being measured run in bin/fm-bootstrap.sh and | COMMENT |
| LOW | bin/fm-afk-start.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-afk-start.sh | 21 | # background process differs by harness/backend and is owned elsewhere: | COMMENT |
| LOW | bin/fm-afk-start.sh | 41 | COMMENT | |
| LOW | bin/fm-backlog-handoff.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-backlog-handoff.sh | 21 | # active home, or the firstmate repo; | COMMENT |
| LOW | bin/fm-backlog-handoff.sh | 41 | # Item bodies must use at least two leading spaces. The helper refuses a selected | COMMENT |
| LOW | bin/fm-backlog-handoff.sh | 61 | # watcher escalates its unknown delivery; only confirmed delivery prevents a | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 21 | # It is read-only over the capture: it does not arm, poll, or change | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 41 | # present when it starts is posted before the long-poll: through | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 61 | # | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 81 | # This adapter is deliberately thin. It owns only what is specific to Lavish: | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 101 | # to Lavish, so every rule about what a keyed answer DOES belongs to the one | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 121 | # code: SERVER_ERROR | COMMENT |
| 1341 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/fm-composer-lib.sh | 767 | # its composer's TOP rule: `──────── <name> ─`, issues #5601 and #5558), proven | COMMENT |
| MEDIUM | bin/fm-supervise-daemon.sh | 1743 | # ============================================================================ | COMMENT |
| MEDIUM | bin/fm-supervise-daemon.sh | 1746 | # ============================================================================ | COMMENT |
| MEDIUM | bin/fm-busy-lib.sh | 310 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 81 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 83 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 138 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 140 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 462 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 465 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 681 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 684 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 1078 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/fm-secondmate-harness.test.sh | 1082 | # =========================================================================== | COMMENT |
| MEDIUM | tests/fm-secondmate-harness.test.sh | 176 | # =========================================================================== | COMMENT |
| MEDIUM | tests/fm-secondmate-harness.test.sh | 178 | # =========================================================================== | COMMENT |
| MEDIUM | tests/fm-secondmate-harness.test.sh | 305 | # =========================================================================== | COMMENT |
| MEDIUM | tests/fm-secondmate-harness.test.sh | 307 | # =========================================================================== | COMMENT |
| MEDIUM | tests/fm-secondmate-harness.test.sh | 1872 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-secondmate-harness.test.sh | 1874 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-x-mode.test.sh | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 69 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 257 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 259 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 337 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 340 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 369 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 376 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 524 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 527 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 1624 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 1626 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 1687 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-afk-launch.test.sh | 1690 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-crew-state.test.sh | 800 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-backend-herdr-presentation-e2e.test.sh | 977 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | tests/fm-backend-herdr-presentation-e2e.test.sh | 980 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | tests/fm-composer-lib.test.sh | 137 | # ============================================================================= | COMMENT |
| MEDIUM | tests/fm-composer-lib.test.sh | 154 | # ============================================================================= | COMMENT |
| MEDIUM | tests/fm-remote-reply.test.sh | 447 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-subagent-pretool-check.test.sh | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/fm-subagent-pretool-check.test.sh | 76 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .no-mistakes.yaml | 3 | # firstmate is an agent-orchestration repo: its AGENTS.md installs a fleet-captain | COMMENT |
| MEDIUM | bin/fm-backlog-handoff.sh | 1059 | # Seed the destination with firstmate's standard three-section scaffold when it | COMMENT |
| MEDIUM | bin/fm-backlog-handoff.sh | 1073 | # cleanup is a scaffold we just created. tasks-axi writes both its success and | COMMENT |
| MEDIUM | bin/fm-brief.sh | 38 | # after scaffolding and the caller-supplied repo string cannot reliably | COMMENT |
| MEDIUM⚡ | bin/fm-brief.sh | 98 | # Every scaffold's status protocol distinguishes the configured | COMMENT |
| MEDIUM⚡ | bin/fm-brief.sh | 104 | # bin/fm-classify-lib.sh; each scaffold renders the stamp as a literal <epoch> | COMMENT |
| MEDIUM⚡ | bin/fm-brief.sh | 106 | # scaffold never emits a substitution a file-write tool would copy through. | COMMENT |
| MEDIUM⚡ | bin/fm-brief.sh | 107 | # Every scaffold also carries the steering-inbox receive-and-ack section: | COMMENT |
| MEDIUM | bin/fm-brief.sh | 128 | # a later scout promotion could not outrank), stops the scaffold before | COMMENT |
| MEDIUM | bin/fm-brief.sh | 247 | # missing or invalid value stops the scaffold rather than silently defaulting. | COMMENT |
| MEDIUM | bin/fm-brief.sh | 322 | # unusable file never leaves a partial scaffold behind. | COMMENT |
| MEDIUM | bin/fm-brief.sh | 337 | # Append the include as the last section of a ship or scout scaffold. | COMMENT |
| MEDIUM | bin/fm-brief.sh | 370 | # scaffold kind. The record format, doorbell line, and re-ring ladder are | COMMENT |
| MEDIUM | bin/fm-brief.sh | 515 | # shellcheck disable=SC2016 # single quotes are deliberate: these lines are literal brief text whose backtick-wrapped $ | COMMENT |
| MEDIUM | bin/fm-spawn.sh | 3325 | echo "error: forge mismatch for $ID: $PROJ_NAME is registered forge=$STANDING_FORGE but $SOURCE_BRIEF records forge= | CODE |
| MEDIUM | bin/fm-dod-lib.sh | 218 | # Return 0 when a Task subsection still consists only of its scaffold | COMMENT |
| MEDIUM | bin/fm-public-followup.sh | 41 | # public-followup add` + `bind-work`. This is the event-driven | COMMENT |
| MEDIUM | bin/fm-task-inbox-lib.sh | 11 | # scaffold (bin/fm-brief.sh) tells the worker how to read and acknowledge; | COMMENT |
| MEDIUM | tests/fm-muse-harness.test.sh | 67 | # --- spawn scaffolding ------------------------------------------------------ | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 182 | # scaffold ignores the registered posture (test_ship_mode_is_explicit_not_registry). | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 225 | # unusable value must stop the scaffold instead of silently defaulting. The | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 252 | # scaffold must follow the explicit flag even when the project is registered | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 586 | # destroying the one contract that exists precisely because the scaffold cannot | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 855 | # Fill the scaffold's generated status-append command the way a worker does | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 1009 | # Scout and secondmate paths still scaffold well-formed briefs. | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 1080 | # Without config/wait-no-turns the scaffold matches the pre-flag brief and drive text. | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 1123 | # the scaffold before anything is written when the path is unusable. | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 1136 | # shellcheck disable=SC2016 # The include is literal text and must never expand at scaffold time. | COMMENT |
| MEDIUM | tests/fm-brief.test.sh | 1404 | # scaffold must prohibit the administrative act itself. The rule is emitted from | COMMENT |
| MEDIUM | tests/fm-fleet-ledger.test.sh | 165 | # Optional arguments are the scaffold's state and config overrides; the | COMMENT |
| MEDIUM | tests/fm-fleet-ledger.test.sh | 166 | # scaffold runs from the home, so a relative config override names its config/. | COMMENT |
| MEDIUM | tests/fm-backlog-handoff.test.sh | 969 | # in the standard three-section scaffold the handoff seeds for a fresh home. | COMMENT |
| MEDIUM | tests/fm-backlog-handoff.test.sh | 1198 | # sub scaffold has In flight / Queued / Done | COMMENT |
| MEDIUM | tests/fm-control-relaunch.test.sh | 1175 | # its brief is the scout scaffold: it never gained a Ship branch line, and a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/fm-remote-file.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-inactive-reconcile.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-lint.sh | 105 | # Usage: | COMMENT |
| LOW | bin/fm-secondmate-reconcile.sh | 5 | # Usage: | COMMENT |
| LOW | bin/fm-captain-hold.sh | 22 | # Usage: | COMMENT |
| LOW | bin/fm-herdr-lab.sh | 5 | # Usage: | COMMENT |
| LOW | bin/fm-procevent-lavish.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-remote-home-provision.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-procevent-remote-reply.sh | 4 | # Usage: | COMMENT |
| LOW⚡ | bin/fm-host-mirror.sh | 73 | # Usage: | COMMENT |
| LOW | bin/fm-cd-pretool-check.sh | 15 | # Usage: | COMMENT |
| LOW | bin/fm-procevent-when.sh | 7 | # Usage: | COMMENT |
| LOW | bin/fm-supervision-host.sh | 6 | # Usage: | COMMENT |
| LOW | bin/fm-startup-growth-check.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-install-shellcheck.sh | 12 | # Usage: | COMMENT |
| LOW | bin/fm-secondmate-report.sh | 17 | # Usage: | COMMENT |
| LOW | bin/fm-contributions.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-lint-workflows.sh | 11 | # Usage: | COMMENT |
| LOW | bin/fm-mail-check.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-tool-update-check.sh | 5 | # Usage: | COMMENT |
| LOW | bin/fm-remote-inherit.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-backlog-receive.sh | 4 | # Usage: | COMMENT |
| LOW⚡ | bin/fm-remote-secondmate-control.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-public-followup-emit.sh | 15 | # Usage: | COMMENT |
| LOW | bin/fm-startup-memory-budget.sh | 3 | # Usage: | COMMENT |
| LOW⚡ | bin/fm-arm-pretool-check.sh | 13 | # Usage: | COMMENT |
| LOW | bin/fm-install-treehouse.sh | 9 | # Usage: | COMMENT |
| LOW⚡ | bin/fm-quota-choose.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-remote-herdr-guard.sh | 5 | # Usage: | COMMENT |
| LOW | bin/fm-public-followup-collect.sh | 18 | # Usage: | COMMENT |
| LOW | bin/fm-install-actionlint.sh | 12 | # Usage: | COMMENT |
| LOW | bin/fm-herdr-ci-cleanup.sh | 14 | # Usage: | COMMENT |
| LOW | bin/fm-remote-home-seed.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-procevent-quota.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-vendor-auth-probe.sh | 56 | # Usage: | COMMENT |
| LOW | bin/fm-branch-outcome.sh | 78 | # Usage: | COMMENT |
| LOW | bin/fm-afk-return.sh | 5 | # Usage: | COMMENT |
| LOW | bin/fm-git-strip-ai-trailers.sh | 5 | # Usage: | COMMENT |
| LOW | bin/fm-lab-home.sh | 10 | # Usage: | COMMENT |
| LOW | bin/fm-test-isolation-proof.sh | 15 | # Usage: | COMMENT |
| LOW | bin/fm-on.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-public-followup.sh | 31 | # Usage: | COMMENT |
| LOW | bin/fm-live-lab.sh | 7 | # Usage: | COMMENT |
| LOW | bin/fm-inbox.sh | 22 | # Usage: | COMMENT |
| LOW | bin/fm-procevent.sh | 6 | # Usage: | COMMENT |
| LOW | bin/fm-install-herdr.sh | 8 | # Usage: | COMMENT |
| LOW | bin/fm-branch-report.sh | 17 | # Usage: | COMMENT |
| LOW | bin/fm-bearings-board.sh | 10 | # Usage: | COMMENT |
| LOW | bin/fm-lease.sh | 11 | # Usage: | COMMENT |
| LOW | bin/fm-kimi-turnend-hook.sh | 15 | # Usage: | COMMENT |
| LOW | bin/fm-pipeline-spend.sh | 5 | # Usage: | COMMENT |
| LOW | bin/fm-remote-doctor.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-doc-audience-check.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-remote-delta-read.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-subagent-pretool-check.sh | 33 | # Usage: | COMMENT |
| LOW | bin/fm-afk-launch.sh | 68 | # Usage: | COMMENT |
| LOW | bin/fm-afk-contract.sh | 81 | # Usage: | COMMENT |
| LOW | bin/fm-fleet-ledger.sh | 22 | # Usage: | COMMENT |
| LOW | bin/fm-home-seed.sh | 4 | # Usage: | COMMENT |
| LOW | bin/fm-dispatch-resolve.sh | 5 | # Usage: | COMMENT |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/fm-kimi-turnend-hook.sh | 201 | def validate_firstmate_files_for_remove() -> None: | STRING |
| LOW | bin/fm-bootstrap.sh | 1094 | def malformed_optional_fields($items): | CODE |
| LOW | .opencode/plugins/fm-primary-watch-arm.js | 302 | function confirmHandlingDeliveryWithRetry(paths, recovery) { | CODE |
| LOW | .opencode/plugins/fm-primary-watch-arm.js | 370 | async function restoreAfterActionableClose(paths, sessionID, client, predecessorArmPid) { | CODE |
| LOW | .opencode/plugins/lib/fm-operational-input.js | 10 | export function encodeFirstmateOperationalInput(root, kind, content) { | CODE |
| LOW | tests/fm-pi-branch-extension.test.sh | 269 | export function getSupportedThinkingLevels(model) { | CODE |
| LOW | tests/fm-pi-branch-extension.test.sh | 998 | function directlyRequestsResourceReport(mirror) { | CODE |
| LOW | tests/fm-voice-relay.test.sh | 654 | async def resolve_while_the_loop_runs(): | CODE |
| LOW | tests/fm-voice-relay.test.sh | 1596 | def lose_connection_while_waiting(record): | CODE |
| LOW | tests/fm-voice-relay.test.sh | 4136 | async def invoke_model_with_bidirectional_stream(self, operation): | CODE |
| LOW | tests/fm-backend-herdr-eventwait.test.py | 51 | def test_deadline_is_clean_timeout(self): | CODE |
| LOW | tests/fm-backend-herdr-eventwait.test.py | 62 | def test_peer_closure_is_runtime_failure(self): | CODE |
| LOW⚡ | tests/fm-backend-herdr-eventwait.test.py | 75 | def test_receive_error_is_runtime_failure(self): | CODE |
| LOW⚡ | tests/fm-backend-herdr-eventwait.test.py | 84 | def test_main_reports_early_stream_closure(self): | CODE |
| LOW⚡ | tests/fm-backend-herdr-eventwait.test.py | 93 | def test_main_does_not_signal_readiness_before_valid_ack(self): | CODE |
| LOW | tests/fm-calm-pi-extension.test.sh | 1666 | function createInstalledToolHtmlRenderer() { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-calm-presentation.ts | 44 | export function calmCodeRootFromPluginRoot(pluginRoot: string): string { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-calm-presentation.ts | 114 | export function classifyRestoredTranscript(rows: readonly CalmSessionRow[]): { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-calm-presentation.ts | 150 | export function userTextOperationalRecord(text: string): string | undefined { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-operational-input.ts | 68 | export function firstmateOperationalInputKind(message: string): string | undefined { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-operational-input.ts | 78 | export function firstmateLegacyOperationalInputKind(message: string): string | undefined { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-operational-input.ts | 100 | export function classifyFirstmateOperationalText(message: string): string | undefined { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-operational-input.ts | 109 | export function firstmateOperationalDoorbellPath(message: string): string | undefined { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-operational-input.ts | 128 | export function firstmateOperationalRecordKind(content: string): string | undefined { | CODE |
| LOW | .claude/mods/firstmate-calm/lib/fm-branch-notes.ts | 138 | export function recordSessionShownThrough(stored: unknown, sessionId: string, seq: number): [string, number][] { | CODE |
| LOW | …mods/firstmate-calm/lib/fm-calm-working-ship-sprite.ts | 171 | export function createCalmWorkingShipSprite(): CalmWorkingShipSprite { | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 184 | function replacementCoordinatorFor(handoff: string): ReplacementCoordinator { | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 332 | function validatePendingActionable(value: unknown): PendingActionableClose { | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 351 | function validateReplacementHandoff(value: unknown): PendingActionableClose[] { | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 385 | function persistReplacementHandoff(pending: PendingActionableClose[]): void { | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 513 | async function waitForGenerationChildClose(armChild: ChildProcess | null): Promise<void> { | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 633 | function confirmHandlingDeliveryWithRetry( | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 725 | async function processPendingActionables(owner: SessionGeneration): Promise<void> { | CODE |
| LOW | .omp/extensions/fm-primary-omp-watch.ts | 882 | async function restoreAfterActionableClose(owner: SessionGeneration, predecessorArmPid: string): Promise<{ | CODE |
| LOW | .omp/extensions/fm-primary-turnend-guard.ts | 162 | function sessionstartGenerationIsLive(generation: SessionstartGeneration): boolean { | CODE |
| LOW | .omp/extensions/fm-primary-turnend-guard.ts | 185 | function sessionstartProcessGroupAlive(processGroupId: number): boolean { | CODE |
| LOW | .omp/extensions/fm-primary-turnend-guard.ts | 194 | function waitForSessionstartProcessGroupExit( | CODE |
| LOW | .omp/extensions/fm-primary-turnend-guard.ts | 222 | function stopSessionstartGeneration(generation: SessionstartGeneration): Promise<void> { | CODE |
| LOW | .omp/extensions/fm-primary-turnend-guard.ts | 390 | function createSessionstartGeneration( | CODE |
| LOW | .pi/extensions/fm-calm.ts | 117 | function installCalmPresentationAdapter(name: string, install: () => void): void { | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 189 | function replacementCoordinatorFor(handoff: string): ReplacementCoordinator { | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 384 | function validatePendingActionable(value: unknown): PendingActionableClose { | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 402 | function validateReplacementHandoff(value: unknown): PendingActionableClose[] { | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 436 | function persistReplacementHandoff(pending: PendingActionableClose[]): void { | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 557 | async function waitForGenerationChildClose(armChild: ChildProcess | null): Promise<void> { | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 704 | function confirmHandlingDeliveryWithRetry( | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 827 | async function processPendingActionables(owner: SessionGeneration): Promise<void> { | CODE |
| LOW | .pi/extensions/fm-primary-pi-watch.ts | 983 | async function restoreAfterActionableClose(owner: SessionGeneration, predecessorArmPid: string): Promise<{ | CODE |
| LOW | .pi/extensions/fm-primary-turnend-guard.ts | 146 | function sessionstartGenerationIsLive(generation: SessionstartGeneration): boolean { | CODE |
| LOW | .pi/extensions/fm-primary-turnend-guard.ts | 169 | function sessionstartProcessGroupAlive(processGroupId: number): boolean { | CODE |
| LOW | .pi/extensions/fm-primary-turnend-guard.ts | 178 | function waitForSessionstartProcessGroupExit( | CODE |
| LOW | .pi/extensions/fm-primary-turnend-guard.ts | 206 | function stopSessionstartGeneration(generation: SessionstartGeneration): Promise<void> { | CODE |
| LOW | .pi/extensions/fm-primary-turnend-guard.ts | 379 | function createSessionstartGeneration( | CODE |
| LOW | .pi/extensions/fm-branch-supervision.ts | 233 | function isProcessingCustomMessage(message: { role?: string; customType?: string }): boolean { | CODE |
| LOW | .pi/extensions/fm-branch-supervision.ts | 242 | function settledPromptProviderError(sessionManager: SessionManager, entryOffset: number): string | null { | CODE |
| LOW | .pi/extensions/fm-branch-supervision.ts | 497 | function parseVisibleOutcomeRecord(value: unknown): VisibleOutcomeRecord | null { | CODE |
| LOW | .pi/extensions/fm-branch-supervision.ts | 713 | function recordSettledProviderError(detail: string): void { | CODE |
| LOW | .pi/extensions/fm-branch-supervision.ts | 732 | function recordDurableBranchReport(reportGeneration: number, reportSelectionRevision: number): void { | CODE |
| LOW | .pi/extensions/fm-branch-supervision.ts | 974 | function ensureVisibleCaptainOutcome(row: OutcomeRow): boolean { | CODE |
| LOW | .pi/extensions/fm-branch-supervision.ts | 1068 | async function presentUnprocessedOutcomes(expectedGeneration: number): Promise<boolean> { | CODE |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bin/fm-voice-client.py | 391 | except Exception: # noqa: BLE001 | CODE |
| HIGH | bin/fm-voice-client.py | 480 | except Exception: # noqa: BLE001 | CODE |
| HIGH | bin/fm-voice-client.py | 681 | except Exception: # noqa: BLE001 | CODE |
| HIGH | bin/fm-voice-client.py | 1176 | except EOFError: | CODE |
| HIGH | bin/fm-voice-relay.py | 603 | except (asyncio.TimeoutError, asyncio.CancelledError): | CODE |
| HIGH | bin/fm-mail.py | 138 | except Exception: | CODE |
| HIGH | bin/fm-mail.py | 406 | except Exception: | CODE |
| HIGH | bin/fm-mail.py | 471 | except Exception: | CODE |
| HIGH | bin/fm-herdr-lab-viewer.py | 65 | except OSError: | CODE |
| HIGH | bin/fm-herdr-lab-viewer.py | 76 | except OSError: | CODE |
| HIGH | bin/fm-herdr-lab-viewer.py | 151 | except OSError: | CODE |
| HIGH | bin/fm-herdr-lab-viewer.py | 180 | except OSError: | CODE |
| HIGH | bin/fm-herdr-lab-viewer.py | 167 | except OSError: | CODE |
| HIGH | bin/fm-herdr-lab-viewer.py | 172 | except OSError: | CODE |
| HIGH | bin/fm-jev-mem-guard.py | 48 | except Exception: | CODE |
| HIGH | bin/fm-jev-mem-guard.py | 83 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/fm-brief-heading-lib.sh | 5 | # This file is the single owner of how a brief's sections are read: the | COMMENT |
| MEDIUM | bin/fm-afk-start.sh | 15 | # This file is sourceable: its BASH_SOURCE guard keeps main from running, while | COMMENT |
| MEDIUM | bin/fm-x-lib.sh | 9 | # This file is sourced, never executed. It defines: | COMMENT |
| MEDIUM | bin/fm-tasks-axi-lib.sh | 27 | # This file is the single owner of FM_TASKS_AXI_MIN. bin/fm-bootstrap.sh turns a | COMMENT |
| MEDIUM | bin/fm-primary-scope-lib.sh | 4 | # This file is sourced by hook entrypoints and has no side effects on source. | COMMENT |
| MEDIUM | bin/fm-project-capacity-lib.sh | 15 | # This file is the single owner of the declaration format, of what holds a | COMMENT |
| MEDIUM | bin/fm-hook-host-lib.sh | 4 | # This file is sourced by hook entrypoints and has no side effects on source. | COMMENT |
| MEDIUM | bin/fm-operational-input.sh | 4 | # This file is both a source-safe shell library and the cross-language CLI used | COMMENT |
| MEDIUM | bin/fm-pending-reply-lib.sh | 313 | # Create a durable pending-reply expectation. Prints corr_id on success. | COMMENT |
| MEDIUM⚡ | bin/fm-session-lock-lib.sh | 14 | # This file is sourced by scripts and has no side effects on source. | COMMENT |
| MEDIUM | bin/fm-dod-lib.sh | 70 | # This file is the one owner of the no-mistakes `--intent` contract: only the | COMMENT |
| MEDIUM | bin/fm-env-lib.sh | 5 | # This file is the single owner of the one-key .env read: the Relay pairing | COMMENT |
| MEDIUM | bin/fm-quota-axi-lib.sh | 9 | # This file is the single owner of that version number. bin/fm-bootstrap.sh | COMMENT |
| MEDIUM⚡ | tests/fm-afk-inject-e2e.test.sh | 161 | # Create a fake crewmate window (the watcher lists fm-* windows for stale | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/fm-voice-client.py | 476 | def close(self): | CODE |
| LOW | bin/fm-voice-client.py | 391 | except Exception: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-client.py | 480 | except Exception: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-client.py | 515 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-client.py | 651 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-client.py | 681 | except Exception: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-client.py | 957 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-client.py | 1359 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-relay.py | 589 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-relay.py | 739 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-relay.py | 755 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-relay.py | 855 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-relay.py | 979 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-voice-relay.py | 1244 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | bin/fm-mail.py | 62 | except Exception: | CODE |
| LOW | bin/fm-mail.py | 99 | except Exception: | CODE |
| LOW | bin/fm-mail.py | 138 | except Exception: | CODE |
| LOW | bin/fm-mail.py | 141 | except Exception as e: | CODE |
| LOW | bin/fm-mail.py | 161 | except Exception as e: | CODE |
| LOW | bin/fm-mail.py | 376 | except Exception: | CODE |
| LOW | bin/fm-mail.py | 406 | except Exception: | CODE |
| LOW | bin/fm-mail.py | 461 | except Exception as e: | CODE |
| LOW | bin/fm-mail.py | 471 | except Exception: | CODE |
| MEDIUM | bin/fm-mail.py | 104 | def cmd_read(): | CODE |
| MEDIUM | bin/fm-mail.py | 146 | def cmd_send(to, subj, body): | CODE |
| LOW | bin/fm-kimi-turnend-hook.sh | 191 | except Exception: | STRING |
| LOW⚡ | bin/fm-jev-mem-guard.py | 48 | except Exception: | CODE |
| LOW⚡ | bin/fm-jev-mem-guard.py | 58 | except Exception: | CODE |
| LOW⚡ | bin/fm-jev-mem-guard.py | 63 | except Exception: | CODE |
| LOW | bin/fm-jev-mem-guard.py | 83 | except Exception: | CODE |
| LOW | bin/fm-jev-mem-guard.py | 91 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/fm-voice-client.py | 718 | CODE | |
| LOW | bin/fm-voice-client.py | 774 | CODE | |
| LOW | bin/fm-voice-relay.py | 944 | CODE | |
| LOW | bin/fm-voice-relay.py | 449 | CODE | |
| LOW | bin/fm-mail.py | 79 | CODE | |
| LOW | bin/fm-mail.py | 267 | CODE | |
| LOW | bin/fm_voice_records.py | 361 | CODE | |
| LOW | bin/fm-jev-mem-guard.py | 36 | CODE | |
| LOW | bin/fm-jev-mem-guard.py | 53 | CODE | |
| LOW | bin/fm-jev-mem-guard.py | 98 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/fm-dod-lib.sh | 180 | # Print the value of every "Base branch: <name>" line that directly follows the | COMMENT |
| LOW | bin/fm-watch.sh | 879 | # Set SECONDMATE_BUSY_CLASS to the first token of the semantic busy | COMMENT |
| LOW | bin/fm-bootstrap.sh | 117 | # Set FM_BOOTSTRAP_NETWORK to split this run by whether a step talks to | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/verification/secondmate-parent-channel.md | 26 | $ # Step 1: the child appends its terminal line from inside its own real tmux pane | CODE |
| LOW | docs/verification/secondmate-parent-channel.md | 44 | $ # Step 2: the mate registers the PR with fm-pr-check; the ready line with the canonical URL reaches the parent from th | CODE |
| LOW | docs/verification/secondmate-parent-channel.md | 58 | $ # Step 3: the mate holds a task for the captain; the hold reaches the parent from fm-captain-hold itself | CODE |
| LOW | docs/verification/secondmate-parent-channel.md | 63 | $ # Step 4: the captain's answer is recorded in the mate home; the close reaches the parent from fm-captain-hold itself | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bin/fm-jev-mem-guard.py | 19 | a false alarm; an unassessed host reports null measured percentages (JSON null, | STRING |