code-constraints 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- code_constraints-0.1.0/.gitattributes +19 -0
- code_constraints-0.1.0/.github/actions/build-dist/action.yml +58 -0
- code_constraints-0.1.0/.github/scripts/verify_dist.py +115 -0
- code_constraints-0.1.0/.github/workflows/ci.yml +95 -0
- code_constraints-0.1.0/.github/workflows/publish.yml +94 -0
- code_constraints-0.1.0/.gitignore +37 -0
- code_constraints-0.1.0/LICENSE +21 -0
- code_constraints-0.1.0/Makefile +237 -0
- code_constraints-0.1.0/PKG-INFO +663 -0
- code_constraints-0.1.0/README.md +612 -0
- code_constraints-0.1.0/docs/CLI_REFERENCE.md +1346 -0
- code_constraints-0.1.0/docs/MCP.md +234 -0
- code_constraints-0.1.0/docs/RULES_CATALOGUE.md +1786 -0
- code_constraints-0.1.0/docs/TUTORIAL.md +1493 -0
- code_constraints-0.1.0/docs/languages/CSHARP.md +203 -0
- code_constraints-0.1.0/docs/languages/JULIA.md +321 -0
- code_constraints-0.1.0/docs/languages/LUA.md +331 -0
- code_constraints-0.1.0/docs/languages/ODIN.md +347 -0
- code_constraints-0.1.0/docs/languages/PYTHON.md +232 -0
- code_constraints-0.1.0/docs/languages/README.md +128 -0
- code_constraints-0.1.0/docs/languages/TYPESCRIPT-SVELTE.md +133 -0
- code_constraints-0.1.0/examples/README.md +210 -0
- code_constraints-0.1.0/examples/csharp_demo/.cdec/.gitignore +1 -0
- code_constraints-0.1.0/examples/csharp_demo/.cdec/README.md +48 -0
- code_constraints-0.1.0/examples/csharp_demo/.cdec/reference.xmi +282 -0
- code_constraints-0.1.0/examples/csharp_demo/.cdec/rules.yaml +227 -0
- code_constraints-0.1.0/examples/csharp_demo/Catalog/Author.cs +17 -0
- code_constraints-0.1.0/examples/csharp_demo/Catalog/Book.cs +32 -0
- code_constraints-0.1.0/examples/csharp_demo/Notifications/INotifier.cs +6 -0
- code_constraints-0.1.0/examples/csharp_demo/Notifications/SmsNotifier.cs +13 -0
- code_constraints-0.1.0/examples/csharp_demo/Notifications/WhatsAppNotifier.cs +15 -0
- code_constraints-0.1.0/examples/csharp_demo/Orders/Billing.cs +99 -0
- code_constraints-0.1.0/examples/csharp_demo/Orders/Cart.cs +57 -0
- code_constraints-0.1.0/examples/csharp_demo/Orders/Order.cs +40 -0
- code_constraints-0.1.0/examples/csharp_demo/Orders/OrderItem.cs +20 -0
- code_constraints-0.1.0/examples/csharp_demo/Orders/OrderStatus.cs +9 -0
- code_constraints-0.1.0/examples/csharp_demo/Users/Admin.cs +17 -0
- code_constraints-0.1.0/examples/csharp_demo/Users/Customer.cs +25 -0
- code_constraints-0.1.0/examples/csharp_demo/Users/User.cs +15 -0
- code_constraints-0.1.0/examples/csharp_demo/class_diagram.xmi +221 -0
- code_constraints-0.1.0/examples/csharp_demo/class_diagram_old.xmi +224 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/.cdec/.gitignore +1 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/.cdec/reference.xmi +89 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/.cdec/rules.yaml +128 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/Controller/IController.cs +15 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/Controller/TodoController.cs +46 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/Model/TodoItem.cs +33 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/Model/TodoRepository.cs +33 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/README.md +129 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/View/IView.cs +19 -0
- code_constraints-0.1.0/examples/csharp_mvc_demo/View/TodoConsoleView.cs +37 -0
- code_constraints-0.1.0/examples/julia_demo/.cdec/.gitignore +2 -0
- code_constraints-0.1.0/examples/julia_demo/.cdec/reference.xmi +105 -0
- code_constraints-0.1.0/examples/julia_demo/.cdec/rules.yaml +147 -0
- code_constraints-0.1.0/examples/julia_demo/CdecRules.jl +129 -0
- code_constraints-0.1.0/examples/julia_demo/catalog/Catalog.jl +20 -0
- code_constraints-0.1.0/examples/julia_demo/orders/Billing.jl +84 -0
- code_constraints-0.1.0/examples/julia_demo/orders/Cart.jl +25 -0
- code_constraints-0.1.0/examples/lua_demo/.cdec/.gitignore +2 -0
- code_constraints-0.1.0/examples/lua_demo/.cdec/reference.xmi +109 -0
- code_constraints-0.1.0/examples/lua_demo/.cdec/rules.yaml +147 -0
- code_constraints-0.1.0/examples/lua_demo/catalog/book.lua +30 -0
- code_constraints-0.1.0/examples/lua_demo/cdec_rules.lua +92 -0
- code_constraints-0.1.0/examples/lua_demo/orders/billing.lua +111 -0
- code_constraints-0.1.0/examples/lua_demo/orders/cart.lua +24 -0
- code_constraints-0.1.0/examples/odin_demo/.cdec/.gitignore +2 -0
- code_constraints-0.1.0/examples/odin_demo/.cdec/reference.xmi +105 -0
- code_constraints-0.1.0/examples/odin_demo/.cdec/rules.yaml +147 -0
- code_constraints-0.1.0/examples/odin_demo/catalog/book.odin +20 -0
- code_constraints-0.1.0/examples/odin_demo/cdec_rules.odin +67 -0
- code_constraints-0.1.0/examples/odin_demo/orders/billing.odin +90 -0
- code_constraints-0.1.0/examples/odin_demo/orders/cart.odin +21 -0
- code_constraints-0.1.0/examples/python_demo/.cdec/.gitignore +1 -0
- code_constraints-0.1.0/examples/python_demo/.cdec/README.md +51 -0
- code_constraints-0.1.0/examples/python_demo/.cdec/reference.xmi +334 -0
- code_constraints-0.1.0/examples/python_demo/.cdec/rules.yaml +228 -0
- code_constraints-0.1.0/examples/python_demo/catalog/__init__.py +1 -0
- code_constraints-0.1.0/examples/python_demo/catalog/author.py +11 -0
- code_constraints-0.1.0/examples/python_demo/catalog/book.py +28 -0
- code_constraints-0.1.0/examples/python_demo/cdec_rules.py +94 -0
- code_constraints-0.1.0/examples/python_demo/notifications/__init__.py +1 -0
- code_constraints-0.1.0/examples/python_demo/notifications/base.py +30 -0
- code_constraints-0.1.0/examples/python_demo/orders/__init__.py +1 -0
- code_constraints-0.1.0/examples/python_demo/orders/billing.py +97 -0
- code_constraints-0.1.0/examples/python_demo/orders/cart.py +49 -0
- code_constraints-0.1.0/examples/python_demo/orders/order.py +24 -0
- code_constraints-0.1.0/examples/python_demo/orders/status.py +10 -0
- code_constraints-0.1.0/examples/python_demo/users/__init__.py +1 -0
- code_constraints-0.1.0/examples/python_demo/users/user.py +37 -0
- code_constraints-0.1.0/examples/svelte_demo/README.md +73 -0
- code_constraints-0.1.0/examples/svelte_demo/src/components/BookCard.svelte +28 -0
- code_constraints-0.1.0/examples/svelte_demo/src/components/CartView.svelte +35 -0
- code_constraints-0.1.0/examples/svelte_demo/src/components/PriceTag.svelte +9 -0
- code_constraints-0.1.0/examples/svelte_demo/src/lib/cart.ts +30 -0
- code_constraints-0.1.0/examples/svelte_demo/src/lib/catalog.ts +29 -0
- code_constraints-0.1.0/examples/svelte_demo/src/routes/Storefront.svelte +39 -0
- code_constraints-0.1.0/examples/typescript_demo/README.md +47 -0
- code_constraints-0.1.0/examples/typescript_demo/src/catalog/author.ts +14 -0
- code_constraints-0.1.0/examples/typescript_demo/src/catalog/book.ts +26 -0
- code_constraints-0.1.0/examples/typescript_demo/src/notifications/base.ts +36 -0
- code_constraints-0.1.0/examples/typescript_demo/src/orders/cart.ts +53 -0
- code_constraints-0.1.0/examples/typescript_demo/src/orders/order.ts +28 -0
- code_constraints-0.1.0/examples/typescript_demo/src/orders/status.ts +7 -0
- code_constraints-0.1.0/examples/typescript_demo/src/users/user.ts +46 -0
- code_constraints-0.1.0/frontend/index.html +12 -0
- code_constraints-0.1.0/frontend/package-lock.json +1723 -0
- code_constraints-0.1.0/frontend/package.json +25 -0
- code_constraints-0.1.0/frontend/src/App.svelte +315 -0
- code_constraints-0.1.0/frontend/src/components/DiagramToolbar.svelte +199 -0
- code_constraints-0.1.0/frontend/src/components/DiagramViewer.svelte +449 -0
- code_constraints-0.1.0/frontend/src/components/DiffViewer.svelte +111 -0
- code_constraints-0.1.0/frontend/src/components/HomePage.svelte +782 -0
- code_constraints-0.1.0/frontend/src/components/ProjectPicker.svelte +83 -0
- code_constraints-0.1.0/frontend/src/components/diagram/ActivityDiagramFlow.svelte +192 -0
- code_constraints-0.1.0/frontend/src/components/diagram/ActivityNode.svelte +88 -0
- code_constraints-0.1.0/frontend/src/components/diagram/ClassDiagramFlow.svelte +339 -0
- code_constraints-0.1.0/frontend/src/components/diagram/ClassNode.svelte +286 -0
- code_constraints-0.1.0/frontend/src/components/diagram/DiagramLegend.svelte +112 -0
- code_constraints-0.1.0/frontend/src/components/diagram/EdgeFocusModal.svelte +143 -0
- code_constraints-0.1.0/frontend/src/components/diagram/FitOnSelect.svelte +31 -0
- code_constraints-0.1.0/frontend/src/components/diagram/FragmentNode.svelte +75 -0
- code_constraints-0.1.0/frontend/src/components/diagram/LifelineNode.svelte +100 -0
- code_constraints-0.1.0/frontend/src/components/diagram/MessageEdge.svelte +91 -0
- code_constraints-0.1.0/frontend/src/components/diagram/PackageDiagramFlow.svelte +185 -0
- code_constraints-0.1.0/frontend/src/components/diagram/PackageNode.svelte +89 -0
- code_constraints-0.1.0/frontend/src/components/diagram/SequenceDiagramFlow.svelte +233 -0
- code_constraints-0.1.0/frontend/src/components/diagram/sequenceTypes.ts +26 -0
- code_constraints-0.1.0/frontend/src/components/diagram/types.ts +19 -0
- code_constraints-0.1.0/frontend/src/components/diff/ActivityDiffWalkthrough.svelte +233 -0
- code_constraints-0.1.0/frontend/src/components/diff/DiffWalkthrough.svelte +202 -0
- code_constraints-0.1.0/frontend/src/components/diff/SequenceDiffWalkthrough.svelte +197 -0
- code_constraints-0.1.0/frontend/src/components/editor/AssociationEditModal.svelte +141 -0
- code_constraints-0.1.0/frontend/src/components/editor/AttributeEditModal.svelte +171 -0
- code_constraints-0.1.0/frontend/src/components/editor/ClassEditModal.svelte +440 -0
- code_constraints-0.1.0/frontend/src/components/editor/EdgeKindPickerModal.svelte +80 -0
- code_constraints-0.1.0/frontend/src/components/editor/EditableClassNode.svelte +253 -0
- code_constraints-0.1.0/frontend/src/components/editor/EditorCanvas.svelte +203 -0
- code_constraints-0.1.0/frontend/src/components/editor/EditorFlowView.svelte +263 -0
- code_constraints-0.1.0/frontend/src/components/editor/EditorModals.svelte +114 -0
- code_constraints-0.1.0/frontend/src/components/editor/EditorPage.svelte +229 -0
- code_constraints-0.1.0/frontend/src/components/editor/EditorTextPanel.svelte +145 -0
- code_constraints-0.1.0/frontend/src/components/editor/Modal.svelte +108 -0
- code_constraints-0.1.0/frontend/src/components/editor/OperationEditModal.svelte +230 -0
- code_constraints-0.1.0/frontend/src/components/panel/ActivityListPanel.svelte +275 -0
- code_constraints-0.1.0/frontend/src/components/panel/ClassDetailsPanel.svelte +170 -0
- code_constraints-0.1.0/frontend/src/components/panel/ClassListPanel.svelte +561 -0
- code_constraints-0.1.0/frontend/src/components/panel/CollapsibleSection.svelte +88 -0
- code_constraints-0.1.0/frontend/src/components/panel/LayerClassesModal.svelte +180 -0
- code_constraints-0.1.0/frontend/src/components/panel/LayerDependenciesModal.svelte +143 -0
- code_constraints-0.1.0/frontend/src/components/panel/PackageListPanel.svelte +288 -0
- code_constraints-0.1.0/frontend/src/components/panel/SavedViewsPanel.svelte +361 -0
- code_constraints-0.1.0/frontend/src/components/panel/SequenceListPanel.svelte +266 -0
- code_constraints-0.1.0/frontend/src/lib/api.ts +587 -0
- code_constraints-0.1.0/frontend/src/lib/kinds.ts +28 -0
- code_constraints-0.1.0/frontend/src/lib/layout/dagre.ts +68 -0
- code_constraints-0.1.0/frontend/src/lib/rules.ts +92 -0
- code_constraints-0.1.0/frontend/src/lib/state/diagram.svelte.ts +278 -0
- code_constraints-0.1.0/frontend/src/lib/state/edgeFocus.svelte.ts +57 -0
- code_constraints-0.1.0/frontend/src/lib/state/editor.svelte.ts +402 -0
- code_constraints-0.1.0/frontend/src/lib/state/layerClasses.svelte.ts +18 -0
- code_constraints-0.1.0/frontend/src/lib/state/layers.svelte.ts +19 -0
- code_constraints-0.1.0/frontend/src/lib/views.ts +184 -0
- code_constraints-0.1.0/frontend/src/main.ts +8 -0
- code_constraints-0.1.0/frontend/svelte.config.js +8 -0
- code_constraints-0.1.0/frontend/tsconfig.json +15 -0
- code_constraints-0.1.0/frontend/vite.config.ts +17 -0
- code_constraints-0.1.0/install/README.md +84 -0
- code_constraints-0.1.0/install/install.ps1 +209 -0
- code_constraints-0.1.0/install/install.sh +187 -0
- code_constraints-0.1.0/pyproject.toml +113 -0
- code_constraints-0.1.0/scripts/bootstrap.ps1 +69 -0
- code_constraints-0.1.0/scripts/bootstrap.sh +71 -0
- code_constraints-0.1.0/scripts/serve.ps1 +25 -0
- code_constraints-0.1.0/scripts/serve.sh +35 -0
- code_constraints-0.1.0/shims/csharp/CodeConstraintsRules.cs +94 -0
- code_constraints-0.1.0/shims/julia/CdecRules.jl +129 -0
- code_constraints-0.1.0/shims/lua/cdec_rules.lua +92 -0
- code_constraints-0.1.0/shims/odin/cdec_rules.odin +67 -0
- code_constraints-0.1.0/shims/python/cdec_rules.py +94 -0
- code_constraints-0.1.0/src/code_constraints/__init__.py +1 -0
- code_constraints-0.1.0/src/code_constraints/cli/__init__.py +0 -0
- code_constraints-0.1.0/src/code_constraints/cli/__main__.py +1555 -0
- code_constraints-0.1.0/src/code_constraints/cli/_assets/agents/cdec-architect.md +468 -0
- code_constraints-0.1.0/src/code_constraints/cli/_assets/agents/oop-refactor-architect.md +317 -0
- code_constraints-0.1.0/src/code_constraints/cli/_assets/skills/cdec-architecture-loop/SKILL.md +152 -0
- code_constraints-0.1.0/src/code_constraints/cli/depstamp.py +118 -0
- code_constraints-0.1.0/src/code_constraints/cli/detect.py +77 -0
- code_constraints-0.1.0/src/code_constraints/cli/interactive.py +304 -0
- code_constraints-0.1.0/src/code_constraints/cli/scaffold.py +602 -0
- code_constraints-0.1.0/src/code_constraints/cli/update.py +157 -0
- code_constraints-0.1.0/src/code_constraints/core/__init__.py +41 -0
- code_constraints-0.1.0/src/code_constraints/core/annotations.py +217 -0
- code_constraints-0.1.0/src/code_constraints/core/associations.py +134 -0
- code_constraints-0.1.0/src/code_constraints/core/diff.py +302 -0
- code_constraints-0.1.0/src/code_constraints/core/editor_io.py +280 -0
- code_constraints-0.1.0/src/code_constraints/core/graph_model.py +681 -0
- code_constraints-0.1.0/src/code_constraints/core/keys.py +105 -0
- code_constraints-0.1.0/src/code_constraints/core/model.py +294 -0
- code_constraints-0.1.0/src/code_constraints/core/model_io.py +65 -0
- code_constraints-0.1.0/src/code_constraints/core/receivers.py +34 -0
- code_constraints-0.1.0/src/code_constraints/core/rules.py +177 -0
- code_constraints-0.1.0/src/code_constraints/core/rulesdoc.py +208 -0
- code_constraints-0.1.0/src/code_constraints/core/tags.py +114 -0
- code_constraints-0.1.0/src/code_constraints/core/ts_fingerprint.py +88 -0
- code_constraints-0.1.0/src/code_constraints/core/xmi_reader.py +358 -0
- code_constraints-0.1.0/src/code_constraints/core/xmi_writer.py +373 -0
- code_constraints-0.1.0/src/code_constraints/csharp/__init__.py +3 -0
- code_constraints-0.1.0/src/code_constraints/csharp/activity.py +250 -0
- code_constraints-0.1.0/src/code_constraints/csharp/conformance.py +331 -0
- code_constraints-0.1.0/src/code_constraints/csharp/fingerprint.py +274 -0
- code_constraints-0.1.0/src/code_constraints/csharp/parser.py +436 -0
- code_constraints-0.1.0/src/code_constraints/csharp/rules_extract.py +78 -0
- code_constraints-0.1.0/src/code_constraints/csharp/sequence.py +295 -0
- code_constraints-0.1.0/src/code_constraints/enforce/__init__.py +15 -0
- code_constraints-0.1.0/src/code_constraints/enforce/engine.py +122 -0
- code_constraints-0.1.0/src/code_constraints/enforce/model.py +74 -0
- code_constraints-0.1.0/src/code_constraints/julia/__init__.py +5 -0
- code_constraints-0.1.0/src/code_constraints/julia/conformance.py +282 -0
- code_constraints-0.1.0/src/code_constraints/julia/fingerprint.py +226 -0
- code_constraints-0.1.0/src/code_constraints/julia/parser.py +523 -0
- code_constraints-0.1.0/src/code_constraints/julia/rules_extract.py +216 -0
- code_constraints-0.1.0/src/code_constraints/lint/__init__.py +10 -0
- code_constraints-0.1.0/src/code_constraints/lint/baseline.py +96 -0
- code_constraints-0.1.0/src/code_constraints/lint/config.py +239 -0
- code_constraints-0.1.0/src/code_constraints/lint/engine.py +179 -0
- code_constraints-0.1.0/src/code_constraints/lint/pipeline.py +108 -0
- code_constraints-0.1.0/src/code_constraints/lint/report.py +151 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/__init__.py +50 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/base.py +200 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/cyclic_package_dependencies.py +69 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/dangling_classes.py +98 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/forbidden_package_references.py +47 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/forbidden_references.py +48 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/frozen_members.py +67 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/frozen_rules.py +105 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/implementation_locks.py +156 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/layer_dependencies.py +92 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/max_class_fanout.py +41 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/no_new_classes.py +27 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/no_removed_classes.py +27 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/reference_architecture.py +111 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/subclass_naming.py +71 -0
- code_constraints-0.1.0/src/code_constraints/lint/rules/tag_conformance.py +76 -0
- code_constraints-0.1.0/src/code_constraints/lock/__init__.py +73 -0
- code_constraints-0.1.0/src/code_constraints/lock/engine.py +395 -0
- code_constraints-0.1.0/src/code_constraints/lock/model.py +235 -0
- code_constraints-0.1.0/src/code_constraints/lock/store.py +144 -0
- code_constraints-0.1.0/src/code_constraints/lua/__init__.py +5 -0
- code_constraints-0.1.0/src/code_constraints/lua/conformance.py +239 -0
- code_constraints-0.1.0/src/code_constraints/lua/fingerprint.py +252 -0
- code_constraints-0.1.0/src/code_constraints/lua/parser.py +500 -0
- code_constraints-0.1.0/src/code_constraints/lua/rules_extract.py +55 -0
- code_constraints-0.1.0/src/code_constraints/mcp/__init__.py +20 -0
- code_constraints-0.1.0/src/code_constraints/mcp/__main__.py +73 -0
- code_constraints-0.1.0/src/code_constraints/mcp/server.py +1203 -0
- code_constraints-0.1.0/src/code_constraints/odin/__init__.py +5 -0
- code_constraints-0.1.0/src/code_constraints/odin/conformance.py +244 -0
- code_constraints-0.1.0/src/code_constraints/odin/fingerprint.py +159 -0
- code_constraints-0.1.0/src/code_constraints/odin/parser.py +471 -0
- code_constraints-0.1.0/src/code_constraints/odin/rules_extract.py +38 -0
- code_constraints-0.1.0/src/code_constraints/python/__init__.py +3 -0
- code_constraints-0.1.0/src/code_constraints/python/activity.py +278 -0
- code_constraints-0.1.0/src/code_constraints/python/conformance.py +249 -0
- code_constraints-0.1.0/src/code_constraints/python/fingerprint.py +231 -0
- code_constraints-0.1.0/src/code_constraints/python/parser.py +330 -0
- code_constraints-0.1.0/src/code_constraints/python/rules_extract.py +83 -0
- code_constraints-0.1.0/src/code_constraints/python/sequence.py +257 -0
- code_constraints-0.1.0/src/code_constraints/reference/__init__.py +15 -0
- code_constraints-0.1.0/src/code_constraints/reference/compare.py +356 -0
- code_constraints-0.1.0/src/code_constraints/reference/report.py +38 -0
- code_constraints-0.1.0/src/code_constraints/svelte/__init__.py +3 -0
- code_constraints-0.1.0/src/code_constraints/svelte/parser.py +523 -0
- code_constraints-0.1.0/src/code_constraints/typescript/__init__.py +3 -0
- code_constraints-0.1.0/src/code_constraints/typescript/parser.py +590 -0
- code_constraints-0.1.0/src/code_constraints/waivers/__init__.py +89 -0
- code_constraints-0.1.0/src/code_constraints/waivers/collect.py +167 -0
- code_constraints-0.1.0/src/code_constraints/waivers/model.py +90 -0
- code_constraints-0.1.0/src/code_constraints/waivers/ops.py +150 -0
- code_constraints-0.1.0/src/code_constraints/waivers/review.py +156 -0
- code_constraints-0.1.0/src/code_constraints/waivers/store.py +300 -0
- code_constraints-0.1.0/src/code_constraints/web/__init__.py +0 -0
- code_constraints-0.1.0/src/code_constraints/web/_static/assets/index-3ivBsYY4.css +1 -0
- code_constraints-0.1.0/src/code_constraints/web/_static/assets/index-BTzTqGFp.js +9 -0
- code_constraints-0.1.0/src/code_constraints/web/_static/index.html +13 -0
- code_constraints-0.1.0/src/code_constraints/web/app.py +1076 -0
- code_constraints-0.1.0/tests/__init__.py +0 -0
- code_constraints-0.1.0/tests/case_runner.py +276 -0
- code_constraints-0.1.0/tests/cases/README.md +99 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/README.md +109 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/inputs/rules.yaml +10 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/inputs/src/Orders/Cart.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/inputs/src/Orders/Checkout.cs +10 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/inputs/src/Orders/LegacyPricing.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/inputs/src/Web/Controller.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/csharp/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/julia/README.md +107 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/julia/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/julia/inputs/src/orders/Orders.jl +19 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/julia/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/lua/README.md +109 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/lua/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/lua/inputs/src/orders/checkout.lua +10 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/lua/inputs/src/orders/legacy.lua +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/lua/inputs/src/orders/service.lua +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/lua/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/odin/README.md +109 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/odin/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/odin/inputs/src/orders/cart.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/odin/inputs/src/orders/checkout.odin +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/odin/inputs/src/orders/legacy.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/odin/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/README.md +109 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/inputs/src/orders/cart.py +5 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/inputs/src/orders/checkout.py +9 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/inputs/src/orders/legacy_pricing.py +5 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/inputs/src/web/controller.py +6 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/python/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/svelte/README.md +105 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/svelte/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/svelte/inputs/rules.yaml +10 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/svelte/inputs/src/lib/cart.ts +13 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/svelte/inputs/src/lib/legacyPricing.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/svelte/inputs/src/routes/CartView.svelte +9 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/svelte/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/README.md +109 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/inputs/rules.yaml +10 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/inputs/src/orders/cart.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/inputs/src/orders/checkout.ts +11 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/inputs/src/orders/legacyPricing.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/inputs/src/web/controller.ts +4 -0
- code_constraints-0.1.0/tests/cases/check/dangling-classes/typescript/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/README.md +112 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/inputs/src/Catalog/Author.cs +12 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/inputs/src/Catalog/Book.cs +13 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/inputs/src/Orders/Order.cs +11 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/inputs/src/Users/Customer.cs +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/csharp/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/julia/README.md +115 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/julia/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/julia/inputs/src/catalog/Catalog.jl +15 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/julia/inputs/src/orders/Orders.jl +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/julia/inputs/src/users/Users.jl +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/julia/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/README.md +116 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/inputs/src/catalog/book.lua +16 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/inputs/src/catalog/paperback.lua +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/inputs/src/orders/order.lua +12 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/inputs/src/users/customer.lua +7 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/lua/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/odin/README.md +115 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/odin/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/odin/inputs/src/catalog/book.odin +13 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/odin/inputs/src/orders/order.odin +7 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/odin/inputs/src/users/customer.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/odin/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/README.md +116 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/inputs/src/catalog/author.py +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/inputs/src/catalog/book.py +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/inputs/src/orders/order.py +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/inputs/src/users/customer.py +5 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/python/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/README.md +116 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/inputs/src/catalog/AuthorCard.svelte +11 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/inputs/src/catalog/BookCard.svelte +13 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/inputs/src/orders/OrderRow.svelte +5 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/inputs/src/users/CustomerCard.svelte +6 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/svelte/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/README.md +116 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/inputs/src/catalog/author.ts +11 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/inputs/src/catalog/book.ts +11 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/inputs/src/orders/order.ts +10 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/inputs/src/users/customer.ts +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-package-references/typescript/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/README.md +109 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/inputs/src/Catalog/Author.cs +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/inputs/src/Catalog/Book.cs +16 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/inputs/src/Orders/Order.cs +12 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/inputs/src/Users/Customer.cs +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/csharp/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/README.md +109 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/inputs/rules.yaml +10 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/inputs/src/catalog/author.py +5 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/inputs/src/catalog/book.py +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/inputs/src/orders/order.py +9 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/inputs/src/users/customer.py +3 -0
- code_constraints-0.1.0/tests/cases/check/forbidden-references/python/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/README.md +129 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/inputs/baseline/Notifications/Base.cs +8 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/inputs/baseline/Notifications/Sms.cs +6 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/inputs/rules.yaml +10 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/inputs/src/Notifications/Base.cs +12 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/inputs/src/Notifications/Sms.cs +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/csharp/outputs/violations.json +14 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/README.md +129 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/inputs/baseline/notifications/base.py +8 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/inputs/baseline/notifications/sms.py +6 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/inputs/src/notifications/base.py +11 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/inputs/src/notifications/sms.py +11 -0
- code_constraints-0.1.0/tests/cases/check/frozen-members/python/outputs/violations.json +14 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/README.md +135 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/inputs/baseline/Orders/Billing.cs +19 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/inputs/baseline/Support/Audit.cs +11 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/inputs/src/Orders/Billing.cs +20 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/inputs/src/Support/Audit.cs +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/csharp/outputs/violations.json +20 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/README.md +127 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/inputs/baseline/orders/Orders.jl +13 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/inputs/baseline/support/Support.jl +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/inputs/src/orders/Orders.jl +16 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/inputs/src/support/Support.jl +8 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/julia/outputs/violations.json +14 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/README.md +127 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/inputs/baseline/orders/billing.lua +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/inputs/baseline/support/audit.lua +7 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/inputs/src/orders/billing.lua +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/inputs/src/support/audit.lua +7 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/lua/outputs/violations.json +14 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/README.md +127 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/inputs/baseline/orders/billing.odin +12 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/inputs/baseline/support/audit.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/inputs/src/orders/billing.odin +14 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/inputs/src/support/audit.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/odin/outputs/violations.json +14 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/README.md +135 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/inputs/baseline/orders/billing.py +15 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/inputs/baseline/support/audit.py +7 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/inputs/rules.yaml +9 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/inputs/src/orders/billing.py +19 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/inputs/src/support/audit.py +6 -0
- code_constraints-0.1.0/tests/cases/check/frozen-rules/python/outputs/violations.json +20 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/README.md +122 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/inputs/rules.yaml +13 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/inputs/src/App/Handler.cs +14 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/inputs/src/Domain/Order.cs +17 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/inputs/src/Domain/Repository.cs +10 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/inputs/src/Infrastructure/Sql.cs +18 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/inputs/src/Support/Logger.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/csharp/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/README.md +117 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/inputs/src/app/App.jl +10 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/inputs/src/domain/Domain.jl +14 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/inputs/src/infrastructure/Infrastructure.jl +9 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/inputs/src/support/Support.jl +8 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/julia/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/lua/README.md +113 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/lua/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/lua/inputs/src/app/handler.lua +10 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/lua/inputs/src/domain/order.lua +12 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/lua/inputs/src/infrastructure/record.lua +7 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/lua/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/README.md +117 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/inputs/src/app/handler.odin +7 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/inputs/src/domain/order.odin +11 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/inputs/src/infrastructure/sql.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/inputs/src/support/logger.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/odin/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/README.md +118 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/inputs/rules.yaml +13 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/inputs/src/app/handler.py +11 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/inputs/src/domain/order.py +15 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/inputs/src/domain/repository.py +10 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/inputs/src/infrastructure/sql.py +18 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/inputs/src/support/logger.py +6 -0
- code_constraints-0.1.0/tests/cases/check/layer-dependencies/python/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/README.md +118 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/inputs/rules.yaml +11 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/inputs/src/App/Root.cs +37 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/inputs/src/Orders/Checkout.cs +34 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/inputs/src/Orders/Collaborators.cs +49 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/inputs/src/Orders/Pricing.cs +19 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/csharp/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/README.md +118 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/inputs/rules.yaml +11 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/inputs/src/app/root.py +35 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/inputs/src/orders/checkout.py +34 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/inputs/src/orders/collaborators.py +47 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/inputs/src/orders/pricing.py +14 -0
- code_constraints-0.1.0/tests/cases/check/max-class-fanout/python/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/csharp/README.md +113 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/csharp/inputs/rules.yaml +7 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/csharp/inputs/src/Catalog/Book.cs +9 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/csharp/inputs/src/Orders/Order.cs +13 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/csharp/inputs/src/Users/Customer.cs +11 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/csharp/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/python/README.md +113 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/python/inputs/rules.yaml +8 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/python/inputs/src/catalog/book.py +6 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/python/inputs/src/orders/order.py +10 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/python/inputs/src/users/customer.py +8 -0
- code_constraints-0.1.0/tests/cases/check/no-cyclic-package-dependencies/python/outputs/violations.json +8 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/README.md +112 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/inputs/baseline/Notifications/Base.cs +11 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/inputs/rules.yaml +10 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/inputs/src/Notifications/Base.cs +14 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/inputs/src/Notifications/Express.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/inputs/src/Testing/Fake.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/csharp/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/README.md +112 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/inputs/baseline/notifications/base.py +12 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/inputs/rules.yaml +10 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/inputs/src/notifications/base.py +16 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/inputs/src/notifications/express.py +8 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/inputs/src/testing/fake.py +8 -0
- code_constraints-0.1.0/tests/cases/check/no-new-classes/python/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/csharp/README.md +111 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/csharp/inputs/baseline/Notifications/Base.cs +16 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/csharp/inputs/rules.yaml +8 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/csharp/inputs/src/Notifications/Base.cs +20 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/csharp/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/python/README.md +111 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/python/inputs/baseline/notifications/base.py +15 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/python/inputs/rules.yaml +8 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/python/inputs/src/notifications/base.py +21 -0
- code_constraints-0.1.0/tests/cases/check/no-removed-classes/python/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/README.md +123 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/inputs/src/Notifications/Base.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/inputs/src/Notifications/Email.cs +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/inputs/src/Notifications/Legacy.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/inputs/src/Notifications/Slack.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/inputs/src/Orders/Order.cs +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/csharp/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/julia/README.md +120 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/julia/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/julia/inputs/src/notifications/Notifications.jl +21 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/julia/inputs/src/orders/Orders.jl +8 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/julia/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/README.md +119 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/inputs/src/notifications/base.lua +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/inputs/src/notifications/email.lua +8 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/inputs/src/notifications/legacy.lua +9 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/inputs/src/notifications/slack.lua +9 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/lua/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/odin/README.md +120 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/odin/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/odin/inputs/src/notifications/base.odin +25 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/odin/inputs/src/orders/order.odin +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/odin/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/README.md +119 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/inputs/src/notifications/base.py +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/inputs/src/notifications/email.py +8 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/inputs/src/notifications/legacy.py +8 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/inputs/src/notifications/slack.py +8 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/inputs/src/orders/order.py +5 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/python/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/README.md +123 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/inputs/src/notifications/base.ts +5 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/inputs/src/notifications/email.ts +5 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/inputs/src/notifications/legacy.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/inputs/src/notifications/slack.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/inputs/src/routes/Page.svelte +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/svelte/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/README.md +123 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/inputs/rules.yaml +12 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/inputs/src/notifications/base.ts +4 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/inputs/src/notifications/email.ts +5 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/inputs/src/notifications/legacy.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/inputs/src/notifications/slack.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/inputs/src/orders/order.ts +6 -0
- code_constraints-0.1.0/tests/cases/check/subclass-naming/typescript/outputs/violations.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/csharp/README.md +106 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/csharp/inputs/src/Orders/CheckoutService.cs +14 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/csharp/inputs/src/Orders/Receipt.cs +8 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/csharp/inputs/src/Orders/ReceiptFactory.cs +14 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/csharp/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/julia/README.md +108 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/julia/inputs/src/orders/Orders.jl +29 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/julia/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/lua/README.md +110 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/lua/inputs/src/orders/checkout.lua +17 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/lua/inputs/src/orders/factory.lua +13 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/lua/inputs/src/orders/receipt.lua +10 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/lua/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/odin/README.md +104 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/odin/inputs/src/orders/receipt.odin +25 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/odin/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/python/README.md +106 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/python/inputs/src/orders/checkout.py +15 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/python/inputs/src/orders/factory.py +12 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/python/inputs/src/orders/receipt.py +3 -0
- code_constraints-0.1.0/tests/cases/enforce/factory/python/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/csharp/README.md +111 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/csharp/inputs/src/Orders/Receipt.cs +32 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/csharp/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/julia/README.md +110 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/julia/inputs/src/orders/Orders.jl +29 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/julia/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/lua/README.md +111 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/lua/inputs/src/orders/receipt.lua +29 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/lua/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/odin/README.md +110 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/odin/inputs/src/orders/receipt.odin +24 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/odin/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/python/README.md +106 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/python/inputs/src/orders/receipt.py +22 -0
- code_constraints-0.1.0/tests/cases/enforce/immutable/python/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/csharp/README.md +104 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/csharp/inputs/src/Orders/CheckoutService.cs +17 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/csharp/inputs/src/Orders/Models.cs +15 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/csharp/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/julia/README.md +103 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/julia/inputs/src/orders/Orders.jl +28 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/julia/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/lua/README.md +104 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/lua/inputs/src/orders/checkout.lua +20 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/lua/inputs/src/orders/models.lua +19 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/lua/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/odin/README.md +103 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/odin/inputs/src/orders/checkout.odin +25 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/odin/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/python/README.md +108 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/python/inputs/src/orders/checkout.py +17 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/python/inputs/src/orders/models.py +8 -0
- code_constraints-0.1.0/tests/cases/enforce/no-instantiation/python/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/csharp/README.md +105 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/csharp/inputs/src/Orders/AnnotatedReceipt.cs +14 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/csharp/inputs/src/Orders/DiscountedReceipt.cs +9 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/csharp/inputs/src/Orders/Receipt.cs +12 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/csharp/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/julia/README.md +107 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/julia/inputs/src/orders/Orders.jl +20 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/julia/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/lua/README.md +109 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/lua/inputs/src/orders/annotated.lua +15 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/lua/inputs/src/orders/discounted.lua +10 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/lua/inputs/src/orders/receipt.lua +11 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/lua/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/odin/README.md +107 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/odin/inputs/src/orders/receipt.odin +20 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/odin/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/python/README.md +105 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/python/inputs/src/orders/annotated.py +10 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/python/inputs/src/orders/discounted.py +9 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/python/inputs/src/orders/receipt.py +9 -0
- code_constraints-0.1.0/tests/cases/enforce/sealed/python/outputs/findings.json +7 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/changed/README.md +106 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/changed/inputs/baseline/Orders/Billing.cs +14 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/changed/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/changed/inputs/src/Orders/Billing.cs +14 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/changed/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/reformat/README.md +99 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/reformat/inputs/baseline/Orders/Billing.cs +14 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/reformat/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/reformat/inputs/src/Orders/Billing.cs +22 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/reformat/outputs/lock_violations.json +1 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/unlocked/README.md +99 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/unlocked/inputs/baseline/Orders/Billing.cs +14 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/unlocked/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/unlocked/inputs/src/Orders/Billing.cs +13 -0
- code_constraints-0.1.0/tests/cases/lock/locked/csharp/unlocked/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/changed/README.md +106 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/changed/inputs/baseline/billing/Invoice.jl +13 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/changed/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/changed/inputs/src/billing/Invoice.jl +13 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/changed/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/reformat/README.md +97 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/reformat/inputs/baseline/billing/Invoice.jl +13 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/reformat/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/reformat/inputs/src/billing/Invoice.jl +17 -0
- code_constraints-0.1.0/tests/cases/lock/locked/julia/reformat/outputs/lock_violations.json +1 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/changed/README.md +106 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/changed/inputs/baseline/billing/invoice.lua +15 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/changed/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/changed/inputs/src/billing/invoice.lua +15 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/changed/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/reformat/README.md +97 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/reformat/inputs/baseline/billing/invoice.lua +15 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/reformat/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/reformat/inputs/src/billing/invoice.lua +19 -0
- code_constraints-0.1.0/tests/cases/lock/locked/lua/reformat/outputs/lock_violations.json +1 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/changed/README.md +106 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/changed/inputs/baseline/billing/invoice.odin +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/changed/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/changed/inputs/src/billing/invoice.odin +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/changed/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/reformat/README.md +107 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/reformat/inputs/baseline/billing/invoice.odin +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/reformat/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/reformat/inputs/src/billing/invoice.odin +20 -0
- code_constraints-0.1.0/tests/cases/lock/locked/odin/reformat/outputs/lock_violations.json +1 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/changed/README.md +106 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/changed/inputs/baseline/orders/billing.py +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/changed/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/changed/inputs/src/orders/billing.py +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/changed/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/glob/README.md +99 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/glob/inputs/baseline/orders/pricing.py +4 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/glob/inputs/case.yaml +3 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/glob/inputs/src/orders/pricing.py +4 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/glob/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/missing/README.md +93 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/missing/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/missing/inputs/src/orders/billing.py +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/missing/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/reformat/README.md +101 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/reformat/inputs/baseline/orders/billing.py +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/reformat/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/reformat/inputs/src/orders/billing.py +20 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/reformat/outputs/lock_violations.json +1 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/removed/README.md +99 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/removed/inputs/baseline/orders/billing.py +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/removed/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/removed/inputs/src/orders/billing.py +7 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/removed/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/unlocked/README.md +99 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/unlocked/inputs/baseline/orders/billing.py +11 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/unlocked/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/unlocked/inputs/src/orders/billing.py +10 -0
- code_constraints-0.1.0/tests/cases/lock/locked/python/unlocked/outputs/lock_violations.json +6 -0
- code_constraints-0.1.0/tests/cases/reference/gate/csharp/README.md +119 -0
- code_constraints-0.1.0/tests/cases/reference/gate/csharp/inputs/baseline/Catalog/Author.cs +14 -0
- code_constraints-0.1.0/tests/cases/reference/gate/csharp/inputs/baseline/Catalog/Book.cs +8 -0
- code_constraints-0.1.0/tests/cases/reference/gate/csharp/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/reference/gate/csharp/inputs/src/Catalog/Author.cs +17 -0
- code_constraints-0.1.0/tests/cases/reference/gate/csharp/inputs/src/Catalog/Book.cs +9 -0
- code_constraints-0.1.0/tests/cases/reference/gate/csharp/outputs/deviations.json +21 -0
- code_constraints-0.1.0/tests/cases/reference/gate/julia/README.md +117 -0
- code_constraints-0.1.0/tests/cases/reference/gate/julia/inputs/baseline/catalog/Catalog.jl +12 -0
- code_constraints-0.1.0/tests/cases/reference/gate/julia/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/reference/gate/julia/inputs/src/catalog/Catalog.jl +17 -0
- code_constraints-0.1.0/tests/cases/reference/gate/julia/outputs/deviations.json +21 -0
- code_constraints-0.1.0/tests/cases/reference/gate/lua/README.md +125 -0
- code_constraints-0.1.0/tests/cases/reference/gate/lua/inputs/baseline/catalog/book.lua +13 -0
- code_constraints-0.1.0/tests/cases/reference/gate/lua/inputs/baseline/catalog/series.lua +6 -0
- code_constraints-0.1.0/tests/cases/reference/gate/lua/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/reference/gate/lua/inputs/src/catalog/book.lua +15 -0
- code_constraints-0.1.0/tests/cases/reference/gate/lua/outputs/deviations.json +26 -0
- code_constraints-0.1.0/tests/cases/reference/gate/odin/README.md +117 -0
- code_constraints-0.1.0/tests/cases/reference/gate/odin/inputs/baseline/catalog/book.odin +10 -0
- code_constraints-0.1.0/tests/cases/reference/gate/odin/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/reference/gate/odin/inputs/src/catalog/book.odin +15 -0
- code_constraints-0.1.0/tests/cases/reference/gate/odin/outputs/deviations.json +21 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/README.md +135 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/inputs/baseline/catalog/author.py +12 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/inputs/baseline/catalog/book.py +3 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/inputs/baseline/catalog/legacy.py +3 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/inputs/src/catalog/author.py +15 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/inputs/src/catalog/book.py +5 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/inputs/src/catalog/series.py +3 -0
- code_constraints-0.1.0/tests/cases/reference/gate/python/outputs/deviations.json +30 -0
- code_constraints-0.1.0/tests/cases/reference/gate/svelte/README.md +120 -0
- code_constraints-0.1.0/tests/cases/reference/gate/svelte/inputs/baseline/lib/cart.ts +8 -0
- code_constraints-0.1.0/tests/cases/reference/gate/svelte/inputs/baseline/routes/CartView.svelte +7 -0
- code_constraints-0.1.0/tests/cases/reference/gate/svelte/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/reference/gate/svelte/inputs/src/lib/cart.ts +8 -0
- code_constraints-0.1.0/tests/cases/reference/gate/svelte/inputs/src/routes/CartView.svelte +8 -0
- code_constraints-0.1.0/tests/cases/reference/gate/svelte/outputs/deviations.json +22 -0
- code_constraints-0.1.0/tests/cases/reference/gate/typescript/README.md +123 -0
- code_constraints-0.1.0/tests/cases/reference/gate/typescript/inputs/baseline/catalog/book.ts +13 -0
- code_constraints-0.1.0/tests/cases/reference/gate/typescript/inputs/case.yaml +2 -0
- code_constraints-0.1.0/tests/cases/reference/gate/typescript/inputs/src/catalog/book.ts +17 -0
- code_constraints-0.1.0/tests/cases/reference/gate/typescript/outputs/deviations.json +25 -0
- code_constraints-0.1.0/tests/fixtures/csharp_demo/Animals.cs +46 -0
- code_constraints-0.1.0/tests/fixtures/csharp_demo/Store.cs +47 -0
- code_constraints-0.1.0/tests/fixtures/csharp_rules/Shop.cs +51 -0
- code_constraints-0.1.0/tests/fixtures/julia_demo/billing/invoice.jl +36 -0
- code_constraints-0.1.0/tests/fixtures/lua_demo/billing/invoice.lua +39 -0
- code_constraints-0.1.0/tests/fixtures/odin_demo/billing/invoice.odin +41 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/.cdec/.gitignore +1 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/.cdec/README.md +25 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/.cdec/reference.xmi +88 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/.cdec/rules.yaml +128 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/animals/__init__.py +0 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/animals/base.py +37 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/store/__init__.py +0 -0
- code_constraints-0.1.0/tests/fixtures/python_demo/store/cart.py +22 -0
- code_constraints-0.1.0/tests/fixtures/python_rules/shop.py +50 -0
- code_constraints-0.1.0/tests/fixtures/svelte_demo/src/components/Badge.svelte +9 -0
- code_constraints-0.1.0/tests/fixtures/svelte_demo/src/components/CartView.svelte +21 -0
- code_constraints-0.1.0/tests/fixtures/svelte_demo/src/lib/store.ts +16 -0
- code_constraints-0.1.0/tests/fixtures/typescript_demo/zoo/animals/animal.ts +30 -0
- code_constraints-0.1.0/tests/fixtures/typescript_demo/zoo/store/cart.ts +35 -0
- code_constraints-0.1.0/tests/test_annotations.py +112 -0
- code_constraints-0.1.0/tests/test_case_folders.py +56 -0
- code_constraints-0.1.0/tests/test_csharp_parser.py +366 -0
- code_constraints-0.1.0/tests/test_depstamp.py +79 -0
- code_constraints-0.1.0/tests/test_diff.py +219 -0
- code_constraints-0.1.0/tests/test_enforce.py +168 -0
- code_constraints-0.1.0/tests/test_exceptions_cli.py +395 -0
- code_constraints-0.1.0/tests/test_graph_model.py +514 -0
- code_constraints-0.1.0/tests/test_julia_parser.py +154 -0
- code_constraints-0.1.0/tests/test_lint_cli.py +447 -0
- code_constraints-0.1.0/tests/test_lint_engine.py +610 -0
- code_constraints-0.1.0/tests/test_lock_cli.py +350 -0
- code_constraints-0.1.0/tests/test_lock_engine.py +297 -0
- code_constraints-0.1.0/tests/test_lock_fingerprint.py +403 -0
- code_constraints-0.1.0/tests/test_lua_parser.py +132 -0
- code_constraints-0.1.0/tests/test_mcp_server.py +456 -0
- code_constraints-0.1.0/tests/test_model_io.py +126 -0
- code_constraints-0.1.0/tests/test_new_language_engines.py +225 -0
- code_constraints-0.1.0/tests/test_odin_parser.py +124 -0
- code_constraints-0.1.0/tests/test_proposal_api.py +133 -0
- code_constraints-0.1.0/tests/test_python_parser.py +234 -0
- code_constraints-0.1.0/tests/test_reference_compare.py +159 -0
- code_constraints-0.1.0/tests/test_rule_tags.py +126 -0
- code_constraints-0.1.0/tests/test_rules_file.py +305 -0
- code_constraints-0.1.0/tests/test_serve_parse.py +121 -0
- code_constraints-0.1.0/tests/test_source_rules.py +270 -0
- code_constraints-0.1.0/tests/test_svelte_parser.py +93 -0
- code_constraints-0.1.0/tests/test_typescript_parser.py +129 -0
- code_constraints-0.1.0/tests/test_update.py +30 -0
- code_constraints-0.1.0/tests/test_waivers.py +295 -0
- code_constraints-0.1.0/tests/test_web_api.py +544 -0
- code_constraints-0.1.0/tests/test_xmi_roundtrip.py +359 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Normalize to LF in the repository regardless of a contributor's core.autocrlf.
|
|
2
|
+
* text=auto eol=lf
|
|
3
|
+
|
|
4
|
+
# Scripts must stay LF even in a Windows working tree, or they fail on Linux
|
|
5
|
+
# and in git-bash/WSL with "bad interpreter".
|
|
6
|
+
*.sh text eol=lf
|
|
7
|
+
Makefile text eol=lf
|
|
8
|
+
|
|
9
|
+
# Windows-native scripts keep CRLF.
|
|
10
|
+
*.ps1 text eol=crlf
|
|
11
|
+
*.bat text eol=crlf
|
|
12
|
+
*.cmd text eol=crlf
|
|
13
|
+
|
|
14
|
+
# Binary / generated — never touch, never diff.
|
|
15
|
+
*.png binary
|
|
16
|
+
*.jpg binary
|
|
17
|
+
*.ico binary
|
|
18
|
+
*.svg -text
|
|
19
|
+
package-lock.json -diff
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Build distributions
|
|
2
|
+
description: >
|
|
3
|
+
Build the Svelte UI, embed it in the package, then build and validate the
|
|
4
|
+
wheel + sdist. CI and the PyPI release both use this, so the artifact that is
|
|
5
|
+
tested is the artifact that ships.
|
|
6
|
+
|
|
7
|
+
inputs:
|
|
8
|
+
python-version:
|
|
9
|
+
description: Python version used to build the distributions.
|
|
10
|
+
required: false
|
|
11
|
+
default: "3.12"
|
|
12
|
+
node-version:
|
|
13
|
+
description: Node version used to build the frontend.
|
|
14
|
+
required: false
|
|
15
|
+
default: "20"
|
|
16
|
+
|
|
17
|
+
runs:
|
|
18
|
+
using: composite
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ inputs.python-version }}
|
|
23
|
+
|
|
24
|
+
- uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: ${{ inputs.node-version }}
|
|
27
|
+
cache: npm
|
|
28
|
+
cache-dependency-path: frontend/package-lock.json
|
|
29
|
+
|
|
30
|
+
# The wheel serves the web UI from package data. Without these two steps
|
|
31
|
+
# `python -m build` still succeeds, but produces an API-only wheel whose
|
|
32
|
+
# `/` returns a JSON placeholder instead of the app.
|
|
33
|
+
- name: Install frontend dependencies
|
|
34
|
+
run: npm ci
|
|
35
|
+
shell: bash
|
|
36
|
+
working-directory: frontend
|
|
37
|
+
|
|
38
|
+
- name: Build the web UI
|
|
39
|
+
run: npm run build
|
|
40
|
+
shell: bash
|
|
41
|
+
working-directory: frontend
|
|
42
|
+
|
|
43
|
+
- name: Embed the web UI in the package
|
|
44
|
+
run: make frontend-embed
|
|
45
|
+
shell: bash
|
|
46
|
+
|
|
47
|
+
- name: Build wheel + sdist
|
|
48
|
+
run: |
|
|
49
|
+
python -m pip install --upgrade pip build twine
|
|
50
|
+
python -m build
|
|
51
|
+
python -m twine check dist/*
|
|
52
|
+
shell: bash
|
|
53
|
+
|
|
54
|
+
# A packaging regression here is silent and, once published, permanent:
|
|
55
|
+
# PyPI does not allow re-uploading a version. Fail the build instead.
|
|
56
|
+
- name: Verify the wheel ships the web UI
|
|
57
|
+
run: python .github/scripts/verify_dist.py
|
|
58
|
+
shell: bash
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"""Check that the built distributions are complete before they are published.
|
|
2
|
+
|
|
3
|
+
A wheel that is missing the web UI still installs and still serves the API, so
|
|
4
|
+
nothing fails until a user opens `/` and gets a JSON placeholder. PyPI does not
|
|
5
|
+
allow re-uploading a version, so that mistake is permanent. This script turns it
|
|
6
|
+
into a failed build.
|
|
7
|
+
|
|
8
|
+
Run from the repository root, after `python -m build`:
|
|
9
|
+
|
|
10
|
+
python .github/scripts/verify_dist.py
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import re
|
|
16
|
+
import sys
|
|
17
|
+
import tarfile
|
|
18
|
+
import zipfile
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
STATIC = "code_constraints/web/_static"
|
|
22
|
+
SHIMS = "code_constraints/cli/_assets/shims"
|
|
23
|
+
|
|
24
|
+
problems: list[str] = []
|
|
25
|
+
notes: list[str] = []
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def fail(msg: str) -> None:
|
|
29
|
+
problems.append(msg)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def ok(msg: str) -> None:
|
|
33
|
+
notes.append(msg)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def find_one(pattern: str) -> Path | None:
|
|
37
|
+
matches = sorted(Path("dist").glob(pattern))
|
|
38
|
+
if not matches:
|
|
39
|
+
fail(f"no {pattern} in dist/")
|
|
40
|
+
return None
|
|
41
|
+
if len(matches) > 1:
|
|
42
|
+
fail(f"expected one {pattern} in dist/, found {len(matches)}: "
|
|
43
|
+
f"{[m.name for m in matches]} — stale artifacts would be published too")
|
|
44
|
+
return None
|
|
45
|
+
return matches[0]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
wheel = find_one("*.whl")
|
|
49
|
+
sdist = find_one("*.tar.gz")
|
|
50
|
+
|
|
51
|
+
if wheel is not None:
|
|
52
|
+
names = set(zipfile.ZipFile(wheel).namelist())
|
|
53
|
+
z = zipfile.ZipFile(wheel)
|
|
54
|
+
|
|
55
|
+
index = f"{STATIC}/index.html"
|
|
56
|
+
if index not in names:
|
|
57
|
+
fail(f"{wheel.name}: no {index} — the web UI was not built or not embedded. "
|
|
58
|
+
f"Run `npm run build` in frontend/, then `make frontend-embed`.")
|
|
59
|
+
else:
|
|
60
|
+
html = z.read(index).decode("utf-8")
|
|
61
|
+
|
|
62
|
+
# Every asset the page asks for must actually be in the wheel, or the
|
|
63
|
+
# app loads to a blank screen.
|
|
64
|
+
refs = [r for r in re.findall(r'(?:src|href)="([^"]+)"', html) if r.startswith("/")]
|
|
65
|
+
if not refs:
|
|
66
|
+
fail(f"{wheel.name}: index.html references no local assets — suspect build output")
|
|
67
|
+
for ref in refs:
|
|
68
|
+
member = STATIC + ref
|
|
69
|
+
if member not in names:
|
|
70
|
+
fail(f"{wheel.name}: index.html references {ref}, which is not in the wheel")
|
|
71
|
+
ok(f"web UI present, {len(refs)} referenced asset(s) all resolve")
|
|
72
|
+
|
|
73
|
+
# A dev-server entry point would 'work' locally and break for users.
|
|
74
|
+
for marker in ("/@vite/client", "/src/main", "__vite_ping"):
|
|
75
|
+
if marker in html:
|
|
76
|
+
fail(f"{wheel.name}: index.html contains {marker!r} — this is a dev build, "
|
|
77
|
+
f"not a production bundle")
|
|
78
|
+
|
|
79
|
+
js = [n for n in names if n.startswith(f"{STATIC}/assets/") and n.endswith(".js")]
|
|
80
|
+
if not js:
|
|
81
|
+
fail(f"{wheel.name}: no JS bundle under {STATIC}/assets/")
|
|
82
|
+
else:
|
|
83
|
+
ok(f"JS bundle: {', '.join(Path(n).name for n in sorted(js))}")
|
|
84
|
+
|
|
85
|
+
shims = sorted(n for n in names if n.startswith(SHIMS))
|
|
86
|
+
if len(shims) != 5:
|
|
87
|
+
fail(f"{wheel.name}: expected 5 rule shims under {SHIMS}, found {len(shims)}: {shims}")
|
|
88
|
+
else:
|
|
89
|
+
ok("all 5 rule shims present")
|
|
90
|
+
|
|
91
|
+
# These were removed with the Graphviz dependency; catch an accidental revival.
|
|
92
|
+
for gone in ("code_constraints/core/dot.py", "code_constraints/core/render.py"):
|
|
93
|
+
if gone in names:
|
|
94
|
+
fail(f"{wheel.name}: {gone} is back — the project must not depend on Graphviz")
|
|
95
|
+
|
|
96
|
+
if sdist is not None:
|
|
97
|
+
sdist_names = set(tarfile.open(sdist).getnames())
|
|
98
|
+
# `python -m build` builds the wheel FROM the sdist, so the embedded UI has
|
|
99
|
+
# to travel in the sdist or the wheel above was a lucky local build.
|
|
100
|
+
if not any(f"/src/{STATIC}/index.html" in n for n in sdist_names):
|
|
101
|
+
fail(f"{sdist.name}: the embedded web UI is missing from the sdist, so a wheel "
|
|
102
|
+
f"built from this sdist would have no UI")
|
|
103
|
+
else:
|
|
104
|
+
ok("sdist carries the embedded web UI")
|
|
105
|
+
|
|
106
|
+
for line in notes:
|
|
107
|
+
print(f" ok {line}")
|
|
108
|
+
for line in problems:
|
|
109
|
+
print(f" FAIL {line}", file=sys.stderr)
|
|
110
|
+
|
|
111
|
+
if problems:
|
|
112
|
+
print(f"\n{len(problems)} packaging problem(s) — refusing to publish.", file=sys.stderr)
|
|
113
|
+
sys.exit(1)
|
|
114
|
+
|
|
115
|
+
print("\nDistributions look complete.")
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ci-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
verify:
|
|
15
|
+
name: lint + typecheck + tests (py${{ matrix.python-version }})
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
# The suite exercises real git history (git-info, diff against
|
|
25
|
+
# HEAD~1). The default fetch-depth of 1 leaves HEAD's parent object
|
|
26
|
+
# missing, which makes those tests fail or vacuously skip.
|
|
27
|
+
fetch-depth: 0
|
|
28
|
+
|
|
29
|
+
- uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: ${{ matrix.python-version }}
|
|
32
|
+
cache: pip
|
|
33
|
+
cache-dependency-path: pyproject.toml
|
|
34
|
+
|
|
35
|
+
- name: Install
|
|
36
|
+
run: |
|
|
37
|
+
python -m pip install --upgrade pip
|
|
38
|
+
python -m pip install -e ".[dev,mcp]"
|
|
39
|
+
|
|
40
|
+
- name: Tests (pytest)
|
|
41
|
+
run: python -m pytest -q
|
|
42
|
+
|
|
43
|
+
# Advisory, not blocking. Both gates were already failing before this
|
|
44
|
+
# repo was split out: mypy reports 112 errors, and ruff reports ~366
|
|
45
|
+
# (mostly UP045 Optional[X] -> X | None, plus B008 against typer's
|
|
46
|
+
# `= typer.Option(...)` idiom, which is a false positive for a CLI).
|
|
47
|
+
# `dev` pins ruff>=0.6 / mypy>=1.10 unbounded, so a fresh install also
|
|
48
|
+
# picks up newer default rules. Clear the backlog, then drop
|
|
49
|
+
# continue-on-error to make these real gates again.
|
|
50
|
+
- name: Lint (ruff) [advisory]
|
|
51
|
+
continue-on-error: true
|
|
52
|
+
run: python -m ruff check src tests
|
|
53
|
+
|
|
54
|
+
- name: Type-check (mypy) [advisory]
|
|
55
|
+
continue-on-error: true
|
|
56
|
+
run: python -m mypy src
|
|
57
|
+
|
|
58
|
+
frontend:
|
|
59
|
+
name: frontend build + svelte-check
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/checkout@v4
|
|
63
|
+
|
|
64
|
+
- uses: actions/setup-node@v4
|
|
65
|
+
with:
|
|
66
|
+
node-version: "20"
|
|
67
|
+
cache: npm
|
|
68
|
+
cache-dependency-path: frontend/package-lock.json
|
|
69
|
+
|
|
70
|
+
- name: Install
|
|
71
|
+
run: npm ci
|
|
72
|
+
working-directory: frontend
|
|
73
|
+
|
|
74
|
+
- name: Type-check
|
|
75
|
+
run: npm run check
|
|
76
|
+
working-directory: frontend
|
|
77
|
+
|
|
78
|
+
- name: Build
|
|
79
|
+
run: npm run build
|
|
80
|
+
working-directory: frontend
|
|
81
|
+
|
|
82
|
+
# Builds exactly the way the release does, so a packaging break shows up on
|
|
83
|
+
# the pull request instead of on a tag that cannot be re-published.
|
|
84
|
+
build-dist:
|
|
85
|
+
name: build wheel + sdist (with web UI)
|
|
86
|
+
runs-on: ubuntu-latest
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/checkout@v4
|
|
89
|
+
|
|
90
|
+
- uses: ./.github/actions/build-dist
|
|
91
|
+
|
|
92
|
+
- uses: actions/upload-artifact@v4
|
|
93
|
+
with:
|
|
94
|
+
name: dist
|
|
95
|
+
path: dist/
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
# Publishes on a version tag (v0.1.0), or manually. Uses PyPI Trusted
|
|
4
|
+
# Publishing (OIDC) — no API token is stored in the repository. Configure the
|
|
5
|
+
# publisher once at https://pypi.org/manage/project/code-constraints/settings/publishing/
|
|
6
|
+
# owner: fleskovar repo: code-constraints
|
|
7
|
+
# workflow: publish.yml environment: pypi
|
|
8
|
+
#
|
|
9
|
+
# `ci.yml` runs on branches and pull requests, not on tags, so this workflow
|
|
10
|
+
# runs the test suite itself. A PyPI version cannot be re-uploaded, so every
|
|
11
|
+
# gate has to pass before the upload step, not after.
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
tags: ["v*"]
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: publish-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: false
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
test:
|
|
26
|
+
name: tests (py${{ matrix.python-version }})
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
strategy:
|
|
29
|
+
fail-fast: true
|
|
30
|
+
matrix:
|
|
31
|
+
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
with:
|
|
35
|
+
# The suite exercises real git history (git-info, diff against
|
|
36
|
+
# HEAD~1). The default fetch-depth of 1 leaves HEAD's parent object
|
|
37
|
+
# missing, which makes those tests fail or vacuously skip.
|
|
38
|
+
fetch-depth: 0
|
|
39
|
+
|
|
40
|
+
- uses: actions/setup-python@v5
|
|
41
|
+
with:
|
|
42
|
+
python-version: ${{ matrix.python-version }}
|
|
43
|
+
cache: pip
|
|
44
|
+
cache-dependency-path: pyproject.toml
|
|
45
|
+
|
|
46
|
+
- name: Install
|
|
47
|
+
run: |
|
|
48
|
+
python -m pip install --upgrade pip
|
|
49
|
+
python -m pip install -e ".[dev,mcp]"
|
|
50
|
+
|
|
51
|
+
- name: Tests
|
|
52
|
+
run: python -m pytest -q
|
|
53
|
+
|
|
54
|
+
build:
|
|
55
|
+
name: build distributions
|
|
56
|
+
needs: test
|
|
57
|
+
runs-on: ubuntu-latest
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/checkout@v4
|
|
60
|
+
|
|
61
|
+
# A tag that disagrees with pyproject.toml publishes the wrong version
|
|
62
|
+
# under the right name, and it cannot be taken back.
|
|
63
|
+
- name: Check the tag matches the package version
|
|
64
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
65
|
+
run: |
|
|
66
|
+
tag="${GITHUB_REF_NAME#v}"
|
|
67
|
+
pkg=$(python3 -c "import tomllib,pathlib; print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])")
|
|
68
|
+
echo "tag=$tag pyproject=$pkg"
|
|
69
|
+
if [ "$tag" != "$pkg" ]; then
|
|
70
|
+
echo "::error::tag v$tag does not match pyproject version $pkg"
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
- uses: ./.github/actions/build-dist
|
|
75
|
+
|
|
76
|
+
- uses: actions/upload-artifact@v4
|
|
77
|
+
with:
|
|
78
|
+
name: dist
|
|
79
|
+
path: dist/
|
|
80
|
+
|
|
81
|
+
publish:
|
|
82
|
+
name: upload to PyPI
|
|
83
|
+
needs: build
|
|
84
|
+
runs-on: ubuntu-latest
|
|
85
|
+
environment: pypi
|
|
86
|
+
permissions:
|
|
87
|
+
id-token: write # required for Trusted Publishing
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/download-artifact@v4
|
|
90
|
+
with:
|
|
91
|
+
name: dist
|
|
92
|
+
path: dist/
|
|
93
|
+
|
|
94
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.venv/
|
|
6
|
+
venv/
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
.mypy_cache/
|
|
9
|
+
.ruff_cache/
|
|
10
|
+
dist/
|
|
11
|
+
build/
|
|
12
|
+
|
|
13
|
+
# code-constraints cache & default script output
|
|
14
|
+
.cdec_cache/
|
|
15
|
+
out/
|
|
16
|
+
|
|
17
|
+
# Node / Svelte
|
|
18
|
+
node_modules/
|
|
19
|
+
frontend/dist/
|
|
20
|
+
frontend/.svelte-kit/
|
|
21
|
+
|
|
22
|
+
# IDE
|
|
23
|
+
.vscode/
|
|
24
|
+
.idea/
|
|
25
|
+
|
|
26
|
+
# OS
|
|
27
|
+
.DS_Store
|
|
28
|
+
Thumbs.db
|
|
29
|
+
|
|
30
|
+
# Claude Code: local config and session state are private. The agents/skills
|
|
31
|
+
# that ship with the package live in src/code_constraints/cli/_assets/.
|
|
32
|
+
.claude/
|
|
33
|
+
.mcp.json
|
|
34
|
+
.hcm
|
|
35
|
+
CLAUDE.md
|
|
36
|
+
# Built SPA copied into the package by `make frontend-embed` for packaging.
|
|
37
|
+
src/code_constraints/web/_static/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 fleskovar
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# code-constraints (cdec) — development, build, and packaging entry points.
|
|
2
|
+
#
|
|
3
|
+
# Recipes run through `sh`. On Windows use Git Bash (or any shell that provides
|
|
4
|
+
# `sh` on PATH) so the venv-layout detection and the recipe bodies behave.
|
|
5
|
+
#
|
|
6
|
+
# make setup one-time development environment (venv + deps + frontend)
|
|
7
|
+
# make test run the test suite
|
|
8
|
+
# make dist build the wheel + sdist into dist/
|
|
9
|
+
# make help list every target
|
|
10
|
+
#
|
|
11
|
+
# Override the interpreter or venv location on the command line:
|
|
12
|
+
# make setup BASE_PYTHON=python3.12 VENV=/tmp/cdec-venv
|
|
13
|
+
|
|
14
|
+
SHELL := /bin/sh
|
|
15
|
+
.DEFAULT_GOAL := help
|
|
16
|
+
|
|
17
|
+
# ---------------------------------------------------------------------------
|
|
18
|
+
# Layout / tool discovery
|
|
19
|
+
# ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
VENV ?= .venv
|
|
22
|
+
|
|
23
|
+
# Windows venvs put executables in Scripts/ and keep the .exe suffix.
|
|
24
|
+
ifeq ($(OS),Windows_NT)
|
|
25
|
+
VENV_BIN := $(VENV)/Scripts
|
|
26
|
+
PY := $(VENV_BIN)/python.exe
|
|
27
|
+
BASE_PYTHON ?= python
|
|
28
|
+
else
|
|
29
|
+
VENV_BIN := $(VENV)/bin
|
|
30
|
+
PY := $(VENV_BIN)/python
|
|
31
|
+
BASE_PYTHON ?= python3
|
|
32
|
+
endif
|
|
33
|
+
|
|
34
|
+
PIP := $(PY) -m pip
|
|
35
|
+
CDEC := $(PY) -m code_constraints.cli
|
|
36
|
+
|
|
37
|
+
FRONTEND := frontend
|
|
38
|
+
NPM ?= npm
|
|
39
|
+
|
|
40
|
+
# `serve` defaults. Port 8000 is administratively reserved by http.sys on some
|
|
41
|
+
# Windows machines, so the project default is 8765 (see CLAUDE.md).
|
|
42
|
+
HOST ?= 127.0.0.1
|
|
43
|
+
PORT ?= 8765
|
|
44
|
+
|
|
45
|
+
.PHONY: help venv setup dev install-dev install install-pipx uninstall \
|
|
46
|
+
frontend-deps frontend-build frontend-check frontend clean-frontend \
|
|
47
|
+
frontend-embed build dist package check-dist test test-cov lint format typecheck \
|
|
48
|
+
verify test-cases test-case debug-case update-cases demo serve clean clean-venv distclean
|
|
49
|
+
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Help
|
|
52
|
+
# ---------------------------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
help: ## Show this help
|
|
55
|
+
@echo "code-constraints (cdec) - make targets"
|
|
56
|
+
@echo
|
|
57
|
+
@grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) \
|
|
58
|
+
| sort \
|
|
59
|
+
| awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}'
|
|
60
|
+
@echo
|
|
61
|
+
@echo "Variables: VENV=$(VENV) BASE_PYTHON=$(BASE_PYTHON) HOST=$(HOST) PORT=$(PORT)"
|
|
62
|
+
|
|
63
|
+
# ---------------------------------------------------------------------------
|
|
64
|
+
# Environment setup
|
|
65
|
+
# ---------------------------------------------------------------------------
|
|
66
|
+
|
|
67
|
+
venv: ## Create the virtualenv if it does not exist
|
|
68
|
+
@if [ ! -x "$(PY)" ]; then \
|
|
69
|
+
echo ">> creating virtualenv at $(VENV)"; \
|
|
70
|
+
$(BASE_PYTHON) -m venv "$(VENV)"; \
|
|
71
|
+
else \
|
|
72
|
+
echo ">> virtualenv already present at $(VENV)"; \
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
setup: venv install-dev frontend ## One-time dev environment: venv + editable install + frontend build
|
|
76
|
+
@echo
|
|
77
|
+
@echo "Ready. Next:"
|
|
78
|
+
@echo " make serve # http://$(HOST):$(PORT)"
|
|
79
|
+
@echo " make test"
|
|
80
|
+
@echo " make demo"
|
|
81
|
+
|
|
82
|
+
dev: setup ## Alias for `setup`
|
|
83
|
+
|
|
84
|
+
install-dev: venv ## Editable install with dev extras (the development version)
|
|
85
|
+
@echo ">> installing code-constraints (editable, dev + mcp extras)"
|
|
86
|
+
$(PIP) install --upgrade pip
|
|
87
|
+
$(PIP) install -e ".[dev,mcp]"
|
|
88
|
+
@echo ">> cdec available as: $(VENV_BIN)/cdec"
|
|
89
|
+
@echo ">> MCP server available as: $(VENV_BIN)/cdec-mcp"
|
|
90
|
+
|
|
91
|
+
install: venv frontend-embed ## Install from source into the venv (non-editable)
|
|
92
|
+
@echo ">> installing code-constraints from source (non-editable)"
|
|
93
|
+
$(PIP) install --upgrade pip
|
|
94
|
+
$(PIP) install .
|
|
95
|
+
@echo ">> cdec available as: $(VENV_BIN)/cdec"
|
|
96
|
+
|
|
97
|
+
install-pipx: frontend-embed ## Install the cdec CLI + MCP server globally from this checkout via pipx
|
|
98
|
+
@command -v pipx >/dev/null 2>&1 || { echo "pipx not found — see https://pipx.pypa.io"; exit 1; }
|
|
99
|
+
pipx install --force ".[mcp]"
|
|
100
|
+
@echo ">> cdec installed globally; run: cdec --help"
|
|
101
|
+
@echo ">> cdec-mcp on PATH too, so a harness .mcp.json can just say \"command\": \"cdec-mcp\""
|
|
102
|
+
|
|
103
|
+
uninstall: ## Remove code-constraints from the venv
|
|
104
|
+
-$(PIP) uninstall -y code-constraints
|
|
105
|
+
|
|
106
|
+
# ---------------------------------------------------------------------------
|
|
107
|
+
# Frontend (Svelte 5 + Vite)
|
|
108
|
+
# ---------------------------------------------------------------------------
|
|
109
|
+
|
|
110
|
+
frontend-deps: ## npm install for the frontend
|
|
111
|
+
@echo ">> installing frontend deps"
|
|
112
|
+
cd $(FRONTEND) && $(NPM) install
|
|
113
|
+
|
|
114
|
+
frontend-build: ## Build the Svelte SPA into frontend/dist
|
|
115
|
+
@echo ">> building frontend"
|
|
116
|
+
cd $(FRONTEND) && $(NPM) run build
|
|
117
|
+
|
|
118
|
+
frontend-check: ## Run svelte-check
|
|
119
|
+
cd $(FRONTEND) && $(NPM) run check
|
|
120
|
+
|
|
121
|
+
frontend: frontend-deps frontend-build ## Install frontend deps and build the SPA
|
|
122
|
+
|
|
123
|
+
# The wheel serves the SPA from package data, so the built bundle has to sit
|
|
124
|
+
# inside the package before hatchling collects it. Skipped (with a warning)
|
|
125
|
+
# when the bundle is not built, so `pip install .` on a bare clone still works.
|
|
126
|
+
EMBED := src/code_constraints/web/_static
|
|
127
|
+
|
|
128
|
+
frontend-embed: ## Copy frontend/dist into the package as web/_static
|
|
129
|
+
@rm -rf $(EMBED)
|
|
130
|
+
@if [ -d "$(FRONTEND)/dist" ]; then \
|
|
131
|
+
echo ">> embedding $(FRONTEND)/dist -> $(EMBED)"; \
|
|
132
|
+
mkdir -p $(EMBED) && cp -r $(FRONTEND)/dist/. $(EMBED)/; \
|
|
133
|
+
else \
|
|
134
|
+
echo "warning: $(FRONTEND)/dist not built - the wheel serves the API only"; \
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
clean-frontend: ## Remove frontend build output
|
|
138
|
+
rm -rf $(FRONTEND)/dist $(EMBED)
|
|
139
|
+
|
|
140
|
+
# ---------------------------------------------------------------------------
|
|
141
|
+
# Build / package
|
|
142
|
+
# ---------------------------------------------------------------------------
|
|
143
|
+
|
|
144
|
+
build: dist ## Alias for `dist`
|
|
145
|
+
|
|
146
|
+
dist: clean-dist frontend-build frontend-embed ## Build the wheel + sdist into dist/
|
|
147
|
+
@echo ">> building distributable"
|
|
148
|
+
$(PY) -m build
|
|
149
|
+
@echo
|
|
150
|
+
@ls -l dist
|
|
151
|
+
@echo
|
|
152
|
+
@echo "NOTE: the wheel ships the Python packages, the rule shims, the Claude"
|
|
153
|
+
@echo " assets, and the built SPA (as package data at web/_static), so"
|
|
154
|
+
@echo " an installed wheel serves the web UI at / as well as the API."
|
|
155
|
+
|
|
156
|
+
package: dist ## Alias for `dist`
|
|
157
|
+
|
|
158
|
+
check-dist: dist ## Build, then validate the artifacts with twine
|
|
159
|
+
@$(PIP) install --quiet twine
|
|
160
|
+
$(PY) -m twine check dist/*
|
|
161
|
+
|
|
162
|
+
clean-dist:
|
|
163
|
+
rm -rf dist build *.egg-info src/*.egg-info
|
|
164
|
+
|
|
165
|
+
# ---------------------------------------------------------------------------
|
|
166
|
+
# Quality gates
|
|
167
|
+
# ---------------------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
test: ## Run the test suite
|
|
170
|
+
$(PY) -m pytest
|
|
171
|
+
|
|
172
|
+
test-cov: ## Run the test suite with a coverage report
|
|
173
|
+
$(PY) -m pytest --cov=code_constraints --cov-report=term-missing
|
|
174
|
+
|
|
175
|
+
lint: ## Lint with ruff
|
|
176
|
+
$(PY) -m ruff check src tests
|
|
177
|
+
|
|
178
|
+
format: ## Auto-fix lint findings with ruff
|
|
179
|
+
$(PY) -m ruff check --fix src tests
|
|
180
|
+
|
|
181
|
+
typecheck: ## Type-check with mypy
|
|
182
|
+
$(PY) -m mypy src
|
|
183
|
+
|
|
184
|
+
verify: lint typecheck test ## Run lint + typecheck + tests
|
|
185
|
+
|
|
186
|
+
test-cases: ## Run every human-readable case folder under tests/cases/
|
|
187
|
+
$(PY) -m pytest tests/test_case_folders.py
|
|
188
|
+
|
|
189
|
+
test-case: ## Run one case folder: make test-case CASE=check/subclass-naming/python
|
|
190
|
+
$(PY) -m pytest "tests/test_case_folders.py::test_case[$(CASE)]"
|
|
191
|
+
|
|
192
|
+
debug-case: ## Debug one case folder under pdb: make debug-case CASE=...
|
|
193
|
+
$(PY) -m pytest "tests/test_case_folders.py::test_case[$(CASE)]" --pdb -s
|
|
194
|
+
|
|
195
|
+
update-cases: ## Regenerate every case baseline from current behaviour (REVIEW THE DIFF)
|
|
196
|
+
UPDATE_BASELINES=1 $(PY) -m pytest tests/test_case_folders.py
|
|
197
|
+
|
|
198
|
+
# ---------------------------------------------------------------------------
|
|
199
|
+
# Running
|
|
200
|
+
# ---------------------------------------------------------------------------
|
|
201
|
+
|
|
202
|
+
serve: ## Start the web server (HOST/PORT overridable)
|
|
203
|
+
@if [ ! -f "$(FRONTEND)/dist/index.html" ]; then \
|
|
204
|
+
echo "warning: $(FRONTEND)/dist not built — run 'make frontend-build'"; \
|
|
205
|
+
fi
|
|
206
|
+
$(CDEC) serve --host $(HOST) --port $(PORT)
|
|
207
|
+
|
|
208
|
+
# Every language with rule-tag support ships a demo with the same shape: a
|
|
209
|
+
# tagged billing slice, a committed lock, and one seeded conformance violation.
|
|
210
|
+
# See docs/languages/ for a guide per language.
|
|
211
|
+
DEMO_LANGS := python csharp odin lua julia
|
|
212
|
+
|
|
213
|
+
demo: ## Run `cdec check` against the bundled example projects
|
|
214
|
+
@echo "Every rule in .cdec/rules.yaml runs in one command, so this is the"
|
|
215
|
+
@echo "whole gate: architectural rules, tag conformance, locks and the"
|
|
216
|
+
@echo "reference check together."
|
|
217
|
+
@echo "(each demo carries one seeded violation - non-zero exit is expected)"
|
|
218
|
+
@echo
|
|
219
|
+
@for lang in $(DEMO_LANGS); do \
|
|
220
|
+
echo "--- $$lang"; \
|
|
221
|
+
$(CDEC) check --config examples/$${lang}_demo/.cdec --source examples/$${lang}_demo || true; \
|
|
222
|
+
echo; \
|
|
223
|
+
done
|
|
224
|
+
|
|
225
|
+
# ---------------------------------------------------------------------------
|
|
226
|
+
# Cleaning
|
|
227
|
+
# ---------------------------------------------------------------------------
|
|
228
|
+
|
|
229
|
+
clean: clean-dist ## Remove build artifacts and caches (keeps the venv)
|
|
230
|
+
rm -rf .pytest_cache .ruff_cache .mypy_cache .cdec_cache htmlcov .coverage
|
|
231
|
+
find . -type d -name __pycache__ -not -path "./$(VENV)/*" -not -path "./$(FRONTEND)/node_modules/*" -exec rm -rf {} + 2>/dev/null || true
|
|
232
|
+
|
|
233
|
+
clean-venv: ## Delete the virtualenv
|
|
234
|
+
rm -rf $(VENV)
|
|
235
|
+
|
|
236
|
+
distclean: clean clean-frontend clean-venv ## Remove everything generated, including node_modules
|
|
237
|
+
rm -rf $(FRONTEND)/node_modules
|