Render pet art, restructure the repo, and close the CI gaps - #70
Merged
Conversation
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
🧪 Coverage
|
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.
Description
Two bodies of work on one branch: the pet-art feature that started it, and the
repo-structure and CI cleanup that followed.
273 files, +4193/-1893.
Pet art
petArtUrlfrom@shared/coreso the route shape is written down once and only the env read isper-platform. Art stays optional: unset the variable and pets fall back to emoji.
overflowing a squeezed gallery. The create dialog reveals the new pet's art and
closes once the pet has settled.
parent look like the pet you picked.
Repo structure
services/now holds the two satellite services,indexer-goandimage-generator.backendstays at the root: it is the application server,the only pnpm workspace member of the three, and the only one that builds from
the root lockfile.
pb/was regenerated from an updatedgo_packagerather than string-edited, since the descriptor embeds that pathwith byte-length prefixes.
shared/src/hooks/was 36 files flat at its root, 71% of the package. Groupedinto battle, pets, marriage, session and tx, matching the
adapters/andchains/directories already there. Consumers are unaffected: every import goesthrough the
@shared/corebarrel.CI: checks that existed but nothing ran
Four gaps, each the same shape as a green build that proves nothing.
pnpm buildran in no workflow.frontend,backendandwebsitehave notypecheck script, so the build is their only type check, and vitest strips types
without checking them. Verified by injecting
const x: number = "..."into atested file: 17/17 tests passed,
tsccaught it.pnpm lintran in no workflow. Onlyprotocolandverifierwerelinted in CI.
frontend,shared,websiteandmobilewere linted by hand,including frontend's custom CSS-naming check that AGENTS.md lists under
Enforcement.
mobile's jest suite ran nowhere, andverifierhad a typecheck scriptnothing invoked.
backendhad no ESLint at all andcontracts/ethereumno linter. Backendcame back clean at 9 findings across 203 files. Solidity uses solhint with
security rules only:
solhint:recommendedreports 595 problems here, mostlymissing natspec plus gas-style changes that would alter revert data and the
event ABI on deployed upgradeable contracts. Every security rule already passed.
New workflows:
static-checks(lint + build) andmobile.Bugs found and fixed
settleBreedstranded the breed.useBreedPetsset itssent-once guard before sending and cleared it only in
reset(), so a declinedwallet prompt left both fees spent, the request pending on chain, and no way to
retry.
useCreatePethad fixed this and documented why; the fix had not beencarried across. The EVM entropy settle flow both hooks duplicated now lives in
one
useEvmEntropySettleFlow, so it cannot drift apart again.engine moved to
protocol.image-generator'sdigitPairparity test guardedon a path that no longer existed, so it skipped instead of failing. The ports
agree, so this arms the check rather than fixing a drift.
backend/API.mddescribed a second WebSocket deleted in 17666ad.docs/architecture.mddoes not exist but was linked from README,CONTRIBUTING, docs/README, CLAUDE.md and AGENTS.md.
Tests
shared60.8% → 63.0%, picked by what a silent failure costs rather than bypercentage.
time.ts,pdas.ts,accountClient.tsandconstants.tsare now at100% statements, functions and branches.
Two cross-language guards, both verified to fail on an injected change:
now checked against the Rust source.
PET_ACCOUNT_{ID,OWNER}_MEMCMP_OFFSETare byte positions in a Rust struct,previously asserted only against a comment. Removing
open_to_challengesshifted every field after it once already.
Also characterises the EVM settle path in
useCreatePetanduseBreedPets, whichwas untested in both: their suites mock the entropy watcher to a no-op.
Developer experience
pnpm devnow runs backend, frontend, image-generator and indexer-go, the lasthot-reloaded by
air. It deliberately omits--kill-others-on-fail: two of thefour exit at boot when unconfigured, and either killing the backend and frontend
would be worse than that service being down. The trade-off is that a backend
crash no longer stops the stack, so panes are labelled BE/FE/ART/IDX.
airmust be on PATH fordev:idx.DEVELOPMENT.mdlisted six dev scripts of which five no longer existed.Verification
Reviewer notes
render.yamlchangesrootDirfor two services. The first deploy after merge iswhere a wrong value would show.
needs updating.
website/README.mddocuments a deploy workflow removed in 49c5e63. I marked thesection stale rather than guessing the current mechanism. It needs an owner.