linersh 0.5.4 → 0.5.6

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/README.md CHANGED
@@ -23,7 +23,15 @@ For JavaScript-rendered pages, run the setup command from the same npm install:
23
23
  liner setup-js
24
24
  ```
25
25
 
26
- That command is idempotent and downloads the Playwright browser used for `render: js` and automatic JS-wall fallback. For debugging or local development, `LINER_BIN=/path/to/liner liner` overrides the bundled binary.
26
+ That command is idempotent and downloads the Playwright browser used for `render: js` and automatic JS-wall fallback (about 150MB). The TUI also offers this during first-run onboarding, and again from compile results if a source needs JS rendering. For debugging or local development, `LINER_BIN=/path/to/liner liner` overrides the bundled binary.
27
+
28
+ To reset a machine for clean testing, run:
29
+
30
+ ```sh
31
+ liner uninstall --yes
32
+ ```
33
+
34
+ This removes `~/.liner`, Playwright's Chromium cache, and npm's `_npx` execution cache. It does not delete your mixtape project folders. If you installed Liner globally, also run `npm uninstall -g linersh`.
27
35
 
28
36
  ## Run
29
37
 
@@ -46,7 +54,8 @@ LINER_DIR=~/mixtapes liner
46
54
  | Key | Action |
47
55
  |---|---|
48
56
  | `↑` `↓` or `j` `k` | move selection |
49
- | `enter` or `e` | open in editor |
57
+ | `enter` or `o` | open the selected mixtape hub |
58
+ | `e` | open the selected mixtape source editor |
50
59
  | `n` | new mixtape (prompts for slug) |
51
60
  | `c` | compile selected |
52
61
  | `s` | share selected (zip to `.mixtape`) |
@@ -55,7 +64,21 @@ LINER_DIR=~/mixtapes liner
55
64
  | `r` | refresh |
56
65
  | `q` | quit |
57
66
 
58
- ### Editor
67
+ ### Project Hub
68
+ | Key | Action |
69
+ |---|---|
70
+ | `↑` `↓` | select phase |
71
+ | `enter` | run/open the selected phase's primary action |
72
+ | `e` | edit the selected artifact by hand |
73
+ | `p` | open the process manifest |
74
+ | `s` | share the mixtape |
75
+ | `o` | open the project folder |
76
+ | `esc` | back |
77
+ | `q` | quit |
78
+
79
+ Completed mixtapes land in a ready state. If `MIXTAPE.md` is current, pressing `enter` on Compile opens the existing compile result instead of fetching sources again. Press `r` from the compile result screen to explicitly re-run/retry.
80
+
81
+ ### Source Editor
59
82
  | Key | Action |
60
83
  |---|---|
61
84
  | `t` `d` `u` | edit title / description / curator |
@@ -107,24 +130,29 @@ For `web` sources the URL is the load-bearing field; the type is auto-detected a
107
130
  ### Compile
108
131
  | Key | Action |
109
132
  |---|---|
133
+ | `↑` `↓` | scroll sources |
134
+ | `pgup` `pgdn` | jump through sources |
135
+ | `j` | install JS rendering support when the result says it is needed |
110
136
  | `esc` | cancel running compile |
111
137
  | `y` | copy compiled `MIXTAPE.md` to clipboard (`pbcopy` / `xclip`) |
112
138
  | `s` | share the compiled mixtape (zip to `.mixtape`) |
113
- | `r` | re-run compile |
114
- | `b` | back to editor |
139
+ | `o` | open the project folder |
140
+ | `r` | retry failed sources / re-run compile |
141
+ | `b` | back to hub |
142
+ | `q` | quit |
115
143
 
116
- The compile writes `MIXTAPE.md` and `sources/NN-<slug>.md` files directly into the project folder. There's nothing to "save" afterwards — the artifacts are already on disk.
144
+ The compile writes `MIXTAPE.md` and `sources/NN-<slug>.md` files directly into the project folder. A partial compile is still treated as a usable finished state when `MIXTAPE.md` is written; the hub shows "compiled with warnings" and the compile result screen lists the remaining warnings. There's nothing to "save" afterwards — the artifacts are already on disk.
117
145
 
118
146
  ## Uninstalling
119
147
 
120
- The TUI ships in the same `linersh` package as the CLI. The cleanest path is the repo's uninstaller:
148
+ The TUI ships in the same `linersh` package as the CLI. For npm/npx installs, use the package uninstaller:
121
149
 
122
150
  ```sh
123
- ./scripts/uninstall.sh # interactive
124
- ./scripts/uninstall.sh --yes # no prompts
151
+ liner uninstall
152
+ liner uninstall --yes
125
153
  ```
126
154
 
127
- It removes the optional Playwright browser, the local cache, any pipx-installed CLI, and any globally installed TUI (`npm install -g linersh`). Your mixtape project folders are left alone unless you pass `--purge-workspace`. See the root [README — Uninstalling](../../README.md#uninstalling) for the manual recipe.
155
+ It removes `~/.liner`, Playwright's Chromium cache, and npm's `_npx` execution cache. Your mixtape project folders are left alone. If you installed Liner globally, also run `npm uninstall -g linersh`. See the root [README — Uninstalling](../../README.md#uninstalling) for the manual recipe.
128
156
 
129
157
  ## Develop
130
158
 
@@ -149,16 +177,17 @@ LINER_BIN=/path/to/liner npm run dev
149
177
  ## Architecture
150
178
 
151
179
  ```
152
- TapeBrowser ────► NewProjectPrompt ─┐
180
+ BootSplash ─────► TapeBrowser ──────► ProjectHub ──────┐
153
181
  │ │
154
182
  │ ImportPrompt ─────┤
155
183
  │ │
184
+ ├────► NewProjectWizard ─────┤
185
+ │ │
156
186
  ├────► TapeEditor ⇄ SourceModal
157
- │ │
158
- │ ▼
159
- │ CompileView (streams NDJSON from `liner compile --emit-events`)
160
- │
161
- └────► (share/delete inline)
187
+ │ │
188
+ ├────► PhaseRunner / gates / draft review
189
+ │ │
190
+ └────► CompileView (streams NDJSON from `liner compile --emit-events`)
162
191
  ```
163
192
 
164
193
  State is global via `AppContext`. YAML is parsed and re-written in Node via the `yaml` package's `Document` API so user-written block comments survive edits. All folder operations (`init`, `compile`, `share`, `import`, `list`) go through the Python CLI as subprocesses — the TUI never reimplements them.
package/bin/liner.js CHANGED
@@ -9,7 +9,8 @@
9
9
  import { fileURLToPath } from "node:url";
10
10
  import { createRequire } from "node:module";
11
11
  import { spawn, spawnSync } from "node:child_process";
12
- import { existsSync, readFileSync } from "node:fs";
12
+ import { existsSync, readFileSync, rmSync } from "node:fs";
13
+ import { homedir } from "node:os";
13
14
  import { dirname, join } from "node:path";
14
15
 
15
16
  const here = dirname(fileURLToPath(import.meta.url));
@@ -26,6 +27,11 @@ if (argv[0] === "--version" || argv[0] === "-v") {
26
27
  process.exit(0);
27
28
  }
28
29
 
30
+ if (argv[0] === "uninstall") {
31
+ const code = await runUninstall(argv.slice(1));
32
+ process.exit(code);
33
+ }
34
+
29
35
  const CLI_COMMANDS = new Set([
30
36
  "init",
31
37
  "replay",
@@ -129,6 +135,124 @@ function resolveCliBinary() {
129
135
  process.exit(1);
130
136
  }
131
137
 
138
+ async function runUninstall(args) {
139
+ if (args.includes("--help") || args.includes("-h")) {
140
+ console.log(
141
+ [
142
+ "Usage: liner uninstall [--yes] [--dry-run]",
143
+ "",
144
+ "Remove local Liner traces for a clean reinstall/test:",
145
+ " - ~/.liner config and source cache",
146
+ " - Playwright's Chromium browser cache",
147
+ " - npm's npx execution cache (_npx)",
148
+ "",
149
+ "This does not delete your mixtape project folders.",
150
+ "For global installs, also run: npm uninstall -g linersh",
151
+ ].join("\n"),
152
+ );
153
+ return 0;
154
+ }
155
+
156
+ const known = new Set(["--yes", "-y", "--dry-run"]);
157
+ const unknown = args.filter((arg) => !known.has(arg));
158
+ if (unknown.length > 0) {
159
+ console.error(`Unknown option: ${unknown.join(", ")}`);
160
+ console.error("Run `liner uninstall --help` for usage.");
161
+ return 1;
162
+ }
163
+
164
+ const yes = args.includes("--yes") || args.includes("-y");
165
+ const dryRun = args.includes("--dry-run");
166
+ const targets = uninstallTargets();
167
+
168
+ console.error("liner uninstall will remove:");
169
+ for (const target of targets) {
170
+ console.error(` - ${target.label}: ${target.path}`);
171
+ }
172
+ console.error("");
173
+ console.error("It will not delete your mixtape project folders.");
174
+
175
+ if (!yes && !dryRun) {
176
+ if (!process.stdin.isTTY) {
177
+ console.error("Refusing to run without a TTY prompt. Re-run with --yes.");
178
+ return 1;
179
+ }
180
+ const { createInterface } = await import("node:readline/promises");
181
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
182
+ const answer = (await rl.question("Continue? [y/N] ")).trim().toLowerCase();
183
+ rl.close();
184
+ if (answer !== "y" && answer !== "yes") {
185
+ console.error("Cancelled.");
186
+ return 1;
187
+ }
188
+ }
189
+
190
+ let failed = false;
191
+ for (const target of targets) {
192
+ if (dryRun) {
193
+ console.error(`[dry-run] would remove ${target.path}`);
194
+ continue;
195
+ }
196
+ try {
197
+ rmSync(target.path, { recursive: true, force: true });
198
+ console.error(`Removed ${target.path}`);
199
+ } catch (err) {
200
+ failed = true;
201
+ console.error(`Failed to remove ${target.path}: ${err.message}`);
202
+ }
203
+ }
204
+
205
+ if (dryRun) {
206
+ console.error("Dry run complete.");
207
+ return 0;
208
+ }
209
+ if (failed) return 1;
210
+ console.error("Liner local state and caches removed.");
211
+ console.error("For a global install, finish with: npm uninstall -g linersh");
212
+ return 0;
213
+ }
214
+
215
+ function uninstallTargets() {
216
+ const home = homedir();
217
+ return [
218
+ {
219
+ label: "Liner config and source cache",
220
+ path: join(home, ".liner"),
221
+ },
222
+ {
223
+ label: "Playwright Chromium cache",
224
+ path: playwrightCachePath(home),
225
+ },
226
+ {
227
+ label: "npm npx execution cache",
228
+ path: join(npmCachePath(home), "_npx"),
229
+ },
230
+ ];
231
+ }
232
+
233
+ function npmCachePath(home) {
234
+ const npm = spawnSync("npm", ["config", "get", "cache"], {
235
+ encoding: "utf8",
236
+ stdio: ["ignore", "pipe", "ignore"],
237
+ });
238
+ const configured = npm.status === 0 ? npm.stdout.trim() : "";
239
+ if (configured) return configured;
240
+ if (process.platform === "win32") {
241
+ return join(process.env.LOCALAPPDATA || join(home, "AppData", "Local"), "npm-cache");
242
+ }
243
+ return join(home, ".npm");
244
+ }
245
+
246
+ function playwrightCachePath(home) {
247
+ if (process.platform === "darwin") {
248
+ return join(home, "Library", "Caches", "ms-playwright");
249
+ }
250
+ if (process.platform === "win32") {
251
+ return join(process.env.LOCALAPPDATA || join(home, "AppData", "Local"), "ms-playwright");
252
+ }
253
+ return join(process.env.XDG_CACHE_HOME || join(home, ".cache"), "ms-playwright");
254
+ }
255
+
132
256
  function findBundledBinary() {
133
257
  const require = createRequire(import.meta.url);
134
258
  const target = `linersh-${process.platform}-${process.arch}`;
@@ -62,7 +62,7 @@ A curator who learns the methodology can apply it with or without Liner's tools.
62
62
 
63
63
  ## Project status
64
64
 
65
- Active development. The CLI and TUI are both functional and published on npm (current release v0.5.3, Mac + Linux). Both support the full v1.1 tape format — `youtube`, `web`, and `local_file` sources, with optional Playwright-backed JavaScript rendering for sites that need it (`pipx install 'linersh[js]'`, then `liner setup-js`). The library is empty pending its first methodology-mode entries. The `curating-mixtapes` skill and the MCP server are planned. Maintained as a side project — see [PLATFORM.md](./PLATFORM.md) for the maintenance contract.
65
+ Active development. The CLI and TUI are both functional and published on npm (current release v0.5.5, Mac, Linux, and Windows x64). Both support the full v1.1 tape format — `youtube`, `web`, and `local_file` sources, with optional Playwright-backed JavaScript rendering for sites that need it (`liner setup-js`, surfaced by the TUI during onboarding and compile warnings). The TUI now treats compilation as the completion milestone and opens existing compile results instead of rerunning by default. The library is empty pending its first methodology-mode entries. The `curating-mixtapes` skill ships inside the TUI package; the MCP server is planned. Maintained as a side project — see [PLATFORM.md](./PLATFORM.md) for the maintenance contract.
66
66
 
67
67
  ## License
68
68
 
@@ -0,0 +1,227 @@
1
+ # Liner AI Handoff
2
+
3
+ Last updated: 2026-06-01
4
+
5
+ This handoff summarizes the current Liner state after the 0.5.5 TUI/core release,
6
+ marketing-site launch-prep pass, and 0.5.6 source-extraction hardening prep. It
7
+ is intended for any AI agent continuing the work without the full chat history.
8
+
9
+ ## Current Product State
10
+
11
+ - `linersh@0.5.5` is published on npm and promoted to `latest`.
12
+ - The published Python core/platform packages are `0.5.5`; matching
13
+ `linersh-*@0.5.5` platform packages are published on npm and promoted to
14
+ `latest`.
15
+ - The repo is prepared for `0.5.6` (`pyproject.toml`, `src/liner/__init__.py`,
16
+ and `packages/tui/package.json`). It needs rebuilt platform packages because
17
+ the Python core changed.
18
+ - Platform packages are available for macOS arm64/x64, Linux arm64/x64, and Windows x64.
19
+ - The TUI is installed/tested locally from the packed tarball in `/tmp/liner-playwright-test`.
20
+ - The main tested mixtape is `staff-design-engenieer` (typo preserved in the folder name).
21
+ - Clean npm smoke passed with `npx linersh@latest --version`: `liner 0.5.5 (tui) · 0.5.5 (core)`.
22
+
23
+ ## Important Local Paths
24
+
25
+ - Active repo/worktree for this thread: `/Users/arturo/.codex/worktrees/875c/liner`
26
+ - Previous v0.5.5 implementation worktree: `/Users/arturo/.codex/worktrees/44f8/liner`
27
+ - Original Liner project folder: `/Users/arturo/Documents/Projects/Youtube Grabber/liner`
28
+ - Original mixtapes folder: `/Users/arturo/Documents/Projects/Youtube Grabber/liner/mixtapes`
29
+ - CMD-UX copied mixtapes folder: `/Users/arturo/Documents/Projects/CMD-UX/Case Studies/mixtapes`
30
+ - Local TUI test install: `/tmp/liner-playwright-test`
31
+ - 0.5.5 release artifacts: `/tmp/liner-release-artifacts-0.5.5`
32
+ - 0.5.6 release artifacts: `/tmp/liner-release-artifacts-0.5.6`
33
+ - Tested mixtape now moved back to: `/Users/arturo/Documents/Projects/Youtube Grabber/liner/mixtapes/staff-design-engenieer`
34
+
35
+ ## What Was Fixed In This Pass
36
+
37
+ 0.5.6 source-extraction hardening:
38
+
39
+ - Remote web PDFs are detected before HTML extraction and extracted through the
40
+ shared PDF helper. This prevents raw `%PDF-` bytes from entering generated
41
+ source Markdown.
42
+ - Bad web cache entries are purged and refetched when they contain raw PDF
43
+ bytes, stale PDF URL fallbacks, tiny soft/playwright fallback bodies, or
44
+ cookie-consent-only text.
45
+ - Server HTML that looks like an empty client-side app shell now raises
46
+ `JsRenderingRequired`, so existing auto-fallback can try Playwright.
47
+ - Cookie-consent-only output is rejected as unusable, including after Playwright
48
+ rendering. This is intentionally an honest failure, not an automatic
49
+ cookie-clicker.
50
+ - Partial compile output now says how many source files are usable versus
51
+ unavailable placeholders.
52
+
53
+ 0.5.5 TUI/core release:
54
+
55
+ - Skill bundle resolution for npm installs:
56
+ - TUI now resolves the bundled `cli-update-docs/SKILL.md` reliably from the installed package.
57
+ - `LINER_SKILL_PATH` can point either at the skill directory or at `SKILL.md`.
58
+
59
+ - Playwright/JS rendering onboarding:
60
+ - First-run TUI flow now asks whether to install JS rendering support after agent/model setup.
61
+ - Compile results that detect missing Chromium show a `JS rendering needed` callout.
62
+ - The callout says: `Some pages require headless Chromium to fetch correctly. Press j to run liner setup-js --yes (~150MB).`
63
+ - Pressing `j` runs setup and retries compile.
64
+
65
+ - Compile result UX:
66
+ - Long source lists use an internal viewport with `↑↓` and `pgup/pgdn`.
67
+ - PhaseRunner done screens use an internal viewport for the final response.
68
+ - Partial compiles now count as complete when `MIXTAPE.md` is written.
69
+ - The hub shows `Ready to use — compiled with warnings` when some sources failed.
70
+ - Pressing Enter on completed Compile opens the existing compile result instead of fetching again.
71
+ - Recompile/retry is explicit with `r` from CompileView.
72
+
73
+ - Web extraction fallback:
74
+ - `trafilatura` crashes are caught.
75
+ - Web handlers keep useful fallback text where possible and surface a soft warning instead of raw Python errors like `'NoneType' object is not subscriptable`.
76
+
77
+ - Clean reinstall:
78
+ - `liner uninstall` was added to the npm shim.
79
+ - It removes `~/.liner`, npm `_npx`, and Playwright Chromium cache.
80
+ - It does not remove mixtape project folders.
81
+
82
+ ## Known Gotchas
83
+
84
+ - The tested mixtape folder is misspelled `staff-design-engenieer`; do not silently rename it unless the user asks, because existing references and copied paths use that spelling.
85
+ - `LINER_BIN` matters during local testing. To test TUI changes plus local Python handler fixes, run the TUI with:
86
+
87
+ ```sh
88
+ cd /tmp/liner-playwright-test
89
+ LINER_BIN=/Users/arturo/.codex/worktrees/875c/liner/.venv/bin/liner ./node_modules/.bin/liner
90
+ ```
91
+
92
+ - Running `./node_modules/.bin/liner` without `LINER_BIN` uses the bundled platform binary, which may not include local Python source edits until platform packages are rebuilt.
93
+ - If Python source changed, publishing only the main `linersh` package is not
94
+ enough. Rebuild and publish all platform packages at the same version first.
95
+ - Cookie-banner auto-dismissal is not implemented in 0.5.6. The safety net is
96
+ to reject cookie-only output; a future dismissal pass should keep that final
97
+ rejection in place.
98
+ - The TUI package generated `packages/tui/cli-update-docs/` during `prepack`; the canonical docs live at repo-root `cli-update-docs/`.
99
+ - The old root `docs/` folder was removed. `LINER-MASTER.md` now lives at `cli-update-docs/LINER-MASTER.md`.
100
+ - The Jhey source URL currently 404s on the live site. The useful archived version is:
101
+
102
+ ```text
103
+ https://web.archive.org/web/20250408204038id_/https://jhey.dev/cheep/rotating-gallery-with-css-scroll-driven-animations/
104
+ ```
105
+
106
+ ## Verification Already Run
107
+
108
+ TUI package:
109
+
110
+ ```sh
111
+ cd /Users/arturo/.codex/worktrees/875c/liner/packages/tui
112
+ npm run typecheck
113
+ npm run build
114
+ npm test
115
+ npm pack --json
116
+ ```
117
+
118
+ Python suite:
119
+
120
+ ```sh
121
+ cd /Users/arturo/.codex/worktrees/875c/liner
122
+ uv run --extra dev pytest
123
+ ```
124
+
125
+ Result from the latest full Python run in this pass: `190 passed, 1 deselected`.
126
+
127
+ Release-prep verification:
128
+
129
+ ```sh
130
+ cd /Users/arturo/.codex/worktrees/875c/liner/packages/tui
131
+ npm ci
132
+ npm run typecheck
133
+ npm test
134
+ npm run build
135
+ npm pack --dry-run
136
+
137
+ cd /Users/arturo/.codex/worktrees/875c/liner
138
+ python3 -m compileall -q src/liner
139
+ uv run --extra dev pytest
140
+ ```
141
+
142
+ Results: TUI `92 passed`; Python `179 passed, 1 skipped, 1 deselected`.
143
+
144
+ Platform artifact workflow:
145
+
146
+ ```text
147
+ Status: latest post-release-prep run is green; check `gh run list --workflow platform-bundles.yml --limit 3` if you need the current run ID.
148
+ Artifacts downloaded to: /tmp/liner-release-artifacts-0.5.5
149
+ Local npm bundle smoke: liner 0.5.5 (tui) · 0.5.5 (core)
150
+ ```
151
+
152
+ npm release smoke:
153
+
154
+ ```sh
155
+ rm -rf ~/.npm/_npx
156
+ npx linersh@latest --version
157
+ # liner 0.5.5 (tui) · 0.5.5 (core)
158
+ ```
159
+
160
+ ## Useful Test Commands
161
+
162
+ Install the local TUI tarball into the scratch project:
163
+
164
+ ```sh
165
+ cd /tmp/liner-playwright-test
166
+ npm install /tmp/liner-release-artifacts-0.5.5/linersh-darwin-arm64/linersh-darwin-arm64-0.5.5.tgz /tmp/liner-release-artifacts-0.5.5/linersh-tui/linersh-0.5.5.tgz
167
+ ```
168
+
169
+ Run the TUI against the local Python core:
170
+
171
+ ```sh
172
+ cd /tmp/liner-playwright-test
173
+ LINER_BIN=/Users/arturo/.codex/worktrees/875c/liner/.venv/bin/liner ./node_modules/.bin/liner
174
+ ```
175
+
176
+ Force a fresh compile/fetch:
177
+
178
+ ```sh
179
+ cd /tmp/liner-playwright-test
180
+ LINER_BIN=/Users/arturo/.codex/worktrees/875c/liner/.venv/bin/liner ./node_modules/.bin/liner cache clear --yes
181
+ LINER_BIN=/Users/arturo/.codex/worktrees/875c/liner/.venv/bin/liner ./node_modules/.bin/liner
182
+ ```
183
+
184
+ Run JS setup explicitly:
185
+
186
+ ```sh
187
+ cd /tmp/liner-playwright-test
188
+ LINER_BIN=/Users/arturo/.codex/worktrees/875c/liner/.venv/bin/liner ./node_modules/.bin/liner setup-js --yes
189
+ ```
190
+
191
+ Clean local state for reinstall testing:
192
+
193
+ ```sh
194
+ liner uninstall --yes
195
+ npm uninstall -g linersh 2>/dev/null || true
196
+ ```
197
+
198
+ ## Documentation State
199
+
200
+ Canonical docs now live in `cli-update-docs/`:
201
+
202
+ - `LINER-MASTER.md` — current conceptual and technical overview.
203
+ - `AI-HANDOFF.md` — this document.
204
+ - `TUI-BACKLOG.md` — backlog and done log.
205
+ - `MIXTAPE-FORMAT.md` — tape/mixtape format.
206
+ - `CURATION.md` — methodology.
207
+ - `SKILL.md` and companion files — bundled curation skill.
208
+
209
+ Package-specific docs still live in `packages/tui/`:
210
+
211
+ - `packages/tui/README.md`
212
+ - `packages/tui/PUBLISH-CHECKLIST.md`
213
+ - `packages/tui/PLATFORM-BUNDLES.md`
214
+
215
+ ## Suggested Next Work
216
+
217
+ - Deploy the marketing site from `marketing/site` once DNS/Vercel details are ready.
218
+ - Update the public website docs and changelog for 0.5.6 after the release
219
+ artifacts are ready.
220
+ - Consider a conservative Playwright cookie-banner dismissal pass for common,
221
+ low-risk labels, while still rejecting cookie-only output if dismissal fails.
222
+ - Consider surfacing extraction mode/body length in the TUI compile details.
223
+ - Consider adding `liner doctor-source <url>` or equivalent single-source
224
+ diagnostics.
225
+ - Consider adding Wayback as an automatic fetcher tier between Playwright and agent-summary fallback.
226
+ - Add per-source failure actions in CompileView: open URL, drop source, retry one source.
227
+ - Add a regression test for completed Compile opening existing results rather than running `streamCompile`.
@@ -26,7 +26,7 @@ Until a real validator exists, the JTBD master prompt's internal rubric is the a
26
26
  | `cli-update-docs/SKILL.md` | The `curating-mixtapes` skill's Phase 1 paragraph defines what a tight JTBD looks like. Replace examples and any embedded house-form templates. |
27
27
  | `cli-update-docs/JTBD-MASTER-PROMPT.md` | Drop in the revised version from the previous turn. |
28
28
  | `cli-update-docs/JTBD-MASTER-PROMPT-ABOUT.md` | Substantial rewrite. The current doc explicitly defends choosing the house form over Job Story as a deliberate deviation from the mixtape's synthesis. The new framing inverts: "we initially diverged, then realigned." Update §"Where it came from," the Liner's-house-form choice in §"Design choices worth understanding," and any other instances. |
29
- | `docs/LINER-MASTER.md` | Project-level overview. Sweep for house-form references and example JTBDs. |
29
+ | `cli-update-docs/LINER-MASTER.md` | Project-level overview. Sweep for house-form references and example JTBDs. |
30
30
 
31
31
  ## Files to check (categories — likely exist, names not confirmed)
32
32
 
@@ -130,4 +130,4 @@ A few decisions in the prompt aren't obvious and have been pushed back on during
130
130
  - The Liner curation methodology that places this work in Phase 1: [`cli-update-docs/CURATION.md`](./CURATION.md)
131
131
  - The skill that will likely embed this prompt: [`cli-update-docs/SKILL.md`](./SKILL.md)
132
132
  - The mixtape format spec defining the `jtbd:` field the prompt's output lands in: [`cli-update-docs/MIXTAPE-FORMAT.md`](./MIXTAPE-FORMAT.md)
133
- - Project-level overview of Liner: [`docs/LINER-MASTER.md`](../docs/LINER-MASTER.md)
133
+ - Project-level overview of Liner: [`LINER-MASTER.md`](./LINER-MASTER.md)