24557 Commits

Author SHA1 Message Date
Miguel de Benito Delgado
cfcf394008 🚧 WIP Step 21.2 Docstrings 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
d473102b60 🚧 WIP Step 21.2 Docstrings 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
b7d979356b 🚧 WIP Step 21.1 Remove unnecessary kondo rule 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
e8b1d933ee 🚧 WIP Step 21 Refactor namespaces 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
d3b6c3a282 🚧 WIP Step 20 test last round of features 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
00d46f4c16 🚧 WIP Step 19.2 Missing browser utils 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
2eef465d6b 🚧 WIP Step 19.1 Allow selecting cases in pilot 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
23f9223845 🚧 WIP Step 19 New scenes, use camera 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
0311449db0 🚧 WIP Step 18 Camera ops 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
0e206f4986 🚧 WIP Step 17 Support path construction 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
84d56cd928 🚧 WIP Step 16.4 Refactor failures, remove legacy validation, cleanup 2026-11-05 11:18:14 +01:00
Miguel de Benito Delgado
fcf754e30b 🚧 WIP Step 16.3 Cleanup pilot 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
e7ed64bb6c 🚧 WIP Step 16.2 Renames and fixes 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
8c67ac7fb6 🚧 WIP Step 16.1 Relax scene macro constraints 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
e5958db3aa 🚧 WIP Step 16 Introduce hooks for the browser and load-scene 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
cf6af0cf62 🚧 WIP Step 15.1, cosmetic 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
dbd37c73a2 🚧 WIP Step 15, Use transit to simplify validation 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
eb566b0c47 🚧 WIP Step 14, Grab correct w/h attrs from context 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
d12df5058b 🚧 WIP Step 13, Track failure causes
AI-assisted-by: muse-spark, GLM-5.3
2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
09ac810229 🚧 WIP Step 12.4, Comments
AI-assisted-by: gpt6-astra
2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
5b2e4679f3 🚧 WIP Step 12.3, Test cleanup + missing coverage
AI-assisted-by: muse-spark, deepseek-flash
2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
16966cf190 🚧 WIP Step 12.2, Fix browser bridge, lifecycle
AI-assisted-by: muse-spark, glm-5.3
2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
a8f10b6058 🚧 WIP Step 12.1, Improve case validation
AI-assisted-by: muse-spark, glm-5.3
2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
ccd7648901 🚧 WIP Step 12, temporary pilot
- pilot runner for testing
- will be entirely removed later

AI-assisted-by: muse-spark-1.3, deepseek-flash, glm-5.3
2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
b43b2fbdf1 🚧 WIP Step 11, browser bridge
- New schema:viewport
- Browser bridge (with some temp code)
- Move prepare-scene out measured regions
-
AI-assisted-by: muse-spark-1.3, deepseek-flash, glm-5.3
2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
f9cd9843ac 🚧 WIP Step 10, scene upload 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
5691183c04 🚧 WIP Step 10, defcase body validation, docs 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
c89a58e182 🚧 WIP Step 9, fix naming conventions 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
796c76559e 🚧 WIP Step 8, simplify and clean up tests 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
c2b43cb92b 🚧 WIP Step 7, scene and case declarations 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
242a621e5e 🚧 WIP Step 6, ellipses 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
76cc5f02a9 🚧 WIP Step 5, bools 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
882e585b13 🚧 WIP Step 4, frames and groups 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
9e0600df0b 🚧 WIP Step 3, fixture macros, prng, defaults, placeholder scene 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
32c3dba17c 🚧 WIP Step 2, common scene code, validation 2026-11-05 11:18:13 +01:00
Miguel de Benito Delgado
9caddb7596 🚧 WIP Step 1, scaffold cljs benchmark runner 2026-11-05 11:18:12 +01:00
Andrey Antukh
9d898b8b31
🔧 Normalize the tenant to lowercase (#12843)
An operator writing `PENPOT_TENANT=ACME` and one writing `acme` name the
same tenant: the value is compared as an exact string in the keys and
rows it lands in, and one uppercase letter would otherwise split one
tenant into two.

The value is normalized when the configuration is read, so nothing
downstream has to care about case, and the validated form accepts only
lowercase labels from then on.

AI-assisted-by: deepseek-v4.1-flash
2026-11-05 08:45:01 +01:00
Alonso Torres
eb9594a614
🐛 Fix ChatGPT tool discovery with the submit_feedback tool (#12845)
* 🐛 Fix ChatGPT tool discovery with the submit_feedback tool

ChatGPT compiles the regex patterns advertised in tool input schemas
with Python, which rejects Unicode property escapes such as \P{Cc}. The
submit_feedback subject pattern used one, so ChatGPT dropped the whole
tool list ("action discovery failed") on deployments that register the
tool.

The subject pattern now spells out the Cc range as a character class,
which accepts the same input. A test asserts that no advertised pattern
uses \p{...} or \P{...}.

AI-assisted-by: claude-opus-5-5

* 🐛 Fix MCP plugin test stub for the version check

plugin.ts checks version compatibility with extractMinorVersion, but the
tests loaded it with a require stub that returned the same dummy object
for every import, so the check threw once the UI initialized.

The plugin.ts tests now share a stub that supplies the real
VersionCompatibility, ErrorUtils and TaskHandler modules, stubs only the
code execution handler and rejects unexpected imports. TaskHandler is
transpiled for the sandbox because Node's type stripping cannot load its
parameter properties.

AI-assisted-by: claude-opus-5-5

* 🐛 Fix Management tests for backend-confirmed setters

Management setters save to the backend first and update the object only
when the save succeeds, so seven live tests failed:

- setter tests now wait for the new value before reading it
- createProject checks fileCount by listing the project again, as
  fileCount is the count from when the project was listed
- project moveTo no longer calls remove on the target team, which teams
  do not have; the live CI driver deletes temporary teams
- renaming the open file waits for its restore, which made the next
  navigation test fail

The README notes on setters, fileCount and team cleanup match this.

AI-assisted-by: claude-opus-5-5
2026-11-04 21:47:55 +01:00
makesomethingshit
d42217a32b
🐛 Create Plugin API shapes at the page root (#12499)
* 🐛 Create Plugin API shapes at the page root

Create component instances and SVG shapes at the page root so a board at
the page origin cannot capture them. Continue using the existing forced
frame option for component instances and an explicit parent frame for
SVG imports. Interactive placement retains its current behavior.

Cover component instances, SVG imports and SVG imports with images on
ordinary, flex and grid origin boards, including undo, redo, position
changes and explicit reparenting.

Closes #12086

AI-assisted-by: deepseek-v4.1-flash

Signed-off-by: choi junsoo <junsoo1172@gmail.com>

* 🐛 Preserve interactive creation placement

Cover component and SVG placement inside and outside an origin board.
Exercise the sidebar move lifecycle and verify parent preservation.
Correct the Plugin API changelog category.

AI-assisted-by: gpt-6
Signed-off-by: choi junsoo <junsoo1172@gmail.com>

* 🔧 Cover page-root creation in the Plugin API test suite

Check that LibraryComponent.instance(), createShapeFromSvg() and
createShapeFromSvgWithImages() create shapes at the page root when a
board covers the page origin. Each test removes the shape it creates,
since it lives outside the scratch board.

AI-assisted-by: claude-opus-5-5

---------

Signed-off-by: choi junsoo <junsoo1172@gmail.com>
Co-authored-by: alonso.torres <alonso.torres@kaleidos.net>
2026-11-04 17:40:14 +01:00
Elena Torró
4be8df5877
⚡ Load the rasterizer iframe only when the SVG renderer needs it (#12835)
Create it once features say SVG, never in wasm mode. Also skip SVG frame
thumbnails in wasm mode.
2026-11-04 15:50:13 +01:00
Eva Marco
2f060e9baf
✨ Add skills for the DS migration epic (#12739)
* ✨ Add skills for the DS migration epic

Two skills that drive the DS migration (#12375) one area at a time, so
anyone working with an agent follows the same flow.

refactor-scss moves one .scss off frontend/resources/styles/common/
refactor/ to the DS tokens, mixins and px2rem as a pure refactor, with
a self-review for the issues reviewers flag and a zero-tolerance visual
check.

migrate-ds-area takes one area of a group issue (buttons and icons,
selects, ...): claim it in the group's PRs table, add a visual test,
change the controls, run refactor-scss, compare before and after with
the bundled diff scripts, then open the draft PR and post the QA
comment. It also lists devenv traps seen while migrating the first
areas.

AI-assisted-by: claude-opus-5-5

* ✨ Add the claim rules to the migrate-ds-area skill

The group issue body is saved whole, so two people claiming at the same
time can lose a row. The skill now rereads the body after saving and
puts the row back if it is gone. A claim with no PR for 7 days is free
once its owner has been asked in a comment and did not answer.

AI-assisted-by: claude-opus-5-5
2026-11-04 15:29:07 +01:00
María Valderrama
f532b8c12e
✨ Add get-profiles-by-ids management method (#12832) 2026-11-04 14:01:27 +01:00
Juanfran
757ec974df
🐛 Build plugin scripts before Angular copies assets (#12815)
Generate plugin.js before Angular builds each of the eight Angular plugins.
The previous order wrote the script to src/assets after Angular had copied
assets to dist, so clean deploys published manifests without their code.

Verified clean builds include all declared manifest assets for all eight
plugins. Plugin lint, format checks and all 101 tests pass.

AI-assisted-by: gpt-6.1-sol
2026-11-04 13:03:10 +01:00
Elena Torró
8d7e275b6b
🐛 Count id and type in the wasm shape proxy (#12793)
The proxy counted one entry fewer than it yields, so it was never equal to a
plain map with the same entries. Count both fields and test it.
2026-11-04 13:01:05 +01:00
Luke Lau
2573908315
⚡ Drop unused used-names sets from component duplication (#12809)
unames or update-unames! are no longer used after a1a3d09998, and each call to
cfh/get-used-names is a scan across all objects
2026-11-04 13:00:24 +01:00
Andrés Moya
177c3c6551
🔧 Add one more test case (#12827) 2026-11-04 12:05:38 +01:00
Florian Schrödl
4b2061f399
✨ Add unit tests for the token forms and token tree (#12781)
* ✨ Add unit tests for the token form and combobox helpers

Several helpers of the token forms and the token value combobox were
already pure but had no tests. Cover the reference under the cursor,
the order of the token tree, moving through the combobox options, the
shadow and typography form values and their validation, which value a
form tab validates, and that a token import needs a json file.

Signed-off-by: Florian Schroedl <flo.schroedl@gmail.com>

* ✨ Test the shadow and typography form rules

Add tests for the shadow and typography form schemas: a negative blur
is rejected, a negative spread and a blank blur or spread are accepted,
every shadow needs its offsets and color, a line height needs a font
size, and a token can't reference itself. A typography token submitted
without any field is rejected.

They replace the tests of the validator wrappers, the combobox focus
order and the import file check.

Signed-off-by: Florian Schroedl <flo.schroedl@gmail.com>

---------

Signed-off-by: Florian Schroedl <flo.schroedl@gmail.com>
2026-11-04 12:04:52 +01:00
andrés gonzález
4ee2a812be
🔥 Remove Beta badge from MCP server in Integrations (#12813)
The Integrations settings page labelled the MCP server as Beta, while
the MCP docs give no maturity status. Drop the badge, its style and the
unused translation key so the UI no longer presents it as beta.

Closes #12800

AI-assisted-by: claude-opus-5-5
2026-11-04 11:30:53 +01:00
Luke Lau
9b672785af
🐛 Fix gap handle drag leaving a stuck preview in wasm (#12782)
AI-assisted-by: claude-sonnet-5-5
2026-11-04 11:29:39 +01:00
Florian Schrödl
e6153b61a5
♻️ Extract the token pill state and tooltip from its component (#12691)
The token pill worked out inside the component whether its token is
applied to the selection, whether it can apply to it at all and why
the token is invalid, so no test could reach that logic. Move it into
`pill-state`, and split the tooltip into `tooltip-info`, which decides
what it says, and `render-tooltip`, which renders it. Both are pure
and get unit tests for the applied, partial, disabled and error states
and each tooltip case.

The two chained `on-click` handlers become one. Nothing else changes
in behavior.

Signed-off-by: Florian Schroedl <flo.schroedl@gmail.com>
2026-11-04 10:56:50 +01:00