Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@ on:
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
python-version: ${{ matrix.python-version }}
- name: Install
run: |
python -m pip install --upgrade pip
Expand All @@ -29,3 +33,25 @@ jobs:
- name: Refuse failing render
run: |
! geometry-validated-layout render examples/failing_cooktop/project.yaml --output /tmp/failing.svg

package:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Build distributions
run: |
python -m pip install --upgrade pip
python -m pip install build twine
python -m build
python -m twine check dist/*
tar -tf dist/*.tar.gz | grep -q 'examples/complete_kitchen/project.yaml'
tar -tf dist/*.tar.gz | grep -q 'docs/INTEGRATION.md'
- name: Verify wheel outside the checkout
run: |
python -m venv /tmp/geometry-layout-wheel
/tmp/geometry-layout-wheel/bin/pip install dist/*.whl
cd /tmp
/tmp/geometry-layout-wheel/bin/geometry-validated-layout --help
21 changes: 19 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
# Contributing

This repository is currently private while the reusable core is being extracted.
Bug reports and focused changes are welcome during the developer-preview phase.
Open an issue before undertaking a broad API or schema redesign so the intended
domain-neutral boundary can be agreed first.

Before proposing changes:

- keep project examples synthetic;
- add or update tests for validation behavior;
- avoid domain-specific rules in `geometry_validated_layout`;
- keep rendering deterministic and derived from the same coordinates used for validation.
- keep rendering deterministic and derived from the same coordinates used for
validation;
- document breaking model or CLI changes explicitly.

Run the required checks from the repository root:

```bash
python3 -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
pytest
geometry-validated-layout validate examples/complete_kitchen/project.yaml
geometry-validated-layout render examples/complete_kitchen/project.yaml --output /tmp/complete.svg
```

Also confirm that rendering `examples/failing_cooktop/project.yaml` is refused.
3 changes: 1 addition & 2 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2026
Copyright (c) 2026 David Front

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand All @@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

9 changes: 9 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
include AGENTS.md
include CONTRIBUTING.md
include LICENSE
include README.md
include SECURITY.md
include STATUS.md
recursive-include .agents *.md *.yaml
recursive-include docs *.md *.svg
recursive-include examples *.json *.md *.svg *.yaml
47 changes: 42 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,31 @@ geometry; render only after validation passes.
It is not a construction-approval tool. It is a small geometry back end for
auditable layout proposals and agent-generated designs.

> **Developer preview:** version 0.1.0 is pre-1.0. The data model and Python API
> may change incompatibly while downstream use cases establish the right public
> abstractions.

![Validated synthetic irregular kitchen](docs/demo/irregular_kitchen.svg)

## Why This Exists

This is not a visual planner, CAD package, or construction approval system. It
is a validation-first geometry backend for layout proposals made by humans or
coding agents. The intended workflow is to reject invalid geometry before a
plausible drawing can make it look acceptable.

A private downstream project provided an early practical test: an operation
envelope intersected an upper cabinet in plan, but the two occupied different
vertical intervals. The initial generic validator incorrectly reported a
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.

## Quick Start

```bash
git clone https://github.com/davidf9999/geometry-validated-layout.git
cd geometry-validated-layout
python3 -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
Expand Down Expand Up @@ -44,6 +66,22 @@ For a more complete downstream example, see
`examples/complete_kitchen/README.md`. It includes a substantial synthetic
project, checked-in machine validation report, and deterministic SVG drawing.

## Integrating With an Application

Use the CLI when integrating from another language or when a stable process
boundary is preferable. Python applications can construct `LayoutProject`
directly. Existing CAD, configurator, or domain applications should normally
keep their own data model and add a small adapter into the generic schema.

```text
existing app/domain model -> adapter -> LayoutProject -> validate_project()
-> report
-> render only after pass
```

See the [integration guide](docs/INTEGRATION.md) for pinned installation, CLI
exit/report behavior, Python, adapter, HTTP-service, and coding-agent examples.

## Scope

The generic core understands:
Expand All @@ -65,12 +103,11 @@ and supplier workbooks belong in a separate domain package or private project.
See `docs/ARCHITECTURE.md` for the dependency boundary and the criteria for
splitting out a reusable domain package.

## Why This Exists
## Compatibility

This is not a visual planner, CAD package, or construction approval system. It is
a validation-first geometry backend for layout proposals made by humans or
coding agents. The intended workflow is to reject invalid geometry before a
plausible drawing can make it look acceptable.
Python 3.10 through 3.14 are exercised in CI. The CLI is the recommended initial
integration surface. Direct Python imports are available but do not have stable
pre-1.0 compatibility guarantees yet.

## Agent Guidance

Expand Down
16 changes: 15 additions & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,23 @@
# Security

## Reporting

Do not open a public issue for a suspected vulnerability or accidental private
data disclosure. Use GitHub private vulnerability reporting when it is enabled
for this repository. Until then, contact the repository owner privately through
their GitHub profile and include only the minimum information needed to arrange
a secure report.

Ordinary validation bugs that do not expose private data or create a security
risk may be reported through GitHub Issues.

## Data Boundary

Do not commit private site geometry, addresses, supplier documents, construction
PDFs, Drive or Sheets IDs, photos, or generated project workbooks.

## Safety Boundary

This package validates geometric consistency only. It does not provide
construction approval, code compliance, electrical/plumbing certification, or
supplier/manufacturer sign-off.

19 changes: 12 additions & 7 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,18 @@ leave material plans only in chat history.

## Current state

- Repository visibility: private; public release is intentionally deferred.
- Repository visibility: private; the public developer-preview candidate has
been reviewed and approved for merge into `main`. Visibility remains
unchanged pending the final publication step.
- Package and CLI: `geometry-validated-layout` version `0.1.0`.
- Python import: `geometry_validated_layout`.
- Test baseline: 10 tests passing on Python 3.12.
- Test baseline: 10 tests, with CI coverage for Python 3.10 through 3.14.
- CI: tests, passing examples, deterministic rendering, and failing-render
refusal run on every push and pull request.
- Complete example: `examples/complete_kitchen/` contains synthetic YAML,
validation JSON, SVG, and usage notes.
- Integration guide: `docs/INTEGRATION.md` covers CLI, Python, adapters, service
wrappers, and coding-agent tools.
- Downstream proof: the private `kitchen-layout` project pins this package and
validates three real layouts through a supported conversion adapter.
- Repo-scoped Codex skill: `.agents/skills/geometry-validated-layout/`.
Expand Down Expand Up @@ -46,16 +50,17 @@ leave material plans only in chat history.

1. Add schema export and field-level data-model documentation.
2. Add a project scaffolding command and generated-artifact consistency test.
3. Decide and document public API/versioning guarantees.
4. Test supported Python versions in CI and add formatting/type checks.
3. Decide and document post-1.0 public API/versioning guarantees.
4. Add formatting/type checks when the package grows enough to justify them.
5. Generalize additional operation geometry only when a second downstream use
case proves the abstraction.

## Deferred publication work

- Fresh-user usability test from a clean clone.
- Privacy and Git-history audit immediately before changing visibility.
- Public screenshots/demo hosting, tagged release, and optional PyPI package.
- Final user approval of author-email exposure and copyright-holder text.
- Change visibility only after the clean-clone and privacy checks in
`docs/RELEASE_READINESS.md` pass.
- Tagged GitHub prerelease and optional later PyPI package.
- Contributor-facing issue templates and broader compatibility testing.
- Plugin packaging for distributing the generic and kitchen workflow skills.

Expand Down
Loading