tweakidea 0.1.0
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/LICENSE +21 -0
- package/README.md +95 -0
- package/agents/ti-evaluator.md +162 -0
- package/agents/ti-extractor.md +84 -0
- package/agents/ti-merger.md +179 -0
- package/agents/ti-researcher.md +99 -0
- package/bin/install.js +449 -0
- package/commands/tweak/evaluate.md +632 -0
- package/package.json +31 -0
- package/skills/ti-founder/SKILL.md +186 -0
- package/skills/ti-html-report/SKILL.md +352 -0
- package/skills/ti-scoring/EVALUATION.md +63 -0
- package/skills/ti-scoring/SKILL.md +7 -0
- package/skills/ti-scoring/dimensions/behavior-change-required.md +54 -0
- package/skills/ti-scoring/dimensions/clarity-of-target-customer.md +49 -0
- package/skills/ti-scoring/dimensions/defensibility.md +50 -0
- package/skills/ti-scoring/dimensions/founder-market-fit.md +51 -0
- package/skills/ti-scoring/dimensions/frequency.md +44 -0
- package/skills/ti-scoring/dimensions/incumbent-indifference.md +50 -0
- package/skills/ti-scoring/dimensions/mandatory-nature.md +43 -0
- package/skills/ti-scoring/dimensions/market-growth.md +47 -0
- package/skills/ti-scoring/dimensions/market-size.md +50 -0
- package/skills/ti-scoring/dimensions/pain-intensity.md +48 -0
- package/skills/ti-scoring/dimensions/scalability.md +48 -0
- package/skills/ti-scoring/dimensions/solution-gap.md +55 -0
- package/skills/ti-scoring/dimensions/urgency.md +46 -0
- package/skills/ti-scoring/dimensions/willingness-to-pay.md +53 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ti-founder
|
|
3
|
+
description: Founder profile template, creation questions, section definitions, and fit question guidance for TweakIdea evaluations
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Reference data for all founder profile operations. The orchestrator (`evaluate.md`) uses this skill to create, read, and update `FOUNDER.md` at `~/.tweakidea/FOUNDER.md`.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## FOUNDER.md Template
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
# Founder Profile
|
|
15
|
+
|
|
16
|
+
## Expertise & Domain Knowledge
|
|
17
|
+
- Domain: [domain/industry]
|
|
18
|
+
- Depth: [depth/level]
|
|
19
|
+
- Insight: [unique perspective]
|
|
20
|
+
|
|
21
|
+
## Relevant Experience
|
|
22
|
+
- Role: [most relevant role]
|
|
23
|
+
- Achievement: [relevant accomplishment]
|
|
24
|
+
- Duration: [time in space]
|
|
25
|
+
|
|
26
|
+
## Network & Market Access
|
|
27
|
+
- Connections: [network]
|
|
28
|
+
- Channel: [customer access]
|
|
29
|
+
- Capital: [resources/funding]
|
|
30
|
+
|
|
31
|
+
## Build Capabilities
|
|
32
|
+
- Technical: [build capability]
|
|
33
|
+
- Team: [team composition]
|
|
34
|
+
- Speed: [shipping ability]
|
|
35
|
+
|
|
36
|
+
## Drive & Commitment
|
|
37
|
+
- Motivation: [why this problem]
|
|
38
|
+
- Experience: [personal connection]
|
|
39
|
+
- Commitment: [commitment level]
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
*Created: [date] | Last updated: [date]*
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Template Rules
|
|
46
|
+
|
|
47
|
+
- Field names (Domain, Depth, Insight, etc.) are starter suggestions. Use whatever tagged entries naturally emerge from the founder's answers.
|
|
48
|
+
- Not every section needs all suggested fields -- some may have 1 entry, some may have 5.
|
|
49
|
+
- Keep FOUNDER.md under 100 lines (context budget).
|
|
50
|
+
- Do NOT add new sections beyond the 5 defined above. Fit additional information into the most relevant existing section as tagged list entries (e.g., `- Key: Value`).
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Profile Creation Questions
|
|
55
|
+
|
|
56
|
+
Ask these 5 questions one at a time using AskUserQuestion, waiting for each answer before proceeding to the next:
|
|
57
|
+
|
|
58
|
+
| # | Question | Maps to Section |
|
|
59
|
+
|---|----------|-----------------|
|
|
60
|
+
| 1 | "What's your professional background? (Industry experience, roles, education)" | Relevant Experience |
|
|
61
|
+
| 2 | "What domains do you have deep expertise in?" | Expertise & Domain Knowledge |
|
|
62
|
+
| 3 | "What relevant network or resources do you have? (Connections, advisors, potential early customers, capital access)" | Network & Market Access |
|
|
63
|
+
| 4 | "What can you or your team build? (Technical strengths, capabilities)" | Build Capabilities |
|
|
64
|
+
| 5 | "What drives you to work on hard problems? (Personal motivation, what keeps you going)" | Drive & Commitment |
|
|
65
|
+
|
|
66
|
+
Preamble before asking: "I don't have a founder profile yet. I'll ask a few quick questions to understand your background -- this helps evaluate founder-market fit and only needs to happen once."
|
|
67
|
+
|
|
68
|
+
If during the questioning flow the user volunteers additional relevant information beyond what was asked, capture it in the appropriate section. Do not add new sections.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Fit Question Guidance
|
|
73
|
+
|
|
74
|
+
After profile creation/load, ask 2-4 questions about the founder's connection to THIS specific idea. These questions serve a dual purpose: surface persistent founder attributes while assessing idea-specific fit.
|
|
75
|
+
|
|
76
|
+
### Design Principle
|
|
77
|
+
|
|
78
|
+
Each question must simultaneously:
|
|
79
|
+
1. Surface a **persistent founder attribute** (expertise, experience, network, capability) that would appear in FOUNDER.md
|
|
80
|
+
2. Assess **idea-specific fit** by anchoring that attribute to the current idea domain
|
|
81
|
+
|
|
82
|
+
Do NOT write questions that are purely idea-specific ("How big is this market?") or purely background ("What's your experience?"). The profile creation questions already captured generic background. Fit questions contextualize those attributes to this idea.
|
|
83
|
+
|
|
84
|
+
### Focus
|
|
85
|
+
|
|
86
|
+
Founder-idea fit exclusively -- NOT generic idea questions. Do not ask about target customers, market size, competitors, or other idea details already present in the idea text.
|
|
87
|
+
|
|
88
|
+
### Dynamic Generation
|
|
89
|
+
|
|
90
|
+
Questions must be generated based on:
|
|
91
|
+
- The idea domain (what industry/problem space is described)
|
|
92
|
+
- What FOUNDER.md already covers -- do NOT re-ask what is already known
|
|
93
|
+
- Gaps in understanding the founder-idea connection that would help evaluate founder-market fit
|
|
94
|
+
|
|
95
|
+
### Example Dual-Purpose Patterns
|
|
96
|
+
|
|
97
|
+
Adapt to the specific idea -- do not use these verbatim if they don't fit:
|
|
98
|
+
- "What experience or expertise gives you an edge in [the idea's specific domain]?" -- surfaces expertise (persistent) + idea relevance
|
|
99
|
+
- "Have you personally experienced [the specific problem], and what was your situation?" -- surfaces personal connection (persistent) + idea validation
|
|
100
|
+
- "Do you have existing relationships with [target segment], and how strong is that access?" -- surfaces network (persistent) + idea-specific channel
|
|
101
|
+
- "What have you already built or shipped that's relevant to [this problem area]?" -- surfaces build capability (persistent) + idea relevance
|
|
102
|
+
|
|
103
|
+
### Presentation
|
|
104
|
+
|
|
105
|
+
Present all 2-4 fit questions in a **single AskUserQuestion call** so the founder sees and answers all questions together in one interaction. Do NOT preview questions first, do NOT ask them one at a time. One call, all questions.
|
|
106
|
+
|
|
107
|
+
For each question, provide 2-4 answer options relevant to the question type (e.g., depth-of-experience options, yes/no with elaboration, etc.). AskUserQuestion auto-adds "Other" -- do NOT include "Other" as an explicit option.
|
|
108
|
+
|
|
109
|
+
### Storage
|
|
110
|
+
|
|
111
|
+
Store all question-answer pairs as FOUNDER_FIT_ANSWERS:
|
|
112
|
+
```
|
|
113
|
+
Q: [question text]
|
|
114
|
+
A: [founder's answer]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Always ask fit questions even when FOUNDER.md already exists (returning user). The session covers founder-market fit for the current idea.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Profile Update Rules
|
|
122
|
+
|
|
123
|
+
After fit Q&A, review answers for NEW persistent attributes about the founder -- information about background, expertise, network, capabilities, or motivation relevant across multiple evaluation runs.
|
|
124
|
+
|
|
125
|
+
### What qualifies as persistent
|
|
126
|
+
|
|
127
|
+
- Background, expertise, network, capabilities, motivation details
|
|
128
|
+
- NOT idea-specific observations (e.g., "I think this market is growing")
|
|
129
|
+
|
|
130
|
+
### Update mechanics
|
|
131
|
+
|
|
132
|
+
1. Present relevant answers to the founder using AskUserQuestion with multiSelect
|
|
133
|
+
2. Each option shows a summary and which FOUNDER.md section it would update
|
|
134
|
+
3. Follow AskUserQuestion 2-4 option limit; chunk if more than 4 qualify
|
|
135
|
+
4. If founder selects answers to persist: read current FOUNDER.md, **append** to relevant section (never replace), write updated file
|
|
136
|
+
5. Update the "Last updated" date in the footer
|
|
137
|
+
6. If founder selects nothing or no answers qualify, skip entirely
|
|
138
|
+
|
|
139
|
+
### Old-Format Section Name Mapping
|
|
140
|
+
|
|
141
|
+
If an existing FOUNDER.md uses old-format section headers, map them:
|
|
142
|
+
|
|
143
|
+
| Old Section Name | New Section Name |
|
|
144
|
+
|---|---|
|
|
145
|
+
| Background | Relevant Experience |
|
|
146
|
+
| Domain Expertise | Expertise & Domain Knowledge |
|
|
147
|
+
| Network & Resources | Network & Market Access |
|
|
148
|
+
| Technical Capabilities | Build Capabilities |
|
|
149
|
+
| Passion & Motivation | Drive & Commitment |
|
|
150
|
+
|
|
151
|
+
If headers are unrecognized, try keyword proximity matching. If completely unparseable, display raw content to the user with a warning.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Section Picker Flow
|
|
156
|
+
|
|
157
|
+
For standalone profile editing (outside of an evaluation run), use a two-call section picker:
|
|
158
|
+
|
|
159
|
+
### First AskUserQuestion call (multiSelect: true)
|
|
160
|
+
|
|
161
|
+
Question: "Which sections of your founder profile would you like to update?"
|
|
162
|
+
|
|
163
|
+
Options (4 items):
|
|
164
|
+
1. label: "No changes needed", description: "Looks good — exit without editing"
|
|
165
|
+
2. label: "Expertise & Domain Knowledge", description: "Your domain expertise, industry knowledge, and unique insights"
|
|
166
|
+
3. label: "Relevant Experience", description: "Professional background, roles, and achievements"
|
|
167
|
+
4. label: "Network & Market Access", description: "Connections, customer access, and resources"
|
|
168
|
+
|
|
169
|
+
If "No changes needed" is selected: exit without editing.
|
|
170
|
+
|
|
171
|
+
### Second AskUserQuestion call (multiSelect: true)
|
|
172
|
+
|
|
173
|
+
Question: "Any other sections to update?"
|
|
174
|
+
|
|
175
|
+
Options (2 items):
|
|
176
|
+
1. label: "Build Capabilities", description: "Technical skills, team, and ability to ship"
|
|
177
|
+
2. label: "Drive & Commitment", description: "Motivation, personal connection, and commitment level"
|
|
178
|
+
|
|
179
|
+
### Conversational Editing
|
|
180
|
+
|
|
181
|
+
For each selected section, in selection order:
|
|
182
|
+
1. Show current entries from that section (or "This section is currently empty" if new)
|
|
183
|
+
2. Ask: "Here are your current entries for [section name]. What would you like to add, change, or remove?"
|
|
184
|
+
3. Process response conversationally -- add, change, or remove tagged list entries using natural language understanding
|
|
185
|
+
|
|
186
|
+
After all sections processed, write updated FOUNDER.md and update the "Last updated" date.
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ti-html-report
|
|
3
|
+
description: Self-contained HTML report template with CSS styles and generation rules for TweakIdea evaluation reports
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Reference data for generating styled HTML evaluation reports. The orchestrator (`evaluate.md`) uses this skill when HTML_REQUESTED is true to produce `report.html` in the run directory.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Data Extraction Rules
|
|
12
|
+
|
|
13
|
+
The orchestrator reads FINAL_REPORT (the merger's markdown output) semantically (as structured markdown, not via regex) and extracts:
|
|
14
|
+
|
|
15
|
+
- **Verdict**: first line -- indicator, label, and weighted score (split on `|`)
|
|
16
|
+
- **Dealbreakers**: lines starting with `> DEALBREAKER:` (may be zero)
|
|
17
|
+
- **Scorecard rows**: the 14 data rows from the markdown table (after the header row `| Dimension | Score | ...`)
|
|
18
|
+
- **Evidence quality**: the `**Evidence Quality:**` line with percentages
|
|
19
|
+
- **Assumption impacts**: bullet items under `**Assumption Impact:**` starting with `- *`
|
|
20
|
+
- **Strengths**: numbered items under `### Top 3 Strengths`
|
|
21
|
+
- **Weaknesses**: numbered items under `### Top 3 Weaknesses`
|
|
22
|
+
- **Next steps**: numbered items under `### Next Steps`
|
|
23
|
+
|
|
24
|
+
Also include IDEA_TEXT as the idea summary section, and if RESEARCH_AVAILABLE is true, include the research brief highlights (Competitors, Market Data, User Evidence sections from RESEARCH_RESULTS).
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## HTML Template
|
|
29
|
+
|
|
30
|
+
Generate this EXACT structure, filling in data values only:
|
|
31
|
+
|
|
32
|
+
```html
|
|
33
|
+
<!DOCTYPE html>
|
|
34
|
+
<html lang="en">
|
|
35
|
+
<head>
|
|
36
|
+
<meta charset="UTF-8">
|
|
37
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
38
|
+
<title>TweakIdea Evaluation Report</title>
|
|
39
|
+
<style>
|
|
40
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
41
|
+
body {
|
|
42
|
+
font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
43
|
+
line-height: 1.65; color: #1a1a2e; background-color: #f8f9fc; padding: 2.5rem 1.5rem;
|
|
44
|
+
letter-spacing: -0.01em;
|
|
45
|
+
}
|
|
46
|
+
.container { max-width: 940px; margin: 0 auto; }
|
|
47
|
+
h1 { font-size: 1.6rem; font-weight: 800; letter-spacing: -0.02em; color: #111827; }
|
|
48
|
+
h2 { font-size: 1.2rem; font-weight: 700; margin-bottom: 0.85rem; color: #1f2937; letter-spacing: -0.01em; }
|
|
49
|
+
|
|
50
|
+
/* Verdict banner */
|
|
51
|
+
.verdict { padding: 1.5rem 1.75rem; border-radius: 10px; margin-bottom: 1.75rem; }
|
|
52
|
+
.verdict-go { background-color: #dcfce7; border-left: 4px solid #22c55e; }
|
|
53
|
+
.verdict-pivot { background-color: #fef9c3; border-left: 4px solid #eab308; }
|
|
54
|
+
.verdict-stop { background-color: #fee2e2; border-left: 4px solid #ef4444; }
|
|
55
|
+
.verdict-label { font-size: 1.25rem; font-weight: 700; }
|
|
56
|
+
.verdict-score { font-size: 1rem; color: #4b5563; margin-top: 0.25rem; }
|
|
57
|
+
|
|
58
|
+
/* Cards */
|
|
59
|
+
.card { background: #fff; border-radius: 10px; padding: 1.5rem; box-shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.06); margin-bottom: 1.25rem; }
|
|
60
|
+
|
|
61
|
+
/* Dealbreaker */
|
|
62
|
+
.dealbreaker { background-color: #fef2f2; border-left: 4px solid #ef4444; padding: 1rem 1.25rem; border-radius: 8px; margin-bottom: 1rem; }
|
|
63
|
+
.dealbreaker-title { color: #dc2626; font-weight: 700; }
|
|
64
|
+
|
|
65
|
+
/* Scorecard table */
|
|
66
|
+
.scorecard-table { width: 100%; border-collapse: collapse; font-size: 0.92rem; }
|
|
67
|
+
.scorecard-table th { text-align: left; padding: 0.65rem 0.75rem; border-bottom: 2px solid #d1d5db; color: #6b7280; font-weight: 700; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.05em; }
|
|
68
|
+
.scorecard-table td { padding: 0.65rem 0.75rem; border-bottom: 1px solid #f3f4f6; vertical-align: middle; }
|
|
69
|
+
.scorecard-table tr:last-child td { border-bottom: none; }
|
|
70
|
+
|
|
71
|
+
/* Score explanation (below each scorecard row) */
|
|
72
|
+
.score-explanation td {
|
|
73
|
+
padding: 0.25rem 0.75rem 0.75rem 0.75rem;
|
|
74
|
+
border-bottom: 1px solid #e5e7eb;
|
|
75
|
+
font-size: 0.85rem;
|
|
76
|
+
color: #4b5563;
|
|
77
|
+
line-height: 1.55;
|
|
78
|
+
font-style: italic;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Radar chart */
|
|
82
|
+
.radar-chart { text-align: center; padding: 1rem 0; }
|
|
83
|
+
.radar-chart svg { max-width: 100%; height: auto; }
|
|
84
|
+
|
|
85
|
+
/* Score badges */
|
|
86
|
+
.score-badge { display: inline-block; width: 2.25rem; height: 2.25rem; line-height: 2.25rem; text-align: center; border-radius: 6px; font-weight: 700; font-size: 0.85rem; color: #1a1a1a; }
|
|
87
|
+
.score-5 { background-color: #22c55e; }
|
|
88
|
+
.score-4 { background-color: #14b8a6; }
|
|
89
|
+
.score-3 { background-color: #eab308; }
|
|
90
|
+
.score-2 { background-color: #f97316; }
|
|
91
|
+
.score-1 { background-color: #ef4444; }
|
|
92
|
+
|
|
93
|
+
/* Progress bars */
|
|
94
|
+
.progress-container { background-color: #e5e7eb; border-radius: 9999px; height: 10px; width: 100%; overflow: hidden; display: inline-block; vertical-align: middle; }
|
|
95
|
+
.progress-bar { height: 100%; border-radius: 9999px; }
|
|
96
|
+
|
|
97
|
+
/* Evidence tier badges */
|
|
98
|
+
.tier-badge { display: inline-block; padding: 2px 7px; border-radius: 9999px; font-size: 0.7rem; font-weight: 600; margin-right: 3px; }
|
|
99
|
+
.tier-verified { background-color: #22c55e; color: #1a1a1a; }
|
|
100
|
+
.tier-research { background-color: #3b82f6; color: #ffffff; }
|
|
101
|
+
.tier-founder { background-color: #eab308; color: #1a1a1a; }
|
|
102
|
+
.tier-assumed { background-color: #9ca3af; color: #1a1a1a; }
|
|
103
|
+
|
|
104
|
+
/* Evidence quality bar */
|
|
105
|
+
.evidence-bar { display: flex; height: 24px; border-radius: 6px; overflow: hidden; margin: 0.5rem 0; font-size: 0.75rem; font-weight: 600; }
|
|
106
|
+
.evidence-bar > div { display: flex; align-items: center; justify-content: center; color: #1a1a1a; min-width: 2rem; }
|
|
107
|
+
.evidence-bar .ev-verified { background-color: #22c55e; }
|
|
108
|
+
.evidence-bar .ev-research { background-color: #3b82f6; color: #fff; }
|
|
109
|
+
.evidence-bar .ev-founder { background-color: #eab308; }
|
|
110
|
+
.evidence-bar .ev-assumed { background-color: #9ca3af; }
|
|
111
|
+
|
|
112
|
+
/* Two-column layout */
|
|
113
|
+
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
|
|
114
|
+
|
|
115
|
+
/* Lists */
|
|
116
|
+
.item-list { list-style: none; padding: 0; }
|
|
117
|
+
.item-list li { padding: 0.5rem 0; border-bottom: 1px solid #f3f4f6; }
|
|
118
|
+
.item-list li:last-child { border-bottom: none; }
|
|
119
|
+
.dim-tag { display: inline-block; background: #e5e7eb; color: #374151; padding: 1px 6px; border-radius: 4px; font-size: 0.75rem; font-weight: 500; }
|
|
120
|
+
|
|
121
|
+
/* Header and footer */
|
|
122
|
+
header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; padding-bottom: 1.25rem; border-bottom: 2px solid #e5e7eb; }
|
|
123
|
+
footer { text-align: center; color: #9ca3af; font-size: 0.78rem; margin-top: 2.5rem; padding-top: 1.25rem; border-top: 2px solid #e5e7eb; }
|
|
124
|
+
|
|
125
|
+
/* Print */
|
|
126
|
+
@media print {
|
|
127
|
+
body { background: #fff; padding: 0; }
|
|
128
|
+
.card { box-shadow: none; border: 1px solid #e5e7eb; }
|
|
129
|
+
.verdict, .score-badge, .tier-badge, .evidence-bar > div, .dealbreaker {
|
|
130
|
+
-webkit-print-color-adjust: exact; print-color-adjust: exact;
|
|
131
|
+
}
|
|
132
|
+
.card, .scorecard-table tr { break-inside: avoid; }
|
|
133
|
+
}
|
|
134
|
+
@media (max-width: 640px) {
|
|
135
|
+
.two-col { grid-template-columns: 1fr; }
|
|
136
|
+
}
|
|
137
|
+
</style>
|
|
138
|
+
</head>
|
|
139
|
+
<body>
|
|
140
|
+
<div class="container">
|
|
141
|
+
<header>
|
|
142
|
+
<h1>TweakIdea Evaluation</h1>
|
|
143
|
+
<span style="color:#6b7280;font-size:0.85rem;">{TIMESTAMP}</span>
|
|
144
|
+
</header>
|
|
145
|
+
|
|
146
|
+
<!-- VERDICT BANNER: use class verdict-go (>=4.0), verdict-pivot (3.0-3.99), verdict-stop (2.0-2.99 or <2.0) -->
|
|
147
|
+
<div class="verdict {verdict-class}">
|
|
148
|
+
<div class="verdict-label">{verdict indicator} {verdict label}</div>
|
|
149
|
+
<div class="verdict-score">Weighted Score: {X.X}/5.0 | Potential: {Y.Y}/5.0</div>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<!-- DEALBREAKERS: only include this section if dealbreakers exist. One div per dealbreaker. -->
|
|
153
|
+
<div class="dealbreaker">
|
|
154
|
+
<span class="dealbreaker-title">DEALBREAKER: {Dimension Name}</span> scored 1/5 -- {brief explanation}
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<!-- IDEA SUMMARY -->
|
|
158
|
+
<div class="card">
|
|
159
|
+
<h2>Idea</h2>
|
|
160
|
+
<p>{IDEA_TEXT -- the full idea as provided by the founder}</p>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<!-- RADAR CHART: inline SVG showing 14 dimension scores -->
|
|
164
|
+
<div class="card">
|
|
165
|
+
<h2>Dimension Overview</h2>
|
|
166
|
+
<div class="radar-chart">
|
|
167
|
+
<svg viewBox="0 0 500 440" xmlns="http://www.w3.org/2000/svg">
|
|
168
|
+
<!-- Grid: 5 concentric polygons at r=30,60,90,120,150 from center (250,210) -->
|
|
169
|
+
<!-- Computed via: for each level L (1-5), for each dim i (0-13): angle = i*(360/14)-90 deg, x = 250 + L*30*cos(angle_rad), y = 210 + L*30*sin(angle_rad) -->
|
|
170
|
+
<g class="grid" stroke="#e5e7eb" fill="none" stroke-width="1">
|
|
171
|
+
<polygon points="250.0,180.0 263.0,183.0 273.5,191.3 279.2,203.3 279.2,216.7 273.5,228.7 263.0,237.0 250.0,240.0 237.0,237.0 226.5,228.7 220.8,216.7 220.8,203.3 226.5,191.3 237.0,183.0"/>
|
|
172
|
+
<polygon points="250.0,150.0 276.0,155.9 296.9,172.6 308.5,196.6 308.5,223.4 296.9,247.4 276.0,264.1 250.0,270.0 224.0,264.1 203.1,247.4 191.5,223.4 191.5,196.6 203.1,172.6 224.0,155.9"/>
|
|
173
|
+
<polygon points="250.0,120.0 289.0,128.9 320.4,153.9 337.7,190.0 337.7,230.0 320.4,266.1 289.0,291.1 250.0,300.0 211.0,291.1 179.6,266.1 162.3,230.0 162.3,190.0 179.6,153.9 211.0,128.9"/>
|
|
174
|
+
<polygon points="250.0,90.0 302.1,101.9 343.8,135.2 367.0,183.3 367.0,236.7 343.8,284.8 302.1,318.1 250.0,330.0 197.9,318.1 156.2,284.8 133.0,236.7 133.0,183.3 156.2,135.2 197.9,101.9"/>
|
|
175
|
+
<polygon points="250.0,60.0 315.1,74.9 367.3,116.5 396.2,176.6 396.2,243.4 367.3,303.5 315.1,345.1 250.0,360.0 184.9,345.1 132.7,303.5 103.8,243.4 103.8,176.6 132.7,116.5 184.9,74.9"/>
|
|
176
|
+
</g>
|
|
177
|
+
|
|
178
|
+
<!-- Spoke lines from center (250,210) to outer grid for each dimension -->
|
|
179
|
+
<g class="spokes" stroke="#e5e7eb" stroke-width="0.5">
|
|
180
|
+
<line x1="250" y1="210" x2="250.0" y2="60.0"/>
|
|
181
|
+
<line x1="250" y1="210" x2="315.1" y2="74.9"/>
|
|
182
|
+
<line x1="250" y1="210" x2="367.3" y2="116.5"/>
|
|
183
|
+
<line x1="250" y1="210" x2="396.2" y2="176.6"/>
|
|
184
|
+
<line x1="250" y1="210" x2="396.2" y2="243.4"/>
|
|
185
|
+
<line x1="250" y1="210" x2="367.3" y2="303.5"/>
|
|
186
|
+
<line x1="250" y1="210" x2="315.1" y2="345.1"/>
|
|
187
|
+
<line x1="250" y1="210" x2="250.0" y2="360.0"/>
|
|
188
|
+
<line x1="250" y1="210" x2="184.9" y2="345.1"/>
|
|
189
|
+
<line x1="250" y1="210" x2="132.7" y2="303.5"/>
|
|
190
|
+
<line x1="250" y1="210" x2="103.8" y2="243.4"/>
|
|
191
|
+
<line x1="250" y1="210" x2="103.8" y2="176.6"/>
|
|
192
|
+
<line x1="250" y1="210" x2="132.7" y2="116.5"/>
|
|
193
|
+
<line x1="250" y1="210" x2="184.9" y2="74.9"/>
|
|
194
|
+
</g>
|
|
195
|
+
|
|
196
|
+
<!-- Score polygon: filled area showing actual scores -->
|
|
197
|
+
<!-- For each dim i (0-13): angle = i*(360/14)-90 deg, score_r = (score/5)*150, x = 250 + score_r*cos(angle_rad), y = 210 + score_r*sin(angle_rad) -->
|
|
198
|
+
<!-- Dimension order: 0=Pain Intensity, 1=Willingness to Pay, 2=Solution Gap, 3=Founder-Market Fit, 4=Urgency, 5=Frequency, 6=Market Size, 7=Defensibility, 8=Market Growth, 9=Scalability, 10=Clarity of Target Customer, 11=Behavior Change Required, 12=Mandatory Nature, 13=Incumbent Indifference -->
|
|
199
|
+
<polygon points="{x_0},{y_0} {x_1},{y_1} {x_2},{y_2} {x_3},{y_3} {x_4},{y_4} {x_5},{y_5} {x_6},{y_6} {x_7},{y_7} {x_8},{y_8} {x_9},{y_9} {x_10},{y_10} {x_11},{y_11} {x_12},{y_12} {x_13},{y_13}" fill="rgba(59,130,246,0.2)" stroke="#3b82f6" stroke-width="2"/>
|
|
200
|
+
|
|
201
|
+
<!-- Dimension labels at radius 175 from center -->
|
|
202
|
+
<g class="labels" font-size="9" fill="#4b5563" font-family="system-ui, sans-serif">
|
|
203
|
+
<text x="250.0" y="35.0" text-anchor="middle" dy="0.35em">Pain Intensity</text>
|
|
204
|
+
<text x="325.9" y="52.3" text-anchor="middle" dy="0.35em">Willingness to Pay</text>
|
|
205
|
+
<text x="386.8" y="100.9" text-anchor="start" dy="0.35em">Solution Gap</text>
|
|
206
|
+
<text x="420.6" y="171.1" text-anchor="start" dy="0.35em">Founder Fit</text>
|
|
207
|
+
<text x="420.6" y="248.9" text-anchor="start" dy="0.35em">Urgency</text>
|
|
208
|
+
<text x="386.8" y="319.1" text-anchor="start" dy="0.35em">Frequency</text>
|
|
209
|
+
<text x="325.9" y="367.7" text-anchor="middle" dy="0.35em">Market Size</text>
|
|
210
|
+
<text x="250.0" y="385.0" text-anchor="middle" dy="0.35em">Defensibility</text>
|
|
211
|
+
<text x="174.1" y="367.7" text-anchor="middle" dy="0.35em">Market Growth</text>
|
|
212
|
+
<text x="113.2" y="319.1" text-anchor="end" dy="0.35em">Scalability</text>
|
|
213
|
+
<text x="79.4" y="248.9" text-anchor="end" dy="0.35em">Target Customer</text>
|
|
214
|
+
<text x="79.4" y="171.1" text-anchor="end" dy="0.35em">Behavior Change</text>
|
|
215
|
+
<text x="113.2" y="100.9" text-anchor="end" dy="0.35em">Mandatory Nature</text>
|
|
216
|
+
<text x="174.1" y="52.3" text-anchor="middle" dy="0.35em">Incumbent</text>
|
|
217
|
+
</g>
|
|
218
|
+
|
|
219
|
+
<!-- Score value dots at each polygon vertex -->
|
|
220
|
+
<g class="dots" fill="#3b82f6">
|
|
221
|
+
<circle cx="{x_0}" cy="{y_0}" r="4"/>
|
|
222
|
+
<circle cx="{x_1}" cy="{y_1}" r="4"/>
|
|
223
|
+
<circle cx="{x_2}" cy="{y_2}" r="4"/>
|
|
224
|
+
<circle cx="{x_3}" cy="{y_3}" r="4"/>
|
|
225
|
+
<circle cx="{x_4}" cy="{y_4}" r="4"/>
|
|
226
|
+
<circle cx="{x_5}" cy="{y_5}" r="4"/>
|
|
227
|
+
<circle cx="{x_6}" cy="{y_6}" r="4"/>
|
|
228
|
+
<circle cx="{x_7}" cy="{y_7}" r="4"/>
|
|
229
|
+
<circle cx="{x_8}" cy="{y_8}" r="4"/>
|
|
230
|
+
<circle cx="{x_9}" cy="{y_9}" r="4"/>
|
|
231
|
+
<circle cx="{x_10}" cy="{y_10}" r="4"/>
|
|
232
|
+
<circle cx="{x_11}" cy="{y_11}" r="4"/>
|
|
233
|
+
<circle cx="{x_12}" cy="{y_12}" r="4"/>
|
|
234
|
+
<circle cx="{x_13}" cy="{y_13}" r="4"/>
|
|
235
|
+
</g>
|
|
236
|
+
</svg>
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
|
|
240
|
+
<!-- RESEARCH HIGHLIGHTS: only include if RESEARCH_AVAILABLE is true. Omit entire section if false. -->
|
|
241
|
+
<div class="card">
|
|
242
|
+
<h2>Research Highlights</h2>
|
|
243
|
+
<p>{Summarize the key findings from the research brief -- Competitors, Market Data, and User Evidence sections. Keep to 3-5 bullet points or a brief paragraph highlighting the most important data points.}</p>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<!-- SCORECARD TABLE: 14 rows, one per dimension, ordered by weight descending -->
|
|
247
|
+
<div class="card" style="overflow-x:auto;">
|
|
248
|
+
<h2>Scorecard</h2>
|
|
249
|
+
<table class="scorecard-table">
|
|
250
|
+
<thead>
|
|
251
|
+
<tr>
|
|
252
|
+
<th>Dimension</th>
|
|
253
|
+
<th>Score</th>
|
|
254
|
+
<th style="width:120px;"></th>
|
|
255
|
+
<th>Potential</th>
|
|
256
|
+
<th>Evidence</th>
|
|
257
|
+
<th>Key Finding</th>
|
|
258
|
+
</tr>
|
|
259
|
+
</thead>
|
|
260
|
+
<tbody>
|
|
261
|
+
<!-- Repeat for each of 14 dimensions. Score badge uses class score-{N} where N is the integer score (1-5). Progress bar width = score/5 * 100%. Evidence tier badges use the compact notation from the merger. After each dimension row, include a score-explanation row. -->
|
|
262
|
+
<tr>
|
|
263
|
+
<td>{Dimension name}</td>
|
|
264
|
+
<td><span class="score-badge score-{N}">{N}</span></td>
|
|
265
|
+
<td><div class="progress-container"><div class="progress-bar score-{N}" style="width:{N*20}%"></div></div></td>
|
|
266
|
+
<td>{potential}/5</td>
|
|
267
|
+
<td>
|
|
268
|
+
<!-- If tier data available: render badge pills. If "(tier data unavailable)": show that text. -->
|
|
269
|
+
<span class="tier-badge tier-verified">{count}V</span>
|
|
270
|
+
<span class="tier-badge tier-research">{count}R</span>
|
|
271
|
+
<span class="tier-badge tier-founder">{count}F</span>
|
|
272
|
+
<span class="tier-badge tier-assumed">{count}A</span>
|
|
273
|
+
</td>
|
|
274
|
+
<td>{Key finding text}</td>
|
|
275
|
+
</tr>
|
|
276
|
+
<tr class="score-explanation">
|
|
277
|
+
<td colspan="6">{2-3 sentence score explanation from merger blockquote}</td>
|
|
278
|
+
</tr>
|
|
279
|
+
</tbody>
|
|
280
|
+
</table>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
<!-- EVIDENCE QUALITY: stacked percentage bar -->
|
|
284
|
+
<div class="card">
|
|
285
|
+
<h2>Evidence Quality</h2>
|
|
286
|
+
<div class="evidence-bar">
|
|
287
|
+
<div class="ev-verified" style="width:{X}%">{X}% V</div>
|
|
288
|
+
<div class="ev-research" style="width:{Y}%">{Y}% R</div>
|
|
289
|
+
<div class="ev-founder" style="width:{Z}%">{Z}% F</div>
|
|
290
|
+
<div class="ev-assumed" style="width:{W}%">{W}% A</div>
|
|
291
|
+
</div>
|
|
292
|
+
<div style="font-size:0.75rem;color:#6b7280;margin-top:0.25rem;">V=Verified R=Research-Backed F=Founder-Asserted A=Assumed</div>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
<!-- ASSUMPTION IMPACT: only include if assumption impact items exist -->
|
|
296
|
+
<div class="card">
|
|
297
|
+
<h2>Assumption Impact</h2>
|
|
298
|
+
<ul class="item-list">
|
|
299
|
+
<li><span class="dim-tag">{Dimension}</span> If {unconfirmed hypothesis} is confirmed, score rises from {X} to {Y} (+{impact} on total)</li>
|
|
300
|
+
</ul>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<!-- STRENGTHS & WEAKNESSES: two-column layout -->
|
|
304
|
+
<div class="two-col">
|
|
305
|
+
<div class="card">
|
|
306
|
+
<h2>Top 3 Strengths</h2>
|
|
307
|
+
<ol>
|
|
308
|
+
<li><strong>{Dimension}</strong> ({X}/5): {Why this is strong}</li>
|
|
309
|
+
</ol>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="card">
|
|
312
|
+
<h2>Top 3 Weaknesses</h2>
|
|
313
|
+
<ol>
|
|
314
|
+
<li><strong>{Dimension}</strong> ({X}/5): {Why this is weak}</li>
|
|
315
|
+
</ol>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
|
|
319
|
+
<!-- NEXT STEPS -->
|
|
320
|
+
<div class="card">
|
|
321
|
+
<h2>Next Steps</h2>
|
|
322
|
+
<ol class="item-list">
|
|
323
|
+
<li>{Concrete validation task} -- <span class="dim-tag">{Dimension}</span> {current}/5 -> {potential}/5 (+{uplift} on total)</li>
|
|
324
|
+
</ol>
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<footer>
|
|
328
|
+
Generated by TweakIdea · {TIMESTAMP}
|
|
329
|
+
</footer>
|
|
330
|
+
</div>
|
|
331
|
+
</body>
|
|
332
|
+
</html>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Generation Rules
|
|
338
|
+
|
|
339
|
+
- Copy the HTML template structure EXACTLY. Do not invent new CSS classes, sections, or layout elements.
|
|
340
|
+
- Fill in `{placeholder}` values with actual data extracted from FINAL_REPORT, IDEA_TEXT, and RESEARCH_RESULTS.
|
|
341
|
+
- For each of the 14 scorecard rows: use the integer score to select the CSS class (`score-1` through `score-5`) and compute the progress bar width percentage (score * 20).
|
|
342
|
+
- For the verdict banner: map the verdict prefix to the CSS class: label starts with "GO" = `verdict-go`, label starts with "PIVOT" = `verdict-pivot`, label starts with "STOP" = `verdict-stop`.
|
|
343
|
+
- If zero dealbreakers exist, omit the dealbreaker div(s) entirely.
|
|
344
|
+
- If RESEARCH_AVAILABLE is false, omit the "Research Highlights" card entirely.
|
|
345
|
+
- If a dimension shows `(tier data unavailable)` in the Evidence column instead of tier counts, render that text plain (no badge pills).
|
|
346
|
+
- If a dimension shows `--` in the Evidence column (e.g., Scalability with no compound tags), render "(tier data unavailable)".
|
|
347
|
+
- If no assumption impact items exist, omit the "Assumption Impact" card entirely.
|
|
348
|
+
- The `{TIMESTAMP}` in the header and footer uses the same TIMESTAMP generated in Stage 6 Step 1.
|
|
349
|
+
- All text content must be HTML-escaped (& -> `&`, < -> `<`, > -> `>`) to prevent broken HTML from idea text containing special characters.
|
|
350
|
+
- For each scorecard dimension, extract the blockquote explanation line (starting with `>`) that follows the table row in FINAL_REPORT. Strip the `>` prefix and the bold dimension name prefix (e.g., `> **Pain Intensity:** ` becomes just the explanation text). Place the stripped text in the `<tr class="score-explanation">` row's `<td colspan="6">`.
|
|
351
|
+
- **Radar chart generation:** Compute SVG coordinates using the formula: center=(250,210), max_radius=150. For dimension index i (0-based, 0 through 13), angle_i = i * (360/14) - 90 degrees (so index 0 = Pain Intensity starts at top). Convert to radians: radian_i = angle_i * PI / 180. Score vertex: x = 250 + (score/5)*150*cos(radian_i), y = 210 + (score/5)*150*sin(radian_i). Grid polygon vertices use the same angles but with fixed radii (30, 60, 90, 120, 150). Dimension labels use radius 175. Use the Dimension Registry index order (01 through 14) for consistent spoke ordering. Abbreviate long dimension names: "Founder Fit" for "Founder-Market Fit", "Target Customer" for "Clarity of Target Customer", "Behavior Change" for "Behavior Change Required", "Incumbent" for "Incumbent Indifference".
|
|
352
|
+
- **Radar chart label positioning:** For labels at angles -45 to 45 degrees (right side), use text-anchor="start". For 135 to 225 degrees (left side), use text-anchor="end". For all others (top and bottom), use text-anchor="middle". Apply a dy="0.35em" baseline shift for vertical centering.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Startup Problem Evaluation Dimensions
|
|
2
|
+
|
|
3
|
+
> Per-dimension signal tables and rubrics are in the `dimensions/` subdirectory. Each evaluator agent receives its assigned dimension file via prompt injection.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Scoring Algorithm
|
|
8
|
+
|
|
9
|
+
Score = highest level where ALL criteria pass. If any criterion at a level fails, score drops to the previous level.
|
|
10
|
+
|
|
11
|
+
For criteria depending on an [UNCONFIRMED] hypothesis: mark as CONDITIONAL. CONDITIONAL criteria are treated as FAIL for actual score, PASS for potential score.
|
|
12
|
+
|
|
13
|
+
## Evidence Tier Classification
|
|
14
|
+
|
|
15
|
+
| Condition | Tier |
|
|
16
|
+
|-----------|------|
|
|
17
|
+
| Founder confirmed AND research supports | Verified |
|
|
18
|
+
| Research supports, founder did not confirm | Research-Backed |
|
|
19
|
+
| Founder confirmed, no research support | Founder-Asserted |
|
|
20
|
+
| Inferred from reasoning, no direct support | Assumed |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Problem Type Matrix
|
|
25
|
+
|
|
26
|
+
Categorize problems by intensity vs. breadth:
|
|
27
|
+
|
|
28
|
+
| Type | Description | Strategy |
|
|
29
|
+
|------|-------------|----------|
|
|
30
|
+
| **Type 1**: Many people, intense pain | Mass-market painkiller | Scale fast, network effects |
|
|
31
|
+
| **Type 2**: Many people, mild pain | Mass-market vitamin | Elevate urgency, make seamless |
|
|
32
|
+
| **Type 3**: Few people, intense pain | Niche painkiller | Deep value, high price, strong loyalty |
|
|
33
|
+
| **Type 4**: Few people, mild pain | Avoid | Hard to monetize, hard to find customers |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Dimension Registry
|
|
38
|
+
|
|
39
|
+
> **Canonical source of truth.** All dimension metadata lives in this table. Agents receive registry values via orchestrator prompt injection at spawn time (D-06). Do not duplicate this data elsewhere.
|
|
40
|
+
|
|
41
|
+
| # | Name | Weight | File Slug | Output Filename | Research Cluster | Context Variant |
|
|
42
|
+
|---|------|--------|-----------|-----------------|------------------|-----------------|
|
|
43
|
+
| 01 | Pain Intensity | 12% | pain-intensity | 01-pain-intensity.md | USER_CLUSTER | EVALUATION_CONTEXT |
|
|
44
|
+
| 02 | Willingness to Pay | 12% | willingness-to-pay | 02-willingness-to-pay.md | USER_CLUSTER | EVALUATION_CONTEXT |
|
|
45
|
+
| 03 | Solution Gap | 12% | solution-gap | 03-solution-gap.md | COMPETITIVE_CLUSTER | EVALUATION_CONTEXT |
|
|
46
|
+
| 04 | Founder-Market Fit | 12% | founder-market-fit | 04-founder-market-fit.md | — | FOUNDER_EVALUATION_CONTEXT |
|
|
47
|
+
| 05 | Urgency | 8% | urgency | 05-urgency.md | USER_CLUSTER | EVALUATION_CONTEXT |
|
|
48
|
+
| 06 | Frequency | 8% | frequency | 06-frequency.md | — | EVALUATION_CONTEXT |
|
|
49
|
+
| 07 | Market Size | 8% | market-size | 07-market-size.md | MARKET_CLUSTER | EVALUATION_CONTEXT |
|
|
50
|
+
| 08 | Defensibility | 8% | defensibility | 08-defensibility.md | COMPETITIVE_CLUSTER | EVALUATION_CONTEXT |
|
|
51
|
+
| 09 | Market Growth | 4% | market-growth | 09-market-growth.md | MARKET_CLUSTER | EVALUATION_CONTEXT |
|
|
52
|
+
| 10 | Scalability | 4% | scalability | 10-scalability.md | — | EVALUATION_CONTEXT |
|
|
53
|
+
| 11 | Clarity of Target Customer | 4% | clarity-of-target-customer | 11-clarity-of-target-customer.md | — | EVALUATION_CONTEXT |
|
|
54
|
+
| 12 | Behavior Change Required | 4% | behavior-change-required | 12-behavior-change-required.md | — | EVALUATION_CONTEXT |
|
|
55
|
+
| 13 | Mandatory Nature | 2% | mandatory-nature | 13-mandatory-nature.md | — | EVALUATION_CONTEXT |
|
|
56
|
+
| 14 | Incumbent Indifference | 2% | incumbent-indifference | 14-incumbent-indifference.md | COMPETITIVE_CLUSTER | EVALUATION_CONTEXT |
|
|
57
|
+
|
|
58
|
+
## Interpretation
|
|
59
|
+
|
|
60
|
+
- 4.0-5.0: GO -- Strong problem, worth pursuing
|
|
61
|
+
- 3.0-3.99: PIVOT -- Promising, address weak areas
|
|
62
|
+
- 2.0-2.99: STOP -- Significant concerns, reconsider
|
|
63
|
+
- 1.0-1.99: STOP -- Likely not worth pursuing
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ti-scoring
|
|
3
|
+
description: TweakIdea 14-dimension startup evaluation framework with scoring rubrics and signal tables
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Per-dimension signal tables and rubrics are in the `dimensions/` subdirectory. The scoring algorithm, evidence tiers, weights, and verdict thresholds are in `EVALUATION.md`.
|