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 +45 -16
- package/bin/liner.js +125 -1
- package/cli-update-docs/ABOUT.md +1 -1
- package/cli-update-docs/AI-HANDOFF.md +227 -0
- package/cli-update-docs/JOB-STORY-MIGRATION.md +1 -1
- package/cli-update-docs/JTBD-MASTER-PROMPT-ABOUT.md +1 -1
- package/cli-update-docs/LINER-MASTER.md +546 -0
- package/cli-update-docs/MIXTAPE-FORMAT.md +2 -2
- package/cli-update-docs/PLATFORM.md +2 -2
- package/cli-update-docs/README.md +11 -9
- package/cli-update-docs/SKILL.md +3 -3
- package/cli-update-docs/TUI-BACKLOG.md +8 -2
- package/dist/App.js +15 -7
- package/dist/App.js.map +1 -1
- package/dist/config.js +20 -12
- package/dist/config.js.map +1 -1
- package/dist/ipc.js +9 -0
- package/dist/ipc.js.map +1 -1
- package/dist/phases.js +2 -2
- package/dist/phases.js.map +1 -1
- package/dist/screens/AgentSetup.js +8 -3
- package/dist/screens/AgentSetup.js.map +1 -1
- package/dist/screens/CompileView.js +270 -16
- package/dist/screens/CompileView.js.map +1 -1
- package/dist/screens/JsSetup.js +77 -0
- package/dist/screens/JsSetup.js.map +1 -0
- package/dist/screens/PhaseRunner.js +69 -20
- package/dist/screens/PhaseRunner.js.map +1 -1
- package/dist/screens/ProjectHub.js +81 -26
- package/dist/screens/ProjectHub.js.map +1 -1
- package/dist/store.js.map +1 -1
- package/package.json +6 -6
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 `
|
|
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
|
-
###
|
|
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
|
-
| `
|
|
114
|
-
| `
|
|
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.
|
|
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
|
-
|
|
124
|
-
|
|
151
|
+
liner uninstall
|
|
152
|
+
liner uninstall --yes
|
|
125
153
|
```
|
|
126
154
|
|
|
127
|
-
It removes
|
|
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
|
|
180
|
+
BootSplash ─────► TapeBrowser ──────► ProjectHub ──────┐
|
|
153
181
|
│ │
|
|
154
182
|
│ ImportPrompt ─────┤
|
|
155
183
|
│ │
|
|
184
|
+
├────► NewProjectWizard ─────┤
|
|
185
|
+
│ │
|
|
156
186
|
├────► TapeEditor ⇄ SourceModal
|
|
157
|
-
│
|
|
158
|
-
|
|
159
|
-
│
|
|
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}`;
|
package/cli-update-docs/ABOUT.md
CHANGED
|
@@ -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.
|
|
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: [`
|
|
133
|
+
- Project-level overview of Liner: [`LINER-MASTER.md`](./LINER-MASTER.md)
|