67 Commits

Author SHA1 Message Date
Andrey Antukh 4da6499197 🐛 Fix linear gradients in SVG text exports (#11272)
* 🐛 Use gradient type instead of export type in SVG renderer

data->gradient-def was comparing the render `type` parameter (:svg,
:png, :pdf) against "linear" to decide between linearGradient and
radialGradient elements. Since the export type is never "linear",
the comparison always fell through to radialGradient, causing all
linear gradients to be exported as radial in SVG output.

Read the gradient type from the data map instead:
(get-in data ["gradient" "type"])

Closes #5972

* 🐛 Add SVG gradient export regression test

Extract SVG gradient definition generation from the renderer so it can
be tested directly. Add exporter test build wiring and cover both
linear and radial gradient output.

AI-assisted-by: gpt-5.6-luna

*  Standardize exporter testing workflow

Align exporter scripts with the frontend testing pattern. Add a
dedicated GitHub Actions workflow and document the canonical exporter
commands in Serena memories.

AI-assisted-by: gpt-5.6-luna

*  Add focused exporter test execution

Mirror frontend test-runner behavior for focused namespaces and test
vars. Support --focus, --log-level, and --help, and document the
commands.

AI-assisted-by: gpt-5.6-luna

* 🐛 Replace shell exec with execFile in exporter

Replace child_process.exec with execFile to eliminate shell
interpretation. Add hex color validation in exporter and frontend
to reject malformed input before command construction.

This fixes GHSA-4f36-m4hj-cv86 (CVSS 9.9 Critical), an authenticated
OS command injection vulnerability where malicious fill-color values
could execute arbitrary commands in the exporter container.

Defense in depth:
- Layer 1: execFile passes arguments directly without shell parsing
- Layer 2: Exporter validates colors with strict hex regex
- Layer 3: Frontend filters invalid colors before DOM emission

All three independent reporters' attack vectors are addressed:
- Quote breakout (lyhtheori)
- Command substitution (B1gN0Se)
- Path traversal (KimiSecurityTeam)

AI-assisted-by: qwen3.7-plus

* 🐛 Use existing hex-color-string? and fix test path mismatch

Address code review feedback:

- Replace duplicated hex-color-rx and valid-hex-color? with existing
  hex-color-string? from app.common.types.color
- Fix RCE test to use marker path in payload instead of hardcoded /tmp/pwned

AI-assisted-by: qwen3.7-plus

---------

Co-authored-by: Sumit Ridhal <sridhal@redhat.com>
2026-08-19 13:57:14 +02:00
Andrey Antukh bbc7e9bee9 Add a script for run ci-like tasks 2026-07-28 12:47:33 +02:00
Andrey Antukh b54c1f316a Add minor improvements for error report script 2026-07-25 09:56:38 +02:00
Andrey Antukh f7c312021b Improve error-reports CLI with streaming, time-range, and stats
Server changes:
- Switch list ordering from DESC to ASC (oldest first)
- Flip cursor direction to > for forward pagination
- Add 'until' param for server-side upper-bound filtering

CLI changes:
- Add --from/--to flags mapping to server's since/until
- Streaming output for --all and --format ndjson
- Add --format ndjson option (one JSON object per line)
- Add --normalize-hints flag to strip dynamic values
- Add --output flag to write list results to file
- Add 'stats' subcommand with aggregations (signature, host,
  tenant, version, source, kind, hour) reading from API, file, stdin
- stats input supports JSON, JSON array, and NDJSON formats

Test changes:
- Fix pagination assertions for ASC ordering

AI-assisted-by: mimo-v2.5-pro
2026-07-23 13:35:09 +00:00
Andrey Antukh 52e5e0bec6 🐛 Add more fields on table format on errors report cli client 2026-07-23 10:46:17 +02:00
Andrey Antukh 2344ba22a6 🎉 Add error reports API and CLI tool
Implement RPC methods for querying server error reports with pagination
and filtering. Add CLI tool (tools/error-reports.mjs) for convenient
access with table and JSON output formats. Extract profile-id from audit
events and logging context for better error categorization. Build
improved HREF using request path when available.

AI-assisted-by: qwen3.7-plus
2026-07-22 14:18:51 +02:00
Andrey Antukh f3bf24b4f6 ♻️ Consolidate dev tooling into scripts/ and reorganize docs
Move all development tools from tools/ to scripts/ for consistency.
Rename lint/fmt/check-fmt to lint-clj/fmt-clj/check-fmt-clj to clarify
they target Clojure specifically. Remove unused scripts (attach-opencode,
start-opencode, start-opencode-server) and the backport-commit skill.

Update all internal references across .serena/, AGENTS.md, and
CONTRIBUTING.md to point to the new script locations. Simplify
CONTRIBUTING.md by delegating module-specific fmt/lint instructions
to the respective serena memories.

AI-assisted-by: deepseek-v4-flash
2026-07-22 09:18:06 +02:00
Andrey Antukh f457c68355 📎 Backport devenv improvements 2026-06-05 11:44:20 +02:00
Andrey Antukh 947f6d392d 🎉 Add chunked upload support for font variants (#9551)
*  Add additional logging and validation for image upload

* 🎉 Add chunked upload support for font variants

Extend the font variant upload flow across frontend, backend, and common
to support the standardized chunked upload protocol.

**Backend:**
- Add \`:font-max-file-size\` config default (30 MiB) and schema entry
- Add \`validate-font-size!\` in \`media.clj\` (mirrors
  \`validate-media-size!\`, raises \`:font-max-file-size-reached\`)
- Extend \`schema:create-font-variant\` to accept either \`:data\`
  (legacy bytes or chunk-vector) or \`:uploads\` (new chunked session
  map), with a validator requiring exactly one
- Add \`prepare-font-data-from-uploads\`: assembles each chunked
  session via \`cmedia/assemble-chunks\`, validates type+size
- Add \`prepare-font-data-from-legacy\`: normalises legacy byte/chunk
  entries, writing to a tempfile (joining via SequenceInputStream),
  validates type+size
- Add structured logging ("init"/"end") with \`:size\`, \`:mtypes\`,
  and \`:elapsed\` in \`create-font-variant\`

**Frontend:**
- \`upload-blob-chunked\` accepts a per-caller \`:chunk-size\` option
- Add \`font-upload-chunk-size\` (10 MiB) and \`upload-font-variant\`
  fn that uploads each mtype as a separate chunked session
- \`on-upload*\` in dashboard fonts now calls \`upload-font-variant\`
  instead of issuing \`create-font-variant\` RPC directly
- \`process-upload\` stores raw ArrayBuffer instead of chunking
  client-side

**Common:**
- Replace \`"font/opentype"\` with \`"font/woff2"\` in \`font-types\`

**Tests:**
- 25 tests / 224 assertions covering all three upload paths (direct
  bytes, legacy chunk-vector, new chunked sessions), size validation,
  and media type validation

Signed-off-by: Andrey Antukh <niwi@niwi.nz>

* 📎 Add a script for check the commit format locally

---------

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
2026-05-12 18:30:19 +02:00
Andrey Antukh 7ec9261475 Add improvements to AGENTS.md (#8586) 2026-03-11 15:24:40 +01:00
Andrey Antukh 9123d199b7 🐛 Fix scripts/fmt 2025-12-02 17:43:21 +01:00
Andrey Antukh e7029f2182 Make automatic workflows not dependent on yarn 2025-12-01 08:17:52 +01:00
Andrey Antukh e21798f1ed Move all files under frontend directory. 2016-11-20 20:03:17 +01:00
Andrey Antukh 42e87588b6 Elide asserts on production builds. 2016-09-30 23:38:31 +02:00
Andrey Antukh 819fa69ae2 Minor improvements on figwheel script. 2016-09-30 11:33:44 +02:00
Andrey Antukh 9913388116 Fix default connection string on figwheel build script. 2016-08-03 09:27:23 +03:00
Andrey Antukh 7909375eb2 Add missing entry for dist-view command on dist script. 2016-07-29 15:31:37 +03:00
Andrey Antukh aff352335b Minor fixes on build scripts. 2016-07-29 15:17:15 +03:00
Andrey Antukh 58563a41cb Define a new settings for the view application. 2016-07-29 13:45:00 +03:00
Andrey Antukh b3e17bd2b7 Move common constants as uxbox.config ns. 2016-06-30 19:53:01 +03:00
Andrey Antukh 73b901954a Update depencies. 2016-06-22 22:18:25 +03:00
Andrey Antukh ce53bdb867 Set proper defaults for api urls. 2016-06-22 22:18:10 +03:00
Andrey Antukh d5df7eba3b Many changes on scripts. 2016-06-22 21:20:17 +03:00
Andrey Antukh 967b67f0b1 Fix and restructure tests. 2016-06-21 19:31:35 +03:00
Andrey Antukh 1a8e29a0b1 Add missing entry to css-dirs of figwheel config. 2016-06-16 09:20:17 +03:00
Andrey Antukh 149e99f466 Use advanced compilation mode for production. 2016-06-15 22:26:19 +03:00
Andrey Antukh c0cc1d2b81 Improve and adapt build scripts for new view app. 2016-06-15 20:23:39 +03:00
Andrey Antukh b16a649121 Minor fixes on worker build scripts. 2016-06-14 23:57:52 +03:00
Andrey Antukh 9dc94caffd Restructure build scripts for facilitate incorporate more apps. 2016-06-14 23:50:55 +03:00
Andrey Antukh ab36a12385 Enable parallel builds. 2016-06-12 13:40:31 +03:00
Andrey Antukh c13e86c735 Move worker code into uxbox-worker namespace. 2016-06-12 13:38:18 +03:00
Andrey Antukh d8dac5169f Move routes declaration into ui ns.
Leaving router as agnostic helpers impl.
2016-06-12 10:27:05 +03:00
Andrey Antukh 4124f83a22 Use :none as optimization level for watch-bench script. 2016-06-11 18:30:57 +03:00
Andrey Antukh 87f9e8b38d Minor changes on figwheel script. 2016-05-11 00:42:01 +03:00
Andrey Antukh 1aab333eba Fix dist compilation script. 2016-05-08 18:03:37 +03:00
Andrey Antukh f24a80468e Improve tests build scripts. 2016-04-16 11:11:28 +03:00
Andrey Antukh 433d4fe7ee Use :simple optimization level for tests. 2016-04-15 23:39:21 +03:00
Andrey Antukh debc68661a Remove obsolete usage of reader macro #ux/tr. 2016-04-14 21:39:50 +03:00
Andrey Antukh 2ef31f3e08 Improve initial compilation and add worker compilation to dist. 2016-04-11 18:03:34 +03:00
Andrey Antukh 280c272c2a Fix build-worker script. 2016-04-11 17:40:08 +03:00
Andrey Antukh 8916a9b7ac Fix build scripts (related to webworker). 2016-04-11 17:33:24 +03:00
Andrey Antukh 051163c3ae Add webworkers architecture (rcp). 2016-04-10 18:51:13 +03:00
Andrey Antukh d976afda30 Fix wrong filename on watch-tests script. 2016-04-10 18:51:13 +03:00
Andrey Antukh 78e7f57655 Update figwheel.clj 2016-04-09 18:51:54 +03:00
Andrey Antukh c419e9406b Add bench code and update all scripts. 2016-04-08 11:03:29 +03:00
Andrey Antukh 4422974e4a Remporary disable advanced compilation on dist for more easy debugging. 2016-04-03 20:08:18 +03:00
Andrey Antukh aeff49b3e6 Add externs for interop calls and enable advanced compilation. 2016-04-02 23:17:52 +03:00
Andrey Antukh 63f2f3f0a7 Add missing config on dist.clj script. 2016-03-19 17:59:13 +02:00
Andrey Antukh f80c48e679 Add compile time defined url variable for easy config the api url. 2016-03-15 23:00:57 +02:00
Andrey Antukh 0d9d2325cc Move doc and docker script out of this repo. 2016-03-03 23:49:31 +02:00