Skip to content

Releases: redmodd/tessera

tessera-learn@0.2.2

04 Jun 15:07
0e18ef8

Choose a tag to compare

Patch Changes

  • 663357a: tessera a11y / tessera check now auto-install Chromium for Playwright on first use instead of failing with a manual instruction.
  • fc41b00: a11y audit now reports which element triggered each violation: a11y-report.json records the selector, HTML, and axe's failure summary per node, and the console output lists the offending selector and failure summary.
  • ba866d1: Rewrite the course authoring guide (AGENTS.md) into a procedural, LLM-facing instruction set — converting prose to rules/tables and trimming runtime-internal reference that authors never write.
  • 701a18d: Internal refactor with no author-facing changes: the four question widgets now share a QuestionShell component for their standalone-vs-quiz render, and the LMS adapter labels and cmi5 context builder were de-duplicated.
  • 7978096: A course directory under courses/ that has a pages/ folder but is missing its course.config.js is now reported as skipped when listing the workspace's courses, instead of being silently dropped.

create-tessera@0.2.2

04 Jun 15:07
0e18ef8

Choose a tag to compare

Patch Changes

  • 455a7d4: Scaffolded workspaces now include a human-facing README.md and a "Project notes" section in AGENTS.md where users add their own context for the agent.

tessera-learn@0.2.1

02 Jun 19:51
9dc4caf

Choose a tag to compare

Patch Changes

  • 1ddd286: tessera a11y now audits every page of a course that uses a custom layout.svelte, instead of silently scanning only the entry page and reporting a pass. A page that fails to load at runtime is flagged in the report and fails the audit, rather than being scanned as an accessible error screen.
  • eac739d: Scaffolded root scripts now pass through to the CLI (tessera dev) instead of hardcoding the seed course. pnpm dev <course> runs the course you name, and a bare pnpm dev lists the available courses rather than silently running the seed.

tessera-learn@0.2.0

02 Jun 15:07
0554d81

Choose a tag to compare

Minor Changes

  • a60b5bb: Workspaces: one project, many courses. npm create tessera now scaffolds a workspace — a single package that holds many courses under courses/<name>/, sharing one node_modules and a shared/ design system imported as $shared (resolved in dev, bundled into each export). Every course still exports independently to its own SCORM 1.2 / SCORM 2004 4e / cmi5 / web package.

    • tessera new <name> stamps a new course; tessera duplicate <source> <new> copies an existing one verbatim (config and title included).
    • dev / export / validate / a11y / check take an optional course name (tessera dev <name>), or run bare from inside a course folder; a bare command at the workspace root lists the available courses instead of guessing.

    Breaking: the standalone single-course layout is no longer scaffolded or supported — the workspace is the only shape going forward. Pre-1.0, so this ships as a minor (0.x).

Patch Changes

  • 5f18964: Correct the tessera CLI's invocation hints and docs for a project-local bin, and add an a11y script to scaffolded projects (pnpm a11y).

create-tessera@0.2.1

02 Jun 19:51
9dc4caf

Choose a tag to compare

Patch Changes

  • eac739d: Scaffolded root scripts now pass through to the CLI (tessera dev) instead of hardcoding the seed course. pnpm dev <course> runs the course you name, and a bare pnpm dev lists the available courses rather than silently running the seed.

create-tessera@0.2.0

02 Jun 15:07
0554d81

Choose a tag to compare

Minor Changes

  • a60b5bb: Workspaces: one project, many courses. npm create tessera now scaffolds a workspace — a single package that holds many courses under courses/<name>/, sharing one node_modules and a shared/ design system imported as $shared (resolved in dev, bundled into each export). Every course still exports independently to its own SCORM 1.2 / SCORM 2004 4e / cmi5 / web package.

    • tessera new <name> stamps a new course; tessera duplicate <source> <new> copies an existing one verbatim (config and title included).
    • dev / export / validate / a11y / check take an optional course name (tessera dev <name>), or run bare from inside a course folder; a bare command at the workspace root lists the available courses instead of guessing.

    Breaking: the standalone single-course layout is no longer scaffolded or supported — the workspace is the only shape going forward. Pre-1.0, so this ships as a minor (0.x).

Patch Changes

  • 5f18964: Correct the tessera CLI's invocation hints and docs for a project-local bin, and add an a11y script to scaffolded projects (pnpm a11y).

tessera-learn@0.1.0

31 May 19:09
49676e4

Choose a tag to compare

Minor Changes

  • 8ff7039: The tessera-validate and tessera-a11y binaries are now one tessera CLI with validate, a11y, and check subcommands; new projects are set up for pnpm (run pnpm exec playwright install chromium once to enable the browser-backed check/a11y audit).

  • 09314ec: The tessera CLI now owns the build — tessera dev / tessera export run Vite programmatically, so scaffolded projects no longer carry vite.config.js or a vite devDependency (add an optional tessera.config.js to customise), and the create-tessera upgrade command is gone (update a course with pnpm add tessera-learn@latest). The authoring guide now ships inside tessera-learn at node_modules/tessera-learn/AGENTS.md, with CLAUDE.md / AGENTS.md pointer stubs in scaffolded projects.

    Migrating a project scaffolded before this release: swap the npm scripts to tessera dev / tessera export / tessera validate / tessera check, drop vite and @sveltejs/vite-plugin-svelte from devDependencies, and delete vite.config.js.

Patch Changes

  • df7b48b: Fix flat-shape courses (.svelte pages directly inside a section directory) rendering no pages: manifest generation and validation now share one page walker.
  • 9020eeb: The build-time validator now catches cases the old regex scanner skipped — components carrying a : directive (class:/bind:/transition:) and unparseable Svelte — and no longer false-matches commented-out or string-embedded tags.
  • Internal: dependency bumps (including Svelte 5.56), test hardening and dedup, runtime refactors, a doc-anchor fix, and CodeQL/CI cleanup — no API or behavior changes.

create-tessera@0.1.0

31 May 19:09
49676e4

Choose a tag to compare

Minor Changes

  • 8ff7039: The tessera-validate and tessera-a11y binaries are now one tessera CLI with validate, a11y, and check subcommands; new projects are set up for pnpm (run pnpm exec playwright install chromium once to enable the browser-backed check/a11y audit).

  • 09314ec: The tessera CLI now owns the build — tessera dev / tessera export run Vite programmatically, so scaffolded projects no longer carry vite.config.js or a vite devDependency (add an optional tessera.config.js to customise), and the create-tessera upgrade command is gone (update a course with pnpm add tessera-learn@latest). The authoring guide now ships inside tessera-learn at node_modules/tessera-learn/AGENTS.md, with CLAUDE.md / AGENTS.md pointer stubs in scaffolded projects.

    Migrating a project scaffolded before this release: swap the npm scripts to tessera dev / tessera export / tessera validate / tessera check, drop vite and @sveltejs/vite-plugin-svelte from devDependencies, and delete vite.config.js.

Patch Changes

  • df7b48b: Fix flat-shape courses (.svelte pages directly inside a section directory) rendering no pages: manifest generation and validation now share one page walker.
  • Internal: dependency bumps (including Svelte 5.56), a doc-anchor fix, and CodeQL/CI cleanup — no API or behavior changes.

tessera-learn@0.0.13

26 May 00:19
96e66b3

Choose a tag to compare

Patch Changes

  • 1edf88f: Accessibility checker — a three-tier system for catching a11y issues, plus the component and config changes to support it.

    • Components. Image now requires either alt or the new decorative flag (was silently optional). Video/Audio require a title and accept tracks (rendered as <track>) and a transcript disclosure. A new top-level language config field (BCP-47, default 'en') sets <html lang>.
    • Static analyzer (build + dev, no new deps). Routes Svelte's a11y_* compiler warnings through the validation reporter, plus tessera-specific rules for missing alt/title/captions, empty question labels, skipped heading levels, low primaryColor contrast, and malformed language tags.
    • Runtime auditor. New tessera-a11y bin runs Playwright + axe-core over a built course, writes a11y-report.json, and exits non-zero above an impact threshold (default serious). Playwright and @axe-core/playwright are optional.
    • Config. New a11y block: level (warn/error), standard (axe ruleset tags), and ignore (per-rule escape hatch).
    • Scaffold. New courses ship language: 'en' and a reserved accessibility-check script (→ tessera-a11y); upgrade adds it to existing projects.
    • Fix. $assets/ references with a Vite query suffix (?raw, ?url) are no longer mis-reported as missing.
  • 64bc37c: Fix correctness issues surfaced by new static analysis: four unhandled promises in async LMS/runtime work (cmi5 State PUT, the write-queue flush, ZIP finalize, page prefetch) are now explicitly fire-and-forget (behavior unchanged); cmi5 launch-parameter errors attach the underlying error via cause; and <AccordionItem> derives its element ids from $props.id() instead of a module-level counter. Also adds monorepo type-checking, ESLint, and Prettier (internal tooling). No public API change.

  • 4e69ce8: Internal: extract QuizEngine from the useQuiz closure into a standalone, DOM-free class. No public API or behavior change.

  • cc638d6: Close build-time validation gaps so authors get a diagnostic instead of silent misbehavior:

    • quiz.feedbackMode / quiz.retryMode — enum-checked; catches typos that previously fell through to the default.
    • title — warns when missing or empty, errors when non-string.
    • Question weight — warns when ignored or coerced; errors on a non-finite value that would make the score NaN.
    • Question id (SCORM 1.2) — warns when sanitization would rewrite it, errors on a post-sanitization collision.
    • MultipleChoice.optionFeedback — warns when it has more entries than options.
    • scoring.passingScore — warns when completion.mode: "quiz" leaves it at the implicit default (70%).
    • branding — warns on a malformed logo, primaryColor, or fontFamily.
    • Empty sections — warns when a section contributes no pages.

create-tessera@0.0.13

26 May 00:19
96e66b3

Choose a tag to compare

Patch Changes

  • 1edf88f: Accessibility checker — a three-tier system for catching a11y issues, plus the component and config changes to support it.

    • Components. Image now requires either alt or the new decorative flag (was silently optional). Video/Audio require a title and accept tracks (rendered as <track>) and a transcript disclosure. A new top-level language config field (BCP-47, default 'en') sets <html lang>.
    • Static analyzer (build + dev, no new deps). Routes Svelte's a11y_* compiler warnings through the validation reporter, plus tessera-specific rules for missing alt/title/captions, empty question labels, skipped heading levels, low primaryColor contrast, and malformed language tags.
    • Runtime auditor. New tessera-a11y bin runs Playwright + axe-core over a built course, writes a11y-report.json, and exits non-zero above an impact threshold (default serious). Playwright and @axe-core/playwright are optional.
    • Config. New a11y block: level (warn/error), standard (axe ruleset tags), and ignore (per-rule escape hatch).
    • Scaffold. New courses ship language: 'en' and a reserved accessibility-check script (→ tessera-a11y); upgrade adds it to existing projects.
    • Fix. $assets/ references with a Vite query suffix (?raw, ?url) are no longer mis-reported as missing.
  • 28cdba8: Pin scaffolded and upgraded tessera-learn to the exact version create-tessera ships, derived from its own version rather than a hand-maintained tesseraVersion field. The two packages now release in lockstep, so the pinned runtime can't drift from what was published.

  • d4e0351: Move scaffolder templates from inline strings to real on-disk template directories copied by a token-substituting walker, and make the post-scaffold "Next steps" hint package-manager-aware (npm/pnpm/yarn/bun). Mostly internal, but scaffolded output changes slightly: the bare template's demo question now uses the documented choice pattern (readable ids + options, so SCORM 1.2 export emits the position indexes SCORM Cloud requires), and the README/AGENTS.md note that npm commands can be swapped for your package manager.