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.
20 lines
1.1 KiB
JavaScript
20 lines
1.1 KiB
JavaScript
// The artist page's discography cards carry the record sheet too: a long
|
|
// press on a family opens the sheet for its primary edition.
|
|
const fs = require('fs');
|
|
const p = 'F:/Coding/SoulStream/src/mobile/screens/Artist.svelte';
|
|
let s = fs.readFileSync(p, 'utf8');
|
|
const a = ` onclick={() => openFamily(f)}
|
|
/>`;
|
|
if (!s.includes(a) || s.indexOf(a) !== s.lastIndexOf(a)) throw new Error('family card anchor');
|
|
s = s.replace(a, () => ` onclick={() => openFamily(f)}
|
|
onmore={() => openHalf("catalogAlbum", { album: { ...(f.editions?.[0] ?? f), artist: name } })}
|
|
/>`);
|
|
if (!/import \{[^}]*\bopenHalf\b[^}]*\} from "\.\.\/nav\.svelte\.js"/.test(s)) {
|
|
const m = s.match(/import \{ ([^}]*) \} from "\.\.\/nav\.svelte\.js";/);
|
|
if (!m) throw new Error('nav import');
|
|
s = s.replace(m[0], `import { ${m[1]}, openHalf } from "../nav.svelte.js";`);
|
|
}
|
|
if (!/let \{[^}]*\bname\b[^}]*\} = \$props\(\)/.test(s)) throw new Error('the artist page has no `name` prop');
|
|
fs.writeFileSync(p, s);
|
|
console.log('artist cards carry the sheet');
|