whykit 0.3.1__py3-none-any.whl
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.
- whykit/__init__.py +21 -0
- whykit/adopt.py +776 -0
- whykit/backlinks.py +106 -0
- whykit/check.py +320 -0
- whykit/ci_formats.py +283 -0
- whykit/cli.py +1719 -0
- whykit/completion.py +193 -0
- whykit/config.py +233 -0
- whykit/console.py +217 -0
- whykit/context.py +204 -0
- whykit/contract.py +210 -0
- whykit/contract_schemas/backlinks-report.schema.json +61 -0
- whykit/contract_schemas/context-bundle.schema.json +27 -0
- whykit/contract_schemas/context-pack.schema.json +29 -0
- whykit/contract_schemas/impact-report.schema.json +122 -0
- whykit/contract_schemas/query-result.schema.json +105 -0
- whykit/contract_schemas/status-report.schema.json +176 -0
- whykit/contract_schemas/trace-report.schema.json +211 -0
- whykit/diff.py +823 -0
- whykit/evidence.py +178 -0
- whykit/explorer_index.py +554 -0
- whykit/graph.py +318 -0
- whykit/immutability.py +624 -0
- whykit/impact.py +272 -0
- whykit/init_layout.py +205 -0
- whykit/io.py +563 -0
- whykit/lint.py +2190 -0
- whykit/lsp.py +1241 -0
- whykit/markdown_code.py +107 -0
- whykit/mcp_server.py +2289 -0
- whykit/messages.py +46 -0
- whykit/pack.py +294 -0
- whykit/parse_cache.py +752 -0
- whykit/placeholders.py +84 -0
- whykit/promote.py +651 -0
- whykit/py.typed +0 -0
- whykit/query.py +174 -0
- whykit/review.py +527 -0
- whykit/rule_policy.py +1063 -0
- whykit/rules.py +274 -0
- whykit/scaffold.py +784 -0
- whykit/sensitivity.py +95 -0
- whykit/snapshot.py +319 -0
- whykit/status.py +167 -0
- whykit/tables.py +120 -0
- whykit/template/00-context/README.md +17 -0
- whykit/template/00-context/company.md +52 -0
- whykit/template/00-context/evidence-register.md +34 -0
- whykit/template/00-context/goals.md +38 -0
- whykit/template/00-context/review-log.md +22 -0
- whykit/template/00-context/terminology.md +34 -0
- whykit/template/01-strategy/README.md +7 -0
- whykit/template/02-discoverability/README.md +10 -0
- whykit/template/03-website/README.md +7 -0
- whykit/template/04-automation/README.md +10 -0
- whykit/template/05-operations/README.md +19 -0
- whykit/template/06-decisions/README.md +11 -0
- whykit/template/06-decisions/decision-log.md +38 -0
- whykit/template/07-research/README.md +10 -0
- whykit/template/AGENTS.md +163 -0
- whykit/template/Home.md +57 -0
- whykit/template/INTEROP.md +117 -0
- whykit/template/OBSIDIAN.md +92 -0
- whykit/template/README.md +51 -0
- whykit/template/assets/README.md +6 -0
- whykit/template/reports/README.md +7 -0
- whykit/template/templates/README.md +7 -0
- whykit/template/templates/automation-spec-template.md +70 -0
- whykit/template/templates/decision-record-template.md +65 -0
- whykit/template/templates/document-template.md +55 -0
- whykit/template/templates/experiment-template.md +62 -0
- whykit/template/templates/meeting-note-template.md +47 -0
- whykit/template/templates/page-brief-template.md +63 -0
- whykit/template/templates/research-note-template.md +53 -0
- whykit/template/templates/source-ingestion-template.md +43 -0
- whykit/template/whykit.toml +39 -0
- whykit/trace.py +272 -0
- whykit/vault_index.py +190 -0
- whykit-0.3.1.dist-info/METADATA +162 -0
- whykit-0.3.1.dist-info/RECORD +84 -0
- whykit-0.3.1.dist-info/WHEEL +4 -0
- whykit-0.3.1.dist-info/entry_points.txt +3 -0
- whykit-0.3.1.dist-info/licenses/LICENSE +201 -0
- whykit-0.3.1.dist-info/licenses/NOTICE +13 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Working across repositories
|
|
3
|
+
aliases:
|
|
4
|
+
- INTEROP
|
|
5
|
+
type: guide
|
|
6
|
+
status: approved
|
|
7
|
+
owner: WhyKit maintainers
|
|
8
|
+
created: 2026-09-17
|
|
9
|
+
last_updated: 2026-09-17
|
|
10
|
+
source_of_truth: true
|
|
11
|
+
sensitivity: public
|
|
12
|
+
tags:
|
|
13
|
+
- governance
|
|
14
|
+
- interop
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Working across repositories
|
|
18
|
+
|
|
19
|
+
This repository holds reasoning. The company's other repositories hold systems.
|
|
20
|
+
They are edited in the same sessions, by the same people and agents, and that is
|
|
21
|
+
exactly where things go wrong. These are the rules that keep them apart.
|
|
22
|
+
|
|
23
|
+
## The split
|
|
24
|
+
|
|
25
|
+
| | Knowledge repository | Code repository |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| Source of truth for | Why a thing was decided, what we believe, what we measured | What the system actually does |
|
|
28
|
+
| Changes when | A decision, a finding or a definition changes | Behaviour changes |
|
|
29
|
+
| Read by | People, agents, new joiners | Build pipelines, runtimes |
|
|
30
|
+
| Safe to be wrong in | No — it is quoted later as fact | It fails loudly |
|
|
31
|
+
|
|
32
|
+
The rule that follows: **never describe current system behaviour here as fact.**
|
|
33
|
+
Describe the decision and link to the code. Code drifts; a decision does not. A
|
|
34
|
+
sentence here saying "the form sends X" will be false within a quarter and nobody
|
|
35
|
+
will notice. A sentence saying "D-041: we decided the form should send X, see
|
|
36
|
+
`web/src/forms/Contact.tsx`" stays true even after the code changes, because it
|
|
37
|
+
records a decision, and the link shows what happened to it.
|
|
38
|
+
|
|
39
|
+
## Checkout layout
|
|
40
|
+
|
|
41
|
+
Assume every repository is a sibling directory under one workspace root:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
workspace/
|
|
45
|
+
knowledge/ <- this repository
|
|
46
|
+
web/
|
|
47
|
+
api/
|
|
48
|
+
infra/
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Nothing enforces this, but the link convention below reads naturally only if it
|
|
52
|
+
holds. If your layout differs, write it down here, because every agent that opens
|
|
53
|
+
this file will otherwise assume the layout above.
|
|
54
|
+
|
|
55
|
+
## Linking to another repository
|
|
56
|
+
|
|
57
|
+
Always prefix the repository name, and always use the path from that
|
|
58
|
+
repository's root:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
web/src/components/BookingEmbed.astro
|
|
62
|
+
api/server.py:112
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Never write a path from inside a subdirectory, and never write an absolute path
|
|
66
|
+
from someone's machine. A bare `src/components/BookingEmbed.astro` is ambiguous
|
|
67
|
+
the moment a second repository has a `src/components/`, and an absolute path is
|
|
68
|
+
wrong for everyone except its author.
|
|
69
|
+
|
|
70
|
+
Link to a line number only when pointing at a specific decision point. Line
|
|
71
|
+
numbers rot faster than paths, so prefer naming the function or the section.
|
|
72
|
+
|
|
73
|
+
## What lives where when a change touches both
|
|
74
|
+
|
|
75
|
+
A change that spans repositories produces two artefacts, not one:
|
|
76
|
+
|
|
77
|
+
1. **A decision record here**, in `06-decisions/`, carrying the reasoning, the
|
|
78
|
+
alternatives, the evidence and the consequences.
|
|
79
|
+
2. **The change itself in the code repository**, whose commit message references
|
|
80
|
+
the decision ID.
|
|
81
|
+
|
|
82
|
+
Neither is a summary of the other. The decision record explains a choice to a
|
|
83
|
+
person who was not there; the commit explains a change to someone reading a diff.
|
|
84
|
+
|
|
85
|
+
When a decision is reversed, append a new record and mark the old one
|
|
86
|
+
`superseded`. Do not edit the original into agreement with the present.
|
|
87
|
+
|
|
88
|
+
## Rules for agents crossing a repository boundary
|
|
89
|
+
|
|
90
|
+
1. **Do not clone, pull or fetch other repositories** because a task mentions
|
|
91
|
+
them. Work against what is already checked out, and say so if it is missing.
|
|
92
|
+
2. **Do not run a code repository's build, deploy or release commands** from a
|
|
93
|
+
session anchored here. Knowledge work does not need them, and a deploy
|
|
94
|
+
triggered as a side effect of research is the worst kind of surprise.
|
|
95
|
+
3. **Do not commit in a repository you were not asked to change.** Cross-repo
|
|
96
|
+
work produces changes in several working trees; leave them there and report
|
|
97
|
+
what is uncommitted where.
|
|
98
|
+
4. **Read before claiming.** If a document here asserts something about a code
|
|
99
|
+
repository, open the file and check before repeating it. The assertion may
|
|
100
|
+
predate the code.
|
|
101
|
+
5. **Report per repository.** When work touched three repositories, say what
|
|
102
|
+
changed in each, separately. A merged summary hides which tree is dirty.
|
|
103
|
+
|
|
104
|
+
## Secrets
|
|
105
|
+
|
|
106
|
+
No repository in this set holds credentials. This one additionally must not hold
|
|
107
|
+
their *values* in prose, screenshots or pasted logs — a knowledge repository is
|
|
108
|
+
copied, exported and shared far more casually than a code repository.
|
|
109
|
+
|
|
110
|
+
Record where a secret lives and who can grant it. Never what it is.
|
|
111
|
+
|
|
112
|
+
## Keeping this file honest
|
|
113
|
+
|
|
114
|
+
`INTEROP.md` is the one document here that is allowed to describe other
|
|
115
|
+
repositories, and therefore the one most likely to go stale. Review it whenever
|
|
116
|
+
a repository is added, renamed or retired, and put that review on the same
|
|
117
|
+
cadence as the decision-log review.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Obsidian conventions
|
|
3
|
+
aliases:
|
|
4
|
+
- Vault conventions
|
|
5
|
+
type: guide
|
|
6
|
+
status: approved
|
|
7
|
+
owner: WhyKit maintainers
|
|
8
|
+
created: 2026-09-17
|
|
9
|
+
last_updated: 2026-09-17
|
|
10
|
+
source_of_truth: true
|
|
11
|
+
sensitivity: public
|
|
12
|
+
tags:
|
|
13
|
+
- governance
|
|
14
|
+
- obsidian
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Obsidian conventions
|
|
18
|
+
|
|
19
|
+
Open the repository root as the vault root.
|
|
20
|
+
|
|
21
|
+
## Compatibility
|
|
22
|
+
|
|
23
|
+
- UTF-8 Markdown files.
|
|
24
|
+
- No community plugin required for core navigation or reading.
|
|
25
|
+
- Readable in both Obsidian and a plain Git host.
|
|
26
|
+
- YAML front matter for document properties.
|
|
27
|
+
- Obsidian callouts instead of platform-specific block markup.
|
|
28
|
+
|
|
29
|
+
## Required properties for new working notes
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
title: Human-readable title
|
|
33
|
+
aliases: []
|
|
34
|
+
type: strategy | research | framework | specification | decision | map-of-content | guide
|
|
35
|
+
status: draft | in_review | approved | superseded | archived
|
|
36
|
+
owner: Owner name
|
|
37
|
+
created: YYYY-MM-DD
|
|
38
|
+
last_updated: YYYY-MM-DD
|
|
39
|
+
source_of_truth: false
|
|
40
|
+
sensitivity: internal
|
|
41
|
+
source_ids: []
|
|
42
|
+
tags: []
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Templates use `status: template`. `sensitivity` is one of `public`, `internal`, `confidential`, or `restricted`.
|
|
46
|
+
|
|
47
|
+
`source_of_truth: true` is a claim, not a formality. It means: if another
|
|
48
|
+
document disagrees with this one, this one wins. Very few documents should carry
|
|
49
|
+
it, and every one that does needs an owner who notices when it goes stale.
|
|
50
|
+
|
|
51
|
+
## Links
|
|
52
|
+
|
|
53
|
+
- Wikilinks for internal notes: `[[path/to/note|Readable label]]`.
|
|
54
|
+
- Markdown links for external sources.
|
|
55
|
+
- Link to the canonical note instead of duplicating it.
|
|
56
|
+
- Prefer unique note names; add a path where a title could be ambiguous.
|
|
57
|
+
- For files in another repository, follow `INTEROP.md` — those are not wikilinks.
|
|
58
|
+
|
|
59
|
+
## File names and structure
|
|
60
|
+
|
|
61
|
+
- Lowercase `kebab-case.md` for normal notes.
|
|
62
|
+
- Root navigation notes may use a readable name, such as `Home.md`.
|
|
63
|
+
- Attachments in `assets/`, linked relatively.
|
|
64
|
+
- No empty heading-only exports, no duplicate stubs.
|
|
65
|
+
- No exporter-generated identifiers in normalized file names.
|
|
66
|
+
- Date-stamped documents end with the date: `name-YYYY-MM-DD.md`. Anything
|
|
67
|
+
reporting a point in time needs this; a report called `audit.md` is unusable
|
|
68
|
+
the second time someone runs an audit.
|
|
69
|
+
|
|
70
|
+
## Obsidian callouts
|
|
71
|
+
|
|
72
|
+
Callouts are how the five information types stay visible while reading:
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
> [!fact] Verified fact
|
|
76
|
+
> Supported by a reviewed source.
|
|
77
|
+
|
|
78
|
+
> [!hypothesis] Hypothesis
|
|
79
|
+
> Requires validation.
|
|
80
|
+
|
|
81
|
+
> [!warning] Needs verification
|
|
82
|
+
> Do not publish or treat as canonical.
|
|
83
|
+
|
|
84
|
+
> [!decision] Decision
|
|
85
|
+
> Link to the decision-log entry.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Navigation
|
|
89
|
+
|
|
90
|
+
Start from `Home.md`. Every substantive note links back to at least one map,
|
|
91
|
+
strategy, workstream or source note. A note nothing links to will not be found
|
|
92
|
+
again, whatever the search index says.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Company knowledge vault
|
|
2
|
+
|
|
3
|
+
This repository holds the reasoning behind how this company operates: durable
|
|
4
|
+
context, the evidence behind claims, and the decisions that were actually taken —
|
|
5
|
+
with the rationale that made them make sense at the time.
|
|
6
|
+
|
|
7
|
+
It is built on [WhyKit](https://github.com/CometWeb-io/whykit).
|
|
8
|
+
|
|
9
|
+
## Start here
|
|
10
|
+
|
|
11
|
+
Open `Home.md`. It is the map of content and the entry point for every session,
|
|
12
|
+
human or agent.
|
|
13
|
+
|
|
14
|
+
## Before you write anything
|
|
15
|
+
|
|
16
|
+
1. Read `AGENTS.md`. It is the contract everyone works under, and it ships with
|
|
17
|
+
questions this company has to answer for itself. Answer them first.
|
|
18
|
+
2. Read the README in the directory you are about to write in.
|
|
19
|
+
3. Check the note is not already covered somewhere canonical. Link, do not copy.
|
|
20
|
+
|
|
21
|
+
## The rule that matters most
|
|
22
|
+
|
|
23
|
+
Do not let these blur:
|
|
24
|
+
|
|
25
|
+
| Type | Means |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Verified fact | Supported by reviewed evidence, cited as `E-NNN` |
|
|
28
|
+
| Decision | An authorized choice, recorded as `D-NNN`, never rewritten |
|
|
29
|
+
| Hypothesis | Plausible, not demonstrated |
|
|
30
|
+
| Recommendation | Proposed, not yet accepted |
|
|
31
|
+
| Open question | A known unknown with an owner |
|
|
32
|
+
|
|
33
|
+
An unsupported claim should not become company memory just because somebody —
|
|
34
|
+
or some agent — wrote it confidently.
|
|
35
|
+
|
|
36
|
+
## Checking your work
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
whykit lint
|
|
40
|
+
whykit lint --strict
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The linter checks shape, not truth. It will tell you that a claim has no
|
|
44
|
+
evidence; it cannot tell you the evidence is any good.
|
|
45
|
+
|
|
46
|
+
## Sensitivity
|
|
47
|
+
|
|
48
|
+
Every note carries `sensitivity: public | internal | confidential | restricted`.
|
|
49
|
+
**This vault is not public unless you have deliberately made it so.** Never lower
|
|
50
|
+
a sensitivity label to make sharing easier, and never record a secret value —
|
|
51
|
+
record where the secret lives and who can grant it.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Reports
|
|
2
|
+
|
|
3
|
+
Generated and recurring analyses. Every file ends with its date.
|
|
4
|
+
|
|
5
|
+
A report is a snapshot: true on the day it was produced and never updated
|
|
6
|
+
afterwards. When the analysis is re-run, add a new file. Overwriting a report
|
|
7
|
+
destroys the only copy of what was true last month.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Automation spec — workflow name
|
|
3
|
+
aliases: []
|
|
4
|
+
type: specification
|
|
5
|
+
status: template
|
|
6
|
+
owner: TODO
|
|
7
|
+
created: YYYY-MM-DD
|
|
8
|
+
last_updated: YYYY-MM-DD
|
|
9
|
+
source_of_truth: false
|
|
10
|
+
sensitivity: public
|
|
11
|
+
source_ids: []
|
|
12
|
+
tags: []
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Automation spec: workflow name
|
|
16
|
+
|
|
17
|
+
## Purpose
|
|
18
|
+
|
|
19
|
+
## Trigger
|
|
20
|
+
|
|
21
|
+
## Inputs
|
|
22
|
+
|
|
23
|
+
| Field | Source | Required | Validation | Personal data |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| | | | | |
|
|
26
|
+
|
|
27
|
+
## Logic
|
|
28
|
+
|
|
29
|
+
1.
|
|
30
|
+
|
|
31
|
+
## Outputs and side effects
|
|
32
|
+
|
|
33
|
+
-
|
|
34
|
+
|
|
35
|
+
## Systems involved
|
|
36
|
+
|
|
37
|
+
-
|
|
38
|
+
|
|
39
|
+
## Ownership
|
|
40
|
+
|
|
41
|
+
- Business owner:
|
|
42
|
+
- Technical owner:
|
|
43
|
+
- Exception owner:
|
|
44
|
+
|
|
45
|
+
Name a person for the exception owner. "The team" means nobody will notice the
|
|
46
|
+
failure.
|
|
47
|
+
|
|
48
|
+
## Error handling
|
|
49
|
+
|
|
50
|
+
- Retry policy:
|
|
51
|
+
- Alerting:
|
|
52
|
+
- Manual fallback:
|
|
53
|
+
- Rollback:
|
|
54
|
+
|
|
55
|
+
## Monitoring
|
|
56
|
+
|
|
57
|
+
| Metric / log | Threshold | Location | Owner |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| | | | |
|
|
60
|
+
|
|
61
|
+
## Security and compliance
|
|
62
|
+
|
|
63
|
+
- Access:
|
|
64
|
+
- Data retention:
|
|
65
|
+
- Consent / legal basis:
|
|
66
|
+
- Secret management — where they live, never their values:
|
|
67
|
+
|
|
68
|
+
## Acceptance criteria
|
|
69
|
+
|
|
70
|
+
- [ ]
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Decision record — title
|
|
3
|
+
aliases: []
|
|
4
|
+
type: decision
|
|
5
|
+
decision_id: D-XXX
|
|
6
|
+
status: template
|
|
7
|
+
owner: TODO
|
|
8
|
+
created: YYYY-MM-DD
|
|
9
|
+
last_updated: YYYY-MM-DD
|
|
10
|
+
source_of_truth: false
|
|
11
|
+
sensitivity: public
|
|
12
|
+
source_ids: []
|
|
13
|
+
tags: []
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Decision record: title
|
|
17
|
+
|
|
18
|
+
## Decision ID
|
|
19
|
+
|
|
20
|
+
D-XXX
|
|
21
|
+
|
|
22
|
+
## Status
|
|
23
|
+
|
|
24
|
+
Proposed / accepted / superseded
|
|
25
|
+
|
|
26
|
+
## Context
|
|
27
|
+
|
|
28
|
+
What was true when this came up, and what forced a choice.
|
|
29
|
+
|
|
30
|
+
## Decision
|
|
31
|
+
|
|
32
|
+
What was decided, in one sentence.
|
|
33
|
+
|
|
34
|
+
## Rationale
|
|
35
|
+
|
|
36
|
+
## Evidence
|
|
37
|
+
|
|
38
|
+
-
|
|
39
|
+
|
|
40
|
+
## Alternatives considered
|
|
41
|
+
|
|
42
|
+
| Alternative | Upside | Risk | Why rejected |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| | | | |
|
|
45
|
+
|
|
46
|
+
An empty row here means the decision was not really a choice. Either fill it or
|
|
47
|
+
say plainly that there was only one option.
|
|
48
|
+
|
|
49
|
+
## Consequences
|
|
50
|
+
|
|
51
|
+
### Positive
|
|
52
|
+
|
|
53
|
+
-
|
|
54
|
+
|
|
55
|
+
### Negative and trade-offs
|
|
56
|
+
|
|
57
|
+
-
|
|
58
|
+
|
|
59
|
+
## Ownership and review
|
|
60
|
+
|
|
61
|
+
- Owner:
|
|
62
|
+
- Decided on:
|
|
63
|
+
- Review on:
|
|
64
|
+
- Supersedes:
|
|
65
|
+
- Superseded by:
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Document title
|
|
3
|
+
aliases: []
|
|
4
|
+
type: guide
|
|
5
|
+
status: template
|
|
6
|
+
owner: TODO
|
|
7
|
+
created: YYYY-MM-DD
|
|
8
|
+
last_updated: YYYY-MM-DD
|
|
9
|
+
source_of_truth: false
|
|
10
|
+
sensitivity: public
|
|
11
|
+
source_ids: []
|
|
12
|
+
tags: []
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Document title
|
|
16
|
+
|
|
17
|
+
## Purpose
|
|
18
|
+
|
|
19
|
+
Which decision or workflow does this document support?
|
|
20
|
+
|
|
21
|
+
## Scope
|
|
22
|
+
|
|
23
|
+
In scope:
|
|
24
|
+
|
|
25
|
+
-
|
|
26
|
+
|
|
27
|
+
Out of scope:
|
|
28
|
+
|
|
29
|
+
-
|
|
30
|
+
|
|
31
|
+
## Verified facts
|
|
32
|
+
|
|
33
|
+
| Fact | Evidence |
|
|
34
|
+
|---|---|
|
|
35
|
+
| | |
|
|
36
|
+
|
|
37
|
+
## Analysis
|
|
38
|
+
|
|
39
|
+
Keep interpretation visibly separate from the evidence above.
|
|
40
|
+
|
|
41
|
+
## Recommendations
|
|
42
|
+
|
|
43
|
+
-
|
|
44
|
+
|
|
45
|
+
## Decisions
|
|
46
|
+
|
|
47
|
+
- None yet.
|
|
48
|
+
|
|
49
|
+
## Open questions
|
|
50
|
+
|
|
51
|
+
-
|
|
52
|
+
|
|
53
|
+
## Related documents
|
|
54
|
+
|
|
55
|
+
-
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Experiment — title
|
|
3
|
+
aliases: []
|
|
4
|
+
type: framework
|
|
5
|
+
status: template
|
|
6
|
+
owner: TODO
|
|
7
|
+
created: YYYY-MM-DD
|
|
8
|
+
last_updated: YYYY-MM-DD
|
|
9
|
+
source_of_truth: false
|
|
10
|
+
sensitivity: public
|
|
11
|
+
source_ids: []
|
|
12
|
+
tags: []
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Experiment: title
|
|
16
|
+
|
|
17
|
+
## Problem
|
|
18
|
+
|
|
19
|
+
## Evidence
|
|
20
|
+
|
|
21
|
+
-
|
|
22
|
+
|
|
23
|
+
## Hypothesis
|
|
24
|
+
|
|
25
|
+
We believe that [change] for [audience] will lead to [outcome], because [reason].
|
|
26
|
+
|
|
27
|
+
## Primary metric
|
|
28
|
+
|
|
29
|
+
One. An experiment with three primary metrics has none.
|
|
30
|
+
|
|
31
|
+
## Guardrail metrics
|
|
32
|
+
|
|
33
|
+
-
|
|
34
|
+
|
|
35
|
+
## Baseline
|
|
36
|
+
|
|
37
|
+
Needs verification. Record it before the experiment starts — a baseline measured
|
|
38
|
+
afterwards is a description of the result.
|
|
39
|
+
|
|
40
|
+
## Design
|
|
41
|
+
|
|
42
|
+
- Variant / intervention:
|
|
43
|
+
- Audience:
|
|
44
|
+
- Duration or sampling rule:
|
|
45
|
+
- Exclusions:
|
|
46
|
+
|
|
47
|
+
## Decision rule
|
|
48
|
+
|
|
49
|
+
What result leads to what action, written before the data arrives.
|
|
50
|
+
|
|
51
|
+
## Result
|
|
52
|
+
|
|
53
|
+
Not started.
|
|
54
|
+
|
|
55
|
+
## Decision
|
|
56
|
+
|
|
57
|
+
Pending.
|
|
58
|
+
|
|
59
|
+
## If the hypothesis failed
|
|
60
|
+
|
|
61
|
+
Say so here explicitly, and keep the record. A failed hypothesis that stays on
|
|
62
|
+
file stops the same idea being proposed again next quarter.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Meeting — topic
|
|
3
|
+
aliases: []
|
|
4
|
+
type: guide
|
|
5
|
+
status: template
|
|
6
|
+
owner: TODO
|
|
7
|
+
created: YYYY-MM-DD
|
|
8
|
+
last_updated: YYYY-MM-DD
|
|
9
|
+
source_of_truth: false
|
|
10
|
+
sensitivity: public
|
|
11
|
+
source_ids: []
|
|
12
|
+
tags: []
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Meeting: topic
|
|
16
|
+
|
|
17
|
+
- Date:
|
|
18
|
+
- Attendees:
|
|
19
|
+
- Purpose:
|
|
20
|
+
|
|
21
|
+
## Context
|
|
22
|
+
|
|
23
|
+
## Notes
|
|
24
|
+
|
|
25
|
+
-
|
|
26
|
+
|
|
27
|
+
## Decisions
|
|
28
|
+
|
|
29
|
+
| Decision | Owner | Evidence / rationale | Decision-log ID |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| | | | |
|
|
32
|
+
|
|
33
|
+
A decision recorded here is not yet recorded. Open `06-decisions/` and add it.
|
|
34
|
+
|
|
35
|
+
## Actions
|
|
36
|
+
|
|
37
|
+
| Action | Owner | Due | Tracked in |
|
|
38
|
+
|---|---|---|---|
|
|
39
|
+
| | | | |
|
|
40
|
+
|
|
41
|
+
## Open questions
|
|
42
|
+
|
|
43
|
+
-
|
|
44
|
+
|
|
45
|
+
## Repository updates required
|
|
46
|
+
|
|
47
|
+
-
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Page brief — page name
|
|
3
|
+
aliases: []
|
|
4
|
+
type: specification
|
|
5
|
+
status: template
|
|
6
|
+
owner: TODO
|
|
7
|
+
created: YYYY-MM-DD
|
|
8
|
+
last_updated: YYYY-MM-DD
|
|
9
|
+
source_of_truth: false
|
|
10
|
+
sensitivity: public
|
|
11
|
+
source_ids: []
|
|
12
|
+
tags: []
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Page brief: page name
|
|
16
|
+
|
|
17
|
+
## Business goal
|
|
18
|
+
|
|
19
|
+
## Primary audience
|
|
20
|
+
|
|
21
|
+
## Visitor situation and intent
|
|
22
|
+
|
|
23
|
+
What the visitor was doing immediately before arriving, and what they came to
|
|
24
|
+
settle. A page written for a search query rather than a situation reads like a
|
|
25
|
+
search query.
|
|
26
|
+
|
|
27
|
+
## Primary conversion
|
|
28
|
+
|
|
29
|
+
## Secondary conversion
|
|
30
|
+
|
|
31
|
+
## Core message
|
|
32
|
+
|
|
33
|
+
Needs verification.
|
|
34
|
+
|
|
35
|
+
## Evidence the page must carry
|
|
36
|
+
|
|
37
|
+
-
|
|
38
|
+
|
|
39
|
+
## Questions the page must answer
|
|
40
|
+
|
|
41
|
+
-
|
|
42
|
+
|
|
43
|
+
## Proposed structure
|
|
44
|
+
|
|
45
|
+
1.
|
|
46
|
+
|
|
47
|
+
## Search and answer-engine inputs
|
|
48
|
+
|
|
49
|
+
- Primary topic:
|
|
50
|
+
- Supporting questions:
|
|
51
|
+
- Entities:
|
|
52
|
+
- Internal links:
|
|
53
|
+
- Schema requirements:
|
|
54
|
+
|
|
55
|
+
## Measurement
|
|
56
|
+
|
|
57
|
+
| Event | Definition | Tool | Owner |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| | | | |
|
|
60
|
+
|
|
61
|
+
## Dependencies and risks
|
|
62
|
+
|
|
63
|
+
-
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Research note
|
|
3
|
+
aliases: []
|
|
4
|
+
type: research
|
|
5
|
+
status: template
|
|
6
|
+
owner: TODO
|
|
7
|
+
created: YYYY-MM-DD
|
|
8
|
+
last_updated: YYYY-MM-DD
|
|
9
|
+
source_of_truth: false
|
|
10
|
+
sensitivity: public
|
|
11
|
+
source_ids: []
|
|
12
|
+
tags: []
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Research note
|
|
16
|
+
|
|
17
|
+
## Research question
|
|
18
|
+
|
|
19
|
+
## Source
|
|
20
|
+
|
|
21
|
+
- Title:
|
|
22
|
+
- Author / organisation:
|
|
23
|
+
- URL or repository path:
|
|
24
|
+
- Published:
|
|
25
|
+
- Accessed:
|
|
26
|
+
- Evidence-register ID:
|
|
27
|
+
|
|
28
|
+
## Key findings
|
|
29
|
+
|
|
30
|
+
-
|
|
31
|
+
|
|
32
|
+
## Direct evidence
|
|
33
|
+
|
|
34
|
+
Paraphrase by default. Use short quotes only where the exact wording carries the
|
|
35
|
+
meaning, and attribute them.
|
|
36
|
+
|
|
37
|
+
## Limitations
|
|
38
|
+
|
|
39
|
+
What this source cannot tell us, and where it is likely to be biased.
|
|
40
|
+
|
|
41
|
+
-
|
|
42
|
+
|
|
43
|
+
## Interpretation
|
|
44
|
+
|
|
45
|
+
-
|
|
46
|
+
|
|
47
|
+
## Implications
|
|
48
|
+
|
|
49
|
+
-
|
|
50
|
+
|
|
51
|
+
## Follow-up questions
|
|
52
|
+
|
|
53
|
+
-
|