What shipped · ما الذي صدر
Every version below is a real commit — this page is generated from the repository's own history by tools/changelog.mjs, not written by hand. 108 released versions.
كل إصدار هنا مأخوذ من سجل المستودع مباشرة، لا مكتوب يدويًا. نصوص الإصدارات بالإنجليزية كما كُتبت وقت التنفيذ — ولم نترجمها آليًا، لأن ترجمة لم يكتبها إنسان ليست سجلًا صادقًا.
| Version | Date | What changed |
|---|---|---|
v3.22.1 | 2026-08-29 | the tag could add a product we do not make |
v3.22.0 | 2026-08-29 | a paint card opened the mashrabiya |
v3.21.9 | 2026-08-29 | SEVENTH-100 #88 — one honest reminder, and only one |
v3.21.8 | 2026-08-29 | a batch name could escape the zip, and the suite fought a prod rate limit |
v3.21.7 | 2026-08-29 | repin the shell — index.html was still asking for 3.21.5 |
v3.21.6 | 2026-08-29 | the tissue box gets its slot back, and the guide stops posing as product |
v3.21.5 | 2026-08-28 | SEVENTH-100 #95 — the stylus gets a qalam |
v3.21.4 | 2026-08-28 | SEVENTH-100 #47 — measured first, memoised instead |
v3.21.3 | 2026-08-28 | SEVENTH-100 #48 — the render path stops queueing behind thumbnails |
v3.21.1 | 2026-08-28 | SEVENTH-100 #48 — under three seconds, by bytes, not tricks |
v3.21.2 | 2026-08-28 | SEVENTH-100 #22 — square Kufi laid like bricks, checked like proofs |
v3.21.0 | 2026-08-28 | SEVENTH-100 #40 — the fit check that measures millimetres |
v3.20.9 | 2026-08-28 | SEVENTH-100 #37 — a balance critic that knows when to stay quiet |
v3.20.8 | 2026-08-28 | SEVENTH-100 #38 — kashida proposals, approved one by one |
v3.20.7 | 2026-08-28 | SEVENTH-100 #10 — text on a path, and the convention that keeps letters upright |
v3.20.3 | 2026-08-28 | SEVENTH-100 #97 — Arabic-first onboarding, and the tour that was fighting its own successor |
v3.20.6 | 2026-08-28 | SEVENTH-100 #9 — detach to path, one-way, undo brings the text back |
v3.20.5 | 2026-08-28 | SEVENTH-100 #3 — a diacritic drags off its anchor, alone |
v3.20.4 | 2026-08-28 | SEVENTH-100 #4 — justify to a measure, and the jalala stays whole |
v3.20.2 | 2026-08-28 | SEVENTH-100 #12 — boolean ops, measured against arithmetic |
v3.20.1 | 2026-08-28 | SEVENTH-100 #16 — image import traces to vectors, 0.38% measured |
v3.20.0 | 2026-08-28 | SEVENTH-100 #13 — masks, held through every export |
v3.19.1 | 2026-08-28 | SEVENTH-100 #17 + #27 + #29 — guides pinned, exports remembered, batches shipped |
v3.18.2 | 2026-08-28 | SEVENTH-100 #23 — engraving hatch as real segments |
v3.18.1 | 2026-08-28 | SEVENTH-100 #21 — double-stroke as real inset geometry |
v3.18.0 | 2026-08-28 | SEVENTH-100 #20 — shadow and glow, without touching an outline |
v3.17.3 | 2026-08-28 | SEVENTH-100 #24 — EPS export, proven in Ghostscript |
v3.17.2 | 2026-08-28 | SEVENTH-100 #26 — the DXF names its cut and engrave layers |
v3.17.1 | 2026-08-28 | SEVENTH-100 #49 — m3d.js typechecked to zero, and five wrong contracts |
v3.16.20 | 2026-08-28 | SEVENTH-100 #31 — tags for projects, and the ratchet refused the first version |
v3.16.19 | 2026-08-28 | the first-keystroke crash came back, because I fixed the route and not the class |
v3.16.18 | 2026-08-27 | SEVENTH-100 #25 — every "print-ready" PDF was a plain page |
v3.16.17 | 2026-08-27 | law 3 on the product cards, and one honest 404 |
v3.16.16 | 2026-08-27 | bump the pin #34 owed, and stop two specs depending on whichever product the store returns first |
v3.16.15 | 2026-08-27 | SEVENTH-100 #28 — the missing Post shape, and safe areas |
v3.16.14 | 2026-08-27 | SEVENTH-100 #78 — a status page with a constant, and a probe that had never once succeeded |
v3.16.13 | 2026-08-27 | SEVENTH-100 #43 — contrast on every page, and the token that was documented but never existed |
v3.16.12 | 2026-08-26 | bump the pins the previous commit owed |
v3.16.11 | 2026-08-26 | the alarm that could never stop ringing, and the two crashes it was hiding (#81) |
v3.16.10 | 2026-08-26 | the first keystroke crashed the editor (#81) |
v3.16.9 | 2026-08-26 | CLS to ~0 — three root attributes were being set by JS |
v3.16.1 | 2026-08-26 | international sells UNFRAMED only, and the artist tier is fenced off |
v3.16.0 | 2026-08-26 | PAINT LAW v4 — the merchant's price table, delivery separate |
v3.15.6 | 2026-08-25 | typecheck slice 15 (482 → 441) |
v3.15.5 | 2026-08-25 | typecheck slice 14 (516 → 482) — two real crashes fixed |
v3.15.4 | 2026-08-25 | typecheck slice 13 (533 → 516) |
v3.15.3 | 2026-08-25 | the locked-layer flake was a real race, not the infra flake |
v3.15.2 | 2026-08-25 | the price curve ran backwards — tell the customer |
v3.15.1 | 2026-08-25 | two more dead controls from the same split |
v3.15.0 | 2026-08-25 | fix the dead "Get your Custom Piece NOW!" button |
v3.14.9 | 2026-08-25 | SIXTH-100 #26 slice 11 — 554 to 549, and where to stop |
v3.14.8 | 2026-08-25 | SIXTH-100 #26 slice 10 — 585 to 554 |
v3.14.7 | 2026-08-25 | law 21 + #26 slice 9 — 651 to 585 |
v3.14.6 | 2026-08-25 | repo-wide cast audit — a third wrong one, pre-existing |
v3.14.5 | 2026-08-25 | audit every cast against the real DOM element |
v3.14.4 | 2026-08-25 | SIXTH-100 #26 slice 7 — 751 to 651 |
v3.14.3 | 2026-08-25 | pin starter-shaped.json like every other asset |
v3.14.2 | 2026-08-25 | the baked paint no longer covers a returning designer's work |
v3.14.1 | 2026-08-25 | SIXTH-100 #26 slice 6 — implicit anys 205 to 122 |
v3.14.0 | 2026-08-25 | SIXTH-100 #23 — calligraphy paints before HarfBuzz loads |
v3.13.9 | 2026-08-25 | SIXTH-100 #26 slice 5 — 783 to 750, and one batch reverted |
v3.13.8 | 2026-08-25 | SIXTH-100 #27 — a stale tab stops loading fresh chunks |
v3.13.6 | 2026-08-25 | SIXTH-100 #26 slice 4 — the chunk's contract is typed |
v3.13.4 | 2026-08-25 | SIXTH-100 #40 — the reed learns to press |
v3.13.3 | 2026-08-25 | SIXTH-100 #48 — the compositions gallery |
v3.13.2 | 2026-08-25 | SIXTH-100 #47 — the hilya gains its four roundels |
v3.12.9 | 2026-08-25 | SIXTH-100 #65 — the logo teaches the canvas its colours |
v3.12.8 | 2026-08-25 | SIXTH-100 #50 — the checker sees across layers |
v3.12.5 | 2026-08-25 | SIXTH-100 #44 — the practice mode grades the hand |
v3.12.4 | 2026-08-25 | SIXTH-100 #46 — the couplet learns muqaffa and tarsi |
v3.12.3 | 2026-08-25 | deploy law — the pin check catches its first real miss |
v3.12.2 | 2026-08-25 | SIXTH-100 #49 — the letters name their own parts |
v3.12.1 | 2026-08-25 | SIXTH-100 #43 — ten more names learn their ductus |
v3.12.0 | 2026-08-25 | SIXTH-100 #18 — the starter renders before the font arrives |
v3.11.9 | 2026-08-25 | SIXTH-100 #45 closed by evidence + #26 slices 2-3 |
v3.11.8 | 2026-08-25 | SIXTH-100 #26 slice 1 — m3d typecheck debt 1006→904 |
v3.11.7 | 2026-08-25 | SIXTH-100 #39 — the qalam lab shares and exports |
v3.11.6 | 2026-08-25 | SIXTH-100 #94 — honesty as policy at /privacy |
v3.11.5 | 2026-08-25 | SIXTH-100 #36 — the qalam letters learn to join |
v3.11.4 | 2026-08-25 | SIXTH-100 #56 — the abandoned quote resumes itself |
v3.11.3 | 2026-08-25 | FIFTH post-close audit (app + split rounds) — 12 fixes |
v3.11.2 | 2026-08-24 | FIFTH-100 #23 + #25 — relief preview · render-API premise |
v3.11.1 | 2026-08-24 | FIFTH-100 #22 — multi-page documents |
v3.11.0 | 2026-08-24 | FIFTH-100 #17 — the codec unified in lib/doc.js |
v3.10.22 | 2026-08-24 | FIFTH-100 #18 + #28 — slice-4 truth · copilot type-checked |
v3.10.21 | 2026-08-24 | FIFTH-100 #62 — corporate logo-beside-calligraphy flow |
v3.10.20 | 2026-08-24 | FIFTH-100 #38 — guided practice tracing |
v3.10.19 | 2026-08-24 | FIFTH-100 #43 — the mushaf page preset |
v3.10.18 | 2026-08-24 | FIFTH-100 #45 — star-map letter scatter |
v3.10.17 | 2026-08-24 | FIFTH-100 #40 — marble/linen + per-letter textures |
v3.10.16 | 2026-08-24 | FIFTH-100 #39 — one-tap bayt balance from the checker |
v3.10.15 | 2026-08-24 | FIFTH-100 #46 — the hilya composition preset |
v3.10.14 | 2026-08-24 | FIFTH-100 #35 — full-word ductus for the write-on ten |
v3.10.13 | 2026-08-24 | FIFTH-100 #63 — abandoned-set nudge, once and done |
v3.10.12 | 2026-08-24 | FIFTH-100 #64 — per-user referral links with counters |
v3.10.11 | 2026-08-24 | FIFTH-100 #49 — Persian digit forms |
v3.10.10 | 2026-08-24 | FIFTH-100 #44 — checker v2: kashida overuse + gap anomalies |
v3.10.9 | 2026-08-24 | FIFTH-100 #42 — nib-ruled baseline grid printable |
v3.10.8 | 2026-08-24 | FIFTH-100 #41 — ligature explorer |
v3.10.7 | 2026-08-24 | FIFTH-100 #51 — undo labels name the word |
v3.10.6 | 2026-08-24 | FIFTH-100 #52 — glyph metrics in the letter panel |
v3.10.5 | 2026-08-24 | FIFTH-100 #53 — print bleed + safe-area guides |
v3.10.4 | 2026-08-24 | FIFTH-100 #54 — one-click export packs |
v3.10.3 | 2026-08-24 | FIFTH-100 #50 — tashkeel palettes + idle-race spec fixes |
v3.10.2 | 2026-08-24 | FIFTH-100 #31 — all preview faces off the critical path |
v3.10.1 | 2026-08-24 | FIFTH-100 #16 — export libs off the boot parse |
v3.10.0 | 2026-08-24 | FIFTH-100 #15 — the m3d chunk. Boot parse −174KB |
v3.9.7 | 2026-08-24 | FIFTH-100 #30 — first §B slices: copilot + strokes off boot |