Skip to content

chore: housekeeping — tooling, deps, import aliases, S3 errors - #457

Open
nemvince wants to merge 7 commits into
mainfrom
chore/housekeeping
Open

nemvince wants to merge 7 commits into
mainfrom
chore/housekeeping

Conversation

@nemvince

Copy link
Copy Markdown
Member

Summary

Housekeeping: bundles the tooling migration, dependency bumps, Chronos import alias, and two small fixes. Merges main (keeps the new /ping/time route).

Changes

  • Replace Biome with bun fmt + oxlint: .oxlintrc.json, repo-wide reformat, CI, lefthook and editor settings updated.
  • Bump Bun to 1.4.4 and every workspace dependency to latest.
  • Chronos imports use @/...; drop package.json imports.
  • S3 write failures log key/type/endpoint/code and answer 502 instead of an opaque 500.
  • Guard manual moved-lesson cohorts and audit stored values.
  • Ignore the local .omp/ agent directory.

Verification

  • bun fmt, bun lint, bun typecheck, bun run build
  • bun test for date/time-zone (14 pass)
  • OpenAPI regenerated, no diff

Turbo 2.11.10, oxlint replaces Biome as the linter dependency, and each
workspace goes to its latest release: i18next 27 / react-i18next 18,
three 0.187, @orpc 1.16.2, better-auth 1.7.18, sentry 11.11, playwright
1.65, vite 8.3.7, tailwind 4.3.5, motion 14.11, nodemailer 10.4.

Changelogs read for the majors: i18next 27 changes fallbackLng,
returnEmptyString and language-code defaults (the app sets fallbackLng
explicitly, bundles resources and has no empty translations),
react-i18next 18 keeps `useSuspense` per instance (set in createI18n),
three r187 drops CubeUVReflectionMapping/PMREM internals (unused here),
and @orpc 1.16 only moves patch-level behavior.
Bun 1.4.4 ships `bun fmt`, a Prettier-compatible formatter, so Biome's
formatter goes away and the whole repository is reformatted once with the
same options it enforced (80 columns, single quotes, `es5` trailing
commas, spaces, LF) plus import and Tailwind class sorting, which replace
Biome's `organizeImports` and `useSortedClasses` assists.

Linting moves to oxlint, which is what `bun lint` will run: the root
`lint` script is now `oxlint --fix`, so `bun lint` keeps working and the
built-in linter can replace that one line once Bun ships it. The Biome
rule policy is transcribed into `.oxlintrc.json` (correctness by
category, the rest by name, with per-path overrides for browser bundles
and the Playwright specs); rules without an equivalent — the CSS ones,
`useSortedKeys`, `useImageSize`, the complexity budget — are dropped and
their explanations stay as plain comments.

`biome-ignore` directives become `oxlint-disable*` on the matching rule,
or a plain comment where the rule no longer exists. The reformat is
mechanical; lint-driven edits in the same pass: dependency arrays that
named a stable member (`form.reset`, `markReadMutation.mutate`) now name
the object, `cohorts` is memoised so `cohortOptions` is, redundant `?? {}`
in spreads and `[...new Array(n)]` are simplified, `tooltip` no longer
reassigns a parameter, and the cohort combobox points `aria-controls` at
its popup.

CI checks `bun fmt --check` and runs oxlint with `--max-warnings 0`;
lefthook formats and fixes staged files; the editor defaults point at the
Oxc extension.
`.omp/` holds this workstation's MCP credentials and must stay out of the
tree.
Bun's `S3Error` says only "an unexpected error has occurred" for a
transport failure, and LogTape keeps just the message and stack, so the
error surfaced as an opaque 500 with no way to tell `ConnectionRefused`
from `NoSuchBucket` or `AccessDenied`. `putObject` now logs the failure
with the key, byte count, content type, endpoint and the error code as
structured properties, and answers `badGateway` — the bucket being
unreachable is the gateway's problem, not the request's.
Chronos was the one app whose `src` had two names: `#...` for
`package.json` `imports` (which Bun and drizzle-kit resolve) and `@/*` in
`tsconfig.json` `paths`, which only the type checker read. Every app now
uses the same `@/...` specifier for its own `src`, declared once per app
in `tsconfig.json` — the Vite apps also alias it in `vite.config.ts`
because Vite does not read `paths` — and `package.json` declares no
aliases at all.

The rewrite is mechanical (`#utils/http` -> `@/utils/http`, `#modules` ->
`@/modules`, …); the two `../schema` imports inside `modules/wifi/utils`
become `@/modules/wifi/schema` so a module's own files go through the
alias too. Bun resolves `paths` at runtime and when bundling, tsc at
type-check time and drizzle-kit's config loader reads the tsconfig, so
nothing else had to change.

Docs (AGENTS.md, docs/architecture.md) now name the alias and say where it
lives.
# Conflicts:
#	apps/chronos/src/modules/ping/_router.ts
#	packages/api/src/contract/ping.ts
@filc-preview-vm

filc-preview-vm Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

✅ Preview is up

Environment pr-457.preview.filc.petrik.hu
Commit 825b53f
URL https://pr-457.preview.filc.petrik.hu
Edge check unreachable (getaddrinfo ENOTFOUND pr-457.preview.filc.petrik.hu)

Posted by filc-deployer. The preview database is its own container and is
destroyed when this pull request closes.

This branch was successfully deployed

1 active deployment
preview-pr-457 — 825b53f8 Deployed Nov 13, 2026 by filc-preview-vm[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

1 participant