# v7.9.1 Trust Gate Closeout - Installed Runtime Smoke

Date: 2026-05-16

Closeout version: v7.9.2. v7.9.1 was already tagged and published, so the remaining trust-gate closeout ships as v7.9.2.

## Local Verification

```text
COMMAND: cargo test --test rank_signal_behavior -- --test-threads=1
RESULT: PASS - 1 passed; 0 failed

COMMAND: cargo test --all-targets -- --test-threads=1
RESULT: PASS - all targets passed; ignored tests remained ignored

COMMAND: cargo build --release
RESULT: PASS - Finished `release` profile [optimized]

COMMAND: cd npm && npm test
RESULT: PASS - 24 passed; 0 failed; 1 skipped
```

## Global Install Check

```text
COMMAND: cmd /c "where symforge && symforge --version"
RESULT:
C:\Users\poslj\bin\symforge.cmd
C:\Program Files\nodejs\symforge
C:\Program Files\nodejs\symforge.cmd
symforge 7.9.2

COMMAND: & 'C:\Program Files\nodejs\symforge.cmd' --version
RESULT:
symforge 7.9.2
```

## Installed Runtime Smoke

The smoke ran through the actual global command from PATH with isolated runtime state:

```text
COMMAND: cmd /d /c symforge
ENV:
RUST_LOG=error
SYMFORGE_AUTO_INDEX=false
SYMFORGE_NO_DAEMON=1
SYMFORGE_RECONCILE_INTERVAL=0
SYMFORGE_HOME=<temp>\symforge-smoke-wk6a0uaf
```

The harness used MCP stdio JSON-RPC:

```text
initialize
notifications/initialized
tools/call index_folder
tools/call health_compact
tools/call search_files {"query":"scanner.c","limit":10}
tools/call search_files {"query":"scanner.c","limit":10,"include_vendor":true}
tools/call search_files {"query":"tools.rs","limit":10,"rank_by":"path+cochange","anchor_path":"src/protocol/tools.rs"}
tools/call get_file_context {"path":"src/protocol/tools.rs"}
tools/call search_text {"query":"fn $NAME($$$) { $$$ }","structural":true,"path_prefix":"src/protocol","limit":5}
tools/call search_symbols {"query":"SearchFilesInput","kind":"struct","limit":5}
tools/call search_symbols {"query":"scanner","include_vendor":true,"limit":10}
```

Exact stdout from the smoke harness follows. The harness intentionally excerpts individual long tool results after 1600 characters; the assertions used the full returned text before excerpting.

```text
INSTALLED_RUNTIME_SMOKE
cwd: C:\AI_STUFF\PROGRAMMING\symforge
SYMFORGE_HOME: C:\Users\poslj\AppData\Local\Temp\symforge-smoke-wk6a0uaf
COMMAND: cmd /d /c where symforge
C:\Users\poslj\bin\symforge.cmd
C:\Program Files\nodejs\symforge
C:\Program Files\nodejs\symforge.cmd
COMMAND: cmd /d /c symforge --version
symforge 7.9.2
initialize_error: False

---
CHECK: index_folder
COMMAND: tools/call index_folder {"path": "C:\\AI_STUFF\\PROGRAMMING\\symforge"}
ELAPSED_SEC: 1.055
RESULT:
Indexed 374 files, 12350 symbols.

---
CHECK: health_compact
COMMAND: tools/call health_compact {}
ELAPSED_SEC: 0.000
RESULT:
Status: Ready | Files: 374 indexed (368 parsed, 6 partial, 0 failed) | Symbols: 12350 | Loaded: 282ms
Watcher: active/idle | Stale-mutation rejections: 0 | Admission tiers: 374/0/0 (indexed/metadata/skipped)
Parse issues: 6 partial, 0 failed; use full health for path lists
Git temporal: computing... | Worktree misuse/hour: 0

---
CHECK: search_files scanner.c default
COMMAND: tools/call search_files {"limit": 10, "query": "scanner.c"}
ELAPSED_SEC: 0.001
RESULT:
No indexed source files matching 'scanner.c'

filters: vendor filtered; personal tooling filtered

1 vendor/personal-tooling path candidate hidden by default; pass include_vendor=true or include_personal_tooling=true to include suppressed noise.

---
CHECK: search_files scanner.c include_vendor
COMMAND: tools/call search_files {"include_vendor": true, "limit": 10, "query": "scanner.c"}
ELAPSED_SEC: 0.000
RESULT:
Match type: constrained (tiered path relevance)
Source authority: current index
Parse state: parsed
Completeness: full for current scope
Scope: ranked indexed file paths; filters: vendor included; personal tooling filtered
Evidence: paths `vendor/tree-sitter-scss/src/scanner.c`

1 matching file
-- Basename matches --
  vendor/tree-sitter-scss/src/scanner.c  [0.90]

---
CHECK: search_files path+cochange fallback
COMMAND: tools/call search_files {"anchor_path": "src/protocol/tools.rs", "limit": 10, "query": "tools.rs", "rank_by": "path+cochange"}
ELAPSED_SEC: 0.001
RESULT:
Match type: constrained (tiered path relevance)
Source authority: current index + optional coupling store
Parse state: parsed
Completeness: full for current scope
Scope: ranked indexed file paths; filters: vendor filtered; personal tooling filtered
Evidence: paths `src/protocol/tools.rs`

1 matching file
-- Basename matches --
  src/protocol/tools.rs  [0.90]

Co-change ranking inactive: no usable coupling-store evidence for `anchor_path=src/protocol/tools.rs`; fell back to path-only ranking.

---
CHECK: get_file_context large default
COMMAND: tools/call get_file_context {"path": "src/protocol/tools.rs"}
ELAPSED_SEC: 0.001
RESULT:
Match type: exact
Source authority: current index
Parse state: parsed
Completeness: budget-limited
Scope: path `src/protocol/tools.rs`; sections outline, imports
Evidence: file anchor `src/protocol/tools.rs`

Large file summary: default call included outline/imports only for 496 symbols and 8819 references. Omitted consumers, references, and git activity; request sections=["consumers"], sections=["references"], sections=["git"], or a larger max_tokens for more detail.

-- src/protocol/tools.rs (496 symbols, Rust) --
  fn         lenient_u32  L29-45
    enum       NumOrStr  L34-38
  fn         lenient_bool  L48-70
    enum       BoolOrStr  L53-57
  fn         lenient_bool_required  L72-74
  const      INCLUDE_TESTS_SECTION_MARKER  L76-76
  fn         encode_include_tests_marker  L78-88
  fn         include_tests_from_sections  L90-98
  fn         visible_sections  L100-116
  fn         add_include_tests_schema  L118-129
  fn         lenient_u32_required  L132-143
    enum       NumOrStr  L135-138
  fn         lenient_u64  L146-160
    enum       NumOrStr  L149-153
  fn         lenient_i64  L163-177
    enum       NumOrStr  L166-170
  fn         lenient_option_vec  L182-222
    enum       VecOrStr  L189-193
  fn         lenient_vec_required  L227-269
    enum       VecOrStr  L234-239
  struct     GetSymbolInput  L297-319
  struct     SymbolTarget  L325-341
  struct     SearchSymbolsInput  L345-379
  struct     SearchTextInput  L383-455
  struct     SearchFilesInput  L459-503
  struct     IndexFolderInput  L507-510
  struct     WhatChangedInput  L514-543
  struct     GetFileCo
...<truncated>

---
CHECK: search_text structural fn pattern
COMMAND: tools/call search_text {"limit": 5, "path_prefix": "src/protocol", "query": "fn $NAME($$$) { $$$ }", "structural": true}
ELAPSED_SEC: 0.061
RESULT:
Match type: structural (ast-grep)
Source authority: current index
Parse state: parsed
Completeness: full for current scope; 100+ noise-filtered match(es) suppressed
Scope: path prefix `src/protocol`; tests filtered; generated filtered; vendor filtered; personal tooling filtered
Evidence: line anchors `src/protocol/edit_hooks.rs:73`, `src/protocol/format.rs:2827`, `src/protocol/format/tests.rs:108`

5 matches in 3 files  [0.95]
src/protocol/edit_hooks.rs
  in fn after_edit_committed (lines 73-73):
    > 73: fn after_edit_committed(&self, _ctx: &EditContext, _resolved_path: &Path) {}  // $NAME=after_edit_committed
src/protocol/format.rs
  in fn append_budgeted_trace_section (lines 2827-2847):
    > 2827: fn append_budgeted_trace_section(  // $NAME=append_budgeted_trace_section
src/protocol/format/tests.rs
  in fn test_file_outline_header_shows_path_and_count (lines 108-120):
    > 108: fn test_file_outline_header_shows_path_and_count() {  // $NAME=test_file_outline_header_shows_path_a...
  in fn test_file_outline_symbol_line_with_kind_and_range (lines 123-134):
    > 123: fn test_file_outline_symbol_line_with_kind_and_range() {  // $NAME=test_file_outline_symbol_line_with_ki...
  in fn test_file_outline_depth_indentation (lines 137-156):
    > 137: fn test_file_outline_depth_indentation() {  // $NAME=test_file_outline_depth_indentation
Tip: inspect_match (deep-dive one hit) | get_file_context (file overview) | search_symbols (name-based lookup)

---
CHECK: search_symbols default filters
COMMAND: tools/call search_symbols {"kind": "struct", "limit": 5, "query": "SearchFilesInput"}
ELAPSED_SEC: 0.001
RESULT:
Match type: exact
Source authority: current index
Parse state: parsed
Completeness: full for current scope
Scope: repo-wide; tests filtered; generated filtered; vendor filtered; personal tooling filtered
Evidence: symbol anchors `src/protocol/tools.rs:459`

1 matches in 1 files
-- Exact matches --
  459: struct SearchFilesInput  (src/protocol/tools.rs)  [1.00]
Tip: get_symbol (body) | get_symbol_context (callers/callees) | get_file_context (file overview)

---
CHECK: search_symbols include_vendor scanner
COMMAND: tools/call search_symbols {"include_vendor": true, "limit": 10, "query": "scanner"}
ELAPSED_SEC: 0.002
RESULT:
Match type: heuristic (substring tier)
Source authority: current index
Parse state: partial
Completeness: full for current scope
Scope: repo-wide; tests filtered; generated filtered; vendor included; personal tooling filtered
Evidence: symbol anchors `vendor/tree-sitter-scss/src/parser.c:27633`, `.claude/harness.json:22`, `vendor/tree-sitter-scss/src/scanner.c:16`

8 matches in 3 files
-- Substring matches --
  27633: enum ts_external_scanner_symbol_identifiers  (vendor/tree-sitter-scss/src/parser.c)  [0.70]
  22: key features.intakeScanner  (.claude/harness.json)  [0.70]
  16: fn tree_sitter_scss_external_scanner_create  (vendor/tree-sitter-scss/src/scanner.c)  [0.70]
  32: fn tree_sitter_scss_external_scanner_deserialize  (vendor/tree-sitter-scss/src/scanner.c)  [0.70]
  18: fn tree_sitter_scss_external_scanner_destroy  (vendor/tree-sitter-scss/src/scanner.c)  [0.70]
  22: fn tree_sitter_scss_external_scanner_reset  (vendor/tree-sitter-scss/src/scanner.c)  [0.70]
  38: fn tree_sitter_scss_external_scanner_scan  (vendor/tree-sitter-scss/src/scanner.c)  [0.70]
  26: fn tree_sitter_scss_external_scanner_serialize  (vendor/tree-sitter-scss/src/scanner.c)  [0.70]
Tip: get_symbol (body) | get_symbol_context (callers/callees) | get_file_context (file overview)

---
STDERR:
<empty>

ASSERTIONS: PASS
```

## Assertions

```text
version == symforge 7.9.2
default scanner.c search excludes vendor/tree-sitter-scss/src/scanner.c
default scanner.c search discloses filters: vendor filtered; personal tooling filtered
include_vendor scanner.c search includes vendor/tree-sitter-scss/src/scanner.c
include_vendor scanner.c search discloses filters: vendor included
path+cochange fallback says co-change ranking is inactive and why
large get_file_context default returns large-file summary, budget-limited completeness, and omitted-section recovery
search_text structural reports Match type: structural (ast-grep)
search_text suppressed count is capped as 100+
search_symbols default output discloses vendor filtered
search_symbols include_vendor output discloses vendor included and returns scanner symbols
stderr is empty
```
