linersh 0.5.7 → 1.0.1

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 (97) hide show
  1. package/README.md +84 -159
  2. package/bin/liner.js +89 -44
  3. package/cli-update-docs/README.md +6 -6
  4. package/cli-update-docs/SKILL.md +72 -37
  5. package/cli-update-docs/quality-check-tests.md +256 -8
  6. package/cli-update-docs/source-finding-tactics.md +140 -3
  7. package/cli-update-docs/source-quality-hierarchy.md +83 -0
  8. package/cli-update-docs/synthesis-guidance.md +19 -5
  9. package/dist/agents/artifact-validation.js +440 -0
  10. package/dist/agents/artifact-validation.js.map +1 -0
  11. package/dist/agents/candidate-longlist.js +100 -0
  12. package/dist/agents/candidate-longlist.js.map +1 -0
  13. package/dist/agents/detect.js +3 -2
  14. package/dist/agents/detect.js.map +1 -1
  15. package/dist/agents/evaluation-assembly.js +270 -0
  16. package/dist/agents/evaluation-assembly.js.map +1 -0
  17. package/dist/agents/headless-runner.js +227 -0
  18. package/dist/agents/headless-runner.js.map +1 -0
  19. package/dist/agents/jtbd-clarify.js +42 -41
  20. package/dist/agents/jtbd-clarify.js.map +1 -1
  21. package/dist/agents/models.js +6 -7
  22. package/dist/agents/models.js.map +1 -1
  23. package/dist/agents/prompts.js +220 -20
  24. package/dist/agents/prompts.js.map +1 -1
  25. package/dist/agents/runner.js +462 -21
  26. package/dist/agents/runner.js.map +1 -1
  27. package/dist/phases.js +13 -13
  28. package/dist/phases.js.map +1 -1
  29. package/dist/source-inbox.js +297 -0
  30. package/dist/source-inbox.js.map +1 -0
  31. package/dist/version.js +3 -9
  32. package/dist/version.js.map +1 -1
  33. package/dist/yaml-io.js +42 -11
  34. package/dist/yaml-io.js.map +1 -1
  35. package/package.json +26 -23
  36. package/cli-update-docs/ABOUT.md +0 -69
  37. package/cli-update-docs/AI-HANDOFF.md +0 -241
  38. package/cli-update-docs/CURATION.md +0 -261
  39. package/cli-update-docs/JOB-STORY-MIGRATION.md +0 -99
  40. package/cli-update-docs/JTBD-MASTER-PROMPT-ABOUT.md +0 -133
  41. package/cli-update-docs/JTBD-MASTER-PROMPT.md +0 -147
  42. package/cli-update-docs/LINER-MASTER.md +0 -546
  43. package/cli-update-docs/MIXTAPE-FORMAT.md +0 -398
  44. package/cli-update-docs/PLATFORM.md +0 -210
  45. package/cli-update-docs/TUI-BACKLOG.md +0 -155
  46. package/dist/App.js +0 -220
  47. package/dist/App.js.map +0 -1
  48. package/dist/colors.js +0 -132
  49. package/dist/colors.js.map +0 -1
  50. package/dist/components/Header.js +0 -15
  51. package/dist/components/Header.js.map +0 -1
  52. package/dist/components/KeyHints.js +0 -17
  53. package/dist/components/KeyHints.js.map +0 -1
  54. package/dist/components/LabeledBox.js +0 -53
  55. package/dist/components/LabeledBox.js.map +0 -1
  56. package/dist/components/NextSteps.js +0 -18
  57. package/dist/components/NextSteps.js.map +0 -1
  58. package/dist/index.js +0 -17
  59. package/dist/index.js.map +0 -1
  60. package/dist/screens/AgentSetup.js +0 -224
  61. package/dist/screens/AgentSetup.js.map +0 -1
  62. package/dist/screens/BootSplash.js +0 -163
  63. package/dist/screens/BootSplash.js.map +0 -1
  64. package/dist/screens/CompileView.js +0 -567
  65. package/dist/screens/CompileView.js.map +0 -1
  66. package/dist/screens/FramingConfirmReview.js +0 -197
  67. package/dist/screens/FramingConfirmReview.js.map +0 -1
  68. package/dist/screens/Gate1Review.js +0 -147
  69. package/dist/screens/Gate1Review.js.map +0 -1
  70. package/dist/screens/Gate2Review.js +0 -162
  71. package/dist/screens/Gate2Review.js.map +0 -1
  72. package/dist/screens/ImportPrompt.js +0 -173
  73. package/dist/screens/ImportPrompt.js.map +0 -1
  74. package/dist/screens/JsSetup.js +0 -77
  75. package/dist/screens/JsSetup.js.map +0 -1
  76. package/dist/screens/LocalFilePicker.js +0 -139
  77. package/dist/screens/LocalFilePicker.js.map +0 -1
  78. package/dist/screens/NewMixtapeWizard.js +0 -662
  79. package/dist/screens/NewMixtapeWizard.js.map +0 -1
  80. package/dist/screens/PhaseRunner.js +0 -1203
  81. package/dist/screens/PhaseRunner.js.map +0 -1
  82. package/dist/screens/ProcessManifest.js +0 -160
  83. package/dist/screens/ProcessManifest.js.map +0 -1
  84. package/dist/screens/ProjectHub.js +0 -557
  85. package/dist/screens/ProjectHub.js.map +0 -1
  86. package/dist/screens/SourceModal.js +0 -269
  87. package/dist/screens/SourceModal.js.map +0 -1
  88. package/dist/screens/TapeBrowser.js +0 -312
  89. package/dist/screens/TapeBrowser.js.map +0 -1
  90. package/dist/screens/TapeDraftReview.js +0 -444
  91. package/dist/screens/TapeDraftReview.js.map +0 -1
  92. package/dist/screens/TapeEditor.js +0 -310
  93. package/dist/screens/TapeEditor.js.map +0 -1
  94. package/dist/screens/cassette-art.js +0 -72
  95. package/dist/screens/cassette-art.js.map +0 -1
  96. package/dist/store.js +0 -10
  97. package/dist/store.js.map +0 -1
@@ -2,9 +2,9 @@
2
2
 
3
3
  Loaded by the `curating-mixtapes` skill at the start of Phase 2 (Candidate discovery).
4
4
 
5
- This file describes the six tactics that produce better candidates than generic search. When you reach Phase 2, work through these tactics — not all of them for every mixtape, but enough that the candidate pool covers the knowledge map from multiple angles.
5
+ This file describes tactics that produce better candidates than generic search. When you reach Phase 2, work through the relevant tactics — not all of them for every mixtape, but enough that the candidate pool covers the knowledge map and required source roles from multiple angles.
6
6
 
7
- The goal of Phase 2 is recall, not precision. You're producing two to four times the eventual kept count. You will cut in Phase 4. Casting wide here is the methodology working as designed.
7
+ The goal of Phase 2 is recall, not precision. You're producing roughly two to four times the eventual kept count, but the real stop condition is coverage of the required source roles and capability-pattern lanes. You will cut in Phase 4. Casting wide here is the methodology working as designed.
8
8
 
9
9
  ---
10
10
 
@@ -91,9 +91,146 @@ This tactic is structurally related to the framing-gap test in Phase 5, but earl
91
91
 
92
92
  ---
93
93
 
94
+ ## 7. Search for the core action and the curator anchors
95
+
96
+ A good candidate list is not just "sources about the topic." It must contain
97
+ sources that help the consuming AI do the job.
98
+
99
+ Start by extracting the JTBD's core action. Examples:
100
+
101
+ - "translate moodboards into UI"
102
+ - "turn bug reports into reproduction steps"
103
+ - "write grant narratives from research evidence"
104
+
105
+ Then search for candidate URLs that might directly teach, demonstrate, or argue
106
+ for that action. Bridge candidates are allowed, but they cannot carry the corpus
107
+ by themselves. For a moodboard-to-interface mixtape, CSS layout, design tokens,
108
+ and design systems are bridge leads: useful after a direction exists, but not
109
+ enough to teach how to read images, extract mood, or create a new interface
110
+ artifact. The keep/drop decision still happens only after the content is fetched
111
+ and read.
112
+
113
+ When the curator names a person, studio, product, software tool, YouTube
114
+ channel, or site they like, deepen the anchor. Search for their case studies,
115
+ interviews, talks, process notes, docs, essays, videos, and worked examples.
116
+ Do not stop at the homepage, gallery index, or crawler metadata unless that is
117
+ the only readable evidence available. If it is only a pointer, say so in the
118
+ candidate reason.
119
+
120
+ For visual-output jobs, deliberately search for visual and worked-example
121
+ evidence: image-heavy case studies, moodboard breakdowns, design rationale,
122
+ portfolio projects with process, talks, and videos. A source list made mostly
123
+ of UX primers, CSS references, and design-system docs is probably under-serving
124
+ the job even if every knowledge-map section has a source.
125
+
126
+ ---
127
+
128
+ ## 8. Fill required source roles, not just sections
129
+
130
+ The Capability Brief should name **Required source roles**: the jobs the corpus
131
+ needs sources to perform for the future AI. These are not the same as source
132
+ `kind` (`reference / principle / prescription / example`) and not the same as
133
+ knowledge-map sections.
134
+
135
+ Examples:
136
+
137
+ - "core-action method" — sources that teach the exact action the agent must do
138
+ - "worked examples / case studies" — sources that show good output, process, or taste
139
+ - "domain authority" — primary/official sources the agent can cite for accuracy
140
+ - "implementation constraints" — specs, APIs, platform docs, safety limits, or production rules
141
+ - "critique / validation" — sources that help judge whether output is good
142
+ - "dissent / alternate stance" — sources that prevent one-frame bias
143
+ - "domain data" — keyword data, epidemiology, market signals, legal text, or other evidence specific to the niche
144
+
145
+ When you build the long-list, make sure every required role has candidates. A
146
+ populated section is not enough if a required role is thin. For a visual-output
147
+ mixtape, two dozen UX/design-system articles do not substitute for worked
148
+ visual/craft examples with rationale. For a medical SEO mixtape, SEO practice
149
+ articles do not substitute for authoritative medical sources and domain-specific
150
+ keyword or patient-language evidence.
151
+
152
+ **How to apply:** For each required source role, search until you have 3–6
153
+ plausible candidates or until it is clear public sources are thin. In the
154
+ candidate reason, name the role the source might satisfy. If you cannot find
155
+ credible candidates for a required role, write a "Role gaps" note in
156
+ `working/02-candidate-longlist.md` so Quality can recommend a focused
157
+ improvement pass instead of quietly accepting weak coverage.
158
+
159
+ Candidate count should fall out of the role plan:
160
+
161
+ - Narrow, single-domain projects may need fewer than 20 candidates.
162
+ - Ordinary projects usually land around 20–35 candidates.
163
+ - Broad, multi-domain, or `reference-translation` projects may need 40–60
164
+ candidates because each source domain and translation lane needs its own
165
+ candidate pool.
166
+
167
+ Do not pad the list to hit a number. Do not stop at a number when a material
168
+ role is still empty. Stop when every required role has credible candidates, the
169
+ knowledge map is covered, and any capability-pattern lanes named in Phase 1 have
170
+ enough evidence to evaluate.
171
+
172
+ Good candidate notes should say which role the source might serve:
173
+
174
+ - `source role: canonical method` — teaches the process the AI should follow
175
+ - `source role: domain authority` — grounds claims in a credible source
176
+ - `source role: applied example` — shows what good looks like in context
177
+ - `source role: boundary / risk` — prevents harmful or misleading output
178
+
179
+ ---
180
+
181
+ ## 9. Build a source ecology for reference-translation jobs
182
+
183
+ Some mixtapes are not just about a topic. They ask a future agent to read inputs
184
+ from one world and turn them into outputs in another. Common examples:
185
+
186
+ - images, moodboards, art direction, visual references, or style examples into a
187
+ product/interface brief
188
+ - screenshots, bug reports, logs, or user complaints into engineering actions
189
+ - research evidence, interview notes, or case studies into a narrative or plan
190
+
191
+ These are **reference-translation** capabilities. Their candidate pool needs a
192
+ source ecology, not a stack of sources from the final output medium.
193
+
194
+ For visual/reference work, search at least these lanes:
195
+
196
+ - **Input/reference-domain interpretation:** how practitioners read the source
197
+ worlds themselves, such as art, photography, architecture, interiors, posters,
198
+ editorial design, fashion, packaging, sports/media identity, film, or product
199
+ imagery.
200
+ - **Translation methods:** sources that show how observed qualities become new
201
+ decisions: design-language extraction, style tiles, creative direction,
202
+ case-study rationale, annotated redesigns, or critique.
203
+ - **Target-output constraints:** the platform/output realities that the final
204
+ work must survive, such as web responsiveness, accessibility, motion safety,
205
+ design systems, typography, or implementation mechanics.
206
+ - **Caller handoff language:** brief formats, vocabulary, do/don't lists,
207
+ validation checks, and clarification patterns that make the result executable
208
+ by another designer, engineer, or AI agent.
209
+
210
+ For an art-direction-to-web mixtape, CSS references, design-token specs, and
211
+ accessibility docs are valuable bridge sources. They are not substitutes for
212
+ visual-culture sources that teach the agent how to look, compare, interpret, and
213
+ translate. A candidate list made mostly of web-craft sources should include a
214
+ "Role gaps" note and keep searching for the missing input/reference domains.
215
+
216
+ **How to apply:** Before writing `working/02-candidate-longlist.md`, add a short
217
+ "Reference-translation source ecology" note to your own scratchpad or the
218
+ long-list: target output medium, input/reference domains represented, translation
219
+ method candidates, handoff candidates, and bridge/constraint candidates. If the
220
+ input/reference domains are thin, search those domains directly instead of doing
221
+ another generic target-output search. Do not stop at the ordinary 20–35 candidate
222
+ range if the ecology is still missing a source world the future agent must learn
223
+ to interpret.
224
+
225
+ ---
226
+
94
227
  ## What not to do
95
228
 
96
229
  - **Don't rely on generic search alone.** The first page of search results is what your audience could also find. The point of curation is to surface what they couldn't.
97
230
  - **Don't accept candidates without verifying URLs.** AI hallucinates plausible-looking URLs. Web-fetch every URL before it goes on the long-list. A 404 candidate is worse than a missing one.
98
- - **Don't filter at Phase 2.** That's Phase 4's job. If a source might be useful, it goes on the long-list. Quality decisions come after fetching and reading.
231
+ - **Don't filter at Phase 2.** That's Phase 4's job. If a source might be useful, it goes on the long-list. Quality decisions come after fetching and reading. A URL is a lead, not evidence that the content is any good.
99
232
  - **Don't over-research one section while leaving others empty.** Walk the knowledge map. Each section should have a reasonable candidate pool before you go deep on any one section.
233
+ - **Don't let adjacency satisfy the JTBD.** A CSS reference is not an art-direction source just because the final artifact is HTML. A process article is not a writing source just because the writer needs a process. Label these as bridge candidates unless they directly teach the core action.
234
+ - **Don't collapse reference-translation work into the output medium.** If the future agent must translate paintings, photos, architecture, sports identity, or moodboards into a product direction, the candidate pool needs sources from those source worlds and from the translation move. Output-medium craft docs are necessary constraints, not the whole corpus.
235
+ - **Don't let "not absent" pass a required role.** If a required role is material to the future AI's job, thin coverage should trigger backfill or an improvement-pass recommendation.
236
+ - **Don't treat source roles as decorative.** A section can look populated while a required evidence role is absent. That is still a corpus gap.
@@ -6,6 +6,8 @@ This file describes how to rank sources, what to avoid, and the patterns to watc
6
6
 
7
7
  The goal of Phase 4 is honest assessment against the JTBD. Not breadth. Not completeness. Not even fairness to every source. *Does this source help the consuming AI do the JTBD better?* If yes, keep it. If partially, trim it. If no, drop it.
8
8
 
9
+ A URL is only a lead. The source is the readable content. Do not keep or trim a candidate from its URL, title, search snippet, crawler metadata, or your memory of the source. Keep/trim decisions require source evidence.
10
+
9
11
  ---
10
12
 
11
13
  ## Source-quality hierarchy
@@ -75,6 +77,76 @@ For each fetched source, decide one of: kept, trim, dropped. Rate kept and trim
75
77
 
76
78
  If you find yourself rating most sources 4–5, you're under-discriminating. The point of evaluation is to discriminate.
77
79
 
80
+ ## Evidence fields
81
+
82
+ Every kept or trimmed source must include these fields in `working/03-evaluation.yaml`:
83
+
84
+ - `fetch_status: readable | partial` — `readable` means the substantive article, transcript, PDF body, or local content was retrieved. `partial` means enough real source content was retrieved to judge, such as an abstract plus substantial excerpt.
85
+ - `content_quality: high | medium` — `high` means dense, distinctive, and directly useful; `medium` means useful but selective. If the content is shallow, generic, AI-generated, SEO filler, a homepage/gallery without rationale, or a low-density transcript, drop it.
86
+ - `evidence:` — at least two bullets naming source-specific claims, examples, sections, methods, transcript moments, or limitations actually seen in the content.
87
+
88
+ `metadata_only` and `unavailable` candidates must be dropped. They can remain in the evaluation file as evaluated candidates, but they must not enter `tape.yaml` as normal corpus sources.
89
+
90
+ ---
91
+
92
+ ## JTBD-fit labels
93
+
94
+ Every kept or trimmed source must also get a `jtbd_fit` label. This prevents
95
+ topic adjacency from passing as source quality.
96
+
97
+ - **direct** — the source teaches, demonstrates, or argues for the core action
98
+ in the JTBD.
99
+ - **bridge** — the source helps execute the result after the core decision is
100
+ made: implementation mechanics, tokens, layout, process, API references, or
101
+ operational constraints.
102
+ - **background** — broad vocabulary, primer, historical context, or generic
103
+ orientation.
104
+
105
+ Bridge sources are valuable, but they are not the same as direct fit. If the job
106
+ is "turn moodboards into HTML interface concepts," then a moodboard analysis
107
+ method, a studio case study with rationale, or a talk on translating visual
108
+ references can be direct. A CSS layout guide, token spec, or design critique
109
+ process is a bridge unless it specifically teaches the translation move.
110
+
111
+ For a `reference-translation` capability, use an even stricter direct-fit test:
112
+ the source must help the future agent interpret the input/reference domain or
113
+ demonstrate the translation from reference qualities into target-output
114
+ decisions. Target-medium mechanics, accessibility standards, design-token
115
+ formats, style-guide infrastructure, and implementation docs are usually bridge
116
+ sources. They are important, but they cannot carry the core action alone.
117
+
118
+ Background sources should rarely be marked required. A kept background source
119
+ needs a narrow note explaining why its vocabulary or context is worth carrying.
120
+
121
+ If a knowledge-map section contains only `bridge` or `background` sources, mark
122
+ that as weak coverage in the rationale or quality report and backfill a direct
123
+ source if the section is central to the JTBD.
124
+
125
+ Quality also checks source roles at the corpus level. `reference / principle /
126
+ prescription / example` is only the generic kind distribution; some projects
127
+ need more specific roles. A visual art-director corpus may need high-craft case
128
+ studies and worked image-to-interface translations. A medical SEO corpus may
129
+ need clinical authority, search-intent evidence, and Google guidance. If those
130
+ role-specific sources are missing, write an operating-fit audit and recommend a
131
+ focused improvement pass instead of calling the corpus ready with a limitation.
132
+
133
+ ---
134
+
135
+ ## Bounded fetch fallback
136
+
137
+ Phase 4 should read enough to make honest decisions, but it must not stall on
138
+ unavailable content. For each candidate, try one direct fetch/read. If that
139
+ fails, make at most one recovery attempt: alternate transcript source, search
140
+ result, mirror, metadata page, or equivalent.
141
+
142
+ After two failed retrieval attempts total, stop searching for that candidate and
143
+ evaluate from verified metadata, the Phase 2 reason, and any partial content you
144
+ have. Usually that means `dropped`. If you have enough partial content to judge,
145
+ set `fetch_status: partial` and write the evidence bullets. If you only have
146
+ metadata, set the decision to `dropped`; the rationale can say the candidate
147
+ looked promising but was metadata-only. Every candidate still gets a decision in
148
+ `working/03-evaluation.yaml`; no source may keep the phase open indefinitely.
149
+
78
150
  ---
79
151
 
80
152
  ## Patterns to watch for
@@ -115,14 +187,25 @@ Recent does not mean better. A 2024 article that summarizes well-known points is
115
187
 
116
188
  Write every candidate's decision, regardless of whether it was kept or dropped. The dropped decisions matter — they're how the working notes show that evaluation actually happened.
117
189
 
190
+ For large candidate sets, write decisions incrementally under `working/evaluation-decisions/` as section-sized YAML fragments. Use names like `01-foundations.yaml` and keep each fragment small enough to inspect. Liner assembles those fragments into `working/03-evaluation.yaml` in the original longlist order, so the fragment files are the durable work surface and `03-evaluation.yaml` is the canonical assembled artifact.
191
+
118
192
  ```yaml
119
193
  candidates:
120
194
  - url: https://example.com/source
121
195
  title: Source title
122
196
  decision: kept # kept | trim | dropped
123
197
  rating: 5 # 1-5; required for kept and trim
198
+ jtbd_fit: direct # direct | bridge | background
199
+ fetch_status: readable # readable | partial; metadata_only/unavailable are dropped
200
+ content_quality: high # high | medium; low is dropped
201
+ evidence:
202
+ - Specific claim or example found in the readable source content.
203
+ - Specific method, constraint, result, or limitation found in the content.
124
204
  section: foundations
125
205
  rationale: One-sentence reason this decision was made.
206
+ note: >
207
+ Role: Why this source belongs in the corpus. Value: What it contributes
208
+ to the job-to-be-done. Limitations: What the source cannot prove.
126
209
  ```
127
210
 
128
211
  For dropped sources, the rationale should name *why* dropped — "duplicates Source 4," "shallow listicle," "AI-generated," "off-topic relative to JTBD." Generic "low quality" is not useful. Be specific.
@@ -20,12 +20,24 @@ Length: **800–2000 words.** Shorter for narrow topics; longer for broader ones
20
20
 
21
21
  ## What goes in
22
22
 
23
- Four kinds of content earn their place in the synthesis.
23
+ Six kinds of content earn their place in the synthesis.
24
24
 
25
25
  ### Principles or framework
26
26
 
27
27
  The conceptual structure the curator sees in the domain. Not a definition list — a framework. "Good CLI design rests on four pillars: predictable command shape, humane errors, useful defaults, and machine-readable output." That framework, once articulated, shapes how the AI reads every source in the corpus.
28
28
 
29
+ ### Generative rules
30
+
31
+ The rules the consuming AI should apply when it is making decisions with the mixtape. Include a `## Generative rules` section with about five imperatives. These are not summaries of sources; they are portable constraints the AI can carry into new work.
32
+
33
+ Example: "Channel discipline: stdout is for data, stderr is for humans, and exit codes mean what they say." A rule like this resolves dozens of downstream questions without the AI needing to re-open every source.
34
+
35
+ ### Stances this corpus takes
36
+
37
+ The opinionated positions the mixtape wants to preserve. Include a `## Stances this corpus takes` section that names what the corpus leans toward, what it resists, and where a dissenting source should temper the rule.
38
+
39
+ This is different from the contested-questions section. Contested questions name the debate; stances state the operating answer this mixtape chooses for its JTBD.
40
+
29
41
  ### Contested questions
30
42
 
31
43
  Where credible practitioners disagree, name the disagreement and where the curator stands. "There's an ongoing argument about whether CLIs should mirror existing tool conventions or break them deliberately when the underlying behaviour differs. This mixtape leans toward mirroring; sources 7 and 12 represent the dissenting view."
@@ -74,9 +86,11 @@ A typical synthesis runs:
74
86
 
75
87
  1. **Opening framing** (1–2 paragraphs). What this domain is fundamentally about. The frame the curator uses to organize their understanding. Not a definition — a stance.
76
88
  2. **The framework or principles** (2–4 paragraphs). The structure the curator sees. Named, not just described.
77
- 3. **Contested questions** (1–3 paragraphs). Where credible practitioners disagree. Where the curator stands.
78
- 4. **Important distinctions** (1–2 paragraphs). Concepts the AI is likely to conflate without correction.
79
- 5. **Scope and limits** (1 short paragraph). What this mixtape covers and what it doesn't.
89
+ 3. **Generative rules** (`## Generative rules`, about five imperatives). The small set of rules the consuming AI should remember and apply.
90
+ 4. **Stances this corpus takes** (`## Stances this corpus takes`, 1–3 paragraphs or bullets). The opinionated positions and trade-offs this mixtape adopts.
91
+ 5. **Contested questions** (1–3 paragraphs). Where credible practitioners disagree. Where the curator stands.
92
+ 6. **Important distinctions** (1–2 paragraphs). Concepts the AI is likely to conflate without correction.
93
+ 7. **Scope and limits** (1 short paragraph). What this mixtape covers and what it doesn't.
80
94
 
81
95
  This is a default. Vary it when the topic warrants — some domains lead with contested questions, some with distinctions, some with a different opening move. The structure serves the content.
82
96
 
@@ -130,4 +144,4 @@ If the synthesis names source numbers ("Source 1 argues..."), it's probably synt
130
144
 
131
145
  Plain markdown. No front matter. Begins with a top-level heading that matches the mixtape title (e.g., `# Mobile Design Foundations — Synthesis`). The full file gets included verbatim at the top of `MIXTAPE.md` by `liner compile`.
132
146
 
133
- Write the synthesis to `synthesis.md` in the project folder. Show the curator the result before declaring Phase 6 complete.
147
+ Write the synthesis to `synthesis.md` in the corpus folder (`mixtape/synthesis.md` in v2 projects). Show the curator the result before declaring Phase 6 complete.