πŸš€ Amy Rocket Launch Channels β€” quick-start

Intent: let Amy listen in one or more normal Discord channels without instantly running every message. Amy adds πŸš€; the original author can edit/improve the message; when they click πŸš€, Amy launches the final prompt into a new thread and mirrors progress back to the channel dashboard.

🏷️ Naming β€” Ompcord vs Amy. Ompcord is the omp⇄Discord bridge (product/plugin); Amy is the bot persona it runs. You install Ompcord; Amy is who answers. Rename phases 1–5 are complete at docs/command/runtime/package level: package name ompcord, wrapper runtime ompcordd.mjs/ompcordd.service, and compatibility for amyd.mjs, /amy, /pi-discord-remote, legacy config, and ~/.omp/amy-sessions/. Repo directory stays pi-discord-amy until final filesystem cutover. See the rename plan.*

flowchart TD
  A[πŸ’¬ Allow-listed user posts in launch channel] --> B[πŸ€– Amy reacts πŸš€]
  B --> C[✍️ User may edit/improve message]
  C --> D{πŸš€ Same author clicks?}
  D -- no --> X[πŸ›‘οΈ Ignore: wrong emoji/user/channel]
  D -- yes --> E[πŸ“Š Amy replies with channel dashboard embed]
  E --> F[🧡 Dashboard message starts session thread]
  F --> G[🧠 Thread runs omp prompt]
  G --> H[πŸͺž Thread dashboard mirrors progress to channel dashboard]
  H --> I[βœ… Done / ❌ Failed]

βš™οΈ Config

# πŸš€ Channels Amy primes with rocket. Defaults to DISCORD_HOME_CHANNEL_ID.
AMY_LAUNCH_CHANNEL_IDS=1513664007146438666
 
# βœ‚οΈ Future-proof: other emojis can become plan/debug/review later. v1 = rocket only.
AMY_LAUNCH_EMOJI=πŸš€

🧠 Exact behavior

StepWhat happensWhy
1User posts a normal message in a launch channelπŸ’¬ Keeps Discord natural; no slash ceremony.
2Amy reacts with πŸš€πŸ§· Arms the message but does not run yet.
3User edits message if desired✍️ Prompt can be improved before launch.
4Same author clicks πŸš€πŸ›‘οΈ Prevents other users from launching someone else’s prompt.
5Amy replies with a channel embed dashboardπŸ“Š Visible outside powerpanel, linked to source message.
6Dashboard message starts a thread🧡 Session context stays contained.
7Thread dashboard mirrors to channel dashboardπŸͺž Outside channel sees progress without thread diving.

πŸ›‘οΈ Safety invariants

flowchart LR
  A[Reaction event] --> B{Emoji is πŸš€?}
  B -- no --> Z[Ignore]
  B -- yes --> C{Message channel is launch channel?}
  C -- no --> Z
  C -- yes --> D{User allow-listed?}
  D -- no --> Z
  D -- yes --> E{User is original author?}
  E -- no --> Z
  E -- yes --> F{Prompt non-empty?}
  F -- no --> Z
  F -- yes --> G[Launch once]
  • 🚫 Bot messages and bot reactions are ignored.
  • πŸ‘€ Only the original allow-listed author can trigger their own message.
  • 🧷 Source message id is reserved as pending before awaits, blocking rapid double-click duplicate threads.
  • 🧹 If reply/thread creation fails, the reservation is removed so the user can retry.
  • πŸͺž Mirror edits are best-effort; failing outside dashboard edits never kill the thread run.

🧩 Implementation map

FileRole
launch.mjsPure launch predicates: parse channels, prime checks, trigger checks.
amyd.mjsGateway handlers: react with πŸš€, launch on reaction, create outside dashboard + thread.
dashboard.mjsOne embed object edits both the thread dashboard and outside mirror.
launch.test.mjsUnit proof for allow-list/channel/author/emoji guards.

πŸ–₯️ Compact code comments rule

Keep comments short, practical, and emoji-scannable:

// πŸš€ Prime only; user may edit before confirming by clicking the same rocket.
// 🧷 Reserve before awaits so rapid double-clicks cannot spawn duplicate threads.
// 🧡 The channel dashboard owns the session thread, preserving visible source relation.
// πŸͺž Mirrors are outside powerpanels; failures are non-fatal Discord I/O.

βœ… Verification checklist

flowchart TD
  A[πŸ§ͺ node --check] --> B[πŸ§ͺ bun test]
  B --> C[πŸ“š hugo --minify]
  C --> D{Live daemon idle?}
  D -- no --> E[⏸️ Wait; do not sever active run]
  D -- yes --> F[πŸš€ redeploy]
  F --> G[πŸ’¬ Post in launch channel]
  G --> H[πŸ€– Amy adds πŸš€]
  H --> I[πŸ‘€ Author clicks πŸš€]
  I --> J[πŸ“Š Channel dashboard appears]
  J --> K[🧡 Thread starts]
  K --> L[πŸͺž Progress mirrors]

Commands:

cd ~/pi-discord-amy
node --check amyd.mjs && node --check ompcordd.mjs && node --check dashboard.mjs && node --check launch.mjs
bun test
 
cd ~/funday/dev/docs
hugo --minify

🧭 Future reaction modes

EmojiFuture meaningStatus
πŸš€Normal runβœ… v1 implemented
πŸ“Plan modeplanned
🐞Debug modeplanned
πŸ”Review modeplanned

Do not add more modes until πŸš€ is live-smoked and stable.