Skip to content
This repository was archived by the owner on Jul 23, 2026. It is now read-only.

OxyAI Oxygen 0.4.0

Choose a tag to compare

@github-actions github-actions released this 26 May 12:48
Immutable release. Only release title and notes can be modified.
d7127d5

Highlights

  • CSS mapping coverage harness. New source-driven taxonomy and manifest at config/css-mapping/breakdance-coverage-manifest.json plus a real-source PASS/FAIL gate so reviewers can prove Oxygen, Breakdance Elements, and Breakdance Forms coverage from the installed plugin source rather than guessed property paths.
  • Selector property normalization. Oxygen selector registration now remaps path layouts for spacing, background, borders, layout, and typography buckets; merges layout.flex_wrap into layout.flex_direction (including wrap-only and override cases); scales CSS opacity 0..1 to Oxygen 0..100; cleans quoted font-family values; and rewrites %%SELECTOR%% to :selector.
  • Breakdance dead-write guardrails. The HTML converter detects and warns on Breakdance dead writes — container.margin.left/right = "auto" on EssentialElements\Columns/Column, layout.justify_content on EssentialElements\Columns, and partial alignment on EssentialElements\Column — and supportsDeclarationsFully() now correctly only rejects shorthand margins where the resolved left or right side is auto.
  • OxyDance selector-map findings. Documented selector-first patterns from OxyDance Pilot (docs/oxydance-css-mapping-findings.md) with a static extractor that accepts var/let/const PATH_MAP declarations.

Tooling

  • tools/css-mapping/extract-breakdance-contracts.php and extract-oxygen-core-contracts.php build static element inventories (control slugs, design/content paths, declarations, macros, default CSS selectors). Both now fail fast when an element class cannot be parsed.
  • tools/css-mapping/validate-breakdance-coverage.php validates inventories against the manifest. The manifest must declare a non-empty statuses map, and proof now accepts compiledCssTest or renderedPageTest (consistent with validate-coverage-manifest.php).
  • tools/css-mapping/real-source-coverage-gate.php runs the combined Breakdance + Oxygen gate using OXYAI_BREAKDANCE_ELEMENTS_DIR, OXYAI_BREAKDANCE_FORMS_DIR, and OXYAI_OXYGEN_CORE_DIR. Without those env vars the gate skips cleanly — no developer-specific defaults.
  • coverage-review-report.php, element-contract-backlog.php, element-contract-report.php, and cluster-coverage-gaps.php render reviewer-facing Markdown gates from the validator output.

Smoke tests

  • 14 new smoke tests covering the contract extractors, manifest validation, coverage gate, OxyDance selector map, element capabilities, and Breakdance dead-write audits. The new tests use throwing checks (no assert()) so they cannot be bypassed by zend.assertions.
  • Real-source smoke tests assert completeness/zero-gap criteria rather than version-pinned element counts, so routine Breakdance/Oxygen source updates no longer trigger false negatives.
  • Inventory assertions in real-source-coverage-gate.php look up rows by name; SKIP detection covers any inventory row, not only Breakdance.

Fixes from PR review

  • Token-aware flex_wrap merging so flex_direction: "row nowrap" + flex_wrap: "wrap" resolves to row wrap and a wrap-only value no longer leaks through.
  • ConversionAuditBuilder::hasHorizontalAutoMargin() reads structured margin sides (['style' => 'auto'], etc.) safely and stops emitting "Array to string conversion" warnings.
  • coverage-review-report.php only flags stripSafe rules as proofless when hasProof is explicitly false.
  • element-contract-report.php guards gapPaths, cssDeclarationsTouchingGaps, cssMacrosTouchingGaps, and completionChecklist against non-array payloads.
  • Documentation and PHP tool headers use portable <path-to-*> placeholders instead of hardcoded reviewer paths.

Installation

Download oxyai-0.4.0.zip, unzip it into wp-content/plugins, and activate OxyAI Oxygen in WordPress.