diff --git a/MANIFEST.in b/MANIFEST.in index 61424bb..821f6af 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -5,5 +5,5 @@ include README.md include SECURITY.md include STATUS.md recursive-include .agents *.md *.yaml -recursive-include docs *.md *.svg +recursive-include docs *.html *.md *.png *.svg recursive-include examples *.json *.md *.svg *.yaml diff --git a/README.md b/README.md index 85d37b0..094b2c5 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ auditable layout proposals and agent-generated designs. > may change incompatibly while downstream use cases establish the right public > abstractions. -![Validated synthetic irregular kitchen](docs/demo/irregular_kitchen.svg) +![A validated kitchen plan beside a refused invalid render](docs/social-preview.png) ## Why This Exists @@ -30,6 +30,22 @@ blockage. The downstream adapter exposed the defect, and the core now makes operation-blocker checks height-aware. This feedback loop is why the package is kept separate from domain policy while still being exercised by a real project. +## Failure Is a First-Class Output + +The validator does not produce a design drawing after a hard failure: + +```console +$ geometry-validated-layout render examples/failing_cooktop/project.yaml \ + --output /tmp/failing.svg +Errors: +- cooktop_01: footprint is not contained by parent counter_01 +Rendering refused because validation failed. +``` + +This refusal is part of the public contract: rendering and validation use the +same structured coordinates, so a plausible image cannot hide rejected +geometry. + ## Quick Start ```bash @@ -44,14 +60,15 @@ geometry-validated-layout render examples/irregular_kitchen/project.yaml --outpu pytest ``` -The failing example demonstrates the main value: +Try the deliberate failure: ```bash -geometry-validated-layout validate examples/failing_cooktop/project.yaml +geometry-validated-layout render examples/failing_cooktop/project.yaml \ + --output /tmp/failing.svg ``` -Expected result: validation fails because the cooktop is not contained by its -parent countertop and supporting base. +Expected result: validation identifies the containment error and rendering is +refused. Generate the demo SVG: diff --git a/docs/social-preview.html b/docs/social-preview.html new file mode 100644 index 0000000..290d14e --- /dev/null +++ b/docs/social-preview.html @@ -0,0 +1,87 @@ + + + + + + geometry-validated-layout social preview + + + +
+
+
+
geometry-validated-layout
+

Validate before render.

+
+
Python · CLI · v0.1.0 developer preview
+
+ +
+
+
PASS · Deterministic SVG rendered
+
+ Validated synthetic kitchen plan +
+
+ +
+
FAIL · Invalid geometry rejected
+
+
$ geometry-validated-layout render
examples/failing_cooktop/project.yaml
+
ERROR
+
cooktop_01: footprint is not contained by parent counter_01
+
RENDERING REFUSED
+
+
+
+ + +
+ + diff --git a/docs/social-preview.png b/docs/social-preview.png new file mode 100644 index 0000000..d1d8ce5 Binary files /dev/null and b/docs/social-preview.png differ