woods 2.0.1 → 2.1.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 +94 -7
- data/CONTRIBUTING.md +134 -19
- data/README.md +1 -1
- data/docs/AGENT_GUIDE.md +19 -0
- data/docs/AGENT_SETUP.md +22 -2
- data/docs/BACKEND_MATRIX.md +7 -0
- data/docs/CLIENT_HOOKS.md +6 -0
- data/docs/CONFIGURATION_REFERENCE.md +133 -25
- data/docs/CONSOLE_MCP_SETUP.md +82 -30
- data/docs/EMBEDDING_MODELS.md +16 -19
- data/docs/EXTRACTOR_REFERENCE.md +219 -21
- data/docs/FAQ.md +11 -25
- data/docs/GETTING_STARTED.md +7 -1
- data/docs/INCREMENTAL_EXTRACTION.md +261 -19
- data/docs/INDEX_LAYOUT.md +5 -0
- data/docs/INTERNALS.md +9 -0
- data/docs/MCP_HTTP_TRANSPORT.md +20 -15
- data/docs/MCP_SERVERS.md +87 -8
- data/docs/MCP_TOOL_COOKBOOK.md +13 -55
- data/docs/NOTION_INTEGRATION.md +7 -1
- data/docs/PUBLISHED_INDEX.md +6 -0
- data/docs/README.md +6 -1
- data/docs/RETRIEVAL_GUIDE.md +17 -0
- data/docs/SOURCE_FRESHNESS.md +157 -5
- data/docs/TOKEN_BENCHMARK.md +10 -18
- data/docs/TROUBLESHOOTING.md +70 -14
- data/docs/UNBLOCKED_INTEGRATION.md +60 -8
- data/docs/UPGRADING_TO_2.md +153 -38
- data/docs/WATCH_DAEMON.md +97 -14
- data/exe/woods-console-mcp +2 -2
- data/lib/generators/woods/templates/woods.rb.tt +2 -1
- data/lib/tasks/woods.rake +23 -7
- data/lib/tasks/woods_checks.rake +2 -2
- data/lib/woods/agent_configuration/cli.rb +1 -1
- data/lib/woods/agent_configuration/layout.rb +16 -2
- data/lib/woods/agent_configuration/plan.rb +13 -3
- data/lib/woods/agent_configuration/planner_validation.rb +4 -2
- data/lib/woods/agent_configuration/preflight.rb +5 -3
- data/lib/woods/builder.rb +17 -57
- data/lib/woods/cache/cache_middleware.rb +56 -30
- data/lib/woods/chunking/contributor_chunks.rb +119 -0
- data/lib/woods/chunking/semantic_chunker.rb +44 -21
- data/lib/woods/console/connection_manager.rb +56 -3
- data/lib/woods/console/embedded_executor.rb +30 -5
- data/lib/woods/console/rack_middleware.rb +29 -1
- data/lib/woods/dependency_graph.rb +34 -10
- data/lib/woods/embedding/fake.rb +12 -0
- data/lib/woods/embedding/indexer.rb +195 -98
- data/lib/woods/embedding/input_budget.rb +67 -0
- data/lib/woods/embedding/openai.rb +70 -20
- data/lib/woods/embedding/provider.rb +37 -25
- data/lib/woods/embedding/text_preparer.rb +76 -32
- data/lib/woods/embedding/token_counter.rb +18 -81
- data/lib/woods/embedding/vector_configuration.rb +48 -0
- data/lib/woods/extraction_identities.rb +175 -0
- data/lib/woods/extractor.rb +304 -107
- data/lib/woods/extractors/action_cable_extractor.rb +8 -3
- data/lib/woods/extractors/assigned_value_discovery.rb +74 -0
- data/lib/woods/extractors/class_declarations.rb +121 -0
- data/lib/woods/extractors/configuration_extractor.rb +11 -3
- data/lib/woods/extractors/declaration_ancestry.rb +92 -0
- data/lib/woods/extractors/event_extractor.rb +8 -0
- data/lib/woods/extractors/graphql_extractor.rb +134 -77
- data/lib/woods/extractors/job_extractor.rb +5 -1
- data/lib/woods/extractors/lib_extractor.rb +132 -15
- data/lib/woods/extractors/mailer_extractor.rb +3 -5
- data/lib/woods/extractors/manager_extractor.rb +7 -21
- data/lib/woods/extractors/migration_declaration.rb +87 -0
- data/lib/woods/extractors/migration_extractor.rb +5 -39
- data/lib/woods/extractors/phlex_extractor.rb +6 -2
- data/lib/woods/extractors/policy_extractor.rb +9 -5
- data/lib/woods/extractors/poro_extractor.rb +112 -53
- data/lib/woods/extractors/pundit_extractor.rb +11 -6
- data/lib/woods/extractors/scheduled_job_extractor.rb +45 -4
- data/lib/woods/extractors/serializer_extractor.rb +34 -22
- data/lib/woods/extractors/shared_utility_methods.rb +18 -1
- data/lib/woods/extractors/source_nesting.rb +142 -106
- data/lib/woods/extractors/standalone_module_discovery.rb +123 -0
- data/lib/woods/extractors/state_machine_extractor.rb +46 -40
- data/lib/woods/extractors/view_component_extractor.rb +9 -7
- data/lib/woods/flow_assembler.rb +4 -1
- data/lib/woods/generation.rb +25 -0
- data/lib/woods/hooks/context_hint.rb +7 -2
- data/lib/woods/mcp/bootstrapper.rb +33 -7
- data/lib/woods/mcp/config_resolver.rb +26 -7
- data/lib/woods/mcp/index_reader.rb +125 -24
- data/lib/woods/mcp/index_reader_pinning.rb +16 -0
- data/lib/woods/mcp/renderers/markdown_renderer.rb +7 -1
- data/lib/woods/mcp/renderers/plain_renderer.rb +3 -1
- data/lib/woods/mcp/search_results.rb +7 -1
- data/lib/woods/mcp/server.rb +24 -4
- data/lib/woods/module_reconciliation.rb +151 -0
- data/lib/woods/path_dispatcher.rb +7 -2
- data/lib/woods/rake_helpers.rb +43 -11
- data/lib/woods/release.rb +1 -1
- data/lib/woods/resilience/index_validator.rb +8 -3
- data/lib/woods/resilience/retryable_provider.rb +18 -1
- data/lib/woods/resolved_config.rb +68 -8
- data/lib/woods/retrieval/context_assembler.rb +3 -3
- data/lib/woods/retrieval/lexical_assembler.rb +3 -2
- data/lib/woods/retrieval/scope.rb +18 -2
- data/lib/woods/retrieval/source_evidence.rb +14 -2
- data/lib/woods/source_contributor_validation.rb +78 -0
- data/lib/woods/source_contributors.rb +116 -0
- data/lib/woods/source_inputs/handoff.rb +37 -0
- data/lib/woods/source_inputs/launcher.rb +53 -13
- data/lib/woods/source_inputs/manifest.rb +84 -3
- data/lib/woods/source_inputs/private_key.rb +44 -12
- data/lib/woods/source_inputs/scanner.rb +98 -27
- data/lib/woods/source_inputs/scopes.rb +1 -1
- data/lib/woods/source_inputs/session.rb +147 -15
- data/lib/woods/source_inputs/stable_reader.rb +127 -0
- data/lib/woods/source_inputs/status.rb +40 -8
- data/lib/woods/source_inputs/verifier.rb +28 -5
- data/lib/woods/source_path_encoding.rb +33 -0
- data/lib/woods/source_references/cache.rb +284 -0
- data/lib/woods/source_references/collector.rb +120 -0
- data/lib/woods/source_references/extraction.rb +185 -0
- data/lib/woods/source_references/inputs.rb +134 -0
- data/lib/woods/source_references/parser_adapter.rb +134 -0
- data/lib/woods/source_references/pass.rb +152 -0
- data/lib/woods/source_references/prism_adapter.rb +116 -0
- data/lib/woods/source_references/registry.rb +178 -0
- data/lib/woods/source_references/runtime_lookup.rb +127 -0
- data/lib/woods/source_references/value_class.rb +82 -0
- data/lib/woods/storage/metadata_store.rb +4 -1
- data/lib/woods/storage/qdrant.rb +2 -2
- data/lib/woods/unblocked/client.rb +12 -7
- data/lib/woods/unblocked/document_builder.rb +4 -1
- data/lib/woods/unblocked/exporter.rb +127 -37
- data/lib/woods/unblocked/sync_manifest.rb +137 -21
- data/lib/woods/unblocked/uri_migration.rb +105 -0
- data/lib/woods/util/host_guard.rb +3 -2
- data/lib/woods/version.rb +1 -1
- data/lib/woods/watch/catch_up.rb +138 -0
- data/lib/woods/watch/claim_lease.rb +150 -0
- data/lib/woods/watch/cli.rb +26 -2
- data/lib/woods/watch/daemon.rb +80 -59
- data/lib/woods/watch/installation/options.rb +1 -1
- data/lib/woods/watch/installation/receipt.rb +6 -1
- data/lib/woods/watch/managed_child.rb +1 -1
- data/lib/woods/watch/supervisor.rb +1 -1
- data/lib/woods/watch/tree_scan.rb +14 -2
- data/plugin/.claude-plugin/plugin.json +1 -1
- data/plugin/hooks/adapters/normalize.rb +3 -2
- data/plugin/hooks/woods-input-rules.sh +4 -0
- data/plugin/hooks/woods-refresh.sh +15 -7
- data/plugin/hooks/woods-session-start.sh +60 -3
- data/plugin/skills/woods-diagnose/SKILL.md +334 -11
- data/plugin/skills/woods-investigate/SKILL.md +11 -0
- data/plugin/skills/woods-mcp-config/SKILL.md +79 -8
- data/plugin/skills/woods-setup/SKILL.md +53 -6
- metadata +32 -5
|
@@ -77,6 +77,28 @@ the application's actual `rails woods:watch` or `rake woods:watch` entrypoint,
|
|
|
77
77
|
with no preceding `environment` task, and check
|
|
78
78
|
whether boot inputs keep changing during initialization or catch-up.
|
|
79
79
|
|
|
80
|
+
### Managed watcher parks after its owning container disappeared
|
|
81
|
+
|
|
82
|
+
The explicit lease-based recovery command (#591) is unreleased after `2.0.0`.
|
|
83
|
+
Check the loaded revision and `bundle exec woods-watch --help` before using it.
|
|
84
|
+
Supporting daemons write a claim token and hold a lifetime lease; recovery checks
|
|
85
|
+
the exact selected token and a free matching lease. Use the installed version's
|
|
86
|
+
[claim recovery procedure](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#managed-development-startup).
|
|
87
|
+
Never remove a claim or lock sidecar manually, infer death from age alone, or use
|
|
88
|
+
recovery against a live supervisor. Legacy/unverifiable claims cannot use this
|
|
89
|
+
command. Recovery leaves status and pending work intact; remove the reader-only
|
|
90
|
+
foreign-host trust override from owner startup. Blank idle timeouts are also
|
|
91
|
+
normalized by supporting builds; older tasks may reject an empty value.
|
|
92
|
+
|
|
93
|
+
### Verified extraction selects the wrong output or cannot use its identity key
|
|
94
|
+
|
|
95
|
+
In supporting #591 builds (unreleased after `2.0.0`), an implicit preboot output
|
|
96
|
+
that disagrees with finalized Rails configuration refuses before publication.
|
|
97
|
+
Pass matching `--output` or `WOODS_OUTPUT` explicitly and retain the same capture,
|
|
98
|
+
key and writer destination. Read the safe key-path/ownership/permissions diagnosis;
|
|
99
|
+
never rotate or print key bytes as a generic fix. Follow
|
|
100
|
+
[source capture setup](https://github.com/lost-in-the/woods/blob/main/docs/SOURCE_FRESHNESS.md).
|
|
101
|
+
|
|
80
102
|
### Watch retains facts from an initializer deleted while stopped
|
|
81
103
|
|
|
82
104
|
Record the installed revision. In Woods `2.0.0`, startup preserves
|
|
@@ -84,6 +106,51 @@ registered deleted boot inputs as full-extraction obligations. On earlier builds
|
|
|
84
106
|
stop watch, run a successful full extraction in a fresh process, then restart
|
|
85
107
|
standalone `woods:watch`. See the installed version's watch guide.
|
|
86
108
|
|
|
109
|
+
### Watch misses an edit made while another extraction publishes
|
|
110
|
+
|
|
111
|
+
Record the loaded revision; a matching `2.0.0` version alone does not prove the
|
|
112
|
+
#585 repair is present. Supporting Git builds use the generation's optional
|
|
113
|
+
source-capture boundary and recorded dirty paths, with content checks for
|
|
114
|
+
unchanged candidates. Legacy or invalid boundary metadata causes one full
|
|
115
|
+
startup reconciliation under the usual reload/restart rules. On older builds,
|
|
116
|
+
finish a full extraction against settled source before restarting watch.
|
|
117
|
+
Do not infer source freshness from a recent generation marker or remove a
|
|
118
|
+
foreign watch claim. See the installed version's
|
|
119
|
+
[startup catch-up guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md).
|
|
120
|
+
|
|
121
|
+
### Watch does not recover after a failed reconciliation
|
|
122
|
+
|
|
123
|
+
The deletion-only startup retry repair (#640) and empty-touch publication error
|
|
124
|
+
repair (#641) are unreleased after Woods `2.0.0`; verify the loaded revision.
|
|
125
|
+
Supporting revisions retain pathless deletion reconciliation for heartbeat
|
|
126
|
+
retry and report failed flow withdrawal as degraded even when no units changed.
|
|
127
|
+
On older builds, fix the logged cause and restart watch to reconcile again.
|
|
128
|
+
An empty touched-unit list is not proof that publication succeeded. Inspect
|
|
129
|
+
the generation and publication errors; see the installed version's
|
|
130
|
+
[startup recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#startup-is-not-a-clean-slate).
|
|
131
|
+
|
|
132
|
+
### Extraction fails while a sibling extractor succeeds
|
|
133
|
+
|
|
134
|
+
The #584 publication-reporting repair is unreleased after Woods `2.0.0`.
|
|
135
|
+
Supporting revisions refuse the whole publication after a consumer constructor
|
|
136
|
+
or extraction failure and keep the previous generation active. Fix the logged
|
|
137
|
+
cause and retry the complete batch; do not treat a sibling's success as a
|
|
138
|
+
completed extraction. For custom/embedded pipeline tools, acknowledgement only
|
|
139
|
+
means the background task started: inspect its final task state. Those operator
|
|
140
|
+
tools are not registered by the packaged default Index Server. See
|
|
141
|
+
[extraction failures](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md).
|
|
142
|
+
|
|
143
|
+
### Manager, policy or migration identity does not match the source
|
|
144
|
+
|
|
145
|
+
The selected-declaration repairs in #594 are unreleased after `2.0.0`.
|
|
146
|
+
Supporting writers use actual loaded ancestry where available and inspect
|
|
147
|
+
historical migration declarations without executing them. An unresolved qualified
|
|
148
|
+
migration namespace needs the documented source/normal-boot setup; do not load
|
|
149
|
+
historical migrations to force discovery. Full re-extraction repairs previously
|
|
150
|
+
misidentified migration units. Method chunks now distinguish `self.call`, `call`
|
|
151
|
+
and punctuation-bearing names, so rebuild affected embeddings after upgrading.
|
|
152
|
+
See the [extractor contracts](https://github.com/lost-in-the/woods/blob/main/docs/EXTRACTOR_REFERENCE.md).
|
|
153
|
+
|
|
87
154
|
### A cleaned index directory still exists
|
|
88
155
|
|
|
89
156
|
In Woods `2.0.0`, `woods:clean` retains the output directory and
|
|
@@ -112,6 +179,15 @@ extraction will remove a legitimate cross-type collision. See the canonical
|
|
|
112
179
|
|
|
113
180
|
## 2. Check the published index
|
|
114
181
|
|
|
182
|
+
In supporting unreleased writers after 2.0.0, incremental extraction and
|
|
183
|
+
targeted refresh refuse a flat index with a manifest or a generation whose
|
|
184
|
+
manifest writer major version is below 2. Run full `woods:extract` using the
|
|
185
|
+
[upgrade sequence](https://github.com/lost-in-the/woods/blob/main/docs/UPGRADING_TO_2.md#3-clean-and-re-extract).
|
|
186
|
+
Do not relabel the manifest or delete its writer field. A generation that
|
|
187
|
+
already lacks this field can be an early v2 beta and is allowed; an empty
|
|
188
|
+
output directory still needs a full baseline. Legacy read support does not
|
|
189
|
+
make partial writes a valid migration.
|
|
190
|
+
|
|
115
191
|
For a `same-type identifier collision`, inspect both named source files and the
|
|
116
192
|
Rails loader before suggesting source edits. Wrapper-nested class naming needs
|
|
117
193
|
Zeitwerk mode and Zeitwerk >= 2.6.9; an older loader or classic mode can produce
|
|
@@ -119,6 +195,21 @@ the collision even when the namespace wrappers are valid. The expanded error
|
|
|
119
195
|
guidance (B-149) is available in Woods `2.0.0.beta3`; check the installed version
|
|
120
196
|
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).
|
|
121
197
|
|
|
198
|
+
The incremental/refresh collision guard (#561) is unreleased after 2.0.0; verify
|
|
199
|
+
the writer revision before relying on it. A refusal preserves the prior
|
|
200
|
+
generation. Older writers could already have overwritten ownership: repair the
|
|
201
|
+
producer/source issue and perform a successful full extraction to recover.
|
|
202
|
+
Woods 2.0.0 can also misidentify Struct/Data classes inside namespace wrappers
|
|
203
|
+
(#559). The fix is unreleased after 2.0.0, planned for 2.1: verify the writer's
|
|
204
|
+
loaded revision before expecting assigned PORO/library child identities. A full
|
|
205
|
+
extraction repairs old identities and establishes reference-cache format 3;
|
|
206
|
+
incremental extraction refuses the older cache. Preserve the last generation
|
|
207
|
+
until the rebuild succeeds. Do not rename valid application constants or disable
|
|
208
|
+
collision checks to bypass an older writer's inference. Follow the
|
|
209
|
+
[assigned value-class contract](https://github.com/lost-in-the/woods/blob/main/docs/EXTRACTOR_REFERENCE.md#assigned-value-classes);
|
|
210
|
+
constructor blocks and unverified dynamic assignments remain outside reference
|
|
211
|
+
coverage. Updating this plugin does not upgrade the writer.
|
|
212
|
+
|
|
122
213
|
```bash
|
|
123
214
|
bin/rails woods:validate
|
|
124
215
|
bin/rails woods:stats
|
|
@@ -126,6 +217,14 @@ bin/rails woods:stats
|
|
|
126
217
|
|
|
127
218
|
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.
|
|
128
219
|
|
|
220
|
+
For incremental CI, restore only an index for the selected diff's exact base
|
|
221
|
+
commit; a cold or unrelated cache requires full extraction. Fetch the actual
|
|
222
|
+
PR base ref and sufficient history before running the task. Nested-app Git
|
|
223
|
+
paths, normalization of `./` and contained absolute `CHANGED_FILES`, and blank
|
|
224
|
+
CI-variable handling are unreleased after `2.0.0` (#571); check the installed
|
|
225
|
+
revision before relying on them. Keep nonempty invalid ranges as failures.
|
|
226
|
+
See the [incremental CI contract](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md#github-actions-with-an-exact-baseline).
|
|
227
|
+
|
|
129
228
|
Semantic graph validation (#413) is available in Woods `2.0.0.beta3`; verify the
|
|
130
229
|
installed gem before expecting these errors. Supporting versions check typed
|
|
131
230
|
unit identity, graph/index agreement and forward/reverse/file/type memberships
|
|
@@ -226,8 +325,17 @@ ranges. A commit alone may leave the source-file watcher idle; run full
|
|
|
226
325
|
extraction after repair or when current Git history is required. See the
|
|
227
326
|
[worktree mount guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#git-directory-mounts-for-linked-worktrees).
|
|
228
327
|
|
|
229
|
-
|
|
230
|
-
|
|
328
|
+
Builds containing #588 (unreleased after `2.0.0`) reconcile the whole jobs and
|
|
329
|
+
serializers families on relevant Ruby batches, including nested runtime classes.
|
|
330
|
+
Incomplete discovery retains unproven units and refuses ownership transfers.
|
|
331
|
+
Direct incremental calls reject restart-sensitive inputs; apply migrations and
|
|
332
|
+
run full extraction in a fresh Rails process. Fresh one-shot incremental tasks
|
|
333
|
+
escalate those inputs themselves. Disabling `precompute_flows` withdraws stored
|
|
334
|
+
flows on the next successful writer run. Check the revision and follow the
|
|
335
|
+
[runtime reconciliation guide](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md#runtime-removals-and-bundle-updates).
|
|
336
|
+
|
|
337
|
+
After a bundle change or on older builds after removal of a dynamically defined
|
|
338
|
+
job, incremental extraction can retain stale runtime units. Use a fresh process with the updated
|
|
231
339
|
bundle for full extraction, then validate. For missing external gem paths,
|
|
232
340
|
first distinguish an upgraded bundle from a reader on a different host/mount.
|
|
233
341
|
The more explicit `woods:validate` bundle-update remedy (B-166) is available in Woods
|
|
@@ -273,8 +381,37 @@ Recovery through `reset_cooldowns` (B-159) is available in Woods `2.0.0.beta3`.
|
|
|
273
381
|
Check the installed version before attempting it and follow the
|
|
274
382
|
[corrupt cooldown recovery guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#corrupt-pipeline-cooldown-state).
|
|
275
383
|
|
|
384
|
+
## Missing GraphQL units
|
|
385
|
+
|
|
386
|
+
In supporting unreleased readers after 2.0.0, `lookup` accepts the directory
|
|
387
|
+
family alias `type: "graphql"` and returns the actual subtype. Prefer the
|
|
388
|
+
concrete type from `search` for follow-up checks. On older readers, retry with
|
|
389
|
+
that concrete type before concluding that a published GraphQL unit is absent.
|
|
390
|
+
|
|
391
|
+
Woods 2.0.0 can omit schema classes, resolvers inherited through application
|
|
392
|
+
superclasses, and runtime types owned by additional schemas (#558, #562, #563).
|
|
393
|
+
The fixes are **unreleased after 2.0.0, planned for 2.1**; check the writer's loaded
|
|
394
|
+
revision before expecting them. A supporting writer publishes schema classes as
|
|
395
|
+
`graphql_type` with `metadata.graphql_kind: "schema"`, and combines the runtime
|
|
396
|
+
type inventories of every current application schema. Confirm that the application
|
|
397
|
+
boots, then run full extraction and validate to establish a complete upgrade baseline.
|
|
398
|
+
|
|
399
|
+
A schema introspection failure stops publication and leaves the prior generation
|
|
400
|
+
active. Fix the named schema error and retry; do not treat a partial boot or an
|
|
401
|
+
empty type inventory as proof that a query root was removed. Missing embeddings
|
|
402
|
+
cannot explain an absent structural unit. Follow the
|
|
403
|
+
[GraphQL extraction contract](https://github.com/lost-in-the/woods/blob/main/docs/EXTRACTOR_REFERENCE.md#graphqlextractor)
|
|
404
|
+
for source fallback, runtime-only removal and reference-coverage limits.
|
|
405
|
+
|
|
276
406
|
## Deferred refresh hooks
|
|
277
407
|
|
|
408
|
+
For missing Unicode edit events on a host without jq, inspect the locale and
|
|
409
|
+
the installed hook files. The #592 UTF-8 fallback repair is unreleased after
|
|
410
|
+
Woods `2.0.0`; it fixes edit queueing and SessionStart decoding under `LC_ALL=C`.
|
|
411
|
+
Older hooks can use jq or a UTF-8 locale. Confirm the pending queue and published
|
|
412
|
+
generation, since hook exit zero does not establish refresh. See
|
|
413
|
+
[client hook recovery](https://github.com/lost-in-the/woods/blob/main/docs/CLIENT_HOOKS.md#queue-paths-and-recovery).
|
|
414
|
+
|
|
278
415
|
Expanded hook coverage and `woods:hook_refresh` (#408) are available in Woods
|
|
279
416
|
`2.0.0.beta3`. Verify the installed task through the configured host/container
|
|
280
417
|
command before diagnosing this plugin's queue. Read `<output>/hook.log` and
|
|
@@ -300,6 +437,13 @@ deps as proof of a leaf. Narrow depth/types/via or increase a supported budget;
|
|
|
300
437
|
paging alone only visits the discovered prefix. See the
|
|
301
438
|
[budget contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#dependency-traversal-budgets).
|
|
302
439
|
|
|
440
|
+
On a reviewed post-2.0 writer containing the unreleased reference expansion,
|
|
441
|
+
missing/incompatible reference-cache state requires a full extraction before
|
|
442
|
+
incremental maintenance resumes. Check the loaded revision, not VERSION alone.
|
|
443
|
+
Increasing `max_nodes` cannot recover edges the writer never recorded. Follow the
|
|
444
|
+
[baseline diagnostic](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#source-reference-baseline-needs-a-full-extraction)
|
|
445
|
+
and preserve pending work. This plugin does not add extraction capabilities.
|
|
446
|
+
|
|
303
447
|
## 4. Check semantic retrieval
|
|
304
448
|
|
|
305
449
|
Do not treat structural `ready: true` or bootstrap `hydrated` as proof that
|
|
@@ -338,6 +482,23 @@ Only diagnose this layer when structural tools work and `codebase_retrieve` fail
|
|
|
338
482
|
- Dimension mismatch: rebuild into a store matching the configured model; do not suppress the preflight.
|
|
339
483
|
- Purge guard: back up and inspect the proposed deletion; never set `WOODS_ALLOW_PURGE` without explicit approval.
|
|
340
484
|
|
|
485
|
+
For an unsupported OpenAI `dimensions` option or stale vectors after changing
|
|
486
|
+
provider width/endpoint, check the installed revision: the embedding request and
|
|
487
|
+
cache consistency fix (#586) is unreleased after Woods `2.0.0`. It distinguishes
|
|
488
|
+
stored vector width from explicit reduction, omits unsupported width parameters
|
|
489
|
+
for fixed-width ada, and scopes embedding cache entries to provider configuration.
|
|
490
|
+
Follow the installed version's [embedding options and cache guidance](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#embedding-options);
|
|
491
|
+
never bypass a width refusal or infer this capability from the plugin version.
|
|
492
|
+
|
|
493
|
+
Injected-provider restoration (#599) is unreleased after Woods `2.0.0`.
|
|
494
|
+
Supporting writers preserve effective non-secret built-in settings through known
|
|
495
|
+
wrappers. If a snapshot carries `requires_host_provider`, use a supporting reader
|
|
496
|
+
and configure the compatible provider explicitly, or deliberately select lexical
|
|
497
|
+
mode. Older readers do not enforce this additive marker. Record both writer and
|
|
498
|
+
reader revisions when an endpoint or context size changes after restoration;
|
|
499
|
+
do not remove the marker or copy endpoint credentials into `woods.json`. See
|
|
500
|
+
[injected providers](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#injecting-a-provider-object).
|
|
501
|
+
|
|
341
502
|
For metadata appearing in another index or worktree, compare `WOODS_OUTPUT`,
|
|
342
503
|
`config.output_dir`, and any explicit `metadata_store_options[:database]`.
|
|
343
504
|
The default SQLite path following `WOODS_OUTPUT` during embedding (B-156) is
|
|
@@ -346,6 +507,16 @@ An explicit database path still wins. See the
|
|
|
346
507
|
[SQLite path contract](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#sqlite-metadata)
|
|
347
508
|
for isolation and upgrade steps.
|
|
348
509
|
|
|
510
|
+
### Restored snapshot files are not visible
|
|
511
|
+
|
|
512
|
+
`woods:clean` deletes history stored inside the output directory. Follow the
|
|
513
|
+
[upgrade backup and selective-restore sequence](https://github.com/lost-in-the/woods/blob/main/docs/UPGRADING_TO_2.md#3-clean-and-re-extract)
|
|
514
|
+
before cleaning; do not restore an old structural baseline over a new one.
|
|
515
|
+
`WOODS_SNAPSHOTS=true` enables store construction, but it still prefers SQLite
|
|
516
|
+
and does not import JSON history. A retained JSON history needs an explicit
|
|
517
|
+
`JsonSnapshotStore` reader if SQLite became available. Preserve the original
|
|
518
|
+
backup and verify an old snapshot before resuming writers.
|
|
519
|
+
|
|
349
520
|
## 5. Check Console separately
|
|
350
521
|
|
|
351
522
|
For repeated missing-token boot warnings on a stdio-only host, check whether
|
|
@@ -369,6 +540,15 @@ For MySQL SQL refusals, inspect the executing session's `sql_mode` and the insta
|
|
|
369
540
|
|
|
370
541
|
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
542
|
|
|
543
|
+
Woods `2.0.1` includes per-mount HTTP guards, complete collection-cell redaction,
|
|
544
|
+
longest exact-credential matching, and stricter SQL provenance/grammar checks.
|
|
545
|
+
Verify the installed version, loaded gem path and any Git revision before relying
|
|
546
|
+
on those protections. Keep automatic mounting, configured policies, and credential
|
|
547
|
+
checks intact; use scalar projections or a structured query when SQL cannot
|
|
548
|
+
preserve field identity. On an affected version, disable Console if those controls
|
|
549
|
+
are required. See the
|
|
550
|
+
[2.0.1 correction notes](https://github.com/lost-in-the/woods/blob/v2.0.1/docs/CONSOLE_MCP_SETUP.md#maintenance-policy-corrections).
|
|
551
|
+
|
|
372
552
|
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.
|
|
373
553
|
|
|
374
554
|
## Report
|
|
@@ -377,6 +557,17 @@ Return the first failing layer, commands/evidence, root-cause hypothesis, whethe
|
|
|
377
557
|
|
|
378
558
|
Canonical guide: [TROUBLESHOOTING.md](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md).
|
|
379
559
|
|
|
560
|
+
## SQLite metadata and typed semantic results
|
|
561
|
+
|
|
562
|
+
If a SQLite-backed index retains deleted units after embedding, or a `:local`
|
|
563
|
+
reader returns no type-filtered semantic matches after restart, record the exact
|
|
564
|
+
embedding and reader revisions. The SQLite reconciliation and metadata hydration
|
|
565
|
+
fix (#572) is unreleased after Woods `2.0.0`. With that fix, a full embed removes
|
|
566
|
+
stale SQLite rows; restarting the reader restores vector type filters from the
|
|
567
|
+
configured SQLite metadata store. Incremental empty-input and bulk-deletion
|
|
568
|
+
guards still apply. See the canonical
|
|
569
|
+
[SQLite metadata configuration](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#sqlite-metadata).
|
|
570
|
+
|
|
380
571
|
## Lexical retrieval capability check
|
|
381
572
|
|
|
382
573
|
Lexical retrieval is available from `2.0.0.beta3`. Before proposing it, verify the installed gem
|
|
@@ -414,6 +605,46 @@ inside the application environment establishes preboot evidence. Never publish
|
|
|
414
605
|
`.source-inputs.key`, silently change its permissions, or delete queued edits to
|
|
415
606
|
hide diagnostics. Follow [source freshness](https://github.com/lost-in-the/woods/blob/main/docs/SOURCE_FRESHNESS.md).
|
|
416
607
|
|
|
608
|
+
### Source paths with invalid filename bytes (unreleased after Woods 2.0.0; #573)
|
|
609
|
+
|
|
610
|
+
Check the writer revision before relying on this handling. An
|
|
611
|
+
`undecodable_source_path` diagnostic means Woods could not represent a filename
|
|
612
|
+
as UTF-8; source freshness remains unknown and reference publication preserves
|
|
613
|
+
the previous generation. Inspect the escaped path, correct the filename in the
|
|
614
|
+
application checkout, and retry extraction. Do not fabricate current freshness
|
|
615
|
+
or discard the prior index. Valid Unicode filenames remain supported, including
|
|
616
|
+
under a C locale. See [source freshness](https://github.com/lost-in-the/woods/blob/main/docs/SOURCE_FRESHNESS.md).
|
|
617
|
+
|
|
618
|
+
### Directory symlinks prevent the first extraction (#653)
|
|
619
|
+
|
|
620
|
+
The directory-link capture repair is unreleased after Woods `2.0.1`; check the
|
|
621
|
+
writer revision. Older writers can refuse `unverified_symlink_directory` even
|
|
622
|
+
for valid static-assets links. Supporting writers retain logical source aliases
|
|
623
|
+
and verify scoped files inside the app root; cycles, changing links and external
|
|
624
|
+
source still refuse verification. Do not replace valid application links or
|
|
625
|
+
disable publication safeguards. Upgrade the writer and run one fresh full
|
|
626
|
+
extraction. See [source scope](https://github.com/lost-in-the/woods/blob/main/docs/SOURCE_FRESHNESS.md#scope-and-partial-extraction).
|
|
627
|
+
|
|
628
|
+
### Surviving-file ownership moves (unreleased after Woods 2.0.0; #574)
|
|
629
|
+
|
|
630
|
+
Check the writer revision before relying on this correction. A moved class can
|
|
631
|
+
keep its identity when a complete Rails boot proves its unique new owner. For
|
|
632
|
+
file-derived identities, submit both changed paths together so extraction can
|
|
633
|
+
prove that the surviving old file released the identity. Retry the complete
|
|
634
|
+
batch after resolving boot or extraction failures; do not disable collision
|
|
635
|
+
checks or delete the previous generation to force a move through. Simultaneous
|
|
636
|
+
owners still fail. See [incremental extraction](https://github.com/lost-in-the/woods/blob/main/docs/INCREMENTAL_EXTRACTION.md).
|
|
637
|
+
|
|
638
|
+
### Once-loader naming (unreleased after Woods 2.0.0; #579)
|
|
639
|
+
|
|
640
|
+
Check the loaded writer revision when a declared library child is misnamed as
|
|
641
|
+
its enclosing wrapper. Writers with this fix use the owning Rails loader,
|
|
642
|
+
including `config.autoload_lib_once` naming rules. Run one full extraction after
|
|
643
|
+
upgrading an affected index before resuming incremental maintenance. This does
|
|
644
|
+
not combine unmanaged files that reopen one namespace or invent a class for a
|
|
645
|
+
VERSION-only file. Preserve collision diagnostics for those cases. See
|
|
646
|
+
[extractor naming](https://github.com/lost-in-the/woods/blob/main/docs/EXTRACTOR_REFERENCE.md#identifier-naming-source-derived-units).
|
|
647
|
+
|
|
417
648
|
## Compact evidence capability check
|
|
418
649
|
|
|
419
650
|
Inspect the connected server's installed tool schemas before using `evidence` on
|
|
@@ -461,13 +692,105 @@ byte-identical generated assets into `_woods/ownership.json`; changed legacy sid
|
|
|
461
692
|
manual recovery. Never fabricate ownership receipts or remove personal files to silence the error.
|
|
462
693
|
See the installed version's `docs/OBSIDIAN_INTEGRATION.md` for the exact safety contract.
|
|
463
694
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
695
|
+
## Source freshness and query errors after 2.0.0
|
|
696
|
+
|
|
697
|
+
Check the installed revision before using these unreleased diagnostics:
|
|
698
|
+
|
|
699
|
+
- Builds containing #589 expose `recorded_root`, `checked_root`, and `root_source`.
|
|
700
|
+
A recorded-root check does not certify a copied checkout. Follow `deep_check`
|
|
701
|
+
for a quick-reader timeout, `inspect_source_scan` for mapping/permission/limit
|
|
702
|
+
problems, and `fresh_capture` for incomplete capture or boot evidence. Preserve
|
|
703
|
+
mixed recommendations. Missing evidence cannot prove all files were added or
|
|
704
|
+
unreadable files deleted. See
|
|
705
|
+
[source freshness](https://github.com/lost-in-the/woods/blob/main/docs/SOURCE_FRESHNESS.md).
|
|
706
|
+
- Supporting builds publish a usable code index with freshness `unavailable`
|
|
707
|
+
and reason `source_manifest_too_large` when evidence alone exceeds its
|
|
708
|
+
serialized-size limit. Follow `inspect_source_limits` and inspect
|
|
709
|
+
`unavailable.size_bytes` / `unavailable.limit_bytes`; repeating an identical
|
|
710
|
+
full capture cannot fix this. Changed-file and Git-based incremental work
|
|
711
|
+
remain usable with validated source-reference proof. An oversized launcher
|
|
712
|
+
handoff starts a fresh child without verified preboot capture. Actual invalid
|
|
713
|
+
evidence, failed writes and source instability retain publication safeguards.
|
|
714
|
+
- Supporting readers retain readable unscoped search matches when an individual
|
|
715
|
+
needed unit cannot be decoded or opened, with partial reason
|
|
716
|
+
`unreadable_or_corrupt_source`. Empty partial results do not prove absence;
|
|
717
|
+
identifier-only summary hits do not validate bodies. Run `woods:validate`.
|
|
718
|
+
Explicit package/source-path scope still validates the full unit set before
|
|
719
|
+
matching; corrupt index-wide artifacts also retain typed errors. See
|
|
720
|
+
[search completeness](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#search-completeness).
|
|
721
|
+
- With `:local`, supporting readers return degraded reload because snapshot
|
|
722
|
+
vectors and SQLite metadata cannot refresh atomically together. The old
|
|
723
|
+
aligned state remains served. Restart `woods-mcp` after `woods:embed`; granting
|
|
724
|
+
write access alone cannot fix this case. See the
|
|
725
|
+
[backend matrix](https://github.com/lost-in-the/woods/blob/main/docs/BACKEND_MATRIX.md#persistence-story).
|
|
726
|
+
- Builds containing #593 return actual types from family-filtered search and
|
|
727
|
+
reject unknown type names. An unknown flow unit or snapshot is `not_found`,
|
|
728
|
+
while a valid empty answer remains successful. Repeated `corrupt_artifact`
|
|
729
|
+
errors after a malformed generation marker require validation and restoration
|
|
730
|
+
or a fresh extraction; never edit the pointer to guess a payload. See
|
|
731
|
+
[Index MCP contracts](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#resource-identity-and-damaged-generation-markers).
|
|
732
|
+
- Builds containing #590 retain intended private bundle settings during managed
|
|
733
|
+
preflight. Compare named identity fields and owned bytes before changing an
|
|
734
|
+
installer setup. Keep receipts; use the supporting executable for removal
|
|
735
|
+
before downgrading and real parent directories for temporary plans. See
|
|
736
|
+
[managed configuration](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_SETUP.md#managed-claude-code-configuration).
|
|
737
|
+
|
|
738
|
+
### Console HTTP remains unavailable after a Rails boot error
|
|
739
|
+
|
|
740
|
+
In builds containing #597's HTTP repair (unreleased after `2.0.0`), an eager-load
|
|
741
|
+
`NameError` makes that worker return a stable, non-cacheable HTTP 503. Reproduce
|
|
742
|
+
the application's eager loading, correct its naming or boot failure, and restart
|
|
743
|
+
the worker; do not keep retrying against a partially loaded model registry or
|
|
744
|
+
relax authentication/table rules. A 401 still indicates authentication failure.
|
|
745
|
+
See [Console startup diagnostics](https://github.com/lost-in-the/woods/blob/main/docs/CONSOLE_MCP_SETUP.md).
|
|
746
|
+
|
|
747
|
+
### Missing default or parenthesized state machines
|
|
748
|
+
|
|
749
|
+
The #594 literal state-machine repair is unreleased after `2.0.0`; verify the
|
|
750
|
+
writer's revision before relying on it. Supporting builds recognize direct
|
|
751
|
+
`state_machine` calls with the default `state` attribute or an explicit name,
|
|
752
|
+
including multiline parenthesized arguments. They do not infer dynamic or
|
|
753
|
+
inherited machines from missing edges. Re-extract with a supporting writer and
|
|
754
|
+
compare the selected model's actual registry when coverage is uncertain. See the
|
|
755
|
+
[extractor contract](https://github.com/lost-in-the/woods/blob/main/docs/EXTRACTOR_REFERENCE.md#statemachineextractor).
|
|
756
|
+
|
|
757
|
+
### Unreleased functional audit repairs
|
|
758
|
+
|
|
759
|
+
Record the loaded revision as well as VERSION before using these post-2.0.0
|
|
760
|
+
behaviors. A supporting exporter offers `UNBLOCKED_DRY_RUN=1` and explicit
|
|
761
|
+
`UNBLOCKED_MIGRATE_FROM_REF`; read the installed
|
|
762
|
+
[Unblocked migration guide](https://github.com/lost-in-the/woods/blob/main/docs/UNBLOCKED_INTEGRATION.md#explicit-ref-migration)
|
|
763
|
+
before moving a scope. Preserve receipts, use one writer, and never use force
|
|
764
|
+
purge to bypass unresolved ownership.
|
|
765
|
+
|
|
766
|
+
Unresolved legacy owned receipts leave Unblocked sync incomplete. Select the
|
|
767
|
+
known old ref explicitly; refs containing slashes cannot be inferred from URI
|
|
768
|
+
prefixes. Obsolete documents without current replacements require review and
|
|
769
|
+
manual remote and receipt cleanup. Do not remove receipts merely to clear the
|
|
770
|
+
diagnostic. Inventory entries without a non-empty string URI are skipped and
|
|
771
|
+
provide no ownership evidence.
|
|
772
|
+
|
|
773
|
+
Supporting embedding builds validate complete prefixed inputs, split source
|
|
774
|
+
without truncation, and rebuild old checkpoints once. Ollama counts are estimates
|
|
775
|
+
and requests use `truncate: false`; installing a tokenizer gem no longer selects
|
|
776
|
+
BERT for every model. Read the installed
|
|
777
|
+
[input contract](https://github.com/lost-in-the/woods/blob/main/docs/EMBEDDING_MODELS.md#why-num_ctx-isnt-enough)
|
|
778
|
+
and bounded unit/model/limit diagnostic before changing provider settings.
|
|
779
|
+
|
|
780
|
+
For reopened `lib/` units, inspect all `source_contributors`; primary `file_path`
|
|
781
|
+
is not complete ownership. Full extraction is required to rebuild the upgraded
|
|
782
|
+
reference cache. Missing dependency-owned components/channels are intentional
|
|
783
|
+
in supporting builds; app-owned mailers include parallel base-class branches.
|
|
784
|
+
|
|
785
|
+
### Console read compatibility in 2.0.1 and 1.6.4
|
|
786
|
+
|
|
787
|
+
Verify the installed version and loaded gem path, plus the locked revision for
|
|
788
|
+
Git-sourced builds. Woods `2.0.1` and `1.6.4` refuse SQL relation/CTE column alias
|
|
789
|
+
lists while redaction is active; typed EAV matching can intentionally mask extra
|
|
790
|
+
values where tables share a final name or differ only by case. Keep the policy
|
|
791
|
+
enabled and use explicit scalar columns or structured tools. Check exact
|
|
470
792
|
sensitive-key spelling and configure binary secret columns for column redaction.
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
793
|
+
Use the installed line's guide for adapter, timeout and projection limits:
|
|
794
|
+
[2.0.1](https://github.com/lost-in-the/woods/blob/v2.0.1/docs/CONSOLE_MCP_SETUP.md#read-policy-compatibility)
|
|
795
|
+
or [1.6.4](https://github.com/lost-in-the/woods/blob/v1.6.4/docs/CONSOLE_MCP_SETUP.md#read-policy-compatibility).
|
|
796
|
+
A plugin update does not patch Woods or make planned 2.1 features available.
|
|
@@ -59,6 +59,17 @@ or call coverage. Selective method-body scanning can miss references to generic
|
|
|
59
59
|
PORO and library targets. No dependents or test-only dependents do not establish
|
|
60
60
|
absence of production callers; check source before making that claim.
|
|
61
61
|
|
|
62
|
+
The [post-2.0 reference expansion](https://github.com/lost-in-the/woods/blob/main/docs/EXTRACTOR_REFERENCE.md#constant-source-references)
|
|
63
|
+
is unreleased and planned for 2.1. Verify the loaded writer revision and full
|
|
64
|
+
baseline before expecting its additional edges. `code_reference` is source
|
|
65
|
+
evidence, not observed execution; the coverage warning remains applicable.
|
|
66
|
+
|
|
67
|
+
The same planned expansion discovers callable standalone `app/models` modules
|
|
68
|
+
as `poro` units with `metadata.ruby_kind: "module"`. Runtime model mixins retain
|
|
69
|
+
`concern` ownership. Verify the installed writer and run a full extraction before
|
|
70
|
+
expecting those units; namespace-only wrappers and uncertain source ownership
|
|
71
|
+
remain outside discovery.
|
|
72
|
+
|
|
62
73
|
The response `graph_coverage` notice, `total_is_exact` field, and human label
|
|
63
74
|
`witness types unambiguous` (#470/#471) are included in Woods `2.0.0`.
|
|
64
75
|
Verify the installed server version and actual response fields; this plugin does
|
|
@@ -5,6 +5,21 @@ description: Configure Woods MCP connections with the exact client JSON shapes a
|
|
|
5
5
|
|
|
6
6
|
# Woods MCP configuration
|
|
7
7
|
|
|
8
|
+
For builds containing #590 (unreleased after `2.0.0`), managed preflight retains
|
|
9
|
+
intended bundle settings, project receipts omit the unused user config directory,
|
|
10
|
+
and watcher ownership tolerates Git checkout umasks. Check the installed revision
|
|
11
|
+
before relying on this. Keep the supporting executable for update/removal before
|
|
12
|
+
a permanent downgrade; never delete a receipt to bypass a conflict. Use a private
|
|
13
|
+
real directory for plan files when the system temporary path is a symlink. Follow
|
|
14
|
+
the [portability guidance](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_SETUP.md#managed-claude-code-configuration).
|
|
15
|
+
|
|
16
|
+
For builds containing #597's launcher repair (planned for 2.1; not included in
|
|
17
|
+
`2.0.1`),
|
|
18
|
+
`config/console.yml` must be a supported top-level mapping with string keys and
|
|
19
|
+
mode-appropriate options. Nested or unsupported configuration is refused before
|
|
20
|
+
launch rather than silently selecting local mode. Check the installed revision
|
|
21
|
+
and follow the [Console configuration guide](https://github.com/lost-in-the/woods/blob/main/docs/CONSOLE_MCP_SETUP.md).
|
|
22
|
+
|
|
8
23
|
## Managed configuration availability
|
|
9
24
|
|
|
10
25
|
`woods-agent-config` (#407) is available in Woods `2.0.0.beta3`. First record the
|
|
@@ -39,6 +54,14 @@ Keep normal protocol negotiation and use the
|
|
|
39
54
|
when unavailable. See the
|
|
40
55
|
[initialization contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#initialization-guidance).
|
|
41
56
|
|
|
57
|
+
The packaged Index process does not load Rails initializers. Session and Notion
|
|
58
|
+
tool registration requires an explicitly configured custom/embedded process;
|
|
59
|
+
application configuration alone does not wire them into a separate executable.
|
|
60
|
+
Use `bin/rails woods:notion_sync` for ordinary application export and verify
|
|
61
|
+
`tools/list` for custom capabilities. For a custom Console path, configure it
|
|
62
|
+
before Railtie initialization and restart. See the
|
|
63
|
+
[process boundaries](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#conditional-index-capabilities).
|
|
64
|
+
|
|
42
65
|
## Shape 1: Index-only
|
|
43
66
|
|
|
44
67
|
```json
|
|
@@ -99,6 +122,11 @@ override; the shared root selects the primary checkout's HEAD. Follow the
|
|
|
99
122
|
|
|
100
123
|
A read-only index mount is sufficient for structural tools. The `reload` tool for in-memory semantic retrieval also takes Woods' shared on-disk writer lock, so the MCP process needs write access to the index directory. Without it, reload returns a typed degraded error and keeps serving the previous aligned generation. Either grant that access or restart the MCP process after publishing a new embedded index.
|
|
101
124
|
|
|
125
|
+
In supporting unreleased builds after 2.0.0, the `:local` preset also returns
|
|
126
|
+
degraded on reload because snapshot vectors and SQLite metadata cannot refresh
|
|
127
|
+
atomically together. Restart `woods-mcp` after `woods:embed`; write access alone
|
|
128
|
+
does not resolve this case. See the [backend matrix](https://github.com/lost-in-the/woods/blob/main/docs/BACKEND_MATRIX.md#persistence-story).
|
|
129
|
+
|
|
102
130
|
For host MCP reading a container daemon's shared index, foreign heartbeat trust
|
|
103
131
|
(#321) is available in Woods `2.0.0.beta3`. Verify the installed gem version's release notes before
|
|
104
132
|
offering `WOODS_WATCH_TRUST_FOREIGN_HOST=1` in the MCP environment. It makes
|
|
@@ -125,6 +153,12 @@ For HTTP, retain a strong token, allowed origins and TLS. Use installed-version
|
|
|
125
153
|
tagged documentation; the [canonical Console guide](https://github.com/lost-in-the/woods/blob/main/docs/CONSOLE_MCP_SETUP.md)
|
|
126
154
|
tracks current source.
|
|
127
155
|
|
|
156
|
+
Prefer the automatic Rails middleware mount. Per-instance guards for legacy
|
|
157
|
+
manual mounts are included in Woods `2.0.1` and `1.6.4`; verify the installed
|
|
158
|
+
version, loaded gem path and any Git revision before relying on them. A plugin
|
|
159
|
+
update does not patch the server. Follow the installed version's Console guide
|
|
160
|
+
and leave HTTP disabled for stdio-only use.
|
|
161
|
+
|
|
128
162
|
Then add a direct Console process:
|
|
129
163
|
|
|
130
164
|
```json
|
|
@@ -137,6 +171,11 @@ Then add a direct Console process:
|
|
|
137
171
|
|
|
138
172
|
For Docker/SSH, configure `~/.woods/console.yml` or `WOODS_CONSOLE_CONFIG`; the launcher owns process replacement. Direct Docker stdio uses `docker exec -i`, or `docker compose exec -T` to disable Compose's pseudo-TTY while retaining stdin.
|
|
139
173
|
|
|
174
|
+
Supporting unreleased builds after `2.0.0` prefer the selected app's executable
|
|
175
|
+
`bin/rake` in direct mode. A relative `directory` in `console.yml` is relative to
|
|
176
|
+
the launcher's initial `cwd`. Record the installed revision before relying on
|
|
177
|
+
this preference; explicit commands still win.
|
|
178
|
+
|
|
140
179
|
Reserve stdout for MCP. Through Woods `2.0.0.beta4`, configure the Console
|
|
141
180
|
process's Rails logger to use stderr or a file, including logs during queries.
|
|
142
181
|
Runtime stdout isolation is included in Woods `2.0.0`; verify the installed
|
|
@@ -204,6 +243,26 @@ inside the application environment establishes preboot evidence. Never publish
|
|
|
204
243
|
`.source-inputs.key`, silently change its permissions, or delete queued edits to
|
|
205
244
|
hide diagnostics. Follow [source freshness](https://github.com/lost-in-the/woods/blob/main/docs/SOURCE_FRESHNESS.md).
|
|
206
245
|
|
|
246
|
+
Supporting unreleased builds after 2.0.0 report `unavailable` with
|
|
247
|
+
`source_manifest_too_large` when source evidence exceeds its serialized-size
|
|
248
|
+
limit. The code index remains usable. Follow `inspect_source_limits`, inspect
|
|
249
|
+
`unavailable.size_bytes` / `unavailable.limit_bytes`, and retain the limitation;
|
|
250
|
+
an identical full extraction or a deeper scan cannot fix oversized evidence.
|
|
251
|
+
An oversized launcher handoff cannot establish verified preboot capture.
|
|
252
|
+
|
|
253
|
+
## Partial search and GraphQL lookup (unreleased after 2.0.0)
|
|
254
|
+
|
|
255
|
+
Check the installed reader revision before relying on these repairs. Unscoped
|
|
256
|
+
search skips an individual unit it needs but cannot read, retains readable matches,
|
|
257
|
+
and reports successful partial completeness with
|
|
258
|
+
`reason: "unreadable_or_corrupt_source"`. Empty partial results do not prove
|
|
259
|
+
absence. Identifier-only search can use summaries without validating unit
|
|
260
|
+
bodies; run `woods:validate` for damage. Explicit package/source-path scope
|
|
261
|
+
still requires readable bodies across its full-unit preflight. Corrupt
|
|
262
|
+
index-wide artifacts return a typed error. Supporting `lookup` also accepts
|
|
263
|
+
`type: "graphql"`, but returns the unit's concrete type; use that type for follow-up checks.
|
|
264
|
+
See the [search contract](https://github.com/lost-in-the/woods/blob/main/docs/MCP_SERVERS.md#search-completeness).
|
|
265
|
+
|
|
207
266
|
## Compact evidence capability check
|
|
208
267
|
|
|
209
268
|
Inspect the connected server's installed tool schemas before using `evidence` on
|
|
@@ -215,17 +274,29 @@ coordinates are not physical file offsets; unknown generation remains unknown.
|
|
|
215
274
|
Keep full-source access available. See the canonical
|
|
216
275
|
[evidence contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#compact-published-evidence-and-api-outlines).
|
|
217
276
|
|
|
218
|
-
###
|
|
277
|
+
### Origin policy compatibility
|
|
278
|
+
|
|
279
|
+
In Woods `2.0.1`, HTTP preflight and the SDK share one captured policy. List the
|
|
280
|
+
browser's exact origin, including its port, for cross-origin requests; portless
|
|
281
|
+
entries additionally permit same-authority
|
|
282
|
+
traffic. Include a non-loopback MCP endpoint authority and restart after edits.
|
|
283
|
+
Do not disable SDK protection or rewrite Origin/Host to make a request pass.
|
|
284
|
+
Follow the [2.0.1 HTTP guide](https://github.com/lost-in-the/woods/blob/v2.0.1/docs/MCP_HTTP_TRANSPORT.md#browser-origins-dns-rebinding-defense)
|
|
285
|
+
and verify both preflight and authenticated dispatch.
|
|
286
|
+
|
|
287
|
+
### HTTP configuration diagnostics in 2.0.1
|
|
219
288
|
|
|
220
|
-
|
|
221
|
-
origin settings, including invalidly encoded entries, refuse at
|
|
222
|
-
executable reports one configuration diagnostic and exits 2.
|
|
223
|
-
entry and restart; keep authentication and origin checks enabled. Follow the
|
|
289
|
+
Verify the installed version, loaded gem path and any Git revision. In Woods
|
|
290
|
+
`2.0.1`, invalid origin settings, including invalidly encoded entries, refuse at
|
|
291
|
+
boot. The HTTP executable reports one configuration diagnostic and exits 2.
|
|
292
|
+
Correct the named entry and restart; keep authentication and origin checks enabled. Follow the
|
|
224
293
|
installed revision's canonical `docs/MCP_HTTP_TRANSPORT.md` for accepted origins.
|
|
225
294
|
|
|
226
295
|
Use whitespace-free literal origin entries; explicit lists replace browser
|
|
227
296
|
defaults, and wildcard patterns are unsupported. Preserve the real Host behind
|
|
228
297
|
proxies. Verify both preflight and bearer-authenticated dispatch against the
|
|
229
|
-
[HTTP compatibility guide](https://github.com/lost-in-the/woods/blob/
|
|
230
|
-
|
|
231
|
-
|
|
298
|
+
[2.0.1 HTTP compatibility guide](https://github.com/lost-in-the/woods/blob/v2.0.1/docs/MCP_HTTP_TRANSPORT.md#origin-configuration-compatibility).
|
|
299
|
+
For applications staying on 1.6, use `1.6.4` and its
|
|
300
|
+
[HTTP compatibility guide](https://github.com/lost-in-the/woods/blob/v1.6.4/docs/MCP_HTTP_TRANSPORT.md#origin-configuration-compatibility);
|
|
301
|
+
configuration normalization differs between the two lines. A plugin update does
|
|
302
|
+
not update either server's installed gem.
|