feat(connections): Harmoniqs Cloud is connectable where Pasqal is - #92
Merged
Conversation
The solver row said "API key connected" and "Runs in the cloud" — which cloud was never stated, on the one control where a user commits to a paid service. Every refusal they can hit downstream now says "Harmoniqs Cloud" (amico-run's local-launch refusal, the hpc gate), so the control that sends them there should use the same name. The connected tooltip also states the consequence — every solve on this solver runs there — since that is the thing users were guessing about. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reported: "where is our harmoniqs cloud, where can I put an API key in" — and separately, switching to Piccolissimo + Altissimo appeared to do nothing. Both trace to amicode#200. It filtered company-compute OUT of the Connections tab and renamed it "Solver API key", moving the whole connect flow inside the solver capsule's collapsed card. The reasoning was sound in isolation (one credential for one service, not a second product), but the result was that Pasqal Cloud rendered as a connectable service in the place that lists clouds and OURS did not. Users went looking for it exactly where Pasqal is. - statusTabConnections() no longer filters. Harmoniqs Cloud renders as a card beside Pasqal Cloud, with the base-url-token form (Service URL + API key) the tab already supported for non-Pasqal ids — so this is un-hiding a working flow, not building a new one. Kept as a function so there is still one obvious place to filter a genuinely internal connection later. - connectionTitle() returns "Harmoniqs Cloud". In a list whose other entry is "Pasqal Cloud", "Solver API key" read as a settings field rather than our service — and Harmoniqs Cloud is the name every downstream refusal already uses (amico-run's local-launch refusal, the hpc gate). - The solver row now states its connection state (CONNECTED / CHECK KEY / ADD KEY). With a key already on file, clicking HP correctly activates without re-asking — but the status dot lived inside the collapsed card, so the row had no way to say so and a successful switch was indistinguishable from a no-op. Text rather than a bare dot: Kate's idiom is that the dot accompanies words, and words survive colour-blindness and a screenshot. It also says what a click will do. The wire id stays company-compute — renaming it would break the credential route, the status cache, and CONNECTION_IDS for no user-visible gain. Both entry points write the same credential, so connecting in either shows up in both. ui: 57 pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jack-champagne
force-pushed
the
rchari/harmoniqs-cloud-copy
branch
from
July 28, 2026 22:52
7eab475 to
67bfdf7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The reports
Why both happened
Both trace to amicode#200, and neither was a broken wire.
statusTabConnections()filteredcompany-computeout of the Connections tab andconnectionTitle()renamed it "Solver API key", moving the whole connect flow inside the solver capsule's collapsed card. The reasoning was sound in isolation — one credential for one service, not a second product. The effect was not: Pasqal Cloud rendered as a connectable service in the place that lists clouds, and ours did not. So people went looking for Harmoniqs Cloud exactly where Pasqal is, and found nothing.Report 2 has a different cause and is not a bug: with a valid key on file
hpClickAction("connected")returns"activate", so clicking HP switches immediately instead of re-asking. Correct — but the status dot lived inside the collapsed card, so the row had no way to say "you're already connected," and a successful switch was indistinguishable from a no-op. (Verified live: the server reportedcompany-compute → state: "connected", identityraghav-internal.)Changes
statusTabConnections()no longer filters. Harmoniqs Cloud renders as a card beside Pasqal Cloud, using thebase-url-tokenform (Service URL + API key) the tab already supported for non-Pasqal ids — so this un-hides a working flow rather than building a new one. Kept as a function so there's still one obvious place to filter a genuinely internal connection later.connectionTitle()→ "Harmoniqs Cloud". In a list whose other entry is "Pasqal Cloud", "Solver API key" read as a settings field rather than our service — and Harmoniqs Cloud is the name every downstream refusal already uses (amico-run's local-launch refusal, thehpcgate).CONNECTED/CHECK KEY/ADD KEY. Text rather than a bare dot: Kate's idiom is that the dot accompanies words, words survive colour-blindness and a screenshot, and it says what a click will do.Not changed
The wire id stays
company-compute— renaming it would break the credential route, the status cache, andCONNECTION_IDSfor no user-visible gain. Both entry points (tab and capsule) write the same credential, so connecting in either shows up in both.Testing
ui: 57 pass.turbo typecheck: 23/23. Strings verified present in the builtdarwin-arm64binary, which is vendored and serving the running dev host.The two filter tests that pinned #200's removal are rewritten to pin the opposite, with the regression spelled out — including that a compute-only list must still render a card rather than hit the empty state.
Reviewer note
This reverses a deliberate #200 decision (Kate's, on presentation grounds). Worth a look from her: the disagreement is only about where the credential is entered, not about the one-credential model, and the capsule affordance is untouched.