woods 2.0.0.beta3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +500 -420
- data/CONTRIBUTING.md +29 -17
- data/README.md +78 -178
- data/docs/AGENT_GUIDE.md +52 -11
- data/docs/AGENT_SETUP.md +34 -17
- data/docs/AUTOMATIC_MAINTENANCE.md +222 -0
- data/docs/BACKEND_MATRIX.md +18 -7
- data/docs/CLIENT_HOOKS.md +1 -1
- data/docs/CONFIGURATION_REFERENCE.md +105 -29
- data/docs/CONSOLE_MCP_SETUP.md +54 -9
- data/docs/DOCKER_SETUP.md +16 -1
- data/docs/EVALUATION.md +10 -4
- data/docs/EXTRACTOR_REFERENCE.md +23 -3
- data/docs/FAQ.md +14 -3
- data/docs/GETTING_STARTED.md +18 -17
- data/docs/INCREMENTAL_EXTRACTION.md +37 -8
- data/docs/INDEX_LAYOUT.md +2 -2
- data/docs/MCP_SERVERS.md +79 -7
- data/docs/MCP_TOOL_COOKBOOK.md +5 -5
- data/docs/MCP_WORKTREE_SETUP.md +55 -83
- data/docs/PUBLISHED_INDEX.md +17 -0
- data/docs/README.md +2 -1
- data/docs/RETRIEVAL_GUIDE.md +81 -13
- data/docs/SOURCE_FRESHNESS.md +1 -1
- data/docs/TOKEN_BENCHMARK.md +16 -10
- data/docs/TROUBLESHOOTING.md +142 -47
- data/docs/UPGRADING_TO_2.md +12 -6
- data/docs/WATCH_DAEMON.md +189 -24
- data/docs/WHY_WOODS.md +9 -5
- data/exe/woods-console +13 -11
- data/exe/woods-mcp-start +14 -9
- data/exe/woods-watch +5 -0
- data/lib/generators/woods/pgvector_generator.rb +8 -2
- data/lib/generators/woods/watch_generator.rb +53 -0
- data/lib/puma/plugin/woods.rb +10 -0
- data/lib/tasks/woods.rake +14 -0
- data/lib/woods/agent_configuration/applier.rb +5 -3
- data/lib/woods/agent_configuration/cli.rb +2 -2
- data/lib/woods/agent_configuration/layout.rb +13 -0
- data/lib/woods/cache/cache_middleware.rb +6 -0
- data/lib/woods/console/credential_scanner.rb +4 -3
- data/lib/woods/console/dispatch_pipeline.rb +7 -0
- data/lib/woods/console/embedded_executor.rb +31 -9
- data/lib/woods/console/sql_noise_stripper.rb +9 -7
- data/lib/woods/console/sql_table_scanner.rb +47 -7
- data/lib/woods/console/sql_validator.rb +49 -9
- data/lib/woods/console/sqlite_read_guard.rb +46 -0
- data/lib/woods/console/stdio_transport.rb +27 -0
- data/lib/woods/coordination/pipeline_lock.rb +3 -2
- data/lib/woods/embedding/indexer.rb +24 -14
- data/lib/woods/extractor.rb +70 -19
- data/lib/woods/extractors/declared_parent.rb +55 -0
- data/lib/woods/extractors/graphql_extractor.rb +2 -11
- data/lib/woods/extractors/lib_extractor.rb +10 -8
- data/lib/woods/extractors/mailer_extractor.rb +6 -10
- data/lib/woods/extractors/model_extractor.rb +1 -15
- data/lib/woods/extractors/poro_extractor.rb +10 -8
- data/lib/woods/extractors/shared_utility_methods.rb +22 -5
- data/lib/woods/git_command.rb +6 -7
- data/lib/woods/git_provenance.rb +4 -6
- data/lib/woods/mcp/bearer_auth.rb +2 -1
- data/lib/woods/mcp/bootstrapper.rb +20 -5
- data/lib/woods/mcp/config_resolver.rb +2 -1
- data/lib/woods/mcp/index_reader.rb +11 -2
- data/lib/woods/mcp/initialization_guidance.rb +1 -1
- data/lib/woods/mcp/renderers/markdown_renderer.rb +14 -8
- data/lib/woods/mcp/renderers/plain_renderer.rb +11 -7
- data/lib/woods/mcp/server.rb +63 -37
- data/lib/woods/mcp/tool_contract.rb +1 -1
- data/lib/woods/mcp/tool_response_renderer.rb +16 -0
- data/lib/woods/mcp/traversal_evidence_text.rb +1 -1
- data/lib/woods/mcp/traversal_response.rb +22 -0
- data/lib/woods/path_dispatcher.rb +6 -5
- data/lib/woods/published_index/typed_unit_reader.rb +40 -3
- data/lib/woods/published_index.rb +2 -2
- data/lib/woods/rake_helpers.rb +2 -12
- data/lib/woods/retrieval/corpus_status.rb +46 -0
- data/lib/woods/retrieval/lexical_assembler.rb +14 -3
- data/lib/woods/retrieval/lexical_index.rb +2 -1
- data/lib/woods/retriever.rb +19 -7
- data/lib/woods/session_tracer/file_store.rb +6 -1
- data/lib/woods/source_inputs/consumer_errors.rb +4 -0
- data/lib/woods/storage/local_corpus_stats.rb +32 -0
- data/lib/woods/storage/metadata_store.rb +20 -0
- data/lib/woods/storage/pgvector.rb +6 -2
- data/lib/woods/storage/vector_store.rb +10 -0
- data/lib/woods/temporal/json_snapshot_store.rb +35 -7
- data/lib/woods/version.rb +1 -1
- data/lib/woods/watch/child_environment.rb +30 -0
- data/lib/woods/watch/cli.rb +91 -0
- data/lib/woods/watch/daemon.rb +73 -11
- data/lib/woods/watch/event_stream.rb +70 -0
- data/lib/woods/watch/guardian.rb +142 -0
- data/lib/woods/watch/installation/layout.rb +70 -0
- data/lib/woods/watch/installation/options.rb +128 -0
- data/lib/woods/watch/installation/planner.rb +128 -0
- data/lib/woods/watch/installation/probe.rb +101 -0
- data/lib/woods/watch/installation/receipt.rb +77 -0
- data/lib/woods/watch/installation/recovery.rb +64 -0
- data/lib/woods/watch/installation/templates.rb +58 -0
- data/lib/woods/watch/installation.rb +56 -0
- data/lib/woods/watch/lifecycle.rb +182 -0
- data/lib/woods/watch/managed_child.rb +113 -0
- data/lib/woods/watch/managed_cleanup.rb +48 -0
- data/lib/woods/watch/managed_process.rb +144 -0
- data/lib/woods/watch/puma_adapter.rb +87 -0
- data/lib/woods/watch/puma_child.rb +66 -0
- data/lib/woods/watch/supervision_records.rb +95 -0
- data/lib/woods/watch/supervision_status.rb +104 -0
- data/lib/woods/watch/supervisor.rb +161 -0
- data/lib/woods/watch/supervisor_reporting.rb +46 -0
- data/plugin/.claude-plugin/plugin.json +1 -1
- data/plugin/hooks/woods-input-rules.sh +4 -4
- data/plugin/skills/woods-agent-enable/SKILL.md +7 -1
- data/plugin/skills/woods-diagnose/SKILL.md +134 -34
- data/plugin/skills/woods-investigate/SKILL.md +54 -15
- data/plugin/skills/woods-mcp-config/SKILL.md +38 -11
- data/plugin/skills/woods-setup/SKILL.md +72 -15
- metadata +38 -5
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Woods
|
|
4
|
+
module Watch
|
|
5
|
+
# Publication and retirement of one launcher's diagnostic records.
|
|
6
|
+
module SupervisorReporting
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def publish(state, reason, **details)
|
|
10
|
+
return unless state
|
|
11
|
+
|
|
12
|
+
reason ||= 'pending'
|
|
13
|
+
changed = @state != state || @reason != reason
|
|
14
|
+
@state = state
|
|
15
|
+
@reason = reason
|
|
16
|
+
@details = details
|
|
17
|
+
@logger.puts("[woods-watch] #{state}: #{reason || 'pending'} (attempt #{@attempts})") if changed
|
|
18
|
+
heartbeat(force: true)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def heartbeat(force: false)
|
|
22
|
+
return unless @status && heartbeat_due?(force)
|
|
23
|
+
|
|
24
|
+
@status.write(state: @state, reason: @reason, attempt: @attempt,
|
|
25
|
+
child_pid: @process&.alive? ? @protocol.child_pid : nil, **(@details || {}))
|
|
26
|
+
@heartbeat_at = monotonic
|
|
27
|
+
rescue SystemCallError, ArgumentError => e
|
|
28
|
+
@logger.puts("[woods-watch] cannot write supervision status (#{e.class})")
|
|
29
|
+
@heartbeat_at = monotonic
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def heartbeat_due?(force)
|
|
33
|
+
force || !@heartbeat_at || monotonic - @heartbeat_at >= 5
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def retire_status
|
|
37
|
+
@status&.write(state: 'stopped', reason: 'attempt_finished', attempt: @attempt, child_pid: nil)
|
|
38
|
+
rescue SystemCallError, ArgumentError => e
|
|
39
|
+
@logger.puts("[woods-watch] cannot retire supervision status (#{e.class})")
|
|
40
|
+
ensure
|
|
41
|
+
@status = nil
|
|
42
|
+
@heartbeat_at = nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "woods-plugin",
|
|
3
3
|
"description": "Woods user guides for Claude Code: set up, upgrade, configure MCP servers for, investigate codebases with, enable a repository's agents on, and diagnose the Woods Rails code-intelligence gem.",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.54",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "lost-in-the"
|
|
7
7
|
},
|
|
@@ -75,10 +75,6 @@ woods_input_action() {
|
|
|
75
75
|
case "$operation" in delete|move) printf full ;; *) printf incremental ;; esac
|
|
76
76
|
return
|
|
77
77
|
fi
|
|
78
|
-
if { { { [[ "$path" == *.rake ]]; } && { [[ "$path" == lib/tasks/* ]]; }; }; }; then
|
|
79
|
-
case "$operation" in delete|move) printf full ;; *) printf incremental ;; esac
|
|
80
|
-
return
|
|
81
|
-
fi
|
|
82
78
|
if { { { [[ "$path" == *.html.erb ]] || [[ "$path" == *.erb ]]; } && { [[ "$path" == app/views/* ]]; }; }; }; then
|
|
83
79
|
case "$operation" in delete|move) printf full ;; *) printf incremental ;; esac
|
|
84
80
|
return
|
|
@@ -115,6 +111,10 @@ woods_input_action() {
|
|
|
115
111
|
case "$operation" in delete|move) printf full ;; *) printf incremental ;; esac
|
|
116
112
|
return
|
|
117
113
|
fi
|
|
114
|
+
if { { { [[ "$path" == *.rake ]]; } && { [[ "$path" == lib/tasks/* ]]; }; }; }; then
|
|
115
|
+
case "$operation" in delete|move) printf full ;; *) printf incremental ;; esac
|
|
116
|
+
return
|
|
117
|
+
fi
|
|
118
118
|
if { [[ "$path" == config/routes.rb ]] || { { [[ "$path" == config/routes/* ]]; }; }; }; then
|
|
119
119
|
case "$operation" in delete|move) printf full ;; *) printf incremental ;; esac
|
|
120
120
|
return
|
|
@@ -9,7 +9,7 @@ Installing the gem gives one operator an index; this skill gives every future ag
|
|
|
9
9
|
|
|
10
10
|
## Managed configuration availability
|
|
11
11
|
|
|
12
|
-
`woods-agent-config` (#407) is
|
|
12
|
+
`woods-agent-config` (#407) is available in Woods `2.0.0.beta3`. First record the
|
|
13
13
|
installed version and test `bundle exec woods-agent-config --help` in the
|
|
14
14
|
selected application bundle. When supported, use its saved setup/update/remove
|
|
15
15
|
plan and explicit client/scope/root selection; apply the reviewed plan within
|
|
@@ -20,6 +20,12 @@ journals contain private configuration bytes. See the canonical
|
|
|
20
20
|
for host/Compose preflight, actual Claude file locations, conflict recovery,
|
|
21
21
|
and removal. Preserve manual setup for older installed versions.
|
|
22
22
|
|
|
23
|
+
For concurrent configuration operations, wait for the active operation to
|
|
24
|
+
finish and generate a fresh plan if the saved snapshots changed. Do not remove
|
|
25
|
+
its lock or overwrite the other application's entry. Coordination across
|
|
26
|
+
applications sharing user configuration is included in Woods `2.0.0`;
|
|
27
|
+
check the installed revision before relying on it.
|
|
28
|
+
|
|
23
29
|
## Preflight
|
|
24
30
|
|
|
25
31
|
Confirm Woods actually works before advertising it to every future session:
|
|
@@ -16,7 +16,7 @@ This skill describes the Woods 2.x line; the authoritative minimum version lives
|
|
|
16
16
|
|
|
17
17
|
## Managed configuration availability
|
|
18
18
|
|
|
19
|
-
`woods-agent-config` (#407) is
|
|
19
|
+
`woods-agent-config` (#407) is available in Woods `2.0.0.beta3`. First record the
|
|
20
20
|
installed version and test `bundle exec woods-agent-config --help` in the
|
|
21
21
|
selected application bundle. When supported, use its saved setup/update/remove
|
|
22
22
|
plan and explicit client/scope/root selection; apply the reviewed plan within
|
|
@@ -36,19 +36,63 @@ bundle exec rails runner 'Rails.application.eager_load!; puts "eager load ok"'
|
|
|
36
36
|
|
|
37
37
|
Use the application's normal Docker command and environment variables when applicable. Fix boot/eager-load failures before Woods.
|
|
38
38
|
|
|
39
|
+
### Watcher setup cannot find already installed Rails or dependencies
|
|
40
|
+
|
|
41
|
+
Compare normal task discovery with installer preflight in the same container and
|
|
42
|
+
application environment. Early Git builds of the watcher installer stripped
|
|
43
|
+
`BUNDLE_PATH` and `BUNDLE_APP_CONFIG`; Woods `2.0.0` includes the #540 fix.
|
|
44
|
+
Record the loaded revision and bundle configuration source before
|
|
45
|
+
reinstalling dependencies or writing a local bundle-path workaround. Follow the
|
|
46
|
+
[watcher installation guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#managed-development-startup).
|
|
47
|
+
|
|
48
|
+
### Puma cannot load the Woods plugin after switching branches
|
|
49
|
+
|
|
50
|
+
Early generated guards checked only whether Woods was activated. An older gem
|
|
51
|
+
can satisfy that check without providing `puma/plugin/woods.rb`. The #542 fix is
|
|
52
|
+
included in Woods `2.0.0`: verify the loaded revision, then use a supporting
|
|
53
|
+
bundle to preview and apply `bin/rails generate woods:watch --operation update
|
|
54
|
+
--mode puma`. The updated guard checks the active gem's require paths, so older
|
|
55
|
+
gems boot without a watcher. Repeating setup does not upgrade the guard. Follow
|
|
56
|
+
the [owned setup runbook](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#ownership-updates-and-removal);
|
|
57
|
+
do not change the owned directive or receipt manually.
|
|
58
|
+
|
|
39
59
|
### Watch repeatedly exits 75
|
|
40
60
|
|
|
61
|
+
First identify the lifecycle owner. The raw task deliberately exits 75; a bare
|
|
62
|
+
Foreman entry then stops all services. Managed `woods-watch`/Puma setup (#538)
|
|
63
|
+
is included in Woods `2.0.0`: verify installed executable/generator help and
|
|
64
|
+
loaded revision before proposing it. Supporting launchers retry boot failures,
|
|
65
|
+
reject idle TTL, and park ownership/protocol conflicts until owner restart.
|
|
66
|
+
Inspect separate supervision state rather than treating its parent PID as a
|
|
67
|
+
healthy daemon. Before the first resolved index path, use launcher logs.
|
|
68
|
+
Do not remove claims or kill PIDs from status to force takeover. See
|
|
69
|
+
[startup diagnosis](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#watcher-startup-or-planned-restart-fails).
|
|
70
|
+
|
|
41
71
|
Check the installed version's watch guide. Older releases, including
|
|
42
72
|
`2.0.0.beta2`, can rediscover the same restart-trigger paths on every boot. Stop
|
|
43
73
|
the supervisor, run one successful full extraction, then restart the standalone
|
|
44
74
|
watch task. Do not assume automatic startup reconciliation exists in that release.
|
|
45
75
|
For versions documenting environment-boot snapshots, confirm that the command is
|
|
46
|
-
|
|
76
|
+
the application's actual `rails woods:watch` or `rake woods:watch` entrypoint,
|
|
77
|
+
with no preceding `environment` task, and check
|
|
47
78
|
whether boot inputs keep changing during initialization or catch-up.
|
|
48
79
|
|
|
80
|
+
### Watch retains facts from an initializer deleted while stopped
|
|
81
|
+
|
|
82
|
+
Record the installed revision. In Woods `2.0.0`, startup preserves
|
|
83
|
+
registered deleted boot inputs as full-extraction obligations. On earlier builds,
|
|
84
|
+
stop watch, run a successful full extraction in a fresh process, then restart
|
|
85
|
+
standalone `woods:watch`. See the installed version's watch guide.
|
|
86
|
+
|
|
87
|
+
### A cleaned index directory still exists
|
|
88
|
+
|
|
89
|
+
In Woods `2.0.0`, `woods:clean` retains the output directory and
|
|
90
|
+
hidden extraction guard for concurrent writer coordination. Verify published
|
|
91
|
+
artifacts are gone; do not remove that guard while writers may be running.
|
|
92
|
+
|
|
49
93
|
### Watch misses edits under a shared directory alias
|
|
50
94
|
|
|
51
|
-
Check the installed version: logical alias preservation (#445) is
|
|
95
|
+
Check the installed version: logical alias preservation (#445) is available in Woods `2.0.0.beta3`.
|
|
52
96
|
Older polling/catch-up walkers could visit an irrelevant alias first and suppress
|
|
53
97
|
`app/models` when both point to the same physical directory. Compare the logical
|
|
54
98
|
path with the extraction input path; a running daemon alone does not prove coverage.
|
|
@@ -58,8 +102,8 @@ See the installed version's watch guide before assuming this behavior.
|
|
|
58
102
|
|
|
59
103
|
### Session trace reports ambiguous identity
|
|
60
104
|
|
|
61
|
-
The `session_trace` `ambiguous_identity` error (#213) is
|
|
62
|
-
|
|
105
|
+
The `session_trace` `ambiguous_identity` error (#213) is available in Woods `2.0.0.beta3`;
|
|
106
|
+
check the installed gem before expecting it. It names a dependency
|
|
63
107
|
with multiple published extraction types, so no partial session context is
|
|
64
108
|
returned. Use `depth: 0` for the timeline or inspect the named candidates with
|
|
65
109
|
explicit `lookup` types. Do not choose one by index order or suggest that a full
|
|
@@ -72,7 +116,7 @@ For a `same-type identifier collision`, inspect both named source files and the
|
|
|
72
116
|
Rails loader before suggesting source edits. Wrapper-nested class naming needs
|
|
73
117
|
Zeitwerk mode and Zeitwerk >= 2.6.9; an older loader or classic mode can produce
|
|
74
118
|
the collision even when the namespace wrappers are valid. The expanded error
|
|
75
|
-
guidance (B-149) is
|
|
119
|
+
guidance (B-149) is available in Woods `2.0.0.beta3`; check the installed version
|
|
76
120
|
first. Follow the [loader compatibility guidance](https://github.com/lost-in-the/woods/blob/main/docs/UPGRADING_TO_2.md#check-the-loader-for-wrapper-nested-classes).
|
|
77
121
|
|
|
78
122
|
```bash
|
|
@@ -82,7 +126,7 @@ bin/rails woods:stats
|
|
|
82
126
|
|
|
83
127
|
If missing or stale, run the narrow maintenance path justified by the evidence: `woods:incremental` for known file changes or `woods:extract` for first run, broad change, upgrade, or drift. Woods tasks understand `generation.json`; do not assume `manifest.json` is at the root.
|
|
84
128
|
|
|
85
|
-
Semantic graph validation (#413) is
|
|
129
|
+
Semantic graph validation (#413) is available in Woods `2.0.0.beta3`; verify the
|
|
86
130
|
installed gem before expecting these errors. Supporting versions check typed
|
|
87
131
|
unit identity, graph/index agreement and forward/reverse/file/type memberships
|
|
88
132
|
within one pinned generation. Preserve the failing generation and exact error,
|
|
@@ -95,7 +139,7 @@ an external name from an internal unit omitted everywhere. Follow the
|
|
|
95
139
|
|
|
96
140
|
If external targets such as `http_api` lose dependents after incremental
|
|
97
141
|
extraction, check whether the installed Woods version includes B-193.
|
|
98
|
-
The fix is
|
|
142
|
+
The fix is available in Woods `2.0.0.beta3`; installing this plugin does not upgrade the gem.
|
|
99
143
|
Affected indexes need one full extraction after upgrading to a fixed version.
|
|
100
144
|
Follow the [recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#external-dependency-targets-lose-dependents-after-incremental-extraction).
|
|
101
145
|
|
|
@@ -107,7 +151,7 @@ Confirm the installed release and filesystem support retention locks before
|
|
|
107
151
|
using the pinning examples; flat layouts need writers stopped for a consistent copy.
|
|
108
152
|
|
|
109
153
|
A host reader can report a container daemon dead because foreign-host records
|
|
110
|
-
are rejected by default. Foreign heartbeat trust (#321) is
|
|
154
|
+
are rejected by default. Foreign heartbeat trust (#321) is available in Woods `2.0.0.beta3`: first
|
|
111
155
|
check the installed Woods version and that version's release notes. Only for a
|
|
112
156
|
supporting version, offer `WOODS_WATCH_TRUST_FOREIGN_HOST=1` in every relevant
|
|
113
157
|
task/MCP reader and follow [cross-host liveness](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#cross-host-liveness).
|
|
@@ -115,12 +159,18 @@ Fresh `degraded` still means incremental work is needed; a fresh `running`
|
|
|
115
159
|
record can outlive a crashed foreign daemon by up to 15 minutes. Older versions
|
|
116
160
|
need their status check run in the daemon's own container.
|
|
117
161
|
|
|
118
|
-
Writer-version provenance (#323) is
|
|
119
|
-
release notes before expecting it. If `index.woods_version` exists, compare it
|
|
162
|
+
Writer-version provenance (#323) is available in Woods `2.0.0.beta3`: verify the installed
|
|
163
|
+
gem version's release notes before expecting it. If `index.woods_version` exists, compare it
|
|
120
164
|
with `server.version`; missing/null is unknown, not a failure. A validator
|
|
121
165
|
major-version warning calls for full extraction and upgrade review, while a match
|
|
122
166
|
does not certify retained units were migrated. See [writer provenance](https://github.com/lost-in-the/woods/blob/main/docs/PUBLISHED_INDEX.md#manifest-writer-provenance).
|
|
123
167
|
|
|
168
|
+
Included in Woods `2.0.0`: incremental/refresh handled source errors keep
|
|
169
|
+
the previous generation active and leave watch batches pending. Repair the
|
|
170
|
+
logged source error and retry the complete batch; see
|
|
171
|
+
[handled source errors](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md#handled-source-errors-and-retry).
|
|
172
|
+
Check the installed revision before relying on this behavior.
|
|
173
|
+
|
|
124
174
|
If a one-shot extraction raises `Could not publish generation`, the candidate
|
|
125
175
|
payload was written but never made visible; readers still serve the previous
|
|
126
176
|
complete generation. Fix the named filesystem, permission, space, or mount
|
|
@@ -139,12 +189,12 @@ tracks current source.
|
|
|
139
189
|
For volatile-dependency reports dominated by one target, compare the full
|
|
140
190
|
`stats.volatile_dependency_count` with the persisted array and use the
|
|
141
191
|
[ratio tuning guidance](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#pipeline-options).
|
|
142
|
-
The optional per-target cap (B-188) is
|
|
192
|
+
The optional per-target cap (B-188) is available in Woods `2.0.0.beta3`; check the
|
|
143
193
|
installed gem before suggesting `volatile_dependency_limit_per_target`.
|
|
144
194
|
Re-extract to publish configuration changes; the report remains informational.
|
|
145
195
|
|
|
146
196
|
For a shallow-checkout git-enrichment warning, the shallow guard (B-189) is
|
|
147
|
-
|
|
197
|
+
available in Woods `2.0.0.beta3`; check the installed version first. Fetch complete
|
|
148
198
|
history with `git fetch --unshallow` or `actions/checkout` `fetch-depth: 0`, then
|
|
149
199
|
run full extraction. Depth two only enables a two-commit diff; it does not
|
|
150
200
|
restore complete churn history. See the
|
|
@@ -152,24 +202,42 @@ restore complete churn history. See the
|
|
|
152
202
|
|
|
153
203
|
For `Git enrichment omitted: history could not be read completely`, first check
|
|
154
204
|
whether the installed Woods release documents the new streamed-history policy;
|
|
155
|
-
it is
|
|
205
|
+
it is available in Woods `2.0.0.beta3`. Supporting versions require Git 2.31 or newer.
|
|
156
206
|
Check `git --version` in the extraction container and repository/object-store
|
|
157
207
|
access with its `WOODS_GIT_DIR` setting. A failed history stream is discarded;
|
|
158
208
|
repair git access and run full extraction to refresh retained metadata. See the
|
|
159
209
|
[history contract](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#git-enrichment-history).
|
|
160
210
|
|
|
211
|
+
If per-unit Git metadata is absent, check `git --version` inside the extraction
|
|
212
|
+
process/container as well as repository access. Builds with #551 warn when Git
|
|
213
|
+
cannot execute and a repository is expected; older versions may be silent.
|
|
214
|
+
Source archives without a Git directory remain supported. `GIT_SHA` and
|
|
215
|
+
structural `ready` do not certify history availability. After repairing Git,
|
|
216
|
+
run full extraction; see the
|
|
217
|
+
[missing-executable diagnostic](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#git-executable-is-missing-from-the-extraction-environment).
|
|
218
|
+
|
|
219
|
+
For linked-worktree provenance/history mismatches, check the installed version's
|
|
220
|
+
`WOODS_GIT_DIR` support and compare the selected branch and exact SHA inside the
|
|
221
|
+
extraction environment. Mount the complete shared `.git` at its original path
|
|
222
|
+
with no override, or select `/mounted-common/worktrees/<id>` within a relocated
|
|
223
|
+
complete mount. Derive `<id>` from Git metadata, not the branch name. Selecting
|
|
224
|
+
the shared root uses the primary checkout's HEAD and also changes incremental
|
|
225
|
+
ranges. A commit alone may leave the source-file watcher idle; run full
|
|
226
|
+
extraction after repair or when current Git history is required. See the
|
|
227
|
+
[worktree mount guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#git-directory-mounts-for-linked-worktrees).
|
|
228
|
+
|
|
161
229
|
After a bundle change or removal of a dynamically defined job, incremental
|
|
162
230
|
extraction can retain stale runtime units. Use a fresh process with the updated
|
|
163
231
|
bundle for full extraction, then validate. For missing external gem paths,
|
|
164
232
|
first distinguish an upgraded bundle from a reader on a different host/mount.
|
|
165
|
-
The more explicit `woods:validate` bundle-update remedy (B-166) is
|
|
166
|
-
|
|
233
|
+
The more explicit `woods:validate` bundle-update remedy (B-166) is available in Woods
|
|
234
|
+
`2.0.0.beta3`; the full-extraction recovery works on older versions too.
|
|
167
235
|
See [runtime removals and bundle updates](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md#runtime-removals-and-bundle-updates).
|
|
168
236
|
|
|
169
237
|
### Export identity checks
|
|
170
238
|
|
|
171
|
-
For Notion or Unblocked exports, typed selection checks (#213) are
|
|
172
|
-
|
|
239
|
+
For Notion or Unblocked exports, typed selection checks (#213) are available in Woods
|
|
240
|
+
`2.0.0.beta3`; check the installed gem before expecting them. A missing or
|
|
173
241
|
mismatched export identity calls for index validation and a fresh extraction,
|
|
174
242
|
not a force flag. An `ambiguous export URI` means two types share an identifier
|
|
175
243
|
and source file: preserve existing documents and report the collision; do not
|
|
@@ -186,26 +254,35 @@ Compare the client config with the exact command, absolute `cwd`, bundle, and in
|
|
|
186
254
|
bundle exec woods-mcp-start ./tmp/woods
|
|
187
255
|
```
|
|
188
256
|
|
|
257
|
+
If startup says `Could not resolve a published Woods index` (included in Woods
|
|
258
|
+
`2.0.0`) or names a missing `manifest.json` on older versions, first check
|
|
259
|
+
the selected index path: an atomic index uses `generation.json` to locate its
|
|
260
|
+
payload manifest. The new headline does not change index validation or recovery.
|
|
261
|
+
Point at an existing index before suggesting a new extraction. Prefer the
|
|
262
|
+
explicit path above; `WOODS_DIR` is also supported. Woods `2.0.0` includes
|
|
263
|
+
`WOODS_OUTPUT` after those two choices, so verify the installed
|
|
264
|
+
version's configuration guide before relying on that fallback.
|
|
265
|
+
|
|
189
266
|
Then reconnect through the MCP client and call `woods_status`. Use client-native tool inspection after initialization. Expect 14 packaged Index tools, not all conditional schemas.
|
|
190
267
|
|
|
191
268
|
For Docker-only bundles, test the configured container command instead, for example `docker compose exec -T app bundle exec woods-mcp /app/tmp/woods`. Use the container path for a container process and a host path only for a host process.
|
|
192
269
|
|
|
193
270
|
For corrupt pipeline cooldown state, first confirm this is a custom server
|
|
194
271
|
with `pipeline_repair` registered; packaged `woods-mcp` does not wire it.
|
|
195
|
-
Recovery through `reset_cooldowns` (B-159) is
|
|
272
|
+
Recovery through `reset_cooldowns` (B-159) is available in Woods `2.0.0.beta3`.
|
|
196
273
|
Check the installed version before attempting it and follow the
|
|
197
274
|
[corrupt cooldown recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#corrupt-pipeline-cooldown-state).
|
|
198
275
|
|
|
199
276
|
## Deferred refresh hooks
|
|
200
277
|
|
|
201
|
-
Expanded hook coverage and `woods:hook_refresh` (#408) are
|
|
202
|
-
|
|
278
|
+
Expanded hook coverage and `woods:hook_refresh` (#408) are available in Woods
|
|
279
|
+
`2.0.0.beta3`. Verify the installed task through the configured host/container
|
|
203
280
|
command before diagnosing this plugin's queue. Read `<output>/hook.log` and
|
|
204
281
|
`hook-pending/`; status 75 means an active daemon deferred work, not that it was
|
|
205
282
|
consumed. Fix task availability, boot/publication failures or a stalled command,
|
|
206
283
|
then retry with the same output and command prefix. Preserve pending events.
|
|
207
284
|
For mkdir fallback locks, inspect the recorded owner PID before manual removal.
|
|
208
|
-
The concurrent dead-owner recovery fix is
|
|
285
|
+
The concurrent dead-owner recovery fix is included in plugin `2.3.36`.
|
|
209
286
|
If competing hooks leave an empty lock without a drain, preserve the queued
|
|
210
287
|
events and follow the canonical recovery guide below.
|
|
211
288
|
A Docker timeout does not prove the application process stopped. Prefer a
|
|
@@ -214,8 +291,8 @@ resident watcher for sustained edits and follow the
|
|
|
214
291
|
|
|
215
292
|
## Partial dependency answers
|
|
216
293
|
|
|
217
|
-
Traversal budgets (`max_nodes`/`max_edges`, #311) are
|
|
218
|
-
|
|
294
|
+
Traversal budgets (`max_nodes`/`max_edges`, #311) are available in Woods `2.0.0.beta3`.
|
|
295
|
+
Check the installed gem version and connected tool schema before
|
|
219
296
|
using them; installing this plugin does not upgrade the gem. On a supporting
|
|
220
297
|
server, `partial`/`partial_reason` means the walk stopped early, independently
|
|
221
298
|
of page truncation. Do not claim an exhaustive blast radius or treat empty
|
|
@@ -225,7 +302,19 @@ paging alone only visits the discovered prefix. See the
|
|
|
225
302
|
|
|
226
303
|
## 4. Check semantic retrieval
|
|
227
304
|
|
|
228
|
-
|
|
305
|
+
Do not treat structural `ready: true` or bootstrap `hydrated` as proof that
|
|
306
|
+
embeddings exist. Check the installed reader's capabilities: builds with #549
|
|
307
|
+
expose `woods_status.retriever.corpus`, including locally known vector and
|
|
308
|
+
metadata record counts by type. Missing fields or `null` counts mean unknown,
|
|
309
|
+
not zero. Counts include chunks and do not certify complete unit coverage.
|
|
310
|
+
When both stores are known empty, supporting readers return `empty_index` with
|
|
311
|
+
embed or explicit lexical-mode guidance. Follow the
|
|
312
|
+
[corpus diagnostic contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#semantic-corpus-diagnostics).
|
|
313
|
+
Older readers need direct embedding-artifact checks; installing this plugin
|
|
314
|
+
does not update the serving gem. Keep reader revision and index writer version
|
|
315
|
+
separate when comparing results.
|
|
316
|
+
|
|
317
|
+
Configured retrieval defaults (#446) are available in Woods `2.0.0.beta3`. For an installed
|
|
229
318
|
version that supports them, an omitted tool budget uses the serving retriever's
|
|
230
319
|
configured default; an explicit budget overrides it. Standalone MCP does not
|
|
231
320
|
inherit the host initializer's token setting from the embedding snapshot.
|
|
@@ -233,7 +322,7 @@ Do not tune relevance with similarity_threshold: it is inert and deprecated.
|
|
|
233
322
|
Use query/type/scope selection and inspect ranking evidence instead. See
|
|
234
323
|
[retrieval tuning](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#tuning).
|
|
235
324
|
|
|
236
|
-
Native embedding completeness checks (#442/#444) are
|
|
325
|
+
Native embedding completeness checks (#442/#444) are available in Woods `2.0.0.beta3`;
|
|
237
326
|
confirm the installed version first. If embedding reports `Embedding input
|
|
238
327
|
incomplete`, repair the named published extraction artifact or rebuild extraction
|
|
239
328
|
before retrying. Do not use `WOODS_ALLOW_PURGE=1` to bypass an integrity failure;
|
|
@@ -241,7 +330,7 @@ it only permits intentional mass deletion. Source-empty units deliberately retai
|
|
|
241
330
|
metadata without vectors. See the canonical
|
|
242
331
|
[input-integrity guide](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#input-integrity-and-source-empty-units).
|
|
243
332
|
|
|
244
|
-
Only diagnose this layer when structural tools work and `codebase_retrieve` fails. First check `woods_status.retriever.mode`. For lexical mode, validate the published extraction index and follow the capability check below. For semantic mode, check the configured provider/model/vector store, provider reachability, and whether `woods:embed` completed.
|
|
333
|
+
Only diagnose this layer when structural tools work and `codebase_retrieve` fails. If a no-provider message recommends only embeddings or `search`, check the lexical capability below: beta3 supports explicit `WOODS_RETRIEVAL_MODE=lexical` even though that error omits it. Put the setting in the MCP process environment and restart; never silently change retrieval modes. First check `woods_status.retriever.mode`. For lexical mode, validate the published extraction index and follow the capability check below. For semantic mode, check the configured provider/model/vector store, provider reachability, and whether `woods:embed` completed.
|
|
245
334
|
|
|
246
335
|
- OpenAI: verify the key exists without printing it.
|
|
247
336
|
- Ollama: verify the service and configured model locally.
|
|
@@ -252,7 +341,7 @@ Only diagnose this layer when structural tools work and `codebase_retrieve` fail
|
|
|
252
341
|
For metadata appearing in another index or worktree, compare `WOODS_OUTPUT`,
|
|
253
342
|
`config.output_dir`, and any explicit `metadata_store_options[:database]`.
|
|
254
343
|
The default SQLite path following `WOODS_OUTPUT` during embedding (B-156) is
|
|
255
|
-
|
|
344
|
+
available in Woods `2.0.0.beta3`; check the installed version before relying on it.
|
|
256
345
|
An explicit database path still wins. See the
|
|
257
346
|
[SQLite path contract](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#sqlite-metadata)
|
|
258
347
|
for isolation and upgrade steps.
|
|
@@ -261,15 +350,25 @@ for isolation and upgrade steps.
|
|
|
261
350
|
|
|
262
351
|
For repeated missing-token boot warnings on a stdio-only host, check whether
|
|
263
352
|
its installed version supports `console_mcp_http_enabled = false` before
|
|
264
|
-
suggesting it; this option is
|
|
353
|
+
suggesting it; this option is available in Woods `2.0.0.beta3`. The default
|
|
265
354
|
preserves HTTP enablement, so selecting stdio as a client alone does not
|
|
266
355
|
suppress HTTP token validation. Never disable authentication on an HTTP
|
|
267
356
|
endpoint to silence this warning.
|
|
268
357
|
|
|
269
358
|
Console failures are live Rails/config/security failures, not Index failures. Verify authorized environment, Rails boot, `WOODS_CONSOLE_CONFIG` or direct `cwd`, blocked-table policy, credentials, and stderr.
|
|
270
359
|
|
|
360
|
+
For stdio parse errors or response mismatches during tool calls, check for Rails
|
|
361
|
+
logs on stdout. Through Woods `2.0.0.beta4`, stdout is restored after boot;
|
|
362
|
+
configure the Console process's logger to use stderr or a file. Runtime stdout
|
|
363
|
+
isolation is included in Woods `2.0.0`: verify a patched installed revision
|
|
364
|
+
before relying on it. Prefer `bundle exec rake woods:console`; direct Rails
|
|
365
|
+
runner invocation cannot capture output already emitted during Rails boot.
|
|
366
|
+
See the [Console logging diagnosis](https://github.com/lost-in-the/woods/blob/main/docs/CONSOLE_MCP_SETUP.md#rails-logs-break-mcp-protocol).
|
|
367
|
+
|
|
271
368
|
For MySQL SQL refusals, inspect the executing session's `sql_mode` and the installed version's Console guide. Do not change quote modes to bypass a security refusal.
|
|
272
369
|
|
|
370
|
+
For SQLite SQL refusals on `2.0.0.beta4` or a reviewed revision containing its Console corrections, consult the installed Console guide for supported identifier and table-reference syntax. Simplify the query to supported syntax; never relax the blocked-table or function policy. These builds also check resolved default scopes and scan normalized response values. Confirm a patched gem is published before recommending it, and check the installed version’s canonical Console guide; do not infer release availability from this plugin.
|
|
371
|
+
|
|
273
372
|
Nine tools are normal. Eleven appear only with `console_embedded_read_tools`. Do not chase Tier 2/3 or `console_eval`; they do not register in supported packaged modes. Never work around redaction, credential scanning, SQL validation, or a block.
|
|
274
373
|
|
|
275
374
|
## Report
|
|
@@ -280,7 +379,7 @@ Canonical guide: [TROUBLESHOOTING.md](https://github.com/lost-in-the/woods/blob/
|
|
|
280
379
|
|
|
281
380
|
## Lexical retrieval capability check
|
|
282
381
|
|
|
283
|
-
|
|
382
|
+
Lexical retrieval is available from `2.0.0.beta3`. Before proposing it, verify the installed gem
|
|
284
383
|
exposes `Woods::Configuration#retrieval_mode` and its matching guide documents
|
|
285
384
|
`WOODS_RETRIEVAL_MODE`. Keep the installed-version preflight; do not infer support
|
|
286
385
|
from the plugin version or an unreleased checkout.
|
|
@@ -303,7 +402,7 @@ query. Scoping can hide relevant cross-boundary relationships, so broaden the
|
|
|
303
402
|
request deliberately when the task needs them. See the
|
|
304
403
|
[scope contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#explicit-package-and-source-path-scopes).
|
|
305
404
|
|
|
306
|
-
## Source-content freshness (
|
|
405
|
+
## Source-content freshness (Woods 2.0.0.beta3; #405)
|
|
307
406
|
|
|
308
407
|
Check installed-version support before using `woods-extract` or the optional
|
|
309
408
|
`woods_status.source_check` argument. With support, inspect
|
|
@@ -326,7 +425,7 @@ coordinates are not physical file offsets; unknown generation remains unknown.
|
|
|
326
425
|
Keep full-source access available. See the canonical
|
|
327
426
|
[evidence contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#compact-published-evidence-and-api-outlines).
|
|
328
427
|
|
|
329
|
-
## Explicit edit adapters (
|
|
428
|
+
## Explicit edit adapters (Woods 2.0.0.beta3; #409)
|
|
330
429
|
|
|
331
430
|
Check the installed gem exposes `woods:hook_refresh` before enabling hooks.
|
|
332
431
|
Claude's registered wrapper covers one documented edit path; OpenCode 1.18.27
|
|
@@ -341,7 +440,7 @@ user's setup request. Follow [client hooks](https://github.com/lost-in-the/woods
|
|
|
341
440
|
## Optional context hints
|
|
342
441
|
|
|
343
442
|
Check installed `bundle exec woods-hook-context --help` before enabling
|
|
344
|
-
`WOODS_HOOK_CONTEXT_ENABLED=1`; this capability is
|
|
443
|
+
`WOODS_HOOK_CONTEXT_ENABLED=1`; this capability is available in Woods `2.0.0.beta3` and the
|
|
345
444
|
plugin does not upgrade the gem. Context and refresh opt-ins are independent;
|
|
346
445
|
`WOODS_HOOKS_DISABLED=1` disables both. Native Claude context is synchronous and
|
|
347
446
|
bounded, with served-generation and pre-refresh/unknown labels. Verify candidate
|
|
@@ -352,7 +451,8 @@ for output/time limits, container root mapping and emitted-hint suppression.
|
|
|
352
451
|
|
|
353
452
|
### Obsidian destination conflicts
|
|
354
453
|
|
|
355
|
-
Destination ownership preflight (#441) is
|
|
454
|
+
Destination ownership preflight (#441) is available in Woods `2.0.0.beta3`; first check
|
|
455
|
+
the installed Woods version and
|
|
356
456
|
its matching guide. On versions with this check, `refusing <path>: unmanaged or modified destination`
|
|
357
457
|
means the export preserved a conflicting note, setting, or sidecar and skipped the stale-note sweep.
|
|
358
458
|
A `.woods-vault` sentinel or force-purge flag does not authorize overwriting it. Inspect and back up
|
|
@@ -10,13 +10,13 @@ Woods is runtime evidence: resolved routes, schema, associations, callbacks, inl
|
|
|
10
10
|
## Preflight
|
|
11
11
|
|
|
12
12
|
Supporting servers include concise MCP initialization/discovery guidance without
|
|
13
|
-
this plugin. That feature (#402) is
|
|
13
|
+
this plugin. That feature (#402) is available in Woods `2.0.0.beta3`; check the
|
|
14
14
|
installed server version, and do not require it from protocol `2024-11-05`.
|
|
15
15
|
Follow the [agent guide](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_GUIDE.md)
|
|
16
16
|
when instructions are absent. A registered tool does not establish retrieval
|
|
17
17
|
readiness or authorize maintenance or live Console access.
|
|
18
18
|
|
|
19
|
-
Call `woods_status` before relying on the index. Require a ready index with a current generation and non-zero counts for the types you need;
|
|
19
|
+
Call `woods_status` before relying on the index. Require a ready index with a current generation and non-zero counts for the types you need; verify the retrieval mode and its data before using `codebase_retrieve` (see Conceptual questions below). If status is unhealthy or the generation predates the code under review, report that and ask the owner to run `woods:incremental` or `woods:extract` — do not present "not found" as proof the code does not exist.
|
|
20
20
|
|
|
21
21
|
## The default loop
|
|
22
22
|
|
|
@@ -31,9 +31,9 @@ Identifiers are namespaced and typed; never invent one from a filename when `sea
|
|
|
31
31
|
|
|
32
32
|
- **Code review / change impact**: `lookup` the changed unit, then `dependents` at depth 1 before going deeper. Group results by relationship type and layer; report direct dependents separately from inferred downstream impact. A graph edge is not test coverage — select tests from mappings and repository search.
|
|
33
33
|
- **Audit / architecture assessment**: `graph_analysis` for orphans, dead ends, hubs, cycles, bridges, cross-database edges, volatile dependencies, and undeclared package edges; `domain_clusters` for architectural domains; `pagerank` for high-impact units worth reading first.
|
|
34
|
-
- **Investigating behavior / debugging**: `
|
|
34
|
+
- **Investigating behavior / debugging**: find the exact indexed unit with `search` and `lookup`, then use `trace_flow` with `UnitIdentifier` or `UnitIdentifier#method` (for example, `CheckoutService#order`). Bare `order` names a unit, potentially a factory, rather than locating an application method. Receiverless local calls may remain unexpanded; inspect their source or trace the owning unit's method explicitly. Flow output is not proof of runtime execution or exhaustive call coverage. See the [flow workflow](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_GUIDE.md#trace-a-feature-flow).
|
|
35
35
|
- **Onboarding**: `structure` for the codebase overview, `lookup` and `dependencies`/`dependents` for a unit's neighborhood, and `domain_clusters` for the domain map, then the default loop on the units that matter.
|
|
36
|
-
- **Conceptual questions**: `codebase_retrieve`
|
|
36
|
+
- **Conceptual questions**: check retrieval mode and data before `codebase_retrieve`; structural `ready` alone does not establish semantic availability. On readers supporting #549, inspect `retriever.corpus`; missing or unknown counts require checking embedding artifacts. Govern with `budget` (never `limit`), then verify key units with `lookup`.
|
|
37
37
|
|
|
38
38
|
## Boundaries
|
|
39
39
|
|
|
@@ -41,7 +41,7 @@ The normal packaged Index Server registers 14 tools; conditional schemas registe
|
|
|
41
41
|
|
|
42
42
|
## Partial search answers
|
|
43
43
|
|
|
44
|
-
Search completeness (#410) is
|
|
44
|
+
Search completeness (#410) is available in Woods `2.0.0.beta3`. Verify the installed
|
|
45
45
|
server version and response before relying on it; this plugin does not upgrade
|
|
46
46
|
the gem. On supporting versions, `result_count` counts returned rows, while
|
|
47
47
|
`completeness.reason: exhausted` establishes an exact total for the requested
|
|
@@ -52,10 +52,33 @@ Artifact errors have unknown completeness. Missing metadata on older servers,
|
|
|
52
52
|
a full page, and an empty partial result never establish exhaustive absence.
|
|
53
53
|
See the [search contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#search-completeness).
|
|
54
54
|
|
|
55
|
+
## Graph coverage
|
|
56
|
+
|
|
57
|
+
Dependency tools report published relationships, not exhaustive source-reference
|
|
58
|
+
or call coverage. Selective method-body scanning can miss references to generic
|
|
59
|
+
PORO and library targets. No dependents or test-only dependents do not establish
|
|
60
|
+
absence of production callers; check source before making that claim.
|
|
61
|
+
|
|
62
|
+
The response `graph_coverage` notice, `total_is_exact` field, and human label
|
|
63
|
+
`witness types unambiguous` (#470/#471) are included in Woods `2.0.0`.
|
|
64
|
+
Verify the installed server version and actual response fields; this plugin does
|
|
65
|
+
not add them. Apply these limits to older servers even without the notice.
|
|
66
|
+
Supporting stdio and HTTP servers expose the paginated traversal payload in
|
|
67
|
+
`structuredContent.data` independently of the text renderer (#481, also
|
|
68
|
+
included in Woods `2.0.0`). Check the installed response; older default
|
|
69
|
+
responses may carry only text. Do not pass an unsupported `format` argument.
|
|
70
|
+
|
|
71
|
+
`total_is_exact: false` means a budget-limited prefix; a true value describes only
|
|
72
|
+
the requested root, depth, filters and published generation. Pagination alone
|
|
73
|
+
does not change exactness. On older responses inspect `partial` directly.
|
|
74
|
+
Treat partial `nodes_total` as a root-inclusive lower bound, including on the
|
|
75
|
+
last page, an empty page or an unpaged answer. See the
|
|
76
|
+
[coverage contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#dependency-graph-coverage).
|
|
77
|
+
|
|
55
78
|
## Partial dependency answers
|
|
56
79
|
|
|
57
|
-
Traversal budgets (`max_nodes`/`max_edges`, #311) are
|
|
58
|
-
|
|
80
|
+
Traversal budgets (`max_nodes`/`max_edges`, #311) are available in Woods `2.0.0.beta3`.
|
|
81
|
+
Check the installed gem version and connected tool schema before
|
|
59
82
|
using them; installing this plugin does not upgrade the gem. On a supporting
|
|
60
83
|
server, `partial`/`partial_reason` means the walk stopped early, independently
|
|
61
84
|
of page truncation. Do not claim an exhaustive blast radius or treat empty
|
|
@@ -65,25 +88,38 @@ paging alone only visits the discovered prefix. See the
|
|
|
65
88
|
|
|
66
89
|
## Explain recorded relationships
|
|
67
90
|
|
|
68
|
-
`explain: true` on `dependencies`/`dependents` (#414) is
|
|
69
|
-
|
|
91
|
+
`explain: true` on `dependencies`/`dependents` (#414) is available in Woods `2.0.0.beta3`.
|
|
92
|
+
Verify the installed gem and connected tool schema before using it;
|
|
70
93
|
installing this plugin does not add server capabilities. Supporting servers
|
|
71
94
|
preserve original source-to-target direction and labels in both traversal
|
|
72
95
|
modes. Follow shared `parent`/`edge_id` witnesses, distinguish direct records
|
|
73
96
|
from transitive inferred impact, and treat `context: true` ancestors as page
|
|
74
97
|
context. Null attributes and candidate type ambiguities remain unknown;
|
|
75
|
-
`typed_path_complete: false` never establishes a uniquely typed path
|
|
98
|
+
`typed_path_complete: false` never establishes a uniquely typed path; true means
|
|
99
|
+
only that witness identities have unambiguous types, not complete source coverage.
|
|
100
|
+
Budget
|
|
76
101
|
cutoffs still apply. Verify important conclusions in source and tests, since
|
|
77
102
|
recorded reachability does not establish observed execution. See the
|
|
78
103
|
[explanation contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#traversal-explanations).
|
|
79
104
|
|
|
105
|
+
## Graph-analysis pages
|
|
106
|
+
|
|
107
|
+
Pass explicit `limit` and `offset` when paging `graph_analysis`. Enforcing the
|
|
108
|
+
advertised default of 20 rows per section and preserving total/offset on last
|
|
109
|
+
and empty pages (#519) are included in Woods `2.0.0`; check the installed
|
|
110
|
+
response rather than inferring support from the plugin version. On supporting
|
|
111
|
+
servers, read `<section>_total` and `<section>_offset` in JSON, or the human
|
|
112
|
+
pagination notice. An empty later page does not mean no findings. Totals count
|
|
113
|
+
the published report array, which may already be bounded during extraction.
|
|
114
|
+
See the [page contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#graph-analysis-pages).
|
|
115
|
+
|
|
80
116
|
## Volatile dependency reports
|
|
81
117
|
|
|
82
118
|
Read `stats.volatile_dependency_count` before judging the top-20 array: it
|
|
83
119
|
counts all qualifying edges. A frequently changed dependency can occupy most
|
|
84
120
|
rows. Use the installed version's ratio tuning guidance; the optional
|
|
85
|
-
`volatile_dependency_limit_per_target` setting (B-188) is
|
|
86
|
-
2.0.0.
|
|
121
|
+
`volatile_dependency_limit_per_target` setting (B-188) is available in Woods
|
|
122
|
+
`2.0.0.beta3`, so verify gem support before recommending it. Supporting versions
|
|
87
123
|
can cap each typed target before selecting the global top 20 and expose the
|
|
88
124
|
cap plus `volatile_dependency_reported_count` in stats. Re-extract after
|
|
89
125
|
configuration changes. Treat the report as candidates for source review, never
|
|
@@ -104,8 +140,11 @@ exposes `Woods::Configuration#retrieval_mode` and its matching guide documents
|
|
|
104
140
|
from the plugin version or an unreleased checkout.
|
|
105
141
|
|
|
106
142
|
When status reports lexical mode, use the matching fields/terms as discovery
|
|
107
|
-
evidence and verify key units with `lookup`.
|
|
108
|
-
|
|
143
|
+
evidence and verify key units with `lookup`. At most 20 eligible matching
|
|
144
|
+
candidates are considered; fewer source entries may fit the budget. This is not
|
|
145
|
+
exhaustive, and no lexical match does not establish absence. When the installed
|
|
146
|
+
server reports considered/included counts, compare them; older versions may
|
|
147
|
+
only describe the shortlist limit. Continue using `budget`, not `limit`.
|
|
109
148
|
See the [retrieval guide](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#embedding-free-lexical-retrieval)
|
|
110
149
|
for the supported contract, checked against the installed gem version.
|
|
111
150
|
|
|
@@ -135,7 +174,7 @@ Keep full-source access available. See the canonical
|
|
|
135
174
|
## Optional context hints
|
|
136
175
|
|
|
137
176
|
Check installed `bundle exec woods-hook-context --help` before enabling
|
|
138
|
-
`WOODS_HOOK_CONTEXT_ENABLED=1`; this capability is
|
|
177
|
+
`WOODS_HOOK_CONTEXT_ENABLED=1`; this capability is available in Woods `2.0.0.beta3` and the
|
|
139
178
|
plugin does not upgrade the gem. Context and refresh opt-ins are independent;
|
|
140
179
|
`WOODS_HOOKS_DISABLED=1` disables both. Native Claude context is synchronous and
|
|
141
180
|
bounded, with served-generation and pre-refresh/unknown labels. Verify candidate
|