Skip to content

feat(desktop): add fuzzy onboarding cards - #2141

Merged
wesbillman merged 2 commits into
mainfrom
fuzzy-containers-and-alignment
Jul 19, 2026
Merged

wesbillman merged 2 commits into
mainfrom
fuzzy-containers-and-alignment

Conversation

@cynfria

@cynfria cynfria commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Why

Give onboarding’s key, invite, community, and runtime surfaces a consistent fuzzy-card treatment while keeping the layout usable at the minimum desktop window width.

What

  • Apply the shared textured card surface across community and machine onboarding
  • Add responsive wide-card sizing and align onboarding content and controls
  • Extend Card composition and textured-card minimum-height support
  • Keep invalid-invite feedback below the translated card without affecting form flow

Risk Assessment

Low to medium — desktop onboarding visuals and layout change, plus a backward-compatible shared Card API extension; no backend, persistence, or navigation behavior changes.

References

  • pnpm check
  • pnpm typecheck
  • pnpm test — 3,180 tests passed
  • Pre-push suite — desktop, mobile, Rust, and Tauri tests passed

Generated with Codex

Co-authored-by: npub19x6jnl6rhepymwyl2xlltz3ce7rfg2ktllle3g2vu59n3s490k8s9n40l3 <29b529ff43be424db89f51bff58a38cf86942acbffff98a14ce50b38c2a57d8f@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub19x6jnl6rhepymwyl2xlltz3ce7rfg2ktllle3g2vu59n3s490k8s9n40l3 <29b529ff43be424db89f51bff58a38cf86942acbffff98a14ce50b38c2a57d8f@sprout-oss.stage.blox.sqprod.co>
@cynfria
cynfria marked this pull request as ready for review July 19, 2026 20:11
@cynfria
cynfria requested a review from a team as a code owner July 19, 2026 20:11
Keep the join choice in the usable vertical lane and assert the textured card surface rather than the obsolete solid host frame.

Co-authored-by: npub19x6jnl6rhepymwyl2xlltz3ce7rfg2ktllle3g2vu59n3s490k8s9n40l3 <29b529ff43be424db89f51bff58a38cf86942acbffff98a14ce50b38c2a57d8f@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub19x6jnl6rhepymwyl2xlltz3ce7rfg2ktllle3g2vu59n3s490k8s9n40l3 <29b529ff43be424db89f51bff58a38cf86942acbffff98a14ce50b38c2a57d8f@sprout-oss.stage.blox.sqprod.co>
@wesbillman
wesbillman merged commit e84f3fe into main Jul 19, 2026
25 checks passed
@wesbillman
wesbillman deleted the fuzzy-containers-and-alignment branch July 19, 2026 21:18
BradGroux pushed a commit to BradGroux/buzz that referenced this pull request Aug 23, 2026
Signed-off-by: npub19x6jnl6rhepymwyl2xlltz3ce7rfg2ktllle3g2vu59n3s490k8s9n40l3 <29b529ff43be424db89f51bff58a38cf86942acbffff98a14ce50b38c2a57d8f@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub19x6jnl6rhepymwyl2xlltz3ce7rfg2ktllle3g2vu59n3s490k8s9n40l3 <29b529ff43be424db89f51bff58a38cf86942acbffff98a14ce50b38c2a57d8f@sprout-oss.stage.blox.sqprod.co>
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
…k#2137, block#2141)

Five real dispatches against real claims, 2026-09-16, found that
PARTIALLY_SUPPORTED is not reachable through the documented dispatch, and found
why: section 2b requires the verdict BEFORE the reason, so a verifier generating
left to right commits to a literal before doing the reasoning that decides which
literal is right. It can then only correct itself inside the reason, where the
equality rule gives the correction no effect. One response read:

  NOT_SUPPORTED: ... -- wait, the first two assertions are established, so the
  correct verdict is PARTIALLY_SUPPORTED.

Sending the three verdicts' definitions did not fix it. Sending an explicit
ordered procedure for composing them did not fix it either; controls held
(SUPPORTED and NOT_SUPPORTED claims kept their verdicts), so it is positional,
not prompt drift.

This commit does NOT fix the ordering -- that is a grammar change and a separate
decision. It adds section 2d: a reason naming a verdict literal other than the
one it follows is contradictory, and blocks. Matched as whole tokens, longest
first, so the SUPPORTED inside NOT_SUPPORTED is not a false hit. Section 2's
send-list now asks the verifier for this, so the rule does not produce blocks it
was never given a chance to avoid.

Why this earns its place even though the observed collapses were all in the safe
direction: the mirror image, `SUPPORTED: ... though strictly only partially
supported`, parses as SUPPORTED under 2b alone and would pass the gate. Nothing
else in the contract catches it.

Named limit, not solved: 2d checks naming, not meaning. Of four responses whose
reasoning disagreed with their emitted verdict, it catches the two that named a
literal and misses the two that only described the disagreement.

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
…lock#2137, block#2141)

The response grammar was <VERDICT>: <reason>, which required the answer before
the reasoning that decides it. A verifier generating left to right committed to
a literal at its first token and could only correct itself inside the reason,
where the equality rule gave the correction no effect. PARTIALLY_SUPPORTED was
unreachable on every honestly-partial claim tried.

Section 2b now specifies exactly two lines -- reason first, verdict alone on
line two:

    The span supports two of the three conditions.
    PARTIALLY_SUPPORTED

Everything the old grammar earned is kept: whole-response matching, equality
rather than containment, a one-line reason, no narration tolerated. Only the
position moved.

Measured, same four claims, same procedure text, only the format block changed:

  claim                                verdict-first  verdict-last
  A  1-based line counting  (control)  SUPPORTED      SUPPORTED
  B  raises ValueError      (control)  NOT_SUPPORTED  NOT_SUPPORTED
  C  two established, one absent       NOT_SUPPORTED  PARTIALLY_SUPPORTED
  D  one established, one contradicted NOT_SUPPORTED  PARTIALLY_SUPPORTED

Controls held, so this is positional and not prompt drift. No response under
the new ordering self-corrected or named a competing literal.

Two further gains, both recorded in the file. Truncation is now safer: a cut-off
response loses the verdict itself rather than keeping a complete-looking one
above a missing justification, so a half-finished check can no longer look like
a decided one. And section 2d is deliberately KEPT after its cause was removed --
the ordering fixed the mechanism that forced self-contradiction, not every route
to one, and the contract has to hold for any configured
$PROFESSOR_VERIFIER_CMD, not only the one this was measured on.

Rejection examples rewritten for the new shape, including the old verdict-first
form, which must now fail rather than be tolerated for compatibility. Every
documented rejection was executed against a reference implementation of 2b+2d
and rejects for the stated reason.

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
…locked write (block#2141)

The blocked run: a draft whose citation RESOLVES but whose claim is false, so
check-page has nothing to object to and only verify-claims can catch it.

  0. target path observed ............ absent
  1. check-page ...................... {"findings": [], "skipped": false}, exit 0
  2. screen-content .................. {"findings": []}, exit 0
  3. verify-claims ................... NOT_SUPPORTED -- blocked
  4. target path observed ............ absent

An absent target proves nothing alone: it reads the same whether an earlier gate
blocked or no write was ever attempted. Rows 1 and 2 rule the first out by
recording each earlier gate's own clean result, in order, before gate three ran.

All four verdicts demonstrated against real spans on this branch, with raw
stdout: SUPPORTED, NOT_SUPPORTED, and two shapes of PARTIALLY_SUPPORTED -- one
where the span is silent on an assertion, one where it contradicts it. Neither
was rounded up. UNSOURCED is reached in step 1 with no dispatch, evidenced by
the absence of an invocation record where all fourteen dispatches wrote one.

The run also found a defect in the verdict-last grammar committed an hour
earlier. Gate three's real response separated its reason from its verdict with a
BLANK line -- three lines, so a parse failure under "exactly two lines". It would
still have blocked, but the finding would have read "unparseable" rather than
naming the verdict, which this step's own done-when requires. Four earlier
verdict-last dispatches emitted no blank line, so the behaviour is intermittent:
roughly one run in five would fail to parse for a reason unrelated to the claim,
and the noise would land on dispatches that did their job. Section 2b now
discards blank lines before counting. It costs no protection -- narration lines
are not blank, so the narration rejection example still fails, and the verdict
line must still equal a literal. Re-validated: the four earlier verdicts are
unchanged, every documented rejection still rejects, and a new
narration-with-blank-lines case rejects too.

Evidence lands in launchpad/plans/evidence/ -- inside the cohort boundary,
beside the plan it belongs to. The prompts and raw captures are session scratch
and are not committed; the document carries every claim sentence, span and
verbatim stdout needed to reconstruct them.

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
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.

2 participants