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
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: curating-mixtapes
3
- description: Use when the user wants to build a "mixtape" — a curated bundle of sources (videos, articles, papers, specs) assembled as AI context for a specific job-to-be-done. Triggers include "help me make a mixtape on X", "curate sources on Y for AI", "build a context bundle for Z", "let's research X with Liner", "make me a tape on Y", "help me build a Liner mixtape". Drives the eight-phase Liner curation methodology end-to-end and produces a mixtape project folder — `tape.yaml`, `synthesis.md`, and `working/*` notes — ready for `liner compile`. Defaults to quick mode (the AI does the heavy lifting, the user confirms at two gates); methodology mode is available when the user wants to engage substantively at every step or is targeting library contribution.
3
+ description: Use when the user wants to build a "mixtape" — a curated bundle of sources (videos, articles, papers, specs) assembled as AI context for one hyper-specific future-agent task. Triggers include "help me make a mixtape on X", "curate sources on Y for AI", "build a context bundle for Z", "let's research X with Liner", "make me a tape on Y", "help me build a Liner mixtape", or "I want this Liner to help my AI agent do X". Drives the eight-phase Liner curation methodology end-to-end and produces a corpus folder — `tape.yaml`, `synthesis.md`, and `working/*` notes, under `mixtape/` in v2 projects — ready for `liner compile`. Defaults to quick mode (the AI does the heavy lifting, the user confirms at two gates); methodology mode is available when the user wants to engage substantively at every step or is targeting library contribution.
4
4
  ---
5
5
 
6
6
  # Curating Mixtapes
7
7
 
8
- This skill implements the Liner curation methodology (CURATION.md v2.0). A mixtape is a curated bundle of sources designed to make AI conversations meaningfully better within a specific domain. The bar: a good mixtape demonstrably improves AI output on tasks within its job-to-be-done.
8
+ This skill implements the Liner curation methodology (CURATION.md v2.0). A mixtape is a curated bundle of sources designed to make future AI sessions meaningfully better at one hyper-specific task. The bar: a good mixtape demonstrably improves agent output inside the capability it was built for.
9
9
 
10
10
  The output of this skill is a project folder ready for `liner compile`. The skill does not compile.
11
11
 
@@ -14,25 +14,26 @@ The output of this skill is a project folder ready for `liner compile`. The skil
14
14
  ## Terminology — get these right
15
15
 
16
16
  - **Tape file** (`tape.yaml`) — the recipe. Sources with notes and sections.
17
- - **Mixtape** — the project folder. Recipe + synthesis + working notes + source content + master file.
18
- - **Consumable mixtape** — `MIXTAPE.md` plus the `sources/*.md` files. What gets pasted into an AI conversation. Produced by `liner compile`.
17
+ - **Mixtape** — the corpus folder. In v2 projects it lives under `mixtape/`.
18
+ - **Consumable mixtape** — `MIXTAPE.md` plus the `sources/*.md` files inside the corpus folder. What gets pasted into an AI conversation. Produced by `liner compile`.
19
19
 
20
20
  Tape ≠ mixtape. The recipe is small; the mixtape is the realized artifact.
21
21
 
22
22
  ## What this skill produces
23
23
 
24
- A project folder named for the topic (e.g., `mobile-design-foundations/`) containing:
24
+ A project folder named for the topic (e.g., `mobile-design-foundations/`) containing a corpus folder. In v2 projects, these files live under `mixtape/`; legacy or standalone skill runs may use the project root:
25
25
 
26
26
  - `tape.yaml` — the recipe, conforming to MIXTAPE-FORMAT v1 (with v1.1 additions: `mode`, `jtbd`, `local_file` sources, optional `render` field on web sources)
27
27
  - `synthesis.md` — the curator's distilled understanding of the domain
28
- - `working/01-jtbd-and-knowledge-map.md` — framing artifacts
28
+ - `working/01-jtbd-and-knowledge-map.md` — framing artifacts: JTBD, capability brief, knowledge map, and required source roles
29
29
  - `working/02-candidate-longlist.md` — the unfiltered candidate pool
30
- - `working/03-evaluation.yaml` — keep/trim/drop decisions with rationales and ratings
31
- - `working/04-quality-checks.md` — redundancy, coverage, disagreement, and framing-gap findings
30
+ - `working/03-evaluation.yaml` — keep/trim/drop decisions with rationales, ratings, content evidence, and source-role mapping
31
+ - `working/04-quality-checks.md` — redundancy, coverage, disagreement, framing-gap, source-kind, note-quality, and source-role findings
32
+ - `working/05-operating-fit-audit.md` — optional improvement recommendation when the corpus is not yet strong enough for the Operating Layer
32
33
 
33
- `sources/` and `MIXTAPE.md` are produced later by `liner compile`. The optional `working/05-empirical-test.md` file is produced only when the curator runs the methodology validation step; it is not a driven TUI phase.
34
+ `sources/` and `MIXTAPE.md` are produced later by `liner compile` in the same corpus folder. The optional `working/06-empirical-test.md` file is produced only when the curator runs the methodology validation step; it is not a driven TUI phase.
34
35
 
35
- When the curator has supplied local material (book chapters, exported PDFs, Reader-Mode-saved articles), the skill may write `local_file` entries in `tape.yaml` pointing at files the curator has placed under `personal/`. This is a methodology-mode affordance — the curator's local context belongs to them, not the public web, and the `local_file` source type makes it first-class. Library contributions still exclude `local_file` sources; the skill should not invent them or suggest paths the curator hasn't supplied.
36
+ When the curator has supplied local material (book chapters, exported PDFs, Reader-Mode-saved articles), the skill may write `local_file` entries in `tape.yaml` pointing at files the curator has placed under `local-sources/` or the legacy `personal/` folder. This is a methodology-mode affordance — the curator's local context belongs to them, not the public web, and the `local_file` source type makes it first-class. Library contributions still exclude `local_file` sources; the skill should not invent them or suggest paths the curator hasn't supplied.
36
37
 
37
38
  ## Companion files
38
39
 
@@ -44,7 +45,7 @@ This skill is split across files in its own directory. Read each companion file
44
45
  - `quality-check-tests.md` — read before Phase 5
45
46
  - `synthesis-guidance.md` — read before Phase 6
46
47
 
47
- The orchestration logic, the two modes, the two gates, the AI-bias list, and the failure-mode list stay in this file because they apply across the whole lifecycle.
48
+ The orchestration logic, the two modes, the review gates, the AI-bias list, and the failure-mode list stay in this file because they apply across the whole lifecycle.
48
49
 
49
50
  ## Two modes
50
51
 
@@ -69,27 +70,40 @@ Run these phases in order. Each phase's output feeds the next. Do not reorder.
69
70
 
70
71
  ### Phase 1 — Framing
71
72
 
72
- Define the job-to-be-done and sketch a knowledge map.
73
+ Define the reusable capability and sketch a knowledge map.
73
74
 
74
- **The JTBD is a Job Story, not a topic.** Required form: `When [circumstance], I want [motivation], so I can [outcome].` All three slots required. "Mobile design" is a topic. *"When I'm designing the core UI of a consumer iOS app, I want to follow Apple's interaction conventions while choosing where to deviate visually, so I can ship something that feels native without looking generic."* is a JTBD. Three different Job Stories in the same topic area produce three different mixtapes.
75
+ The user-facing question is: **What do you want this Liner to help your AI agent do?** The user can answer in plain language. Do not make them supply source categories, research lanes, or a formal Job Story.
75
76
 
76
- Elicit the JTBD using the [JTBD Master Prompt](JTBD-MASTER-PROMPT.md) — drop its body into this phase as your interview script. It opens with a single short context-sharing question (offering to read project material if the user has any), reads what's shared if anything, then either runs a budgeted interview (five questions max) or descends the scope ladder from what was inferred. It drafts silently, checks the draft against a six-test rubric, and emits one sentence. If the user pushes back, take the correction and re-run the rubric — don't defend.
77
+ Your job in Phase 1 is to translate that plain-language goal into a Capability Brief:
77
78
 
78
- If you can't use the master prompt as-is (e.g., you're in a context where pasting it doesn't make sense), the minimum bar is: refuse any answer that's a bare topic, an aspiration ("be better at X"), a slot-missing fragment, or two jobs joined by "and." Stay on framing until the JTBD is a concrete single-sentence Job Story.
79
+ - what future AI sessions should be able to do,
80
+ - what outputs, decisions, or behaviors the resource should support,
81
+ - the internal job-to-be-done that will let later phases judge fit,
82
+ - research lanes inferred from the goal,
83
+ - source requirements and exclusions,
84
+ - runtime behavior for the future agent, including when it should ask the user clarifying questions.
85
+
86
+ The internal JTBD should be hyper-specific. "SEO" is a topic. "SEO keyword research for a mental-health startup specialized in brain surgery" is a capability narrow enough to research. If the user's goal is still broad, ask targeted questions and descend until the capability is specific enough that a corpus built for it could outperform generic model knowledge.
87
+
88
+ **Capability brief.** A short statement of the concrete capability this mixtape should give a downstream AI agent. This is not a persona or project name. It is the work the corpus must make the agent better at.
79
89
 
80
90
  **Knowledge map.** A short outline of the conceptual territory the corpus needs to cover. Four to eight sections, each with a few sub-areas. Treat it as a hypothesis — it will get revised during research.
81
91
 
82
- Write both to `working/01-jtbd-and-knowledge-map.md`. In quick mode: draft, show, get a one-line confirmation. In methodology mode: iterate with the curator until both feel right.
92
+ **Required source roles.** The evidence plan for the corpus. Name the kinds of sources the downstream agent needs before the mixtape can be trusted. Each role must include: role name, why it matters, what good evidence looks like, and minimum coverage. These are inferred from the user's desired capability, not hardcoded categories.
93
+
94
+ **Capability patterns.** If the user's goal implies a recurring evidence shape, name it in the Capability Brief. The most important current pattern is `reference-translation`: the future agent receives images, moodboards, visual references, inspiration, style examples, artifacts, or examples from one medium/domain and must turn them into another output. For this pattern, source roles must separate input/reference-domain interpretation, cross-domain translation method, target-output constraints, critique/clarification, and caller handoff language. Target-output implementation sources are bridge evidence; they cannot satisfy the reference-domain or translation-method roles by themselves.
95
+
96
+ Write the Capability Brief, internal JTBD, research lanes, knowledge map, and Required source roles to `working/01-jtbd-and-knowledge-map.md`. In quick mode: draft, show, get a one-line confirmation. In methodology mode: iterate with the curator until the capability brief, knowledge map, and source roles feel right.
83
97
 
84
98
  ### Phase 2 — Candidate discovery
85
99
 
86
100
  **Read `source-finding-tactics.md` before starting this phase.**
87
101
 
88
- Generate a long list of candidate sources across the knowledge map. URLs and titles only — no fetching yet. Aim wide: two to four times the eventual kept count. This phase is recall, not precision.
102
+ Generate a long list of candidate sources across the knowledge map and required source roles. URLs and titles only — no fetching yet. Aim wide enough for the evidence contract: roughly two to four times the eventual kept count, with the actual candidate count derived from the required source roles, capability pattern, and source ecology. This phase is recall, not precision.
89
103
 
90
104
  Verify each candidate exists at the URL given. AI is prone to hallucinating plausible-sounding URLs. Treat unverified URLs as candidates only until they're confirmed.
91
105
 
92
- Write to `working/02-candidate-longlist.md`, grouped by knowledge-map section. For each candidate: URL, title, one-line reason it's a candidate.
106
+ Write to `working/02-candidate-longlist.md`, grouped by knowledge-map section. For each candidate: URL, title, required source role served, and one-line reason it's a candidate.
93
107
 
94
108
  **At Gate 1, show the long-list and ask:** "Anything obviously missing? Anything obviously wrong? Confirm to start fetching." In quick mode the default is "looks good, continue." In methodology mode, expect real edits.
95
109
 
@@ -101,6 +115,8 @@ For each URL, retrieve the full text. YouTube: transcript. Articles, papers, doc
101
115
 
102
116
  If a URL fails to fetch (paywall, dead link, no transcript, geographic block): note the failure, decide whether the source is critical enough to chase via an alternate route (Wayback Machine, alternate venue), and either find a substitute or drop it. Don't silently lose candidates.
103
117
 
118
+ Bound the chase: try one direct fetch/read and at most one recovery attempt per candidate. After two failed retrieval attempts total, stop searching for that candidate and carry the failure into Phase 4 as part of the decision rationale.
119
+
104
120
  A successful transcript fetch is not the same as a high-value source. Many tutorial videos transcribe cleanly but contain no transferable content. The next phase handles that judgment.
105
121
 
106
122
  Don't write fetched content into the project folder yet. That happens at compile time, only for kept sources.
@@ -111,7 +127,15 @@ Don't write fetched content into the project folder yet. That happens at compile
111
127
 
112
128
  Read every fetched source against the JTBD. Decide keep / trim / drop. Rate kept sources 1–5. Draft curator notes for kept and trim sources.
113
129
 
114
- Write decisions to `working/03-evaluation.yaml`:
130
+ If content was unavailable after the bounded fetch attempts, still write a decision for that candidate. Usually choose `dropped`. Do not mark a source `kept` or `trim` from title, URL, search snippet, crawler metadata, or model memory alone.
131
+
132
+ Every `kept` or `trim` source must carry evidence fields in `working/03-evaluation.yaml`:
133
+
134
+ - `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. `metadata_only` and `unavailable` candidates must be `dropped`.
135
+ - `content_quality: high | medium` — low-quality content, SEO filler, AI-generated sludge, generic listicles, homepages, galleries without rationale, or shallow transcripts must be `dropped`.
136
+ - `evidence:` — at least two content-specific bullets from the fetched/read source. These are concrete claims, examples, sections, transcript moments, methods, or limitations seen in the content. Search snippets and titles do not count.
137
+
138
+ Write decisions incrementally as section-sized fragments in `working/evaluation-decisions/`, then write or let Liner assemble `working/03-evaluation.yaml`. Do not hold all decisions in conversation memory until the end.
115
139
 
116
140
  ```yaml
117
141
  candidates:
@@ -119,6 +143,12 @@ candidates:
119
143
  title: Source title
120
144
  decision: kept # kept | trim | dropped
121
145
  rating: 5 # 1-5; required for kept and trim
146
+ fetch_status: readable # readable | partial; metadata_only/unavailable are dropped
147
+ content_quality: high # high | medium; low is dropped
148
+ source_role: canonical method
149
+ evidence:
150
+ - First content-specific claim, section, example, or method retrieved from the source.
151
+ - Second content-specific detail proving the source was read.
122
152
  section: foundations
123
153
  rationale: One-sentence reason this decision was made.
124
154
  ```
@@ -129,11 +159,11 @@ Drafted curator notes land in `tape.yaml` at Phase 7. Write them now in their fi
129
159
 
130
160
  **Read `quality-check-tests.md` before starting this phase.**
131
161
 
132
- Step back from the keep-pile. Run the four tests. Document findings in `working/04-quality-checks.md`.
162
+ Step back from the keep-pile. Run the core-action test and the eight standard tests. Document findings in `working/04-quality-checks.md`.
133
163
 
134
- If a test fails, fix it before moving on. Don't proceed to synthesis with known coverage or framing gaps.
164
+ If a test fails, fix it before moving on when the fix is small enough for the quality phase. If the failure points to a wider source-role gap, write `working/05-operating-fit-audit.md` with `status: improvement_recommended`, the gap, why it matters, concrete search lanes, and custom-source suggestions. Do not call the corpus "ready with limitation"; let Liner offer the user an improvement pass or a clear Skip.
135
165
 
136
- *Tip: this phase benefits from running with fresh attention. If the conversation has been long, consider starting a separate chat with just the JTBD, knowledge map, and the kept-source list (titles + notes only) to run the checks. Optional, not required by the methodology.*
166
+ *Tip: this phase benefits from running with fresh attention. If the conversation has been long, consider starting a separate chat with just the JTBD, capability brief, required source roles, knowledge map, and the kept-source list (titles + notes only) to run the checks. Optional, not required by the methodology.*
137
167
 
138
168
  **At Gate 2, show the final keep-list, the curator notes, and the quality-check findings. Ask:** "Confirm to proceed to synthesis." Quick mode default: continue. Methodology mode: expect substantive edits.
139
169
 
@@ -141,7 +171,7 @@ If a test fails, fix it before moving on. Don't proceed to synthesis with known
141
171
 
142
172
  **Read `synthesis-guidance.md` before starting this phase.**
143
173
 
144
- Draft `synthesis.md`. The synthesis is the curator's distilled understanding of the domain expressed as continuous prose. 800–2000 words.
174
+ Draft `synthesis.md`. The synthesis is the curator's distilled understanding of the domain expressed as continuous prose. 800–2000 words. It must include `## Generative rules` and `## Stances this corpus takes` so the consuming AI gets explicit operating rules and corpus stances before reading individual sources.
145
175
 
146
176
  Quick mode: draft, show, default to "looks good, save it." The curator lightly edits if they want.
147
177
 
@@ -157,8 +187,8 @@ Write `tape.yaml`.
157
187
 
158
188
  **Each kept source needs:**
159
189
 
160
- - `type` — `youtube` or `web` (v1 supports only these two; gated content, local files, and pasted content are v2)
161
- - `url`
190
+ - `type` — `youtube`, `web`, `local_file`, or `skill`
191
+ - `url` for `youtube` and `web`; `path` for `local_file` or local/installed `skill` sources; `citation` for `local_file`
162
192
  - `note` — the curator note drafted in Phase 4
163
193
  - `section` — matches a knowledge-map section
164
194
  - `priority: optional` — only for sources the user can skip with `--skip-optional`
@@ -184,10 +214,10 @@ The only real test of whether the mixtape works.
184
214
 
185
215
  1. Compile: `liner compile <project-folder>`
186
216
  2. Open a fresh AI conversation. Don't paste the mixtape. Ask a substantive question that should benefit from the JTBD. Save the response.
187
- 3. Open another fresh AI conversation. Paste `MIXTAPE.md` plus relevant `sources/*.md` files. Ask the same question. Save the response.
217
+ 3. Open another fresh AI conversation. Paste `mixtape/MIXTAPE.md` plus relevant `mixtape/sources/*.md` files. Ask the same question. Save the response.
188
218
  4. Compare. Is the with-mixtape response meaningfully better — more specific, more accurate, more nuanced, less generic?
189
219
 
190
- Write findings to `working/05-empirical-test.md`: the question, the two responses (or summaries), the honest verdict. If the mixtape didn't help: what's missing? Back to Phase 2 or 5.
220
+ Write findings to `working/06-empirical-test.md`: the question, the two responses (or summaries), the honest verdict. If the mixtape didn't help: what's missing? Back to Phase 2 or 5.
191
221
 
192
222
  If the answers are similar, the mixtape isn't earning its place. Either the sources are too generic, the synthesis isn't doing enough work, or the JTBD is too broad. Don't skip this for library contributions.
193
223
 
@@ -200,6 +230,8 @@ The skill is the AI running the methodology. The AI has systematic biases that p
200
230
  - **Generic curator notes.** AI drafts notes that say "this is a useful resource" without specifying role, location of value, or limitations. Compensate by writing each note against the three-thing template in `curator-notes.md`.
201
231
  - **Primary-document blindness.** AI gravitates to secondary commentary over primary sources. If a domain has a spec, a standard, or a foundational paper, search for it specifically. Don't accept commentary as a substitute.
202
232
  - **Framing-gap blindness.** AI can't see what it didn't search for. The framing-gap test in Phase 5 is the methodological correction for this. Run it with intent — not as a checkbox, as a genuine "what am I missing" question.
233
+ - **Source-role blindness.** AI can fill every knowledge-map section while missing an evidence role the job depends on. Use the required source roles from Phase 1 as a contract in Phase 2 and an audit checklist in Phase 5.
234
+ - **Pattern flattening.** AI turns specialized capabilities into generic topic packs. A reference-translation project becomes "web design"; a medical SEO project becomes "SEO"; a legal drafting project becomes "writing." When Phase 1 names a capability pattern, Phase 2 and Phase 5 must preserve that pattern-specific evidence contract.
203
235
  - **Synthesis-as-recap.** AI-drafted synthesis tends to recap source content rather than distill the curator's framing of the domain. Push toward principles, contested questions, and framework distinctions — not "Source 1 says X; Source 2 says Y."
204
236
 
205
237
  If you find yourself producing any of these patterns, stop and correct.
@@ -210,22 +242,24 @@ When all phases complete, the project folder contains:
210
242
 
211
243
  ```
212
244
  <topic-slug>/
213
- ├── tape.yaml
214
- ├── synthesis.md
215
- └── working/
216
- ├── 01-jtbd-and-knowledge-map.md
217
- ├── 02-candidate-longlist.md
218
- ├── 03-evaluation.yaml
219
- ├── 04-quality-checks.md
220
- └── 05-empirical-test.md # if empirical validation was run
245
+ └── mixtape/
246
+ ├── tape.yaml
247
+ ├── synthesis.md
248
+ └── working/
249
+ ├── 01-jtbd-and-knowledge-map.md
250
+ ├── 02-candidate-longlist.md
251
+ ├── 03-evaluation.yaml
252
+ ├── 04-quality-checks.md
253
+ ├── 05-operating-fit-audit.md # if an improvement pass is recommended
254
+ └── 06-empirical-test.md # if empirical validation was run
221
255
  ```
222
256
 
223
- Tell the user the folder is ready to compile with `liner compile <topic-slug>`. The compile step produces `MIXTAPE.md` and the `sources/` folder.
257
+ Tell the user the folder is ready to compile with `liner compile <topic-slug>`. The compile step produces `mixtape/MIXTAPE.md` and `mixtape/sources/`.
224
258
 
225
259
  ## What this skill does NOT do
226
260
 
227
261
  - **Does not run `liner compile`.** That's the user's call, with the user's tools.
228
- - **Does not fetch from gated or local sources.** v1 supports only public `youtube` and `web` URLs. Personal sources (book chapters, gated articles, local files) are real and often high-value, but v1 doesn't support them.
262
+ - **Does not fetch from gated accounts or private systems.** v1 supports public `youtube` and `web` URLs plus curator-supplied `local_file` and `skill` sources. The skill may reference local files the curator supplied, but it must not invent private paths or bypass access controls.
229
263
  - **Does not maintain the shared content cache.** That's the CLI's job.
230
264
  - **Does not publish to the library.** Library contributions happen via PR to the Liner repo, in methodology mode, after passing the empirical test.
231
265
 
@@ -240,5 +274,6 @@ Patterns that produce bad mixtapes. Watch for them in your own work:
240
274
  - **The noteless mixtape.** Sources without curator notes. The curator either was lazy or didn't have a reason. Both are problems.
241
275
  - **The aspirational mixtape.** Sources the curator thinks people *should* read, not sources that help with the JTBD. Mixtapes are tools, not reading recommendations.
242
276
  - **The single-pass mixtape.** Curated without a framing-gap test. Well-covered within one narrow framing, blind to perspectives the curator didn't think to look for.
277
+ - **The role-missing mixtape.** Sections appear covered, but a required source role from Phase 1 has no fetched, useful evidence.
243
278
 
244
279
  If the mixtape this skill produces fits any of these patterns, return to the relevant phase and fix it.
@@ -2,11 +2,25 @@
2
2
 
3
3
  Loaded by the `curating-mixtapes` skill at the start of Phase 5 (Quality checks).
4
4
 
5
- This file describes the four tests every mixtape should pass before moving to synthesis. Apply them deliberately, in this order. Write findings to `working/04-quality-checks.md`.
5
+ This file describes the core-action test and the eight standard tests every
6
+ mixtape should pass before moving to synthesis. Apply them deliberately, in
7
+ this order. Write findings to `working/04-quality-checks.md`.
6
8
 
7
9
  Phase 5 is the methodology's correction for single-pass curation. The first four phases work forward — frame, find, fetch, evaluate. Phase 5 works backward — looking at the whole keep-pile and asking what's wrong with it. The two passes do different work. If you skip this phase, the mixtape's blind spots ship with the mixtape.
8
10
 
9
- The framing-gap test is the highest-leverage of the four and the one most curators skip.
11
+ The framing-gap and source-role tests are the highest-leverage checks and the ones most curators skip.
12
+
13
+ ## Automated-run budget
14
+
15
+ When Phase 5 is running inside the TUI or another automated Liner flow, it must stay bounded. Treat it as an audit over `working/03-evaluation.yaml`, not as a second open-ended discovery phase.
16
+
17
+ - Classify existing kept/trim sources before searching. If a source is missing `kind`, infer it from title, URL/source type, section, rating, and curator note, then update `working/03-evaluation.yaml`.
18
+ - Missing `kind` metadata is not itself a corpus gap. It becomes a source-kind gap only after every existing kept/trim source has a kind and the distribution still has a zero column.
19
+ - Use at most one search pass for any one missing perspective.
20
+ - Use at most one source-kind backfill search total.
21
+ - Do not exceed four external search/fetch attempts across the whole Quality phase. If the budget is spent, stop searching, document the gap or defense, and write `working/04-quality-checks.md`.
22
+ - On resume after a paused/cancelled Quality run, do not continue a search loop. Use the evidence already gathered, repair weak curator notes from existing evidence, and close the artifact.
23
+ - If a material source-role gap remains after the bounded audit, write `working/05-operating-fit-audit.md` with `status: improvement_recommended` instead of declaring the corpus ready with a limitation. Liner will offer a focused improvement pass or let the user skip for now.
10
24
 
11
25
  ---
12
26
 
@@ -16,12 +30,56 @@ Before running the tests, gather the inputs in one place:
16
30
 
17
31
  - The JTBD (from `working/01-jtbd-and-knowledge-map.md`)
18
32
  - The knowledge map (same file)
33
+ - The required source roles (same file)
19
34
  - The kept and trim sources from `working/03-evaluation.yaml` — titles, sections, ratings, rationales, and the drafted curator notes
20
35
 
21
36
  Read these together. The tests are about how the corpus *as a whole* serves the JTBD. You can't run them well by looking at sources one at a time.
22
37
 
23
38
  ---
24
39
 
40
+ ## Test 0 — The core-action fit test
41
+
42
+ Name the exact action in the JTBD. Then ask whether the kept sources directly
43
+ teach or demonstrate that action, or merely orbit it.
44
+
45
+ This test exists because coverage can pass while the job still fails. A corpus
46
+ for "turn moodboards into HTML interface concepts" can technically cover
47
+ "visual hierarchy," "design systems," "CSS layout," and "process," yet still
48
+ miss the action of reading visual references, extracting transferable qualities,
49
+ and creating a new interface direction.
50
+
51
+ ### How to run it
52
+
53
+ 1. Quote or paraphrase the JTBD's core action in `working/04-quality-checks.md`.
54
+ 2. Count kept sources by `jtbd_fit`: `direct / bridge / background`.
55
+ 3. If older entries lack `jtbd_fit`, infer it from title, rationale, note, and
56
+ section, then update `working/03-evaluation.yaml`.
57
+ 4. List which kept sources are direct. A healthy action-oriented mixtape needs
58
+ at least two direct sources, and each central knowledge-map section needs
59
+ either one direct source or a written reason why bridge coverage is enough.
60
+ 5. For curator-named anchors, say whether you retrieved rationale/process
61
+ evidence or only a homepage/gallery/metadata pointer.
62
+
63
+ If direct coverage is weak, take one action:
64
+
65
+ - Backfill direct sources within the Phase 5 search budget, or
66
+ - Document the gap and recommend re-running Candidate discovery with
67
+ action-specific search terms.
68
+
69
+ ### Required output
70
+
71
+ ```
72
+ ## Test 0 — Core-action fit
73
+
74
+ Core action: [verb phrase from JTBD]
75
+ Distribution: X direct / Y bridge / Z background
76
+ Direct sources: [Source titles]
77
+ Finding: [pass / weak coverage / gap]
78
+ Action: [kept, backfilled, or documented rerun recommendation]
79
+ ```
80
+
81
+ ---
82
+
25
83
  ## Test 1 — The redundancy test
26
84
 
27
85
  Read each kept source's role in the mixtape. Are any two sources making essentially the same point?
@@ -75,7 +133,7 @@ Step back from individual sources. Is there a major perspective on this topic mi
75
133
 
76
134
  If yes, the framing was too narrow. Expand the knowledge map and return to Phase 2.
77
135
 
78
- **This test is the highest-leverage of the four and the one most curators skip.** Single-pass curation tends to produce mixtapes that are well-covered within one narrow framing. The framing-gap test catches what the first four phases couldn't see.
136
+ **This test is the highest-leverage of the six and the one most curators skip.** Single-pass curation tends to produce mixtapes that are well-covered within one narrow framing. The framing-gap test catches what the first four phases couldn't see.
79
137
 
80
138
  ### How to run it (required steps, in order)
81
139
 
@@ -150,7 +208,7 @@ Imbalance is not a failure. A 7-principle / 2-prescription / 1-reference / 0-exa
150
208
 
151
209
  > *Kinds audit: 7 principle / 9 prescription / 5 example / 0 reference. Accepted: this JTBD is about voice and microcopy, not architectural conventions. No reference source is needed because the synthesis doesn't make authority claims that would require backing.*
152
210
 
153
- If the zero isn't defensible, run one search pass for a source of the missing kind before shipping. The same rule as Test 4(a) applies: search for the role the kind plays (an authoritative spec, an opinionated essay, a tight rule-set, a worked example), not for the topic generically.
211
+ If the zero isn't defensible, first make sure every existing kept/trim source has been assigned a kind. Only then run one source-kind backfill search before shipping. The same rule as Test 4(a) applies: search for the role the kind plays (an authoritative spec, an opinionated essay, a tight rule-set, a worked example), not for the topic generically.
154
212
 
155
213
  ### Required output
156
214
 
@@ -166,14 +224,190 @@ Distribution: X reference / Y principle / Z prescription / W example
166
224
 
167
225
  ---
168
226
 
227
+ ## Test 6 — Note-quality smell test
228
+
229
+ Read every kept/trim source note in `working/03-evaluation.yaml`. The note is the consuming AI's instruction for how to weight and use that source. A source with a vague note is a bookmark, not curation.
230
+
231
+ A useful curator note must do three jobs:
232
+
233
+ - **Use cue:** tell the AI how to read or apply the source.
234
+ - **Value/bar:** name the concrete value, standard, or quality bar the source contributes.
235
+ - **Boundary:** name one limitation, scope boundary, or reason not to over-weight it.
236
+
237
+ Thin notes often look like "useful background," "good overview," or "skim for examples." They may be true, but they do not tell the AI what to do with the source. Repair them before synthesis by updating `working/03-evaluation.yaml`; do not search or fetch just to improve note prose. Use the already gathered title, rationale, source type, section, rating, and partial content.
238
+
239
+ ### Required output
240
+
241
+ `working/04-quality-checks.md` must include a Test 6 section like this:
242
+
243
+ ```
244
+ ## Test 6 — Note-quality
245
+
246
+ Checked: N kept/trim notes
247
+ Repaired: M notes
248
+
249
+ - Source/title/URL — repaired missing boundary; note now names [scope].
250
+ ```
251
+
252
+ If no notes were repaired, write one sentence explaining why the notes already carry a use cue, value/bar, and limitation.
253
+
254
+ ---
255
+
256
+ ## Test 7 — Source-role fit
257
+
258
+ This test asks whether the corpus has the evidence roles the future AI actually
259
+ needs. It catches the failure mode where a source list technically covers every
260
+ section and every source `kind`, but still cannot do the job well.
261
+
262
+ Source roles are capability-specific evidence jobs named in the Capability
263
+ Brief. They are not source `kind`s and not section labels. A source can be an
264
+ `example` kind without satisfying the required "worked high-craft case study"
265
+ role if the fetched content is only a homepage, gallery index, or shallow
266
+ portfolio blurb. A source can be a `reference` kind without satisfying the
267
+ required "medical authority" role if it is a secondary explainer instead of a
268
+ primary clinical or institutional source.
269
+
270
+ ### How to run it
271
+
272
+ 1. Read `working/01-jtbd-and-knowledge-map.md` and copy the Required source
273
+ roles from the Capability Brief into `working/04-quality-checks.md`.
274
+ 2. If the project was framed before Required source roles existed, infer 4–7
275
+ roles from the core action and write them into the quality report before
276
+ scoring coverage.
277
+ 3. For each role, count kept/trim sources whose fetched evidence actually
278
+ satisfies that role. Count by content, not by title, URL, section, or generic
279
+ kind.
280
+ 4. Compare coverage to the minimum named in the Capability Brief. If no minimum
281
+ was named, use these defaults:
282
+ - 2 strong sources for ordinary required roles.
283
+ - 3 substantive worked examples/case studies when the capability depends on
284
+ taste, visual output, craft judgment, or recognizing quality.
285
+ - primary/official sources for legal, medical, financial, or safety-sensitive
286
+ authority roles.
287
+ 5. A material role with weak coverage must either be improved within the Phase 5
288
+ budget or written to `working/05-operating-fit-audit.md` with
289
+ `status: improvement_recommended`.
290
+
291
+ "Light but not absent" is not a pass for a required source role. It is a weak
292
+ coverage finding.
293
+
294
+ ### Required output
295
+
296
+ `working/04-quality-checks.md` must include:
297
+
298
+ ```
299
+ ## Test 7 — Source-role fit
300
+
301
+ Required roles:
302
+ - Core-action method — minimum: 2; current: 3; status: pass; evidence: [Source titles]
303
+ - Worked craft examples — minimum: 3; current: 1; status: weak; evidence: [Source title]
304
+
305
+ Action: [kept / backfilled / wrote working/05-operating-fit-audit.md]
306
+ ```
307
+
308
+ If a required role is missing or weak, take one of three actions:
309
+
310
+ - **Backfill now.** Search for the role directly, add a verified candidate, evaluate it, and update the keep-list.
311
+ - **Document the limitation.** If credible sources are unavailable, write a concrete limitation and what custom source the curator should add.
312
+ - **Narrow the capability claim.** If the role is not actually needed, update the Capability Brief and Required source roles so Phase 1 tells the truth.
313
+
314
+ Do not leave a missing required role as "covered by the overall corpus." That is exactly how generic-looking mixtapes pass while still failing the user's job.
315
+
316
+ ---
317
+
318
+ ## Test 8 — Capability-pattern fit
319
+
320
+ Some capabilities have a specialized evidence contract beyond generic source
321
+ roles. Phase 1 should name these as `Capability pattern: ...` in the Capability
322
+ Brief. Test 8 asks whether the final keep-list still satisfies that pattern, or
323
+ whether the corpus drifted into a generic topic pack.
324
+
325
+ If no capability pattern was named, write:
326
+
327
+ ```
328
+ ## Test 8 — Capability-pattern fit
329
+
330
+ Pattern: none
331
+ Finding: pass. No specialized capability pattern was named in the Capability Brief.
332
+ Action: none.
333
+ ```
334
+
335
+ Do not invent a pattern in Phase 5 just to make the test look busy. If Phase 1
336
+ clearly missed a pattern and the omission affects corpus quality, document that
337
+ as a framing gap and write an operating-fit audit.
338
+
339
+ ### Reference-translation pattern
340
+
341
+ Use this section when the Capability Brief says `Capability pattern:
342
+ reference-translation`, or when Phase 1 should have named it because the job
343
+ involves images, moodboards, visual references, inspiration, examples, style,
344
+ art direction, or translating one medium/domain into another output.
345
+
346
+ This pattern fails when a corpus becomes mostly about the target output medium.
347
+ For example, an art-direction-to-web mixtape can pass ordinary "web design"
348
+ coverage while still failing the real job: reading paintings, architecture,
349
+ photos, posters, sports identity, or other references and translating their
350
+ underlying qualities into product-design language.
351
+
352
+ Run four checks:
353
+
354
+ 1. **Input/reference-domain coverage.** Count substantive kept/trim sources from
355
+ at least two input/reference domains outside the target output medium. Count
356
+ by content evidence, not by passing mention. For web/UI targets, CSS,
357
+ accessibility, token, component, and design-system docs do not count here.
358
+ 2. **Translation-method coverage.** Count direct kept/trim sources that teach or
359
+ demonstrate the move from source qualities to target decisions. Generic
360
+ inspiration galleries, moodboard primers without translation, and target
361
+ mechanics do not count.
362
+ 3. **Caller-handoff coverage.** Confirm the corpus supports a concrete runtime
363
+ output shape: observations, interpretation, carry-forward rules, product or
364
+ implementation vocabulary, constraints, avoid-list, validation checks, and
365
+ clarification questions.
366
+ 4. **Constraint balance.** Confirm target-medium constraints are present when
367
+ needed but do not outnumber and replace the direct reference-reading and
368
+ translation evidence in the core action.
369
+
370
+ Default minimums for reference-translation:
371
+
372
+ - At least 2 distinct input/reference domains outside the target output medium.
373
+ - At least 3 substantive direct sources from those input/reference domains or
374
+ from cross-domain translation examples.
375
+ - At least 2 direct translation-method sources.
376
+ - At least 1 handoff/template/vocabulary source that shows how to make the
377
+ translation executable for the caller.
378
+
379
+ If any minimum is weak or missing, write `working/05-operating-fit-audit.md` with
380
+ `status: improvement_recommended`. Do not pass the corpus because general design,
381
+ implementation, accessibility, or platform sources are strong.
382
+
383
+ ### Required output
384
+
385
+ `working/04-quality-checks.md` must include:
386
+
387
+ ```
388
+ ## Test 8 — Capability-pattern fit
389
+
390
+ Pattern: reference-translation
391
+ Input/reference domains: [domain A: sources], [domain B: sources]
392
+ Translation-method sources: [source titles]
393
+ Caller-handoff sources: [source titles]
394
+ Constraint balance: [pass / weak / gap]
395
+ Finding: [pass / weak coverage / gap]
396
+ Action: [kept / backfilled / wrote working/05-operating-fit-audit.md]
397
+ ```
398
+
399
+ ---
400
+
169
401
  ## What to do when a test fails
170
402
 
171
403
  Don't paper over failures. The point of running the tests is to find problems while they're still cheap to fix.
172
404
 
173
405
  - **Redundancy fails:** drop the weaker source, update `working/03-evaluation.yaml` to reflect the change, document the decision in `working/04-quality-checks.md`.
174
- - **Coverage fails:** return to Phase 2 for the missing section. Fetch new candidates. Evaluate them. Come back to Phase 5 and re-run all four tests on the new keep-list.
406
+ - **Coverage fails:** return to Phase 2 for the missing section. Fetch new candidates. Evaluate them. Come back to Phase 5 and re-run all eight tests on the new keep-list.
175
407
  - **Disagreement fails:** find one strong dissenting source. Fetch it. Evaluate it. Add it to the keep-list with a note that names its role as counterpoint.
176
- - **Framing-gap fails:** this is the expensive one. Expand the knowledge map. Return to Phase 2. Find candidates for the new sections. Fetch, evaluate. Come back to Phase 5 with a substantially revised keep-list and re-run all four tests.
408
+ - **Framing-gap fails:** this is the expensive one. Expand the knowledge map. Return to Phase 2. Find candidates for the new sections. Fetch, evaluate. Come back to Phase 5 with a substantially revised keep-list and re-run all eight tests.
409
+ - **Note-quality fails:** rewrite weak notes in `working/03-evaluation.yaml` so each one carries a use cue, value/bar, and boundary. Do this from existing evidence; do not open a new search loop.
410
+ - **Source-role fit fails / Operating-fit fails:** write `working/05-operating-fit-audit.md` with the missing source role, why it matters, concrete search lanes for an improvement pass, and a short list of custom sources the user could add if public research remains thin.
177
411
 
178
412
  Each backtrack is a sign the methodology is working, not failing. The first four phases produced a corpus that worked from one angle; Phase 5 found the angle that wasn't covered. Better to find it here than in the empirical test (Phase 8) or — worse — silently, when the mixtape is in use.
179
413
 
@@ -181,7 +415,21 @@ Each backtrack is a sign the methodology is working, not failing. The first four
181
415
 
182
416
  ## Output: `working/04-quality-checks.md`
183
417
 
184
- Document each test, the finding, and the action taken. Even tests that passed without changes should be noted — "redundancy test: no redundant sources found." The working notes are part of the methodology; they show what work was actually done.
418
+ Document each test, the finding, and the action taken. Even tests that passed without changes should be noted — "core-action fit: 4 direct sources; no backfill" or "redundancy test: no redundant sources found." The working notes are part of the methodology; they show what work was actually done.
419
+
420
+ If an improvement pass is recommended, also write `working/05-operating-fit-audit.md`:
421
+
422
+ ```yaml
423
+ status: improvement_recommended
424
+ gap: The missing source role or weak evidence role.
425
+ why_it_matters: Why this gap would hurt a future AI agent using the corpus.
426
+ recommended_pass:
427
+ - Search lane or source type Liner should look for.
428
+ - Search lane or source type Liner should look for.
429
+ user_can_add:
430
+ - Concrete custom source the user could add if web research stays thin.
431
+ skip_note: What remains weaker if the user skips for now.
432
+ ```
185
433
 
186
434
  > TODO: Insert a sample `working/04-quality-checks.md` from the Cowork synthesis. The full structure with each test, the finding, and the resulting action is the most useful worked example in this file.
187
435
 
@@ -191,6 +439,6 @@ Document each test, the finding, and the action taken. Even tests that passed wi
191
439
 
192
440
  Phase 5 benefits from running with fresh attention. The first four phases build up a mental model of the corpus that biases how you see it — you remember why you kept each source, which makes redundancy easier to miss; you remember the candidate searches you ran, which makes the framing-gap easier to miss.
193
441
 
194
- If the conversation has been long, consider starting a separate chat with just the JTBD, the knowledge map, and the kept-source list (titles + notes only, no source content). Run the four tests there. The fresh chat doesn't carry the gathering pass's biases.
442
+ If the conversation has been long, consider starting a separate chat with just the JTBD, the knowledge map, the required source roles, and the kept-source list (titles + notes only, no source content). Run the quality tests there. The fresh chat doesn't carry the gathering pass's biases.
195
443
 
196
444
  This is optional, not required by the methodology. Mention the option to the curator. Quick mode users may prefer to continue in the same conversation for speed; methodology mode users often benefit from the reset.