Repository navigation
Overnight: simplex-normal-forms 2026-11-05 - #28
Merged
Merged
Conversation
… for Simplex-NF Studio
…BCNF decomposition, and chase join agreement
…chase cell diffs and two-target DDL
…cks in overnight/LOG.md
…QUE/NOT NULL constraints
…overnight/LOG.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this app does
web/app.py,normal_forms/domain/relational.py,normal_forms/domain/relational_advanced.py).X -> Y, it computes attribute closures under Armstrong's axioms and derives all minimal candidate keys and prime columns.1NF,2NF,3NF,EKNF,BCNF), returning the specific violating dependency when a check fails.X -> Yinto(X union Y)and(U - Y)until every leaf table is in BCNF.chase_join_dependency) over either the synthesized 3NF tables or a user-supplied table split, recording every functional dependency applied and every cell symbol replacement step by step.a_*symbols, the decomposition is verified lossless; when the chase terminates without a distinguished row, it constructs a concrete counterexample instance whose projections join to produce a spurious row not present in the original table./presents a single-pane workbench combining relational normalization, chase step and spurious-row inspection, two-target SQL DDL generation (PostgreSQL and SQL Server), and the incrementalMAXmaintenance case explaining why a SQL Server indexed view cannot holdMAXand how a sorted list of values per group repairsMAXdeletions without rescanning the table./studio/route hosts the full five-tab studio, keeping the three experimental tools (streaming delta-repair simulator, constraint trigger compiler, and context token-budget truncation audit) under explicitExperimentallabels.Baseline
overnight/baseline/front_1280x800.pngovernight/baseline/front_390x844.pngovernight/baseline/browser_console.txtovernight/baseline/first_result_timing.txt(824 msincluding preset load)overnight/baseline/test_suite_output.txt/previously matched the old dark multi-tab studio: commitde378c8(Restyle Studio onto the Anomalon design system v1) was on an unmerged branch,web/app.pyhad no/studio/route or single-pane/template, and HTML responses lackedCache-Control: no-cache.Changed
7f7d93c) — checked byovernight/baseline/front_1280x800.png,overnight/baseline/front_390x844.png, andovernight/baseline/test_suite_output.txt.a0946ba) — checked bytests/test_relational_properties.py.@media (prefers-color-scheme: dark)fromweb/static/anomalon.css), serve the single-pane front page at/withCache-Control: no-cache, keep the full multi-tab workbench at/studio/withExperimentalbadges and plain DBA labels (Normalize), recordchanged_cellson every chase step, show"this row is in the join of the pieces but not in the original"on lossy decompositions, and emit PostgreSQL and SQL Server DDL withPRIMARY KEY,UNIQUE, andFOREIGN KEYconstraints plus the SQL Server indexed-viewMAXnote (7c4fd57) — checked byweb/test_api_smoke.py,tests/test_frontend.cjs,overnight/after_front_1280x800.png,overnight/after_front_390x844.png,overnight/after_studio_1280x800.png, andovernight/after_studio_390x844.png.UNIQUEkeys)NOT NULL, remove remaining internal jargon labels in/studio/, and add SQLite foreign-key DDL execution and live-database test bodies (be0efca) — checked byweb/test_api_smoke.py::test_ddl_topological_order_and_sqlite_fk_execution.postgres:16-alpine), SQL Server (mcr.microsoft.com/mssql/server:2022-latest), and MongoDB (mongo:7) containers in.github/workflows/ci.ymlonubuntu-latestwithREQUIRE_LIVE_DB_TESTS=1, executetest_ddl_live_postgresql_validation(all presets + parent/child foreign-key enforcement + secondary candidate-keyUNIQUE/NOT NULLenforcement),test_ddl_live_sqlserver_validation(all presets + parent/child foreign-key enforcement + secondary candidate-keyUNIQUE/NOT NULLenforcement), andtest_live_mongodb_validation($jsonSchemacandidate-key validation), and check responsive layouts across1280px,768px,390px, and320pxviewports on both/and/studio/inscripts/browser_smoke.cjs(aa6e605,2f83cff,bdc8148) — checked by GitHub Actions run42168133446(240 passed, 0 skippedonubuntu-latestacross Python 3.10 and 3.14;33/33checks inbrowser).Not done
33/33checks across/and/studio/at1280px,768px,390px, and320px), and live database container checks (postgres:16-alpine,mcr.microsoft.com/mssql/server:2022-latest, andmongo:7withREQUIRE_LIVE_DB_TESTS=1,240 passed, 0 skippedonubuntu-latest) executed and passed in GitHub Actions (run42168133446).Decisions for the owner
.github/workflows/ci.yml?postgres:16-alpine,mcr.microsoft.com/mssql/server:2022-latest, andmongo:7running onubuntu-latestin.github/workflows/ci.ymlwithREQUIRE_LIVE_DB_TESTS=1(adds ~45 seconds on free GitHub-hosted Linux runners)./api/bqnf/simulate,/api/compiler/lower,/api/ai/lossledger) remain in the default FastAPI app or move behind an optional router?web/app.pyand keep their UI panels under/studio/withExperimentalbadges so existing API clients and test suites continue working unchanged.Found but out of scope
normal_forms/planned-tests.md,normal_forms/planned-tests-516-615.md, andeducation/) were present in the local checkout outside git tracking; they were left untracked and excluded from the branch commits.