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.
Files changed (84) hide show
  1. whykit/__init__.py +21 -0
  2. whykit/adopt.py +776 -0
  3. whykit/backlinks.py +106 -0
  4. whykit/check.py +320 -0
  5. whykit/ci_formats.py +283 -0
  6. whykit/cli.py +1719 -0
  7. whykit/completion.py +193 -0
  8. whykit/config.py +233 -0
  9. whykit/console.py +217 -0
  10. whykit/context.py +204 -0
  11. whykit/contract.py +210 -0
  12. whykit/contract_schemas/backlinks-report.schema.json +61 -0
  13. whykit/contract_schemas/context-bundle.schema.json +27 -0
  14. whykit/contract_schemas/context-pack.schema.json +29 -0
  15. whykit/contract_schemas/impact-report.schema.json +122 -0
  16. whykit/contract_schemas/query-result.schema.json +105 -0
  17. whykit/contract_schemas/status-report.schema.json +176 -0
  18. whykit/contract_schemas/trace-report.schema.json +211 -0
  19. whykit/diff.py +823 -0
  20. whykit/evidence.py +178 -0
  21. whykit/explorer_index.py +554 -0
  22. whykit/graph.py +318 -0
  23. whykit/immutability.py +624 -0
  24. whykit/impact.py +272 -0
  25. whykit/init_layout.py +205 -0
  26. whykit/io.py +563 -0
  27. whykit/lint.py +2190 -0
  28. whykit/lsp.py +1241 -0
  29. whykit/markdown_code.py +107 -0
  30. whykit/mcp_server.py +2289 -0
  31. whykit/messages.py +46 -0
  32. whykit/pack.py +294 -0
  33. whykit/parse_cache.py +752 -0
  34. whykit/placeholders.py +84 -0
  35. whykit/promote.py +651 -0
  36. whykit/py.typed +0 -0
  37. whykit/query.py +174 -0
  38. whykit/review.py +527 -0
  39. whykit/rule_policy.py +1063 -0
  40. whykit/rules.py +274 -0
  41. whykit/scaffold.py +784 -0
  42. whykit/sensitivity.py +95 -0
  43. whykit/snapshot.py +319 -0
  44. whykit/status.py +167 -0
  45. whykit/tables.py +120 -0
  46. whykit/template/00-context/README.md +17 -0
  47. whykit/template/00-context/company.md +52 -0
  48. whykit/template/00-context/evidence-register.md +34 -0
  49. whykit/template/00-context/goals.md +38 -0
  50. whykit/template/00-context/review-log.md +22 -0
  51. whykit/template/00-context/terminology.md +34 -0
  52. whykit/template/01-strategy/README.md +7 -0
  53. whykit/template/02-discoverability/README.md +10 -0
  54. whykit/template/03-website/README.md +7 -0
  55. whykit/template/04-automation/README.md +10 -0
  56. whykit/template/05-operations/README.md +19 -0
  57. whykit/template/06-decisions/README.md +11 -0
  58. whykit/template/06-decisions/decision-log.md +38 -0
  59. whykit/template/07-research/README.md +10 -0
  60. whykit/template/AGENTS.md +163 -0
  61. whykit/template/Home.md +57 -0
  62. whykit/template/INTEROP.md +117 -0
  63. whykit/template/OBSIDIAN.md +92 -0
  64. whykit/template/README.md +51 -0
  65. whykit/template/assets/README.md +6 -0
  66. whykit/template/reports/README.md +7 -0
  67. whykit/template/templates/README.md +7 -0
  68. whykit/template/templates/automation-spec-template.md +70 -0
  69. whykit/template/templates/decision-record-template.md +65 -0
  70. whykit/template/templates/document-template.md +55 -0
  71. whykit/template/templates/experiment-template.md +62 -0
  72. whykit/template/templates/meeting-note-template.md +47 -0
  73. whykit/template/templates/page-brief-template.md +63 -0
  74. whykit/template/templates/research-note-template.md +53 -0
  75. whykit/template/templates/source-ingestion-template.md +43 -0
  76. whykit/template/whykit.toml +39 -0
  77. whykit/trace.py +272 -0
  78. whykit/vault_index.py +190 -0
  79. whykit-0.3.1.dist-info/METADATA +162 -0
  80. whykit-0.3.1.dist-info/RECORD +84 -0
  81. whykit-0.3.1.dist-info/WHEEL +4 -0
  82. whykit-0.3.1.dist-info/entry_points.txt +3 -0
  83. whykit-0.3.1.dist-info/licenses/LICENSE +201 -0
  84. 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,6 @@
1
+ # Assets
2
+
3
+ Images and other attachments linked from notes. Reference them relatively.
4
+
5
+ Name files after what they show, not after the tool that produced them. A
6
+ directory of `screenshot-2026-09-17-at-14-03-22.png` is a directory of nothing.
@@ -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,7 @@
1
+ # Templates
2
+
3
+ Reusable document structures. Every file here carries `status: template` and is
4
+ never treated as content.
5
+
6
+ Copy a template, do not link to it. Placeholders use `TODO` or an obvious
7
+ `YYYY-MM-DD` so an unfilled document is visibly unfinished.
@@ -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
+ -