@3030-labs/wotw 0.8.4

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,312 @@
1
+ # Changelog
2
+
3
+ All notable, user-visible changes to `@3030-labs/wotw` are documented in this
4
+ file. Internal closure documents (`PASS-*.md`, `SHIP-V*.md`, `REVIEW-*.md`)
5
+ are referenced for traceability but not enumerated here.
6
+
7
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
8
+ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
+ Until 1.0, minor-version bumps may carry breaking changes; patch bumps are
10
+ always non-breaking.
11
+
12
+ ---
13
+
14
+ ## [0.8.4] — 2026-05-26 — Public-launch readiness (PASS-023)
15
+
16
+ ### Added
17
+ - **README rewrite** for first-time visitors: tagline, 5-line install,
18
+ 30-second quickstart with concrete output. Deeper feature copy moved
19
+ to [`docs/`](docs/).
20
+ - **Install evidence on 4 platforms** committed under
21
+ [`docs/install-evidence/`](docs/install-evidence/): macOS arm64,
22
+ macOS amd64, Linux amd64, Windows amd64. Each carries a passing
23
+ terminal log of `npm install → wotw init → ingest → wiki update`.
24
+ - **`docs/self-hosted-byok.md`** — where the Anthropic / OpenAI / Gemini
25
+ key goes, failure modes (missing / invalid / rate-limited), rotation
26
+ procedure for self-hosted users.
27
+ - **`docs/llm-provider-auto-resolution.md`** — why Pass B fact extraction
28
+ defaults off under metered API providers (Anthropic / OpenAI / Gemini)
29
+ and on under cost-free runtimes (Claude Code CLI subscription / Ollama),
30
+ with the config override (`fact_extraction.force_enabled`).
31
+ - **`docs/pack-format-daemon.md`** — daemon-side wire format for the
32
+ Compliance Pack consumed by the customer-side
33
+ [`wotw-verify`](https://github.com/3030-Labs/wotw-verify) binary.
34
+ Marketplace semantics explicitly out of scope.
35
+ - **`docs/telemetry.md`** + opt-in BYO-DSN Sentry breadcrumbs on `wotw init`
36
+ failures. **Disabled by default.** No 3030 Labs DSN embedded; users
37
+ provide their own Sentry project via `WOTW_TELEMETRY_DSN`.
38
+ - **`LICENSE-NOTICES.md`** — AGPL-3.0 in plain English (derivative work,
39
+ network-use clause, wotw-cloud boundary, fork rules). Attorney-disclaimable.
40
+ - **`.github/ISSUE_TEMPLATE/*.yml`** — bug_report, feature_request, question
41
+ as GitHub issue forms. Security disclosures routed to `SECURITY.md`.
42
+ - **Error-message audit on 10 unhappy paths** — every one now emits a
43
+ loud, actionable error with the user's next step, not a stack trace.
44
+ Paths: missing `OBSIDIAN_VAULT_PATH`, malformed config, native-binding
45
+ load failure on `better-sqlite3`, invalid Anthropic key (401),
46
+ rate-limited Anthropic (429), missing wiki-dir permissions, locked
47
+ vault file, port conflict, daemon already running, `wotw init` against
48
+ a non-empty vault.
49
+
50
+ ### Changed
51
+ - **`CONTRIBUTING.md`** rewritten to centre AGPL implications, the DCO
52
+ sign-off requirement (Developer Certificate of Origin), and the 7-gate
53
+ shipping discipline.
54
+ - **`SECURITY.md`** updated SLA (5 business days acknowledgment, 30
55
+ calendar days fix-or-disclosure for high-severity), and adds explicit
56
+ safe-harbor language for good-faith researchers.
57
+ - **`package.json`** metadata: homepage points to wotw.dev, keywords
58
+ expanded for npm discovery, `SECURITY.md` + `CHANGELOG.md` +
59
+ `LICENSE-NOTICES.md` now ship in the tarball.
60
+
61
+ ### Fixed (operator dogfood batch)
62
+ - **`wotw status` provenance-record count** read 0 against a populated
63
+ chain (double-prefixed the already-absolute chain path). Now correct.
64
+ - **`wotw start --foreground`** ran a subsystem-less stub daemon; now
65
+ spawns the same fully-wired daemon as detached mode, with live logs
66
+ on the terminal.
67
+ - **Claude Code CLI 401** (not logged in) now surfaces a loud, actionable
68
+ "run `claude /login`" error instead of a silent skipped batch.
69
+ - **`wotw approve` / `wotw reject`** now accept a leading `candidates/`
70
+ path prefix (matches the `wotw candidates` + `wotw audit` display).
71
+ - **`wotw init`** no longer prints a misleading "Cancelled." when you
72
+ press Escape on the optional post-scaffold "Open in Obsidian?" prompt.
73
+ - **README + docs** corrected: candidates → approve → wiki flow made
74
+ explicit; from-source install uses `npm install -g .` (not the broken
75
+ `pnpm link --global`); init-walkthrough layout matches the real scaffold.
76
+
77
+ ### Verification
78
+ - 7 build gates green at HEAD.
79
+ - **935 tests** across the unit / integration / e2e tiers.
80
+ - Operator dogfood (24 findings, 10 fixed this pass): see
81
+ `PASS-023-DOGFOOD-FINDINGS.md`.
82
+ - See `PASS-023-DAEMON-PUBLIC-READINESS.md` for the full closure trail.
83
+
84
+ > **Not yet on npm.** v0.8.4 is built + committed but publish is deferred
85
+ > to a follow-up pass gated on the DriftVane → 3030-Labs org migration.
86
+ > Install from source per the README until then.
87
+
88
+ ---
89
+
90
+ ## [0.8.3] — 2026-05-25 — KEK rotation + DEK auto-archive
91
+
92
+ ### Added
93
+ - **KEK rotation** (`wotw keys rotate-kek`): generates a new KEK,
94
+ re-wraps every active and rotating DEK, archives the previous KEK
95
+ metadata. Revoked DEKs are deliberately skipped (compliance: revoked
96
+ material stays revoked).
97
+ - **DEK auto-archive cron**: configurable schedule under
98
+ `keys.auto_archive` rolls DEKs from `rotating` → `archived` after a
99
+ retention window expires.
100
+ - **`docs/policies/dek-rotation.md`** — operator runbook for both
101
+ manual and scheduled rotation.
102
+
103
+ ### Verification
104
+ - See `PASS-019-G5-COMPLETION.md`. CT1.01 (operationally complete) +
105
+ G5 substrate signoff.
106
+
107
+ ---
108
+
109
+ ## [0.8.2] — 2026-05-24 — G5 end-to-end attestation substrate
110
+
111
+ ### Added
112
+ - **Workspace-key substrate** (`workspace_keys.db`) under
113
+ `~/.wotw/<tenant>/keys.db`. Active + rotating + archived DEK lifecycle
114
+ states. Hex-encoded encrypted-DEK / nonce / auth-tag columns mirror
115
+ the daemon-cloud wire format.
116
+ - **HMAC-SHA256 attestation** field on provenance records: every chain
117
+ entry now carries (optionally) an HMAC under the active DEK,
118
+ enabling offline verification of (record content × key custody)
119
+ without disclosing the DEK itself.
120
+ - **`key_id` propagation** in ProvenanceRecord (canonical-payload
121
+ EXCLUDED — see [`docs/provenance.md`](docs/provenance.md)). New
122
+ optional field stored on record for verification routing, not in the
123
+ canonical id hash, preserving backward-compatibility with pre-G5
124
+ daemons.
125
+
126
+ ### Security
127
+ - Tenant-managed DEKs never persist as plaintext beyond the
128
+ in-memory KeyStore window.
129
+ - KEK plaintext is never logged.
130
+
131
+ ### Verification
132
+ - See `PASS-018-G5-CLOSURE.md`. Closes CT1.01 (partial → done) and
133
+ unblocks every downstream CT1.x – CT5.x checklist item.
134
+
135
+ ---
136
+
137
+ ## [0.8.1] — 2026-05-22 — better-sqlite3 native-binding fix
138
+
139
+ ### Fixed
140
+ - **Docker image native-binding mismatch**: `better-sqlite3` was being
141
+ copied from a host build into the runtime image, leading to
142
+ `node-gyp` / glibc symbol mismatches at first DB-open. The Dockerfile
143
+ now runs `pnpm rebuild better-sqlite3` against the runtime base image
144
+ and exercises the resulting binding end-to-end as a build-time gate.
145
+ Closes the "first cloud-side spawn" failure pattern.
146
+
147
+ ### Added
148
+ - **`scripts/docker-native-rebuild-verify.sh`** — invoked by the
149
+ Dockerfile build stage; refuses to ship if the binding fails to load.
150
+
151
+ ### Verification
152
+ - See `SHIP-V0.8.1.md`.
153
+
154
+ ---
155
+
156
+ ## [0.8.0] — 2026-05-19 — Pass B fact-level retrieval + G5 scaffolding
157
+
158
+ This release bundled two substantive workstreams. Version skipped 0.5 –
159
+ 0.7 to converge on a single shippable image; commits internally
160
+ identified Pass A as v0.7.0 and Pass B as v0.8.0.
161
+
162
+ ### Added — Context-efficiency Pass B (fact-level retrieval)
163
+ - **`query_facts`** MCP tool: BM25-fused retrieval over atomic
164
+ `(entity, statement)` pairs + synthetic questions extracted at
165
+ ingestion. **80%+ token reduction** vs page-level retrieval on
166
+ atomic-question benchmark fixtures. See
167
+ [`docs/mcp-tools.md`](docs/mcp-tools.md) and
168
+ [`CONTEXT-EFFICIENCY-PASS-B.md`](CONTEXT-EFFICIENCY-PASS-B.md).
169
+ - **`source_layer`** response field on `define` / `relate` /
170
+ `cite_sources` — clients can see whether a hit came from the fact
171
+ layer or the page layer.
172
+ - **`fallback: "page-level"`** signal when the fact layer is disabled —
173
+ Pass-A clients route to `query_progressive` automatically without
174
+ manual config.
175
+ - **`wotw facts reindex`** — populate the fact layer over an existing
176
+ wiki. Budget-gated, idempotent.
177
+ - **`fact_extraction.force_enabled`** config knob — see
178
+ [`docs/llm-provider-auto-resolution.md`](docs/llm-provider-auto-resolution.md)
179
+ for the auto-resolution rationale.
180
+
181
+ ### Added — Context-efficiency Pass A (progressive + structural retrieval)
182
+ - **`query_progressive`** MCP tool: smallest-viable-answer-first
183
+ retrieval. Tier-0 (top hit's lede) is ~100-300 tokens with a
184
+ continuation token for expand-on-signal. **86-99% token reduction**
185
+ vs the legacy `query` payload. See
186
+ [`CONTEXT-EFFICIENCY-PASS-A.md`](CONTEXT-EFFICIENCY-PASS-A.md).
187
+ - **`estimate_query_cost`** — pre-flight token estimate so clients
188
+ know what a retrieval will cost before committing.
189
+ - **`define` / `relate` / `cite_sources`** — narrow structural
190
+ retrieval primitives at 256 / 768 / 512 token caps.
191
+
192
+ ### Added — G5 scaffolding
193
+ - Provenance-record HMAC field landed as optional (substrate-only,
194
+ not yet exercised end-to-end — that's v0.8.2). Forward/backward-
195
+ compatible canonical-payload-exclusion: old daemons compute identical
196
+ id+chain_hash with the new field present-but-ignored.
197
+
198
+ ### Verification
199
+ - See `SHIP-V0.8.0.md`, `CONTEXT-EFFICIENCY-PASS-A.md`,
200
+ `CONTEXT-EFFICIENCY-PASS-B.md`.
201
+
202
+ ---
203
+
204
+ ## [0.4.0] — 2026-05-15 — Multi-LLM provider closure
205
+
206
+ ### Added
207
+ - **Anthropic provider** (the existing built-in, formalized as a
208
+ pluggable provider with config-driven dispatch).
209
+ - **OpenAI provider** (Phase 007): GPT-4o + GPT-4o-mini, ingestion
210
+ + query parity.
211
+ - **Gemini provider** (Phase 008): gemini-1.5-pro + gemini-1.5-flash,
212
+ ingestion + query parity.
213
+ - **Ollama provider** (Phase 009): local-model dispatch over HTTP,
214
+ free runtime tier.
215
+ - **Per-tenant provider config** (Phase 010): each tenant selects a
216
+ primary provider + optional fallback chain. `wotw.config.yaml`
217
+ carries `llm.providers[]` with role-typed entries.
218
+
219
+ ### Changed
220
+ - **`queue.ts`** main ingestion path refactored to single-pass dispatch
221
+ (Phase 006) — highest-risk regression surface; full Phase A regression
222
+ suite green.
223
+ - **`heal-handlers`** likewise refactored to single-pass JSON-edit
224
+ pipeline (Phase 005).
225
+
226
+ ### Verification
227
+ - See `MULTI-LLM-PHASE-A.md`, `FEATURE-PASS-005.md` through
228
+ `FEATURE-PASS-010.md`.
229
+
230
+ ---
231
+
232
+ ## [0.2.x] — 2026-04-12 to 2026-05-09 — Patch releases
233
+
234
+ Hosted-mode fixes, MCP entrypoint correction (`entry.js` vs
235
+ `wotw start --foreground`), Fly-registry caching workaround,
236
+ `pathToClaudeCodeExecutable` resolution. Tags: `v0.2.3` through
237
+ `v0.2.8`.
238
+
239
+ ---
240
+
241
+ ## [0.2.0] — 2026-04-12
242
+
243
+ ### Features
244
+ - **Interactive init wizard** (`wotw init`): 7-step @clack/prompts
245
+ wizard with Obsidian vault auto-detection, overlay support, and
246
+ optional vault launch.
247
+ - **Knowledge health system**: 5-factor quality scoring (staleness,
248
+ source availability, link health, duplicate risk, contradiction risk)
249
+ with configurable weights and thresholds.
250
+ - **Auto-healing** (`wotw lint --fix`): 5 heal handlers (stale pages,
251
+ duplicates, broken links, missing backlinks, contradictions) with
252
+ budget pre-flight, per-run caps, and provenance records.
253
+ - **Deletion handling**: archive provenance type for removed source
254
+ files; orphaned wiki pages get `status: orphaned` frontmatter
255
+ instead of deletion.
256
+ - **Lint scheduler**: optional background lint runs via
257
+ `lint.schedule_enabled` config with configurable interval.
258
+ - **Dead-letter queue**: JSONL ledger for failed batches, surfaced
259
+ in `wotw status` and `get_stats` MCP tool.
260
+ - **`wotw logs` command**: tail daemon log with `-f`/`--follow` and
261
+ rotation detection.
262
+ - **Retrieval hardening**: LLM-powered query expansion, richer YAML
263
+ metadata extraction, query-performance metrics logging, and
264
+ consolidated search results.
265
+ - **Candidates workflow**: human review queue with `wotw approve`,
266
+ `wotw reject`, `wotw candidates`. Superseded-candidate detection
267
+ on re-ingestion.
268
+
269
+ ### Security
270
+ - Timing-safe token comparison via `crypto.timingSafeEqual` for
271
+ legacy single-token auth.
272
+ - Canonical path validation (`resolveWikiPath`) rejects directory
273
+ traversal.
274
+ - No-auth safety rail refuses MCP server start on non-loopback host
275
+ without auth configured.
276
+ - Eager provenance hashing eliminates lazy end-of-batch race window.
277
+ - Credential redaction (9 patterns) applied to all wiki content
278
+ before storage.
279
+
280
+ ### Quality
281
+ - 446 tests across 51 files (up from 192 across 16 in 0.1.0).
282
+ - Two independent adversarial audits all resolved.
283
+
284
+ ---
285
+
286
+ ## [0.1.0] — 2026-03-15 — Initial release
287
+
288
+ ### Added
289
+ - **Daemon lifecycle:** `wotw init`, `wotw start`, `wotw stop`,
290
+ `wotw status` with detached-child process model, PID/lock file
291
+ management, graceful shutdown.
292
+ - **Watcher:** chokidar-backed file watcher with exponential backoff
293
+ debouncing.
294
+ - **Ingestion pipeline:** Claude agent runner, wiki-writer
295
+ reconciliation, bidirectional link repair, index rebuild, search
296
+ re-index, git commit per batch.
297
+ - **Wiki store:** categorized markdown pages with YAML frontmatter,
298
+ atomic writes, slug sanitization, path-safe IO.
299
+ - **Search:** minisearch BM25 with title/tag boost.
300
+ - **MCP server:** stateless streamable-HTTP exposing `search`,
301
+ `list_pages`, `read_page`, `query`, `get_index`, `get_stats`,
302
+ `related_pages`, `get_provenance_log`, `verify_provenance`,
303
+ `synthesize`. Rate limiting + bearer-token auth.
304
+ - **Cost tracking:** per-operation and daily dollar budgets, hard
305
+ caps enforced before every LLM call.
306
+ - **Provenance chain:** append-only SHA-256 chain of every
307
+ state-mutating operation. `wotw audit` walks the chain and reports
308
+ tampering.
309
+ - **Multi-user authentication:** optional per-user bearer tokens
310
+ managed by `wotw user add | list | revoke`.
311
+ - **Tests:** 192 across 16 files. **Docs:** README, architecture,
312
+ configuration, CLI, MCP, provenance, multi-user.
package/LICENSE ADDED
@@ -0,0 +1,36 @@
1
+ GNU AFFERO GENERAL PUBLIC LICENSE
2
+ Version 3, 19 November 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU Affero General Public License is a free, copyleft license for
11
+ software and other kinds of works, specifically designed to ensure
12
+ cooperation with the community in the case of network server software.
13
+
14
+ The licenses for most software and other practical works are designed
15
+ to take away your freedom to share and change the works. By contrast,
16
+ our General Public Licenses are intended to guarantee your freedom to
17
+ share and change all versions of a program--to make sure it remains free
18
+ software for all its users.
19
+
20
+ For the full license text, see:
21
+ https://www.gnu.org/licenses/agpl-3.0.txt
22
+
23
+ Copyright (C) 2026 3030 Labs LLC
24
+
25
+ This program is free software: you can redistribute it and/or modify
26
+ it under the terms of the GNU Affero General Public License as
27
+ published by the Free Software Foundation, either version 3 of the
28
+ License, or (at your option) any later version.
29
+
30
+ This program is distributed in the hope that it will be useful,
31
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
32
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33
+ GNU Affero General Public License for more details.
34
+
35
+ You should have received a copy of the GNU Affero General Public License
36
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
@@ -0,0 +1,199 @@
1
+ # LICENSE-NOTICES
2
+
3
+ > **This document is a plain-English summary of the licence on `wotw`.
4
+ > It is NOT legal advice. The binding text is in [`LICENSE`](LICENSE).
5
+ > When the two disagree, `LICENSE` wins. If you need a confident answer
6
+ > for your situation, talk to an attorney who handles open-source licensing.**
7
+
8
+ ## TL;DR
9
+
10
+ `watcher-on-the-wall` is licensed under **AGPL-3.0-or-later**.
11
+
12
+ | If you're... | You can... | You must... |
13
+ |---|---|---|
14
+ | Running `wotw` on your own laptop for your own notes | Anything. Modify, embed, fork. | Nothing extra. The AGPL doesn't trigger. |
15
+ | Running `wotw` inside your team / company as an internal tool | Anything. | Nothing extra. Internal use is not "distribution" or "remote interaction." |
16
+ | Modifying `wotw` and shipping the binary to other people | Distribute the modified source under AGPL-3.0-or-later. | Make the modified source available to your distributees on request. |
17
+ | Modifying `wotw` and offering it as a network service to outsiders | Run a modified version. | **Make the modified source available to every user who interacts with the service** (the AGPL §13 network-use clause). A download link in the UI is the minimum. |
18
+ | Building a closed-source SaaS that wraps `wotw` | Use it as-is, unmodified, in a way that's clearly composable rather than entangled. | Read §13 carefully, OR get a commercial licence from 3030 Labs. |
19
+ | Forking `wotw` for a competing product | Yes — that's what AGPL allows. | Keep it AGPL-3.0-or-later and ship source to your users. You may not relicense to MIT / BSD / proprietary. |
20
+
21
+ ## What AGPL-3.0-or-later actually requires
22
+
23
+ The AGPL is the GPL plus one extra rule: **if you offer a modified
24
+ version of the program over a network, the people interacting with it
25
+ over that network are also entitled to receive the source code**.
26
+
27
+ In practice this means:
28
+
29
+ 1. **Distribution triggers source-sharing.** If you give someone the
30
+ `wotw` binary (or a modified one), you must offer them the source,
31
+ under AGPL-3.0-or-later, on the same channel or by a clearly
32
+ advertised means (a public Git URL is fine).
33
+ 2. **Network use triggers source-sharing too.** If your modified
34
+ `wotw` answers an HTTP / MCP request from anyone outside the
35
+ organisation running it, that "anyone outside" is a user, and you
36
+ owe them source. This is the §13 clause and is the meaningful
37
+ difference between AGPL and GPL.
38
+ 3. **"At a distance" linking still triggers.** Loading `wotw` as a
39
+ library, importing it as a module, or calling into it via an
40
+ internal API does not let you escape the AGPL by claiming "we
41
+ only used the public interface." If your program's normal operation
42
+ requires `wotw` to function, the combined work is derivative.
43
+ 4. **The licence is one-way ratchet.** Code derived from AGPL `wotw`
44
+ cannot be relicensed under a more permissive licence by anyone
45
+ except the copyright holder (3030 Labs LLC). A fork that strips
46
+ the licence is invalid and unenforceable against your
47
+ downstream users.
48
+
49
+ ## What counts as a "derivative work"
50
+
51
+ The boring legal answer: courts decide on a case-by-case basis.
52
+ The practical answer:
53
+
54
+ - **Definitely derivative**: you patched `src/`, you replaced a module,
55
+ you rebuilt the daemon with different defaults, you forked the repo
56
+ and renamed it.
57
+ - **Definitely derivative**: you wrote a wrapper that statically
58
+ imports `@3030-labs/wotw` as an npm dependency and ships the result.
59
+ - **Likely derivative**: your service spawns the `wotw` binary as a
60
+ subprocess and depends on its specific output format, and you
61
+ modified that format.
62
+ - **Probably not derivative**: your service calls the unmodified
63
+ `wotw` MCP HTTP endpoint as one of many independent backend
64
+ services, the way you'd call any third-party API. Two arms-length
65
+ processes communicating over standard protocols are usually
66
+ separate works, but consult counsel if it matters.
67
+
68
+ When in doubt: the safer reading is that it IS derivative, and the
69
+ honourable thing is to ship source. If you don't want to ship source,
70
+ ask for a commercial licence.
71
+
72
+ ## What counts as a "service"
73
+
74
+ AGPL §13's network-use clause kicks in when "you modify the Program,
75
+ your modified version must prominently offer all users interacting
76
+ with it remotely through a computer network ... an opportunity to
77
+ receive the Corresponding Source."
78
+
79
+ - **Internal corporate tools** running `wotw` for company employees
80
+ only: typically not a §13 trigger. The users are not "remote" in
81
+ the licence's sense; they're the same organisation that's running
82
+ the daemon.
83
+ - **Customer-facing SaaS** running `wotw` for paying customers: §13
84
+ triggers if you've modified `wotw`. Publish a source link on the
85
+ service's UI or in its docs.
86
+ - **Public-facing free tool** (no auth, anyone-on-the-internet) running
87
+ `wotw`: §13 triggers if you've modified `wotw`. Same source link
88
+ obligation.
89
+ - **An MCP endpoint serving your wiki to your own personal Claude
90
+ Code session**: not a §13 trigger. You're the only user, and you
91
+ have the source already.
92
+
93
+ ## Relationship to `wotw-cloud`
94
+
95
+ 3030 Labs also operates `wotw-cloud`, the control-plane service for
96
+ managed `wotw` deployments. **`wotw-cloud` is NOT a derivative work
97
+ of `wotw`** under our reading:
98
+
99
+ - The daemon and the cloud are separate codebases at separate
100
+ repositories with separate licences.
101
+ - The cloud calls the daemon over standard MCP / HTTP boundaries it
102
+ did not modify.
103
+ - The cloud does not statically link, embed, or contain `wotw` source.
104
+ - The two products are released independently and can be operated
105
+ independently.
106
+
107
+ We share types and the chain-hash algorithm via **CI-enforced
108
+ byte-identity vendoring** between repos so that the daemon's
109
+ provenance chain is byte-identical with what the cloud emits. This is
110
+ not a derivative-work relationship; it's a deliberate interface
111
+ contract.
112
+
113
+ If you fork `wotw` and want to build your own control plane, you
114
+ have AGPL-3.0-or-later authority to do that — you're not constrained
115
+ by 3030 Labs' commercial offering. The licence is symmetric.
116
+
117
+ ## What competitors can and can't do
118
+
119
+ **You can:**
120
+ - Fork the repo, rebrand it, and run it for your own customers.
121
+ - Sell support / consulting / hosting on top of unmodified `wotw`.
122
+ - Build a commercial product that interoperates with `wotw` over
123
+ documented public interfaces (MCP, file-system contract,
124
+ provenance-chain format).
125
+ - Use the BM25 retrieval design, the Pass A / Pass B context-efficiency
126
+ architecture, or the G5 attestation scheme as inspiration — those
127
+ are technical ideas, not copyrightable expression.
128
+
129
+ **You can't:**
130
+ - Take the AGPL `wotw` source, ship it (modified or not) inside a
131
+ closed-source product without satisfying AGPL §13 / §5.
132
+ - Relicense `wotw` source to MIT / BSD / proprietary terms.
133
+ - Strip the AGPL notices from files you redistribute.
134
+ - Use the `wotw` or `watcher-on-the-wall` name, the wotw.dev
135
+ domain, or the `@3030-labs/wotw` npm scope to imply 3030 Labs
136
+ endorsement of your fork (trademark, not copyright — but the same
137
+ obligation applies).
138
+
139
+ ## Commercial licence
140
+
141
+ If AGPL's network-use clause is incompatible with your business
142
+ model, 3030 Labs offers commercial licences that remove the §13
143
+ obligation in exchange for an annual fee. Contact
144
+ `licensing@3030labs.io`. Common reasons customers ask:
145
+
146
+ - Embedding `wotw` inside a closed-source SaaS without publishing
147
+ the modifications upstream.
148
+ - Operating a fork as a managed service without exposing the fork's
149
+ internal patches.
150
+ - Including `wotw` in a customer-deliverable binary that the customer
151
+ cannot legally redistribute to compete.
152
+
153
+ We do not offer "AGPL with a one-time fee" — the licence is the
154
+ licence. The commercial option is a separate, parallel licence that
155
+ co-exists with AGPL for users who choose it.
156
+
157
+ ## Third-party dependencies
158
+
159
+ `wotw` depends on a number of MIT / Apache 2.0 / BSD-licenced npm
160
+ packages (see `package.json` for the full list). Those licences travel
161
+ with the binary in `node_modules/`; redistributing the `wotw` binary
162
+ satisfies them. None of those upstream licences are GPL-incompatible
163
+ with AGPL-3.0-or-later, but if you find one that is, please report it
164
+ to `legal@3030labs.io`.
165
+
166
+ The exception is `better-sqlite3`, which is MIT and bundles SQLite
167
+ itself (public domain). No additional restriction.
168
+
169
+ ## Patents
170
+
171
+ 3030 Labs LLC has not asserted patents over the `wotw` code. The AGPL
172
+ includes an express patent grant from contributors to users (§11). If
173
+ you contribute code, you grant the same patent licence on contributed
174
+ material to all downstream `wotw` users. This is normal for AGPL
175
+ contributions and is enforced by the DCO sign-off in
176
+ [`CONTRIBUTING.md`](CONTRIBUTING.md).
177
+
178
+ ## Trademark
179
+
180
+ "watcher-on-the-wall", "wotw", "wotw-cloud", "wotw-verify",
181
+ "3030 Labs", the wotw.dev domain, and any associated logos are
182
+ trademarks of 3030 Labs LLC. The AGPL covers the code, not the
183
+ trademark. You may identify your fork ("based on watcher-on-the-wall"),
184
+ but you may not call your fork "watcher-on-the-wall" or use the
185
+ name in a way that implies 3030 Labs endorsement.
186
+
187
+ ## Where to ask
188
+
189
+ - General licensing questions: `licensing@3030labs.io`
190
+ - Commercial-licence inquiries: `licensing@3030labs.io`
191
+ - Trademark inquiries: `legal@3030labs.io`
192
+ - Security disclosures: `security@3030labs.io` (see [`SECURITY.md`](SECURITY.md))
193
+
194
+ ---
195
+
196
+ **Final reminder:** the above is a plain-English summary intended to
197
+ help you understand the AGPL in context. It is not legal advice and
198
+ does not constitute an attorney-client relationship. If your business
199
+ depends on the answer, hire an attorney.