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
14 changes: 9 additions & 5 deletions IMPORT_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@ def check_strict_auditing_nf(schema: RelationalSchema) -> Tuple[bool, Optional[s

## 5. Deployment Guide: Companion Web Interface

The repository includes a companion web application, **Simplex-NF Studio ("The Normal Form Workbench")**, with a Render blueprint targeting `smplxnf.anomalon.com`. Configuration is not deployment evidence: see [current status](docs/PROJECT_STATUS.md) and the [deployment runbook](docs/DEPLOYMENT.md).
The repository includes a companion web application, **Simplex-NF Studio ("The Normal Form Workbench")**, deployed at [smplxnf.anomalon.com](https://smplxnf.anomalon.com) on the separate `smplxnf-live` Render service. HTTPS/API smoke checks passed on 2026-11-02; full live browser acceptance remains incomplete. See [current status](docs/PROJECT_STATUS.md), the [deployment record](docs/verification/2026-11-02-deployment.md) and the [deployment runbook](docs/DEPLOYMENT.md). The blueprint below matches the selected Free compute plan; Render separately disclosed a $0.25/month custom-domain charge approved by the user.

### 5.1 Local Development Server

Expand All @@ -600,10 +600,10 @@ The repository includes a declarative `render.yaml` blueprint:
```yaml
services:
- type: web
name: smplxnf-studio
name: smplxnf-live
env: python
region: oregon
plan: starter
plan: free
buildCommand: "pip install -e . && pip install -r web/requirements.txt"
startCommand: "uvicorn web.app:app --host 0.0.0.0 --port $PORT"
healthCheckPath: /healthz
Expand All @@ -617,6 +617,10 @@ services:
```

#### Step-by-Step Render Deployment:
For the existing project, use the deployed `smplxnf-live` service described in the
[runbook](docs/DEPLOYMENT.md); do not create a duplicate. The following steps are
for a fresh deployment in another environment.

1. Connect your GitHub repository to Render at [dashboard.render.com](https://dashboard.render.com).
2. Select **New > Blueprint** and link the repository. Render will automatically parse `render.yaml`.
3. Configure the custom domain in your DNS provider:
Expand Down Expand Up @@ -647,7 +651,7 @@ In adherence to project claim discipline, the capabilities and operational bound
- Does not assert that 3NF or BCNF normalization eliminates application-level semantic errors outside declared functional dependencies.

### 3. The narrowest defensible claim:
- In the declared discrete Python implementation, the relational synthesis algorithms, Chase tableau procedures, BQNF delta accumulation, and 4-layer NF-IR pipeline execute deterministically and pass all 136 automated tests in `simplex-normal-forms/tests/`.
- The original handoff reported 136 pytest items (89 unittest methods). Later correctness and packaging verification passed 232 tests, and all five hosted CI jobs passed for PR #21's tested head. These checks cover the declared implementation; the compiler workbench demonstrates FD lowering and a constructed subsumption comparison, not arbitrary execution of every catalog contract. See [current evidence and scope](docs/PROJECT_STATUS.md).

### 4. The next test needed:
- A high-concurrency multi-tenant benchmark measuring end-to-end latency and memory utilization when streaming 100,000 PostgreSQL WAL replication events through the deployed FastAPI service on Render.
- Complete the remaining live browser checklist when the user makes a browser available. Sustained-load and PostgreSQL WAL integration would require separately scoped implementation and experiments; the saved 15-check HTTP probe does not establish either capability.
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
**Boundary-Certified Data Architecture, Relational Normalization, Cochain Retraction & Representation Transport (`CODA_MUR`)**
**Epistemic Standard:** Landau Rigor / Claim Discipline Compliant (`AuthorityEffect: None`, `certified_implies_authorized: false`)

[![Deployment status](https://img.shields.io/badge/Deployment-verification_pending-amber)](docs/PROJECT_STATUS.md)
[![Deployment status](https://img.shields.io/badge/Deployment-HTTPS_API_verified-green)](docs/PROJECT_STATUS.md)
[![Deployment: Render](https://img.shields.io/badge/Deploy-onrender.com-46e3b7)](https://render.com)
[![Adoption Guide: IMPORT_GUIDE.md](https://img.shields.io/badge/Adoption_Guide-IMPORT__GUIDE.md-10b981)](IMPORT_GUIDE.md)
[![Architecture Spec: MVP_SELECTION.md](https://img.shields.io/badge/Architecture-MVP__SELECTION.md-8b5cf6)](docs/MVP_SELECTION.md)
Expand All @@ -19,9 +19,10 @@

Experience the core theoretical and engineering capabilities of `simplex-normal-forms` in real time:

**Target URL:** [smplxnf.anomalon.com](https://smplxnf.anomalon.com). As of 2026-11-02,
the application is merged and locally tested; public DNS/HTTPS verification is
pending. See [project status](docs/PROJECT_STATUS.md) and the
**Live URL:** [smplxnf.anomalon.com](https://smplxnf.anomalon.com). On 2026-11-02,
HTTPS and all 15 API smoke checks passed on the separate `smplxnf-live` Render
service. Full live browser acceptance remains incomplete. See
[project status](docs/PROJECT_STATUS.md) and the
[Render deployment and smoke-test runbook](docs/DEPLOYMENT.md).

### Four Flagship Engineering Workbenches
Expand Down
70 changes: 39 additions & 31 deletions docs/DEPLOYMENT.md
Original file line number Diff line number Diff line change
@@ -1,57 +1,62 @@
# Render deployment and Phase 3 verification

The application and blueprint are implemented. Public deployment remains a
separate gate; see [the dated status](PROJECT_STATUS.md). PRs #17–19 are already
merged. Use the current reviewed `main`, not the old MVP feature branch.
The separate `smplxnf-live` service is deployed. On 2026-11-02, HTTPS and all 15
API smoke checks passed on its Render origin and `smplxnf.anomalon.com`.
Full live browser acceptance remains incomplete. See [the dated status](PROJECT_STATUS.md)
and [deployment record](verification/2026-11-02-deployment.md).

## Render service

Inspect the existing [Render project](https://dashboard.render.com/project/prj-dbj5ei942hec73c30pu0)
before creating or syncing `smplxnf-studio` from [render.yaml](../render.yaml).
The [existing service](https://dashboard.render.com/web/srv-dbkh1v3ncjis73bbg3ug/settings)
is in the Production environment of the
[Render project](https://dashboard.render.com/project/prj-dbj5ei942hec73c30pu0).
[render.yaml](../render.yaml) now matches its name and compute plan. Inspect this
service before creating or syncing another resource.

| Setting | Blueprint value |
| Setting | Recorded deployment / blueprint value |
| --- | --- |
| Repository / branch | `https://github.com/dbccpage/simplex-normal-forms` / `main` |
| Runtime / region / plan | Python / Oregon / Starter |
| Service name | `smplxnf-live` |
| Runtime / region / plan | Python / Oregon / Free |
| Build | `pip install -e . && pip install -r web/requirements.txt` |
| Start | `uvicorn web.app:app --host 0.0.0.0 --port $PORT` |
| Health check | `/healthz` |
| Environment | `PYTHONUNBUFFERED=1`, `APP_ENVIRONMENT=production` |
| Custom domain | `smplxnf.anomalon.com` |

Record the selected Python version and successful deploy's Git SHA. The blueprint
does not pin a Python version; Render's default depends on service creation date
([Render Python version documentation](https://render.com/docs/python-version)).
Record the actual instance plan and associated account commitment before provisioning.
The initial successful deploy used Python 3.14 and commit
`f9c289cc33f91c2b653f65e6267fde0073c3cd6f` (PR #21). The blueprint does not pin a
Python version. Capture the actual runtime and SHA again for future deployments.
The health response's application identifier remains `smplxnf-studio`; that
identifier is distinct from the Render resource name and does not identify a SHA.

Compute is Free ($0/month). Render disclosed a separate $0.25/month custom-domain
charge and the user approved it; no billing invoice was audited. This deployment
does not establish cold-start performance or an always-on availability commitment.

Run the check below against the **assigned** `https://…onrender.com` origin
first. A service name alone does not establish its assigned hostname.

## DNS handoff

The supplied handoff assigns the GoDaddy update to the user. Report the verified
Render hostname, then wait for their confirmation that the record is updated:

**2026-11-02 update:** The user has already created the canonical CNAME pointing
`smplxnf` to `smplxnf-live.onrender.com`; resolver `1.1.1.1` returned it with TTL
3600. This target returned HTTP 404 on `/healthz`. Confirm the new service's
assigned hostname before requesting another DNS change. The service still needs
`smplxnf.anomalon.com` added in **Settings → Custom Domains**.
The user configured the GoDaddy CNAME; resolver `1.1.1.1` returned it with TTL
3600. Render now associates `smplxnf.anomalon.com` with `smplxnf-live` and showed
both domain verification and certificate issuance complete. The 22:54 UTC
[canonical-domain receipt](verification/2026-11-02-public-live-http.json) verifies
HTTPS and Studio API behavior.

**Latest check, 22:25 UTC:** The certificate is valid, but the custom domain
serves **SmplCache Live** (`service: smplcache-live`, commit `810fc7cf0d99`).
The user's Render screenshot lists `smplcache-live.onrender.com` as the target.
Create/verify the separate Simplex service first, then move this custom-domain
association to it and align DNS with that service's actual hostname. Do not
replace or rename the existing SmplCache application to perform this migration.
See the [application-identity receipt](verification/2026-11-02-domain-service-mismatch.json).
Earlier checks encountered DNS propagation, an unprovisioned target and then an
association with the existing SmplCache service. The
[22:25 UTC mismatch receipt](verification/2026-11-02-domain-service-mismatch.json)
is historical. The user authorized moving only the Simplex domain; the separate
SmplCache service and `smplcache.anomalon.com` remained intact and healthy afterward.

| GoDaddy field | Value |
| --- | --- |
| Type | `CNAME` |
| Name / Host | `smplxnf` (within the `anomalon.com` zone) |
| Value / Target | Actual assigned Render hostname, without `https://` or a path |
| TTL | 600 seconds if available, otherwise provider default |
| Value / Target | `smplxnf-live.onrender.com` |
| TTL | 3600 seconds observed |

Inspect any existing record for this name before replacing it. Leave unrelated
zone records unchanged. Verify the custom domain in Render and wait for its
Expand All @@ -65,7 +70,7 @@ Provider references: [Render custom domains](https://render.com/docs/custom-doma
Requires only Python 3.10+ standard library; no application imports or credentials.

```sh
python scripts/http_smoke.py https://ACTUAL-HOST.onrender.com --output render-http.json
python scripts/http_smoke.py https://smplxnf-live.onrender.com --output render-http.json
python scripts/http_smoke.py https://smplxnf.anomalon.com --output public-http.json
# Small, bounded concurrency probe: 5 GETs then 10 POSTs across two clients.
python scripts/http_smoke.py https://smplxnf.anomalon.com --workers 2 --repeats 2 --output public-concurrent.json
Expand Down Expand Up @@ -98,5 +103,8 @@ Open the quickstart tab, check developer links, inspect browser errors, and
inspect layout at desktop and narrow viewport sizes. Record the URL, deployed
SHA, time, screenshots, observed results and any remaining failures.

Localhost results establish local behavior only. The deployment gate remains
open until these checks pass on the public custom domain.
Localhost results establish local behavior only. The live default relational
display was inspected; the remaining browser checklist was interrupted at the
user's request. HTTPS/API verification is complete for the recorded deploy, but
full browser acceptance remains open. Do not resume desktop automation without
the user making it available again.
23 changes: 15 additions & 8 deletions docs/MVP_SELECTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@
**Classification:** Systems Architecture & Technical Product Specification
**Epistemic Standard:** Landau Rigor / Claim Discipline Compliant (No Hype Terminology)

**Status reconciliation, 2026-11-02:** This specification includes original design
targets, not measured guarantees. The separate `smplxnf-live` service now serves
the canonical domain on Free compute; HTTPS/API smoke checks passed. Full live
browser acceptance remains incomplete. Availability, latency and broad compiler
claims below remain design targets where they exceed the
[current evidence and executable scope](PROJECT_STATUS.md).

---

## 1. Executive Summary: The smplxnf.anomalon.com Vision
Expand All @@ -18,7 +25,7 @@ The objective of this specification is to define, evaluate, and architect the si
2. Enable an external developer to clone the repository, install the package via standard tooling, and import the core normal-form logic into their own database, compiler, or AI workflows in under fifteen minutes to support the author's technical resume.

### 1.2 The Production Vision on Render
The application is designed for a lightweight Web Service on Render bound to the custom hostname `smplxnf.anomalon.com`. Public provisioning and HTTPS verification remain separate gates; see [current status](PROJECT_STATUS.md). Operating under a stateless ASGI process model powered by FastAPI and Uvicorn, the service serves:
The application is deployed as a lightweight Web Service on Render bound to the custom hostname `smplxnf.anomalon.com`. Public provisioning and HTTPS/API verification passed on 2026-11-02; see [current status](PROJECT_STATUS.md) for the remaining browser checks. The original production design below targets a stateless ASGI process model powered by FastAPI and Uvicorn:
- A responsive, high-contrast single-page application (SPA) dashboard styled with modern systems-grade typography and Tailwind CSS.
- Strongly typed REST endpoints exposing relational synthesis, Tableau Chase verification, streaming CDC delta repair, 4-layer NF-IR compilation to SQLite triggers and Python guards, and AI context compression with Merkle LossLedger generation.
- Sub-50 millisecond algorithmic execution latencies for typical schemas and streams, executing purely in-process with zero external database dependencies.
Expand Down Expand Up @@ -584,10 +591,10 @@ The application deploys as a standard Python Web Service on Render:
```yaml
services:
- type: web
name: smplxnf-studio
name: smplxnf-live
env: python
region: oregon
plan: starter
plan: free
buildCommand: "pip install -e . && pip install -r web/requirements.txt"
startCommand: "uvicorn web.app:app --host 0.0.0.0 --port $PORT"
healthCheckPath: /healthz
Expand All @@ -601,10 +608,10 @@ services:
```

#### 5.3.2 Subdomain Routing via CNAME
1. **Render Hostname:** Record the actual assigned public `onrender.com` endpoint from the service dashboard. `smplxnf-studio.onrender.com` below is an example, not a verified assignment.
1. **Render Hostname:** The separate `smplxnf-live` service was assigned `smplxnf-live.onrender.com` on 2026-11-02. See the [deployment record](verification/2026-11-02-deployment.md); the blueprint above matches the selected Free compute plan.
2. **DNS Configuration:** In the DNS control panel for `anomalon.com`, a canonical name record is created:
```text
smplxnf.anomalon.com. CNAME smplxnf-studio.onrender.com.
smplxnf.anomalon.com. CNAME smplxnf-live.onrender.com.
```
3. **Automated TLS Termination:** Render automatically provisions and renews a Let's Encrypt SSL/TLS certificate for `smplxnf.anomalon.com`.

Expand Down Expand Up @@ -847,17 +854,17 @@ In compliance with the project Claim Hygiene standard, all architectural evaluat
4. Does not assert that 3NF or BCNF normalization eliminates application-level anomalies outside declared functional dependencies.

### 7.3 Narrowest Defensible Claim
The original MVP handoff reported 136 pytest items (89 unittest methods). Subsequent correctness and packaging work was merged in PRs #18–19, with 232 tests passing in premerge verification and hosted CI passing on merged `da498e5`. These are bounded implementation checks, not certification of every contract or a live deployment. See [current evidence and scope](PROJECT_STATUS.md).
The original MVP handoff reported 136 pytest items (89 unittest methods). Subsequent correctness and packaging work was merged in PRs #18–19, with 232 tests passing in premerge verification. PR #21's lossy preset browser fix passed all five hosted CI jobs and was deployed at merge commit `f9c289c`. Separate HTTPS/API smoke checks passed on both public origins on 2026-11-02. These are bounded implementation and deployment checks, not certification of every contract or full live browser acceptance. See [current evidence and scope](PROJECT_STATUS.md).

### 7.4 Next Test Needed
The FastAPI presentation prototype is implemented and PRs #17–19 are merged. Inspect/provision the Render service, verify its assigned hostname, hand off the exact CNAME target to the user, then verify custom-domain TLS and all four workbenches. Use [DEPLOYMENT.md](DEPLOYMENT.md) and `scripts/http_smoke.py`; record measured latency rather than treating the original sub-200 ms target as an established result.
The separate Render service is live and both origins passed HTTPS/API checks. Finish the public browser checklist when the user makes a browser available; it was interrupted after the default relational result was inspected. Use [DEPLOYMENT.md](DEPLOYMENT.md) for the remaining checks and `scripts/http_smoke.py` for future deployment regression checks. Recorded request durations do not establish the original sub-200 ms target or sustained-load capacity.

---

## 8. Conclusion & Actionable Execution Sequence

1. **Approved Architecture:** Option E (Simplex-NF Studio) is established as the single canonical MVP for `smplxnf.anomalon.com`.
2. **Original implementation milestones (now implemented; live deployment pending):**
2. **Original implementation milestones (implemented; HTTPS/API verified, full live browser acceptance incomplete):**
- **M2 (Web Prototype & Deployment):** Author `pyproject.toml`, implement `web/app.py`, author `render.yaml`, and build the responsive single-page studio dashboard.
- **M3 (Documentation & Import Guide):** Author comprehensive `docs/IMPORT_GUIDE.md` and update `README.md` with complete installation and code usage instructions.
- **M4 (Automated Tests & Verification):** Add test suites covering API endpoints, UI rendering, and external package import workflows.
Loading
Loading