⚠️ OpenSpec-managed issue — this content is automatically synced
from the openspec/ directory. Manual edits will be overwritten on next sync.
Artifacts
Specs
Tasks
1.1 Read the DTCG Format Module and Color Module v2025.10. Confirm the colour space
1.2 Write tests/Unit/fixtures/dtcg/colour-spaces.tokens.json with one colour per colour
2.1 Add lib/Service/ColorSpaceConverter.php: to and from sRGB for every listed colour space,
2.2 Use it in DesignTokensMapper::serializeColorObject(): every listed colour space, the
2.3 Carry the two new reason codes into the converter report and into the panel's reason
3.1 Read $extensions["nl.conduction.thematiq"].cssVariable in resolveTarget() before the
4.1 Add lib/Service/DesignTokensWriter.php: paths, the extension on every token, the typing
4.2 Add CustomTokenSetController::exportDtcg() on
4.3 Add the 200, 403 and 404 calls to tests/integration/thematiq.postman_collection.json,
4.4 Add tests/Unit/Service/DesignTokensRoundTripTest.php: export every shipped set, import
5.1 Add "Download as design tokens" next to the token set dropdown (templates/settings/admin.php:66-76)
5.2 Round trip by hand in the browser: download a set, upload it under a new name, compare.
6.1 Localisation: the button labels, the two new reason labels and every new error text in
6.2 Documentation: a "Download as design tokens" section in docs/features/import-export.md
6.3 WCAG AA contrast: a colour converted from another colour space reaches the contrast check
6.4 Dark mode: a set imported from oklch gets a dark variant for that token. Verify: PHPUnit
6.5 Incomplete token sets: exporting a set that declares only a few tokens gives only those
6.6 Accessibility: both buttons are real <button> elements with visible text, reachable by
6.7 Security: the endpoint is admin-only, reads only css/tokens/{id}.css for an id
7.1 Run COMPOSER_PROCESS_TIMEOUT=0 composer check:strict once, then npm run lint,
7.2 Open one exported file in Tokens Studio (or another DTCG tool) and record in the PR body
Design
See design.md for technical design details.
Synced from openspec/changes/authoring-dtcg-export by OpenSpec workflow
App: thematiq
Artifacts
Specs
Tasks
tests/Unit/fixtures/dtcg/colour-spaces.tokens.jsonwith one colour per colourlib/Service/ColorSpaceConverter.php: to and from sRGB for every listed colour space,DesignTokensMapper::serializeColorObject(): every listed colour space, the$extensions["nl.conduction.thematiq"].cssVariableinresolveTarget()before thelib/Service/DesignTokensWriter.php: paths, the extension on every token, the typingCustomTokenSetController::exportDtcg()ontests/integration/thematiq.postman_collection.json,tests/Unit/Service/DesignTokensRoundTripTest.php: export every shipped set, importtemplates/settings/admin.php:66-76)docs/features/import-export.mdoklchgets a dark variant for that token. Verify: PHPUnit<button>elements with visible text, reachable bycss/tokens/{id}.cssfor an idCOMPOSER_PROCESS_TIMEOUT=0 composer check:strictonce, thennpm run lint,Design
See design.md for technical design details.
Synced from
openspec/changes/authoring-dtcg-exportby OpenSpec workflowApp:
thematiq