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