Files
SoulStream/handoff/rounds/ins-r36-importer-start.txt
T
KeelrLeek 9f0601027c android: the handoff — the pending rounds, the pipeline, and what is unverified
Everything written this session that has not been through the device: rounds 43
to 48 (each patch adversarially verified, 43's transient-notice expectation
fixed), a partial round 49, the pipeline scripts, the Android Auto design and
the icon comparison mock. Also the two harness changes that were never A/B'd —
adaptive waits, which may only shorten a declared wait and never lengthen it,
and a ship that runs the mock walk and the deploy at the same time. The A/B and
its 255-step baseline are in handoff/tools; main stays at what the phone has
actually walked.
2026-09-14 07:57:41 -05:00

23 lines
1.2 KiB
Plaintext

/** Stage a playlist FILE. The name travels beside the path rather than
* being read off it: the picked document's own name is what chooses the
* parser and titles the draft, and a document the phone had no path for
* arrives as a cache copy. Rows naming a file by a relative path resolve
* against the file's own folder; a copied file's rows fall back to the
* library's basename index, so they still find what this phone holds. A
* playlist file does produce stream rows, so the catalog pass runs. */
export async function startFile(path, name) {
const g = ++gen;
Object.assign(importer, { door: "file", source: path, busy: true, error: "", progress: null, draft: null, name: "", includeUnresolved: true, checks: {}, committing: false, links: false });
try {
const draft = await api.playlistImportProbe(path, name);
if (g !== gen) return;
importer.busy = false;
if (!draft) { importer.error = "Nothing came back from that file."; return; }
importer.draft = draft;
importer.name = draft.name ?? "";
if (draft.entries?.length) queueMicrotask(() => void verifyStreams(g));
} catch (e) {
if (g === gen) { importer.error = String(e); importer.busy = false; }
}
}