Commit Graph
67 Commits
Author SHA1 Message Date
openhands 42fa988d9c chore: revert unintended formatting changes 2026-10-22 21:26:08 +02:00
openhands be4dc08c31 chore: update dependencies and biome rules 2026-10-22 21:25:00 +02:00
openhands 597287fce5 fix(compose): keep the CMS opt-in so it cannot claim the CI port
On a CI-managed host scripts/ci-deploy.sh owns port 3002 through the
blue/green slots, so a compose replica of the cms service could only ever
crash-loop on EADDRINUSE — it never serves traffic, because nginx points at a
slot container. Gate the service behind the `cms` profile so a bare
`docker compose up -d` starts only byparr. Naming the service explicitly
(`docker compose up -d cms`, which is what the installer and updater already
do) still enables the profile automatically, so the compose-only install path
keeps working.

Keep the one port that is actually served (3002) and make the 2 GB ceiling
hard by capping swap at 2g as well. Drop the green compose service (3003):
the green slot only ever exists as a docker run container created by CI, so
compose no longer defines it and the two paths cannot drift apart.

The loopback override contract stays covered: proxy-config.test.mjs now
renders the configuration with --profile cms, and a new build-contract test
pins the profile and the memory limits so neither can be dropped by accident.
2026-10-19 19:00:07 +02:00
openhands 3a296551f6 fix(perf): enforce route budgets and ratchet coverage thresholds
Allow mode: enforce in the report config, fail the command on over-budget and
unavailable routes, and make the markdown wording follow the configured mode.
Recalibrate the budgets against the webpack build (baseline x1.15, rounded up to
the next 10 KiB) now that the old Turbopack numbers no longer apply, so the
Docker image build gate blocks genuine bundle regressions instead of only
warning. Raise the Vitest coverage thresholds to the measured floor
(37.17/30.1/31.79/38.17 -> 36/29/30/37).
2026-10-16 16:57:08 +02:00
openhands e70b96e3a7 feat(renovate): add self-hosted Renovate config and Gitea Actions workflow
Run the pinned renovate/renovate image on the host runner every weekday at
04:17 (plus workflow_dispatch) against the gitea platform, authenticating with
the renovate-bot RENOVATE_TOKEN Actions secret. Minor and patch updates are
grouped and automerged only after CI passes; majors wait for dashboard
approval. Document the bot, secret rotation and the minimumReleaseAge policy in
the error-centre runbook.
2026-10-16 16:57:02 +02:00
openhands 11ad6d4376 fix(ci): measure route bundles from webpack manifests
The performance report measured nothing. It only read `entryJSFiles` from
each route's client-reference manifest, a field Turbopack emits and webpack
does not. When the build moved to webpack (3d828a61) every route fell
through to the "unavailable" branch, and because the report is informational
and exits 0 on an unavailable metric, nothing failed and the budgets quietly
stopped being enforced.

Derive the envelope from clientModules[*].chunks when entryJSFiles is
absent, which is the same source Next's own static-routes-info uses for
webpack builds. Webpack interleaves numeric chunk ids with file names in
those arrays, so ids are skipped by shape while a malformed chunk path still
throws — otherwise a broken manifest would quietly under-report a route.
entryJSFiles still wins when present, since it is per-segment and therefore
the tighter envelope, and the per-chunk origin label is shared rather than
the absolute node_modules path webpack records, which would otherwise bloat
report.json.

Six tests cover the webpack layout: id filtering, deduplication of a chunk
reached by several client modules, the origin label, the malformed-path
rejection, the no-chunks-at-all case, and entryJSFiles taking precedence.

Re-measured on the current build, all six routes are inside their budgets
again. Note /admin/studio/furni now sits at ~98% of its gzip limit, so one
more dependency on that route will trip it; docs/performance-budgets.md
records the webpack baseline numbers and how to recalibrate.

Verified: 3385 tests, typecheck and biome clean, and the report now emits
measured rows instead of six unavailable ones.
2026-10-05 20:49:53 +02:00
openhands f99980052b perf: optimize cache layer for speed and stability
- Remove random TTL jitter to prevent unpredictable cache drops
- Add deterministic LRU eviction with proper entry cleanup
- Improve cache deduplication to prevent duplicate computations
- Skip Redis I/O during tests for faster, more stable execution
- Optimize depth calculation in catalog tree nodes
- Maintain backward compatibility and full test coverage (3331 passed)
2026-10-02 17:16:03 +02:00
openhands d9ef7f8360 chore(ci): remove Renovate
Dependency updates are handled manually, so the scheduled Renovate job
only cost a daily privileged Docker run on the deploy host. The empty
cache directory it maintained is gone too, and the operations note now
records that updates are manual instead of describing bot behaviour.
2026-09-27 19:15:31 +02:00
openhands 7392b843ad fix(security): LAPI-only engine boot, import via stdin, correct compose service 2026-09-24 18:59:13 +02:00
openhands 9562a75378 feat(security): external IP blocklist sync for the local CrowdSec engine 2026-09-24 18:39:38 +02:00
openhands 84d53139a9 feat(security): opt-in local CrowdSec LAPI bouncer on the Docker engine 2026-09-24 18:08:18 +02:00
Simo 33a760ab6b ci: verify isolated Docker news journeys before merging to main 2026-09-13 21:05:02 +02:00
Simo 043c763484 test(news): respect sandboxed preview focus and browser isolation 2026-09-13 20:48:26 +02:00
Simo 46f7ad6571 feat(ops): add integrity-checked backups and isolated restore drills 2026-09-13 20:29:18 +02:00
Simo 7867bf6b72 test(news): gate deployment on an isolated real browser publication journey 2026-09-13 20:27:04 +02:00
Simo 9a2d73a6f6 feat(docker): provide verified-header proxy profiles for self-hosted clones 2026-09-13 20:15:10 +02:00
Simo fe34d4ac93 fix(news): enforce shared comment publication and moderation rules 2026-09-13 20:14:32 +02:00
Simo f7b9b55700 fix(news): preserve recoverable reads and verify publication against real services 2026-09-13 19:31:32 +02:00
Simo 8abfe352ef fix(security): authorize site uploads and harden tokens, media and request identity 2026-09-13 19:24:43 +02:00
Simo 13665e0c3c feat(catalog): persist idempotent bulk operations and retryable deliveries 2026-09-13 18:05:03 +02:00
Simo 8f55ff2d17 feat(docker): guide clone installation and validate paired update artifacts 2026-09-13 17:57:14 +02:00
Simo 422be3ce2d test(ci): gate deployments on MariaDB and Redis integration checks 2026-09-13 17:47:58 +02:00
Simo baeb54aeb5 feat(devops): separate public page server timing diagnostics 2026-09-11 10:49:08 +02:00
Simo 13bd3695cb feat(studio): recover matching Nitro sources and persist import phases 2026-09-11 10:22:06 +02:00
Simo 00e33623f7 feat(devops): diagnose slow HK requests and dependency timings 2026-09-11 09:48:19 +02:00
Simo cc714b427a ci: report per-route JavaScript budgets from Docker build 2026-09-11 08:41:31 +02:00
Simo 445ef13846 fix(public): distinguish unavailable data from empty results and missing pages 2026-09-11 00:39:53 +02:00
Simo 1ef405be0a feat(cms): add recovery history and operational reliability tools 2026-09-09 21:57:56 +02:00
Simo 89526af344 feat(hk): expand search and add operational user overview 2026-09-09 21:14:10 +02:00
Simo 047cd9f3dd feat(catalog): add saved packages, preview and bulk price editing 2026-09-09 20:04:10 +02:00
Simo c389c3893d feat(cms): improve catalog, editorial recovery and operations 2026-09-09 19:36:15 +02:00
openhands ecadef904d chore: remove knip, husky and lint-staged
Drop the unused knip dead-code check and the husky+lint-staged pre-commit hook pipeline. All checks remain covered by the CI workflow (lint, typecheck, i18n, tests).
2026-09-08 16:56:55 +02:00
Simo 55a47949f1 feat(catalog): add reviewed bulk edits and complete category duplication 2026-09-06 20:25:19 +02:00
Simo 193b6686a9 refactor(catalog): unify commands and embed guarded catalog workspace 2026-09-06 19:40:52 +02:00
Simo 816e3875c2 feat(admin): add production error center and refresh CMS dependencies 2026-09-05 19:53:09 +02:00
Simo b1ddda66ff Revert "Merge pull request 'Complete Housekeeping migration and /ase cutover' (#52) from codex/housekeeping-complete into main"
This reverts commit 488b6e57c4, reversing
changes made to b506b4499a.
2026-08-30 21:31:34 +02:00
Simo f249551a2f docs(housekeeping): record final cutover evidence 2026-08-30 21:06:53 +02:00
Simo c9e35cf602 test(housekeeping): record pre-cutover verification 2026-08-30 19:52:15 +02:00
Simo 74756dfed2 docs: plan complete ase housekeeping cutover 2026-08-26 20:26:19 +02:00
Simo d42cd2af53 docs: define complete housekeeping cutover 2026-08-26 20:08:42 +02:00
Simo 3f10db41db docs: plan housekeeping inventory foundation 2026-08-25 18:14:27 +02:00
Simo 601a3e746f docs: design housekeeping modernization 2026-08-25 18:14:26 +02:00
Simo 9702ab304c docs: define public avatar and currency icon design 2026-08-10 18:03:35 +02:00
Simo cf563f3550 docs: plan manual recent furni resync 2026-08-02 14:54:19 +02:00
Simo 6b6fc5dc64 docs: design manual recent furni resync 2026-08-02 14:51:46 +02:00
Simo aed70db81f docs: plan configurable furni import source 2026-08-02 14:09:28 +02:00
Simo 1126a70d55 docs: design configurable furni import source 2026-08-02 14:04:58 +02:00
Simo 01570874a8 fix: map furni imports to production gamedata 2026-08-02 13:16:51 +02:00
Simo a81af2d71a docs: plan production furni asset fix 2026-08-02 13:13:58 +02:00
Simo 44b4b3b45c docs: design production furni asset mapping 2026-08-02 13:12:10 +02:00