Skip to content

Deployment doc: recommend cloud over docker, defuse the slug question, offer OpenRouter - #8

Merged
ReganBell merged 4 commits into
mainfrom
deploy-doc-onboarding
Jul 29, 2026
Merged

Deployment doc: recommend cloud over docker, defuse the slug question, offer OpenRouter#8
ReganBell merged 4 commits into
mainfrom
deploy-doc-onboarding

Conversation

@ReganBell

@ReganBell ReganBell commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

An agent following the generated deployment.md currently quizzes a first-time operator with questions they can't answer well:

  • It can present the docker target as the recommended path (it's the qm init default), when docker is only meant for a quick local test drive. The doc now says to recommend a cloud provider (Fly.io when the operator has no preference) and never present docker as the path for a real deployment.
  • It makes the org slug a standalone decision, and operators reasonably wonder whether it must be globally unique. It doesn't — it's a local name used in the package name, resource names, and Slack branding. The doc now says to derive it from the organization's name and confirm it in passing.
  • It offers only Anthropic and OpenAI as model providers, though OpenRouter is fully supported (core config OPENROUTER_API_KEY and the Admin key-validation endpoint). The doc now lists all three and notes that "decide later" is fine since the key is entered on the Admin page.

Also glosses the slug the same way in docs/getting-started.md.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.

ReganBell and others added 3 commits July 29, 2026 14:21
…offer OpenRouter

An agent following deployment.md quizzed a new operator with questions they
can't answer: it presented docker as the recommended target (it's only the
init default), made the org slug a standalone decision (it's a local, non-
unique name), and omitted OpenRouter (fully supported in core config and the
Admin key-validation endpoint).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rkflow

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ReganBell

Copy link
Copy Markdown
Collaborator Author

Also rewrites the sign-in email guidance: the agent now asks what the operator already uses for email instead of presenting a transport menu (SMTP vs Resend, DKIM/SPF). SMTP with an existing account is the recommended default; Resend is for operators who prefer it and control DNS.

@ReganBell
ReganBell merged commit e9334da into main Jul 29, 2026
15 checks passed
@ReganBell
ReganBell deleted the deploy-doc-onboarding branch July 29, 2026 22:06
ReganBell added a commit that referenced this pull request Jul 29, 2026
…, offer OpenRouter (#8)

* deploy docs: steer new operators to cloud, defuse the slug question, offer OpenRouter

An agent following deployment.md quizzed a new operator with questions they
can't answer: it presented docker as the recommended target (it's only the
init default), made the org slug a standalone decision (it's a local, non-
unique name), and omitted OpenRouter (fully supported in core config and the
Admin key-validation endpoint).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Address review: slug is Fly appPrefix default; docker outside this workflow

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Email sign-in: ask what the operator already uses, recommend SMTP

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Jackallink pushed a commit to Jackallink/qm that referenced this pull request Sep 6, 2026
…guard hydrate

src/wiring.ts stopWithBackstop hard-exit path used
.finally(() => process.exit(0)). If releaseInFlightRuns rejected, the failure
was logged implicitly and the exit was still 0, so containers/systemd saw a
clean shutdown and never restarted. The graceful-stop failure path had the
same issue at line 328. Also, void identity.hydrate() at line 460 dropped the
derived promise, so a slow/dead identity store unhandled-rejected into a Node
crash.

Replace the hard-exit .finally with a .then(onResolve, onReject) that exits 1
on rejection after logging errMessage(e); the graceful-stop failure path now
.catch()es then .finally()es exit(1). Add .catch(() => undefined) to
identity.hydrate so a dead identity backend cannot crash the boot. configStore.
hydrate at line 491 is the same pattern and filed as
Jackallink/qm-integration#14.

Refs: Jackallink/qm-integration#8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant