Four shipped patches on a read-only shelf: ✦ the heartbeat (boom-bap, mpc 8-4, kick duck), ✦ the wheel within the wheel (WHEELS polymeter — kick 16 / hat 12 / clap 10), ✦ the squeeze (GODSQUASH — the market & quakes pump the master), ✦ quiet arrival (gentle earth-echo ambient, no drums). git-tracked in factory/, authored in the client's serializePatch shape. Course-correction from the brief's stale anchor: the template select reads /api/presets (account-based, auth.py), NOT the hub's legacy patchList — so the factory shelf is injected there. list_factory() + load_factory() prepend the ✦ patches for every signed-in player; PUT/DELETE on a ✦ name → 403 (read-only); a missing factory/ degrades to []. test_factory.py (deploy-excluded) validates shape. Verified: HTTP dispatch serves the 4 ✦ names leading the list, loads one, rejects writes (403), user saves still work, traversal/missing → None, zero index.html changes. Taste disclaimer: these are structural drafts — correct shape is the deliverable, beauty is the human's. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
1.2 KiB
JSON
57 lines
1.2 KiB
JSON
{
|
|
"name": "✦ quiet arrival",
|
|
"data": {
|
|
"routes": [
|
|
{
|
|
"source": "astro.moon",
|
|
"dest": "echo.wet",
|
|
"amount": 0.6,
|
|
"curve": "lin",
|
|
"gate": null,
|
|
"quantize": null,
|
|
"label": "the moon opens the echo"
|
|
},
|
|
{
|
|
"source": "weather.wind",
|
|
"dest": "echo.time",
|
|
"amount": 0.5,
|
|
"curve": "scurve",
|
|
"gate": null,
|
|
"quantize": null,
|
|
"label": "the wind whips the tape speed"
|
|
},
|
|
{
|
|
"source": "sky.elev",
|
|
"dest": "pad.brightness",
|
|
"amount": 0.7,
|
|
"curve": "scurve",
|
|
"gate": null,
|
|
"quantize": null,
|
|
"label": "the sun brightens the pads"
|
|
},
|
|
{
|
|
"source": "sun.speed",
|
|
"dest": "reverb.size",
|
|
"amount": 0.5,
|
|
"curve": "lin",
|
|
"gate": null,
|
|
"quantize": null,
|
|
"label": "the solar wind sizes the room"
|
|
}
|
|
],
|
|
"tweaks": {},
|
|
"seqs": {},
|
|
"bpm": 64,
|
|
"groove": {
|
|
"amount": 1,
|
|
"preset": "straight",
|
|
"swing": 0,
|
|
"humanize": 0,
|
|
"velo": 0
|
|
},
|
|
"scale": {
|
|
"root": 5,
|
|
"name": "major"
|
|
}
|
|
}
|
|
} |