From 04adf04016967f611b33e02427057141d115d7ff Mon Sep 17 00:00:00 2001 From: David Front Date: Tue, 21 Jul 2026 20:06:28 +0300 Subject: [PATCH 1/4] Prepare public developer preview --- .github/workflows/ci.yml | 27 +++++++++++++- CONTRIBUTING.md | 21 +++++++++-- MANIFEST.in | 9 +++++ README.md | 31 +++++++++++++--- SECURITY.md | 16 ++++++++- STATUS.md | 16 +++++---- docs/RELEASE_READINESS.md | 74 +++++++++++++++++++++++++++++++++++++++ pyproject.toml | 10 ++++-- 8 files changed, 186 insertions(+), 18 deletions(-) create mode 100644 MANIFEST.in create mode 100644 docs/RELEASE_READINESS.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e60c2df..97c3106 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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 @@ -29,3 +33,24 @@ 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' + - 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 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2d4b959..8989bca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..61424bb --- /dev/null +++ b/MANIFEST.in @@ -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 diff --git a/README.md b/README.md index 3995915..a1b3cce 100644 --- a/README.md +++ b/README.md @@ -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]" @@ -65,12 +87,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 diff --git a/SECURITY.md b/SECURITY.md index 8f98647..7daaa5d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -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. - diff --git a/STATUS.md b/STATUS.md index 44de018..b1d4ac6 100644 --- a/STATUS.md +++ b/STATUS.md @@ -8,10 +8,11 @@ leave material plans only in chat history. ## Current state -- Repository visibility: private; public release is intentionally deferred. +- Repository visibility: private; release preparation is active on + `release/public-preview` while `main` remains stable. - 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, @@ -46,16 +47,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. diff --git a/docs/RELEASE_READINESS.md b/docs/RELEASE_READINESS.md new file mode 100644 index 0000000..8732269 --- /dev/null +++ b/docs/RELEASE_READINESS.md @@ -0,0 +1,74 @@ +# Public release readiness + +Last reviewed: 2026-07-21. + +This is the canonical go/no-go record for the first public developer preview. +The target is a small, honestly scoped source release, not a claim of stable API +or construction suitability. + +## Completed repository checks + +- The current tree contains synthetic examples only. +- Full Git path history contains no PDFs, office documents, photos, private + kitchen files, construction plans, or removed binary assets. +- Automated history searches found no Drive or Sheets URLs, site IP addresses, + machine paths, repository credentials, private keys, or common token forms. +- A private downstream project installs the package at an exact commit and runs + the generic validator against three substantial layouts. +- README, architecture, security, contributing, status, skill, license, and CI + files exist in the repository. +- CI validates passing examples, refuses a failing render, tests the declared + Python range, and builds/checks installable distributions. + +Automated searches reduce risk but do not replace the repository owner's final +privacy review. + +## Required before visibility changes + +- [ ] Decide whether the existing Git author name and email may be public. If + not, replace or rewrite history before publication. +- [ ] Name the intended MIT copyright holder in `LICENSE`. +- [ ] Complete the clean-clone procedure below from the pushed release branch. +- [ ] Confirm GitHub CI passes on the exact candidate commit. +- [ ] Review the rendered synthetic example and public-facing README. +- [ ] Enable GitHub private vulnerability reporting after the repository is + public, then verify the reporting language in `SECURITY.md`. +- [ ] Merge the reviewed release branch into `main`. +- [ ] Change repository visibility only after all preceding items pass. + +## Clean-clone procedure + +Run without a sibling checkout or pre-existing virtual environment: + +```bash +git clone --branch release/public-preview \ + https://github.com/davidf9999/geometry-validated-layout.git +cd geometry-validated-layout +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 +! geometry-validated-layout render examples/failing_cooktop/project.yaml \ + --output /tmp/failing.svg +``` + +Build and inspect release archives separately: + +```bash +python -m pip install build twine +python -m build +python -m twine check dist/* +tar -tf dist/*.tar.gz +unzip -l dist/*.whl +``` + +## Deferred until after publication + +- PyPI publication. +- JSON Schema export and an `init` command. +- Hosted interactive demonstrations. +- Formal stable-API guarantees. +- A kitchen-domain package without a second independent downstream project. diff --git a/pyproject.toml b/pyproject.toml index c6468e0..a2d7dc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=69"] +requires = ["setuptools>=77"] build-backend = "setuptools.build_meta" [project] @@ -8,7 +8,9 @@ version = "0.1.0" description = "Deterministic geometry validation and rendering for coordinate-based spatial layouts" readme = "README.md" requires-python = ">=3.10" -license = { text = "MIT" } +license = "MIT" +license-files = ["LICENSE"] +keywords = ["computational-geometry", "layout", "spatial-validation", "svg"] dependencies = [ "PyYAML>=6.0", "pydantic>=2.7", @@ -21,6 +23,10 @@ dev = ["pytest>=8.0"] [project.scripts] geometry-validated-layout = "geometry_validated_layout.cli:main" +[project.urls] +Homepage = "https://github.com/davidf9999/geometry-validated-layout" +Issues = "https://github.com/davidf9999/geometry-validated-layout/issues" + [tool.pytest.ini_options] pythonpath = ["src"] testpaths = ["tests"] From e8fb198fd156d94e184ef60a9477466b31d5ef23 Mon Sep 17 00:00:00 2001 From: David Front Date: Tue, 21 Jul 2026 20:09:10 +0300 Subject: [PATCH 2/4] Record release candidate verification --- docs/RELEASE_READINESS.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/RELEASE_READINESS.md b/docs/RELEASE_READINESS.md index 8732269..a4669cf 100644 --- a/docs/RELEASE_READINESS.md +++ b/docs/RELEASE_READINESS.md @@ -28,14 +28,20 @@ privacy review. - [ ] Decide whether the existing Git author name and email may be public. If not, replace or rewrite history before publication. - [ ] Name the intended MIT copyright holder in `LICENSE`. -- [ ] Complete the clean-clone procedure below from the pushed release branch. -- [ ] Confirm GitHub CI passes on the exact candidate commit. +- [x] Complete the clean-clone procedure below from the pushed release branch. +- [x] Confirm GitHub CI passes on the candidate, including Python 3.10 through + 3.14 and package installation outside the checkout. - [ ] Review the rendered synthetic example and public-facing README. -- [ ] Enable GitHub private vulnerability reporting after the repository is - public, then verify the reporting language in `SECURITY.md`. - [ ] Merge the reviewed release branch into `main`. - [ ] Change repository visibility only after all preceding items pass. +## Immediately after visibility changes + +- [ ] Enable GitHub private vulnerability reporting and verify the reporting + language in `SECURITY.md`. +- [ ] Create a `v0.1.0` GitHub prerelease with the developer-preview boundary + and known limitations from `STATUS.md`. + ## Clean-clone procedure Run without a sibling checkout or pre-existing virtual environment: From e4865a459916435b93a887f04fadb910bfe6dca8 Mon Sep 17 00:00:00 2001 From: David Front Date: Wed, 22 Jul 2026 13:24:38 +0300 Subject: [PATCH 3/4] Document application integration patterns --- .github/workflows/ci.yml | 1 + LICENSE | 3 +- README.md | 16 +++ STATUS.md | 2 + docs/INTEGRATION.md | 210 ++++++++++++++++++++++++++++++++++++++ docs/RELEASE_READINESS.md | 8 +- 6 files changed, 234 insertions(+), 6 deletions(-) create mode 100644 docs/INTEGRATION.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97c3106..4dcd384 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,6 +48,7 @@ jobs: 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 diff --git a/LICENSE b/LICENSE index e8a9ddc..a288ab0 100644 --- a/LICENSE +++ b/LICENSE @@ -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 @@ -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. - diff --git a/README.md b/README.md index a1b3cce..85d37b0 100644 --- a/README.md +++ b/README.md @@ -66,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: diff --git a/STATUS.md b/STATUS.md index b1d4ac6..170e21c 100644 --- a/STATUS.md +++ b/STATUS.md @@ -17,6 +17,8 @@ leave material plans only in chat history. 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/`. diff --git a/docs/INTEGRATION.md b/docs/INTEGRATION.md new file mode 100644 index 0000000..1eedf6c --- /dev/null +++ b/docs/INTEGRATION.md @@ -0,0 +1,210 @@ +# Integration guide + +`geometry-validated-layout` is a Python package and command-line tool. It is not +a browser library, CAD file parser, or hosted service. Integrating applications +provide structured layout data and decide how domain policy, storage, editing, +and final presentation work around the generic validation boundary. + +Version 0.1.0 is a developer preview. Prefer the CLI when a stable process +boundary matters. Pin an exact release or commit and review upgrades +deliberately. + +## Install from Git + +After the first public tag, install the source release directly: + +```bash +pip install \ + "geometry-validated-layout @ git+https://github.com/davidf9999/geometry-validated-layout.git@v0.1.0" +``` + +The equivalent `pyproject.toml` dependency is: + +```toml +dependencies = [ + "geometry-validated-layout @ git+https://github.com/davidf9999/geometry-validated-layout.git@v0.1.0", +] +``` + +PyPI publication is intentionally deferred. Until a tag exists, use an exact +reviewed commit instead of a moving branch. + +## Choose an Integration Boundary + +| Situation | Recommended boundary | +| --- | --- | +| Shell, CI, Node, Java, Ruby, or another language | CLI subprocess | +| New Python backend using the generic schema | `LayoutProject` and `validate_project` | +| Existing CAD, configurator, or domain application | Explicit adapter into `LayoutProject` | +| Browser or mobile application | Python HTTP service or background worker | +| Coding agent | Tool wrapper that validates before allowing render | + +## CLI and Subprocess Integration + +Write a YAML project and invoke validation: + +```bash +geometry-validated-layout validate project.yaml --json validation.json +``` + +The command writes a human-readable report to standard output. With `--json`, +it also writes a structured report containing: + +- `hard_pass` and `geometry_pass`; +- passed checks, warnings, and errors; +- module-run sums; +- measured clearances; +- operation-envelope blockers. + +Exit code `0` means hard validation passed. A hard validation failure returns +`1`; malformed input also exits nonzero. Treat any nonzero result as a refusal, +then read the report or process error before changing the proposal. + +Rendering repeats validation and creates no SVG after a hard failure: + +```bash +geometry-validated-layout render project.yaml --output plan.svg +``` + +An application calling the CLI should use an argument array rather than a shell +string and should write each request to an isolated working directory. + +## Direct Python Integration + +Construct the typed model from an application payload and inspect the report: + +```python +from geometry_validated_layout import LayoutProject, validate_project + + +def validate_payload(payload: dict) -> dict: + project = LayoutProject.model_validate(payload) + report, geometry = validate_project(project) + return { + "report": report.as_dict(), + "geometry_available": bool(geometry), + } +``` + +To produce the package's deterministic diagnostic SVG after a pass: + +```python +from pathlib import Path + +from geometry_validated_layout.render_svg import render_svg + +report, _ = validate_project(project) +if not report.hard_pass: + raise ValueError(report.as_dict()) + +render_svg(project, Path("plan.svg")) +``` + +The CLI is the preferred compatibility boundary for 0.1.x. Direct imports are +useful, but Python API compatibility is not guaranteed before 1.0. + +## Adapting an Existing Application + +Do not replace a mature application's domain model merely to use this package. +Add an adapter that exports the generic subset: + +```text +existing domain objects + | + | explicit, tested conversion + v +LayoutProject + | + +--> validate_project() --> machine/human report + | + +--> render_svg() only when the generic diagnostic drawing is useful +``` + +Map the following explicitly: + +- authoritative shell points, boundary order, and protected segments; +- closed object footprints or wall anchors in centimetres; +- elevation bottoms and heights; +- typed parent relationships; +- operation and use depths that fit the supported generic modes; +- required object-to-object clearances; +- exact module-run memberships and targets; +- assumptions and conversion limitations. + +Keep domain rules downstream. Appliance counts, plumbing restrictions, local +codes, pricing, product installation instructions, site verification, and +commercial reports do not belong in the generic model. + +The adapter should have regression tests proving that known passing and failing +domain projects produce the expected generic result. `kitchen-layout` uses this +pattern to run generic validation alongside its authoritative kitchen-specific +validator. + +## HTTP Service Wrapper + +A browser or mobile application can call a small Python service. For example, +with FastAPI supplied by the host application: + +```python +from fastapi import FastAPI + +from geometry_validated_layout import LayoutProject, validate_project + +app = FastAPI() + + +@app.post("/validate-layout") +def validate_layout(project: LayoutProject) -> dict: + report, _ = validate_project(project) + return report.as_dict() +``` + +Keep authentication, request-size limits, rate limiting, persistence, and +tenant isolation in the host service. A geometrically invalid proposal is a +successful validation request with `hard_pass: false`, not a server failure. + +## Coding-Agent Tool + +Expose validation and rendering as separate tools. The render tool must call +validation again rather than trusting a previous agent statement. + +```python +from geometry_validated_layout import LayoutProject, validate_project + + +def validate_layout_tool(arguments: dict) -> dict: + project = LayoutProject.model_validate(arguments["project"]) + report, _ = validate_project(project) + return report.as_dict() +``` + +At runtime, frameworks that accept JSON Schema can derive the current model +schema with `LayoutProject.model_json_schema()`. A checked-in, versioned schema +artifact is planned but is not part of 0.1.0. + +An agent workflow should: + +1. Preserve the authoritative shell. +2. Propose changes only in structured layout data. +3. Run validation and inspect specific errors. +4. Amend the proposal rather than weakening constraints. +5. Render only after `hard_pass` is true. + +## CAD and Geometry Frameworks + +The package does not parse IFC, DXF, SVG, or proprietary CAD files. Integrators +must convert those formats into shell points, polygons, vertical intervals, and +relationships. Keep source-object IDs in the generic object IDs so validation +errors can be mapped back to the originating application. + +The returned Shapely-backed geometry is useful inside Python, but it is not a +stable serialization contract. Cross-language applications should depend on the +input project format and JSON validation report instead. + +## Current Limits + +Before integrating, review `STATUS.md` and +`.agents/skills/geometry-validated-layout/references/model-and-limitations.md`. +In particular, 0.1.0 does not provide circulation connectivity, domain rules, +3D rendering, workbooks, site-verification status, or complex hinged-operation +geometry. diff --git a/docs/RELEASE_READINESS.md b/docs/RELEASE_READINESS.md index a4669cf..c683ab6 100644 --- a/docs/RELEASE_READINESS.md +++ b/docs/RELEASE_READINESS.md @@ -1,6 +1,6 @@ # Public release readiness -Last reviewed: 2026-07-21. +Last reviewed: 2026-07-22. This is the canonical go/no-go record for the first public developer preview. The target is a small, honestly scoped source release, not a claim of stable API @@ -25,9 +25,9 @@ privacy review. ## Required before visibility changes -- [ ] Decide whether the existing Git author name and email may be public. If - not, replace or rewrite history before publication. -- [ ] Name the intended MIT copyright holder in `LICENSE`. +- [x] Repository owner approved publishing the existing Git author name and + email; no history rewrite is required. +- [x] Name `David Front` as the MIT copyright holder in `LICENSE`. - [x] Complete the clean-clone procedure below from the pushed release branch. - [x] Confirm GitHub CI passes on the candidate, including Python 3.10 through 3.14 and package installation outside the checkout. From 9e54cc10f583d3cce1efd360ca7e4982c178702b Mon Sep 17 00:00:00 2001 From: David Front Date: Wed, 22 Jul 2026 13:56:29 +0300 Subject: [PATCH 4/4] Record release candidate approval --- STATUS.md | 5 +++-- docs/RELEASE_READINESS.md | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/STATUS.md b/STATUS.md index 170e21c..410e65b 100644 --- a/STATUS.md +++ b/STATUS.md @@ -8,8 +8,9 @@ leave material plans only in chat history. ## Current state -- Repository visibility: private; release preparation is active on - `release/public-preview` while `main` remains stable. +- 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, with CI coverage for Python 3.10 through 3.14. diff --git a/docs/RELEASE_READINESS.md b/docs/RELEASE_READINESS.md index c683ab6..e742d97 100644 --- a/docs/RELEASE_READINESS.md +++ b/docs/RELEASE_READINESS.md @@ -31,8 +31,9 @@ privacy review. - [x] Complete the clean-clone procedure below from the pushed release branch. - [x] Confirm GitHub CI passes on the candidate, including Python 3.10 through 3.14 and package installation outside the checkout. -- [ ] Review the rendered synthetic example and public-facing README. -- [ ] Merge the reviewed release branch into `main`. +- [x] Repository owner reviewed the public-facing material and authorized the + release branch merge. +- [x] Merge authorization recorded for `release/public-preview` into `main`. - [ ] Change repository visibility only after all preceding items pass. ## Immediately after visibility changes