woods 2.0.0.beta2 → 2.0.0.beta4
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 +339 -1
- data/CONTRIBUTING.md +188 -12
- data/README.md +93 -174
- data/SECURITY.md +9 -6
- data/docs/AGENT_GUIDE.md +109 -8
- data/docs/AGENT_SETUP.md +98 -7
- data/docs/BACKEND_MATRIX.md +25 -0
- data/docs/CLIENT_HOOKS.md +111 -0
- data/docs/CONFIGURATION_REFERENCE.md +267 -16
- data/docs/CONSOLE_MCP_SETUP.md +80 -7
- data/docs/DOCKER_SETUP.md +22 -3
- data/docs/EVALUATION.md +464 -1
- data/docs/EXTRACTOR_REFERENCE.md +45 -6
- data/docs/FAQ.md +11 -12
- data/docs/GETTING_STARTED.md +17 -5
- data/docs/INCREMENTAL_EXTRACTION.md +147 -7
- data/docs/INDEX_LAYOUT.md +382 -0
- data/docs/INTERNALS.md +7 -2
- data/docs/MCP_SERVERS.md +276 -5
- data/docs/MCP_TOOL_COOKBOOK.md +37 -22
- data/docs/MCP_WORKTREE_SETUP.md +43 -83
- data/docs/NOTION_INTEGRATION.md +13 -0
- data/docs/OBSIDIAN_INTEGRATION.md +57 -9
- data/docs/PUBLISHED_INDEX.md +72 -0
- data/docs/README.md +7 -0
- data/docs/RETRIEVAL_GUIDE.md +273 -12
- data/docs/RUNTIME_TRACING.md +71 -0
- data/docs/SOURCE_FRESHNESS.md +143 -0
- data/docs/TROUBLESHOOTING.md +129 -18
- data/docs/UNBLOCKED_INTEGRATION.md +25 -0
- data/docs/UPGRADING_TO_2.md +48 -22
- data/docs/WATCH_DAEMON.md +277 -67
- data/exe/woods-agent-config +6 -0
- data/exe/woods-extract +5 -0
- data/exe/woods-hook-context +6 -0
- data/exe/woods-mcp-start +14 -9
- data/lib/generators/woods/pgvector_generator.rb +8 -2
- data/lib/generators/woods/templates/woods.rb.tt +1 -3
- data/lib/tasks/woods.rake +47 -397
- data/lib/woods/agent_configuration/applier.rb +135 -0
- data/lib/woods/agent_configuration/cli.rb +101 -0
- data/lib/woods/agent_configuration/cli_options.rb +29 -0
- data/lib/woods/agent_configuration/document.rb +105 -0
- data/lib/woods/agent_configuration/error.rb +7 -0
- data/lib/woods/agent_configuration/launcher.rb +75 -0
- data/lib/woods/agent_configuration/layout.rb +72 -0
- data/lib/woods/agent_configuration/managed_section.rb +62 -0
- data/lib/woods/agent_configuration/plan.rb +98 -0
- data/lib/woods/agent_configuration/plan_diff.rb +38 -0
- data/lib/woods/agent_configuration/planned_files.rb +61 -0
- data/lib/woods/agent_configuration/planner.rb +63 -0
- data/lib/woods/agent_configuration/planner_validation.rb +77 -0
- data/lib/woods/agent_configuration/preflight.rb +100 -0
- data/lib/woods/agent_configuration/recovery.rb +49 -0
- data/lib/woods/ast/node.rb +2 -0
- data/lib/woods/ast/parser.rb +38 -5
- data/lib/woods/builder.rb +21 -5
- data/lib/woods/cache/cache_middleware.rb +28 -7
- data/lib/woods/cache/cache_store.rb +4 -5
- data/lib/woods/change_set.rb +5 -4
- data/lib/woods/console/credential_index.rb +20 -2
- data/lib/woods/console/credential_scanner.rb +18 -17
- data/lib/woods/console/credential_scanner_registry.rb +36 -0
- data/lib/woods/console/dispatch_pipeline.rb +7 -0
- data/lib/woods/console/embedded_executor.rb +32 -10
- data/lib/woods/console/encrypted_credential_snapshot.rb +16 -0
- data/lib/woods/console/rack_middleware.rb +22 -13
- data/lib/woods/console/server.rb +18 -16
- 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/coordination/pipeline_lock.rb +3 -2
- data/lib/woods/dependency_graph.rb +65 -13
- data/lib/woods/embedding/corpus.rb +94 -0
- data/lib/woods/embedding/indexer.rb +114 -60
- data/lib/woods/embedding/openai.rb +17 -6
- data/lib/woods/evaluation/ablation_executor.rb +6 -1
- data/lib/woods/evaluation/ablation_timed_executor.rb +22 -4
- data/lib/woods/export/typed_reader.rb +56 -0
- data/lib/woods/extractor.rb +277 -149
- data/lib/woods/extractors/action_cable_extractor.rb +3 -1
- data/lib/woods/extractors/behavioral_profile.rb +9 -7
- data/lib/woods/extractors/caching_extractor.rb +3 -1
- data/lib/woods/extractors/concern_extractor.rb +64 -6
- data/lib/woods/extractors/configuration_extractor.rb +7 -3
- data/lib/woods/extractors/controller_extractor.rb +13 -4
- data/lib/woods/extractors/database_view_extractor.rb +3 -1
- data/lib/woods/extractors/declared_parent.rb +55 -0
- data/lib/woods/extractors/decorator_extractor.rb +3 -1
- data/lib/woods/extractors/engine_extractor.rb +3 -1
- data/lib/woods/extractors/event_extractor.rb +4 -2
- data/lib/woods/extractors/factory_extractor.rb +3 -1
- data/lib/woods/extractors/graphql_extractor.rb +10 -13
- data/lib/woods/extractors/i18n_extractor.rb +3 -1
- data/lib/woods/extractors/job_extractor.rb +6 -19
- data/lib/woods/extractors/lib_extractor.rb +13 -9
- data/lib/woods/extractors/mailer_extractor.rb +26 -15
- data/lib/woods/extractors/manager_extractor.rb +3 -1
- data/lib/woods/extractors/method_parameters.rb +53 -0
- data/lib/woods/extractors/middleware_argument.rb +65 -0
- data/lib/woods/extractors/middleware_extractor.rb +9 -3
- data/lib/woods/extractors/migration_extractor.rb +3 -1
- data/lib/woods/extractors/model_extractor.rb +26 -34
- data/lib/woods/extractors/package_extractor.rb +24 -4
- data/lib/woods/extractors/phlex_extractor.rb +3 -1
- data/lib/woods/extractors/policy_extractor.rb +3 -1
- data/lib/woods/extractors/poro_extractor.rb +13 -9
- data/lib/woods/extractors/pundit_extractor.rb +3 -1
- data/lib/woods/extractors/rails_source_extractor.rb +4 -2
- data/lib/woods/extractors/rake_task_extractor.rb +4 -2
- data/lib/woods/extractors/route_extractor.rb +3 -1
- data/lib/woods/extractors/route_helper_resolver.rb +10 -33
- data/lib/woods/extractors/scheduled_job_extractor.rb +41 -15
- data/lib/woods/extractors/serializer_extractor.rb +4 -2
- data/lib/woods/extractors/service_extractor.rb +3 -1
- data/lib/woods/extractors/shared_dependency_scanner.rb +2 -2
- data/lib/woods/extractors/shared_utility_methods.rb +48 -19
- data/lib/woods/extractors/source_nesting.rb +1 -1
- data/lib/woods/extractors/state_machine_extractor.rb +3 -1
- data/lib/woods/extractors/test_mapping_extractor.rb +3 -1
- data/lib/woods/extractors/validator_extractor.rb +3 -1
- data/lib/woods/extractors/view_component_extractor.rb +3 -1
- data/lib/woods/extractors/view_template_extractor.rb +3 -1
- data/lib/woods/gem_mapper.rb +2 -0
- data/lib/woods/git_history.rb +116 -0
- data/lib/woods/graph_analyzer.rb +35 -6
- data/lib/woods/hooks/context_cli.rb +54 -0
- data/lib/woods/hooks/context_event.rb +88 -0
- data/lib/woods/hooks/context_hint.rb +73 -0
- data/lib/woods/hooks/context_impact.rb +77 -0
- data/lib/woods/hooks/context_output.rb +47 -0
- data/lib/woods/hooks/context_state.rb +102 -0
- data/lib/woods/hooks/refresh.rb +79 -0
- data/lib/woods/hooks/rule_projection.rb +78 -0
- data/lib/woods/input_rules.rb +19 -0
- data/lib/woods/mcp/bearer_auth.rb +22 -13
- data/lib/woods/mcp/bootstrapper.rb +79 -4
- data/lib/woods/mcp/config_resolver.rb +2 -1
- data/lib/woods/mcp/index_reader.rb +334 -162
- data/lib/woods/mcp/initialization_guidance.rb +27 -0
- data/lib/woods/mcp/origin_guard.rb +17 -9
- data/lib/woods/mcp/published_lexical_retriever.rb +115 -0
- data/lib/woods/mcp/renderers/markdown_renderer.rb +22 -9
- data/lib/woods/mcp/renderers/plain_renderer.rb +18 -8
- data/lib/woods/mcp/search_results.rb +74 -0
- data/lib/woods/mcp/server.rb +178 -63
- data/lib/woods/mcp/tool_contract.rb +3 -1
- data/lib/woods/mcp/tool_response_renderer.rb +41 -0
- data/lib/woods/mcp/traversal_evidence.rb +113 -0
- data/lib/woods/mcp/traversal_evidence_index.rb +100 -0
- data/lib/woods/mcp/traversal_evidence_page.rb +41 -0
- data/lib/woods/mcp/traversal_evidence_text.rb +52 -0
- data/lib/woods/mcp/traversal_response.rb +22 -0
- data/lib/woods/notion/exporter.rb +56 -17
- data/lib/woods/obsidian/destination_plan.rb +98 -0
- data/lib/woods/obsidian/name_mapper.rb +19 -3
- data/lib/woods/obsidian/note_builder.rb +19 -10
- data/lib/woods/obsidian/vault_exporter.rb +88 -32
- data/lib/woods/operator/pipeline_guard.rb +18 -13
- data/lib/woods/path_dispatcher.rb +13 -6
- data/lib/woods/payload_store.rb +27 -26
- data/lib/woods/published_index/typed_unit_reader.rb +40 -3
- data/lib/woods/published_index.rb +2 -2
- data/lib/woods/railtie.rb +3 -3
- data/lib/woods/railtie_support.rb +12 -12
- data/lib/woods/rake_helpers.rb +382 -0
- data/lib/woods/resilience/graph_invariant_validator/membership_checks.rb +71 -0
- data/lib/woods/resilience/graph_invariant_validator/node_checks.rb +61 -0
- data/lib/woods/resilience/graph_invariant_validator/reverse_relationship_checks.rb +46 -0
- data/lib/woods/resilience/graph_invariant_validator.rb +119 -0
- data/lib/woods/resilience/index_validator/graph_checks.rb +80 -0
- data/lib/woods/resilience/index_validator.rb +112 -23
- data/lib/woods/retrieval/context_assembler.rb +50 -15
- data/lib/woods/retrieval/lexical_assembler.rb +84 -0
- data/lib/woods/retrieval/lexical_index.rb +120 -0
- data/lib/woods/retrieval/ranker.rb +4 -2
- data/lib/woods/retrieval/scope.rb +108 -0
- data/lib/woods/retrieval/scoped_graph_store.rb +32 -0
- data/lib/woods/retrieval/scoped_vector_store.rb +55 -0
- data/lib/woods/retrieval/search_executor.rb +86 -27
- data/lib/woods/retrieval/source_evidence.rb +200 -0
- data/lib/woods/retriever.rb +98 -22
- data/lib/woods/ruby_analyzer/trace_enricher.rb +77 -38
- data/lib/woods/session_tracer/file_store.rb +6 -1
- data/lib/woods/session_tracer/middleware.rb +10 -12
- data/lib/woods/session_tracer/redis_store.rb +22 -6
- data/lib/woods/session_tracer/session_flow_assembler.rb +23 -17
- data/lib/woods/session_tracer/solid_cache_coordination.rb +6 -4
- data/lib/woods/session_tracer/unit_resolver.rb +63 -0
- data/lib/woods/source_inputs/consumer_errors.rb +31 -0
- data/lib/woods/source_inputs/handoff.rb +102 -0
- data/lib/woods/source_inputs/launcher.rb +157 -0
- data/lib/woods/source_inputs/manifest.rb +124 -0
- data/lib/woods/source_inputs/private_key.rb +55 -0
- data/lib/woods/source_inputs/scanner.rb +171 -0
- data/lib/woods/source_inputs/scopes.rb +71 -0
- data/lib/woods/source_inputs/session.rb +214 -0
- data/lib/woods/source_inputs/status.rb +84 -0
- data/lib/woods/source_inputs/verifier.rb +107 -0
- data/lib/woods/storage/metadata_store.rb +25 -25
- data/lib/woods/storage/pgvector.rb +35 -10
- data/lib/woods/storage/qdrant.rb +17 -7
- data/lib/woods/storage/vector_store.rb +18 -6
- data/lib/woods/tasks.rb +3 -2
- data/lib/woods/temporal/json_snapshot_store.rb +58 -9
- data/lib/woods/unblocked/exporter.rb +59 -70
- data/lib/woods/version.rb +1 -1
- data/lib/woods/watch/boot_snapshot.rb +52 -0
- data/lib/woods/watch/daemon.rb +154 -32
- data/lib/woods/watch/listen_watcher.rb +4 -0
- data/lib/woods/watch/polling_watcher.rb +5 -1
- data/lib/woods/watch/status.rb +20 -15
- data/lib/woods/watch/tree_scan.rb +21 -13
- data/lib/woods/watch/watcher.rb +4 -1
- data/lib/woods.rb +50 -11
- data/plugin/.claude-plugin/plugin.json +1 -1
- data/plugin/hooks/adapters/normalize.jq +15 -0
- data/plugin/hooks/adapters/normalize.rb +63 -0
- data/plugin/hooks/hooks.json +20 -0
- data/plugin/hooks/woods-context.sh +50 -0
- data/plugin/hooks/woods-input-rules.sh +159 -0
- data/plugin/hooks/woods-opencode.mjs +65 -0
- data/plugin/hooks/woods-post-edit.sh +2 -225
- data/plugin/hooks/woods-refresh.sh +260 -0
- data/plugin/hooks/woods-session-start.sh +47 -55
- data/plugin/skills/woods-agent-enable/SKILL.md +19 -0
- data/plugin/skills/woods-diagnose/SKILL.md +319 -1
- data/plugin/skills/woods-investigate/SKILL.md +145 -0
- data/plugin/skills/woods-mcp-config/SKILL.md +90 -2
- data/plugin/skills/woods-setup/SKILL.md +110 -6
- metadata +87 -5
|
@@ -14,6 +14,19 @@ git status --short --branch
|
|
|
14
14
|
|
|
15
15
|
This skill describes the Woods 2.x line; the authoritative minimum version lives in the marketplace entry. Diagnose against capabilities the recorded installed version actually provides.
|
|
16
16
|
|
|
17
|
+
## Managed configuration availability
|
|
18
|
+
|
|
19
|
+
`woods-agent-config` (#407) is available in Woods `2.0.0.beta3`. First record the
|
|
20
|
+
installed version and test `bundle exec woods-agent-config --help` in the
|
|
21
|
+
selected application bundle. When supported, use its saved setup/update/remove
|
|
22
|
+
plan and explicit client/scope/root selection; apply the reviewed plan within
|
|
23
|
+
the user's existing authorization. Do not infer ownership from a server name
|
|
24
|
+
or repair edited managed sections by overwriting them. Plans and recovery
|
|
25
|
+
journals contain private configuration bytes. See the canonical
|
|
26
|
+
[managed configuration runbook](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_SETUP.md#managed-claude-code-configuration)
|
|
27
|
+
for host/Compose preflight, actual Claude file locations, conflict recovery,
|
|
28
|
+
and removal. Preserve manual setup for older installed versions.
|
|
29
|
+
|
|
17
30
|
## 1. Check Rails
|
|
18
31
|
|
|
19
32
|
```bash
|
|
@@ -23,8 +36,58 @@ bundle exec rails runner 'Rails.application.eager_load!; puts "eager load ok"'
|
|
|
23
36
|
|
|
24
37
|
Use the application's normal Docker command and environment variables when applicable. Fix boot/eager-load failures before Woods.
|
|
25
38
|
|
|
39
|
+
### Watch repeatedly exits 75
|
|
40
|
+
|
|
41
|
+
Check the installed version's watch guide. Older releases, including
|
|
42
|
+
`2.0.0.beta2`, can rediscover the same restart-trigger paths on every boot. Stop
|
|
43
|
+
the supervisor, run one successful full extraction, then restart the standalone
|
|
44
|
+
watch task. Do not assume automatic startup reconciliation exists in that release.
|
|
45
|
+
For versions documenting environment-boot snapshots, confirm that the command is
|
|
46
|
+
`bundle exec rake woods:watch`, with no preceding `environment` task, and check
|
|
47
|
+
whether boot inputs keep changing during initialization or catch-up.
|
|
48
|
+
|
|
49
|
+
### Watch retains facts from an initializer deleted while stopped
|
|
50
|
+
|
|
51
|
+
Record the installed revision. Unreleased after `2.0.0.beta3`, startup preserves
|
|
52
|
+
registered deleted boot inputs as full-extraction obligations. On earlier builds,
|
|
53
|
+
stop watch, run a successful full extraction in a fresh process, then restart
|
|
54
|
+
standalone `woods:watch`. See the installed version's watch guide.
|
|
55
|
+
|
|
56
|
+
### A cleaned index directory still exists
|
|
57
|
+
|
|
58
|
+
Unreleased after `2.0.0.beta3`, `woods:clean` retains the output directory and
|
|
59
|
+
hidden extraction guard for concurrent writer coordination. Verify published
|
|
60
|
+
artifacts are gone; do not remove that guard while writers may be running.
|
|
61
|
+
|
|
62
|
+
### Watch misses edits under a shared directory alias
|
|
63
|
+
|
|
64
|
+
Check the installed version: logical alias preservation (#445) is available in Woods `2.0.0.beta3`.
|
|
65
|
+
Older polling/catch-up walkers could visit an irrelevant alias first and suppress
|
|
66
|
+
`app/models` when both point to the same physical directory. Compare the logical
|
|
67
|
+
path with the extraction input path; a running daemon alone does not prove coverage.
|
|
68
|
+
Use a manual extraction for recovery until upgrading. The corrected walker keeps
|
|
69
|
+
independent aliases and prunes ancestor cycles; do not remove cycle or ignore guards.
|
|
70
|
+
See the installed version's watch guide before assuming this behavior.
|
|
71
|
+
|
|
72
|
+
### Session trace reports ambiguous identity
|
|
73
|
+
|
|
74
|
+
The `session_trace` `ambiguous_identity` error (#213) is available in Woods `2.0.0.beta3`;
|
|
75
|
+
check the installed gem before expecting it. It names a dependency
|
|
76
|
+
with multiple published extraction types, so no partial session context is
|
|
77
|
+
returned. Use `depth: 0` for the timeline or inspect the named candidates with
|
|
78
|
+
explicit `lookup` types. Do not choose one by index order or suggest that a full
|
|
79
|
+
extraction will remove a legitimate cross-type collision. See the canonical
|
|
80
|
+
[session identity contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#index-server).
|
|
81
|
+
|
|
26
82
|
## 2. Check the published index
|
|
27
83
|
|
|
84
|
+
For a `same-type identifier collision`, inspect both named source files and the
|
|
85
|
+
Rails loader before suggesting source edits. Wrapper-nested class naming needs
|
|
86
|
+
Zeitwerk mode and Zeitwerk >= 2.6.9; an older loader or classic mode can produce
|
|
87
|
+
the collision even when the namespace wrappers are valid. The expanded error
|
|
88
|
+
guidance (B-149) is available in Woods `2.0.0.beta3`; check the installed version
|
|
89
|
+
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).
|
|
90
|
+
|
|
28
91
|
```bash
|
|
29
92
|
bin/rails woods:validate
|
|
30
93
|
bin/rails woods:stats
|
|
@@ -32,12 +95,108 @@ bin/rails woods:stats
|
|
|
32
95
|
|
|
33
96
|
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.
|
|
34
97
|
|
|
98
|
+
Semantic graph validation (#413) is available in Woods `2.0.0.beta3`; verify the
|
|
99
|
+
installed gem before expecting these errors. Supporting versions check typed
|
|
100
|
+
unit identity, graph/index agreement and forward/reverse/file/type memberships
|
|
101
|
+
within one pinned generation. Preserve the failing generation and exact error,
|
|
102
|
+
then run a fresh full extraction with the intended bundle and validate again.
|
|
103
|
+
Do not hand-edit derived graph indexes to silence failures. A repeated error on
|
|
104
|
+
a fresh full run is evidence to report as an extraction defect. Unresolved
|
|
105
|
+
targets can be valid; validation cannot prove runtime execution or distinguish
|
|
106
|
+
an external name from an internal unit omitted everywhere. Follow the
|
|
107
|
+
[semantic recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#semantic-graph-validation-errors).
|
|
108
|
+
|
|
109
|
+
If external targets such as `http_api` lose dependents after incremental
|
|
110
|
+
extraction, check whether the installed Woods version includes B-193.
|
|
111
|
+
The fix is available in Woods `2.0.0.beta3`; installing this plugin does not upgrade the gem.
|
|
112
|
+
Affected indexes need one full extraction after upgrading to a fixed version.
|
|
113
|
+
Follow the [recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#external-dependency-targets-lose-dependents-after-incremental-extraction).
|
|
114
|
+
|
|
115
|
+
For a custom shell/Python reader or upload gate, check its installed-version
|
|
116
|
+
assumptions against the [filesystem layout contract](https://github.com/lost-in-the/woods/blob/main/docs/INDEX_LAYOUT.md).
|
|
117
|
+
Resolve the pointer once and pin the manifest during a complete read/copy; never
|
|
118
|
+
select the highest payload directory or treat a missing root graph as no index.
|
|
119
|
+
Confirm the installed release and filesystem support retention locks before
|
|
120
|
+
using the pinning examples; flat layouts need writers stopped for a consistent copy.
|
|
121
|
+
|
|
122
|
+
A host reader can report a container daemon dead because foreign-host records
|
|
123
|
+
are rejected by default. Foreign heartbeat trust (#321) is available in Woods `2.0.0.beta3`: first
|
|
124
|
+
check the installed Woods version and that version's release notes. Only for a
|
|
125
|
+
supporting version, offer `WOODS_WATCH_TRUST_FOREIGN_HOST=1` in every relevant
|
|
126
|
+
task/MCP reader and follow [cross-host liveness](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#cross-host-liveness).
|
|
127
|
+
Fresh `degraded` still means incremental work is needed; a fresh `running`
|
|
128
|
+
record can outlive a crashed foreign daemon by up to 15 minutes. Older versions
|
|
129
|
+
need their status check run in the daemon's own container.
|
|
130
|
+
|
|
131
|
+
Writer-version provenance (#323) is available in Woods `2.0.0.beta3`: verify the installed
|
|
132
|
+
gem version's release notes before expecting it. If `index.woods_version` exists, compare it
|
|
133
|
+
with `server.version`; missing/null is unknown, not a failure. A validator
|
|
134
|
+
major-version warning calls for full extraction and upgrade review, while a match
|
|
135
|
+
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).
|
|
136
|
+
|
|
137
|
+
Unreleased after `2.0.0.beta3`: incremental/refresh handled source errors keep
|
|
138
|
+
the previous generation active and leave watch batches pending. Repair the
|
|
139
|
+
logged source error and retry the complete batch; see
|
|
140
|
+
[handled source errors](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md#handled-source-errors-and-retry).
|
|
141
|
+
Check the installed revision before relying on this behavior.
|
|
142
|
+
|
|
35
143
|
If a one-shot extraction raises `Could not publish generation`, the candidate
|
|
36
144
|
payload was written but never made visible; readers still serve the previous
|
|
37
145
|
complete generation. Fix the named filesystem, permission, space, or mount
|
|
38
146
|
failure and rerun the same task. Never edit `generation.json` or point a reader
|
|
39
147
|
at the unreachable payload by hand.
|
|
40
148
|
|
|
149
|
+
For slow extraction, use `WOODS_PROFILE=1` when supported by the installed
|
|
150
|
+
version. Keep process boot and resident-cycle measurements separate. Older
|
|
151
|
+
profiles nest payload sync and retention inside `publish`; current source
|
|
152
|
+
reports disjoint phases and a separate `[profile total]` line. Do not add
|
|
153
|
+
whole-run totals to phase durations or promise the new lines on an older gem.
|
|
154
|
+
Use the installed version's tagged guide; the
|
|
155
|
+
[canonical profiling guide](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md#profiling-fixed-costs)
|
|
156
|
+
tracks current source.
|
|
157
|
+
|
|
158
|
+
For volatile-dependency reports dominated by one target, compare the full
|
|
159
|
+
`stats.volatile_dependency_count` with the persisted array and use the
|
|
160
|
+
[ratio tuning guidance](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#pipeline-options).
|
|
161
|
+
The optional per-target cap (B-188) is available in Woods `2.0.0.beta3`; check the
|
|
162
|
+
installed gem before suggesting `volatile_dependency_limit_per_target`.
|
|
163
|
+
Re-extract to publish configuration changes; the report remains informational.
|
|
164
|
+
|
|
165
|
+
For a shallow-checkout git-enrichment warning, the shallow guard (B-189) is
|
|
166
|
+
available in Woods `2.0.0.beta3`; check the installed version first. Fetch complete
|
|
167
|
+
history with `git fetch --unshallow` or `actions/checkout` `fetch-depth: 0`, then
|
|
168
|
+
run full extraction. Depth two only enables a two-commit diff; it does not
|
|
169
|
+
restore complete churn history. See the
|
|
170
|
+
[git metadata recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#git-metadata-is-missing-or-shows-zeros).
|
|
171
|
+
|
|
172
|
+
For `Git enrichment omitted: history could not be read completely`, first check
|
|
173
|
+
whether the installed Woods release documents the new streamed-history policy;
|
|
174
|
+
it is available in Woods `2.0.0.beta3`. Supporting versions require Git 2.31 or newer.
|
|
175
|
+
Check `git --version` in the extraction container and repository/object-store
|
|
176
|
+
access with its `WOODS_GIT_DIR` setting. A failed history stream is discarded;
|
|
177
|
+
repair git access and run full extraction to refresh retained metadata. See the
|
|
178
|
+
[history contract](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#git-enrichment-history).
|
|
179
|
+
|
|
180
|
+
After a bundle change or removal of a dynamically defined job, incremental
|
|
181
|
+
extraction can retain stale runtime units. Use a fresh process with the updated
|
|
182
|
+
bundle for full extraction, then validate. For missing external gem paths,
|
|
183
|
+
first distinguish an upgraded bundle from a reader on a different host/mount.
|
|
184
|
+
The more explicit `woods:validate` bundle-update remedy (B-166) is available in Woods
|
|
185
|
+
`2.0.0.beta3`; the full-extraction recovery works on older versions too.
|
|
186
|
+
See [runtime removals and bundle updates](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md#runtime-removals-and-bundle-updates).
|
|
187
|
+
|
|
188
|
+
### Export identity checks
|
|
189
|
+
|
|
190
|
+
For Notion or Unblocked exports, typed selection checks (#213) are available in Woods
|
|
191
|
+
`2.0.0.beta3`; check the installed gem before expecting them. A missing or
|
|
192
|
+
mismatched export identity calls for index validation and a fresh extraction,
|
|
193
|
+
not a force flag. An `ambiguous export URI` means two types share an identifier
|
|
194
|
+
and source file: preserve existing documents and report the collision; do not
|
|
195
|
+
rename public identifiers or force deletion. Follow the canonical
|
|
196
|
+
[Notion](https://github.com/lost-in-the/woods/blob/main/docs/NOTION_INTEGRATION.md#sync-manifest-incremental-sync)
|
|
197
|
+
and [Unblocked](https://github.com/lost-in-the/woods/blob/main/docs/UNBLOCKED_INTEGRATION.md#uri-scheme)
|
|
198
|
+
guides for recovery and current limitations.
|
|
199
|
+
|
|
41
200
|
## 3. Check the MCP process and path
|
|
42
201
|
|
|
43
202
|
Compare the client config with the exact command, absolute `cwd`, bundle, and index path visible to that process. Run the configured executable manually to read stderr. For a host bundle:
|
|
@@ -46,13 +205,71 @@ Compare the client config with the exact command, absolute `cwd`, bundle, and in
|
|
|
46
205
|
bundle exec woods-mcp-start ./tmp/woods
|
|
47
206
|
```
|
|
48
207
|
|
|
208
|
+
If startup says `Could not resolve a published Woods index` (unreleased after
|
|
209
|
+
`2.0.0.beta3`) or names a missing `manifest.json` on older versions, first check
|
|
210
|
+
the selected index path: an atomic index uses `generation.json` to locate its
|
|
211
|
+
payload manifest. The new headline does not change index validation or recovery.
|
|
212
|
+
Point at an existing index before suggesting a new extraction. Prefer the
|
|
213
|
+
explicit path above; `WOODS_DIR` is also supported. An unreleased change after
|
|
214
|
+
`2.0.0.beta3` adds `WOODS_OUTPUT` after those two choices, so verify the installed
|
|
215
|
+
version's configuration guide before relying on that fallback.
|
|
216
|
+
|
|
49
217
|
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.
|
|
50
218
|
|
|
51
219
|
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.
|
|
52
220
|
|
|
221
|
+
For corrupt pipeline cooldown state, first confirm this is a custom server
|
|
222
|
+
with `pipeline_repair` registered; packaged `woods-mcp` does not wire it.
|
|
223
|
+
Recovery through `reset_cooldowns` (B-159) is available in Woods `2.0.0.beta3`.
|
|
224
|
+
Check the installed version before attempting it and follow the
|
|
225
|
+
[corrupt cooldown recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#corrupt-pipeline-cooldown-state).
|
|
226
|
+
|
|
227
|
+
## Deferred refresh hooks
|
|
228
|
+
|
|
229
|
+
Expanded hook coverage and `woods:hook_refresh` (#408) are available in Woods
|
|
230
|
+
`2.0.0.beta3`. Verify the installed task through the configured host/container
|
|
231
|
+
command before diagnosing this plugin's queue. Read `<output>/hook.log` and
|
|
232
|
+
`hook-pending/`; status 75 means an active daemon deferred work, not that it was
|
|
233
|
+
consumed. Fix task availability, boot/publication failures or a stalled command,
|
|
234
|
+
then retry with the same output and command prefix. Preserve pending events.
|
|
235
|
+
For mkdir fallback locks, inspect the recorded owner PID before manual removal.
|
|
236
|
+
The concurrent dead-owner recovery fix is included in plugin `2.3.36`.
|
|
237
|
+
If competing hooks leave an empty lock without a drain, preserve the queued
|
|
238
|
+
events and follow the canonical recovery guide below.
|
|
239
|
+
A Docker timeout does not prove the application process stopped. Prefer a
|
|
240
|
+
resident watcher for sustained edits and follow the
|
|
241
|
+
[canonical retry guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#hooks-for-agent-sessions).
|
|
242
|
+
|
|
243
|
+
## Partial dependency answers
|
|
244
|
+
|
|
245
|
+
Traversal budgets (`max_nodes`/`max_edges`, #311) are available in Woods `2.0.0.beta3`.
|
|
246
|
+
Check the installed gem version and connected tool schema before
|
|
247
|
+
using them; installing this plugin does not upgrade the gem. On a supporting
|
|
248
|
+
server, `partial`/`partial_reason` means the walk stopped early, independently
|
|
249
|
+
of page truncation. Do not claim an exhaustive blast radius or treat empty
|
|
250
|
+
deps as proof of a leaf. Narrow depth/types/via or increase a supported budget;
|
|
251
|
+
paging alone only visits the discovered prefix. See the
|
|
252
|
+
[budget contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#dependency-traversal-budgets).
|
|
253
|
+
|
|
53
254
|
## 4. Check semantic retrieval
|
|
54
255
|
|
|
55
|
-
|
|
256
|
+
Configured retrieval defaults (#446) are available in Woods `2.0.0.beta3`. For an installed
|
|
257
|
+
version that supports them, an omitted tool budget uses the serving retriever's
|
|
258
|
+
configured default; an explicit budget overrides it. Standalone MCP does not
|
|
259
|
+
inherit the host initializer's token setting from the embedding snapshot.
|
|
260
|
+
Do not tune relevance with similarity_threshold: it is inert and deprecated.
|
|
261
|
+
Use query/type/scope selection and inspect ranking evidence instead. See
|
|
262
|
+
[retrieval tuning](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#tuning).
|
|
263
|
+
|
|
264
|
+
Native embedding completeness checks (#442/#444) are available in Woods `2.0.0.beta3`;
|
|
265
|
+
confirm the installed version first. If embedding reports `Embedding input
|
|
266
|
+
incomplete`, repair the named published extraction artifact or rebuild extraction
|
|
267
|
+
before retrying. Do not use `WOODS_ALLOW_PURGE=1` to bypass an integrity failure;
|
|
268
|
+
it only permits intentional mass deletion. Source-empty units deliberately retain
|
|
269
|
+
metadata without vectors. See the canonical
|
|
270
|
+
[input-integrity guide](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#input-integrity-and-source-empty-units).
|
|
271
|
+
|
|
272
|
+
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.
|
|
56
273
|
|
|
57
274
|
- OpenAI: verify the key exists without printing it.
|
|
58
275
|
- Ollama: verify the service and configured model locally.
|
|
@@ -60,12 +277,29 @@ Only diagnose this layer when structural tools work and `codebase_retrieve` fail
|
|
|
60
277
|
- Dimension mismatch: rebuild into a store matching the configured model; do not suppress the preflight.
|
|
61
278
|
- Purge guard: back up and inspect the proposed deletion; never set `WOODS_ALLOW_PURGE` without explicit approval.
|
|
62
279
|
|
|
280
|
+
For metadata appearing in another index or worktree, compare `WOODS_OUTPUT`,
|
|
281
|
+
`config.output_dir`, and any explicit `metadata_store_options[:database]`.
|
|
282
|
+
The default SQLite path following `WOODS_OUTPUT` during embedding (B-156) is
|
|
283
|
+
available in Woods `2.0.0.beta3`; check the installed version before relying on it.
|
|
284
|
+
An explicit database path still wins. See the
|
|
285
|
+
[SQLite path contract](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#sqlite-metadata)
|
|
286
|
+
for isolation and upgrade steps.
|
|
287
|
+
|
|
63
288
|
## 5. Check Console separately
|
|
64
289
|
|
|
290
|
+
For repeated missing-token boot warnings on a stdio-only host, check whether
|
|
291
|
+
its installed version supports `console_mcp_http_enabled = false` before
|
|
292
|
+
suggesting it; this option is available in Woods `2.0.0.beta3`. The default
|
|
293
|
+
preserves HTTP enablement, so selecting stdio as a client alone does not
|
|
294
|
+
suppress HTTP token validation. Never disable authentication on an HTTP
|
|
295
|
+
endpoint to silence this warning.
|
|
296
|
+
|
|
65
297
|
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.
|
|
66
298
|
|
|
67
299
|
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.
|
|
68
300
|
|
|
301
|
+
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.
|
|
302
|
+
|
|
69
303
|
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.
|
|
70
304
|
|
|
71
305
|
## Report
|
|
@@ -73,3 +307,87 @@ Nine tools are normal. Eleven appear only with `console_embedded_read_tools`. Do
|
|
|
73
307
|
Return the first failing layer, commands/evidence, root-cause hypothesis, whether any file changed, and the smallest next action. If a fix is requested, change one thing and rerun the failing check before proceeding.
|
|
74
308
|
|
|
75
309
|
Canonical guide: [TROUBLESHOOTING.md](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md).
|
|
310
|
+
|
|
311
|
+
## Lexical retrieval capability check
|
|
312
|
+
|
|
313
|
+
Lexical retrieval is available from `2.0.0.beta3`. Before proposing it, verify the installed gem
|
|
314
|
+
exposes `Woods::Configuration#retrieval_mode` and its matching guide documents
|
|
315
|
+
`WOODS_RETRIEVAL_MODE`. Keep the installed-version preflight; do not infer support
|
|
316
|
+
from the plugin version or an unreleased checkout.
|
|
317
|
+
|
|
318
|
+
For lexical errors, inspect the published generation and validate or re-extract
|
|
319
|
+
the index; adding provider credentials cannot repair a corrupt lexical index.
|
|
320
|
+
Semantic provider failure never switches to lexical automatically.
|
|
321
|
+
See the [retrieval guide](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#embedding-free-lexical-retrieval)
|
|
322
|
+
for the supported contract, checked against the installed gem version.
|
|
323
|
+
|
|
324
|
+
## Explicit package or path scope
|
|
325
|
+
|
|
326
|
+
Check the connected tool's advertised input schema before sending `packages` or
|
|
327
|
+
`source_paths`; older installed gems may not support them. When present, both
|
|
328
|
+
`search` and `codebase_retrieve` apply explicit scope before candidate limits.
|
|
329
|
+
Use published nearest package names or application-relative directory prefixes,
|
|
330
|
+
then inspect `applied_scope` and search completeness. Unknown packages are argument
|
|
331
|
+
errors; unsupported custom vector adapters degrade instead of running a global
|
|
332
|
+
query. Scoping can hide relevant cross-boundary relationships, so broaden the
|
|
333
|
+
request deliberately when the task needs them. See the
|
|
334
|
+
[scope contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#explicit-package-and-source-path-scopes).
|
|
335
|
+
|
|
336
|
+
## Source-content freshness (Woods 2.0.0.beta3; #405)
|
|
337
|
+
|
|
338
|
+
Check installed-version support before using `woods-extract` or the optional
|
|
339
|
+
`woods_status.source_check` argument. With support, inspect
|
|
340
|
+
`index.source_freshness`: `current`, `drifted` or `unknown`. Repeated edits to an
|
|
341
|
+
already-dirty file can leave the porcelain fingerprint unchanged. A quick scan
|
|
342
|
+
limit may justify one `source_check: "deep"`; unavailable source/private keys or
|
|
343
|
+
unproved boot/consumer coverage remain unknown. A fresh `bundle exec woods-extract full`
|
|
344
|
+
inside the application environment establishes preboot evidence. Never publish
|
|
345
|
+
`.source-inputs.key`, silently change its permissions, or delete queued edits to
|
|
346
|
+
hide diagnostics. Follow [source freshness](https://github.com/lost-in-the/woods/blob/main/docs/SOURCE_FRESHNESS.md).
|
|
347
|
+
|
|
348
|
+
## Compact evidence capability check
|
|
349
|
+
|
|
350
|
+
Inspect the connected server's installed tool schemas before using `evidence` on
|
|
351
|
+
`lookup` or `codebase_retrieve`; older releases do not provide these controls.
|
|
352
|
+
When available, explicit `compact` selects complete published source spans and
|
|
353
|
+
`outline` lists declared APIs. Read omission/provenance fields and follow the
|
|
354
|
+
returned typed, SHA-guarded `full_evidence` lookup for verification. Published-unit
|
|
355
|
+
coordinates are not physical file offsets; unknown generation remains unknown.
|
|
356
|
+
Keep full-source access available. See the canonical
|
|
357
|
+
[evidence contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#compact-published-evidence-and-api-outlines).
|
|
358
|
+
|
|
359
|
+
## Explicit edit adapters (Woods 2.0.0.beta3; #409)
|
|
360
|
+
|
|
361
|
+
Check the installed gem exposes `woods:hook_refresh` before enabling hooks.
|
|
362
|
+
Claude's registered wrapper covers one documented edit path; OpenCode 1.18.27
|
|
363
|
+
has a separate native `.js` registration wrapper importing Woods' shipped
|
|
364
|
+
adapter. Its verified patch metadata carries all added/updated/deleted/moved
|
|
365
|
+
paths. Keep the complete plugin directory available, preserve opt-in/disable
|
|
366
|
+
settings and pending events, and inspect the generation and hook log before
|
|
367
|
+
claiming refresh. Unsupported tool shapes and symlink paths need watch or an
|
|
368
|
+
explicit extraction. Do not install native client registration without the
|
|
369
|
+
user's setup request. Follow [client hooks](https://github.com/lost-in-the/woods/blob/main/docs/CLIENT_HOOKS.md).
|
|
370
|
+
|
|
371
|
+
## Optional context hints
|
|
372
|
+
|
|
373
|
+
Check installed `bundle exec woods-hook-context --help` before enabling
|
|
374
|
+
`WOODS_HOOK_CONTEXT_ENABLED=1`; this capability is available in Woods `2.0.0.beta3` and the
|
|
375
|
+
plugin does not upgrade the gem. Context and refresh opt-ins are independent;
|
|
376
|
+
`WOODS_HOOKS_DISABLED=1` disables both. Native Claude context is synchronous and
|
|
377
|
+
bounded, with served-generation and pre-refresh/unknown labels. Verify candidate
|
|
378
|
+
dependents and suggested tests manually; silence is not no impact. Do not clear
|
|
379
|
+
refresh queues when optional hints time out. See the canonical
|
|
380
|
+
[context guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#optional-bounded-context-hints)
|
|
381
|
+
for output/time limits, container root mapping and emitted-hint suppression.
|
|
382
|
+
|
|
383
|
+
### Obsidian destination conflicts
|
|
384
|
+
|
|
385
|
+
Destination ownership preflight (#441) is available in Woods `2.0.0.beta3`; first check
|
|
386
|
+
the installed Woods version and
|
|
387
|
+
its matching guide. On versions with this check, `refusing <path>: unmanaged or modified destination`
|
|
388
|
+
means the export preserved a conflicting note, setting, or sidecar and skipped the stale-note sweep.
|
|
389
|
+
A `.woods-vault` sentinel or force-purge flag does not authorize overwriting it. Inspect and back up
|
|
390
|
+
the named file before moving it aside, or choose a new export directory. Older vaults can adopt
|
|
391
|
+
byte-identical generated assets into `_woods/ownership.json`; changed legacy sidecars may need this
|
|
392
|
+
manual recovery. Never fabricate ownership receipts or remove personal files to silence the error.
|
|
393
|
+
See the installed version's `docs/OBSIDIAN_INTEGRATION.md` for the exact safety contract.
|
|
@@ -9,6 +9,13 @@ Woods is runtime evidence: resolved routes, schema, associations, callbacks, inl
|
|
|
9
9
|
|
|
10
10
|
## Preflight
|
|
11
11
|
|
|
12
|
+
Supporting servers include concise MCP initialization/discovery guidance without
|
|
13
|
+
this plugin. That feature (#402) is available in Woods `2.0.0.beta3`; check the
|
|
14
|
+
installed server version, and do not require it from protocol `2024-11-05`.
|
|
15
|
+
Follow the [agent guide](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_GUIDE.md)
|
|
16
|
+
when instructions are absent. A registered tool does not establish retrieval
|
|
17
|
+
readiness or authorize maintenance or live Console access.
|
|
18
|
+
|
|
12
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; use `codebase_retrieve` only when status reports retrieval enabled. 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.
|
|
13
20
|
|
|
14
21
|
## The default loop
|
|
@@ -32,8 +39,146 @@ Identifiers are namespaced and typed; never invent one from a filename when `sea
|
|
|
32
39
|
|
|
33
40
|
The normal packaged Index Server registers 14 tools; conditional schemas register only when their wiring is configured — use the connected server's own tool list, never the source inventory. Console MCP is authorized live-data access, not another code-search mode; use Index tools for structure. Never work around a block, validation error, or redaction.
|
|
34
41
|
|
|
42
|
+
## Partial search answers
|
|
43
|
+
|
|
44
|
+
Search completeness (#410) is available in Woods `2.0.0.beta3`. Verify the installed
|
|
45
|
+
server version and response before relying on it; this plugin does not upgrade
|
|
46
|
+
the gem. On supporting versions, `result_count` counts returned rows, while
|
|
47
|
+
`completeness.reason: exhausted` establishes an exact total for the requested
|
|
48
|
+
index/query domain. `result_limit` proves at least one additional match;
|
|
49
|
+
`scan_budget` and `regex_timeout` leave more matches and totals unknown. Narrow
|
|
50
|
+
types, literal prefix/suffix filters, or deep fields when `partial` is true.
|
|
51
|
+
Artifact errors have unknown completeness. Missing metadata on older servers,
|
|
52
|
+
a full page, and an empty partial result never establish exhaustive absence.
|
|
53
|
+
See the [search contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#search-completeness).
|
|
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 unreleased after Woods `2.0.0.beta3`.
|
|
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
|
+
unreleased after `2.0.0.beta3`). 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
|
+
|
|
78
|
+
## Partial dependency answers
|
|
79
|
+
|
|
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
|
|
82
|
+
using them; installing this plugin does not upgrade the gem. On a supporting
|
|
83
|
+
server, `partial`/`partial_reason` means the walk stopped early, independently
|
|
84
|
+
of page truncation. Do not claim an exhaustive blast radius or treat empty
|
|
85
|
+
deps as proof of a leaf. Narrow depth/types/via or increase a supported budget;
|
|
86
|
+
paging alone only visits the discovered prefix. See the
|
|
87
|
+
[budget contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#dependency-traversal-budgets).
|
|
88
|
+
|
|
89
|
+
## Explain recorded relationships
|
|
90
|
+
|
|
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;
|
|
93
|
+
installing this plugin does not add server capabilities. Supporting servers
|
|
94
|
+
preserve original source-to-target direction and labels in both traversal
|
|
95
|
+
modes. Follow shared `parent`/`edge_id` witnesses, distinguish direct records
|
|
96
|
+
from transitive inferred impact, and treat `context: true` ancestors as page
|
|
97
|
+
context. Null attributes and candidate type ambiguities remain unknown;
|
|
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
|
|
101
|
+
cutoffs still apply. Verify important conclusions in source and tests, since
|
|
102
|
+
recorded reachability does not establish observed execution. See the
|
|
103
|
+
[explanation contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#traversal-explanations).
|
|
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 unreleased after `2.0.0.beta3`; 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
|
+
|
|
116
|
+
## Volatile dependency reports
|
|
117
|
+
|
|
118
|
+
Read `stats.volatile_dependency_count` before judging the top-20 array: it
|
|
119
|
+
counts all qualifying edges. A frequently changed dependency can occupy most
|
|
120
|
+
rows. Use the installed version's ratio tuning guidance; the optional
|
|
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
|
|
123
|
+
can cap each typed target before selecting the global top 20 and expose the
|
|
124
|
+
cap plus `volatile_dependency_reported_count` in stats. Re-extract after
|
|
125
|
+
configuration changes. Treat the report as candidates for source review, never
|
|
126
|
+
an automatic gate. See the
|
|
127
|
+
[configuration reference](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#pipeline-options).
|
|
128
|
+
|
|
35
129
|
## Report evidence
|
|
36
130
|
|
|
37
131
|
Name the tools and exact identifiers used, cite the source paths Woods returned, separate direct Woods evidence from inference, and state generation/staleness caveats. Say when a claim still needs source or test verification.
|
|
38
132
|
|
|
39
133
|
Canonical guides: [AGENT_GUIDE.md](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_GUIDE.md), [MCP_TOOL_COOKBOOK.md](https://github.com/lost-in-the/woods/blob/main/docs/MCP_TOOL_COOKBOOK.md).
|
|
134
|
+
|
|
135
|
+
## Lexical retrieval capability check
|
|
136
|
+
|
|
137
|
+
This is a development capability. Before proposing it, verify the installed gem
|
|
138
|
+
exposes `Woods::Configuration#retrieval_mode` and its matching guide documents
|
|
139
|
+
`WOODS_RETRIEVAL_MODE`. Keep the installed-version preflight; do not infer support
|
|
140
|
+
from the plugin version or an unreleased checkout.
|
|
141
|
+
|
|
142
|
+
When status reports lexical mode, use the matching fields/terms as discovery
|
|
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`.
|
|
148
|
+
See the [retrieval guide](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#embedding-free-lexical-retrieval)
|
|
149
|
+
for the supported contract, checked against the installed gem version.
|
|
150
|
+
|
|
151
|
+
## Explicit package or path scope
|
|
152
|
+
|
|
153
|
+
Check the connected tool's advertised input schema before sending `packages` or
|
|
154
|
+
`source_paths`; older installed gems may not support them. When present, both
|
|
155
|
+
`search` and `codebase_retrieve` apply explicit scope before candidate limits.
|
|
156
|
+
Use published nearest package names or application-relative directory prefixes,
|
|
157
|
+
then inspect `applied_scope` and search completeness. Unknown packages are argument
|
|
158
|
+
errors; unsupported custom vector adapters degrade instead of running a global
|
|
159
|
+
query. Scoping can hide relevant cross-boundary relationships, so broaden the
|
|
160
|
+
request deliberately when the task needs them. See the
|
|
161
|
+
[scope contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#explicit-package-and-source-path-scopes).
|
|
162
|
+
|
|
163
|
+
## Compact evidence capability check
|
|
164
|
+
|
|
165
|
+
Inspect the connected server's installed tool schemas before using `evidence` on
|
|
166
|
+
`lookup` or `codebase_retrieve`; older releases do not provide these controls.
|
|
167
|
+
When available, explicit `compact` selects complete published source spans and
|
|
168
|
+
`outline` lists declared APIs. Read omission/provenance fields and follow the
|
|
169
|
+
returned typed, SHA-guarded `full_evidence` lookup for verification. Published-unit
|
|
170
|
+
coordinates are not physical file offsets; unknown generation remains unknown.
|
|
171
|
+
Keep full-source access available. See the canonical
|
|
172
|
+
[evidence contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#compact-published-evidence-and-api-outlines).
|
|
173
|
+
|
|
174
|
+
## Optional context hints
|
|
175
|
+
|
|
176
|
+
Check installed `bundle exec woods-hook-context --help` before enabling
|
|
177
|
+
`WOODS_HOOK_CONTEXT_ENABLED=1`; this capability is available in Woods `2.0.0.beta3` and the
|
|
178
|
+
plugin does not upgrade the gem. Context and refresh opt-ins are independent;
|
|
179
|
+
`WOODS_HOOKS_DISABLED=1` disables both. Native Claude context is synchronous and
|
|
180
|
+
bounded, with served-generation and pre-refresh/unknown labels. Verify candidate
|
|
181
|
+
dependents and suggested tests manually; silence is not no impact. Do not clear
|
|
182
|
+
refresh queues when optional hints time out. See the canonical
|
|
183
|
+
[context guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#optional-bounded-context-hints)
|
|
184
|
+
for output/time limits, container root mapping and emitted-hint suppression.
|