Skip to content

Accept compiler font plans without local producer faces #879

Description

@chubes4

Problem

Canonical matrix fixture 10-nonprofit now passes dependency discovery with SSI PR #875 and combined Blocks Engine commit 598c6898, but import aborts before creating any pages with static_site_importer_font_materialization_producer_face_invalid / producer_face_invalid.

The compiled site uses authored font-family declarations but exposes no planned local font families (planned_font_families: [], expected and embedded SVG font count 0). SSI's font materialization producer validation nevertheless treats the absent/non-local producer face shape as fatal. The resulting editor-open and 92.48% visual mismatch failures are downstream because the front page was never materialized.

The immutable fixture must remain unchanged. The owning font-materialization boundary should distinguish a valid no-local-font plan from a malformed declared local font face.

Reproduction

Run the canonical matrix locally against fixture 10-nonprofit, SSI PR #875 head c7c07f9a, and Blocks Engine combined commit 598c6898. Dependency discovery passes; import returns a failed materialization receipt with zero pages and producer_face_invalid.

Artifacts from the direct run:

  • 10-nonprofit/materialization-receipt--001.json
  • wp-codebox-output-batch-001.json
  • static-site-fixture-matrix-result.json

Acceptance

  • A compiler plan with no declared local font families bypasses local producer-face materialization cleanly.
  • Declared local producer faces remain strictly validated and malformed faces still fail closed.
  • Fixture 10-nonprofit imports without producer_face_invalid and creates its front page without fixture changes.
  • Contract coverage distinguishes absent, valid local, and malformed local producer-face states.
  • Diagnostics identify the rejected face fields when validation fails.

AI assistance

OpenAI gpt-5.6-sol via OpenCode and a general OpenCode subagent ran the immutable canonical fixture directly through WP Codebox, isolated the first failing import stage, and drafted the owning-layer contract. Chris Huber directed the investigation and remains responsible for the issue and resulting change.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions