woods 2.0.0.beta4 → 2.0.1

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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +495 -471
  3. data/CONTRIBUTING.md +12 -2
  4. data/README.md +11 -26
  5. data/docs/AGENT_GUIDE.md +31 -12
  6. data/docs/AGENT_SETUP.md +17 -10
  7. data/docs/AUTOMATIC_MAINTENANCE.md +222 -0
  8. data/docs/BACKEND_MATRIX.md +13 -7
  9. data/docs/CLIENT_HOOKS.md +1 -1
  10. data/docs/CONFIGURATION_REFERENCE.md +44 -27
  11. data/docs/CONSOLE_MCP_SETUP.md +95 -16
  12. data/docs/DOCKER_SETUP.md +15 -0
  13. data/docs/EVALUATION.md +10 -4
  14. data/docs/EXTRACTOR_REFERENCE.md +14 -2
  15. data/docs/FAQ.md +14 -3
  16. data/docs/GETTING_STARTED.md +18 -17
  17. data/docs/INCREMENTAL_EXTRACTION.md +8 -3
  18. data/docs/INDEX_LAYOUT.md +2 -2
  19. data/docs/MCP_HTTP_TRANSPORT.md +54 -2
  20. data/docs/MCP_SERVERS.md +28 -11
  21. data/docs/MCP_TOOL_COOKBOOK.md +1 -1
  22. data/docs/MCP_WORKTREE_SETUP.md +13 -1
  23. data/docs/PUBLISHED_INDEX.md +1 -1
  24. data/docs/README.md +2 -1
  25. data/docs/RETRIEVAL_GUIDE.md +57 -8
  26. data/docs/SOURCE_FRESHNESS.md +1 -1
  27. data/docs/TOKEN_BENCHMARK.md +16 -10
  28. data/docs/TROUBLESHOOTING.md +133 -37
  29. data/docs/UPGRADING_TO_2.md +69 -7
  30. data/docs/WATCH_DAEMON.md +172 -17
  31. data/docs/WHY_WOODS.md +9 -5
  32. data/exe/woods-console +13 -11
  33. data/exe/woods-mcp-http +16 -9
  34. data/exe/woods-watch +5 -0
  35. data/lib/generators/woods/watch_generator.rb +53 -0
  36. data/lib/puma/plugin/woods.rb +10 -0
  37. data/lib/tasks/woods.rake +14 -0
  38. data/lib/woods/cache/cache_middleware.rb +18 -11
  39. data/lib/woods/console/adapter_family.rb +39 -0
  40. data/lib/woods/console/credential_index.rb +33 -3
  41. data/lib/woods/console/embedded_executor.rb +401 -43
  42. data/lib/woods/console/model_validator.rb +8 -0
  43. data/lib/woods/console/rack_middleware.rb +39 -10
  44. data/lib/woods/console/redactor.rb +24 -10
  45. data/lib/woods/console/safe_context.rb +44 -7
  46. data/lib/woods/console/sql_noise_stripper.rb +41 -12
  47. data/lib/woods/console/sql_table_scanner.rb +45 -34
  48. data/lib/woods/console/sql_validator.rb +37 -2
  49. data/lib/woods/console/stdio_transport.rb +27 -0
  50. data/lib/woods/extractor.rb +25 -7
  51. data/lib/woods/git_command.rb +6 -7
  52. data/lib/woods/git_provenance.rb +4 -6
  53. data/lib/woods/mcp/bearer_auth.rb +1 -1
  54. data/lib/woods/mcp/bootstrapper.rb +3 -1
  55. data/lib/woods/mcp/initialization_guidance.rb +1 -1
  56. data/lib/woods/mcp/origin_guard.rb +24 -77
  57. data/lib/woods/mcp/origin_policy.rb +124 -0
  58. data/lib/woods/mcp/server.rb +41 -9
  59. data/lib/woods/railtie_support.rb +8 -0
  60. data/lib/woods/retrieval/corpus_status.rb +46 -0
  61. data/lib/woods/retriever.rb +19 -7
  62. data/lib/woods/storage/local_corpus_stats.rb +32 -0
  63. data/lib/woods/storage/metadata_store.rb +20 -0
  64. data/lib/woods/storage/vector_store.rb +10 -0
  65. data/lib/woods/version.rb +1 -1
  66. data/lib/woods/watch/child_environment.rb +30 -0
  67. data/lib/woods/watch/cli.rb +91 -0
  68. data/lib/woods/watch/daemon.rb +55 -7
  69. data/lib/woods/watch/event_stream.rb +70 -0
  70. data/lib/woods/watch/guardian.rb +142 -0
  71. data/lib/woods/watch/installation/layout.rb +70 -0
  72. data/lib/woods/watch/installation/options.rb +128 -0
  73. data/lib/woods/watch/installation/planner.rb +128 -0
  74. data/lib/woods/watch/installation/probe.rb +101 -0
  75. data/lib/woods/watch/installation/receipt.rb +77 -0
  76. data/lib/woods/watch/installation/recovery.rb +64 -0
  77. data/lib/woods/watch/installation/templates.rb +58 -0
  78. data/lib/woods/watch/installation.rb +56 -0
  79. data/lib/woods/watch/lifecycle.rb +182 -0
  80. data/lib/woods/watch/managed_child.rb +113 -0
  81. data/lib/woods/watch/managed_cleanup.rb +48 -0
  82. data/lib/woods/watch/managed_process.rb +144 -0
  83. data/lib/woods/watch/puma_adapter.rb +87 -0
  84. data/lib/woods/watch/puma_child.rb +66 -0
  85. data/lib/woods/watch/supervision_records.rb +95 -0
  86. data/lib/woods/watch/supervision_status.rb +104 -0
  87. data/lib/woods/watch/supervisor.rb +161 -0
  88. data/lib/woods/watch/supervisor_reporting.rb +46 -0
  89. data/plugin/.claude-plugin/plugin.json +1 -1
  90. data/plugin/skills/woods-agent-enable/SKILL.md +1 -1
  91. data/plugin/skills/woods-diagnose/SKILL.md +88 -8
  92. data/plugin/skills/woods-investigate/SKILL.md +6 -6
  93. data/plugin/skills/woods-mcp-config/SKILL.md +43 -1
  94. data/plugin/skills/woods-setup/SKILL.md +66 -4
  95. metadata +37 -5
@@ -55,11 +55,26 @@ when unavailable. See the
55
55
 
56
56
  Use this shape for any stdio-capable MCP client, adapted to the client's configuration location. `woods-mcp-start` validates and launches; it does not install or auto-restart.
57
57
 
58
+ MCP registration does not start automatic indexing. Existing readers observe
59
+ published generations without reconnecting; separately verify the watcher owner,
60
+ startup catch-up, and a real edit. Native launcher/Puma installation (#538) is
61
+ included in Woods `2.0.0`: check installed `woods-watch` and generator help
62
+ before offering it. Preserve the existing external service in Docker/Grove and
63
+ keep its source/index aligned across switches. See
64
+ [automatic maintenance](https://github.com/lost-in-the/woods/blob/main/docs/AUTOMATIC_MAINTENANCE.md).
65
+
58
66
  Writer-version provenance (#323) is available in Woods `2.0.0.beta3`; check the installed
59
67
  gem version's release notes before expecting `index.woods_version` in `woods_status`. It reports
60
68
  the last manifest publisher, independently of `server.version`. Treat missing/null
61
69
  as unknown and see [writer provenance](https://github.com/lost-in-the/woods/blob/main/docs/PUBLISHED_INDEX.md#manifest-writer-provenance).
62
70
 
71
+ Verify semantic retrieval separately from structural `ready`. A reachable
72
+ provider and bootstrap `hydrated` can coexist with empty stores. If the recorded
73
+ reader supports #549, inspect `retriever.corpus` for local record counts and
74
+ known-empty diagnostics; absent or unknown counts require checking embedding
75
+ artifacts. These fields do not certify embedding coverage. See the
76
+ [readiness distinction](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#semantic-corpus-diagnostics).
77
+
63
78
  When Woods is installed only in Docker, prefer running the server through the application container:
64
79
 
65
80
  ```json
@@ -74,7 +89,13 @@ When Woods is installed only in Docker, prefer running the server through the ap
74
89
  }
75
90
  ```
76
91
 
77
- Use a host-side bundle only after verifying Ruby, the application bundle, and the index are available on the host. Always pass the path visible to the process that runs `woods-mcp`. Prefer an explicit index path on all versions. After `2.0.0.beta3`, an unreleased change adds `WOODS_OUTPUT` as a fallback after the positional path and `WOODS_DIR`; check the installed version's configuration guide before relying on it. `woods-mcp-start` still refuses a missing path rather than selecting its working directory.
92
+ Use a host-side bundle only after verifying Ruby, the application bundle, and the index are available on the host. Always pass the path visible to the process that runs `woods-mcp`. Prefer an explicit index path on all versions. Woods `2.0.0` includes `WOODS_OUTPUT` as a fallback after the positional path and `WOODS_DIR`; check the installed version's configuration guide before relying on it. `woods-mcp-start` still refuses a missing path rather than selecting its working directory.
93
+
94
+ For linked worktrees, verify source/index alignment and the extraction's Git
95
+ branch and exact SHA. Preserve the complete shared Git layout and select the
96
+ worktree-specific directory when using the installed version's `WOODS_GIT_DIR`
97
+ override; the shared root selects the primary checkout's HEAD. Follow the
98
+ [worktree mount guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#git-directory-mounts-for-linked-worktrees).
78
99
 
79
100
  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.
80
101
 
@@ -116,6 +137,12 @@ Then add a direct Console process:
116
137
 
117
138
  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.
118
139
 
140
+ Reserve stdout for MCP. Through Woods `2.0.0.beta4`, configure the Console
141
+ process's Rails logger to use stderr or a file, including logs during queries.
142
+ Runtime stdout isolation is included in Woods `2.0.0`; verify the installed
143
+ revision before relying on it. Use the rake entry point to capture Rails boot
144
+ output as well.
145
+
119
146
  Console registers nine default tools. `config.console_embedded_read_tools = true` explicitly adds `console_sql` and `console_query` for eleven total. Tier 2, Tier 3, and `console_eval` are inventory-only in supported packaged modes.
120
147
 
121
148
  ## Shape 3: Authenticated Console HTTP
@@ -187,3 +214,18 @@ returned typed, SHA-guarded `full_evidence` lookup for verification. Published-u
187
214
  coordinates are not physical file offsets; unknown generation remains unknown.
188
215
  Keep full-source access available. See the canonical
189
216
  [evidence contract](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#compact-published-evidence-and-api-outlines).
217
+
218
+ ### HTTP configuration diagnostics on security-patch candidates
219
+
220
+ Check the installed revision before expecting this unreleased correction. Invalid
221
+ origin settings, including invalidly encoded entries, refuse at boot. The HTTP
222
+ executable reports one configuration diagnostic and exits 2. Correct the named
223
+ entry and restart; keep authentication and origin checks enabled. Follow the
224
+ installed revision's canonical `docs/MCP_HTTP_TRANSPORT.md` for accepted origins.
225
+
226
+ Use whitespace-free literal origin entries; explicit lists replace browser
227
+ defaults, and wildcard patterns are unsupported. Preserve the real Host behind
228
+ proxies. Verify both preflight and bearer-authenticated dispatch against the
229
+ [HTTP compatibility guide](https://github.com/lost-in-the/woods/blob/main/docs/MCP_HTTP_TRANSPORT.md#origin-configuration-compatibility)
230
+ at the installed revision; configured non-loopback Hosts are passed to the SDK
231
+ in supporting patches.
@@ -38,7 +38,7 @@ This skill describes the Woods 2.x line; the authoritative minimum version lives
38
38
 
39
39
  Choose the published version using the canonical
40
40
  [installation guide](https://github.com/lost-in-the/woods/blob/main/docs/GETTING_STARTED.md#1-install-the-gem)
41
- and its linked README release table. When only prereleases are published for
41
+ and confirm the selected version on RubyGems. When only prereleases are published for
42
42
  2.x, add the exact published beta/RC constraint shown there to the development
43
43
  group; `~> 2.0` does not select prereleases. Use `gem "woods", "~> 2.0"` only after
44
44
  a stable 2.x release is published. Follow the selected version's tag docs and
@@ -108,9 +108,58 @@ When Woods is installed only in Docker, launch it through the application servic
108
108
  }
109
109
  ```
110
110
 
111
+ For linked worktrees, verify source/index alignment and the extraction's Git
112
+ branch and exact SHA. Preserve the complete shared Git layout and select the
113
+ worktree-specific directory when using the installed version's `WOODS_GIT_DIR`
114
+ override; the shared root selects the primary checkout's HEAD. Follow the
115
+ [worktree mount guide](https://github.com/lost-in-the/woods/blob/main/docs/TROUBLESHOOTING.md#git-directory-mounts-for-linked-worktrees).
116
+
111
117
  Reconnect and call `woods_status`, then `search`, `lookup`, and `dependents` for a known class. The normal Index Server has 14 tools. `codebase_retrieve` requires configured embeddings in semantic mode; see the lexical capability check below for the opt-in provider-free mode.
112
118
 
113
- Offer to add `bundle exec rake woods:watch` to the existing development process manager. When authorized, it catches up missed changes and automatically maintains the structural index; the Index Server refreshes on its next call, so ordinary edits need no manual extraction or MCP restart. Use the standalone watch command; do not prepend the `environment` task. Check the installed version's watch guide before relying on automatic startup reconciliation. State that live boot-captured changes require supervisor restart, Docker may need `WOODS_WATCH_POLL=1`, and semantic vectors still need `woods:embed_incremental`.
119
+ Structural readiness alone does not verify semantic retrieval. If that mode is
120
+ requested, confirm an embedding run and a useful retrieval result. Readers with
121
+ #549 expose `retriever.corpus` counts; check the installed capability before
122
+ expecting them. Unknown counts are not zero, and positive counts do not certify
123
+ complete embedding coverage. See
124
+ [corpus diagnostics](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#semantic-corpus-diagnostics).
125
+
126
+ Offer one automatic-maintenance owner within the setup scope. The managed launcher,
127
+ watcher generator, and Puma adapter (#538) are **included in Woods `2.0.0`**.
128
+ Record the loaded gem path and revision, then verify `bundle exec woods-watch
129
+ --help` and `bin/rails generate woods:watch --help` before using them. Follow the
130
+ [managed startup runbook](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#managed-development-startup):
131
+ Puma for simple Rails startup, an explicit verified Foreman command/Procfile, or
132
+ the existing external Docker/Grove supervisor. Preview before applying within
133
+ existing authorization. Preserve `bin/dev`; never claim an unused Procfile is
134
+ active. Keep the portable receipt with generated files and respect edit conflicts.
135
+ Puma installation supports the normal default `config/puma.rb` route; an existing
136
+ environment-specific file or custom `-C` route needs a different explicit owner.
137
+ The #542 guard included in Woods `2.0.0` checks plugin files in the active gem, including Git/path
138
+ bundles. Older gems without the plugin skip watcher startup. Existing generated
139
+ Puma setups need an explicit `--operation update --mode puma` (preview first) to
140
+ upgrade the owned guard in place; repeating setup preserves it. The wrapper and
141
+ Foreman entry still require a supporting gem. Remove owned setup before a permanent
142
+ downgrade; do not hand-edit the receipt or its managed block.
143
+ Run setup in the normal application bundle environment. The #540 fix in Woods `2.0.0`
144
+ preserves `BUNDLE_PATH`, `BUNDLE_APP_CONFIG`, and group selection during preflight;
145
+ older Git builds may falsely report missing gems. Check the loaded revision
146
+ before changing persistent Bundler settings to work around that error.
147
+ The #544 fix in Woods `2.0.0` makes generator refusals exit nonzero. Earlier Git builds
148
+ can exit zero after printing a refusal; verify the diagnostic and applied setup
149
+ before treating their exit status as installation success.
150
+ For an interrupted install, use the generator's `--operation recover --pretend`
151
+ before applying recovery; preserve journals when concurrent edits block it. The
152
+ Rails generator command boots the app first: use the runbook's direct bundled
153
+ Ruby recovery helper when an initializer prevents boot.
154
+
155
+ On older gems, use the raw task only with a restart-capable external supervisor;
156
+ do not place it bare in Foreman, where exit 75 stops the whole stack. Use the
157
+ application's real Rails task entrypoint without a preceding `environment` task.
158
+ Managed mode rejects idle TTL and does not take over conflicting owners. Verify
159
+ startup catch-up, an edit, and a planned restart through the existing MCP reader;
160
+ for Grove, also verify worktree/source/index alignment. Docker may need polling.
161
+ Semantic vectors still need `woods:embed_incremental`; hooks and MCP registration
162
+ do not install watcher startup.
114
163
 
115
164
  Foreign-host heartbeat trust (`WOODS_WATCH_TRUST_FOREIGN_HOST=1`, #321) is available in
116
165
  Woods `2.0.0.beta3`.
@@ -155,13 +204,18 @@ for transport, retry and custom-root limits.
155
204
 
156
205
  ## Ask before expanding scope
157
206
 
158
- For pgvector, match the provider output and migration dimensions within 1–2,000. Default `text-embedding-3-large` output (3,072) needs an explicit smaller provider width or another backend; never silently truncate vectors. Early adapter/generator refusal is unreleased after `2.0.0.beta3`, so check the installed revision. See the [dimension contract](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#pgvector-postgresql).
207
+ For pgvector, match the provider output and migration dimensions within 1–2,000. Default `text-embedding-3-large` output (3,072) needs an explicit smaller provider width or another backend; never silently truncate vectors. Early adapter/generator refusal is included in Woods `2.0.0`, so check the installed revision. See the [dimension contract](https://github.com/lost-in-the/woods/blob/main/docs/CONFIGURATION_REFERENCE.md#pgvector-postgresql).
159
208
 
160
209
  Require explicit approval before adding Ollama/OpenAI, pgvector/Qdrant, secrets, Console MCP/live-data access, HTTP transport, or purge overrides. The `:local` preset avoids cloud keys but requires the `sqlite3` gem, an installed/running Ollama service, and a pulled model (`ollama pull nomic-embed-text` by default); `:shared_filesystem` avoids sqlite3 but still uses Ollama. Recommend `gem "tokenizers", "~> 0.5"` for exact counting on dense Ruby source, while stating that it is optional.
161
210
 
162
211
  ## Handoff
163
212
 
164
- Report the Woods version, branch, files changed, commands/results, index path, MCP calls verified, semantic retrieval status, Console status, and unresolved risks. Never infer availability from source schemas alone.
213
+ Report the Woods version/revision, branch, files changed, commands/results, index
214
+ path, MCP calls verified, semantic retrieval and Console status, and unresolved
215
+ risks. For automatic maintenance record the owner, actual startup command,
216
+ completed catch-up, observed edit/restart, and worktree verification. Report
217
+ refresh hooks, session checks, and context hints separately. Never infer
218
+ availability from source schemas or a live process alone.
165
219
 
166
220
  Canonical runbook: [AGENT_SETUP.md](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_SETUP.md).
167
221
 
@@ -201,3 +255,11 @@ dependents and suggested tests manually; silence is not no impact. Do not clear
201
255
  refresh queues when optional hints time out. See the canonical
202
256
  [context guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#optional-bounded-context-hints)
203
257
  for output/time limits, container root mapping and emitted-hint suppression.
258
+
259
+ ### Security-patch compatibility preflight
260
+
261
+ For security-patch candidates after 2.0.0, record the loaded revision and gem
262
+ path as well as the version. Review the [Console compatibility guide](https://github.com/lost-in-the/woods/blob/main/docs/CONSOLE_MCP_SETUP.md#read-policy-compatibility)
263
+ and HTTP origin compatibility at that revision before upgrading an authorized
264
+ Console installation. The plugin does not install these fixes or establish that
265
+ a release is published.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: woods
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta4
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leah Armstrong
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-22 00:00:00.000000000 Z
11
+ date: 2026-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mcp
@@ -113,6 +113,7 @@ description: |
113
113
  email:
114
114
  - info@leah.wtf
115
115
  executables:
116
+ - woods-watch
116
117
  - woods-mcp
117
118
  - woods-mcp-start
118
119
  - woods-console-mcp
@@ -133,6 +134,7 @@ files:
133
134
  - assets/woods-wordmark-white-with-bg.png
134
135
  - docs/AGENT_GUIDE.md
135
136
  - docs/AGENT_SETUP.md
137
+ - docs/AUTOMATIC_MAINTENANCE.md
136
138
  - docs/BACKEND_MATRIX.md
137
139
  - docs/CLIENT_HOOKS.md
138
140
  - docs/CONFIGURATION_REFERENCE.md
@@ -171,11 +173,14 @@ files:
171
173
  - exe/woods-mcp
172
174
  - exe/woods-mcp-http
173
175
  - exe/woods-mcp-start
176
+ - exe/woods-watch
174
177
  - lib/generators/woods/install_generator.rb
175
178
  - lib/generators/woods/pgvector_generator.rb
176
179
  - lib/generators/woods/templates/add_pgvector_to_woods.rb.erb
177
180
  - lib/generators/woods/templates/create_woods_tables.rb.erb
178
181
  - lib/generators/woods/templates/woods.rb.tt
182
+ - lib/generators/woods/watch_generator.rb
183
+ - lib/puma/plugin/woods.rb
179
184
  - lib/tasks/woods.rake
180
185
  - lib/tasks/woods_checks.rake
181
186
  - lib/tasks/woods_evaluation.rake
@@ -211,6 +216,7 @@ files:
211
216
  - lib/woods/checks/moved_messages.rb
212
217
  - lib/woods/chunking/chunk.rb
213
218
  - lib/woods/chunking/semantic_chunker.rb
219
+ - lib/woods/console/adapter_family.rb
214
220
  - lib/woods/console/audit_logger.rb
215
221
  - lib/woods/console/bridge_protocol.rb
216
222
  - lib/woods/console/confirmation.rb
@@ -235,6 +241,7 @@ files:
235
241
  - lib/woods/console/sql_table_scanner.rb
236
242
  - lib/woods/console/sql_validator.rb
237
243
  - lib/woods/console/sqlite_read_guard.rb
244
+ - lib/woods/console/stdio_transport.rb
238
245
  - lib/woods/console/table_gate.rb
239
246
  - lib/woods/console/tool_specs.rb
240
247
  - lib/woods/console/tools/tier1.rb
@@ -370,6 +377,7 @@ files:
370
377
  - lib/woods/mcp/index_reader_pinning.rb
371
378
  - lib/woods/mcp/initialization_guidance.rb
372
379
  - lib/woods/mcp/origin_guard.rb
380
+ - lib/woods/mcp/origin_policy.rb
373
381
  - lib/woods/mcp/protocol_policy.rb
374
382
  - lib/woods/mcp/provider_probe.rb
375
383
  - lib/woods/mcp/published_lexical_retriever.rb
@@ -430,6 +438,7 @@ files:
430
438
  - lib/woods/resilience/retryable_provider.rb
431
439
  - lib/woods/resolved_config.rb
432
440
  - lib/woods/retrieval/context_assembler.rb
441
+ - lib/woods/retrieval/corpus_status.rb
433
442
  - lib/woods/retrieval/lexical_assembler.rb
434
443
  - lib/woods/retrieval/lexical_index.rb
435
444
  - lib/woods/retrieval/query_classifier.rb
@@ -469,6 +478,7 @@ files:
469
478
  - lib/woods/source_inputs/verifier.rb
470
479
  - lib/woods/storage/graph_store.rb
471
480
  - lib/woods/storage/inapplicable_backend.rb
481
+ - lib/woods/storage/local_corpus_stats.rb
472
482
  - lib/woods/storage/metadata_store.rb
473
483
  - lib/woods/storage/pgvector.rb
474
484
  - lib/woods/storage/qdrant.rb
@@ -491,10 +501,32 @@ files:
491
501
  - lib/woods/util/uuid5.rb
492
502
  - lib/woods/version.rb
493
503
  - lib/woods/watch/boot_snapshot.rb
504
+ - lib/woods/watch/child_environment.rb
505
+ - lib/woods/watch/cli.rb
494
506
  - lib/woods/watch/daemon.rb
507
+ - lib/woods/watch/event_stream.rb
508
+ - lib/woods/watch/guardian.rb
509
+ - lib/woods/watch/installation.rb
510
+ - lib/woods/watch/installation/layout.rb
511
+ - lib/woods/watch/installation/options.rb
512
+ - lib/woods/watch/installation/planner.rb
513
+ - lib/woods/watch/installation/probe.rb
514
+ - lib/woods/watch/installation/receipt.rb
515
+ - lib/woods/watch/installation/recovery.rb
516
+ - lib/woods/watch/installation/templates.rb
517
+ - lib/woods/watch/lifecycle.rb
495
518
  - lib/woods/watch/listen_watcher.rb
519
+ - lib/woods/watch/managed_child.rb
520
+ - lib/woods/watch/managed_cleanup.rb
521
+ - lib/woods/watch/managed_process.rb
496
522
  - lib/woods/watch/polling_watcher.rb
523
+ - lib/woods/watch/puma_adapter.rb
524
+ - lib/woods/watch/puma_child.rb
497
525
  - lib/woods/watch/status.rb
526
+ - lib/woods/watch/supervision_records.rb
527
+ - lib/woods/watch/supervision_status.rb
528
+ - lib/woods/watch/supervisor.rb
529
+ - lib/woods/watch/supervisor_reporting.rb
498
530
  - lib/woods/watch/tree_scan.rb
499
531
  - lib/woods/watch/watcher.rb
500
532
  - plugin/.claude-plugin/plugin.json
@@ -517,10 +549,10 @@ licenses:
517
549
  - MIT
518
550
  metadata:
519
551
  homepage_uri: https://github.com/lost-in-the/woods
520
- source_code_uri: https://github.com/lost-in-the/woods/tree/v2.0.0.beta4
521
- changelog_uri: https://github.com/lost-in-the/woods/blob/v2.0.0.beta4/CHANGELOG.md
552
+ source_code_uri: https://github.com/lost-in-the/woods/tree/v2.0.1
553
+ changelog_uri: https://github.com/lost-in-the/woods/blob/v2.0.1/CHANGELOG.md
522
554
  bug_tracker_uri: https://github.com/lost-in-the/woods/issues
523
- documentation_uri: https://github.com/lost-in-the/woods/tree/v2.0.0.beta4/docs
555
+ documentation_uri: https://github.com/lost-in-the/woods/tree/v2.0.1/docs
524
556
  rubygems_mfa_required: 'true'
525
557
  post_install_message:
526
558
  rdoc_options: []