@keighleykodric/weeve 0.1.0 → 0.1.2

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 (98) hide show
  1. package/README.md +75 -19
  2. package/bin/weeve.js +467 -2
  3. package/examples/core/CODEOWNERS.template +9 -0
  4. package/examples/core/README.md +63 -0
  5. package/examples/core/demo/README.md +38 -0
  6. package/examples/core/demo/weeve/ally/ally-intake.md +16 -0
  7. package/examples/core/demo/weeve/compass/compass-intake.md +15 -0
  8. package/examples/core/demo/weeve/layers-plus/figma-notes.md +31 -0
  9. package/examples/core/demo/weeve/layers-plus/layers-plus-intake.md +13 -0
  10. package/examples/core/demo/weeve/rubric/component-inventory.md +42 -0
  11. package/examples/core/demo/weeve/rubric/rubric-intake.md +14 -0
  12. package/examples/core/demo/weeve/shared/competitive.md +28 -0
  13. package/examples/core/demo/weeve/shared/roadmap.md +26 -0
  14. package/examples/core/demo/weeve/shared/weeve-guardrails.md +28 -0
  15. package/examples/core/demo/weeve/shared/weeve-intake.md +18 -0
  16. package/examples/core/demo/weeve/shared/weeve-project.md +33 -0
  17. package/examples/core/demo/weeve.yaml +15 -0
  18. package/examples/core/weeve.yaml +14 -0
  19. package/examples/engineering/CODEOWNERS.template +9 -0
  20. package/examples/engineering/README.md +61 -0
  21. package/examples/engineering/demo/README.md +20 -0
  22. package/examples/engineering/demo/weeve/forge/architecture.md +39 -0
  23. package/examples/engineering/demo/weeve/forge/ci-metrics.md +47 -0
  24. package/examples/engineering/demo/weeve/forge/forge-intake.md +41 -0
  25. package/examples/engineering/demo/weeve/guard/guard-intake.md +17 -0
  26. package/examples/engineering/demo/weeve/helm/helm-intake.md +16 -0
  27. package/examples/engineering/demo/weeve/helm/incidents.md +40 -0
  28. package/examples/engineering/demo/weeve/helm/on-call-runbook.md +33 -0
  29. package/examples/engineering/demo/weeve/shared/roadmap.md +25 -0
  30. package/examples/engineering/demo/weeve/shared/team.md +33 -0
  31. package/examples/engineering/demo/weeve/shared/weeve-guardrails.md +27 -0
  32. package/examples/engineering/demo/weeve/shared/weeve-intake.md +18 -0
  33. package/examples/engineering/demo/weeve/shared/weeve-project.md +29 -0
  34. package/examples/engineering/demo/weeve/verify/coverage-report.md +49 -0
  35. package/examples/engineering/demo/weeve/verify/verify-intake.md +16 -0
  36. package/examples/engineering/demo/weeve.yaml +15 -0
  37. package/examples/engineering/weeve.yaml +14 -0
  38. package/examples/gtm/CODEOWNERS.template +8 -0
  39. package/examples/gtm/README.md +59 -0
  40. package/examples/gtm/demo/README.md +19 -0
  41. package/examples/gtm/demo/weeve/compass/compass-intake.md +15 -0
  42. package/examples/gtm/demo/weeve/maven/maven-intake.md +35 -0
  43. package/examples/gtm/demo/weeve/maven/website-notes.md +33 -0
  44. package/examples/gtm/demo/weeve/pitch/pitch-intake.md +54 -0
  45. package/examples/gtm/demo/weeve/pitch/sales-deck-notes.md +28 -0
  46. package/examples/gtm/demo/weeve/pitch/win-loss-notes.md +40 -0
  47. package/examples/gtm/demo/weeve/shared/competitive.md +30 -0
  48. package/examples/gtm/demo/weeve/shared/roadmap.md +19 -0
  49. package/examples/gtm/demo/weeve/shared/weeve-guardrails.md +24 -0
  50. package/examples/gtm/demo/weeve/shared/weeve-intake.md +18 -0
  51. package/examples/gtm/demo/weeve/shared/weeve-project.md +25 -0
  52. package/examples/gtm/demo/weeve.yaml +22 -0
  53. package/examples/gtm/weeve.yaml +14 -0
  54. package/examples/product/CODEOWNERS.template +10 -0
  55. package/examples/product/README.md +67 -0
  56. package/examples/product/demo/README.md +21 -0
  57. package/examples/product/demo/weeve/ally/ally-intake.md +16 -0
  58. package/examples/product/demo/weeve/compass/compass-intake.md +15 -0
  59. package/examples/product/demo/weeve/felt/felt-intake.md +37 -0
  60. package/examples/product/demo/weeve/felt/user-research.md +68 -0
  61. package/examples/product/demo/weeve/layers-plus/layers-plus-intake.md +14 -0
  62. package/examples/product/demo/weeve/rubric/component-inventory.md +42 -0
  63. package/examples/product/demo/weeve/rubric/rubric-intake.md +14 -0
  64. package/examples/product/demo/weeve/shared/competitive.md +28 -0
  65. package/examples/product/demo/weeve/shared/roadmap.md +32 -0
  66. package/examples/product/demo/weeve/shared/weeve-guardrails.md +27 -0
  67. package/examples/product/demo/weeve/shared/weeve-intake.md +18 -0
  68. package/examples/product/demo/weeve/shared/weeve-project.md +29 -0
  69. package/examples/product/demo/weeve.yaml +21 -0
  70. package/examples/product/weeve.yaml +14 -0
  71. package/examples/strategy/CODEOWNERS.template +8 -0
  72. package/examples/strategy/README.md +59 -0
  73. package/examples/strategy/demo/README.md +19 -0
  74. package/examples/strategy/demo/weeve/compass/compass-intake.md +34 -0
  75. package/examples/strategy/demo/weeve/compass/customer-segments.md +34 -0
  76. package/examples/strategy/demo/weeve/layers-plus/layers-plus-intake.md +15 -0
  77. package/examples/strategy/demo/weeve/maven/maven-intake.md +33 -0
  78. package/examples/strategy/demo/weeve/shared/competitive.md +40 -0
  79. package/examples/strategy/demo/weeve/shared/roadmap.md +29 -0
  80. package/examples/strategy/demo/weeve/shared/weeve-guardrails.md +22 -0
  81. package/examples/strategy/demo/weeve/shared/weeve-intake.md +17 -0
  82. package/examples/strategy/demo/weeve/shared/weeve-project.md +25 -0
  83. package/examples/strategy/demo/weeve.yaml +15 -0
  84. package/examples/strategy/weeve.yaml +14 -0
  85. package/package.json +14 -3
  86. package/spec/contributing-template.md +109 -0
  87. package/spec/readme-template.md +55 -0
  88. package/{docs/shared/SHIP-GATE.md → spec/ship-gate.md} +7 -7
  89. package/spec/signals-schema.md +685 -0
  90. package/spec/weeve-yaml.md +274 -0
  91. package/.github/SECURITY.md +0 -22
  92. package/GOVERNANCE.md +0 -173
  93. package/WORKFLOW.md +0 -354
  94. package/docs/shared/engineering-pack-contract.md +0 -94
  95. package/docs/shared/id-prefix-reference.md +0 -235
  96. package/docs/shared/idea-intake-pattern.md +0 -99
  97. package/docs/shared/lane-conventions.md +0 -207
  98. package/docs/shared/recommendations-schema.md +0 -363
@@ -0,0 +1,274 @@
1
+ # weeve.yaml — project config reference
2
+
3
+ `weeve.yaml` is the project-level config file for a weeve setup. It lives at the root of any repo that participates in a weeve workflow. Skills read it on startup to resolve `$DOCS_ROOT` and understand which lanes are active.
4
+
5
+ ---
6
+
7
+ ## Minimal config
8
+
9
+ ```yaml
10
+ schema_version: "0.4"
11
+
12
+ project:
13
+ name: My Project
14
+ tag: MYP
15
+ ```
16
+
17
+ `project.tag` is the 3-letter (or short) identifier used to locate your docs folder. Skills resolve two root paths per project:
18
+
19
+ | Variable | Default path | Purpose |
20
+ |---|---|---|
21
+ | `$LOOM_ROOT` | `<vault_path>/Projects/<tag>/loom` | **Input zone** — human-written notes, research, and orienting context. Skills read from here. |
22
+ | `$DOCS_ROOT` | `<vault_path>/Projects/<tag>/weeve` | **Output zone** — structured analysis written by skills (signals, reports, priorities). Skills write here. |
23
+
24
+ An `archive/` folder at `<vault_path>/Projects/<tag>/archive/` holds historical snapshots. It is not referenced by `$LOOM_ROOT` or `$DOCS_ROOT` — recap and archival skills write there directly.
25
+
26
+ **Rule of thumb:** if a skill writes it, it lives in `$DOCS_ROOT`. If you wrote it (notes, research, briefs), it lives in `$LOOM_ROOT`. Skills read from `$LOOM_ROOT` via `source_dirs`; they write to `$DOCS_ROOT`.
27
+
28
+ **Shared files in `$DOCS_ROOT/shared/`** (skill-generated and maintained):
29
+ - `weeve-guardrails.md` — hard limits captured during intro
30
+ - `weeve-decisions.md` — locked decisions log
31
+ - `weeve-project.md` — project brief scaffolded by intro skills
32
+ - `weeve-business.md` — strategic context
33
+ - `weeve-users.md` — audience definition
34
+ - `lane-conventions.md` — severity → ship-gate mapping
35
+ - `signals-digest.md` — top signals per lane (written by `/pilot-check`)
36
+
37
+ ---
38
+
39
+ ## Full config reference
40
+
41
+ ```yaml
42
+ # weeve.yaml
43
+ schema_version: "0.4"
44
+
45
+ project:
46
+ name: Acme Platform # Human-readable project name
47
+ tag: ACP # Short ID — matches your vault's Projects/<tag>/ folder
48
+ docs_root: ./weeve # Optional: explicit path to lane outputs folder ($DOCS_ROOT).
49
+ # When set, skills write here directly (no vault needed).
50
+ # Default: inferred as <vault_path>/Projects/<tag>/weeve
51
+ loom_root: ./loom # Optional: explicit path to the input zone ($LOOM_ROOT).
52
+ # Default: inferred as <vault_path>/Projects/<tag>/loom
53
+ depends_on: # Optional: other weeve projects this project reads context from.
54
+ - tag: API # Required: the other project's tag
55
+ name: Core API # Optional: human label
56
+ relationship: api-contract # Optional: nature of the dependency
57
+
58
+ roads:
59
+ - name: startup # Road name (used in pilot-priorities)
60
+ path: roads/startup # Path to road definition file (relative to repo root)
61
+
62
+ lanes:
63
+ compass:
64
+ tag: ORG # Optional: use a different tag for cross-project lanes.
65
+ # Useful when Compass covers the whole org, not just this repo.
66
+ source_dirs: # Optional: loom subdirs this lane scans. Paths relative
67
+ - strategy/ # to $LOOM_ROOT. Defaults vary by lane (see table below).
68
+ - business/ # Override here if your project uses a different structure.
69
+ # Omit to use lane defaults.
70
+ ```
71
+
72
+ Lane `source_dirs` defaults (used when not specified in `weeve.yaml`). All paths are relative to `$LOOM_ROOT`:
73
+
74
+ | Lane | Default source dirs |
75
+ |---|---|
76
+ | compass | `strategy/`, `business/` |
77
+ | felt | `research/` |
78
+ | ally | `design/` |
79
+ | layers-plus | `design/` |
80
+ | rubric | `design/`, `marketing/` |
81
+ | maven | `marketing/` |
82
+ | pitch | `sales/` |
83
+ | forge | `engineering/` |
84
+ | helm | `engineering/` |
85
+ | verify | `engineering/` |
86
+ | guard | `engineering/`, `business/` |
87
+
88
+ All lanes also read `$LOOM_ROOT/shared/` regardless of `source_dirs` — place any cross-lane notes or raw context you want every skill to see here. Skill-managed shared files (`weeve-guardrails.md`, `weeve-decisions.md`, etc.) live in `$DOCS_ROOT/shared/`.
89
+ ```
90
+
91
+ ---
92
+
93
+ ## Multi-repo setup
94
+
95
+ Weeve works across multiple repos. Each participating repo has its own `weeve.yaml` with the **same `project.tag`**. All repos write into the same `$DOCS_ROOT`, so Pilot sees a unified picture across the codebase.
96
+
97
+ ```
98
+ my-workspace/
99
+ acme-web/
100
+ weeve.yaml # project.tag: ACP
101
+ acme-api/
102
+ weeve.yaml # project.tag: ACP ← same tag
103
+ acme-mobile/
104
+ weeve.yaml # project.tag: ACP ← same tag
105
+ ```
106
+
107
+ Skills are run from whichever repo is relevant. They all resolve to the same `$DOCS_ROOT` and write their outputs there. Lane outputs accumulate — you'll see findings from the web, API, and mobile codebases in the same signals files.
108
+
109
+ **Optional: document which repos participate**
110
+
111
+ ```yaml
112
+ project:
113
+ name: Acme Platform
114
+ tag: ACP
115
+ repos:
116
+ - name: web
117
+ path: ../acme-web
118
+ - name: api
119
+ path: ../acme-api
120
+ - name: mobile
121
+ path: ../acme-mobile
122
+ ```
123
+
124
+ This is informational — weeve doesn't use `repos` to drive resolution, but it documents the full surface area for future tooling (e.g., `weeve status` across repos).
125
+
126
+ ---
127
+
128
+ ## Project relationships (`depends_on`)
129
+
130
+ Projects don't exist in isolation. A frontend depends on an API. A platform team's decisions affect every product team. `depends_on` makes those relationships explicit — without requiring a hierarchy.
131
+
132
+ ```yaml
133
+ project:
134
+ name: Frontend
135
+ tag: FE
136
+ depends_on:
137
+ - tag: API
138
+ name: Core API # Optional: human-readable label
139
+ relationship: api-contract # Optional: describes the nature of the dependency
140
+ - tag: PLATFORM
141
+ name: Platform Team
142
+ relationship: infra
143
+ ```
144
+
145
+ **What this does:**
146
+
147
+ - Documents that this project reads context from, and is affected by, other weeve projects
148
+ - Gives lanes access to dependent projects' `$DOCS_ROOT/shared/` as secondary context
149
+ - Lets Pilot surface cross-project signals — a ship-blocked finding in API that affects Frontend's release
150
+
151
+ **What this doesn't do:**
152
+
153
+ - Impose a hierarchy — any project can depend on any other, in any direction
154
+ - Require a shared parent — "org" or "fleet" is just what emerges from the full graph, not something weeve models
155
+ - Give dependent projects write access — dependencies are read-only context
156
+
157
+ **Accessing dependent project docs:**
158
+
159
+ Skills resolve dependent project docs the same way they resolve their own `$DOCS_ROOT`:
160
+
161
+ | Dependent project config | Resolves to |
162
+ |---|---|
163
+ | Has `docs_root` | That path directly |
164
+ | Has `tag` only | `<vault_path>/Projects/<tag>/weeve` |
165
+
166
+ Skills read `shared/` from each dependency as background context. Lane outputs are never written to a dependency's `$DOCS_ROOT`.
167
+
168
+ **Example: cross-project Pilot**
169
+
170
+ When Pilot runs on the Frontend project, it can read:
171
+ - `$DOCS_ROOT/*/signals.md` — own project lane signals
172
+ - `<API_DOCS_ROOT>/guard/signals.md` — API's security findings (relevant if FE calls API endpoints)
173
+ - `<PLATFORM_DOCS_ROOT>/helm/signals.md` — Platform's deployment signals (relevant if FE uses platform infra)
174
+
175
+ This surfaces blockers that live in a different repo but affect this project's ship readiness.
176
+
177
+ **Shared docs between projects:**
178
+
179
+ Use `$DOCS_ROOT/shared/weeve-sources.md` to reference external docs (Confluence, Notion). Use `depends_on` for other weeve projects. They're complementary:
180
+
181
+ ```
182
+ shared/
183
+ weeve-project.md ← what this project is
184
+ weeve-decisions.md ← this project's decisions
185
+ weeve-guardrails.md ← this project's hard limits
186
+ weeve-sources.md ← links to external org-level docs (Notion, Confluence, etc.)
187
+ ```
188
+
189
+ The org-level layer doesn't need to live in weeve. `weeve-sources.md` is a pointer, not a copy.
190
+
191
+ **How Pilot uses `depends_on`:**
192
+
193
+ When Pilot runs, it reads signals from two sources:
194
+
195
+ 1. **Own project** — all lane signals files under `$DOCS_ROOT`
196
+ 2. **Dependent projects** — signals files from each `depends_on` project's `$DOCS_ROOT`
197
+
198
+ Pilot's output is a single ranked backlog. Findings from dependent projects that affect this project's ship readiness appear as cross-project items — attributed to their source, ranked alongside own-project findings. A `gate_ship: true` finding in a dependency surfaces as a blocker on this project's release even if this project's own lanes are clean.
199
+
200
+ Each project's findings remain scoped to their own codebase. Running the same lane in two projects isn't a conflict — it's two views of the same dependency relationship, both visible to Pilot when needed.
201
+
202
+ ---
203
+
204
+ ## $DOCS_ROOT resolution order
205
+
206
+ Every intro skill resolves both `$DOCS_ROOT` and `$LOOM_ROOT` in this order:
207
+
208
+ **`$DOCS_ROOT` (output zone):**
209
+ 1. **`weeve.yaml` present with `project.docs_root`** — use that path directly. No vault needed. Good for teams that don't use Claudette.
210
+ 2. **`weeve.yaml` present with `project.tag`** — resolve as `<vault_path>/Projects/<tag>/weeve`.
211
+ 3. **No `weeve.yaml`** — fall back to Claudette config: match cwd basename to `config.projects[].repo`, derive tag and path from there.
212
+
213
+ **`$LOOM_ROOT` (input zone):**
214
+ 1. **`weeve.yaml` present with `project.loom_root`** — use that path directly.
215
+ 2. **`weeve.yaml` present with `project.tag`** — resolve as `<vault_path>/Projects/<tag>/loom`.
216
+ 3. **No `weeve.yaml`** — derive from Claudette config using the same tag as `$DOCS_ROOT`.
217
+
218
+ If neither resolves, the intro skill asks for paths before proceeding.
219
+
220
+ ---
221
+
222
+ ## Without Claudette
223
+
224
+ If you're using weeve without Claudette (e.g., on a team), set `docs_root` explicitly:
225
+
226
+ ```yaml
227
+ project:
228
+ name: Acme Platform
229
+ tag: ACP
230
+ docs_root: ./weeve # relative to repo root, or absolute — skill outputs go here
231
+ loom_root: ./loom # raw input zone — notes, research, briefs skills read from here
232
+ ```
233
+
234
+ Skills will write to `docs_root` and read raw input from `loom_root`. You can put these folders anywhere — inside the repo, in a shared drive, or in a separate docs repo.
235
+
236
+ ---
237
+
238
+ ## Claudette integration contract
239
+
240
+ Weeve and Claudette are independent tools. Using both is optional — neither requires the other. If you use both, the coupling is minimal and one-directional:
241
+
242
+ | Direction | What | Why |
243
+ |---|---|---|
244
+ | weeve → Claudette | Reads `vault_path` from `~/.config/claudette/bootstrap.yaml` | To resolve `$DOCS_ROOT` when `docs_root` is not set in `weeve.yaml` |
245
+ | Claudette → weeve | Nothing | Claudette doesn't read weeve outputs — Pilot does |
246
+
247
+ **No conflicts by design:**
248
+
249
+ - Weeve writes lane outputs to `$DOCS_ROOT/<lane>/
250
+ ` (e.g. `Projects/ACP/weeve/compass/`)
251
+ - Claudette writes context files to `<vault_path>/Projects/<tag>/` (e.g. `Projects/ACP/_context-week.md`)
252
+ - These are different folders under the same project root — no overlap, no overwriting
253
+
254
+ **Removing Claudette:** if you stop using Claudette, set `docs_root` in `weeve.yaml` and nothing changes. Weeve stops looking at `~/.config/claudette/` entirely.
255
+
256
+ **Adding Claudette later:** add `vault_path` to `~/.config/claudette/bootstrap.yaml` with a project entry matching your `project.tag`. Remove `docs_root` from `weeve.yaml` if you want outputs in the vault. Or keep `docs_root` — both approaches work.
257
+
258
+ **The one field weeve reads from Claudette:**
259
+
260
+ ```
261
+ ~/.config/claudette/bootstrap.yaml → vault_path
262
+ ```
263
+
264
+ That's it. Weeve reads no other Claudette config. Claudette reads no weeve config.
265
+
266
+ ---
267
+
268
+ ## Generated by `weeve init`
269
+
270
+ `weeve init [preset]` creates `weeve.yaml` in the current directory. It prompts for project name and tag if not provided, then writes a config with the correct preset lanes listed in comments.
271
+
272
+ ---
273
+
274
+ _Maintained in [`weeve`](https://github.com/keighleykodric/weeve) · `spec/weeve-yaml.md`_
@@ -1,22 +0,0 @@
1
- # Security Policy
2
-
3
- ## Reporting a Vulnerability
4
-
5
- If you discover a security vulnerability in any Weave framework repo, please report it responsibly by opening an issue on the [pilot repo](https://github.com/kjk/pilot/issues) with the label `security`.
6
-
7
- Do **not** open a public issue on the affected repo if the vulnerability could be exploited before a fix is available. In that case, email the maintainer or use a private GitHub issue on pilot.
8
-
9
- ## Scope
10
-
11
- A security issue includes:
12
-
13
- - Credential or secret exposure in generated output
14
- - Path traversal or file-system access beyond intended scope
15
- - Prompt injection that bypasses guardrails
16
- - Unintended data leakage between commands or sessions
17
-
18
- General bugs, feature requests, and performance issues are **not** security issues.
19
-
20
- ## Response
21
-
22
- Best effort. Reports will be acknowledged within **7 days**. Fixes are prioritized by severity.
package/GOVERNANCE.md DELETED
@@ -1,173 +0,0 @@
1
- # Governance — ownership and permissions
2
-
3
- Addresses how ownership and permissions work in Weeve across multiple people and teams — the gap between one person running all lanes solo and an org with specialists writing to specialist outputs.
4
-
5
- This is a known adoption gate. Solvable, mostly with infrastructure orgs already use, but it needs to be explicit before Weeve lands in any multi-team environment.
6
-
7
- ## The problem
8
-
9
- Weeve is markdown-in-git. In a multi-person org, anyone with repo write access can edit anything. Without explicit ownership boundaries:
10
-
11
- - Non-specialists write to specialist outputs (marketer edits `compass-recommendations`, designer edits `maven-recommendations`)
12
- - Authority is ambiguous — consumers don't know if upstream is the right voice
13
- - Quality erodes as the wrong people make decisions
14
- - Trust in the contract files breaks down
15
-
16
- This is the natural failure mode of any document collaboration system at scale. Weeve needs a governance overlay that makes ownership visible and enforceable.
17
-
18
- ## The architectural insight
19
-
20
- Weeve already has the right ownership structure built in:
21
-
22
- - Each pack has a domain (compass = strategy, maven = marketing, etc.)
23
- - Each contract file has a clear consumer (Pilot reads recommendations)
24
- - Each output has a logical author (the department that owns the pack)
25
-
26
- What's missing is the *governance overlay* that exposes this structure and enforces it. The good news: 80% of the solution is infrastructure orgs already use. Nothing new needs to be invented.
27
-
28
- ## Editor, storage, reader — three separable layers
29
-
30
- A common adoption concern: *"won't non-technical departments resist GitHub?"* Weeve's answer is that **edit, store, and read are three separable layers**, and a department only has to engage with whichever it wants:
31
-
32
- | Layer | Who | Tool |
33
- |---|---|---|
34
- | **Editor** | The specialist team | Their preferred tool — GitHub, Obsidian, Notion (with markdown export), VS Code, Cursor |
35
- | **Storage** | The org (versioned, audited) | Git, Dropbox, Drive, Box, or self-hosted |
36
- | **Reader / consumer** | Everyone | Dashboard, AI agent, Slack notification, exported PDF, the markdown file itself |
37
-
38
- A marketer never has to touch GitHub directly. They consume Maven's outputs via the dashboard, get notifications via Slack, ask the AI agent for the latest positioning, and edit (if they edit at all) in a tool they already know. GitHub is plumbing.
39
-
40
- For non-technical orgs entirely, the storage layer can be something other than git. Downstream tools read from wherever; Weeve doesn't care.
41
-
42
- ## Layer 1 — Git-native ownership (OSS, works today)
43
-
44
- GitHub CODEOWNERS solves the core write-permission problem. One file at the repo root:
45
-
46
- ```
47
- docs/compass/ @leadership-team
48
- docs/maven/ @marketing-team
49
- docs/rubric/ @design-system-team
50
- docs/ally/ @accessibility-team
51
- docs/layers-plus/ @product-team
52
- docs/pilot/ @leadership-team
53
- ```
54
-
55
- Combined with branch protection rules requiring owner approval, this is a hard gate. PRs touching those paths auto-request review from the right team and cannot merge without it.
56
-
57
- Adoption is the only friction. Most orgs using GitHub already use CODEOWNERS for code; using it for the docs folders is the same pattern applied one level over. Weeve should ship a template CODEOWNERS file and make adoption obvious during install.
58
-
59
- ## Layer 2 — Pack-declared ownership (small addition)
60
-
61
- Each pack declares its owner, consumers, and contract in a small `pack.yaml`:
62
-
63
- ```yaml
64
- pack: compass
65
- owner: leadership
66
- consumers: [product, engineering, marketing]
67
- contract: compass-recommendations.md
68
- ```
69
-
70
- This becomes:
71
-
72
- - A scaffolding template — installing Compass for an org auto-generates the right CODEOWNERS entry, picking up the org's team names from a one-time setup
73
- - A documentation artifact — anyone reading the pack repo can see who owns what
74
- - Input to downstream tooling — populates role-based views and routing without extra configuration
75
-
76
- Small addition; large payoff in adoption clarity.
77
-
78
- ## Read vs write
79
-
80
- Weeve gates *writes*, not reads. Cross-functional alignment depends on cross-pack readability:
81
-
82
- - Marketing reads `compass-position` to understand the strategic frame
83
- - Leadership reads `ally-recommendations` to understand accessibility commitments
84
- - Engineering reads `maven-recommendations` to understand the launch shape
85
-
86
- Everyone can read everything. Only the *authors* are gated.
87
-
88
- ## Roles and ownership
89
-
90
- Each domain pack has an obvious owner (the department whose work it captures). Pilot doesn't — it's the meta-pack. "Owning Pilot" splits into three roles, which collapse to one or two people at startup scale but need to be named so they can separate cleanly as the org grows:
91
-
92
- | Role | Owns | Small startup | Medium startup |
93
- |---|---|---|---|
94
- | **Pilot operator** | Runs `/pilot-roadmap` and `/pilot-ship`. Routine work. | Eng lead, platform person, or founder | Platform team |
95
- | **Pilot owner** | The roadmap *output* and the prioritization that produces it. Cross-functional priorities. | Founder / CEO | Leadership team |
96
- | **Alignment platform owner** | Weeve config — which packs are installed, scoring weights, CODEOWNERS template, integrations. | Weeve champion | Platform / ops |
97
-
98
- At small scale (5–50 people), one person is typically all three. That's fine. Naming the roles now lets them split cleanly later without re-architecting.
99
-
100
- The departmental pack owners map straightforwardly:
101
-
102
- | Pack | Default owner |
103
- |---|---|
104
- | Compass | Leadership / founder |
105
- | Layers+ | Product / design |
106
- | Ally | Accessibility lead (or whoever owns a11y) |
107
- | Rubric | Design system / DesignOps |
108
- | Maven | Marketing |
109
- | _(Personal capture tool)_ | Personal — usually not shared |
110
- | Pilot | Leadership (output) + platform (config) |
111
-
112
- ## Adoption shape — the `.alignment/` repo layout
113
-
114
- Concrete shape for an org adopting Weeve:
115
-
116
- ```
117
- alignment/ (the org's adoption repo, e.g. github.com/your-org/alignment)
118
- ├── .alignment/ <- meta-config; owned by platform
119
- │ ├── config.yaml <- installed packs, scoring weights, integrations
120
- │ ├── CODEOWNERS <- write permissions per folder
121
- │ └── pack-overrides/ <- org-specific tweaks (rare)
122
- ├── docs/
123
- │ ├── compass/ <- @leadership-team
124
- │ ├── layers-plus/ <- @product-team
125
- │ ├── ally/ <- @accessibility-team
126
- │ ├── rubric/ <- @design-system-team
127
- │ ├── maven/ <- @marketing-team
128
- │ └── pilot/ <- mixed ownership (see below)
129
- └── README.md
130
- ```
131
-
132
- `.alignment/` is the meta-config layer. The platform person owns it; leadership owns the Pilot output (the roadmap); each department owns their pack's folder. CODEOWNERS enforces all of it.
133
-
134
- **Splitting `docs/pilot/` ownership:**
135
-
136
- The *roadmap content* is leadership's call (these are company priorities). The *operational config* is platform's call (scoring weights, drift thresholds, pack weighting). CODEOWNERS handles this file-by-file:
137
-
138
- ```
139
- docs/pilot/pilot-roadmap.md @leadership-team
140
- docs/pilot/pilot-config.yaml @platform-team
141
- ```
142
-
143
- That split mirrors the role split above.
144
-
145
- ## Config control — who owns what across the system
146
-
147
- For an adopting org, configuration spans several layers. Each has a clear owner:
148
-
149
- | Config layer | What it controls | Owner |
150
- |---|---|---|
151
- | `.alignment/CODEOWNERS` | Write permissions per folder | Platform |
152
- | `.alignment/config.yaml` | Installed packs, scoring weights, integrations | Platform |
153
- | `pack.yaml` (per pack) | Pack-declared ownership and consumers | Platform (informed by departments) |
154
- | Pack version pinning | Which version of each pack is installed | Platform (via git, like any dependency) |
155
- | Integration credentials | OAuth tokens, webhook URLs | Platform; secured per org policy |
156
- | Pack content (per `docs/<pack>/`) | The actual recommendations and audit files | Department owner per pack |
157
-
158
- The config is owned by whoever owns the repo — typically the same person who already maintains the company's GitHub org or `.github/` folder. This isn't a new role to invent; it's a small addition to an existing responsibility.
159
-
160
- ## Compliance posture
161
-
162
- For teams that care about compliance (SOC2, ISO27001, GDPR/CCPA), Weeve is structurally well-positioned:
163
-
164
- - **Audit trail.** Git history is already an immutable, signed, attributed change log — built in, not a paid feature.
165
- - **Access control.** CODEOWNERS + branch protection + GitHub teams = real RBAC, audited by an established external service.
166
- - **Data residency.** Customer's repo = customer's infrastructure = whatever residency they've already configured for source code. No new residency story to defend.
167
- - **Encryption.** GitHub's repo-at-rest encryption applies; transit is HTTPS. Same for any git-based backend.
168
- - **Backup.** Git is inherently distributed; backup is built in via every clone.
169
- - **Vendor risk.** BYO-everything means data stays in the adopter's infrastructure. No new vendor to evaluate for data handling.
170
-
171
- Adopters who need compliance stories (SOC2, vendor risk questionnaires) get one for free from the git-native architecture.
172
-
173
-